TYP: Optional numpy.number
type parameters
#27736
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The type parameters of
np.number
and its abstract subtypes now default toAny
.This means that typecheckers will now infer
np.floating
asnp.floating[Any]
, instead of rejecting it (when configured in strict mode).This affects
np.number
np.integer
np.signedinteger
np.unsignedinteger
np.inexact
np.floating
np.complexfloating
(by building upon TYP: Optional 2ndnumpy.complexfloating
type parameter #27420)The reason for choosing
Any
as the default, instead of setting it to the upper bound (numpy.typing.NBitBase
), is because these type parameters (TypeVar
s) are invariant.If they weren't invariant, then
x: int16 = int8(3)
would be a valid statement, which we probably don't want. So the invariance means thatx: number[NBitBase] = int8(3)
is rejected, butx: number[Any] = int8(3)
is accepted.I usually tend to avoid using
Any
, but because those_NBit
type-parameters aren't actually annotating anything, theAny
won't affect anything "outside" of thenumber
types, so it's no problem to use it here.