|
32 | 32 | from typing_extensions import (
|
33 | 33 | Self,
|
34 | 34 | TypeAlias,
|
| 35 | + assert_never, |
35 | 36 | assert_type,
|
36 | 37 | )
|
37 | 38 | import xarray as xr
|
@@ -3069,3 +3070,48 @@ def first_arg_not_series(argument_1: int, ser: pd.Series) -> pd.Series:
|
3069 | 3070 | ),
|
3070 | 3071 | 1,
|
3071 | 3072 | )
|
| 3073 | + |
| 3074 | + |
| 3075 | +def test_diff() -> None: |
| 3076 | + s = pd.Series([1, 1, 2, 3, 5, 8]) |
| 3077 | + # int -> float |
| 3078 | + check(assert_type(s.diff(), "pd.Series[float]"), pd.Series, float) |
| 3079 | + # unint -> float |
| 3080 | + check(assert_type(s.astype(np.uint32).diff(), "pd.Series[float]"), pd.Series, float) |
| 3081 | + # float -> float |
| 3082 | + check(assert_type(s.astype(float).diff(), "pd.Series[float]"), pd.Series, float) |
| 3083 | + # timestamp -> timedelta |
| 3084 | + times = pd.Series([pd.Timestamp(0), pd.Timestamp(1)]) |
| 3085 | + check(assert_type(times.diff(), "TimedeltaSeries"), pd.Series, pd.Timedelta) |
| 3086 | + # timedelta -> timedelta64 |
| 3087 | + check( |
| 3088 | + assert_type( |
| 3089 | + pd.Series([pd.Timedelta(0), pd.Timedelta(1)]).diff(), "TimedeltaSeries" |
| 3090 | + ), |
| 3091 | + pd.Series, |
| 3092 | + pd.Timedelta, |
| 3093 | + ) |
| 3094 | + # period -> object |
| 3095 | + check( |
| 3096 | + assert_type( |
| 3097 | + pd.Series( |
| 3098 | + [pd.Period("2012", freq="D"), pd.Period("2012-1-1", freq="D")] |
| 3099 | + ).diff(), |
| 3100 | + "pd.Series[object]", |
| 3101 | + ), |
| 3102 | + pd.Series, |
| 3103 | + object, |
| 3104 | + ) |
| 3105 | + # bool -> object |
| 3106 | + check( |
| 3107 | + assert_type( |
| 3108 | + pd.Series([True, True, False, False, True]).diff(), "pd.Series[object]" |
| 3109 | + ), |
| 3110 | + pd.Series, |
| 3111 | + object, |
| 3112 | + ) |
| 3113 | + # object -> object |
| 3114 | + check(assert_type(s.astype(object).diff(), "pd.Series[object]"), pd.Series, object) |
| 3115 | + # interval -> TypeError: IntervalArray has no 'diff' method. Convert to a suitable dtype prior to calling 'diff'. |
| 3116 | + if TYPE_CHECKING_INVALID_USAGE: |
| 3117 | + assert_never(pd.Series([pd.Interval(0, 2), pd.Interval(1, 4)]).diff()) |
0 commit comments