@@ -1480,12 +1480,14 @@ def _id_index(self) -> dict[int, T_PandasOrXarrayIndex]:
1480
1480
@property
1481
1481
def _id_coord_names (self ) -> dict [int , tuple [Hashable , ...]]:
1482
1482
if self .__id_coord_names is None :
1483
- id_coord_names : Mapping [int , list [Hashable ]] = defaultdict (list )
1484
- for k , v in self ._coord_name_id .items ():
1485
- id_coord_names [v ].append (k )
1486
- self .__id_coord_names = {k : tuple (v ) for k , v in id_coord_names .items ()}
1487
-
1483
+ self ._create_id_coord_names ()
1488
1484
return self .__id_coord_names
1485
+
1486
+ def _create_id_coord_names (self ) -> None :
1487
+ id_coord_names : Mapping [int , list [Hashable ]] = defaultdict (list )
1488
+ for k , v in self ._coord_name_id .items ():
1489
+ id_coord_names [v ].append (k )
1490
+ self .__id_coord_names = {k : tuple (v ) for k , v in id_coord_names .items ()}
1489
1491
1490
1492
@property
1491
1493
def variables (self ) -> Mapping [Hashable , Variable ]:
@@ -1771,6 +1773,25 @@ def check_variables():
1771
1773
1772
1774
return not not_equal
1773
1775
1776
+ def _apply_indexes_isel (
1777
+ indexes : Indexes [Index ],
1778
+ args : Mapping [Any , Any ],
1779
+ ):
1780
+ new_indexes : dict [Hashable , Index ] = {k : v for k , v in indexes .items ()}
1781
+ new_index_variables : dict [Hashable , Variable ] = {}
1782
+ # for index, index_vars in indexes.group_by_index():
1783
+ for index in indexes ._id_index .values ():
1784
+ # index = indexes._id_index[i]
1785
+ index_dims = (index .index .name ,)
1786
+ index_args = {k : v for k , v in args .items () if k in index_dims }
1787
+ if index_args :
1788
+ new_index = index .isel (index_args )
1789
+ if new_index is not None :
1790
+ new_indexes .update ({k : new_index for k in index_vars })
1791
+ new_index_vars = new_index .create_variables (index_vars )
1792
+ new_index_variables .update (new_index_vars )
1793
+
1794
+ return new_indexes , new_index_variables
1774
1795
1775
1796
def _apply_indexes (
1776
1797
indexes : Indexes [Index ],
@@ -1800,7 +1821,7 @@ def isel_indexes(
1800
1821
indexes : Indexes [Index ],
1801
1822
indexers : Mapping [Any , Any ],
1802
1823
) -> tuple [dict [Hashable , Index ], dict [Hashable , Variable ]]:
1803
- return _apply_indexes (indexes , indexers , "isel" )
1824
+ return _apply_indexes_isel (indexes , indexers )
1804
1825
1805
1826
1806
1827
def roll_indexes (
0 commit comments