Skip to content

Commit 8fd2b40

Browse files
authored
✅ Add type tests covering all relevant datetime64 and timedelta64 (#859)
* add type tests covering all relevant datetime64 and timedelta64 * tests: ignore assert_type errors * add comment for type ignores * Update src/numpy-stubs/@test/static/accept/temporal_scalar_ops.pyi
1 parent 38d822f commit 8fd2b40

1 file changed

Lines changed: 73 additions & 0 deletions

File tree

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# Type tests for datetime64/timedelta64 operations using representative subtype cases
2+
3+
import datetime as dt
4+
from typing import assert_type
5+
6+
import numpy as np
7+
8+
DT = np.datetime64
9+
TD = np.timedelta64
10+
11+
dt_default: DT
12+
dt_none: DT[None]
13+
dt_int: DT[int]
14+
dt_datetime: DT[dt.datetime]
15+
dt_date: DT[dt.date]
16+
17+
td_default: TD
18+
td_none: TD[None]
19+
td_int: TD[int]
20+
td_timedelta: TD[dt.timedelta]
21+
22+
assert_type(dt_default + td_default, DT)
23+
assert_type(dt_default + td_none, DT[None])
24+
# mypy incorrectly infers this as "timedelta64[Any]" but pyright behaves correctly
25+
assert_type(dt_none + td_default, DT[None]) # type: ignore[assert-type]
26+
assert_type(dt_int + td_int, DT[int])
27+
assert_type(dt_datetime + td_timedelta, DT[dt.datetime])
28+
assert_type(dt_date + td_timedelta, DT[dt.date])
29+
30+
assert_type(dt_default - td_default, DT)
31+
assert_type(dt_default - td_none, DT[None])
32+
assert_type(dt_none - td_default, DT[None]) # type: ignore[assert-type]
33+
assert_type(dt_int - td_int, DT[int])
34+
assert_type(dt_datetime - td_timedelta, DT[dt.datetime])
35+
assert_type(dt_date - td_timedelta, DT[dt.date])
36+
assert_type(dt_date - td_int, DT[dt.date | int])
37+
38+
assert_type(dt_default - dt_default, TD)
39+
assert_type(dt_none - dt_default, TD[None]) # type: ignore[assert-type]
40+
assert_type(dt_int - dt_int, TD[int])
41+
assert_type(dt_datetime - dt_datetime, TD[dt.timedelta])
42+
assert_type(dt_date - dt_date, TD[dt.timedelta])
43+
44+
assert_type(td_default + td_default, TD)
45+
assert_type(td_none + td_default, TD[None]) # type: ignore[assert-type]
46+
assert_type(td_int + td_int, TD[int])
47+
assert_type(td_timedelta + td_timedelta, TD[dt.timedelta])
48+
49+
assert_type(td_default - td_default, TD)
50+
assert_type(td_none - td_default, TD[None]) # type: ignore[assert-type]
51+
assert_type(td_int - td_int, TD[int])
52+
assert_type(td_timedelta - td_timedelta, TD[dt.timedelta])
53+
54+
assert_type(td_default / td_default, np.float64)
55+
assert_type(td_none / td_default, np.float64)
56+
57+
assert_type(td_default % td_default, TD)
58+
assert_type(td_none % td_default, TD[None]) # type: ignore[assert-type]
59+
60+
assert_type(td_default * 0, TD)
61+
assert_type(td_none * 0, TD[None])
62+
assert_type(td_int * 0, TD[int])
63+
assert_type(td_timedelta * 0, TD[dt.timedelta])
64+
65+
assert_type(0 * td_default, TD)
66+
assert_type(0 * td_none, TD[None])
67+
assert_type(0 * td_int, TD[int])
68+
assert_type(0 * td_timedelta, TD[dt.timedelta])
69+
70+
assert_type(td_default / 0, TD)
71+
assert_type(td_none / 0, TD[None])
72+
assert_type(td_int / 0, TD[int])
73+
assert_type(td_timedelta / 0, TD[dt.timedelta])

0 commit comments

Comments
 (0)