Browse Source

Fix test files so they no longer expect the controller to "stabilize" instances. Proper exception chaining.

Joeri Exelmans 5 years ago
parent
commit
075aec4436
33 changed files with 329 additions and 232 deletions
  1. 11 9
      src/sccd/controller/controller.py
  2. 4 4
      src/sccd/model/globals.py
  3. 2 2
      src/sccd/parser/expression_parser.py
  4. 11 11
      src/sccd/parser/statechart_parser.py
  5. 11 6
      src/sccd/syntax/statechart.py
  6. 14 0
      test/lib/test_parser.py
  7. 1 1
      test/test_files/features/datamodel/fail_static_types.xml
  8. 4 4
      test/test_files/features/datamodel/test_cond.svg
  9. 4 2
      test/test_files/features/datamodel/test_cond.xml
  10. 14 7
      test/test_files/features/datamodel/test_guard_action.svg
  11. 6 1
      test/test_files/features/datamodel/test_guard_action.xml
  12. 168 155
      test/test_files/features/expressions/test_expressions_ortho.svg
  13. 4 0
      test/test_files/features/expressions/test_expressions_ortho.xml
  14. 1 1
      test/test_files/semantics/big_step_maximality/statechart_flat.svg
  15. 1 1
      test/test_files/semantics/big_step_maximality/statechart_flat.xml
  16. 1 1
      test/test_files/semantics/big_step_maximality/statechart_ortho.svg
  17. 1 1
      test/test_files/semantics/big_step_maximality/statechart_ortho.xml
  18. 3 1
      test/test_files/semantics/big_step_maximality/test_flat_takemany.xml
  19. 3 4
      test/test_files/semantics/big_step_maximality/test_flat_takeone.xml
  20. 3 0
      test/test_files/semantics/big_step_maximality/test_ortho_takemany.xml
  21. 3 4
      test/test_files/semantics/big_step_maximality/test_ortho_takeone.xml
  22. 1 1
      test/test_files/semantics/event_lifeline/statechart_flat.svg
  23. 1 1
      test/test_files/semantics/event_lifeline/statechart_flat.xml
  24. 3 3
      test/test_files/semantics/event_lifeline/statechart_ortho.svg
  25. 4 4
      test/test_files/semantics/event_lifeline/statechart_ortho.xml
  26. 3 2
      test/test_files/semantics/event_lifeline/test_flat_nextbs.xml
  27. 5 1
      test/test_files/semantics/event_lifeline/test_flat_nextss_takemany.xml
  28. 5 1
      test/test_files/semantics/event_lifeline/test_flat_nextss_takeone.xml
  29. 5 1
      test/test_files/semantics/event_lifeline/test_ortho_nextbs.xml
  30. 5 1
      test/test_files/semantics/event_lifeline/test_ortho_nextcs_takemany.xml
  31. 5 1
      test/test_files/semantics/event_lifeline/test_ortho_nextcs_takeone.xml
  32. 5 1
      test/test_files/semantics/event_lifeline/test_ortho_nextss.xml
  33. 17 0
      test/test_files/syntax/fail_root_transition.xml

+ 11 - 9
src/sccd/controller/controller.py

@@ -35,24 +35,26 @@ class Controller:
         self.model.globals.assert_ready()
         # print_debug("model delta is %s" % str(self.model.globals.delta))
 
+    def _duration_to_time_offset(self, d: Duration) -> int:
+        if self.model.globals.delta == duration(0):
+            return 0
+        return d // self.model.globals.delta
+
     def add_input(self, input: InputEvent):
             if input.name == "":
                 raise Exception("Input event can't have an empty name.")
         
             try:
                 self.model.globals.inports.get_id(input.port)
-            except KeyError:
-                raise Exception("No such port: '%s'" % input.port)
+            except KeyError as e:
+                raise Exception("No such port: '%s'" % input.port) from e
 
             try:
                 event_id = self.model.globals.events.get_id(input.name)
-            except KeyError:
-                raise Exception("No such event: '%s'" % input.name)
+            except KeyError as e:
+                raise Exception("No such event: '%s'" % input.name) from e
 
-            if self.model.globals.delta == duration(0):
-                offset = 0
-            else:
-                offset = input.time_offset // self.model.globals.delta
+            offset = self._duration_to_time_offset(input.time_offset)
 
             e = Event(
                 id=event_id,
@@ -85,7 +87,7 @@ class Controller:
             pipe_events = []
             for e in events:
                 if isinstance(e.target, InstancesTarget):
-                    offset = e.time_offset // self.model.globals.delta
+                    offset = self._duration_to_time_offset(e.time_offset)
                     self.queue.add(self.simulated_time + offset, Controller.EventQueueEntry(e.event, e.target.instances))
                 elif isinstance(e.target, OutputPortTarget):
                     assert (e.time_offset == 0) # cannot combine 'after' with 'output port'

+ 4 - 4
src/sccd/model/globals.py

@@ -33,10 +33,10 @@ class Globals:
       else:
         self.delta = self.fixed_delta
 
-    if self.delta == duration(0):
-      print_debug(termcolor.colored("Warning: model delta is 0: Model does not have any notion of time.", 'yellow'))
-    else:
-      pass
+    # if self.delta == duration(0):
+    #   print_debug(termcolor.colored("Warning: model delta is 0: Model does not have any notion of time.", 'yellow'))
+    # else:
+    #   pass
       # # Convert all DurationLiterals to model delta
       # for d in self.durations:
       #   # The following error is impossible: (i think)

+ 2 - 2
src/sccd/parser/expression_parser.py

@@ -36,8 +36,8 @@ class _ExpressionTransformer(Transformer):
     name = node[0].value
     try:
       offset, type = self.datamodel.lookup(name)
-    except:
-      raise Exception("Unknown variable '%s'" % name)
+    except Exception as e:
+      raise Exception("Unknown variable '%s'" % name) from e
     return Identifier(name, offset, type)
 
   def binary_expr(self, node):

+ 11 - 11
src/sccd/parser/statechart_parser.py

@@ -8,7 +8,7 @@ from sccd.execution.event import *
 # An Exception that occured while visiting an XML element.
 # It will show a fragment of the source file and the line number of the error.
 class XmlLoadError(Exception):
-  def __init__(self, src_file: str, el: etree.Element, err):
+  def __init__(self, src_file: str, el: etree.Element, msg):
     parent = el.getparent()
     if parent is None:
       parent = el
@@ -50,7 +50,7 @@ class XmlLoadError(Exception):
       text.append("     ...")
       text.append("%4d: %s" % (parent_lastline, lines[-1]))
 
-    super().__init__("\n\n%s\n\n%s:\nline %d: <%s>: %s" % ('\n'.join(text), src_file,el.sourceline, el.tag, str(err)))
+    super().__init__("\n\n%s\n\n%s:\nline %d: <%s>: %s" % ('\n'.join(text), src_file,el.sourceline, el.tag, msg))
     
     # self.src_file = src_file
     # self.el = el
@@ -82,8 +82,8 @@ class XmlParser:
     def require(self):
       try:
         return self.data[-1]
-      except IndexError:
-        raise Exception("Element expected only within context: %s" % self.name)
+      except IndexError as e:
+        raise Exception("Element expected only within context: %s" % self.name) from e
 
 
   def __init__(self):
@@ -109,7 +109,7 @@ class XmlParser:
         raise
       except Exception as e:
         # An advantage of this event-driven parsing is that if an exception is thrown during the visiting of an XML node, we can automatically decorate it with info about the tag where the error occured, the line number in the source file, etc.
-        self._raise(el, e)
+        self._raise(el, str(e), e)
 
       # We don't need anything from this element anymore, so we clear it to save memory.
       # This is a technique mentioned in the lxml documentation:
@@ -121,9 +121,9 @@ class XmlParser:
       
     self.src_file.pop()
 
-  def _raise(self, el, err):
+  def _raise(self, el, msg, err: Exception):
     src_file = self.src_file.require()
-    raise XmlLoadError(src_file, el, err)
+    raise XmlLoadError(src_file, el, msg) from err
 
 
 # Parses action elements: <raise>, <code>
@@ -296,7 +296,7 @@ class TreeParser(StateParser):
         # Parse and find target state
         parse_tree = parse_state_ref(target_string)
       except Exception as e:
-        self._raise(t_el, "Parsing target '%s': %s" % (target_string, str(e)))
+        self._raise(t_el, "Parsing target '%s': %s" % (target_string, str(e)), e)
 
       def find_state(sequence) -> State:
         if sequence.data == "relative_path":
@@ -314,8 +314,8 @@ class TreeParser(StateParser):
 
       try:
         targets = [find_state(seq) for seq in parse_tree.children]
-      except:
-        self._raise(t_el, "Could not find target '%s'." % (target_string))
+      except Exception as e:
+        self._raise(t_el, "Could not find target '%s'." % (target_string), e)
 
       transition = Transition(source, targets)
 
@@ -339,7 +339,7 @@ class TreeParser(StateParser):
         try:
           expr = parse_expression(globals, datamodel, expr=cond)
         except Exception as e:
-          self._raise(t_el, "Condition '%s': %s" % (cond, str(e)))
+          self._raise(t_el, "Condition '%s': %s" % (cond, str(e)), e)
         transition.guard = expr
       source.transitions.append(transition)
 

+ 11 - 6
src/sccd/syntax/statechart.py

@@ -4,29 +4,34 @@ from typing import *
 import itertools
 from sccd.syntax.tree import *
 
-class BigStepMaximality(Enum):
+class SemanticOption:
+
+  def __str__(self):
+    return self.name
+
+class BigStepMaximality(SemanticOption, Enum):
   TAKE_ONE = 0
   TAKE_MANY = 1
 
-class ComboStepMaximality(Enum):
+class ComboStepMaximality(SemanticOption, Enum):
   COMBO_TAKE_ONE = 0
   COMBO_TAKE_MANY = 1
 
-class InternalEventLifeline(Enum):
+class InternalEventLifeline(SemanticOption, Enum):
   QUEUE = 0
   NEXT_COMBO_STEP = 1
   NEXT_SMALL_STEP = 2
 
-class InputEventLifeline(Enum):
+class InputEventLifeline(SemanticOption, Enum):
   WHOLE = 0
   FIRST_COMBO_STEP = 1
   FIRST_SMALL_STEP = 2
 
-class Priority(Enum):
+class Priority(SemanticOption, Enum):
   SOURCE_PARENT = 0
   SOURCE_CHILD = 1
 
-class Concurrency(Enum):
+class Concurrency(SemanticOption, Enum):
   SINGLE = 0
   MANY = 1
 

+ 14 - 0
test/lib/test_parser.py

@@ -19,6 +19,12 @@ class TestParser(StatechartParser):
     big_step = self.big_step.require()
     name = el.get("name")
     port = el.get("port")
+
+    if name is None:
+      raise Exception("missing attribute 'name'")
+    if port is None:
+      raise Exception("missing attribute 'port'")
+      
     big_step.append(Event(id=0, name=name, port=port, parameters=[]))
 
   def start_big_step(self, el):
@@ -36,6 +42,14 @@ class TestParser(StatechartParser):
     name = el.get("name")
     port = el.get("port")
     time = el.get("time")
+
+    if name is None:
+      raise Exception("missing attribute 'name'")
+    if port is None:
+      raise Exception("missing attribute 'port'")
+    if time is None:
+      raise Exception("missing attribute 'time'")
+
     duration = parse_duration(globals, time)
     input.append(InputEvent(name=name, port=port, parameters=[], time_offset=duration))
 

+ 1 - 1
test/test_files/features/datamodel/fail_static_types.xml

@@ -12,7 +12,7 @@
         <state id="a">
           <onentry>
             <!-- illegal assignment, LHS is int, RHS is string -->
-            <code>x="hello"</code>
+            <code> x = "hello" </code>
           </onentry>
         </state>
       </state>

+ 4 - 4
test/test_files/features/datamodel/test_cond.svg

@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.40.1 (20161225.0304)
  -->
 <!-- Title: state transitions Pages: 1 -->
-<svg width="121pt" height="147pt"
- viewBox="0.00 0.00 121.29 147.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="140pt" height="147pt"
+ viewBox="0.00 0.00 140.19 147.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 143)">
 <title>state transitions</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-143 117.291,-143 117.291,4 -4,4"/>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-143 136.186,-143 136.186,4 -4,4"/>
 <!-- __initial -->
 <g id="node1" class="node">
 <title>__initial</title>
@@ -40,7 +40,7 @@
 <title>_start&#45;&gt;_done</title>
 <path fill="none" stroke="#000000" d="M28,-63.8314C28,-58.4728 28,-52.4735 28,-46.6262"/>
 <polygon fill="#000000" stroke="#000000" points="31.5001,-46.4363 28,-36.4363 24.5001,-46.4363 31.5001,-46.4363"/>
-<text text-anchor="start" x="28" y="-47" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[y == 0]^out.done &#160;&#160;</text>
+<text text-anchor="start" x="28" y="-47" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">in.e [y == 0]^out.done &#160;&#160;</text>
 </g>
 </g>
 </svg>

+ 4 - 2
test/test_files/features/datamodel/test_cond.xml

@@ -9,7 +9,7 @@
     <tree>
       <state initial="start">
         <state id="start">
-          <transition target="/done" cond="y == 0">
+          <transition event="e" port="in" target="/done" cond="y == 0">
             <raise event="done" port="out"/>
           </transition>
         </state>
@@ -17,7 +17,9 @@
       </state>
     </tree>
   </statechart>
-
+  <input>
+    <input_event name="e" port="in" time="0 d"/>
+  </input>
   <output>
     <big_step>
       <event name="done" port="out"/>

+ 14 - 7
test/test_files/features/datamodel/test_guard_action.svg

@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.40.1 (20161225.0304)
  -->
 <!-- Title: state transitions Pages: 1 -->
-<svg width="189pt" height="157pt"
- viewBox="0.00 0.00 188.99 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="226pt" height="157pt"
+ viewBox="0.00 0.00 226.00 157.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 153)">
 <title>state transitions</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-153 184.994,-153 184.994,4 -4,4"/>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-153 222,-153 222,4 -4,4"/>
 <!-- __initial -->
 <g id="node1" class="node">
 <title>__initial</title>
@@ -31,9 +31,16 @@
 <!-- _counting&#45;&gt;_counting -->
 <g id="edge2" class="edge">
 <title>_counting&#45;&gt;_counting</title>
-<path fill="none" stroke="#000000" d="M89.097,-97.9941C101.1628,-98.123 111,-96.125 111,-92 111,-89.1641 106.3504,-87.3334 99.5236,-86.5081"/>
-<polygon fill="#000000" stroke="#000000" points="99.2538,-82.9912 89.097,-86.0059 98.9169,-89.9831 99.2538,-82.9912"/>
-<text text-anchor="start" x="111" y="-89" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[x &lt; 3]^out.inc &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M89.097,-94.9971C101.1628,-95.0615 111,-94.0625 111,-92 111,-90.582 106.3504,-89.6667 99.5236,-89.2541"/>
+<polygon fill="#000000" stroke="#000000" points="99.1784,-85.7448 89.097,-89.0029 99.0097,-92.7428 99.1784,-85.7448"/>
+<text text-anchor="start" x="111" y="-89" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">in.e &#160;&#160;</text>
+</g>
+<!-- _counting&#45;&gt;_counting -->
+<g id="edge3" class="edge">
+<title>_counting&#45;&gt;_counting</title>
+<path fill="none" stroke="#000000" d="M89.2372,-97.443C112.4222,-99.0331 135.453,-97.2188 135.453,-92 135.453,-87.5559 118.752,-85.5806 99.4768,-86.074"/>
+<polygon fill="#000000" stroke="#000000" points="99.0611,-82.5896 89.2372,-86.557 99.391,-89.5818 99.0611,-82.5896"/>
+<text text-anchor="start" x="135.453" y="-89" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[x &lt; 3]^out.inc &#160;&#160;</text>
 </g>
 <!-- _done -->
 <g id="node3" class="node">
@@ -45,7 +52,7 @@
 <path fill="none" stroke="#000000" stroke-width="2" d="M13,-1C13,-1 98,-1 98,-1 104,-1 110,-7 110,-13 110,-13 110,-33 110,-33 110,-39 104,-45 98,-45 98,-45 13,-45 13,-45 7,-45 1,-39 1,-33 1,-33 1,-13 1,-13 1,-7 7,-1 13,-1"/>
 </g>
 <!-- _counting&#45;&gt;_done -->
-<g id="edge3" class="edge">
+<g id="edge4" class="edge">
 <title>_counting&#45;&gt;_done</title>
 <path fill="none" stroke="#000000" d="M55.5,-73.8711C55.5,-68.4482 55.5,-62.3229 55.5,-56.2494"/>
 <polygon fill="#000000" stroke="#000000" points="59.0001,-56.21 55.5,-46.21 52.0001,-56.21 59.0001,-56.21"/>

+ 6 - 1
test/test_files/features/datamodel/test_guard_action.xml

@@ -1,7 +1,8 @@
 <?xml version="1.0" ?>
 <test>
   <statechart>
-    <semantics/>
+    <semantics
+      big_step_maximality="take_many"/>
     <datamodel>
       <var id="x" expr="0"/>
       <var id="y" expr="x"/><!-- this is allowed, y is also 0 -->
@@ -9,6 +10,7 @@
     <tree>
       <state initial="counting">
         <state id="counting">
+          <transition event="e" port="in" target="."/>
           <transition cond="x &lt; 3" target=".">
             <code> x += 1 </code>
             <raise event="inc" port="out"/>
@@ -21,6 +23,9 @@
       </state>
     </tree>
   </statechart>
+  <input>
+    <input_event name="e" port="in" time="0 d"/>
+  </input>
   <output>
     <big_step>
       <event name="inc" port="out"/>

+ 168 - 155
test/test_files/features/expressions/test_expressions_ortho.svg

@@ -4,319 +4,332 @@
 <!-- Generated by graphviz version 2.40.1 (20161225.0304)
  -->
 <!-- Title: state transitions Pages: 1 -->
-<svg width="476pt" height="1030pt"
- viewBox="0.00 0.00 476.00 1030.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="498pt" height="1030pt"
+ viewBox="0.00 0.00 498.17 1030.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1026)">
 <title>state transitions</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1026 472,-1026 472,4 -4,4"/>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1026 494.1698,-1026 494.1698,4 -4,4"/>
 <g id="clust1" class="cluster">
 <title>cluster__p</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 448,-8 448,-8 454,-8 460,-14 460,-20 460,-20 460,-971 460,-971 460,-977 454,-983 448,-983 448,-983 20,-983 20,-983 14,-983 8,-977 8,-971 8,-971 8,-20 8,-20 8,-14 14,-8 20,-8"/>
-<text text-anchor="start" x="230.6646" y="-964.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">p</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M42.1698,-8C42.1698,-8 470.1698,-8 470.1698,-8 476.1698,-8 482.1698,-14 482.1698,-20 482.1698,-20 482.1698,-971 482.1698,-971 482.1698,-977 476.1698,-983 470.1698,-983 470.1698,-983 42.1698,-983 42.1698,-983 36.1698,-983 30.1698,-977 30.1698,-971 30.1698,-971 30.1698,-20 30.1698,-20 30.1698,-14 36.1698,-8 42.1698,-8"/>
+<text text-anchor="start" x="252.8344" y="-964.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">p</text>
 </g>
 <g id="clust2" class="cluster">
 <title>cluster__p_comparisons</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="340,-288 340,-945 452,-945 452,-288 340,-288"/>
-<text text-anchor="start" x="361.9968" y="-926.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">comparisons</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="362.1698,-288 362.1698,-945 474.1698,-945 474.1698,-288 362.1698,-288"/>
+<text text-anchor="start" x="384.1666" y="-926.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">comparisons</text>
 </g>
 <g id="clust3" class="cluster">
 <title>cluster__p_arithmetic</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="203,-16 203,-945 332,-945 332,-16 203,-16"/>
-<text text-anchor="start" x="242.0014" y="-926.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">arithmetic</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="225.1698,-16 225.1698,-945 354.1698,-945 354.1698,-16 225.1698,-16"/>
+<text text-anchor="start" x="264.1712" y="-926.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">arithmetic</text>
 </g>
 <g id="clust4" class="cluster">
 <title>cluster__p_boolean_logic</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="24,-152 24,-945 195,-945 195,-152 24,-152"/>
-<text text-anchor="start" x="72.4872" y="-926.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">boolean_logic</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="46.1698,-152 46.1698,-945 217.1698,-945 217.1698,-152 46.1698,-152"/>
+<text text-anchor="start" x="94.657" y="-926.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">boolean_logic</text>
+</g>
+<!-- self_tr__p__p_20 -->
+<!-- _p -->
+<!-- self_tr__p__p_20&#45;&gt;_p -->
+<g id="edge21" class="edge">
+<title>self_tr__p__p_20:w&#45;&gt;_p</title>
+<path fill="none" stroke="#000000" d="M19.1698,-1016.5C-17.7683,-1016.5 7.6299,-958.0317 25.2485,-924.4751"/>
+<polygon fill="#000000" stroke="#000000" points="28.5055,-925.8092 30.1712,-915.3461 22.3442,-922.4868 28.5055,-925.8092"/>
 </g>
 <!-- __initial -->
-<g id="node1" class="node">
+<g id="node2" class="node">
 <title>__initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="16" cy="-1016.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="89.1698" cy="-1016.5" rx="5.5" ry="5.5"/>
 </g>
-<!-- _p -->
 <!-- __initial&#45;&gt;_p -->
 <g id="edge1" class="edge">
 <title>__initial&#45;&gt;_p</title>
-<path fill="none" stroke="#000000" d="M16,-1010.9533C16,-1006.7779 16,-1000.5043 16,-993.0332"/>
-<polygon fill="#000000" stroke="#000000" points="19.5001,-992.9971 16,-982.9971 12.5001,-992.9972 19.5001,-992.9971"/>
-<text text-anchor="middle" x="17.3895" y="-994" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M84.8089,-1012.5973C78.825,-1007.3442 67.6182,-997.8663 57.1698,-991 54.802,-989.444 52.6695,-988.8274 50.7154,-988.3279"/>
+<polygon fill="#000000" stroke="#000000" points="52.5074,-985.3206 42.1698,-983 48.8039,-991.2607 52.5074,-985.3206"/>
+<text text-anchor="middle" x="74.5593" y="-994" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+</g>
+<!-- _p&#45;&gt;self_tr__p__p_20 -->
+<g id="edge20" class="edge">
+<title>_p:e&#45;&gt;self_tr__p__p_20:e</title>
+<path fill="none" stroke="#000000" d="M30.1729,-977.8467C26.101,-999.1056 21.6882,-1016.5 19.1698,-1016.5"/>
+<text text-anchor="start" x="28.1698" y="-994" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">in.e &#160;&#160;</text>
 </g>
 <!-- _p_comparisons -->
 <!-- _p_comparisons_initial -->
-<g id="node4" class="node">
+<g id="node5" class="node">
 <title>_p_comparisons_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="396" cy="-901.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="418.1698" cy="-901.5" rx="5.5" ry="5.5"/>
 </g>
 <!-- _p_comparisons_s1 -->
-<g id="node5" class="node">
+<g id="node6" class="node">
 <title>_p_comparisons_s1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="424,-814 368,-814 368,-778 424,-778 424,-814"/>
-<text text-anchor="start" x="389.6646" y="-792.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M380.3333,-779C380.3333,-779 411.6667,-779 411.6667,-779 417.3333,-779 423,-784.6667 423,-790.3333 423,-790.3333 423,-801.6667 423,-801.6667 423,-807.3333 417.3333,-813 411.6667,-813 411.6667,-813 380.3333,-813 380.3333,-813 374.6667,-813 369,-807.3333 369,-801.6667 369,-801.6667 369,-790.3333 369,-790.3333 369,-784.6667 374.6667,-779 380.3333,-779"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="446.1698,-814 390.1698,-814 390.1698,-778 446.1698,-778 446.1698,-814"/>
+<text text-anchor="start" x="411.8344" y="-792.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M402.5031,-779C402.5031,-779 433.8364,-779 433.8364,-779 439.5031,-779 445.1698,-784.6667 445.1698,-790.3333 445.1698,-790.3333 445.1698,-801.6667 445.1698,-801.6667 445.1698,-807.3333 439.5031,-813 433.8364,-813 433.8364,-813 402.5031,-813 402.5031,-813 396.8364,-813 391.1698,-807.3333 391.1698,-801.6667 391.1698,-801.6667 391.1698,-790.3333 391.1698,-790.3333 391.1698,-784.6667 396.8364,-779 402.5031,-779"/>
 </g>
 <!-- _p_comparisons_initial&#45;&gt;_p_comparisons_s1 -->
 <g id="edge2" class="edge">
 <title>_p_comparisons_initial&#45;&gt;_p_comparisons_s1</title>
-<path fill="none" stroke="#000000" d="M396,-895.8288C396,-891.1736 396,-884.4097 396,-878.5 396,-878.5 396,-878.5 396,-831.5 396,-829.1079 396,-826.6252 396,-824.1342"/>
-<polygon fill="#000000" stroke="#000000" points="399.5001,-824.0597 396,-814.0598 392.5001,-824.0598 399.5001,-824.0597"/>
-<text text-anchor="middle" x="397.3895" y="-852" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M418.1698,-895.8288C418.1698,-891.1736 418.1698,-884.4097 418.1698,-878.5 418.1698,-878.5 418.1698,-878.5 418.1698,-831.5 418.1698,-829.1079 418.1698,-826.6252 418.1698,-824.1342"/>
+<polygon fill="#000000" stroke="#000000" points="421.6699,-824.0597 418.1698,-814.0598 414.6699,-824.0598 421.6699,-824.0597"/>
+<text text-anchor="middle" x="419.5593" y="-852" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _p_comparisons_s2 -->
-<g id="node6" class="node">
+<g id="node7" class="node">
 <title>_p_comparisons_s2</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="424,-696 368,-696 368,-660 424,-660 424,-696"/>
-<text text-anchor="start" x="389.6646" y="-674.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s2</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M380.3333,-661C380.3333,-661 411.6667,-661 411.6667,-661 417.3333,-661 423,-666.6667 423,-672.3333 423,-672.3333 423,-683.6667 423,-683.6667 423,-689.3333 417.3333,-695 411.6667,-695 411.6667,-695 380.3333,-695 380.3333,-695 374.6667,-695 369,-689.3333 369,-683.6667 369,-683.6667 369,-672.3333 369,-672.3333 369,-666.6667 374.6667,-661 380.3333,-661"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="446.1698,-696 390.1698,-696 390.1698,-660 446.1698,-660 446.1698,-696"/>
+<text text-anchor="start" x="411.8344" y="-674.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M402.5031,-661C402.5031,-661 433.8364,-661 433.8364,-661 439.5031,-661 445.1698,-666.6667 445.1698,-672.3333 445.1698,-672.3333 445.1698,-683.6667 445.1698,-683.6667 445.1698,-689.3333 439.5031,-695 433.8364,-695 433.8364,-695 402.5031,-695 402.5031,-695 396.8364,-695 391.1698,-689.3333 391.1698,-683.6667 391.1698,-683.6667 391.1698,-672.3333 391.1698,-672.3333 391.1698,-666.6667 396.8364,-661 402.5031,-661"/>
 </g>
 <!-- _p_comparisons_s1&#45;&gt;_p_comparisons_s2 -->
 <g id="edge3" class="edge">
 <title>_p_comparisons_s1&#45;&gt;_p_comparisons_s2</title>
-<path fill="none" stroke="#000000" d="M396,-777.9402C396,-772.3497 396,-766.1701 396,-760.5 396,-760.5 396,-760.5 396,-713.5 396,-711.1079 396,-708.6252 396,-706.1342"/>
-<polygon fill="#000000" stroke="#000000" points="399.5001,-706.0597 396,-696.0598 392.5001,-706.0598 399.5001,-706.0597"/>
-<text text-anchor="start" x="396" y="-734" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[1 == 1] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M418.1698,-777.9402C418.1698,-772.3497 418.1698,-766.1701 418.1698,-760.5 418.1698,-760.5 418.1698,-760.5 418.1698,-713.5 418.1698,-711.1079 418.1698,-708.6252 418.1698,-706.1342"/>
+<polygon fill="#000000" stroke="#000000" points="421.6699,-706.0597 418.1698,-696.0598 414.6699,-706.0598 421.6699,-706.0597"/>
+<text text-anchor="start" x="418.1698" y="-734" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[1 == 1] &#160;&#160;</text>
 </g>
 <!-- _p_comparisons_s3 -->
-<g id="node7" class="node">
+<g id="node8" class="node">
 <title>_p_comparisons_s3</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="424,-578 368,-578 368,-542 424,-542 424,-578"/>
-<text text-anchor="start" x="389.6646" y="-556.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s3</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M380.3333,-543C380.3333,-543 411.6667,-543 411.6667,-543 417.3333,-543 423,-548.6667 423,-554.3333 423,-554.3333 423,-565.6667 423,-565.6667 423,-571.3333 417.3333,-577 411.6667,-577 411.6667,-577 380.3333,-577 380.3333,-577 374.6667,-577 369,-571.3333 369,-565.6667 369,-565.6667 369,-554.3333 369,-554.3333 369,-548.6667 374.6667,-543 380.3333,-543"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="446.1698,-578 390.1698,-578 390.1698,-542 446.1698,-542 446.1698,-578"/>
+<text text-anchor="start" x="411.8344" y="-556.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s3</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M402.5031,-543C402.5031,-543 433.8364,-543 433.8364,-543 439.5031,-543 445.1698,-548.6667 445.1698,-554.3333 445.1698,-554.3333 445.1698,-565.6667 445.1698,-565.6667 445.1698,-571.3333 439.5031,-577 433.8364,-577 433.8364,-577 402.5031,-577 402.5031,-577 396.8364,-577 391.1698,-571.3333 391.1698,-565.6667 391.1698,-565.6667 391.1698,-554.3333 391.1698,-554.3333 391.1698,-548.6667 396.8364,-543 402.5031,-543"/>
 </g>
 <!-- _p_comparisons_s2&#45;&gt;_p_comparisons_s3 -->
 <g id="edge4" class="edge">
 <title>_p_comparisons_s2&#45;&gt;_p_comparisons_s3</title>
-<path fill="none" stroke="#000000" d="M396,-659.9402C396,-654.3497 396,-648.1701 396,-642.5 396,-642.5 396,-642.5 396,-595.5 396,-593.1079 396,-590.6252 396,-588.1342"/>
-<polygon fill="#000000" stroke="#000000" points="399.5001,-588.0597 396,-578.0598 392.5001,-588.0598 399.5001,-588.0597"/>
-<text text-anchor="start" x="396" y="-616" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[1 != 2] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M418.1698,-659.9402C418.1698,-654.3497 418.1698,-648.1701 418.1698,-642.5 418.1698,-642.5 418.1698,-642.5 418.1698,-595.5 418.1698,-593.1079 418.1698,-590.6252 418.1698,-588.1342"/>
+<polygon fill="#000000" stroke="#000000" points="421.6699,-588.0597 418.1698,-578.0598 414.6699,-588.0598 421.6699,-588.0597"/>
+<text text-anchor="start" x="418.1698" y="-616" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[1 != 2] &#160;&#160;</text>
 </g>
 <!-- _p_comparisons_s4 -->
-<g id="node8" class="node">
+<g id="node9" class="node">
 <title>_p_comparisons_s4</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="424,-460 368,-460 368,-424 424,-424 424,-460"/>
-<text text-anchor="start" x="389.6646" y="-438.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s4</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M380.3333,-425C380.3333,-425 411.6667,-425 411.6667,-425 417.3333,-425 423,-430.6667 423,-436.3333 423,-436.3333 423,-447.6667 423,-447.6667 423,-453.3333 417.3333,-459 411.6667,-459 411.6667,-459 380.3333,-459 380.3333,-459 374.6667,-459 369,-453.3333 369,-447.6667 369,-447.6667 369,-436.3333 369,-436.3333 369,-430.6667 374.6667,-425 380.3333,-425"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="446.1698,-460 390.1698,-460 390.1698,-424 446.1698,-424 446.1698,-460"/>
+<text text-anchor="start" x="411.8344" y="-438.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s4</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M402.5031,-425C402.5031,-425 433.8364,-425 433.8364,-425 439.5031,-425 445.1698,-430.6667 445.1698,-436.3333 445.1698,-436.3333 445.1698,-447.6667 445.1698,-447.6667 445.1698,-453.3333 439.5031,-459 433.8364,-459 433.8364,-459 402.5031,-459 402.5031,-459 396.8364,-459 391.1698,-453.3333 391.1698,-447.6667 391.1698,-447.6667 391.1698,-436.3333 391.1698,-436.3333 391.1698,-430.6667 396.8364,-425 402.5031,-425"/>
 </g>
 <!-- _p_comparisons_s3&#45;&gt;_p_comparisons_s4 -->
 <g id="edge5" class="edge">
 <title>_p_comparisons_s3&#45;&gt;_p_comparisons_s4</title>
-<path fill="none" stroke="#000000" d="M396,-541.9402C396,-536.3497 396,-530.1701 396,-524.5 396,-524.5 396,-524.5 396,-477.5 396,-475.1079 396,-472.6252 396,-470.1342"/>
-<polygon fill="#000000" stroke="#000000" points="399.5001,-470.0597 396,-460.0598 392.5001,-470.0598 399.5001,-470.0597"/>
-<text text-anchor="start" x="396" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[1 &lt; 2] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M418.1698,-541.9402C418.1698,-536.3497 418.1698,-530.1701 418.1698,-524.5 418.1698,-524.5 418.1698,-524.5 418.1698,-477.5 418.1698,-475.1079 418.1698,-472.6252 418.1698,-470.1342"/>
+<polygon fill="#000000" stroke="#000000" points="421.6699,-470.0597 418.1698,-460.0598 414.6699,-470.0598 421.6699,-470.0597"/>
+<text text-anchor="start" x="418.1698" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[1 &lt; 2] &#160;&#160;</text>
 </g>
 <!-- _p_comparisons_ok -->
-<g id="node9" class="node">
+<g id="node10" class="node">
 <title>_p_comparisons_ok</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="444,-342 348,-342 348,-296 444,-296 444,-342"/>
-<text text-anchor="start" x="389.6646" y="-325.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ok</text>
-<text text-anchor="start" x="353.5044" y="-305.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">onentry/ ^out.ok</text>
-<polygon fill="#000000" stroke="#000000" points="348,-319 348,-319 444,-319 444,-319 348,-319"/>
-<path fill="none" stroke="#000000" stroke-width="2" d="M361,-297C361,-297 431,-297 431,-297 437,-297 443,-303 443,-309 443,-309 443,-329 443,-329 443,-335 437,-341 431,-341 431,-341 361,-341 361,-341 355,-341 349,-335 349,-329 349,-329 349,-309 349,-309 349,-303 355,-297 361,-297"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="466.1698,-342 370.1698,-342 370.1698,-296 466.1698,-296 466.1698,-342"/>
+<text text-anchor="start" x="411.8344" y="-325.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ok</text>
+<text text-anchor="start" x="375.6742" y="-305.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">onentry/ ^out.ok</text>
+<polygon fill="#000000" stroke="#000000" points="370.1698,-319 370.1698,-319 466.1698,-319 466.1698,-319 370.1698,-319"/>
+<path fill="none" stroke="#000000" stroke-width="2" d="M383.1698,-297C383.1698,-297 453.1698,-297 453.1698,-297 459.1698,-297 465.1698,-303 465.1698,-309 465.1698,-309 465.1698,-329 465.1698,-329 465.1698,-335 459.1698,-341 453.1698,-341 453.1698,-341 383.1698,-341 383.1698,-341 377.1698,-341 371.1698,-335 371.1698,-329 371.1698,-329 371.1698,-309 371.1698,-309 371.1698,-303 377.1698,-297 383.1698,-297"/>
 </g>
 <!-- _p_comparisons_s4&#45;&gt;_p_comparisons_ok -->
 <g id="edge6" class="edge">
 <title>_p_comparisons_s4&#45;&gt;_p_comparisons_ok</title>
-<path fill="none" stroke="#000000" d="M396,-423.9402C396,-418.3497 396,-412.1701 396,-406.5 396,-406.5 396,-406.5 396,-359.5 396,-357.127 396,-354.6757 396,-352.2081"/>
-<polygon fill="#000000" stroke="#000000" points="399.5001,-352.1306 396,-342.1306 392.5001,-352.1306 399.5001,-352.1306"/>
-<text text-anchor="start" x="396" y="-380" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[2 &gt; 1] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M418.1698,-423.9402C418.1698,-418.3497 418.1698,-412.1701 418.1698,-406.5 418.1698,-406.5 418.1698,-406.5 418.1698,-359.5 418.1698,-357.127 418.1698,-354.6757 418.1698,-352.2081"/>
+<polygon fill="#000000" stroke="#000000" points="421.6699,-352.1306 418.1698,-342.1306 414.6699,-352.1306 421.6699,-352.1306"/>
+<text text-anchor="start" x="418.1698" y="-380" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[2 &gt; 1] &#160;&#160;</text>
 </g>
 <!-- _p_arithmetic -->
 <!-- _p_arithmetic_initial -->
-<g id="node11" class="node">
+<g id="node12" class="node">
 <title>_p_arithmetic_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="239" cy="-901.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="261.1698" cy="-901.5" rx="5.5" ry="5.5"/>
 </g>
 <!-- _p_arithmetic_s1 -->
-<g id="node12" class="node">
+<g id="node13" class="node">
 <title>_p_arithmetic_s1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="267,-814 211,-814 211,-778 267,-778 267,-814"/>
-<text text-anchor="start" x="232.6646" y="-792.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M223.3333,-779C223.3333,-779 254.6667,-779 254.6667,-779 260.3333,-779 266,-784.6667 266,-790.3333 266,-790.3333 266,-801.6667 266,-801.6667 266,-807.3333 260.3333,-813 254.6667,-813 254.6667,-813 223.3333,-813 223.3333,-813 217.6667,-813 212,-807.3333 212,-801.6667 212,-801.6667 212,-790.3333 212,-790.3333 212,-784.6667 217.6667,-779 223.3333,-779"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="289.1698,-814 233.1698,-814 233.1698,-778 289.1698,-778 289.1698,-814"/>
+<text text-anchor="start" x="254.8344" y="-792.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M245.5031,-779C245.5031,-779 276.8364,-779 276.8364,-779 282.5031,-779 288.1698,-784.6667 288.1698,-790.3333 288.1698,-790.3333 288.1698,-801.6667 288.1698,-801.6667 288.1698,-807.3333 282.5031,-813 276.8364,-813 276.8364,-813 245.5031,-813 245.5031,-813 239.8364,-813 234.1698,-807.3333 234.1698,-801.6667 234.1698,-801.6667 234.1698,-790.3333 234.1698,-790.3333 234.1698,-784.6667 239.8364,-779 245.5031,-779"/>
 </g>
 <!-- _p_arithmetic_initial&#45;&gt;_p_arithmetic_s1 -->
 <g id="edge7" class="edge">
 <title>_p_arithmetic_initial&#45;&gt;_p_arithmetic_s1</title>
-<path fill="none" stroke="#000000" d="M239,-895.8288C239,-891.1736 239,-884.4097 239,-878.5 239,-878.5 239,-878.5 239,-831.5 239,-829.1079 239,-826.6252 239,-824.1342"/>
-<polygon fill="#000000" stroke="#000000" points="242.5001,-824.0597 239,-814.0598 235.5001,-824.0598 242.5001,-824.0597"/>
-<text text-anchor="middle" x="240.3895" y="-852" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M261.1698,-895.8288C261.1698,-891.1736 261.1698,-884.4097 261.1698,-878.5 261.1698,-878.5 261.1698,-878.5 261.1698,-831.5 261.1698,-829.1079 261.1698,-826.6252 261.1698,-824.1342"/>
+<polygon fill="#000000" stroke="#000000" points="264.6699,-824.0597 261.1698,-814.0598 257.6699,-824.0598 264.6699,-824.0597"/>
+<text text-anchor="middle" x="262.5593" y="-852" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _p_arithmetic_s2 -->
-<g id="node13" class="node">
+<g id="node14" class="node">
 <title>_p_arithmetic_s2</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="267,-696 211,-696 211,-660 267,-660 267,-696"/>
-<text text-anchor="start" x="232.6646" y="-674.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s2</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M223.3333,-661C223.3333,-661 254.6667,-661 254.6667,-661 260.3333,-661 266,-666.6667 266,-672.3333 266,-672.3333 266,-683.6667 266,-683.6667 266,-689.3333 260.3333,-695 254.6667,-695 254.6667,-695 223.3333,-695 223.3333,-695 217.6667,-695 212,-689.3333 212,-683.6667 212,-683.6667 212,-672.3333 212,-672.3333 212,-666.6667 217.6667,-661 223.3333,-661"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="289.1698,-696 233.1698,-696 233.1698,-660 289.1698,-660 289.1698,-696"/>
+<text text-anchor="start" x="254.8344" y="-674.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M245.5031,-661C245.5031,-661 276.8364,-661 276.8364,-661 282.5031,-661 288.1698,-666.6667 288.1698,-672.3333 288.1698,-672.3333 288.1698,-683.6667 288.1698,-683.6667 288.1698,-689.3333 282.5031,-695 276.8364,-695 276.8364,-695 245.5031,-695 245.5031,-695 239.8364,-695 234.1698,-689.3333 234.1698,-683.6667 234.1698,-683.6667 234.1698,-672.3333 234.1698,-672.3333 234.1698,-666.6667 239.8364,-661 245.5031,-661"/>
 </g>
 <!-- _p_arithmetic_s1&#45;&gt;_p_arithmetic_s2 -->
 <g id="edge8" class="edge">
 <title>_p_arithmetic_s1&#45;&gt;_p_arithmetic_s2</title>
-<path fill="none" stroke="#000000" d="M239,-777.9402C239,-772.3497 239,-766.1701 239,-760.5 239,-760.5 239,-760.5 239,-713.5 239,-711.1079 239,-708.6252 239,-706.1342"/>
-<polygon fill="#000000" stroke="#000000" points="242.5001,-706.0597 239,-696.0598 235.5001,-706.0598 242.5001,-706.0597"/>
-<text text-anchor="start" x="239" y="-734" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[1 + 1 == 2] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M261.1698,-777.9402C261.1698,-772.3497 261.1698,-766.1701 261.1698,-760.5 261.1698,-760.5 261.1698,-760.5 261.1698,-713.5 261.1698,-711.1079 261.1698,-708.6252 261.1698,-706.1342"/>
+<polygon fill="#000000" stroke="#000000" points="264.6699,-706.0597 261.1698,-696.0598 257.6699,-706.0598 264.6699,-706.0597"/>
+<text text-anchor="start" x="261.1698" y="-734" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[1 + 1 == 2] &#160;&#160;</text>
 </g>
 <!-- _p_arithmetic_s3 -->
-<g id="node14" class="node">
+<g id="node15" class="node">
 <title>_p_arithmetic_s3</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="267,-578 211,-578 211,-542 267,-542 267,-578"/>
-<text text-anchor="start" x="232.6646" y="-556.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s3</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M223.3333,-543C223.3333,-543 254.6667,-543 254.6667,-543 260.3333,-543 266,-548.6667 266,-554.3333 266,-554.3333 266,-565.6667 266,-565.6667 266,-571.3333 260.3333,-577 254.6667,-577 254.6667,-577 223.3333,-577 223.3333,-577 217.6667,-577 212,-571.3333 212,-565.6667 212,-565.6667 212,-554.3333 212,-554.3333 212,-548.6667 217.6667,-543 223.3333,-543"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="289.1698,-578 233.1698,-578 233.1698,-542 289.1698,-542 289.1698,-578"/>
+<text text-anchor="start" x="254.8344" y="-556.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s3</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M245.5031,-543C245.5031,-543 276.8364,-543 276.8364,-543 282.5031,-543 288.1698,-548.6667 288.1698,-554.3333 288.1698,-554.3333 288.1698,-565.6667 288.1698,-565.6667 288.1698,-571.3333 282.5031,-577 276.8364,-577 276.8364,-577 245.5031,-577 245.5031,-577 239.8364,-577 234.1698,-571.3333 234.1698,-565.6667 234.1698,-565.6667 234.1698,-554.3333 234.1698,-554.3333 234.1698,-548.6667 239.8364,-543 245.5031,-543"/>
 </g>
 <!-- _p_arithmetic_s2&#45;&gt;_p_arithmetic_s3 -->
 <g id="edge9" class="edge">
 <title>_p_arithmetic_s2&#45;&gt;_p_arithmetic_s3</title>
-<path fill="none" stroke="#000000" d="M235.4194,-659.6439C234.618,-654.1523 234,-648.1016 234,-642.5 234,-642.5 234,-642.5 234,-595.5 234,-593.2243 234.102,-590.8746 234.2768,-588.5183"/>
-<polygon fill="#000000" stroke="#000000" points="237.7801,-588.6846 235.4194,-578.3561 230.8239,-587.9024 237.7801,-588.6846"/>
-<text text-anchor="start" x="234" y="-616" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[42 == 52 &#45; 11 + 1] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M257.5892,-659.6439C256.7878,-654.1523 256.1698,-648.1016 256.1698,-642.5 256.1698,-642.5 256.1698,-642.5 256.1698,-595.5 256.1698,-593.2243 256.2718,-590.8746 256.4466,-588.5183"/>
+<polygon fill="#000000" stroke="#000000" points="259.9499,-588.6846 257.5892,-578.3561 252.9937,-587.9024 259.9499,-588.6846"/>
+<text text-anchor="start" x="256.1698" y="-616" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[42 == 52 &#45; 11 + 1] &#160;&#160;</text>
 </g>
 <!-- _p_arithmetic_s4 -->
-<g id="node15" class="node">
+<g id="node16" class="node">
 <title>_p_arithmetic_s4</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="267,-460 211,-460 211,-424 267,-424 267,-460"/>
-<text text-anchor="start" x="232.6646" y="-438.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s4</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M223.3333,-425C223.3333,-425 254.6667,-425 254.6667,-425 260.3333,-425 266,-430.6667 266,-436.3333 266,-436.3333 266,-447.6667 266,-447.6667 266,-453.3333 260.3333,-459 254.6667,-459 254.6667,-459 223.3333,-459 223.3333,-459 217.6667,-459 212,-453.3333 212,-447.6667 212,-447.6667 212,-436.3333 212,-436.3333 212,-430.6667 217.6667,-425 223.3333,-425"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="289.1698,-460 233.1698,-460 233.1698,-424 289.1698,-424 289.1698,-460"/>
+<text text-anchor="start" x="254.8344" y="-438.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s4</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M245.5031,-425C245.5031,-425 276.8364,-425 276.8364,-425 282.5031,-425 288.1698,-430.6667 288.1698,-436.3333 288.1698,-436.3333 288.1698,-447.6667 288.1698,-447.6667 288.1698,-453.3333 282.5031,-459 276.8364,-459 276.8364,-459 245.5031,-459 245.5031,-459 239.8364,-459 234.1698,-453.3333 234.1698,-447.6667 234.1698,-447.6667 234.1698,-436.3333 234.1698,-436.3333 234.1698,-430.6667 239.8364,-425 245.5031,-425"/>
 </g>
 <!-- _p_arithmetic_s3&#45;&gt;_p_arithmetic_s4 -->
 <g id="edge10" class="edge">
 <title>_p_arithmetic_s3&#45;&gt;_p_arithmetic_s4</title>
-<path fill="none" stroke="#000000" d="M239,-541.9402C239,-536.3497 239,-530.1701 239,-524.5 239,-524.5 239,-524.5 239,-477.5 239,-475.1079 239,-472.6252 239,-470.1342"/>
-<polygon fill="#000000" stroke="#000000" points="242.5001,-470.0597 239,-460.0598 235.5001,-470.0598 242.5001,-470.0597"/>
-<text text-anchor="start" x="239" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[2 * 3 == 6] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M261.1698,-541.9402C261.1698,-536.3497 261.1698,-530.1701 261.1698,-524.5 261.1698,-524.5 261.1698,-524.5 261.1698,-477.5 261.1698,-475.1079 261.1698,-472.6252 261.1698,-470.1342"/>
+<polygon fill="#000000" stroke="#000000" points="264.6699,-470.0597 261.1698,-460.0598 257.6699,-470.0598 264.6699,-470.0597"/>
+<text text-anchor="start" x="261.1698" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[2 * 3 == 6] &#160;&#160;</text>
 </g>
 <!-- _p_arithmetic_s5 -->
-<g id="node16" class="node">
+<g id="node17" class="node">
 <title>_p_arithmetic_s5</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="267,-337 211,-337 211,-301 267,-301 267,-337"/>
-<text text-anchor="start" x="232.6646" y="-315.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s5</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M223.3333,-302C223.3333,-302 254.6667,-302 254.6667,-302 260.3333,-302 266,-307.6667 266,-313.3333 266,-313.3333 266,-324.6667 266,-324.6667 266,-330.3333 260.3333,-336 254.6667,-336 254.6667,-336 223.3333,-336 223.3333,-336 217.6667,-336 212,-330.3333 212,-324.6667 212,-324.6667 212,-313.3333 212,-313.3333 212,-307.6667 217.6667,-302 223.3333,-302"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="289.1698,-337 233.1698,-337 233.1698,-301 289.1698,-301 289.1698,-337"/>
+<text text-anchor="start" x="254.8344" y="-315.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s5</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M245.5031,-302C245.5031,-302 276.8364,-302 276.8364,-302 282.5031,-302 288.1698,-307.6667 288.1698,-313.3333 288.1698,-313.3333 288.1698,-324.6667 288.1698,-324.6667 288.1698,-330.3333 282.5031,-336 276.8364,-336 276.8364,-336 245.5031,-336 245.5031,-336 239.8364,-336 234.1698,-330.3333 234.1698,-324.6667 234.1698,-324.6667 234.1698,-313.3333 234.1698,-313.3333 234.1698,-307.6667 239.8364,-302 245.5031,-302"/>
 </g>
 <!-- _p_arithmetic_s4&#45;&gt;_p_arithmetic_s5 -->
 <g id="edge11" class="edge">
 <title>_p_arithmetic_s4&#45;&gt;_p_arithmetic_s5</title>
-<path fill="none" stroke="#000000" d="M239,-423.9402C239,-418.3497 239,-412.1701 239,-406.5 239,-406.5 239,-406.5 239,-359.5 239,-355.6152 239,-351.5209 239,-347.4883"/>
-<polygon fill="#000000" stroke="#000000" points="242.5001,-347.1447 239,-337.1447 235.5001,-347.1448 242.5001,-347.1447"/>
-<text text-anchor="start" x="239" y="-380" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[21 / 3 == 7] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M261.1698,-423.9402C261.1698,-418.3497 261.1698,-412.1701 261.1698,-406.5 261.1698,-406.5 261.1698,-406.5 261.1698,-359.5 261.1698,-355.6152 261.1698,-351.5209 261.1698,-347.4883"/>
+<polygon fill="#000000" stroke="#000000" points="264.6699,-347.1447 261.1698,-337.1447 257.6699,-347.1448 264.6699,-347.1447"/>
+<text text-anchor="start" x="261.1698" y="-380" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[21 / 3 == 7] &#160;&#160;</text>
 </g>
 <!-- _p_arithmetic_s6 -->
-<g id="node17" class="node">
+<g id="node18" class="node">
 <title>_p_arithmetic_s6</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="277,-201 221,-201 221,-165 277,-165 277,-201"/>
-<text text-anchor="start" x="242.6646" y="-179.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s6</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M233.3333,-166C233.3333,-166 264.6667,-166 264.6667,-166 270.3333,-166 276,-171.6667 276,-177.3333 276,-177.3333 276,-188.6667 276,-188.6667 276,-194.3333 270.3333,-200 264.6667,-200 264.6667,-200 233.3333,-200 233.3333,-200 227.6667,-200 222,-194.3333 222,-188.6667 222,-188.6667 222,-177.3333 222,-177.3333 222,-171.6667 227.6667,-166 233.3333,-166"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="299.1698,-201 243.1698,-201 243.1698,-165 299.1698,-165 299.1698,-201"/>
+<text text-anchor="start" x="264.8344" y="-179.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s6</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M255.5031,-166C255.5031,-166 286.8364,-166 286.8364,-166 292.5031,-166 298.1698,-171.6667 298.1698,-177.3333 298.1698,-177.3333 298.1698,-188.6667 298.1698,-188.6667 298.1698,-194.3333 292.5031,-200 286.8364,-200 286.8364,-200 255.5031,-200 255.5031,-200 249.8364,-200 244.1698,-194.3333 244.1698,-188.6667 244.1698,-188.6667 244.1698,-177.3333 244.1698,-177.3333 244.1698,-171.6667 249.8364,-166 255.5031,-166"/>
 </g>
 <!-- _p_arithmetic_s5&#45;&gt;_p_arithmetic_s6 -->
 <g id="edge12" class="edge">
 <title>_p_arithmetic_s5&#45;&gt;_p_arithmetic_s6</title>
-<path fill="none" stroke="#000000" d="M235.6492,-300.6417C234.2748,-291.5981 233,-280.5115 233,-270.5 233,-270.5 233,-270.5 233,-223.5 233,-219.3656 233.7302,-215.1494 234.8785,-211.075"/>
-<polygon fill="#000000" stroke="#000000" points="238.2809,-211.9605 238.4169,-201.3665 231.7041,-209.5635 238.2809,-211.9605"/>
-<text text-anchor="start" x="233" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[256 == 2 ** 2 ** 3] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M257.8189,-300.6417C256.4446,-291.5981 255.1698,-280.5115 255.1698,-270.5 255.1698,-270.5 255.1698,-270.5 255.1698,-223.5 255.1698,-219.3656 255.8999,-215.1494 257.0483,-211.075"/>
+<polygon fill="#000000" stroke="#000000" points="260.4507,-211.9605 260.5866,-201.3665 253.8739,-209.5635 260.4507,-211.9605"/>
+<text text-anchor="start" x="255.1698" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[256 == 2 ** 2 ** 3] &#160;&#160;</text>
 </g>
 <!-- _p_arithmetic_ok -->
-<g id="node18" class="node">
+<g id="node19" class="node">
 <title>_p_arithmetic_ok</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="307,-70 211,-70 211,-24 307,-24 307,-70"/>
-<text text-anchor="start" x="252.6646" y="-53.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ok</text>
-<text text-anchor="start" x="216.5044" y="-33.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">onentry/ ^out.ok</text>
-<polygon fill="#000000" stroke="#000000" points="211,-47 211,-47 307,-47 307,-47 211,-47"/>
-<path fill="none" stroke="#000000" stroke-width="2" d="M224,-25C224,-25 294,-25 294,-25 300,-25 306,-31 306,-37 306,-37 306,-57 306,-57 306,-63 300,-69 294,-69 294,-69 224,-69 224,-69 218,-69 212,-63 212,-57 212,-57 212,-37 212,-37 212,-31 218,-25 224,-25"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="329.1698,-70 233.1698,-70 233.1698,-24 329.1698,-24 329.1698,-70"/>
+<text text-anchor="start" x="274.8344" y="-53.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ok</text>
+<text text-anchor="start" x="238.6742" y="-33.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">onentry/ ^out.ok</text>
+<polygon fill="#000000" stroke="#000000" points="233.1698,-47 233.1698,-47 329.1698,-47 329.1698,-47 233.1698,-47"/>
+<path fill="none" stroke="#000000" stroke-width="2" d="M246.1698,-25C246.1698,-25 316.1698,-25 316.1698,-25 322.1698,-25 328.1698,-31 328.1698,-37 328.1698,-37 328.1698,-57 328.1698,-57 328.1698,-63 322.1698,-69 316.1698,-69 316.1698,-69 246.1698,-69 246.1698,-69 240.1698,-69 234.1698,-63 234.1698,-57 234.1698,-57 234.1698,-37 234.1698,-37 234.1698,-31 240.1698,-25 246.1698,-25"/>
 </g>
 <!-- _p_arithmetic_s6&#45;&gt;_p_arithmetic_ok -->
 <g id="edge13" class="edge">
 <title>_p_arithmetic_s6&#45;&gt;_p_arithmetic_ok</title>
-<path fill="none" stroke="#000000" d="M251.7924,-164.6215C252.9377,-155.5732 254,-144.4884 254,-134.5 254,-134.5 254,-134.5 254,-87.5 254,-85.1089 254.0869,-82.6444 254.2378,-80.1674"/>
-<polygon fill="#000000" stroke="#000000" points="257.7359,-80.3469 255.1597,-70.0701 250.7649,-79.7104 257.7359,-80.3469"/>
-<text text-anchor="start" x="254" y="-108" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[5 % 2 == 1] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M273.9621,-164.6215C275.1075,-155.5732 276.1698,-144.4884 276.1698,-134.5 276.1698,-134.5 276.1698,-134.5 276.1698,-87.5 276.1698,-85.1089 276.2567,-82.6444 276.4076,-80.1674"/>
+<polygon fill="#000000" stroke="#000000" points="279.9056,-80.3469 277.3294,-70.0701 272.9346,-79.7104 279.9056,-80.3469"/>
+<text text-anchor="start" x="276.1698" y="-108" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[5 % 2 == 1] &#160;&#160;</text>
 </g>
 <!-- _p_boolean_logic -->
 <!-- _p_boolean_logic_initial -->
-<g id="node20" class="node">
+<g id="node21" class="node">
 <title>_p_boolean_logic_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="60" cy="-901.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="82.1698" cy="-901.5" rx="5.5" ry="5.5"/>
 </g>
 <!-- _p_boolean_logic_s1 -->
-<g id="node21" class="node">
+<g id="node22" class="node">
 <title>_p_boolean_logic_s1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-814 32,-814 32,-778 88,-778 88,-814"/>
-<text text-anchor="start" x="53.6646" y="-792.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-779C44.3333,-779 75.6667,-779 75.6667,-779 81.3333,-779 87,-784.6667 87,-790.3333 87,-790.3333 87,-801.6667 87,-801.6667 87,-807.3333 81.3333,-813 75.6667,-813 75.6667,-813 44.3333,-813 44.3333,-813 38.6667,-813 33,-807.3333 33,-801.6667 33,-801.6667 33,-790.3333 33,-790.3333 33,-784.6667 38.6667,-779 44.3333,-779"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="110.1698,-814 54.1698,-814 54.1698,-778 110.1698,-778 110.1698,-814"/>
+<text text-anchor="start" x="75.8344" y="-792.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M66.5031,-779C66.5031,-779 97.8364,-779 97.8364,-779 103.5031,-779 109.1698,-784.6667 109.1698,-790.3333 109.1698,-790.3333 109.1698,-801.6667 109.1698,-801.6667 109.1698,-807.3333 103.5031,-813 97.8364,-813 97.8364,-813 66.5031,-813 66.5031,-813 60.8364,-813 55.1698,-807.3333 55.1698,-801.6667 55.1698,-801.6667 55.1698,-790.3333 55.1698,-790.3333 55.1698,-784.6667 60.8364,-779 66.5031,-779"/>
 </g>
 <!-- _p_boolean_logic_initial&#45;&gt;_p_boolean_logic_s1 -->
 <g id="edge14" class="edge">
 <title>_p_boolean_logic_initial&#45;&gt;_p_boolean_logic_s1</title>
-<path fill="none" stroke="#000000" d="M60,-895.8288C60,-891.1736 60,-884.4097 60,-878.5 60,-878.5 60,-878.5 60,-831.5 60,-829.1079 60,-826.6252 60,-824.1342"/>
-<polygon fill="#000000" stroke="#000000" points="63.5001,-824.0597 60,-814.0598 56.5001,-824.0598 63.5001,-824.0597"/>
-<text text-anchor="middle" x="61.3895" y="-852" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M82.1698,-895.8288C82.1698,-891.1736 82.1698,-884.4097 82.1698,-878.5 82.1698,-878.5 82.1698,-878.5 82.1698,-831.5 82.1698,-829.1079 82.1698,-826.6252 82.1698,-824.1342"/>
+<polygon fill="#000000" stroke="#000000" points="85.6699,-824.0597 82.1698,-814.0598 78.6699,-824.0598 85.6699,-824.0597"/>
+<text text-anchor="middle" x="83.5593" y="-852" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _p_boolean_logic_s2 -->
-<g id="node22" class="node">
+<g id="node23" class="node">
 <title>_p_boolean_logic_s2</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-696 32,-696 32,-660 88,-660 88,-696"/>
-<text text-anchor="start" x="53.6646" y="-674.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s2</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-661C44.3333,-661 75.6667,-661 75.6667,-661 81.3333,-661 87,-666.6667 87,-672.3333 87,-672.3333 87,-683.6667 87,-683.6667 87,-689.3333 81.3333,-695 75.6667,-695 75.6667,-695 44.3333,-695 44.3333,-695 38.6667,-695 33,-689.3333 33,-683.6667 33,-683.6667 33,-672.3333 33,-672.3333 33,-666.6667 38.6667,-661 44.3333,-661"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="110.1698,-696 54.1698,-696 54.1698,-660 110.1698,-660 110.1698,-696"/>
+<text text-anchor="start" x="75.8344" y="-674.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M66.5031,-661C66.5031,-661 97.8364,-661 97.8364,-661 103.5031,-661 109.1698,-666.6667 109.1698,-672.3333 109.1698,-672.3333 109.1698,-683.6667 109.1698,-683.6667 109.1698,-689.3333 103.5031,-695 97.8364,-695 97.8364,-695 66.5031,-695 66.5031,-695 60.8364,-695 55.1698,-689.3333 55.1698,-683.6667 55.1698,-683.6667 55.1698,-672.3333 55.1698,-672.3333 55.1698,-666.6667 60.8364,-661 66.5031,-661"/>
 </g>
 <!-- _p_boolean_logic_s1&#45;&gt;_p_boolean_logic_s2 -->
 <g id="edge15" class="edge">
 <title>_p_boolean_logic_s1&#45;&gt;_p_boolean_logic_s2</title>
-<path fill="none" stroke="#000000" d="M60,-777.9402C60,-772.3497 60,-766.1701 60,-760.5 60,-760.5 60,-760.5 60,-713.5 60,-711.1079 60,-708.6252 60,-706.1342"/>
-<polygon fill="#000000" stroke="#000000" points="63.5001,-706.0597 60,-696.0598 56.5001,-706.0598 63.5001,-706.0597"/>
-<text text-anchor="start" x="60" y="-734" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[true] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M82.1698,-777.9402C82.1698,-772.3497 82.1698,-766.1701 82.1698,-760.5 82.1698,-760.5 82.1698,-760.5 82.1698,-713.5 82.1698,-711.1079 82.1698,-708.6252 82.1698,-706.1342"/>
+<polygon fill="#000000" stroke="#000000" points="85.6699,-706.0597 82.1698,-696.0598 78.6699,-706.0598 85.6699,-706.0597"/>
+<text text-anchor="start" x="82.1698" y="-734" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[true] &#160;&#160;</text>
 </g>
 <!-- _p_boolean_logic_s3 -->
-<g id="node23" class="node">
+<g id="node24" class="node">
 <title>_p_boolean_logic_s3</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-578 32,-578 32,-542 88,-542 88,-578"/>
-<text text-anchor="start" x="53.6646" y="-556.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s3</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-543C44.3333,-543 75.6667,-543 75.6667,-543 81.3333,-543 87,-548.6667 87,-554.3333 87,-554.3333 87,-565.6667 87,-565.6667 87,-571.3333 81.3333,-577 75.6667,-577 75.6667,-577 44.3333,-577 44.3333,-577 38.6667,-577 33,-571.3333 33,-565.6667 33,-565.6667 33,-554.3333 33,-554.3333 33,-548.6667 38.6667,-543 44.3333,-543"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="110.1698,-578 54.1698,-578 54.1698,-542 110.1698,-542 110.1698,-578"/>
+<text text-anchor="start" x="75.8344" y="-556.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s3</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M66.5031,-543C66.5031,-543 97.8364,-543 97.8364,-543 103.5031,-543 109.1698,-548.6667 109.1698,-554.3333 109.1698,-554.3333 109.1698,-565.6667 109.1698,-565.6667 109.1698,-571.3333 103.5031,-577 97.8364,-577 97.8364,-577 66.5031,-577 66.5031,-577 60.8364,-577 55.1698,-571.3333 55.1698,-565.6667 55.1698,-565.6667 55.1698,-554.3333 55.1698,-554.3333 55.1698,-548.6667 60.8364,-543 66.5031,-543"/>
 </g>
 <!-- _p_boolean_logic_s2&#45;&gt;_p_boolean_logic_s3 -->
 <g id="edge16" class="edge">
 <title>_p_boolean_logic_s2&#45;&gt;_p_boolean_logic_s3</title>
-<path fill="none" stroke="#000000" d="M60,-659.9402C60,-654.3497 60,-648.1701 60,-642.5 60,-642.5 60,-642.5 60,-595.5 60,-593.1079 60,-590.6252 60,-588.1342"/>
-<polygon fill="#000000" stroke="#000000" points="63.5001,-588.0597 60,-578.0598 56.5001,-588.0598 63.5001,-588.0597"/>
-<text text-anchor="start" x="60" y="-616" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[false or true] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M82.1698,-659.9402C82.1698,-654.3497 82.1698,-648.1701 82.1698,-642.5 82.1698,-642.5 82.1698,-642.5 82.1698,-595.5 82.1698,-593.1079 82.1698,-590.6252 82.1698,-588.1342"/>
+<polygon fill="#000000" stroke="#000000" points="85.6699,-588.0597 82.1698,-578.0598 78.6699,-588.0598 85.6699,-588.0597"/>
+<text text-anchor="start" x="82.1698" y="-616" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[false or true] &#160;&#160;</text>
 </g>
 <!-- _p_boolean_logic_s4 -->
-<g id="node24" class="node">
+<g id="node25" class="node">
 <title>_p_boolean_logic_s4</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-460 32,-460 32,-424 88,-424 88,-460"/>
-<text text-anchor="start" x="53.6646" y="-438.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s4</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-425C44.3333,-425 75.6667,-425 75.6667,-425 81.3333,-425 87,-430.6667 87,-436.3333 87,-436.3333 87,-447.6667 87,-447.6667 87,-453.3333 81.3333,-459 75.6667,-459 75.6667,-459 44.3333,-459 44.3333,-459 38.6667,-459 33,-453.3333 33,-447.6667 33,-447.6667 33,-436.3333 33,-436.3333 33,-430.6667 38.6667,-425 44.3333,-425"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="110.1698,-460 54.1698,-460 54.1698,-424 110.1698,-424 110.1698,-460"/>
+<text text-anchor="start" x="75.8344" y="-438.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s4</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M66.5031,-425C66.5031,-425 97.8364,-425 97.8364,-425 103.5031,-425 109.1698,-430.6667 109.1698,-436.3333 109.1698,-436.3333 109.1698,-447.6667 109.1698,-447.6667 109.1698,-453.3333 103.5031,-459 97.8364,-459 97.8364,-459 66.5031,-459 66.5031,-459 60.8364,-459 55.1698,-453.3333 55.1698,-447.6667 55.1698,-447.6667 55.1698,-436.3333 55.1698,-436.3333 55.1698,-430.6667 60.8364,-425 66.5031,-425"/>
 </g>
 <!-- _p_boolean_logic_s3&#45;&gt;_p_boolean_logic_s4 -->
 <g id="edge17" class="edge">
 <title>_p_boolean_logic_s3&#45;&gt;_p_boolean_logic_s4</title>
-<path fill="none" stroke="#000000" d="M60,-541.9402C60,-536.3497 60,-530.1701 60,-524.5 60,-524.5 60,-524.5 60,-477.5 60,-475.1079 60,-472.6252 60,-470.1342"/>
-<polygon fill="#000000" stroke="#000000" points="63.5001,-470.0597 60,-460.0598 56.5001,-470.0598 63.5001,-470.0597"/>
-<text text-anchor="start" x="60" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[true and not false] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M82.1698,-541.9402C82.1698,-536.3497 82.1698,-530.1701 82.1698,-524.5 82.1698,-524.5 82.1698,-524.5 82.1698,-477.5 82.1698,-475.1079 82.1698,-472.6252 82.1698,-470.1342"/>
+<polygon fill="#000000" stroke="#000000" points="85.6699,-470.0597 82.1698,-460.0598 78.6699,-470.0598 85.6699,-470.0597"/>
+<text text-anchor="start" x="82.1698" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[true and not false] &#160;&#160;</text>
 </g>
 <!-- _p_boolean_logic_s5 -->
-<g id="node25" class="node">
+<g id="node26" class="node">
 <title>_p_boolean_logic_s5</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="88,-337 32,-337 32,-301 88,-301 88,-337"/>
-<text text-anchor="start" x="53.6646" y="-315.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s5</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M44.3333,-302C44.3333,-302 75.6667,-302 75.6667,-302 81.3333,-302 87,-307.6667 87,-313.3333 87,-313.3333 87,-324.6667 87,-324.6667 87,-330.3333 81.3333,-336 75.6667,-336 75.6667,-336 44.3333,-336 44.3333,-336 38.6667,-336 33,-330.3333 33,-324.6667 33,-324.6667 33,-313.3333 33,-313.3333 33,-307.6667 38.6667,-302 44.3333,-302"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="110.1698,-337 54.1698,-337 54.1698,-301 110.1698,-301 110.1698,-337"/>
+<text text-anchor="start" x="75.8344" y="-315.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">s5</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M66.5031,-302C66.5031,-302 97.8364,-302 97.8364,-302 103.5031,-302 109.1698,-307.6667 109.1698,-313.3333 109.1698,-313.3333 109.1698,-324.6667 109.1698,-324.6667 109.1698,-330.3333 103.5031,-336 97.8364,-336 97.8364,-336 66.5031,-336 66.5031,-336 60.8364,-336 55.1698,-330.3333 55.1698,-324.6667 55.1698,-324.6667 55.1698,-313.3333 55.1698,-313.3333 55.1698,-307.6667 60.8364,-302 66.5031,-302"/>
 </g>
 <!-- _p_boolean_logic_s4&#45;&gt;_p_boolean_logic_s5 -->
 <g id="edge18" class="edge">
 <title>_p_boolean_logic_s4&#45;&gt;_p_boolean_logic_s5</title>
-<path fill="none" stroke="#000000" d="M55.7033,-423.6741C54.7416,-418.1833 54,-412.1255 54,-406.5 54,-406.5 54,-406.5 54,-359.5 54,-355.4573 54.2962,-351.2119 54.7569,-347.0534"/>
-<polygon fill="#000000" stroke="#000000" points="58.2353,-347.4511 56.1661,-337.0603 51.3039,-346.4736 58.2353,-347.4511"/>
-<text text-anchor="start" x="54" y="-380" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[not (true and false or false)] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M77.8731,-423.6741C76.9113,-418.1833 76.1698,-412.1255 76.1698,-406.5 76.1698,-406.5 76.1698,-406.5 76.1698,-359.5 76.1698,-355.4573 76.4659,-351.2119 76.9266,-347.0534"/>
+<polygon fill="#000000" stroke="#000000" points="80.4051,-347.4511 78.3359,-337.0603 73.4737,-346.4736 80.4051,-347.4511"/>
+<text text-anchor="start" x="76.1698" y="-380" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[not (true and false or false)] &#160;&#160;</text>
 </g>
 <!-- _p_boolean_logic_ok -->
-<g id="node26" class="node">
+<g id="node27" class="node">
 <title>_p_boolean_logic_ok</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="128,-206 32,-206 32,-160 128,-160 128,-206"/>
-<text text-anchor="start" x="73.6646" y="-189.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ok</text>
-<text text-anchor="start" x="37.5044" y="-169.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">onentry/ ^out.ok</text>
-<polygon fill="#000000" stroke="#000000" points="32,-183 32,-183 128,-183 128,-183 32,-183"/>
-<path fill="none" stroke="#000000" stroke-width="2" d="M45,-161C45,-161 115,-161 115,-161 121,-161 127,-167 127,-173 127,-173 127,-193 127,-193 127,-199 121,-205 115,-205 115,-205 45,-205 45,-205 39,-205 33,-199 33,-193 33,-193 33,-173 33,-173 33,-167 39,-161 45,-161"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="150.1698,-206 54.1698,-206 54.1698,-160 150.1698,-160 150.1698,-206"/>
+<text text-anchor="start" x="95.8344" y="-189.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">ok</text>
+<text text-anchor="start" x="59.6742" y="-169.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">onentry/ ^out.ok</text>
+<polygon fill="#000000" stroke="#000000" points="54.1698,-183 54.1698,-183 150.1698,-183 150.1698,-183 54.1698,-183"/>
+<path fill="none" stroke="#000000" stroke-width="2" d="M67.1698,-161C67.1698,-161 137.1698,-161 137.1698,-161 143.1698,-161 149.1698,-167 149.1698,-173 149.1698,-173 149.1698,-193 149.1698,-193 149.1698,-199 143.1698,-205 137.1698,-205 137.1698,-205 67.1698,-205 67.1698,-205 61.1698,-205 55.1698,-199 55.1698,-193 55.1698,-193 55.1698,-173 55.1698,-173 55.1698,-167 61.1698,-161 67.1698,-161"/>
 </g>
 <!-- _p_boolean_logic_s5&#45;&gt;_p_boolean_logic_ok -->
 <g id="edge19" class="edge">
 <title>_p_boolean_logic_s5&#45;&gt;_p_boolean_logic_ok</title>
-<path fill="none" stroke="#000000" d="M56.6492,-300.6417C55.2748,-291.5981 54,-280.5115 54,-270.5 54,-270.5 54,-270.5 54,-223.5 54,-220.868 54.3937,-218.2706 55.0841,-215.739"/>
-<polygon fill="#000000" stroke="#000000" points="58.3743,-216.9432 59.0131,-206.3677 51.9187,-214.2367 58.3743,-216.9432"/>
-<text text-anchor="start" x="54" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[not (false or false and true)] &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M78.8189,-300.6417C77.4446,-291.5981 76.1698,-280.5115 76.1698,-270.5 76.1698,-270.5 76.1698,-270.5 76.1698,-223.5 76.1698,-220.868 76.5634,-218.2706 77.2539,-215.739"/>
+<polygon fill="#000000" stroke="#000000" points="80.5441,-216.9432 81.1828,-206.3677 74.0885,-214.2367 80.5441,-216.9432"/>
+<text text-anchor="start" x="76.1698" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">[not (false or false and true)] &#160;&#160;</text>
 </g>
 </g>
 </svg>

+ 4 - 0
test/test_files/features/expressions/test_expressions_ortho.xml

@@ -6,6 +6,7 @@
       <state>
 
         <parallel id="p">
+          <transition event="e" port="in" target="."/>
 
           <state id="comparisons" initial="s1">
             <state id="s1">
@@ -81,6 +82,9 @@
       </state>
     </tree>
   </statechart>
+  <input>
+    <input_event name="e" port="in" time="0 d"/>
+  </input>
   <output>
     <big_step>
       <event name="ok" port="out"/>

+ 1 - 1
test/test_files/semantics/big_step_maximality/statechart_flat.svg

@@ -42,7 +42,7 @@
 <title>_a&#45;&gt;_b</title>
 <path fill="none" stroke="#000000" d="M53,-147.8711C53,-142.4482 53,-136.3229 53,-130.2494"/>
 <polygon fill="#000000" stroke="#000000" points="56.5001,-130.21 53,-120.21 49.5001,-130.21 56.5001,-130.21"/>
-<text text-anchor="middle" x="54.3895" y="-131" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<text text-anchor="start" x="53" y="-131" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">in.e &#160;&#160;</text>
 </g>
 <!-- _c -->
 <g id="node4" class="node">

+ 1 - 1
test/test_files/semantics/big_step_maximality/statechart_flat.xml

@@ -5,7 +5,7 @@
   <tree>
     <state initial="a">
       <state id="a">
-        <transition target="/b"/>
+        <transition event="e" target="/b" port="in"/>
       </state>
       <state id="b">
         <onentry>

+ 1 - 1
test/test_files/semantics/big_step_maximality/statechart_ortho.svg

@@ -71,7 +71,7 @@
 <title>_p_o0_a&#45;&gt;_p_o0_b</title>
 <path fill="none" stroke="#000000" d="M215,-279.9402C215,-274.3497 215,-268.1701 215,-262.5 215,-262.5 215,-262.5 215,-215.5 215,-213.127 215,-210.6757 215,-208.2081"/>
 <polygon fill="#000000" stroke="#000000" points="218.5001,-208.1306 215,-198.1306 211.5001,-208.1306 218.5001,-208.1306"/>
-<text text-anchor="middle" x="216.3895" y="-236" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<text text-anchor="start" x="215" y="-236" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">in.e &#160;&#160;</text>
 </g>
 <!-- _p_o0_c -->
 <g id="node7" class="node">

+ 1 - 1
test/test_files/semantics/big_step_maximality/statechart_ortho.xml

@@ -7,7 +7,7 @@
       <parallel id="p">
         <state id="o0" initial="a">
           <state id="a">
-            <transition target="../b"/>
+            <transition event="e" port="in" target="../b"/>
           </state>
           <state id="b">
             <onentry>

+ 3 - 1
test/test_files/semantics/big_step_maximality/test_flat_takemany.xml

@@ -4,7 +4,9 @@
     <override_semantics
       big_step_maximality="take_many"/>
   </statechart>
-  <input/>
+  <input>
+    <input_event name="e" port="in" time="0 d"/>
+  </input>
   <output>
     <big_step>
       <event name="in_b" port="out"/>

+ 3 - 4
test/test_files/semantics/big_step_maximality/test_flat_takeone.xml

@@ -4,13 +4,12 @@
     <override_semantics
       big_step_maximality="take_one"/>
   </statechart>
-  <input/>
+  <input>
+    <input_event name="e" port="in" time="0 d"/>
+  </input>
   <output>
     <big_step>
       <event name="in_b" port="out"/>
     </big_step>
-    <big_step>
-      <event name="in_c" port="out"/>
-    </big_step>
   </output>
 </test>

+ 3 - 0
test/test_files/semantics/big_step_maximality/test_ortho_takemany.xml

@@ -4,6 +4,9 @@
     <override_semantics
       big_step_maximality="take_many"/>
   </statechart>
+  <input>
+    <input_event name="e" port="in" time="0 d"/>
+  </input>
   <output>
     <big_step>
       <event name="in_b" port="out"/>

+ 3 - 4
test/test_files/semantics/big_step_maximality/test_ortho_takeone.xml

@@ -4,14 +4,13 @@
     <override_semantics
       big_step_maximality="take_one"/>
   </statechart>
+  <input>
+    <input_event name="e" port="in" time="0 d"/>
+  </input>
   <output>
     <big_step>
       <event name="in_b" port="out"/>
       <event name="in_e" port="out"/>
     </big_step>
-    <big_step>
-      <event name="in_c" port="out"/>
-      <event name="in_f" port="out"/>
-    </big_step>
   </output>
 </test>

+ 1 - 1
test/test_files/semantics/event_lifeline/statechart_flat.svg

@@ -42,7 +42,7 @@
 <title>_a&#45;&gt;_b</title>
 <path fill="none" stroke="#000000" d="M53,-147.8711C53,-142.4482 53,-136.3229 53,-130.2494"/>
 <polygon fill="#000000" stroke="#000000" points="56.5001,-130.21 53,-120.21 49.5001,-130.21 56.5001,-130.21"/>
-<text text-anchor="start" x="53" y="-131" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">e^f &#160;&#160;</text>
+<text text-anchor="start" x="53" y="-131" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">in.e^f &#160;&#160;</text>
 </g>
 <!-- _c -->
 <g id="node4" class="node">

+ 1 - 1
test/test_files/semantics/event_lifeline/statechart_flat.xml

@@ -5,7 +5,7 @@
   <tree>
     <state initial="a">
       <state id="a">
-        <transition event="e" target="/b">
+        <transition event="e" port="in" target="/b">
           <raise event="f"/>
         </transition>
       </state>

+ 3 - 3
test/test_files/semantics/event_lifeline/statechart_ortho.svg

@@ -71,7 +71,7 @@
 <title>_p_o0_a&#45;&gt;_p_o0_b</title>
 <path fill="none" stroke="#000000" d="M215,-287.9402C215,-282.3497 215,-276.1701 215,-270.5 215,-270.5 215,-270.5 215,-223.5 215,-221.127 215,-218.6757 215,-216.2081"/>
 <polygon fill="#000000" stroke="#000000" points="218.5001,-216.1306 215,-206.1306 211.5001,-216.1306 218.5001,-216.1306"/>
-<text text-anchor="start" x="215" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">^e &#160;&#160;</text>
+<text text-anchor="start" x="215" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">in.e^f &#160;&#160;</text>
 </g>
 <!-- _p_o0_c -->
 <g id="node7" class="node">
@@ -87,7 +87,7 @@
 <title>_p_o0_b&#45;&gt;_p_o0_c</title>
 <path fill="none" stroke="#000000" d="M215,-159.8105C215,-151.7932 215,-142.7517 215,-134.5 215,-134.5 215,-134.5 215,-87.5 215,-85.127 215,-82.6757 215,-80.2081"/>
 <polygon fill="#000000" stroke="#000000" points="218.5001,-80.1306 215,-70.1306 211.5001,-80.1306 218.5001,-80.1306"/>
-<text text-anchor="start" x="215" y="-108" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">e &#160;&#160;</text>
+<text text-anchor="start" x="215" y="-108" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">f &#160;&#160;</text>
 </g>
 <!-- _p_o1 -->
 <!-- _p_o1_initial -->
@@ -123,7 +123,7 @@
 <title>_p_o1_d&#45;&gt;_p_o1_e</title>
 <path fill="none" stroke="#000000" d="M85,-287.9402C85,-282.3497 85,-276.1701 85,-270.5 85,-270.5 85,-270.5 85,-223.5 85,-221.127 85,-218.6757 85,-216.2081"/>
 <polygon fill="#000000" stroke="#000000" points="88.5001,-216.1306 85,-206.1306 81.5001,-216.1306 88.5001,-216.1306"/>
-<text text-anchor="start" x="85" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">e &#160;&#160;</text>
+<text text-anchor="start" x="85" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">f &#160;&#160;</text>
 </g>
 </g>
 </svg>

+ 4 - 4
test/test_files/semantics/event_lifeline/statechart_ortho.xml

@@ -5,15 +5,15 @@
       <parallel id="p">
         <state id="o0" initial="a">
           <state id="a">
-            <transition target="../b">
-              <raise event="e"/>
+            <transition event="e" port="in" target="../b">
+              <raise event="f"/>
             </transition>
           </state>
           <state id="b">
             <onentry>
               <raise event="in_b" port="out"/>
             </onentry>
-            <transition event="e" target="../c"/>
+            <transition event="f" target="../c"/>
           </state>
           <state id="c">
             <onentry>
@@ -23,7 +23,7 @@
         </state>
         <state id="o1" initial="d">
           <state id="d">
-            <transition event="e" target="../e"/>
+            <transition event="f" target="../e"/>
           </state>
           <state id="e">
             <onentry>

+ 3 - 2
test/test_files/semantics/event_lifeline/test_flat_nextbs.xml

@@ -3,10 +3,11 @@
   <statechart src="statechart_flat.xml">
     <override_semantics
       big_step_maximality="*"
-      internal_event_lifeline="queue"/>
+      internal_event_lifeline="queue"
+      input_event_lifeline="*"/>
   </statechart>
   <input>
-      <input_event name="e" time="0 d"/>
+      <input_event name="e" port="in" time="0 d"/>
   </input>
   <output>
     <big_step>

+ 5 - 1
test/test_files/semantics/event_lifeline/test_flat_nextss_takemany.xml

@@ -3,8 +3,12 @@
   <statechart src="statechart_flat.xml">
     <override_semantics
       big_step_maximality="take_many"
-      internal_event_lifeline="next_small_step"/>
+      internal_event_lifeline="next_small_step"
+      input_event_lifeline="*"/>
   </statechart>
+  <input>
+      <input_event name="e" port="in" time="0 d"/>
+  </input>
   <output>
     <big_step>
       <event name="in_b" port="out"/>

+ 5 - 1
test/test_files/semantics/event_lifeline/test_flat_nextss_takeone.xml

@@ -3,8 +3,12 @@
   <statechart src="statechart_flat.xml">
     <override_semantics
       big_step_maximality="take_one"
-      internal_event_lifeline="next_small_step"/>
+      internal_event_lifeline="next_small_step"
+      input_event_lifeline="*"/>
   </statechart>
+  <input>
+      <input_event name="e" port="in" time="0 d"/>
+  </input>
   <output>
     <big_step>
       <event name="in_b" port="out"/>

+ 5 - 1
test/test_files/semantics/event_lifeline/test_ortho_nextbs.xml

@@ -3,8 +3,12 @@
   <statechart src="statechart_ortho.xml">
     <override_semantics
       big_step_maximality="*"
-      internal_event_lifeline="queue"/>
+      internal_event_lifeline="queue"
+      input_event_lifeline="whole"/>
   </statechart>
+  <input>
+      <input_event name="e" port="in" time="0 d"/>
+  </input>
   <output>
     <big_step>
       <event name="in_b" port="out"/>

+ 5 - 1
test/test_files/semantics/event_lifeline/test_ortho_nextcs_takemany.xml

@@ -4,8 +4,12 @@
     <override_semantics
       big_step_maximality="take_many"
       combo_step_maximality="*"
-      internal_event_lifeline="next_combo_step"/>
+      internal_event_lifeline="next_combo_step"
+      input_event_lifeline="*"/>
   </statechart>
+  <input>
+    <input_event name="e" port="in" time="0 d"/>
+  </input>
   <output>
     <big_step>
       <event name="in_b" port="out"/>

+ 5 - 1
test/test_files/semantics/event_lifeline/test_ortho_nextcs_takeone.xml

@@ -3,8 +3,12 @@
   <statechart src="statechart_ortho.xml">
     <override_semantics
       big_step_maximality="take_one"
-      internal_event_lifeline="next_combo_step"/>
+      internal_event_lifeline="next_combo_step"
+      input_event_lifeline="*"/>
   </statechart>
+  <input>
+    <input_event name="e" port="in" time="0 d"/>
+  </input>
   <output>
     <big_step>
       <event name="in_b" port="out"/>

+ 5 - 1
test/test_files/semantics/event_lifeline/test_ortho_nextss.xml

@@ -3,8 +3,12 @@
   <statechart src="statechart_ortho.xml">
     <override_semantics
       big_step_maximality="*"
-      internal_event_lifeline="next_small_step"/>
+      internal_event_lifeline="next_small_step"
+      input_event_lifeline="*"/>
   </statechart>
+  <input>
+    <input_event name="e" port="in" time="0 d"/>
+  </input>
   <output>
     <big_step>
       <event name="in_b" port="out"/>

+ 17 - 0
test/test_files/syntax/fail_root_transition.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" ?>
+<test>
+  <statechart>
+    <semantics/>
+    <datamodel/>
+
+    <tree>
+      <state>
+        <!-- not allowed: transition with source: root -->
+        <transition target="."/>
+      </state>
+    </tree>
+  </statechart>
+
+  <output>
+  </output>
+</test>