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

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