diff --git a/saqc/core/register.py b/saqc/core/register.py index 9607bebe309d18cfc28b7d0e316d23e29d8f1e6a..1f11250eaa7244d972d64a973fca3e746c9598f4 100644 --- a/saqc/core/register.py +++ b/saqc/core/register.py @@ -375,7 +375,7 @@ def _restoreFlags(flags: Flags, old_state: CallState): squeezed = flags.history[c].max(raw=True) # nothing to update - if history.empty or (squeezed == UNTOUCHED).all(): + if history.empty: continue out.history[c] = out.history[c].append(squeezed, force=True, meta=meta) diff --git a/saqc/funcs/curvefit.py b/saqc/funcs/curvefit.py index 406728dba32e397451d3dd0e792d163b8bd8cc5a..5487ce7b95833b751568c94034fd4afdae861a86 100644 --- a/saqc/funcs/curvefit.py +++ b/saqc/funcs/curvefit.py @@ -111,6 +111,7 @@ def fitPolynomial( """ # TODO: some (rater large) parts are functional similar to saqc.funcs.rolling.roll if data[field].empty: + flags[:, field] = UNTOUCHED return data, flags data = data.copy() to_fit = data[field] diff --git a/saqc/funcs/drift.py b/saqc/funcs/drift.py index 4431ab8321aae1f79477e420e0f24eb65965fc42..688f2441a0c64ace3eeae2ae38a793b4dfeef472 100644 --- a/saqc/funcs/drift.py +++ b/saqc/funcs/drift.py @@ -458,6 +458,7 @@ def correctDrift( """ # 1: extract fit intervals: if data[maint_data_field].empty: + flags[:, field] = UNTOUCHED return data, flags data = data.copy() diff --git a/saqc/funcs/outliers.py b/saqc/funcs/outliers.py index 6f0094ef5320991d800ceaab0a63eca7a3c100a2..93242cbba125ce3101d230617d0e3d8bfa22dfbd 100644 --- a/saqc/funcs/outliers.py +++ b/saqc/funcs/outliers.py @@ -79,6 +79,7 @@ def flagByStray( scores = data[field].dropna() if scores.empty: + flags[:, field] = UNTOUCHED return data, flags if not partition_freq: @@ -676,6 +677,7 @@ def flagRaise( raise_series = raise_series.apply(raise_check, args=(thresh,), raw=True) if raise_series.isna().all(): + flags[:, field] = UNTOUCHED return data, flags # "unflag" values of insufficient deviation to their predecessors @@ -783,6 +785,7 @@ def flagMAD( """ d = data[field] if d.empty: + flags[:, field] = UNTOUCHED return data, flags median = d.rolling(window=window, closed="both").median() @@ -879,6 +882,7 @@ def flagOffset( """ dataseries = data[field].dropna() if dataseries.empty: + flags[:, field] = UNTOUCHED return data, flags # using reverted series - because ... long story. @@ -911,6 +915,7 @@ def flagOffset( post_jumps = post_jumps[post_jumps] if post_jumps.empty: + flags[:, field] = UNTOUCHED return data, flags # get all the entries preceding a significant jump and its successors within "length" range @@ -1227,6 +1232,7 @@ def flagCrossStatistic( mask = diff_scores > thresh if mask.empty: + flags[:, field] = UNTOUCHED return data, flags for var in fields: diff --git a/saqc/funcs/rolling.py b/saqc/funcs/rolling.py index 3e23ee7e1ee9b71bf9e88053b96b955f441b9431..20a26cd7bf879036301fd890f1041a77ab50ea1e 100644 --- a/saqc/funcs/rolling.py +++ b/saqc/funcs/rolling.py @@ -72,6 +72,7 @@ def roll( data = data.copy() to_fit = data[field] if to_fit.empty: + flags[:, field] = UNTOUCHED return data, flags regular = getFreqDelta(to_fit.index) diff --git a/saqc/funcs/scores.py b/saqc/funcs/scores.py index fc1d5748abed5bc32dabddcbaae44876141f7feb..85204da0f0e76a23a0b8493a9e36b90942f46d27 100644 --- a/saqc/funcs/scores.py +++ b/saqc/funcs/scores.py @@ -123,6 +123,7 @@ def assignKNNScore( val_frame = val_frame.transform(trafo) if val_frame.empty: + flags[:, field] = UNTOUCHED return data, flags # partitioning diff --git a/tests/core/test_reader.py b/tests/core/test_reader.py index 10c4c048ee04d778907fe9521014c0e774683bc9..cbaec7e0e1905043ea0e12509a45d31268e96a3a 100644 --- a/tests/core/test_reader.py +++ b/tests/core/test_reader.py @@ -10,6 +10,7 @@ from pathlib import Path from saqc.core.config import Fields as F from saqc.core.core import SaQC from saqc.core.register import FUNC_MAP, flagging +from saqc.constants import UNTOUCHED from tests.common import initData, writeIO @@ -110,6 +111,7 @@ def test_configChecks(data): @flagging(masking="none") def flagFunc(data, field, flags, arg, opt_arg=None, **kwargs): + flags[:, field] = UNTOUCHED return data, flags header = f"{F.VARNAME};{F.TEST}" @@ -135,6 +137,7 @@ def test_supportedArguments(data): @flagging(masking="field") def func(data, field, flags, kwarg, **kwargs): + flags[:, field] = UNTOUCHED return data, flags var1 = data.columns[0]