#!/usr/bin/env python3 """analyze-log - Generate a model from performance benchmarks log files foo """ import argparse import dfatool.cli import dfatool.plotter import dfatool.utils from dfatool.model import AnalyticModel from dfatool.validation import CrossValidator from functools import reduce import re def kv_to_param(kv_str, cast): key, value = kv_str.split("=") value = cast(value) return key, value def kv_to_param_f(kv_str): return kv_to_param(kv_str, dfatool.utils.soft_cast_float) def kv_to_param_i(kv_str): return kv_to_param(kv_str, dfatool.utils.soft_cast_int) def parse_logfile(filename): observations = list() with open(filename, "r") as f: for line in f: m = re.search(r"\[::\] *([^|]*?) *[|] *([^|]*?) *[|] *(.*)", line) if m: name_str = m.group(1) param_str = m.group(2) attr_str = m.group(3) param = dict(map(kv_to_param_i, param_str.split(" "))) attr = dict(map(kv_to_param_f, attr_str.split(" "))) observations.append( { "name": name_str, "param": param, "attribute": attr, } ) return observations def main(): parser = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter, description=__doc__ ) dfatool.cli.add_standard_arguments(parser) parser.add_argument( "--plot-unparam", metavar="::[;::