diff options
| author | Bas van Beek <b.f.van.beek@vu.nl> | 2022-05-25 16:53:25 +0200 |
|---|---|---|
| committer | Bas van Beek <43369155+BvB93@users.noreply.github.com> | 2022-05-26 17:01:26 +0200 |
| commit | 2bb09680ef17f9ef883bbd9f04271352b44bd789 (patch) | |
| tree | 494cb83b2638c404f3d315c050f87d4c41c2dd12 /numpy | |
| parent | 46826998806bf48e57d0dc340b4f6b1532e915d9 (diff) | |
| download | numpy-2bb09680ef17f9ef883bbd9f04271352b44bd789.tar.gz | |
TST: Add `npt._GenericAlias` tests for (backported) Python 3.11 features
Diffstat (limited to 'numpy')
| -rw-r--r-- | numpy/typing/tests/test_generic_alias.py | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/numpy/typing/tests/test_generic_alias.py b/numpy/typing/tests/test_generic_alias.py index ae55ef439..225084257 100644 --- a/numpy/typing/tests/test_generic_alias.py +++ b/numpy/typing/tests/test_generic_alias.py @@ -10,6 +10,7 @@ from typing import TypeVar, Any, Union, Callable import pytest import numpy as np from numpy._typing._generic_alias import _GenericAlias +from typing_extensions import Unpack ScalarType = TypeVar("ScalarType", bound=np.generic, covariant=True) T1 = TypeVar("T1") @@ -55,8 +56,8 @@ class TestGenericAlias: ("__origin__", lambda n: n.__origin__), ("__args__", lambda n: n.__args__), ("__parameters__", lambda n: n.__parameters__), - ("__reduce__", lambda n: n.__reduce__()[1:]), - ("__reduce_ex__", lambda n: n.__reduce_ex__(1)[1:]), + ("__reduce__", lambda n: n.__reduce__()[1][:3]), + ("__reduce_ex__", lambda n: n.__reduce_ex__(1)[1][:3]), ("__mro_entries__", lambda n: n.__mro_entries__([object])), ("__hash__", lambda n: hash(n)), ("__repr__", lambda n: repr(n)), @@ -66,7 +67,6 @@ class TestGenericAlias: ("__getitem__", lambda n: n[Union[T1, T2]][np.float32, np.float64]), ("__eq__", lambda n: n == n), ("__ne__", lambda n: n != np.ndarray), - ("__dir__", lambda n: dir(n)), ("__call__", lambda n: n((1,), np.int64, BUFFER)), ("__call__", lambda n: n(shape=(1,), dtype=np.int64, buffer=BUFFER)), ("subclassing", lambda n: _get_subclass_mro(n)), @@ -100,6 +100,45 @@ class TestGenericAlias: value_ref = func(NDArray_ref) assert value == value_ref + def test_dir(self) -> None: + value = dir(NDArray) + if sys.version_info < (3, 9): + return + + # A number attributes only exist in `types.GenericAlias` in >= 3.11 + if sys.version_info < (3, 11, 0, "beta", 3): + value.remove("__typing_unpacked_tuple_args__") + if sys.version_info < (3, 11, 0, "beta", 1): + value.remove("__unpacked__") + assert value == dir(NDArray_ref) + + @pytest.mark.parametrize("name,func,dev_version", [ + ("__iter__", lambda n: len(list(n)), ("beta", 1)), + ("__iter__", lambda n: next(iter(n)), ("beta", 1)), + ("__unpacked__", lambda n: n.__unpacked__, ("beta", 1)), + ("Unpack", lambda n: Unpack[n], ("beta", 1)), + + # The right operand should now have `__unpacked__ = True`, + # and they are thus now longer equivalent + ("__ne__", lambda n: n != next(iter(n)), ("beta", 1)), + + # >= beta3 stuff + ("__typing_unpacked_tuple_args__", + lambda n: n.__typing_unpacked_tuple_args__, ("beta", 3)), + ]) + def test_py311_features( + self, + name: str, + func: FuncType, + dev_version: tuple[str, int], + ) -> None: + """Test Python 3.11 features.""" + value = func(NDArray) + + if sys.version_info >= (3, 11, 0, *dev_version): + value_ref = func(NDArray_ref) + assert value == value_ref + def test_weakref(self) -> None: """Test ``__weakref__``.""" value = weakref.ref(NDArray)() |
