From 27b814ecd415f02812591784f1fa6921ffa73219 Mon Sep 17 00:00:00 2001
From: Runar Ask Johannessen <ruaj@equinor.com>
Date: Thu, 2 Nov 2023 09:51:55 +0100
Subject: [PATCH] update README and fix filtering on bool properties

---
 README.md                                     | 19 ++++++++++---------
 .../explorer/objects/_child_collection.py     | 14 ++++++++++----
 .../explorer/objects/surface_collection.py    |  6 +++++-
 3 files changed, 25 insertions(+), 14 deletions(-)

diff --git a/README.md b/README.md
index f4b27da4..eb80de1b 100644
--- a/README.md
+++ b/README.md
@@ -28,10 +28,10 @@ cases.users
 cases.fields
 
 # Apply filters
-cases = cases.filter(status=["keep", "offical"], user="peesv", field="Drogon")
+cases = cases.filter(status=["keep", "offical"], user="peesv", field="DROGON")
 
 for case in cases:
-    print(case.id)
+    print(case.uuid)
     print(case.name)
 
 # select case
@@ -44,7 +44,7 @@ Get objects within a case through `case.[CONTEXT].[OBJECT_TYPE]`.
 ##### Realized data
 ```python
 # All realized surface objects in case
-surfs = case.realization.surfaces
+surfs = case.surfaces
 
 # Get filter values
 surfs.names
@@ -52,13 +52,13 @@ surfs.tagnames
 surfs.iterations
 
 # Apply filters
-surfs = surfs.filter(name="surface_name", tagname="surface_tagname", iteration=0)
+surfs = surfs.filter(name="surface_name", tagname="surface_tagname", iteration="iter-0")
 
 # Get surface
 surf = surfs[0]
 
 # Metadata
-surf.id
+surf.uuid
 surf.name
 surf.tagname
 surf.iteration
@@ -68,6 +68,7 @@ surf.realization
 surf.blob
 
 # Get xtgeo.RegularSurface
+%matplotlib inline
 reg = surf.to_regular_surface()
 reg.quickplot()
 ```
@@ -75,16 +76,16 @@ reg.quickplot()
 ##### Aggregated data
 ```python
 # All aggregated surfaces in case
-surfs = case.aggregation.surfaces
+surfs = case.surfaces.filter(aggregation=True)
 
 # Get filter values
 surfs.names
 surfs.tagnames
 surfs.iterations
-surfs.operations
+surfs.aggregations
 
 # Apply filters
-surfs = surfs.filter(name="surface_name", tagname="surface_tagname", iteration=0, operation="mean")
+surfs = surfs.filter(name="surface_name", tagname="surface_tagname", iteration="iter-0", aggregation="mean")
 
 # Get surface
 surf = surfs[0]
@@ -94,7 +95,7 @@ surf = surfs[0]
 ##### Observed data
 ```python
 # All observed surfaces in case
-surfs = case.observation.surfaces
+surfs = case.surfaces.filter(is_observation=True)
 
 # Get filter values
 surfs.names
diff --git a/src/fmu/sumo/explorer/objects/_child_collection.py b/src/fmu/sumo/explorer/objects/_child_collection.py
index 16459102..d20f4c44 100644
--- a/src/fmu/sumo/explorer/objects/_child_collection.py
+++ b/src/fmu/sumo/explorer/objects/_child_collection.py
@@ -166,10 +166,7 @@ def _add_filter(
             "fmu.context.stage.keyword": stage,
             "data.spec.columns.keyword": column,
             "_id": uuid,
-            "data.stratigraphic.keyword": stratigraphic,
-            "data.vertical_domain.keyword": vertical_domain,
-            "data.is_observation.keyword": is_observation,
-            "data.is_prediction.keyword": is_prediction
+            "data.vertical_domain.keyword": vertical_domain
         }
 
         for prop, value in prop_map.items():
@@ -183,6 +180,15 @@ def _add_filter(
                     term = "terms" if isinstance(value, list) else "term"
                     must.append({term: {prop: value}})
 
+        bool_prop_map = {
+            "data.stratigraphic": stratigraphic,
+            "data.is_observation": is_observation,
+            "data.is_prediction": is_prediction
+        }
+        for prop, value in bool_prop_map.items():
+            if value is not None:
+                must.append({"term": {prop: value}})
+
         query = {"bool": {}}
 
         if len(must) > 0:
diff --git a/src/fmu/sumo/explorer/objects/surface_collection.py b/src/fmu/sumo/explorer/objects/surface_collection.py
index 0230bd1b..7a70ed6f 100644
--- a/src/fmu/sumo/explorer/objects/surface_collection.py
+++ b/src/fmu/sumo/explorer/objects/surface_collection.py
@@ -173,6 +173,8 @@ def filter(
         stage: Union[str, List[str], bool] = None,
         time: TimeFilter = None,
         uuid: Union[str, List[str], bool] = None,
+        is_observation: bool = None,
+        is_prediction: bool = None
     ) -> "SurfaceCollection":
         """Filter surfaces
 
@@ -216,7 +218,7 @@ def filter(
 
             Get all aggregated surfaces::
 
-                surfs = case.surfacse.filter(
+                surfs = case.surfaces.filter(
                     aggregation=True
                 )
 
@@ -239,6 +241,8 @@ def filter(
             uuid=uuid,
             stratigraphic=stratigraphic,
             vertical_domain=vertical_domain,
+            is_observation=is_observation,
+            is_prediction=is_prediction
         )
 
         return SurfaceCollection(self._sumo, self._case_uuid, query, self._pit)