From c65c222c6176d74d21c744f82b88521a1dd8b44c Mon Sep 17 00:00:00 2001
From: Le Roux Erwan <erwan.le-roux@irstea.fr>
Date: Thu, 19 Sep 2019 11:29:31 +0200
Subject: [PATCH] [TREND ANALYSIS] add test for the gev params

---
 extreme_estimator/margin_fits/gev/gev_params.py     |  8 ++++++--
 .../test_margin_fits/test_gev/test_gev_params.py    | 13 +++++++++++++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/extreme_estimator/margin_fits/gev/gev_params.py b/extreme_estimator/margin_fits/gev/gev_params.py
index 88f48c55..769df9fd 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 39d3da70..0b19d97a 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()
-- 
GitLab