Skip to content

Commit ea52252

Browse files
Improve types for pd.options.display.* properties
1 parent ba4ebd8 commit ea52252

File tree

2 files changed

+86
-10
lines changed

2 files changed

+86
-10
lines changed

pandas-stubs/_config/config.pyi

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,30 +49,30 @@ class DisplayUnicode(DictWrapper):
4949

5050
class Display(DictWrapper):
5151
chop_threshold: int | None
52-
colheader_justify: str
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: 76 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,78 @@ 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():
55+
# GH 1230
56+
# Initial values
57+
assert_type(pd.options.display.max_columns, Optional[int])
58+
assert_type(pd.options.display.max_colwidth, Optional[int])
59+
assert_type(pd.options.display.max_dir_items, Optional[int])
60+
assert_type(pd.options.display.max_rows, Optional[int])
61+
assert_type(pd.options.display.max_seq_items, Optional[int])
62+
assert_type(pd.options.display.min_rows, Optional[int])
63+
# Test with None
64+
pd.options.display.max_columns = None
65+
check(assert_type(pd.options.display.max_columns, None), type(None))
66+
pd.options.display.max_colwidth = None
67+
check(assert_type(pd.options.display.max_colwidth, None), type(None))
68+
pd.options.display.max_dir_items = None
69+
check(assert_type(pd.options.display.max_dir_items, None), type(None))
70+
pd.options.display.max_rows = None
71+
check(assert_type(pd.options.display.max_rows, None), type(None))
72+
pd.options.display.max_seq_items = None
73+
check(assert_type(pd.options.display.max_seq_items, None), type(None))
74+
pd.options.display.min_rows = None
75+
check(assert_type(pd.options.display.min_rows, None), type(None))
76+
# Test with integer values
77+
pd.options.display.max_columns = 100
78+
check(assert_type(pd.options.display.max_columns, int), int)
79+
pd.options.display.max_colwidth = 100
80+
check(assert_type(pd.options.display.max_colwidth, int), int)
81+
pd.options.display.max_dir_items = 100
82+
check(assert_type(pd.options.display.max_dir_items, int), int)
83+
pd.options.display.max_rows = 100
84+
check(assert_type(pd.options.display.max_rows, int), int)
85+
pd.options.display.max_seq_items = 100
86+
check(assert_type(pd.options.display.max_seq_items, int), int)
87+
pd.options.display.min_rows = 100
88+
check(assert_type(pd.options.display.min_rows, int), int)
89+
90+
91+
def test_display_types_literal_constraints():
92+
# GH 1230
93+
# Various display options have specific allowed values
94+
# Test colheader_justify with allowed values
95+
assert_type(pd.options.display.colheader_justify, Literal["left", "right"])
96+
pd.options.display.colheader_justify = "left"
97+
check(assert_type(pd.options.display.colheader_justify, Literal["left"]), str)
98+
pd.options.display.colheader_justify = "right"
99+
check(assert_type(pd.options.display.colheader_justify, Literal["right"]), str)
100+
101+
# Test large_repr with allowed values
102+
assert_type(pd.options.display.large_repr, Literal["truncate", "info"])
103+
pd.options.display.large_repr = "truncate"
104+
check(assert_type(pd.options.display.large_repr, Literal["truncate"]), str)
105+
pd.options.display.large_repr = "info"
106+
check(assert_type(pd.options.display.large_repr, Literal["info"]), str)
107+
108+
# Test memory_usage with allowed values
109+
assert_type(pd.options.display.memory_usage, Optional[Literal[True, False, "deep"]])
110+
pd.options.display.memory_usage = True
111+
check(assert_type(pd.options.display.memory_usage, Literal[True]), bool)
112+
pd.options.display.memory_usage = False
113+
check(assert_type(pd.options.display.memory_usage, Literal[False]), bool)
114+
pd.options.display.memory_usage = "deep"
115+
check(assert_type(pd.options.display.memory_usage, Literal["deep"]), str)
116+
pd.options.display.memory_usage = None
117+
check(assert_type(pd.options.display.memory_usage, None), type(None))
118+
119+
# Test show_dimensions with allowed values
120+
assert_type(pd.options.display.show_dimensions, Literal[True, False, "truncate"])
121+
pd.options.display.show_dimensions = True
122+
check(assert_type(pd.options.display.show_dimensions, Literal[True]), bool)
123+
pd.options.display.show_dimensions = False
124+
check(assert_type(pd.options.display.show_dimensions, Literal[False]), bool)
125+
pd.options.display.show_dimensions = "truncate"
126+
check(assert_type(pd.options.display.show_dimensions, Literal["truncate"]), str)

0 commit comments

Comments
 (0)