diff options
author | Birte Kristina Friesel <birte.friesel@uos.de> | 2024-02-09 09:41:26 +0100 |
---|---|---|
committer | Birte Kristina Friesel <birte.friesel@uos.de> | 2024-02-09 09:41:26 +0100 |
commit | cfc77a403e9487580a966669cc4be0f90d464d62 (patch) | |
tree | 7134b0787808094d182ea3223c64a723517ff734 /lib/cli.py | |
parent | c806d27c1d5d2495096be83911d84ea5ed43d0ee (diff) |
filter-param: support basic numeric operations and ∈ conditions
Diffstat (limited to 'lib/cli.py')
-rw-r--r-- | lib/cli.py | 27 |
1 files changed, 23 insertions, 4 deletions
@@ -416,8 +416,8 @@ def boxplot_param(args, model): title = None param_is_filtered = dict() if args.filter_param: - title = "filter: " + ", ".join( - map(lambda kv: f"{kv[0]}={kv[1]}", args.filter_param) + title = "filter: " + " && ".join( + map(lambda kv: f"{kv[0]} {kv[1]} {kv[2]}", args.filter_param) ) for param_name, _ in args.filter_param: param_is_filtered[param_name] = True @@ -595,9 +595,11 @@ def add_standard_arguments(parser): ) parser.add_argument( "--filter-param", - metavar="<parameter name>=<parameter value>[,<parameter name>=<parameter value>...]", + metavar="<parameter name><condition>[;<parameter name><condition>...]", type=str, - help="Only consider measurements where <parameter name> is <parameter value>. " + help="Only consider measurements where <parameter name> satisfies <condition>. " + "<condition> may be <operator><parameter value> with operator being < / <= / = / >= / >, " + "or ∈<parameter value>[,<parameter value>...]. " "All other measurements (including those where it is None, that is, has not been set yet) are discarded. " "Note that this may remove entire function calls from the model.", ) @@ -668,6 +670,23 @@ def add_standard_arguments(parser): ) +def parse_filter_string(filter_string): + if "<=" in filter_string: + p, v = filter_string.split("<=") + return (p, "≤", v) + if ">=" in filter_string: + p, v = filter_string.split(">=") + return (p, "≥", v) + if "!=" in filter_string: + p, v = filter_string.split("!=") + return (p, "≠", v) + for op in ("<", ">", "≤", "≥", "=", "∈", "≠"): + if op in filter_string: + p, v = filter_string.split(op) + return (p, op, v) + raise ValueError(f"Cannot parse '{filter_string}'") + + def parse_shift_function(param_name, param_shift): if param_shift.startswith("+"): param_shift_value = float(param_shift[1:]) |