From f909e3e588a6b6d719193f4423beb8b3d4938687 Mon Sep 17 00:00:00 2001 From: Peter Luenenschloss <peter.luenenschloss@ufz.de> Date: Wed, 4 Dec 2019 15:49:36 +0100 Subject: [PATCH] minor bugfix/ handy harm wrappers introduced + tested --- saqc/funcs/harm_functions.py | 58 ++++++++++++++++++++++++++++++++++- test/funcs/test_harm_funcs.py | 19 +++++++++++- 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/saqc/funcs/harm_functions.py b/saqc/funcs/harm_functions.py index c11d95ae0..43b1d6b79 100644 --- a/saqc/funcs/harm_functions.py +++ b/saqc/funcs/harm_functions.py @@ -608,7 +608,6 @@ def _reshapeFlags( # NOTE: breaks for non categorical flaggers .apply(lambda x: agg_method(x) if not x.empty else missing_flag) .astype(flagger.dtype) - .to_frame(name=field) ) if method == "nearest_agg": @@ -776,3 +775,60 @@ def _toMerged( return flagMissing( data, fieldname, flagger.initFlags(flags=flags), nodata=np.nan ) + + +@register('harmonize_shift2Grid') +def shift2Grid(data, field, flagger, freq, shift_method='nearest_shift', drop_flags=None, **kwargs): + return harmonize( + data, + field, + flagger, + freq, + inter_method=shift_method, + reshape_method=shift_method, + drop_flags=drop_flags, + **kwargs) + + +@register('harmonize_aggregate2Grid') +def aggregate2Grid(data, field, flagger, freq, agg_func, agg_method='nearest_agg', flag_agg_func=max, drop_flags=None, **kwargs): + return harmonize( + data, + field, + flagger, + freq, + inter_method=agg_method, + reshape_method=agg_method, + inter_agg=agg_func, + reshape_agg=flag_agg_func, + drop_flags=drop_flags, + **kwargs) + + +@register('harmonize_linear2Grid') +def linear2Grid(data, field, flagger, freq, flag_assignment_method='nearest_agg', flag_agg_func=max, drop_flags=None, **kwargs): + return harmonize( + data, + field, + flagger, + freq, + inter_method='time', + reshape_method=flag_assignment_method, + reshape_agg=flag_agg_func, + drop_flags=drop_flags, + **kwargs) + + +@register('harmonize_interpolate2Grid') +def interpolate2Grid(data, field, flagger, freq, interpolation_method, interpolation_order=1, flag_assignment_method='nearest_agg', flag_agg_func=max, drop_flags=None, **kwargs): + return harmonize( + data, + field, + flagger, + freq, + inter_method=interpolation_method, + inter_order=interpolation_order, + reshape_method=flag_assignment_method, + reshape_agg=flag_agg_func, + drop_flags=drop_flags, + **kwargs) \ No newline at end of file diff --git a/test/funcs/test_harm_funcs.py b/test/funcs/test_harm_funcs.py index e8944b6fe..bf5fc29ca 100644 --- a/test/funcs/test_harm_funcs.py +++ b/test/funcs/test_harm_funcs.py @@ -15,6 +15,10 @@ from saqc.funcs.harm_functions import ( _interpolateGrid, _insertGrid, _outsortCrap, + linear2Grid, + interpolate2Grid, + shift2Grid, + aggregate2Grid ) @@ -287,7 +291,7 @@ def test_multivariatHarmonization(multi_data, flagger, shift_comment): def test_gridInterpolation(data, method): freq = "15min" data = (data * np.sin(data)).append(data.shift(1, "2h")).shift(1, "3s") - # we are just testing if the interolation gets passed to the series without causing an error: + # we are just testing if the interpolation gets passed to the series without causing an error: _interpolateGrid( data, freq, method, order=1, agg_method=sum, downcast_interpolation=True ) @@ -322,3 +326,16 @@ def test_outsortCrap(data, flagger): data, field, flagger, drop_flags=[flagger.BAD, flagger.GOOD], return_drops=True, ) assert f_drop.index.sort_values().equals(drop_index.sort_values()) + +@pytest.mark.parametrize("flagger", TESTFLAGGER) +def test_wrapper(data, flagger): + # we are only testing, whether the wrappers do pass processing: + field = data.columns[0] + freq = '15min' + flagger = flagger.initFlags(data) + linear2Grid(data, field, flagger, freq, flag_assignment_method='nearest_agg', flag_agg_func=max, + drop_flags=None) + aggregate2Grid(data, field, flagger, freq, agg_func=sum, agg_method='nearest_agg', + flag_agg_func=max, drop_flags=None) + shift2Grid(data, field, flagger, freq, shift_method='nearest_shift', drop_flags=None) + -- GitLab