diff --git a/extreme_estimator/margin_fits/gev/gev_params.py b/extreme_estimator/margin_fits/gev/gev_params.py index 88f48c55b9a738513a2f2c3181da15ec63b88912..769df9fdbef859cf5f3fa552dfa30d01ef335195 100644 --- a/extreme_estimator/margin_fits/gev/gev_params.py +++ b/extreme_estimator/margin_fits/gev/gev_params.py @@ -70,14 +70,18 @@ class GevParams(ExtremeParams): @property def mean(self): - if self.shape >= 1: + if self.has_undefined_parameters: + return np.nan + elif self.shape >= 1: return np.inf else: return self.location + self.scale * (self.g(k=1) - 1) / self.shape @property def variance(self): - if self.shape >= 0.5: + if self.has_undefined_parameters: + return np.nan + elif self.shape >= 0.5: return np.inf else: return ((self.scale / self.shape) ** 2) * (self.g(k=2) - self.g(k=1) ** 2) diff --git a/test/test_extreme_estimator/test_margin_fits/test_gev/test_gev_params.py b/test/test_extreme_estimator/test_margin_fits/test_gev/test_gev_params.py index 39d3da709d0e2ab155cdaf7f21ab601e5094bc76..0b19d97afc17cd34e1a00bf3ef2dc75539e8b059 100644 --- a/test/test_extreme_estimator/test_margin_fits/test_gev/test_gev_params.py +++ b/test/test_extreme_estimator/test_margin_fits/test_gev/test_gev_params.py @@ -20,6 +20,19 @@ class TestGevParams(unittest.TestCase): q = gev_params.quantile(p) self.assertTrue(np.isnan(q)) + def test_has_undefined_parameter(self): + gev_params = GevParams(loc=1.0, shape=1.0, scale=-1.0) + self.assertTrue(gev_params.has_undefined_parameters) + for k, v in gev_params.indicator_name_to_value.items(): + self.assertTrue(np.isnan(v), msg="{} is not equal to np.nan".format(k)) + + def test_limit_cases(self): + gev_params = GevParams(loc=1.0, shape=1.0, scale=1.0) + self.assertEqual(gev_params.mean, np.inf) + gev_params = GevParams(loc=1.0, shape=0.5, scale=1.0) + self.assertEqual(gev_params.variance, np.inf) + self.assertEqual(gev_params.std, np.inf) + if __name__ == '__main__': unittest.main()