Open
Description
Yet another bug with .cf.add_bounds
... This one was already present before the 2D addition, but it would have been quite infrequent with 1D coordinates.
The interpolation / extrapolation estimates are not aware of the cyclic nature of the longitude.
MWE:
import xarray as xr
import cf_xarray
ds = xr.Dataset(
{'data': (('x', 'y'), np.ones((3, 3)))},
coords={
'x': [1, 2, 3],
'y': [1, 2, 3],
'lon': (('x',), [170, -170, -150], {'units': 'degrees_east'}),
'lat': (('y',), [-10, 0, 10], {'units': 'degrees_north'}),
},
)
ds.cf.add_bounds(('lon', 'lat')).lon_bounds
yields:
array([[ 340., 0.],
[ 0., -340.],
[-160., -140.]])
but we would expect:
array([[ 160., 0.],
[ 0., -160.],
[-160., -140.]])
Sadly, a quick internet search hasn't given me any pointers towards tools that already take this into account, except for projection-based tools (like pyproj).
We could have a check for "longitude" that looks for jumps and wraps the coordinates, but that jump threshold would be arbitrary. It's nonetheless the simplest way out I see, before parsing grid_mapping
into pyproj
objects.