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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +3 -9
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/circuit/__init__.py +35 -10
  5. qiskit/circuit/{add_control.py → _add_control.py} +32 -12
  6. qiskit/circuit/_classical_resource_map.py +5 -3
  7. qiskit/circuit/barrier.py +3 -7
  8. qiskit/circuit/classical/expr/__init__.py +31 -3
  9. qiskit/circuit/classical/expr/constructors.py +236 -28
  10. qiskit/circuit/classical/expr/expr.py +104 -3
  11. qiskit/circuit/classical/expr/visitors.py +75 -0
  12. qiskit/circuit/classical/types/__init__.py +12 -8
  13. qiskit/circuit/classical/types/ordering.py +14 -7
  14. qiskit/circuit/classical/types/types.py +36 -0
  15. qiskit/circuit/commutation_checker.py +34 -7
  16. qiskit/circuit/controlflow/__init__.py +32 -1
  17. qiskit/circuit/controlflow/_builder_utils.py +9 -5
  18. qiskit/circuit/controlflow/box.py +163 -0
  19. qiskit/circuit/controlflow/break_loop.py +1 -1
  20. qiskit/circuit/controlflow/builder.py +139 -39
  21. qiskit/circuit/controlflow/continue_loop.py +1 -3
  22. qiskit/circuit/controlflow/control_flow.py +10 -0
  23. qiskit/circuit/controlflow/for_loop.py +2 -1
  24. qiskit/circuit/controlflow/if_else.py +3 -16
  25. qiskit/circuit/controlflow/switch_case.py +2 -8
  26. qiskit/circuit/controlflow/while_loop.py +2 -7
  27. qiskit/circuit/controlledgate.py +2 -4
  28. qiskit/circuit/delay.py +40 -11
  29. qiskit/circuit/duration.py +0 -15
  30. qiskit/circuit/gate.py +2 -4
  31. qiskit/circuit/instruction.py +2 -141
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +469 -154
  34. qiskit/circuit/library/arithmetic/__init__.py +16 -10
  35. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  36. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
  37. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  38. qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
  39. qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
  40. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
  41. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
  42. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
  43. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
  44. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
  45. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
  46. qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
  47. qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
  48. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  49. qiskit/circuit/library/blueprintcircuit.py +52 -16
  50. qiskit/circuit/library/data_preparation/initializer.py +1 -1
  51. qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
  52. qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
  53. qiskit/circuit/library/generalized_gates/gms.py +1 -1
  54. qiskit/circuit/library/generalized_gates/isometry.py +1 -1
  55. qiskit/circuit/library/generalized_gates/pauli.py +1 -2
  56. qiskit/circuit/library/generalized_gates/uc.py +97 -7
  57. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
  58. qiskit/circuit/library/generalized_gates/unitary.py +4 -2
  59. qiskit/circuit/library/graph_state.py +1 -0
  60. qiskit/circuit/library/hamiltonian_gate.py +1 -1
  61. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  62. qiskit/circuit/library/n_local/n_local.py +1 -1
  63. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  64. qiskit/circuit/library/overlap.py +2 -2
  65. qiskit/circuit/library/pauli_evolution.py +39 -24
  66. qiskit/circuit/library/phase_oracle.py +130 -51
  67. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  69. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  70. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  71. qiskit/circuit/library/standard_gates/h.py +4 -9
  72. qiskit/circuit/library/standard_gates/i.py +2 -2
  73. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  74. qiskit/circuit/library/standard_gates/p.py +15 -34
  75. qiskit/circuit/library/standard_gates/r.py +7 -10
  76. qiskit/circuit/library/standard_gates/rx.py +5 -15
  77. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  78. qiskit/circuit/library/standard_gates/ry.py +5 -17
  79. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  80. qiskit/circuit/library/standard_gates/rz.py +5 -17
  81. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  82. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  83. qiskit/circuit/library/standard_gates/s.py +6 -15
  84. qiskit/circuit/library/standard_gates/swap.py +4 -11
  85. qiskit/circuit/library/standard_gates/sx.py +7 -12
  86. qiskit/circuit/library/standard_gates/t.py +6 -7
  87. qiskit/circuit/library/standard_gates/u.py +2 -10
  88. qiskit/circuit/library/standard_gates/u1.py +5 -16
  89. qiskit/circuit/library/standard_gates/u2.py +2 -6
  90. qiskit/circuit/library/standard_gates/u3.py +3 -11
  91. qiskit/circuit/library/standard_gates/x.py +14 -62
  92. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  94. qiskit/circuit/library/standard_gates/y.py +4 -9
  95. qiskit/circuit/library/standard_gates/z.py +5 -15
  96. qiskit/circuit/measure.py +11 -2
  97. qiskit/circuit/parameterexpression.py +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 +2 -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,5 +1,6 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.2)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp39-abi3-macosx_11_0_arm64
5
+ Generator: delocate 0.13.0
5
6
 
@@ -6,6 +6,9 @@ HalfAdder.default = qiskit.transpiler.passes.synthesis.hls_plugins:HalfAdderSynt
6
6
  HalfAdder.qft_d00 = qiskit.transpiler.passes.synthesis.hls_plugins:HalfAdderSynthesisD00
7
7
  HalfAdder.ripple_c04 = qiskit.transpiler.passes.synthesis.hls_plugins:HalfAdderSynthesisC04
8
8
  HalfAdder.ripple_v95 = qiskit.transpiler.passes.synthesis.hls_plugins:HalfAdderSynthesisV95
9
+ IntComp.default = qiskit.transpiler.passes.synthesis.hls_plugins:IntComparatorSynthesisDefault
10
+ IntComp.noaux = qiskit.transpiler.passes.synthesis.hls_plugins:IntComparatorSynthesisNoAux
11
+ IntComp.twos = qiskit.transpiler.passes.synthesis.hls_plugins:IntComparatorSynthesis2s
9
12
  ModularAdder.default = qiskit.transpiler.passes.synthesis.hls_plugins:ModularAdderSynthesisDefault
10
13
  ModularAdder.qft_d00 = qiskit.transpiler.passes.synthesis.hls_plugins:ModularAdderSynthesisD00
11
14
  ModularAdder.ripple_c04 = qiskit.transpiler.passes.synthesis.hls_plugins:ModularAdderSynthesisC04
@@ -15,6 +18,8 @@ Multiplier.default = qiskit.transpiler.passes.synthesis.hls_plugins:MultiplierSy
15
18
  Multiplier.qft_r17 = qiskit.transpiler.passes.synthesis.hls_plugins:MultiplierSynthesisR17
16
19
  PauliEvolution.default = qiskit.transpiler.passes.synthesis.hls_plugins:PauliEvolutionSynthesisDefault
17
20
  PauliEvolution.rustiq = qiskit.transpiler.passes.synthesis.hls_plugins:PauliEvolutionSynthesisRustiq
21
+ WeightedSum.default = qiskit.transpiler.passes.synthesis.hls_plugins:WeightedSumSynthesisDefault
22
+ annotated.default = qiskit.transpiler.passes.synthesis.hls_plugins:AnnotatedSynthesisDefault
18
23
  clifford.ag = qiskit.transpiler.passes.synthesis.hls_plugins:AGSynthesisClifford
19
24
  clifford.bm = qiskit.transpiler.passes.synthesis.hls_plugins:BMSynthesisClifford
20
25
  clifford.default = qiskit.transpiler.passes.synthesis.hls_plugins:DefaultSynthesisClifford
@@ -56,10 +61,10 @@ default = qiskit.transpiler.preset_passmanagers.builtin_plugins:OptimizationPass
56
61
 
57
62
  [qiskit.transpiler.routing]
58
63
  basic = qiskit.transpiler.preset_passmanagers.builtin_plugins:BasicSwapPassManager
64
+ default = qiskit.transpiler.preset_passmanagers.builtin_plugins:DefaultRoutingPassManager
59
65
  lookahead = qiskit.transpiler.preset_passmanagers.builtin_plugins:LookaheadSwapPassManager
60
66
  none = qiskit.transpiler.preset_passmanagers.builtin_plugins:NoneRoutingPassManager
61
67
  sabre = qiskit.transpiler.preset_passmanagers.builtin_plugins:SabreSwapPassManager
62
- stochastic = qiskit.transpiler.preset_passmanagers.builtin_plugins:StochasticSwapPassManager
63
68
 
64
69
  [qiskit.transpiler.scheduling]
65
70
  alap = qiskit.transpiler.preset_passmanagers.builtin_plugins:AlapSchedulingPassManager
@@ -67,10 +72,11 @@ asap = qiskit.transpiler.preset_passmanagers.builtin_plugins:AsapSchedulingPassM
67
72
  default = qiskit.transpiler.preset_passmanagers.builtin_plugins:DefaultSchedulingPassManager
68
73
 
69
74
  [qiskit.transpiler.translation]
75
+ default = qiskit.transpiler.preset_passmanagers.builtin_plugins:DefaultTranslationPassManager
70
76
  synthesis = qiskit.transpiler.preset_passmanagers.builtin_plugins:UnitarySynthesisPassManager
71
77
  translator = qiskit.transpiler.preset_passmanagers.builtin_plugins:BasisTranslatorPassManager
72
78
 
73
79
  [qiskit.unitary_synthesis]
74
80
  aqc = qiskit.transpiler.passes.synthesis.aqc_plugin:AQCSynthesisPlugin
75
- default = qiskit.transpiler.passes.synthesis.unitary_synthesis:DefaultUnitarySynthesis
81
+ default = qiskit.transpiler.passes.synthesis.default_unitary_synth_plugin:DefaultUnitarySynthesis
76
82
  sk = qiskit.transpiler.passes.synthesis.solovay_kitaev_synthesis:SolovayKitaevSynthesis
@@ -1,42 +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
- ========================================================
15
- Circuit and Schedule Assembler (:mod:`qiskit.assembler`)
16
- ========================================================
17
-
18
- .. currentmodule:: qiskit.assembler
19
-
20
- Functions
21
- =========
22
-
23
-
24
- .. autofunction:: assemble_circuits
25
-
26
- .. autofunction:: assemble_schedules
27
-
28
- .. autofunction:: disassemble
29
-
30
- Classes
31
- =======
32
-
33
- .. autosummary::
34
- :toctree: ../stubs/
35
-
36
- RunConfig
37
- """
38
-
39
- from qiskit.assembler.assemble_circuits import assemble_circuits
40
- from qiskit.assembler.assemble_schedules import assemble_schedules
41
- from qiskit.assembler.disassemble import disassemble
42
- from qiskit.assembler.run_config import RunConfig
@@ -1,451 +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 warnings
16
- from collections import defaultdict
17
- from typing import Dict, List, Optional, Tuple
18
-
19
- from qiskit.assembler.run_config import RunConfig
20
- from qiskit.assembler.assemble_schedules import _assemble_instructions as _assemble_schedule
21
- from qiskit.circuit import QuantumCircuit
22
- from qiskit.circuit.classicalregister import Clbit
23
- from qiskit.exceptions import QiskitError
24
- from qiskit.qobj import (
25
- QasmQobj,
26
- QobjExperimentHeader,
27
- QasmQobjInstruction,
28
- QasmQobjExperimentConfig,
29
- QasmQobjExperiment,
30
- QasmQobjConfig,
31
- QasmExperimentCalibrations,
32
- GateCalibration,
33
- PulseQobjInstruction,
34
- PulseLibraryItem,
35
- converters,
36
- QobjHeader,
37
- )
38
- from qiskit.utils.parallel import parallel_map
39
- from qiskit.utils import deprecate_func
40
-
41
-
42
- PulseLibrary = Dict[str, List[complex]]
43
-
44
-
45
- def _assemble_circuit(
46
- circuit: QuantumCircuit, run_config: RunConfig
47
- ) -> Tuple[QasmQobjExperiment, Optional[PulseLibrary]]:
48
- """Assemble one circuit.
49
-
50
- Args:
51
- circuit: circuit to assemble
52
- run_config: configuration of the runtime environment
53
-
54
- Returns:
55
- One experiment for the QasmQobj, and pulse library for pulse gates (which could be None)
56
-
57
- Raises:
58
- QiskitError: when the circuit has unit other than 'dt'.
59
- """
60
- if circuit.unit != "dt":
61
- raise QiskitError(
62
- f"Unable to assemble circuit with unit '{circuit.unit}', which must be 'dt'."
63
- )
64
-
65
- # header data
66
- num_qubits = 0
67
- memory_slots = 0
68
- qubit_labels = []
69
- clbit_labels = []
70
-
71
- qreg_sizes = []
72
- creg_sizes = []
73
- for qreg in circuit.qregs:
74
- qreg_sizes.append([qreg.name, qreg.size])
75
- for j in range(qreg.size):
76
- qubit_labels.append([qreg.name, j])
77
- num_qubits += qreg.size
78
- for creg in circuit.cregs:
79
- creg_sizes.append([creg.name, creg.size])
80
- for j in range(creg.size):
81
- clbit_labels.append([creg.name, j])
82
- memory_slots += creg.size
83
-
84
- qubit_indices = {qubit: idx for idx, qubit in enumerate(circuit.qubits)}
85
- clbit_indices = {clbit: idx for idx, clbit in enumerate(circuit.clbits)}
86
-
87
- # TODO: why do we need creq_sizes and qreg_sizes in header
88
- # TODO: we need to rethink memory_slots as they are tied to classical bit
89
- metadata = circuit.metadata
90
- if metadata is None:
91
- metadata = {}
92
- with warnings.catch_warnings():
93
- # The class QobjExperimentHeader is deprecated
94
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
95
- header = QobjExperimentHeader(
96
- qubit_labels=qubit_labels,
97
- n_qubits=num_qubits,
98
- qreg_sizes=qreg_sizes,
99
- clbit_labels=clbit_labels,
100
- memory_slots=memory_slots,
101
- creg_sizes=creg_sizes,
102
- name=circuit.name,
103
- global_phase=float(circuit.global_phase),
104
- metadata=metadata,
105
- )
106
-
107
- # TODO: why do we need n_qubits and memory_slots in both the header and the config
108
- with warnings.catch_warnings():
109
- # The class QasmQobjExperimentConfig is deprecated
110
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
111
- config = QasmQobjExperimentConfig(n_qubits=num_qubits, memory_slots=memory_slots)
112
- calibrations, pulse_library = _assemble_pulse_gates(circuit, run_config)
113
- if calibrations:
114
- config.calibrations = calibrations
115
-
116
- # Convert conditionals from OpenQASM-2-style (creg ?= int) to qobj-style
117
- # (register_bit ?= 1), by assuming device has unlimited register slots
118
- # (supported only for simulators). Map all measures to a register matching
119
- # their clbit_index, create a new register slot for every conditional gate
120
- # and add a bfunc to map the creg=val mask onto the gating register bit.
121
-
122
- is_conditional_experiment = any(
123
- getattr(instruction.operation, "condition", None) for instruction in circuit.data
124
- )
125
- max_conditional_idx = 0
126
-
127
- instructions = []
128
- for op_context in circuit.data:
129
- instruction = op_context.operation._assemble()
130
-
131
- # Add register attributes to the instruction
132
- qargs = op_context.qubits
133
- cargs = op_context.clbits
134
- if qargs:
135
- instruction.qubits = [qubit_indices[qubit] for qubit in qargs]
136
- if cargs:
137
- instruction.memory = [clbit_indices[clbit] for clbit in cargs]
138
- # If the experiment has conditional instructions, assume every
139
- # measurement result may be needed for a conditional gate.
140
- if instruction.name == "measure" and is_conditional_experiment:
141
- instruction.register = [clbit_indices[clbit] for clbit in cargs]
142
-
143
- # To convert to a qobj-style conditional, insert a bfunc prior
144
- # to the conditional instruction to map the creg ?= val condition
145
- # onto a gating register bit.
146
- if hasattr(instruction, "_condition"):
147
- ctrl_reg, ctrl_val = instruction._condition
148
- mask = 0
149
- val = 0
150
- if isinstance(ctrl_reg, Clbit):
151
- mask = 1 << clbit_indices[ctrl_reg]
152
- val = (ctrl_val & 1) << clbit_indices[ctrl_reg]
153
- else:
154
- for clbit in clbit_indices:
155
- if clbit in ctrl_reg:
156
- mask |= 1 << clbit_indices[clbit]
157
- val |= ((ctrl_val >> list(ctrl_reg).index(clbit)) & 1) << clbit_indices[
158
- clbit
159
- ]
160
-
161
- conditional_reg_idx = memory_slots + max_conditional_idx
162
- with warnings.catch_warnings():
163
- # The class QasmQobjInstruction is deprecated
164
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
165
- conversion_bfunc = QasmQobjInstruction(
166
- name="bfunc",
167
- mask="0x%X" % mask, # pylint: disable=consider-using-f-string
168
- relation="==",
169
- val="0x%X" % val, # pylint: disable=consider-using-f-string
170
- register=conditional_reg_idx,
171
- )
172
- instructions.append(conversion_bfunc)
173
- instruction.conditional = conditional_reg_idx
174
- max_conditional_idx += 1
175
- # Delete condition attribute now that we have replaced it with
176
- # the conditional and bfunc
177
- del instruction._condition
178
-
179
- instructions.append(instruction)
180
- with warnings.catch_warnings():
181
- # The class QasmQobjExperiment is deprecated
182
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
183
- return (
184
- QasmQobjExperiment(instructions=instructions, header=header, config=config),
185
- pulse_library,
186
- )
187
-
188
-
189
- def _assemble_pulse_gates(
190
- circuit: QuantumCircuit, run_config: RunConfig
191
- ) -> Tuple[Optional[QasmExperimentCalibrations], Optional[PulseLibrary]]:
192
- """Assemble and return the circuit calibrations and associated pulse library, if there are any.
193
- The calibrations themselves may reference the pulse library which is returned as a dict.
194
-
195
- Args:
196
- circuit: circuit which may have pulse calibrations
197
- run_config: configuration of the runtime environment
198
-
199
- Returns:
200
- The calibrations and pulse library, if there are any
201
- """
202
- if not circuit.calibrations:
203
- return None, None
204
- if not hasattr(run_config, "parametric_pulses"):
205
- run_config.parametric_pulses = []
206
- calibrations = []
207
- pulse_library = {}
208
- for gate, cals in circuit.calibrations.items():
209
- for (qubits, params), schedule in cals.items():
210
- qobj_instructions, _ = _assemble_schedule(
211
- schedule,
212
- converters.InstructionToQobjConverter(PulseQobjInstruction),
213
- run_config,
214
- pulse_library,
215
- )
216
- calibrations.append(
217
- GateCalibration(str(gate), list(qubits), list(params), qobj_instructions)
218
- )
219
- return QasmExperimentCalibrations(gates=calibrations), pulse_library
220
-
221
-
222
- def _extract_common_calibrations(
223
- experiments: List[QasmQobjExperiment],
224
- ) -> Tuple[List[QasmQobjExperiment], Optional[QasmExperimentCalibrations]]:
225
- """Given a list of ``QasmQobjExperiment``s, each of which may have calibrations in their
226
- ``config``, collect common calibrations into a global ``QasmExperimentCalibrations``
227
- and delete them from their local experiments.
228
-
229
- Args:
230
- experiments: The list of OpenQASM experiments that are being assembled into one qobj
231
-
232
- Returns:
233
- The input experiments with modified calibrations, and common calibrations, if there
234
- are any
235
- """
236
-
237
- def index_calibrations() -> Dict[int, List[Tuple[int, GateCalibration]]]:
238
- """Map each calibration to all experiments that contain it."""
239
- exp_indices = defaultdict(list)
240
- for exp_idx, exp in enumerate(experiments):
241
- for gate_cal in exp.config.calibrations.gates:
242
- # They must be keyed on the hash or identical cals will be indexed separately
243
- exp_indices[hash(gate_cal)].append((exp_idx, gate_cal))
244
- return exp_indices
245
-
246
- def collect_common_calibrations() -> List[GateCalibration]:
247
- """If a gate calibration appears in all experiments, collect it."""
248
- common_calibrations = []
249
- for _, exps_w_cal in exp_indices.items():
250
- if len(exps_w_cal) == len(experiments):
251
- _, gate_cal = exps_w_cal[0]
252
- common_calibrations.append(gate_cal)
253
- return common_calibrations
254
-
255
- def remove_common_gate_calibrations(exps: List[QasmQobjExperiment]) -> None:
256
- """For calibrations that appear in all experiments, remove them from the individual
257
- experiment's ``config.calibrations``."""
258
- for _, exps_w_cal in exp_indices.items():
259
- if len(exps_w_cal) == len(exps):
260
- for exp_idx, gate_cal in exps_w_cal:
261
- exps[exp_idx].config.calibrations.gates.remove(gate_cal)
262
-
263
- if not (experiments and all(hasattr(exp.config, "calibrations") for exp in experiments)):
264
- # No common calibrations
265
- return experiments, None
266
-
267
- exp_indices = index_calibrations()
268
- common_calibrations = collect_common_calibrations()
269
- remove_common_gate_calibrations(experiments)
270
-
271
- # Remove the ``calibrations`` attribute if it's now empty
272
- for exp in experiments:
273
- if not exp.config.calibrations.gates:
274
- del exp.config.calibrations
275
-
276
- return experiments, QasmExperimentCalibrations(gates=common_calibrations)
277
-
278
-
279
- def _configure_experiment_los(
280
- experiments: List[QasmQobjExperiment],
281
- lo_converter: converters.LoConfigConverter,
282
- run_config: RunConfig,
283
- ):
284
- # get per experiment los
285
- freq_configs = [lo_converter(lo_dict) for lo_dict in getattr(run_config, "schedule_los", [])]
286
-
287
- if len(experiments) > 1 and len(freq_configs) not in [0, 1, len(experiments)]:
288
- raise QiskitError(
289
- "Invalid 'schedule_los' setting specified. If specified, it should be "
290
- "either have a single entry to apply the same LOs for each experiment or "
291
- "have length equal to the number of experiments."
292
- )
293
-
294
- if len(freq_configs) > 1:
295
- if len(experiments) > 1:
296
- for idx, expt in enumerate(experiments):
297
- freq_config = freq_configs[idx]
298
- expt.config.qubit_lo_freq = freq_config.qubit_lo_freq
299
- expt.config.meas_lo_freq = freq_config.meas_lo_freq
300
- elif len(experiments) == 1:
301
- expt = experiments[0]
302
- experiments = []
303
- for freq_config in freq_configs:
304
- expt_config = copy.deepcopy(expt.config)
305
- expt_config.qubit_lo_freq = freq_config.qubit_lo_freq
306
- expt_config.meas_lo_freq = freq_config.meas_lo_freq
307
- experiments.append(
308
- QasmQobjExperiment(
309
- header=expt.header, instructions=expt.instructions, config=expt_config
310
- )
311
- )
312
-
313
- return experiments
314
-
315
-
316
- def _assemble_circuits(
317
- circuits: List[QuantumCircuit], run_config: RunConfig, qobj_id: int, qobj_header: QobjHeader
318
- ) -> QasmQobj:
319
- with warnings.catch_warnings():
320
- # Still constructs Qobj, that is deprecated. The message is hard to trace to a module,
321
- # because concurrency is hard.
322
- warnings.filterwarnings("ignore", category=DeprecationWarning)
323
- experiments_and_pulse_libs = parallel_map(_assemble_circuit, circuits, [run_config])
324
- experiments = []
325
- pulse_library = {}
326
- for exp, lib in experiments_and_pulse_libs:
327
- experiments.append(exp)
328
- if lib:
329
- pulse_library.update(lib)
330
-
331
- # extract common calibrations
332
- experiments, calibrations = _extract_common_calibrations(experiments)
333
-
334
- # configure LO freqs per circuit
335
- with warnings.catch_warnings():
336
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
337
- lo_converter = converters.LoConfigConverter(
338
- QasmQobjExperimentConfig, **run_config.to_dict()
339
- )
340
- experiments = _configure_experiment_los(experiments, lo_converter, run_config)
341
-
342
- with warnings.catch_warnings():
343
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
344
- qobj_config = QasmQobjConfig()
345
- if run_config:
346
- qobj_config_dict = run_config.to_dict()
347
-
348
- # remove LO ranges, not needed in qobj
349
- qobj_config_dict.pop("qubit_lo_range", None)
350
- qobj_config_dict.pop("meas_lo_range", None)
351
-
352
- # convert LO frequencies to GHz, if they exist
353
- if "qubit_lo_freq" in qobj_config_dict:
354
- qobj_config_dict["qubit_lo_freq"] = [
355
- freq / 1e9 for freq in qobj_config_dict["qubit_lo_freq"]
356
- ]
357
- if "meas_lo_freq" in qobj_config_dict:
358
- qobj_config_dict["meas_lo_freq"] = [
359
- freq / 1e9 for freq in qobj_config_dict["meas_lo_freq"]
360
- ]
361
-
362
- # override default los if single ``schedule_los`` entry set
363
- schedule_los = qobj_config_dict.pop("schedule_los", [])
364
- if len(schedule_los) == 1:
365
- lo_dict = schedule_los[0]
366
- q_los = lo_converter.get_qubit_los(lo_dict)
367
- # Hz -> GHz
368
- if q_los:
369
- qobj_config_dict["qubit_lo_freq"] = [freq / 1e9 for freq in q_los]
370
- m_los = lo_converter.get_meas_los(lo_dict)
371
- if m_los:
372
- qobj_config_dict["meas_lo_freq"] = [freq / 1e9 for freq in m_los]
373
-
374
- with warnings.catch_warnings():
375
- # The class QasmQobjConfig is deprecated
376
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
377
- qobj_config = QasmQobjConfig(**qobj_config_dict)
378
-
379
- qubit_sizes = []
380
- memory_slot_sizes = []
381
- for circ in circuits:
382
- num_qubits = 0
383
- memory_slots = 0
384
- for qreg in circ.qregs:
385
- num_qubits += qreg.size
386
- for creg in circ.cregs:
387
- memory_slots += creg.size
388
- qubit_sizes.append(num_qubits)
389
- memory_slot_sizes.append(memory_slots)
390
- qobj_config.memory_slots = max(memory_slot_sizes)
391
- qobj_config.n_qubits = max(qubit_sizes)
392
-
393
- if pulse_library:
394
- qobj_config.pulse_library = [
395
- PulseLibraryItem(name=name, samples=samples) for name, samples in pulse_library.items()
396
- ]
397
-
398
- if calibrations and calibrations.gates:
399
- qobj_config.calibrations = calibrations
400
- with warnings.catch_warnings():
401
- # The class QasmQobj is deprecated
402
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
403
- return QasmQobj(
404
- qobj_id=qobj_id, config=qobj_config, experiments=experiments, header=qobj_header
405
- )
406
-
407
-
408
- @deprecate_func(
409
- since="1.2",
410
- removal_timeline="in the 2.0 release",
411
- additional_msg="The `Qobj` class and related functionality are part of the deprecated `BackendV1` "
412
- "workflow, and no longer necessary for `BackendV2`. If a user workflow requires "
413
- "`Qobj` it likely relies on deprecated functionality and should be updated to "
414
- "use `BackendV2`.",
415
- )
416
- def assemble_circuits(
417
- circuits: List[QuantumCircuit], run_config: RunConfig, qobj_id: int, qobj_header: QobjHeader
418
- ) -> QasmQobj:
419
- """Assembles a list of circuits into a qobj that can be run on the backend.
420
-
421
- Args:
422
- circuits: circuit(s) to assemble
423
- run_config: configuration of the runtime environment
424
- qobj_id: identifier for the generated qobj
425
- qobj_header: header to pass to the results
426
-
427
- Returns:
428
- The qobj to be run on the backends
429
-
430
- Examples:
431
-
432
- .. code-block:: python
433
-
434
- from qiskit.circuit import QuantumRegister, ClassicalRegister, QuantumCircuit
435
- from qiskit.assembler import assemble_circuits
436
- from qiskit.assembler.run_config import RunConfig
437
- # Build a circuit to convert into a Qobj
438
- q = QuantumRegister(2)
439
- c = ClassicalRegister(2)
440
- qc = QuantumCircuit(q, c)
441
- qc.h(q[0])
442
- qc.cx(q[0], q[1])
443
- qc.measure(q, c)
444
- # Assemble a Qobj from the input circuit
445
- qobj = assemble_circuits(circuits=[qc],
446
- qobj_id="custom-id",
447
- qobj_header=[],
448
- run_config=RunConfig(shots=2000, memory=True, init_qubits=True))
449
- """
450
- # assemble the circuit experiments
451
- return _assemble_circuits(circuits, run_config, qobj_id, qobj_header)