def test_nan_forecasts_consistency(self): rs = np.random.RandomState(123) # make some forecasts entirely missing self.forecasts[rs.rand(*self.obs.shape) > 0.5] = np.nan assert_allclose(crps_ensemble(self.obs, self.forecasts), _crps_ensemble_vectorized(self.obs, self.forecasts)) # forecasts shaped like obs forecasts = self.forecasts[:, 0] assert_allclose(crps_ensemble(self.obs, forecasts), _crps_ensemble_vectorized(self.obs, forecasts))
def test_crps_toy_examples(self): examples = [ (0, 0, 0.0), (0, 1, 1.0), (-1, 0, 1.0), (0, [-1], 1.0), (0, [0], 0.0), (0, [1], 1.0), (0, [0, 0], 0.0), (0, [0, 1], 0.25), (0, [1, 0], 0.25), (0, [1, 1], 1.0), (2, [0, 1], 1.25), (0, [-1, 1], 0.5), (0, [0, 0, 1], 1.0 / 9), (1, [0, 0, 1], 4.0 / 9), (0, [-1, 0, 0, 1], 1.0 / 8), ] for x, ensemble, expected in examples: self.assertAlmostEqual(crps_ensemble(x, ensemble), expected) self.assertAlmostEqual(_crps_ensemble_vectorized(x, ensemble), expected)
def test_nan_observations_consistency(self): rs = np.random.RandomState(123) self.obs[rs.rand(*self.obs.shape) > 0.5] = np.nan assert_allclose( crps_ensemble(self.obs, self.forecasts), _crps_ensemble_vectorized(self.obs, self.forecasts))
def test_high_dimensional_consistency(self): obs = np.random.randn(10, 20) forecasts = np.random.randn(10, 20, 5) assert_allclose(crps_ensemble(obs, forecasts), _crps_ensemble_vectorized(obs, forecasts))
def test_nan_observations_consistency(self): rs = np.random.RandomState(123) self.obs[rs.rand(*self.obs.shape) > 0.5] = np.nan assert_allclose(crps_ensemble(self.obs, self.forecasts), _crps_ensemble_vectorized(self.obs, self.forecasts))