summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorDaniel Friesel <daniel.friesel@uos.de>2022-06-22 15:09:48 +0200
committerDaniel Friesel <daniel.friesel@uos.de>2022-06-22 15:09:48 +0200
commit6de2e8ee503f538132f5745e9c3bc35df98a0b4a (patch)
tree352712ebb8b1652273541b7c3e4b6172677cd5a8 /bin
parentd6a496e6fb879d8eb701fc5f90d76915e44bbbf9 (diff)
analyze-kconfig: add csv export
Diffstat (limited to 'bin')
-rwxr-xr-xbin/analyze-kconfig.py38
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