From c47917aa5340f291cae663e13bb31351cc4a5cd5 Mon Sep 17 00:00:00 2001
From: David Schaefer <david.schaefer@ufz.de>
Date: Wed, 15 Mar 2023 17:08:51 +0100
Subject: [PATCH] interpol-options

---
 CHANGELOG.md                |  1 +
 saqc/funcs/interpolation.py |  2 +-
 saqc/funcs/resampling.py    | 30 ++++++++++++++++++++++++------
 3 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7d348a4b5..d1768c3cf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
 ### Added
 - Methods `logicalAnd` and `logicalOr`
 - `Flags` supports slicing and column selection with `list` or a `pd.Index`.
+- added option `limit` to functions `interpolate` and `linear`.
 ### Changed
 ### Removed
 ### Fixed
diff --git a/saqc/funcs/interpolation.py b/saqc/funcs/interpolation.py
index 9def348d0..f4465f9c9 100644
--- a/saqc/funcs/interpolation.py
+++ b/saqc/funcs/interpolation.py
@@ -287,7 +287,7 @@ class InterpolationMixin:
         freq: str,
         method: _SUPPORTED_METHODS,
         order: int = 2,
-        limit: int | None = 2,
+        limit: int | str | None = 2,
         extrapolate: Literal["forward", "backward", "both"] = None,
         **kwargs,
     ) -> "SaQC":
diff --git a/saqc/funcs/resampling.py b/saqc/funcs/resampling.py
index ebc02bd4b..4a792cae1 100644
--- a/saqc/funcs/resampling.py
+++ b/saqc/funcs/resampling.py
@@ -40,6 +40,7 @@ class ResamplingMixin:
         self: "SaQC",
         field: str,
         freq: str,
+        limit: int | str | None = None,
         **kwargs,
     ) -> "SaQC":
         """
@@ -62,21 +63,30 @@ class ResamplingMixin:
         freq : str
             An offset string. The frequency of the grid you want to interpolate your data at.
 
+        limit : int or str, optional
+            Upper limit of missing values (with respect to `freq`) to fill. The limit can either be expressed
+            as the number of consecutive missing values (integer) or temporal extension of the gaps to be filled
+            (Offset String).
+            If `None` is passed, no Limit is set.
+
         Returns
         -------
         saqc.SaQC
         """
-        reserved = ["method", "order", "limit", "downgrade"]
+        reserved = ["method", "order", "downgrade"]
         kwargs = filterKwargs(kwargs, reserved)
-        return self.interpolateIndex(field, freq, "time", **kwargs)
+        return self.interpolateIndex(
+            field=field, freq=freq, method="time", limit=limit, **kwargs
+        )
 
     @register(mask=["field"], demask=[], squeeze=[])
     def interpolate(
         self: "SaQC",
         field: str,
         freq: str,
-        method: _SUPPORTED_METHODS,
+        method: _SUPPORTED_METHODS = "linear",
         order: int = 1,
+        limit: int | str | None = None,
         **kwargs,
     ) -> "SaQC":
         """
@@ -106,20 +116,28 @@ class ResamplingMixin:
             An offset string. The frequency of the grid you want to interpolate your data at.
 
         method : {"linear", "time", "nearest", "zero", "slinear", "quadratic", "cubic", "spline", "barycentric",
-            "polynomial", "krogh", "piecewise_polynomial", "spline", "pchip", "akima"}
+            "polynomial", "krogh", "piecewise_polynomial", "spline", "pchip", "akima"}, default "linear"
             The interpolation method you want to apply.
 
         order : int, default 1
             If your selected interpolation method can be performed at different *orders* - here you pass the desired
             order.
 
+        limit : int or str, optional
+            Upper limit of missing values (with respect to `freq`) to fill. The limit can either be expressed
+            as the number of consecutive missing values (integer) or temporal extension of the gaps to be filled
+            (Offset String).
+            If `None` is passed, no Limit is set.
+
         Returns
         -------
         saqc.SaQC
         """
-        reserved = ["limit", "downgrade"]
+        reserved = ["downgrade"]
         kwargs = filterKwargs(kwargs, reserved)
-        return self.interpolateIndex(field, freq, method=method, order=order, **kwargs)
+        return self.interpolateIndex(
+            field=field, freq=freq, method=method, limit=limit, order=order, **kwargs
+        )
 
     @register(mask=["field"], demask=[], squeeze=[])
     def shift(
-- 
GitLab