8000 ENH: Add dtype-support to the ufunc-based `ndarray` magic methods 2/4 by BvB93 · Pull Request #18228 · numpy/numpy · GitHub
[go: up one dir, main page]

Skip to content

ENH: Add dtype-support to the ufunc-based ndarray magic methods 2/4 #18228

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 1, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
TST: Added new tests for ndarray arithmetic
  • Loading branch information
Bas van Beek committed Jan 25, 2021
commit 896de10ff81e2099f881b2b274b6c3506f748322
30 changes: 30 additions & 0 deletions numpy/typing/tests/data/fail/arithmetic.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,39 @@
from typing import List, Any
import numpy as np

b_ = np.bool_()
dt = np.datetime64(0, "D")
td = np.timedelta64(0, "D")

AR_b: np.ndarray[Any, np.dtype[np.bool_]]
AR_f: np.ndarray[Any, np.dtype[np.float64]]
AR_c: np.ndarray[Any, np.dtype[np.complex128]]
AR_m: np.ndarray[Any, np.dtype[np.timedelta64]]
AR_M: np.ndarray[Any, np.dtype[np.datetime64]]

AR_LIKE_b: List[bool]
AR_LIKE_f: List[float]
AR_LIKE_c: List[complex]
AR_LIKE_m: List[np.timedelta64]
AR_LIKE_M: List[np.datetime64]

# NOTE: mypys `NoReturn` errors are, unfortunately, not that great
_1 = AR_b - AR_LIKE_b # E: Need type annotation
_2 = AR_LIKE_b - AR_b # E: Need type annotation

AR_f - AR_LIKE_m # E: Unsupported operand types
AR_f - AR_LIKE_M # E: Unsupported operand types
AR_c - AR_LIKE_m # E: Unsupported operand types
AR_c - AR_LIKE_M # E: Unsupported operand types

AR_m - AR_LIKE_f # E: Unsupported operand types
AR_M - AR_LIKE_f # E: Unsupported operand types
AR_m - AR_LIKE_c # E: Unsupported operand types
AR_M - AR_LIKE_c # E: Unsupported operand types

AR_m - AR_LIKE_M # E: Unsupported operand types
AR_LIKE_m - AR_M # E: Unsupported operand types

b_ - b_ # E: No overload variant

dt + dt # E: Unsupported operand types
Expand Down
186 changes: 165 additions & 21 deletions numpy/typing/tests/data/pass/arithmetic.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
from __future__ import annotations

from typing import Any
import numpy as np

c16 = np.complex128(1)
Expand All @@ -20,8 +23,149 @@
f = float(1)
i = int(1)

AR = np.ones(1, dtype=np.float64)
AR.setflags(write=False)

class Object:
def __array__(self, dtype: None = None) -> np.ndarray[Any, np.dtype[np.object_]]:
ret = np.empty((), dtype=object)
ret[()] = self
return ret

def __sub__(self, value: Any) -> Object:
return self

def __rsub__(self, value: Any) -> Object:
return self


AR_b: np.ndarray[Any, np.dtype[np.bool_]] = np.array([True])
AR_u: np.ndarray[Any, np.dtype[np.uint32]] = np.array([1], dtype=np.uint32)
AR_i: np.ndarray[Any, np.dtype[np.int64]] = np.array([1])
AR_f: np.ndarray[Any, np.dtype[np.float64]] = np.array([1.0])
AR_c: np.ndarray[Any, np.dtype[np.complex128]] = np.array([1j])
AR_m: np.ndarray[Any, np.dtype[np.timedelta64]] = np.array([np.timedelta64(1, "D")])
AR_M: np.ndarray[Any, np.dtype[np.datetime64]] = np.array([np.datetime64(1, "D")])
AR_O: np.ndarray[Any, np.dtype[np.object_]] = np.array([Object()])

AR_LIKE_b = [True]
AR_LIKE_u = [np.uint32(1)]
AR_LIKE_i = [1]
AR_LIKE_f = [1.0]
AR_LIKE_c = [1j]
AR_LIKE_m = [np.timedelta64(1, "D")]
AR_LIKE_M = [np.datetime64(1, "D")]
AR_LIKE_O = [Object()]

# Array subtractions

AR_b - AR_LIKE_u
AR_b - AR_LIKE_i
AR_b - AR_LIKE_f
AR_b - AR_LIKE_c
AR_b - AR_LIKE_m
AR_b - AR_LIKE_O

AR_LIKE_u - AR_b
AR_LIKE_i - AR_b
AR_LIKE_f - AR_b
AR_LIKE_c - AR_b
AR_LIKE_m - AR_b
AR_LIKE_M - AR_b
AR_LIKE_O - AR_b

AR_u - AR_LIKE_b
AR_u - AR_LIKE_u
AR_u - AR_LIKE_i
AR_u - AR_LIKE_f
AR_u - AR_LIKE_c
AR_u - AR_LIKE_m
AR_u - AR_LIKE_O

AR_LIKE_b - AR_u
AR_LIKE_u - AR_u
AR_LIKE_i - AR_u
AR_LIKE_f - AR_u
AR_LIKE_c - AR_u
AR_LIKE_m - AR_u
AR_LIKE_M - AR_u
AR_LIKE_O - AR_u

AR_i - AR_LIKE_b
AR_i - AR_LIKE_u
AR_i - AR_LIKE_i
AR_i - AR_LIKE_f
AR_i - AR_LIKE_c
AR_i - AR_LIKE_m
AR_i - AR_LIKE_O

AR_LIKE_b - AR_i
AR_LIKE_u - AR_i
AR_LIKE_i - AR_i
AR_LIKE_f - AR_i
AR_LIKE_c - AR_i
AR_LIKE_m - AR_i
AR_LIKE_M - AR_i
AR_LIKE_O - AR_i

AR_f - AR_LIKE_b
AR_f - AR_LIKE_u
AR_f - AR_LIKE_i
AR_f - AR_LIKE_f
AR_f - AR_LIKE_c
AR_f - AR_LIKE_O

AR_LIKE_b - AR_f
AR_LIKE_u - AR_f
AR_LIKE_i - AR_f
AR_LIKE_f - AR_f
AR_LIKE_c - AR_f
AR_LIKE_O - AR_f

AR_c - AR_LIKE_b
AR_c - AR_LIKE_u
AR_c - AR_LIKE_i
AR_c - AR_LIKE_f
AR_c - AR_LIKE_c
AR_c - AR_LIKE_O

AR_LIKE_b - AR_c
AR_LIKE_u - AR_c
AR_LIKE_i - AR_c
AR_LIKE_f - AR_c
AR_LIKE_c - AR_c
AR_LIKE_O - AR_c

AR_m - AR_LIKE_b
AR_m - AR_LIKE_u
AR_m - AR_LIKE_i
AR_m - AR_LIKE_m

AR_LIKE_b - AR_m
AR_LIKE_u - AR_m
AR_LIKE_i - AR_m
AR_LIKE_m - AR_m
AR_LIKE_M - AR_m

AR_M - AR_LIKE_b
AR_M - AR_LIKE_u
AR_M - AR_LIKE_i
AR_M - AR_LIKE_m
AR_M - AR_LIKE_M

AR_LIKE_M - AR_M

AR_O - AR_LIKE_b
AR_O - AR_LIKE_u
AR_O - AR_LIKE_i
AR_O - AR_LIKE_f
AR_O - AR_LIKE_c
AR_O - AR_LIKE_O

AR_LIKE_b - AR_O
AR_LIKE_u - AR_O
AR_LIKE_i - AR_O
AR_LIKE_f - AR_O
AR_LIKE_c - AR_O
AR_LIKE_O - AR_O

# unary ops

Expand All @@ -34,7 +178,7 @@
-u8
-u4
-td
-AR
-AR_f

+c16
+c8
Expand All @@ -45,7 +189,7 @@
+u8
+u4
+td
+AR
+AR_f

abs(c16)
abs(c8)
Expand All @@ -57,7 +201,7 @@
abs(u4)
abs(td)
abs(b_)
abs(AR)
abs(AR_f)

# Time structures

Expand Down Expand Up @@ -129,7 +273,7 @@
c16 + c
c16 + f
c16 + i
c16 + AR
c16 + AR_f

c16 + c16
f8 + c16
Expand All @@ -142,7 +286,7 @@
c + c16
f + c16
i + c16
AR + c16
AR_f + c16

c8 + c16
c8 + f8
Expand All @@ -155,7 +299,7 @@
c8 + c
c8 + f
c8 + i
c8 + AR
c8 + AR_f

c16 + c8
f8 + c8
Expand All @@ -168,7 +312,7 @@
c + c8
f + c8
i + c8
AR + c8
AR_f + c8

# Float

Expand All @@ -181,7 +325,7 @@
f8 + c
f8 + f
f8 + i
f8 + AR
f8 + AR_f

f8 + f8
i8 + f8
Expand All @@ -192,7 +336,7 @@
c + f8
f + f8
i + f8
AR + f8
AR_f + f8

f4 + f8
f4 + i8
Expand All @@ -203,7 +347,7 @@
f4 + c
f4 + f
f4 + i
f4 + AR
f4 + AR_f

f8 + f4
i8 + f4
Expand All @@ -214,7 +358,7 @@
c + f4
f + f4
i + f4
AR + f4
AR_f + f4

# Int

Expand All @@ -227,7 +371,7 @@
i8 + c
i8 + f
i8 + i
i8 + AR
i8 + AR_f

u8 + u8
u8 + i4
Expand All @@ -237,7 +381,7 @@
u8 + c
u8 + f
u8 + i
u8 + AR
u8 + AR_f

i8 + i8
u8 + i8
Expand All @@ -248,7 +392,7 @@
c + i8
f + i8
i + i8
AR + i8
AR_f + i8

u8 + u8
i4 + u8
Expand All @@ -258,14 +402,14 @@
c + u8
f + u8
i + u8
AR + u8
AR_f + u8

i4 + i8
i4 + i4
i4 + i
i4 + b_
i4 + b
i4 + AR
i4 + AR_f

u4 + i8
u4 + i4
Expand All @@ -274,14 +418,14 @@
u4 + i
u4 + b_
u4 + b
u4 + AR
u4 + AR_f

i8 + i4
i4 + i4
i + i4
b_ + i4
b + i4
AR + i4
AR_f + i4

i8 + u4
i4 + u4
Expand All @@ -290,4 +434,4 @@
b_ + u4
b + u4
i + u4
AR + u4
AR_f + u4
Loading
0