Skip to content

Commit 3085bb9

Browse files
committed
ENH: Improve Styler
1 parent 74ac551 commit 3085bb9

File tree

2 files changed

+48
-22
lines changed

2 files changed

+48
-22
lines changed

pandas-stubs/io/formats/style.pyi

Lines changed: 47 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,25 @@ from typing import (
22
Any,
33
Callable,
44
Hashable,
5+
Literal,
56
Sequence,
7+
TypeVar,
8+
overload,
69
)
710

11+
import numpy as np
812
from pandas.core.frame import DataFrame
913
from pandas.core.series import Series
1014

1115
from pandas._typing import (
1216
Axis,
1317
FilePath,
18+
HashableT,
1419
IndexLabel,
1520
Level,
1621
Scalar,
1722
WriteBuffer,
23+
npt,
1824
)
1925

2026
from pandas.io.formats.style_render import (
@@ -25,14 +31,16 @@ from pandas.io.formats.style_render import (
2531
Subset,
2632
)
2733

34+
_StylerT = TypeVar("_StylerT", bound=Styler)
35+
2836
class Styler(StylerRenderer):
2937
def __init__(
3038
self,
3139
data: DataFrame | Series,
3240
precision: int | None = ...,
3341
table_styles: CSSStyles | None = ...,
3442
uuid: str | None = ...,
35-
caption: str | tuple | None = ...,
43+
caption: str | tuple[str, str] | None = ...,
3644
table_attributes: str | None = ...,
3745
cell_ids: bool = ...,
3846
na_rep: str | None = ...,
@@ -103,35 +111,44 @@ class Styler(StylerRenderer):
103111
encoding: str | None = ...,
104112
doctype_html: bool = ...,
105113
exclude_styles: bool = ...,
106-
**kwargs,
114+
**kwargs: Any,
107115
): ...
108116
def set_td_classes(self, classes: DataFrame) -> Styler: ...
109117
def __copy__(self) -> Styler: ...
110118
def __deepcopy__(self, memo) -> Styler: ...
111119
def clear(self) -> None: ...
120+
@overload
112121
def apply(
113122
self,
114-
func: Callable,
115-
axis: Axis | None = ...,
123+
func: Callable[[Series], list | Series],
124+
axis: Axis = ...,
125+
subset: Subset | None = ...,
126+
**kwargs: Any,
127+
) -> Styler: ...
128+
@overload
129+
def apply(
130+
self,
131+
func: Callable[[DataFrame], npt.NDArray | DataFrame],
132+
axis: None,
116133
subset: Subset | None = ...,
117-
**kwargs,
134+
**kwargs: Any,
118135
) -> Styler: ...
119136
def apply_index(
120137
self,
121-
func: Callable,
138+
func: Callable[[Series], npt.NDArray[np.str_]],
122139
axis: int | str = ...,
123140
level: Level | list[Level] | None = ...,
124-
**kwargs,
141+
**kwargs: Any,
125142
) -> Styler: ...
126143
def applymap_index(
127144
self,
128-
func: Callable,
145+
func: Callable[[object], str],
129146
axis: int | str = ...,
130147
level: Level | list[Level] | None = ...,
131-
**kwargs,
148+
**kwargs: Any,
132149
) -> Styler: ...
133150
def applymap(
134-
self, func: Callable, subset: Subset | None = ..., **kwargs
151+
self, func: Callable[[object], str], subset: Subset | None = ..., **kwargs: Any
135152
) -> Styler: ...
136153
# def where(self, cond: Callable, value: str, other: str | None = ..., subset: Subset | None = ..., **kwargs) -> Styler: ...
137154
# def set_precision(self, precision: int) -> StylerRenderer: ...
@@ -141,7 +158,7 @@ class Styler(StylerRenderer):
141158
uuid: Any # Incomplete
142159
def set_uuid(self, uuid: str) -> Styler: ...
143160
caption: Any # Incomplete
144-
# def set_caption(self, caption: str | tuple) -> Styler: ...
161+
def set_caption(self, caption: str | tuple[str, str]) -> Styler: ...
145162
def set_sticky(
146163
self,
147164
axis: Axis = ...,
@@ -150,7 +167,7 @@ class Styler(StylerRenderer):
150167
) -> Styler: ...
151168
def set_table_styles(
152169
self,
153-
table_styles: dict[Any, CSSStyles] | CSSStyles | None = ...,
170+
table_styles: dict[HashableT, CSSStyles] | CSSStyles | None = ...,
154171
axis: int = ...,
155172
overwrite: bool = ...,
156173
css_class_names: dict[str, str] | None = ...,
@@ -193,7 +210,9 @@ class Styler(StylerRenderer):
193210
vmax: float | None = ...,
194211
gmap: Sequence | None = ...,
195212
) -> Styler: ...
196-
def set_properties(self, subset: Subset | None = ..., **kwargs) -> Styler: ...
213+
def set_properties(
214+
self, subset: Subset | None = ..., **kwargs: str | int
215+
) -> Styler: ...
197216
def bar(
198217
self,
199218
subset: Subset | None = ...,
@@ -233,9 +252,9 @@ class Styler(StylerRenderer):
233252
subset: Subset | None = ...,
234253
color: str = ...,
235254
axis: Axis | None = ...,
236-
left: Scalar | Sequence | None = ...,
237-
right: Scalar | Sequence | None = ...,
238-
inclusive: str = ...,
255+
left: Scalar | list[Scalar] | None = ...,
256+
right: Scalar | list[Scalar] | None = ...,
257+
inclusive: Literal["both", "neither", "left", "right"] = ...,
239258
props: str | None = ...,
240259
) -> Styler: ...
241260
def highlight_quantile(
@@ -245,15 +264,22 @@ class Styler(StylerRenderer):
245264
axis: Axis | None = ...,
246265
q_left: float = ...,
247266
q_right: float = ...,
248-
interpolation: str = ...,
249-
inclusive: str = ...,
267+
interpolation: Literal[
268+
"linear", "lower", "higher", "midpoint", "nearest"
269+
] = ...,
270+
inclusive: Literal["both", "neither", "left", "right"] = ...,
250271
props: str | None = ...,
251272
) -> Styler: ...
252273
@classmethod
253274
def from_custom_template(
254275
cls,
255-
searchpath,
276+
searchpath: str | list[str],
256277
html_table: str | None = ...,
257278
html_style: str | None = ...,
258-
): ...
259-
def pipe(self, func: Callable, *args, **kwargs): ...
279+
) -> _StylerT: ...
280+
def pipe(
281+
self,
282+
func: Callable[[Styler], Styler] | tuple[Callable[[Styler], Styler], str],
283+
*args: Any,
284+
**kwargs: Any,
285+
) -> Styler: ...

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ pyxlsb = ">=1.0.9"
5656
odfpy = ">=1.4.1"
5757
xarray = ">=22.6.0"
5858
tabulate = ">=0.8.10"
59-
59+
jinja2 = "^3.1"
6060

6161
[build-system]
6262
requires = ["poetry-core>=1.0.0"]

0 commit comments

Comments
 (0)