qiskit 1.4.0__cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl → 2.0.0rc1__cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.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 +7 -140
  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 +168 -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 +5 -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 +27 -12
  291. qiskit/visualization/timeline/interface.py +23 -18
  292. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
  293. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +615 -762
  294. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +1 -1
  295. {qiskit-1.4.0.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.0.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
  456. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/top_level.txt +0 -0
qiskit/VERSION.txt CHANGED
@@ -1 +1 @@
1
- 1.4.0
1
+ 2.0.0rc1
qiskit/__init__.py CHANGED
@@ -81,7 +81,6 @@ sys.modules["qiskit._accelerate.sampled_exp_val"] = _accelerate.sampled_exp_val
81
81
  sys.modules["qiskit._accelerate.sparse_observable"] = _accelerate.sparse_observable
82
82
  sys.modules["qiskit._accelerate.sparse_pauli_op"] = _accelerate.sparse_pauli_op
83
83
  sys.modules["qiskit._accelerate.star_prerouting"] = _accelerate.star_prerouting
84
- sys.modules["qiskit._accelerate.stochastic_swap"] = _accelerate.stochastic_swap
85
84
  sys.modules["qiskit._accelerate.elide_permutations"] = _accelerate.elide_permutations
86
85
  sys.modules["qiskit._accelerate.target"] = _accelerate.target
87
86
  sys.modules["qiskit._accelerate.two_qubit_decompose"] = _accelerate.two_qubit_decompose
@@ -128,10 +127,11 @@ import qiskit.circuit.reset
128
127
 
129
128
  _config = _user_config.get_config()
130
129
 
131
- from qiskit.compiler import transpile, assemble, schedule, sequence
130
+ from qiskit.compiler import transpile
132
131
  from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
133
132
  from .version import __version__
134
133
 
134
+
135
135
  __all__ = [
136
136
  "AncillaRegister",
137
137
  "ClassicalRegister",
@@ -139,9 +139,6 @@ __all__ = [
139
139
  "QiskitError",
140
140
  "QuantumCircuit",
141
141
  "QuantumRegister",
142
- "assemble",
143
- "schedule",
144
- "sequence",
145
142
  "transpile",
146
143
  "generate_preset_pass_manager",
147
144
  ]
Binary file
@@ -561,7 +561,11 @@ Hardware can be instructed to apply a real-time idle period on a given qubit. A
561
561
 
562
562
  The :class:`Barrier` instruction can span an arbitrary number of qubits and clbits, and is a no-op
563
563
  in hardware. During transpilation and optimization, however, it blocks any optimizations from
564
- "crossing" the barrier; that is, in::
564
+ "crossing" the barrier; that is, in:
565
+
566
+ .. plot::
567
+ :include-source:
568
+ :nofigs:
565
569
 
566
570
  from qiskit.circuit import QuantumCircuit
567
571
 
@@ -697,6 +701,11 @@ attributes of each of the control-flow operations.
697
701
 
698
702
  Set of the instruction names of Qiskit's known control-flow operations.
699
703
 
704
+ The :func:`.get_control_flow_name_mapping` function allows to access the control-flow operation
705
+ classes associated to each name.
706
+
707
+ .. autofunction:: get_control_flow_name_mapping
708
+
700
709
  These control-flow operations (:class:`IfElseOp`, :class:`WhileLoopOp`,
701
710
  :class:`SwitchCaseOp` and :class:`ForLoopOp`) all have specific state that defines the branching
702
711
  conditions and strategies, but contain all the different subcircuit blocks that might be entered in
@@ -1273,11 +1282,21 @@ In both these cases, the matrix form of :class:`.CCXGate` in ``ctrl_state = 1``
1273
1282
  \end{pmatrix}
1274
1283
  """
1275
1284
 
1285
+ from qiskit._accelerate.circuit import ( # pylint: disable=unused-import
1286
+ Bit,
1287
+ Qubit,
1288
+ AncillaQubit,
1289
+ Clbit,
1290
+ QuantumRegister,
1291
+ AncillaRegister,
1292
+ ClassicalRegister,
1293
+ Register,
1294
+ Duration,
1295
+ )
1296
+
1276
1297
  from .exceptions import CircuitError
1277
1298
  from . import _utils
1278
1299
  from .quantumcircuit import QuantumCircuit
1279
- from .classicalregister import ClassicalRegister, Clbit
1280
- from .quantumregister import QuantumRegister, Qubit, AncillaRegister, AncillaQubit
1281
1300
  from .gate import Gate
1282
1301
 
1283
1302
  # pylint: disable=cyclic-import
@@ -1296,14 +1315,13 @@ from .parametervector import ParameterVector, ParameterVectorElement
1296
1315
  from .parameterexpression import ParameterExpression
1297
1316
  from .quantumcircuitdata import CircuitInstruction
1298
1317
  from .equivalence import EquivalenceLibrary
1299
- from .bit import Bit
1300
- from .register import Register
1301
1318
  from . import library
1302
1319
  from .equivalence_library import StandardEquivalenceLibrary, SessionEquivalenceLibrary
1303
1320
  from .commutation_checker import CommutationChecker
1304
1321
 
1305
1322
  from .controlflow import (
1306
1323
  ControlFlowOp,
1324
+ BoxOp,
1307
1325
  WhileLoopOp,
1308
1326
  ForLoopOp,
1309
1327
  IfElseOp,
@@ -1312,6 +1330,7 @@ from .controlflow import (
1312
1330
  BreakLoopOp,
1313
1331
  ContinueLoopOp,
1314
1332
  CONTROL_FLOW_OP_NAMES,
1333
+ get_control_flow_name_mapping,
1315
1334
  )
1316
1335
 
1317
1336
  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
  )