qiskit 1.4.1__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0rc1__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 (456) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +2 -5
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/circuit/__init__.py +24 -5
  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 +248 -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 +34 -5
  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/hamiltonian_gate.py +1 -1
  60. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  61. qiskit/circuit/library/n_local/n_local.py +1 -1
  62. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  63. qiskit/circuit/library/overlap.py +2 -2
  64. qiskit/circuit/library/pauli_evolution.py +39 -24
  65. qiskit/circuit/library/phase_oracle.py +130 -51
  66. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  67. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  68. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  69. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  70. qiskit/circuit/library/standard_gates/h.py +4 -9
  71. qiskit/circuit/library/standard_gates/i.py +2 -2
  72. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  73. qiskit/circuit/library/standard_gates/p.py +15 -34
  74. qiskit/circuit/library/standard_gates/r.py +2 -6
  75. qiskit/circuit/library/standard_gates/rx.py +5 -15
  76. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  77. qiskit/circuit/library/standard_gates/ry.py +5 -17
  78. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  79. qiskit/circuit/library/standard_gates/rz.py +5 -17
  80. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  81. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  82. qiskit/circuit/library/standard_gates/s.py +6 -15
  83. qiskit/circuit/library/standard_gates/swap.py +4 -11
  84. qiskit/circuit/library/standard_gates/sx.py +7 -12
  85. qiskit/circuit/library/standard_gates/t.py +6 -7
  86. qiskit/circuit/library/standard_gates/u.py +2 -10
  87. qiskit/circuit/library/standard_gates/u1.py +5 -16
  88. qiskit/circuit/library/standard_gates/u2.py +2 -6
  89. qiskit/circuit/library/standard_gates/u3.py +3 -11
  90. qiskit/circuit/library/standard_gates/x.py +13 -60
  91. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  92. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/y.py +4 -9
  94. qiskit/circuit/library/standard_gates/z.py +5 -15
  95. qiskit/circuit/measure.py +11 -2
  96. qiskit/circuit/parameterexpression.py +4 -0
  97. qiskit/circuit/quantumcircuit.py +881 -555
  98. qiskit/circuit/random/utils.py +12 -6
  99. qiskit/circuit/reset.py +5 -2
  100. qiskit/circuit/singleton.py +5 -11
  101. qiskit/circuit/store.py +0 -8
  102. qiskit/compiler/__init__.py +1 -7
  103. qiskit/compiler/transpiler.py +38 -196
  104. qiskit/converters/circuit_to_dag.py +4 -2
  105. qiskit/converters/circuit_to_dagdependency.py +0 -2
  106. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  107. qiskit/converters/circuit_to_gate.py +1 -1
  108. qiskit/converters/circuit_to_instruction.py +16 -29
  109. qiskit/converters/dag_to_circuit.py +5 -5
  110. qiskit/converters/dag_to_dagdependency.py +0 -1
  111. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  112. qiskit/converters/dagdependency_to_circuit.py +0 -6
  113. qiskit/converters/dagdependency_to_dag.py +0 -6
  114. qiskit/dagcircuit/collect_blocks.py +32 -20
  115. qiskit/dagcircuit/dagdependency.py +3 -37
  116. qiskit/dagcircuit/dagdependency_v2.py +2 -80
  117. qiskit/dagcircuit/dagnode.py +14 -2
  118. qiskit/passmanager/__init__.py +24 -6
  119. qiskit/passmanager/passmanager.py +26 -24
  120. qiskit/primitives/__init__.py +44 -35
  121. qiskit/primitives/backend_estimator_v2.py +102 -23
  122. qiskit/primitives/backend_sampler_v2.py +5 -20
  123. qiskit/primitives/base/__init__.py +4 -4
  124. qiskit/primitives/base/base_estimator.py +77 -82
  125. qiskit/primitives/base/base_primitive_job.py +2 -2
  126. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  127. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  128. qiskit/primitives/base/base_sampler.py +52 -60
  129. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  130. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  131. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  132. qiskit/primitives/containers/bindings_array.py +3 -1
  133. qiskit/primitives/containers/bit_array.py +23 -0
  134. qiskit/primitives/containers/data_bin.py +3 -1
  135. qiskit/primitives/containers/observables_array.py +19 -2
  136. qiskit/primitives/statevector_sampler.py +6 -8
  137. qiskit/primitives/utils.py +14 -189
  138. qiskit/providers/__init__.py +4 -130
  139. qiskit/providers/backend.py +11 -314
  140. qiskit/providers/basic_provider/__init__.py +3 -1
  141. qiskit/providers/basic_provider/basic_provider.py +29 -9
  142. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  143. qiskit/providers/exceptions.py +0 -33
  144. qiskit/providers/fake_provider/__init__.py +0 -37
  145. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  146. qiskit/qasm2/__init__.py +21 -6
  147. qiskit/qasm2/export.py +2 -10
  148. qiskit/qasm2/parse.py +11 -25
  149. qiskit/qasm3/__init__.py +5 -1
  150. qiskit/qasm3/ast.py +44 -0
  151. qiskit/qasm3/exporter.py +65 -27
  152. qiskit/qasm3/printer.py +35 -4
  153. qiskit/qpy/__init__.py +141 -19
  154. qiskit/qpy/binary_io/__init__.py +0 -1
  155. qiskit/qpy/binary_io/circuits.py +91 -116
  156. qiskit/qpy/binary_io/schedules.py +61 -388
  157. qiskit/qpy/binary_io/value.py +154 -28
  158. qiskit/qpy/common.py +10 -7
  159. qiskit/qpy/formats.py +41 -0
  160. qiskit/qpy/interface.py +29 -62
  161. qiskit/qpy/type_keys.py +58 -221
  162. qiskit/quantum_info/analysis/distance.py +3 -1
  163. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  164. qiskit/quantum_info/operators/operator.py +6 -2
  165. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  166. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  167. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  168. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  169. qiskit/quantum_info/states/densitymatrix.py +16 -6
  170. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  171. qiskit/quantum_info/states/statevector.py +16 -6
  172. qiskit/result/__init__.py +5 -17
  173. qiskit/result/models.py +18 -10
  174. qiskit/result/result.py +28 -126
  175. qiskit/result/sampled_expval.py +1 -2
  176. qiskit/result/utils.py +3 -4
  177. qiskit/synthesis/__init__.py +21 -1
  178. qiskit/synthesis/arithmetic/__init__.py +3 -1
  179. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  180. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  181. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  182. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  183. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  184. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  185. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  186. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  187. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  188. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  189. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  190. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  191. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  192. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -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 +2 -40
  209. qiskit/transpiler/passes/basis/basis_translator.py +4 -3
  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 +4 -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 +1 -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 +30 -2
  245. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -58
  246. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +11 -3
  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 +127 -59
  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 +101 -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 +67 -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/dag_visualization.py +2 -1
  287. qiskit/visualization/gate_map.py +39 -154
  288. qiskit/visualization/pass_manager_visualization.py +6 -2
  289. qiskit/visualization/state_visualization.py +6 -0
  290. qiskit/visualization/timeline/core.py +18 -12
  291. qiskit/visualization/timeline/interface.py +19 -18
  292. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
  293. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +297 -444
  294. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +2 -1
  295. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/entry_points.txt +8 -2
  296. qiskit/assembler/__init__.py +0 -42
  297. qiskit/assembler/assemble_circuits.py +0 -451
  298. qiskit/assembler/assemble_schedules.py +0 -367
  299. qiskit/assembler/disassemble.py +0 -310
  300. qiskit/assembler/run_config.py +0 -77
  301. qiskit/circuit/bit.py +0 -106
  302. qiskit/circuit/classicalfunction/__init__.py +0 -152
  303. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  304. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  305. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  306. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  307. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  308. qiskit/circuit/classicalfunction/types.py +0 -18
  309. qiskit/circuit/classicalfunction/utils.py +0 -91
  310. qiskit/circuit/classicalregister.py +0 -57
  311. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  312. qiskit/circuit/quantumregister.py +0 -75
  313. qiskit/circuit/register.py +0 -246
  314. qiskit/compiler/assembler.py +0 -689
  315. qiskit/compiler/scheduler.py +0 -109
  316. qiskit/compiler/sequencer.py +0 -71
  317. qiskit/primitives/backend_estimator.py +0 -486
  318. qiskit/primitives/backend_sampler.py +0 -222
  319. qiskit/primitives/estimator.py +0 -172
  320. qiskit/primitives/sampler.py +0 -162
  321. qiskit/providers/backend_compat.py +0 -507
  322. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  323. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  324. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  325. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  326. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  327. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  328. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  329. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  330. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  332. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  333. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  335. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  336. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  337. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  338. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  339. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  341. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  343. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  344. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  345. qiskit/providers/fake_provider/fake_1q.py +0 -91
  346. qiskit/providers/fake_provider/fake_backend.py +0 -165
  347. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  348. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  349. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  350. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  351. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  352. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  353. qiskit/providers/models/__init__.py +0 -89
  354. qiskit/providers/models/backendconfiguration.py +0 -1040
  355. qiskit/providers/models/backendproperties.py +0 -535
  356. qiskit/providers/models/backendstatus.py +0 -104
  357. qiskit/providers/models/jobstatus.py +0 -77
  358. qiskit/providers/models/pulsedefaults.py +0 -305
  359. qiskit/providers/provider.py +0 -95
  360. qiskit/pulse/__init__.py +0 -158
  361. qiskit/pulse/builder.py +0 -2262
  362. qiskit/pulse/calibration_entries.py +0 -381
  363. qiskit/pulse/channels.py +0 -227
  364. qiskit/pulse/configuration.py +0 -245
  365. qiskit/pulse/exceptions.py +0 -45
  366. qiskit/pulse/filters.py +0 -309
  367. qiskit/pulse/instruction_schedule_map.py +0 -424
  368. qiskit/pulse/instructions/__init__.py +0 -67
  369. qiskit/pulse/instructions/acquire.py +0 -150
  370. qiskit/pulse/instructions/delay.py +0 -71
  371. qiskit/pulse/instructions/directives.py +0 -154
  372. qiskit/pulse/instructions/frequency.py +0 -135
  373. qiskit/pulse/instructions/instruction.py +0 -270
  374. qiskit/pulse/instructions/phase.py +0 -152
  375. qiskit/pulse/instructions/play.py +0 -99
  376. qiskit/pulse/instructions/reference.py +0 -100
  377. qiskit/pulse/instructions/snapshot.py +0 -82
  378. qiskit/pulse/library/__init__.py +0 -97
  379. qiskit/pulse/library/continuous.py +0 -430
  380. qiskit/pulse/library/pulse.py +0 -148
  381. qiskit/pulse/library/samplers/__init__.py +0 -15
  382. qiskit/pulse/library/samplers/decorators.py +0 -295
  383. qiskit/pulse/library/samplers/strategies.py +0 -71
  384. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  385. qiskit/pulse/library/waveform.py +0 -136
  386. qiskit/pulse/macros.py +0 -262
  387. qiskit/pulse/parameter_manager.py +0 -445
  388. qiskit/pulse/parser.py +0 -314
  389. qiskit/pulse/reference_manager.py +0 -58
  390. qiskit/pulse/schedule.py +0 -1854
  391. qiskit/pulse/transforms/__init__.py +0 -106
  392. qiskit/pulse/transforms/alignments.py +0 -406
  393. qiskit/pulse/transforms/base_transforms.py +0 -71
  394. qiskit/pulse/transforms/canonicalization.py +0 -498
  395. qiskit/pulse/transforms/dag.py +0 -122
  396. qiskit/pulse/utils.py +0 -149
  397. qiskit/qobj/__init__.py +0 -75
  398. qiskit/qobj/common.py +0 -81
  399. qiskit/qobj/converters/__init__.py +0 -18
  400. qiskit/qobj/converters/lo_config.py +0 -177
  401. qiskit/qobj/converters/pulse_instruction.py +0 -897
  402. qiskit/qobj/pulse_qobj.py +0 -709
  403. qiskit/qobj/qasm_qobj.py +0 -708
  404. qiskit/qobj/utils.py +0 -46
  405. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  406. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  407. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  408. qiskit/result/mitigation/utils.py +0 -217
  409. qiskit/scheduler/__init__.py +0 -40
  410. qiskit/scheduler/config.py +0 -37
  411. qiskit/scheduler/lowering.py +0 -187
  412. qiskit/scheduler/methods/__init__.py +0 -15
  413. qiskit/scheduler/methods/basic.py +0 -140
  414. qiskit/scheduler/schedule_circuit.py +0 -69
  415. qiskit/scheduler/sequence.py +0 -104
  416. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  417. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  418. qiskit/transpiler/passes/calibration/builders.py +0 -20
  419. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  420. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  421. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  422. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  423. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  424. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  425. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  426. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  427. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  428. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  429. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  430. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  431. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  432. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  433. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  434. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  435. qiskit/utils/deprecate_pulse.py +0 -119
  436. qiskit/utils/multiprocessing.py +0 -56
  437. qiskit/visualization/pulse_v2/__init__.py +0 -21
  438. qiskit/visualization/pulse_v2/core.py +0 -901
  439. qiskit/visualization/pulse_v2/device_info.py +0 -173
  440. qiskit/visualization/pulse_v2/drawings.py +0 -253
  441. qiskit/visualization/pulse_v2/events.py +0 -254
  442. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  443. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  444. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  445. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  446. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  447. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  448. qiskit/visualization/pulse_v2/interface.py +0 -459
  449. qiskit/visualization/pulse_v2/layouts.py +0 -387
  450. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  451. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  452. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  453. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  454. qiskit/visualization/pulse_v2/types.py +0 -242
  455. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
  456. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.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 (76.0.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)