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): ...@@ -219,7 +219,9 @@ class SaQC(FuncModules):
from saqc.core.reader import readConfig from saqc.core.reader import readConfig
out = stdcopy.deepcopy(self) 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: if self._lazy:
return out return out
return out.evaluate() return out.evaluate()
...@@ -297,9 +299,17 @@ class SaQC(FuncModules): ...@@ -297,9 +299,17 @@ class SaQC(FuncModules):
out = self if inplace else self.copy(deep=True) out = self if inplace else self.copy(deep=True)
control = APIController() control = APIController()
# NOTE:
# changes here are likely to be necessary in
# `saqc.core.reader._parseConfig` as well
partial = func.bind( partial = func.bind(
*fargs, *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 # expand regular expressions
......
...@@ -56,7 +56,7 @@ def _injectOptionalColumns(df): ...@@ -56,7 +56,7 @@ def _injectOptionalColumns(df):
return df return df
def _parseConfig(df, data, nodata): def _parseConfig(df, translator, data, nodata):
funcs = [] funcs = []
for lineno, (_, target, expr) in enumerate(df.itertuples()): for lineno, (_, target, expr) in enumerate(df.itertuples()):
if target == "None" or pd.isnull(target) or pd.isnull(expr): if target == "None" or pd.isnull(target) or pd.isnull(expr):
...@@ -72,7 +72,12 @@ def _parseConfig(df, data, nodata): ...@@ -72,7 +72,12 @@ def _parseConfig(df, data, nodata):
control = ConfigController(lineno=lineno + 2, expression=expr) 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) targets = toSequence(target)
...@@ -81,12 +86,12 @@ def _parseConfig(df, data, nodata): ...@@ -81,12 +86,12 @@ def _parseConfig(df, data, nodata):
field=kwargs.get("field", target), field=kwargs.get("field", target),
target=target, target=target,
) )
funcs.append((selector, control, f)) funcs.append((selector, control, partial))
return funcs return funcs
def readConfig(fname, data, nodata): def readConfig(fname, translator, data, nodata):
df = pd.read_csv( df = pd.read_csv(
fname, fname,
sep=r"\s*;\s*", sep=r"\s*;\s*",
...@@ -102,4 +107,4 @@ def readConfig(fname, data, nodata): ...@@ -102,4 +107,4 @@ def readConfig(fname, data, nodata):
df[F.VARNAME] = df[F.VARNAME].replace(r"^\s*$", np.nan, regex=True) 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) 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): ...@@ -26,6 +26,8 @@ class PositionalTranslator(Translator):
Implements the translation from and to the flagging scheme implemented by CHS Implements the translation from and to the flagging scheme implemented by CHS
""" """
TO_MASK = DOUBTFUL
_FORWARD: ForwardMap = {0: UNFLAGGED, 1: DOUBTFUL, 2: BAD} _FORWARD: ForwardMap = {0: UNFLAGGED, 1: DOUBTFUL, 2: BAD}
_BACKWARD: BackwardMap = { _BACKWARD: BackwardMap = {
UNTOUCHED: 0, 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