summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
Diffstat (limited to 'numpy')
-rw-r--r--numpy/__init__.pyi41
-rw-r--r--numpy/_pytesttester.pyi3
-rw-r--r--numpy/core/_asarray.pyi8
-rw-r--r--numpy/core/_type_aliases.pyi8
-rw-r--r--numpy/core/_ufunc_config.pyi8
-rw-r--r--numpy/core/arrayprint.pyi8
-rw-r--r--numpy/core/einsumfunc.pyi8
-rw-r--r--numpy/core/fromnumeric.pyi8
-rw-r--r--numpy/core/function_base.pyi8
-rw-r--r--numpy/core/multiarray.pyi10
-rw-r--r--numpy/core/numeric.pyi7
-rw-r--r--numpy/core/numerictypes.pyi8
-rw-r--r--numpy/core/shape_base.pyi8
-rw-r--r--numpy/f2py/__init__.pyi3
-rw-r--r--numpy/lib/arraypad.pyi8
-rw-r--r--numpy/lib/arrayterator.pyi1
-rw-r--r--numpy/lib/format.pyi8
-rw-r--r--numpy/lib/index_tricks.pyi8
-rw-r--r--numpy/lib/npyio.pyi4
-rw-r--r--numpy/lib/shape_base.pyi3
-rw-r--r--numpy/lib/stride_tricks.pyi3
-rw-r--r--numpy/lib/type_check.pyi8
-rw-r--r--numpy/lib/utils.pyi7
-rw-r--r--numpy/random/_generator.pyi8
-rw-r--r--numpy/random/_mt19937.pyi8
-rw-r--r--numpy/random/_pcg64.pyi8
-rw-r--r--numpy/random/_philox.pyi8
-rw-r--r--numpy/random/_sfc64.pyi8
-rw-r--r--numpy/random/bit_generator.pyi7
-rw-r--r--numpy/random/mtrand.pyi8
-rw-r--r--numpy/testing/_private/utils.pyi8
-rw-r--r--numpy/typing/__init__.py26
-rw-r--r--numpy/typing/_array_like.py26
-rw-r--r--numpy/typing/_callable.py587
-rw-r--r--numpy/typing/_char_codes.py282
-rw-r--r--numpy/typing/_dtype_like.py51
-rw-r--r--numpy/typing/_shape.py12
-rw-r--r--numpy/typing/_ufunc.pyi4
-rw-r--r--numpy/typing/tests/data/reveal/arraypad.py3
-rw-r--r--numpy/typing/tests/test_runtime.py10
-rw-r--r--numpy/typing/tests/test_typing_extensions.py35
41 files changed, 474 insertions, 811 deletions
diff --git a/numpy/__init__.pyi b/numpy/__init__.pyi
index fb68f4a56..f398f67b7 100644
--- a/numpy/__init__.pyi
+++ b/numpy/__init__.pyi
@@ -164,6 +164,7 @@ from numpy.typing._extended_precision import (
)
from typing import (
+ Literal as L,
Any,
ByteString,
Callable,
@@ -189,13 +190,11 @@ from typing import (
Type,
TypeVar,
Union,
+ Protocol,
+ SupportsIndex,
+ Final,
)
-if sys.version_info >= (3, 8):
- from typing import Literal as L, Protocol, SupportsIndex, Final
-else:
- from typing_extensions import Literal as L, Protocol, SupportsIndex, Final
-
# Ensures that the stubs are picked up
from numpy import (
char as char,
@@ -3163,28 +3162,16 @@ class datetime64(generic):
__gt__: _ComparisonOp[datetime64, _ArrayLikeDT64_co]
__ge__: _ComparisonOp[datetime64, _ArrayLikeDT64_co]
-# Support for `__index__` was added in python 3.8 (bpo-20092)
-if sys.version_info >= (3, 8):
- _IntValue = Union[SupportsInt, _CharLike_co, SupportsIndex]
- _FloatValue = Union[None, _CharLike_co, SupportsFloat, SupportsIndex]
- _ComplexValue = Union[
- None,
- _CharLike_co,
- SupportsFloat,
- SupportsComplex,
- SupportsIndex,
- complex, # `complex` is not a subtype of `SupportsComplex`
- ]
-else:
- _IntValue = Union[SupportsInt, _CharLike_co]
- _FloatValue = Union[None, _CharLike_co, SupportsFloat]
- _ComplexValue = Union[
- None,
- _CharLike_co,
- SupportsFloat,
- SupportsComplex,
- complex,
- ]
+_IntValue = Union[SupportsInt, _CharLike_co, SupportsIndex]
+_FloatValue = Union[None, _CharLike_co, SupportsFloat, SupportsIndex]
+_ComplexValue = Union[
+ None,
+ _CharLike_co,
+ SupportsFloat,
+ SupportsComplex,
+ SupportsIndex,
+ complex, # `complex` is not a subtype of `SupportsComplex`
+]
class integer(number[_NBit1]): # type: ignore
@property
diff --git a/numpy/_pytesttester.pyi b/numpy/_pytesttester.pyi
index 693f4128a..0be64b3f7 100644
--- a/numpy/_pytesttester.pyi
+++ b/numpy/_pytesttester.pyi
@@ -1,5 +1,4 @@
-from typing import List, Iterable
-from typing_extensions import Literal as L
+from typing import List, Iterable, Literal as L
__all__: List[str]
diff --git a/numpy/core/_asarray.pyi b/numpy/core/_asarray.pyi
index 1928cfe12..fee9b7b6e 100644
--- a/numpy/core/_asarray.pyi
+++ b/numpy/core/_asarray.pyi
@@ -1,14 +1,8 @@
-import sys
-from typing import TypeVar, Union, Iterable, overload
+from typing import TypeVar, Union, Iterable, overload, Literal
from numpy import ndarray
from numpy.typing import ArrayLike, DTypeLike
-if sys.version_info >= (3, 8):
- from typing import Literal
-else:
- from typing_extensions import Literal
-
_ArrayType = TypeVar("_ArrayType", bound=ndarray)
_Requirements = Literal[
diff --git a/numpy/core/_type_aliases.pyi b/numpy/core/_type_aliases.pyi
index 6a1099cd3..c10d072f9 100644
--- a/numpy/core/_type_aliases.pyi
+++ b/numpy/core/_type_aliases.pyi
@@ -1,13 +1,7 @@
-import sys
-from typing import Dict, Union, Type, List
+from typing import Dict, Union, Type, List, TypedDict
from numpy import generic, signedinteger, unsignedinteger, floating, complexfloating
-if sys.version_info >= (3, 8):
- from typing import TypedDict
-else:
- from typing_extensions import TypedDict
-
class _SCTypes(TypedDict):
int: List[Type[signedinteger]]
uint: List[Type[unsignedinteger]]
diff --git a/numpy/core/_ufunc_config.pyi b/numpy/core/_ufunc_config.pyi
index e90f1c510..aa48ddba7 100644
--- a/numpy/core/_ufunc_config.pyi
+++ b/numpy/core/_ufunc_config.pyi
@@ -1,10 +1,4 @@
-import sys
-from typing import Optional, Union, Callable, Any
-
-if sys.version_info >= (3, 8):
- from typing import Literal, Protocol, TypedDict
-else:
- from typing_extensions import Literal, Protocol, TypedDict
+from typing import Optional, Union, Callable, Any, Literal, Protocol, TypedDict
_ErrKind = Literal["ignore", "warn", "raise", "call", "print", "log"]
_ErrFunc = Callable[[str, int], Any]
diff --git a/numpy/core/arrayprint.pyi b/numpy/core/arrayprint.pyi
index ac2b6f5a8..df22efed6 100644
--- a/numpy/core/arrayprint.pyi
+++ b/numpy/core/arrayprint.pyi
@@ -1,6 +1,5 @@
-import sys
from types import TracebackType
-from typing import Any, Optional, Callable, Union, Type
+from typing import Any, Optional, Callable, Union, Type, Literal, TypedDict, SupportsIndex
# Using a private class is by no means ideal, but it is simply a consquence
# of a `contextlib.context` returning an instance of aformentioned class
@@ -23,11 +22,6 @@ from numpy import (
)
from numpy.typing import ArrayLike, _CharLike_co, _FloatLike_co
-if sys.version_info > (3, 8):
- from typing import Literal, TypedDict, SupportsIndex
-else:
- from typing_extensions import Literal, TypedDict, SupportsIndex
-
_FloatMode = Literal["fixed", "unique", "maxprec", "maxprec_equal"]
class _FormatDict(TypedDict, total=False):
diff --git a/numpy/core/einsumfunc.pyi b/numpy/core/einsumfunc.pyi
index 2457e8719..bb02590e6 100644
--- a/numpy/core/einsumfunc.pyi
+++ b/numpy/core/einsumfunc.pyi
@@ -1,5 +1,4 @@
-import sys
-from typing import List, TypeVar, Optional, Any, overload, Union, Tuple, Sequence
+from typing import List, TypeVar, Optional, Any, overload, Union, Tuple, Sequence, Literal
from numpy import (
ndarray,
@@ -26,11 +25,6 @@ from numpy.typing import (
_DTypeLikeComplex_co,
)
-if sys.version_info >= (3, 8):
- from typing import Literal
-else:
- from typing_extensions import Literal
-
_ArrayType = TypeVar(
"_ArrayType",
bound=ndarray[Any, dtype[Union[bool_, number[Any]]]],
diff --git a/numpy/core/fromnumeric.pyi b/numpy/core/fromnumeric.pyi
index 45057e4b1..3cbe1d5c5 100644
--- a/numpy/core/fromnumeric.pyi
+++ b/numpy/core/fromnumeric.pyi
@@ -1,6 +1,5 @@
-import sys
import datetime as dt
-from typing import Optional, Union, Sequence, Tuple, Any, overload, TypeVar
+from typing import Optional, Union, Sequence, Tuple, Any, overload, TypeVar, Literal
from numpy import (
ndarray,
@@ -26,11 +25,6 @@ from numpy.typing import (
_NumberLike_co,
)
-if sys.version_info >= (3, 8):
- from typing import Literal
-else:
- from typing_extensions import Literal
-
# Various annotations for scalars
# While dt.datetime and dt.timedelta are not technically part of NumPy,
diff --git a/numpy/core/function_base.pyi b/numpy/core/function_base.pyi
index b5d6ca6ab..c35629aa7 100644
--- a/numpy/core/function_base.pyi
+++ b/numpy/core/function_base.pyi
@@ -1,14 +1,8 @@
-import sys
-from typing import overload, Tuple, Union, Sequence, Any
+from typing import overload, Tuple, Union, Sequence, Any, SupportsIndex, Literal
from numpy import ndarray
from numpy.typing import ArrayLike, DTypeLike, _SupportsArray, _NumberLike_co
-if sys.version_info >= (3, 8):
- from typing import SupportsIndex, Literal
-else:
- from typing_extensions import SupportsIndex, Literal
-
# TODO: wait for support for recursive types
_ArrayLikeNested = Sequence[Sequence[Any]]
_ArrayLikeNumber = Union[
diff --git a/numpy/core/multiarray.pyi b/numpy/core/multiarray.pyi
index a7d2e6bbf..b807ddff0 100644
--- a/numpy/core/multiarray.pyi
+++ b/numpy/core/multiarray.pyi
@@ -1,9 +1,9 @@
# TODO: Sort out any and all missing functions in this namespace
import os
-import sys
import datetime as dt
from typing import (
+ Literal as L,
Any,
Callable,
IO,
@@ -16,6 +16,9 @@ from typing import (
Union,
Sequence,
Tuple,
+ SupportsIndex,
+ final,
+ Final,
)
from numpy import (
@@ -78,11 +81,6 @@ from numpy.typing import (
_TD64Like_co,
)
-if sys.version_info >= (3, 8):
- from typing import SupportsIndex, final, Final, Literal as L
-else:
- from typing_extensions import SupportsIndex, final, Final, Literal as L
-
_SCT = TypeVar("_SCT", bound=generic)
_ArrayType = TypeVar("_ArrayType", bound=NDArray[Any])
diff --git a/numpy/core/numeric.pyi b/numpy/core/numeric.pyi
index 3c2b553ec..54ab4b7c8 100644
--- a/numpy/core/numeric.pyi
+++ b/numpy/core/numeric.pyi
@@ -1,4 +1,3 @@
-import sys
from typing import (
Any,
Optional,
@@ -10,16 +9,12 @@ from typing import (
overload,
TypeVar,
Iterable,
+ Literal,
)
from numpy import ndarray, generic, dtype, bool_, signedinteger, _OrderKACF, _OrderCF
from numpy.typing import ArrayLike, DTypeLike, _ShapeLike
-if sys.version_info >= (3, 8):
- from typing import Literal
-else:
- from typing_extensions import Literal
-
_T = TypeVar("_T")
_ArrayType = TypeVar("_ArrayType", bound=ndarray)
diff --git a/numpy/core/numerictypes.pyi b/numpy/core/numerictypes.pyi
index d5e3ccffb..1d3ff773b 100644
--- a/numpy/core/numerictypes.pyi
+++ b/numpy/core/numerictypes.pyi
@@ -1,6 +1,7 @@
import sys
import types
from typing import (
+ Literal as L,
Type,
Union,
Tuple,
@@ -10,6 +11,8 @@ from typing import (
Dict,
List,
Iterable,
+ Protocol,
+ TypedDict,
)
from numpy import (
@@ -49,11 +52,6 @@ from numpy.core._type_aliases import (
from numpy.typing import DTypeLike, ArrayLike, _SupportsDType
-if sys.version_info >= (3, 8):
- from typing import Literal as L, Protocol, TypedDict
-else:
- from typing_extensions import Literal as L, Protocol, TypedDict
-
_T = TypeVar("_T")
_SCT = TypeVar("_SCT", bound=generic)
diff --git a/numpy/core/shape_base.pyi b/numpy/core/shape_base.pyi
index 9aaeceed7..a640991d3 100644
--- a/numpy/core/shape_base.pyi
+++ b/numpy/core/shape_base.pyi
@@ -1,14 +1,8 @@
-import sys
-from typing import TypeVar, overload, List, Sequence, Any
+from typing import TypeVar, overload, List, Sequence, Any, SupportsIndex
from numpy import generic, dtype
from numpy.typing import ArrayLike, NDArray, _NestedSequence, _SupportsArray
-if sys.version_info >= (3, 8):
- from typing import SupportsIndex
-else:
- from typing_extensions import SupportsIndex
-
_SCT = TypeVar("_SCT", bound=generic)
_ArrayType = TypeVar("_ArrayType", bound=NDArray[Any])
diff --git a/numpy/f2py/__init__.pyi b/numpy/f2py/__init__.pyi
index 7d8e092ea..e52e12bbd 100644
--- a/numpy/f2py/__init__.pyi
+++ b/numpy/f2py/__init__.pyi
@@ -1,7 +1,6 @@
import os
import subprocess
-from typing import Any, List, Iterable, Dict, overload
-from typing_extensions import TypedDict, Literal as L
+from typing import Literal as L, Any, List, Iterable, Dict, overload, TypedDict
from numpy._pytesttester import PytestTester
diff --git a/numpy/lib/arraypad.pyi b/numpy/lib/arraypad.pyi
index df9538dd7..d6e07a6bd 100644
--- a/numpy/lib/arraypad.pyi
+++ b/numpy/lib/arraypad.pyi
@@ -1,11 +1,12 @@
-import sys
from typing import (
+ Literal as L,
Any,
Dict,
List,
overload,
Tuple,
TypeVar,
+ Protocol,
)
from numpy import ndarray, dtype, generic
@@ -18,11 +19,6 @@ from numpy.typing import (
_SupportsArray,
)
-if sys.version_info >= (3, 8):
- from typing import Literal as L, Protocol
-else:
- from typing_extensions import Literal as L, Protocol
-
_SCT = TypeVar("_SCT", bound=generic)
class _ModeFunc(Protocol):
diff --git a/numpy/lib/arrayterator.pyi b/numpy/lib/arrayterator.pyi
index 39d6fd843..82c669206 100644
--- a/numpy/lib/arrayterator.pyi
+++ b/numpy/lib/arrayterator.pyi
@@ -1,4 +1,3 @@
-import sys
from typing import (
List,
Any,
diff --git a/numpy/lib/format.pyi b/numpy/lib/format.pyi
index 4c44d57bf..092245daf 100644
--- a/numpy/lib/format.pyi
+++ b/numpy/lib/format.pyi
@@ -1,10 +1,4 @@
-import sys
-from typing import Any, List, Set
-
-if sys.version_info >= (3, 8):
- from typing import Literal, Final
-else:
- from typing_extensions import Literal, Final
+from typing import Any, List, Set, Literal, Final
__all__: List[str]
diff --git a/numpy/lib/index_tricks.pyi b/numpy/lib/index_tricks.pyi
index 0f9ae94a9..530be3cae 100644
--- a/numpy/lib/index_tricks.pyi
+++ b/numpy/lib/index_tricks.pyi
@@ -1,4 +1,3 @@
-import sys
from typing import (
Any,
Tuple,
@@ -8,6 +7,8 @@ from typing import (
List,
Union,
Sequence,
+ Literal,
+ SupportsIndex,
)
from numpy import (
@@ -49,11 +50,6 @@ from numpy.core.multiarray import (
ravel_multi_index as ravel_multi_index,
)
-if sys.version_info >= (3, 8):
- from typing import Literal, SupportsIndex
-else:
- from typing_extensions import Literal, SupportsIndex
-
_T = TypeVar("_T")
_DType = TypeVar("_DType", bound=dtype[Any])
_BoolType = TypeVar("_BoolType", Literal[True], Literal[False])
diff --git a/numpy/lib/npyio.pyi b/numpy/lib/npyio.pyi
index de6bc3ded..1321afb55 100644
--- a/numpy/lib/npyio.pyi
+++ b/numpy/lib/npyio.pyi
@@ -3,6 +3,7 @@ import sys
import zipfile
import types
from typing import (
+ Literal as L,
Any,
Mapping,
TypeVar,
@@ -16,6 +17,7 @@ from typing import (
Sequence,
Callable,
Pattern,
+ Protocol,
)
from numpy import (
@@ -36,8 +38,6 @@ from numpy.core.multiarray import (
unpackbits as unpackbits,
)
-from typing_extensions import Protocol, Literal as L
-
_T = TypeVar("_T")
_T_contra = TypeVar("_T_contra", contravariant=True)
_T_co = TypeVar("_T_co", covariant=True)
diff --git a/numpy/lib/shape_base.pyi b/numpy/lib/shape_base.pyi
index cfb3040b7..4c275cc8c 100644
--- a/numpy/lib/shape_base.pyi
+++ b/numpy/lib/shape_base.pyi
@@ -1,5 +1,4 @@
-from typing import List, TypeVar, Callable, Sequence, Any, overload, Tuple
-from typing_extensions import SupportsIndex, Protocol
+from typing import List, TypeVar, Callable, Sequence, Any, overload, Tuple, SupportsIndex, Protocol
from numpy import (
generic,
diff --git a/numpy/lib/stride_tricks.pyi b/numpy/lib/stride_tricks.pyi
index 9e4e46b8b..bafc46e9c 100644
--- a/numpy/lib/stride_tricks.pyi
+++ b/numpy/lib/stride_tricks.pyi
@@ -1,5 +1,4 @@
-from typing import Any, List, Dict, Iterable, TypeVar, overload
-from typing_extensions import SupportsIndex
+from typing import Any, List, Dict, Iterable, TypeVar, overload, SupportsIndex
from numpy import dtype, generic
from numpy.typing import (
diff --git a/numpy/lib/type_check.pyi b/numpy/lib/type_check.pyi
index fbe325858..5eb0e62d2 100644
--- a/numpy/lib/type_check.pyi
+++ b/numpy/lib/type_check.pyi
@@ -1,5 +1,5 @@
-import sys
from typing import (
+ Literal as L,
Any,
Container,
Iterable,
@@ -7,6 +7,7 @@ from typing import (
overload,
Type,
TypeVar,
+ Protocol,
)
from numpy import (
@@ -32,11 +33,6 @@ from numpy.typing import (
_DTypeLikeComplex,
)
-if sys.version_info >= (3, 8):
- from typing import Protocol, Literal as L
-else:
- from typing_extensions import Protocol, Literal as L
-
_T = TypeVar("_T")
_T_co = TypeVar("_T_co", covariant=True)
_SCT = TypeVar("_SCT", bound=generic)
diff --git a/numpy/lib/utils.pyi b/numpy/lib/utils.pyi
index 0518655c6..c13a219b5 100644
--- a/numpy/lib/utils.pyi
+++ b/numpy/lib/utils.pyi
@@ -1,4 +1,3 @@
-import sys
from ast import AST
from typing import (
Any,
@@ -11,6 +10,7 @@ from typing import (
Tuple,
TypeVar,
Union,
+ Protocol,
)
from numpy import ndarray, generic
@@ -21,11 +21,6 @@ from numpy.core.numerictypes import (
issubsctype as issubsctype,
)
-if sys.version_info >= (3, 8):
- from typing import Protocol
-else:
- from typing_extensions import Protocol
-
_T_contra = TypeVar("_T_contra", contravariant=True)
_FuncType = TypeVar("_FuncType", bound=Callable[..., Any])
diff --git a/numpy/random/_generator.pyi b/numpy/random/_generator.pyi
index 14dc55131..64b683d7c 100644
--- a/numpy/random/_generator.pyi
+++ b/numpy/random/_generator.pyi
@@ -1,5 +1,4 @@
-import sys
-from typing import Any, Callable, Dict, Optional, Tuple, Type, Union, overload, TypeVar
+from typing import Any, Callable, Dict, Optional, Tuple, Type, Union, overload, TypeVar, Literal
from numpy import (
bool_,
@@ -44,11 +43,6 @@ from numpy.typing import (
_UIntCodes,
)
-if sys.version_info >= (3, 8):
- from typing import Literal
-else:
- from typing_extensions import Literal
-
_ArrayType = TypeVar("_ArrayType", bound=ndarray[Any, Any])
_DTypeLikeFloat32 = Union[
diff --git a/numpy/random/_mt19937.pyi b/numpy/random/_mt19937.pyi
index 1b8bacdae..820f27392 100644
--- a/numpy/random/_mt19937.pyi
+++ b/numpy/random/_mt19937.pyi
@@ -1,15 +1,9 @@
-import sys
-from typing import Any, Union
+from typing import Any, Union, TypedDict
from numpy import dtype, ndarray, uint32
from numpy.random.bit_generator import BitGenerator, SeedSequence
from numpy.typing import _ArrayLikeInt_co
-if sys.version_info >= (3, 8):
- from typing import TypedDict
-else:
- from typing_extensions import TypedDict
-
class _MT19937Internal(TypedDict):
key: ndarray[Any, dtype[uint32]]
pos: int
diff --git a/numpy/random/_pcg64.pyi b/numpy/random/_pcg64.pyi
index 25e2fdde6..4881a987e 100644
--- a/numpy/random/_pcg64.pyi
+++ b/numpy/random/_pcg64.pyi
@@ -1,14 +1,8 @@
-import sys
-from typing import Union
+from typing import Union, TypedDict
from numpy.random.bit_generator import BitGenerator, SeedSequence
from numpy.typing import _ArrayLikeInt_co
-if sys.version_info >= (3, 8):
- from typing import TypedDict
-else:
- from typing_extensions import TypedDict
-
class _PCG64Internal(TypedDict):
state: int
inc: int
diff --git a/numpy/random/_philox.pyi b/numpy/random/_philox.pyi
index f6a5b9b9b..dd1c5e6e9 100644
--- a/numpy/random/_philox.pyi
+++ b/numpy/random/_philox.pyi
@@ -1,15 +1,9 @@
-import sys
-from typing import Any, Union
+from typing import Any, Union, TypedDict
from numpy import dtype, ndarray, uint64
from numpy.random.bit_generator import BitGenerator, SeedSequence
from numpy.typing import _ArrayLikeInt_co
-if sys.version_info >= (3, 8):
- from typing import TypedDict
-else:
- from typing_extensions import TypedDict
-
class _PhiloxInternal(TypedDict):
counter: ndarray[Any, dtype[uint64]]
key: ndarray[Any, dtype[uint64]]
diff --git a/numpy/random/_sfc64.pyi b/numpy/random/_sfc64.pyi
index 72a271c92..94d11a210 100644
--- a/numpy/random/_sfc64.pyi
+++ b/numpy/random/_sfc64.pyi
@@ -1,5 +1,4 @@
-import sys
-from typing import Any, Union
+from typing import Any, Union, TypedDict
from numpy import dtype as dtype
from numpy import ndarray as ndarray
@@ -7,11 +6,6 @@ from numpy import uint64
from numpy.random.bit_generator import BitGenerator, SeedSequence
from numpy.typing import _ArrayLikeInt_co
-if sys.version_info >= (3, 8):
- from typing import TypedDict
-else:
- from typing_extensions import TypedDict
-
class _SFC64Internal(TypedDict):
state: ndarray[Any, dtype[uint64]]
diff --git a/numpy/random/bit_generator.pyi b/numpy/random/bit_generator.pyi
index 5b68dde6c..fa2f1ab12 100644
--- a/numpy/random/bit_generator.pyi
+++ b/numpy/random/bit_generator.pyi
@@ -1,5 +1,4 @@
import abc
-import sys
from threading import Lock
from typing import (
Any,
@@ -16,16 +15,12 @@ from typing import (
TypeVar,
Union,
overload,
+ Literal,
)
from numpy import dtype, ndarray, uint32, uint64
from numpy.typing import _ArrayLikeInt_co, _ShapeLike, _SupportsDType, _UInt32Codes, _UInt64Codes
-if sys.version_info >= (3, 8):
- from typing import Literal
-else:
- from typing_extensions import Literal
-
_T = TypeVar("_T")
_DTypeLikeUint32 = Union[
diff --git a/numpy/random/mtrand.pyi b/numpy/random/mtrand.pyi
index 3137b0a95..cbe87a299 100644
--- a/numpy/random/mtrand.pyi
+++ b/numpy/random/mtrand.pyi
@@ -1,5 +1,4 @@
-import sys
-from typing import Any, Callable, Dict, Optional, Tuple, Type, Union, overload
+from typing import Any, Callable, Dict, Optional, Tuple, Type, Union, overload, Literal
from numpy import (
bool_,
@@ -44,11 +43,6 @@ from numpy.typing import (
_UIntCodes,
)
-if sys.version_info >= (3, 8):
- from typing import Literal
-else:
- from typing_extensions import Literal
-
_DTypeLikeFloat32 = Union[
dtype[float32],
_SupportsDType[dtype[float32]],
diff --git a/numpy/testing/_private/utils.pyi b/numpy/testing/_private/utils.pyi
index 29915309f..ab5ca8784 100644
--- a/numpy/testing/_private/utils.pyi
+++ b/numpy/testing/_private/utils.pyi
@@ -6,6 +6,7 @@ import warnings
import unittest
import contextlib
from typing import (
+ Literal as L,
Any,
AnyStr,
Callable,
@@ -23,6 +24,8 @@ from typing import (
type_check_only,
TypeVar,
Union,
+ Final,
+ SupportsIndex,
)
from numpy import generic, dtype, number, object_, bool_, _FloatValue
@@ -40,11 +43,6 @@ from unittest.case import (
SkipTest as SkipTest,
)
-if sys.version_info >= (3, 8):
- from typing import Final, SupportsIndex, Literal as L
-else:
- from typing_extensions import Final, SupportsIndex, Literal as L
-
_T = TypeVar("_T")
_ET = TypeVar("_ET", bound=BaseException)
_FT = TypeVar("_FT", bound=Callable[..., Any])
diff --git a/numpy/typing/__init__.py b/numpy/typing/__init__.py
index d731f00ef..d60ddb5bb 100644
--- a/numpy/typing/__init__.py
+++ b/numpy/typing/__init__.py
@@ -5,13 +5,6 @@ Typing (:mod:`numpy.typing`)
.. versionadded:: 1.20
-.. warning::
-
- Some of the types in this module rely on features only present in
- the standard library in Python 3.8 and greater. If you want to use
- these types in earlier versions of Python, you should install the
- typing-extensions_ package.
-
Large parts of the NumPy API have PEP-484-style type annotations. In
addition a number of type aliases are available to users, most prominently
the two below:
@@ -143,24 +136,7 @@ API
# NOTE: The API section will be appended with additional entries
# further down in this file
-from typing import TYPE_CHECKING, List, Any
-
-if TYPE_CHECKING:
- # typing_extensions is always available when type-checking
- from typing_extensions import Literal as L
- _HAS_TYPING_EXTENSIONS: L[True]
-else:
- try:
- import typing_extensions
- except ImportError:
- _HAS_TYPING_EXTENSIONS = False
- else:
- _HAS_TYPING_EXTENSIONS = True
-
-if TYPE_CHECKING:
- from typing_extensions import final
-else:
- def final(f): return f
+from typing import TYPE_CHECKING, List, Any, final
if not TYPE_CHECKING:
__all__ = ["ArrayLike", "DTypeLike", "NBitBase", "NDArray"]
diff --git a/numpy/typing/_array_like.py b/numpy/typing/_array_like.py
index c562f3c1f..6ea0eb662 100644
--- a/numpy/typing/_array_like.py
+++ b/numpy/typing/_array_like.py
@@ -1,7 +1,6 @@
from __future__ import annotations
-import sys
-from typing import Any, Sequence, TYPE_CHECKING, Union, TypeVar, Generic
+from typing import Any, Sequence, Protocol, Union, TypeVar
from numpy import (
ndarray,
dtype,
@@ -19,28 +18,19 @@ from numpy import (
str_,
bytes_,
)
-from . import _HAS_TYPING_EXTENSIONS
-
-if sys.version_info >= (3, 8):
- from typing import Protocol
-elif _HAS_TYPING_EXTENSIONS:
- from typing_extensions import Protocol
_T = TypeVar("_T")
_ScalarType = TypeVar("_ScalarType", bound=generic)
_DType = TypeVar("_DType", bound="dtype[Any]")
_DType_co = TypeVar("_DType_co", covariant=True, bound="dtype[Any]")
-if TYPE_CHECKING or _HAS_TYPING_EXTENSIONS or sys.version_info >= (3, 8):
- # The `_SupportsArray` protocol only cares about the default dtype
- # (i.e. `dtype=None` or no `dtype` parameter at all) of the to-be returned
- # array.
- # Concrete implementations of the protocol are responsible for adding
- # any and all remaining overloads
- class _SupportsArray(Protocol[_DType_co]):
- def __array__(self) -> ndarray[Any, _DType_co]: ...
-else:
- class _SupportsArray(Generic[_DType_co]): ...
+# The `_SupportsArray` protocol only cares about the default dtype
+# (i.e. `dtype=None` or no `dtype` parameter at all) of the to-be returned
+# array.
+# Concrete implementations of the protocol are responsible for adding
+# any and all remaining overloads
+class _SupportsArray(Protocol[_DType_co]):
+ def __array__(self) -> ndarray[Any, _DType_co]: ...
# TODO: Wait for support for recursive types
_NestedSequence = Union[
diff --git a/numpy/typing/_callable.py b/numpy/typing/_callable.py
index 8f911da3b..63a8153af 100644
--- a/numpy/typing/_callable.py
+++ b/numpy/typing/_callable.py
@@ -10,7 +10,6 @@ See the `Mypy documentation`_ on protocols for more details.
from __future__ import annotations
-import sys
from typing import (
Union,
TypeVar,
@@ -18,7 +17,7 @@ from typing import (
Any,
Tuple,
NoReturn,
- TYPE_CHECKING,
+ Protocol,
)
from numpy import (
@@ -45,312 +44,282 @@ from ._scalars import (
_FloatLike_co,
_NumberLike_co,
)
-from . import NBitBase, _HAS_TYPING_EXTENSIONS
+from . import NBitBase
from ._generic_alias import NDArray
-if sys.version_info >= (3, 8):
- from typing import Protocol
-elif _HAS_TYPING_EXTENSIONS:
- from typing_extensions import Protocol
-
-if TYPE_CHECKING or _HAS_TYPING_EXTENSIONS or sys.version_info >= (3, 8):
- _T1 = TypeVar("_T1")
- _T2 = TypeVar("_T2")
- _2Tuple = Tuple[_T1, _T1]
-
- _NBit1 = TypeVar("_NBit1", bound=NBitBase)
- _NBit2 = TypeVar("_NBit2", bound=NBitBase)
-
- _IntType = TypeVar("_IntType", bound=integer)
- _FloatType = TypeVar("_FloatType", bound=floating)
- _NumberType = TypeVar("_NumberType", bound=number)
- _NumberType_co = TypeVar("_NumberType_co", covariant=True, bound=number)
- _GenericType_co = TypeVar("_GenericType_co", covariant=True, bound=generic)
-
- class _BoolOp(Protocol[_GenericType_co]):
- @overload
- def __call__(self, __other: _BoolLike_co) -> _GenericType_co: ...
- @overload # platform dependent
- def __call__(self, __other: int) -> int_: ...
- @overload
- def __call__(self, __other: float) -> float64: ...
- @overload
- def __call__(self, __other: complex) -> complex128: ...
- @overload
- def __call__(self, __other: _NumberType) -> _NumberType: ...
-
- class _BoolBitOp(Protocol[_GenericType_co]):
- @overload
- def __call__(self, __other: _BoolLike_co) -> _GenericType_co: ...
- @overload # platform dependent
- def __call__(self, __other: int) -> int_: ...
- @overload
- def __call__(self, __other: _IntType) -> _IntType: ...
-
- class _BoolSub(Protocol):
- # Note that `__other: bool_` is absent here
- @overload
- def __call__(self, __other: bool) -> NoReturn: ...
- @overload # platform dependent
- def __call__(self, __other: int) -> int_: ...
- @overload
- def __call__(self, __other: float) -> float64: ...
- @overload
- def __call__(self, __other: complex) -> complex128: ...
- @overload
- def __call__(self, __other: _NumberType) -> _NumberType: ...
-
- class _BoolTrueDiv(Protocol):
- @overload
- def __call__(self, __other: float | _IntLike_co) -> float64: ...
- @overload
- def __call__(self, __other: complex) -> complex128: ...
- @overload
- def __call__(self, __other: _NumberType) -> _NumberType: ...
-
- class _BoolMod(Protocol):
- @overload
- def __call__(self, __other: _BoolLike_co) -> int8: ...
- @overload # platform dependent
- def __call__(self, __other: int) -> int_: ...
- @overload
- def __call__(self, __other: float) -> float64: ...
- @overload
- def __call__(self, __other: _IntType) -> _IntType: ...
- @overload
- def __call__(self, __other: _FloatType) -> _FloatType: ...
-
- class _BoolDivMod(Protocol):
- @overload
- def __call__(self, __other: _BoolLike_co) -> _2Tuple[int8]: ...
- @overload # platform dependent
- def __call__(self, __other: int) -> _2Tuple[int_]: ...
- @overload
- def __call__(self, __other: float) -> _2Tuple[floating[_NBit1 | _NBitDouble]]: ...
- @overload
- def __call__(self, __other: _IntType) -> _2Tuple[_IntType]: ...
- @overload
- def __call__(self, __other: _FloatType) -> _2Tuple[_FloatType]: ...
-
- class _TD64Div(Protocol[_NumberType_co]):
- @overload
- def __call__(self, __other: timedelta64) -> _NumberType_co: ...
- @overload
- def __call__(self, __other: _BoolLike_co) -> NoReturn: ...
- @overload
- def __call__(self, __other: _FloatLike_co) -> timedelta64: ...
-
- class _IntTrueDiv(Protocol[_NBit1]):
- @overload
- def __call__(self, __other: bool) -> floating[_NBit1]: ...
- @overload
- def __call__(self, __other: int) -> floating[_NBit1 | _NBitInt]: ...
- @overload
- def __call__(self, __other: float) -> floating[_NBit1 | _NBitDouble]: ...
- @overload
- def __call__(
- self, __other: complex
- ) -> complexfloating[_NBit1 | _NBitDouble, _NBit1 | _NBitDouble]: ...
- @overload
- def __call__(self, __other: integer[_NBit2]) -> floating[_NBit1 | _NBit2]: ...
-
- class _UnsignedIntOp(Protocol[_NBit1]):
- # NOTE: `uint64 + signedinteger -> float64`
- @overload
- def __call__(self, __other: bool) -> unsignedinteger[_NBit1]: ...
- @overload
- def __call__(
- self, __other: int | signedinteger[Any]
- ) -> Any: ...
- @overload
- def __call__(self, __other: float) -> floating[_NBit1 | _NBitDouble]: ...
- @overload
- def __call__(
- self, __other: complex
- ) -> complexfloating[_NBit1 | _NBitDouble, _NBit1 | _NBitDouble]: ...
- @overload
- def __call__(
- self, __other: unsignedinteger[_NBit2]
- ) -> unsignedinteger[_NBit1 | _NBit2]: ...
-
- class _UnsignedIntBitOp(Protocol[_NBit1]):
- @overload
- def __call__(self, __other: bool) -> unsignedinteger[_NBit1]: ...
- @overload
- def __call__(self, __other: int) -> signedinteger[Any]: ...
- @overload
- def __call__(self, __other: signedinteger[Any]) -> signedinteger[Any]: ...
- @overload
- def __call__(
- self, __other: unsignedinteger[_NBit2]
- ) -> unsignedinteger[_NBit1 | _NBit2]: ...
-
- class _UnsignedIntMod(Protocol[_NBit1]):
- @overload
- def __call__(self, __other: bool) -> unsignedinteger[_NBit1]: ...
- @overload
- def __call__(
- self, __other: int | signedinteger[Any]
- ) -> Any: ...
- @overload
- def __call__(self, __other: float) -> floating[_NBit1 | _NBitDouble]: ...
- @overload
- def __call__(
- self, __other: unsignedinteger[_NBit2]
- ) -> unsignedinteger[_NBit1 | _NBit2]: ...
-
- class _UnsignedIntDivMod(Protocol[_NBit1]):
- @overload
- def __call__(self, __other: bool) -> _2Tuple[signedinteger[_NBit1]]: ...
- @overload
- def __call__(
- self, __other: int | signedinteger[Any]
- ) -> _2Tuple[Any]: ...
- @overload
- def __call__(self, __other: float) -> _2Tuple[floating[_NBit1 | _NBitDouble]]: ...
- @overload
- def __call__(
- self, __other: unsignedinteger[_NBit2]
- ) -> _2Tuple[unsignedinteger[_NBit1 | _NBit2]]: ...
-
- class _SignedIntOp(Protocol[_NBit1]):
- @overload
- def __call__(self, __other: bool) -> signedinteger[_NBit1]: ...
- @overload
- def __call__(self, __other: int) -> signedinteger[_NBit1 | _NBitInt]: ...
- @overload
- def __call__(self, __other: float) -> floating[_NBit1 | _NBitDouble]: ...
- @overload
- def __call__(
- self, __other: complex
- ) -> complexfloating[_NBit1 | _NBitDouble, _NBit1 | _NBitDouble]: ...
- @overload
- def __call__(
- self, __other: signedinteger[_NBit2]
- ) -> signedinteger[_NBit1 | _NBit2]: ...
-
- class _SignedIntBitOp(Protocol[_NBit1]):
- @overload
- def __call__(self, __other: bool) -> signedinteger[_NBit1]: ...
- @overload
- def __call__(self, __other: int) -> signedinteger[_NBit1 | _NBitInt]: ...
- @overload
- def __call__(
- self, __other: signedinteger[_NBit2]
- ) -> signedinteger[_NBit1 | _NBit2]: ...
-
- class _SignedIntMod(Protocol[_NBit1]):
- @overload
- def __call__(self, __other: bool) -> signedinteger[_NBit1]: ...
- @overload
- def __call__(self, __other: int) -> signedinteger[_NBit1 | _NBitInt]: ...
- @overload
- def __call__(self, __other: float) -> floating[_NBit1 | _NBitDouble]: ...
- @overload
- def __call__(
- self, __other: signedinteger[_NBit2]
- ) -> signedinteger[_NBit1 | _NBit2]: ...
-
- class _SignedIntDivMod(Protocol[_NBit1]):
- @overload
- def __call__(self, __other: bool) -> _2Tuple[signedinteger[_NBit1]]: ...
- @overload
- def __call__(self, __other: int) -> _2Tuple[signedinteger[_NBit1 | _NBitInt]]: ...
- @overload
- def __call__(self, __other: float) -> _2Tuple[floating[_NBit1 | _NBitDouble]]: ...
- @overload
- def __call__(
- self, __other: signedinteger[_NBit2]
- ) -> _2Tuple[signedinteger[_NBit1 | _NBit2]]: ...
-
- class _FloatOp(Protocol[_NBit1]):
- @overload
- def __call__(self, __other: bool) -> floating[_NBit1]: ...
- @overload
- def __call__(self, __other: int) -> floating[_NBit1 | _NBitInt]: ...
- @overload
- def __call__(self, __other: float) -> floating[_NBit1 | _NBitDouble]: ...
- @overload
- def __call__(
- self, __other: complex
- ) -> complexfloating[_NBit1 | _NBitDouble, _NBit1 | _NBitDouble]: ...
- @overload
- def __call__(
- self, __other: integer[_NBit2] | floating[_NBit2]
- ) -> floating[_NBit1 | _NBit2]: ...
-
- class _FloatMod(Protocol[_NBit1]):
- @overload
- def __call__(self, __other: bool) -> floating[_NBit1]: ...
- @overload
- def __call__(self, __other: int) -> floating[_NBit1 | _NBitInt]: ...
- @overload
- def __call__(self, __other: float) -> floating[_NBit1 | _NBitDouble]: ...
- @overload
- def __call__(
- self, __other: integer[_NBit2] | floating[_NBit2]
- ) -> floating[_NBit1 | _NBit2]: ...
-
- class _FloatDivMod(Protocol[_NBit1]):
- @overload
- def __call__(self, __other: bool) -> _2Tuple[floating[_NBit1]]: ...
- @overload
- def __call__(self, __other: int) -> _2Tuple[floating[_NBit1 | _NBitInt]]: ...
- @overload
- def __call__(self, __other: float) -> _2Tuple[floating[_NBit1 | _NBitDouble]]: ...
- @overload
- def __call__(
- self, __other: integer[_NBit2] | floating[_NBit2]
- ) -> _2Tuple[floating[_NBit1 | _NBit2]]: ...
-
- class _ComplexOp(Protocol[_NBit1]):
- @overload
- def __call__(self, __other: bool) -> complexfloating[_NBit1, _NBit1]: ...
- @overload
- def __call__(self, __other: int) -> complexfloating[_NBit1 | _NBitInt, _NBit1 | _NBitInt]: ...
- @overload
- def __call__(
- self, __other: complex
- ) -> complexfloating[_NBit1 | _NBitDouble, _NBit1 | _NBitDouble]: ...
- @overload
- def __call__(
- self,
- __other: Union[
- integer[_NBit2],
- floating[_NBit2],
- complexfloating[_NBit2, _NBit2],
- ]
- ) -> complexfloating[_NBit1 | _NBit2, _NBit1 | _NBit2]: ...
-
- class _NumberOp(Protocol):
- def __call__(self, __other: _NumberLike_co) -> Any: ...
-
- class _ComparisonOp(Protocol[_T1, _T2]):
- @overload
- def __call__(self, __other: _T1) -> bool_: ...
- @overload
- def __call__(self, __other: _T2) -> NDArray[bool_]: ...
-
-else:
- _BoolOp = Any
- _BoolBitOp = Any
- _BoolSub = Any
- _BoolTrueDiv = Any
- _BoolMod = Any
- _BoolDivMod = Any
- _TD64Div = Any
- _IntTrueDiv = Any
- _UnsignedIntOp = Any
- _UnsignedIntBitOp = Any
- _UnsignedIntMod = Any
- _UnsignedIntDivMod = Any
- _SignedIntOp = Any
- _SignedIntBitOp = Any
- _SignedIntMod = Any
- _SignedIntDivMod = Any
- _FloatOp = Any
- _FloatMod = Any
- _FloatDivMod = Any
- _ComplexOp = Any
- _NumberOp = Any
- _ComparisonOp = Any
+_T1 = TypeVar("_T1")
+_T2 = TypeVar("_T2")
+_2Tuple = Tuple[_T1, _T1]
+
+_NBit1 = TypeVar("_NBit1", bound=NBitBase)
+_NBit2 = TypeVar("_NBit2", bound=NBitBase)
+
+_IntType = TypeVar("_IntType", bound=integer)
+_FloatType = TypeVar("_FloatType", bound=floating)
+_NumberType = TypeVar("_NumberType", bound=number)
+_NumberType_co = TypeVar("_NumberType_co", covariant=True, bound=number)
+_GenericType_co = TypeVar("_GenericType_co", covariant=True, bound=generic)
+
+class _BoolOp(Protocol[_GenericType_co]):
+ @overload
+ def __call__(self, __other: _BoolLike_co) -> _GenericType_co: ...
+ @overload # platform dependent
+ def __call__(self, __other: int) -> int_: ...
+ @overload
+ def __call__(self, __other: float) -> float64: ...
+ @overload
+ def __call__(self, __other: complex) -> complex128: ...
+ @overload
+ def __call__(self, __other: _NumberType) -> _NumberType: ...
+
+class _BoolBitOp(Protocol[_GenericType_co]):
+ @overload
+ def __call__(self, __other: _BoolLike_co) -> _GenericType_co: ...
+ @overload # platform dependent
+ def __call__(self, __other: int) -> int_: ...
+ @overload
+ def __call__(self, __other: _IntType) -> _IntType: ...
+
+class _BoolSub(Protocol):
+ # Note that `__other: bool_` is absent here
+ @overload
+ def __call__(self, __other: bool) -> NoReturn: ...
+ @overload # platform dependent
+ def __call__(self, __other: int) -> int_: ...
+ @overload
+ def __call__(self, __other: float) -> float64: ...
+ @overload
+ def __call__(self, __other: complex) -> complex128: ...
+ @overload
+ def __call__(self, __other: _NumberType) -> _NumberType: ...
+
+class _BoolTrueDiv(Protocol):
+ @overload
+ def __call__(self, __other: float | _IntLike_co) -> float64: ...
+ @overload
+ def __call__(self, __other: complex) -> complex128: ...
+ @overload
+ def __call__(self, __other: _NumberType) -> _NumberType: ...
+
+class _BoolMod(Protocol):
+ @overload
+ def __call__(self, __other: _BoolLike_co) -> int8: ...
+ @overload # platform dependent
+ def __call__(self, __other: int) -> int_: ...
+ @overload
+ def __call__(self, __other: float) -> float64: ...
+ @overload
+ def __call__(self, __other: _IntType) -> _IntType: ...
+ @overload
+ def __call__(self, __other: _FloatType) -> _FloatType: ...
+
+class _BoolDivMod(Protocol):
+ @overload
+ def __call__(self, __other: _BoolLike_co) -> _2Tuple[int8]: ...
+ @overload # platform dependent
+ def __call__(self, __other: int) -> _2Tuple[int_]: ...
+ @overload
+ def __call__(self, __other: float) -> _2Tuple[floating[_NBit1 | _NBitDouble]]: ...
+ @overload
+ def __call__(self, __other: _IntType) -> _2Tuple[_IntType]: ...
+ @overload
+ def __call__(self, __other: _FloatType) -> _2Tuple[_FloatType]: ...
+
+class _TD64Div(Protocol[_NumberType_co]):
+ @overload
+ def __call__(self, __other: timedelta64) -> _NumberType_co: ...
+ @overload
+ def __call__(self, __other: _BoolLike_co) -> NoReturn: ...
+ @overload
+ def __call__(self, __other: _FloatLike_co) -> timedelta64: ...
+
+class _IntTrueDiv(Protocol[_NBit1]):
+ @overload
+ def __call__(self, __other: bool) -> floating[_NBit1]: ...
+ @overload
+ def __call__(self, __other: int) -> floating[_NBit1 | _NBitInt]: ...
+ @overload
+ def __call__(self, __other: float) -> floating[_NBit1 | _NBitDouble]: ...
+ @overload
+ def __call__(
+ self, __other: complex
+ ) -> complexfloating[_NBit1 | _NBitDouble, _NBit1 | _NBitDouble]: ...
+ @overload
+ def __call__(self, __other: integer[_NBit2]) -> floating[_NBit1 | _NBit2]: ...
+
+class _UnsignedIntOp(Protocol[_NBit1]):
+ # NOTE: `uint64 + signedinteger -> float64`
+ @overload
+ def __call__(self, __other: bool) -> unsignedinteger[_NBit1]: ...
+ @overload
+ def __call__(
+ self, __other: int | signedinteger[Any]
+ ) -> Any: ...
+ @overload
+ def __call__(self, __other: float) -> floating[_NBit1 | _NBitDouble]: ...
+ @overload
+ def __call__(
+ self, __other: complex
+ ) -> complexfloating[_NBit1 | _NBitDouble, _NBit1 | _NBitDouble]: ...
+ @overload
+ def __call__(
+ self, __other: unsignedinteger[_NBit2]
+ ) -> unsignedinteger[_NBit1 | _NBit2]: ...
+
+class _UnsignedIntBitOp(Protocol[_NBit1]):
+ @overload
+ def __call__(self, __other: bool) -> unsignedinteger[_NBit1]: ...
+ @overload
+ def __call__(self, __other: int) -> signedinteger[Any]: ...
+ @overload
+ def __call__(self, __other: signedinteger[Any]) -> signedinteger[Any]: ...
+ @overload
+ def __call__(
+ self, __other: unsignedinteger[_NBit2]
+ ) -> unsignedinteger[_NBit1 | _NBit2]: ...
+
+class _UnsignedIntMod(Protocol[_NBit1]):
+ @overload
+ def __call__(self, __other: bool) -> unsignedinteger[_NBit1]: ...
+ @overload
+ def __call__(
+ self, __other: int | signedinteger[Any]
+ ) -> Any: ...
+ @overload
+ def __call__(self, __other: float) -> floating[_NBit1 | _NBitDouble]: ...
+ @overload
+ def __call__(
+ self, __other: unsignedinteger[_NBit2]
+ ) -> unsignedinteger[_NBit1 | _NBit2]: ...
+
+class _UnsignedIntDivMod(Protocol[_NBit1]):
+ @overload
+ def __call__(self, __other: bool) -> _2Tuple[signedinteger[_NBit1]]: ...
+ @overload
+ def __call__(
+ self, __other: int | signedinteger[Any]
+ ) -> _2Tuple[Any]: ...
+ @overload
+ def __call__(self, __other: float) -> _2Tuple[floating[_NBit1 | _NBitDouble]]: ...
+ @overload
+ def __call__(
+ self, __other: unsignedinteger[_NBit2]
+ ) -> _2Tuple[unsignedinteger[_NBit1 | _NBit2]]: ...
+
+class _SignedIntOp(Protocol[_NBit1]):
+ @overload
+ def __call__(self, __other: bool) -> signedinteger[_NBit1]: ...
+ @overload
+ def __call__(self, __other: int) -> signedinteger[_NBit1 | _NBitInt]: ...
+ @overload
+ def __call__(self, __other: float) -> floating[_NBit1 | _NBitDouble]: ...
+ @overload
+ def __call__(
+ self, __other: complex
+ ) -> complexfloating[_NBit1 | _NBitDouble, _NBit1 | _NBitDouble]: ...
+ @overload
+ def __call__(
+ self, __other: signedinteger[_NBit2]
+ ) -> signedinteger[_NBit1 | _NBit2]: ...
+
+class _SignedIntBitOp(Protocol[_NBit1]):
+ @overload
+ def __call__(self, __other: bool) -> signedinteger[_NBit1]: ...
+ @overload
+ def __call__(self, __other: int) -> signedinteger[_NBit1 | _NBitInt]: ...
+ @overload
+ def __call__(
+ self, __other: signedinteger[_NBit2]
+ ) -> signedinteger[_NBit1 | _NBit2]: ...
+
+class _SignedIntMod(Protocol[_NBit1]):
+ @overload
+ def __call__(self, __other: bool) -> signedinteger[_NBit1]: ...
+ @overload
+ def __call__(self, __other: int) -> signedinteger[_NBit1 | _NBitInt]: ...
+ @overload
+ def __call__(self, __other: float) -> floating[_NBit1 | _NBitDouble]: ...
+ @overload
+ def __call__(
+ self, __other: signedinteger[_NBit2]
+ ) -> signedinteger[_NBit1 | _NBit2]: ...
+
+class _SignedIntDivMod(Protocol[_NBit1]):
+ @overload
+ def __call__(self, __other: bool) -> _2Tuple[signedinteger[_NBit1]]: ...
+ @overload
+ def __call__(self, __other: int) -> _2Tuple[signedinteger[_NBit1 | _NBitInt]]: ...
+ @overload
+ def __call__(self, __other: float) -> _2Tuple[floating[_NBit1 | _NBitDouble]]: ...
+ @overload
+ def __call__(
+ self, __other: signedinteger[_NBit2]
+ ) -> _2Tuple[signedinteger[_NBit1 | _NBit2]]: ...
+
+class _FloatOp(Protocol[_NBit1]):
+ @overload
+ def __call__(self, __other: bool) -> floating[_NBit1]: ...
+ @overload
+ def __call__(self, __other: int) -> floating[_NBit1 | _NBitInt]: ...
+ @overload
+ def __call__(self, __other: float) -> floating[_NBit1 | _NBitDouble]: ...
+ @overload
+ def __call__(
+ self, __other: complex
+ ) -> complexfloating[_NBit1 | _NBitDouble, _NBit1 | _NBitDouble]: ...
+ @overload
+ def __call__(
+ self, __other: integer[_NBit2] | floating[_NBit2]
+ ) -> floating[_NBit1 | _NBit2]: ...
+
+class _FloatMod(Protocol[_NBit1]):
+ @overload
+ def __call__(self, __other: bool) -> floating[_NBit1]: ...
+ @overload
+ def __call__(self, __other: int) -> floating[_NBit1 | _NBitInt]: ...
+ @overload
+ def __call__(self, __other: float) -> floating[_NBit1 | _NBitDouble]: ...
+ @overload
+ def __call__(
+ self, __other: integer[_NBit2] | floating[_NBit2]
+ ) -> floating[_NBit1 | _NBit2]: ...
+
+class _FloatDivMod(Protocol[_NBit1]):
+ @overload
+ def __call__(self, __other: bool) -> _2Tuple[floating[_NBit1]]: ...
+ @overload
+ def __call__(self, __other: int) -> _2Tuple[floating[_NBit1 | _NBitInt]]: ...
+ @overload
+ def __call__(self, __other: float) -> _2Tuple[floating[_NBit1 | _NBitDouble]]: ...
+ @overload
+ def __call__(
+ self, __other: integer[_NBit2] | floating[_NBit2]
+ ) -> _2Tuple[floating[_NBit1 | _NBit2]]: ...
+
+class _ComplexOp(Protocol[_NBit1]):
+ @overload
+ def __call__(self, __other: bool) -> complexfloating[_NBit1, _NBit1]: ...
+ @overload
+ def __call__(self, __other: int) -> complexfloating[_NBit1 | _NBitInt, _NBit1 | _NBitInt]: ...
+ @overload
+ def __call__(
+ self, __other: complex
+ ) -> complexfloating[_NBit1 | _NBitDouble, _NBit1 | _NBitDouble]: ...
+ @overload
+ def __call__(
+ self,
+ __other: Union[
+ integer[_NBit2],
+ floating[_NBit2],
+ complexfloating[_NBit2, _NBit2],
+ ]
+ ) -> complexfloating[_NBit1 | _NBit2, _NBit1 | _NBit2]: ...
+
+class _NumberOp(Protocol):
+ def __call__(self, __other: _NumberLike_co) -> Any: ...
+
+class _ComparisonOp(Protocol[_T1, _T2]):
+ @overload
+ def __call__(self, __other: _T1) -> bool_: ...
+ @overload
+ def __call__(self, __other: _T2) -> NDArray[bool_]: ...
diff --git a/numpy/typing/_char_codes.py b/numpy/typing/_char_codes.py
index 22ee168e9..139471084 100644
--- a/numpy/typing/_char_codes.py
+++ b/numpy/typing/_char_codes.py
@@ -1,171 +1,111 @@
-import sys
-from typing import Any, TYPE_CHECKING
-
-from . import _HAS_TYPING_EXTENSIONS
-
-if sys.version_info >= (3, 8):
- from typing import Literal
-elif _HAS_TYPING_EXTENSIONS:
- from typing_extensions import Literal
-
-if TYPE_CHECKING or _HAS_TYPING_EXTENSIONS or sys.version_info >= (3, 8):
- _BoolCodes = Literal["?", "=?", "<?", ">?", "bool", "bool_", "bool8"]
-
- _UInt8Codes = Literal["uint8", "u1", "=u1", "<u1", ">u1"]
- _UInt16Codes = Literal["uint16", "u2", "=u2", "<u2", ">u2"]
- _UInt32Codes = Literal["uint32", "u4", "=u4", "<u4", ">u4"]
- _UInt64Codes = Literal["uint64", "u8", "=u8", "<u8", ">u8"]
-
- _Int8Codes = Literal["int8", "i1", "=i1", "<i1", ">i1"]
- _Int16Codes = Literal["int16", "i2", "=i2", "<i2", ">i2"]
- _Int32Codes = Literal["int32", "i4", "=i4", "<i4", ">i4"]
- _Int64Codes = Literal["int64", "i8", "=i8", "<i8", ">i8"]
-
- _Float16Codes = Literal["float16", "f2", "=f2", "<f2", ">f2"]
- _Float32Codes = Literal["float32", "f4", "=f4", "<f4", ">f4"]
- _Float64Codes = Literal["float64", "f8", "=f8", "<f8", ">f8"]
-
- _Complex64Codes = Literal["complex64", "c8", "=c8", "<c8", ">c8"]
- _Complex128Codes = Literal["complex128", "c16", "=c16", "<c16", ">c16"]
-
- _ByteCodes = Literal["byte", "b", "=b", "<b", ">b"]
- _ShortCodes = Literal["short", "h", "=h", "<h", ">h"]
- _IntCCodes = Literal["intc", "i", "=i", "<i", ">i"]
- _IntPCodes = Literal["intp", "int0", "p", "=p", "<p", ">p"]
- _IntCodes = Literal["long", "int", "int_", "l", "=l", "<l", ">l"]
- _LongLongCodes = Literal["longlong", "q", "=q", "<q", ">q"]
-
- _UByteCodes = Literal["ubyte", "B", "=B", "<B", ">B"]
- _UShortCodes = Literal["ushort", "H", "=H", "<H", ">H"]
- _UIntCCodes = Literal["uintc", "I", "=I", "<I", ">I"]
- _UIntPCodes = Literal["uintp", "uint0", "P", "=P", "<P", ">P"]
- _UIntCodes = Literal["uint", "L", "=L", "<L", ">L"]
- _ULongLongCodes = Literal["ulonglong", "Q", "=Q", "<Q", ">Q"]
-
- _HalfCodes = Literal["half", "e", "=e", "<e", ">e"]
- _SingleCodes = Literal["single", "f", "=f", "<f", ">f"]
- _DoubleCodes = Literal["double", "float", "float_", "d", "=d", "<d", ">d"]
- _LongDoubleCodes = Literal["longdouble", "longfloat", "g", "=g", "<g", ">g"]
-
- _CSingleCodes = Literal["csingle", "singlecomplex", "F", "=F", "<F", ">F"]
- _CDoubleCodes = Literal["cdouble", "complex", "complex_", "cfloat", "D", "=D", "<D", ">D"]
- _CLongDoubleCodes = Literal["clongdouble", "clongfloat", "longcomplex", "G", "=G", "<G", ">G"]
-
- _StrCodes = Literal["str", "str_", "str0", "unicode", "unicode_", "U", "=U", "<U", ">U"]
- _BytesCodes = Literal["bytes", "bytes_", "bytes0", "S", "=S", "<S", ">S"]
- _VoidCodes = Literal["void", "void0", "V", "=V", "<V", ">V"]
- _ObjectCodes = Literal["object", "object_", "O", "=O", "<O", ">O"]
-
- _DT64Codes = Literal[
- "datetime64", "=datetime64", "<datetime64", ">datetime64",
- "datetime64[Y]", "=datetime64[Y]", "<datetime64[Y]", ">datetime64[Y]",
- "datetime64[M]", "=datetime64[M]", "<datetime64[M]", ">datetime64[M]",
- "datetime64[W]", "=datetime64[W]", "<datetime64[W]", ">datetime64[W]",
- "datetime64[D]", "=datetime64[D]", "<datetime64[D]", ">datetime64[D]",
- "datetime64[h]", "=datetime64[h]", "<datetime64[h]", ">datetime64[h]",
- "datetime64[m]", "=datetime64[m]", "<datetime64[m]", ">datetime64[m]",
- "datetime64[s]", "=datetime64[s]", "<datetime64[s]", ">datetime64[s]",
- "datetime64[ms]", "=datetime64[ms]", "<datetime64[ms]", ">datetime64[ms]",
- "datetime64[us]", "=datetime64[us]", "<datetime64[us]", ">datetime64[us]",
- "datetime64[ns]", "=datetime64[ns]", "<datetime64[ns]", ">datetime64[ns]",
- "datetime64[ps]", "=datetime64[ps]", "<datetime64[ps]", ">datetime64[ps]",
- "datetime64[fs]", "=datetime64[fs]", "<datetime64[fs]", ">datetime64[fs]",
- "datetime64[as]", "=datetime64[as]", "<datetime64[as]", ">datetime64[as]",
- "M", "=M", "<M", ">M",
- "M8", "=M8", "<M8", ">M8",
- "M8[Y]", "=M8[Y]", "<M8[Y]", ">M8[Y]",
- "M8[M]", "=M8[M]", "<M8[M]", ">M8[M]",
- "M8[W]", "=M8[W]", "<M8[W]", ">M8[W]",
- "M8[D]", "=M8[D]", "<M8[D]", ">M8[D]",
- "M8[h]", "=M8[h]", "<M8[h]", ">M8[h]",
- "M8[m]", "=M8[m]", "<M8[m]", ">M8[m]",
- "M8[s]", "=M8[s]", "<M8[s]", ">M8[s]",
- "M8[ms]", "=M8[ms]", "<M8[ms]", ">M8[ms]",
- "M8[us]", "=M8[us]", "<M8[us]", ">M8[us]",
- "M8[ns]", "=M8[ns]", "<M8[ns]", ">M8[ns]",
- "M8[ps]", "=M8[ps]", "<M8[ps]", ">M8[ps]",
- "M8[fs]", "=M8[fs]", "<M8[fs]", ">M8[fs]",
- "M8[as]", "=M8[as]", "<M8[as]", ">M8[as]",
- ]
- _TD64Codes = Literal[
- "timedelta64", "=timedelta64", "<timedelta64", ">timedelta64",
- "timedelta64[Y]", "=timedelta64[Y]", "<timedelta64[Y]", ">timedelta64[Y]",
- "timedelta64[M]", "=timedelta64[M]", "<timedelta64[M]", ">timedelta64[M]",
- "timedelta64[W]", "=timedelta64[W]", "<timedelta64[W]", ">timedelta64[W]",
- "timedelta64[D]", "=timedelta64[D]", "<timedelta64[D]", ">timedelta64[D]",
- "timedelta64[h]", "=timedelta64[h]", "<timedelta64[h]", ">timedelta64[h]",
- "timedelta64[m]", "=timedelta64[m]", "<timedelta64[m]", ">timedelta64[m]",
- "timedelta64[s]", "=timedelta64[s]", "<timedelta64[s]", ">timedelta64[s]",
- "timedelta64[ms]", "=timedelta64[ms]", "<timedelta64[ms]", ">timedelta64[ms]",
- "timedelta64[us]", "=timedelta64[us]", "<timedelta64[us]", ">timedelta64[us]",
- "timedelta64[ns]", "=timedelta64[ns]", "<timedelta64[ns]", ">timedelta64[ns]",
- "timedelta64[ps]", "=timedelta64[ps]", "<timedelta64[ps]", ">timedelta64[ps]",
- "timedelta64[fs]", "=timedelta64[fs]", "<timedelta64[fs]", ">timedelta64[fs]",
- "timedelta64[as]", "=timedelta64[as]", "<timedelta64[as]", ">timedelta64[as]",
- "m", "=m", "<m", ">m",
- "m8", "=m8", "<m8", ">m8",
- "m8[Y]", "=m8[Y]", "<m8[Y]", ">m8[Y]",
- "m8[M]", "=m8[M]", "<m8[M]", ">m8[M]",
- "m8[W]", "=m8[W]", "<m8[W]", ">m8[W]",
- "m8[D]", "=m8[D]", "<m8[D]", ">m8[D]",
- "m8[h]", "=m8[h]", "<m8[h]", ">m8[h]",
- "m8[m]", "=m8[m]", "<m8[m]", ">m8[m]",
- "m8[s]", "=m8[s]", "<m8[s]", ">m8[s]",
- "m8[ms]", "=m8[ms]", "<m8[ms]", ">m8[ms]",
- "m8[us]", "=m8[us]", "<m8[us]", ">m8[us]",
- "m8[ns]", "=m8[ns]", "<m8[ns]", ">m8[ns]",
- "m8[ps]", "=m8[ps]", "<m8[ps]", ">m8[ps]",
- "m8[fs]", "=m8[fs]", "<m8[fs]", ">m8[fs]",
- "m8[as]", "=m8[as]", "<m8[as]", ">m8[as]",
- ]
-
-else:
- _BoolCodes = Any
-
- _UInt8Codes = Any
- _UInt16Codes = Any
- _UInt32Codes = Any
- _UInt64Codes = Any
-
- _Int8Codes = Any
- _Int16Codes = Any
- _Int32Codes = Any
- _Int64Codes = Any
-
- _Float16Codes = Any
- _Float32Codes = Any
- _Float64Codes = Any
-
- _Complex64Codes = Any
- _Complex128Codes = Any
-
- _ByteCodes = Any
- _ShortCodes = Any
- _IntCCodes = Any
- _IntPCodes = Any
- _IntCodes = Any
- _LongLongCodes = Any
-
- _UByteCodes = Any
- _UShortCodes = Any
- _UIntCCodes = Any
- _UIntPCodes = Any
- _UIntCodes = Any
- _ULongLongCodes = Any
-
- _HalfCodes = Any
- _SingleCodes = Any
- _DoubleCodes = Any
- _LongDoubleCodes = Any
-
- _CSingleCodes = Any
- _CDoubleCodes = Any
- _CLongDoubleCodes = Any
-
- _StrCodes = Any
- _BytesCodes = Any
- _VoidCodes = Any
- _ObjectCodes = Any
-
- _DT64Codes = Any
- _TD64Codes = Any
+from typing import Literal
+
+_BoolCodes = Literal["?", "=?", "<?", ">?", "bool", "bool_", "bool8"]
+
+_UInt8Codes = Literal["uint8", "u1", "=u1", "<u1", ">u1"]
+_UInt16Codes = Literal["uint16", "u2", "=u2", "<u2", ">u2"]
+_UInt32Codes = Literal["uint32", "u4", "=u4", "<u4", ">u4"]
+_UInt64Codes = Literal["uint64", "u8", "=u8", "<u8", ">u8"]
+
+_Int8Codes = Literal["int8", "i1", "=i1", "<i1", ">i1"]
+_Int16Codes = Literal["int16", "i2", "=i2", "<i2", ">i2"]
+_Int32Codes = Literal["int32", "i4", "=i4", "<i4", ">i4"]
+_Int64Codes = Literal["int64", "i8", "=i8", "<i8", ">i8"]
+
+_Float16Codes = Literal["float16", "f2", "=f2", "<f2", ">f2"]
+_Float32Codes = Literal["float32", "f4", "=f4", "<f4", ">f4"]
+_Float64Codes = Literal["float64", "f8", "=f8", "<f8", ">f8"]
+
+_Complex64Codes = Literal["complex64", "c8", "=c8", "<c8", ">c8"]
+_Complex128Codes = Literal["complex128", "c16", "=c16", "<c16", ">c16"]
+
+_ByteCodes = Literal["byte", "b", "=b", "<b", ">b"]
+_ShortCodes = Literal["short", "h", "=h", "<h", ">h"]
+_IntCCodes = Literal["intc", "i", "=i", "<i", ">i"]
+_IntPCodes = Literal["intp", "int0", "p", "=p", "<p", ">p"]
+_IntCodes = Literal["long", "int", "int_", "l", "=l", "<l", ">l"]
+_LongLongCodes = Literal["longlong", "q", "=q", "<q", ">q"]
+
+_UByteCodes = Literal["ubyte", "B", "=B", "<B", ">B"]
+_UShortCodes = Literal["ushort", "H", "=H", "<H", ">H"]
+_UIntCCodes = Literal["uintc", "I", "=I", "<I", ">I"]
+_UIntPCodes = Literal["uintp", "uint0", "P", "=P", "<P", ">P"]
+_UIntCodes = Literal["uint", "L", "=L", "<L", ">L"]
+_ULongLongCodes = Literal["ulonglong", "Q", "=Q", "<Q", ">Q"]
+
+_HalfCodes = Literal["half", "e", "=e", "<e", ">e"]
+_SingleCodes = Literal["single", "f", "=f", "<f", ">f"]
+_DoubleCodes = Literal["double", "float", "float_", "d", "=d", "<d", ">d"]
+_LongDoubleCodes = Literal["longdouble", "longfloat", "g", "=g", "<g", ">g"]
+
+_CSingleCodes = Literal["csingle", "singlecomplex", "F", "=F", "<F", ">F"]
+_CDoubleCodes = Literal["cdouble", "complex", "complex_", "cfloat", "D", "=D", "<D", ">D"]
+_CLongDoubleCodes = Literal["clongdouble", "clongfloat", "longcomplex", "G", "=G", "<G", ">G"]
+
+_StrCodes = Literal["str", "str_", "str0", "unicode", "unicode_", "U", "=U", "<U", ">U"]
+_BytesCodes = Literal["bytes", "bytes_", "bytes0", "S", "=S", "<S", ">S"]
+_VoidCodes = Literal["void", "void0", "V", "=V", "<V", ">V"]
+_ObjectCodes = Literal["object", "object_", "O", "=O", "<O", ">O"]
+
+_DT64Codes = Literal[
+ "datetime64", "=datetime64", "<datetime64", ">datetime64",
+ "datetime64[Y]", "=datetime64[Y]", "<datetime64[Y]", ">datetime64[Y]",
+ "datetime64[M]", "=datetime64[M]", "<datetime64[M]", ">datetime64[M]",
+ "datetime64[W]", "=datetime64[W]", "<datetime64[W]", ">datetime64[W]",
+ "datetime64[D]", "=datetime64[D]", "<datetime64[D]", ">datetime64[D]",
+ "datetime64[h]", "=datetime64[h]", "<datetime64[h]", ">datetime64[h]",
+ "datetime64[m]", "=datetime64[m]", "<datetime64[m]", ">datetime64[m]",
+ "datetime64[s]", "=datetime64[s]", "<datetime64[s]", ">datetime64[s]",
+ "datetime64[ms]", "=datetime64[ms]", "<datetime64[ms]", ">datetime64[ms]",
+ "datetime64[us]", "=datetime64[us]", "<datetime64[us]", ">datetime64[us]",
+ "datetime64[ns]", "=datetime64[ns]", "<datetime64[ns]", ">datetime64[ns]",
+ "datetime64[ps]", "=datetime64[ps]", "<datetime64[ps]", ">datetime64[ps]",
+ "datetime64[fs]", "=datetime64[fs]", "<datetime64[fs]", ">datetime64[fs]",
+ "datetime64[as]", "=datetime64[as]", "<datetime64[as]", ">datetime64[as]",
+ "M", "=M", "<M", ">M",
+ "M8", "=M8", "<M8", ">M8",
+ "M8[Y]", "=M8[Y]", "<M8[Y]", ">M8[Y]",
+ "M8[M]", "=M8[M]", "<M8[M]", ">M8[M]",
+ "M8[W]", "=M8[W]", "<M8[W]", ">M8[W]",
+ "M8[D]", "=M8[D]", "<M8[D]", ">M8[D]",
+ "M8[h]", "=M8[h]", "<M8[h]", ">M8[h]",
+ "M8[m]", "=M8[m]", "<M8[m]", ">M8[m]",
+ "M8[s]", "=M8[s]", "<M8[s]", ">M8[s]",
+ "M8[ms]", "=M8[ms]", "<M8[ms]", ">M8[ms]",
+ "M8[us]", "=M8[us]", "<M8[us]", ">M8[us]",
+ "M8[ns]", "=M8[ns]", "<M8[ns]", ">M8[ns]",
+ "M8[ps]", "=M8[ps]", "<M8[ps]", ">M8[ps]",
+ "M8[fs]", "=M8[fs]", "<M8[fs]", ">M8[fs]",
+ "M8[as]", "=M8[as]", "<M8[as]", ">M8[as]",
+]
+_TD64Codes = Literal[
+ "timedelta64", "=timedelta64", "<timedelta64", ">timedelta64",
+ "timedelta64[Y]", "=timedelta64[Y]", "<timedelta64[Y]", ">timedelta64[Y]",
+ "timedelta64[M]", "=timedelta64[M]", "<timedelta64[M]", ">timedelta64[M]",
+ "timedelta64[W]", "=timedelta64[W]", "<timedelta64[W]", ">timedelta64[W]",
+ "timedelta64[D]", "=timedelta64[D]", "<timedelta64[D]", ">timedelta64[D]",
+ "timedelta64[h]", "=timedelta64[h]", "<timedelta64[h]", ">timedelta64[h]",
+ "timedelta64[m]", "=timedelta64[m]", "<timedelta64[m]", ">timedelta64[m]",
+ "timedelta64[s]", "=timedelta64[s]", "<timedelta64[s]", ">timedelta64[s]",
+ "timedelta64[ms]", "=timedelta64[ms]", "<timedelta64[ms]", ">timedelta64[ms]",
+ "timedelta64[us]", "=timedelta64[us]", "<timedelta64[us]", ">timedelta64[us]",
+ "timedelta64[ns]", "=timedelta64[ns]", "<timedelta64[ns]", ">timedelta64[ns]",
+ "timedelta64[ps]", "=timedelta64[ps]", "<timedelta64[ps]", ">timedelta64[ps]",
+ "timedelta64[fs]", "=timedelta64[fs]", "<timedelta64[fs]", ">timedelta64[fs]",
+ "timedelta64[as]", "=timedelta64[as]", "<timedelta64[as]", ">timedelta64[as]",
+ "m", "=m", "<m", ">m",
+ "m8", "=m8", "<m8", ">m8",
+ "m8[Y]", "=m8[Y]", "<m8[Y]", ">m8[Y]",
+ "m8[M]", "=m8[M]", "<m8[M]", ">m8[M]",
+ "m8[W]", "=m8[W]", "<m8[W]", ">m8[W]",
+ "m8[D]", "=m8[D]", "<m8[D]", ">m8[D]",
+ "m8[h]", "=m8[h]", "<m8[h]", ">m8[h]",
+ "m8[m]", "=m8[m]", "<m8[m]", ">m8[m]",
+ "m8[s]", "=m8[s]", "<m8[s]", ">m8[s]",
+ "m8[ms]", "=m8[ms]", "<m8[ms]", ">m8[ms]",
+ "m8[us]", "=m8[us]", "<m8[us]", ">m8[us]",
+ "m8[ns]", "=m8[ns]", "<m8[ns]", ">m8[ns]",
+ "m8[ps]", "=m8[ps]", "<m8[ps]", ">m8[ps]",
+ "m8[fs]", "=m8[fs]", "<m8[fs]", ">m8[fs]",
+ "m8[as]", "=m8[as]", "<m8[as]", ">m8[as]",
+]
diff --git a/numpy/typing/_dtype_like.py b/numpy/typing/_dtype_like.py
index b2ce3adb4..0955f5b18 100644
--- a/numpy/typing/_dtype_like.py
+++ b/numpy/typing/_dtype_like.py
@@ -1,19 +1,10 @@
-import sys
-from typing import Any, List, Sequence, Tuple, Union, Type, TypeVar, TYPE_CHECKING
+from typing import Any, List, Sequence, Tuple, Union, Type, TypeVar, Protocol, TypedDict
import numpy as np
-from . import _HAS_TYPING_EXTENSIONS
from ._shape import _ShapeLike
from ._generic_alias import _DType as DType
-if sys.version_info >= (3, 8):
- from typing import Protocol, TypedDict
-elif _HAS_TYPING_EXTENSIONS:
- from typing_extensions import Protocol, TypedDict
-else:
- from ._generic_alias import _GenericAlias as GenericAlias
-
from ._char_codes import (
_BoolCodes,
_UInt8Codes,
@@ -59,30 +50,22 @@ from ._char_codes import (
_DTypeLikeNested = Any # TODO: wait for support for recursive types
_DType_co = TypeVar("_DType_co", covariant=True, bound=DType[Any])
-if TYPE_CHECKING or _HAS_TYPING_EXTENSIONS or sys.version_info >= (3, 8):
- # Mandatory keys
- class _DTypeDictBase(TypedDict):
- names: Sequence[str]
- formats: Sequence[_DTypeLikeNested]
-
- # Mandatory + optional keys
- class _DTypeDict(_DTypeDictBase, total=False):
- offsets: Sequence[int]
- titles: Sequence[Any] # Only `str` elements are usable as indexing aliases, but all objects are legal
- itemsize: int
- aligned: bool
-
- # A protocol for anything with the dtype attribute
- class _SupportsDType(Protocol[_DType_co]):
- @property
- def dtype(self) -> _DType_co: ...
-
-else:
- _DTypeDict = Any
-
- class _SupportsDType: ...
- _SupportsDType = GenericAlias(_SupportsDType, _DType_co)
-
+# Mandatory keys
+class _DTypeDictBase(TypedDict):
+ names: Sequence[str]
+ formats: Sequence[_DTypeLikeNested]
+
+# Mandatory + optional keys
+class _DTypeDict(_DTypeDictBase, total=False):
+ offsets: Sequence[int]
+ titles: Sequence[Any] # Only `str` elements are usable as indexing aliases, but all objects are legal
+ itemsize: int
+ aligned: bool
+
+# A protocol for anything with the dtype attribute
+class _SupportsDType(Protocol[_DType_co]):
+ @property
+ def dtype(self) -> _DType_co: ...
# Would create a dtype[np.void]
_VoidDTypeLike = Union[
diff --git a/numpy/typing/_shape.py b/numpy/typing/_shape.py
index 75698f3d3..c28859b19 100644
--- a/numpy/typing/_shape.py
+++ b/numpy/typing/_shape.py
@@ -1,14 +1,4 @@
-import sys
-from typing import Sequence, Tuple, Union, Any
-
-from . import _HAS_TYPING_EXTENSIONS
-
-if sys.version_info >= (3, 8):
- from typing import SupportsIndex
-elif _HAS_TYPING_EXTENSIONS:
- from typing_extensions import SupportsIndex
-else:
- SupportsIndex = Any
+from typing import Sequence, Tuple, Union, SupportsIndex
_Shape = Tuple[int, ...]
diff --git a/numpy/typing/_ufunc.pyi b/numpy/typing/_ufunc.pyi
index be1e654c2..37e6c008f 100644
--- a/numpy/typing/_ufunc.pyi
+++ b/numpy/typing/_ufunc.pyi
@@ -14,6 +14,8 @@ from typing import (
overload,
Tuple,
TypeVar,
+ Literal,
+ SupportsIndex,
)
from numpy import ufunc, _CastingKind, _OrderKACF
@@ -24,8 +26,6 @@ from ._scalars import _ScalarLike_co
from ._array_like import ArrayLike, _ArrayLikeBool_co, _ArrayLikeInt_co
from ._dtype_like import DTypeLike
-from typing_extensions import Literal, SupportsIndex
-
_T = TypeVar("_T")
_2Tuple = Tuple[_T, _T]
_3Tuple = Tuple[_T, _T, _T]
diff --git a/numpy/typing/tests/data/reveal/arraypad.py b/numpy/typing/tests/data/reveal/arraypad.py
index ba5577ee0..03c03fb4e 100644
--- a/numpy/typing/tests/data/reveal/arraypad.py
+++ b/numpy/typing/tests/data/reveal/arraypad.py
@@ -1,5 +1,4 @@
-from typing import List, Any, Mapping, Tuple
-from typing_extensions import SupportsIndex
+from typing import List, Any, Mapping, Tuple, SupportsIndex
import numpy as np
import numpy.typing as npt
diff --git a/numpy/typing/tests/test_runtime.py b/numpy/typing/tests/test_runtime.py
index e82b08ac2..151b06bed 100644
--- a/numpy/typing/tests/test_runtime.py
+++ b/numpy/typing/tests/test_runtime.py
@@ -3,18 +3,12 @@
from __future__ import annotations
import sys
-from typing import get_type_hints, Union, Tuple, NamedTuple
+from typing import get_type_hints, Union, Tuple, NamedTuple, get_args, get_origin
import pytest
import numpy as np
import numpy.typing as npt
-try:
- from typing_extensions import get_args, get_origin
- SKIP = False
-except ImportError:
- SKIP = True
-
class TypeTup(NamedTuple):
typ: type
@@ -36,7 +30,6 @@ TYPES = {
@pytest.mark.parametrize("name,tup", TYPES.items(), ids=TYPES.keys())
-@pytest.mark.skipif(SKIP, reason="requires typing-extensions")
def test_get_args(name: type, tup: TypeTup) -> None:
"""Test `typing.get_args`."""
typ, ref = tup.typ, tup.args
@@ -45,7 +38,6 @@ def test_get_args(name: type, tup: TypeTup) -> None:
@pytest.mark.parametrize("name,tup", TYPES.items(), ids=TYPES.keys())
-@pytest.mark.skipif(SKIP, reason="requires typing-extensions")
def test_get_origin(name: type, tup: TypeTup) -> None:
"""Test `typing.get_origin`."""
typ, ref = tup.typ, tup.origin
diff --git a/numpy/typing/tests/test_typing_extensions.py b/numpy/typing/tests/test_typing_extensions.py
deleted file mode 100644
index f59f222fb..000000000
--- a/numpy/typing/tests/test_typing_extensions.py
+++ /dev/null
@@ -1,35 +0,0 @@
-"""Tests for the optional typing-extensions dependency."""
-
-import sys
-import textwrap
-import subprocess
-
-CODE = textwrap.dedent(r"""
- import sys
- import importlib
-
- assert "typing_extensions" not in sys.modules
- assert "numpy.typing" not in sys.modules
-
- # Importing `typing_extensions` will now raise an `ImportError`
- sys.modules["typing_extensions"] = None
- assert importlib.import_module("numpy.typing")
-""")
-
-
-def test_no_typing_extensions() -> None:
- """Import `numpy.typing` in the absence of typing-extensions.
-
- Notes
- -----
- Ideally, we'd just run the normal typing tests in an environment where
- typing-extensions is not installed, but unfortunatelly this is currently
- impossible as it is an indirect hard dependency of pytest.
-
- """
- p = subprocess.run([sys.executable, '-c', CODE], capture_output=True)
- if p.returncode:
- raise AssertionError(
- f"Non-zero return code: {p.returncode!r}\n\n{p.stderr.decode()}"
- )
-