Skip to content

Commit ebb8ffa

Browse files
authored
TYP: NDFrame.__round__ (#792)
* TYP: NDFrame.__round__ * more Self * a few more Selfs
1 parent 1cd1164 commit ebb8ffa

File tree

4 files changed

+49
-50
lines changed

4 files changed

+49
-50
lines changed

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ repos:
1111
hooks:
1212
- id: isort
1313
- repo: https://github.com/astral-sh/ruff-pre-commit
14-
rev: v0.0.291
14+
rev: v0.0.292
1515
hooks:
1616
- id: ruff
1717
args: [
@@ -23,7 +23,7 @@ repos:
2323
--fix
2424
]
2525
- repo: https://github.com/codespell-project/codespell
26-
rev: v2.2.5
26+
rev: v2.2.6
2727
hooks:
2828
- id: codespell
2929
additional_dependencies: [ tomli ]

pandas-stubs/core/generic.pyi

Lines changed: 40 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ from pandas import Index
1919
import pandas.core.indexing as indexing
2020
from pandas.core.series import Series
2121
import sqlalchemy.engine
22+
from typing_extensions import Self
2223

2324
from pandas._typing import (
2425
S1,
@@ -39,7 +40,6 @@ from pandas._typing import (
3940
IgnoreRaise,
4041
IndexLabel,
4142
Level,
42-
NDFrameT,
4343
ReplaceMethod,
4444
SortKind,
4545
StorageOptions,
@@ -57,11 +57,11 @@ class NDFrame(indexing.IndexingMixin):
5757
__hash__: ClassVar[None] # type: ignore[assignment]
5858

5959
def set_flags(
60-
self: NDFrameT,
60+
self,
6161
*,
6262
copy: bool = ...,
6363
allows_duplicate_labels: bool | None = ...,
64-
) -> NDFrameT: ...
64+
) -> Self: ...
6565
@property
6666
def attrs(self) -> dict[Hashable | None, Any]: ...
6767
@attrs.setter
@@ -74,19 +74,16 @@ class NDFrame(indexing.IndexingMixin):
7474
def ndim(self) -> int: ...
7575
@property
7676
def size(self) -> int: ...
77-
def swapaxes(
78-
self, axis1: AxisIndex, axis2: AxisIndex, copy: _bool = ...
79-
) -> NDFrame: ...
80-
def droplevel(self, level: Level, axis: AxisIndex = ...) -> NDFrame: ...
77+
def droplevel(self, level: Level, axis: AxisIndex = ...) -> Self: ...
8178
def squeeze(self, axis=...): ...
8279
def equals(self, other: Series[S1]) -> _bool: ...
83-
def __neg__(self: NDFrameT) -> NDFrameT: ...
84-
def __pos__(self: NDFrameT) -> NDFrameT: ...
80+
def __neg__(self) -> Self: ...
81+
def __pos__(self) -> Self: ...
8582
def __nonzero__(self) -> None: ...
8683
@final
8784
def bool(self) -> _bool: ...
88-
def __abs__(self) -> NDFrame: ...
89-
def __round__(self, decimals: int = ...) -> NDFrame: ...
85+
def __abs__(self) -> Self: ...
86+
def __round__(self, decimals: int = ...) -> Self: ...
9087
def keys(self): ...
9188
def __len__(self) -> int: ...
9289
def __contains__(self, key) -> _bool: ...
@@ -285,7 +282,7 @@ class NDFrame(indexing.IndexingMixin):
285282
) -> _str: ...
286283
def take(
287284
self, indices, axis=..., is_copy: _bool | None = ..., **kwargs
288-
) -> NDFrame: ...
285+
) -> Self: ...
289286
def __delitem__(self, idx: Hashable) -> None: ...
290287
def get(self, key: object, default: Dtype | None = ...) -> Dtype: ...
291288
def reindex_like(
@@ -295,7 +292,7 @@ class NDFrame(indexing.IndexingMixin):
295292
copy: _bool = ...,
296293
limit=...,
297294
tolerance=...,
298-
) -> NDFrame: ...
295+
) -> Self: ...
299296
@overload
300297
def drop(
301298
self,
@@ -310,7 +307,7 @@ class NDFrame(indexing.IndexingMixin):
310307
) -> None: ...
311308
@overload
312309
def drop(
313-
self: NDFrame,
310+
self,
314311
labels: Hashable | Sequence[Hashable] = ...,
315312
*,
316313
axis: Axis = ...,
@@ -319,10 +316,10 @@ class NDFrame(indexing.IndexingMixin):
319316
level: Level | None = ...,
320317
inplace: Literal[False] = ...,
321318
errors: IgnoreRaise = ...,
322-
) -> NDFrame: ...
319+
) -> Self: ...
323320
@overload
324321
def drop(
325-
self: NDFrame,
322+
self,
326323
labels: Hashable | Sequence[Hashable] = ...,
327324
*,
328325
axis: Axis = ...,
@@ -331,9 +328,9 @@ class NDFrame(indexing.IndexingMixin):
331328
level: Level | None = ...,
332329
inplace: _bool = ...,
333330
errors: IgnoreRaise = ...,
334-
) -> NDFrame | None: ...
335-
def add_prefix(self, prefix: _str) -> NDFrame: ...
336-
def add_suffix(self, suffix: _str) -> NDFrame: ...
331+
) -> Self | None: ...
332+
def add_prefix(self, prefix: _str) -> Self: ...
333+
def add_suffix(self, suffix: _str) -> Self: ...
337334
def sort_index(
338335
self,
339336
*,
@@ -352,30 +349,30 @@ class NDFrame(indexing.IndexingMixin):
352349
like: _str | None = ...,
353350
regex: _str | None = ...,
354351
axis=...,
355-
) -> NDFrame: ...
356-
def head(self: NDFrameT, n: int = ...) -> NDFrameT: ...
357-
def tail(self: NDFrameT, n: int = ...) -> NDFrameT: ...
352+
) -> Self: ...
353+
def head(self, n: int = ...) -> Self: ...
354+
def tail(self, n: int = ...) -> Self: ...
358355
def pipe(
359356
self, func: Callable[..., T] | tuple[Callable[..., T], str], *args, **kwargs
360357
) -> T: ...
361-
def __finalize__(self, other, method=..., **kwargs) -> NDFrame: ...
358+
def __finalize__(self, other, method=..., **kwargs) -> Self: ...
362359
def __setattr__(self, name: _str, value) -> None: ...
363360
@property
364361
def values(self) -> ArrayLike: ...
365362
@property
366363
def dtypes(self): ...
367-
def copy(self: NDFrameT, deep: _bool = ...) -> NDFrameT: ...
368-
def __copy__(self, deep: _bool = ...) -> NDFrame: ...
369-
def __deepcopy__(self, memo=...) -> NDFrame: ...
370-
def infer_objects(self) -> NDFrame: ...
364+
def copy(self, deep: _bool = ...) -> Self: ...
365+
def __copy__(self, deep: _bool = ...) -> Self: ...
366+
def __deepcopy__(self, memo=...) -> Self: ...
367+
def infer_objects(self) -> Self: ...
371368
def convert_dtypes(
372-
self: NDFrameT,
369+
self,
373370
infer_objects: _bool = ...,
374371
convert_string: _bool = ...,
375372
convert_integer: _bool = ...,
376373
convert_boolean: _bool = ...,
377374
dtype_backend: DtypeBackend = ...,
378-
) -> NDFrameT: ...
375+
) -> Self: ...
379376
def fillna(
380377
self,
381378
value=...,
@@ -403,24 +400,24 @@ class NDFrame(indexing.IndexingMixin):
403400
def notnull(self) -> NDFrame: ...
404401
def clip(
405402
self, lower=..., upper=..., *, axis=..., inplace: _bool = ..., **kwargs
406-
) -> NDFrame: ...
403+
) -> Self: ...
407404
def asfreq(
408405
self,
409406
freq,
410407
method: FillnaOptions | None = ...,
411408
how: Literal["start", "end"] | None = ...,
412409
normalize: _bool = ...,
413410
fill_value=...,
414-
) -> NDFrame: ...
415-
def at_time(self, time, asof: _bool = ..., axis=...) -> NDFrame: ...
411+
) -> Self: ...
412+
def at_time(self, time, asof: _bool = ..., axis=...) -> Self: ...
416413
def between_time(
417414
self,
418415
start_time,
419416
end_time,
420417
axis=...,
421-
) -> NDFrame: ...
422-
def first(self, offset) -> NDFrame: ...
423-
def last(self, offset) -> NDFrame: ...
418+
) -> Self: ...
419+
def first(self, offset) -> Self: ...
420+
def last(self, offset) -> Self: ...
424421
def rank(
425422
self,
426423
axis=...,
@@ -450,13 +447,11 @@ class NDFrame(indexing.IndexingMixin):
450447
level=...,
451448
try_cast: _bool = ...,
452449
): ...
453-
def shift(self, periods=..., freq=..., axis=..., fill_value=...) -> NDFrame: ...
454-
def slice_shift(self, periods: int = ..., axis=...) -> NDFrame: ...
455-
def tshift(self, periods: int = ..., freq=..., axis=...) -> NDFrame: ...
456-
def truncate(
457-
self, before=..., after=..., axis=..., copy: _bool = ...
458-
) -> NDFrame: ...
459-
def tz_convert(self, tz, axis=..., level=..., copy: _bool = ...) -> NDFrame: ...
450+
def shift(self, periods=..., freq=..., axis=..., fill_value=...) -> Self: ...
451+
def slice_shift(self, periods: int = ..., axis=...) -> Self: ...
452+
def tshift(self, periods: int = ..., freq=..., axis=...) -> Self: ...
453+
def truncate(self, before=..., after=..., axis=..., copy: _bool = ...) -> Self: ...
454+
def tz_convert(self, tz, axis=..., level=..., copy: _bool = ...) -> Self: ...
460455
def tz_localize(
461456
self,
462457
tz,
@@ -465,8 +460,8 @@ class NDFrame(indexing.IndexingMixin):
465460
copy: _bool = ...,
466461
ambiguous=...,
467462
nonexistent: str = ...,
468-
) -> NDFrame: ...
469-
def abs(self) -> NDFrame: ...
463+
) -> Self: ...
464+
def abs(self) -> Self: ...
470465
def describe(
471466
self,
472467
percentiles=...,
@@ -476,6 +471,6 @@ class NDFrame(indexing.IndexingMixin):
476471
) -> NDFrame: ...
477472
def pct_change(
478473
self, periods=..., fill_method=..., limit=..., freq=..., **kwargs
479-
) -> NDFrame: ...
474+
) -> Self: ...
480475
def first_valid_index(self): ...
481476
def last_valid_index(self): ...

pandas-stubs/core/series.pyi

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1138,9 +1138,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
11381138
def swapaxes(
11391139
self, axis1: AxisIndex, axis2: AxisIndex, copy: _bool = ...
11401140
) -> Series[S1]: ...
1141-
def droplevel(
1142-
self, level: Level | list[Level], axis: AxisIndex = ...
1143-
) -> DataFrame: ...
1141+
def droplevel(self, level: Level | list[Level], axis: AxisIndex = ...) -> Self: ...
11441142
def pop(self, item: Hashable) -> S1: ...
11451143
def squeeze(self, axis: AxisIndex | None = ...) -> Scalar: ...
11461144
def __abs__(self) -> Series[S1]: ...

tests/test_series.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2830,3 +2830,9 @@ def test_series_setitem_na() -> None:
28302830
s2 = df["y"].copy()
28312831
s2.loc[ind] = pd.NaT
28322832
s2.iloc[[0, 2]] = pd.NaT
2833+
2834+
2835+
def test_round() -> None:
2836+
# GH 791
2837+
check(assert_type(round(pd.DataFrame([])), pd.DataFrame), pd.DataFrame)
2838+
check(assert_type(round(pd.Series([1], dtype=int)), "pd.Series[int]"), pd.Series)

0 commit comments

Comments
 (0)