From 084377547e98f51108a5e15500c3a67c2ccb392f Mon Sep 17 00:00:00 2001 From: David Schaefer <david.schaefer@ufz.de> Date: Tue, 23 Apr 2019 14:53:41 +0200 Subject: [PATCH] hardend the main loop flagger abstraction and removed the flagger.emptyFlags methods --- core.py | 16 +++++----------- flagger/baseflagger.py | 3 --- flagger/dmpflagger.py | 12 ------------ test/test_core.py | 1 - 4 files changed, 5 insertions(+), 27 deletions(-) diff --git a/core.py b/core.py index d1a49056f..84afc00b9 100644 --- a/core.py +++ b/core.py @@ -39,12 +39,7 @@ def flagNext(flagger: BaseFlagger, flags: pd.Series, n: int) -> pd.Series: def runner(meta, flagger, data, flags=None, nodata=np.nan): if flags is None: - # flags = pd.DataFrame(index=data.index) - flags = flagger.emptyFlags(data) - # else: - # if not all(flags.columns == flagger.emptyFlags(data.iloc[0]).columns): - # raise TypeError("structure of given flag does not " - # "correspond to flagger requirements") + flags = pd.DataFrame(index=data.index) # NOTE: # We need an index frequency in order to calculate ticks @@ -84,8 +79,9 @@ def runner(meta, flagger, data, flags=None, nodata=np.nan): # flag column exists if flag_params.get(FlagParams.ASSIGN) or \ (varname in data and varname not in flags): - dummy = pd.DataFrame(index=data.index, columns=[varname]) - flags = flags.join(flagger.initFlags(dummy)) + col_flags = flagger.initFlags( + pd.DataFrame(index=data.index, columns=[varname])) + flags = col_flags if flags.empty else flags.join(col_flags) elif varname not in data and varname not in flags: continue @@ -97,9 +93,7 @@ def runner(meta, flagger, data, flags=None, nodata=np.nan): # NOTE: # within the activation period of a variable, the flag will # be initialized if necessary - fchunk = (flags - .loc[start_date:end_date] - .fillna({varname: flagger.no_flag})) + fchunk = flags.loc[start_date:end_date] try: dchunk, fchunk = flagDispatch(func_name, diff --git a/flagger/baseflagger.py b/flagger/baseflagger.py index 238ce5882..69d09a25c 100644 --- a/flagger/baseflagger.py +++ b/flagger/baseflagger.py @@ -37,9 +37,6 @@ class BaseFlagger: out[:] = value return out - def emptyFlags(self, data: pd.DataFrame) -> pd.DataFrame: - return pd.DataFrame(index=data.index) - def isFlagged(self, flags: ArrayLike, flag: T = None) -> ArrayLike: if flag is None: return (pd.notnull(flags) & (flags != self.no_flag)) diff --git a/flagger/dmpflagger.py b/flagger/dmpflagger.py index 0696c05ca..b5ef7eb21 100644 --- a/flagger/dmpflagger.py +++ b/flagger/dmpflagger.py @@ -31,18 +31,6 @@ class DmpFlagger(BaseFlagger): super().__init__(no_flag, flag) self.flag_fields = [FlagFields.FLAG, FlagFields.CAUSE, FlagFields.COMMENT] - def emptyFlags(self, data, **kwargs): - columns = pd.MultiIndex( - levels=[[], []], - codes=[[], []], - names=[ColumnLevels.VARIABLES, ColumnLevels.FLAGS]) - return pd.DataFrame(index=data.index, columns=columns) - - # def _getColumns(self, data): - # if isinstance(data, pd.DataFrame): - # return data.columns - # return [data.name] - def initFlags(self, data, value="NIL", **kwargs): columns = data.columns if isinstance(data, pd.DataFrame) else [data.name] columns = pd.MultiIndex.from_product( diff --git a/test/test_core.py b/test/test_core.py index 5f6b0c805..b51c7b7d9 100644 --- a/test/test_core.py +++ b/test/test_core.py @@ -101,7 +101,6 @@ def test_assignVariable(flagger): pdata, pflags = runner(meta, flagger, data) - if isinstance(pflags.columns, pd.MultiIndex): cols = (pflags .columns.get_level_values(0) -- GitLab