TYP,BUG: Reduce argument validation in C-based __class_getitem__
#22222
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.
Backport of #22212.
Closes #22185
The
__class_getitem__
implementations would previously perform basic validation of the passed value, i.e. it would check whether a tuple of the appropriate length was passed (e.g.np.dtype.__class_getitem__
would expect a single item or a length-1 tuple). As noted in aforementioned issue: this approach can cause issues when (a. 2 or more parameters are involved and (b. a subclasses is created one or more parameters are declared constant (e.g. a fixed dtype & variably shaped array).This PR fixes aforementioned issue by removing any and all runtime argument validation, thus mimicking the behavior of the standard library. While we could alternatively fix this by adding more special casing (e.g. only disable validation when
cls is not np.ndarray
), I'm not convinced this would be worth the additional complexity, especially since the standard library also has zero runtime validation for all of itsPy_GenericAlias
-based implementations of__class_getitem__
.Examples
The issue prior to this PR: