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

removed the need for explicit assignments

parent 16a8ab2a
No related branches found
No related tags found
No related merge requests found
...@@ -6,7 +6,6 @@ class Fields: ...@@ -6,7 +6,6 @@ class Fields:
VARNAME = "varname" VARNAME = "varname"
START = "start_date" START = "start_date"
END = "end_date" END = "end_date"
ASSIGN = "assign"
TESTS = "test*" TESTS = "test*"
PLOT = "plot" PLOT = "plot"
LINENUMBER = "line" LINENUMBER = "line"
......
...@@ -20,11 +20,11 @@ def _collectVariables(meta, data): ...@@ -20,11 +20,11 @@ def _collectVariables(meta, data):
variables = [] variables = []
for idx, configrow in meta.iterrows(): for idx, configrow in meta.iterrows():
varname = configrow[Fields.VARNAME] varname = configrow[Fields.VARNAME]
assign = configrow[Fields.ASSIGN] # assign = configrow[Fields.ASSIGN]
if varname in variables: if varname in variables:
continue continue
if (varname in data) or (varname not in variables and assign is True): # if (varname in data): # or (varname not in variables and assign is True):
variables.append(varname) variables.append(varname)
return variables return variables
...@@ -84,6 +84,7 @@ def runner(config_file, flagger, data, flags=None, nodata=np.nan, error_policy=" ...@@ -84,6 +84,7 @@ def runner(config_file, flagger, data, flags=None, nodata=np.nan, error_policy="
# user-test needs fully prepared flags # user-test needs fully prepared flags
checkConfig(config, data, flagger, nodata) checkConfig(config, data, flagger, nodata)
# NOTE: # NOTE:
# the outer loop runs over the flag tests, the inner one over the # the outer loop runs over the flag tests, the inner one over the
# variables. Switching the loop order would complicate the # variables. Switching the loop order would complicate the
...@@ -116,7 +117,7 @@ def runner(config_file, flagger, data, flags=None, nodata=np.nan, error_policy=" ...@@ -116,7 +117,7 @@ def runner(config_file, flagger, data, flags=None, nodata=np.nan, error_policy="
try: try:
# actually run the tests # actually run the tests
dchunk, flagger_chunk_result = evalExpression( dchunk_result, flagger_chunk_result = evalExpression(
flag_test, flag_test,
data=dchunk, data=dchunk,
field=varname, field=varname,
...@@ -131,7 +132,7 @@ def runner(config_file, flagger, data, flags=None, nodata=np.nan, error_policy=" ...@@ -131,7 +132,7 @@ def runner(config_file, flagger, data, flags=None, nodata=np.nan, error_policy="
flagger = flagger.setFlagger(flagger_chunk_result) flagger = flagger.setFlagger(flagger_chunk_result)
plotHook( plotHook(
dchunk, dchunk_result,
flagger_chunk, flagger_chunk,
flagger_chunk_result, flagger_chunk_result,
varname, varname,
......
...@@ -34,10 +34,12 @@ def checkConfig(config_df, data, flagger, nodata): ...@@ -34,10 +34,12 @@ def checkConfig(config_df, data, flagger, nodata):
) )
var_name = config_row[F.VARNAME] var_name = config_row[F.VARNAME]
if var_name not in data.columns and not config_row[F.ASSIGN]: if not var_name:
_raise(config_row, NameError, f"unknown variable '{var_name}'") _raise(config_row, SyntaxError, f"field '{F.VARNAME}' may not be empty")
for col, expr in test_fields.iteritems(): for col, expr in test_fields.iteritems():
if not expr:
_raise(config_row, SyntaxError, f"field '{col}' may not be empty")
try: try:
compileExpression(expr, data, flagger, nodata) compileExpression(expr, data, flagger, nodata)
except (TypeError, NameError, SyntaxError) as exc: except (TypeError, NameError, SyntaxError) as exc:
...@@ -66,7 +68,7 @@ def prepareConfig(config_df, data): ...@@ -66,7 +68,7 @@ def prepareConfig(config_df, data):
raise SyntaxWarning("config file is empty or all lines are #commented") raise SyntaxWarning("config file is empty or all lines are #commented")
# fill missing header fields # fill missing header fields
for field in [F.VARNAME, F.START, F.END, F.ASSIGN, F.PLOT]: for field in [F.VARNAME, F.START, F.END, F.PLOT]:
if field not in config_df: if field not in config_df:
config_df = config_df.assign(**{field: np.nan}) config_df = config_df.assign(**{field: np.nan})
...@@ -76,7 +78,6 @@ def prepareConfig(config_df, data): ...@@ -76,7 +78,6 @@ def prepareConfig(config_df, data):
F.VARNAME: np.nan, F.VARNAME: np.nan,
F.START: data.index.min(), F.START: data.index.min(),
F.END: data.index.max(), F.END: data.index.max(),
F.ASSIGN: False,
F.PLOT: False, F.PLOT: False,
} }
) )
......
...@@ -113,23 +113,6 @@ def test_missingConfig(data, flagger, flags): ...@@ -113,23 +113,6 @@ def test_missingConfig(data, flagger, flags):
assert var1 in pdata and var2 not in pflagger.getFlags() assert var1 in pdata and var2 not in pflagger.getFlags()
@pytest.mark.parametrize("flagger", TESTFLAGGER)
def test_missingVariable(data, flagger):
"""
Test if variables available in the config but not dataset
are handled correctly, i.e. are ignored
"""
var, *_ = data.columns
metadict = [
{F.VARNAME: var, F.TESTS: "flagAll()"},
{F.VARNAME: "empty", F.TESTS: "flagAll()"},
]
metafobj, meta = initMetaDict(metadict, data)
with pytest.raises(NameError):
runner(metafobj, flagger, data)
@pytest.mark.parametrize("flagger", TESTFLAGGER) @pytest.mark.parametrize("flagger", TESTFLAGGER)
def test_errorHandling(data, flagger): def test_errorHandling(data, flagger):
...@@ -160,8 +143,8 @@ def test_duplicatedVariable(flagger): ...@@ -160,8 +143,8 @@ def test_duplicatedVariable(flagger):
var1, *_ = data.columns var1, *_ = data.columns
metadict = [ metadict = [
{F.VARNAME: var1, F.ASSIGN: False, F.TESTS: "flagAll()"}, {F.VARNAME: var1, F.TESTS: "flagAll()"},
{F.VARNAME: var1, F.ASSIGN: True, F.TESTS: "flagAll()"}, {F.VARNAME: var1, F.TESTS: "flagAll()"},
] ]
metafobj, meta = initMetaDict(metadict, data) metafobj, meta = initMetaDict(metadict, data)
...@@ -178,16 +161,15 @@ def test_duplicatedVariable(flagger): ...@@ -178,16 +161,15 @@ def test_duplicatedVariable(flagger):
@pytest.mark.parametrize("flagger", TESTFLAGGER) @pytest.mark.parametrize("flagger", TESTFLAGGER)
def test_assignVariable(flagger): def test_assignVariable(flagger):
""" """
Test the assign keyword, a variable present in the configuration, but not test implicit assignments
dataset will be added to output flags
""" """
data = initData(1) data = initData(1)
var1, *_ = data.columns var1, *_ = data.columns
var2 = "empty" var2 = "empty"
metadict = [ metadict = [
{F.VARNAME: var1, F.ASSIGN: False, F.TESTS: "flagAll()"}, {F.VARNAME: var1, F.TESTS: "flagAll()"},
{F.VARNAME: var2, F.ASSIGN: True, F.TESTS: "flagAll()"}, {F.VARNAME: var2, F.TESTS: "flagAll()"},
] ]
metafobj, meta = initMetaDict(metadict, data) metafobj, meta = initMetaDict(metadict, data)
......
...@@ -20,14 +20,13 @@ def test_configPreparation(data): ...@@ -20,14 +20,13 @@ def test_configPreparation(data):
tests = [ tests = [
{F.VARNAME: var1, F.START: date, F.TESTS: "flagAll()", F.PLOT: True}, {F.VARNAME: var1, F.START: date, F.TESTS: "flagAll()", F.PLOT: True},
{F.VARNAME: var2, F.TESTS: "flagAll()", F.PLOT: False}, {F.VARNAME: var2, F.TESTS: "flagAll()", F.PLOT: False},
{F.VARNAME: var3, F.END: date, F.TESTS: "flagAll()", F.ASSIGN: True}, {F.VARNAME: var3, F.END: date, F.TESTS: "flagAll()"},
{F.VARNAME: var3, F.TESTS: "flagAll()",}, {F.VARNAME: var3, F.TESTS: "flagAll()",},
] ]
defaults = { defaults = {
F.START: data.index.min(), F.START: data.index.min(),
F.END: data.index.max(), F.END: data.index.max(),
F.ASSIGN: False,
F.PLOT: False, F.PLOT: False,
F.LINENUMBER: 2, F.LINENUMBER: 2,
} }
...@@ -65,10 +64,9 @@ def test_configChecks(data, flagger, nodata, caplog): ...@@ -65,10 +64,9 @@ def test_configChecks(data, flagger, nodata, caplog):
tests = [ tests = [
({F.VARNAME: var1, F.TESTS: "range(mn=0)"}, TypeError), ({F.VARNAME: var1, F.TESTS: "range(mn=0)"}, TypeError),
({F.VARNAME: "temp2", F.TESTS: "range(min=3)"}, NameError),
({F.VARNAME: var3, F.TESTS: "flagNothing()"}, NameError), ({F.VARNAME: var3, F.TESTS: "flagNothing()"}, NameError),
({F.VARNAME: "", F.TESTS: "range(min=3)"}, NameError), ({F.VARNAME: "", F.TESTS: "range(min=3)"}, SyntaxError),
({F.VARNAME: "", F.TESTS: ""}, NameError), ({F.VARNAME: var1, F.TESTS: ""}, SyntaxError),
({F.VARNAME: ""}, SyntaxError), ({F.VARNAME: ""}, SyntaxError),
({F.TESTS: "range(min=3)"}, SyntaxError), ({F.TESTS: "range(min=3)"}, SyntaxError),
] ]
......
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