Skip to content

Commit 6155d44

Browse files
GH804 Fix property setter/getter for Index.names (#1308)
* GH804 Fix property setter/getter for Index.names * GH804 PR feedback
1 parent ace58ea commit 6155d44

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

pandas-stubs/core/indexes/base.pyi

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ from pandas._typing import (
5858
NaPosition,
5959
ReindexMethod,
6060
Scalar,
61+
SequenceNotStr,
6162
SliceType,
6263
TimedeltaDtypeArg,
6364
TimestampDtypeArg,
@@ -316,11 +317,11 @@ class Index(IndexOpsMixin[S1]):
316317
@property
317318
def name(self) -> Hashable | None: ...
318319
@name.setter
319-
def name(self, value) -> None: ...
320+
def name(self, value: Hashable) -> None: ...
320321
@property
321-
def names(self) -> list[Hashable]: ...
322+
def names(self) -> list[Hashable | None]: ...
322323
@names.setter
323-
def names(self, names: Sequence[Hashable]) -> None: ...
324+
def names(self, names: SequenceNotStr[Hashable | None]) -> None: ...
324325
def set_names(self, names, *, level=..., inplace: bool = ...): ...
325326
@overload
326327
def rename(self, name, *, inplace: Literal[False] = False) -> Self: ...

tests/test_indexes.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
from collections.abc import Hashable
34
import datetime as dt
45
from typing import (
56
TYPE_CHECKING,
@@ -1433,3 +1434,23 @@ def test_multiindex_range() -> None:
14331434
[range(3), pd.Series([2, 3, 5])],
14341435
)
14351436
check(assert_type(midx_mixed_types, pd.MultiIndex), pd.MultiIndex)
1437+
1438+
1439+
def test_index_naming() -> None:
1440+
"""
1441+
Test index names type both for the getter and the setter.
1442+
The names of an index should be settable with a sequence (not str) and names
1443+
property is a list[Hashable | None] (FrozenList).
1444+
"""
1445+
df = pd.DataFrame({"a": ["a", "b", "c"], "i": [10, 11, 12]})
1446+
1447+
df.index.names = ["idx"]
1448+
check(assert_type(df.index.names, list[Hashable | None]), list)
1449+
df.index.names = [3]
1450+
check(assert_type(df.index.names, list[Hashable | None]), list)
1451+
df.index.names = ("idx2",)
1452+
check(assert_type(df.index.names, list[Hashable | None]), list)
1453+
df.index.names = [None]
1454+
check(assert_type(df.index.names, list[Hashable | None]), list)
1455+
df.index.names = (None,)
1456+
check(assert_type(df.index.names, list[Hashable | None]), list)

0 commit comments

Comments
 (0)