summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
Diffstat (limited to 'numpy')
-rw-r--r--numpy/setup.py1
-rw-r--r--numpy/tests/test_public_api.py3
-rw-r--r--numpy/tests/typing/fail/array_like.py8
-rw-r--r--numpy/tests/typing/pass/array_like.py10
-rw-r--r--numpy/typing/__init__.py3
-rw-r--r--numpy/typing/_array_like.py27
-rw-r--r--numpy/typing/_dtype_like.py (renamed from numpy/typing.pyi)26
-rw-r--r--numpy/typing/_shape.py6
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]]