diff options
author | Birte Kristina Friesel <birte.friesel@uos.de> | 2024-01-12 15:28:17 +0100 |
---|---|---|
committer | Birte Kristina Friesel <birte.friesel@uos.de> | 2024-01-12 15:28:17 +0100 |
commit | 94865648210a69544b049acf54991eba35d92c18 (patch) | |
tree | b343d1e88b1eedf66f0fe1fdfa54360114aaddbf | |
parent | 5d6f965c656466b99457fd3fea80183f2e81fa43 (diff) |
add --filter-observations
-rwxr-xr-x | bin/analyze-archive.py | 6 | ||||
-rwxr-xr-x | bin/analyze-kconfig.py | 6 | ||||
-rwxr-xr-x | bin/analyze-log.py | 6 | ||||
-rw-r--r-- | lib/cli.py | 6 | ||||
-rw-r--r-- | lib/utils.py | 17 |
5 files changed, 41 insertions, 0 deletions
diff --git a/bin/analyze-archive.py b/bin/analyze-archive.py index 9414d1a..4641477 100755 --- a/bin/analyze-archive.py +++ b/bin/analyze-archive.py @@ -285,6 +285,11 @@ if __name__ == "__main__": else: args.filter_param = list() + if args.filter_observation: + args.filter_observation = list( + map(lambda x: tuple(x.split(":")), args.filter_observation.split(",")) + ) + if args.with_safe_functions is not None: safe_functions_enabled = True @@ -379,6 +384,7 @@ if __name__ == "__main__": dfatool.utils.ignore_param(by_name, parameters, args.ignore_param) dfatool.utils.filter_aggregate_by_param(by_name, parameters, args.filter_param) + dfatool.utils.filter_aggregate_by_observation(by_name, args.filter_observation) if args.param_shift: param_shift = dfatool.cli.parse_param_shift(args.param_shift) diff --git a/bin/analyze-kconfig.py b/bin/analyze-kconfig.py index bdfde8f..e17e383 100755 --- a/bin/analyze-kconfig.py +++ b/bin/analyze-kconfig.py @@ -305,6 +305,12 @@ def main(): by_name, parameter_names, args.filter_param ) + if args.filter_observation: + args.filter_observation = list( + map(lambda x: tuple(x.split(":")), args.filter_observation.split(",")) + ) + dfatool.utils.filter_aggregate_by_observation(by_name, args.filter_observation) + if args.max_std: max_std = dict() if "=" in args.max_std: diff --git a/bin/analyze-log.py b/bin/analyze-log.py index 65f3b44..e3ddef8 100755 --- a/bin/analyze-log.py +++ b/bin/analyze-log.py @@ -62,6 +62,11 @@ def main(): else: args.filter_param = list() + if args.filter_observation: + args.filter_observation = list( + map(lambda x: tuple(x.split(":")), args.filter_observation.split(",")) + ) + observations = reduce(lambda a, b: a + b, map(parse_logfile, args.logfiles)) by_name, parameter_names = dfatool.utils.observations_to_by_name(observations) del observations @@ -71,6 +76,7 @@ def main(): dfatool.utils.ignore_param(by_name, parameter_names, args.ignore_param) dfatool.utils.filter_aggregate_by_param(by_name, parameter_names, args.filter_param) + dfatool.utils.filter_aggregate_by_observation(by_name, args.filter_observation) if args.param_shift: param_shift = dfatool.cli.parse_param_shift(args.param_shift) @@ -523,6 +523,12 @@ def add_standard_arguments(parser): "Note that this may remove entire function calls from the model.", ) parser.add_argument( + "--filter-observation", + metavar="<key>:<attribute>[,<key>:<attribute>...]", + type=str, + help="Only consider measurements of <key> <attribute>", + ) + parser.add_argument( "--ignore-param", metavar="<parameter name>[,<parameter name>,...]", type=str, diff --git a/lib/utils.py b/lib/utils.py index 40d8b69..4282a14 100644 --- a/lib/utils.py +++ b/lib/utils.py @@ -580,6 +580,23 @@ def shift_param_in_aggregate(aggregate, parameters, parameter_shift): ) +def filter_aggregate_by_observation(aggregate, observation_filter): + if observation_filter is None: + return + to_pop = dict() + for name in aggregate.keys(): + to_pop[name] = list() + for attribute in aggregate[name]["attributes"]: + if (name, attribute) not in observation_filter: + to_pop[name].append(attribute) + for name, attributes in to_pop.items(): + for attribute in attributes: + aggregate[name]["attributes"].remove(attribute) + aggregate[name].pop(attribute) + if len(aggregate[name]["attributes"]) == 0: + aggregate.pop(name) + + def filter_aggregate_by_param(aggregate, parameters, parameter_filter): """ Remove entries which do not have certain parameter values from `aggregate`. |