qiskit 1.4.2__cp39-abi3-win_amd64.whl → 2.0.0rc2__cp39-abi3-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +2 -5
  3. qiskit/_accelerate.pyd +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 +3 -7
  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 +7 -1
  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 +93 -130
  156. qiskit/qpy/binary_io/schedules.py +69 -439
  157. qiskit/qpy/binary_io/value.py +154 -31
  158. qiskit/qpy/common.py +10 -7
  159. qiskit/qpy/formats.py +41 -0
  160. qiskit/qpy/interface.py +34 -81
  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/evolution/lie_trotter.py +10 -7
  193. qiskit/synthesis/evolution/product_formula.py +44 -35
  194. qiskit/synthesis/evolution/qdrift.py +17 -24
  195. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  196. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  197. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  198. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  199. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  200. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  201. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  202. qiskit/synthesis/two_qubit/__init__.py +1 -0
  203. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  204. qiskit/transpiler/__init__.py +32 -232
  205. qiskit/transpiler/basepasses.py +20 -51
  206. qiskit/transpiler/layout.py +1 -1
  207. qiskit/transpiler/passes/__init__.py +2 -40
  208. qiskit/transpiler/passes/basis/basis_translator.py +4 -3
  209. qiskit/transpiler/passes/basis/decompose.py +1 -15
  210. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  211. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  212. qiskit/transpiler/passes/layout/apply_layout.py +4 -0
  213. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  214. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +4 -4
  215. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  216. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  217. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  218. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  219. qiskit/transpiler/passes/optimization/__init__.py +1 -3
  220. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  221. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  222. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  223. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  224. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  225. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  226. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  227. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  228. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  229. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  230. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  231. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  232. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  233. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  234. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -0
  235. qiskit/transpiler/passes/routing/__init__.py +0 -1
  236. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  237. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  238. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  239. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  240. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  241. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  242. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  243. qiskit/transpiler/passes/scheduling/padding/base_padding.py +30 -2
  244. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -58
  245. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +11 -3
  246. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  247. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  248. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  249. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +127 -59
  250. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  251. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  252. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  253. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  254. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  255. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  256. qiskit/transpiler/passes/utils/__init__.py +0 -1
  257. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  258. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  259. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  260. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  261. qiskit/transpiler/passmanager.py +13 -0
  262. qiskit/transpiler/passmanager_config.py +5 -81
  263. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  264. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  265. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +101 -322
  266. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  267. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  268. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  269. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  270. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  271. qiskit/transpiler/target.py +67 -524
  272. qiskit/user_config.py +8 -4
  273. qiskit/utils/__init__.py +13 -12
  274. qiskit/utils/deprecation.py +4 -112
  275. qiskit/utils/optionals.py +11 -4
  276. qiskit/utils/parallel.py +214 -87
  277. qiskit/utils/units.py +4 -1
  278. qiskit/visualization/__init__.py +3 -7
  279. qiskit/visualization/array.py +4 -1
  280. qiskit/visualization/bloch.py +1 -1
  281. qiskit/visualization/circuit/_utils.py +19 -19
  282. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  283. qiskit/visualization/circuit/matplotlib.py +13 -23
  284. qiskit/visualization/circuit/text.py +7 -3
  285. qiskit/visualization/dag_visualization.py +2 -1
  286. qiskit/visualization/gate_map.py +39 -154
  287. qiskit/visualization/pass_manager_visualization.py +6 -2
  288. qiskit/visualization/state_visualization.py +6 -0
  289. qiskit/visualization/timeline/core.py +18 -12
  290. qiskit/visualization/timeline/interface.py +19 -18
  291. {qiskit-1.4.2.dist-info → qiskit-2.0.0rc2.dist-info}/METADATA +2 -2
  292. {qiskit-1.4.2.dist-info → qiskit-2.0.0rc2.dist-info}/RECORD +296 -443
  293. {qiskit-1.4.2.dist-info → qiskit-2.0.0rc2.dist-info}/entry_points.txt +8 -2
  294. qiskit/assembler/__init__.py +0 -42
  295. qiskit/assembler/assemble_circuits.py +0 -451
  296. qiskit/assembler/assemble_schedules.py +0 -367
  297. qiskit/assembler/disassemble.py +0 -310
  298. qiskit/assembler/run_config.py +0 -77
  299. qiskit/circuit/bit.py +0 -106
  300. qiskit/circuit/classicalfunction/__init__.py +0 -152
  301. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  302. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  303. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  304. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  305. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  306. qiskit/circuit/classicalfunction/types.py +0 -18
  307. qiskit/circuit/classicalfunction/utils.py +0 -91
  308. qiskit/circuit/classicalregister.py +0 -57
  309. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  310. qiskit/circuit/quantumregister.py +0 -75
  311. qiskit/circuit/register.py +0 -246
  312. qiskit/compiler/assembler.py +0 -689
  313. qiskit/compiler/scheduler.py +0 -109
  314. qiskit/compiler/sequencer.py +0 -71
  315. qiskit/primitives/backend_estimator.py +0 -486
  316. qiskit/primitives/backend_sampler.py +0 -222
  317. qiskit/primitives/estimator.py +0 -172
  318. qiskit/primitives/sampler.py +0 -162
  319. qiskit/providers/backend_compat.py +0 -507
  320. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  321. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  322. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  323. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  324. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  325. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  326. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  327. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  328. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  329. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  330. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  332. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  333. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  335. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  336. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  337. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  338. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  339. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  341. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  342. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  343. qiskit/providers/fake_provider/fake_1q.py +0 -91
  344. qiskit/providers/fake_provider/fake_backend.py +0 -165
  345. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  346. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  347. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  348. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  349. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  350. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  351. qiskit/providers/models/__init__.py +0 -89
  352. qiskit/providers/models/backendconfiguration.py +0 -1040
  353. qiskit/providers/models/backendproperties.py +0 -535
  354. qiskit/providers/models/backendstatus.py +0 -104
  355. qiskit/providers/models/jobstatus.py +0 -77
  356. qiskit/providers/models/pulsedefaults.py +0 -305
  357. qiskit/providers/provider.py +0 -95
  358. qiskit/pulse/__init__.py +0 -158
  359. qiskit/pulse/builder.py +0 -2262
  360. qiskit/pulse/calibration_entries.py +0 -381
  361. qiskit/pulse/channels.py +0 -227
  362. qiskit/pulse/configuration.py +0 -245
  363. qiskit/pulse/exceptions.py +0 -45
  364. qiskit/pulse/filters.py +0 -309
  365. qiskit/pulse/instruction_schedule_map.py +0 -424
  366. qiskit/pulse/instructions/__init__.py +0 -67
  367. qiskit/pulse/instructions/acquire.py +0 -150
  368. qiskit/pulse/instructions/delay.py +0 -71
  369. qiskit/pulse/instructions/directives.py +0 -154
  370. qiskit/pulse/instructions/frequency.py +0 -135
  371. qiskit/pulse/instructions/instruction.py +0 -270
  372. qiskit/pulse/instructions/phase.py +0 -152
  373. qiskit/pulse/instructions/play.py +0 -99
  374. qiskit/pulse/instructions/reference.py +0 -100
  375. qiskit/pulse/instructions/snapshot.py +0 -82
  376. qiskit/pulse/library/__init__.py +0 -97
  377. qiskit/pulse/library/continuous.py +0 -430
  378. qiskit/pulse/library/pulse.py +0 -148
  379. qiskit/pulse/library/samplers/__init__.py +0 -15
  380. qiskit/pulse/library/samplers/decorators.py +0 -295
  381. qiskit/pulse/library/samplers/strategies.py +0 -71
  382. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  383. qiskit/pulse/library/waveform.py +0 -136
  384. qiskit/pulse/macros.py +0 -262
  385. qiskit/pulse/parameter_manager.py +0 -445
  386. qiskit/pulse/parser.py +0 -314
  387. qiskit/pulse/reference_manager.py +0 -58
  388. qiskit/pulse/schedule.py +0 -1854
  389. qiskit/pulse/transforms/__init__.py +0 -106
  390. qiskit/pulse/transforms/alignments.py +0 -406
  391. qiskit/pulse/transforms/base_transforms.py +0 -71
  392. qiskit/pulse/transforms/canonicalization.py +0 -498
  393. qiskit/pulse/transforms/dag.py +0 -122
  394. qiskit/pulse/utils.py +0 -149
  395. qiskit/qobj/__init__.py +0 -75
  396. qiskit/qobj/common.py +0 -81
  397. qiskit/qobj/converters/__init__.py +0 -18
  398. qiskit/qobj/converters/lo_config.py +0 -177
  399. qiskit/qobj/converters/pulse_instruction.py +0 -897
  400. qiskit/qobj/pulse_qobj.py +0 -709
  401. qiskit/qobj/qasm_qobj.py +0 -708
  402. qiskit/qobj/utils.py +0 -46
  403. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  404. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  405. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  406. qiskit/result/mitigation/utils.py +0 -217
  407. qiskit/scheduler/__init__.py +0 -40
  408. qiskit/scheduler/config.py +0 -37
  409. qiskit/scheduler/lowering.py +0 -187
  410. qiskit/scheduler/methods/__init__.py +0 -15
  411. qiskit/scheduler/methods/basic.py +0 -140
  412. qiskit/scheduler/schedule_circuit.py +0 -69
  413. qiskit/scheduler/sequence.py +0 -104
  414. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  415. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  416. qiskit/transpiler/passes/calibration/builders.py +0 -20
  417. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  418. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  419. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  420. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  421. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  422. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  423. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  424. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  425. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  426. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  427. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  428. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  429. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  430. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  431. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  432. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  433. qiskit/utils/deprecate_pulse.py +0 -119
  434. qiskit/utils/multiprocessing.py +0 -56
  435. qiskit/visualization/pulse_v2/__init__.py +0 -21
  436. qiskit/visualization/pulse_v2/core.py +0 -901
  437. qiskit/visualization/pulse_v2/device_info.py +0 -173
  438. qiskit/visualization/pulse_v2/drawings.py +0 -253
  439. qiskit/visualization/pulse_v2/events.py +0 -254
  440. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  441. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  442. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  443. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  444. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  445. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  446. qiskit/visualization/pulse_v2/interface.py +0 -459
  447. qiskit/visualization/pulse_v2/layouts.py +0 -387
  448. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  449. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  450. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  451. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  452. qiskit/visualization/pulse_v2/types.py +0 -242
  453. {qiskit-1.4.2.dist-info → qiskit-2.0.0rc2.dist-info}/LICENSE.txt +0 -0
  454. {qiskit-1.4.2.dist-info → qiskit-2.0.0rc2.dist-info}/WHEEL +0 -0
  455. {qiskit-1.4.2.dist-info → qiskit-2.0.0rc2.dist-info}/top_level.txt +0 -0
@@ -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)