@@ -479,10 +479,12 @@ def _validate_fill_value(self, fill_value):
479
479
f"Got '{ str (fill_value )} '."
480
480
)
481
481
try :
482
- fill_value = self ._validate_scalar (fill_value )
482
+ return self ._validate_scalar (fill_value )
483
483
except TypeError as err :
484
+ if "Cannot compare tz-naive and tz-aware" in str (err ):
485
+ # tzawareness-compat
486
+ raise
484
487
raise ValueError (msg ) from err
485
- return self ._unbox (fill_value , setitem = True )
486
488
487
489
def _validate_shift_value (self , fill_value ):
488
490
# TODO(2.0): once this deprecation is enforced, use _validate_fill_value
@@ -511,7 +513,14 @@ def _validate_shift_value(self, fill_value):
511
513
512
514
return self ._unbox (fill_value , setitem = True )
513
515
514
- def _validate_scalar (self , value , allow_listlike : bool = False ):
516
+ def _validate_scalar (
517
+ self ,
518
+ value ,
519
+ * ,
520
+ allow_listlike : bool = False ,
521
+ setitem : bool = True ,
522
+ unbox : bool = True ,
523
+ ):
515
524
"""
516
525
Validate that the input value can be cast to our scalar_type.
517
526
@@ -521,6 +530,11 @@ def _validate_scalar(self, value, allow_listlike: bool = False):
521
530
allow_listlike: bool, default False
522
531
When raising an exception, whether the message should say
523
532
listlike inputs are allowed.
533
+ setitem : bool, default True
534
+ Whether to check compatibility with setitem strictness.
535
+ unbox : bool, default True
536
+ Whether to unbox the result before returning. Note: unbox=False
537
+ skips the setitem compatibility check.
524
538
525
539
Returns
526
540
-------
@@ -546,7 +560,12 @@ def _validate_scalar(self, value, allow_listlike: bool = False):
546
560
msg = self ._validation_error_message (value , allow_listlike )
547
561
raise TypeError (msg )
548
562
549
- return value
563
+ if not unbox :
564
+ # NB: In general NDArrayBackedExtensionArray will unbox here;
565
+ # this option exists to prevent a performance hit in
566
+ # TimedeltaIndex.get_loc
567
+ return value
568
+ return self ._unbox_scalar (value , setitem = setitem )
550
569
551
570
def _validation_error_message (self , value , allow_listlike : bool = False ) -> str :
552
571
"""
@@ -611,7 +630,7 @@ def _validate_listlike(self, value, allow_object: bool = False):
611
630
612
631
def _validate_searchsorted_value (self , value ):
613
632
if not is_list_like (value ):
614
- value = self ._validate_scalar (value , True )
633
+ return self ._validate_scalar (value , allow_listlike = True , setitem = False )
615
634
else :
616
635
value = self ._validate_listlike (value )
617
636
@@ -621,12 +640,7 @@ def _validate_setitem_value(self, value):
621
640
if is_list_like (value ):
622
641
value = self ._validate_listlike (value )
623
642
else :
624
- value = self ._validate_scalar (value , True )
625
-
626
- return self ._unbox (value , setitem = True )
627
-
628
- def _validate_insert_value (self , value ):
629
- value = self ._validate_scalar (value )
643
+ return self ._validate_scalar (value , allow_listlike = True )
630
644
631
645
return self ._unbox (value , setitem = True )
632
646
0 commit comments