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,187 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2017, 2020.
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
- """Lower gates to schedules. The relative timing within gates is respected. This
14
- module handles the translation, but does not handle timing.
15
- """
16
- from collections import namedtuple
17
- from typing import Dict, List, Optional, Union
18
-
19
- from qiskit.circuit.barrier import Barrier
20
- from qiskit.circuit.delay import Delay
21
- from qiskit.circuit.duration import convert_durations_to_dt
22
- from qiskit.circuit.measure import Measure
23
- from qiskit.circuit.quantumcircuit import QuantumCircuit
24
- from qiskit.exceptions import QiskitError
25
- from qiskit.pulse import Schedule
26
- from qiskit.pulse import instructions as pulse_inst
27
- from qiskit.pulse.channels import AcquireChannel, MemorySlot, DriveChannel
28
- from qiskit.pulse.exceptions import PulseError
29
- from qiskit.pulse.macros import measure
30
- from qiskit.scheduler.config import ScheduleConfig
31
- from qiskit.providers import BackendV1, BackendV2
32
-
33
- CircuitPulseDef = namedtuple(
34
- "CircuitPulseDef",
35
- ["schedule", "qubits"], # The schedule which implements the quantum circuit command
36
- ) # The labels of the qubits involved in the command according to the circuit
37
-
38
-
39
- def lower_gates(
40
- circuit: QuantumCircuit,
41
- schedule_config: ScheduleConfig,
42
- backend: Optional[Union[BackendV1, BackendV2]] = None,
43
- ) -> List[CircuitPulseDef]:
44
- """
45
- Return a list of Schedules and the qubits they operate on, for each element encountered in the
46
- input circuit.
47
-
48
- Without concern for the final schedule, extract and return a list of Schedules and the qubits
49
- they operate on, for each element encountered in the input circuit. Measures are grouped when
50
- possible, so ``qc.measure(q0, c0)`` or ``qc.measure(q1, c1)`` will generate a synchronous
51
- measurement pulse.
52
-
53
- Args:
54
- circuit: The quantum circuit to translate.
55
- schedule_config: Backend specific parameters used for building the Schedule.
56
- backend: Pass in the backend used to build the Schedule, the backend could be BackendV1
57
- or BackendV2
58
-
59
- Returns:
60
- A list of CircuitPulseDefs: the pulse definition for each circuit element.
61
-
62
- Raises:
63
- QiskitError: If circuit uses a command that isn't defined in config.inst_map.
64
- """
65
- from qiskit.pulse.transforms.base_transforms import target_qobj_transform
66
-
67
- circ_pulse_defs = []
68
-
69
- inst_map = schedule_config.inst_map
70
- qubit_mem_slots = {} # Map measured qubit index to classical bit index
71
-
72
- # convert the unit of durations from SI to dt before lowering
73
- circuit = convert_durations_to_dt(circuit, dt_in_sec=schedule_config.dt, inplace=False)
74
-
75
- def get_measure_schedule(qubit_mem_slots: Dict[int, int]) -> CircuitPulseDef:
76
- """Create a schedule to measure the qubits queued for measuring."""
77
- sched = Schedule()
78
- # Exclude acquisition on these qubits, since they are handled by the user calibrations
79
- acquire_excludes = {}
80
- if Measure().name in circuit.calibrations.keys():
81
- qubits = tuple(sorted(qubit_mem_slots.keys()))
82
- params = ()
83
- for qubit in qubits:
84
- try:
85
- meas_q = circuit.calibrations[Measure().name][((qubit,), params)]
86
- meas_q = target_qobj_transform(meas_q)
87
- acquire_q = meas_q.filter(channels=[AcquireChannel(qubit)])
88
- mem_slot_index = [
89
- chan.index for chan in acquire_q.channels if isinstance(chan, MemorySlot)
90
- ][0]
91
- if mem_slot_index != qubit_mem_slots[qubit]:
92
- raise KeyError(
93
- "The measurement calibration is not defined on "
94
- "the requested classical bits"
95
- )
96
- sched |= meas_q
97
- del qubit_mem_slots[qubit]
98
- acquire_excludes[qubit] = mem_slot_index
99
- except KeyError:
100
- pass
101
-
102
- if qubit_mem_slots:
103
- qubits = list(qubit_mem_slots.keys())
104
- qubit_mem_slots.update(acquire_excludes)
105
- meas_sched = measure(
106
- qubits=qubits,
107
- backend=backend,
108
- inst_map=inst_map,
109
- meas_map=schedule_config.meas_map,
110
- qubit_mem_slots=qubit_mem_slots,
111
- )
112
- meas_sched = target_qobj_transform(meas_sched)
113
- meas_sched = meas_sched.exclude(
114
- channels=[AcquireChannel(qubit) for qubit in acquire_excludes]
115
- )
116
- sched |= meas_sched
117
- qubit_mem_slots.clear()
118
- return CircuitPulseDef(
119
- schedule=sched,
120
- qubits=[chan.index for chan in sched.channels if isinstance(chan, AcquireChannel)],
121
- )
122
-
123
- qubit_indices = {bit: idx for idx, bit in enumerate(circuit.qubits)}
124
- clbit_indices = {bit: idx for idx, bit in enumerate(circuit.clbits)}
125
-
126
- for instruction in circuit.data:
127
- inst_qubits = [qubit_indices[qubit] for qubit in instruction.qubits]
128
-
129
- if any(q in qubit_mem_slots for q in inst_qubits):
130
- # If we are operating on a qubit that was scheduled to be measured, process that first
131
- circ_pulse_defs.append(get_measure_schedule(qubit_mem_slots))
132
-
133
- if isinstance(instruction.operation, Barrier):
134
- circ_pulse_defs.append(
135
- CircuitPulseDef(schedule=instruction.operation, qubits=inst_qubits)
136
- )
137
- elif isinstance(instruction.operation, Delay):
138
- sched = Schedule(name=instruction.operation.name)
139
- for qubit in inst_qubits:
140
- for channel in [DriveChannel]:
141
- sched += pulse_inst.Delay(
142
- duration=instruction.operation.duration, channel=channel(qubit)
143
- )
144
- circ_pulse_defs.append(CircuitPulseDef(schedule=sched, qubits=inst_qubits))
145
- elif isinstance(instruction.operation, Measure):
146
- if len(inst_qubits) != 1 and len(instruction.clbits) != 1:
147
- raise QiskitError(
148
- f"Qubit '{inst_qubits}' or classical bit '{instruction.clbits}' errored because the "
149
- "circuit Measure instruction only takes one of "
150
- "each."
151
- )
152
- qubit_mem_slots[inst_qubits[0]] = clbit_indices[instruction.clbits[0]]
153
- else:
154
- try:
155
- gate_cals = circuit.calibrations[instruction.operation.name]
156
- schedule = gate_cals[
157
- (
158
- tuple(inst_qubits),
159
- tuple(
160
- p if getattr(p, "parameters", None) else float(p)
161
- for p in instruction.operation.params
162
- ),
163
- )
164
- ]
165
- schedule = target_qobj_transform(schedule)
166
- circ_pulse_defs.append(CircuitPulseDef(schedule=schedule, qubits=inst_qubits))
167
- continue
168
- except KeyError:
169
- pass # Calibration not defined for this operation
170
-
171
- try:
172
- schedule = inst_map.get(
173
- instruction.operation, inst_qubits, *instruction.operation.params
174
- )
175
- schedule = target_qobj_transform(schedule)
176
- circ_pulse_defs.append(CircuitPulseDef(schedule=schedule, qubits=inst_qubits))
177
- except PulseError as ex:
178
- raise QiskitError(
179
- f"Operation '{instruction.operation.name}' on qubit(s) {inst_qubits} "
180
- "not supported by the backend command definition. Did you remember to "
181
- "transpile your input circuit for the same backend?"
182
- ) from ex
183
-
184
- if qubit_mem_slots:
185
- circ_pulse_defs.append(get_measure_schedule(qubit_mem_slots))
186
-
187
- return circ_pulse_defs
@@ -1,15 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 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
- """Scheduling methods."""
14
-
15
- from qiskit.scheduler.methods.basic import as_soon_as_possible, as_late_as_possible
@@ -1,140 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 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
- The most straightforward scheduling methods: scheduling **as early** or **as late** as possible.
15
- """
16
- from collections import defaultdict
17
- from typing import List, Optional, Union
18
-
19
- from qiskit.circuit.quantumcircuit import QuantumCircuit
20
- from qiskit.circuit.barrier import Barrier
21
- from qiskit.pulse.schedule import Schedule
22
-
23
- from qiskit.scheduler.config import ScheduleConfig
24
- from qiskit.scheduler.lowering import lower_gates
25
- from qiskit.providers import BackendV1, BackendV2
26
- from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
27
-
28
-
29
- @deprecate_pulse_dependency(moving_to_dynamics=True)
30
- def as_soon_as_possible(
31
- circuit: QuantumCircuit,
32
- schedule_config: ScheduleConfig,
33
- backend: Optional[Union[BackendV1, BackendV2]] = None,
34
- ) -> Schedule:
35
- """
36
- Return the pulse Schedule which implements the input circuit using an "as soon as possible"
37
- (asap) scheduling policy.
38
-
39
- Circuit instructions are first each mapped to equivalent pulse
40
- Schedules according to the command definition given by the schedule_config. Then, this circuit
41
- instruction-equivalent Schedule is appended at the earliest time at which all qubits involved
42
- in the instruction are available.
43
-
44
- Args:
45
- circuit: The quantum circuit to translate.
46
- schedule_config: Backend specific parameters used for building the Schedule.
47
- backend: A backend used to build the Schedule, the backend could be BackendV1
48
- or BackendV2.
49
-
50
- Returns:
51
- A schedule corresponding to the input ``circuit`` with pulses occurring as early as
52
- possible.
53
- """
54
- qubit_time_available = defaultdict(int)
55
-
56
- def update_times(inst_qubits: List[int], time: int = 0) -> None:
57
- """Update the time tracker for all inst_qubits to the given time."""
58
- for q in inst_qubits:
59
- qubit_time_available[q] = time
60
-
61
- start_times = []
62
- circ_pulse_defs = lower_gates(circuit, schedule_config, backend)
63
- for circ_pulse_def in circ_pulse_defs:
64
- start_time = max(qubit_time_available[q] for q in circ_pulse_def.qubits)
65
- stop_time = start_time
66
- if not isinstance(circ_pulse_def.schedule, Barrier):
67
- stop_time += circ_pulse_def.schedule.duration
68
-
69
- start_times.append(start_time)
70
- update_times(circ_pulse_def.qubits, stop_time)
71
-
72
- timed_schedules = [
73
- (time, cpd.schedule)
74
- for time, cpd in zip(start_times, circ_pulse_defs)
75
- if not isinstance(cpd.schedule, Barrier)
76
- ]
77
- schedule = Schedule.initialize_from(circuit)
78
- for time, inst in timed_schedules:
79
- schedule.insert(time, inst, inplace=True)
80
- return schedule
81
-
82
-
83
- @deprecate_pulse_dependency(moving_to_dynamics=True)
84
- def as_late_as_possible(
85
- circuit: QuantumCircuit,
86
- schedule_config: ScheduleConfig,
87
- backend: Optional[Union[BackendV1, BackendV2]] = None,
88
- ) -> Schedule:
89
- """
90
- Return the pulse Schedule which implements the input circuit using an "as late as possible"
91
- (alap) scheduling policy.
92
-
93
- Circuit instructions are first each mapped to equivalent pulse
94
- Schedules according to the command definition given by the schedule_config. Then, this circuit
95
- instruction-equivalent Schedule is appended at the latest time that it can be without allowing
96
- unnecessary time between instructions or allowing instructions with common qubits to overlap.
97
-
98
- This method should improves the outcome fidelity over ASAP scheduling, because we may
99
- maximize the time that the qubit remains in the ground state.
100
-
101
- Args:
102
- circuit: The quantum circuit to translate.
103
- schedule_config: Backend specific parameters used for building the Schedule.
104
- backend: A backend used to build the Schedule, the backend could be BackendV1
105
- or BackendV2.
106
-
107
- Returns:
108
- A schedule corresponding to the input ``circuit`` with pulses occurring as late as
109
- possible.
110
- """
111
- qubit_time_available = defaultdict(int)
112
-
113
- def update_times(inst_qubits: List[int], time: int = 0) -> None:
114
- """Update the time tracker for all inst_qubits to the given time."""
115
- for q in inst_qubits:
116
- qubit_time_available[q] = time
117
-
118
- rev_stop_times = []
119
- circ_pulse_defs = lower_gates(circuit, schedule_config, backend)
120
- for circ_pulse_def in reversed(circ_pulse_defs):
121
- start_time = max(qubit_time_available[q] for q in circ_pulse_def.qubits)
122
- stop_time = start_time
123
- if not isinstance(circ_pulse_def.schedule, Barrier):
124
- stop_time += circ_pulse_def.schedule.duration
125
-
126
- rev_stop_times.append(stop_time)
127
- update_times(circ_pulse_def.qubits, stop_time)
128
-
129
- last_stop = max(t for t in qubit_time_available.values()) if qubit_time_available else 0
130
- start_times = [last_stop - t for t in reversed(rev_stop_times)]
131
-
132
- timed_schedules = [
133
- (time, cpd.schedule)
134
- for time, cpd in zip(start_times, circ_pulse_defs)
135
- if not isinstance(cpd.schedule, Barrier)
136
- ]
137
- schedule = Schedule.initialize_from(circuit)
138
- for time, inst in timed_schedules:
139
- schedule.insert(time, inst, inplace=True)
140
- return schedule
@@ -1,69 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 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
- """QuantumCircuit to Pulse scheduler."""
14
- from typing import Optional, Union
15
-
16
- from qiskit.circuit.quantumcircuit import QuantumCircuit
17
- from qiskit.exceptions import QiskitError
18
-
19
- from qiskit.pulse.schedule import Schedule
20
- from qiskit.scheduler.config import ScheduleConfig
21
- from qiskit.scheduler.methods import as_soon_as_possible, as_late_as_possible
22
- from qiskit.providers import BackendV1, BackendV2
23
- from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
24
-
25
-
26
- @deprecate_pulse_dependency(moving_to_dynamics=True)
27
- def schedule_circuit(
28
- circuit: QuantumCircuit,
29
- schedule_config: ScheduleConfig,
30
- method: Optional[str] = None,
31
- backend: Optional[Union[BackendV1, BackendV2]] = None,
32
- ) -> Schedule:
33
- """
34
- Basic scheduling pass from a circuit to a pulse Schedule, using the backend. If no method is
35
- specified, then a basic, as late as possible scheduling pass is performed, i.e. pulses are
36
- scheduled to occur as late as possible.
37
-
38
- Supported methods:
39
-
40
- * ``'as_soon_as_possible'``: Schedule pulses greedily, as early as possible on a
41
- qubit resource. (alias: ``'asap'``)
42
- * ``'as_late_as_possible'``: Schedule pulses late-- keep qubits in the ground state when
43
- possible. (alias: ``'alap'``)
44
-
45
- Args:
46
- circuit: The quantum circuit to translate.
47
- schedule_config: Backend specific parameters used for building the Schedule.
48
- method: The scheduling pass method to use.
49
- backend: A backend used to build the Schedule, the backend could be BackendV1
50
- or BackendV2.
51
-
52
- Returns:
53
- Schedule corresponding to the input circuit.
54
-
55
- Raises:
56
- QiskitError: If method isn't recognized.
57
- """
58
- methods = {
59
- "as_soon_as_possible": as_soon_as_possible,
60
- "asap": as_soon_as_possible,
61
- "as_late_as_possible": as_late_as_possible,
62
- "alap": as_late_as_possible,
63
- }
64
- if method is None:
65
- method = "as_late_as_possible"
66
- try:
67
- return methods[method](circuit, schedule_config, backend)
68
- except KeyError as ex:
69
- raise QiskitError(f"Scheduling method {method} isn't recognized.") from ex
@@ -1,104 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2020.
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
- Mapping a scheduled QuantumCircuit to a pulse Schedule.
15
- """
16
- from collections import defaultdict
17
-
18
- from typing import Optional, Union
19
- from qiskit.circuit.barrier import Barrier
20
- from qiskit.circuit.measure import Measure
21
- from qiskit.circuit.quantumcircuit import QuantumCircuit
22
- from qiskit.exceptions import QiskitError
23
- from qiskit.pulse.schedule import Schedule
24
- from qiskit.pulse.transforms import pad
25
- from qiskit.scheduler.config import ScheduleConfig
26
- from qiskit.scheduler.lowering import lower_gates
27
- from qiskit.providers import BackendV1, BackendV2
28
- from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
29
-
30
-
31
- @deprecate_pulse_dependency(moving_to_dynamics=True)
32
- def sequence(
33
- scheduled_circuit: QuantumCircuit,
34
- schedule_config: ScheduleConfig,
35
- backend: Optional[Union[BackendV1, BackendV2]] = None,
36
- ) -> Schedule:
37
- """
38
- Return the pulse Schedule which implements the input scheduled circuit.
39
-
40
- Assume all measurements are done at once at the last of the circuit.
41
- Schedules according to the command definition given by the schedule_config.
42
-
43
- Args:
44
- scheduled_circuit: The scheduled quantum circuit to translate.
45
- schedule_config: Backend specific parameters used for building the Schedule.
46
- backend: A backend used to build the Schedule, the backend could be BackendV1
47
- or BackendV2
48
-
49
- Returns:
50
- A schedule corresponding to the input ``circuit``.
51
-
52
- Raises:
53
- QiskitError: If invalid scheduled circuit is supplied.
54
- """
55
- circ_pulse_defs = lower_gates(scheduled_circuit, schedule_config, backend)
56
-
57
- # find the measurement start time (assume measurement once)
58
- def _meas_start_time():
59
- _qubit_time_available = defaultdict(int)
60
- for instruction in scheduled_circuit.data:
61
- if isinstance(instruction.operation, Measure):
62
- return _qubit_time_available[instruction.qubits[0]]
63
- for q in instruction.qubits:
64
- _qubit_time_available[q] += instruction.operation.duration
65
- return None
66
-
67
- meas_time = _meas_start_time()
68
-
69
- # restore start times
70
- qubit_time_available = {}
71
- start_times = []
72
- out_circ_pulse_defs = []
73
- for circ_pulse_def in circ_pulse_defs:
74
- active_qubits = [q for q in circ_pulse_def.qubits if q in qubit_time_available]
75
-
76
- start_time = max((qubit_time_available[q] for q in active_qubits), default=0)
77
-
78
- for q in active_qubits:
79
- if qubit_time_available[q] != start_time:
80
- # print(q, ":", qubit_time_available[q], "!=", start_time)
81
- raise QiskitError("Invalid scheduled circuit.")
82
-
83
- stop_time = start_time
84
- if not isinstance(circ_pulse_def.schedule, Barrier):
85
- stop_time += circ_pulse_def.schedule.duration
86
-
87
- delay_overlaps_meas = False
88
- for q in circ_pulse_def.qubits:
89
- qubit_time_available[q] = stop_time
90
- if (
91
- meas_time is not None
92
- and circ_pulse_def.schedule.name == "delay"
93
- and stop_time > meas_time
94
- ):
95
- qubit_time_available[q] = meas_time
96
- delay_overlaps_meas = True
97
- # skip to delays overlapping measures and barriers
98
- if not delay_overlaps_meas and not isinstance(circ_pulse_def.schedule, Barrier):
99
- start_times.append(start_time)
100
- out_circ_pulse_defs.append(circ_pulse_def)
101
-
102
- timed_schedules = [(time, cpd.schedule) for time, cpd in zip(start_times, out_circ_pulse_defs)]
103
- sched = Schedule(*timed_schedules, name=scheduled_circuit.name)
104
- return pad(sched)
@@ -1,17 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2021
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
- """Module containing transpiler calibration passes."""
14
-
15
- from .pulse_gate import PulseGates
16
- from .rzx_builder import RZXCalibrationBuilder, RZXCalibrationBuilderNoEcho
17
- from .rx_builder import RXCalibrationBuilder
@@ -1,79 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2022.
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
- """Calibration builder base class."""
14
-
15
- from abc import abstractmethod
16
- from typing import List, Union
17
-
18
- from qiskit.circuit import Instruction as CircuitInst
19
- from qiskit.dagcircuit import DAGCircuit
20
- from qiskit.pulse import Schedule, ScheduleBlock
21
- from qiskit.pulse.calibration_entries import CalibrationPublisher
22
- from qiskit.transpiler.basepasses import TransformationPass
23
-
24
- from .exceptions import CalibrationNotAvailable
25
-
26
-
27
- class CalibrationBuilder(TransformationPass):
28
- """Abstract base class to inject calibrations into circuits."""
29
-
30
- @abstractmethod
31
- def supported(self, node_op: CircuitInst, qubits: List) -> bool:
32
- """Determine if a given node supports the calibration.
33
-
34
- Args:
35
- node_op: Target instruction object.
36
- qubits: Integer qubit indices to check.
37
-
38
- Returns:
39
- Return ``True`` is calibration can be provided.
40
- """
41
-
42
- @abstractmethod
43
- def get_calibration(self, node_op: CircuitInst, qubits: List) -> Union[Schedule, ScheduleBlock]:
44
- """Gets the calibrated schedule for the given instruction and qubits.
45
-
46
- Args:
47
- node_op: Target instruction object.
48
- qubits: Integer qubit indices to check.
49
-
50
- Returns:
51
- Return Schedule of target gate instruction.
52
- """
53
-
54
- def run(self, dag: DAGCircuit) -> DAGCircuit:
55
- """Run the calibration adder pass on `dag`.
56
-
57
- Args:
58
- dag: DAG to schedule.
59
-
60
- Returns:
61
- A DAG with calibrations added to it.
62
- """
63
- for node in dag.gate_nodes():
64
- qubits = [dag.find_bit(q).index for q in node.qargs]
65
-
66
- if self.supported(node.op, qubits) and not dag.has_calibration_for(node):
67
- # calibration can be provided and no user-defined calibration is already provided
68
- try:
69
- schedule = self.get_calibration(node.op, qubits)
70
- except CalibrationNotAvailable:
71
- # Fail in schedule generation. Just ignore.
72
- continue
73
- publisher = schedule.metadata.get("publisher", CalibrationPublisher.QISKIT)
74
-
75
- # add calibration if it is not backend default
76
- if publisher != CalibrationPublisher.BACKEND_PROVIDER:
77
- dag.add_calibration(gate=node.op, qubits=qubits, schedule=schedule)
78
-
79
- return dag
@@ -1,20 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2021.
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
- """Calibration creators."""
14
-
15
- # TODO This import path will be deprecated.
16
-
17
- # pylint: disable=unused-import
18
- from .pulse_gate import PulseGates
19
- from .rzx_builder import RZXCalibrationBuilder, RZXCalibrationBuilderNoEcho
20
- from .rx_builder import RXCalibrationBuilder
@@ -1,22 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2022.
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
- """Exception for errors raised by the calibration pass module."""
14
- from qiskit.exceptions import QiskitError
15
-
16
-
17
- class CalibrationNotAvailable(QiskitError):
18
- """Raised when calibration generation fails.
19
-
20
- .. note::
21
- This error is meant to caught by CalibrationBuilder and ignored.
22
- """