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