qiskit 1.4.1__cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl → 2.0.0__cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +3 -9
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/circuit/__init__.py +35 -10
  5. qiskit/circuit/{add_control.py → _add_control.py} +32 -12
  6. qiskit/circuit/_classical_resource_map.py +5 -3
  7. qiskit/circuit/barrier.py +3 -7
  8. qiskit/circuit/classical/expr/__init__.py +31 -3
  9. qiskit/circuit/classical/expr/constructors.py +236 -28
  10. qiskit/circuit/classical/expr/expr.py +104 -3
  11. qiskit/circuit/classical/expr/visitors.py +75 -0
  12. qiskit/circuit/classical/types/__init__.py +12 -8
  13. qiskit/circuit/classical/types/ordering.py +14 -7
  14. qiskit/circuit/classical/types/types.py +36 -0
  15. qiskit/circuit/commutation_checker.py +34 -7
  16. qiskit/circuit/controlflow/__init__.py +32 -1
  17. qiskit/circuit/controlflow/_builder_utils.py +9 -5
  18. qiskit/circuit/controlflow/box.py +163 -0
  19. qiskit/circuit/controlflow/break_loop.py +1 -1
  20. qiskit/circuit/controlflow/builder.py +139 -39
  21. qiskit/circuit/controlflow/continue_loop.py +1 -3
  22. qiskit/circuit/controlflow/control_flow.py +10 -0
  23. qiskit/circuit/controlflow/for_loop.py +2 -1
  24. qiskit/circuit/controlflow/if_else.py +3 -16
  25. qiskit/circuit/controlflow/switch_case.py +2 -8
  26. qiskit/circuit/controlflow/while_loop.py +2 -7
  27. qiskit/circuit/controlledgate.py +2 -4
  28. qiskit/circuit/delay.py +40 -11
  29. qiskit/circuit/duration.py +0 -15
  30. qiskit/circuit/gate.py +2 -4
  31. qiskit/circuit/instruction.py +2 -141
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +469 -154
  34. qiskit/circuit/library/arithmetic/__init__.py +16 -10
  35. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  36. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
  37. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  38. qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
  39. qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
  40. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
  41. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
  42. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
  43. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
  44. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
  45. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
  46. qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
  47. qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
  48. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  49. qiskit/circuit/library/blueprintcircuit.py +52 -16
  50. qiskit/circuit/library/data_preparation/initializer.py +1 -1
  51. qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
  52. qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
  53. qiskit/circuit/library/generalized_gates/gms.py +1 -1
  54. qiskit/circuit/library/generalized_gates/isometry.py +1 -1
  55. qiskit/circuit/library/generalized_gates/pauli.py +1 -2
  56. qiskit/circuit/library/generalized_gates/uc.py +97 -7
  57. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
  58. qiskit/circuit/library/generalized_gates/unitary.py +4 -2
  59. qiskit/circuit/library/graph_state.py +1 -0
  60. qiskit/circuit/library/hamiltonian_gate.py +1 -1
  61. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  62. qiskit/circuit/library/n_local/n_local.py +1 -1
  63. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  64. qiskit/circuit/library/overlap.py +2 -2
  65. qiskit/circuit/library/pauli_evolution.py +39 -24
  66. qiskit/circuit/library/phase_oracle.py +130 -51
  67. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  69. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  70. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  71. qiskit/circuit/library/standard_gates/h.py +4 -9
  72. qiskit/circuit/library/standard_gates/i.py +2 -2
  73. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  74. qiskit/circuit/library/standard_gates/p.py +15 -34
  75. qiskit/circuit/library/standard_gates/r.py +7 -10
  76. qiskit/circuit/library/standard_gates/rx.py +5 -15
  77. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  78. qiskit/circuit/library/standard_gates/ry.py +5 -17
  79. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  80. qiskit/circuit/library/standard_gates/rz.py +5 -17
  81. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  82. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  83. qiskit/circuit/library/standard_gates/s.py +6 -15
  84. qiskit/circuit/library/standard_gates/swap.py +4 -11
  85. qiskit/circuit/library/standard_gates/sx.py +7 -12
  86. qiskit/circuit/library/standard_gates/t.py +6 -7
  87. qiskit/circuit/library/standard_gates/u.py +2 -10
  88. qiskit/circuit/library/standard_gates/u1.py +5 -16
  89. qiskit/circuit/library/standard_gates/u2.py +2 -6
  90. qiskit/circuit/library/standard_gates/u3.py +3 -11
  91. qiskit/circuit/library/standard_gates/x.py +14 -62
  92. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  94. qiskit/circuit/library/standard_gates/y.py +4 -9
  95. qiskit/circuit/library/standard_gates/z.py +5 -15
  96. qiskit/circuit/measure.py +11 -2
  97. qiskit/circuit/parameterexpression.py +11 -0
  98. qiskit/circuit/quantumcircuit.py +890 -564
  99. qiskit/circuit/random/utils.py +12 -6
  100. qiskit/circuit/reset.py +5 -2
  101. qiskit/circuit/singleton.py +5 -11
  102. qiskit/circuit/store.py +0 -8
  103. qiskit/circuit/tools/pi_check.py +3 -0
  104. qiskit/compiler/__init__.py +1 -7
  105. qiskit/compiler/transpiler.py +38 -196
  106. qiskit/converters/circuit_to_dag.py +6 -4
  107. qiskit/converters/circuit_to_dagdependency.py +0 -2
  108. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  109. qiskit/converters/circuit_to_gate.py +1 -1
  110. qiskit/converters/circuit_to_instruction.py +16 -29
  111. qiskit/converters/dag_to_circuit.py +7 -8
  112. qiskit/converters/dag_to_dagdependency.py +0 -1
  113. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  114. qiskit/converters/dagdependency_to_circuit.py +0 -6
  115. qiskit/converters/dagdependency_to_dag.py +0 -6
  116. qiskit/dagcircuit/collect_blocks.py +32 -20
  117. qiskit/dagcircuit/dagdependency.py +3 -37
  118. qiskit/dagcircuit/dagdependency_v2.py +5 -82
  119. qiskit/dagcircuit/dagnode.py +14 -2
  120. qiskit/passmanager/__init__.py +24 -6
  121. qiskit/passmanager/passmanager.py +26 -24
  122. qiskit/primitives/__init__.py +44 -35
  123. qiskit/primitives/backend_estimator_v2.py +102 -23
  124. qiskit/primitives/backend_sampler_v2.py +5 -20
  125. qiskit/primitives/base/__init__.py +4 -4
  126. qiskit/primitives/base/base_estimator.py +77 -82
  127. qiskit/primitives/base/base_primitive_job.py +2 -2
  128. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  129. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  130. qiskit/primitives/base/base_sampler.py +52 -60
  131. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  132. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  133. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  134. qiskit/primitives/containers/bindings_array.py +3 -1
  135. qiskit/primitives/containers/bit_array.py +23 -0
  136. qiskit/primitives/containers/data_bin.py +3 -1
  137. qiskit/primitives/containers/observables_array.py +19 -2
  138. qiskit/primitives/statevector_sampler.py +6 -8
  139. qiskit/primitives/utils.py +14 -189
  140. qiskit/providers/__init__.py +4 -130
  141. qiskit/providers/backend.py +11 -314
  142. qiskit/providers/basic_provider/__init__.py +3 -1
  143. qiskit/providers/basic_provider/basic_provider.py +29 -9
  144. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  145. qiskit/providers/exceptions.py +0 -33
  146. qiskit/providers/fake_provider/__init__.py +0 -37
  147. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  148. qiskit/qasm2/__init__.py +21 -6
  149. qiskit/qasm2/export.py +2 -10
  150. qiskit/qasm2/parse.py +11 -25
  151. qiskit/qasm3/__init__.py +5 -1
  152. qiskit/qasm3/ast.py +44 -0
  153. qiskit/qasm3/exporter.py +65 -27
  154. qiskit/qasm3/printer.py +35 -4
  155. qiskit/qpy/__init__.py +162 -19
  156. qiskit/qpy/binary_io/__init__.py +0 -1
  157. qiskit/qpy/binary_io/circuits.py +96 -116
  158. qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
  159. qiskit/qpy/binary_io/schedules.py +61 -388
  160. qiskit/qpy/binary_io/value.py +159 -33
  161. qiskit/qpy/common.py +10 -7
  162. qiskit/qpy/formats.py +41 -0
  163. qiskit/qpy/interface.py +29 -62
  164. qiskit/qpy/type_keys.py +58 -221
  165. qiskit/quantum_info/analysis/distance.py +3 -1
  166. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  167. qiskit/quantum_info/operators/operator.py +6 -2
  168. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  169. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  170. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  171. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  172. qiskit/quantum_info/states/densitymatrix.py +16 -6
  173. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  174. qiskit/quantum_info/states/statevector.py +16 -6
  175. qiskit/result/__init__.py +5 -17
  176. qiskit/result/models.py +18 -11
  177. qiskit/result/result.py +38 -134
  178. qiskit/result/sampled_expval.py +1 -2
  179. qiskit/result/utils.py +3 -4
  180. qiskit/synthesis/__init__.py +21 -1
  181. qiskit/synthesis/arithmetic/__init__.py +3 -1
  182. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  183. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  184. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  185. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  186. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  187. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  188. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  189. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  190. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  191. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  192. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  193. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  194. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  195. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -0
  196. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  197. qiskit/synthesis/evolution/product_formula.py +44 -35
  198. qiskit/synthesis/evolution/qdrift.py +17 -24
  199. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  200. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  201. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  202. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  203. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  204. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  205. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  206. qiskit/synthesis/two_qubit/__init__.py +1 -0
  207. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  208. qiskit/transpiler/__init__.py +32 -232
  209. qiskit/transpiler/basepasses.py +20 -51
  210. qiskit/transpiler/layout.py +1 -1
  211. qiskit/transpiler/passes/__init__.py +4 -40
  212. qiskit/transpiler/passes/basis/basis_translator.py +5 -4
  213. qiskit/transpiler/passes/basis/decompose.py +1 -15
  214. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  215. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  216. qiskit/transpiler/passes/layout/apply_layout.py +4 -0
  217. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  218. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +3 -4
  219. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  220. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  221. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  222. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  223. qiskit/transpiler/passes/optimization/__init__.py +2 -3
  224. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  225. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  226. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  227. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  228. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  229. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  230. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  231. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  232. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  233. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  234. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  235. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  236. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  237. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  238. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +3 -2
  239. qiskit/transpiler/passes/routing/__init__.py +0 -1
  240. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  241. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  242. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  243. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  244. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  245. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  246. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  247. qiskit/transpiler/passes/scheduling/padding/base_padding.py +32 -4
  248. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +25 -63
  249. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +12 -4
  250. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  251. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  252. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  253. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +134 -62
  254. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  255. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  256. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  257. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  258. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  259. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  260. qiskit/transpiler/passes/utils/__init__.py +0 -1
  261. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  262. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  263. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  264. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  265. qiskit/transpiler/passmanager.py +13 -0
  266. qiskit/transpiler/passmanager_config.py +5 -81
  267. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  268. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  269. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +107 -322
  270. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  272. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  273. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  274. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  275. qiskit/transpiler/target.py +78 -524
  276. qiskit/user_config.py +8 -4
  277. qiskit/utils/__init__.py +13 -12
  278. qiskit/utils/deprecation.py +4 -112
  279. qiskit/utils/optionals.py +11 -4
  280. qiskit/utils/parallel.py +214 -87
  281. qiskit/utils/units.py +4 -1
  282. qiskit/visualization/__init__.py +3 -7
  283. qiskit/visualization/array.py +4 -1
  284. qiskit/visualization/bloch.py +1 -1
  285. qiskit/visualization/circuit/_utils.py +19 -19
  286. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  287. qiskit/visualization/circuit/matplotlib.py +13 -23
  288. qiskit/visualization/circuit/text.py +7 -3
  289. qiskit/visualization/counts_visualization.py +4 -0
  290. qiskit/visualization/dag_visualization.py +2 -1
  291. qiskit/visualization/gate_map.py +39 -154
  292. qiskit/visualization/library.py +4 -1
  293. qiskit/visualization/pass_manager_visualization.py +6 -2
  294. qiskit/visualization/state_visualization.py +19 -2
  295. qiskit/visualization/timeline/core.py +19 -13
  296. qiskit/visualization/timeline/interface.py +19 -18
  297. qiskit/visualization/timeline/plotters/matplotlib.py +4 -1
  298. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
  299. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/RECORD +625 -771
  300. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/WHEEL +1 -1
  301. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/entry_points.txt +8 -2
  302. qiskit/assembler/__init__.py +0 -42
  303. qiskit/assembler/assemble_circuits.py +0 -451
  304. qiskit/assembler/assemble_schedules.py +0 -367
  305. qiskit/assembler/disassemble.py +0 -310
  306. qiskit/assembler/run_config.py +0 -77
  307. qiskit/circuit/bit.py +0 -106
  308. qiskit/circuit/classicalfunction/__init__.py +0 -152
  309. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  310. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  311. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  312. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  313. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  314. qiskit/circuit/classicalfunction/types.py +0 -18
  315. qiskit/circuit/classicalfunction/utils.py +0 -91
  316. qiskit/circuit/classicalregister.py +0 -57
  317. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  318. qiskit/circuit/quantumregister.py +0 -75
  319. qiskit/circuit/register.py +0 -246
  320. qiskit/compiler/assembler.py +0 -689
  321. qiskit/compiler/scheduler.py +0 -109
  322. qiskit/compiler/sequencer.py +0 -71
  323. qiskit/primitives/backend_estimator.py +0 -486
  324. qiskit/primitives/backend_sampler.py +0 -222
  325. qiskit/primitives/estimator.py +0 -172
  326. qiskit/primitives/sampler.py +0 -162
  327. qiskit/providers/backend_compat.py +0 -507
  328. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  329. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  330. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  332. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  333. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  335. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  336. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  337. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  338. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  339. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  341. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  343. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  344. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  345. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  346. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  347. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  348. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  349. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  350. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  351. qiskit/providers/fake_provider/fake_1q.py +0 -91
  352. qiskit/providers/fake_provider/fake_backend.py +0 -165
  353. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  354. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  355. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  356. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  357. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  358. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  359. qiskit/providers/models/__init__.py +0 -89
  360. qiskit/providers/models/backendconfiguration.py +0 -1040
  361. qiskit/providers/models/backendproperties.py +0 -535
  362. qiskit/providers/models/backendstatus.py +0 -104
  363. qiskit/providers/models/jobstatus.py +0 -77
  364. qiskit/providers/models/pulsedefaults.py +0 -305
  365. qiskit/providers/provider.py +0 -95
  366. qiskit/pulse/__init__.py +0 -158
  367. qiskit/pulse/builder.py +0 -2262
  368. qiskit/pulse/calibration_entries.py +0 -381
  369. qiskit/pulse/channels.py +0 -227
  370. qiskit/pulse/configuration.py +0 -245
  371. qiskit/pulse/exceptions.py +0 -45
  372. qiskit/pulse/filters.py +0 -309
  373. qiskit/pulse/instruction_schedule_map.py +0 -424
  374. qiskit/pulse/instructions/__init__.py +0 -67
  375. qiskit/pulse/instructions/acquire.py +0 -150
  376. qiskit/pulse/instructions/delay.py +0 -71
  377. qiskit/pulse/instructions/directives.py +0 -154
  378. qiskit/pulse/instructions/frequency.py +0 -135
  379. qiskit/pulse/instructions/instruction.py +0 -270
  380. qiskit/pulse/instructions/phase.py +0 -152
  381. qiskit/pulse/instructions/play.py +0 -99
  382. qiskit/pulse/instructions/reference.py +0 -100
  383. qiskit/pulse/instructions/snapshot.py +0 -82
  384. qiskit/pulse/library/__init__.py +0 -97
  385. qiskit/pulse/library/continuous.py +0 -430
  386. qiskit/pulse/library/pulse.py +0 -148
  387. qiskit/pulse/library/samplers/__init__.py +0 -15
  388. qiskit/pulse/library/samplers/decorators.py +0 -295
  389. qiskit/pulse/library/samplers/strategies.py +0 -71
  390. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  391. qiskit/pulse/library/waveform.py +0 -136
  392. qiskit/pulse/macros.py +0 -262
  393. qiskit/pulse/parameter_manager.py +0 -445
  394. qiskit/pulse/parser.py +0 -314
  395. qiskit/pulse/reference_manager.py +0 -58
  396. qiskit/pulse/schedule.py +0 -1854
  397. qiskit/pulse/transforms/__init__.py +0 -106
  398. qiskit/pulse/transforms/alignments.py +0 -406
  399. qiskit/pulse/transforms/base_transforms.py +0 -71
  400. qiskit/pulse/transforms/canonicalization.py +0 -498
  401. qiskit/pulse/transforms/dag.py +0 -122
  402. qiskit/pulse/utils.py +0 -149
  403. qiskit/qobj/__init__.py +0 -75
  404. qiskit/qobj/common.py +0 -81
  405. qiskit/qobj/converters/__init__.py +0 -18
  406. qiskit/qobj/converters/lo_config.py +0 -177
  407. qiskit/qobj/converters/pulse_instruction.py +0 -897
  408. qiskit/qobj/pulse_qobj.py +0 -709
  409. qiskit/qobj/qasm_qobj.py +0 -708
  410. qiskit/qobj/utils.py +0 -46
  411. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  412. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  413. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  414. qiskit/result/mitigation/utils.py +0 -217
  415. qiskit/scheduler/__init__.py +0 -40
  416. qiskit/scheduler/config.py +0 -37
  417. qiskit/scheduler/lowering.py +0 -187
  418. qiskit/scheduler/methods/__init__.py +0 -15
  419. qiskit/scheduler/methods/basic.py +0 -140
  420. qiskit/scheduler/schedule_circuit.py +0 -69
  421. qiskit/scheduler/sequence.py +0 -104
  422. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  423. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  424. qiskit/transpiler/passes/calibration/builders.py +0 -20
  425. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  426. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  427. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  428. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  429. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  430. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  431. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  432. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  433. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  434. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  435. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  436. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  437. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  438. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  439. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  440. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  441. qiskit/utils/deprecate_pulse.py +0 -119
  442. qiskit/utils/multiprocessing.py +0 -56
  443. qiskit/visualization/pulse_v2/__init__.py +0 -21
  444. qiskit/visualization/pulse_v2/core.py +0 -901
  445. qiskit/visualization/pulse_v2/device_info.py +0 -173
  446. qiskit/visualization/pulse_v2/drawings.py +0 -253
  447. qiskit/visualization/pulse_v2/events.py +0 -254
  448. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  449. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  450. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  451. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  452. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  453. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  454. qiskit/visualization/pulse_v2/interface.py +0 -459
  455. qiskit/visualization/pulse_v2/layouts.py +0 -387
  456. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  457. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  458. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  459. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  460. qiskit/visualization/pulse_v2/types.py +0 -242
  461. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
  462. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
qiskit/VERSION.txt CHANGED
@@ -1 +1 @@
1
- 1.4.1
1
+ 2.0.0
qiskit/__init__.py CHANGED
@@ -53,11 +53,8 @@ import qiskit._numpy_compat
53
53
  # and not have to rely on attribute access. No action needed for top-level extension packages.
54
54
  sys.modules["qiskit._accelerate.circuit"] = _accelerate.circuit
55
55
  sys.modules["qiskit._accelerate.circuit_library"] = _accelerate.circuit_library
56
- sys.modules["qiskit._accelerate.basis"] = _accelerate.basis
57
- sys.modules["qiskit._accelerate.basis.basis_translator"] = _accelerate.basis.basis_translator
56
+ sys.modules["qiskit._accelerate.basis_translator"] = _accelerate.basis_translator
58
57
  sys.modules["qiskit._accelerate.converters"] = _accelerate.converters
59
- sys.modules["qiskit._accelerate.basis"] = _accelerate.basis
60
- sys.modules["qiskit._accelerate.basis.basis_translator"] = _accelerate.basis.basis_translator
61
58
  sys.modules["qiskit._accelerate.dense_layout"] = _accelerate.dense_layout
62
59
  sys.modules["qiskit._accelerate.equivalence"] = _accelerate.equivalence
63
60
  sys.modules["qiskit._accelerate.error_map"] = _accelerate.error_map
@@ -81,7 +78,6 @@ sys.modules["qiskit._accelerate.sampled_exp_val"] = _accelerate.sampled_exp_val
81
78
  sys.modules["qiskit._accelerate.sparse_observable"] = _accelerate.sparse_observable
82
79
  sys.modules["qiskit._accelerate.sparse_pauli_op"] = _accelerate.sparse_pauli_op
83
80
  sys.modules["qiskit._accelerate.star_prerouting"] = _accelerate.star_prerouting
84
- sys.modules["qiskit._accelerate.stochastic_swap"] = _accelerate.stochastic_swap
85
81
  sys.modules["qiskit._accelerate.elide_permutations"] = _accelerate.elide_permutations
86
82
  sys.modules["qiskit._accelerate.target"] = _accelerate.target
87
83
  sys.modules["qiskit._accelerate.two_qubit_decompose"] = _accelerate.two_qubit_decompose
@@ -128,10 +124,11 @@ import qiskit.circuit.reset
128
124
 
129
125
  _config = _user_config.get_config()
130
126
 
131
- from qiskit.compiler import transpile, assemble, schedule, sequence
127
+ from qiskit.compiler import transpile
132
128
  from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
133
129
  from .version import __version__
134
130
 
131
+
135
132
  __all__ = [
136
133
  "AncillaRegister",
137
134
  "ClassicalRegister",
@@ -139,9 +136,6 @@ __all__ = [
139
136
  "QiskitError",
140
137
  "QuantumCircuit",
141
138
  "QuantumRegister",
142
- "assemble",
143
- "schedule",
144
- "sequence",
145
139
  "transpile",
146
140
  "generate_preset_pass_manager",
147
141
  ]
Binary file
@@ -272,7 +272,8 @@ circuit. The top-level ones are:
272
272
  * :class:`ForLoopOp`, to loop over a fixed range of values
273
273
  * :class:`IfElseOp`, to conditionally enter one of two subcircuits
274
274
  * :class:`SwitchCaseOp`, to conditionally enter one of many subcircuits
275
- * :class:`WhileLoopOp`, to repeat a subcircuit until a condition is falsified.
275
+ * :class:`WhileLoopOp`, to repeat a subcircuit until a condition is falsified
276
+ * :class:`BoxOp`, to group a series of instructions for later processing
276
277
 
277
278
  :ref:`Circuits can include classical expressions that are evaluated in real time
278
279
  <circuit-repr-real-time-classical>`, while the QPU is executing a single shot of the circuit. These
@@ -303,9 +304,10 @@ assist compilation workflows. These include:
303
304
  * :data:`SessionEquivalenceLibrary`, a mutable instance of :class:`EquivalenceLibrary` which is used
304
305
  by default by the compiler's :class:`.BasisTranslator`.
305
306
 
306
- There is also a utility for generating random circuits:
307
+ There are also utilities for generating random circuits:
307
308
 
308
309
  * :func:`random.random_circuit`
310
+ * :func:`random.random_clifford_circuit`
309
311
 
310
312
  Finally, the circuit module has its own exception class, to indicate when things went wrong in
311
313
  circuit-specific manners:
@@ -558,10 +560,16 @@ Hardware can be instructed to apply a real-time idle period on a given qubit. A
558
560
 
559
561
  .. autoclass:: Delay
560
562
  :show-inheritance:
563
+ .. autoclass:: Duration
564
+
561
565
 
562
566
  The :class:`Barrier` instruction can span an arbitrary number of qubits and clbits, and is a no-op
563
567
  in hardware. During transpilation and optimization, however, it blocks any optimizations from
564
- "crossing" the barrier; that is, in::
568
+ "crossing" the barrier; that is, in:
569
+
570
+ .. plot::
571
+ :include-source:
572
+ :nofigs:
565
573
 
566
574
  from qiskit.circuit import QuantumCircuit
567
575
 
@@ -697,10 +705,15 @@ attributes of each of the control-flow operations.
697
705
 
698
706
  Set of the instruction names of Qiskit's known control-flow operations.
699
707
 
708
+ The :func:`.get_control_flow_name_mapping` function allows to access the control-flow operation
709
+ classes associated to each name.
710
+
711
+ .. autofunction:: get_control_flow_name_mapping
712
+
700
713
  These control-flow operations (:class:`IfElseOp`, :class:`WhileLoopOp`,
701
- :class:`SwitchCaseOp` and :class:`ForLoopOp`) all have specific state that defines the branching
702
- conditions and strategies, but contain all the different subcircuit blocks that might be entered in
703
- their :attr:`~ControlFlowOp.blocks` property.
714
+ :class:`SwitchCaseOp`, :class:`ForLoopOp` and :class:`BoxOp`) all have specific state that defines
715
+ the branching conditions and strategies, but contain all the different subcircuit blocks that
716
+ might be entered in their :attr:`~ControlFlowOp.blocks` property.
704
717
 
705
718
  .. autosummary::
706
719
  :toctree: ../stubs/
@@ -709,6 +722,7 @@ their :attr:`~ControlFlowOp.blocks` property.
709
722
  WhileLoopOp
710
723
  SwitchCaseOp
711
724
  ForLoopOp
725
+ BoxOp
712
726
 
713
727
  The :class:`.SwitchCaseOp` also understands a special value:
714
728
 
@@ -1049,6 +1063,7 @@ Generating random circuits
1049
1063
 
1050
1064
  .. currentmodule:: qiskit.circuit.random
1051
1065
  .. autofunction:: random_circuit
1066
+ .. autofunction:: random_clifford_circuit
1052
1067
  .. currentmodule:: qiskit.circuit
1053
1068
 
1054
1069
  Apply Pauli twirling to a circuit
@@ -1273,11 +1288,21 @@ In both these cases, the matrix form of :class:`.CCXGate` in ``ctrl_state = 1``
1273
1288
  \end{pmatrix}
1274
1289
  """
1275
1290
 
1291
+ from qiskit._accelerate.circuit import ( # pylint: disable=unused-import
1292
+ Bit,
1293
+ Qubit,
1294
+ AncillaQubit,
1295
+ Clbit,
1296
+ QuantumRegister,
1297
+ AncillaRegister,
1298
+ ClassicalRegister,
1299
+ Register,
1300
+ Duration,
1301
+ )
1302
+
1276
1303
  from .exceptions import CircuitError
1277
1304
  from . import _utils
1278
1305
  from .quantumcircuit import QuantumCircuit
1279
- from .classicalregister import ClassicalRegister, Clbit
1280
- from .quantumregister import QuantumRegister, Qubit, AncillaRegister, AncillaQubit
1281
1306
  from .gate import Gate
1282
1307
 
1283
1308
  # pylint: disable=cyclic-import
@@ -1296,14 +1321,13 @@ from .parametervector import ParameterVector, ParameterVectorElement
1296
1321
  from .parameterexpression import ParameterExpression
1297
1322
  from .quantumcircuitdata import CircuitInstruction
1298
1323
  from .equivalence import EquivalenceLibrary
1299
- from .bit import Bit
1300
- from .register import Register
1301
1324
  from . import library
1302
1325
  from .equivalence_library import StandardEquivalenceLibrary, SessionEquivalenceLibrary
1303
1326
  from .commutation_checker import CommutationChecker
1304
1327
 
1305
1328
  from .controlflow import (
1306
1329
  ControlFlowOp,
1330
+ BoxOp,
1307
1331
  WhileLoopOp,
1308
1332
  ForLoopOp,
1309
1333
  IfElseOp,
@@ -1312,6 +1336,7 @@ from .controlflow import (
1312
1336
  BreakLoopOp,
1313
1337
  ContinueLoopOp,
1314
1338
  CONTROL_FLOW_OP_NAMES,
1339
+ get_control_flow_name_mapping,
1315
1340
  )
1316
1341
 
1317
1342
  from .annotated_operation import AnnotatedOperation, InverseModifier, ControlModifier, PowerModifier
@@ -109,7 +109,7 @@ def control(
109
109
 
110
110
  global_phase = 0
111
111
 
112
- basis = ["p", "u", "x", "z", "rx", "ry", "rz", "cx"]
112
+ basis = ["p", "u", "x", "z", "y", "h", "sx", "sxdg", "rx", "ry", "rz", "cx"]
113
113
 
114
114
  if operation.name in basis:
115
115
  apply_basic_controlled_gate(controlled_circ, operation, q_control, q_target[0])
@@ -187,7 +187,7 @@ def apply_basic_controlled_gate(circuit, gate, controls, target):
187
187
 
188
188
  This implements multi-control operations for the following basis gates:
189
189
 
190
- ["p", "u", "x", "z", "rx", "ry", "rz", "cx"]
190
+ ["p", "u", "x", "z", "y", "h", "sx", "sxdg", "rx", "ry", "rz", "cx"]
191
191
 
192
192
  """
193
193
  num_ctrl_qubits = len(controls)
@@ -239,31 +239,51 @@ def apply_basic_controlled_gate(circuit, gate, controls, target):
239
239
  circuit.cu(theta, phi, lamb, 0, controls[0], target)
240
240
  else:
241
241
  if phi == -pi / 2 and lamb == pi / 2:
242
- circuit.mcrx(theta, controls, target, use_basis_gates=True)
242
+ circuit.mcrx(theta, controls, target, use_basis_gates=False)
243
243
  elif phi == 0 and lamb == 0:
244
244
  circuit.mcry(
245
245
  theta,
246
246
  controls,
247
247
  target,
248
- use_basis_gates=True,
248
+ use_basis_gates=False,
249
249
  )
250
250
  elif theta == 0 and phi == 0:
251
251
  circuit.mcp(lamb, controls, target)
252
252
  else:
253
- circuit.mcp(lamb, controls, target)
254
- circuit.mcry(
255
- theta,
256
- controls,
257
- target,
258
- use_basis_gates=True,
259
- )
260
- circuit.mcp(phi, controls, target)
253
+ circuit.mcrz(lamb, controls, target, use_basis_gates=False)
254
+ circuit.mcry(theta, controls, target, use_basis_gates=False)
255
+ circuit.mcrz(phi, controls, target, use_basis_gates=False)
256
+ circuit.mcp((phi + lamb) / 2, controls[1:], controls[0])
261
257
 
262
258
  elif gate.name == "z":
263
259
  circuit.h(target)
264
260
  circuit.mcx(controls, target)
265
261
  circuit.h(target)
266
262
 
263
+ elif gate.name == "y":
264
+ circuit.sdg(target)
265
+ circuit.mcx(controls, target)
266
+ circuit.s(target)
267
+
268
+ elif gate.name == "h":
269
+ circuit.s(target)
270
+ circuit.h(target)
271
+ circuit.t(target)
272
+ circuit.mcx(controls, target)
273
+ circuit.tdg(target)
274
+ circuit.h(target)
275
+ circuit.sdg(target)
276
+
277
+ elif gate.name == "sx":
278
+ circuit.h(target)
279
+ circuit.mcp(pi / 2, controls, target)
280
+ circuit.h(target)
281
+
282
+ elif gate.name == "sxdg":
283
+ circuit.h(target)
284
+ circuit.mcp(3 * pi / 2, controls, target)
285
+ circuit.h(target)
286
+
267
287
  else:
268
288
  raise CircuitError(f"Gate {gate} not in supported basis.")
269
289
 
@@ -16,9 +16,8 @@ from __future__ import annotations
16
16
 
17
17
  import typing
18
18
 
19
- from .bit import Bit
19
+ from . import Bit, Clbit, ClassicalRegister # pylint: disable=cyclic-import
20
20
  from .classical import expr
21
- from .classicalregister import ClassicalRegister, Clbit
22
21
 
23
22
 
24
23
  class VariableMapper(expr.ExprVisitor[expr.Expr]):
@@ -43,7 +42,7 @@ class VariableMapper(expr.ExprVisitor[expr.Expr]):
43
42
  self,
44
43
  target_cregs: typing.Iterable[ClassicalRegister],
45
44
  bit_map: typing.Mapping[Bit, Bit],
46
- var_map: typing.Mapping[expr.Var, expr.Var] | None = None,
45
+ var_map: typing.Mapping[expr.Var | expr.Stretch, expr.Var | expr.Stretch] | None = None,
47
46
  *,
48
47
  add_register: typing.Callable[[ClassicalRegister], None] | None = None,
49
48
  ):
@@ -132,6 +131,9 @@ class VariableMapper(expr.ExprVisitor[expr.Expr]):
132
131
  return expr.Var(self._map_register(node.var), node.type)
133
132
  return self.var_map.get(node, node)
134
133
 
134
+ def visit_stretch(self, node, /):
135
+ return self.var_map.get(node, node)
136
+
135
137
  def visit_value(self, node, /):
136
138
  return expr.Value(node.value, node.type)
137
139
 
qiskit/circuit/barrier.py CHANGED
@@ -18,9 +18,8 @@ with the :meth:`~qiskit.circuit.QuantumCircuit.barrier` method.
18
18
 
19
19
  from __future__ import annotations
20
20
 
21
- from qiskit.exceptions import QiskitError
22
- from qiskit.utils import deprecate_func
23
- from .instruction import Instruction
21
+ from qiskit.circuit.instruction import Instruction
22
+ from qiskit._accelerate.circuit import StandardInstructionType
24
23
 
25
24
 
26
25
  class Barrier(Instruction):
@@ -31,6 +30,7 @@ class Barrier(Instruction):
31
30
  """
32
31
 
33
32
  _directive = True
33
+ _standard_instruction_type = StandardInstructionType.Barrier
34
34
 
35
35
  def __init__(self, num_qubits: int, label: str | None = None):
36
36
  """
@@ -44,7 +44,3 @@ class Barrier(Instruction):
44
44
  def inverse(self, annotated: bool = False):
45
45
  """Special case. Return self."""
46
46
  return Barrier(self.num_qubits)
47
-
48
- @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
49
- def c_if(self, classical, val):
50
- raise QiskitError("Barriers are compiler directives and cannot be conditional.")
@@ -39,6 +39,10 @@ The expression system is based on tree representation. All nodes in the tree ar
39
39
 
40
40
  These objects are mutable and should not be reused in a different location without a copy.
41
41
 
42
+ All :class`Expr` instances define a boolean :attr:`~Expr.const` attribute, which indicates
43
+ whether the expression can be evaluated at compile time. Most expression classes infer this
44
+ during construction based on the const-ness of their operands.
45
+
42
46
  The base for dynamic variables is the :class:`Var`, which can be either an arbitrarily typed
43
47
  real-time variable, or a wrapper around a :class:`.Clbit` or :class:`.ClassicalRegister`.
44
48
 
@@ -46,10 +50,15 @@ real-time variable, or a wrapper around a :class:`.Clbit` or :class:`.ClassicalR
46
50
  :members: var, name, new
47
51
 
48
52
  Similarly, literals used in expressions (such as integers) should be lifted to :class:`Value` nodes
49
- with associated types.
53
+ with associated types. A :class:`Value` is always considered a constant expression.
50
54
 
51
55
  .. autoclass:: Value
52
56
 
57
+ Stretch variables for use in duration expressions are represented by the :class:`Stretch` node.
58
+
59
+ .. autoclass:: Stretch
60
+ :members: var, name, new
61
+
53
62
  The operations traditionally associated with pre-, post- or infix operators in programming are
54
63
  represented by the :class:`Unary` and :class:`Binary` nodes as appropriate. These each take an
55
64
  operation type code, which are exposed as enumerations inside each class as :class:`Unary.Op`
@@ -130,6 +139,10 @@ Similarly, the binary operations and relations have helper functions defined.
130
139
  .. autofunction:: greater_equal
131
140
  .. autofunction:: shift_left
132
141
  .. autofunction:: shift_right
142
+ .. autofunction:: add
143
+ .. autofunction:: sub
144
+ .. autofunction:: mul
145
+ .. autofunction:: div
133
146
 
134
147
  You can index into unsigned integers and bit-likes using another unsigned integer of any width.
135
148
  This includes in storing operations, if the target of the index is writeable.
@@ -166,6 +179,11 @@ not the general structure, the iterator method :func:`iter_vars` is provided.
166
179
 
167
180
  .. autofunction:: iter_vars
168
181
 
182
+ To iterator over all variables including stretch variables, the iterator method
183
+ :func:`iter_identifiers` is provided.
184
+
185
+ .. autofunction:: iter_identifiers
186
+
169
187
  Two expressions can be compared for direct structural equality by using the built-in Python ``==``
170
188
  operator. In general, though, one might want to compare two expressions slightly more semantically,
171
189
  allowing that the :class:`Var` nodes inside them are bound to different memory-location descriptions
@@ -188,8 +206,10 @@ __all__ = [
188
206
  "Unary",
189
207
  "Binary",
190
208
  "Index",
209
+ "Stretch",
191
210
  "ExprVisitor",
192
211
  "iter_vars",
212
+ "iter_identifiers",
193
213
  "structurally_equivalent",
194
214
  "is_lvalue",
195
215
  "lift",
@@ -210,11 +230,15 @@ __all__ = [
210
230
  "greater",
211
231
  "greater_equal",
212
232
  "index",
233
+ "add",
234
+ "sub",
235
+ "mul",
236
+ "div",
213
237
  "lift_legacy_condition",
214
238
  ]
215
239
 
216
- from .expr import Expr, Var, Value, Cast, Unary, Binary, Index
217
- from .visitors import ExprVisitor, iter_vars, structurally_equivalent, is_lvalue
240
+ from .expr import Expr, Var, Value, Cast, Unary, Binary, Index, Stretch
241
+ from .visitors import ExprVisitor, iter_vars, iter_identifiers, structurally_equivalent, is_lvalue
218
242
  from .constructors import (
219
243
  lift,
220
244
  cast,
@@ -234,5 +258,9 @@ from .constructors import (
234
258
  shift_left,
235
259
  shift_right,
236
260
  index,
261
+ add,
262
+ sub,
263
+ mul,
264
+ div,
237
265
  lift_legacy_condition,
238
266
  )