Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • berntm/saqc
  • rdm-software/saqc
  • schueler/saqc
3 results
Show changes
Commits on Source (30)
Showing
with 98 additions and 10 deletions
...@@ -13,11 +13,16 @@ This changelog starts with version 2.0.0. Basically all parts of the system, inc ...@@ -13,11 +13,16 @@ This changelog starts with version 2.0.0. Basically all parts of the system, inc
[List of commits](https://git.ufz.de/rdm-software/saqc/-/compare/v2.0.1...develop) [List of commits](https://git.ufz.de/rdm-software/saqc/-/compare/v2.0.1...develop)
### Added ### Added
- generic documentation module `docurator.py` added to `lib`
### Changed ### Changed
- documentation pipeline changed to base on methods decorators
- `flagOffsets` parameters `thresh` and `thresh_relative` now both are optional - `flagOffsets` parameters `thresh` and `thresh_relative` now both are optional
- corrected false notion of *residual* concept (old notion: *residue* got replaced by *residual*)
### Removed ### Removed
### Fixed ### Fixed
- `flagOffset` bug with zero-valued threshold - `flagOffset` bug with zero-valued threshold
- `flagCrossStatistics` bug with unaligned input variables
- `plot` fixed data loss when using *dfilter* kwarg
## [2.0.1](https://git.ufz.de/rdm-software/saqc/-/tags/v2.0.1) - 2021-12-20 ## [2.0.1](https://git.ufz.de/rdm-software/saqc/-/tags/v2.0.1) - 2021-12-20
[List of commits](https://git.ufz.de/rdm-software/saqc/-/compare/v2.0.0...v2.0.1) [List of commits](https://git.ufz.de/rdm-software/saqc/-/compare/v2.0.0...v2.0.1)
......
...@@ -6,8 +6,8 @@ Click==8.0.3 ...@@ -6,8 +6,8 @@ Click==8.0.3
dtw==1.4.0 dtw==1.4.0
hypothesis==6.34.1 hypothesis==6.34.1
matplotlib==3.5.1 matplotlib==3.5.1
numba==0.54.1 numba>=0.55.0
numpy==1.20.3 numpy>=1.21.5
outlier-utils==0.0.3 outlier-utils==0.0.3
pyarrow==6.0.1 pyarrow==6.0.1
pandas==1.3.5 pandas==1.3.5
......
...@@ -17,7 +17,7 @@ from saqc.core.modules.interpolation import Interpolation ...@@ -17,7 +17,7 @@ from saqc.core.modules.interpolation import Interpolation
from saqc.core.modules.outliers import Outliers from saqc.core.modules.outliers import Outliers
from saqc.core.modules.pattern import Pattern from saqc.core.modules.pattern import Pattern
from saqc.core.modules.resampling import Resampling from saqc.core.modules.resampling import Resampling
from saqc.core.modules.residues import Residues from saqc.core.modules.residuals import Residuals
from saqc.core.modules.rolling import Rolling from saqc.core.modules.rolling import Rolling
from saqc.core.modules.scores import Scores from saqc.core.modules.scores import Scores
from saqc.core.modules.tools import Tools from saqc.core.modules.tools import Tools
...@@ -38,7 +38,7 @@ class FunctionsMixin( ...@@ -38,7 +38,7 @@ class FunctionsMixin(
Outliers, Outliers,
Pattern, Pattern,
Resampling, Resampling,
Residues, Residuals,
Rolling, Rolling,
Scores, Scores,
Tools, Tools,
......
...@@ -9,14 +9,18 @@ from __future__ import annotations ...@@ -9,14 +9,18 @@ from __future__ import annotations
from saqc.constants import BAD, FILTER_ALL from saqc.constants import BAD, FILTER_ALL
import saqc import saqc
from saqc.lib.docurator import doc
import saqc.funcs
class Breaks: class Breaks:
@doc(saqc.funcs.breaks.flagMissing.__doc__)
def flagMissing( def flagMissing(
self, field: str, flag: float = BAD, dfilter: float = FILTER_ALL, **kwargs self, field: str, flag: float = BAD, dfilter: float = FILTER_ALL, **kwargs
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagMissing", locals()) return self._defer("flagMissing", locals())
@doc(saqc.funcs.breaks.flagIsolated.__doc__)
def flagIsolated( def flagIsolated(
self, self,
field: str, field: str,
...@@ -27,6 +31,7 @@ class Breaks: ...@@ -27,6 +31,7 @@ class Breaks:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagIsolated", locals()) return self._defer("flagIsolated", locals())
@doc(saqc.funcs.breaks.flagJumps.__doc__)
def flagJumps( def flagJumps(
self, self,
field: str, field: str,
......
...@@ -14,9 +14,12 @@ from typing_extensions import Literal ...@@ -14,9 +14,12 @@ from typing_extensions import Literal
from saqc.constants import BAD from saqc.constants import BAD
import saqc import saqc
from saqc.lib.docurator import doc
import saqc.funcs
class ChangePoints: class ChangePoints:
@doc(saqc.funcs.changepoints.flagChangePoints.__doc__)
def flagChangePoints( def flagChangePoints(
self, self,
field: str, field: str,
...@@ -32,6 +35,7 @@ class ChangePoints: ...@@ -32,6 +35,7 @@ class ChangePoints:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagChangePoints", locals()) return self._defer("flagChangePoints", locals())
@doc(saqc.funcs.changepoints.assignChangePointCluster.__doc__)
def assignChangePointCluster( def assignChangePointCluster(
self, self,
field: str, field: str,
......
...@@ -9,9 +9,12 @@ from __future__ import annotations ...@@ -9,9 +9,12 @@ from __future__ import annotations
from saqc.constants import BAD from saqc.constants import BAD
import saqc import saqc
from saqc.lib.docurator import doc
import saqc.funcs
class Constants: class Constants:
@doc(saqc.funcs.constants.flagByVariance.__doc__)
def flagByVariance( def flagByVariance(
self, self,
field: str, field: str,
...@@ -24,6 +27,7 @@ class Constants: ...@@ -24,6 +27,7 @@ class Constants:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagByVariance", locals()) return self._defer("flagByVariance", locals())
@doc(saqc.funcs.constants.flagConstants.__doc__)
def flagConstants( def flagConstants(
self, field: str, thresh: float, window: str, flag: float = BAD, **kwargs self, field: str, thresh: float, window: str, flag: float = BAD, **kwargs
) -> saqc.SaQC: ) -> saqc.SaQC:
......
...@@ -13,9 +13,12 @@ from typing_extensions import Literal ...@@ -13,9 +13,12 @@ from typing_extensions import Literal
from saqc.constants import BAD from saqc.constants import BAD
import saqc import saqc
from saqc.lib.docurator import doc
import saqc.funcs
class Curvefit: class Curvefit:
@doc(saqc.funcs.curvefit.fitPolynomial.__doc__)
def fitPolynomial( def fitPolynomial(
self, self,
field: str, field: str,
......
...@@ -17,9 +17,12 @@ from saqc.constants import BAD ...@@ -17,9 +17,12 @@ from saqc.constants import BAD
import saqc import saqc
from saqc.funcs import LinkageString from saqc.funcs import LinkageString
from saqc.lib.types import CurveFitter from saqc.lib.types import CurveFitter
from saqc.lib.docurator import doc
import saqc.funcs
class Drift: class Drift:
@doc(saqc.funcs.drift.flagDriftFromNorm.__doc__)
def flagDriftFromNorm( def flagDriftFromNorm(
self, self,
field: Sequence[str], field: Sequence[str],
...@@ -36,6 +39,7 @@ class Drift: ...@@ -36,6 +39,7 @@ class Drift:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagDriftFromNorm", locals()) return self._defer("flagDriftFromNorm", locals())
@doc(saqc.funcs.drift.flagDriftFromReference.__doc__)
def flagDriftFromReference( def flagDriftFromReference(
self, self,
field: Sequence[str], field: Sequence[str],
...@@ -51,6 +55,7 @@ class Drift: ...@@ -51,6 +55,7 @@ class Drift:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagDriftFromReference", locals()) return self._defer("flagDriftFromReference", locals())
@doc(saqc.funcs.drift.correctDrift.__doc__)
def correctDrift( def correctDrift(
self, self,
field: str, field: str,
...@@ -61,6 +66,7 @@ class Drift: ...@@ -61,6 +66,7 @@ class Drift:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("correctDrift", locals()) return self._defer("correctDrift", locals())
@doc(saqc.funcs.drift.correctRegimeAnomaly.__doc__)
def correctRegimeAnomaly( def correctRegimeAnomaly(
self, self,
field: str, field: str,
...@@ -72,6 +78,7 @@ class Drift: ...@@ -72,6 +78,7 @@ class Drift:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("correctRegimeAnomaly", locals()) return self._defer("correctRegimeAnomaly", locals())
@doc(saqc.funcs.drift.correctOffset.__doc__)
def correctOffset( def correctOffset(
self, self,
field: str, field: str,
......
...@@ -16,21 +16,28 @@ from typing_extensions import Literal ...@@ -16,21 +16,28 @@ from typing_extensions import Literal
from saqc.constants import BAD from saqc.constants import BAD
import saqc import saqc
from saqc.lib.docurator import doc
import saqc.funcs
class FlagTools: class FlagTools:
@doc(saqc.funcs.flagtools.clearFlags.__doc__)
def clearFlags(self, field: str, **kwargs) -> saqc.SaQC: def clearFlags(self, field: str, **kwargs) -> saqc.SaQC:
return self._defer("clearFlags", locals()) return self._defer("clearFlags", locals())
@doc(saqc.funcs.flagtools.forceFlags.__doc__)
def forceFlags(self, field: str, flag: float = BAD, **kwargs) -> saqc.SaQC: def forceFlags(self, field: str, flag: float = BAD, **kwargs) -> saqc.SaQC:
return self._defer("forceFlags", locals()) return self._defer("forceFlags", locals())
@doc(saqc.funcs.flagtools.forceFlags.__doc__)
def flagDummy(self, field: str, **kwargs) -> saqc.SaQC: def flagDummy(self, field: str, **kwargs) -> saqc.SaQC:
return self._defer("flagDummy", locals()) return self._defer("flagDummy", locals())
@doc(saqc.funcs.flagtools.flagUnflagged.__doc__)
def flagUnflagged(self, field: str, flag: float = BAD, **kwargs) -> saqc.SaQC: def flagUnflagged(self, field: str, flag: float = BAD, **kwargs) -> saqc.SaQC:
return self._defer("flagUnflagged", locals()) return self._defer("flagUnflagged", locals())
@doc(saqc.funcs.flagtools.flagManual.__doc__)
def flagManual( def flagManual(
self, self,
field: str, field: str,
...@@ -45,6 +52,7 @@ class FlagTools: ...@@ -45,6 +52,7 @@ class FlagTools:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagManual", locals()) return self._defer("flagManual", locals())
@doc(saqc.funcs.flagtools.transferFlags.__doc__)
def transferFlags( def transferFlags(
self, self,
field: str | Sequence[str], field: str | Sequence[str],
......
...@@ -12,9 +12,12 @@ from typing import Sequence, Union ...@@ -12,9 +12,12 @@ from typing import Sequence, Union
import saqc import saqc
from saqc.constants import UNFLAGGED, BAD, FILTER_ALL from saqc.constants import UNFLAGGED, BAD, FILTER_ALL
from saqc.lib.types import GenericFunction from saqc.lib.types import GenericFunction
from saqc.lib.docurator import doc
import saqc.funcs
class Generic: class Generic:
@doc(saqc.funcs.generic.processGeneric.__doc__)
def processGeneric( def processGeneric(
self, self,
field: str | Sequence[str], field: str | Sequence[str],
...@@ -26,6 +29,7 @@ class Generic: ...@@ -26,6 +29,7 @@ class Generic:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("processGeneric", locals()) return self._defer("processGeneric", locals())
@doc(saqc.funcs.generic.flagGeneric.__doc__)
def flagGeneric( def flagGeneric(
self, self,
field: Union[str, Sequence[str]], field: Union[str, Sequence[str]],
......
...@@ -15,9 +15,12 @@ import pandas as pd ...@@ -15,9 +15,12 @@ import pandas as pd
from saqc.constants import UNFLAGGED from saqc.constants import UNFLAGGED
import saqc import saqc
from saqc.funcs.interpolation import _SUPPORTED_METHODS from saqc.funcs.interpolation import _SUPPORTED_METHODS
from saqc.lib.docurator import doc
import saqc.funcs
class Interpolation: class Interpolation:
@doc(saqc.funcs.interpolation.interpolateByRolling.__doc__)
def interpolateByRolling( def interpolateByRolling(
self, self,
field: str, field: str,
...@@ -30,6 +33,7 @@ class Interpolation: ...@@ -30,6 +33,7 @@ class Interpolation:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("interpolateByRolling", locals()) return self._defer("interpolateByRolling", locals())
@doc(saqc.funcs.interpolation.interpolateInvalid.__doc__)
def interpolateInvalid( def interpolateInvalid(
self, self,
field: str, field: str,
...@@ -42,6 +46,7 @@ class Interpolation: ...@@ -42,6 +46,7 @@ class Interpolation:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("interpolateInvalid", locals()) return self._defer("interpolateInvalid", locals())
@doc(saqc.funcs.interpolation.interpolateIndex.__doc__)
def interpolateIndex( def interpolateIndex(
self, self,
field: str, field: str,
......
...@@ -13,9 +13,12 @@ from typing import Callable ...@@ -13,9 +13,12 @@ from typing import Callable
from saqc.constants import BAD from saqc.constants import BAD
import saqc import saqc
from saqc.lib.docurator import doc
import saqc.funcs
class Noise: class Noise:
@doc(saqc.funcs.noise.flagByStatLowPass.__doc__)
def flagByStatLowPass( def flagByStatLowPass(
self, self,
field: str, field: str,
......
...@@ -15,9 +15,12 @@ from typing_extensions import Literal ...@@ -15,9 +15,12 @@ from typing_extensions import Literal
from saqc.constants import BAD from saqc.constants import BAD
import saqc import saqc
from saqc.lib.docurator import doc
import saqc.funcs
class Outliers: class Outliers:
@doc(saqc.funcs.outliers.flagByStray.__doc__)
def flagByStray( def flagByStray(
self, self,
field: str, field: str,
...@@ -30,6 +33,7 @@ class Outliers: ...@@ -30,6 +33,7 @@ class Outliers:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagByStray", locals()) return self._defer("flagByStray", locals())
@doc(saqc.funcs.outliers.flagMVScores.__doc__)
def flagMVScores( def flagMVScores(
self, self,
field: Sequence[str], field: Sequence[str],
...@@ -49,6 +53,7 @@ class Outliers: ...@@ -49,6 +53,7 @@ class Outliers:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagMVScores", locals()) return self._defer("flagMVScores", locals())
@doc(saqc.funcs.outliers.flagRaise.__doc__)
def flagRaise( def flagRaise(
self, self,
field: str, field: str,
...@@ -64,6 +69,7 @@ class Outliers: ...@@ -64,6 +69,7 @@ class Outliers:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagRaise", locals()) return self._defer("flagRaise", locals())
@doc(saqc.funcs.outliers.flagMAD.__doc__)
def flagMAD( def flagMAD(
self, self,
field: str, field: str,
...@@ -74,6 +80,7 @@ class Outliers: ...@@ -74,6 +80,7 @@ class Outliers:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagMAD", locals()) return self._defer("flagMAD", locals())
@doc(saqc.funcs.outliers.flagOffset.__doc__)
def flagOffset( def flagOffset(
self, self,
field: str, field: str,
...@@ -86,6 +93,7 @@ class Outliers: ...@@ -86,6 +93,7 @@ class Outliers:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagOffset", locals()) return self._defer("flagOffset", locals())
@doc(saqc.funcs.outliers.flagByGrubbs.__doc__)
def flagByGrubbs( def flagByGrubbs(
self, self,
field: str, field: str,
...@@ -98,6 +106,7 @@ class Outliers: ...@@ -98,6 +106,7 @@ class Outliers:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagByGrubbs", locals()) return self._defer("flagByGrubbs", locals())
@doc(saqc.funcs.outliers.flagRange.__doc__)
def flagRange( def flagRange(
self, self,
field: str, field: str,
...@@ -108,6 +117,7 @@ class Outliers: ...@@ -108,6 +117,7 @@ class Outliers:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagRange", locals()) return self._defer("flagRange", locals())
@doc(saqc.funcs.outliers.flagCrossStatistics.__doc__)
def flagCrossStatistics( def flagCrossStatistics(
self, self,
field: Sequence[str], field: Sequence[str],
...@@ -116,4 +126,4 @@ class Outliers: ...@@ -116,4 +126,4 @@ class Outliers:
flag: float = BAD, flag: float = BAD,
**kwargs, **kwargs,
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("flagCrossStatistic", locals()) return self._defer("flagCrossStatistics", locals())
...@@ -9,9 +9,12 @@ from __future__ import annotations ...@@ -9,9 +9,12 @@ from __future__ import annotations
from saqc.constants import BAD from saqc.constants import BAD
import saqc import saqc
from saqc.lib.docurator import doc
import saqc.funcs
class Pattern: class Pattern:
@doc(saqc.funcs.pattern.flagPatternByDTW.__doc__)
def flagPatternByDTW( def flagPatternByDTW(
self, self,
field, field,
......
...@@ -16,9 +16,12 @@ from typing_extensions import Literal ...@@ -16,9 +16,12 @@ from typing_extensions import Literal
from saqc.constants import BAD from saqc.constants import BAD
import saqc import saqc
from saqc.funcs.interpolation import _SUPPORTED_METHODS from saqc.funcs.interpolation import _SUPPORTED_METHODS
from saqc.lib.docurator import doc
import saqc.funcs
class Resampling: class Resampling:
@doc(saqc.funcs.resampling.linear.__doc__)
def linear( def linear(
self, self,
field: str, field: str,
...@@ -27,6 +30,7 @@ class Resampling: ...@@ -27,6 +30,7 @@ class Resampling:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("linear", locals()) return self._defer("linear", locals())
@doc(saqc.funcs.resampling.interpolate.__doc__)
def interpolate( def interpolate(
self, self,
field: str, field: str,
...@@ -37,6 +41,7 @@ class Resampling: ...@@ -37,6 +41,7 @@ class Resampling:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("interpolate", locals()) return self._defer("interpolate", locals())
@doc(saqc.funcs.resampling.shift.__doc__)
def shift( def shift(
self, self,
field: str, field: str,
...@@ -47,6 +52,7 @@ class Resampling: ...@@ -47,6 +52,7 @@ class Resampling:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("shift", locals()) return self._defer("shift", locals())
@doc(saqc.funcs.resampling.resample.__doc__)
def resample( def resample(
self, self,
field: str, field: str,
...@@ -63,6 +69,7 @@ class Resampling: ...@@ -63,6 +69,7 @@ class Resampling:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("resample", locals()) return self._defer("resample", locals())
@doc(saqc.funcs.resampling.concatFlags.__doc__)
def concatFlags( def concatFlags(
self, self,
field: str, field: str,
......
...@@ -15,10 +15,13 @@ from typing_extensions import Literal ...@@ -15,10 +15,13 @@ from typing_extensions import Literal
from saqc.constants import BAD from saqc.constants import BAD
import saqc import saqc
from saqc.lib.docurator import doc
import saqc.funcs
class Residues: class Residuals:
def calculatePolynomialResidues( @doc(saqc.funcs.residuals.calculatePolynomialResiduals.__doc__)
def calculatePolynomialResiduals(
self, self,
field: str, field: str,
window: Union[str, int], window: Union[str, int],
...@@ -26,9 +29,10 @@ class Residues: ...@@ -26,9 +29,10 @@ class Residues:
min_periods: Optional[int] = 0, min_periods: Optional[int] = 0,
**kwargs, **kwargs,
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("calculatePolynomialResidues", locals()) return self._defer("calculatePolynomialResiduals", locals())
def calculateRollingResidues( @doc(saqc.funcs.residuals.calculateRollingResiduals.__doc__)
def calculateRollingResiduals(
self, self,
field: str, field: str,
window: Union[str, int], window: Union[str, int],
...@@ -37,4 +41,4 @@ class Residues: ...@@ -37,4 +41,4 @@ class Residues:
center: bool = True, center: bool = True,
**kwargs, **kwargs,
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("calculateRollingResidues", locals()) return self._defer("calculateRollingResiduals", locals())
...@@ -12,9 +12,12 @@ import numpy as np ...@@ -12,9 +12,12 @@ import numpy as np
import pandas as pd import pandas as pd
from saqc.constants import BAD from saqc.constants import BAD
from saqc.lib.docurator import doc
import saqc.funcs
class Rolling: class Rolling:
@doc(saqc.funcs.rolling.roll.__doc__)
def roll( def roll(
self, self,
field: str, field: str,
......
...@@ -14,9 +14,12 @@ import pandas as pd ...@@ -14,9 +14,12 @@ import pandas as pd
from typing_extensions import Literal from typing_extensions import Literal
import saqc import saqc
from saqc.lib.docurator import doc
import saqc.funcs
class Scores: class Scores:
@doc(saqc.funcs.scores.assignKNNScore.__doc__)
def assignKNNScore( def assignKNNScore(
self, self,
field: Sequence[str], field: Sequence[str],
......
...@@ -14,20 +14,26 @@ import saqc ...@@ -14,20 +14,26 @@ import saqc
import numpy as np import numpy as np
from saqc.constants import FILTER_NONE from saqc.constants import FILTER_NONE
from saqc.lib.docurator import doc
import saqc.funcs
class Tools: class Tools:
@doc(saqc.funcs.tools.copyField.__doc__)
def copyField( def copyField(
self, field: str, target: str, overwrite: bool = False, **kwargs self, field: str, target: str, overwrite: bool = False, **kwargs
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("copyField", locals()) return self._defer("copyField", locals())
@doc(saqc.funcs.tools.dropField.__doc__)
def dropField(self, field: str, **kwargs) -> saqc.SaQC: def dropField(self, field: str, **kwargs) -> saqc.SaQC:
return self._defer("dropField", locals()) return self._defer("dropField", locals())
@doc(saqc.funcs.tools.renameField.__doc__)
def renameField(self, field: str, new_name: str, **kwargs) -> saqc.SaQC: def renameField(self, field: str, new_name: str, **kwargs) -> saqc.SaQC:
return self._defer("renameField", locals()) return self._defer("renameField", locals())
@doc(saqc.funcs.tools.maskTime.__doc__)
def maskTime( def maskTime(
self, self,
field: str, field: str,
...@@ -40,6 +46,7 @@ class Tools: ...@@ -40,6 +46,7 @@ class Tools:
) -> saqc.SaQC: ) -> saqc.SaQC:
return self._defer("maskTime", locals()) return self._defer("maskTime", locals())
@doc(saqc.funcs.tools.plot.__doc__)
def plot( def plot(
self, self,
field: str, field: str,
......
...@@ -12,9 +12,12 @@ from typing import Callable, Optional, Union ...@@ -12,9 +12,12 @@ from typing import Callable, Optional, Union
import pandas as pd import pandas as pd
import saqc import saqc
from saqc.lib.docurator import doc
import saqc.funcs
class Transformation: class Transformation:
@doc(saqc.funcs.transformation.transform.__doc__)
def transform( def transform(
self, self,
field: str, field: str,
......