diff --git a/requirements.txt b/requirements.txt index 7f085863763e0dd61d53ddb6ca6b817d2544df0e..101eda485c87478dbe293196512baffc3d2b67c6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -32,4 +32,5 @@ wcwidth==0.2.5 scipy==1.6.0 scikit-learn==0.23.2 six==1.15.0 +typing_extensions==3.7.4.3 astor==0.8.1 diff --git a/saqc/funcs/residues.py b/saqc/funcs/residues.py index 864c5c9554b6122f938a54e58305bd766f6f7c00..7dee7eeea85c1fc288dc2e8308f3b4126c3a9687 100644 --- a/saqc/funcs/residues.py +++ b/saqc/funcs/residues.py @@ -1,15 +1,27 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- + +from typing import Tuple, Union, Optional, Callable +from typing_extensions import Literal + import numpy as np +from dios import DictOfSeries + from saqc.core.register import register +from saqc.flagger.baseflagger import BaseFlagger from saqc.funcs.rolling import roll from saqc.funcs.curvefit import fitPolynomial @register(masking='field') -def calculatePolynomialResidues(data, field, flagger, winsz, polydeg, numba="auto", eval_flags=True, min_periods=0, - **kwargs): +def calculatePolynomialResidues( + data: DictOfSeries, field: str, flagger: BaseFlagger, + winsz: Union[str, int], polydeg: int, + numba: Literal[True, False, "auto"]="auto", + eval_flags: bool=True, + min_periods: Optional[int]=0, + **kwargs) -> Tuple[DictOfSeries, BaseFlagger]: """ Function fits a polynomial model to the data and returns the residues. @@ -67,7 +79,7 @@ def calculatePolynomialResidues(data, field, flagger, winsz, polydeg, numba="aut eval_flags : bool, default True Wheather or not to assign new flags to the calculated residuals. If True, a residual gets assigned the worst flag present in the interval, the data for its calculation was obtained from. - min_periods : {int, np.nan}, default 0 + min_periods : {int, None}, default 0 The minimum number of periods, that has to be available in every values fitting surrounding for the polynomial fit to be performed. If there are not enough values, np.nan gets assigned. Default (0) results in fitting regardless of the number of values present (results in overfitting for too sparse intervals). To automatically @@ -84,16 +96,22 @@ def calculatePolynomialResidues(data, field, flagger, winsz, polydeg, numba="aut """ data, flagger = fitPolynomial(data, field, flagger, winsz, polydeg, numba=numba, eval_flags=eval_flags, - min_periods=min_periods, _return_residues=True, **kwargs) + min_periods=min_periods, return_residues=True, **kwargs) return data, flagger @register(masking='field') -def calculateRollingResidues(data, field, flagger, winsz, func=np.mean, eval_flags=True, min_periods=0, center=True, - **kwargs): +def calculateRollingResidues( + data: DictOfSeries, field: str, flagger: BaseFlagger, + winsz: Union[str, int], + func: Callable[[np.array], np.array]=np.mean, + eval_flags: bool=True, + min_periods: Optional[int]=0, + center: bool=True, + **kwargs) -> Tuple[DictOfSeries, BaseFlagger]: data, flagger = roll(data, field, flagger, winsz, func=func, eval_flags=eval_flags, min_periods=min_periods, center=center, _return_residues=True, **kwargs) - return data, flagger \ No newline at end of file + return data, flagger