Skip to content
Snippets Groups Projects
Commit bcf1a6b3 authored by David Schäfer's avatar David Schäfer
Browse files

[FIX] bring translation to config workflow

parent c299afed
No related branches found
No related tags found
No related merge requests found
......@@ -219,7 +219,9 @@ class SaQC(FuncModules):
from saqc.core.reader import readConfig
out = stdcopy.deepcopy(self)
out._planned.extend(readConfig(fname, self._data, self._nodata))
out._planned.extend(
readConfig(fname, self._translator, self._data, self._nodata)
)
if self._lazy:
return out
return out.evaluate()
......@@ -297,9 +299,17 @@ class SaQC(FuncModules):
out = self if inplace else self.copy(deep=True)
control = APIController()
# NOTE:
# changes here are likely to be necessary in
# `saqc.core.reader._parseConfig` as well
partial = func.bind(
*fargs,
**{"nodata": self._nodata, "flag": self._translator(flag), **fkwargs},
**{
"nodata": self._nodata,
"flag": self._translator(flag),
"to_mask": self._translator.TO_MASK,
**fkwargs,
},
)
# expand regular expressions
......
......@@ -56,7 +56,7 @@ def _injectOptionalColumns(df):
return df
def _parseConfig(df, data, nodata):
def _parseConfig(df, translator, data, nodata):
funcs = []
for lineno, (_, target, expr) in enumerate(df.itertuples()):
if target == "None" or pd.isnull(target) or pd.isnull(expr):
......@@ -72,7 +72,12 @@ def _parseConfig(df, data, nodata):
control = ConfigController(lineno=lineno + 2, expression=expr)
f = func.bind(**{"nodata": nodata, **kwargs})
if "flag" in kwargs:
kwargs["flag"] = translator(kwargs["flag"])
partial = func.bind(
**{"nodata": nodata, "to_mask": translator.TO_MASK, **kwargs}
)
targets = toSequence(target)
......@@ -81,12 +86,12 @@ def _parseConfig(df, data, nodata):
field=kwargs.get("field", target),
target=target,
)
funcs.append((selector, control, f))
funcs.append((selector, control, partial))
return funcs
def readConfig(fname, data, nodata):
def readConfig(fname, translator, data, nodata):
df = pd.read_csv(
fname,
sep=r"\s*;\s*",
......@@ -102,4 +107,4 @@ def readConfig(fname, data, nodata):
df[F.VARNAME] = df[F.VARNAME].replace(r"^\s*$", np.nan, regex=True)
df[F.TEST] = df[F.TEST].replace(r"^\s*$", np.nan, regex=True)
return _parseConfig(df, data, nodata)
return _parseConfig(df, translator, data, nodata)
......@@ -26,6 +26,8 @@ class PositionalTranslator(Translator):
Implements the translation from and to the flagging scheme implemented by CHS
"""
TO_MASK = DOUBTFUL
_FORWARD: ForwardMap = {0: UNFLAGGED, 1: DOUBTFUL, 2: BAD}
_BACKWARD: BackwardMap = {
UNTOUCHED: 0,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment