1818
1919from pandas ._libs import algos as libalgos , index as libindex , lib
2020from pandas ._libs .hashtable import duplicated_int64
21- from pandas ._typing import AnyArrayLike , ArrayLike , Scalar
21+ from pandas ._typing import AnyArrayLike , Scalar
2222from pandas .compat .numpy import function as nv
2323from pandas .errors import PerformanceWarning , UnsortedIndexError
2424from pandas .util ._decorators import Appender , cache_readonly
5252 ensure_index ,
5353)
5454from pandas .core .indexes .frozen import FrozenList
55+ from pandas .core .indexes .numeric import Int64Index
5556import pandas .core .missing as missing
5657from pandas .core .sorting import (
5758 get_group_index ,
@@ -1180,7 +1181,7 @@ def _format_native_types(self, na_rep="nan", **kwargs):
11801181 sortorder = self .sortorder ,
11811182 verify_integrity = False ,
11821183 )
1183- return mi .values
1184+ return mi ._values
11841185
11851186 def format (
11861187 self ,
@@ -1419,7 +1420,7 @@ def is_monotonic_increasing(self) -> bool:
14191420 except TypeError :
14201421
14211422 # we have mixed types and np.lexsort is not happy
1422- return Index (self .values ).is_monotonic
1423+ return Index (self ._values ).is_monotonic
14231424
14241425 @cache_readonly
14251426 def is_monotonic_decreasing (self ) -> bool :
@@ -1612,7 +1613,7 @@ def to_flat_index(self):
16121613 ('bar', 'baz'), ('bar', 'qux')],
16131614 dtype='object')
16141615 """
1615- return Index (self .values , tupleize_cols = False )
1616+ return Index (self ._values , tupleize_cols = False )
16161617
16171618 @property
16181619 def is_all_dates (self ) -> bool :
@@ -1914,7 +1915,7 @@ def append(self, other):
19141915 arrays .append (label .append (appended ))
19151916 return MultiIndex .from_arrays (arrays , names = self .names )
19161917
1917- to_concat = (self .values ,) + tuple (k ._values for k in other )
1918+ to_concat = (self ._values ,) + tuple (k ._values for k in other )
19181919 new_tuples = np .concatenate (to_concat )
19191920
19201921 # if all(isinstance(x, MultiIndex) for x in other):
@@ -1924,7 +1925,7 @@ def append(self, other):
19241925 return Index (new_tuples )
19251926
19261927 def argsort (self , * args , ** kwargs ) -> np .ndarray :
1927- return self .values .argsort (* args , ** kwargs )
1928+ return self ._values .argsort (* args , ** kwargs )
19281929
19291930 @Appender (_index_shared_docs ["repeat" ] % _index_doc_kwargs )
19301931 def repeat (self , repeats , axis = None ):
@@ -2368,7 +2369,7 @@ def get_indexer(self, target, method=None, limit=None, tolerance=None):
23682369
23692370 # let's instead try with a straight Index
23702371 if method is None :
2371- return Index (self .values ).get_indexer (
2372+ return Index (self ._values ).get_indexer (
23722373 target , method = method , limit = limit , tolerance = tolerance
23732374 )
23742375
@@ -2831,7 +2832,8 @@ def convert_indexer(start, stop, step, indexer=indexer, codes=level_codes):
28312832 mapper = Series (indexer )
28322833 indexer = codes .take (ensure_platform_int (indexer ))
28332834 result = Series (Index (indexer ).isin (r ).nonzero ()[0 ])
2834- m = result .map (mapper )._ndarray_values
2835+ m = result .map (mapper )
2836+ m = np .asarray (m )
28352837
28362838 else :
28372839 m = np .zeros (len (codes ), dtype = bool )
@@ -2949,7 +2951,7 @@ def get_locs(self, seq):
29492951 n = len (self )
29502952 indexer = None
29512953
2952- def _convert_to_indexer (r ):
2954+ def _convert_to_indexer (r ) -> Int64Index :
29532955 # return an indexer
29542956 if isinstance (r , slice ):
29552957 m = np .zeros (n , dtype = bool )
@@ -3026,13 +3028,16 @@ def _update_indexer(idxr, indexer=indexer):
30263028 if indexer is None :
30273029 return np .array ([], dtype = np .int64 )
30283030
3031+ assert isinstance (indexer , Int64Index ), type (indexer )
30293032 indexer = self ._reorder_indexer (seq , indexer )
30303033
3031- return indexer ._ndarray_values
3034+ return indexer ._values
30323035
30333036 def _reorder_indexer (
3034- self , seq : Tuple [Union [Scalar , Iterable , AnyArrayLike ], ...], indexer : ArrayLike
3035- ) -> ArrayLike :
3037+ self ,
3038+ seq : Tuple [Union [Scalar , Iterable , AnyArrayLike ], ...],
3039+ indexer : Int64Index ,
3040+ ) -> Int64Index :
30363041 """
30373042 Reorder an indexer of a MultiIndex (self) so that the label are in the
30383043 same order as given in seq
@@ -3139,8 +3144,8 @@ def equals(self, other) -> bool:
31393144 if self .nlevels != other .nlevels :
31403145 return False
31413146
3142- other_vals = com .values_from_object (ensure_index ( other ) )
3143- return array_equivalent (self ._ndarray_values , other_vals )
3147+ other_vals = com .values_from_object (other )
3148+ return array_equivalent (self ._values , other_vals )
31443149
31453150 if self .nlevels != other .nlevels :
31463151 return False
@@ -3232,7 +3237,7 @@ def union(self, other, sort=None):
32323237 # TODO: Index.union returns other when `len(self)` is 0.
32333238
32343239 uniq_tuples = lib .fast_unique_multiple (
3235- [self ._ndarray_values , other ._ndarray_values ], sort = sort
3240+ [self ._values , other ._ndarray_values ], sort = sort
32363241 )
32373242
32383243 return MultiIndex .from_arrays (
@@ -3267,7 +3272,7 @@ def intersection(self, other, sort=False):
32673272 if self .equals (other ):
32683273 return self
32693274
3270- lvals = self ._ndarray_values
3275+ lvals = self ._values
32713276 rvals = other ._ndarray_values
32723277
32733278 uniq_tuples = None # flag whether _inner_indexer was succesful
@@ -3342,7 +3347,7 @@ def difference(self, other, sort=None):
33423347 indexer = indexer .take ((indexer != - 1 ).nonzero ()[0 ])
33433348
33443349 label_diff = np .setdiff1d (np .arange (this .size ), indexer , assume_unique = True )
3345- difference = this .values .take (label_diff )
3350+ difference = this ._values .take (label_diff )
33463351 if sort is None :
33473352 difference = sorted (difference )
33483353
@@ -3359,7 +3364,8 @@ def difference(self, other, sort=None):
33593364 def _convert_can_do_setop (self , other ):
33603365 result_names = self .names
33613366
3362- if not hasattr (other , "names" ):
3367+ if not isinstance (other , Index ):
3368+
33633369 if len (other ) == 0 :
33643370 other = MultiIndex (
33653371 levels = [[]] * self .nlevels ,
@@ -3456,8 +3462,8 @@ def _wrap_joined_index(self, joined, other):
34563462 @Appender (Index .isin .__doc__ )
34573463 def isin (self , values , level = None ):
34583464 if level is None :
3459- values = MultiIndex .from_tuples (values , names = self .names ).values
3460- return algos .isin (self .values , values )
3465+ values = MultiIndex .from_tuples (values , names = self .names )._values
3466+ return algos .isin (self ._values , values )
34613467 else :
34623468 num = self ._get_level_number (level )
34633469 levs = self .get_level_values (num )
0 commit comments