Skip to content

Commit aa9844d

Browse files
authored
type multiindex constructors (#1126)
* type multiindex constructors * simplify * use ListLike * use ListLike * remove outer sequencenotstr
1 parent 108e41c commit aa9844d

File tree

2 files changed

+48
-12
lines changed

2 files changed

+48
-12
lines changed

pandas-stubs/core/indexes/multi.pyi

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ from pandas.core.indexes.base import Index
1616
from typing_extensions import Self
1717

1818
from pandas._typing import (
19+
Axes,
1920
Dtype,
2021
DtypeArg,
2122
HashableT,
@@ -27,31 +28,41 @@ from pandas._typing import (
2728
class MultiIndex(Index[Any]):
2829
def __new__(
2930
cls,
30-
levels=...,
31-
codes=...,
32-
sortorder=...,
31+
levels: Sequence[SequenceNotStr[Hashable]] = ...,
32+
codes: Sequence[Sequence[int]] = ...,
33+
sortorder: int | None = ...,
3334
names: SequenceNotStr[Hashable] = ...,
34-
dtype=...,
35-
copy=...,
35+
copy: bool = ...,
3636
name: SequenceNotStr[Hashable] = ...,
3737
verify_integrity: bool = ...,
38-
_set_identity: bool = ...,
3938
) -> Self: ...
4039
@classmethod
4140
def from_arrays(
42-
cls, arrays, sortorder=..., names: SequenceNotStr[Hashable] = ...
41+
cls,
42+
arrays: Sequence[Axes],
43+
sortorder: int | None = ...,
44+
names: SequenceNotStr[Hashable] = ...,
4345
) -> Self: ...
4446
@classmethod
4547
def from_tuples(
46-
cls, tuples, sortorder=..., names: SequenceNotStr[Hashable] = ...
48+
cls,
49+
tuples: Sequence[tuple[Hashable, ...]],
50+
sortorder: int | None = ...,
51+
names: SequenceNotStr[Hashable] = ...,
4752
) -> Self: ...
4853
@classmethod
4954
def from_product(
50-
cls, iterables, sortorder=..., names: SequenceNotStr[Hashable] = ...
55+
cls,
56+
iterables: Sequence[SequenceNotStr[Hashable]],
57+
sortorder: int | None = ...,
58+
names: SequenceNotStr[Hashable] = ...,
5159
) -> Self: ...
5260
@classmethod
5361
def from_frame(
54-
cls, df, sortorder=..., names: SequenceNotStr[Hashable] = ...
62+
cls,
63+
df: pd.DataFrame,
64+
sortorder: int | None = ...,
65+
names: SequenceNotStr[Hashable] = ...,
5566
) -> Self: ...
5667
@property
5768
def shape(self): ...

tests/test_indexes.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def test_multiindex_get_level_values() -> None:
6464
check(assert_type(i1, pd.Index), pd.Index)
6565

6666

67-
def test_multiindex_constructor() -> None:
67+
def test_multiindex_constructors() -> None:
6868
check(
6969
assert_type(
7070
pd.MultiIndex([[1], [4]], codes=[[0], [0]], name=["a", "b"]), pd.MultiIndex
@@ -73,10 +73,35 @@ def test_multiindex_constructor() -> None:
7373
)
7474
check(
7575
assert_type(
76-
pd.MultiIndex([[1], [4]], codes=[[0], [0]], names=["a", "b"]), pd.MultiIndex
76+
pd.MultiIndex(
77+
[[1], [4]],
78+
codes=[[0], [0]],
79+
names=["a", "b"],
80+
sortorder=0,
81+
copy=True,
82+
verify_integrity=True,
83+
),
84+
pd.MultiIndex,
85+
),
86+
pd.MultiIndex,
87+
)
88+
check(
89+
assert_type(pd.MultiIndex.from_arrays([[1], [4]]), pd.MultiIndex), pd.MultiIndex
90+
)
91+
check(
92+
assert_type(
93+
pd.MultiIndex.from_arrays([np.arange(3), np.arange(3)]), pd.MultiIndex
7794
),
7895
pd.MultiIndex,
7996
)
97+
check(
98+
assert_type(pd.MultiIndex.from_tuples([(1, 3), (2, 4)]), pd.MultiIndex),
99+
pd.MultiIndex,
100+
)
101+
check(
102+
assert_type(pd.MultiIndex.from_frame(pd.DataFrame({"a": [1]})), pd.MultiIndex),
103+
pd.MultiIndex,
104+
)
80105

81106

82107
def test_index_tolist() -> None:

0 commit comments

Comments
 (0)