From 62b72d97a1a4c65b86615b1efcb2b1e5068c5742 Mon Sep 17 00:00:00 2001
From: Thibault Hallouin <thibault.hallouin@inrae.fr>
Date: Fri, 24 Feb 2023 19:06:36 +0100
Subject: [PATCH] add "completeness" diagnostics

---
 tests/test_determinist.py | 44 +++++++++++++++++++++++++++++++++++++++
 tests/test_probabilist.py | 43 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 87 insertions(+)

diff --git a/tests/test_determinist.py b/tests/test_determinist.py
index 8ff4605..980493a 100644
--- a/tests/test_determinist.py
+++ b/tests/test_determinist.py
@@ -16,6 +16,11 @@ _all_metrics = (
     'NSE', 'KGE', 'KGE_D', 'KGEPRIME', 'KGEPRIME_D',
 )
 
+# list all available deterministic diagnostics
+_all_diags = (
+    'completeness'
+)
+
 
 class TestMetrics(unittest.TestCase):
 
@@ -203,6 +208,45 @@ class TestUncertainty(unittest.TestCase):
                 )
 
 
+class TestDiagnostics(unittest.TestCase):
+
+    def test_completeness(self):
+        obs = numpy.array(
+            [[4.7, 4.3, numpy.nan, 2.7, 4.1, 5.0]]
+        )
+
+        prd = numpy.array(
+            [[5.3, numpy.nan, 5.7, 2.3, 3.3, 4.1],
+             [4.3, 4.2, 4.7, 4.3, 3.3, 2.8],
+             [5.3, numpy.nan, 5.7, 2.3, 3.8, numpy.nan]]
+        )
+
+        msk = numpy.array(
+            [[[True, True, True, False, True, True],
+              [True, True, True, True, True, True]],
+             [[True, True, True, True, True, False],
+              [True, True, True, True, True, True]],
+             [[True, True, True, False, False, True],
+              [True, True, True, True, True, True]]]
+        )
+
+        exp = numpy.array(
+            [[[3.],
+              [4.]],
+             [[4.],
+              [5.]],
+             [[1.],
+              [3.]]]
+        )
+
+        numpy.testing.assert_almost_equal(
+            exp,
+            evalhyd.evald(
+                obs, prd, ["NSE"], t_msk=msk, diagnostics=["completeness"]
+            )[1]
+        )
+
+
 if __name__ == '__main__':
     test_loader = unittest.TestLoader()
     test_suite = unittest.TestSuite()
diff --git a/tests/test_probabilist.py b/tests/test_probabilist.py
index c65da24..04d26c6 100644
--- a/tests/test_probabilist.py
+++ b/tests/test_probabilist.py
@@ -25,6 +25,11 @@ _all_metrics = (
     'CR', 'AW', 'AWN', 'AWI', 'WS', 'WSS'
 )
 
+# list all available deterministic diagnostics
+_all_diags = (
+    'completeness'
+)
+
 
 class TestMetrics(unittest.TestCase):
 
@@ -408,6 +413,44 @@ class TestMultiDimensional(unittest.TestCase):
                         )
 
 
+class TestDiagnostics(unittest.TestCase):
+
+    def test_completeness(self):
+        obs = numpy.array(
+            [[4.7, 4.3, numpy.nan, 2.7, 4.1, 5.0]]
+        )
+
+        prd = numpy.array(
+            [[[[5.3, numpy.nan, 5.7, 2.3, 3.3, numpy.nan],
+               [4.3, numpy.nan, 4.7, 4.3, 3.4, numpy.nan],
+               [5.3, numpy.nan, 5.7, 2.3, 3.8, numpy.nan]],
+              [[numpy.nan, 4.2, 5.7, 2.3, 3.1, 4.1],
+               [numpy.nan, 4.2, 4.7, 4.3, 3.3, 2.8],
+               [numpy.nan, 5.2, 5.7, 2.3, 3.9, 3.5]]]]
+        )
+
+        msk = numpy.array(
+            [[[[True, True, True, False, True, True],
+               [True, True, True, True, True, True]],
+              [[True, True, True, True, True, False],
+               [True, True, True, True, True, True]]]]
+        )
+
+        exp = numpy.array(
+            [[[[2.],
+               [3.]],
+              [[3.],
+               [4.]]]]
+        )
+
+        numpy.testing.assert_almost_equal(
+            exp,
+            evalhyd.evalp(
+                obs, prd, ["QS"], t_msk=msk, diagnostics=["completeness"]
+            )[1]
+        )
+
+
 if __name__ == '__main__':
     test_loader = unittest.TestLoader()
     test_suite = unittest.TestSuite()
-- 
GitLab