codekingpro/portable-devtools
114k
1import datetime as dt
2from typing import Literal as L, assert_type
3
4import numpy as np
5import numpy.typing as npt
6
7f8: np.float64
8i8: np.int64
9u8: np.uint64
10
11f4: np.float32
12i4: np.int32
13u4: np.uint32
14
15m: np.timedelta64
16m_nat: np.timedelta64[None]
17m_int0: np.timedelta64[L[0]]
18m_int: np.timedelta64[int]
19m_td: np.timedelta64[dt.timedelta]
20
21b_: np.bool
22
23b: bool
24i: int
25f: float
26
27AR_b: npt.NDArray[np.bool]
28AR_m: npt.NDArray[np.timedelta64]
29
30# Time structures
31
32assert_type(m % m, np.timedelta64)
33assert_type(m % m_nat, np.timedelta64[None])
34assert_type(m % m_int0, np.timedelta64[None])
35assert_type(m % m_int, np.timedelta64[int | None])
36assert_type(m_nat % m, np.timedelta64[None])
37assert_type(m_int % m_nat, np.timedelta64[None])
38assert_type(m_int % m_int0, np.timedelta64[None])
39assert_type(m_int % m_int, np.timedelta64[int | None])
40assert_type(m_int % m_td, np.timedelta64[int | None])
41assert_type(m_td % m_nat, np.timedelta64[None])
42assert_type(m_td % m_int0, np.timedelta64[None])
43assert_type(m_td % m_int, np.timedelta64[int | None])
44assert_type(m_td % m_td, np.timedelta64[dt.timedelta | None])
45
46assert_type(AR_m % m, npt.NDArray[np.timedelta64])
47assert_type(m % AR_m, npt.NDArray[np.timedelta64])
48
49assert_type(divmod(m, m), tuple[np.int64, np.timedelta64])
50assert_type(divmod(m, m_nat), tuple[np.int64, np.timedelta64[None]])
51assert_type(divmod(m, m_int0), tuple[np.int64, np.timedelta64[None]])
52# workarounds for https://github.com/microsoft/pyright/issues/9663
53assert_type(m.__divmod__(m_int), tuple[np.int64, np.timedelta64[int | None]])
54assert_type(divmod(m_nat, m), tuple[np.int64, np.timedelta64[None]])
55assert_type(divmod(m_int, m_nat), tuple[np.int64, np.timedelta64[None]])
56assert_type(divmod(m_int, m_int0), tuple[np.int64, np.timedelta64[None]])
57assert_type(divmod(m_int, m_int), tuple[np.int64, np.timedelta64[int | None]])
58assert_type(divmod(m_int, m_td), tuple[np.int64, np.timedelta64[int | None]])
59assert_type(divmod(m_td, m_nat), tuple[np.int64, np.timedelta64[None]])
60assert_type(divmod(m_td, m_int0), tuple[np.int64, np.timedelta64[None]])
61assert_type(divmod(m_td, m_int), tuple[np.int64, np.timedelta64[int | None]])
62assert_type(divmod(m_td, m_td), tuple[np.int64, np.timedelta64[dt.timedelta | None]])
63
64assert_type(divmod(AR_m, m), tuple[npt.NDArray[np.int64], npt.NDArray[np.timedelta64]])
65assert_type(divmod(m, AR_m), tuple[npt.NDArray[np.int64], npt.NDArray[np.timedelta64]])
66
67# Bool
68
69assert_type(b_ % b, np.int8)
70assert_type(b_ % i, np.int_)
71assert_type(b_ % f, np.float64)
72assert_type(b_ % b_, np.int8)
73assert_type(b_ % i8, np.int64)
74assert_type(b_ % u8, np.uint64)
75assert_type(b_ % f8, np.float64)
76assert_type(b_ % AR_b, npt.NDArray[np.int8])
77
78assert_type(divmod(b_, b), tuple[np.int8, np.int8])
79assert_type(divmod(b_, b_), tuple[np.int8, np.int8])
80# workarounds for https://github.com/microsoft/pyright/issues/9663
81assert_type(b_.__divmod__(i), tuple[np.int_, np.int_])
82assert_type(b_.__divmod__(f), tuple[np.float64, np.float64])
83assert_type(b_.__divmod__(i8), tuple[np.int64, np.int64])
84assert_type(b_.__divmod__(u8), tuple[np.uint64, np.uint64])
85assert_type(divmod(b_, f8), tuple[np.float64, np.float64])
86assert_type(divmod(b_, AR_b), tuple[npt.NDArray[np.int8], npt.NDArray[np.int8]])
87
88assert_type(b % b_, np.int8)
89assert_type(i % b_, np.int_)
90assert_type(f % b_, np.float64)
91assert_type(b_ % b_, np.int8)
92assert_type(i8 % b_, np.int64)
93assert_type(u8 % b_, np.uint64)
94assert_type(f8 % b_, np.float64)
95assert_type(AR_b % b_, npt.NDArray[np.int8])
96
97assert_type(divmod(b, b_), tuple[np.int8, np.int8])
98assert_type(divmod(i, b_), tuple[np.int_, np.int_])
99assert_type(divmod(f, b_), tuple[np.float64, np.float64])
100assert_type(divmod(b_, b_), tuple[np.int8, np.int8])
101assert_type(divmod(i8, b_), tuple[np.int64, np.int64])
102assert_type(divmod(u8, b_), tuple[np.uint64, np.uint64])
103assert_type(divmod(f8, b_), tuple[np.float64, np.float64])
104assert_type(divmod(AR_b, b_), tuple[npt.NDArray[np.int8], npt.NDArray[np.int8]])
105
106# int
107
108assert_type(i8 % b, np.int64)
109assert_type(i8 % i8, np.int64)
110assert_type(i8 % f, np.float64)
111assert_type(i8 % f8, np.float64)
112assert_type(i4 % i8, np.signedinteger)
113assert_type(i4 % f8, np.float64)
114assert_type(i4 % i4, np.int32)
115assert_type(i4 % f4, np.floating)
116assert_type(i8 % AR_b, npt.NDArray[np.int64])
117
118assert_type(divmod(i8, b), tuple[np.int64, np.int64])
119assert_type(divmod(i8, i4), tuple[np.signedinteger, np.signedinteger])
120assert_type(divmod(i8, i8), tuple[np.int64, np.int64])
121# workarounds for https://github.com/microsoft/pyright/issues/9663
122assert_type(i8.__divmod__(f), tuple[np.float64, np.float64])
123assert_type(i8.__divmod__(f8), tuple[np.float64, np.float64])
124assert_type(divmod(i8, f4), tuple[np.floating, np.floating])
125assert_type(divmod(i4, i4), tuple[np.int32, np.int32])
126assert_type(divmod(i4, f4), tuple[np.floating, np.floating])
127assert_type(divmod(i8, AR_b), tuple[npt.NDArray[np.int64], npt.NDArray[np.int64]])
128
129assert_type(b % i8, np.int64)
130assert_type(f % i8, np.float64)
131assert_type(i8 % i8, np.int64)
132assert_type(f8 % i8, np.float64)
133assert_type(i8 % i4, np.signedinteger)
134assert_type(f8 % i4, np.float64)
135assert_type(i4 % i4, np.int32)
136assert_type(f4 % i4, np.floating)
137assert_type(AR_b % i8, npt.NDArray[np.int64])
138
139assert_type(divmod(b, i8), tuple[np.int64, np.int64])
140assert_type(divmod(f, i8), tuple[np.float64, np.float64])
141assert_type(divmod(i8, i8), tuple[np.int64, np.int64])
142assert_type(divmod(f8, i8), tuple[np.float64, np.float64])
143assert_type(divmod(i4, i8), tuple[np.signedinteger, np.signedinteger])
144assert_type(divmod(i4, i4), tuple[np.int32, np.int32])
145# workarounds for https://github.com/microsoft/pyright/issues/9663
146assert_type(f4.__divmod__(i8), tuple[np.floating, np.floating])
147assert_type(f4.__divmod__(i4), tuple[np.floating, np.floating])
148assert_type(AR_b.__divmod__(i8), tuple[npt.NDArray[np.int64], npt.NDArray[np.int64]])
149
150# float
151
152assert_type(f8 % b, np.float64)
153assert_type(f8 % f, np.float64)
154assert_type(i8 % f4, np.floating)
155assert_type(f4 % f4, np.float32)
156assert_type(f8 % AR_b, npt.NDArray[np.float64])
157
158assert_type(divmod(f8, b), tuple[np.float64, np.float64])
159assert_type(divmod(f8, f), tuple[np.float64, np.float64])
160assert_type(divmod(f8, f8), tuple[np.float64, np.float64])
161assert_type(divmod(f8, f4), tuple[np.float64, np.float64])
162assert_type(divmod(f4, f4), tuple[np.float32, np.float32])
163assert_type(divmod(f8, AR_b), tuple[npt.NDArray[np.float64], npt.NDArray[np.float64]])
164
165assert_type(b % f8, np.float64)
166assert_type(f % f8, np.float64) # pyright: ignore[reportAssertTypeFailure] # pyright incorrectly infers `builtins.float`
167assert_type(f8 % f8, np.float64)
168assert_type(f8 % f8, np.float64)
169assert_type(f4 % f4, np.float32)
170assert_type(AR_b % f8, npt.NDArray[np.float64])
171
172assert_type(divmod(b, f8), tuple[np.float64, np.float64])
173assert_type(divmod(f8, f8), tuple[np.float64, np.float64])
174assert_type(divmod(f4, f4), tuple[np.float32, np.float32])
175# workarounds for https://github.com/microsoft/pyright/issues/9663
176assert_type(f8.__rdivmod__(f), tuple[np.float64, np.float64])
177assert_type(f8.__rdivmod__(f4), tuple[np.float64, np.float64])
178assert_type(AR_b.__divmod__(f8), tuple[npt.NDArray[np.float64], npt.NDArray[np.float64]])
179 