In NEP 50 (https://numpy.org/neps/nep-0050-scalar-promotion.html) my current proposal is that the following:
np.array([1, 2], dtype="uint8") + (-1)
which currently returns an "int16" array must raise an error. This is because we want to return a uint8 array but the -1 cannot be represented well by -1. The same should also happen for a value of 300 (rather than -1).
My main question is not about making this an error though. The question is whether the following two cases should also error:
uint8_arr = np.array([1, 2], dtype="uint8") uint8_arr = -1
(In practice these currently give the maximum integer with well defined integer overflow.)
Note that the call `np.uint8(-1)` could be a special case here!
The reason I ask is that my PR:
currently introduces the new error without changing the other cases and this requires adding a full new conversion path. If we want to change that anyway (or keep things aligned), I could simplify the logic in the PR.