def run_interpolator(interpolator, filename): """Testing an interpolation method.""" grid = load_data() lon = np.arange(-180, 180, 1 / 3.0) + 1 / 3.0 lat = np.arange(-90, 90, 1 / 3.0) + 1 / 3.0 time = 898500 + 3 x, y, t = np.meshgrid(lon, lat, time, indexing="ij") z0 = core.trivariate_float64(grid, x.flatten(), y.flatten(), t.flatten(), interpolator, num_threads=0) z1 = core.trivariate_float64(grid, x.flatten(), y.flatten(), t.flatten(), interpolator, num_threads=1) shape = (len(lon), len(lat)) z0 = np.ma.fix_invalid(z0) z1 = np.ma.fix_invalid(z1) assert np.all(z1 == z0) if HAVE_PLT: plot(x.reshape(shape), y.reshape(shape), z0.reshape(shape), filename) return z0
def test_grid3d_z_method(): """Test of the interpolation method used on Z-axis""" grid = load_data(temporal_axis=True) interpolator = core.TemporalBilinear3D() lon = np.arange(-180, 180, 1 / 3.0) + 1 / 3.0 lat = np.arange(-90, 90 + 1, 1 / 3.0) + 1 / 3.0 time = np.array([ netCDF4.num2date(898500 + 3, "hours since 1900-01-01 00:00:0.0", only_use_cftime_datetimes=False, only_use_python_datetimes=True) ]).astype("datetime64[h]").astype("int64") x, y, t = np.meshgrid(lon, lat, time, indexing="ij") z0 = core.trivariate_float64(grid, x.flatten(), y.flatten(), t.flatten(), interpolator, num_threads=0) z1 = core.trivariate_float64(grid, x.flatten(), y.flatten(), t.flatten(), interpolator, z_method="linear", num_threads=0) z0 = np.ma.fix_invalid(z0) z1 = np.ma.fix_invalid(z1) assert np.all(z0 == z1) z1 = core.trivariate_float64(grid, x.flatten(), y.flatten(), t.flatten(), interpolator, z_method="nearest", num_threads=0) z1 = np.ma.fix_invalid(z1) assert np.all(z0 != z1) with pytest.raises(ValueError): core.trivariate_float64(grid, x.flatten(), y.flatten(), t.flatten(), interpolator, z_method="NEAREST", num_threads=0)
def test_grid3d_bounds_error(): """Test of the detection on interpolation outside bounds""" grid = load_data() interpolator = core.Bilinear3D() lon = np.arange(-180, 180, 1 / 3.0) + 1 / 3.0 lat = np.arange(-90, 90 + 1, 1 / 3.0) + 1 / 3.0 time = 898500 + 3 x, y, t = np.meshgrid(lon, lat, time, indexing="ij") core.trivariate_float64(grid, x.flatten(), y.flatten(), t.flatten(), interpolator, num_threads=0) with pytest.raises(ValueError): core.trivariate_float64(grid, x.flatten(), y.flatten(), t.flatten(), interpolator, bounds_error=True, num_threads=0)