11
11
12
12
from pandas .core .dtypes .generic import ABCCategoricalIndex , ABCDateOffset , ABCIndexClass
13
13
14
- from pandas ._typing import OrderedType
14
+ from pandas ._typing import Ordered
15
15
16
16
from .base import ExtensionDtype
17
17
from .inference import is_bool , is_list_like
@@ -221,7 +221,11 @@ class CategoricalDtype(PandasExtensionDtype, ExtensionDtype):
221
221
_metadata = ("categories" , "ordered" , "_ordered_from_sentinel" )
222
222
_cache = {} # type: Dict[str_type, PandasExtensionDtype]
223
223
224
- def __init__ (self , categories = None , ordered : OrderedType = ordered_sentinel ):
224
+ def __init__ (self ,
225
+ categories = None ,
226
+ ordered : Union [Ordered , object ] = ordered_sentinel ):
227
+ # TODO(GH26403): Set type of ordered to Ordered
228
+ ordered = cast (Ordered , ordered )
225
229
self ._finalize (categories , ordered , fastpath = False )
226
230
227
231
@classmethod
@@ -234,7 +238,7 @@ def _from_fastpath(
234
238
235
239
@classmethod
236
240
def _from_categorical_dtype (
237
- cls , dtype : "CategoricalDtype" , categories = None , ordered : OrderedType = None
241
+ cls , dtype : "CategoricalDtype" , categories = None , ordered : Ordered = None
238
242
) -> "CategoricalDtype" :
239
243
if categories is ordered is None :
240
244
return dtype
@@ -336,7 +340,7 @@ def _from_values_or_dtype(
336
340
return dtype
337
341
338
342
def _finalize (
339
- self , categories , ordered : OrderedType , fastpath : bool = False
343
+ self , categories , ordered : Ordered , fastpath : bool = False
340
344
) -> None :
341
345
342
346
if ordered is not None and ordered is not ordered_sentinel :
@@ -422,7 +426,7 @@ def __repr__(self):
422
426
return tpl .format (data , self ._ordered )
423
427
424
428
@staticmethod
425
- def _hash_categories (categories , ordered : OrderedType = True ) -> int :
429
+ def _hash_categories (categories , ordered : Ordered = True ) -> int :
426
430
from pandas .core .util .hashing import (
427
431
hash_array ,
428
432
_combine_hash_arrays ,
@@ -474,7 +478,7 @@ def construct_array_type(cls):
474
478
return Categorical
475
479
476
480
@staticmethod
477
- def validate_ordered (ordered : OrderedType ) -> None :
481
+ def validate_ordered (ordered : Ordered ) -> None :
478
482
"""
479
483
Validates that we have a valid ordered parameter. If
480
484
it is not a boolean, a TypeError will be raised.
@@ -552,8 +556,9 @@ def update_dtype(
552
556
"got {dtype!r}"
553
557
).format (dtype = dtype )
554
558
raise ValueError (msg )
555
-
556
- dtype = cast (CategoricalDtype , dtype )
559
+ else :
560
+ # from here on, dtype is a CategoricalDtype
561
+ dtype = cast (CategoricalDtype , dtype )
557
562
558
563
# dtype is CDT: keep current categories/ordered if None
559
564
new_categories = dtype .categories
@@ -586,7 +591,7 @@ def categories(self):
586
591
return self ._categories
587
592
588
593
@property
589
- def ordered (self ) -> OrderedType :
594
+ def ordered (self ) -> Ordered :
590
595
"""
591
596
Whether the categories have an ordered relationship.
592
597
"""
0 commit comments