1919
2020from pandas ._libs import algos as libalgos , index as libindex , lib
2121from pandas ._libs .hashtable import duplicated_int64
22- from pandas ._typing import AnyArrayLike , Scalar
22+ from pandas ._typing import AnyArrayLike , Label , Scalar
2323from pandas .compat .numpy import function as nv
2424from pandas .errors import InvalidIndexError , PerformanceWarning , UnsortedIndexError
2525from pandas .util ._decorators import Appender , cache_readonly , doc
@@ -449,7 +449,12 @@ def from_arrays(cls, arrays, sortorder=None, names=lib.no_default) -> "MultiInde
449449 )
450450
451451 @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+ ):
453458 """
454459 Convert list of tuples to MultiIndex.
455460
@@ -490,6 +495,7 @@ def from_tuples(cls, tuples, sortorder=None, names=None):
490495 elif is_iterator (tuples ):
491496 tuples = list (tuples )
492497
498+ arrays : List [Sequence [Label ]]
493499 if len (tuples ) == 0 :
494500 if names is None :
495501 raise TypeError ("Cannot infer number of levels from empty list" )
@@ -700,8 +706,13 @@ def levels(self):
700706 return FrozenList (result )
701707
702708 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 :
705716 # This is NOT part of the levels property because it should be
706717 # externally not allowed to set levels. User beware if you change
707718 # _levels directly
@@ -719,10 +730,10 @@ def _set_levels(
719730 )
720731 else :
721732 level_numbers = [self ._get_level_number (lev ) for lev in level ]
722- new_levels = list (self ._levels )
733+ new_levels_list = list (self ._levels )
723734 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 )
726737
727738 if verify_integrity :
728739 new_codes = self ._verify_integrity (levels = new_levels )
@@ -875,8 +886,13 @@ def codes(self):
875886 return self ._codes
876887
877888 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 :
880896 if validate :
881897 if level is None and len (codes ) != self .nlevels :
882898 raise ValueError ("Length of codes must match number of levels" )
@@ -890,11 +906,13 @@ def _set_codes(
890906 )
891907 else :
892908 level_numbers = [self ._get_level_number (lev ) for lev in level ]
893- new_codes = list (self ._codes )
909+ new_codes_list = list (self ._codes )
894910 for lev_num , level_codes in zip (level_numbers , codes ):
895911 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 )
898916
899917 if verify_integrity :
900918 new_codes = self ._verify_integrity (codes = new_codes )
@@ -2435,7 +2453,7 @@ def _get_partial_string_timestamp_match_key(self, key):
24352453 if isinstance (key , str ) and self .levels [0 ]._supports_partial_string_indexing :
24362454 # Convert key '2016-01-01' to
24372455 # ('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 )
24392457
24402458 if isinstance (key , tuple ):
24412459 # Convert (..., '2016-01-01', ...) in tuple to
@@ -3086,7 +3104,7 @@ def _update_indexer(idxr, indexer=indexer):
30863104 elif is_list_like (k ):
30873105 # a collection of labels to include from this level (these
30883106 # are or'd)
3089- indexers = None
3107+ indexers : Optional [ Int64Index ] = None
30903108 for x in k :
30913109 try :
30923110 idxrs = _convert_to_indexer (
0 commit comments