diff options
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/setup.py | 1 | ||||
-rw-r--r-- | numpy/tests/test_public_api.py | 3 | ||||
-rw-r--r-- | numpy/tests/typing/fail/array_like.py | 8 | ||||
-rw-r--r-- | numpy/tests/typing/pass/array_like.py | 10 | ||||
-rw-r--r-- | numpy/typing/__init__.py | 3 | ||||
-rw-r--r-- | numpy/typing/_array_like.py | 27 | ||||
-rw-r--r-- | numpy/typing/_dtype_like.py (renamed from numpy/typing.pyi) | 26 | ||||
-rw-r--r-- | numpy/typing/_shape.py | 6 |
8 files changed, 46 insertions, 38 deletions
diff --git a/numpy/setup.py b/numpy/setup.py index c6498d101..cbf633504 100644 --- a/numpy/setup.py +++ b/numpy/setup.py @@ -17,6 +17,7 @@ def configuration(parent_package='',top_path=None): config.add_subpackage('polynomial') config.add_subpackage('random') config.add_subpackage('testing') + config.add_subpackage('typing') config.add_data_dir('doc') config.add_data_files('py.typed') config.add_data_files('*.pyi') diff --git a/numpy/tests/test_public_api.py b/numpy/tests/test_public_api.py index 7ce74bc43..beaf38e5a 100644 --- a/numpy/tests/test_public_api.py +++ b/numpy/tests/test_public_api.py @@ -98,7 +98,7 @@ def test_dir_testing(): """Assert that output of dir has only one "testing/tester" attribute without duplicate""" assert len(dir(np)) == len(set(dir(np))) - + def test_numpy_linalg(): bad_results = check_dir(np.linalg) @@ -176,6 +176,7 @@ PUBLIC_MODULES = ['numpy.' + s for s in [ "polynomial.polyutils", "random", "testing", + "typing", "version", ]] diff --git a/numpy/tests/typing/fail/array_like.py b/numpy/tests/typing/fail/array_like.py index a5ef5795f..a97e72dc7 100644 --- a/numpy/tests/typing/fail/array_like.py +++ b/numpy/tests/typing/fail/array_like.py @@ -1,11 +1,5 @@ -from typing import Any, TYPE_CHECKING - import numpy as np - -if TYPE_CHECKING: - from numpy.typing import ArrayLike -else: - ArrayLike = Any +from numpy.typing import ArrayLike class A: diff --git a/numpy/tests/typing/pass/array_like.py b/numpy/tests/typing/pass/array_like.py index 098149c4b..e668b4963 100644 --- a/numpy/tests/typing/pass/array_like.py +++ b/numpy/tests/typing/pass/array_like.py @@ -1,13 +1,7 @@ -from typing import Any, List, Optional, TYPE_CHECKING +from typing import Any, List, Optional import numpy as np - -if TYPE_CHECKING: - from numpy.typing import ArrayLike, DtypeLike, _SupportsArray -else: - ArrayLike = Any - DtypeLike = Any - _SupportsArray = Any +from numpy.typing import ArrayLike, DtypeLike, _SupportsArray x1: ArrayLike = True x2: ArrayLike = 5 diff --git a/numpy/typing/__init__.py b/numpy/typing/__init__.py new file mode 100644 index 000000000..94f76a91f --- /dev/null +++ b/numpy/typing/__init__.py @@ -0,0 +1,3 @@ +from ._array_like import _SupportsArray, ArrayLike +from ._shape import _Shape, _ShapeLike +from ._dtype_like import DtypeLike diff --git a/numpy/typing/_array_like.py b/numpy/typing/_array_like.py new file mode 100644 index 000000000..54a612fb4 --- /dev/null +++ b/numpy/typing/_array_like.py @@ -0,0 +1,27 @@ +import sys +from typing import Any, overload, Sequence, Tuple, Union + +from numpy import ndarray +from ._dtype_like import DtypeLike + +if sys.version_info >= (3, 8): + from typing import Protocol + HAVE_PROTOCOL = True +else: + try: + from typing_extensions import Protocol + except ImportError: + HAVE_PROTOCOL = False + else: + HAVE_PROTOCOL = True + +if HAVE_PROTOCOL: + class _SupportsArray(Protocol): + @overload + def __array__(self, __dtype: DtypeLike = ...) -> ndarray: ... + @overload + def __array__(self, dtype: DtypeLike = ...) -> ndarray: ... +else: + _SupportsArray = Any + +ArrayLike = Union[bool, int, float, complex, _SupportsArray, Sequence] diff --git a/numpy/typing.pyi b/numpy/typing/_dtype_like.py index f5705192a..b9df0af04 100644 --- a/numpy/typing.pyi +++ b/numpy/typing/_dtype_like.py @@ -1,17 +1,7 @@ -import sys -from typing import Any, Dict, List, overload, Sequence, Text, Tuple, Union +from typing import Any, Dict, List, Sequence, Tuple, Union -from numpy import dtype, ndarray - -if sys.version_info >= (3, 8): - from typing import Protocol -else: - from typing_extensions import Protocol - -_Shape = Tuple[int, ...] - -# Anything that can be coerced to a shape tuple -_ShapeLike = Union[int, Sequence[int]] +from numpy import dtype +from ._shape import _ShapeLike _DtypeLikeNested = Any # TODO: wait for support for recursive types @@ -45,7 +35,7 @@ DtypeLike = Union[ Sequence[str], # names Sequence[_DtypeLikeNested], # formats Sequence[int], # offsets - Sequence[Union[bytes, Text, None]], # titles + Sequence[Union[bytes, str, None]], # titles int, # itemsize ], ], @@ -54,11 +44,3 @@ DtypeLike = Union[ # (base_dtype, new_dtype) Tuple[_DtypeLikeNested, _DtypeLikeNested], ] - -class _SupportsArray(Protocol): - @overload - def __array__(self, __dtype: DtypeLike = ...) -> ndarray: ... - @overload - def __array__(self, dtype: DtypeLike = ...) -> ndarray: ... - -ArrayLike = Union[bool, int, float, complex, _SupportsArray, Sequence] diff --git a/numpy/typing/_shape.py b/numpy/typing/_shape.py new file mode 100644 index 000000000..4629046ea --- /dev/null +++ b/numpy/typing/_shape.py @@ -0,0 +1,6 @@ +from typing import Sequence, Tuple, Union + +_Shape = Tuple[int, ...] + +# Anything that can be coerced to a shape tuple +_ShapeLike = Union[int, Sequence[int]] |