1111from contextlib import suppress
1212from functools import cached_property
1313from typing import (
14- Dict , Generic , Hashable , Optional , Tuple , Type , TypeVar , cast
14+ Dict , Generic , Hashable , List , Optional , Tuple , Type , TypeVar , cast
1515)
1616
1717import numpy as np
@@ -264,7 +264,10 @@ def unravel_index(
264264 def ravel_index (self , indices : CFGridIndex ) -> int :
265265 return int (np .ravel_multi_index (indices , self .topology .shape ))
266266
267- def get_grid_kind_and_size (self , data_array : xr .DataArray ) -> Tuple [CFGridKind , int ]:
267+ def get_grid_kind_and_size (
268+ self ,
269+ data_array : xr .DataArray ,
270+ ) -> Tuple [CFGridKind , int ]:
268271 expected = {self .topology .y_dimension , self .topology .x_dimension }
269272 dims = set (data_array .dims )
270273 if dims .issuperset (expected ):
@@ -277,13 +280,27 @@ def selector_for_index(self, index: CFGridIndex) -> Dict[Hashable, int]:
277280 y , x = index
278281 return {self .topology .y_dimension : y , self .topology .x_dimension : x }
279282
280- def drop_geometry (self ) -> xr .Dataset :
281- dataset = self .dataset .drop_vars ([
283+ def get_all_geometry_names (self ) -> List [Hashable ]:
284+ # Grid datasets contain latitude and longitude variables
285+ # plus optional bounds variables.
286+ names = [
282287 self .topology .longitude_name ,
283288 self .topology .latitude_name ,
284- ])
285- dataset .attrs .pop ('Conventions' , None )
289+ ]
286290
291+ bounds_names : List [Optional [Hashable ]] = [
292+ self .topology .longitude .attrs .get ('bounds' , None ),
293+ self .topology .latitude .attrs .get ('bounds' , None ),
294+ ]
295+ for bounds_name in bounds_names :
296+ if bounds_name is not None and bounds_name in self .dataset .variables :
297+ names .append (bounds_name )
298+
299+ return names
300+
301+ def drop_geometry (self ) -> xr .Dataset :
302+ dataset = super ().drop_geometry ()
303+ dataset .attrs .pop ('Conventions' , None )
287304 return dataset
288305
289306 def make_linear (self , data_array : xr .DataArray ) -> xr .DataArray :
0 commit comments