Skip to content
Snippets Groups Projects
Commit 5f8acb63 authored by Bert Palm's avatar Bert Palm 🎇
Browse files

fixed flagNext/flagPeriod +tests

parent 7db6b6e4
No related branches found
No related tags found
No related merge requests found
...@@ -12,10 +12,18 @@ from ..lib.tools import setup ...@@ -12,10 +12,18 @@ from ..lib.tools import setup
def flagWindow(old, new, field, flagger, direction='fw', window=0, **kwargs) -> pd.Series: def flagWindow(old, new, field, flagger, direction='fw', window=0, **kwargs) -> pd.Series:
if window == 0 or window == '':
return new
fw, bw = False, False fw, bw = False, False
mask = flagger.getFlags(old[field]) != flagger.getFlags(new[field]) mask = flagger.getFlags(old[field]) != flagger.getFlags(new[field])
f = flagger.isFlagged(new[field]) & mask f = flagger.isFlagged(new[field]) & mask
if not mask.any():
# nothing was flagged, so nothing need to be flagged additional
return new
if isinstance(window, int): if isinstance(window, int):
x = f.rolling(window=window + 1).sum() x = f.rolling(window=window + 1).sum()
if direction in ['fw', 'both']: if direction in ['fw', 'both']:
...@@ -29,8 +37,7 @@ def flagWindow(old, new, field, flagger, direction='fw', window=0, **kwargs) -> ...@@ -29,8 +37,7 @@ def flagWindow(old, new, field, flagger, direction='fw', window=0, **kwargs) ->
fw = f.rolling(window=window, closed='both').sum().astype(bool) fw = f.rolling(window=window, closed='both').sum().astype(bool)
fmask = bw | fw fmask = bw | fw
new.loc[fmask, field] = flagger.setFlag(new.loc[fmask, field], **kwargs) return flagger.setFlags(new, field, fmask, **kwargs)
return new
def flagPeriod(old, new, field, flagger, flag_period=0, **kwargs) -> pd.Series: def flagPeriod(old, new, field, flagger, flag_period=0, **kwargs) -> pd.Series:
...@@ -129,12 +136,12 @@ def runner(metafname, flagger, data, flags=None, nodata=np.nan): ...@@ -129,12 +136,12 @@ def runner(metafname, flagger, data, flags=None, nodata=np.nan):
# flag a timespan after the condition is met # flag a timespan after the condition is met
if Params.FLAGPERIOD in flag_params: if Params.FLAGPERIOD in flag_params:
periodflags = flagPeriod(fchunk, ffchunk, varname, flagger, func_name, **flag_params) periodflags = flagPeriod(fchunk, ffchunk, varname, flagger, func_name=func_name, **flag_params)
ffchunk = assignTypeSafe(ffchunk, varname, periodflags) ffchunk = assignTypeSafe(ffchunk, varname, periodflags)
# flag a certain amount of values after condition is met # flag a certain amount of values after condition is met
if Params.FLAGVALUES in flag_params: if Params.FLAGVALUES in flag_params:
valueflags = flagNext(fchunk, ffchunk, varname, flagger, func_name, **flag_params) valueflags = flagNext(fchunk, ffchunk, varname, flagger, func_name=func_name, **flag_params)
ffchunk = assignTypeSafe(ffchunk, varname, valueflags) ffchunk = assignTypeSafe(ffchunk, varname, valueflags)
if flag_params.get(Params.PLOT, False): if flag_params.get(Params.PLOT, False):
......
...@@ -166,7 +166,7 @@ def test_flagNext(flagger): ...@@ -166,7 +166,7 @@ def test_flagNext(flagger):
idx = [0, 1, 2] idx = [0, 1, 2]
dtidx = data.index[idx] dtidx = data.index[idx]
flags.loc[dtidx, var1] = flagger.setFlag(flags.loc[dtidx, var1]) flags = flagger.setFlags(flags, var1, dtidx)
n = 4 n = 4
fflags = flagNext(orig, flags, var1, flagger, flag_values=4) fflags = flagNext(orig, flags, var1, flagger, flag_values=4)
...@@ -192,7 +192,7 @@ def test_flagPeriod(flagger): ...@@ -192,7 +192,7 @@ def test_flagPeriod(flagger):
idx = [0, 1, 2] idx = [0, 1, 2]
dtidx = data.index[idx] dtidx = data.index[idx]
flags.loc[dtidx, var1] = flagger.setFlag(flags.loc[dtidx, var1]) flags = flagger.setFlags(flags, var1, dtidx)
period = '4h' period = '4h'
fflags = flagPeriod(orig, flags, var1, flagger, flag_period=period) fflags = flagPeriod(orig, flags, var1, flagger, flag_period=period)
......
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