@@ -367,6 +367,7 @@ def _reconstruct_ea_result(
367
367
"""
368
368
Construct an ExtensionArray result from an ndarray result.
369
369
"""
370
+ dtype : BaseMaskedDtype | StringDtype
370
371
371
372
if isinstance (values .dtype , StringDtype ):
372
373
dtype = values .dtype
@@ -375,21 +376,17 @@ def _reconstruct_ea_result(
375
376
376
377
elif isinstance (values .dtype , BaseMaskedDtype ):
377
378
new_dtype = self ._get_result_dtype (values .dtype .numpy_dtype )
378
- # Troubleshooting 32bit build
379
- assert new_dtype == res_values .dtype , (new_dtype , res_values .dtype )
379
+ dtype = BaseMaskedDtype .from_numpy_dtype (new_dtype )
380
380
# error: Incompatible types in assignment (expression has type
381
- # "BaseMaskedDtype", variable has type "StringDtype")
382
- dtype = BaseMaskedDtype .from_numpy_dtype ( # type: ignore[assignment]
383
- new_dtype
384
- )
385
- cls = dtype .construct_array_type ()
381
+ # "Type[BaseMaskedArray]", variable has type "Type[BaseStringArray]")
382
+ cls = dtype .construct_array_type () # type: ignore[assignment]
386
383
return cls ._from_sequence (res_values , dtype = dtype )
387
384
388
- elif needs_i8_conversion (values . dtype ):
389
- assert res_values . dtype . kind != "f" # just to be on the safe side
390
- i8values = res_values .view ( "i8" )
391
- # error: Too many arguments for "ExtensionArray"
392
- return type ( values )( i8values , dtype = values . dtype ) # type: ignore[call-arg]
385
+ elif isinstance (values , ( DatetimeArray , TimedeltaArray , PeriodArray ) ):
386
+ # In to_cython_values we took a view as M8[ns]
387
+ assert res_values .dtype == "M8[ns]"
388
+ res_values = res_values . view ( values . _ndarray . dtype )
389
+ return values . _from_backing_data ( res_values )
393
390
394
391
raise NotImplementedError
395
392
0 commit comments