summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/analyze-kconfig.py39
-rwxr-xr-xbin/analyze-log.py39
-rw-r--r--lib/cli.py41
3 files changed, 43 insertions, 76 deletions
diff --git a/bin/analyze-kconfig.py b/bin/analyze-kconfig.py
index ec673e8..868d106 100755
--- a/bin/analyze-kconfig.py
+++ b/bin/analyze-kconfig.py
@@ -403,44 +403,7 @@ def main():
)
if args.boxplot_param:
- title = None
- param_is_filtered = dict()
- if args.filter_param:
- title = "filter: " + ", ".join(
- map(lambda kv: f"{kv[0]}={kv[1]}", args.filter_param)
- )
- for param_name, _ in args.filter_param:
- param_is_filtered[param_name] = True
- by_param = model.get_by_param()
- for name in model.names:
- attr_names = sorted(model.attributes(name))
- param_keys = list(
- map(lambda kv: kv[1], filter(lambda kv: kv[0] == name, by_param.keys()))
- )
- param_desc = list(
- map(
- lambda param_key: ", ".join(
- map(
- lambda ip: f"{model.param_name(ip[0])}={ip[1]}",
- filter(
- lambda ip: model.param_name(ip[0])
- not in param_is_filtered,
- enumerate(param_key),
- ),
- )
- ),
- param_keys,
- )
- )
- for attribute in attr_names:
- dfatool.plotter.boxplot(
- param_desc,
- list(map(lambda k: by_param[(name, k)][attribute], param_keys)),
- output=f"{args.boxplot_param}{name}-{attribute}.pdf",
- title=title,
- ylabel=attribute,
- show=not args.non_interactive,
- )
+ dfatool.cli.boxplot_param(args, model)
if args.plot_param:
for kv in args.plot_param.split(";"):
diff --git a/bin/analyze-log.py b/bin/analyze-log.py
index 9b50c72..002f48e 100755
--- a/bin/analyze-log.py
+++ b/bin/analyze-log.py
@@ -178,44 +178,7 @@ def main():
)
if args.boxplot_param:
- title = None
- param_is_filtered = dict()
- if args.filter_param:
- title = "filter: " + ", ".join(
- map(lambda kv: f"{kv[0]}={kv[1]}", args.filter_param)
- )
- for param_name, _ in args.filter_param:
- param_is_filtered[param_name] = True
- by_param = model.get_by_param()
- for name in model.names:
- attr_names = sorted(model.attributes(name))
- param_keys = list(
- map(lambda kv: kv[1], filter(lambda kv: kv[0] == name, by_param.keys()))
- )
- param_desc = list(
- map(
- lambda param_key: ", ".join(
- map(
- lambda ip: f"{model.param_name(ip[0])}={ip[1]}",
- filter(
- lambda ip: model.param_name(ip[0])
- not in param_is_filtered,
- enumerate(param_key),
- ),
- )
- ),
- param_keys,
- )
- )
- for attribute in attr_names:
- dfatool.plotter.boxplot(
- param_desc,
- list(map(lambda k: by_param[(name, k)][attribute], param_keys)),
- output=f"{args.boxplot_param}{name}-{attribute}.pdf",
- title=title,
- ylabel=attribute,
- show=not args.non_interactive,
- )
+ dfatool.cli.boxplot_param(args, model)
if args.cross_validate:
xv_method, xv_count = args.cross_validate.split(":")
diff --git a/lib/cli.py b/lib/cli.py
index 41bbe6a..5c57278 100644
--- a/lib/cli.py
+++ b/lib/cli.py
@@ -6,6 +6,7 @@ from dfatool.functions import (
StaticFunction,
FOLFunction,
)
+import dfatool.plotter
import logging
import numpy as np
@@ -269,6 +270,46 @@ def export_json_unparam(model, filename):
logger.info(f"JSON unparam data saved to {filename}")
+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)
+ )
+ for param_name, _ in args.filter_param:
+ param_is_filtered[param_name] = True
+ by_param = model.get_by_param()
+ for name in model.names:
+ attr_names = sorted(model.attributes(name))
+ param_keys = list(
+ map(lambda kv: kv[1], filter(lambda kv: kv[0] == name, by_param.keys()))
+ )
+ param_desc = list(
+ map(
+ lambda param_key: ", ".join(
+ map(
+ lambda ip: f"{model.param_name(ip[0])}={ip[1]}",
+ filter(
+ lambda ip: model.param_name(ip[0]) not in param_is_filtered,
+ enumerate(param_key),
+ ),
+ )
+ ),
+ param_keys,
+ )
+ )
+ for attribute in attr_names:
+ dfatool.plotter.boxplot(
+ param_desc,
+ list(map(lambda k: by_param[(name, k)][attribute], param_keys)),
+ output=f"{args.boxplot_param}{name}-{attribute}.pdf",
+ title=title,
+ ylabel=attribute,
+ show=not args.non_interactive,
+ )
+
+
def add_standard_arguments(parser):
parser.add_argument(
"--export-dot",