Skip to content
Snippets Groups Projects
Commit 08437754 authored by David Schäfer's avatar David Schäfer
Browse files

hardend the main loop flagger abstraction and removed the flagger.emptyFlags methods

parent 946a8d8b
No related branches found
No related tags found
No related merge requests found
......@@ -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,
......
......@@ -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))
......
......@@ -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(
......
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment