19
19
20
20
from pandas ._libs import algos as libalgos , index as libindex , lib
21
21
from pandas ._libs .hashtable import duplicated_int64
22
- from pandas ._typing import AnyArrayLike , Scalar
22
+ from pandas ._typing import AnyArrayLike , Label , Scalar
23
23
from pandas .compat .numpy import function as nv
24
24
from pandas .errors import InvalidIndexError , PerformanceWarning , UnsortedIndexError
25
25
from pandas .util ._decorators import Appender , cache_readonly , doc
@@ -449,7 +449,12 @@ def from_arrays(cls, arrays, sortorder=None, names=lib.no_default) -> "MultiInde
449
449
)
450
450
451
451
@classmethod
452
- def from_tuples (cls , tuples , sortorder = None , names = None ):
452
+ def from_tuples (
453
+ cls ,
454
+ tuples ,
455
+ sortorder : Optional [int ] = None ,
456
+ names : Optional [Sequence [Label ]] = None ,
457
+ ):
453
458
"""
454
459
Convert list of tuples to MultiIndex.
455
460
@@ -490,6 +495,7 @@ def from_tuples(cls, tuples, sortorder=None, names=None):
490
495
elif is_iterator (tuples ):
491
496
tuples = list (tuples )
492
497
498
+ arrays : List [Sequence [Label ]]
493
499
if len (tuples ) == 0 :
494
500
if names is None :
495
501
raise TypeError ("Cannot infer number of levels from empty list" )
@@ -700,8 +706,13 @@ def levels(self):
700
706
return FrozenList (result )
701
707
702
708
def _set_levels (
703
- self , levels , level = None , copy = False , validate = True , verify_integrity = False
704
- ):
709
+ self ,
710
+ levels ,
711
+ level = None ,
712
+ copy : bool = False ,
713
+ validate : bool = True ,
714
+ verify_integrity : bool = False ,
715
+ ) -> None :
705
716
# This is NOT part of the levels property because it should be
706
717
# externally not allowed to set levels. User beware if you change
707
718
# _levels directly
@@ -719,10 +730,10 @@ def _set_levels(
719
730
)
720
731
else :
721
732
level_numbers = [self ._get_level_number (lev ) for lev in level ]
722
- new_levels = list (self ._levels )
733
+ new_levels_list = list (self ._levels )
723
734
for lev_num , lev in zip (level_numbers , levels ):
724
- new_levels [lev_num ] = ensure_index (lev , copy = copy )._shallow_copy ()
725
- new_levels = FrozenList (new_levels )
735
+ new_levels_list [lev_num ] = ensure_index (lev , copy = copy )._shallow_copy ()
736
+ new_levels = FrozenList (new_levels_list )
726
737
727
738
if verify_integrity :
728
739
new_codes = self ._verify_integrity (levels = new_levels )
@@ -875,8 +886,13 @@ def codes(self):
875
886
return self ._codes
876
887
877
888
def _set_codes (
878
- self , codes , level = None , copy = False , validate = True , verify_integrity = False
879
- ):
889
+ self ,
890
+ codes ,
891
+ level = None ,
892
+ copy : bool = False ,
893
+ validate : bool = True ,
894
+ verify_integrity : bool = False ,
895
+ ) -> None :
880
896
if validate :
881
897
if level is None and len (codes ) != self .nlevels :
882
898
raise ValueError ("Length of codes must match number of levels" )
@@ -890,11 +906,13 @@ def _set_codes(
890
906
)
891
907
else :
892
908
level_numbers = [self ._get_level_number (lev ) for lev in level ]
893
- new_codes = list (self ._codes )
909
+ new_codes_list = list (self ._codes )
894
910
for lev_num , level_codes in zip (level_numbers , codes ):
895
911
lev = self .levels [lev_num ]
896
- new_codes [lev_num ] = _coerce_indexer_frozen (level_codes , lev , copy = copy )
897
- new_codes = FrozenList (new_codes )
912
+ new_codes_list [lev_num ] = _coerce_indexer_frozen (
913
+ level_codes , lev , copy = copy
914
+ )
915
+ new_codes = FrozenList (new_codes_list )
898
916
899
917
if verify_integrity :
900
918
new_codes = self ._verify_integrity (codes = new_codes )
@@ -2435,7 +2453,7 @@ def _get_partial_string_timestamp_match_key(self, key):
2435
2453
if isinstance (key , str ) and self .levels [0 ]._supports_partial_string_indexing :
2436
2454
# Convert key '2016-01-01' to
2437
2455
# ('2016-01-01'[, slice(None, None, None)]+)
2438
- key = tuple ([ key ] + [ slice (None )] * (len (self .levels ) - 1 ) )
2456
+ key = ( key ,) + ( slice (None ),) * (len (self .levels ) - 1 )
2439
2457
2440
2458
if isinstance (key , tuple ):
2441
2459
# Convert (..., '2016-01-01', ...) in tuple to
@@ -3086,7 +3104,7 @@ def _update_indexer(idxr, indexer=indexer):
3086
3104
elif is_list_like (k ):
3087
3105
# a collection of labels to include from this level (these
3088
3106
# are or'd)
3089
- indexers = None
3107
+ indexers : Optional [ Int64Index ] = None
3090
3108
for x in k :
3091
3109
try :
3092
3110
idxrs = _convert_to_indexer (
0 commit comments