8000 Merge pull request #28112 from charris/backport-28108 · numpy/numpy@7d9dcd6 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7d9dcd6

Browse files
authored
Merge pull request #28112 from charris/backport-28108
TYP: Better ``ndarray`` binop return types for ``float64`` & ``complex128"
2 parents 6e042dd + 0a62d0f commit 7d9dcd6

File tree

9 files changed

+455
-231
lines changed

9 files changed

+455
-231
lines changed

environment.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ dependencies:
2525
- hypothesis
2626
# For type annotations
2727
- typing_extensions>=4.2.0 # needed for python < 3.10
28-
- mypy=1.13.0
28+
- mypy=1.14.1
2929
- orjson # makes mypy faster
3030
# For building docs
3131
- sphinx>=4.5.0

numpy/__init__.pyi

Lines changed: 358 additions & 133 deletions
Large diffs are not rendered by default.

numpy/_typing/__init__.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,15 +121,14 @@
121121
NDArray as NDArray,
122122
ArrayLike as ArrayLike,
123123
_ArrayLike as _ArrayLike,
124-
_FiniteNestedSequence as _FiniteNestedSequence,
125-
_SupportsArray as _SupportsArray,
126-
_SupportsArrayFunc as _SupportsArrayFunc,
127124
_ArrayLikeInt as _ArrayLikeInt,
128125
_ArrayLikeBool_co as _ArrayLikeBool_co,
129126
_ArrayLikeUInt_co as _ArrayLikeUInt_co,
130127
_ArrayLikeInt_co as _ArrayLikeInt_co,
131128
_ArrayLikeFloat_co as _ArrayLikeFloat_co,
129+
_ArrayLikeFloat64_co as _ArrayLikeFloat64_co,
132130
_ArrayLikeComplex_co as _ArrayLikeComplex_co,
131+
_ArrayLikeComplex128_co as _ArrayLikeComplex128_co,
133132
_ArrayLikeNumber_co as _ArrayLikeNumber_co,
134133
_ArrayLikeTD64_co as _ArrayLikeTD64_co,
135134
_ArrayLikeDT64_co as _ArrayLikeDT64_co,
@@ -140,6 +139,9 @@
140139
_ArrayLikeString_co as _ArrayLikeString_co,
141140
_ArrayLikeAnyString_co as _ArrayLikeAnyString_co,
142141
_ArrayLikeUnknown as _ArrayLikeUnknown,
142+
_FiniteNestedSequence as _FiniteNestedSequence,
143+
_SupportsArray as _SupportsArray,
144+
_SupportsArrayFunc as _SupportsArrayFunc,
143145
_UnknownType as _UnknownType,
144146
)
145147

numpy/_typing/_array_like.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
str_,
2222
bytes_,
2323
)
24+
from ._nbit_base import _32Bit, _64Bit
2425
from ._nested_sequence import _NestedSequence
2526
from ._shape import _Shape
2627

@@ -87,17 +88,16 @@ def __array_function__(
8788
)
8889

8990
if sys.version_info >= (3, 12):
90-
from collections.abc import Buffer
91-
92-
ArrayLike: TypeAlias = Buffer | _DualArrayLike[
93-
dtype[Any],
94-
bool | int | float | complex | str | bytes,
95-
]
91+
from collections.abc import Buffer as _Buffer
9692
else:
97-
ArrayLike: TypeAlias = _DualArrayLike[
98-
dtype[Any],
99-
bool | int | float | complex | str | bytes,
100-
]
93+
@runtime_checkable
94+
class _Buffer(Protocol):
95+
def __buffer__(self, flags: int, /) -> memoryview: ...
96+
97+
ArrayLike: TypeAlias = _Buffer | _DualArrayLike[
98+
dtype[Any],
99+
bool | int | float | complex | str | bytes,
100+
]
101101

102102
# `ArrayLike<X>_co`: array-like objects that can be coerced into `X`
103103
# given the casting rules `same_kind`
@@ -165,6 +165,11 @@ def __array_function__(
165165
_ArrayLikeString_co
166166
)
167167

168+
__Float64_co: TypeAlias = np.floating[_64Bit] | np.float32 | np.float16 | np.integer | np.bool
169+
__Complex128_co: TypeAlias = np.number[_64Bit] | np.number[_32Bit] | np.float16 | np.integer | np.bool
170+
_ArrayLikeFloat64_co: TypeAlias = _DualArrayLike[dtype[__Float64_co], float | int]
171+
_ArrayLikeComplex128_co: TypeAlias = _DualArrayLike[dtype[__Complex128_co], complex | float | int]
172+
168173
# NOTE: This includes `builtins.bool`, but not `numpy.bool`.
169174
_ArrayLikeInt: TypeAlias = _DualArrayLike[
170175
dtype[integer[Any]],

0 commit comments

Comments
 (0)
0