id,node_id,number,title,user,state,locked,assignee,milestone,comments,created_at,updated_at,closed_at,author_association,active_lock_reason,draft,pull_request,body,reactions,performed_via_github_app,state_reason,repo,type 930918574,MDExOlB1bGxSZXF1ZXN0Njc4NTA3NDMw,5540,Cache some properties,14371165,open,0,,,4,2021-06-27T12:22:16Z,2022-07-10T14:34:34Z,,MEMBER,,1,pydata/xarray/pulls/5540,"Cache some small properties that are rather slow to calculate but doesn't change that often. Questions that needs to be resolved: - [ ] Can these properties change during the lifetime of the class? If so the cache needs to be reset when that happens. - [ ] Related to #3514 - [ ] Tests added - [ ] Passes `pre-commit run --all-files` - [ ] User visible changes (including notable bug fixes) are documented in `whats-new.rst` - [ ] New functions/methods are listed in `api.rst` Notes * Mixin classes makes it difficult to cache properties. For example `ndim` in `NdimSizeLenMixin` cannot be easily be replaced with `cache_readonly`.","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/5540/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,,13221727,pull 597785475,MDU6SXNzdWU1OTc3ODU0NzU=,3962,"Interpolation - Support extrapolation method ""clip""",14371165,open,0,,,4,2020-04-10T09:07:13Z,2022-05-02T13:42:24Z,,MEMBER,,,,"Hello, I would like an option in `da.interp() `that instead of returning NaNs during extrapolation returns the data corresponding to the end of the breakpoint data set range. One way to do this is to limit the new coordinates to the array coordinates minimum and maximum value, I did a simple example with this solution down below. I think this is a rather safe way as we are just modifying the inputs to all the various interpolation classes that xarray is using at the moment. But it does look a little weird when printing the extrapolated value, the coordinates shows the limited value instead of the requested coordinates. Maybe this can be handled elegantly somewhere in the source code? MATLAB uses this quite frequently in their interpolation functions: * https://mathworks.com/help/simulink/ug/methods-for-estimating-missing-points.html * https://mathworks.com/help/simulink/slref/2dlookuptable.html #### MCVE Code Sample ```python import numpy as np import xarray as xr def interp(da, coords, extrapolation='clip'): """""" Linear interpolation that clips the inputs to the coords min and max value. Parameters ---------- da : DataArray DataArray to interpolate. coords : dict Coordinates for the interpolated value. """""" if extrapolation == 'clip': for k, v in da.coords.items(): coords[k] = np.maximum(coords[k], np.min(v.values)) coords[k] = np.minimum(coords[k], np.max(v.values)) return da.interp(coords) # Create coordinates: x = np.linspace(1000, 6000, 4) y = np.linspace(100, 1200, 3) # Create data: X = np.meshgrid(*[x, y], indexing='ij') data = X[0] * X[1] # Create DataArray: da = xr.DataArray(data=data, coords=[('x', x), ('y', y)], name='data') # Attempt to extrapolate: datai = interp(da, {'x': 7000, 'y': 375}) ``` #### Expected Output ````python print(datai) array(2250000.) Coordinates: x float64 6e+03 y float64 375.0 ```` #### Versions
Output of `xr.show_versions()` INSTALLED VERSIONS ------------------ commit: None python: 3.7.7 (default, Mar 23 2020, 23:19:08) [MSC v.1916 64 bit (AMD64)] python-bits: 64 OS: Windows OS-release: 10 machine: AMD64 processor: Intel64 Family 6 Model 58 Stepping 9, GenuineIntel byteorder: little LC_ALL: None LANG: en LOCALE: None.None libhdf5: 1.10.4 libnetcdf: None xarray: 0.15.0 pandas: 1.0.3 numpy: 1.18.1 scipy: 1.4.1 netCDF4: None pydap: None h5netcdf: None h5py: 2.10.0 Nio: None zarr: None cftime: None nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: 1.3.2 dask: 2.13.0 distributed: 2.13.0 matplotlib: 3.1.3 cartopy: None seaborn: 0.10.0 numbagg: None setuptools: 46.1.3.post20200330 pip: 20.0.2 conda: 4.8.3 pytest: 5.4.1 IPython: 7.13.0 sphinx: 2.4.4
","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/3962/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,,13221727,issue