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
@@ -1,689 +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
- """Assemble function for converting a list of circuits into a qobj"""
14
- import copy
15
- import logging
16
- import uuid
17
- import warnings
18
- from time import time
19
- from typing import Dict, List, Optional, Union
20
-
21
- import numpy as np
22
-
23
- from qiskit.assembler import assemble_schedules
24
- from qiskit.assembler.run_config import RunConfig
25
- from qiskit.circuit import Parameter, QuantumCircuit, Qubit
26
- from qiskit.exceptions import QiskitError
27
- from qiskit.providers.backend import Backend
28
- from qiskit.pulse import Instruction, LoConfig, Schedule, ScheduleBlock
29
- from qiskit.pulse.channels import PulseChannel
30
- from qiskit.qobj import QasmQobj, PulseQobj, QobjHeader
31
- from qiskit.qobj.utils import MeasLevel, MeasReturnType
32
- from qiskit.utils import deprecate_func
33
- from qiskit.assembler.assemble_circuits import _assemble_circuits
34
-
35
- logger = logging.getLogger(__name__)
36
-
37
-
38
- def _log_assembly_time(start_time, end_time):
39
- log_msg = f"Total Assembly Time - {((end_time - start_time) * 1000):.5f} (ms)"
40
- logger.info(log_msg)
41
-
42
-
43
- # TODO: parallelize over the experiments (serialize each separately, then add global header/config)
44
- @deprecate_func(
45
- since="1.2",
46
- removal_timeline="in the 2.0 release",
47
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
48
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
49
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
50
- "should be updated to use `BackendV2`.",
51
- )
52
- def assemble(
53
- experiments: Union[
54
- QuantumCircuit,
55
- List[QuantumCircuit],
56
- Schedule,
57
- List[Schedule],
58
- ScheduleBlock,
59
- List[ScheduleBlock],
60
- ],
61
- backend: Optional[Backend] = None,
62
- qobj_id: Optional[str] = None,
63
- qobj_header: Optional[Union[QobjHeader, Dict]] = None,
64
- shots: Optional[int] = None,
65
- memory: Optional[bool] = False,
66
- seed_simulator: Optional[int] = None,
67
- qubit_lo_freq: Optional[List[float]] = None,
68
- meas_lo_freq: Optional[List[float]] = None,
69
- qubit_lo_range: Optional[List[float]] = None,
70
- meas_lo_range: Optional[List[float]] = None,
71
- schedule_los: Optional[
72
- Union[
73
- List[Union[Dict[PulseChannel, float], LoConfig]],
74
- Union[Dict[PulseChannel, float], LoConfig],
75
- ]
76
- ] = None,
77
- meas_level: Union[int, MeasLevel] = MeasLevel.CLASSIFIED,
78
- meas_return: Union[str, MeasReturnType] = MeasReturnType.AVERAGE,
79
- meas_map: Optional[List[List[Qubit]]] = None,
80
- memory_slot_size: int = 100,
81
- rep_time: Optional[int] = None,
82
- rep_delay: Optional[float] = None,
83
- parameter_binds: Optional[List[Dict[Parameter, float]]] = None,
84
- parametric_pulses: Optional[List[str]] = None,
85
- init_qubits: bool = True,
86
- **run_config: Dict,
87
- ) -> Union[QasmQobj, PulseQobj]:
88
- """Assemble a list of circuits or pulse schedules into a ``Qobj``.
89
-
90
- This function serializes the payloads, which could be either circuits or schedules,
91
- to create ``Qobj`` "experiments". It further annotates the experiment payload with
92
- header and configurations.
93
-
94
- NOTE: ``Backend.options`` is not used within assemble. The required values
95
- (previously given by backend.set_options) should be manually extracted
96
- from options and supplied directly when calling.
97
-
98
- Args:
99
- experiments: Circuit(s) or pulse schedule(s) to execute
100
- backend: If set, some runtime options are automatically grabbed from
101
- ``backend.configuration()`` and ``backend.defaults()``.
102
- If any other option is explicitly set (e.g., ``rep_time``), it
103
- will override the backend's.
104
- If any other options is set in the run_config, it will
105
- also override the backend's.
106
- qobj_id: String identifier to annotate the ``Qobj``
107
- qobj_header: User input that will be inserted in ``Qobj`` header, and will also be
108
- copied to the corresponding Result header. Headers do not affect the run.
109
- shots: Number of repetitions of each circuit, for sampling. Default: 1024
110
- or ``max_shots`` from the backend configuration, whichever is smaller
111
- memory: If ``True``, per-shot measurement bitstrings are returned as well
112
- (provided the backend supports it). For OpenPulse jobs, only
113
- measurement level 2 supports this option.
114
- seed_simulator: Random seed to control sampling, for when backend is a simulator
115
- qubit_lo_freq: List of job level qubit drive LO frequencies in Hz. Overridden by
116
- ``schedule_los`` if specified. Must have length ``n_qubits.``
117
- meas_lo_freq: List of measurement LO frequencies in Hz. Overridden by ``schedule_los`` if
118
- specified. Must have length ``n_qubits.``
119
- qubit_lo_range: List of job level drive LO ranges each of form ``[range_min, range_max]``
120
- in Hz. Used to validate ``qubit_lo_freq``. Must have length ``n_qubits.``
121
- meas_lo_range: List of job level measurement LO ranges each of form
122
- ``[range_min, range_max]`` in Hz. Used to validate ``meas_lo_freq``. Must have length
123
- ``n_qubits.``
124
- schedule_los: Experiment level (ie circuit or schedule) LO frequency configurations for
125
- qubit drive and measurement channels. These values override the job level values from
126
- ``default_qubit_los`` and ``default_meas_los``. Frequencies are in Hz. Settable for
127
- OpenQASM 2 and pulse jobs.
128
- meas_level: Set the appropriate level of the measurement output for pulse experiments.
129
- meas_return: Level of measurement data for the backend to return.
130
-
131
- For ``meas_level`` 0 and 1:
132
- * ``single`` returns information from every shot.
133
- * ``avg`` returns average measurement output (averaged over number of shots).
134
- meas_map: List of lists, containing qubits that must be measured together.
135
- memory_slot_size: Size of each memory slot if the output is Level 0.
136
- rep_time (int): Time per program execution in seconds. Must be from the list provided
137
- by the backend (``backend.configuration().rep_times``). Defaults to the first entry.
138
- rep_delay (float): Delay between programs in seconds. Only supported on certain
139
- backends (if ``backend.configuration().dynamic_reprate_enabled=True``). If supported,
140
- ``rep_delay`` will be used instead of ``rep_time`` and must be from the range supplied
141
- by the backend (``backend.configuration().rep_delay_range``). Default is given by
142
- ``backend.configuration().default_rep_delay``.
143
- parameter_binds: List of Parameter bindings over which the set of experiments will be
144
- executed. Each list element (bind) should be of the form
145
- {Parameter1: value1, Parameter2: value2, ...}. All binds will be
146
- executed across all experiments; e.g., if parameter_binds is a
147
- length-n list, and there are m experiments, a total of m x n
148
- experiments will be run (one for each experiment/bind pair).
149
- parametric_pulses: A list of pulse shapes which are supported internally on the backend.
150
- Example::
151
-
152
- ['gaussian', 'constant']
153
- init_qubits: Whether to reset the qubits to the ground state for each shot.
154
- Default: ``True``.
155
- **run_config: Extra arguments used to configure the run (e.g., for Aer configurable
156
- backends). Refer to the backend documentation for details on these
157
- arguments.
158
-
159
- Returns:
160
- A ``Qobj`` that can be run on a backend. Depending on the type of input,
161
- this will be either a ``QasmQobj`` or a ``PulseQobj``.
162
-
163
- Raises:
164
- QiskitError: if the input cannot be interpreted as either circuits or schedules
165
- """
166
- return _assemble(
167
- experiments,
168
- backend,
169
- qobj_id,
170
- qobj_header,
171
- shots,
172
- memory,
173
- seed_simulator,
174
- qubit_lo_freq,
175
- meas_lo_freq,
176
- qubit_lo_range,
177
- meas_lo_range,
178
- schedule_los,
179
- meas_level,
180
- meas_return,
181
- meas_map,
182
- memory_slot_size,
183
- rep_time,
184
- rep_delay,
185
- parameter_binds,
186
- parametric_pulses,
187
- init_qubits,
188
- **run_config,
189
- )
190
-
191
-
192
- # Note for future: this method is used in `BasicSimulator` and may need to be kept past the
193
- # `assemble` removal deadline (2.0). If it is kept (potentially in a different location),
194
- # we will need an alternative for the backend.configuration() access that currently takes
195
- # place in L566 (`parse_circuit_args`) and L351 (`parse_common_args`)
196
- # because backend.configuration() is also set for removal in 2.0.
197
- # The ultimate goal will be to move away from relying on any kind of `assemble` implementation
198
- # because of how tightly coupled it is to these legacy data structures. But as a transition step,
199
- # given that we would only have to support the subcase of `BasicSimulator`, we could probably just
200
- # inline the relevant config values that are already hardcoded in the basic simulator configuration
201
- # generator.
202
- def _assemble(
203
- experiments: Union[
204
- QuantumCircuit,
205
- List[QuantumCircuit],
206
- Schedule,
207
- List[Schedule],
208
- ScheduleBlock,
209
- List[ScheduleBlock],
210
- ],
211
- backend: Optional[Backend] = None,
212
- qobj_id: Optional[str] = None,
213
- qobj_header: Optional[Union[QobjHeader, Dict]] = None,
214
- shots: Optional[int] = None,
215
- memory: Optional[bool] = False,
216
- seed_simulator: Optional[int] = None,
217
- qubit_lo_freq: Optional[List[float]] = None,
218
- meas_lo_freq: Optional[List[float]] = None,
219
- qubit_lo_range: Optional[List[float]] = None,
220
- meas_lo_range: Optional[List[float]] = None,
221
- schedule_los: Optional[
222
- Union[
223
- List[Union[Dict[PulseChannel, float], LoConfig]],
224
- Union[Dict[PulseChannel, float], LoConfig],
225
- ]
226
- ] = None,
227
- meas_level: Union[int, MeasLevel] = MeasLevel.CLASSIFIED,
228
- meas_return: Union[str, MeasReturnType] = MeasReturnType.AVERAGE,
229
- meas_map: Optional[List[List[Qubit]]] = None,
230
- memory_slot_size: int = 100,
231
- rep_time: Optional[int] = None,
232
- rep_delay: Optional[float] = None,
233
- parameter_binds: Optional[List[Dict[Parameter, float]]] = None,
234
- parametric_pulses: Optional[List[str]] = None,
235
- init_qubits: bool = True,
236
- **run_config: Dict,
237
- ) -> Union[QasmQobj, PulseQobj]:
238
- start_time = time()
239
- experiments = experiments if isinstance(experiments, list) else [experiments]
240
- pulse_qobj = any(isinstance(exp, (ScheduleBlock, Schedule, Instruction)) for exp in experiments)
241
- with warnings.catch_warnings():
242
- # The Qobj class is deprecated, the backend.configuration() method is too
243
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
244
- qobj_id, qobj_header, run_config_common_dict = _parse_common_args(
245
- backend,
246
- qobj_id,
247
- qobj_header,
248
- shots,
249
- memory,
250
- seed_simulator,
251
- init_qubits,
252
- rep_delay,
253
- qubit_lo_freq,
254
- meas_lo_freq,
255
- qubit_lo_range,
256
- meas_lo_range,
257
- schedule_los,
258
- pulse_qobj=pulse_qobj,
259
- **run_config,
260
- )
261
-
262
- # assemble either circuits or schedules
263
- if all(isinstance(exp, QuantumCircuit) for exp in experiments):
264
- with warnings.catch_warnings():
265
- # Internally calls deprecated BasicSimulator.configuration()`
266
- warnings.filterwarnings(
267
- "ignore",
268
- category=DeprecationWarning,
269
- message=r".+\.basic_provider\.basic_simulator\.BasicSimulator\.configuration.+",
270
- module="qiskit",
271
- )
272
- run_config = _parse_circuit_args(
273
- parameter_binds,
274
- backend,
275
- meas_level,
276
- meas_return,
277
- parametric_pulses,
278
- **run_config_common_dict,
279
- )
280
-
281
- # If circuits are parameterized, bind parameters and remove from run_config
282
- bound_experiments, run_config = _expand_parameters(
283
- circuits=experiments, run_config=run_config
284
- )
285
- end_time = time()
286
- _log_assembly_time(start_time, end_time)
287
- return _assemble_circuits(
288
- circuits=bound_experiments,
289
- qobj_id=qobj_id,
290
- qobj_header=qobj_header,
291
- run_config=run_config,
292
- )
293
-
294
- elif all(isinstance(exp, (ScheduleBlock, Schedule, Instruction)) for exp in experiments):
295
- run_config = _parse_pulse_args(
296
- backend,
297
- meas_level,
298
- meas_return,
299
- meas_map,
300
- memory_slot_size,
301
- rep_time,
302
- parametric_pulses,
303
- **run_config_common_dict,
304
- )
305
-
306
- end_time = time()
307
- _log_assembly_time(start_time, end_time)
308
- return assemble_schedules(
309
- schedules=experiments, qobj_id=qobj_id, qobj_header=qobj_header, run_config=run_config
310
- )
311
-
312
- else:
313
- raise QiskitError("bad input to assemble() function; must be either circuits or schedules")
314
-
315
-
316
- # TODO: rework to return a list of RunConfigs (one for each experiments), and a global one
317
- def _parse_common_args(
318
- backend,
319
- qobj_id,
320
- qobj_header,
321
- shots,
322
- memory,
323
- seed_simulator,
324
- init_qubits,
325
- rep_delay,
326
- qubit_lo_freq,
327
- meas_lo_freq,
328
- qubit_lo_range,
329
- meas_lo_range,
330
- schedule_los,
331
- pulse_qobj=False,
332
- **run_config,
333
- ):
334
- """Resolve the various types of args allowed to the assemble() function through
335
- duck typing, overriding args, etc. Refer to the assemble() docstring for details on
336
- what types of inputs are allowed.
337
-
338
- Here the args are resolved by converting them to standard instances, and prioritizing
339
- them in case a run option is passed through multiple args (explicitly setting an arg
340
- has more priority than the arg set by backend)
341
-
342
- Returns:
343
- RunConfig: a run config, which is a standardized object that configures the qobj
344
- and determines the runtime environment.
345
-
346
- Raises:
347
- QiskitError:
348
- - If the memory arg is True and the backend does not support memory.
349
- - If ``shots`` exceeds ``max_shots`` for the configured backend.
350
- - If ``shots`` are not int type.
351
- - If any of qubit or meas lo's, or associated ranges do not have length equal to
352
- ``n_qubits``.
353
- - If qubit or meas lo's do not fit into prescribed ranges.
354
- """
355
- # grab relevant info from backend if it exists
356
- backend_config = None
357
- backend_defaults = None
358
- n_qubits = None
359
- if backend:
360
- backend_config = backend.configuration()
361
- n_qubits = backend_config.n_qubits
362
- # check for memory flag applied to backend that does not support memory
363
- if memory and not backend_config.memory:
364
- raise QiskitError(f"memory not supported by backend {backend_config.backend_name}")
365
-
366
- # try to set defaults for pulse, other leave as None
367
- pulse_param_set = (
368
- qubit_lo_freq is not None
369
- or meas_lo_freq is not None
370
- or qubit_lo_range is not None
371
- or meas_lo_range is not None
372
- or schedule_los is not None
373
- )
374
- if pulse_qobj or (backend_config.open_pulse and pulse_param_set):
375
- try:
376
- backend_defaults = backend.defaults()
377
- except AttributeError:
378
- pass
379
-
380
- # an identifier for the Qobj
381
- qobj_id = qobj_id or str(uuid.uuid4())
382
-
383
- # The header that goes at the top of the Qobj (and later Result)
384
- # we process it as dict, then write entries that are not None to a QobjHeader object
385
- qobj_header = qobj_header or {}
386
- if isinstance(qobj_header, QobjHeader):
387
- qobj_header = qobj_header.to_dict()
388
- backend_name = getattr(backend_config, "backend_name", None)
389
- backend_version = getattr(backend_config, "backend_version", None)
390
- qobj_header = {
391
- "backend_name": backend_name,
392
- "backend_version": backend_version,
393
- **qobj_header,
394
- }
395
- qobj_header = QobjHeader(**{k: v for k, v in qobj_header.items() if v is not None})
396
-
397
- max_shots = getattr(backend_config, "max_shots", None)
398
- if shots is None:
399
- if max_shots:
400
- shots = min(1024, max_shots)
401
- else:
402
- shots = 1024
403
- elif not isinstance(shots, (int, np.integer)):
404
- raise QiskitError("Argument 'shots' should be of type 'int'")
405
- elif max_shots and max_shots < shots:
406
- raise QiskitError(
407
- f"Number of shots specified: {max_shots} exceeds max_shots property of the "
408
- f"backend: {max_shots}."
409
- )
410
-
411
- dynamic_reprate_enabled = getattr(backend_config, "dynamic_reprate_enabled", False)
412
- if dynamic_reprate_enabled:
413
- default_rep_delay = getattr(backend_config, "default_rep_delay", None)
414
- rep_delay_range = getattr(backend_config, "rep_delay_range", None)
415
- rep_delay = _parse_rep_delay(rep_delay, default_rep_delay, rep_delay_range)
416
- else:
417
- if rep_delay is not None:
418
- rep_delay = None
419
- warnings.warn(
420
- "Dynamic rep rates not supported on this backend, cannot use rep_delay.",
421
- RuntimeWarning,
422
- )
423
-
424
- qubit_lo_freq = qubit_lo_freq or getattr(backend_defaults, "qubit_freq_est", None)
425
- meas_lo_freq = meas_lo_freq or getattr(backend_defaults, "meas_freq_est", None)
426
-
427
- qubit_lo_range = qubit_lo_range or getattr(backend_config, "qubit_lo_range", None)
428
- meas_lo_range = meas_lo_range or getattr(backend_config, "meas_lo_range", None)
429
-
430
- # check that LO frequencies are in the perscribed range
431
- _check_lo_freqs(qubit_lo_freq, qubit_lo_range, "qubit")
432
- _check_lo_freqs(meas_lo_freq, meas_lo_range, "meas")
433
-
434
- # configure experiment level LO frequencies
435
- schedule_los = schedule_los or []
436
- if isinstance(schedule_los, (LoConfig, dict)):
437
- schedule_los = [schedule_los]
438
-
439
- # Convert to LoConfig if LO configuration supplied as dictionary
440
- schedule_los = [
441
- lo_config if isinstance(lo_config, LoConfig) else LoConfig(lo_config)
442
- for lo_config in schedule_los
443
- ]
444
-
445
- # create run configuration and populate
446
- run_config_dict = {
447
- "shots": shots,
448
- "memory": memory,
449
- "seed_simulator": seed_simulator,
450
- "init_qubits": init_qubits,
451
- "rep_delay": rep_delay,
452
- "qubit_lo_freq": qubit_lo_freq,
453
- "meas_lo_freq": meas_lo_freq,
454
- "qubit_lo_range": qubit_lo_range,
455
- "meas_lo_range": meas_lo_range,
456
- "schedule_los": schedule_los,
457
- "n_qubits": n_qubits,
458
- **run_config,
459
- }
460
-
461
- return qobj_id, qobj_header, run_config_dict
462
-
463
-
464
- def _check_lo_freqs(
465
- lo_freq: Union[List[float], None],
466
- lo_range: Union[List[float], None],
467
- lo_type: str,
468
- ):
469
- """Check that LO frequencies are within the perscribed LO range.
470
-
471
- NOTE: Only checks if frequency/range lists have equal length. And does not check that the lists
472
- have length ``n_qubits``. This is because some backends, like simulator backends, do not
473
- require these constraints. For real hardware, these parameters will be validated on the backend.
474
-
475
- Args:
476
- lo_freq: List of LO frequencies.
477
- lo_range: Nested list of LO frequency ranges. Inner list is of the form
478
- ``[lo_min, lo_max]``.
479
- lo_type: The type of LO value--"qubit" or "meas".
480
-
481
- Raises:
482
- QiskitError:
483
- - If each element of the LO range is not a 2d list.
484
- - If the LO frequency is not in the LO range for a given qubit.
485
- """
486
- if lo_freq and lo_range and len(lo_freq) == len(lo_range):
487
- for i, freq in enumerate(lo_freq):
488
- freq_range = lo_range[i]
489
- if not (isinstance(freq_range, list) and len(freq_range) == 2):
490
- raise QiskitError(f"Each element of {lo_type} LO range must be a 2d list.")
491
- if freq < freq_range[0] or freq > freq_range[1]:
492
- raise QiskitError(
493
- f"Qubit {i} {lo_type} LO frequency is {freq}. "
494
- f"The range is [{freq_range[0]}, {freq_range[1]}]."
495
- )
496
-
497
-
498
- def _parse_pulse_args(
499
- backend,
500
- meas_level,
501
- meas_return,
502
- meas_map,
503
- memory_slot_size,
504
- rep_time,
505
- parametric_pulses,
506
- **run_config,
507
- ):
508
- """Build a pulse RunConfig replacing unset arguments with defaults derived from the `backend`.
509
- See `assemble` for more information on the required arguments.
510
-
511
- Returns:
512
- RunConfig: a run config, which is a standardized object that configures the qobj
513
- and determines the runtime environment.
514
- Raises:
515
- QiskitError: If the given meas_level is not allowed for the given `backend`.
516
- """
517
- # grab relevant info from backend if it exists
518
- backend_config = None
519
- if backend:
520
- backend_config = backend.configuration()
521
-
522
- if meas_level not in getattr(backend_config, "meas_levels", [MeasLevel.CLASSIFIED]):
523
- raise QiskitError(
524
- f"meas_level = {meas_level} not supported for backend "
525
- f"{backend_config.backend_name}, only {backend_config.meas_levels} is supported"
526
- )
527
-
528
- meas_map = meas_map or getattr(backend_config, "meas_map", None)
529
- dynamic_reprate_enabled = getattr(backend_config, "dynamic_reprate_enabled", False)
530
-
531
- rep_time = rep_time or getattr(backend_config, "rep_times", None)
532
- if rep_time:
533
- if dynamic_reprate_enabled:
534
- warnings.warn(
535
- "Dynamic rep rates are supported on this backend. 'rep_delay' will be "
536
- "used instead of 'rep_time'.",
537
- RuntimeWarning,
538
- )
539
- if isinstance(rep_time, list):
540
- rep_time = rep_time[0]
541
- rep_time = int(rep_time * 1e6) # convert sec to μs
542
- if parametric_pulses is None:
543
- parametric_pulses = getattr(backend_config, "parametric_pulses", [])
544
-
545
- # create run configuration and populate
546
- run_config_dict = {
547
- "meas_level": meas_level,
548
- "meas_return": meas_return,
549
- "meas_map": meas_map,
550
- "memory_slot_size": memory_slot_size,
551
- "rep_time": rep_time,
552
- "parametric_pulses": parametric_pulses,
553
- **run_config,
554
- }
555
- run_config = RunConfig(**{k: v for k, v in run_config_dict.items() if v is not None})
556
-
557
- return run_config
558
-
559
-
560
- def _parse_circuit_args(
561
- parameter_binds, backend, meas_level, meas_return, parametric_pulses, **run_config
562
- ):
563
- """Build a circuit RunConfig replacing unset arguments with defaults derived from the `backend`.
564
- See `assemble` for more information on the required arguments.
565
-
566
- Returns:
567
- RunConfig: a run config, which is a standardized object that configures the qobj
568
- and determines the runtime environment.
569
- """
570
- parameter_binds = parameter_binds or []
571
- # create run configuration and populate
572
- run_config_dict = {"parameter_binds": parameter_binds, **run_config}
573
- if parametric_pulses is None:
574
- if backend:
575
- with warnings.catch_warnings():
576
- # TODO (2.0): See comment on L192 regarding backend.configuration removal
577
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
578
- run_config_dict["parametric_pulses"] = getattr(
579
- backend.configuration(), "parametric_pulses", []
580
- )
581
- else:
582
- run_config_dict["parametric_pulses"] = []
583
- else:
584
- run_config_dict["parametric_pulses"] = parametric_pulses
585
- if meas_level:
586
- run_config_dict["meas_level"] = meas_level
587
- # only enable `meas_return` if `meas_level` isn't classified
588
- if meas_level != MeasLevel.CLASSIFIED:
589
- run_config_dict["meas_return"] = meas_return
590
-
591
- run_config = RunConfig(**{k: v for k, v in run_config_dict.items() if v is not None})
592
-
593
- return run_config
594
-
595
-
596
- def _parse_rep_delay(
597
- rep_delay: float, default_rep_delay: float, rep_delay_range: List[float]
598
- ) -> float:
599
- """Parse and set ``rep_delay`` parameter in runtime config.
600
-
601
- Args:
602
- rep_delay: Initial rep delay.
603
- default_rep_delay: Backend default rep delay.
604
- rep_delay_range: Backend list defining allowable range of rep delays.
605
-
606
- Raises:
607
- QiskitError: If rep_delay is not in the backend rep_delay_range.
608
- Returns:
609
- float: Modified rep delay after parsing.
610
- """
611
- if rep_delay is None:
612
- rep_delay = default_rep_delay
613
-
614
- if rep_delay is not None:
615
- # check that rep_delay is in rep_delay_range
616
- if rep_delay_range is not None and isinstance(rep_delay_range, list):
617
- if len(rep_delay_range) != 2:
618
- raise QiskitError(
619
- f"Backend rep_delay_range {rep_delay_range} must be a list with two entries."
620
- )
621
- if not rep_delay_range[0] <= rep_delay <= rep_delay_range[1]:
622
- raise QiskitError(
623
- f"Supplied rep delay {rep_delay} not in the supported "
624
- f"backend range {rep_delay_range}"
625
- )
626
- rep_delay = rep_delay * 1e6 # convert sec to μs
627
-
628
- return rep_delay
629
-
630
-
631
- def _expand_parameters(circuits, run_config):
632
- """Verifies that there is a single common set of parameters shared between
633
- all circuits and all parameter binds in the run_config. Returns an expanded
634
- list of circuits (if parameterized) with all parameters bound, and a copy of
635
- the run_config with parameter_binds cleared.
636
-
637
- If neither the circuits nor the run_config specify parameters, the two are
638
- returned unmodified.
639
-
640
- Raises:
641
- QiskitError: if run_config parameters are not compatible with circuit parameters
642
-
643
- Returns:
644
- Tuple(List[QuantumCircuit], RunConfig):
645
- - List of input circuits expanded and with parameters bound
646
- - RunConfig with parameter_binds removed
647
- """
648
- parameter_binds = run_config.parameter_binds
649
-
650
- if parameter_binds and any(parameter_binds) or any(circuit.parameters for circuit in circuits):
651
-
652
- # Unroll params here in order to handle ParamVects
653
- all_bind_parameters = [
654
- QuantumCircuit()._unroll_param_dict(bind).keys() for bind in parameter_binds
655
- ]
656
-
657
- all_circuit_parameters = [circuit.parameters for circuit in circuits]
658
-
659
- # Collect set of all unique parameters across all circuits and binds
660
- unique_parameters = {
661
- param
662
- for param_list in all_bind_parameters + all_circuit_parameters
663
- for param in param_list
664
- }
665
-
666
- # Check that all parameters are common to all circuits and binds
667
- if (
668
- not all_bind_parameters
669
- or not all_circuit_parameters
670
- or any(unique_parameters != bind_params for bind_params in all_bind_parameters)
671
- or any(unique_parameters != parameters for parameters in all_circuit_parameters)
672
- ):
673
- raise QiskitError(
674
- (
675
- "Mismatch between run_config.parameter_binds and all circuit parameters. "
676
- + "Parameter binds: {} "
677
- + "Circuit parameters: {}"
678
- ).format(all_bind_parameters, all_circuit_parameters)
679
- )
680
-
681
- circuits = [
682
- circuit.assign_parameters(binds) for circuit in circuits for binds in parameter_binds
683
- ]
684
-
685
- # All parameters have been expanded and bound, so remove from run_config
686
- run_config = copy.deepcopy(run_config)
687
- run_config.parameter_binds = []
688
-
689
- return circuits, run_config