diff options
Diffstat (limited to 'lib/behaviour.py')
-rw-r--r-- | lib/behaviour.py | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/lib/behaviour.py b/lib/behaviour.py index a0ceb95..638aa93 100644 --- a/lib/behaviour.py +++ b/lib/behaviour.py @@ -100,6 +100,25 @@ class SDKBehaviourModel: raise RuntimeError( f"get_trace({name}, {param_dict}): found infinite loop at {trace}" ) + + if len(next_states) > 1 and current_state in self.transition_guard: + matching_next_states = list() + for candidate in next_states: + for condition in self.transition_guard[current_state][candidate]: + valid = True + for key, value in condition: + if param_dict[key] != value: + valid = False + break + if valid: + matching_next_states.append(candidate) + break + next_states = matching_next_states + + if len(next_states) == 0: + raise RuntimeError( + f"get_trace({name}, {param_dict}): found no valid outbound transitions at {trace}, candidates {self.transition_guard[current_state]}" + ) if len(next_states) > 1: raise RuntimeError( f"get_trace({name}, {param_dict}): found non-deterministic outbound transitions {next_states} at {trace}" @@ -111,7 +130,6 @@ class SDKBehaviourModel: states_seen.add(current_state) current_state = next_state - print(trace) return trace def learn_pta(self, observations, annotation, delta=dict(), delta_param=dict()): |