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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +3 -9
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/circuit/__init__.py +35 -10
  5. qiskit/circuit/{add_control.py → _add_control.py} +32 -12
  6. qiskit/circuit/_classical_resource_map.py +5 -3
  7. qiskit/circuit/barrier.py +3 -7
  8. qiskit/circuit/classical/expr/__init__.py +31 -3
  9. qiskit/circuit/classical/expr/constructors.py +236 -28
  10. qiskit/circuit/classical/expr/expr.py +104 -3
  11. qiskit/circuit/classical/expr/visitors.py +75 -0
  12. qiskit/circuit/classical/types/__init__.py +12 -8
  13. qiskit/circuit/classical/types/ordering.py +14 -7
  14. qiskit/circuit/classical/types/types.py +36 -0
  15. qiskit/circuit/commutation_checker.py +34 -7
  16. qiskit/circuit/controlflow/__init__.py +32 -1
  17. qiskit/circuit/controlflow/_builder_utils.py +9 -5
  18. qiskit/circuit/controlflow/box.py +163 -0
  19. qiskit/circuit/controlflow/break_loop.py +1 -1
  20. qiskit/circuit/controlflow/builder.py +139 -39
  21. qiskit/circuit/controlflow/continue_loop.py +1 -3
  22. qiskit/circuit/controlflow/control_flow.py +10 -0
  23. qiskit/circuit/controlflow/for_loop.py +2 -1
  24. qiskit/circuit/controlflow/if_else.py +3 -16
  25. qiskit/circuit/controlflow/switch_case.py +2 -8
  26. qiskit/circuit/controlflow/while_loop.py +2 -7
  27. qiskit/circuit/controlledgate.py +2 -4
  28. qiskit/circuit/delay.py +40 -11
  29. qiskit/circuit/duration.py +0 -15
  30. qiskit/circuit/gate.py +2 -4
  31. qiskit/circuit/instruction.py +2 -141
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +469 -154
  34. qiskit/circuit/library/arithmetic/__init__.py +16 -10
  35. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  36. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
  37. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  38. qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
  39. qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
  40. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
  41. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
  42. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
  43. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
  44. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
  45. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
  46. qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
  47. qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
  48. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  49. qiskit/circuit/library/blueprintcircuit.py +52 -16
  50. qiskit/circuit/library/data_preparation/initializer.py +1 -1
  51. qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
  52. qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
  53. qiskit/circuit/library/generalized_gates/gms.py +1 -1
  54. qiskit/circuit/library/generalized_gates/isometry.py +1 -1
  55. qiskit/circuit/library/generalized_gates/pauli.py +1 -2
  56. qiskit/circuit/library/generalized_gates/uc.py +97 -7
  57. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
  58. qiskit/circuit/library/generalized_gates/unitary.py +4 -2
  59. qiskit/circuit/library/graph_state.py +1 -0
  60. qiskit/circuit/library/hamiltonian_gate.py +1 -1
  61. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  62. qiskit/circuit/library/n_local/n_local.py +1 -1
  63. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  64. qiskit/circuit/library/overlap.py +2 -2
  65. qiskit/circuit/library/pauli_evolution.py +39 -24
  66. qiskit/circuit/library/phase_oracle.py +130 -51
  67. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  69. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  70. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  71. qiskit/circuit/library/standard_gates/h.py +4 -9
  72. qiskit/circuit/library/standard_gates/i.py +2 -2
  73. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  74. qiskit/circuit/library/standard_gates/p.py +15 -34
  75. qiskit/circuit/library/standard_gates/r.py +7 -10
  76. qiskit/circuit/library/standard_gates/rx.py +5 -15
  77. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  78. qiskit/circuit/library/standard_gates/ry.py +5 -17
  79. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  80. qiskit/circuit/library/standard_gates/rz.py +5 -17
  81. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  82. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  83. qiskit/circuit/library/standard_gates/s.py +6 -15
  84. qiskit/circuit/library/standard_gates/swap.py +4 -11
  85. qiskit/circuit/library/standard_gates/sx.py +7 -12
  86. qiskit/circuit/library/standard_gates/t.py +6 -7
  87. qiskit/circuit/library/standard_gates/u.py +2 -10
  88. qiskit/circuit/library/standard_gates/u1.py +5 -16
  89. qiskit/circuit/library/standard_gates/u2.py +2 -6
  90. qiskit/circuit/library/standard_gates/u3.py +3 -11
  91. qiskit/circuit/library/standard_gates/x.py +14 -62
  92. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  94. qiskit/circuit/library/standard_gates/y.py +4 -9
  95. qiskit/circuit/library/standard_gates/z.py +5 -15
  96. qiskit/circuit/measure.py +11 -2
  97. qiskit/circuit/parameterexpression.py +11 -0
  98. qiskit/circuit/quantumcircuit.py +890 -564
  99. qiskit/circuit/random/utils.py +12 -6
  100. qiskit/circuit/reset.py +5 -2
  101. qiskit/circuit/singleton.py +5 -11
  102. qiskit/circuit/store.py +0 -8
  103. qiskit/circuit/tools/pi_check.py +3 -0
  104. qiskit/compiler/__init__.py +1 -7
  105. qiskit/compiler/transpiler.py +38 -196
  106. qiskit/converters/circuit_to_dag.py +6 -4
  107. qiskit/converters/circuit_to_dagdependency.py +0 -2
  108. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  109. qiskit/converters/circuit_to_gate.py +1 -1
  110. qiskit/converters/circuit_to_instruction.py +16 -29
  111. qiskit/converters/dag_to_circuit.py +7 -8
  112. qiskit/converters/dag_to_dagdependency.py +0 -1
  113. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  114. qiskit/converters/dagdependency_to_circuit.py +0 -6
  115. qiskit/converters/dagdependency_to_dag.py +0 -6
  116. qiskit/dagcircuit/collect_blocks.py +32 -20
  117. qiskit/dagcircuit/dagdependency.py +3 -37
  118. qiskit/dagcircuit/dagdependency_v2.py +5 -82
  119. qiskit/dagcircuit/dagnode.py +14 -2
  120. qiskit/passmanager/__init__.py +24 -6
  121. qiskit/passmanager/passmanager.py +26 -24
  122. qiskit/primitives/__init__.py +44 -35
  123. qiskit/primitives/backend_estimator_v2.py +102 -23
  124. qiskit/primitives/backend_sampler_v2.py +5 -20
  125. qiskit/primitives/base/__init__.py +4 -4
  126. qiskit/primitives/base/base_estimator.py +77 -82
  127. qiskit/primitives/base/base_primitive_job.py +2 -2
  128. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  129. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  130. qiskit/primitives/base/base_sampler.py +52 -60
  131. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  132. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  133. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  134. qiskit/primitives/containers/bindings_array.py +3 -1
  135. qiskit/primitives/containers/bit_array.py +23 -0
  136. qiskit/primitives/containers/data_bin.py +3 -1
  137. qiskit/primitives/containers/observables_array.py +19 -2
  138. qiskit/primitives/statevector_sampler.py +6 -8
  139. qiskit/primitives/utils.py +14 -189
  140. qiskit/providers/__init__.py +4 -130
  141. qiskit/providers/backend.py +11 -314
  142. qiskit/providers/basic_provider/__init__.py +3 -1
  143. qiskit/providers/basic_provider/basic_provider.py +29 -9
  144. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  145. qiskit/providers/exceptions.py +0 -33
  146. qiskit/providers/fake_provider/__init__.py +0 -37
  147. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  148. qiskit/qasm2/__init__.py +21 -6
  149. qiskit/qasm2/export.py +2 -10
  150. qiskit/qasm2/parse.py +11 -25
  151. qiskit/qasm3/__init__.py +5 -1
  152. qiskit/qasm3/ast.py +44 -0
  153. qiskit/qasm3/exporter.py +65 -27
  154. qiskit/qasm3/printer.py +35 -4
  155. qiskit/qpy/__init__.py +162 -19
  156. qiskit/qpy/binary_io/__init__.py +0 -1
  157. qiskit/qpy/binary_io/circuits.py +96 -116
  158. qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
  159. qiskit/qpy/binary_io/schedules.py +61 -388
  160. qiskit/qpy/binary_io/value.py +159 -33
  161. qiskit/qpy/common.py +10 -7
  162. qiskit/qpy/formats.py +41 -0
  163. qiskit/qpy/interface.py +29 -62
  164. qiskit/qpy/type_keys.py +58 -221
  165. qiskit/quantum_info/analysis/distance.py +3 -1
  166. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  167. qiskit/quantum_info/operators/operator.py +6 -2
  168. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  169. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  170. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  171. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  172. qiskit/quantum_info/states/densitymatrix.py +16 -6
  173. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  174. qiskit/quantum_info/states/statevector.py +16 -6
  175. qiskit/result/__init__.py +5 -17
  176. qiskit/result/models.py +18 -11
  177. qiskit/result/result.py +38 -134
  178. qiskit/result/sampled_expval.py +1 -2
  179. qiskit/result/utils.py +3 -4
  180. qiskit/synthesis/__init__.py +21 -1
  181. qiskit/synthesis/arithmetic/__init__.py +3 -1
  182. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  183. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  184. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  185. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  186. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  187. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  188. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  189. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  190. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  191. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  192. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  193. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  194. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  195. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -0
  196. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  197. qiskit/synthesis/evolution/product_formula.py +44 -35
  198. qiskit/synthesis/evolution/qdrift.py +17 -24
  199. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  200. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  201. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  202. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  203. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  204. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  205. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  206. qiskit/synthesis/two_qubit/__init__.py +1 -0
  207. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  208. qiskit/transpiler/__init__.py +32 -232
  209. qiskit/transpiler/basepasses.py +20 -51
  210. qiskit/transpiler/layout.py +1 -1
  211. qiskit/transpiler/passes/__init__.py +4 -40
  212. qiskit/transpiler/passes/basis/basis_translator.py +5 -4
  213. qiskit/transpiler/passes/basis/decompose.py +1 -15
  214. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  215. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  216. qiskit/transpiler/passes/layout/apply_layout.py +4 -0
  217. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  218. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +3 -4
  219. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  220. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  221. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  222. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  223. qiskit/transpiler/passes/optimization/__init__.py +2 -3
  224. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  225. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  226. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  227. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  228. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  229. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  230. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  231. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  232. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  233. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  234. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  235. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  236. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  237. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  238. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +3 -2
  239. qiskit/transpiler/passes/routing/__init__.py +0 -1
  240. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  241. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  242. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  243. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  244. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  245. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  246. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  247. qiskit/transpiler/passes/scheduling/padding/base_padding.py +32 -4
  248. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +25 -63
  249. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +12 -4
  250. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  251. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  252. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  253. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +134 -62
  254. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  255. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  256. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  257. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  258. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  259. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  260. qiskit/transpiler/passes/utils/__init__.py +0 -1
  261. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  262. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  263. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  264. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  265. qiskit/transpiler/passmanager.py +13 -0
  266. qiskit/transpiler/passmanager_config.py +5 -81
  267. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  268. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  269. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +107 -322
  270. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  272. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  273. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  274. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  275. qiskit/transpiler/target.py +78 -524
  276. qiskit/user_config.py +8 -4
  277. qiskit/utils/__init__.py +13 -12
  278. qiskit/utils/deprecation.py +4 -112
  279. qiskit/utils/optionals.py +11 -4
  280. qiskit/utils/parallel.py +214 -87
  281. qiskit/utils/units.py +4 -1
  282. qiskit/visualization/__init__.py +3 -7
  283. qiskit/visualization/array.py +4 -1
  284. qiskit/visualization/bloch.py +1 -1
  285. qiskit/visualization/circuit/_utils.py +19 -19
  286. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  287. qiskit/visualization/circuit/matplotlib.py +13 -23
  288. qiskit/visualization/circuit/text.py +7 -3
  289. qiskit/visualization/counts_visualization.py +4 -0
  290. qiskit/visualization/dag_visualization.py +2 -1
  291. qiskit/visualization/gate_map.py +39 -154
  292. qiskit/visualization/library.py +4 -1
  293. qiskit/visualization/pass_manager_visualization.py +6 -2
  294. qiskit/visualization/state_visualization.py +19 -2
  295. qiskit/visualization/timeline/core.py +19 -13
  296. qiskit/visualization/timeline/interface.py +19 -18
  297. qiskit/visualization/timeline/plotters/matplotlib.py +4 -1
  298. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
  299. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/RECORD +303 -449
  300. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/WHEEL +1 -1
  301. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/entry_points.txt +8 -2
  302. qiskit/assembler/__init__.py +0 -42
  303. qiskit/assembler/assemble_circuits.py +0 -451
  304. qiskit/assembler/assemble_schedules.py +0 -367
  305. qiskit/assembler/disassemble.py +0 -310
  306. qiskit/assembler/run_config.py +0 -77
  307. qiskit/circuit/bit.py +0 -106
  308. qiskit/circuit/classicalfunction/__init__.py +0 -152
  309. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  310. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  311. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  312. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  313. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  314. qiskit/circuit/classicalfunction/types.py +0 -18
  315. qiskit/circuit/classicalfunction/utils.py +0 -91
  316. qiskit/circuit/classicalregister.py +0 -57
  317. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  318. qiskit/circuit/quantumregister.py +0 -75
  319. qiskit/circuit/register.py +0 -246
  320. qiskit/compiler/assembler.py +0 -689
  321. qiskit/compiler/scheduler.py +0 -109
  322. qiskit/compiler/sequencer.py +0 -71
  323. qiskit/primitives/backend_estimator.py +0 -486
  324. qiskit/primitives/backend_sampler.py +0 -222
  325. qiskit/primitives/estimator.py +0 -172
  326. qiskit/primitives/sampler.py +0 -162
  327. qiskit/providers/backend_compat.py +0 -507
  328. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  329. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  330. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  332. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  333. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  335. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  336. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  337. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  338. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  339. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  341. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  343. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  344. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  345. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  346. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  347. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  348. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  349. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  350. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  351. qiskit/providers/fake_provider/fake_1q.py +0 -91
  352. qiskit/providers/fake_provider/fake_backend.py +0 -165
  353. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  354. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  355. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  356. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  357. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  358. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  359. qiskit/providers/models/__init__.py +0 -89
  360. qiskit/providers/models/backendconfiguration.py +0 -1040
  361. qiskit/providers/models/backendproperties.py +0 -535
  362. qiskit/providers/models/backendstatus.py +0 -104
  363. qiskit/providers/models/jobstatus.py +0 -77
  364. qiskit/providers/models/pulsedefaults.py +0 -305
  365. qiskit/providers/provider.py +0 -95
  366. qiskit/pulse/__init__.py +0 -158
  367. qiskit/pulse/builder.py +0 -2262
  368. qiskit/pulse/calibration_entries.py +0 -381
  369. qiskit/pulse/channels.py +0 -227
  370. qiskit/pulse/configuration.py +0 -245
  371. qiskit/pulse/exceptions.py +0 -45
  372. qiskit/pulse/filters.py +0 -309
  373. qiskit/pulse/instruction_schedule_map.py +0 -424
  374. qiskit/pulse/instructions/__init__.py +0 -67
  375. qiskit/pulse/instructions/acquire.py +0 -150
  376. qiskit/pulse/instructions/delay.py +0 -71
  377. qiskit/pulse/instructions/directives.py +0 -154
  378. qiskit/pulse/instructions/frequency.py +0 -135
  379. qiskit/pulse/instructions/instruction.py +0 -270
  380. qiskit/pulse/instructions/phase.py +0 -152
  381. qiskit/pulse/instructions/play.py +0 -99
  382. qiskit/pulse/instructions/reference.py +0 -100
  383. qiskit/pulse/instructions/snapshot.py +0 -82
  384. qiskit/pulse/library/__init__.py +0 -97
  385. qiskit/pulse/library/continuous.py +0 -430
  386. qiskit/pulse/library/pulse.py +0 -148
  387. qiskit/pulse/library/samplers/__init__.py +0 -15
  388. qiskit/pulse/library/samplers/decorators.py +0 -295
  389. qiskit/pulse/library/samplers/strategies.py +0 -71
  390. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  391. qiskit/pulse/library/waveform.py +0 -136
  392. qiskit/pulse/macros.py +0 -262
  393. qiskit/pulse/parameter_manager.py +0 -445
  394. qiskit/pulse/parser.py +0 -314
  395. qiskit/pulse/reference_manager.py +0 -58
  396. qiskit/pulse/schedule.py +0 -1854
  397. qiskit/pulse/transforms/__init__.py +0 -106
  398. qiskit/pulse/transforms/alignments.py +0 -406
  399. qiskit/pulse/transforms/base_transforms.py +0 -71
  400. qiskit/pulse/transforms/canonicalization.py +0 -498
  401. qiskit/pulse/transforms/dag.py +0 -122
  402. qiskit/pulse/utils.py +0 -149
  403. qiskit/qobj/__init__.py +0 -75
  404. qiskit/qobj/common.py +0 -81
  405. qiskit/qobj/converters/__init__.py +0 -18
  406. qiskit/qobj/converters/lo_config.py +0 -177
  407. qiskit/qobj/converters/pulse_instruction.py +0 -897
  408. qiskit/qobj/pulse_qobj.py +0 -709
  409. qiskit/qobj/qasm_qobj.py +0 -708
  410. qiskit/qobj/utils.py +0 -46
  411. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  412. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  413. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  414. qiskit/result/mitigation/utils.py +0 -217
  415. qiskit/scheduler/__init__.py +0 -40
  416. qiskit/scheduler/config.py +0 -37
  417. qiskit/scheduler/lowering.py +0 -187
  418. qiskit/scheduler/methods/__init__.py +0 -15
  419. qiskit/scheduler/methods/basic.py +0 -140
  420. qiskit/scheduler/schedule_circuit.py +0 -69
  421. qiskit/scheduler/sequence.py +0 -104
  422. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  423. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  424. qiskit/transpiler/passes/calibration/builders.py +0 -20
  425. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  426. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  427. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  428. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  429. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  430. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  431. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  432. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  433. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  434. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  435. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  436. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  437. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  438. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  439. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  440. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  441. qiskit/utils/deprecate_pulse.py +0 -119
  442. qiskit/utils/multiprocessing.py +0 -56
  443. qiskit/visualization/pulse_v2/__init__.py +0 -21
  444. qiskit/visualization/pulse_v2/core.py +0 -901
  445. qiskit/visualization/pulse_v2/device_info.py +0 -173
  446. qiskit/visualization/pulse_v2/drawings.py +0 -253
  447. qiskit/visualization/pulse_v2/events.py +0 -254
  448. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  449. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  450. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  451. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  452. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  453. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  454. qiskit/visualization/pulse_v2/interface.py +0 -459
  455. qiskit/visualization/pulse_v2/layouts.py +0 -387
  456. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  457. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  458. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  459. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  460. qiskit/visualization/pulse_v2/types.py +0 -242
  461. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
  462. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
qiskit/pulse/utils.py DELETED
@@ -1,149 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2020.
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 for common pulse programming utilities."""
14
- from typing import List, Dict, Union, Sequence
15
- import warnings
16
-
17
- import numpy as np
18
-
19
- from qiskit.circuit import ParameterVector, Parameter
20
- from qiskit.circuit.parameterexpression import ParameterExpression
21
- from qiskit.pulse.exceptions import UnassignedDurationError, QiskitError, PulseError
22
-
23
-
24
- def format_meas_map(meas_map: List[List[int]]) -> Dict[int, List[int]]:
25
- """
26
- Return a mapping from qubit label to measurement group given the nested list meas_map returned
27
- by a backend configuration. (Qubits can not always be measured independently.) Sorts the
28
- measurement group for consistency.
29
-
30
- Args:
31
- meas_map: Groups of qubits that get measured together, for example: [[0, 1], [2, 3, 4]]
32
- Returns:
33
- Measure map in map format
34
- """
35
- qubit_mapping = {}
36
- for sublist in meas_map:
37
- sublist.sort()
38
- for q in sublist:
39
- qubit_mapping[q] = sublist
40
- return qubit_mapping
41
-
42
-
43
- def format_parameter_value(
44
- operand: ParameterExpression,
45
- decimal: int = 10,
46
- ) -> Union[ParameterExpression, complex]:
47
- """Convert ParameterExpression into the most suitable data type.
48
-
49
- Args:
50
- operand: Operand value in arbitrary data type including ParameterExpression.
51
- decimal: Number of digit to round returned value.
52
-
53
- Returns:
54
- Value cast to non-parameter data type, when possible.
55
- """
56
- if isinstance(operand, ParameterExpression):
57
- try:
58
- operand = operand.numeric()
59
- except TypeError:
60
- # Unassigned expression
61
- return operand
62
-
63
- # Return integer before calling the numpy round function.
64
- # The input value is multiplied by 10**decimals, rounds to an integer
65
- # and divided by 10**decimals. For a large enough integer,
66
- # this operation may introduce a rounding error in the float operations
67
- # and accidentally returns a float number.
68
- if isinstance(operand, int):
69
- return operand
70
-
71
- # Remove truncation error and convert the result into Python builtin type.
72
- # Value could originally contain a rounding error, e.g. 1.00000000001
73
- # which may occur during the parameter expression evaluation.
74
- evaluated = np.round(operand, decimals=decimal).item()
75
-
76
- if isinstance(evaluated, complex):
77
- if np.isclose(evaluated.imag, 0.0):
78
- evaluated = evaluated.real
79
- else:
80
- warnings.warn(
81
- "Assignment of complex values to ParameterExpression in Qiskit Pulse objects is "
82
- "now pending deprecation. This will align the Pulse module with other modules "
83
- "where such assignment wasn't possible to begin with. The typical use case for complex "
84
- "parameters in the module was the SymbolicPulse library. As of Qiskit-Terra "
85
- "0.23.0 all library pulses were converted from complex amplitude representation"
86
- " to real representation using two floats (amp,angle), as used in the "
87
- "ScalableSymbolicPulse class. This eliminated the need for complex parameters. "
88
- "Any use of complex parameters (and particularly custom-built pulses) should be "
89
- "converted in a similar fashion to avoid the use of complex parameters.",
90
- PendingDeprecationWarning,
91
- )
92
- return evaluated
93
- # Type cast integer-like float into Python builtin integer, after rounding.
94
- if evaluated.is_integer():
95
- return int(evaluated)
96
- return evaluated
97
-
98
-
99
- def instruction_duration_validation(duration: int):
100
- """Validate instruction duration.
101
-
102
- Args:
103
- duration: Instruction duration value to validate.
104
-
105
- Raises:
106
- UnassignedDurationError: When duration is unassigned.
107
- QiskitError: When invalid duration is assigned.
108
- """
109
- if isinstance(duration, ParameterExpression):
110
- raise UnassignedDurationError(
111
- f"Instruction duration {repr(duration)} is not assigned. "
112
- "Please bind all durations to an integer value before playing in the Schedule, "
113
- "or use ScheduleBlock to align instructions with unassigned duration."
114
- )
115
-
116
- if not isinstance(duration, (int, np.integer)) or duration < 0:
117
- raise QiskitError(
118
- f"Instruction duration must be a non-negative integer, got {duration} instead."
119
- )
120
-
121
-
122
- def _validate_parameter_vector(parameter: ParameterVector, value):
123
- """Validate parameter vector and its value."""
124
- if not isinstance(value, Sequence):
125
- raise PulseError(
126
- f"Parameter vector '{parameter.name}' has length {len(parameter)},"
127
- f" but was assigned to {value}."
128
- )
129
- if len(parameter) != len(value):
130
- raise PulseError(
131
- f"Parameter vector '{parameter.name}' has length {len(parameter)},"
132
- f" but was assigned to {len(value)} values."
133
- )
134
-
135
-
136
- def _validate_single_parameter(parameter: Parameter, value):
137
- """Validate single parameter and its value."""
138
- if not isinstance(value, (int, float, complex, ParameterExpression)):
139
- raise PulseError(f"Parameter '{parameter.name}' is not assignable to {value}.")
140
-
141
-
142
- def _validate_parameter_value(parameter, value):
143
- """Validate parameter and its value."""
144
- if isinstance(parameter, ParameterVector):
145
- _validate_parameter_vector(parameter, value)
146
- return True
147
- else:
148
- _validate_single_parameter(parameter, value)
149
- return False
qiskit/qobj/__init__.py DELETED
@@ -1,75 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2017, 2018.
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
- """
14
- =========================
15
- Qobj (:mod:`qiskit.qobj`)
16
- =========================
17
-
18
- .. currentmodule:: qiskit.qobj
19
-
20
- Base
21
- ====
22
-
23
- .. autosummary::
24
- :toctree: ../stubs/
25
-
26
- QobjExperimentHeader
27
- QobjHeader
28
-
29
- Qasm
30
- ====
31
-
32
- .. autosummary::
33
- :toctree: ../stubs/
34
-
35
- QasmQobj
36
- QasmQobjInstruction
37
- QasmQobjExperimentConfig
38
- QasmQobjExperiment
39
- QasmQobjConfig
40
- QasmExperimentCalibrations
41
- GateCalibration
42
-
43
- Pulse
44
- =====
45
-
46
- .. autosummary::
47
- :toctree: ../stubs/
48
-
49
- PulseQobj
50
- PulseQobjInstruction
51
- PulseQobjExperimentConfig
52
- PulseQobjExperiment
53
- PulseQobjConfig
54
- QobjMeasurementOption
55
- PulseLibraryItem
56
- """
57
-
58
- from qiskit.qobj.common import QobjExperimentHeader
59
- from qiskit.qobj.common import QobjHeader
60
-
61
- from qiskit.qobj.pulse_qobj import PulseQobj
62
- from qiskit.qobj.pulse_qobj import PulseQobjInstruction
63
- from qiskit.qobj.pulse_qobj import PulseQobjExperimentConfig
64
- from qiskit.qobj.pulse_qobj import PulseQobjExperiment
65
- from qiskit.qobj.pulse_qobj import PulseQobjConfig
66
- from qiskit.qobj.pulse_qobj import QobjMeasurementOption
67
- from qiskit.qobj.pulse_qobj import PulseLibraryItem
68
-
69
- from qiskit.qobj.qasm_qobj import GateCalibration
70
- from qiskit.qobj.qasm_qobj import QasmExperimentCalibrations
71
- from qiskit.qobj.qasm_qobj import QasmQobj
72
- from qiskit.qobj.qasm_qobj import QasmQobjInstruction
73
- from qiskit.qobj.qasm_qobj import QasmQobjExperiment
74
- from qiskit.qobj.qasm_qobj import QasmQobjConfig
75
- from qiskit.qobj.qasm_qobj import QasmQobjExperimentConfig
qiskit/qobj/common.py DELETED
@@ -1,81 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2020.
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 common Qobj classes."""
14
- from types import SimpleNamespace
15
-
16
- from qiskit.utils import deprecate_func
17
-
18
-
19
- class QobjDictField(SimpleNamespace):
20
- """A class used to represent a dictionary field in Qobj
21
-
22
- Exists as a backwards compatibility shim around a dictionary for Qobjs
23
- previously constructed using marshmallow.
24
- """
25
-
26
- @deprecate_func(
27
- since="1.2",
28
- removal_timeline="in the 2.0 release",
29
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
30
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
31
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
32
- "should be updated to use `BackendV2`.",
33
- )
34
- def __init__(self, **kwargs):
35
- """Instantiate a new Qobj dict field object.
36
-
37
- Args:
38
- kwargs: arbitrary keyword arguments that can be accessed as
39
- attributes of the object.
40
- """
41
- self.__dict__.update(kwargs)
42
-
43
- def to_dict(self):
44
- """Return a dictionary format representation of the OpenQASM 2 Qobj.
45
-
46
- Returns:
47
- dict: The dictionary form of the QobjHeader.
48
- """
49
- return self.__dict__
50
-
51
- @classmethod
52
- def from_dict(cls, data):
53
- """Create a new QobjHeader object from a dictionary.
54
-
55
- Args:
56
- data (dict): A dictionary representing the QobjHeader to create. It
57
- will be in the same format as output by :func:`to_dict`.
58
-
59
- Returns:
60
- QobjDictFieldr: The QobjDictField from the input dictionary.
61
- """
62
-
63
- return cls(**data)
64
-
65
- def __eq__(self, other):
66
- if isinstance(other, self.__class__):
67
- if self.__dict__ == other.__dict__:
68
- return True
69
- return False
70
-
71
-
72
- class QobjHeader(QobjDictField):
73
- """A class used to represent a dictionary header in Qobj objects."""
74
-
75
- pass
76
-
77
-
78
- class QobjExperimentHeader(QobjHeader):
79
- """A class representing a header dictionary for a Qobj Experiment."""
80
-
81
- pass
@@ -1,18 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2017, 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
- """
14
- Helper modules to convert qiskit frontend object to proper qobj model.
15
- """
16
-
17
- from .pulse_instruction import InstructionToQobjConverter, QobjToInstructionConverter
18
- from .lo_config import LoConfigConverter
@@ -1,177 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2017, 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
- """Helper class used to convert a user LO configuration into a list of frequencies."""
14
-
15
- from qiskit.pulse.channels import DriveChannel, MeasureChannel
16
- from qiskit.pulse.configuration import LoConfig
17
- from qiskit.exceptions import QiskitError
18
- from qiskit.utils import deprecate_func
19
-
20
-
21
- class LoConfigConverter:
22
- """This class supports to convert LoConfig into ~`lo_freq` attribute of configs.
23
- The format of LO frequency setup can be easily modified by replacing
24
- ``get_qubit_los`` and ``get_meas_los`` to align with your backend.
25
- """
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
- qobj_model,
38
- qubit_lo_freq=None,
39
- meas_lo_freq=None,
40
- qubit_lo_range=None,
41
- meas_lo_range=None,
42
- **run_config,
43
- ):
44
- """Create new converter.
45
-
46
- Args:
47
- qobj_model (Union[PulseQobjExperimentConfig, QasmQobjExperimentConfig): qobj model for
48
- experiment config.
49
- qubit_lo_freq (Optional[List[float]]): List of default qubit LO frequencies in Hz.
50
- meas_lo_freq (Optional[List[float]]): List of default meas LO frequencies in Hz.
51
- qubit_lo_range (Optional[List[List[float]]]): List of qubit LO ranges,
52
- each of form ``[range_min, range_max]`` in Hz.
53
- meas_lo_range (Optional[List[List[float]]]): List of measurement LO ranges,
54
- each of form ``[range_min, range_max]`` in Hz.
55
- n_qubits (int): Number of qubits in the system.
56
- run_config (dict): experimental configuration.
57
- """
58
- self.qobj_model = qobj_model
59
- self.qubit_lo_freq = qubit_lo_freq
60
- self.meas_lo_freq = meas_lo_freq
61
- self.run_config = run_config
62
- self.n_qubits = self.run_config.get("n_qubits", None)
63
-
64
- self.default_lo_config = LoConfig()
65
-
66
- if qubit_lo_range:
67
- for i, lo_range in enumerate(qubit_lo_range):
68
- self.default_lo_config.add_lo_range(DriveChannel(i), lo_range)
69
-
70
- if meas_lo_range:
71
- for i, lo_range in enumerate(meas_lo_range):
72
- self.default_lo_config.add_lo_range(MeasureChannel(i), lo_range)
73
-
74
- def __call__(self, user_lo_config):
75
- """Return experiment config w/ LO values property configured.
76
-
77
- Args:
78
- user_lo_config (LoConfig): A dictionary of LOs to format.
79
-
80
- Returns:
81
- Union[PulseQobjExperimentConfig, QasmQobjExperimentConfig]: Qobj experiment config.
82
- """
83
- lo_config = {}
84
-
85
- q_los = self.get_qubit_los(user_lo_config)
86
- if q_los:
87
- lo_config["qubit_lo_freq"] = [freq / 1e9 for freq in q_los]
88
-
89
- m_los = self.get_meas_los(user_lo_config)
90
- if m_los:
91
- lo_config["meas_lo_freq"] = [freq / 1e9 for freq in m_los]
92
-
93
- return self.qobj_model(**lo_config)
94
-
95
- def get_qubit_los(self, user_lo_config):
96
- """Set experiment level qubit LO frequencies. Use default values from job level if
97
- experiment level values not supplied. If experiment level and job level values not supplied,
98
- raise an error. If configured LO frequency is the same as default, this method returns
99
- ``None``.
100
-
101
- Args:
102
- user_lo_config (LoConfig): A dictionary of LOs to format.
103
-
104
- Returns:
105
- List[float]: A list of qubit LOs.
106
-
107
- Raises:
108
- QiskitError: When LO frequencies are missing and no default is set at job level.
109
- """
110
- _q_los = None
111
-
112
- # try to use job level default values
113
- if self.qubit_lo_freq:
114
- _q_los = self.qubit_lo_freq.copy()
115
- # otherwise initialize list with ``None`` entries
116
- elif self.n_qubits:
117
- _q_los = [None] * self.n_qubits
118
-
119
- # fill experiment level LO's
120
- if _q_los:
121
- for channel, lo_freq in user_lo_config.qubit_los.items():
122
- self.default_lo_config.check_lo(channel, lo_freq)
123
- _q_los[channel.index] = lo_freq
124
-
125
- if _q_los == self.qubit_lo_freq:
126
- return None
127
-
128
- # if ``None`` remains in LO's, indicates default not provided and user value is missing
129
- # raise error
130
- if None in _q_los:
131
- raise QiskitError(
132
- "Invalid experiment level qubit LO's. Must either pass values "
133
- "for all drive channels or pass 'default_qubit_los'."
134
- )
135
-
136
- return _q_los
137
-
138
- def get_meas_los(self, user_lo_config):
139
- """Set experiment level meas LO frequencies. Use default values from job level if experiment
140
- level values not supplied. If experiment level and job level values not supplied, raise an
141
- error. If configured LO frequency is the same as default, this method returns ``None``.
142
-
143
- Args:
144
- user_lo_config (LoConfig): A dictionary of LOs to format.
145
-
146
- Returns:
147
- List[float]: A list of measurement LOs.
148
-
149
- Raises:
150
- QiskitError: When LO frequencies are missing and no default is set at job level.
151
- """
152
- _m_los = None
153
- # try to use job level default values
154
- if self.meas_lo_freq:
155
- _m_los = self.meas_lo_freq.copy()
156
- # otherwise initialize list with ``None`` entries
157
- elif self.n_qubits:
158
- _m_los = [None] * self.n_qubits
159
-
160
- # fill experiment level LO's
161
- if _m_los:
162
- for channel, lo_freq in user_lo_config.meas_los.items():
163
- self.default_lo_config.check_lo(channel, lo_freq)
164
- _m_los[channel.index] = lo_freq
165
-
166
- if _m_los == self.meas_lo_freq:
167
- return None
168
-
169
- # if ``None`` remains in LO's, indicates default not provided and user value is missing
170
- # raise error
171
- if None in _m_los:
172
- raise QiskitError(
173
- "Invalid experiment level measurement LO's. Must either pass "
174
- "values for all measurement channels or pass 'default_meas_los'."
175
- )
176
-
177
- return _m_los