|
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