Skip to content

Commit ebe8d10

Browse files
GH1230 Improve types for pd.options.display.* properties (#1231)
* Improve types for pd.options.display.* properties * chop_threshold is float Co-authored-by: Loic Diridollou <[email protected]> * PR Feedback * PR feedback --------- Co-authored-by: Loic Diridollou <[email protected]>
1 parent a9c632c commit ebe8d10

File tree

2 files changed

+81
-11
lines changed

2 files changed

+81
-11
lines changed

pandas-stubs/_config/config.pyi

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,31 +48,31 @@ class DisplayUnicode(DictWrapper):
4848
east_asian_width: bool
4949

5050
class Display(DictWrapper):
51-
chop_threshold: int | None
52-
colheader_justify: str
51+
chop_threshold: float | None
52+
colheader_justify: Literal["left", "right"]
5353
date_dayfirst: bool
5454
date_yearfirst: bool
5555
encoding: str
5656
expand_frame_repr: bool
5757
float_format: Callable[[float], str] | None
5858
html: DisplayHTML
59-
large_repr: str
59+
large_repr: Literal["truncate", "info"]
6060
latex: DisplayLaTeX
6161
max_categories: int
62-
max_columns: int
63-
max_colwidth: int
64-
max_dir_items: int
62+
max_columns: int | None
63+
max_colwidth: int | None
64+
max_dir_items: int | None
6565
max_info_columns: int
6666
max_info_rows: int
67-
max_rows: int
68-
max_seq_items: int
69-
memory_usage: bool
70-
min_rows: int
67+
max_rows: int | None
68+
max_seq_items: int | None
69+
memory_usage: bool | Literal["deep"] | None
70+
min_rows: int | None
7171
multi_sparse: bool
7272
notebook_repr_html: bool
7373
pprint_nest_depth: int
7474
precision: int
75-
show_dimensions: str
75+
show_dimensions: bool | Literal["truncate"]
7676
unicode: DisplayUnicode
7777
width: int
7878

tests/test_config.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
TYPE_CHECKING,
33
Any,
44
Callable,
5+
Literal,
56
Optional,
67
)
78

@@ -48,3 +49,72 @@ def test_display_float_format():
4849
formatter = "{,.2f}".format
4950
with pd.option_context("display.float_format", formatter):
5051
assert pd.get_option("display.float_format") == formatter
52+
53+
54+
def test_display_types_none_allowed_get_options():
55+
# GH 1230
56+
# Initial values
57+
check(assert_type(pd.options.display.chop_threshold, Optional[float]), type(None))
58+
check(assert_type(pd.options.display.max_columns, Optional[int]), int)
59+
check(assert_type(pd.options.display.max_colwidth, Optional[int]), int)
60+
check(assert_type(pd.options.display.max_dir_items, Optional[int]), int)
61+
check(assert_type(pd.options.display.max_rows, Optional[int]), int)
62+
check(assert_type(pd.options.display.max_seq_items, Optional[int]), int)
63+
check(assert_type(pd.options.display.min_rows, Optional[int]), int)
64+
65+
66+
def test_display_types_none_allowed_set_options():
67+
# GH 1230
68+
# Test setting each option as None and then to a specific value
69+
pd.options.display.chop_threshold = None
70+
pd.options.display.chop_threshold = 0.9
71+
pd.options.display.max_columns = None
72+
pd.options.display.max_columns = 100
73+
pd.options.display.max_colwidth = None
74+
pd.options.display.max_colwidth = 100
75+
pd.options.display.max_dir_items = None
76+
pd.options.display.max_dir_items = 100
77+
pd.options.display.max_rows = None
78+
pd.options.display.max_rows = 100
79+
pd.options.display.max_seq_items = None
80+
pd.options.display.max_seq_items = 100
81+
pd.options.display.min_rows = None
82+
pd.options.display.min_rows = 100
83+
84+
85+
def test_display_types_literal_constraints():
86+
# GH 1230
87+
# Various display options have specific allowed values
88+
# Test colheader_justify with allowed values
89+
assert_type(pd.options.display.colheader_justify, Literal["left", "right"])
90+
pd.options.display.colheader_justify = "left"
91+
check(assert_type(pd.options.display.colheader_justify, Literal["left"]), str)
92+
pd.options.display.colheader_justify = "right"
93+
check(assert_type(pd.options.display.colheader_justify, Literal["right"]), str)
94+
95+
# Test large_repr with allowed values
96+
assert_type(pd.options.display.large_repr, Literal["truncate", "info"])
97+
pd.options.display.large_repr = "truncate"
98+
check(assert_type(pd.options.display.large_repr, Literal["truncate"]), str)
99+
pd.options.display.large_repr = "info"
100+
check(assert_type(pd.options.display.large_repr, Literal["info"]), str)
101+
102+
# Test memory_usage with allowed values
103+
assert_type(pd.options.display.memory_usage, Optional[Literal[True, False, "deep"]])
104+
pd.options.display.memory_usage = True
105+
check(assert_type(pd.options.display.memory_usage, Literal[True]), bool)
106+
pd.options.display.memory_usage = False
107+
check(assert_type(pd.options.display.memory_usage, Literal[False]), bool)
108+
pd.options.display.memory_usage = "deep"
109+
check(assert_type(pd.options.display.memory_usage, Literal["deep"]), str)
110+
pd.options.display.memory_usage = None
111+
check(assert_type(pd.options.display.memory_usage, None), type(None))
112+
113+
# Test show_dimensions with allowed values
114+
assert_type(pd.options.display.show_dimensions, Literal[True, False, "truncate"])
115+
pd.options.display.show_dimensions = True
116+
check(assert_type(pd.options.display.show_dimensions, Literal[True]), bool)
117+
pd.options.display.show_dimensions = False
118+
check(assert_type(pd.options.display.show_dimensions, Literal[False]), bool)
119+
pd.options.display.show_dimensions = "truncate"
120+
check(assert_type(pd.options.display.show_dimensions, Literal["truncate"]), str)

0 commit comments

Comments
 (0)