Pārlūkot izejas kodu

Unique state ids generated at runtime instead of compile-time. Fix rendering issues with history.

Joeri Exelmans 5 gadi atpakaļ
vecāks
revīzija
f88cf2380e

+ 5 - 5
src/sccd/compiler/generic_generator.py

@@ -192,7 +192,7 @@ class GenericGenerator(Visitor):
 
         self.writer.addVSpace()
 
-        def writeState(s, i):
+        def writeState(s):
             # self.writer.addComment("state %s" % ("<root>" if s.is_root else s.new_full_name))
             index_expr = GLC.MapIndexedExpression(GLC.SelfProperty("states"), GLC.String(s.new_full_name))
             clazz = "State"
@@ -205,7 +205,7 @@ class GenericGenerator(Visitor):
                     clazz = "ShallowHistoryState"
             self.writer.addAssignment(
                 index_expr,
-                GLC.NewExpression(clazz, [str(i), GLC.String(s.new_full_name), GLC.SelfExpression()])
+                GLC.NewExpression(clazz, [GLC.String(s.new_full_name), GLC.SelfExpression()])
             )
             if not s.is_root:
                 if s.enter_action.action or s.has_timers:
@@ -231,8 +231,8 @@ class GenericGenerator(Visitor):
         
         # write all states
         self.writer.addAssignment(GLC.SelfProperty("states"), GLC.MapExpression())
-        for (i, s) in enumerate(statechart.states):
-            writeState(s, i)
+        for s in statechart.states:
+            writeState(s)
 
         # statechart structure
         self.writer.addVSpace()
@@ -257,7 +257,7 @@ class GenericGenerator(Visitor):
             GLC.FunctionCall(
                 GLC.Property(
                     GLC.SelfProperty("root"),
-                    "optimize"
+                    "init_tree"
                 )
             )
         )

+ 21 - 14
src/sccd/runtime/statechart_syntax.py

@@ -1,6 +1,5 @@
 class State:
-    def __init__(self, state_id, name, obj):
-        self.state_id = state_id
+    def __init__(self, name, obj):
         self.name = name
         self.obj = obj
         
@@ -13,6 +12,7 @@ class State:
         self.history = [] # list of history states that are children
 
         # optimization stuff
+        self.state_id = -1
         self.ancestors = []
         self.descendants = []
         self.descendant_bitmap = 0
@@ -23,20 +23,27 @@ class State:
         if self.default_state:
             targets.extend(self.default_state.getEffectiveTargetStates(instance))
         return targets
-        
-    def optimize(self):
-        for c in self.children:
+
+    # Recursively assigns unique state_id to each state in the tree,
+    # as well as some other optimization stuff
+    # Should only be called once for the root of the state tree,
+    # after the tree has been built.
+    def init_tree(self, root_state_id: int = 0) -> int:
+        self.state_id = root_state_id
+        next_id = root_state_id + 1
+        for i, c in enumerate(self.children):
             if isinstance(c, HistoryState):
                 self.history.append(c)
             c.parent = self
             c.ancestors.append(self)
             c.ancestors.extend(self.ancestors)
-            c.optimize()
+            next_id += c.init_tree(next_id)
         self.descendants.extend(self.children)
         for c in self.children:
             self.descendants.extend(c.descendants)
         for d in self.descendants:
             self.descendant_bitmap |= 2**d.state_id
+        return 1 + len(self.descendants)
             
     def addChild(self, child):
         self.children.append(child)
@@ -54,12 +61,12 @@ class State:
         return "State(%s)" % (self.state_id)
         
 class HistoryState(State):
-    def __init__(self, state_id, name, obj):
-        State.__init__(self, state_id, name, obj)
+    def __init__(self, name, obj):
+        State.__init__(self, name, obj)
         
 class ShallowHistoryState(HistoryState):
-    def __init__(self, state_id, name, obj):
-        HistoryState.__init__(self, state_id, name, obj)
+    def __init__(self, name, obj):
+        HistoryState.__init__(self, name, obj)
         
     def getEffectiveTargetStates(self, instance):
         if self.state_id in instance.history_values:
@@ -72,8 +79,8 @@ class ShallowHistoryState(HistoryState):
             return self.parent.getEffectiveTargetStates(instance)
         
 class DeepHistoryState(HistoryState):
-    def __init__(self, state_id, name, obj):
-        HistoryState.__init__(self, state_id, name, obj)
+    def __init__(self, name, obj):
+        HistoryState.__init__(self, name, obj)
         
     def getEffectiveTargetStates(self, instance):
         if self.state_id in instance.history_values:
@@ -83,8 +90,8 @@ class DeepHistoryState(HistoryState):
             return self.parent.getEffectiveTargetStates(instance)
         
 class ParallelState(State):
-    def __init__(self, state_id, name, obj):
-        State.__init__(self, state_id, name, obj)
+    def __init__(self, name, obj):
+        State.__init__(self, name, obj)
         
     def getEffectiveTargetStates(self, instance):
         targets = [self]

+ 1 - 1
test/render.py

@@ -76,7 +76,7 @@ if __name__ == '__main__':
             w.extendWrite('"')
             if isinstance(s, ParallelState):
               w.extendWrite(' type=parallel')
-            elif isinstance(s, HistoryState):
+            elif isinstance(s, ShallowHistoryState):
               w.extendWrite(' type=history')
             elif isinstance(s, DeepHistoryState):
               w.extendWrite(' type=deephistory')

+ 41 - 41
test/test_files/semantics/original_semantics/history_deep_Class1.svg

@@ -4,25 +4,25 @@
 <!-- Generated by graphviz version 2.40.1 (20161225.0304)
  -->
 <!-- Title: state transitions Pages: 1 -->
-<svg width="441pt" height="1599pt"
- viewBox="0.00 0.00 441.00 1598.50" 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 1594.5)">
+<svg width="441pt" height="1600pt"
+ viewBox="0.00 0.00 441.00 1599.97" 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 1595.9656)">
 <title>state transitions</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1594.5 437,-1594.5 437,4 -4,4"/>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1595.9656 437,-1595.9656 437,4 -4,4"/>
 <g id="clust1" class="cluster">
 <title>cluster__parallel</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 413,-8 413,-8 419,-8 425,-14 425,-20 425,-20 425,-1539.5 425,-1539.5 425,-1545.5 419,-1551.5 413,-1551.5 413,-1551.5 20,-1551.5 20,-1551.5 14,-1551.5 8,-1545.5 8,-1539.5 8,-1539.5 8,-20 8,-20 8,-14 14,-8 20,-8"/>
-<text text-anchor="start" x="197.1668" y="-1532.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">parallel</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 413,-8 413,-8 419,-8 425,-14 425,-20 425,-20 425,-1540.9656 425,-1540.9656 425,-1546.9656 419,-1552.9656 413,-1552.9656 413,-1552.9656 20,-1552.9656 20,-1552.9656 14,-1552.9656 8,-1546.9656 8,-1540.9656 8,-1540.9656 8,-20 8,-20 8,-14 14,-8 20,-8"/>
+<text text-anchor="start" x="197.1668" y="-1534.1656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">parallel</text>
 </g>
 <g id="clust2" class="cluster">
 <title>cluster__parallel_orthogonal</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="149,-16 149,-1513.5 417,-1513.5 417,-16 149,-16"/>
-<text text-anchor="start" x="254.656" y="-1494.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="149,-16 149,-1514.9656 417,-1514.9656 417,-16 149,-16"/>
+<text text-anchor="start" x="254.656" y="-1496.1656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal</text>
 </g>
 <g id="clust3" class="cluster">
 <title>cluster__parallel_orthogonal_wrapper</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M169,-24C169,-24 397,-24 397,-24 403,-24 409,-30 409,-36 409,-36 409,-1345.5 409,-1345.5 409,-1351.5 403,-1357.5 397,-1357.5 397,-1357.5 169,-1357.5 169,-1357.5 163,-1357.5 157,-1351.5 157,-1345.5 157,-1345.5 157,-36 157,-36 157,-30 163,-24 169,-24"/>
-<text text-anchor="start" x="261.8322" y="-1338.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">wrapper</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M169,-24C169,-24 397,-24 397,-24 403,-24 409,-30 409,-36 409,-36 409,-1346.9656 409,-1346.9656 409,-1352.9656 403,-1358.9656 397,-1358.9656 397,-1358.9656 169,-1358.9656 169,-1358.9656 163,-1358.9656 157,-1352.9656 157,-1346.9656 157,-1346.9656 157,-36 157,-36 157,-30 163,-24 169,-24"/>
+<text text-anchor="start" x="261.8322" y="-1340.1656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">wrapper</text>
 </g>
 <g id="clust4" class="cluster">
 <title>cluster__parallel_orthogonal_wrapper_state_1</title>
@@ -36,73 +36,73 @@
 </g>
 <g id="clust6" class="cluster">
 <title>cluster__parallel_orthogonal_tester</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="24,-740 24,-1501 141,-1501 141,-740 24,-740"/>
-<text text-anchor="start" x="36.3176" y="-1482.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_tester</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="24,-740 24,-1502.4656 141,-1502.4656 141,-740 24,-740"/>
+<text text-anchor="start" x="36.3176" y="-1483.6656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_tester</text>
 </g>
 <!-- __initial -->
 <g id="node1" class="node">
 <title>__initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="16" cy="-1585" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="16" cy="-1586.4656" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel -->
 <!-- __initial&#45;&gt;_parallel -->
 <g id="edge1" class="edge">
 <title>__initial&#45;&gt;_parallel</title>
-<path fill="none" stroke="#000000" d="M16,-1579.1903C16,-1575.1144 16,-1569.1212 16,-1561.946"/>
-<polygon fill="#000000" stroke="#000000" points="19.5001,-1561.4982 16,-1551.4982 12.5001,-1561.4982 19.5001,-1561.4982"/>
-<text text-anchor="middle" x="17.3895" y="-1562.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M16,-1580.6559C16,-1576.58 16,-1570.5868 16,-1563.4116"/>
+<polygon fill="#000000" stroke="#000000" points="19.5001,-1562.9638 16,-1552.9638 12.5001,-1562.9638 19.5001,-1562.9638"/>
+<text text-anchor="middle" x="17.3895" y="-1563.9656" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal -->
 <!-- _parallel_orthogonal_initial -->
 <g id="node4" class="node">
 <title>_parallel_orthogonal_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="372" cy="-1457.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="372" cy="-1458.9656" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_wrapper -->
 <!-- _parallel_orthogonal_initial&#45;&gt;_parallel_orthogonal_wrapper -->
 <g id="edge2" class="edge">
 <title>_parallel_orthogonal_initial&#45;&gt;_parallel_orthogonal_wrapper</title>
-<path fill="none" stroke="#000000" d="M372,-1451.9659C372,-1444.982 372,-1432.6007 372,-1422 372,-1422 372,-1422 372,-1375 372,-1372.5596 371.871,-1370.0984 371.6313,-1367.6314"/>
-<polygon fill="#000000" stroke="#000000" points="375.0515,-1366.845 370.0681,-1357.4953 368.1332,-1367.912 375.0515,-1366.845"/>
-<text text-anchor="middle" x="373.3895" y="-1395.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M372,-1453.4315C372,-1446.4476 372,-1434.0663 372,-1423.4656 372,-1423.4656 372,-1423.4656 372,-1376.4656 372,-1374.0264 371.8734,-1371.5662 371.6379,-1369.0998"/>
+<polygon fill="#000000" stroke="#000000" points="375.0607,-1368.3257 370.1016,-1358.9632 368.1397,-1369.3748 375.0607,-1368.3257"/>
+<text text-anchor="middle" x="373.3895" y="-1396.9656" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_outer -->
 <g id="node5" class="node">
 <title>_parallel_orthogonal_outer</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="263,-1475.5 207,-1475.5 207,-1439.5 263,-1439.5 263,-1475.5"/>
-<text text-anchor="start" x="221.329" y="-1453.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M219.3333,-1440.5C219.3333,-1440.5 250.6667,-1440.5 250.6667,-1440.5 256.3333,-1440.5 262,-1446.1667 262,-1451.8333 262,-1451.8333 262,-1463.1667 262,-1463.1667 262,-1468.8333 256.3333,-1474.5 250.6667,-1474.5 250.6667,-1474.5 219.3333,-1474.5 219.3333,-1474.5 213.6667,-1474.5 208,-1468.8333 208,-1463.1667 208,-1463.1667 208,-1451.8333 208,-1451.8333 208,-1446.1667 213.6667,-1440.5 219.3333,-1440.5"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="263,-1476.9656 207,-1476.9656 207,-1440.9656 263,-1440.9656 263,-1476.9656"/>
+<text text-anchor="start" x="221.329" y="-1455.1656" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M219.3333,-1441.9656C219.3333,-1441.9656 250.6667,-1441.9656 250.6667,-1441.9656 256.3333,-1441.9656 262,-1447.6323 262,-1453.2989 262,-1453.2989 262,-1464.6323 262,-1464.6323 262,-1470.2989 256.3333,-1475.9656 250.6667,-1475.9656 250.6667,-1475.9656 219.3333,-1475.9656 219.3333,-1475.9656 213.6667,-1475.9656 208,-1470.2989 208,-1464.6323 208,-1464.6323 208,-1453.2989 208,-1453.2989 208,-1447.6323 213.6667,-1441.9656 219.3333,-1441.9656"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_history -->
 <g id="node8" class="node">
 <title>_parallel_orthogonal_wrapper_history</title>
-<ellipse fill="transparent" stroke="#000000" stroke-width="2" cx="187" cy="-1301.5" rx="18" ry="18"/>
-<text text-anchor="middle" x="187" y="-1297.9" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">H</text>
+<ellipse fill="transparent" stroke="#000000" stroke-width="2" cx="187" cy="-1302.2328" rx="18.9685" ry="18.9685"/>
+<text text-anchor="middle" x="187" y="-1298.6328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">H*</text>
 </g>
 <!-- _parallel_orthogonal_outer&#45;&gt;_parallel_orthogonal_wrapper_history -->
 <g id="edge9" class="edge">
 <title>_parallel_orthogonal_outer&#45;&gt;_parallel_orthogonal_wrapper_history</title>
-<path fill="none" stroke="#000000" d="M206.8006,-1447.6078C196.3523,-1442.0016 187,-1433.7122 187,-1422 187,-1422 187,-1422 187,-1375 187,-1360.0982 187,-1343.497 187,-1329.8478"/>
-<polygon fill="#000000" stroke="#000000" points="190.5001,-1329.6232 187,-1319.6232 183.5001,-1329.6233 190.5001,-1329.6232"/>
-<text text-anchor="start" x="187" y="-1395.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_history &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M206.8006,-1449.0734C196.3523,-1443.4672 187,-1435.1778 187,-1423.4656 187,-1423.4656 187,-1423.4656 187,-1376.4656 187,-1361.6186 187,-1345.1014 187,-1331.4237"/>
+<polygon fill="#000000" stroke="#000000" points="190.5001,-1331.1495 187,-1321.1495 183.5001,-1331.1496 190.5001,-1331.1495"/>
+<text text-anchor="start" x="187" y="-1396.9656" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_history &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_wrapper&#45;&gt;_parallel_orthogonal_outer -->
 <g id="edge8" class="edge">
 <title>_parallel_orthogonal_wrapper&#45;&gt;_parallel_orthogonal_outer</title>
-<path fill="none" stroke="#000000" d="M308,-1357.5C298.4795,-1367.1598 283,-1361.4372 283,-1375 283,-1422 283,-1422 283,-1422 283,-1430.2352 278.3764,-1436.7781 271.9991,-1441.886"/>
-<polygon fill="#000000" stroke="#000000" points="269.6751,-1439.2222 263.1994,-1447.6078 273.491,-1445.0907 269.6751,-1439.2222"/>
-<text text-anchor="start" x="283" y="-1395.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_outer &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M308,-1358.9656C298.5087,-1368.654 283,-1362.9028 283,-1376.4656 283,-1423.4656 283,-1423.4656 283,-1423.4656 283,-1431.7008 278.3764,-1438.2437 271.9991,-1443.3516"/>
+<polygon fill="#000000" stroke="#000000" points="269.6751,-1440.6879 263.1994,-1449.0734 273.491,-1446.5564 269.6751,-1440.6879"/>
+<text text-anchor="start" x="283" y="-1396.9656" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_outer &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_wrapper_initial -->
 <g id="node7" class="node">
 <title>_parallel_orthogonal_wrapper_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="291" cy="-1301.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="291" cy="-1302.2328" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1 -->
 <!-- _parallel_orthogonal_wrapper_initial&#45;&gt;_parallel_orthogonal_wrapper_state_1 -->
 <g id="edge3" class="edge">
 <title>_parallel_orthogonal_wrapper_initial&#45;&gt;_parallel_orthogonal_wrapper_state_1</title>
-<path fill="none" stroke="#000000" d="M291,-1295.9659C291,-1288.982 291,-1276.6007 291,-1266 291,-1266 291,-1266 291,-1101 291,-1098.6063 291,-1096.1687 291,-1093.7066"/>
+<path fill="none" stroke="#000000" d="M291,-1296.5844C291,-1289.4564 291,-1276.8195 291,-1266 291,-1266 291,-1266 291,-1101 291,-1098.6063 291,-1096.1687 291,-1093.7066"/>
 <polygon fill="#000000" stroke="#000000" points="294.5001,-1093.4956 291,-1083.4957 287.5001,-1093.4957 294.5001,-1093.4956"/>
 <text text-anchor="middle" x="292.3895" y="-1180.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
@@ -177,21 +177,21 @@
 <!-- _parallel_orthogonal_tester_initial -->
 <g id="node18" class="node">
 <title>_parallel_orthogonal_tester_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="71" cy="-1457.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="71" cy="-1458.9656" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_tester_start -->
 <g id="node19" class="node">
 <title>_parallel_orthogonal_tester_start</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-1319.5 43,-1319.5 43,-1283.5 99,-1283.5 99,-1319.5"/>
-<text text-anchor="start" x="59.3324" y="-1297.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">start</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-1284.5C55.3333,-1284.5 86.6667,-1284.5 86.6667,-1284.5 92.3333,-1284.5 98,-1290.1667 98,-1295.8333 98,-1295.8333 98,-1307.1667 98,-1307.1667 98,-1312.8333 92.3333,-1318.5 86.6667,-1318.5 86.6667,-1318.5 55.3333,-1318.5 55.3333,-1318.5 49.6667,-1318.5 44,-1312.8333 44,-1307.1667 44,-1307.1667 44,-1295.8333 44,-1295.8333 44,-1290.1667 49.6667,-1284.5 55.3333,-1284.5"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-1320.2328 43,-1320.2328 43,-1284.2328 99,-1284.2328 99,-1320.2328"/>
+<text text-anchor="start" x="59.3324" y="-1298.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">start</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-1285.2328C55.3333,-1285.2328 86.6667,-1285.2328 86.6667,-1285.2328 92.3333,-1285.2328 98,-1290.8995 98,-1296.5661 98,-1296.5661 98,-1307.8995 98,-1307.8995 98,-1313.5661 92.3333,-1319.2328 86.6667,-1319.2328 86.6667,-1319.2328 55.3333,-1319.2328 55.3333,-1319.2328 49.6667,-1319.2328 44,-1313.5661 44,-1307.8995 44,-1307.8995 44,-1296.5661 44,-1296.5661 44,-1290.8995 49.6667,-1285.2328 55.3333,-1285.2328"/>
 </g>
 <!-- _parallel_orthogonal_tester_initial&#45;&gt;_parallel_orthogonal_tester_start -->
 <g id="edge10" class="edge">
 <title>_parallel_orthogonal_tester_initial&#45;&gt;_parallel_orthogonal_tester_start</title>
-<path fill="none" stroke="#000000" d="M71,-1451.9659C71,-1444.982 71,-1432.6007 71,-1422 71,-1422 71,-1422 71,-1375 71,-1360.0982 71,-1343.497 71,-1329.8478"/>
-<polygon fill="#000000" stroke="#000000" points="74.5001,-1329.6232 71,-1319.6232 67.5001,-1329.6233 74.5001,-1329.6232"/>
-<text text-anchor="middle" x="72.3895" y="-1395.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M71,-1453.4315C71,-1446.4476 71,-1434.0663 71,-1423.4656 71,-1423.4656 71,-1423.4656 71,-1376.4656 71,-1361.3136 71,-1344.4219 71,-1330.5842"/>
+<polygon fill="#000000" stroke="#000000" points="74.5001,-1330.2331 71,-1320.2331 67.5001,-1330.2331 74.5001,-1330.2331"/>
+<text text-anchor="middle" x="72.3895" y="-1396.9656" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_tester_step1 -->
 <g id="node20" class="node">
@@ -203,7 +203,7 @@
 <!-- _parallel_orthogonal_tester_start&#45;&gt;_parallel_orthogonal_tester_step1 -->
 <g id="edge11" class="edge">
 <title>_parallel_orthogonal_tester_start&#45;&gt;_parallel_orthogonal_tester_step1</title>
-<path fill="none" stroke="#000000" d="M71,-1283.4402C71,-1277.8497 71,-1271.6701 71,-1266 71,-1266 71,-1266 71,-1219 71,-1216.6079 71,-1214.1252 71,-1211.6342"/>
+<path fill="none" stroke="#000000" d="M71,-1284.1715C71,-1278.3688 71,-1271.913 71,-1266 71,-1266 71,-1266 71,-1219 71,-1216.6079 71,-1214.1252 71,-1211.6342"/>
 <polygon fill="#000000" stroke="#000000" points="74.5001,-1211.5597 71,-1201.5598 67.5001,-1211.5598 74.5001,-1211.5597"/>
 <text text-anchor="middle" x="72.3895" y="-1239.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>

+ 88 - 88
test/test_files/semantics/original_semantics/history_parallel_deep_Class1.svg

@@ -4,199 +4,199 @@
 <!-- Generated by graphviz version 2.40.1 (20161225.0304)
  -->
 <!-- Title: state transitions Pages: 1 -->
-<svg width="689pt" height="1216pt"
- viewBox="0.00 0.00 689.35 1215.50" 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 1211.5)">
+<svg width="469pt" height="1195pt"
+ viewBox="0.00 0.00 469.00 1195.23" 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 1191.2328)">
 <title>state transitions</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1211.5 685.3536,-1211.5 685.3536,4 -4,4"/>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1191.2328 465,-1191.2328 465,4 -4,4"/>
 <g id="clust1" class="cluster">
 <title>cluster__parallel</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 445,-8 445,-8 451,-8 457,-14 457,-20 457,-20 457,-1156.5 457,-1156.5 457,-1162.5 451,-1168.5 445,-1168.5 445,-1168.5 20,-1168.5 20,-1168.5 14,-1168.5 8,-1162.5 8,-1156.5 8,-1156.5 8,-20 8,-20 8,-14 14,-8 20,-8"/>
-<text text-anchor="start" x="213.1668" y="-1149.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">parallel</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 441,-8 441,-8 447,-8 453,-14 453,-20 453,-20 453,-1136.2328 453,-1136.2328 453,-1142.2328 447,-1148.2328 441,-1148.2328 441,-1148.2328 20,-1148.2328 20,-1148.2328 14,-1148.2328 8,-1142.2328 8,-1136.2328 8,-1136.2328 8,-20 8,-20 8,-14 14,-8 20,-8"/>
+<text text-anchor="start" x="211.1668" y="-1129.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">parallel</text>
 </g>
 <g id="clust2" class="cluster">
 <title>cluster__parallel_orthogonal</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="149,-16 149,-1130.5 449,-1130.5 449,-16 149,-16"/>
-<text text-anchor="start" x="270.656" y="-1111.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="149,-16 149,-1110.2328 445,-1110.2328 445,-16 149,-16"/>
+<text text-anchor="start" x="268.656" y="-1091.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal</text>
 </g>
 <g id="clust3" class="cluster">
 <title>cluster__parallel_orthogonal_wrapper</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M169,-24C169,-24 365,-24 365,-24 371,-24 377,-30 377,-36 377,-36 377,-987.5 377,-987.5 377,-993.5 371,-999.5 365,-999.5 365,-999.5 169,-999.5 169,-999.5 163,-999.5 157,-993.5 157,-987.5 157,-987.5 157,-36 157,-36 157,-30 163,-24 169,-24"/>
-<text text-anchor="start" x="245.8322" y="-980.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">wrapper</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M169,-24C169,-24 425,-24 425,-24 431,-24 437,-30 437,-36 437,-36 437,-942.2328 437,-942.2328 437,-948.2328 431,-954.2328 425,-954.2328 425,-954.2328 169,-954.2328 169,-954.2328 163,-954.2328 157,-948.2328 157,-942.2328 157,-942.2328 157,-36 157,-36 157,-30 163,-24 169,-24"/>
+<text text-anchor="start" x="275.8322" y="-935.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">wrapper</text>
 </g>
 <g id="clust4" class="cluster">
 <title>cluster__parallel_orthogonal_wrapper_state_1</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="267,-32 267,-961.5 361,-961.5 361,-32 267,-32"/>
-<text text-anchor="start" x="294.8236" y="-942.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_1</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="335,-32 335,-916.2328 429,-916.2328 429,-32 335,-32"/>
+<text text-anchor="start" x="362.8236" y="-897.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_1</text>
 </g>
 <g id="clust5" class="cluster">
 <title>cluster__parallel_orthogonal_wrapper_state_2</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="165,-32 165,-961.5 259,-961.5 259,-32 165,-32"/>
-<text text-anchor="start" x="192.8236" y="-942.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_2</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="233,-32 233,-916.2328 327,-916.2328 327,-32 233,-32"/>
+<text text-anchor="start" x="260.8236" y="-897.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_2</text>
 </g>
 <g id="clust6" class="cluster">
 <title>cluster__parallel_orthogonal_tester</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="24,-374 24,-1130.5 141,-1130.5 141,-374 24,-374"/>
-<text text-anchor="start" x="36.3176" y="-1111.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_tester</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="24,-374 24,-1097.7328 141,-1097.7328 141,-374 24,-374"/>
+<text text-anchor="start" x="36.3176" y="-1078.9328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_tester</text>
 </g>
 <!-- __initial -->
 <g id="node1" class="node">
 <title>__initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="16" cy="-1202" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="16" cy="-1181.7328" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel -->
 <!-- __initial&#45;&gt;_parallel -->
 <g id="edge1" class="edge">
 <title>__initial&#45;&gt;_parallel</title>
-<path fill="none" stroke="#000000" d="M16,-1196.4533C16,-1192.2779 16,-1186.0043 16,-1178.5332"/>
-<polygon fill="#000000" stroke="#000000" points="19.5001,-1178.4971 16,-1168.4971 12.5001,-1178.4972 19.5001,-1178.4971"/>
-<text text-anchor="middle" x="17.3895" y="-1179.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M16,-1175.9231C16,-1171.8472 16,-1165.854 16,-1158.6788"/>
+<polygon fill="#000000" stroke="#000000" points="19.5001,-1158.231 16,-1148.231 12.5001,-1158.231 19.5001,-1158.231"/>
+<text text-anchor="middle" x="17.3895" y="-1159.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal -->
 <!-- _parallel_orthogonal_initial -->
 <g id="node4" class="node">
 <title>_parallel_orthogonal_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="369" cy="-1087" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="364" cy="-1054.2328" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_wrapper -->
 <!-- _parallel_orthogonal_initial&#45;&gt;_parallel_orthogonal_wrapper -->
 <g id="edge2" class="edge">
 <title>_parallel_orthogonal_initial&#45;&gt;_parallel_orthogonal_wrapper</title>
-<path fill="none" stroke="#000000" d="M369,-1081.3288C369,-1076.6736 369,-1069.9097 369,-1064 369,-1064 369,-1064 369,-1017 369,-1014.5963 369,-1012.1597 369,-1009.701"/>
-<polygon fill="#000000" stroke="#000000" points="372.5001,-1009.4966 369,-999.4967 365.5001,-1009.4967 372.5001,-1009.4966"/>
-<text text-anchor="middle" x="370.3895" y="-1037.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M364,-1048.6987C364,-1041.7148 364,-1029.3335 364,-1018.7328 364,-1018.7328 364,-1018.7328 364,-971.7328 364,-944.5542 271.5926,-970.0283 237.9413,-959.3633"/>
+<polygon fill="#000000" stroke="#000000" points="239.4155,-956.174 229,-954.2328 235.9316,-962.2455 239.4155,-956.174"/>
+<text text-anchor="middle" x="365.3895" y="-992.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_outer -->
 <g id="node5" class="node">
 <title>_parallel_orthogonal_outer</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="441,-818 385,-818 385,-782 441,-782 441,-818"/>
-<text text-anchor="start" x="399.329" y="-796.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M397.3333,-783C397.3333,-783 428.6667,-783 428.6667,-783 434.3333,-783 440,-788.6667 440,-794.3333 440,-794.3333 440,-805.6667 440,-805.6667 440,-811.3333 434.3333,-817 428.6667,-817 428.6667,-817 397.3333,-817 397.3333,-817 391.6667,-817 386,-811.3333 386,-805.6667 386,-805.6667 386,-794.3333 386,-794.3333 386,-788.6667 391.6667,-783 397.3333,-783"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="258,-1072.2328 202,-1072.2328 202,-1036.2328 258,-1036.2328 258,-1072.2328"/>
+<text text-anchor="start" x="216.329" y="-1050.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M214.3333,-1037.2328C214.3333,-1037.2328 245.6667,-1037.2328 245.6667,-1037.2328 251.3333,-1037.2328 257,-1042.8995 257,-1048.5661 257,-1048.5661 257,-1059.8995 257,-1059.8995 257,-1065.5661 251.3333,-1071.2328 245.6667,-1071.2328 245.6667,-1071.2328 214.3333,-1071.2328 214.3333,-1071.2328 208.6667,-1071.2328 203,-1065.5661 203,-1059.8995 203,-1059.8995 203,-1048.5661 203,-1048.5661 203,-1042.8995 208.6667,-1037.2328 214.3333,-1037.2328"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_history -->
-<g id="node22" class="node">
+<g id="node7" class="node">
 <title>_parallel_orthogonal_wrapper_history</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="681.2074,-754 464.7926,-754 464.7926,-718 681.2074,-718 681.2074,-754"/>
-<text text-anchor="middle" x="573" y="-732.4" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">_parallel_orthogonal_wrapper_history</text>
+<ellipse fill="transparent" stroke="#000000" stroke-width="2" cx="184" cy="-872.7328" rx="18.9685" ry="18.9685"/>
+<text text-anchor="middle" x="184" y="-869.1328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">H*</text>
 </g>
 <!-- _parallel_orthogonal_outer&#45;&gt;_parallel_orthogonal_wrapper_history -->
 <g id="edge8" class="edge">
 <title>_parallel_orthogonal_outer&#45;&gt;_parallel_orthogonal_wrapper_history</title>
-<path fill="none" stroke="#000000" d="M441.2365,-788.7054C462.5698,-780.1721 492.5096,-768.1962 518.4595,-757.8162"/>
-<polygon fill="#000000" stroke="#000000" points="519.8313,-761.0372 527.8162,-754.0735 517.2315,-754.5378 519.8313,-761.0372"/>
-<text text-anchor="start" x="507" y="-765" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_history &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M201.815,-1045.6437C190.0201,-1040.144 179,-1031.5705 179,-1018.7328 179,-1018.7328 179,-1018.7328 179,-971.7328 179,-948.2097 180.4254,-921.5826 181.7541,-901.8723"/>
+<polygon fill="#000000" stroke="#000000" points="185.2594,-901.9191 182.4727,-891.6974 178.2768,-901.426 185.2594,-901.9191"/>
+<text text-anchor="start" x="179" y="-992.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_history &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_wrapper&#45;&gt;_parallel_orthogonal_outer -->
 <g id="edge7" class="edge">
 <title>_parallel_orthogonal_wrapper&#45;&gt;_parallel_orthogonal_outer</title>
-<path fill="none" stroke="#000000" d="M377,-911.4115C383.9805,-904.8773 393,-894.1754 393,-882.5 393,-882.5 393,-882.5 393,-835.5 393,-832.7434 393.4634,-830.0034 394.2492,-827.3388"/>
-<polygon fill="#000000" stroke="#000000" points="397.4778,-828.6909 398.2548,-818.1245 391.0582,-825.9001 397.4778,-828.6909"/>
-<text text-anchor="start" x="393" y="-856" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_outer &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M229,-954.2328C241.8543,-971.9313 275,-949.8589 275,-971.7328 275,-1018.7328 275,-1018.7328 275,-1018.7328 275,-1025.8197 271.5173,-1031.711 266.4896,-1036.5234"/>
+<polygon fill="#000000" stroke="#000000" points="264.0702,-1033.9669 258.2437,-1042.8157 268.3167,-1039.5317 264.0702,-1033.9669"/>
+<text text-anchor="start" x="275" y="-992.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_outer &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1 -->
 <!-- _parallel_orthogonal_wrapper_state_1_initial -->
-<g id="node8" class="node">
+<g id="node9" class="node">
 <title>_parallel_orthogonal_wrapper_state_1_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="306" cy="-918" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="374" cy="-872.7328" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1_inner_1 -->
-<g id="node9" class="node">
+<g id="node10" class="node">
 <title>_parallel_orthogonal_wrapper_state_1_inner_1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="337,-418 275,-418 275,-382 337,-382 337,-418"/>
-<text text-anchor="start" x="285.9942" y="-396.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M287.3333,-383C287.3333,-383 324.6667,-383 324.6667,-383 330.3333,-383 336,-388.6667 336,-394.3333 336,-394.3333 336,-405.6667 336,-405.6667 336,-411.3333 330.3333,-417 324.6667,-417 324.6667,-417 287.3333,-417 287.3333,-417 281.6667,-417 276,-411.3333 276,-405.6667 276,-405.6667 276,-394.3333 276,-394.3333 276,-388.6667 281.6667,-383 287.3333,-383"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="405,-418 343,-418 343,-382 405,-382 405,-418"/>
+<text text-anchor="start" x="353.9942" y="-396.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M355.3333,-383C355.3333,-383 392.6667,-383 392.6667,-383 398.3333,-383 404,-388.6667 404,-394.3333 404,-394.3333 404,-405.6667 404,-405.6667 404,-411.3333 398.3333,-417 392.6667,-417 392.6667,-417 355.3333,-417 355.3333,-417 349.6667,-417 344,-411.3333 344,-405.6667 344,-405.6667 344,-394.3333 344,-394.3333 344,-388.6667 349.6667,-383 355.3333,-383"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1_initial&#45;&gt;_parallel_orthogonal_wrapper_state_1_inner_1 -->
 <g id="edge3" class="edge">
 <title>_parallel_orthogonal_wrapper_state_1_initial&#45;&gt;_parallel_orthogonal_wrapper_state_1_inner_1</title>
-<path fill="none" stroke="#000000" d="M306,-912.4659C306,-905.482 306,-893.1007 306,-882.5 306,-882.5 306,-882.5 306,-435.5 306,-433.1079 306,-430.6252 306,-428.1342"/>
-<polygon fill="#000000" stroke="#000000" points="309.5001,-428.0597 306,-418.0598 302.5001,-428.0598 309.5001,-428.0597"/>
-<text text-anchor="middle" x="307.3895" y="-633" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M374,-867.0844C374,-859.9564 374,-847.3195 374,-836.5 374,-836.5 374,-836.5 374,-435.5 374,-433.1079 374,-430.6252 374,-428.1342"/>
+<polygon fill="#000000" stroke="#000000" points="377.5001,-428.0597 374,-418.0598 370.5001,-428.0598 377.5001,-428.0597"/>
+<text text-anchor="middle" x="375.3895" y="-633" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1_inner_2 -->
-<g id="node10" class="node">
+<g id="node11" class="node">
 <title>_parallel_orthogonal_wrapper_state_1_inner_2</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="337,-76 275,-76 275,-40 337,-40 337,-76"/>
-<text text-anchor="start" x="285.9942" y="-54.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_2</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M287.3333,-41C287.3333,-41 324.6667,-41 324.6667,-41 330.3333,-41 336,-46.6667 336,-52.3333 336,-52.3333 336,-63.6667 336,-63.6667 336,-69.3333 330.3333,-75 324.6667,-75 324.6667,-75 287.3333,-75 287.3333,-75 281.6667,-75 276,-69.3333 276,-63.6667 276,-63.6667 276,-52.3333 276,-52.3333 276,-46.6667 281.6667,-41 287.3333,-41"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="405,-76 343,-76 343,-40 405,-40 405,-76"/>
+<text text-anchor="start" x="353.9942" y="-54.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M355.3333,-41C355.3333,-41 392.6667,-41 392.6667,-41 398.3333,-41 404,-46.6667 404,-52.3333 404,-52.3333 404,-63.6667 404,-63.6667 404,-69.3333 398.3333,-75 392.6667,-75 392.6667,-75 355.3333,-75 355.3333,-75 349.6667,-75 344,-69.3333 344,-63.6667 344,-63.6667 344,-52.3333 344,-52.3333 344,-46.6667 349.6667,-41 355.3333,-41"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_1_inner_1&#45;&gt;_parallel_orthogonal_wrapper_state_1_inner_2 -->
 <g id="edge4" class="edge">
 <title>_parallel_orthogonal_wrapper_state_1_inner_1&#45;&gt;_parallel_orthogonal_wrapper_state_1_inner_2</title>
-<path fill="none" stroke="#000000" d="M300.557,-381.97C298.6617,-374.2076 297,-364.9832 297,-356.5 297,-356.5 297,-356.5 297,-93.5 297,-91.0859 297.198,-88.607 297.5352,-86.1355"/>
-<polygon fill="#000000" stroke="#000000" points="300.9918,-86.7008 299.555,-76.2038 294.1322,-85.3057 300.9918,-86.7008"/>
-<text text-anchor="start" x="297" y="-222" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_inner_2 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M368.557,-381.97C366.6617,-374.2076 365,-364.9832 365,-356.5 365,-356.5 365,-356.5 365,-93.5 365,-91.0859 365.198,-88.607 365.5352,-86.1355"/>
+<polygon fill="#000000" stroke="#000000" points="368.9918,-86.7008 367.555,-76.2038 362.1322,-85.3057 368.9918,-86.7008"/>
+<text text-anchor="start" x="365" y="-222" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_inner_2 &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2 -->
 <!-- _parallel_orthogonal_wrapper_state_2_initial -->
-<g id="node12" class="node">
+<g id="node13" class="node">
 <title>_parallel_orthogonal_wrapper_state_2_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="204" cy="-918" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="272" cy="-872.7328" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2_inner_3 -->
-<g id="node13" class="node">
+<g id="node14" class="node">
 <title>_parallel_orthogonal_wrapper_state_2_inner_3</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="235,-418 173,-418 173,-382 235,-382 235,-418"/>
-<text text-anchor="start" x="183.9942" y="-396.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_3</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M185.3333,-383C185.3333,-383 222.6667,-383 222.6667,-383 228.3333,-383 234,-388.6667 234,-394.3333 234,-394.3333 234,-405.6667 234,-405.6667 234,-411.3333 228.3333,-417 222.6667,-417 222.6667,-417 185.3333,-417 185.3333,-417 179.6667,-417 174,-411.3333 174,-405.6667 174,-405.6667 174,-394.3333 174,-394.3333 174,-388.6667 179.6667,-383 185.3333,-383"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="303,-418 241,-418 241,-382 303,-382 303,-418"/>
+<text text-anchor="start" x="251.9942" y="-396.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_3</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M253.3333,-383C253.3333,-383 290.6667,-383 290.6667,-383 296.3333,-383 302,-388.6667 302,-394.3333 302,-394.3333 302,-405.6667 302,-405.6667 302,-411.3333 296.3333,-417 290.6667,-417 290.6667,-417 253.3333,-417 253.3333,-417 247.6667,-417 242,-411.3333 242,-405.6667 242,-405.6667 242,-394.3333 242,-394.3333 242,-388.6667 247.6667,-383 253.3333,-383"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2_initial&#45;&gt;_parallel_orthogonal_wrapper_state_2_inner_3 -->
 <g id="edge5" class="edge">
 <title>_parallel_orthogonal_wrapper_state_2_initial&#45;&gt;_parallel_orthogonal_wrapper_state_2_inner_3</title>
-<path fill="none" stroke="#000000" d="M204,-912.4659C204,-905.482 204,-893.1007 204,-882.5 204,-882.5 204,-882.5 204,-435.5 204,-433.1079 204,-430.6252 204,-428.1342"/>
-<polygon fill="#000000" stroke="#000000" points="207.5001,-428.0597 204,-418.0598 200.5001,-428.0598 207.5001,-428.0597"/>
-<text text-anchor="middle" x="205.3895" y="-633" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M272,-867.0844C272,-859.9564 272,-847.3195 272,-836.5 272,-836.5 272,-836.5 272,-435.5 272,-433.1079 272,-430.6252 272,-428.1342"/>
+<polygon fill="#000000" stroke="#000000" points="275.5001,-428.0597 272,-418.0598 268.5001,-428.0598 275.5001,-428.0597"/>
+<text text-anchor="middle" x="273.3895" y="-633" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2_inner_4 -->
-<g id="node14" class="node">
+<g id="node15" class="node">
 <title>_parallel_orthogonal_wrapper_state_2_inner_4</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="235,-76 173,-76 173,-40 235,-40 235,-76"/>
-<text text-anchor="start" x="183.9942" y="-54.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_4</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M185.3333,-41C185.3333,-41 222.6667,-41 222.6667,-41 228.3333,-41 234,-46.6667 234,-52.3333 234,-52.3333 234,-63.6667 234,-63.6667 234,-69.3333 228.3333,-75 222.6667,-75 222.6667,-75 185.3333,-75 185.3333,-75 179.6667,-75 174,-69.3333 174,-63.6667 174,-63.6667 174,-52.3333 174,-52.3333 174,-46.6667 179.6667,-41 185.3333,-41"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="303,-76 241,-76 241,-40 303,-40 303,-76"/>
+<text text-anchor="start" x="251.9942" y="-54.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">inner_4</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M253.3333,-41C253.3333,-41 290.6667,-41 290.6667,-41 296.3333,-41 302,-46.6667 302,-52.3333 302,-52.3333 302,-63.6667 302,-63.6667 302,-69.3333 296.3333,-75 290.6667,-75 290.6667,-75 253.3333,-75 253.3333,-75 247.6667,-75 242,-69.3333 242,-63.6667 242,-63.6667 242,-52.3333 242,-52.3333 242,-46.6667 247.6667,-41 253.3333,-41"/>
 </g>
 <!-- _parallel_orthogonal_wrapper_state_2_inner_3&#45;&gt;_parallel_orthogonal_wrapper_state_2_inner_4 -->
 <g id="edge6" class="edge">
 <title>_parallel_orthogonal_wrapper_state_2_inner_3&#45;&gt;_parallel_orthogonal_wrapper_state_2_inner_4</title>
-<path fill="none" stroke="#000000" d="M198.557,-381.97C196.6617,-374.2076 195,-364.9832 195,-356.5 195,-356.5 195,-356.5 195,-93.5 195,-91.0859 195.198,-88.607 195.5352,-86.1355"/>
-<polygon fill="#000000" stroke="#000000" points="198.9918,-86.7008 197.555,-76.2038 192.1322,-85.3057 198.9918,-86.7008"/>
-<text text-anchor="start" x="195" y="-222" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_inner_4 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M266.557,-381.97C264.6617,-374.2076 263,-364.9832 263,-356.5 263,-356.5 263,-356.5 263,-93.5 263,-91.0859 263.198,-88.607 263.5352,-86.1355"/>
+<polygon fill="#000000" stroke="#000000" points="266.9918,-86.7008 265.555,-76.2038 260.1322,-85.3057 266.9918,-86.7008"/>
+<text text-anchor="start" x="263" y="-222" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to_inner_4 &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_tester -->
 <!-- _parallel_orthogonal_tester_initial -->
-<g id="node16" class="node">
+<g id="node17" class="node">
 <title>_parallel_orthogonal_tester_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="71" cy="-1087" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="71" cy="-1054.2328" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_tester_start -->
-<g id="node17" class="node">
+<g id="node18" class="node">
 <title>_parallel_orthogonal_tester_start</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-936 43,-936 43,-900 99,-900 99,-936"/>
-<text text-anchor="start" x="59.3324" y="-914.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">start</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-901C55.3333,-901 86.6667,-901 86.6667,-901 92.3333,-901 98,-906.6667 98,-912.3333 98,-912.3333 98,-923.6667 98,-923.6667 98,-929.3333 92.3333,-935 86.6667,-935 86.6667,-935 55.3333,-935 55.3333,-935 49.6667,-935 44,-929.3333 44,-923.6667 44,-923.6667 44,-912.3333 44,-912.3333 44,-906.6667 49.6667,-901 55.3333,-901"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-890.7328 43,-890.7328 43,-854.7328 99,-854.7328 99,-890.7328"/>
+<text text-anchor="start" x="59.3324" y="-868.9328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">start</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-855.7328C55.3333,-855.7328 86.6667,-855.7328 86.6667,-855.7328 92.3333,-855.7328 98,-861.3995 98,-867.0661 98,-867.0661 98,-878.3995 98,-878.3995 98,-884.0661 92.3333,-889.7328 86.6667,-889.7328 86.6667,-889.7328 55.3333,-889.7328 55.3333,-889.7328 49.6667,-889.7328 44,-884.0661 44,-878.3995 44,-878.3995 44,-867.0661 44,-867.0661 44,-861.3995 49.6667,-855.7328 55.3333,-855.7328"/>
 </g>
 <!-- _parallel_orthogonal_tester_initial&#45;&gt;_parallel_orthogonal_tester_start -->
 <g id="edge9" class="edge">
 <title>_parallel_orthogonal_tester_initial&#45;&gt;_parallel_orthogonal_tester_start</title>
-<path fill="none" stroke="#000000" d="M71,-1081.3288C71,-1076.6736 71,-1069.9097 71,-1064 71,-1064 71,-1064 71,-1017 71,-993.2168 71,-966.2197 71,-946.4319"/>
-<polygon fill="#000000" stroke="#000000" points="74.5001,-946.2465 71,-936.2465 67.5001,-946.2466 74.5001,-946.2465"/>
-<text text-anchor="middle" x="72.3895" y="-1037.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M71,-1048.6987C71,-1041.7148 71,-1029.3335 71,-1018.7328 71,-1018.7328 71,-1018.7328 71,-971.7328 71,-947.9496 71,-920.9525 71,-901.1647"/>
+<polygon fill="#000000" stroke="#000000" points="74.5001,-900.9793 71,-890.9793 67.5001,-900.9794 74.5001,-900.9793"/>
+<text text-anchor="middle" x="72.3895" y="-992.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_tester_step1 -->
-<g id="node18" class="node">
+<g id="node19" class="node">
 <title>_parallel_orthogonal_tester_step1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-818 43,-818 43,-782 99,-782 99,-818"/>
-<text text-anchor="start" x="56.3264" y="-796.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-783C55.3333,-783 86.6667,-783 86.6667,-783 92.3333,-783 98,-788.6667 98,-794.3333 98,-794.3333 98,-805.6667 98,-805.6667 98,-811.3333 92.3333,-817 86.6667,-817 86.6667,-817 55.3333,-817 55.3333,-817 49.6667,-817 44,-811.3333 44,-805.6667 44,-805.6667 44,-794.3333 44,-794.3333 44,-788.6667 49.6667,-783 55.3333,-783"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-772 43,-772 43,-736 99,-736 99,-772"/>
+<text text-anchor="start" x="56.3264" y="-750.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M55.3333,-737C55.3333,-737 86.6667,-737 86.6667,-737 92.3333,-737 98,-742.6667 98,-748.3333 98,-748.3333 98,-759.6667 98,-759.6667 98,-765.3333 92.3333,-771 86.6667,-771 86.6667,-771 55.3333,-771 55.3333,-771 49.6667,-771 44,-765.3333 44,-759.6667 44,-759.6667 44,-748.3333 44,-748.3333 44,-742.6667 49.6667,-737 55.3333,-737"/>
 </g>
 <!-- _parallel_orthogonal_tester_start&#45;&gt;_parallel_orthogonal_tester_step1 -->
 <g id="edge10" class="edge">
 <title>_parallel_orthogonal_tester_start&#45;&gt;_parallel_orthogonal_tester_step1</title>
-<path fill="none" stroke="#000000" d="M71,-899.9402C71,-894.3497 71,-888.1701 71,-882.5 71,-882.5 71,-882.5 71,-835.5 71,-833.1079 71,-830.6252 71,-828.1342"/>
-<polygon fill="#000000" stroke="#000000" points="74.5001,-828.0597 71,-818.0598 67.5001,-828.0598 74.5001,-828.0597"/>
-<text text-anchor="middle" x="72.3895" y="-856" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M71,-854.6715C71,-848.8688 71,-842.413 71,-836.5 71,-836.5 71,-836.5 71,-789.5 71,-787.1079 71,-784.6252 71,-782.1342"/>
+<polygon fill="#000000" stroke="#000000" points="74.5001,-782.0597 71,-772.0598 67.5001,-782.0598 74.5001,-782.0597"/>
+<text text-anchor="middle" x="72.3895" y="-810" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_tester_step2 -->
-<g id="node19" class="node">
+<g id="node20" class="node">
 <title>_parallel_orthogonal_tester_step2</title>
 <polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-654 43,-654 43,-618 99,-618 99,-654"/>
 <text text-anchor="start" x="56.3264" y="-632.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step2</text>
@@ -205,12 +205,12 @@
 <!-- _parallel_orthogonal_tester_step1&#45;&gt;_parallel_orthogonal_tester_step2 -->
 <g id="edge11" class="edge">
 <title>_parallel_orthogonal_tester_step1&#45;&gt;_parallel_orthogonal_tester_step2</title>
-<path fill="none" stroke="#000000" d="M71,-781.7928C71,-768.9854 71,-751.4444 71,-736 71,-736 71,-736 71,-671.5 71,-669.1079 71,-666.6252 71,-664.1342"/>
+<path fill="none" stroke="#000000" d="M71,-735.9402C71,-730.3497 71,-724.1701 71,-718.5 71,-718.5 71,-718.5 71,-671.5 71,-669.1079 71,-666.6252 71,-664.1342"/>
 <polygon fill="#000000" stroke="#000000" points="74.5001,-664.0597 71,-654.0598 67.5001,-664.0598 74.5001,-664.0597"/>
 <text text-anchor="middle" x="72.3895" y="-692" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_tester_step3 -->
-<g id="node20" class="node">
+<g id="node21" class="node">
 <title>_parallel_orthogonal_tester_step3</title>
 <polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-536 43,-536 43,-500 99,-500 99,-536"/>
 <text text-anchor="start" x="56.3264" y="-514.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">step3</text>
@@ -224,7 +224,7 @@
 <text text-anchor="middle" x="72.3895" y="-574" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_tester_end -->
-<g id="node21" class="node">
+<g id="node22" class="node">
 <title>_parallel_orthogonal_tester_end</title>
 <polygon fill="transparent" stroke="transparent" stroke-width="2" points="99,-418 43,-418 43,-382 99,-382 99,-418"/>
 <text text-anchor="start" x="60.9938" y="-396.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">end</text>

+ 86 - 86
test/test_files/semantics/original_semantics/parallel_history_2_TestClass.svg

@@ -4,197 +4,197 @@
 <!-- Generated by graphviz version 2.40.1 (20161225.0304)
  -->
 <!-- Title: state transitions Pages: 1 -->
-<svg width="672pt" height="793pt"
- viewBox="0.00 0.00 671.93 793.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 789)">
+<svg width="586pt" height="750pt"
+ viewBox="0.00 0.00 585.50 750.23" 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 746.2328)">
 <title>state transitions</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-789 667.927,-789 667.927,4 -4,4"/>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-746.2328 581.5,-746.2328 581.5,4 -4,4"/>
 <g id="clust1" class="cluster">
 <title>cluster__parallel</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 478,-8 478,-8 484,-8 490,-14 490,-20 490,-20 490,-734 490,-734 490,-740 484,-746 478,-746 478,-746 20,-746 20,-746 14,-746 8,-740 8,-734 8,-734 8,-20 8,-20 8,-14 14,-8 20,-8"/>
-<text text-anchor="start" x="229.6668" y="-727.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">parallel</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M39.5,-8C39.5,-8 557.5,-8 557.5,-8 563.5,-8 569.5,-14 569.5,-20 569.5,-20 569.5,-666.2328 569.5,-666.2328 569.5,-672.2328 563.5,-678.2328 557.5,-678.2328 557.5,-678.2328 39.5,-678.2328 39.5,-678.2328 33.5,-678.2328 27.5,-672.2328 27.5,-666.2328 27.5,-666.2328 27.5,-20 27.5,-20 27.5,-14 33.5,-8 39.5,-8"/>
+<text text-anchor="start" x="279.1668" y="-659.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">parallel</text>
 </g>
 <g id="clust2" class="cluster">
 <title>cluster__parallel_orthogonal_1</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="249,-16 249,-708 474,-708 474,-16 249,-16"/>
-<text text-anchor="start" x="326.4852" y="-689.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_1</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="336.5,-16 336.5,-640.2328 561.5,-640.2328 561.5,-16 336.5,-16"/>
+<text text-anchor="start" x="413.9852" y="-621.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_1</text>
 </g>
 <g id="clust3" class="cluster">
 <title>cluster__parallel_orthogonal_1_orthogonal_inner_1</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M269,-24C269,-24 384,-24 384,-24 390,-24 396,-30 396,-36 396,-36 396,-484 396,-484 396,-490 390,-496 384,-496 384,-496 269,-496 269,-496 263,-496 257,-490 257,-484 257,-484 257,-36 257,-36 257,-30 263,-24 269,-24"/>
-<text text-anchor="start" x="275.3148" y="-477.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_inner_1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M356.5,-24C356.5,-24 471.5,-24 471.5,-24 477.5,-24 483.5,-30 483.5,-36 483.5,-36 483.5,-484 483.5,-484 483.5,-490 477.5,-496 471.5,-496 471.5,-496 356.5,-496 356.5,-496 350.5,-496 344.5,-490 344.5,-484 344.5,-484 344.5,-36 344.5,-36 344.5,-30 350.5,-24 356.5,-24"/>
+<text text-anchor="start" x="362.8148" y="-477.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_inner_1</text>
 </g>
 <g id="clust4" class="cluster">
 <title>cluster__parallel_orthogonal_2</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="16,-16 16,-708 241,-708 241,-16 16,-16"/>
-<text text-anchor="start" x="93.4852" y="-689.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_2</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="103.5,-16 103.5,-640.2328 328.5,-640.2328 328.5,-16 103.5,-16"/>
+<text text-anchor="start" x="180.9852" y="-621.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_2</text>
 </g>
 <g id="clust5" class="cluster">
 <title>cluster__parallel_orthogonal_2_orthogonal_inner_2</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M36,-24C36,-24 151,-24 151,-24 157,-24 163,-30 163,-36 163,-36 163,-484 163,-484 163,-490 157,-496 151,-496 151,-496 36,-496 36,-496 30,-496 24,-490 24,-484 24,-484 24,-36 24,-36 24,-30 30,-24 36,-24"/>
-<text text-anchor="start" x="42.3148" y="-477.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_inner_2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M123.5,-24C123.5,-24 238.5,-24 238.5,-24 244.5,-24 250.5,-30 250.5,-36 250.5,-36 250.5,-484 250.5,-484 250.5,-490 244.5,-496 238.5,-496 238.5,-496 123.5,-496 123.5,-496 117.5,-496 111.5,-490 111.5,-484 111.5,-484 111.5,-36 111.5,-36 111.5,-30 117.5,-24 123.5,-24"/>
+<text text-anchor="start" x="129.8148" y="-477.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_inner_2</text>
 </g>
 <!-- __initial -->
 <g id="node1" class="node">
 <title>__initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="482" cy="-779.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="5.5" cy="-724.2328" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel -->
 <!-- __initial&#45;&gt;_parallel -->
 <g id="edge1" class="edge">
 <title>__initial&#45;&gt;_parallel</title>
-<path fill="none" stroke="#000000" d="M482,-773.9533C482,-769.7779 482,-763.5043 482,-756.0332"/>
-<polygon fill="#000000" stroke="#000000" points="485.5001,-755.9971 482,-745.9971 478.5001,-755.9972 485.5001,-755.9971"/>
-<text text-anchor="middle" x="483.3895" y="-757" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M6.4242,-718.7996C7.7067,-711.4049 10.159,-697.7707 12.721,-686.2328 16.3849,-669.7323 20.894,-651.6445 24.9309,-636.0748"/>
+<polygon fill="#000000" stroke="#000000" points="28.3565,-636.8092 27.5019,-626.2489 21.5845,-635.0373 28.3565,-636.8092"/>
+<text text-anchor="middle" x="14.8895" y="-689.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _next_to_parallel -->
 <g id="node2" class="node">
 <title>_next_to_parallel</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="607,-631 501,-631 501,-595 607,-595 607,-631"/>
-<text text-anchor="start" x="511.655" y="-609.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">next_to_parallel</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M513.3333,-596C513.3333,-596 594.6667,-596 594.6667,-596 600.3333,-596 606,-601.6667 606,-607.3333 606,-607.3333 606,-618.6667 606,-618.6667 606,-624.3333 600.3333,-630 594.6667,-630 594.6667,-630 513.3333,-630 513.3333,-630 507.6667,-630 502,-624.3333 502,-618.6667 502,-618.6667 502,-607.3333 502,-607.3333 502,-601.6667 507.6667,-596 513.3333,-596"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="162.5,-742.2328 56.5,-742.2328 56.5,-706.2328 162.5,-706.2328 162.5,-742.2328"/>
+<text text-anchor="start" x="67.155" y="-720.4328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">next_to_parallel</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M68.8333,-707.2328C68.8333,-707.2328 150.1667,-707.2328 150.1667,-707.2328 155.8333,-707.2328 161.5,-712.8995 161.5,-718.5661 161.5,-718.5661 161.5,-729.8995 161.5,-729.8995 161.5,-735.5661 155.8333,-741.2328 150.1667,-741.2328 150.1667,-741.2328 68.8333,-741.2328 68.8333,-741.2328 63.1667,-741.2328 57.5,-735.5661 57.5,-729.8995 57.5,-729.8995 57.5,-718.5661 57.5,-718.5661 57.5,-712.8995 63.1667,-707.2328 68.8333,-707.2328"/>
 </g>
 <!-- _parallel_history_1 -->
-<g id="node18" class="node">
+<g id="node4" class="node">
 <title>_parallel_history_1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="614.184,-567 497.816,-567 497.816,-531 614.184,-531 614.184,-567"/>
-<text text-anchor="middle" x="556" y="-545.4" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">_parallel_history_1</text>
+<ellipse fill="transparent" stroke="#000000" stroke-width="2" cx="76.5" cy="-596.7328" rx="18.9685" ry="18.9685"/>
+<text text-anchor="middle" x="76.5" y="-593.1328" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">H*</text>
 </g>
 <!-- _next_to_parallel&#45;&gt;_parallel_history_1 -->
 <g id="edge11" class="edge">
 <title>_next_to_parallel&#45;&gt;_parallel_history_1</title>
-<path fill="none" stroke="#000000" d="M554.5678,-594.8314C554.7352,-589.4728 554.9227,-583.4735 555.1054,-577.6262"/>
-<polygon fill="#000000" stroke="#000000" points="558.6097,-577.5408 555.4239,-567.4363 551.6131,-577.3221 558.6097,-577.5408"/>
-<text text-anchor="start" x="555" y="-578" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_history_1 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M110.3785,-705.8916C110.0897,-699.4636 109.0698,-692.3312 106.5,-686.2328 104.6654,-681.8791 101.7524,-682.3859 99.5,-678.2328 90.5881,-661.8006 84.8551,-641.5864 81.3416,-625.4007"/>
+<polygon fill="#000000" stroke="#000000" points="84.7395,-624.5434 79.3422,-615.4264 77.876,-625.9193 84.7395,-624.5434"/>
+<text text-anchor="start" x="109.5" y="-689.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_history_1 &#160;&#160;</text>
 </g>
 <!-- _parallel&#45;&gt;_next_to_parallel -->
 <g id="edge10" class="edge">
 <title>_parallel&#45;&gt;_next_to_parallel</title>
-<path fill="none" stroke="#000000" d="M489.9995,-658.7781C497.4575,-653.4436 509.1021,-645.1144 520.4254,-637.0152"/>
-<polygon fill="#000000" stroke="#000000" points="522.5688,-639.7853 528.6661,-631.1208 518.4964,-634.0918 522.5688,-639.7853"/>
-<text text-anchor="start" x="516" y="-642" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.exit &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M27.5049,-618.3924C20.8138,-640.5971 14.7774,-675.067 31.476,-698.2328 33.9709,-701.694 39.5535,-704.9562 46.6461,-707.9237"/>
+<polygon fill="#000000" stroke="#000000" points="45.7259,-711.3155 56.3188,-711.5176 48.1639,-704.7538 45.7259,-711.3155"/>
+<text text-anchor="start" x="31.5" y="-689.2328" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.exit &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_1 -->
 <!-- _parallel_orthogonal_1_initial -->
-<g id="node5" class="node">
+<g id="node6" class="node">
 <title>_parallel_orthogonal_1_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="364" cy="-664.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="451.5" cy="-596.7328" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_1_orthogonal_inner_1 -->
 <!-- _parallel_orthogonal_1_initial&#45;&gt;_parallel_orthogonal_1_orthogonal_inner_1 -->
 <g id="edge2" class="edge">
 <title>_parallel_orthogonal_1_initial&#45;&gt;_parallel_orthogonal_1_orthogonal_inner_1</title>
-<path fill="none" stroke="#000000" d="M364,-658.7843C364,-649.2811 364,-629.6302 364,-613 364,-613 364,-613 364,-513.5 364,-511.1116 364,-508.6707 364,-506.2049"/>
-<polygon fill="#000000" stroke="#000000" points="367.5001,-505.9997 364,-495.9997 360.5001,-505.9997 367.5001,-505.9997"/>
-<text text-anchor="middle" x="365.3895" y="-546" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M451.5,-591.0844C451.5,-583.9564 451.5,-571.3195 451.5,-560.5 451.5,-560.5 451.5,-560.5 451.5,-513.5 451.5,-511.1116 451.5,-508.6707 451.5,-506.2049"/>
+<polygon fill="#000000" stroke="#000000" points="455.0001,-505.9997 451.5,-495.9997 448.0001,-505.9997 455.0001,-505.9997"/>
+<text text-anchor="middle" x="452.8895" y="-534" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_1_outer_1 -->
-<g id="node6" class="node">
+<g id="node7" class="node">
 <title>_parallel_orthogonal_1_outer_1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="466,-365 404,-365 404,-329 466,-329 466,-365"/>
-<text text-anchor="start" x="414.6582" y="-343.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer_1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M416.3333,-330C416.3333,-330 453.6667,-330 453.6667,-330 459.3333,-330 465,-335.6667 465,-341.3333 465,-341.3333 465,-352.6667 465,-352.6667 465,-358.3333 459.3333,-364 453.6667,-364 453.6667,-364 416.3333,-364 416.3333,-364 410.6667,-364 405,-358.3333 405,-352.6667 405,-352.6667 405,-341.3333 405,-341.3333 405,-335.6667 410.6667,-330 416.3333,-330"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="553.5,-365 491.5,-365 491.5,-329 553.5,-329 553.5,-365"/>
+<text text-anchor="start" x="502.1582" y="-343.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer_1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M503.8333,-330C503.8333,-330 541.1667,-330 541.1667,-330 546.8333,-330 552.5,-335.6667 552.5,-341.3333 552.5,-341.3333 552.5,-352.6667 552.5,-352.6667 552.5,-358.3333 546.8333,-364 541.1667,-364 541.1667,-364 503.8333,-364 503.8333,-364 498.1667,-364 492.5,-358.3333 492.5,-352.6667 492.5,-352.6667 492.5,-341.3333 492.5,-341.3333 492.5,-335.6667 498.1667,-330 503.8333,-330"/>
 </g>
 <!-- _parallel_orthogonal_1_orthogonal_inner_1&#45;&gt;_parallel_orthogonal_1_outer_1 -->
 <g id="edge5" class="edge">
 <title>_parallel_orthogonal_1_orthogonal_inner_1&#45;&gt;_parallel_orthogonal_1_outer_1</title>
-<path fill="none" stroke="#000000" d="M396,-366.7017C397.9309,-365.8086 399.8618,-364.9154 401.7928,-364.0223"/>
-<polygon fill="#000000" stroke="#000000" points="396.117,-370.5042 403.7237,-363.1291 393.1781,-364.1509 396.117,-370.5042"/>
-<text text-anchor="start" x="364" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_outer_1 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M483.5,-366.7017C485.4309,-365.8086 487.3618,-364.9154 489.2928,-364.0223"/>
+<polygon fill="#000000" stroke="#000000" points="483.617,-370.5042 491.2237,-363.1291 480.6781,-364.1509 483.617,-370.5042"/>
+<text text-anchor="start" x="451.5" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_outer_1 &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_1_orthogonal_inner_1_initial -->
-<g id="node8" class="node">
+<g id="node9" class="node">
 <title>_parallel_orthogonal_1_orthogonal_inner_1_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="296" cy="-452.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="383.5" cy="-452.5" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_1_orthogonal_inner_1_state_1 -->
-<g id="node9" class="node">
+<g id="node10" class="node">
 <title>_parallel_orthogonal_1_orthogonal_inner_1_state_1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="326.5,-258 265.5,-258 265.5,-222 326.5,-222 326.5,-258"/>
-<text text-anchor="start" x="276.8236" y="-236.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M277.8333,-223C277.8333,-223 314.1667,-223 314.1667,-223 319.8333,-223 325.5,-228.6667 325.5,-234.3333 325.5,-234.3333 325.5,-245.6667 325.5,-245.6667 325.5,-251.3333 319.8333,-257 314.1667,-257 314.1667,-257 277.8333,-257 277.8333,-257 272.1667,-257 266.5,-251.3333 266.5,-245.6667 266.5,-245.6667 266.5,-234.3333 266.5,-234.3333 266.5,-228.6667 272.1667,-223 277.8333,-223"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="414,-258 353,-258 353,-222 414,-222 414,-258"/>
+<text text-anchor="start" x="364.3236" y="-236.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M365.3333,-223C365.3333,-223 401.6667,-223 401.6667,-223 407.3333,-223 413,-228.6667 413,-234.3333 413,-234.3333 413,-245.6667 413,-245.6667 413,-251.3333 407.3333,-257 401.6667,-257 401.6667,-257 365.3333,-257 365.3333,-257 359.6667,-257 354,-251.3333 354,-245.6667 354,-245.6667 354,-234.3333 354,-234.3333 354,-228.6667 359.6667,-223 365.3333,-223"/>
 </g>
 <!-- _parallel_orthogonal_1_orthogonal_inner_1_initial&#45;&gt;_parallel_orthogonal_1_orthogonal_inner_1_state_1 -->
 <g id="edge3" class="edge">
 <title>_parallel_orthogonal_1_orthogonal_inner_1_initial&#45;&gt;_parallel_orthogonal_1_orthogonal_inner_1_state_1</title>
-<path fill="none" stroke="#000000" d="M296,-446.8288C296,-442.1736 296,-435.4097 296,-429.5 296,-429.5 296,-429.5 296,-275.5 296,-273.1079 296,-270.6252 296,-268.1342"/>
-<polygon fill="#000000" stroke="#000000" points="299.5001,-268.0597 296,-258.0598 292.5001,-268.0598 299.5001,-268.0597"/>
-<text text-anchor="middle" x="297.3895" y="-344" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M383.5,-446.8288C383.5,-442.1736 383.5,-435.4097 383.5,-429.5 383.5,-429.5 383.5,-429.5 383.5,-275.5 383.5,-273.1079 383.5,-270.6252 383.5,-268.1342"/>
+<polygon fill="#000000" stroke="#000000" points="387.0001,-268.0597 383.5,-258.0598 380.0001,-268.0598 387.0001,-268.0597"/>
+<text text-anchor="middle" x="384.8895" y="-344" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_1_orthogonal_inner_1_state_2 -->
-<g id="node10" class="node">
+<g id="node11" class="node">
 <title>_parallel_orthogonal_1_orthogonal_inner_1_state_2</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="326.5,-68 265.5,-68 265.5,-32 326.5,-32 326.5,-68"/>
-<text text-anchor="start" x="276.8236" y="-46.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_2</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M277.8333,-33C277.8333,-33 314.1667,-33 314.1667,-33 319.8333,-33 325.5,-38.6667 325.5,-44.3333 325.5,-44.3333 325.5,-55.6667 325.5,-55.6667 325.5,-61.3333 319.8333,-67 314.1667,-67 314.1667,-67 277.8333,-67 277.8333,-67 272.1667,-67 266.5,-61.3333 266.5,-55.6667 266.5,-55.6667 266.5,-44.3333 266.5,-44.3333 266.5,-38.6667 272.1667,-33 277.8333,-33"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="414,-68 353,-68 353,-32 414,-32 414,-68"/>
+<text text-anchor="start" x="364.3236" y="-46.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M365.3333,-33C365.3333,-33 401.6667,-33 401.6667,-33 407.3333,-33 413,-38.6667 413,-44.3333 413,-44.3333 413,-55.6667 413,-55.6667 413,-61.3333 407.3333,-67 401.6667,-67 401.6667,-67 365.3333,-67 365.3333,-67 359.6667,-67 354,-61.3333 354,-55.6667 354,-55.6667 354,-44.3333 354,-44.3333 354,-38.6667 359.6667,-33 365.3333,-33"/>
 </g>
 <!-- _parallel_orthogonal_1_orthogonal_inner_1_state_1&#45;&gt;_parallel_orthogonal_1_orthogonal_inner_1_state_2 -->
 <g id="edge4" class="edge">
 <title>_parallel_orthogonal_1_orthogonal_inner_1_state_1&#45;&gt;_parallel_orthogonal_1_orthogonal_inner_1_state_2</title>
-<path fill="none" stroke="#000000" d="M289.555,-221.7962C288.1124,-216.3088 287,-210.2224 287,-204.5 287,-204.5 287,-204.5 287,-85.5 287,-83.0859 287.198,-80.607 287.5352,-78.1355"/>
-<polygon fill="#000000" stroke="#000000" points="290.9918,-78.7008 289.555,-68.2038 284.1322,-77.3057 290.9918,-78.7008"/>
-<text text-anchor="start" x="287" y="-142" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_state_2 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M377.055,-221.7962C375.6124,-216.3088 374.5,-210.2224 374.5,-204.5 374.5,-204.5 374.5,-204.5 374.5,-85.5 374.5,-83.0859 374.698,-80.607 375.0352,-78.1355"/>
+<polygon fill="#000000" stroke="#000000" points="378.4918,-78.7008 377.055,-68.2038 371.6322,-77.3057 378.4918,-78.7008"/>
+<text text-anchor="start" x="374.5" y="-142" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_state_2 &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_2 -->
 <!-- _parallel_orthogonal_2_initial -->
-<g id="node12" class="node">
+<g id="node13" class="node">
 <title>_parallel_orthogonal_2_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="131" cy="-664.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="218.5" cy="-596.7328" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_2_orthogonal_inner_2 -->
 <!-- _parallel_orthogonal_2_initial&#45;&gt;_parallel_orthogonal_2_orthogonal_inner_2 -->
 <g id="edge6" class="edge">
 <title>_parallel_orthogonal_2_initial&#45;&gt;_parallel_orthogonal_2_orthogonal_inner_2</title>
-<path fill="none" stroke="#000000" d="M131,-658.7843C131,-649.2811 131,-629.6302 131,-613 131,-613 131,-613 131,-513.5 131,-511.1116 131,-508.6707 131,-506.2049"/>
-<polygon fill="#000000" stroke="#000000" points="134.5001,-505.9997 131,-495.9997 127.5001,-505.9997 134.5001,-505.9997"/>
-<text text-anchor="middle" x="132.3895" y="-546" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M218.5,-591.0844C218.5,-583.9564 218.5,-571.3195 218.5,-560.5 218.5,-560.5 218.5,-560.5 218.5,-513.5 218.5,-511.1116 218.5,-508.6707 218.5,-506.2049"/>
+<polygon fill="#000000" stroke="#000000" points="222.0001,-505.9997 218.5,-495.9997 215.0001,-505.9997 222.0001,-505.9997"/>
+<text text-anchor="middle" x="219.8895" y="-534" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_2_outer_2 -->
-<g id="node13" class="node">
+<g id="node14" class="node">
 <title>_parallel_orthogonal_2_outer_2</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="233,-365 171,-365 171,-329 233,-329 233,-365"/>
-<text text-anchor="start" x="181.6582" y="-343.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer_2</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M183.3333,-330C183.3333,-330 220.6667,-330 220.6667,-330 226.3333,-330 232,-335.6667 232,-341.3333 232,-341.3333 232,-352.6667 232,-352.6667 232,-358.3333 226.3333,-364 220.6667,-364 220.6667,-364 183.3333,-364 183.3333,-364 177.6667,-364 172,-358.3333 172,-352.6667 172,-352.6667 172,-341.3333 172,-341.3333 172,-335.6667 177.6667,-330 183.3333,-330"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="320.5,-365 258.5,-365 258.5,-329 320.5,-329 320.5,-365"/>
+<text text-anchor="start" x="269.1582" y="-343.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer_2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M270.8333,-330C270.8333,-330 308.1667,-330 308.1667,-330 313.8333,-330 319.5,-335.6667 319.5,-341.3333 319.5,-341.3333 319.5,-352.6667 319.5,-352.6667 319.5,-358.3333 313.8333,-364 308.1667,-364 308.1667,-364 270.8333,-364 270.8333,-364 265.1667,-364 259.5,-358.3333 259.5,-352.6667 259.5,-352.6667 259.5,-341.3333 259.5,-341.3333 259.5,-335.6667 265.1667,-330 270.8333,-330"/>
 </g>
 <!-- _parallel_orthogonal_2_orthogonal_inner_2&#45;&gt;_parallel_orthogonal_2_outer_2 -->
 <g id="edge9" class="edge">
 <title>_parallel_orthogonal_2_orthogonal_inner_2&#45;&gt;_parallel_orthogonal_2_outer_2</title>
-<path fill="none" stroke="#000000" d="M163,-366.7017C164.9309,-365.8086 166.8618,-364.9154 168.7928,-364.0223"/>
-<polygon fill="#000000" stroke="#000000" points="163.117,-370.5042 170.7237,-363.1291 160.1781,-364.1509 163.117,-370.5042"/>
-<text text-anchor="start" x="131" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_outer_2 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M250.5,-366.7017C252.4309,-365.8086 254.3618,-364.9154 256.2928,-364.0223"/>
+<polygon fill="#000000" stroke="#000000" points="250.617,-370.5042 258.2237,-363.1291 247.6781,-364.1509 250.617,-370.5042"/>
+<text text-anchor="start" x="218.5" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_outer_2 &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_2_orthogonal_inner_2_initial -->
-<g id="node15" class="node">
+<g id="node16" class="node">
 <title>_parallel_orthogonal_2_orthogonal_inner_2_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="63" cy="-452.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="150.5" cy="-452.5" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_2_orthogonal_inner_2_state_3 -->
-<g id="node16" class="node">
+<g id="node17" class="node">
 <title>_parallel_orthogonal_2_orthogonal_inner_2_state_3</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="93.5,-258 32.5,-258 32.5,-222 93.5,-222 93.5,-258"/>
-<text text-anchor="start" x="43.8236" y="-236.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_3</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M44.8333,-223C44.8333,-223 81.1667,-223 81.1667,-223 86.8333,-223 92.5,-228.6667 92.5,-234.3333 92.5,-234.3333 92.5,-245.6667 92.5,-245.6667 92.5,-251.3333 86.8333,-257 81.1667,-257 81.1667,-257 44.8333,-257 44.8333,-257 39.1667,-257 33.5,-251.3333 33.5,-245.6667 33.5,-245.6667 33.5,-234.3333 33.5,-234.3333 33.5,-228.6667 39.1667,-223 44.8333,-223"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="181,-258 120,-258 120,-222 181,-222 181,-258"/>
+<text text-anchor="start" x="131.3236" y="-236.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_3</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M132.3333,-223C132.3333,-223 168.6667,-223 168.6667,-223 174.3333,-223 180,-228.6667 180,-234.3333 180,-234.3333 180,-245.6667 180,-245.6667 180,-251.3333 174.3333,-257 168.6667,-257 168.6667,-257 132.3333,-257 132.3333,-257 126.6667,-257 121,-251.3333 121,-245.6667 121,-245.6667 121,-234.3333 121,-234.3333 121,-228.6667 126.6667,-223 132.3333,-223"/>
 </g>
 <!-- _parallel_orthogonal_2_orthogonal_inner_2_initial&#45;&gt;_parallel_orthogonal_2_orthogonal_inner_2_state_3 -->
 <g id="edge7" class="edge">
 <title>_parallel_orthogonal_2_orthogonal_inner_2_initial&#45;&gt;_parallel_orthogonal_2_orthogonal_inner_2_state_3</title>
-<path fill="none" stroke="#000000" d="M63,-446.8288C63,-442.1736 63,-435.4097 63,-429.5 63,-429.5 63,-429.5 63,-275.5 63,-273.1079 63,-270.6252 63,-268.1342"/>
-<polygon fill="#000000" stroke="#000000" points="66.5001,-268.0597 63,-258.0598 59.5001,-268.0598 66.5001,-268.0597"/>
-<text text-anchor="middle" x="64.3895" y="-344" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M150.5,-446.8288C150.5,-442.1736 150.5,-435.4097 150.5,-429.5 150.5,-429.5 150.5,-429.5 150.5,-275.5 150.5,-273.1079 150.5,-270.6252 150.5,-268.1342"/>
+<polygon fill="#000000" stroke="#000000" points="154.0001,-268.0597 150.5,-258.0598 147.0001,-268.0598 154.0001,-268.0597"/>
+<text text-anchor="middle" x="151.8895" y="-344" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_2_orthogonal_inner_2_state_4 -->
-<g id="node17" class="node">
+<g id="node18" class="node">
 <title>_parallel_orthogonal_2_orthogonal_inner_2_state_4</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="93.5,-68 32.5,-68 32.5,-32 93.5,-32 93.5,-68"/>
-<text text-anchor="start" x="43.8236" y="-46.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_4</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M44.8333,-33C44.8333,-33 81.1667,-33 81.1667,-33 86.8333,-33 92.5,-38.6667 92.5,-44.3333 92.5,-44.3333 92.5,-55.6667 92.5,-55.6667 92.5,-61.3333 86.8333,-67 81.1667,-67 81.1667,-67 44.8333,-67 44.8333,-67 39.1667,-67 33.5,-61.3333 33.5,-55.6667 33.5,-55.6667 33.5,-44.3333 33.5,-44.3333 33.5,-38.6667 39.1667,-33 44.8333,-33"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="181,-68 120,-68 120,-32 181,-32 181,-68"/>
+<text text-anchor="start" x="131.3236" y="-46.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_4</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M132.3333,-33C132.3333,-33 168.6667,-33 168.6667,-33 174.3333,-33 180,-38.6667 180,-44.3333 180,-44.3333 180,-55.6667 180,-55.6667 180,-61.3333 174.3333,-67 168.6667,-67 168.6667,-67 132.3333,-67 132.3333,-67 126.6667,-67 121,-61.3333 121,-55.6667 121,-55.6667 121,-44.3333 121,-44.3333 121,-38.6667 126.6667,-33 132.3333,-33"/>
 </g>
 <!-- _parallel_orthogonal_2_orthogonal_inner_2_state_3&#45;&gt;_parallel_orthogonal_2_orthogonal_inner_2_state_4 -->
 <g id="edge8" class="edge">
 <title>_parallel_orthogonal_2_orthogonal_inner_2_state_3&#45;&gt;_parallel_orthogonal_2_orthogonal_inner_2_state_4</title>
-<path fill="none" stroke="#000000" d="M56.555,-221.7962C55.1124,-216.3088 54,-210.2224 54,-204.5 54,-204.5 54,-204.5 54,-85.5 54,-83.0859 54.198,-80.607 54.5352,-78.1355"/>
-<polygon fill="#000000" stroke="#000000" points="57.9918,-78.7008 56.555,-68.2038 51.1322,-77.3057 57.9918,-78.7008"/>
-<text text-anchor="start" x="54" y="-142" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_state_4 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M144.055,-221.7962C142.6124,-216.3088 141.5,-210.2224 141.5,-204.5 141.5,-204.5 141.5,-204.5 141.5,-85.5 141.5,-83.0859 141.698,-80.607 142.0352,-78.1355"/>
+<polygon fill="#000000" stroke="#000000" points="145.4918,-78.7008 144.055,-68.2038 138.6322,-77.3057 145.4918,-78.7008"/>
+<text text-anchor="start" x="141.5" y="-142" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_state_4 &#160;&#160;</text>
 </g>
 </g>
 </svg>

+ 86 - 86
test/test_files/semantics/original_semantics/parallel_history_3_TestClass.svg

@@ -4,197 +4,197 @@
 <!-- Generated by graphviz version 2.40.1 (20161225.0304)
  -->
 <!-- Title: state transitions Pages: 1 -->
-<svg width="672pt" height="793pt"
- viewBox="0.00 0.00 671.93 793.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 789)">
+<svg width="584pt" height="750pt"
+ viewBox="0.00 0.00 583.50 749.50" 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 745.5)">
 <title>state transitions</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-789 667.927,-789 667.927,4 -4,4"/>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-745.5 579.5,-745.5 579.5,4 -4,4"/>
 <g id="clust1" class="cluster">
 <title>cluster__parallel</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M20,-8C20,-8 478,-8 478,-8 484,-8 490,-14 490,-20 490,-20 490,-734 490,-734 490,-740 484,-746 478,-746 478,-746 20,-746 20,-746 14,-746 8,-740 8,-734 8,-734 8,-20 8,-20 8,-14 14,-8 20,-8"/>
-<text text-anchor="start" x="229.6668" y="-727.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">parallel</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M39.5,-8C39.5,-8 555.5,-8 555.5,-8 561.5,-8 567.5,-14 567.5,-20 567.5,-20 567.5,-665.5 567.5,-665.5 567.5,-671.5 561.5,-677.5 555.5,-677.5 555.5,-677.5 39.5,-677.5 39.5,-677.5 33.5,-677.5 27.5,-671.5 27.5,-665.5 27.5,-665.5 27.5,-20 27.5,-20 27.5,-14 33.5,-8 39.5,-8"/>
+<text text-anchor="start" x="278.1668" y="-658.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">parallel</text>
 </g>
 <g id="clust2" class="cluster">
 <title>cluster__parallel_orthogonal_1</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="249,-16 249,-708 474,-708 474,-16 249,-16"/>
-<text text-anchor="start" x="326.4852" y="-689.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_1</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="334.5,-16 334.5,-639.5 559.5,-639.5 559.5,-16 334.5,-16"/>
+<text text-anchor="start" x="411.9852" y="-620.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_1</text>
 </g>
 <g id="clust3" class="cluster">
 <title>cluster__parallel_orthogonal_1_orthogonal_inner_1</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M269,-24C269,-24 384,-24 384,-24 390,-24 396,-30 396,-36 396,-36 396,-484 396,-484 396,-490 390,-496 384,-496 384,-496 269,-496 269,-496 263,-496 257,-490 257,-484 257,-484 257,-36 257,-36 257,-30 263,-24 269,-24"/>
-<text text-anchor="start" x="275.3148" y="-477.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_inner_1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M354.5,-24C354.5,-24 469.5,-24 469.5,-24 475.5,-24 481.5,-30 481.5,-36 481.5,-36 481.5,-484 481.5,-484 481.5,-490 475.5,-496 469.5,-496 469.5,-496 354.5,-496 354.5,-496 348.5,-496 342.5,-490 342.5,-484 342.5,-484 342.5,-36 342.5,-36 342.5,-30 348.5,-24 354.5,-24"/>
+<text text-anchor="start" x="360.8148" y="-477.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_inner_1</text>
 </g>
 <g id="clust4" class="cluster">
 <title>cluster__parallel_orthogonal_2</title>
-<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="16,-16 16,-708 241,-708 241,-16 16,-16"/>
-<text text-anchor="start" x="93.4852" y="-689.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_2</text>
+<polygon fill="none" stroke="#000000" stroke-dasharray="5,2" points="101.5,-16 101.5,-639.5 326.5,-639.5 326.5,-16 101.5,-16"/>
+<text text-anchor="start" x="178.9852" y="-620.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_2</text>
 </g>
 <g id="clust5" class="cluster">
 <title>cluster__parallel_orthogonal_2_orthogonal_inner_2</title>
-<path fill="none" stroke="#000000" stroke-width="2" d="M36,-24C36,-24 151,-24 151,-24 157,-24 163,-30 163,-36 163,-36 163,-484 163,-484 163,-490 157,-496 151,-496 151,-496 36,-496 36,-496 30,-496 24,-490 24,-484 24,-484 24,-36 24,-36 24,-30 30,-24 36,-24"/>
-<text text-anchor="start" x="42.3148" y="-477.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_inner_2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M121.5,-24C121.5,-24 236.5,-24 236.5,-24 242.5,-24 248.5,-30 248.5,-36 248.5,-36 248.5,-484 248.5,-484 248.5,-490 242.5,-496 236.5,-496 236.5,-496 121.5,-496 121.5,-496 115.5,-496 109.5,-490 109.5,-484 109.5,-484 109.5,-36 109.5,-36 109.5,-30 115.5,-24 121.5,-24"/>
+<text text-anchor="start" x="127.8148" y="-477.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">orthogonal_inner_2</text>
 </g>
 <!-- __initial -->
 <g id="node1" class="node">
 <title>__initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="482" cy="-779.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="5.5" cy="-723.5" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel -->
 <!-- __initial&#45;&gt;_parallel -->
 <g id="edge1" class="edge">
 <title>__initial&#45;&gt;_parallel</title>
-<path fill="none" stroke="#000000" d="M482,-773.9533C482,-769.7779 482,-763.5043 482,-756.0332"/>
-<polygon fill="#000000" stroke="#000000" points="485.5001,-755.9971 482,-745.9971 478.5001,-755.9972 485.5001,-755.9971"/>
-<text text-anchor="middle" x="483.3895" y="-757" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M6.4242,-718.0668C7.7067,-710.6721 10.159,-697.0379 12.721,-685.5 16.3849,-668.9995 20.894,-650.9117 24.9309,-635.342"/>
+<polygon fill="#000000" stroke="#000000" points="28.3565,-636.0764 27.5019,-625.5161 21.5845,-634.3045 28.3565,-636.0764"/>
+<text text-anchor="middle" x="14.8895" y="-688.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _next_to_parallel -->
 <g id="node2" class="node">
 <title>_next_to_parallel</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="607,-631 501,-631 501,-595 607,-595 607,-631"/>
-<text text-anchor="start" x="511.655" y="-609.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">next_to_parallel</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M513.3333,-596C513.3333,-596 594.6667,-596 594.6667,-596 600.3333,-596 606,-601.6667 606,-607.3333 606,-607.3333 606,-618.6667 606,-618.6667 606,-624.3333 600.3333,-630 594.6667,-630 594.6667,-630 513.3333,-630 513.3333,-630 507.6667,-630 502,-624.3333 502,-618.6667 502,-618.6667 502,-607.3333 502,-607.3333 502,-601.6667 507.6667,-596 513.3333,-596"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="162.5,-741.5 56.5,-741.5 56.5,-705.5 162.5,-705.5 162.5,-741.5"/>
+<text text-anchor="start" x="67.155" y="-719.7" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">next_to_parallel</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M68.8333,-706.5C68.8333,-706.5 150.1667,-706.5 150.1667,-706.5 155.8333,-706.5 161.5,-712.1667 161.5,-717.8333 161.5,-717.8333 161.5,-729.1667 161.5,-729.1667 161.5,-734.8333 155.8333,-740.5 150.1667,-740.5 150.1667,-740.5 68.8333,-740.5 68.8333,-740.5 63.1667,-740.5 57.5,-734.8333 57.5,-729.1667 57.5,-729.1667 57.5,-717.8333 57.5,-717.8333 57.5,-712.1667 63.1667,-706.5 68.8333,-706.5"/>
 </g>
 <!-- _parallel_history_1 -->
-<g id="node18" class="node">
+<g id="node4" class="node">
 <title>_parallel_history_1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="614.184,-567 497.816,-567 497.816,-531 614.184,-531 614.184,-567"/>
-<text text-anchor="middle" x="556" y="-545.4" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">_parallel_history_1</text>
+<ellipse fill="transparent" stroke="#000000" stroke-width="2" cx="75.5" cy="-596" rx="18" ry="18"/>
+<text text-anchor="middle" x="75.5" y="-592.4" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">H</text>
 </g>
 <!-- _next_to_parallel&#45;&gt;_parallel_history_1 -->
 <g id="edge11" class="edge">
 <title>_next_to_parallel&#45;&gt;_parallel_history_1</title>
-<path fill="none" stroke="#000000" d="M554.5678,-594.8314C554.7352,-589.4728 554.9227,-583.4735 555.1054,-577.6262"/>
-<polygon fill="#000000" stroke="#000000" points="558.6097,-577.5408 555.4239,-567.4363 551.6131,-577.3221 558.6097,-577.5408"/>
-<text text-anchor="start" x="555" y="-578" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_history_1 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M110.8122,-705.3522C110.5923,-698.8043 109.5056,-691.544 106.5,-685.5 104.117,-680.708 100.3151,-682.0516 97.5,-677.5 87.5083,-661.345 81.9947,-640.6575 78.986,-624.168"/>
+<polygon fill="#000000" stroke="#000000" points="82.3981,-623.3422 77.3487,-614.0281 75.4876,-624.4582 82.3981,-623.3422"/>
+<text text-anchor="start" x="109.5" y="-688.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_history_1 &#160;&#160;</text>
 </g>
 <!-- _parallel&#45;&gt;_next_to_parallel -->
 <g id="edge10" class="edge">
 <title>_parallel&#45;&gt;_next_to_parallel</title>
-<path fill="none" stroke="#000000" d="M489.9995,-658.7781C497.4575,-653.4436 509.1021,-645.1144 520.4254,-637.0152"/>
-<polygon fill="#000000" stroke="#000000" points="522.5688,-639.7853 528.6661,-631.1208 518.4964,-634.0918 522.5688,-639.7853"/>
-<text text-anchor="start" x="516" y="-642" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.exit &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M27.5049,-617.6596C20.8138,-639.8643 14.7774,-674.3342 31.476,-697.5 33.9709,-700.9612 39.5535,-704.2234 46.6461,-707.1909"/>
+<polygon fill="#000000" stroke="#000000" points="45.7259,-710.5827 56.3188,-710.7848 48.1639,-704.021 45.7259,-710.5827"/>
+<text text-anchor="start" x="31.5" y="-688.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.exit &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_1 -->
 <!-- _parallel_orthogonal_1_initial -->
-<g id="node5" class="node">
+<g id="node6" class="node">
 <title>_parallel_orthogonal_1_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="364" cy="-664.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="449.5" cy="-596" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_1_orthogonal_inner_1 -->
 <!-- _parallel_orthogonal_1_initial&#45;&gt;_parallel_orthogonal_1_orthogonal_inner_1 -->
 <g id="edge2" class="edge">
 <title>_parallel_orthogonal_1_initial&#45;&gt;_parallel_orthogonal_1_orthogonal_inner_1</title>
-<path fill="none" stroke="#000000" d="M364,-658.7843C364,-649.2811 364,-629.6302 364,-613 364,-613 364,-613 364,-513.5 364,-511.1116 364,-508.6707 364,-506.2049"/>
-<polygon fill="#000000" stroke="#000000" points="367.5001,-505.9997 364,-495.9997 360.5001,-505.9997 367.5001,-505.9997"/>
-<text text-anchor="middle" x="365.3895" y="-546" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M449.5,-590.4659C449.5,-583.482 449.5,-571.1007 449.5,-560.5 449.5,-560.5 449.5,-560.5 449.5,-513.5 449.5,-511.1116 449.5,-508.6707 449.5,-506.2049"/>
+<polygon fill="#000000" stroke="#000000" points="453.0001,-505.9997 449.5,-495.9997 446.0001,-505.9997 453.0001,-505.9997"/>
+<text text-anchor="middle" x="450.8895" y="-534" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_1_outer_1 -->
-<g id="node6" class="node">
+<g id="node7" class="node">
 <title>_parallel_orthogonal_1_outer_1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="466,-365 404,-365 404,-329 466,-329 466,-365"/>
-<text text-anchor="start" x="414.6582" y="-343.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer_1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M416.3333,-330C416.3333,-330 453.6667,-330 453.6667,-330 459.3333,-330 465,-335.6667 465,-341.3333 465,-341.3333 465,-352.6667 465,-352.6667 465,-358.3333 459.3333,-364 453.6667,-364 453.6667,-364 416.3333,-364 416.3333,-364 410.6667,-364 405,-358.3333 405,-352.6667 405,-352.6667 405,-341.3333 405,-341.3333 405,-335.6667 410.6667,-330 416.3333,-330"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="551.5,-365 489.5,-365 489.5,-329 551.5,-329 551.5,-365"/>
+<text text-anchor="start" x="500.1582" y="-343.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer_1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M501.8333,-330C501.8333,-330 539.1667,-330 539.1667,-330 544.8333,-330 550.5,-335.6667 550.5,-341.3333 550.5,-341.3333 550.5,-352.6667 550.5,-352.6667 550.5,-358.3333 544.8333,-364 539.1667,-364 539.1667,-364 501.8333,-364 501.8333,-364 496.1667,-364 490.5,-358.3333 490.5,-352.6667 490.5,-352.6667 490.5,-341.3333 490.5,-341.3333 490.5,-335.6667 496.1667,-330 501.8333,-330"/>
 </g>
 <!-- _parallel_orthogonal_1_orthogonal_inner_1&#45;&gt;_parallel_orthogonal_1_outer_1 -->
 <g id="edge5" class="edge">
 <title>_parallel_orthogonal_1_orthogonal_inner_1&#45;&gt;_parallel_orthogonal_1_outer_1</title>
-<path fill="none" stroke="#000000" d="M396,-366.7017C397.9309,-365.8086 399.8618,-364.9154 401.7928,-364.0223"/>
-<polygon fill="#000000" stroke="#000000" points="396.117,-370.5042 403.7237,-363.1291 393.1781,-364.1509 396.117,-370.5042"/>
-<text text-anchor="start" x="364" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_outer_1 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M481.5,-366.7017C483.4309,-365.8086 485.3618,-364.9154 487.2928,-364.0223"/>
+<polygon fill="#000000" stroke="#000000" points="481.617,-370.5042 489.2237,-363.1291 478.6781,-364.1509 481.617,-370.5042"/>
+<text text-anchor="start" x="449.5" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_outer_1 &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_1_orthogonal_inner_1_initial -->
-<g id="node8" class="node">
+<g id="node9" class="node">
 <title>_parallel_orthogonal_1_orthogonal_inner_1_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="296" cy="-452.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="381.5" cy="-452.5" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_1_orthogonal_inner_1_state_1 -->
-<g id="node9" class="node">
+<g id="node10" class="node">
 <title>_parallel_orthogonal_1_orthogonal_inner_1_state_1</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="326.5,-258 265.5,-258 265.5,-222 326.5,-222 326.5,-258"/>
-<text text-anchor="start" x="276.8236" y="-236.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_1</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M277.8333,-223C277.8333,-223 314.1667,-223 314.1667,-223 319.8333,-223 325.5,-228.6667 325.5,-234.3333 325.5,-234.3333 325.5,-245.6667 325.5,-245.6667 325.5,-251.3333 319.8333,-257 314.1667,-257 314.1667,-257 277.8333,-257 277.8333,-257 272.1667,-257 266.5,-251.3333 266.5,-245.6667 266.5,-245.6667 266.5,-234.3333 266.5,-234.3333 266.5,-228.6667 272.1667,-223 277.8333,-223"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="412,-258 351,-258 351,-222 412,-222 412,-258"/>
+<text text-anchor="start" x="362.3236" y="-236.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_1</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M363.3333,-223C363.3333,-223 399.6667,-223 399.6667,-223 405.3333,-223 411,-228.6667 411,-234.3333 411,-234.3333 411,-245.6667 411,-245.6667 411,-251.3333 405.3333,-257 399.6667,-257 399.6667,-257 363.3333,-257 363.3333,-257 357.6667,-257 352,-251.3333 352,-245.6667 352,-245.6667 352,-234.3333 352,-234.3333 352,-228.6667 357.6667,-223 363.3333,-223"/>
 </g>
 <!-- _parallel_orthogonal_1_orthogonal_inner_1_initial&#45;&gt;_parallel_orthogonal_1_orthogonal_inner_1_state_1 -->
 <g id="edge3" class="edge">
 <title>_parallel_orthogonal_1_orthogonal_inner_1_initial&#45;&gt;_parallel_orthogonal_1_orthogonal_inner_1_state_1</title>
-<path fill="none" stroke="#000000" d="M296,-446.8288C296,-442.1736 296,-435.4097 296,-429.5 296,-429.5 296,-429.5 296,-275.5 296,-273.1079 296,-270.6252 296,-268.1342"/>
-<polygon fill="#000000" stroke="#000000" points="299.5001,-268.0597 296,-258.0598 292.5001,-268.0598 299.5001,-268.0597"/>
-<text text-anchor="middle" x="297.3895" y="-344" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M381.5,-446.8288C381.5,-442.1736 381.5,-435.4097 381.5,-429.5 381.5,-429.5 381.5,-429.5 381.5,-275.5 381.5,-273.1079 381.5,-270.6252 381.5,-268.1342"/>
+<polygon fill="#000000" stroke="#000000" points="385.0001,-268.0597 381.5,-258.0598 378.0001,-268.0598 385.0001,-268.0597"/>
+<text text-anchor="middle" x="382.8895" y="-344" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_1_orthogonal_inner_1_state_2 -->
-<g id="node10" class="node">
+<g id="node11" class="node">
 <title>_parallel_orthogonal_1_orthogonal_inner_1_state_2</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="326.5,-68 265.5,-68 265.5,-32 326.5,-32 326.5,-68"/>
-<text text-anchor="start" x="276.8236" y="-46.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_2</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M277.8333,-33C277.8333,-33 314.1667,-33 314.1667,-33 319.8333,-33 325.5,-38.6667 325.5,-44.3333 325.5,-44.3333 325.5,-55.6667 325.5,-55.6667 325.5,-61.3333 319.8333,-67 314.1667,-67 314.1667,-67 277.8333,-67 277.8333,-67 272.1667,-67 266.5,-61.3333 266.5,-55.6667 266.5,-55.6667 266.5,-44.3333 266.5,-44.3333 266.5,-38.6667 272.1667,-33 277.8333,-33"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="412,-68 351,-68 351,-32 412,-32 412,-68"/>
+<text text-anchor="start" x="362.3236" y="-46.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M363.3333,-33C363.3333,-33 399.6667,-33 399.6667,-33 405.3333,-33 411,-38.6667 411,-44.3333 411,-44.3333 411,-55.6667 411,-55.6667 411,-61.3333 405.3333,-67 399.6667,-67 399.6667,-67 363.3333,-67 363.3333,-67 357.6667,-67 352,-61.3333 352,-55.6667 352,-55.6667 352,-44.3333 352,-44.3333 352,-38.6667 357.6667,-33 363.3333,-33"/>
 </g>
 <!-- _parallel_orthogonal_1_orthogonal_inner_1_state_1&#45;&gt;_parallel_orthogonal_1_orthogonal_inner_1_state_2 -->
 <g id="edge4" class="edge">
 <title>_parallel_orthogonal_1_orthogonal_inner_1_state_1&#45;&gt;_parallel_orthogonal_1_orthogonal_inner_1_state_2</title>
-<path fill="none" stroke="#000000" d="M289.555,-221.7962C288.1124,-216.3088 287,-210.2224 287,-204.5 287,-204.5 287,-204.5 287,-85.5 287,-83.0859 287.198,-80.607 287.5352,-78.1355"/>
-<polygon fill="#000000" stroke="#000000" points="290.9918,-78.7008 289.555,-68.2038 284.1322,-77.3057 290.9918,-78.7008"/>
-<text text-anchor="start" x="287" y="-142" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_state_2 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M375.055,-221.7962C373.6124,-216.3088 372.5,-210.2224 372.5,-204.5 372.5,-204.5 372.5,-204.5 372.5,-85.5 372.5,-83.0859 372.698,-80.607 373.0352,-78.1355"/>
+<polygon fill="#000000" stroke="#000000" points="376.4918,-78.7008 375.055,-68.2038 369.6322,-77.3057 376.4918,-78.7008"/>
+<text text-anchor="start" x="372.5" y="-142" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_state_2 &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_2 -->
 <!-- _parallel_orthogonal_2_initial -->
-<g id="node12" class="node">
+<g id="node13" class="node">
 <title>_parallel_orthogonal_2_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="131" cy="-664.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="216.5" cy="-596" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_2_orthogonal_inner_2 -->
 <!-- _parallel_orthogonal_2_initial&#45;&gt;_parallel_orthogonal_2_orthogonal_inner_2 -->
 <g id="edge6" class="edge">
 <title>_parallel_orthogonal_2_initial&#45;&gt;_parallel_orthogonal_2_orthogonal_inner_2</title>
-<path fill="none" stroke="#000000" d="M131,-658.7843C131,-649.2811 131,-629.6302 131,-613 131,-613 131,-613 131,-513.5 131,-511.1116 131,-508.6707 131,-506.2049"/>
-<polygon fill="#000000" stroke="#000000" points="134.5001,-505.9997 131,-495.9997 127.5001,-505.9997 134.5001,-505.9997"/>
-<text text-anchor="middle" x="132.3895" y="-546" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M216.5,-590.4659C216.5,-583.482 216.5,-571.1007 216.5,-560.5 216.5,-560.5 216.5,-560.5 216.5,-513.5 216.5,-511.1116 216.5,-508.6707 216.5,-506.2049"/>
+<polygon fill="#000000" stroke="#000000" points="220.0001,-505.9997 216.5,-495.9997 213.0001,-505.9997 220.0001,-505.9997"/>
+<text text-anchor="middle" x="217.8895" y="-534" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_2_outer_2 -->
-<g id="node13" class="node">
+<g id="node14" class="node">
 <title>_parallel_orthogonal_2_outer_2</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="233,-365 171,-365 171,-329 233,-329 233,-365"/>
-<text text-anchor="start" x="181.6582" y="-343.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer_2</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M183.3333,-330C183.3333,-330 220.6667,-330 220.6667,-330 226.3333,-330 232,-335.6667 232,-341.3333 232,-341.3333 232,-352.6667 232,-352.6667 232,-358.3333 226.3333,-364 220.6667,-364 220.6667,-364 183.3333,-364 183.3333,-364 177.6667,-364 172,-358.3333 172,-352.6667 172,-352.6667 172,-341.3333 172,-341.3333 172,-335.6667 177.6667,-330 183.3333,-330"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="318.5,-365 256.5,-365 256.5,-329 318.5,-329 318.5,-365"/>
+<text text-anchor="start" x="267.1582" y="-343.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">outer_2</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M268.8333,-330C268.8333,-330 306.1667,-330 306.1667,-330 311.8333,-330 317.5,-335.6667 317.5,-341.3333 317.5,-341.3333 317.5,-352.6667 317.5,-352.6667 317.5,-358.3333 311.8333,-364 306.1667,-364 306.1667,-364 268.8333,-364 268.8333,-364 263.1667,-364 257.5,-358.3333 257.5,-352.6667 257.5,-352.6667 257.5,-341.3333 257.5,-341.3333 257.5,-335.6667 263.1667,-330 268.8333,-330"/>
 </g>
 <!-- _parallel_orthogonal_2_orthogonal_inner_2&#45;&gt;_parallel_orthogonal_2_outer_2 -->
 <g id="edge9" class="edge">
 <title>_parallel_orthogonal_2_orthogonal_inner_2&#45;&gt;_parallel_orthogonal_2_outer_2</title>
-<path fill="none" stroke="#000000" d="M163,-366.7017C164.9309,-365.8086 166.8618,-364.9154 168.7928,-364.0223"/>
-<polygon fill="#000000" stroke="#000000" points="163.117,-370.5042 170.7237,-363.1291 160.1781,-364.1509 163.117,-370.5042"/>
-<text text-anchor="start" x="131" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_outer_2 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M248.5,-366.7017C250.4309,-365.8086 252.3618,-364.9154 254.2928,-364.0223"/>
+<polygon fill="#000000" stroke="#000000" points="248.617,-370.5042 256.2237,-363.1291 245.6781,-364.1509 248.617,-370.5042"/>
+<text text-anchor="start" x="216.5" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_outer_2 &#160;&#160;</text>
 </g>
 <!-- _parallel_orthogonal_2_orthogonal_inner_2_initial -->
-<g id="node15" class="node">
+<g id="node16" class="node">
 <title>_parallel_orthogonal_2_orthogonal_inner_2_initial</title>
-<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="63" cy="-452.5" rx="5.5" ry="5.5"/>
+<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="148.5" cy="-452.5" rx="5.5" ry="5.5"/>
 </g>
 <!-- _parallel_orthogonal_2_orthogonal_inner_2_state_3 -->
-<g id="node16" class="node">
+<g id="node17" class="node">
 <title>_parallel_orthogonal_2_orthogonal_inner_2_state_3</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="93.5,-258 32.5,-258 32.5,-222 93.5,-222 93.5,-258"/>
-<text text-anchor="start" x="43.8236" y="-236.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_3</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M44.8333,-223C44.8333,-223 81.1667,-223 81.1667,-223 86.8333,-223 92.5,-228.6667 92.5,-234.3333 92.5,-234.3333 92.5,-245.6667 92.5,-245.6667 92.5,-251.3333 86.8333,-257 81.1667,-257 81.1667,-257 44.8333,-257 44.8333,-257 39.1667,-257 33.5,-251.3333 33.5,-245.6667 33.5,-245.6667 33.5,-234.3333 33.5,-234.3333 33.5,-228.6667 39.1667,-223 44.8333,-223"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="179,-258 118,-258 118,-222 179,-222 179,-258"/>
+<text text-anchor="start" x="129.3236" y="-236.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_3</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M130.3333,-223C130.3333,-223 166.6667,-223 166.6667,-223 172.3333,-223 178,-228.6667 178,-234.3333 178,-234.3333 178,-245.6667 178,-245.6667 178,-251.3333 172.3333,-257 166.6667,-257 166.6667,-257 130.3333,-257 130.3333,-257 124.6667,-257 119,-251.3333 119,-245.6667 119,-245.6667 119,-234.3333 119,-234.3333 119,-228.6667 124.6667,-223 130.3333,-223"/>
 </g>
 <!-- _parallel_orthogonal_2_orthogonal_inner_2_initial&#45;&gt;_parallel_orthogonal_2_orthogonal_inner_2_state_3 -->
 <g id="edge7" class="edge">
 <title>_parallel_orthogonal_2_orthogonal_inner_2_initial&#45;&gt;_parallel_orthogonal_2_orthogonal_inner_2_state_3</title>
-<path fill="none" stroke="#000000" d="M63,-446.8288C63,-442.1736 63,-435.4097 63,-429.5 63,-429.5 63,-429.5 63,-275.5 63,-273.1079 63,-270.6252 63,-268.1342"/>
-<polygon fill="#000000" stroke="#000000" points="66.5001,-268.0597 63,-258.0598 59.5001,-268.0598 66.5001,-268.0597"/>
-<text text-anchor="middle" x="64.3895" y="-344" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
+<path fill="none" stroke="#000000" d="M148.5,-446.8288C148.5,-442.1736 148.5,-435.4097 148.5,-429.5 148.5,-429.5 148.5,-429.5 148.5,-275.5 148.5,-273.1079 148.5,-270.6252 148.5,-268.1342"/>
+<polygon fill="#000000" stroke="#000000" points="152.0001,-268.0597 148.5,-258.0598 145.0001,-268.0598 152.0001,-268.0597"/>
+<text text-anchor="middle" x="149.8895" y="-344" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"> </text>
 </g>
 <!-- _parallel_orthogonal_2_orthogonal_inner_2_state_4 -->
-<g id="node17" class="node">
+<g id="node18" class="node">
 <title>_parallel_orthogonal_2_orthogonal_inner_2_state_4</title>
-<polygon fill="transparent" stroke="transparent" stroke-width="2" points="93.5,-68 32.5,-68 32.5,-32 93.5,-32 93.5,-68"/>
-<text text-anchor="start" x="43.8236" y="-46.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_4</text>
-<path fill="none" stroke="#000000" stroke-width="2" d="M44.8333,-33C44.8333,-33 81.1667,-33 81.1667,-33 86.8333,-33 92.5,-38.6667 92.5,-44.3333 92.5,-44.3333 92.5,-55.6667 92.5,-55.6667 92.5,-61.3333 86.8333,-67 81.1667,-67 81.1667,-67 44.8333,-67 44.8333,-67 39.1667,-67 33.5,-61.3333 33.5,-55.6667 33.5,-55.6667 33.5,-44.3333 33.5,-44.3333 33.5,-38.6667 39.1667,-33 44.8333,-33"/>
+<polygon fill="transparent" stroke="transparent" stroke-width="2" points="179,-68 118,-68 118,-32 179,-32 179,-68"/>
+<text text-anchor="start" x="129.3236" y="-46.2" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#000000">state_4</text>
+<path fill="none" stroke="#000000" stroke-width="2" d="M130.3333,-33C130.3333,-33 166.6667,-33 166.6667,-33 172.3333,-33 178,-38.6667 178,-44.3333 178,-44.3333 178,-55.6667 178,-55.6667 178,-61.3333 172.3333,-67 166.6667,-67 166.6667,-67 130.3333,-67 130.3333,-67 124.6667,-67 119,-61.3333 119,-55.6667 119,-55.6667 119,-44.3333 119,-44.3333 119,-38.6667 124.6667,-33 130.3333,-33"/>
 </g>
 <!-- _parallel_orthogonal_2_orthogonal_inner_2_state_3&#45;&gt;_parallel_orthogonal_2_orthogonal_inner_2_state_4 -->
 <g id="edge8" class="edge">
 <title>_parallel_orthogonal_2_orthogonal_inner_2_state_3&#45;&gt;_parallel_orthogonal_2_orthogonal_inner_2_state_4</title>
-<path fill="none" stroke="#000000" d="M56.555,-221.7962C55.1124,-216.3088 54,-210.2224 54,-204.5 54,-204.5 54,-204.5 54,-85.5 54,-83.0859 54.198,-80.607 54.5352,-78.1355"/>
-<polygon fill="#000000" stroke="#000000" points="57.9918,-78.7008 56.555,-68.2038 51.1322,-77.3057 57.9918,-78.7008"/>
-<text text-anchor="start" x="54" y="-142" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_state_4 &#160;&#160;</text>
+<path fill="none" stroke="#000000" d="M142.055,-221.7962C140.6124,-216.3088 139.5,-210.2224 139.5,-204.5 139.5,-204.5 139.5,-204.5 139.5,-85.5 139.5,-83.0859 139.698,-80.607 140.0352,-78.1355"/>
+<polygon fill="#000000" stroke="#000000" points="143.4918,-78.7008 142.055,-68.2038 136.6322,-77.3057 143.4918,-78.7008"/>
+<text text-anchor="start" x="139.5" y="-142" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">test_input.to_state_4 &#160;&#160;</text>
 </g>
 </g>
 </svg>