@@ -1480,13 +1480,15 @@ 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
1489
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 ()}
1491
+
1490
1492
@property
1491
1493
def variables (self ) -> Mapping [Hashable , Variable ]:
1492
1494
return Frozen (self ._variables )
@@ -1772,6 +1774,30 @@ def check_variables():
1772
1774
return not not_equal
1773
1775
1774
1776
1777
+ def _apply_indexes_isel (
1778
+ indexes : dict [Hashable , Index ],
1779
+ coords ,
1780
+ args : Mapping [Any , Any ],
1781
+ ):
1782
+ new_indexes : dict [Hashable , Index ] = {k : v for k , v in indexes .items ()}
1783
+ new_index_variables : dict [Hashable , Variable ] = {}
1784
+ for name , index in indexes .items ():
1785
+ index_args = {k : v for k , v in args .items () if k == name }
1786
+ index_dims = (name ,)
1787
+ index_vars = {name : coords [name ]}
1788
+ if index_args :
1789
+ new_index = index .isel (index_args )
1790
+ if new_index is not None :
1791
+ new_indexes .update ({k : new_index for k in index_vars })
1792
+ new_index_vars = new_index .create_variables (index_vars )
1793
+ new_index_variables .update (new_index_vars )
1794
+ new_index_variables .update (new_index_vars )
1795
+ else :
1796
+ for k in index_vars :
1797
+ new_indexes .pop (k , None )
1798
+ return new_indexes , new_index_variables
1799
+
1800
+
1775
1801
def _apply_indexes (
1776
1802
indexes : Indexes [Index ],
1777
1803
args : Mapping [Any , Any ],
@@ -1797,10 +1823,11 @@ def _apply_indexes(
1797
1823
1798
1824
1799
1825
def isel_indexes (
1800
- indexes : Indexes [Index ],
1826
+ indexes ,
1827
+ coords ,
1801
1828
indexers : Mapping [Any , Any ],
1802
1829
) -> tuple [dict [Hashable , Index ], dict [Hashable , Variable ]]:
1803
- return _apply_indexes (indexes , indexers , "isel" )
1830
+ return _apply_indexes_isel (indexes , coords , indexers )
1804
1831
1805
1832
1806
1833
def roll_indexes (
0 commit comments