@@ -1593,6 +1593,40 @@ def test_isel_fancy_convert_index_variable(self) -> None:
1593
1593
assert "x" not in actual .xindexes
1594
1594
assert not isinstance (actual .x .variable , IndexVariable )
1595
1595
1596
+ def test_isel_multicoord_index (self ) -> None :
1597
+ # regression test https://github.com/pydata/xarray/issues/10063
1598
+ # isel on a multi-coordinate index should return a unique index associated
1599
+ # to each coordinate
1600
+ class MultiCoordIndex (xr .Index ):
1601
+ def __init__ (self , idx1 , idx2 ):
1602
+ self .idx1 = idx1
1603
+ self .idx2 = idx2
1604
+
1605
+ @classmethod
1606
+ def from_variables (cls , variables , * , options = None ):
1607
+ idx1 = PandasIndex .from_variables (
1608
+ {"x" : variables ["x" ]}, options = options
1609
+ )
1610
+ idx2 = PandasIndex .from_variables (
1611
+ {"y" : variables ["y" ]}, options = options
1612
+ )
1613
+
1614
+ return cls (idx1 , idx2 )
1615
+
1616
+ def create_variables (self , variables = None ):
1617
+ return {** self .idx1 .create_variables (), ** self .idx2 .create_variables ()}
1618
+
1619
+ def isel (self , indexers ):
1620
+ idx1 = self .idx1 .isel ({"x" : indexers .get ("x" , slice (None ))})
1621
+ idx2 = self .idx2 .isel ({"y" : indexers .get ("y" , slice (None ))})
1622
+ return MultiCoordIndex (idx1 , idx2 )
1623
+
1624
+ coords = xr .Coordinates (coords = {"x" : [0 , 1 ], "y" : [1 , 2 ]}, indexes = {})
1625
+ ds = xr .Dataset (coords = coords ).set_xindex (["x" , "y" ], MultiCoordIndex )
1626
+
1627
+ ds2 = ds .isel (x = slice (None ), y = slice (None ))
1628
+ assert ds2 .xindexes ["x" ] is ds2 .xindexes ["y" ]
1629
+
1596
1630
def test_sel (self ) -> None :
1597
1631
data = create_test_data ()
1598
1632
int_slicers = {"dim1" : slice (None , None , 2 ), "dim2" : slice (2 ), "dim3" : slice (3 )}
0 commit comments