1515from xarray import DataArray , Dataset , IndexVariable , Variable , set_options
1616from xarray .core import dtypes , duck_array_ops , indexing
1717from xarray .core .common import full_like , ones_like , zeros_like
18+ from xarray .core .extension_array import PandasExtensionArray
1819from xarray .core .indexing import (
1920 BasicIndexer ,
2021 CopyOnWriteArray ,
@@ -2894,6 +2895,7 @@ class TestBackendIndexing:
28942895 @pytest .fixture (autouse = True )
28952896 def setUp (self ):
28962897 self .d = np .random .random ((10 , 3 )).astype (np .float64 )
2898+ self .cat = PandasExtensionArray (pd .Categorical (["a" , "b" ] * 5 ))
28972899
28982900 def check_orthogonal_indexing (self , v ):
28992901 assert np .allclose (v .isel (x = [8 , 3 ], y = [2 , 1 ]), self .d [[8 , 3 ]][:, [2 , 1 ]])
@@ -2913,6 +2915,14 @@ def test_NumpyIndexingAdapter(self):
29132915 dims = ("x" , "y" ), data = NumpyIndexingAdapter (NumpyIndexingAdapter (self .d ))
29142916 )
29152917
2918+ def test_extension_array_duck_array (self ):
2919+ lazy = LazilyIndexedArray (self .cat )
2920+ assert (lazy .get_duck_array ().array == self .cat ).all ()
2921+
2922+ def test_extension_array_duck_indexed (self ):
2923+ lazy = Variable (dims = ("x" ), data = LazilyIndexedArray (self .cat ))
2924+ assert (lazy [[0 , 1 , 5 ]] == ["a" , "b" , "b" ]).all ()
2925+
29162926 def test_LazilyIndexedArray (self ):
29172927 v = Variable (dims = ("x" , "y" ), data = LazilyIndexedArray (self .d ))
29182928 self .check_orthogonal_indexing (v )
@@ -2951,12 +2961,14 @@ def test_MemoryCachedArray(self):
29512961 def test_DaskIndexingAdapter (self ):
29522962 import dask .array as da
29532963
2954- da = da .asarray (self .d )
2955- v = Variable (dims = ("x" , "y" ), data = DaskIndexingAdapter (da ))
2964+ dask_array = da .asarray (self .d )
2965+ v = Variable (dims = ("x" , "y" ), data = DaskIndexingAdapter (dask_array ))
29562966 self .check_orthogonal_indexing (v )
29572967 self .check_vectorized_indexing (v )
29582968 # doubly wrapping
2959- v = Variable (dims = ("x" , "y" ), data = CopyOnWriteArray (DaskIndexingAdapter (da )))
2969+ v = Variable (
2970+ dims = ("x" , "y" ), data = CopyOnWriteArray (DaskIndexingAdapter (dask_array ))
2971+ )
29602972 self .check_orthogonal_indexing (v )
29612973 self .check_vectorized_indexing (v )
29622974
0 commit comments