Skip to content

Commit b781bbe

Browse files
author
Kevin Sheppard
committed
Merge remote-tracking branch 'upstream/main' into move-to-1.5.0
2 parents 15699fa + 10b87cd commit b781bbe

17 files changed

+82
-138
lines changed

pandas-stubs/_libs/tslibs/timestamps.pyi

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class Timestamp(datetime):
7777
cls: type[_DatetimeT], t: float, tz: _tzinfo | None = ...
7878
) -> _DatetimeT: ...
7979
@classmethod
80-
def utcfromtimestamp(cls: type[_DatetimeT], t: float) -> _DatetimeT: ...
80+
def utcfromtimestamp(cls: type[_DatetimeT], ts: float) -> _DatetimeT: ...
8181
@classmethod
8282
def today(cls: type[_DatetimeT], tz: _tzinfo | str | None = ...) -> _DatetimeT: ...
8383
@classmethod

pandas-stubs/core/arrays/base.pyi

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class ExtensionArray:
4747
) -> tuple[np.ndarray, ABCExtensionArray]: ...
4848
def repeat(self, repeats, axis=...): ...
4949
def take(
50-
self, indices: Sequence[int], allow_fill: bool = ..., fill_value=...
50+
self, indices: Sequence[int], *, allow_fill: bool = ..., fill_value=...
5151
) -> ABCExtensionArray: ...
5252
def copy(self) -> ABCExtensionArray: ...
5353
def view(self, dtype=...) -> ABCExtensionArray | np.ndarray: ...

pandas-stubs/core/arrays/interval.pyi

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class IntervalArray(IntervalMixin, ExtensionArray):
4444
self, periods: int = ..., fill_value: object = ...
4545
) -> ABCExtensionArray: ...
4646
def take(
47-
self, indices, allow_fill: bool = ..., fill_value=..., axis=..., **kwargs
47+
self, indices, *, allow_fill: bool = ..., fill_value=..., axis=..., **kwargs
4848
): ...
4949
def value_counts(self, dropna: bool = ...): ...
5050
@property

pandas-stubs/core/arrays/numpy_.pyi

-96
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,6 @@ from pandas.core.arrays.base import (
55
ExtensionOpsMixin,
66
)
77

8-
from pandas._typing import (
9-
Scalar,
10-
npt,
11-
)
12-
138
from pandas.core.dtypes.dtypes import ExtensionDtype
149

1510
class PandasDtype(ExtensionDtype):
@@ -30,95 +25,4 @@ class PandasDtype(ExtensionDtype):
3025
def itemsize(self): ...
3126

3227
class PandasArray(ExtensionArray, ExtensionOpsMixin, NDArrayOperatorsMixin):
33-
__array_priority__: int = ...
34-
def __init__(self, values: np.ndarray | PandasArray, copy: bool = ...) -> None: ...
35-
@property
36-
def dtype(self): ...
37-
def __array__(self, dtype=...) -> np.ndarray: ...
3828
def __array_ufunc__(self, ufunc, method, *inputs, **kwargs): ...
39-
def __getitem__(self, item): ...
40-
def __setitem__(self, key, value) -> None: ...
41-
def __len__(self) -> int: ...
42-
@property
43-
def nbytes(self) -> int: ...
44-
def isna(self): ...
45-
def fillna(self, value=..., method=..., limit=...): ...
46-
def take(self, indices, allow_fill: bool = ..., fill_value=...): ...
47-
def copy(self): ...
48-
def unique(self): ...
49-
def any(self, axis=..., out=..., keepdims: bool = ..., skipna: bool = ...): ...
50-
def all(self, axis=..., out=..., keepdims: bool = ..., skipna: bool = ...): ...
51-
def min(self, axis=..., out=..., keepdims: bool = ..., skipna: bool = ...): ...
52-
def max(self, axis=..., out=..., keepdims: bool = ..., skipna: bool = ...): ...
53-
def sum(
54-
self,
55-
axis=...,
56-
dtype=...,
57-
out=...,
58-
keepdims: bool = ...,
59-
initial=...,
60-
skipna: bool = ...,
61-
min_count: int = ...,
62-
): ...
63-
def prod(
64-
self,
65-
axis=...,
66-
dtype=...,
67-
out=...,
68-
keepdims: bool = ...,
69-
initial=...,
70-
skipna: bool = ...,
71-
min_count: int = ...,
72-
): ...
73-
def mean(
74-
self, axis=..., dtype=..., out=..., keepdims: bool = ..., skipna: bool = ...
75-
): ...
76-
def median(
77-
self,
78-
axis=...,
79-
out=...,
80-
overwrite_input: bool = ...,
81-
keepdims: bool = ...,
82-
skipna: bool = ...,
83-
): ...
84-
def std(
85-
self,
86-
axis=...,
87-
dtype=...,
88-
out=...,
89-
ddof: int = ...,
90-
keepdims: bool = ...,
91-
skipna: bool = ...,
92-
): ...
93-
def var(
94-
self,
95-
axis=...,
96-
dtype=...,
97-
out=...,
98-
ddof: int = ...,
99-
keepdims: bool = ...,
100-
skipna: bool = ...,
101-
): ...
102-
def sem(
103-
self,
104-
axis=...,
105-
dtype=...,
106-
out=...,
107-
ddof: int = ...,
108-
keepdims: bool = ...,
109-
skipna: bool = ...,
110-
): ...
111-
def kurt(
112-
self, axis=..., dtype=..., out=..., keepdims: bool = ..., skipna: bool = ...
113-
): ...
114-
def skew(
115-
self, axis=..., dtype=..., out=..., keepdims: bool = ..., skipna: bool = ...
116-
): ...
117-
def to_numpy(
118-
self,
119-
dtype: npt.DTypeLike | None = ...,
120-
copy: bool = ...,
121-
na_value: Scalar = ...,
122-
) -> np.ndarray: ...
123-
def searchsorted(self, value, side: str = ..., sorter=...): ...
124-
def __invert__(self): ...

pandas-stubs/core/arrays/string_.pyi

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
from pandas.core.arrays import PandasArray as PandasArray
1+
from pandas.core.arrays import PandasArray
22

33
from pandas._typing import type_t
44

5-
from pandas.core.dtypes.base import ExtensionDtype as ExtensionDtype
5+
from pandas.core.dtypes.base import ExtensionDtype
66

77
class StringDtype(ExtensionDtype):
88
name: str = ...

pandas-stubs/core/arrays/timedeltas.pyi

+3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class TimedeltaArray(DatetimeLikeArrayMixin, TimelikeOps):
1414
def astype(self, dtype, copy: bool = ...): ...
1515
def sum(
1616
self,
17+
*,
1718
axis=...,
1819
dtype=...,
1920
out=...,
@@ -24,6 +25,7 @@ class TimedeltaArray(DatetimeLikeArrayMixin, TimelikeOps):
2425
): ...
2526
def std(
2627
self,
28+
*,
2729
axis=...,
2830
dtype=...,
2931
out=...,
@@ -33,6 +35,7 @@ class TimedeltaArray(DatetimeLikeArrayMixin, TimelikeOps):
3335
): ...
3436
def median(
3537
self,
38+
*,
3639
axis=...,
3740
out=...,
3841
overwrite_input: bool = ...,

pandas-stubs/core/dtypes/missing.pyi

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def isna(obj: Index | list | ArrayLike) -> npt.NDArray[np.bool_]: ...
3030
@overload
3131
def isna(obj: Scalar) -> bool: ...
3232
@overload
33-
def isna(obj: NaTType | NAType) -> Literal[True]: ...
33+
def isna(obj: NaTType | NAType | None) -> Literal[True]: ...
3434

3535
isnull = isna
3636

@@ -43,6 +43,6 @@ def notna(obj: Index | list | ArrayLike) -> npt.NDArray[np.bool_]: ...
4343
@overload
4444
def notna(obj: Scalar) -> bool: ...
4545
@overload
46-
def notna(obj: NaTType | NAType) -> Literal[False]: ...
46+
def notna(obj: NaTType | NAType | None) -> Literal[False]: ...
4747

4848
notnull = notna

pandas-stubs/core/frame.pyi

+1
Original file line numberDiff line numberDiff line change
@@ -1777,6 +1777,7 @@ class DataFrame(NDFrame, OpsMixin):
17771777
min_periods: int | None = ...,
17781778
center: _bool = ...,
17791779
*,
1780+
win_type: None = ...,
17801781
on: Hashable | None = ...,
17811782
axis: AxisType = ...,
17821783
closed: IntervalClosedType | None = ...,

pandas-stubs/core/indexes/datetimes.pyi

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
from datetime import tzinfo
1+
from datetime import (
2+
timedelta,
3+
tzinfo,
4+
)
25
from typing import overload
36

47
import numpy as np
@@ -90,7 +93,7 @@ def date_range(
9093
start: str | DatetimeLike | None = ...,
9194
end: str | DatetimeLike | None = ...,
9295
periods: int | None = ...,
93-
freq: str | BaseOffset = ...,
96+
freq: str | timedelta | Timedelta | BaseOffset = ...,
9497
tz: str | tzinfo = ...,
9598
normalize: bool = ...,
9699
name: str | None = ...,
@@ -101,7 +104,7 @@ def bdate_range(
101104
start: str | DatetimeLike | None = ...,
102105
end: str | DatetimeLike | None = ...,
103106
periods: int | None = ...,
104-
freq: str | BaseOffset = ...,
107+
freq: str | timedelta | Timedelta | BaseOffset = ...,
105108
tz: str | tzinfo = ...,
106109
normalize: bool = ...,
107110
name: str | None = ...,

pandas-stubs/core/indexes/timedeltas.pyi

-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ class TimedeltaIndex(DatetimeTimedeltaMixin, TimedeltaIndexProperties):
3636
def get_value(self, series, key): ...
3737
def get_loc(self, key, tolerance=...): ...
3838
def searchsorted(self, value, side: str = ..., sorter=...): ...
39-
def is_type_compatible(self, typ) -> bool: ...
4039
@property
4140
def inferred_type(self) -> str: ...
4241
def insert(self, loc, item): ...

pandas-stubs/core/missing.pyi

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
def mask_missing(arr, values_to_mask): ...
22
def clean_fill_method(method, allow_nearest: bool = ...): ...
33
def clean_interp_method(method, **kwargs): ...
4-
def find_valid_index(values, how: str): ...
54
def interpolate_2d(
65
values, method: str = ..., axis: int = ..., limit=..., fill_value=..., dtype=...
76
): ...

pandas-stubs/core/series.pyi

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from datetime import (
22
date,
3+
datetime,
34
time,
45
)
56
from typing import (
@@ -1216,7 +1217,9 @@ class Series(IndexOpsMixin, NDFrame, Generic[S1]):
12161217
def __rtruediv__(self, other: num | _ListLike | Series[S1]) -> Series: ...
12171218
def __rxor__(self, other: num | _ListLike | Series[S1]) -> Series[_bool]: ...
12181219
@overload
1219-
def __sub__(self, other: Timestamp | TimestampSeries) -> TimedeltaSeries: ...
1220+
def __sub__(
1221+
self, other: Timestamp | datetime | TimestampSeries
1222+
) -> TimedeltaSeries: ...
12201223
@overload
12211224
def __sub__(
12221225
self, other: Timedelta | TimedeltaSeries | TimedeltaIndex
@@ -1387,7 +1390,6 @@ class Series(IndexOpsMixin, NDFrame, Generic[S1]):
13871390
self,
13881391
axis: SeriesAxisType | None = ...,
13891392
skipna: _bool = ...,
1390-
*,
13911393
level: None = ...,
13921394
**kwargs,
13931395
) -> S1: ...
@@ -1518,6 +1520,7 @@ class Series(IndexOpsMixin, NDFrame, Generic[S1]):
15181520
min_periods: int | None = ...,
15191521
center: _bool = ...,
15201522
*,
1523+
win_type: None = ...,
15211524
on: _str | None = ...,
15221525
axis: SeriesAxisType = ...,
15231526
closed: _str | None = ...,

pandas-stubs/io/sql.pyi

+8-4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ _SQLConnection = Union[
2525
sqlite3.Connection,
2626
]
2727

28+
_SQLStatement = Union[
29+
str, sqlalchemy.sql.expression.Selectable, sqlalchemy.sql.expression.TextClause
30+
]
31+
2832
@overload
2933
def read_sql_table(
3034
table_name: str,
@@ -50,7 +54,7 @@ def read_sql_table(
5054
) -> DataFrame: ...
5155
@overload
5256
def read_sql_query(
53-
sql: str | sqlalchemy.sql.expression.Selectable,
57+
sql: _SQLStatement,
5458
con: _SQLConnection,
5559
index_col: str | list[str] | None = ...,
5660
coerce_float: bool = ...,
@@ -62,7 +66,7 @@ def read_sql_query(
6266
) -> Generator[DataFrame, None, None]: ...
6367
@overload
6468
def read_sql_query(
65-
sql: str | sqlalchemy.sql.expression.Selectable,
69+
sql: _SQLStatement,
6670
con: _SQLConnection,
6771
index_col: str | list[str] | None = ...,
6872
coerce_float: bool = ...,
@@ -73,7 +77,7 @@ def read_sql_query(
7377
) -> DataFrame: ...
7478
@overload
7579
def read_sql(
76-
sql: str | sqlalchemy.sql.expression.Selectable,
80+
sql: _SQLStatement,
7781
con: _SQLConnection,
7882
index_col: str | list[str] | None = ...,
7983
coerce_float: bool = ...,
@@ -85,7 +89,7 @@ def read_sql(
8589
) -> Generator[DataFrame, None, None]: ...
8690
@overload
8791
def read_sql(
88-
sql: str | sqlalchemy.sql.expression.Selectable,
92+
sql: _SQLStatement,
8993
con: _SQLConnection,
9094
index_col: str | list[str] | None = ...,
9195
coerce_float: bool = ...,

pandas-stubs/util/_test_decorators.pyi

-21
This file was deleted.

tests/test_io.py

+13
Original file line numberDiff line numberDiff line change
@@ -798,3 +798,16 @@ class Temp(Base):
798798
pd.read_sql(
799799
session.query(Temp.quantity).statement, session.connection()
800800
)
801+
802+
803+
def test_sqlalchemy_text() -> None:
804+
with ensure_clean() as path:
805+
db_uri = "sqlite:///" + path
806+
engine = sqlalchemy.create_engine(db_uri)
807+
sql_select = sqlalchemy.text("select * from test")
808+
with engine.connect() as conn:
809+
check(assert_type(DF.to_sql("test", con=conn), Union[int, None]), int)
810+
check(
811+
assert_type(read_sql(sql_select, con=conn), DataFrame),
812+
DataFrame,
813+
)

tests/test_pandas.py

+3
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ def test_isna() -> None:
136136
assert check(assert_type(pd.isna(pd.NaT), Literal[True]), bool)
137137
assert not check(assert_type(pd.notna(pd.NaT), Literal[False]), bool)
138138

139+
assert check(assert_type(pd.isna(None), Literal[True]), bool)
140+
assert not check(assert_type(pd.notna(None), Literal[False]), bool)
141+
139142
check(assert_type(pd.isna(2.5), bool), bool)
140143
check(assert_type(pd.notna(2.5), bool), bool)
141144

0 commit comments

Comments
 (0)