You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
595 lines
7.3 KiB
595 lines
7.3 KiB
1 year ago
|
from __future__ import annotations
|
||
|
|
||
|
from typing import Any
|
||
|
import numpy as np
|
||
|
import pytest
|
||
|
|
||
|
c16 = np.complex128(1)
|
||
|
f8 = np.float64(1)
|
||
|
i8 = np.int64(1)
|
||
|
u8 = np.uint64(1)
|
||
|
|
||
|
c8 = np.complex64(1)
|
||
|
f4 = np.float32(1)
|
||
|
i4 = np.int32(1)
|
||
|
u4 = np.uint32(1)
|
||
|
|
||
|
dt = np.datetime64(1, "D")
|
||
|
td = np.timedelta64(1, "D")
|
||
|
|
||
|
b_ = np.bool_(1)
|
||
|
|
||
|
b = bool(1)
|
||
|
c = complex(1)
|
||
|
f = float(1)
|
||
|
i = int(1)
|
||
|
|
||
|
|
||
|
class Object:
|
||
|
def __array__(self) -> 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
|
||
|
|
||
|
def __floordiv__(self, value: Any) -> Object:
|
||
|
return self
|
||
|
|
||
|
def __rfloordiv__(self, value: Any) -> Object:
|
||
|
return self
|
||
|
|
||
|
def __mul__(self, value: Any) -> Object:
|
||
|
return self
|
||
|
|
||
|
def __rmul__(self, value: Any) -> Object:
|
||
|
return self
|
||
|
|
||
|
def __pow__(self, value: Any) -> Object:
|
||
|
return self
|
||
|
|
||
|
def __rpow__(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
|
||
|
|
||
|
AR_u += AR_b
|
||
|
AR_u += AR_u
|
||
|
AR_u += 1 # Allowed during runtime as long as the object is 0D and >=0
|
||
|
|
||
|
# Array floor division
|
||
|
|
||
|
AR_b // AR_LIKE_b
|
||
|
AR_b // AR_LIKE_u
|
||
|
AR_b // AR_LIKE_i
|
||
|
AR_b // AR_LIKE_f
|
||
|
AR_b // AR_LIKE_O
|
||
|
|
||
|
AR_LIKE_b // AR_b
|
||
|
AR_LIKE_u // AR_b
|
||
|
AR_LIKE_i // AR_b
|
||
|
AR_LIKE_f // 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_O
|
||
|
|
||
|
AR_LIKE_b // AR_u
|
||
|
AR_LIKE_u // AR_u
|
||
|
AR_LIKE_i // AR_u
|
||
|
AR_LIKE_f // 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_O
|
||
|
|
||
|
AR_LIKE_b // AR_i
|
||
|
AR_LIKE_u // AR_i
|
||
|
AR_LIKE_i // AR_i
|
||
|
AR_LIKE_f // 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_O
|
||
|
|
||
|
AR_LIKE_b // AR_f
|
||
|
AR_LIKE_u // AR_f
|
||
|
AR_LIKE_i // AR_f
|
||
|
AR_LIKE_f // AR_f
|
||
|
AR_LIKE_m // AR_f
|
||
|
AR_LIKE_O // AR_f
|
||
|
|
||
|
AR_m // AR_LIKE_u
|
||
|
AR_m // AR_LIKE_i
|
||
|
AR_m // AR_LIKE_f
|
||
|
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_O
|
||
|
|
||
|
AR_LIKE_b // AR_O
|
||
|
AR_LIKE_u // AR_O
|
||
|
AR_LIKE_i // AR_O
|
||
|
AR_LIKE_f // AR_O
|
||
|
AR_LIKE_O // AR_O
|
||
|
|
||
|
# Inplace multiplication
|
||
|
|
||
|
AR_b *= AR_LIKE_b
|
||
|
|
||
|
AR_u *= AR_LIKE_b
|
||
|
AR_u *= AR_LIKE_u
|
||
|
|
||
|
AR_i *= AR_LIKE_b
|
||
|
AR_i *= AR_LIKE_u
|
||
|
AR_i *= AR_LIKE_i
|
||
|
|
||
|
AR_f *= AR_LIKE_b
|
||
|
AR_f *= AR_LIKE_u
|
||
|
AR_f *= AR_LIKE_i
|
||
|
AR_f *= AR_LIKE_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_m *= AR_LIKE_b
|
||
|
AR_m *= AR_LIKE_u
|
||
|
AR_m *= AR_LIKE_i
|
||
|
AR_m *= AR_LIKE_f
|
||
|
|
||
|
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
|
||
|
|
||
|
# Inplace power
|
||
|
|
||
|
AR_u **= AR_LIKE_b
|
||
|
AR_u **= AR_LIKE_u
|
||
|
|
||
|
AR_i **= AR_LIKE_b
|
||
|
AR_i **= AR_LIKE_u
|
||
|
AR_i **= AR_LIKE_i
|
||
|
|
||
|
AR_f **= AR_LIKE_b
|
||
|
AR_f **= AR_LIKE_u
|
||
|
AR_f **= AR_LIKE_i
|
||
|
AR_f **= AR_LIKE_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_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
|
||
|
|
||
|
# unary ops
|
||
|
|
||
|
-c16
|
||
|
-c8
|
||
|
-f8
|
||
|
-f4
|
||
|
-i8
|
||
|
-i4
|
||
|
with pytest.warns(RuntimeWarning):
|
||
|
-u8
|
||
|
-u4
|
||
|
-td
|
||
|
-AR_f
|
||
|
|
||
|
+c16
|
||
|
+c8
|
||
|
+f8
|
||
|
+f4
|
||
|
+i8
|
||
|
+i4
|
||
|
+u8
|
||
|
+u4
|
||
|
+td
|
||
|
+AR_f
|
||
|
|
||
|
abs(c16)
|
||
|
abs(c8)
|
||
|
abs(f8)
|
||
|
abs(f4)
|
||
|
abs(i8)
|
||
|
abs(i4)
|
||
|
abs(u8)
|
||
|
abs(u4)
|
||
|
abs(td)
|
||
|
abs(b_)
|
||
|
abs(AR_f)
|
||
|
|
||
|
# Time structures
|
||
|
|
||
|
dt + td
|
||
|
dt + i
|
||
|
dt + i4
|
||
|
dt + i8
|
||
|
dt - dt
|
||
|
dt - i
|
||
|
dt - i4
|
||
|
dt - i8
|
||
|
|
||
|
td + td
|
||
|
td + i
|
||
|
td + i4
|
||
|
td + i8
|
||
|
td - td
|
||
|
td - i
|
||
|
td - i4
|
||
|
td - i8
|
||
|
td / f
|
||
|
td / f4
|
||
|
td / f8
|
||
|
td / td
|
||
|
td // td
|
||
|
td % td
|
||
|
|
||
|
|
||
|
# boolean
|
||
|
|
||
|
b_ / b
|
||
|
b_ / b_
|
||
|
b_ / i
|
||
|
b_ / i8
|
||
|
b_ / i4
|
||
|
b_ / u8
|
||
|
b_ / u4
|
||
|
b_ / f
|
||
|
b_ / f8
|
||
|
b_ / f4
|
||
|
b_ / c
|
||
|
b_ / c16
|
||
|
b_ / c8
|
||
|
|
||
|
b / b_
|
||
|
b_ / b_
|
||
|
i / b_
|
||
|
i8 / b_
|
||
|
i4 / b_
|
||
|
u8 / b_
|
||
|
u4 / b_
|
||
|
f / b_
|
||
|
f8 / b_
|
||
|
f4 / b_
|
||
|
c / b_
|
||
|
c16 / b_
|
||
|
c8 / b_
|
||
|
|
||
|
# Complex
|
||
|
|
||
|
c16 + c16
|
||
|
c16 + f8
|
||
|
c16 + i8
|
||
|
c16 + c8
|
||
|
c16 + f4
|
||
|
c16 + i4
|
||
|
c16 + b_
|
||
|
c16 + b
|
||
|
c16 + c
|
||
|
c16 + f
|
||
|
c16 + i
|
||
|
c16 + AR_f
|
||
|
|
||
|
c16 + c16
|
||
|
f8 + c16
|
||
|
i8 + c16
|
||
|
c8 + c16
|
||
|
f4 + c16
|
||
|
i4 + c16
|
||
|
b_ + c16
|
||
|
b + c16
|
||
|
c + c16
|
||
|
f + c16
|
||
|
i + c16
|
||
|
AR_f + c16
|
||
|
|
||
|
c8 + c16
|
||
|
c8 + f8
|
||
|
c8 + i8
|
||
|
c8 + c8
|
||
|
c8 + f4
|
||
|
c8 + i4
|
||
|
c8 + b_
|
||
|
c8 + b
|
||
|
c8 + c
|
||
|
c8 + f
|
||
|
c8 + i
|
||
|
c8 + AR_f
|
||
|
|
||
|
c16 + c8
|
||
|
f8 + c8
|
||
|
i8 + c8
|
||
|
c8 + c8
|
||
|
f4 + c8
|
||
|
i4 + c8
|
||
|
b_ + c8
|
||
|
b + c8
|
||
|
c + c8
|
||
|
f + c8
|
||
|
i + c8
|
||
|
AR_f + c8
|
||
|
|
||
|
# Float
|
||
|
|
||
|
f8 + f8
|
||
|
f8 + i8
|
||
|
f8 + f4
|
||
|
f8 + i4
|
||
|
f8 + b_
|
||
|
f8 + b
|
||
|
f8 + c
|
||
|
f8 + f
|
||
|
f8 + i
|
||
|
f8 + AR_f
|
||
|
|
||
|
f8 + f8
|
||
|
i8 + f8
|
||
|
f4 + f8
|
||
|
i4 + f8
|
||
|
b_ + f8
|
||
|
b + f8
|
||
|
c + f8
|
||
|
f + f8
|
||
|
i + f8
|
||
|
AR_f + f8
|
||
|
|
||
|
f4 + f8
|
||
|
f4 + i8
|
||
|
f4 + f4
|
||
|
f4 + i4
|
||
|
f4 + b_
|
||
|
f4 + b
|
||
|
f4 + c
|
||
|
f4 + f
|
||
|
f4 + i
|
||
|
f4 + AR_f
|
||
|
|
||
|
f8 + f4
|
||
|
i8 + f4
|
||
|
f4 + f4
|
||
|
i4 + f4
|
||
|
b_ + f4
|
||
|
b + f4
|
||
|
c + f4
|
||
|
f + f4
|
||
|
i + f4
|
||
|
AR_f + f4
|
||
|
|
||
|
# Int
|
||
|
|
||
|
i8 + i8
|
||
|
i8 + u8
|
||
|
i8 + i4
|
||
|
i8 + u4
|
||
|
i8 + b_
|
||
|
i8 + b
|
||
|
i8 + c
|
||
|
i8 + f
|
||
|
i8 + i
|
||
|
i8 + AR_f
|
||
|
|
||
|
u8 + u8
|
||
|
u8 + i4
|
||
|
u8 + u4
|
||
|
u8 + b_
|
||
|
u8 + b
|
||
|
u8 + c
|
||
|
u8 + f
|
||
|
u8 + i
|
||
|
u8 + AR_f
|
||
|
|
||
|
i8 + i8
|
||
|
u8 + i8
|
||
|
i4 + i8
|
||
|
u4 + i8
|
||
|
b_ + i8
|
||
|
b + i8
|
||
|
c + i8
|
||
|
f + i8
|
||
|
i + i8
|
||
|
AR_f + i8
|
||
|
|
||
|
u8 + u8
|
||
|
i4 + u8
|
||
|
u4 + u8
|
||
|
b_ + u8
|
||
|
b + u8
|
||
|
c + u8
|
||
|
f + u8
|
||
|
i + u8
|
||
|
AR_f + u8
|
||
|
|
||
|
i4 + i8
|
||
|
i4 + i4
|
||
|
i4 + i
|
||
|
i4 + b_
|
||
|
i4 + b
|
||
|
i4 + AR_f
|
||
|
|
||
|
u4 + i8
|
||
|
u4 + i4
|
||
|
u4 + u8
|
||
|
u4 + u4
|
||
|
u4 + i
|
||
|
u4 + b_
|
||
|
u4 + b
|
||
|
u4 + AR_f
|
||
|
|
||
|
i8 + i4
|
||
|
i4 + i4
|
||
|
i + i4
|
||
|
b_ + i4
|
||
|
b + i4
|
||
|
AR_f + i4
|
||
|
|
||
|
i8 + u4
|
||
|
i4 + u4
|
||
|
u8 + u4
|
||
|
u4 + u4
|
||
|
b_ + u4
|
||
|
b + u4
|
||
|
i + u4
|
||
|
AR_f + u4
|