Skip to content

Commit f78f807

Browse files
committed
type multiindex constructors
1 parent 108e41c commit f78f807

File tree

2 files changed

+49
-11
lines changed

2 files changed

+49
-11
lines changed

pandas-stubs/core/indexes/multi.pyi

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from collections.abc import (
22
Callable,
33
Hashable,
4+
Iterable,
45
Sequence,
56
)
67
from typing import (
@@ -16,6 +17,7 @@ from pandas.core.indexes.base import Index
1617
from typing_extensions import Self
1718

1819
from pandas._typing import (
20+
AnyArrayLike,
1921
Dtype,
2022
DtypeArg,
2123
HashableT,
@@ -27,31 +29,42 @@ from pandas._typing import (
2729
class MultiIndex(Index[Any]):
2830
def __new__(
2931
cls,
30-
levels=...,
31-
codes=...,
32-
sortorder=...,
32+
levels: SequenceNotStr[SequenceNotStr[Hashable]] = ...,
33+
codes: SequenceNotStr[SequenceNotStr[int]] = ...,
34+
sortorder: int | None = ...,
3335
names: SequenceNotStr[Hashable] = ...,
34-
dtype=...,
35-
copy=...,
36+
copy: bool = ...,
3637
name: SequenceNotStr[Hashable] = ...,
3738
verify_integrity: bool = ...,
3839
_set_identity: bool = ...,
3940
) -> Self: ...
4041
@classmethod
4142
def from_arrays(
42-
cls, arrays, sortorder=..., names: SequenceNotStr[Hashable] = ...
43+
cls,
44+
arrays: SequenceNotStr[SequenceNotStr[Hashable]] | SequenceNotStr[AnyArrayLike],
45+
sortorder: int | None = ...,
46+
names: SequenceNotStr[Hashable] = ...,
4347
) -> Self: ...
4448
@classmethod
4549
def from_tuples(
46-
cls, tuples, sortorder=..., names: SequenceNotStr[Hashable] = ...
50+
cls,
51+
tuples: Iterable[tuple[Hashable, ...]],
52+
sortorder: int | None = ...,
53+
names: SequenceNotStr[Hashable] = ...,
4754
) -> Self: ...
4855
@classmethod
4956
def from_product(
50-
cls, iterables, sortorder=..., names: SequenceNotStr[Hashable] = ...
57+
cls,
58+
iterables: SequenceNotStr[Iterable[Hashable]],
59+
sortorder: int | None = ...,
60+
names: SequenceNotStr[Hashable] = ...,
5161
) -> Self: ...
5262
@classmethod
5363
def from_frame(
54-
cls, df, sortorder=..., names: SequenceNotStr[Hashable] = ...
64+
cls,
65+
df: pd.DataFrame,
66+
sortorder: int | None = ...,
67+
names: SequenceNotStr[Hashable] = ...,
5568
) -> Self: ...
5669
@property
5770
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)