diff options
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/workload.py | 68 |
1 files changed, 11 insertions, 57 deletions
diff --git a/bin/workload.py b/bin/workload.py index 9e066a5..72b66bb 100755 --- a/bin/workload.py +++ b/bin/workload.py @@ -6,6 +6,7 @@ import logging import sys import dfatool.cli import dfatool.utils +from dfatool.behaviour import EventSequenceModel from dfatool.model import AnalyticModel @@ -66,65 +67,18 @@ def main(): if args.info: for i in range(len(models)): print(f"""{args.models[i]}: {" ".join(models[i].parameters)}""") + _, param_info = models[i].get_fitted() for name in models[i].names: for attr in models[i].attributes(name): - print(f" {name}.{attr}") - - aggregate = args.aggregate_init - for event in args.event: - - event_normalizer = lambda p: p - if "/" in event: - v1, v2 = event.split("/") - if dfatool.utils.is_numeric(v1): - event = v2.strip() - event_normalizer = lambda p: dfatool.utils.soft_cast_float(v1) / p - elif dfatool.utils.is_numeric(v2): - event = v1.strip() - event_normalizer = lambda p: p / dfatool.utils.soft_cast_float(v2) - else: - raise RuntimeError(f"Cannot parse '{event}'") - - nn, param = event.split("(") - name, action = nn.split(".") - param_model = None - ref_model = None - - for model in models: - if name in model.names and action in model.attributes(name): - ref_model = model - if args.use_lut: - param_model = model.get_param_lut(allow_none=True) - else: - param_model, param_info = model.get_fitted() - break - - if param_model is None: - raise RuntimeError(f"Did not find a model for {name}.{action}") - - param = param.removesuffix(")") - if param == "": - param = dict() - else: - param = dfatool.utils.parse_conf_str(param) - - param_list = dfatool.utils.param_dict_to_list(param, ref_model.parameters) - - if not args.use_lut and not param_info(name, action).is_predictable(param_list): - logging.warning( - f"Cannot predict {name}.{action}({param}), falling back to static model" - ) - - event_output = event_normalizer( - param_model( - name, - action, - param=param_list, - ) - ) - - if args.aggregate == "sum": - aggregate += event_output + print(f" {name}.{attr} {param_info(name, attr)}") + + workload = EventSequenceModel(models) + aggregate = workload.eval_strs( + args.event, + aggregate=args.aggregate, + aggregate_init=args.aggregate_init, + use_lut=args.use_lut, + ) if args.normalize_output: sf = dfatool.cli.parse_shift_function( |