From 2abc83bf6ddf86a9bded6079b2b9ba3e35aaed55 Mon Sep 17 00:00:00 2001
From: Bert Palm <bert.palm@ufz.de>
Date: Tue, 16 Mar 2021 18:08:58 +0100
Subject: [PATCH] simplyfied register, according to @schaefed 's suggestions

---
 saqc/core/register.py | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/saqc/core/register.py b/saqc/core/register.py
index 0d423fba5..23ec179a4 100644
--- a/saqc/core/register.py
+++ b/saqc/core/register.py
@@ -102,15 +102,15 @@ def _preCall(func: callable, args: tuple, kwargs: dict, masking: MaskingStrT, fn
     data, field, flagger, *args = args
     ctrl = CallCtrl(func, data.copy(), field, flagger.copy(), args, kwargs, masking=masking, mthresh=mthresh)
 
-    # masking
-    columns = _getMaskingColumns(ctrl, ctrl.masking)
+    # handle data - masking
+    columns = _getMaskingColumns(data, field, masking)
     data, mask = _maskData(data, flagger, columns, mthresh)
 
     # store mask
     ctrl.mask = mask
 
-    # flags
-    flagger = _prepareFlags(flagger, ctrl)
+    # handle flags - clearing
+    flagger = _prepareFlags(flagger, masking)
 
     args = data, field, flagger, *args
     return args, kwargs, ctrl
@@ -144,18 +144,23 @@ def _postCall(result, ctrl: CallCtrl, fname: str) -> FuncReturnT:
     return data, flagger
 
 
-def _getMaskingColumns(ctrl: CallCtrl, masking: MaskingStrT):
+def _getMaskingColumns(data: dios.DictOfSeries, field: str, masking: MaskingStrT):
     """
+    Returns
+    -------
+    columns: pd.Index
+        Data columns that need to be masked.
+
     Raises
     ------
     ValueError: if given masking literal is not supported
     """
     if masking == 'all':
-        return ctrl.data.columns
+        return data.columns
     if masking == 'none':
         return pd.Index([])
     if masking == 'field':
-        return pd.Index([ctrl.field])
+        return pd.Index([field])
 
     raise ValueError(f"wrong use of `register(masking={ctrl.masking})`")
 
@@ -243,12 +248,12 @@ def _getMask(flags: Union[np.array, pd.Series], thresh: float) -> Union[np.array
     return flags >= thresh
 
 
-def _prepareFlags(flagger: Flagger, ctrl: CallCtrl) -> Flagger:
+def _prepareFlags(flagger: Flagger, masking) -> Flagger:
     """
     Clear flags before each call.
     """
-    # either the index or the columns itself changed
-    if ctrl.masking == 'none':
+    # Either the index or the columns itself changed
+    if masking == 'none':
         return flagger
 
     return initFlagsLike(flagger, initial_value=UNTOUCHED)
@@ -267,6 +272,9 @@ def _restoreFlags(flagger: Flagger, ctrl: CallCtrl):
         columns = columns.append(pd.Index([ctrl.field]))
 
     for c in columns:
+        # this implicitly squash the new-flagger history (RHS) to a single column, which than is appended to
+        # the old history (LHS). The new-flagger history possibly consist of multiple columns, one for each
+        # time flags was set to the flagger.
         result[c] = flagger[c]
 
     return result
-- 
GitLab