def test_crps_quadrature_consistent(self): def normcdf(*args, **kwdargs): return stats.norm(*args, **kwdargs).cdf dists = np.vectorize(normcdf)(loc=self.mu, scale=self.sig) crps = crps_quadrature(self.obs, dists, xmin=self.mu - 5 * self.sig, xmax=self.mu + 5 * self.sig) np.testing.assert_allclose(crps, self.expected, rtol=1e-4)
def test_crps_quadrature_args(o_dask, f_prob_dask, keep_attrs): # to speed things up o_dask = o_dask.isel(time=0, drop=True) f_prob_dask = f_prob_dask.isel(time=0, drop=True) xmin, xmax, tol = -10, 10, 1e-6 cdf_or_dist = norm actual = crps_quadrature(o_dask, cdf_or_dist, xmin, xmax, tol, keep_attrs=keep_attrs) expected = properscoring.crps_quadrature(o_dask, cdf_or_dist, xmin, xmax, tol) expected = xr.DataArray(expected, coords=o_dask.coords).mean() # test for numerical identity of xskillscore crps and crps assert_allclose(actual, expected) # test that xskillscore crps_ensemble returns chunks assert actual.chunks is not None # show that properscoring crps_ensemble returns no chunks assert expected.chunks is None if keep_attrs: assert actual.attrs == o_dask.attrs else: assert actual.attrs == {}
def test_crps_quadrature_consistent(self): def normcdf(*args, **kwdargs): return stats.norm(*args, **kwdargs).cdf dists = np.vectorize(normcdf)(loc=self.mu, scale=self.sig) crps = crps_quadrature(self.obs, dists, xmin=self.mu - 5 * self.sig, xmax=self.mu + 5 * self.sig) np.testing.assert_allclose(crps, self.expected, rtol=1e-4)
def test_xr_crps_quadrature_dask(o_dask): cdf_or_dist = norm actual = xr_crps_quadrature(o_dask, cdf_or_dist) expected = crps_quadrature(o_dask, cdf_or_dist) expected = xr.DataArray(expected, coords=o_dask.coords) # test for numerical identity of xr_crps and crps assert_allclose(actual, expected) # test that xr_crps_ensemble returns chunks assert actual.chunks is not None # show that crps_ensemble returns no chunks assert expected.chunks is None
def test_crps_quadrature_api_and_inputs(o, f_prob, keep_attrs, input_type, chunk_bool): """Test that crps_quadrature keeps attributes, chunking, input types and equals properscoring.crps_quadrature.""" o, f_prob = modify_inputs(o, f_prob, input_type, chunk_bool) # to speed things up o = o.isel(time=0, drop=True) cdf_or_dist = norm actual = crps_quadrature(o, cdf_or_dist, keep_attrs=keep_attrs) if input_type == "DataArray": # properscoring allows only DataArrays expected = properscoring.crps_quadrature(o, cdf_or_dist) expected = xr.DataArray(expected, coords=o.coords).mean() # test for numerical identity of xskillscore crps and properscoring crps assert_allclose(actual, expected) # test that returns chunks assert_chunk(actual, chunk_bool) # test that attributes are kept assert_keep_attrs(actual, o, keep_attrs) # test that input types equal output types assign_type_input_output(actual, o)