Browse Source

Add test for MT execution as well

Yentl Van Tendeloo 3 years ago
parent
commit
2e8f03728c
7 changed files with 574 additions and 45 deletions
  1. 127 0
      unit/exec_AL.py
  2. 47 0
      unit/exec_AL.xml
  3. 127 0
      unit/exec_MT.py
  4. 47 0
      unit/exec_MT.xml
  5. 226 3
      unit/test_all.py
  6. 0 28
      wrappers/classes/modelverse.xml
  7. 0 14
      wrappers/modelverse_SCCD.py

+ 127 - 0
unit/exec_AL.py

@@ -0,0 +1,127 @@
+"""
+Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
+
+Model author: Yentl Van Tendeloo
+Model name:   Logging
+Model description:
+For testing: send 2 values and wait for the sum
+"""
+
+from sccd.runtime.statecharts_core import *
+
+# package "Logging"
+
+class Exec_AL(RuntimeClassBase):
+    def __init__(self, controller):
+        RuntimeClassBase.__init__(self, controller)
+        
+        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
+        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
+        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
+        self.semantics.priority = StatechartSemantics.SourceParent
+        self.semantics.concurrency = StatechartSemantics.Single
+        
+        # build Statechart structure
+        self.build_statechart_structure()
+        
+        # call user defined constructor
+        Exec_AL.user_defined_constructor(self)
+    
+    def user_defined_constructor(self):
+        pass
+    
+    def user_defined_destructor(self):
+        pass
+    
+    
+    # builds Statechart structure
+    def build_statechart_structure(self):
+        
+        # state <root>
+        self.states[""] = State(0, "", self)
+        
+        # state /init
+        self.states["/init"] = State(1, "/init", self)
+        self.states["/init"].setEnter(self._init_enter)
+        self.states["/init"].setExit(self._init_exit)
+        
+        # state /finished
+        self.states["/finished"] = State(2, "/finished", self)
+        
+        # add children
+        self.states[""].addChild(self.states["/init"])
+        self.states[""].addChild(self.states["/finished"])
+        self.states[""].fixTree()
+        self.states[""].default_state = self.states["/init"]
+        
+        # transition /init
+        _init_0 = Transition(self, self.states["/init"], [self.states["/init"]])
+        _init_0.setAction(self._init_0_exec)
+        _init_0.setTrigger(Event("input", "inp"))
+        _init_0.setGuard(self._init_0_guard)
+        self.states["/init"].addTransition(_init_0)
+        _init_1 = Transition(self, self.states["/init"], [self.states["/init"]])
+        _init_1.setAction(self._init_1_exec)
+        _init_1.setTrigger(Event("input", "inp"))
+        _init_1.setGuard(self._init_1_guard)
+        self.states["/init"].addTransition(_init_1)
+        _init_2 = Transition(self, self.states["/init"], [self.states["/finished"]])
+        _init_2.setTrigger(Event("_0after"))
+        self.states["/init"].addTransition(_init_2)
+        _init_3 = Transition(self, self.states["/init"], [self.states["/finished"]])
+        _init_3.setAction(self._init_3_exec)
+        _init_3.setTrigger(Event("terminate", "inp"))
+        self.states["/init"].addTransition(_init_3)
+    
+    def _init_enter(self):
+        self.addTimer(0, 30)
+    
+    def _init_exit(self):
+        self.removeTimer(0)
+    
+    def _init_0_exec(self, parameters):
+        value = parameters[0]
+        self.big_step.outputEvent(Event("output", "outp", [2]))
+        self.big_step.outputEvent(Event("output", "outp", [3]))
+        print("RAISE EVENT ON PORT")
+    
+    def _init_0_guard(self, parameters):
+        value = parameters[0]
+        return value == 'init'
+    
+    def _init_1_exec(self, parameters):
+        value = parameters[0]
+        print("Got: " + str(value))
+    
+    def _init_1_guard(self, parameters):
+        value = parameters[0]
+        return type(value) == int
+    
+    def _init_3_exec(self, parameters):
+        print("Got terminate")
+    
+    def initializeStatechart(self):
+        # enter default state
+        self.default_targets = self.states["/init"].getEffectiveTargetStates()
+        RuntimeClassBase.initializeStatechart(self)
+
+class ObjectManager(ObjectManagerBase):
+    def __init__(self, controller):
+        ObjectManagerBase.__init__(self, controller)
+    
+    def instantiate(self, class_name, construct_params):
+        if class_name == "Exec_AL":
+            instance = Exec_AL(self.controller)
+            instance.associations = {}
+        else:
+            raise Exception("Cannot instantiate class " + class_name)
+        return instance
+
+class Controller(ThreadsControllerBase):
+    def __init__(self, keep_running = None, behind_schedule_callback = None):
+        if keep_running == None: keep_running = True
+        if behind_schedule_callback == None: behind_schedule_callback = None
+        ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
+        self.addInputPort("inp")
+        self.addOutputPort("outp")
+        self.object_manager.createInstance("Exec_AL", [])

+ 47 - 0
unit/exec_AL.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<diagram author="Yentl Van Tendeloo" name="Logging">
+    <description>
+        For testing: send 2 values and wait for the sum
+    </description>
+
+    <inport name="inp"/>
+    <outport name="outp"/>
+
+    <class name="Exec_AL" default="true">
+        <scxml initial="init">
+            <state id="init">
+                <transition event="input" cond="value == 'init'" port="inp" target=".">
+                    <parameter name="value"/>
+                    <raise event="output" port="outp" scope="output">
+                        <parameter expr="2"/>
+                    </raise>
+                    <raise event="output" port="outp" scope="output">
+                        <parameter expr="3"/>
+                    </raise>
+                    <script>
+                        print("RAISE EVENT ON PORT")
+                    </script>
+                </transition>
+
+                <transition event="input" cond="type(value) == int" port="inp" target=".">
+                    <parameter name="value"/>
+                    <script>
+                        print("Got: " + str(value))
+                    </script>
+                </transition>
+
+                <transition after="30" target="../finished">
+                    print("ERROR")
+                </transition>
+
+                <transition event="terminate" port="inp" target="../finished">
+                    <script>
+                        print("Got terminate")
+                    </script>
+                </transition>
+            </state>
+
+            <state id="finished"/>
+        </scxml>
+    </class>
+</diagram>

+ 127 - 0
unit/exec_MT.py

@@ -0,0 +1,127 @@
+"""
+Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
+
+Model author: Yentl Van Tendeloo
+Model name:   Logging
+Model description:
+For testing: send 2 values and wait for the sum
+"""
+
+from sccd.runtime.statecharts_core import *
+
+# package "Logging"
+
+class Exec_MT(RuntimeClassBase):
+    def __init__(self, controller):
+        RuntimeClassBase.__init__(self, controller)
+        
+        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
+        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
+        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
+        self.semantics.priority = StatechartSemantics.SourceParent
+        self.semantics.concurrency = StatechartSemantics.Single
+        
+        # build Statechart structure
+        self.build_statechart_structure()
+        
+        # call user defined constructor
+        Exec_MT.user_defined_constructor(self)
+    
+    def user_defined_constructor(self):
+        pass
+    
+    def user_defined_destructor(self):
+        pass
+    
+    
+    # builds Statechart structure
+    def build_statechart_structure(self):
+        
+        # state <root>
+        self.states[""] = State(0, "", self)
+        
+        # state /init
+        self.states["/init"] = State(1, "/init", self)
+        self.states["/init"].setEnter(self._init_enter)
+        self.states["/init"].setExit(self._init_exit)
+        
+        # state /finished
+        self.states["/finished"] = State(2, "/finished", self)
+        
+        # add children
+        self.states[""].addChild(self.states["/init"])
+        self.states[""].addChild(self.states["/finished"])
+        self.states[""].fixTree()
+        self.states[""].default_state = self.states["/init"]
+        
+        # transition /init
+        _init_0 = Transition(self, self.states["/init"], [self.states["/init"]])
+        _init_0.setAction(self._init_0_exec)
+        _init_0.setTrigger(Event("input", "inp"))
+        _init_0.setGuard(self._init_0_guard)
+        self.states["/init"].addTransition(_init_0)
+        _init_1 = Transition(self, self.states["/init"], [self.states["/init"]])
+        _init_1.setAction(self._init_1_exec)
+        _init_1.setTrigger(Event("input", "inp"))
+        _init_1.setGuard(self._init_1_guard)
+        self.states["/init"].addTransition(_init_1)
+        _init_2 = Transition(self, self.states["/init"], [self.states["/finished"]])
+        _init_2.setTrigger(Event("_0after"))
+        self.states["/init"].addTransition(_init_2)
+        _init_3 = Transition(self, self.states["/init"], [self.states["/finished"]])
+        _init_3.setAction(self._init_3_exec)
+        _init_3.setTrigger(Event("terminate", "inp"))
+        self.states["/init"].addTransition(_init_3)
+    
+    def _init_enter(self):
+        self.addTimer(0, 30)
+    
+    def _init_exit(self):
+        self.removeTimer(0)
+    
+    def _init_0_exec(self, parameters):
+        value = parameters[0]
+        self.big_step.outputEvent(Event("output", "outp", [2]))
+        self.big_step.outputEvent(Event("output", "outp", [3]))
+        print("RAISE EVENT ON PORT")
+    
+    def _init_0_guard(self, parameters):
+        value = parameters[0]
+        return value == 'init'
+    
+    def _init_1_exec(self, parameters):
+        value = parameters[0]
+        print("Got: " + str(value))
+    
+    def _init_1_guard(self, parameters):
+        value = parameters[0]
+        return type(value) == int
+    
+    def _init_3_exec(self, parameters):
+        print("Got terminate")
+    
+    def initializeStatechart(self):
+        # enter default state
+        self.default_targets = self.states["/init"].getEffectiveTargetStates()
+        RuntimeClassBase.initializeStatechart(self)
+
+class ObjectManager(ObjectManagerBase):
+    def __init__(self, controller):
+        ObjectManagerBase.__init__(self, controller)
+    
+    def instantiate(self, class_name, construct_params):
+        if class_name == "Exec_MT":
+            instance = Exec_MT(self.controller)
+            instance.associations = {}
+        else:
+            raise Exception("Cannot instantiate class " + class_name)
+        return instance
+
+class Controller(ThreadsControllerBase):
+    def __init__(self, keep_running = None, behind_schedule_callback = None):
+        if keep_running == None: keep_running = True
+        if behind_schedule_callback == None: behind_schedule_callback = None
+        ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
+        self.addInputPort("inp")
+        self.addOutputPort("outp")
+        self.object_manager.createInstance("Exec_MT", [])

+ 47 - 0
unit/exec_MT.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<diagram author="Yentl Van Tendeloo" name="Logging">
+    <description>
+        For testing: send 2 values and wait for the sum
+    </description>
+
+    <inport name="inp"/>
+    <outport name="outp"/>
+
+    <class name="Exec_MT" default="true">
+        <scxml initial="init">
+            <state id="init">
+                <transition event="input" cond="value == 'init'" port="inp" target=".">
+                    <parameter name="value"/>
+                    <raise event="output" port="outp" scope="output">
+                        <parameter expr="2"/>
+                    </raise>
+                    <raise event="output" port="outp" scope="output">
+                        <parameter expr="3"/>
+                    </raise>
+                    <script>
+                        print("RAISE EVENT ON PORT")
+                    </script>
+                </transition>
+
+                <transition event="input" cond="type(value) == int" port="inp" target=".">
+                    <parameter name="value"/>
+                    <script>
+                        print("Got: " + str(value))
+                    </script>
+                </transition>
+
+                <transition after="30" target="../finished">
+                    print("ERROR")
+                </transition>
+
+                <transition event="terminate" port="inp" target="../finished">
+                    <script>
+                        print("Got terminate")
+                    </script>
+                </transition>
+            </state>
+
+            <state id="finished"/>
+        </scxml>
+    </class>
+</diagram>

+ 226 - 3
unit/test_all.py

@@ -4464,15 +4464,238 @@ class TestModelverse(unittest.TestCase):
         thrd.daemon = True
         transformation_add_AL({"MODEL_A": "users/user/test/A"}, {"MODEL_B": "users/user/test/B"}, "users/user/test/i", code_SC)
         thrd.start()
-        print("STart exec")
         transformation_execute_AL("users/user/test/i", {"MODEL_A": "users/user/test/a"}, {"MODEL_B": "users/user/test/bb"}, statechart=(ctrl, "inp", "outp"))
-        print("EXEC OK")
+        thrd.join()
+
+    def test_op_transformation_execute_MT(self):
+        # Add models for transformation
+        model_add("users/user/test/A", "formalisms/SimpleClassDiagrams", """
+            SimpleAttribute String {}
+            Class A {
+                name = "A"
+                name : String
+            }
+            """)
+        model_add("users/user/test/B", "formalisms/SimpleClassDiagrams", """
+            SimpleAttribute String {}
+            Class B {
+                name = "B"
+                name : String
+            }
+            """)
+        model_add("users/user/test/a", "users/user/test/A", "A a {}")
+        model_add("users/user/test/b", "users/user/test/B", "B b {}")
+
+        default_code_empty = """
+            Composite a {
+                {Contains} Success success {}
+            }
+            Initial (a, success) {}
+            """
+        default_code_true = """
+            Composite a {
+                {Contains} Success success {}
+                {Contains} Atomic b {
+                    LHS {
+                        Pre_MODEL_A/A {
+                            label = "0"
+                        }
+                    }
+                    RHS {
+                        Post_MODEL_A/A {
+                            label = "0"
+                            value_name = $
+                                String function value(model : Element, name : String, mapping : Element):
+                                    return "CHANGED"!
+                                $
+                        }
+                        Post_MODEL_B/B {
+                            label = "1"
+                        }
+                    }
+                }
+            }
+            Initial (a, b) {}
+            OnSuccess (b, success) {}
+            OnFailure (b, success) {}
+            """
+        default_code_false = """
+            Composite a {
+                {Contains} Failure failure {}
+                {Contains} Atomic b {
+                    LHS {
+                        Pre_MODEL_A/A {
+                            label = "0"
+                        }
+                    }
+                    RHS {
+                        Post_MODEL_A/A {
+                            label = "0"
+                            value_name = $
+                                String function value(model : Element, name : String, mapping : Element):
+                                    return "CHANGED"!
+                                $
+                        }
+                        Post_MODEL_B/B {
+                            label = "1"
+                        }
+                    }
+                }
+            }
+            Initial (a, b) {}
+            OnSuccess (b, failure) {}
+            OnFailure (b, failure) {}
+            """
+
+        # Add some activity to execute
+        try:
+            transformation_add_MT({}, {}, "users/user/test/c", default_code_true)
+            self.fail()
+        except EmptySignature:
+            assert "c" not in model_list("users/user/test")
+
+        # Now do the same, but with a model
+        transformation_add_MT({"MODEL_A": "users/user/test/A"}, {"MODEL_B": "users/user/test/B"}, "users/user/test/d", default_code_true)
+
+        transformation_execute_MT("users/user/test/d", {"MODEL_A": "users/user/test/a"}, {"MODEL_B": "users/user/test/aa"})
+
+        lst = element_list_nice("users/user/test/aa")
+        assert len(lst) == 1
+        assert lst[0]["__type"] == "B"
+        assert lst[0]["name"] == None
+        assert lst[0]["__id"].startswith("__")
+
+        # Original input model remains unchanged, as it is not an output model
+        lst = element_list_nice("users/user/test/a")
+        assert len(lst) == 1
+        assert lst[0]["__type"] == "A"
+        assert lst[0]["name"] == None
+        assert lst[0]["__id"] == "a"
+
+        # Execute activity with non-existing model (input)
+        try:
+            transformation_execute_MT("users/user/test/d", {"MODEL_A": "dfadf"}, {"MODEL_B": "users/user/test/f"})
+            self.fail()
+        except UnknownModel:
+            assert "f" not in model_list("users/user/test")
+
+        # Execute non-existing activity
+        try:
+            transformation_execute_MT("adfadf", {}, {"MODEL_B": "users/user/test/abc"})
+            self.fail()
+        except UnknownModel:
+            assert "abc" not in model_list("users/user/test")
+
+        # Unbound source model
+        try:
+            transformation_execute_MT("users/user/test/d", {}, {"MODEL_B": "users/user/test/f"})
+            self.fail()
+        except SourceModelNotBound:
+            pass
+
+        # Unknown source key
+        try:
+            transformation_execute_MT("users/user/test/d", {"ABC": "users/user/test/a", "MODEL_A": "users/user/test/a"}, {"MODEL_B": "users/user/test/f"})
+            self.fail()
+        except SourceModelNotBound:
+            pass
+
+        # Unknown target key
+        try:
+            transformation_execute_MT("users/user/test/d", {"MODEL_A": "users/user/test/a"}, {"DEF": "users/user/test/b"})
+            self.fail()
+        except TargetModelNotBound:
+            pass
+
+        # Read permissions denied source
+        try:
+            transformation_execute_MT("users/user/test/d", {"MODEL_A": "administration/core"}, {"MODEL_B": "users/user/test/f"})
+            self.fail()
+        except ReadPermissionDenied:
+            pass
+
+        # Execute permissions denied activity
+        try:
+            transformation_execute_MT("administration/core", {"MODEL_A": "administration/core"}, {"MODEL_B": "users/user/test/f"})
+            self.fail()
+        except ExecutePermissionDenied:
+            pass
+
+        # Write permissions denied target (folder)
+        try:
+            transformation_execute_MT("users/user/test/d", {"MODEL_A": "users/user/test/a"}, {"MODEL_B": "administration/abc"})
+            self.fail()
+        except WritePermissionDenied:
+            pass
+
+        # Write permissions denied target (model)
+        try:
+            transformation_execute_MT("users/user/test/d", {"MODEL_A": "users/user/test/a"}, {"MODEL_B": "administration/core"})
+            self.fail()
+        except WritePermissionDenied:
+            pass
+
+        # Execute activity with non-conforming input models
+        try:
+            transformation_execute_MT("users/user/test/d", {"MODEL_A": "users/user/test/b"}, {"MODEL_B": "users/user/test/f"})
+            self.fail()
+        except TypeMismatch:
+            assert "f" not in model_list("users/user/test")
+
+        # Execute activity with non-conforming output models that already exist
+        try:
+            transformation_execute_MT("users/user/test/d", {"MODEL_A": "users/user/test/b"}, {"MODEL_B": "users/user/test/d"})
+            self.fail()
+        except TypeMismatch:
+            assert element_list_nice("users/user/test/d") > 0
+
+        # Execute activity with colliding models, which means that it is copied
+        transformation_add_MT({"MODEL_A": "users/user/test/A"}, {"MODEL_A": "users/user/test/A"}, "users/user/test/f", default_code_empty)
+        transformation_execute_MT("users/user/test/f", {"MODEL_A": "users/user/test/a"}, {"MODEL_A": "users/user/test/aaa"})
+        assert len(element_list_nice("users/user/test/a")) == len(element_list_nice("users/user/test/aaa"))
+
+        # Make sure that models are not written when returning False
+        transformation_add_MT({"MODEL_A": "users/user/test/A"}, {"MODEL_B": "users/user/test/B"}, "users/user/test/h", default_code_false)
+        transformation_execute_MT("users/user/test/h", {"MODEL_A": "users/user/test/a"}, {"MODEL_B": "users/user/test/bb"})
+        assert "bb" not in model_list("users/user/test")
+
+        # Try out SC communication: requires back and forth computation
+        code_SC = """
+            include "primitives.alh"
+            include "io.alh"
+
+            Composite a {
+                {Contains} Success success {}
+                {Contains} Atomic b {
+                    LHS {}
+                    RHS {
+                        action = $
+                            Void function act(model : Element, mapping : Element):
+                                output("init")
+                                log("Init OK")
+                                output(cast_integer(input()) + cast_integer(input()))
+                                log("Sent out value")
+                                return!
+                            $
+                    }
+                }
+            }
+            Initial (a, b) {}
+            OnSuccess (b, success) {}
+            OnFailure (b, success) {}
+        """
+        import exec_MT
+        ctrl = exec_MT.Controller(keep_running=False)
+        thrd = threading.Thread(target=ctrl.start)
+        thrd.daemon = True
+        transformation_add_MT({"MODEL_A": "users/user/test/A"}, {"MODEL_B": "users/user/test/B"}, "users/user/test/i", code_SC)
+        thrd.start()
+        transformation_execute_MT("users/user/test/i", {"MODEL_A": "users/user/test/a"}, {"MODEL_B": "users/user/test/bb"}, statechart=(ctrl, "inp", "outp"))
         thrd.join()
 
     """
     def test_op_model_render(self):
     def test_op_transformation_execute_MT(self):
-    def test_op_transformation_execute_AL(self):
     def test_op_transformation_signature(self):
     def test_op_process_signature(self):
     """

+ 0 - 28
wrappers/classes/modelverse.xml

@@ -1664,41 +1664,22 @@
                             </onentry>
 
                             <state id="forwarding">
-                                <onentry>
-                                    <script>
-                                        print("FORWARDING...")
-                                    </script>
-                                </onentry>
-                                <onexit>
-                                    <script>
-                                        print("STOP FORWARDING...")
-                                    </script>
-                                </onexit>
                                 <transition cond="self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False)" target="../../../history">
                                     <raise event="result">
                                         <parameter expr="True if self.responses.pop(0) == 'Success' else False"/>
                                     </raise>
-                                    <script>
-                                        print("SUCC OR FAIL")
-                                    </script>
                                 </transition>
 
                                 <transition cond="self.responses and not (self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False))" target=".">
                                     <raise event="data_output">
                                         <parameter expr="self.responses.pop(0)"/>
                                     </raise>
-                                    <script>
-                                        print("DATA")
-                                    </script>
                                 </transition>
 
                                 <transition cond="self.expect_input('data_input')" target=".">
                                     <raise event="request">
                                         <parameter expr="self.inputs.pop(0)['parameters']"/>
                                     </raise>
-                                    <script>
-                                        print("DINPUT")
-                                    </script>
                                 </transition>
                             </state>
                         </state>
@@ -1717,24 +1698,15 @@
                                     <raise event="result">
                                         <parameter expr="self.responses.pop(0).split(': ')[1]"/>
                                     </raise>
-                                    <script>
-                                        print("EDITING")
-                                    </script>
                                 </transition>
 
                                 <transition cond="self.expect_response_partial('Nothing to modify', pop=True)" target=".">
                                     <raise event="result">
                                         <parameter expr="None"/>
                                     </raise>
-                                    <script>
-                                        print("NOTHING")
-                                    </script>
                                 </transition>
 
                                 <transition cond="self.inputs" target="../../../history">
-                                    <script>
-                                        print("INPUTS")
-                                    </script>
                                     <raise event="request">
                                         <parameter expr="0"/>
                                     </raise>

+ 0 - 14
wrappers/modelverse_SCCD.py

@@ -504,8 +504,6 @@ class Modelverse(RuntimeClassBase):
         
         # state /initialized/behaviour/wait_for_action/activity/SC/forwarding
         self.states["/initialized/behaviour/wait_for_action/activity/SC/forwarding"] = State(104, "/initialized/behaviour/wait_for_action/activity/SC/forwarding", self)
-        self.states["/initialized/behaviour/wait_for_action/activity/SC/forwarding"].setEnter(self._initialized_behaviour_wait_for_action_activity_SC_forwarding_enter)
-        self.states["/initialized/behaviour/wait_for_action/activity/SC/forwarding"].setExit(self._initialized_behaviour_wait_for_action_activity_SC_forwarding_exit)
         
         # state /initialized/behaviour/wait_for_action/activity/OP
         self.states["/initialized/behaviour/wait_for_action/activity/OP"] = State(105, "/initialized/behaviour/wait_for_action/activity/OP", self)
@@ -2289,12 +2287,6 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_operations_service_stop_enter(self):
         self.raiseInternalEvent(Event("request", None, [['service_stop']]))
     
-    def _initialized_behaviour_wait_for_action_activity_SC_forwarding_enter(self):
-        print("FORWARDING...")
-    
-    def _initialized_behaviour_wait_for_action_activity_SC_forwarding_exit(self):
-        print("STOP FORWARDING...")
-    
     def _initialized_behaviour_going_manual_init_enter(self):
         self.current_model = self.actions[0]["parameters"][0]
     
@@ -3352,21 +3344,18 @@ class Modelverse(RuntimeClassBase):
     
     def _initialized_behaviour_wait_for_action_activity_SC_forwarding_0_exec(self, parameters):
         self.raiseInternalEvent(Event("result", None, [True if self.responses.pop(0) == 'Success' else False]))
-        print("SUCC OR FAIL")
     
     def _initialized_behaviour_wait_for_action_activity_SC_forwarding_0_guard(self, parameters):
         return self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False)
     
     def _initialized_behaviour_wait_for_action_activity_SC_forwarding_1_exec(self, parameters):
         self.raiseInternalEvent(Event("data_output", None, [self.responses.pop(0)]))
-        print("DATA")
     
     def _initialized_behaviour_wait_for_action_activity_SC_forwarding_1_guard(self, parameters):
         return self.responses and not (self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False))
     
     def _initialized_behaviour_wait_for_action_activity_SC_forwarding_2_exec(self, parameters):
         self.raiseInternalEvent(Event("request", None, [self.inputs.pop(0)['parameters']]))
-        print("DINPUT")
     
     def _initialized_behaviour_wait_for_action_activity_SC_forwarding_2_guard(self, parameters):
         return self.expect_input('data_input')
@@ -3376,20 +3365,17 @@ class Modelverse(RuntimeClassBase):
     
     def _initialized_behaviour_wait_for_action_activity_OP_forwarding_1_exec(self, parameters):
         self.raiseInternalEvent(Event("result", None, [self.responses.pop(0).split(': ')[1]]))
-        print("EDITING")
     
     def _initialized_behaviour_wait_for_action_activity_OP_forwarding_1_guard(self, parameters):
         return self.expect_response_partial('Please edit this model before sending next input: ', pop=False)
     
     def _initialized_behaviour_wait_for_action_activity_OP_forwarding_2_exec(self, parameters):
         self.raiseInternalEvent(Event("result", None, [None]))
-        print("NOTHING")
     
     def _initialized_behaviour_wait_for_action_activity_OP_forwarding_2_guard(self, parameters):
         return self.expect_response_partial('Nothing to modify', pop=True)
     
     def _initialized_behaviour_wait_for_action_activity_OP_forwarding_3_exec(self, parameters):
-        print("INPUTS")
         self.raiseInternalEvent(Event("request", None, [0]))
     
     def _initialized_behaviour_wait_for_action_activity_OP_forwarding_3_guard(self, parameters):