|
1 | 1 | from typing import ( |
2 | 2 | TYPE_CHECKING, |
| 3 | + cast, |
3 | 4 | ) |
4 | 5 |
|
5 | 6 | import numpy as np |
6 | | -import pandas as pd |
7 | 7 | from pandas.core.arrays import DatetimeArray |
8 | 8 | from pandas.core.arrays.base import ExtensionArray |
| 9 | +from pandas.core.arrays.categorical import Categorical |
| 10 | +from pandas.core.arrays.integer import ( |
| 11 | + Int64Dtype, |
| 12 | + IntegerArray, |
| 13 | +) |
9 | 14 | from pandas.core.arrays.interval import IntervalArray |
10 | 15 | from pandas.core.arrays.timedeltas import TimedeltaArray |
| 16 | +from pandas.core.frame import DataFrame |
11 | 17 | from pandas.core.indexes.accessors import ( |
12 | 18 | DatetimeProperties, |
13 | 19 | PeriodProperties, |
14 | 20 | Properties, |
15 | 21 | TimedeltaProperties, |
16 | 22 | ) |
| 23 | +from pandas.core.indexes.interval import interval_range |
| 24 | +from pandas.core.indexes.period import period_range |
| 25 | +from pandas.core.series import Series |
17 | 26 | from typing_extensions import assert_type |
18 | 27 |
|
| 28 | +from pandas._libs.interval import Interval |
| 29 | +from pandas._libs.missing import NA |
| 30 | +from pandas._libs.tslibs.timedeltas import Timedelta |
| 31 | +from pandas._libs.tslibs.timestamps import Timestamp |
| 32 | + |
19 | 33 | from tests import ( |
20 | 34 | TYPE_CHECKING_INVALID_USAGE, |
21 | 35 | check, |
|
25 | 39 | from pandas.core.indexes.accessors import TimestampProperties # noqa: F401 |
26 | 40 |
|
27 | 41 |
|
28 | | -def test_dt_property() -> None: |
| 42 | +def test_property_dt() -> None: |
29 | 43 | """Test the Series.dt property""" |
30 | 44 | check( |
31 | | - assert_type(pd.Series([pd.Timestamp(2025, 9, 28)]).dt, "TimestampProperties"), |
| 45 | + assert_type(Series([Timestamp(2025, 9, 28)]).dt, "TimestampProperties"), |
32 | 46 | DatetimeProperties, |
33 | 47 | ) |
34 | 48 | check( |
35 | | - assert_type(pd.Series([pd.Timedelta(1, "s")]).dt, TimedeltaProperties), |
| 49 | + assert_type(Series([Timedelta(1, "s")]).dt, TimedeltaProperties), |
36 | 50 | TimedeltaProperties, |
37 | 51 | ) |
38 | 52 | check( |
39 | 53 | assert_type( |
40 | | - pd.period_range(start="2022-06-01", periods=10).to_series().dt, |
| 54 | + period_range(start="2022-06-01", periods=10).to_series().dt, |
41 | 55 | PeriodProperties, |
42 | 56 | ), |
43 | 57 | PeriodProperties, |
44 | 58 | ) |
45 | 59 |
|
46 | 60 | if TYPE_CHECKING_INVALID_USAGE: |
47 | | - s = pd.DataFrame({"a": [1]})["a"] |
| 61 | + s = DataFrame({"a": [1]})["a"] |
48 | 62 | # python/mypy#19952: mypy believes Properties and its subclasses have a |
49 | 63 | # conflict and gives Any for s.dt |
50 | 64 | assert_type(s.dt, Properties) # type: ignore[assert-type] |
51 | | - _1 = pd.Series([1]).dt # type: ignore[arg-type] # pyright: ignore[reportAttributeAccessIssue] |
| 65 | + _1 = Series([1]).dt # type: ignore[arg-type] # pyright: ignore[reportAttributeAccessIssue] |
52 | 66 |
|
53 | 67 |
|
54 | | -def test_array_property() -> None: |
| 68 | +def test_property_array() -> None: |
55 | 69 | """Test that Series.array returns ExtensionArray and its subclasses""" |
| 70 | + check( |
| 71 | + assert_type(Series([1], dtype="category").array, Categorical), Categorical, int |
| 72 | + ) |
| 73 | + # cast will be removed if pandas-dev/pandas-stubs#1395 is resolved |
56 | 74 | check( |
57 | 75 | assert_type( |
58 | | - pd.Series([1], dtype="category").array, |
59 | | - pd.Categorical, |
| 76 | + cast("Series[Int64Dtype]", Series([1, NA], dtype="Int64")).array, |
| 77 | + IntegerArray, |
60 | 78 | ), |
61 | | - pd.Categorical, |
62 | | - int, |
| 79 | + IntegerArray, |
63 | 80 | ) |
64 | 81 | check( |
65 | | - assert_type(pd.Series(pd.interval_range(0, 1)).array, IntervalArray), |
| 82 | + assert_type(Series(interval_range(0, 1)).array, IntervalArray), |
66 | 83 | IntervalArray, |
67 | | - pd.Interval, |
| 84 | + Interval, |
68 | 85 | ) |
69 | 86 | check( |
70 | | - assert_type(pd.Series([pd.Timestamp(2025, 9, 28)]).array, DatetimeArray), |
| 87 | + assert_type(Series([Timestamp(2025, 9, 28)]).array, DatetimeArray), |
71 | 88 | DatetimeArray, |
72 | | - pd.Timestamp, |
| 89 | + Timestamp, |
73 | 90 | ) |
74 | 91 | check( |
75 | | - assert_type(pd.Series([pd.Timedelta(1, "s")]).array, TimedeltaArray), |
| 92 | + assert_type(Series([Timedelta(1, "s")]).array, TimedeltaArray), |
76 | 93 | TimedeltaArray, |
77 | | - pd.Timedelta, |
| 94 | + Timedelta, |
78 | 95 | ) |
79 | | - check(assert_type(pd.Series([1]).array, ExtensionArray), ExtensionArray, np.integer) |
| 96 | + check(assert_type(Series([1]).array, ExtensionArray), ExtensionArray, np.integer) |
80 | 97 | # python/mypy#19952: mypy believes ExtensionArray and its subclasses have a |
81 | 98 | # conflict and gives Any for s.array |
82 | | - check(assert_type(pd.Series([1, "s"]).array, ExtensionArray), ExtensionArray) # type: ignore[assert-type] |
| 99 | + check(assert_type(Series([1, "s"]).array, ExtensionArray), ExtensionArray) # type: ignore[assert-type] |
0 commit comments