diff options
author | Daniel Friesel <daniel.friesel@uos.de> | 2022-06-22 15:09:48 +0200 |
---|---|---|
committer | Daniel Friesel <daniel.friesel@uos.de> | 2022-06-22 15:09:48 +0200 |
commit | 6de2e8ee503f538132f5745e9c3bc35df98a0b4a (patch) | |
tree | 352712ebb8b1652273541b7c3e4b6172677cd5a8 /bin | |
parent | d6a496e6fb879d8eb701fc5f90d76915e44bbbf9 (diff) |
analyze-kconfig: add csv export
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/analyze-kconfig.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/bin/analyze-kconfig.py b/bin/analyze-kconfig.py index a51451a..aea441e 100755 --- a/bin/analyze-kconfig.py +++ b/bin/analyze-kconfig.py @@ -25,6 +25,24 @@ from dfatool.model import AnalyticModel from dfatool.validation import CrossValidator +def write_csv(f, model, attr): + model_attr = model.attr_by_name[attr] + attributes = sorted(model_attr.keys()) + print(", ".join(model.parameters) + ", " + ", ".join(attributes), file=f) + + # by convention, model_attr[attr].param_values is the same regardless of 'attr' + for param_tuple in model_attr[attributes[0]].param_values: + param_data = map( + lambda a: model_attr[a].by_param.get(tuple(param_tuple), list()), attributes + ) + print( + ", ".join(map(str, param_tuple)) + + ", " + + ", ".join(map(str, map(np.mean, param_data))), + file=f, + ) + + def main(): parser = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter, description=__doc__ @@ -57,6 +75,17 @@ def main(): help="Specify desired maximum standard deviation for decision tree generation, either as float (global) or <key>/<attribute>=<value>[,<key>/<attribute>=<value>,...]", ) parser.add_argument( + "--export-csv", + type=str, + metavar="FILE", + help="Export observations aggregated by parameter to FILE", + ) + parser.add_argument( + "--export-csv-only", + action="store_true", + help="Exit after exporting observations to CSV file", + ) + parser.add_argument( "--export-observations", type=str, metavar="FILE.json.xz", @@ -289,6 +318,15 @@ def main(): logging.warning(f"Skipping LUT model: {e}") lut_model = None + if args.export_csv: + for name in model.names: + target = f"{args.export_csv}-{name}.csv" + print(f"Exporting aggregated data to {target}") + with open(target, "w") as f: + write_csv(f, model, name) + if args.export_csv_only: + return + fit_start_time = time.time() param_model, param_info = model.get_fitted() fit_duration = time.time() - fit_start_time |