From 0c9e4a9bb2030579191e2c813c8d57d866dcae8c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20M=C3=BCller?= <mueller.seb@posteo.de>
Date: Mon, 17 Jul 2023 17:59:04 +0200
Subject: [PATCH] info: better fail info for mask missmatch

---
 src/finam/data/grid_tools.py | 10 ++++++++--
 src/finam/data/tools.py      | 14 ++++++++++++++
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/src/finam/data/grid_tools.py b/src/finam/data/grid_tools.py
index 7cd370a7..050cd1c4 100644
--- a/src/finam/data/grid_tools.py
+++ b/src/finam/data/grid_tools.py
@@ -24,8 +24,14 @@ def check_mask_equal(grid1, grid2):
     if mask1 is None and mask2 is None:
         return True
     # only one None is not fine
-    if mask1 is None or mask2 is None:
-        return False
+    # if mask1 is None or mask2 is None:
+    #     return False
+
+    # None mask and no masked values are equally fine
+    if mask1 is None:
+        return not np.any(mask2)
+    if mask2 is None:
+        return not np.any(mask1)
     # compare
     return np.all(grid1.to_canonical(mask1) == grid2.to_canonical(mask2))
 
diff --git a/src/finam/data/tools.py b/src/finam/data/tools.py
index 08471f3a..9b02e89a 100644
--- a/src/finam/data/tools.py
+++ b/src/finam/data/tools.py
@@ -11,6 +11,7 @@ from ..errors import FinamDataError, FinamMetaDataError
 # pylint: disable-next=unused-import
 from . import cf_units, grid_spec
 from .grid_base import Grid, GridBase
+from .grid_tools import check_mask_equal
 
 # set default format to cf-convention for pint.dequantify
 # some problems with degree_Celsius and similar here
@@ -657,6 +658,19 @@ class Info:
         if self.grid is not None and not self.grid.compatible_with(incoming.grid):
             if not (ignore_none and incoming.grid is None):
                 fail_info["grid"] = (incoming.grid, self.grid)
+                if not check_mask_equal(self.grid, incoming.grid):
+                    in_mask = (
+                        np.sum(incoming.grid.mask)
+                        if incoming.grid.mask is not None
+                        else 0
+                    )
+                    out_mask = (
+                        np.sum(self.grid.mask) if self.grid.mask is not None else 0
+                    )
+                    fail_info["mask"] = (
+                        f"{in_mask} point(s) masked",
+                        f"{out_mask} point(s) masked",
+                    )
                 success = False
 
         for k, v in self.meta.items():
-- 
GitLab