From 8adf6744e8a501ac6c0127f5af98d07153a15d5b Mon Sep 17 00:00:00 2001 From: Bert Palm <bert.palm@ufz.de> Date: Sat, 20 Mar 2021 02:59:02 +0100 Subject: [PATCH] fixed other processing tests --- saqc/flagger/flags.py | 4 ++-- saqc/funcs/drift.py | 3 ++- tests/funcs/test_modelling.py | 29 +++++++++++-------------- tests/funcs/test_proc_functions.py | 34 ++++++++++++------------------ 4 files changed, 30 insertions(+), 40 deletions(-) diff --git a/saqc/flagger/flags.py b/saqc/flagger/flags.py index e6ef0ad5b..e6d3076fa 100644 --- a/saqc/flagger/flags.py +++ b/saqc/flagger/flags.py @@ -401,8 +401,8 @@ def mergeHistoryByFunc(flags: Flags, field, source, merge_func, merge_func_kws, target_history = flags.history[field] source_history = flags.history[source] new_target_history = History() - import pdb - pdb.set_trace() + # import pdb + # pdb.set_trace() for k in target_history.hist.columns: col_args_h = dict(source_col=source_history.hist[k]) col_args_m = dict(source_col=source_history.mask[k]) diff --git a/saqc/funcs/drift.py b/saqc/funcs/drift.py index dc2265e8a..ea1a4d20c 100644 --- a/saqc/funcs/drift.py +++ b/saqc/funcs/drift.py @@ -454,7 +454,8 @@ def correctRegimeAnomaly( cluster_field: ColumnName, model: CurveFitter, regime_transmission: Optional[FreqString]=None, - x_date: bool=False + x_date: bool=False, + **kwargs ) -> Tuple[DictOfSeries, Flagger]: """ Function fits the passed model to the different regimes in data[field] and tries to correct diff --git a/tests/funcs/test_modelling.py b/tests/funcs/test_modelling.py index 6d99d5786..23cc82ab2 100644 --- a/tests/funcs/test_modelling.py +++ b/tests/funcs/test_modelling.py @@ -6,23 +6,20 @@ import dios +from saqc.flagger import initFlagsLike from saqc.funcs.tools import mask from saqc.funcs.residues import calculatePolynomialResidues, calculateRollingResidues from tests.fixtures import * -from tests.common import TESTFLAGGER -TF = TESTFLAGGER[:1] - -@pytest.mark.parametrize("flagger", TF) @pytest.mark.parametrize("dat", [pytest.lazy_fixture("course_2")]) -def test_modelling_polyFit_forRegular(dat, flagger): +def test_modelling_polyFit_forRegular(dat): data, _ = dat(freq="10min", periods=30, initial_level=0, final_level=100, out_val=-100) # add some nice sine distortion data = data + 10 * np.sin(np.arange(0, len(data.indexes[0]))) data = dios.DictOfSeries(data) - flagger = flagger.initFlags(data) + flagger = initFlagsLike(data) result1, _ = calculatePolynomialResidues(data, "data", flagger, 11, 2, numba=False) result2, _ = calculatePolynomialResidues(data, "data", flagger, 11, 2, numba=True) assert (result1["data"] - result2["data"]).abs().max() < 10 ** -10 @@ -35,39 +32,37 @@ def test_modelling_polyFit_forRegular(dat, flagger): assert result5["data"].iloc[10:19].isna().all() -@pytest.mark.parametrize("flagger", TF) @pytest.mark.parametrize("dat", [pytest.lazy_fixture("course_2")]) -def test_modelling_rollingMean_forRegular(dat, flagger): +def test_modelling_rollingMean_forRegular(dat): data, _ = dat(freq="10min", periods=30, initial_level=0, final_level=100, out_val=-100) data = dios.DictOfSeries(data) - flagger = flagger.initFlags(data) + flagger = initFlagsLike(data) calculateRollingResidues(data, "data", flagger, 5, func=np.mean, eval_flags=True, min_periods=0, center=True) calculateRollingResidues(data, "data", flagger, 5, func=np.mean, eval_flags=True, min_periods=0, center=False) -@pytest.mark.parametrize("flagger", TF) @pytest.mark.parametrize("dat", [pytest.lazy_fixture("course_1")]) -def test_modelling_mask(dat, flagger): +def test_modelling_mask(dat): data, _ = dat() data = dios.DictOfSeries(data) - flagger = flagger.initFlags(data) + flagger = initFlagsLike(data) data_seasonal, flagger_seasonal = mask(data, "data", flagger, mode='periodic', period_start="20:00", period_end="40:00", include_bounds=False) - flaggs = flagger_seasonal._flags["data"] + flaggs = flagger_seasonal["data"] assert flaggs[np.logical_and(20 <= flaggs.index.minute, 40 >= flaggs.index.minute)].isna().all() data_seasonal, flagger_seasonal = mask(data, "data", flagger, mode='periodic', period_start="15:00:00", period_end="02:00:00") - flaggs = flagger_seasonal._flags["data"] + flaggs = flagger_seasonal["data"] assert flaggs[np.logical_and(15 <= flaggs.index.hour, 2 >= flaggs.index.hour)].isna().all() data_seasonal, flagger_seasonal = mask(data, "data", flagger, mode='periodic', period_start="03T00:00:00", period_end="10T00:00:00") - flaggs = flagger_seasonal._flags["data"] + flaggs = flagger_seasonal["data"] assert flaggs[np.logical_and(3 <= flaggs.index.hour, 10 >= flaggs.index.hour)].isna().all() mask_ser = pd.Series(False, index=data["data"].index) mask_ser[::5] = True data["mask_ser"] = mask_ser - flagger = flagger.initFlags(data) + flagger = initFlagsLike(data) data_masked, flagger_masked = mask(data, "data", flagger, mode='mask_var', mask_var="mask_ser") - flaggs = flagger_masked._flags["data"] + flaggs = flagger_masked["data"] assert flaggs[data_masked['mask_ser']].isna().all() diff --git a/tests/funcs/test_proc_functions.py b/tests/funcs/test_proc_functions.py index d7cada078..d9d137359 100644 --- a/tests/funcs/test_proc_functions.py +++ b/tests/funcs/test_proc_functions.py @@ -7,6 +7,7 @@ import dios from saqc.constants import * +from saqc.flagger import initFlagsLike from saqc.funcs.transformation import transform from saqc.funcs.drift import correctOffset from saqc.funcs.interpolation import interpolateByRolling, interpolateInvalid, interpolateIndex @@ -14,15 +15,13 @@ from saqc.funcs.resampling import resample from saqc.lib.ts_operators import linearInterpolation, polynomialInterpolation from tests.fixtures import * -from tests.common import TESTFLAGGER -@pytest.mark.parametrize("flagger", TESTFLAGGER) -def test_rollingInterpolateMissing(course_5, flagger): +def test_rollingInterpolateMissing(course_5): data, characteristics = course_5(periods=10, nan_slice=[5, 6]) field = data.columns[0] data = dios.DictOfSeries(data) - flagger = flagger.initFlags(data) + flagger = initFlagsLike(data) dataInt, *_ = interpolateByRolling( data, field, flagger, 3, func=np.median, center=True, min_periods=0, interpol_flag=UNFLAGGED ) @@ -35,12 +34,11 @@ def test_rollingInterpolateMissing(course_5, flagger): assert dataInt[field][characteristics["missing"]].isna().all() -@pytest.mark.parametrize("flagger", TESTFLAGGER) -def test_interpolateMissing(course_5, flagger): +def test_interpolateMissing(course_5): data, characteristics = course_5(periods=10, nan_slice=[5]) field = data.columns[0] data = dios.DictOfSeries(data) - flagger = flagger.initFlags(data) + flagger = initFlagsLike(data) dataLin, *_ = interpolateInvalid(data, field, flagger, method="linear") dataPoly, *_ = interpolateInvalid(data, field, flagger, method="polynomial") assert dataLin[field][characteristics["missing"]].notna().all() @@ -54,12 +52,11 @@ def test_interpolateMissing(course_5, flagger): assert dataLin3[field][characteristics["missing"]].notna().all() -@pytest.mark.parametrize("flagger", TESTFLAGGER) -def test_transform(course_5, flagger): +def test_transform(course_5): data, characteristics = course_5(periods=10, nan_slice=[5, 6]) field = data.columns[0] data = dios.DictOfSeries(data) - flagger = flagger.initFlags(data) + flagger = initFlagsLike(data) data1, *_ = transform(data, field, flagger, func=linearInterpolation) assert data1[field][characteristics["missing"]].isna().all() data1, *_ = transform(data, field, flagger, func=lambda x: linearInterpolation(x, inter_limit=3)) @@ -70,35 +67,32 @@ def test_transform(course_5, flagger): assert data1[field][characteristics["missing"]].notna().all() -@pytest.mark.parametrize("flagger", TESTFLAGGER) -def test_resample(course_5, flagger): +def test_resample(course_5): data, characteristics = course_5(freq="1min", periods=30, nan_slice=[1, 11, 12, 22, 24, 26]) field = data.columns[0] data = dios.DictOfSeries(data) - flagger = flagger.initFlags(data) + flagger = initFlagsLike(data) data1, *_ = resample(data, field, flagger, "10min", np.mean, max_invalid_total_d=2, max_invalid_consec_d=1) assert ~np.isnan(data1[field].iloc[0]) assert np.isnan(data1[field].iloc[1]) assert np.isnan(data1[field].iloc[2]) -@pytest.mark.parametrize("flagger", TESTFLAGGER) -def test_interpolateGrid(course_5, course_3, flagger): +def test_interpolateGrid(course_5, course_3): data, _ = course_5() data_grid, characteristics = course_3() data['grid'] = data_grid.to_df() # data = dios.DictOfSeries(data) - flagger = flagger.initFlags(data) + flagger = initFlagsLike(data) dataInt, *_ = interpolateIndex(data, 'data', flagger, '1h', 'time', grid_field='grid', inter_limit=10) -@pytest.mark.parametrize("flagger", TESTFLAGGER) -def test_offsetCorrecture(flagger): +def test_offsetCorrecture(): data = pd.Series(0, index=pd.date_range('2000', freq='1d', periods=100), name='dat') data.iloc[30:40] = -100 data.iloc[70:80] = 100 data = dios.DictOfSeries(data) - flagger = flagger.initFlags(data) - data, flagger = correctOffset(data, 'dat', flagger, 40, 20, '3d', 1) + flagger = initFlagsLike(data) + data, _ = correctOffset(data, 'dat', flagger, 40, 20, '3d', 1) assert (data == 0).all()[0] -- GitLab