def test_interp(h, wd, ws, h_i, wd_l, ws_k): ds = xr.Dataset({ 'TI': 1, 'P': 1, 'XYHLK': (['x', 'y', 'h', 'wd', 'ws'], np.random.rand(10, 20, len(h), len(wd), len(ws))), 'XYHL': (['x', 'y', 'h', 'wd'], np.random.rand(10, 20, len(h), len(wd))), 'XYHK': (['x', 'y', 'h', 'ws'], np.random.rand(10, 20, len(h), len(ws))), 'K': (['ws'], np.random.rand(len(ws))), 'L': (['wd'], np.random.rand(len(wd))), 'KL': (['wd', 'ws'], np.random.rand(len(wd), len(ws))), 'XY': (['x', 'y'], np.random.rand(10, 20)), 'H': (['h'], np.random.rand(len(h))), 'XYH': (['x', 'y', 'h'], np.random.rand(10, 20, len(h))), 'XYL': (['x', 'y', 'wd'], np.random.rand(10, 20, len(wd))), 'XYK': (['x', 'y', 'ws'], np.random.rand(10, 20, len(ws))), 'I': (['i'], np.random.rand(2)), 'IL': (['i', 'wd'], np.random.rand(2, len(wd))), 'IK': (['i', 'ws'], np.random.rand(2, len(ws))), 'ILK': (['i', 'wd', 'ws'], np.random.rand(2, len(wd), len(ws))), }, coords={'x': np.linspace(0, 100, 10), 'y': np.linspace(200, 300, 20), 'h': h, 'wd': wd, 'ws': ws, 'i': [0, 1]} ) site = XRSite(ds) lw = LocalWind(x_i=[25, 50], y_i=[225, 250], h_i=h_i, wd=wd_l, ws=ws_k, wd_bin_size=1) for n in ['XYHLK', 'XYHL', 'XYHK', 'K', 'L', 'KL', 'XY', 'H', 'XYH', 'XYL', 'XYK', 'I', 'IL', 'IK', 'ILK']: ip1 = site.interp(site.ds[n], lw.coords) ip2 = ds[n].sel_interp_all(lw.coords) npt.assert_array_equal(ip1.shape, ip2.shape) npt.assert_array_almost_equal(ip1.data, ip2.data)
def test_interp_special_cases(): wd = np.arange(5) ws = np.arange(10) ds = xr.Dataset({ 'TI': (['i', 'wd', 'ws'], np.random.rand(10, len(wd), len(ws))), 'P': 1 }, coords={'i': np.arange(10), 'wd': wd, 'ws': ws} ) site = XRSite(ds) with pytest.raises(ValueError, match=r"Number of points, i\(=10\), in site data variable, TI, must match "): lw = LocalWind(x_i=[25, 50], y_i=[225, 250], h_i=110, wd=wd, ws=ws, wd_bin_size=1) site.interp(site.ds.TI, lw.coords) x = y = np.arange(10) lw = LocalWind(x_i=x, y_i=y, h_i=110, wd=wd, ws=ws, wd_bin_size=1) ip1 = site.interp(site.ds.TI, lw.coords) ip2 = ds.TI.sel_interp_all(lw.coords) npt.assert_array_equal(ip1.shape, ip2.shape) npt.assert_array_almost_equal(ip1.data, ip2.data)