Esempio n. 1
0
    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)
Esempio n. 2
0
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 == {}
Esempio n. 3
0
    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)
Esempio n. 4
0
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)