summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBirte Kristina Friesel <birte.friesel@uos.de>2025-05-21 16:13:35 +0200
committerBirte Kristina Friesel <birte.friesel@uos.de>2025-05-21 16:13:35 +0200
commit1d4950905fa13fd3aacbd22ed24ce880b2292faa (patch)
tree80817e63c133cb4b70f56d7d23d10be89265f2cb
parentbeb6286bb8e6ca6d224a64202613200f1870d663 (diff)
anlyze-trace: detect non-deterministic transitions (aka: unhandled loops)
-rwxr-xr-xbin/analyze-trace.py19
1 files changed, 18 insertions, 1 deletions
diff --git a/bin/analyze-trace.py b/bin/analyze-trace.py
index 1d55465..372dd4e 100755
--- a/bin/analyze-trace.py
+++ b/bin/analyze-trace.py
@@ -183,9 +183,26 @@ def main():
for name in sorted(delta_by_name.keys()):
for t_from, t_to_set in delta_by_name[name].items():
+ delta_param_sets = list()
+ to_names = list()
for t_to in t_to_set:
- n_confs = len(delta_param_by_name[name][(t_from, t_to)])
+ delta_params = delta_param_by_name[name][(t_from, t_to)]
+ delta_param_sets.append(delta_params)
+ to_names.append(t_to)
+ n_confs = len(delta_params)
print(f"{name} {t_from} → {t_to} ({n_confs:4d}x)")
+ for i in range(len(delta_param_sets)):
+ for j in range(i + 1, len(delta_param_sets)):
+ if not delta_param_sets[i].isdisjoint(delta_param_sets[j]):
+ intersection = delta_param_sets[i].intersection(
+ delta_param_sets[j]
+ )
+ logging.error(
+ f"Outbound transitions of <{t_from}> are not deterministic: <{to_names[i]}> and <{to_names[j]}> are both taken for {intersection}"
+ )
+ raise RuntimeError(
+ f"Outbound transitions of <{t_from}> are not deterministic"
+ )
print("")
by_name, parameter_names = dfatool.utils.observations_to_by_name(observations)