#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "testRegionFinalStates_6Python.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        Final = auto()
        s2 = auto()
        s3 = auto()

    class StatusS1S11(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s11 = auto()
        fState1 = auto()

    class StatusS1S11S11(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s111 = auto()

    class StatusS1S11S11S111(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s111 = auto()

    class StatusS1S12(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s12 = auto()

    class StatusS1S12S12(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s122 = auto()
        fState2 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._statusS1S12S12 = None
        self._statusS1S12 = None
        self._statusS1S11S11S111 = None
        self._statusS1S11S11 = None
        self._statusS1S11 = None
        self._status = None
        self.setStatusS1S11(X.StatusS1S11.Null)
        self.setStatusS1S11S11(X.StatusS1S11S11.Null)
        self.setStatusS1S11S11S111(X.StatusS1S11S11S111.Null)
        self.setStatusS1S12(X.StatusS1S12.Null)
        self.setStatusS1S12S12(X.StatusS1S12S12.Null)
        self.setStatus(X.Status.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        if self._statusS1S11 != X.StatusS1S11.Null :
            answer += "." + self._statusS1S11.__str__()
        if self._statusS1S11S11 != X.StatusS1S11S11.Null :
            answer += "." + self._statusS1S11S11.__str__()
        if self._statusS1S11S11S111 != X.StatusS1S11S11S111.Null :
            answer += "." + self._statusS1S11S11S111.__str__()
        if self._statusS1S12 != X.StatusS1S12.Null :
            answer += "." + self._statusS1S12.__str__()
        if self._statusS1S12S12 != X.StatusS1S12S12.Null :
            answer += "." + self._statusS1S12S12.__str__()
        if self._statusS1S11S11S111 != X.StatusS1S11S11S111.Null :
            answer += "." + self._statusS1S11S11S111.__str__()
        return answer

    def getStatus(self):
        return self._status

    def getStatusS1S11(self):
        return self._statusS1S11

    def getStatusS1S11S11(self):
        return self._statusS1S11S11

    def getStatusS1S11S11S111(self):
        return self._statusS1S11S11S111

    def getStatusS1S12(self):
        return self._statusS1S12

    def getStatusS1S12S12(self):
        return self._statusS1S12S12

    def e2(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == X.Status.s1 :
            self.exitStatus()
            self.setStatus(X.Status.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e4(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == X.Status.s2 :
            self.setStatus(X.Status.Final)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e3(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == X.Status.s2 :
            self.setStatus(X.Status.s3)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e(self):
        wasEventProcessed = False
        aStatusS1S11S11S111 = self._statusS1S11S11S111
        if aStatusS1S11S11S111 == X.StatusS1S11S11.s111 :
            self.exitStatus()
            self.setStatus(X.Status.Final)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def d1(self):
        wasEventProcessed = False
        aStatusS1S11S11S111 = self._statusS1S11S11S111
        if aStatusS1S11S11S111 == X.StatusS1S11S11.s111 :
            self.exitStatusS1S11()
            self.setStatusS1S11(X.StatusS1S11.fState1)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def d2(self):
        wasEventProcessed = False
        aStatusS1S12S12 = self._statusS1S12S12
        if aStatusS1S12S12 == X.StatusS1S12S12.s122 :
            self.exitStatusS1S12S12()
            self.setStatusS1S12S12(X.StatusS1S12S12.fState2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitStatus(self):
        if self._status == X.Status.s1 :
            self.exitStatusS1S11()
            self.exitStatusS1S12()
            # line 4 "testRegionFinalStates_6Python.ump"
            print("t4")

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == X.Status.s1 :
            if self._statusS1S11 == X.StatusS1S11.Null :
                self.setStatusS1S11(X.StatusS1S11.s11)
            if self._statusS1S12 == X.StatusS1S12.Null :
                self.setStatusS1S12(X.StatusS1S12.s12)
        elif self._status == X.Status.Final :
            self.delete()
        elif self._status == X.Status.s3 :
            self.delete()

    def exitStatusS1S11(self):
        if self._statusS1S11 == X.StatusS1S11.s11 :
            self.exitStatusS1S11S11()
            # line 7 "testRegionFinalStates_6Python.ump"
            print("t3")
            self.setStatusS1S11(X.StatusS1S11.Null)
        elif self._statusS1S11 == X.StatusS1S11.fState1 :
            self.setStatusS1S11(X.StatusS1S11.Null)

    def setStatusS1S11(self, aStatusS1S11):
        self._statusS1S11 = aStatusS1S11
        if self._status != X.Status.s1 and aStatusS1S11 != X.StatusS1S11.Null :
            self.setStatus(X.Status.s1)
        # entry actions and do activities
        if self._statusS1S11 == X.StatusS1S11.s11 :
            if self._statusS1S11S11 == X.StatusS1S11S11.Null :
                self.setStatusS1S11S11(X.StatusS1S11S11.s111)
        elif self._statusS1S11 == X.StatusS1S11.fState1 :
            if self._statusS1S12S12 == X.StatusS1S12S12.fState2 :
                self.delete()

    def exitStatusS1S11S11(self):
        if self._statusS1S11S11 == X.StatusS1S11S11.s111 :
            self.exitStatusS1S11S11S111()
            # line 9 "testRegionFinalStates_6Python.ump"
            print("t2")
            self.setStatusS1S11S11(X.StatusS1S11S11.Null)

    def setStatusS1S11S11(self, aStatusS1S11S11):
        self._statusS1S11S11 = aStatusS1S11S11
        if self._statusS1S11 != X.StatusS1S11.s11 and aStatusS1S11S11 != X.StatusS1S11S11.Null :
            self.setStatusS1S11(X.StatusS1S11.s11)
        # entry actions and do activities
        if self._statusS1S11S11 == X.StatusS1S11S11.s111 :
            if self._statusS1S11S11S111 == X.StatusS1S11S11S111.Null :
                self.setStatusS1S11S11S111(X.StatusS1S11S11S111.s111)

    def exitStatusS1S11S11S111(self):
        if self._statusS1S11S11S111 == X.StatusS1S11S11.s111 :
            # line 11 "testRegionFinalStates_6Python.ump"
            print("t1")
            self.setStatusS1S11S11S111(X.StatusS1S11S11S111.Null)

    def setStatusS1S11S11S111(self, aStatusS1S11S11S111):
        self._statusS1S11S11S111 = aStatusS1S11S11S111
        if self._statusS1S11S11 != X.StatusS1S11S11.s111 and aStatusS1S11S11S111 != X.StatusS1S11S11S111.Null :
            self.setStatusS1S11S11(X.StatusS1S11S11.s111)

    def exitStatusS1S12(self):
        if self._statusS1S12 == X.StatusS1S12.s12 :
            self.exitStatusS1S12S12()
            self.setStatusS1S12(X.StatusS1S12.Null)

    def setStatusS1S12(self, aStatusS1S12):
        self._statusS1S12 = aStatusS1S12
        if self._status != X.Status.s1 and aStatusS1S12 != X.StatusS1S12.Null :
            self.setStatus(X.Status.s1)
        # entry actions and do activities
        if self._statusS1S12 == X.StatusS1S12.s12 :
            if self._statusS1S12S12 == X.StatusS1S12S12.Null :
                self.setStatusS1S12S12(X.StatusS1S12S12.s122)

    def exitStatusS1S12S12(self):
        if self._statusS1S12S12 == X.StatusS1S12S12.s122 :
            self.setStatusS1S12S12(X.StatusS1S12S12.Null)
        elif self._statusS1S12S12 == X.StatusS1S12S12.fState2 :
            self.setStatusS1S12S12(X.StatusS1S12S12.Null)

    def setStatusS1S12S12(self, aStatusS1S12S12):
        self._statusS1S12S12 = aStatusS1S12S12
        if self._statusS1S12 != X.StatusS1S12.s12 and aStatusS1S12S12 != X.StatusS1S12S12.Null :
            self.setStatusS1S12(X.StatusS1S12.s12)
        # entry actions and do activities
        if self._statusS1S12S12 == X.StatusS1S12S12.fState2 :
            if self._statusS1S11 == X.StatusS1S11.fState1 :
                self.delete()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../testTwoParameterGuardPython.ump"
from enum import Enum, auto

class A_Guard():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #A_Guard State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        S1 = auto()
        S2 = auto()
        S3 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(A_Guard.Status.S1)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def e1(self, myB):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == A_Guard.Status.S1 :
            if self.checkGuard1(myB) :
                self.setStatus(A_Guard.Status.S2)
                wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e2(self, myB, mySecondB):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == A_Guard.Status.S2 :
            if self.checkGuard1(myB) :
                self.setStatus(A_Guard.Status.S3)
                wasEventProcessed = True
        elif aStatus == A_Guard.Status.S3 :
            if self.checkGuard2(myB, mySecondB) :
                self.setStatus(A_Guard.Status.S1)
                wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus

    def delete(self):
        pass

    # line 19 "../testTwoParameterGuardPython.ump"
    def checkGuard1(self, myB):
        return True

    # line 22 "../testTwoParameterGuardPython.ump"
    def checkGuard2(self, myB, mySecondB):
        return True


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../doActivityNestedStateMachinePython.ump"
from enum import Enum, auto
from threading import Thread
import time

class Course():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Course State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Open = auto()

    class StatusOpen(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        statusOpen = auto()

    #Course Do Activity Threads
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._doActivityStatusOpenStatusOpenThread = None
        self._statusOpen = None
        self._status = None
        self.setStatusOpen(Course.StatusOpen.Null)
        self.setStatus(Course.Status.Open)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        if self._statusOpen != Course.StatusOpen.Null :
            answer += "." + self._statusOpen.__str__()
        return answer

    def getStatus(self):
        return self._status

    def getStatusOpen(self):
        return self._statusOpen

    def exitStatus(self):
        if self._status == Course.Status.Open :
            self.exitStatusOpen()

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == Course.Status.Open :
            if self._statusOpen == Course.StatusOpen.Null :
                self.setStatusOpen(Course.StatusOpen.statusOpen)

    def exitStatusOpen(self):
        if self._statusOpen == Course.StatusOpen.statusOpen :
            self.setStatusOpen(Course.StatusOpen.Null)
            if not (self._doActivityStatusOpenStatusOpenThread is None) :
                self._doActivityStatusOpenStatusOpenThread.interrupt()

    def setStatusOpen(self, aStatusOpen):
        self._statusOpen = aStatusOpen
        if self._status != Course.Status.Open and aStatusOpen != Course.StatusOpen.Null :
            self.setStatus(Course.Status.Open)
        # entry actions and do activities
        if self._statusOpen == Course.StatusOpen.statusOpen :
            self._doActivityStatusOpenStatusOpenThread = Course.DoActivityThread(self, "doActivityStatusOpenStatusOpen")

    def doActivityStatusOpenStatusOpen(self):
        try:
            keepGoing()
        except :
            pass

    class DoActivityThread(Thread):
        def __init__(self, aController, aDoActivityMethodName):
            self._doActivityMethodName = None
            self._controller = None
            self._controller = aController
            self._doActivityMethodName = aDoActivityMethodName
            # The equivalent of "start();" for starting a python thread
            super().__init__()
            self.start()

        def run(self):
            if "doActivityStatusOpenStatusOpen" == self._doActivityMethodName :
                self._controller.doActivityStatusOpenStatusOpen()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 20 "../doActivityPython.ump"
from enum import Enum, auto
from threading import Thread
import time

class Lamp():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Lamp State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        On = auto()
        Off = auto()

    #Lamp Do Activity Threads
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._doActivityStatusOffThread = None
        self._doActivityStatusOnThread = None
        self._status = None
        self.setStatus(Lamp.Status.On)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def press(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Lamp.Status.On :
            self.exitStatus()
            self.setStatus(Lamp.Status.Off)
            wasEventProcessed = True
        elif aStatus == Lamp.Status.Off :
            self.exitStatus()
            self.setStatus(Lamp.Status.On)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitStatus(self):
        if self._status == Lamp.Status.On :
            if not (self._doActivityStatusOnThread is None) :
                self._doActivityStatusOnThread.interrupt()
        elif self._status == Lamp.Status.Off :
            if not (self._doActivityStatusOffThread is None) :
                self._doActivityStatusOffThread.interrupt()

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == Lamp.Status.On :
            self._doActivityStatusOnThread = Lamp.DoActivityThread(self, "doActivityStatusOn")
        elif self._status == Lamp.Status.Off :
            self._doActivityStatusOffThread = Lamp.DoActivityThread(self, "doActivityStatusOff")

    def doActivityStatusOn(self):
        try:
            alsoDo()
        except :
            pass

    def doActivityStatusOff(self):
        try:
            keepDoing()
        except :
            pass

    class DoActivityThread(Thread):
        def __init__(self, aController, aDoActivityMethodName):
            self._doActivityMethodName = None
            self._controller = None
            self._controller = aController
            self._doActivityMethodName = aDoActivityMethodName
            # The equivalent of "start();" for starting a python thread
            super().__init__()
            self.start()

        def run(self):
            if "doActivityStatusOn" == self._doActivityMethodName :
                self._controller.doActivityStatusOn()
            elif "doActivityStatusOff" == self._doActivityMethodName :
                self._controller.doActivityStatusOff()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "checkExternalTransitions_withExitActions_1Python.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        on = auto()
        off = auto()

    class SmOn(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s1 = auto()
        s2 = auto()

    class SmOnS1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        m1 = auto()
        m2 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smOnS1 = None
        self._smOn = None
        self._sm = None
        self.setSmOn(X.SmOn.Null)
        self.setSmOnS1(X.SmOnS1.Null)
        self.setSm(X.Sm.on)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smOn != X.SmOn.Null :
            answer += "." + self._smOn.__str__()
        if self._smOnS1 != X.SmOnS1.Null :
            answer += "." + self._smOnS1.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmOn(self):
        return self._smOn

    def getSmOnS1(self):
        return self._smOnS1

    def e1(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.on :
            self.exitSm()
            self.setSm(X.Sm.off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e2(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.on :
            self.exitSm()
            self.setSm(X.Sm.on)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e3(self):
        wasEventProcessed = False
        aSmOn = self._smOn
        if aSmOn == X.SmOn.s1 :
            self.exitSmOn()
            self.setSmOn(X.SmOn.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e4(self):
        wasEventProcessed = False
        aSmOn = self._smOn
        if aSmOn == X.SmOn.s1 :
            self.exitSmOn()
            self.setSmOn(X.SmOn.s1)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e5(self):
        wasEventProcessed = False
        aSmOn = self._smOn
        if aSmOn == X.SmOn.s1 :
            self.exitSm()
            self.setSm(X.Sm.on)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e6(self):
        wasEventProcessed = False
        aSmOn = self._smOn
        if aSmOn == X.SmOn.s1 :
            self.exitSm()
            self.setSm(X.Sm.off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e7(self):
        wasEventProcessed = False
        aSmOnS1 = self._smOnS1
        if aSmOnS1 == X.SmOnS1.m1 :
            self.exitSmOnS1()
            self.setSmOnS1(X.SmOnS1.m2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e8(self):
        wasEventProcessed = False
        aSmOnS1 = self._smOnS1
        if aSmOnS1 == X.SmOnS1.m1 :
            self.exitSmOnS1()
            self.setSmOnS1(X.SmOnS1.m1)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e9(self):
        wasEventProcessed = False
        aSmOnS1 = self._smOnS1
        if aSmOnS1 == X.SmOnS1.m1 :
            self.exitSmOn()
            self.setSmOn(X.SmOn.s1)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e10(self):
        wasEventProcessed = False
        aSmOnS1 = self._smOnS1
        if aSmOnS1 == X.SmOnS1.m1 :
            self.exitSmOn()
            self.setSmOn(X.SmOn.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e11(self):
        wasEventProcessed = False
        aSmOnS1 = self._smOnS1
        if aSmOnS1 == X.SmOnS1.m1 :
            self.exitSm()
            self.setSm(X.Sm.on)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e12(self):
        wasEventProcessed = False
        aSmOnS1 = self._smOnS1
        if aSmOnS1 == X.SmOnS1.m1 :
            self.exitSm()
            self.setSm(X.Sm.off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.on :
            self.exitSmOn()
            # line 4 "checkExternalTransitions_withExitActions_1Python.ump"
            self.on_exit_action()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.on :
            if self._smOn == X.SmOn.Null :
                self.setSmOn(X.SmOn.s1)

    def exitSmOn(self):
        if self._smOn == X.SmOn.s1 :
            self.exitSmOnS1()
            # line 8 "checkExternalTransitions_withExitActions_1Python.ump"
            self.s1_exit_action()
            self.setSmOn(X.SmOn.Null)
        elif self._smOn == X.SmOn.s2 :
            self.setSmOn(X.SmOn.Null)

    def setSmOn(self, aSmOn):
        self._smOn = aSmOn
        if self._sm != X.Sm.on and aSmOn != X.SmOn.Null :
            self.setSm(X.Sm.on)
        # entry actions and do activities
        if self._smOn == X.SmOn.s1 :
            if self._smOnS1 == X.SmOnS1.Null :
                self.setSmOnS1(X.SmOnS1.m1)

    def exitSmOnS1(self):
        if self._smOnS1 == X.SmOnS1.m1 :
            # line 14 "checkExternalTransitions_withExitActions_1Python.ump"
            self.m1_exit_action()
            self.setSmOnS1(X.SmOnS1.Null)
        elif self._smOnS1 == X.SmOnS1.m2 :
            self.setSmOnS1(X.SmOnS1.Null)

    def setSmOnS1(self, aSmOnS1):
        self._smOnS1 = aSmOnS1
        if self._smOn != X.SmOn.s1 and aSmOnS1 != X.SmOnS1.Null :
            self.setSmOn(X.SmOn.s1)

    def delete(self):
        pass

    # line 28 "checkExternalTransitions_withExitActions_1Python.ump"
    def on_exit_action(self):
        print("exited on")

    # line 29 "checkExternalTransitions_withExitActions_1Python.ump"
    def s1_exit_action(self):
        print("exited s1")

    # line 30 "checkExternalTransitions_withExitActions_1Python.ump"
    def m1_exit_action(self):
        print("exited m1")


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "guardNameBothAttributeAndMethod2Python.ump"
from enum import Enum, auto

class A():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #A Attributes
    #A State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s2 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self._repeatCheck = None
        self._repeatCheck = False
        self.setStatus(A.Status.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def setRepeatCheck(self, aRepeatCheck):
        wasSet = False
        self._repeatCheck = aRepeatCheck
        wasSet = True
        return wasSet

    def getRepeatCheck(self):
        return self._repeatCheck

    # Code from template attribute_IsBoolean 
    def isRepeatCheck(self):
        return self._repeatCheck

    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def __autotransition1__(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == A.Status.s1 :
            if self.getRepeatCheck() < self.repeatCheck(z) :
                self.setStatus(A.Status.s2)
                wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == A.Status.s1 :
            self.__autotransition1__()

    def delete(self):
        pass

    # line 11 "guardNameBothAttributeAndMethod2Python.ump"
    def repeatCheck(self):
        return True

    def __str__(self):
        return str(super().__str__()) + "[" + "repeatCheck" + ":" + str(self.getRepeatCheck()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "guardNameBothAttributeAndMethod3Python.ump"
from enum import Enum, auto

class A():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #A Attributes
    #A State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s2 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self._repeatCheck = None
        self._repeatCheck = False
        self.setStatus(A.Status.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def setRepeatCheck(self, aRepeatCheck):
        wasSet = False
        self._repeatCheck = aRepeatCheck
        wasSet = True
        return wasSet

    def getRepeatCheck(self):
        return self._repeatCheck

    # Code from template attribute_IsBoolean 
    def isRepeatCheck(self):
        return self._repeatCheck

    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def __autotransition1__(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == A.Status.s1 :
            if self.getRepeatCheck() != self.repeatCheck() :
                self.setStatus(A.Status.s2)
                wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == A.Status.s1 :
            self.__autotransition1__()

    def delete(self):
        pass

    # line 11 "guardNameBothAttributeAndMethod3Python.ump"
    def repeatCheck(self):
        return True

    def __str__(self):
        return str(super().__str__()) + "[" + "repeatCheck" + ":" + str(self.getRepeatCheck()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../doActivityMultiPython.ump"
from enum import Enum, auto
from threading import Thread
import time

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s2 = auto()

    #X Do Activity Threads
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._doActivity1SmS1Thread = None
        self._doActivity0SmS1Thread = None
        self._sm = None
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        return answer

    def getSm(self):
        return self._sm

    def e1(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.s1 :
            self.exitSm()
            self.setSm(X.Sm.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s1 :
            if not (self._doActivity0SmS1Thread is None) :
                self._doActivity0SmS1Thread.interrupt()
            if not (self._doActivity1SmS1Thread is None) :
                self._doActivity1SmS1Thread.interrupt()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s1 :
            self._doActivity0SmS1Thread = X.DoActivityThread(self, "doActivity0SmS1")
            self._doActivity1SmS1Thread = X.DoActivityThread(self, "doActivity1SmS1")

    def doActivity0SmS1(self):
        try:
            blah1()
        except :
            pass

    def doActivity1SmS1(self):
        try:
            blah2()
        except :
            pass

    class DoActivityThread(Thread):
        def __init__(self, aController, aDoActivityMethodName):
            self._doActivityMethodName = None
            self._controller = None
            self._controller = aController
            self._doActivityMethodName = aDoActivityMethodName
            # The equivalent of "start();" for starting a python thread
            super().__init__()
            self.start()

        def run(self):
            if "doActivity0SmS1" == self._doActivityMethodName :
                self._controller.doActivity0SmS1()
            elif "doActivity1SmS1" == self._doActivityMethodName :
                self._controller.doActivity1SmS1()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../noDefaultEntryMethodGenerated_2Python.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        on = auto()
        idle = auto()
        off = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._sm = None
        self.setSm(X.Sm.on)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        return answer

    def getSm(self):
        return self._sm

    def turnOff(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.on :
            self.setSm(X.Sm.off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goIdle(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.on :
            self.setSm(X.Sm.idle)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def buttonPressed(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.idle :
            self.setSm(X.Sm.on)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def turnOn(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.off :
            self.setSm(X.Sm.on)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setSm(self, aSm):
        self._sm = aSm

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../doActivityNoTransitionsPython.ump"
from enum import Enum, auto
from threading import Thread
import time

class LightFixture():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #LightFixture State Machines
    class Bulb(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        On = auto()
        Off = auto()

    #LightFixture Do Activity Threads
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._doActivityBulbOnThread = None
        self._bulb = None
        self.setBulb(LightFixture.Bulb.On)

    #------------------------
    # INTERFACE
    #------------------------
    def getBulbFullName(self):
        answer = self._bulb.__str__()
        return answer

    def getBulb(self):
        return self._bulb

    def exitBulb(self):
        if self._bulb == LightFixture.Bulb.On :
            if not (self._doActivityBulbOnThread is None) :
                self._doActivityBulbOnThread.interrupt()

    def setBulb(self, aBulb):
        self._bulb = aBulb
        # entry actions and do activities
        if self._bulb == LightFixture.Bulb.On :
            self._doActivityBulbOnThread = LightFixture.DoActivityThread(self, "doActivityBulbOn")

    def doActivityBulbOn(self):
        try:
            doActivity()
        except :
            pass

    class DoActivityThread(Thread):
        def __init__(self, aController, aDoActivityMethodName):
            self._doActivityMethodName = None
            self._controller = None
            self._controller = aController
            self._doActivityMethodName = aDoActivityMethodName
            # The equivalent of "start();" for starting a python thread
            super().__init__()
            self.start()

        def run(self):
            if "doActivityBulbOn" == self._doActivityMethodName :
                self._controller.doActivityBulbOn()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../activeObjectPython.ump"
from enum import Enum, auto
from threading import Thread
import time

class Lamp():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Lamp Attributes
    #Lamp State Machines
    class StateMachine1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        topLevel = auto()

    class StateMachine1TopLevel(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        thread1 = auto()

    class StateMachine2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        topLevel = auto()

    class StateMachine2TopLevel(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        thread1 = auto()

    #Lamp Do Activity Threads
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aLog):
        self._doActivityStateMachine2TopLevelThread1Thread = None
        self._doActivityStateMachine1TopLevelThread1Thread = None
        self._stateMachine2TopLevel = None
        self._stateMachine2 = None
        self._stateMachine1TopLevel = None
        self._stateMachine1 = None
        self._log = None
        self._log = aLog
        self.setStateMachine1TopLevel(Lamp.StateMachine1TopLevel.Null)
        self.setStateMachine1(Lamp.StateMachine1.topLevel)
        self.setStateMachine2TopLevel(Lamp.StateMachine2TopLevel.Null)
        self.setStateMachine2(Lamp.StateMachine2.topLevel)

    #------------------------
    # INTERFACE
    #------------------------
    def setLog(self, aLog):
        wasSet = False
        self._log = aLog
        wasSet = True
        return wasSet

    def getLog(self):
        return self._log

    def getStateMachine1FullName(self):
        answer = self._stateMachine1.__str__()
        if self._stateMachine1TopLevel != Lamp.StateMachine1TopLevel.Null :
            answer += "." + self._stateMachine1TopLevel.__str__()
        return answer

    def getStateMachine2FullName(self):
        answer = self._stateMachine2.__str__()
        if self._stateMachine2TopLevel != Lamp.StateMachine2TopLevel.Null :
            answer += "." + self._stateMachine2TopLevel.__str__()
        return answer

    def getStateMachine1(self):
        return self._stateMachine1

    def getStateMachine2(self):
        return self._stateMachine2

    def getStateMachine1TopLevel(self):
        return self._stateMachine1TopLevel

    def getStateMachine2TopLevel(self):
        return self._stateMachine2TopLevel

    def exitStateMachine1(self):
        if self._stateMachine1 == Lamp.StateMachine1.topLevel :
            self.exitStateMachine1TopLevel()

    def setStateMachine1(self, aStateMachine1):
        self._stateMachine1 = aStateMachine1
        # entry actions and do activities
        if self._stateMachine1 == Lamp.StateMachine1.topLevel :
            if self._stateMachine1TopLevel == Lamp.StateMachine1TopLevel.Null :
                self.setStateMachine1TopLevel(Lamp.StateMachine1TopLevel.thread1)

    def exitStateMachine2(self):
        if self._stateMachine2 == Lamp.StateMachine1.topLevel :
            self.exitStateMachine2TopLevel()

    def setStateMachine2(self, aStateMachine2):
        self._stateMachine2 = aStateMachine2
        # entry actions and do activities
        if self._stateMachine2 == Lamp.StateMachine1.topLevel :
            if self._stateMachine2TopLevel == Lamp.StateMachine2TopLevel.Null :
                self.setStateMachine2TopLevel(Lamp.StateMachine2TopLevel.thread1)

    def exitStateMachine1TopLevel(self):
        if self._stateMachine1TopLevel == Lamp.StateMachine1TopLevel.thread1 :
            self.setStateMachine1TopLevel(Lamp.StateMachine1TopLevel.Null)
            if not (self._doActivityStateMachine1TopLevelThread1Thread is None) :
                self._doActivityStateMachine1TopLevelThread1Thread.interrupt()

    def setStateMachine1TopLevel(self, aStateMachine1TopLevel):
        self._stateMachine1TopLevel = aStateMachine1TopLevel
        if self._stateMachine1 != Lamp.StateMachine1.topLevel and aStateMachine1TopLevel != Lamp.StateMachine1TopLevel.Null :
            self.setStateMachine1(Lamp.StateMachine1.topLevel)
        # entry actions and do activities
        if self._stateMachine1TopLevel == Lamp.StateMachine1TopLevel.thread1 :
            self._doActivityStateMachine1TopLevelThread1Thread = Lamp.DoActivityThread(self, "doActivityStateMachine1TopLevelThread1")

    def exitStateMachine2TopLevel(self):
        if self._stateMachine2TopLevel == Lamp.StateMachine1TopLevel.thread1 :
            self.setStateMachine2TopLevel(Lamp.StateMachine2TopLevel.Null)
            if not (self._doActivityStateMachine2TopLevelThread1Thread is None) :
                self._doActivityStateMachine2TopLevelThread1Thread.interrupt()

    def setStateMachine2TopLevel(self, aStateMachine2TopLevel):
        self._stateMachine2TopLevel = aStateMachine2TopLevel
        if self._stateMachine2 != Lamp.StateMachine2.topLevel and aStateMachine2TopLevel != Lamp.StateMachine2TopLevel.Null :
            self.setStateMachine2(Lamp.StateMachine2.topLevel)
        # entry actions and do activities
        if self._stateMachine2TopLevel == Lamp.StateMachine1TopLevel.thread1 :
            self._doActivityStateMachine2TopLevelThread1Thread = Lamp.DoActivityThread(self, "doActivityStateMachine2TopLevelThread1")

    def doActivityStateMachine1TopLevelThread1(self):
        try:
            log = "Active entry"
        except :
            pass

    def doActivityStateMachine2TopLevelThread1(self):
        try:
            log = "Active entry"
        except :
            pass

    class DoActivityThread(Thread):
        def __init__(self, aController, aDoActivityMethodName):
            self._doActivityMethodName = None
            self._controller = None
            self._controller = aController
            self._doActivityMethodName = aDoActivityMethodName
            # The equivalent of "start();" for starting a python thread
            super().__init__()
            self.start()

        def run(self):
            if "doActivityStateMachine1TopLevelThread1" == self._doActivityMethodName :
                self._controller.doActivityStateMachine1TopLevelThread1()
            elif "doActivityStateMachine2TopLevelThread1" == self._doActivityMethodName :
                self._controller.doActivityStateMachine2TopLevelThread1()

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "log" + ":" + str(self.getLog()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../doActivityPython.ump"
from enum import Enum, auto
from threading import Thread
import time

class Switch():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Switch State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        On = auto()
        Off = auto()

    #Switch Do Activity Threads
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._doActivityStatusOffThread = None
        self._status = None
        self.setStatus(Switch.Status.On)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def press(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Switch.Status.On :
            self.setStatus(Switch.Status.Off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitStatus(self):
        if self._status == Switch.Status.Off :
            if not (self._doActivityStatusOffThread is None) :
                self._doActivityStatusOffThread.interrupt()

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == Switch.Status.Off :
            self._doActivityStatusOffThread = Switch.DoActivityThread(self, "doActivityStatusOff")

    def doActivityStatusOff(self):
        try:
            keepDoing()
        except :
            pass

    class DoActivityThread(Thread):
        def __init__(self, aController, aDoActivityMethodName):
            self._doActivityMethodName = None
            self._controller = None
            self._controller = aController
            self._doActivityMethodName = aDoActivityMethodName
            # The equivalent of "start();" for starting a python thread
            super().__init__()
            self.start()

        def run(self):
            if "doActivityStatusOff" == self._doActivityMethodName :
                self._controller.doActivityStatusOff()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "guardNameBothAttributeAndMethodPython.ump"
from enum import Enum, auto

class A():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #A Attributes
    #A State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s2 = auto()
        s3 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self._repeatCheck = None
        self._repeatCheck = False
        self.setStatus(A.Status.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def setRepeatCheck(self, aRepeatCheck):
        wasSet = False
        self._repeatCheck = aRepeatCheck
        wasSet = True
        return wasSet

    def getRepeatCheck(self):
        return self._repeatCheck

    # Code from template attribute_IsBoolean 
    def isRepeatCheck(self):
        return self._repeatCheck

    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def __autotransition1__(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == A.Status.s1 :
            if self.repeatCheck() :
                self.setStatus(A.Status.s2)
                wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == A.Status.s1 :
            self.__autotransition1__()

    def delete(self):
        pass

    # line 15 "guardNameBothAttributeAndMethodPython.ump"
    def repeatCheck(self):
        return True

    def __str__(self):
        return str(super().__str__()) + "[" + "repeatCheck" + ":" + str(self.getRepeatCheck()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../doActivityMultiMixinPython.ump"
# line 14 "../doActivityMultiMixinPython.ump"
from enum import Enum, auto
from threading import Thread
import time

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s2 = auto()

    #X Do Activity Threads
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._doActivity1SmS1Thread = None
        self._doActivity0SmS1Thread = None
        self._sm = None
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        return answer

    def getSm(self):
        return self._sm

    def e1(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.s1 :
            self.exitSm()
            self.setSm(X.Sm.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s1 :
            if not (self._doActivity0SmS1Thread is None) :
                self._doActivity0SmS1Thread.interrupt()
            if not (self._doActivity1SmS1Thread is None) :
                self._doActivity1SmS1Thread.interrupt()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s1 :
            self._doActivity0SmS1Thread = X.DoActivityThread(self, "doActivity0SmS1")
            self._doActivity1SmS1Thread = X.DoActivityThread(self, "doActivity1SmS1")

    def doActivity0SmS1(self):
        try:
            blah1()
        except :
            pass

    def doActivity1SmS1(self):
        try:
            blah2()
        except :
            pass

    class DoActivityThread(Thread):
        def __init__(self, aController, aDoActivityMethodName):
            self._doActivityMethodName = None
            self._controller = None
            self._controller = aController
            self._doActivityMethodName = aDoActivityMethodName
            # The equivalent of "start();" for starting a python thread
            super().__init__()
            self.start()

        def run(self):
            if "doActivity0SmS1" == self._doActivityMethodName :
                self._controller.doActivity0SmS1()
            elif "doActivity1SmS1" == self._doActivityMethodName :
                self._controller.doActivity1SmS1()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "testRegionFinalStates_1.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s4 = auto()

    class SmS1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s2 = auto()
        s3 = auto()

    class SmS4(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s5 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smS4 = None
        self._smS1 = None
        self._sm = None
        self.setSmS1(X.SmS1.Null)
        self.setSmS4(X.SmS4.Null)
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smS1 != X.SmS1.Null :
            answer += "." + self._smS1.__str__()
        if self._smS4 != X.SmS4.Null :
            answer += "." + self._smS4.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmS1(self):
        return self._smS1

    def getSmS4(self):
        return self._smS4

    def goToS5(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.s4 :
            self.exitSmS4()
            self.setSmS4(X.SmS4.s5)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToS3(self):
        wasEventProcessed = False
        aSmS1 = self._smS1
        if aSmS1 == X.SmS1.s2 :
            self.exitSmS1()
            self.setSmS1(X.SmS1.s3)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToS4(self):
        wasEventProcessed = False
        aSmS1 = self._smS1
        if aSmS1 == X.SmS1.s2 :
            self.exitSm()
            self.setSm(X.Sm.s4)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s1 :
            self.exitSmS1()
        elif self._sm == X.Sm.s4 :
            self.exitSmS4()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s1 :
            if self._smS1 == X.SmS1.Null :
                self.setSmS1(X.SmS1.s2)
        elif self._sm == X.Sm.s4 :
            if self._smS4 == X.SmS4.Null :
                self.setSmS4(X.SmS4.s5)

    def exitSmS1(self):
        if self._smS1 == X.SmS1.s2 :
            self.setSmS1(X.SmS1.Null)
        elif self._smS1 == X.SmS1.s3 :
            self.setSmS1(X.SmS1.Null)

    def setSmS1(self, aSmS1):
        self._smS1 = aSmS1
        if self._sm != X.Sm.s1 and aSmS1 != X.SmS1.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1 == X.SmS1.s3 :
            self.delete()

    def exitSmS4(self):
        if self._smS4 == X.SmS4.s5 :
            self.setSmS4(X.SmS4.Null)

    def setSmS4(self, aSmS4):
        self._smS4 = aSmS4
        if self._sm != X.Sm.s4 and aSmS4 != X.SmS4.Null :
            self.setSm(X.Sm.s4)
        # entry actions and do activities
        if self._smS4 == X.SmS4.s5 :
            self.delete()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "testRegionFinalStates_2.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()

    class SmS1S2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s2 = auto()

    class SmS1S3(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s3 = auto()

    class SmS1S3S3(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s4 = auto()
        s5 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smS1S3S3 = None
        self._smS1S3 = None
        self._smS1S2 = None
        self._sm = None
        self.setSmS1S2(X.SmS1S2.Null)
        self.setSmS1S3(X.SmS1S3.Null)
        self.setSmS1S3S3(X.SmS1S3S3.Null)
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smS1S2 != X.SmS1S2.Null :
            answer += "." + self._smS1S2.__str__()
        if self._smS1S3 != X.SmS1S3.Null :
            answer += "." + self._smS1S3.__str__()
        if self._smS1S3S3 != X.SmS1S3S3.Null :
            answer += "." + self._smS1S3S3.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmS1S2(self):
        return self._smS1S2

    def getSmS1S3(self):
        return self._smS1S3

    def getSmS1S3S3(self):
        return self._smS1S3S3

    def goToS3(self):
        wasEventProcessed = False
        aSmS1S2 = self._smS1S2
        if aSmS1S2 == X.SmS1S2.s2 :
            self.exitSmS1S2()
            self.setSmS1S3(X.SmS1S3.s3)
            self.setSmS1S2(X.SmS1S2.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToS5(self):
        wasEventProcessed = False
        aSmS1S3S3 = self._smS1S3S3
        if aSmS1S3S3 == X.SmS1S3S3.s4 :
            self.exitSmS1S3S3()
            self.setSmS1S3S3(X.SmS1S3S3.s5)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s1 :
            self.exitSmS1S2()
            self.exitSmS1S3()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s1 :
            if self._smS1S2 == X.SmS1S2.Null :
                self.setSmS1S2(X.SmS1S2.s2)
            if self._smS1S3 == X.SmS1S3.Null :
                self.setSmS1S3(X.SmS1S3.s3)

    def exitSmS1S2(self):
        if self._smS1S2 == X.SmS1S2.s2 :
            self.setSmS1S2(X.SmS1S2.Null)

    def setSmS1S2(self, aSmS1S2):
        self._smS1S2 = aSmS1S2
        if self._sm != X.Sm.s1 and aSmS1S2 != X.SmS1S2.Null :
            self.setSm(X.Sm.s1)

    def exitSmS1S3(self):
        if self._smS1S3 == X.SmS1S3.s3 :
            self.exitSmS1S3S3()
            self.setSmS1S3(X.SmS1S3.Null)

    def setSmS1S3(self, aSmS1S3):
        self._smS1S3 = aSmS1S3
        if self._sm != X.Sm.s1 and aSmS1S3 != X.SmS1S3.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1S3 == X.SmS1S3.s3 :
            if self._smS1S3S3 == X.SmS1S3S3.Null :
                self.setSmS1S3S3(X.SmS1S3S3.s4)

    def exitSmS1S3S3(self):
        if self._smS1S3S3 == X.SmS1S3S3.s4 :
            self.setSmS1S3S3(X.SmS1S3S3.Null)
        elif self._smS1S3S3 == X.SmS1S3S3.s5 :
            self.setSmS1S3S3(X.SmS1S3S3.Null)

    def setSmS1S3S3(self, aSmS1S3S3):
        self._smS1S3S3 = aSmS1S3S3
        if self._smS1S3 != X.SmS1S3.s3 and aSmS1S3S3 != X.SmS1S3S3.Null :
            self.setSmS1S3(X.SmS1S3.s3)
        # entry actions and do activities
        if self._smS1S3S3 == X.SmS1S3S3.s5 :
            self.delete()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "testRegionFinalStates_3.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()

    class SmS1S2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s2 = auto()

    class SmS1S2S2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s3 = auto()
        s4 = auto()

    class SmS1S5(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s5 = auto()

    class SmS1S5S5(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s6 = auto()
        s7 = auto()

    class SmS1S8(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s8 = auto()

    class SmS1S8S8(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s9 = auto()
        s10 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smS1S8S8 = None
        self._smS1S8 = None
        self._smS1S5S5 = None
        self._smS1S5 = None
        self._smS1S2S2 = None
        self._smS1S2 = None
        self._sm = None
        self.setSmS1S2(X.SmS1S2.Null)
        self.setSmS1S2S2(X.SmS1S2S2.Null)
        self.setSmS1S5(X.SmS1S5.Null)
        self.setSmS1S5S5(X.SmS1S5S5.Null)
        self.setSmS1S8(X.SmS1S8.Null)
        self.setSmS1S8S8(X.SmS1S8S8.Null)
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smS1S2 != X.SmS1S2.Null :
            answer += "." + self._smS1S2.__str__()
        if self._smS1S2S2 != X.SmS1S2S2.Null :
            answer += "." + self._smS1S2S2.__str__()
        if self._smS1S5 != X.SmS1S5.Null :
            answer += "." + self._smS1S5.__str__()
        if self._smS1S5S5 != X.SmS1S5S5.Null :
            answer += "." + self._smS1S5S5.__str__()
        if self._smS1S8 != X.SmS1S8.Null :
            answer += "." + self._smS1S8.__str__()
        if self._smS1S8S8 != X.SmS1S8S8.Null :
            answer += "." + self._smS1S8S8.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmS1S2(self):
        return self._smS1S2

    def getSmS1S2S2(self):
        return self._smS1S2S2

    def getSmS1S5(self):
        return self._smS1S5

    def getSmS1S5S5(self):
        return self._smS1S5S5

    def getSmS1S8(self):
        return self._smS1S8

    def getSmS1S8S8(self):
        return self._smS1S8S8

    def goToS4(self):
        wasEventProcessed = False
        aSmS1S2S2 = self._smS1S2S2
        if aSmS1S2S2 == X.SmS1S2S2.s3 :
            self.exitSmS1S2S2()
            self.setSmS1S2S2(X.SmS1S2S2.s4)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToS7(self):
        wasEventProcessed = False
        aSmS1S5S5 = self._smS1S5S5
        if aSmS1S5S5 == X.SmS1S5S5.s6 :
            self.exitSmS1S5S5()
            self.setSmS1S5S5(X.SmS1S5S5.s7)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToS10(self):
        wasEventProcessed = False
        aSmS1S8S8 = self._smS1S8S8
        if aSmS1S8S8 == X.SmS1S8S8.s9 :
            self.exitSmS1S8S8()
            self.setSmS1S8S8(X.SmS1S8S8.s10)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s1 :
            self.exitSmS1S2()
            self.exitSmS1S5()
            self.exitSmS1S8()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s1 :
            if self._smS1S2 == X.SmS1S2.Null :
                self.setSmS1S2(X.SmS1S2.s2)
            if self._smS1S5 == X.SmS1S5.Null :
                self.setSmS1S5(X.SmS1S5.s5)
            if self._smS1S8 == X.SmS1S8.Null :
                self.setSmS1S8(X.SmS1S8.s8)

    def exitSmS1S2(self):
        if self._smS1S2 == X.SmS1S2.s2 :
            self.exitSmS1S2S2()
            self.setSmS1S2(X.SmS1S2.Null)

    def setSmS1S2(self, aSmS1S2):
        self._smS1S2 = aSmS1S2
        if self._sm != X.Sm.s1 and aSmS1S2 != X.SmS1S2.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1S2 == X.SmS1S2.s2 :
            if self._smS1S2S2 == X.SmS1S2S2.Null :
                self.setSmS1S2S2(X.SmS1S2S2.s3)

    def exitSmS1S2S2(self):
        if self._smS1S2S2 == X.SmS1S2S2.s3 :
            self.setSmS1S2S2(X.SmS1S2S2.Null)
        elif self._smS1S2S2 == X.SmS1S2S2.s4 :
            self.setSmS1S2S2(X.SmS1S2S2.Null)

    def setSmS1S2S2(self, aSmS1S2S2):
        self._smS1S2S2 = aSmS1S2S2
        if self._smS1S2 != X.SmS1S2.s2 and aSmS1S2S2 != X.SmS1S2S2.Null :
            self.setSmS1S2(X.SmS1S2.s2)
        # entry actions and do activities
        if self._smS1S2S2 == X.SmS1S2S2.s4 :
            if self._smS1S5S5 == X.SmS1S5S5.s7 and self._smS1S8S8 == X.SmS1S8S8.s10 :
                self.delete()

    def exitSmS1S5(self):
        if self._smS1S5 == X.SmS1S5.s5 :
            self.exitSmS1S5S5()
            self.setSmS1S5(X.SmS1S5.Null)

    def setSmS1S5(self, aSmS1S5):
        self._smS1S5 = aSmS1S5
        if self._sm != X.Sm.s1 and aSmS1S5 != X.SmS1S5.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1S5 == X.SmS1S5.s5 :
            if self._smS1S5S5 == X.SmS1S5S5.Null :
                self.setSmS1S5S5(X.SmS1S5S5.s6)

    def exitSmS1S5S5(self):
        if self._smS1S5S5 == X.SmS1S5S5.s6 :
            self.setSmS1S5S5(X.SmS1S5S5.Null)
        elif self._smS1S5S5 == X.SmS1S5S5.s7 :
            self.setSmS1S5S5(X.SmS1S5S5.Null)

    def setSmS1S5S5(self, aSmS1S5S5):
        self._smS1S5S5 = aSmS1S5S5
        if self._smS1S5 != X.SmS1S5.s5 and aSmS1S5S5 != X.SmS1S5S5.Null :
            self.setSmS1S5(X.SmS1S5.s5)
        # entry actions and do activities
        if self._smS1S5S5 == X.SmS1S5S5.s7 :
            if self._smS1S2S2 == X.SmS1S2S2.s4 and self._smS1S8S8 == X.SmS1S8S8.s10 :
                self.delete()

    def exitSmS1S8(self):
        if self._smS1S8 == X.SmS1S8.s8 :
            self.exitSmS1S8S8()
            self.setSmS1S8(X.SmS1S8.Null)

    def setSmS1S8(self, aSmS1S8):
        self._smS1S8 = aSmS1S8
        if self._sm != X.Sm.s1 and aSmS1S8 != X.SmS1S8.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1S8 == X.SmS1S8.s8 :
            if self._smS1S8S8 == X.SmS1S8S8.Null :
                self.setSmS1S8S8(X.SmS1S8S8.s9)

    def exitSmS1S8S8(self):
        if self._smS1S8S8 == X.SmS1S8S8.s9 :
            self.setSmS1S8S8(X.SmS1S8S8.Null)
        elif self._smS1S8S8 == X.SmS1S8S8.s10 :
            self.setSmS1S8S8(X.SmS1S8S8.Null)

    def setSmS1S8S8(self, aSmS1S8S8):
        self._smS1S8S8 = aSmS1S8S8
        if self._smS1S8 != X.SmS1S8.s8 and aSmS1S8S8 != X.SmS1S8S8.Null :
            self.setSmS1S8(X.SmS1S8.s8)
        # entry actions and do activities
        if self._smS1S8S8 == X.SmS1S8S8.s10 :
            if self._smS1S2S2 == X.SmS1S2S2.s4 and self._smS1S5S5 == X.SmS1S5S5.s7 :
                self.delete()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "testRegionFinalStates_4.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        Final = auto()
        s2 = auto()

    class SmS1O1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        o1 = auto()

    class SmS1O1O1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        o1Start = auto()
        o1Final = auto()

    class SmS1O2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        o2 = auto()

    class SmS1O2O2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        o2Start = auto()
        o2Final = auto()

    class SmS2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s2Start = auto()
        s2Final = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smS2 = None
        self._smS1O2O2 = None
        self._smS1O2 = None
        self._smS1O1O1 = None
        self._smS1O1 = None
        self._sm = None
        self.setSmS1O1(X.SmS1O1.Null)
        self.setSmS1O1O1(X.SmS1O1O1.Null)
        self.setSmS1O2(X.SmS1O2.Null)
        self.setSmS1O2O2(X.SmS1O2O2.Null)
        self.setSmS2(X.SmS2.Null)
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smS1O1 != X.SmS1O1.Null :
            answer += "." + self._smS1O1.__str__()
        if self._smS1O1O1 != X.SmS1O1O1.Null :
            answer += "." + self._smS1O1O1.__str__()
        if self._smS1O2 != X.SmS1O2.Null :
            answer += "." + self._smS1O2.__str__()
        if self._smS1O2O2 != X.SmS1O2O2.Null :
            answer += "." + self._smS1O2O2.__str__()
        if self._smS2 != X.SmS2.Null :
            answer += "." + self._smS2.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmS1O1(self):
        return self._smS1O1

    def getSmS1O1O1(self):
        return self._smS1O1O1

    def getSmS1O2(self):
        return self._smS1O2

    def getSmS1O2O2(self):
        return self._smS1O2O2

    def getSmS2(self):
        return self._smS2

    def goToS2(self):
        wasEventProcessed = False
        aSmS1O1 = self._smS1O1
        if aSmS1O1 == X.SmS1O1.o1 :
            self.exitSm()
            self.setSm(X.Sm.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goBigFinal(self):
        wasEventProcessed = False
        aSmS1O1O1 = self._smS1O1O1
        if aSmS1O1O1 == X.SmS1O1O1.o1Start :
            self.exitSm()
            self.setSm(X.Sm.Final)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def completeO1(self):
        wasEventProcessed = False
        aSmS1O1O1 = self._smS1O1O1
        if aSmS1O1O1 == X.SmS1O1O1.o1Start :
            self.exitSmS1O1O1()
            self.setSmS1O1O1(X.SmS1O1O1.o1Final)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def completeO2(self):
        wasEventProcessed = False
        aSmS1O2O2 = self._smS1O2O2
        if aSmS1O2O2 == X.SmS1O2O2.o2Start :
            self.exitSmS1O2O2()
            self.setSmS1O2O2(X.SmS1O2O2.o2Final)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def completeS2(self):
        wasEventProcessed = False
        aSmS2 = self._smS2
        if aSmS2 == X.SmS2.s2Start :
            self.exitSmS2()
            self.setSmS2(X.SmS2.s2Final)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s1 :
            self.exitSmS1O1()
            self.exitSmS1O2()
        elif self._sm == X.Sm.s2 :
            self.exitSmS2()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s1 :
            if self._smS1O1 == X.SmS1O1.Null :
                self.setSmS1O1(X.SmS1O1.o1)
            if self._smS1O2 == X.SmS1O2.Null :
                self.setSmS1O2(X.SmS1O2.o2)
        elif self._sm == X.Sm.Final :
            self.delete()
        elif self._sm == X.Sm.s2 :
            if self._smS2 == X.SmS2.Null :
                self.setSmS2(X.SmS2.s2Start)

    def exitSmS1O1(self):
        if self._smS1O1 == X.SmS1O1.o1 :
            self.exitSmS1O1O1()
            self.setSmS1O1(X.SmS1O1.Null)

    def setSmS1O1(self, aSmS1O1):
        self._smS1O1 = aSmS1O1
        if self._sm != X.Sm.s1 and aSmS1O1 != X.SmS1O1.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1O1 == X.SmS1O1.o1 :
            if self._smS1O1O1 == X.SmS1O1O1.Null :
                self.setSmS1O1O1(X.SmS1O1O1.o1Start)

    def exitSmS1O1O1(self):
        if self._smS1O1O1 == X.SmS1O1O1.o1Start :
            self.setSmS1O1O1(X.SmS1O1O1.Null)
        elif self._smS1O1O1 == X.SmS1O1O1.o1Final :
            self.setSmS1O1O1(X.SmS1O1O1.Null)

    def setSmS1O1O1(self, aSmS1O1O1):
        self._smS1O1O1 = aSmS1O1O1
        if self._smS1O1 != X.SmS1O1.o1 and aSmS1O1O1 != X.SmS1O1O1.Null :
            self.setSmS1O1(X.SmS1O1.o1)
        # entry actions and do activities
        if self._smS1O1O1 == X.SmS1O1O1.o1Final :
            if self._smS1O2O2 == X.SmS1O2O2.o2Final :
                self.delete()

    def exitSmS1O2(self):
        if self._smS1O2 == X.SmS1O2.o2 :
            self.exitSmS1O2O2()
            self.setSmS1O2(X.SmS1O2.Null)

    def setSmS1O2(self, aSmS1O2):
        self._smS1O2 = aSmS1O2
        if self._sm != X.Sm.s1 and aSmS1O2 != X.SmS1O2.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1O2 == X.SmS1O2.o2 :
            if self._smS1O2O2 == X.SmS1O2O2.Null :
                self.setSmS1O2O2(X.SmS1O2O2.o2Start)

    def exitSmS1O2O2(self):
        if self._smS1O2O2 == X.SmS1O2O2.o2Start :
            self.setSmS1O2O2(X.SmS1O2O2.Null)
        elif self._smS1O2O2 == X.SmS1O2O2.o2Final :
            self.setSmS1O2O2(X.SmS1O2O2.Null)

    def setSmS1O2O2(self, aSmS1O2O2):
        self._smS1O2O2 = aSmS1O2O2
        if self._smS1O2 != X.SmS1O2.o2 and aSmS1O2O2 != X.SmS1O2O2.Null :
            self.setSmS1O2(X.SmS1O2.o2)
        # entry actions and do activities
        if self._smS1O2O2 == X.SmS1O2O2.o2Final :
            if self._smS1O1O1 == X.SmS1O1O1.o1Final :
                self.delete()

    def exitSmS2(self):
        if self._smS2 == X.SmS2.s2Start :
            self.setSmS2(X.SmS2.Null)
        elif self._smS2 == X.SmS2.s2Final :
            self.setSmS2(X.SmS2.Null)

    def setSmS2(self, aSmS2):
        self._smS2 = aSmS2
        if self._sm != X.Sm.s2 and aSmS2 != X.SmS2.Null :
            self.setSm(X.Sm.s2)
        # entry actions and do activities
        if self._smS2 == X.SmS2.s2Final :
            self.delete()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "testRegionFinalStates_5.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        o1 = auto()

    class SmO1S1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s1 = auto()

    class SmO1S1S2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s2 = auto()

    class SmO1S1S2S2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s3 = auto()
        s4 = auto()

    class SmO1S1S5(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s5 = auto()

    class SmO1S1S5S5(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s6 = auto()

    class SmO1S7(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s7 = auto()

    class SmO1S7S7(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s8 = auto()
        s9 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smO1S7S7 = None
        self._smO1S7 = None
        self._smO1S1S5S5 = None
        self._smO1S1S5 = None
        self._smO1S1S2S2 = None
        self._smO1S1S2 = None
        self._smO1S1 = None
        self._sm = None
        self.setSmO1S1(X.SmO1S1.Null)
        self.setSmO1S1S2(X.SmO1S1S2.Null)
        self.setSmO1S1S2S2(X.SmO1S1S2S2.Null)
        self.setSmO1S1S5(X.SmO1S1S5.Null)
        self.setSmO1S1S5S5(X.SmO1S1S5S5.Null)
        self.setSmO1S7(X.SmO1S7.Null)
        self.setSmO1S7S7(X.SmO1S7S7.Null)
        self.setSm(X.Sm.o1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smO1S1 != X.SmO1S1.Null :
            answer += "." + self._smO1S1.__str__()
        if self._smO1S1S2 != X.SmO1S1S2.Null :
            answer += "." + self._smO1S1S2.__str__()
        if self._smO1S1S2S2 != X.SmO1S1S2S2.Null :
            answer += "." + self._smO1S1S2S2.__str__()
        if self._smO1S1S5 != X.SmO1S1S5.Null :
            answer += "." + self._smO1S1S5.__str__()
        if self._smO1S1S5S5 != X.SmO1S1S5S5.Null :
            answer += "." + self._smO1S1S5S5.__str__()
        if self._smO1S7 != X.SmO1S7.Null :
            answer += "." + self._smO1S7.__str__()
        if self._smO1S7S7 != X.SmO1S7S7.Null :
            answer += "." + self._smO1S7S7.__str__()
        if self._smO1S1S2S2 != X.SmO1S1S2S2.Null :
            answer += "." + self._smO1S1S2S2.__str__()
        if self._smO1S1S5S5 != X.SmO1S1S5S5.Null :
            answer += "." + self._smO1S1S5S5.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmO1S1(self):
        return self._smO1S1

    def getSmO1S1S2(self):
        return self._smO1S1S2

    def getSmO1S1S2S2(self):
        return self._smO1S1S2S2

    def getSmO1S1S5(self):
        return self._smO1S1S5

    def getSmO1S1S5S5(self):
        return self._smO1S1S5S5

    def getSmO1S7(self):
        return self._smO1S7

    def getSmO1S7S7(self):
        return self._smO1S7S7

    def goToS4Final(self):
        wasEventProcessed = False
        aSmO1S1S2S2 = self._smO1S1S2S2
        if aSmO1S1S2S2 == X.SmO1S1S2S2.s3 :
            self.exitSmO1S1S2S2()
            self.setSmO1S1S2S2(X.SmO1S1S2S2.s4)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToS9Final(self):
        wasEventProcessed = False
        aSmO1S7S7 = self._smO1S7S7
        if aSmO1S7S7 == X.SmO1S7S7.s8 :
            self.exitSmO1S7S7()
            self.setSmO1S7S7(X.SmO1S7S7.s9)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.o1 :
            self.exitSmO1S1()
            self.exitSmO1S7()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.o1 :
            if self._smO1S1 == X.SmO1S1.Null :
                self.setSmO1S1(X.SmO1S1.s1)
            if self._smO1S7 == X.SmO1S7.Null :
                self.setSmO1S7(X.SmO1S7.s7)

    def exitSmO1S1(self):
        if self._smO1S1 == X.SmO1S1.s1 :
            self.exitSmO1S1S2()
            self.exitSmO1S1S5()
            self.setSmO1S1(X.SmO1S1.Null)

    def setSmO1S1(self, aSmO1S1):
        self._smO1S1 = aSmO1S1
        if self._sm != X.Sm.o1 and aSmO1S1 != X.SmO1S1.Null :
            self.setSm(X.Sm.o1)
        # entry actions and do activities
        if self._smO1S1 == X.SmO1S1.s1 :
            if self._smO1S1S2 == X.SmO1S1S2.Null :
                self.setSmO1S1S2(X.SmO1S1S2.s2)
            if self._smO1S1S5 == X.SmO1S1S5.Null :
                self.setSmO1S1S5(X.SmO1S1S5.s5)

    def exitSmO1S1S2(self):
        if self._smO1S1S2 == X.SmO1S1S2.s2 :
            self.exitSmO1S1S2S2()
            self.setSmO1S1S2(X.SmO1S1S2.Null)

    def setSmO1S1S2(self, aSmO1S1S2):
        self._smO1S1S2 = aSmO1S1S2
        if self._smO1S1 != X.SmO1S1.s1 and aSmO1S1S2 != X.SmO1S1S2.Null :
            self.setSmO1S1(X.SmO1S1.s1)
        # entry actions and do activities
        if self._smO1S1S2 == X.SmO1S1S2.s2 :
            if self._smO1S1S2S2 == X.SmO1S1S2S2.Null :
                self.setSmO1S1S2S2(X.SmO1S1S2S2.s3)

    def exitSmO1S1S2S2(self):
        if self._smO1S1S2S2 == X.SmO1S1S2S2.s3 :
            self.setSmO1S1S2S2(X.SmO1S1S2S2.Null)
        elif self._smO1S1S2S2 == X.SmO1S1S2S2.s4 :
            self.setSmO1S1S2S2(X.SmO1S1S2S2.Null)

    def setSmO1S1S2S2(self, aSmO1S1S2S2):
        self._smO1S1S2S2 = aSmO1S1S2S2
        if self._smO1S1S2 != X.SmO1S1S2.s2 and aSmO1S1S2S2 != X.SmO1S1S2S2.Null :
            self.setSmO1S1S2(X.SmO1S1S2.s2)
        # entry actions and do activities
        if self._smO1S1S2S2 == X.SmO1S1S2S2.s4 :
            if self._smO1S1S5S5 == X.SmO1S1S5S5.s6 and self._smO1S7S7 == X.SmO1S7S7.s9 :
                self.delete()

    def exitSmO1S1S5(self):
        if self._smO1S1S5 == X.SmO1S1S5.s5 :
            self.exitSmO1S1S5S5()
            self.setSmO1S1S5(X.SmO1S1S5.Null)

    def setSmO1S1S5(self, aSmO1S1S5):
        self._smO1S1S5 = aSmO1S1S5
        if self._smO1S1 != X.SmO1S1.s1 and aSmO1S1S5 != X.SmO1S1S5.Null :
            self.setSmO1S1(X.SmO1S1.s1)
        # entry actions and do activities
        if self._smO1S1S5 == X.SmO1S1S5.s5 :
            if self._smO1S1S5S5 == X.SmO1S1S5S5.Null :
                self.setSmO1S1S5S5(X.SmO1S1S5S5.s6)

    def exitSmO1S1S5S5(self):
        if self._smO1S1S5S5 == X.SmO1S1S5S5.s6 :
            self.setSmO1S1S5S5(X.SmO1S1S5S5.Null)

    def setSmO1S1S5S5(self, aSmO1S1S5S5):
        self._smO1S1S5S5 = aSmO1S1S5S5
        if self._smO1S1S5 != X.SmO1S1S5.s5 and aSmO1S1S5S5 != X.SmO1S1S5S5.Null :
            self.setSmO1S1S5(X.SmO1S1S5.s5)
        # entry actions and do activities
        if self._smO1S1S5S5 == X.SmO1S1S5S5.s6 :
            if self._smO1S1S2S2 == X.SmO1S1S2S2.s4 and self._smO1S7S7 == X.SmO1S7S7.s9 :
                self.delete()

    def exitSmO1S7(self):
        if self._smO1S7 == X.SmO1S7.s7 :
            self.exitSmO1S7S7()
            self.setSmO1S7(X.SmO1S7.Null)

    def setSmO1S7(self, aSmO1S7):
        self._smO1S7 = aSmO1S7
        if self._sm != X.Sm.o1 and aSmO1S7 != X.SmO1S7.Null :
            self.setSm(X.Sm.o1)
        # entry actions and do activities
        if self._smO1S7 == X.SmO1S7.s7 :
            if self._smO1S7S7 == X.SmO1S7S7.Null :
                self.setSmO1S7S7(X.SmO1S7S7.s8)

    def exitSmO1S7S7(self):
        if self._smO1S7S7 == X.SmO1S7S7.s8 :
            self.setSmO1S7S7(X.SmO1S7S7.Null)
        elif self._smO1S7S7 == X.SmO1S7S7.s9 :
            self.setSmO1S7S7(X.SmO1S7S7.Null)

    def setSmO1S7S7(self, aSmO1S7S7):
        self._smO1S7S7 = aSmO1S7S7
        if self._smO1S7 != X.SmO1S7.s7 and aSmO1S7S7 != X.SmO1S7S7.Null :
            self.setSmO1S7(X.SmO1S7.s7)
        # entry actions and do activities
        if self._smO1S7S7 == X.SmO1S7S7.s9 :
            if self._smO1S1S2S2 == X.SmO1S1S2S2.s4 and self._smO1S1S5S5 == X.SmO1S1S5S5.s6 :
                self.delete()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "checkExternalTransitions_noNestedStateMachines.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s2 = auto()
        s3 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._sm = None
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        return answer

    def getSm(self):
        return self._sm

    def goToS2(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.s1 :
            self.setSm(X.Sm.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToS3(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.s2 :
            self.setSm(X.Sm.s3)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setSm(self, aSm):
        self._sm = aSm

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "stateMachineWithNegativeNumberGuard2.ump"
from enum import Enum, auto

class stateMachineWithNegativeNumberGuard2():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #stateMachineWithNegativeNumberGuard2 State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        on = auto()
        off = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(stateMachineWithNegativeNumberGuard2.Status.on)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def turnOff(self, pn):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == stateMachineWithNegativeNumberGuard2.Status.on :
            if pn < -1 :
                self.setStatus(stateMachineWithNegativeNumberGuard2.Status.off)
                wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def turnOn(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == stateMachineWithNegativeNumberGuard2.Status.off :
            self.setStatus(stateMachineWithNegativeNumberGuard2.Status.on)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "parallelSm_diffNamesDiffStates_2.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s0 = auto()
        s1 = auto()

    class SmS0T1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t1 = auto()

    class SmS0T2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t2 = auto()
        t3 = auto()

    class SmS1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s2 = auto()

    class SmS1S2T4(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t4 = auto()
        t5 = auto()

    class SmS1S2T6(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t6 = auto()
        t7 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smS1S2T6 = None
        self._smS1S2T4 = None
        self._smS1 = None
        self._smS0T2 = None
        self._smS0T1 = None
        self._sm = None
        self.setSmS0T1(X.SmS0T1.Null)
        self.setSmS0T2(X.SmS0T2.Null)
        self.setSmS1(X.SmS1.Null)
        self.setSmS1S2T4(X.SmS1S2T4.Null)
        self.setSmS1S2T6(X.SmS1S2T6.Null)
        self.setSm(X.Sm.s0)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smS0T1 != X.SmS0T1.Null :
            answer += "." + self._smS0T1.__str__()
        if self._smS0T2 != X.SmS0T2.Null :
            answer += "." + self._smS0T2.__str__()
        if self._smS1 != X.SmS1.Null :
            answer += "." + self._smS1.__str__()
        if self._smS1S2T4 != X.SmS1S2T4.Null :
            answer += "." + self._smS1S2T4.__str__()
        if self._smS1S2T6 != X.SmS1S2T6.Null :
            answer += "." + self._smS1S2T6.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmS0T1(self):
        return self._smS0T1

    def getSmS0T2(self):
        return self._smS0T2

    def getSmS1(self):
        return self._smS1

    def getSmS1S2T4(self):
        return self._smS1S2T4

    def getSmS1S2T6(self):
        return self._smS1S2T6

    def goS1(self):
        wasEventProcessed = False
        aSmS0T1 = self._smS0T1
        if aSmS0T1 == X.SmS0T1.t1 :
            self.exitSm()
            self.setSm(X.Sm.s1)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goT3(self):
        wasEventProcessed = False
        aSmS0T2 = self._smS0T2
        if aSmS0T2 == X.SmS0T2.t2 :
            self.exitSmS0T2()
            self.setSmS0T2(X.SmS0T2.t3)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goT5(self):
        wasEventProcessed = False
        aSmS1S2T4 = self._smS1S2T4
        if aSmS1S2T4 == X.SmS1S2T4.t4 :
            self.exitSmS1S2T4()
            self.setSmS1S2T4(X.SmS1S2T4.t5)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goT7(self):
        wasEventProcessed = False
        aSmS1S2T6 = self._smS1S2T6
        if aSmS1S2T6 == X.SmS1S2T6.t6 :
            self.exitSmS1S2T6()
            self.setSmS1S2T6(X.SmS1S2T6.t7)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s0 :
            self.exitSmS0T1()
            self.exitSmS0T2()
        elif self._sm == X.Sm.s1 :
            self.exitSmS1()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s0 :
            if self._smS0T1 == X.SmS0T1.Null :
                self.setSmS0T1(X.SmS0T1.t1)
            if self._smS0T2 == X.SmS0T2.Null :
                self.setSmS0T2(X.SmS0T2.t2)
        elif self._sm == X.Sm.s1 :
            if self._smS1 == X.SmS1.Null :
                self.setSmS1(X.SmS1.s2)

    def exitSmS0T1(self):
        if self._smS0T1 == X.SmS0T1.t1 :
            self.setSmS0T1(X.SmS0T1.Null)

    def setSmS0T1(self, aSmS0T1):
        self._smS0T1 = aSmS0T1
        if self._sm != X.Sm.s0 and aSmS0T1 != X.SmS0T1.Null :
            self.setSm(X.Sm.s0)

    def exitSmS0T2(self):
        if self._smS0T2 == X.SmS0T2.t2 :
            self.setSmS0T2(X.SmS0T2.Null)
        elif self._smS0T2 == X.SmS0T2.t3 :
            self.setSmS0T2(X.SmS0T2.Null)

    def setSmS0T2(self, aSmS0T2):
        self._smS0T2 = aSmS0T2
        if self._sm != X.Sm.s0 and aSmS0T2 != X.SmS0T2.Null :
            self.setSm(X.Sm.s0)

    def exitSmS1(self):
        if self._smS1 == X.SmS1.s2 :
            self.exitSmS1S2T4()
            self.exitSmS1S2T6()
            self.setSmS1(X.SmS1.Null)

    def setSmS1(self, aSmS1):
        self._smS1 = aSmS1
        if self._sm != X.Sm.s1 and aSmS1 != X.SmS1.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1 == X.SmS1.s2 :
            if self._smS1S2T4 == X.SmS1S2T4.Null :
                self.setSmS1S2T4(X.SmS1S2T4.t4)
            if self._smS1S2T6 == X.SmS1S2T6.Null :
                self.setSmS1S2T6(X.SmS1S2T6.t6)

    def exitSmS1S2T4(self):
        if self._smS1S2T4 == X.SmS1S2T4.t4 :
            self.setSmS1S2T4(X.SmS1S2T4.Null)
        elif self._smS1S2T4 == X.SmS1S2T4.t5 :
            self.setSmS1S2T4(X.SmS1S2T4.Null)

    def setSmS1S2T4(self, aSmS1S2T4):
        self._smS1S2T4 = aSmS1S2T4
        if self._smS1 != X.SmS1.s2 and aSmS1S2T4 != X.SmS1S2T4.Null :
            self.setSmS1(X.SmS1.s2)

    def exitSmS1S2T6(self):
        if self._smS1S2T6 == X.SmS1S2T6.t6 :
            self.setSmS1S2T6(X.SmS1S2T6.Null)
        elif self._smS1S2T6 == X.SmS1S2T6.t7 :
            self.setSmS1S2T6(X.SmS1S2T6.Null)

    def setSmS1S2T6(self, aSmS1S2T6):
        self._smS1S2T6 = aSmS1S2T6
        if self._smS1 != X.SmS1.s2 and aSmS1S2T6 != X.SmS1S2T6.Null :
            self.setSmS1(X.SmS1.s2)

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "testFinalKeyword.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        Final = auto()

    class SmS1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s2 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smS1 = None
        self._sm = None
        self.setSmS1(X.SmS1.Null)
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smS1 != X.SmS1.Null :
            answer += "." + self._smS1.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmS1(self):
        return self._smS1

    def goToFinal(self):
        wasEventProcessed = False
        aSmS1 = self._smS1
        if aSmS1 == X.SmS1.s2 :
            self.exitSm()
            self.setSm(X.Sm.Final)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s1 :
            self.exitSmS1()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s1 :
            if self._smS1 == X.SmS1.Null :
                self.setSmS1(X.SmS1.s2)
        elif self._sm == X.Sm.Final :
            self.delete()

    def exitSmS1(self):
        if self._smS1 == X.SmS1.s2 :
            self.setSmS1(X.SmS1.Null)

    def setSmS1(self, aSmS1):
        self._smS1 = aSmS1
        if self._sm != X.Sm.s1 and aSmS1 != X.SmS1.Null :
            self.setSm(X.Sm.s1)

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../transitionAction.ump"
from enum import Enum, auto

class Course():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Course State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Open = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(Course.Status.Open)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def register(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Course.Status.Open :
            # line 8 "../transitionAction.ump"
            print("transition")
            self.setStatus(Course.Status.Open)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "testFinalKeyword_2.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        Final = auto()
        s3 = auto()

    class SmS1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s2 = auto()

    class SmS3(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s4 = auto()

    class SmS3S4(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s5 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smS3S4 = None
        self._smS3 = None
        self._smS1 = None
        self._sm = None
        self.setSmS1(X.SmS1.Null)
        self.setSmS3(X.SmS3.Null)
        self.setSmS3S4(X.SmS3S4.Null)
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smS1 != X.SmS1.Null :
            answer += "." + self._smS1.__str__()
        if self._smS3 != X.SmS3.Null :
            answer += "." + self._smS3.__str__()
        if self._smS3S4 != X.SmS3S4.Null :
            answer += "." + self._smS3S4.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmS1(self):
        return self._smS1

    def getSmS3(self):
        return self._smS3

    def getSmS3S4(self):
        return self._smS3S4

    def goToS3(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.s1 :
            self.exitSm()
            self.setSm(X.Sm.s3)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToFinal(self):
        wasEventProcessed = False
        aSmS1 = self._smS1
        aSmS3S4 = self._smS3S4
        if aSmS1 == X.SmS1.s2 :
            self.exitSm()
            self.setSm(X.Sm.Final)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        if aSmS3S4 == X.SmS3S4.s5 :
            self.exitSm()
            self.setSm(X.Sm.Final)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s1 :
            self.exitSmS1()
        elif self._sm == X.Sm.s3 :
            self.exitSmS3()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s1 :
            if self._smS1 == X.SmS1.Null :
                self.setSmS1(X.SmS1.s2)
        elif self._sm == X.Sm.Final :
            self.delete()
        elif self._sm == X.Sm.s3 :
            if self._smS3 == X.SmS3.Null :
                self.setSmS3(X.SmS3.s4)

    def exitSmS1(self):
        if self._smS1 == X.SmS1.s2 :
            self.setSmS1(X.SmS1.Null)

    def setSmS1(self, aSmS1):
        self._smS1 = aSmS1
        if self._sm != X.Sm.s1 and aSmS1 != X.SmS1.Null :
            self.setSm(X.Sm.s1)

    def exitSmS3(self):
        if self._smS3 == X.SmS3.s4 :
            self.exitSmS3S4()
            self.setSmS3(X.SmS3.Null)

    def setSmS3(self, aSmS3):
        self._smS3 = aSmS3
        if self._sm != X.Sm.s3 and aSmS3 != X.SmS3.Null :
            self.setSm(X.Sm.s3)
        # entry actions and do activities
        if self._smS3 == X.SmS3.s4 :
            if self._smS3S4 == X.SmS3S4.Null :
                self.setSmS3S4(X.SmS3S4.s5)

    def exitSmS3S4(self):
        if self._smS3S4 == X.SmS3S4.s5 :
            self.setSmS3S4(X.SmS3S4.Null)

    def setSmS3S4(self, aSmS3S4):
        self._smS3S4 = aSmS3S4
        if self._smS3 != X.SmS3.s4 and aSmS3S4 != X.SmS3S4.Null :
            self.setSmS3(X.SmS3.s4)

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../FinalState.ump"
from enum import Enum, auto

class Mentor():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Mentor State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Ok = auto()
        Final = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(Mentor.Status.Ok)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def flip(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Mentor.Status.Ok :
            self.setStatus(Mentor.Status.Final)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == Mentor.Status.Final :
            self.delete()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../EventTransitionSpacing.ump"
from enum import Enum, auto

class Course():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Course State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Open = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(Course.Status.Open)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def register(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Course.Status.Open :
            self.setStatus(Course.Status.Open)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "stateMachine_UnspecifiedReception.ump"
from enum import Enum, auto

class Course():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Course State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Open = auto()
        Full = auto()
        error1 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(Course.Status.Open)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def register(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Course.Status.Open :
            self.setStatus(Course.Status.Full)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            wasEventProcessed = self.unspecified(self.getStatus().__str__(), "register")
        return wasEventProcessed

    def unspecified(self, state, event):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Course.Status.Open :
            self.setStatus(Course.Status.error1)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def reject(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Course.Status.Full :
            self.setStatus(Course.Status.Full)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def __autotransition1__(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Course.Status.error1 :
            self.setStatus(Course.Status.Open)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == Course.Status.error1 :
            self.__autotransition1__()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "eventWithArguments.ump"
from enum import Enum, auto

class LightFixture():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #LightFixture Attributes
    #LightFixture State Machines
    class Bulb(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Off = auto()
        Dimmed = auto()
        On = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._bulb = None
        self._brightness = None
        self._brightness = 0
        self.setBulb(LightFixture.Bulb.Off)

    #------------------------
    # INTERFACE
    #------------------------
    def setBrightness(self, aBrightness):
        wasSet = False
        self._brightness = aBrightness
        wasSet = True
        return wasSet

    def getBrightness(self):
        return self._brightness

    def getBulbFullName(self):
        answer = self._bulb.__str__()
        return answer

    def getBulb(self):
        return self._bulb

    def turnDimmer(self, lightval):
        wasEventProcessed = False
        aBulb = self._bulb
        if aBulb == LightFixture.Bulb.Off :
            # line 6 "eventWithArguments.ump"
            self.setBulb(LightFixture.Bulb.Off)
            wasEventProcessed = True
        elif aBulb == LightFixture.Bulb.Dimmed :
            # line 12 "eventWithArguments.ump"
            self.setBulb(LightFixture.Bulb.Dimmed)
            wasEventProcessed = True
        elif aBulb == LightFixture.Bulb.On :
            # line 16 "eventWithArguments.ump"
            self.setBulb(LightFixture.Bulb.Dimmed)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def flipSwitch(self):
        wasEventProcessed = False
        aBulb = self._bulb
        if aBulb == LightFixture.Bulb.Off :
            self.setBulb(LightFixture.Bulb.Dimmed)
            wasEventProcessed = True
        elif aBulb == LightFixture.Bulb.Dimmed :
            self.setBulb(LightFixture.Bulb.Off)
            wasEventProcessed = True
        elif aBulb == LightFixture.Bulb.On :
            self.setBulb(LightFixture.Bulb.Off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def entry(self):
        wasEventProcessed = False
        aBulb = self._bulb
        if aBulb == LightFixture.Bulb.Dimmed :
            if dimmer > 99 :
                self.setBulb(LightFixture.Bulb.On)
                wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setBulb(self, aBulb):
        self._bulb = aBulb

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "brightness" + ":" + str(self.getBrightness()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../entryAction.ump"
from enum import Enum, auto

class Light():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Light State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        On = auto()
        Off = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(Light.Status.On)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def flip(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Light.Status.On :
            self.setStatus(Light.Status.Off)
            wasEventProcessed = True
        elif aStatus == Light.Status.Off :
            self.setStatus(Light.Status.On)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == Light.Status.On :
            # line 8 "../entryAction.ump"
            print("entry")
            # line 9 "../entryAction.ump"
            print("entry2")

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../refactorFinalState_invalidElementsInNestedFinalState.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        on = auto()
        off = auto()
        FINAL = auto()

    class StatusFINAL(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        nestedSm = auto()

    class StatusFINALNestedSm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        nestedFinal = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._statusFINALNestedSm = None
        self._statusFINAL = None
        self._status = None
        self.setStatusFINAL(X.StatusFINAL.Null)
        self.setStatusFINALNestedSm(X.StatusFINALNestedSm.Null)
        self.setStatus(X.Status.on)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        if self._statusFINAL != X.StatusFINAL.Null :
            answer += "." + self._statusFINAL.__str__()
        if self._statusFINALNestedSm != X.StatusFINALNestedSm.Null :
            answer += "." + self._statusFINALNestedSm.__str__()
        return answer

    def getStatus(self):
        return self._status

    def getStatusFINAL(self):
        return self._statusFINAL

    def getStatusFINALNestedSm(self):
        return self._statusFINALNestedSm

    def turnoff(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == X.Status.on :
            self.setStatus(X.Status.off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def powerOff(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == X.Status.on :
            self.setStatus(X.Status.FINAL)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def turnOn(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == X.Status.off :
            self.setStatus(X.Status.on)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitStatus(self):
        if self._status == X.Status.FINAL :
            self.exitStatusFINAL()

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == X.Status.FINAL :
            if self._statusFINAL == X.StatusFINAL.Null :
                self.setStatusFINAL(X.StatusFINAL.nestedSm)

    def exitStatusFINAL(self):
        if self._statusFINAL == X.StatusFINAL.nestedSm :
            self.exitStatusFINALNestedSm()
            self.setStatusFINAL(X.StatusFINAL.Null)

    def setStatusFINAL(self, aStatusFINAL):
        self._statusFINAL = aStatusFINAL
        if self._status != X.Status.FINAL and aStatusFINAL != X.StatusFINAL.Null :
            self.setStatus(X.Status.FINAL)
        # entry actions and do activities
        if self._statusFINAL == X.StatusFINAL.nestedSm :
            if self._statusFINALNestedSm == X.StatusFINALNestedSm.Null :
                self.setStatusFINALNestedSm(X.StatusFINALNestedSm.nestedFinal)

    def exitStatusFINALNestedSm(self):
        if self._statusFINALNestedSm == X.StatusFINALNestedSm.nestedFinal :
            self.setStatusFINALNestedSm(X.StatusFINALNestedSm.Null)

    def setStatusFINALNestedSm(self, aStatusFINALNestedSm):
        self._statusFINALNestedSm = aStatusFINALNestedSm
        if self._statusFINAL != X.StatusFINAL.nestedSm and aStatusFINALNestedSm != X.StatusFINALNestedSm.Null :
            self.setStatusFINAL(X.StatusFINAL.nestedSm)
        # entry actions and do activities
        if self._statusFINALNestedSm == X.StatusFINALNestedSm.nestedFinal :
            # line 15 "../refactorFinalState_invalidElementsInNestedFinalState.ump"
            entry()
            self.delete()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 12 "nestedStateMachineExtendedByClass.ump"
from ThingInWorld import ThingInWorld
import os
from enum import Enum, auto

class Animal(ThingInWorld):
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Animal Attributes
    #Animal State Machines
    class State(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        alive = auto()
        dead = auto()

    class StateAlive(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        normal = auto()
        zombie = auto()

    class StateAliveNormal(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        baby = auto()
        adult = auto()

    #Animal Associations
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aIsAlive, aWorld):
        self._world = None
        self._drops = None
        self._stateAliveNormal = None
        self._stateAlive = None
        self._state = None
        self._isAlive = None
        super().__init__()
        self._isAlive = aIsAlive
        self._drops = []
        didAddWorld = self.setWorld(aWorld)
        if not didAddWorld :
            raise RuntimeError ("Unable to create animal due to world. See https://manual.umple.org?RE002ViolationofAssociationMultiplicity.html")
        self.setStateAlive(Animal.StateAlive.Null)
        self.setStateAliveNormal(Animal.StateAliveNormal.Null)
        self.setState(Animal.State.alive)

    #------------------------
    # INTERFACE
    #------------------------
    def setIsAlive(self, aIsAlive):
        wasSet = False
        self._isAlive = aIsAlive
        wasSet = True
        return wasSet

    def getIsAlive(self):
        return self._isAlive

    # Code from template attribute_IsBoolean 
    def isIsAlive(self):
        return self._isAlive

    def getStateFullName(self):
        answer = self._state.__str__()
        if self._stateAlive != Animal.StateAlive.Null :
            answer += "." + self._stateAlive.__str__()
        if self._stateAliveNormal != Animal.StateAliveNormal.Null :
            answer += "." + self._stateAliveNormal.__str__()
        return answer

    def getState(self):
        return self._state

    def getStateAlive(self):
        return self._stateAlive

    def getStateAliveNormal(self):
        return self._stateAliveNormal

    def kill(self):
        wasEventProcessed = False
        aState = self._state
        if aState == Animal.State.alive :
            self.exitState()
            self.setState(Animal.State.dead)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def haveBaby(self):
        wasEventProcessed = False
        aStateAlive = self._stateAlive
        if aStateAlive == Animal.StateAlive.zombie :
            self.exitStateAlive()
            self.setStateAliveNormal(Animal.StateAliveNormal.adult)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def growUp(self):
        wasEventProcessed = False
        aStateAliveNormal = self._stateAliveNormal
        if aStateAliveNormal == Animal.StateAliveNormal.baby :
            self.exitStateAliveNormal()
            self.setStateAliveNormal(Animal.StateAliveNormal.adult)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def zombify(self):
        wasEventProcessed = False
        aStateAliveNormal = self._stateAliveNormal
        if aStateAliveNormal == Animal.StateAliveNormal.adult :
            self.exitStateAlive()
            self.setStateAlive(Animal.StateAlive.zombie)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitState(self):
        if self._state == Animal.State.alive :
            self.exitStateAlive()

    def setState(self, aState):
        self._state = aState
        # entry actions and do activities
        if self._state == Animal.State.alive :
            if self._stateAlive == Animal.StateAlive.Null :
                self.setStateAlive(Animal.StateAlive.normal)

    def exitStateAlive(self):
        if self._stateAlive == Animal.StateAlive.normal :
            self.exitStateAliveNormal()
            self.setStateAlive(Animal.StateAlive.Null)
        elif self._stateAlive == Animal.StateAlive.zombie :
            self.setStateAlive(Animal.StateAlive.Null)

    def setStateAlive(self, aStateAlive):
        self._stateAlive = aStateAlive
        if self._state != Animal.State.alive and aStateAlive != Animal.StateAlive.Null :
            self.setState(Animal.State.alive)
        # entry actions and do activities
        if self._stateAlive == Animal.StateAlive.normal :
            if self._stateAliveNormal == Animal.StateAliveNormal.Null :
                self.setStateAliveNormal(Animal.StateAliveNormal.baby)

    def exitStateAliveNormal(self):
        if self._stateAliveNormal == Animal.StateAliveNormal.baby :
            self.setStateAliveNormal(Animal.StateAliveNormal.Null)
        elif self._stateAliveNormal == Animal.StateAliveNormal.adult :
            self.setStateAliveNormal(Animal.StateAliveNormal.Null)

    def setStateAliveNormal(self, aStateAliveNormal):
        self._stateAliveNormal = aStateAliveNormal
        if self._stateAlive != Animal.StateAlive.normal and aStateAliveNormal != Animal.StateAliveNormal.Null :
            self.setStateAlive(Animal.StateAlive.normal)

    # Code from template association_GetMany 
    def getDrop(self, index):
        aDrop = self._drops[index]
        return aDrop

    def getDrops(self):
        newDrops = tuple(self._drops)
        return newDrops

    def numberOfDrops(self):
        number = len(self._drops)
        return number

    def hasDrops(self):
        has = len(self._drops) > 0
        return has

    def indexOfDrop(self, aDrop):
        index = (-1 if not aDrop in self._drops else self._drops.index(aDrop))
        return index

    # Code from template association_GetOne 
    def getWorld(self):
        return self._world

    # Code from template association_MinimumNumberOfMethod 
    @staticmethod
    def minimumNumberOfDrops():
        return 0

    # Code from template association_AddManyToManyMethod 
    def addDrop(self, aDrop):
        wasAdded = False
        if (aDrop) in self._drops :
            return False
        self._drops.append(aDrop)
        if aDrop.indexOfAnimal(self) != -1 :
            wasAdded = True
        else :
            wasAdded = aDrop.addAnimal(self)
            if not wasAdded :
                self._drops.remove(aDrop)
        return wasAdded

    # Code from template association_RemoveMany 
    def removeDrop(self, aDrop):
        wasRemoved = False
        if not (aDrop) in self._drops :
            return wasRemoved
        oldIndex = (-1 if not aDrop in self._drops else self._drops.index(aDrop))
        self._drops.remove(oldIndex)
        if aDrop.indexOfAnimal(self) == -1 :
            wasRemoved = True
        else :
            wasRemoved = aDrop.removeAnimal(self)
            if not wasRemoved :
                self._drops.insert(oldIndex, aDrop)
        return wasRemoved

    # Code from template association_AddIndexControlFunctions 
    def addDropAt(self, aDrop, index):
        wasAdded = False
        if self.addDrop(aDrop) :
            if index < 0 :
                index = 0
            if index > self.numberOfDrops() :
                index = self.numberOfDrops() - 1
            self._drops.remove(aDrop)
            self._drops.insert(index, aDrop)
            wasAdded = True
        return wasAdded

    def addOrMoveDropAt(self, aDrop, index):
        wasAdded = False
        if (aDrop) in self._drops :
            if index < 0 :
                index = 0
            if index > self.numberOfDrops() :
                index = self.numberOfDrops() - 1
            self._drops.remove(aDrop)
            self._drops.insert(index, aDrop)
            wasAdded = True
        else :
            wasAdded = self.addDropAt(aDrop, index)
        return wasAdded

    # Code from template association_SetOneToMany 
    def setWorld(self, aWorld):
        wasSet = False
        if aWorld is None :
            return wasSet
        existingWorld = self._world
        self._world = aWorld
        if not (existingWorld is None) and not existingWorld == aWorld :
            existingWorld.removeAnimal(self)
        self._world.addAnimal(self)
        wasSet = True
        return wasSet

    def delete(self):
        copyOfDrops = self._drops.copy()
        self._drops.clear()
        for aDrop in copyOfDrops:
            aDrop.removeAnimal(self)

        placeholderWorld = self._world
        self._world = None
        if not (placeholderWorld is None) :
            placeholderWorld.removeAnimal(self)
        super().delete()

    def __str__(self):
        return str(super().__str__()) + "[" + "isAlive" + ":" + str(self.getIsAlive()) + "]" + str(os.linesep) + "  " + "world = " + ((format(id(self.getWorld()), "x")) if not (self.getWorld() is None) else "null")


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../refactorFinalState_onlyEntryAction.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        on = auto()
        off = auto()
        FINAL = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(X.Status.on)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def turnoff(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == X.Status.on :
            self.setStatus(X.Status.off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def powerOff(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == X.Status.on :
            self.setStatus(X.Status.FINAL)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def turnOn(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == X.Status.off :
            self.setStatus(X.Status.on)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == X.Status.FINAL :
            # line 13 "../refactorFinalState_onlyEntryAction.ump"
            entry()
            self.delete()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "duplicateTimeoutVariableAndMethod.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s2 = auto()

    class Sm2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s2 = auto()

    #Helper Variables
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._sm2_timeouts1Tos2Handler = None
        self._sm1_timeouts1Tos2Handler = None
        self._sm2 = None
        self._sm1 = None
        self.setSm1(X.Sm1.s1)
        self.setSm2(X.Sm2.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSm1FullName(self):
        answer = self._sm1.__str__()
        return answer

    def getSm2FullName(self):
        answer = self._sm2.__str__()
        return answer

    def getSm1(self):
        return self._sm1

    def getSm2(self):
        return self._sm2

    def timeouts1Tos2(self):
        wasEventProcessed = False
        aSm1 = self._sm1
        aSm2 = self._sm2
        if aSm1 == X.Sm1.s1 :
            self.exitSm1()
            self.setSm1(X.Sm1.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        if aSm2 == X.Sm1.s1 :
            self.exitSm2()
            self.setSm2(X.Sm2.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm1(self):
        if self._sm1 == X.Sm1.s1 :
            self.stopSm1_timeouts1Tos2Handler()

    def setSm1(self, aSm1):
        self._sm1 = aSm1
        # entry actions and do activities
        if self._sm1 == X.Sm1.s1 :
            self.startSm1_timeouts1Tos2Handler()

    def exitSm2(self):
        if self._sm2 == X.Sm1.s1 :
            self.stopSm2_timeouts1Tos2Handler()

    def setSm2(self, aSm2):
        self._sm2 = aSm2
        # entry actions and do activities
        if self._sm2 == X.Sm1.s1 :
            self.startSm2_timeouts1Tos2Handler()

    def startSm1_timeouts1Tos2Handler(self):
        self._sm1_timeouts1Tos2Handler = self.TimedEventHandler(self, "sm1_timeouts1Tos2", 1)

    def stopSm1_timeouts1Tos2Handler(self):
        self._sm1_timeouts1Tos2Handler.stop()

    def startSm2_timeouts1Tos2Handler(self):
        self._sm2_timeouts1Tos2Handler = self.TimedEventHandler(self, "sm2_timeouts1Tos2", 1)

    def stopSm2_timeouts1Tos2Handler(self):
        self._sm2_timeouts1Tos2Handler.stop()

    class TimedEventHandler():
        def __init__(self, aController, aTimeoutMethodName, aHowLongInSeconds):
            from threading import Timer
            self._timer = None
            self._howLongInSeconds = None
            self._timeoutMethodName = None
            self._controller = None
            self._controller = aController
            self._timeoutMethodName = aTimeoutMethodName
            self._howLongInSeconds = aHowLongInSeconds
            self._timer = None
            self._timer = Timer(self._howLongInSeconds, self.run)
            self._timer.start()

        def stop(self):
            self._timer.cancel()

        def run(self):
            if "sm1_timeouts1Tos2" == self._timeoutMethodName :
                shouldRestart = not self._controller.timeouts1Tos2()
                if shouldRestart :
                    self._controller.startSm1_timeouts1Tos2Handler()
                return
            if "sm2_timeouts1Tos2" == self._timeoutMethodName :
                shouldRestart = not self._controller.timeouts1Tos2()
                if shouldRestart :
                    self._controller.startSm2_timeouts1Tos2Handler()
                return

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../multipleGuardsSameEventWithDefaultNoGuard.ump"
from enum import Enum, auto

class LightFixture():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #LightFixture Attributes
    #LightFixture State Machines
    class Bulb(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        On = auto()
        Off = auto()
        Amber = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._bulb = None
        self._brightness = None
        self._brightness = 0
        self.setBulb(LightFixture.Bulb.On)

    #------------------------
    # INTERFACE
    #------------------------
    def setBrightness(self, aBrightness):
        wasSet = False
        self._brightness = aBrightness
        wasSet = True
        return wasSet

    def getBrightness(self):
        return self._brightness

    def getBulbFullName(self):
        answer = self._bulb.__str__()
        return answer

    def getBulb(self):
        return self._bulb

    def push(self):
        wasEventProcessed = False
        aBulb = self._bulb
        if aBulb == LightFixture.Bulb.On :
            if self.getBrightness() < 1 :
                self.setBulb(LightFixture.Bulb.Off)
                wasEventProcessed = True
            if self.getBrightness() > 10 :
                self.setBulb(LightFixture.Bulb.Amber)
                wasEventProcessed = True
            self.setBulb(LightFixture.Bulb.On)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setBulb(self, aBulb):
        self._bulb = aBulb

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "brightness" + ":" + str(self.getBrightness()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../refactorFinalState_empty.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        on = auto()
        off = auto()
        FINAL = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(X.Status.on)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def turnoff(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == X.Status.on :
            self.setStatus(X.Status.off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def powerOff(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == X.Status.on :
            self.setStatus(X.Status.FINAL)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def turnOn(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == X.Status.off :
            self.setStatus(X.Status.on)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == X.Status.FINAL :
            self.delete()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 16 "../SimpleStateMachineSpacing.ump"
from enum import Enum, auto

class Course():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Course State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Open = auto()
        Full = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(Course.Status.Open)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def setStatus(self, aStatus):
        self._status = aStatus
        return True

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../concurrentStates_normal.ump"
from enum import Enum, auto

class LightFixture():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #LightFixture State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Off = auto()
        On = auto()

    class StatusOnMotorIdle(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        MotorIdle = auto()
        MotorRunning = auto()

    class StatusOnFanIdle(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        FanIdle = auto()
        FanRunning = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._statusOnFanIdle = None
        self._statusOnMotorIdle = None
        self._status = None
        self.setStatusOnMotorIdle(LightFixture.StatusOnMotorIdle.Null)
        self.setStatusOnFanIdle(LightFixture.StatusOnFanIdle.Null)
        self.setStatus(LightFixture.Status.Off)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        if self._statusOnMotorIdle != LightFixture.StatusOnMotorIdle.Null :
            answer += "." + self._statusOnMotorIdle.__str__()
        if self._statusOnFanIdle != LightFixture.StatusOnFanIdle.Null :
            answer += "." + self._statusOnFanIdle.__str__()
        return answer

    def getStatus(self):
        return self._status

    def getStatusOnMotorIdle(self):
        return self._statusOnMotorIdle

    def getStatusOnFanIdle(self):
        return self._statusOnFanIdle

    def turnOn(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == LightFixture.Status.Off :
            self.setStatus(LightFixture.Status.On)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def flip(self):
        wasEventProcessed = False
        aStatusOnMotorIdle = self._statusOnMotorIdle
        if aStatusOnMotorIdle == LightFixture.StatusOnMotorIdle.MotorIdle :
            self.exitStatusOnMotorIdle()
            self.setStatusOnMotorIdle(LightFixture.StatusOnMotorIdle.MotorRunning)
            wasEventProcessed = True
        elif aStatusOnMotorIdle == LightFixture.StatusOnMotorIdle.MotorRunning :
            self.exitStatusOnMotorIdle()
            self.setStatusOnMotorIdle(LightFixture.StatusOnMotorIdle.MotorIdle)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def flop(self):
        wasEventProcessed = False
        aStatusOnFanIdle = self._statusOnFanIdle
        if aStatusOnFanIdle == LightFixture.StatusOnFanIdle.FanIdle :
            self.exitStatusOnFanIdle()
            self.setStatusOnFanIdle(LightFixture.StatusOnFanIdle.FanRunning)
            wasEventProcessed = True
        elif aStatusOnFanIdle == LightFixture.StatusOnFanIdle.FanRunning :
            self.exitStatusOnFanIdle()
            self.setStatusOnFanIdle(LightFixture.StatusOnFanIdle.FanIdle)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitStatus(self):
        if self._status == LightFixture.Status.On :
            self.exitStatusOnMotorIdle()
            self.exitStatusOnFanIdle()

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == LightFixture.Status.On :
            if self._statusOnMotorIdle == LightFixture.StatusOnMotorIdle.Null :
                self.setStatusOnMotorIdle(LightFixture.StatusOnMotorIdle.MotorIdle)
            if self._statusOnFanIdle == LightFixture.StatusOnFanIdle.Null :
                self.setStatusOnFanIdle(LightFixture.StatusOnFanIdle.FanIdle)

    def exitStatusOnMotorIdle(self):
        if self._statusOnMotorIdle == LightFixture.StatusOnMotorIdle.MotorIdle :
            self.setStatusOnMotorIdle(LightFixture.StatusOnMotorIdle.Null)
        elif self._statusOnMotorIdle == LightFixture.StatusOnMotorIdle.MotorRunning :
            self.setStatusOnMotorIdle(LightFixture.StatusOnMotorIdle.Null)

    def setStatusOnMotorIdle(self, aStatusOnMotorIdle):
        self._statusOnMotorIdle = aStatusOnMotorIdle
        if self._status != LightFixture.Status.On and aStatusOnMotorIdle != LightFixture.StatusOnMotorIdle.Null :
            self.setStatus(LightFixture.Status.On)

    def exitStatusOnFanIdle(self):
        if self._statusOnFanIdle == LightFixture.StatusOnFanIdle.FanIdle :
            self.setStatusOnFanIdle(LightFixture.StatusOnFanIdle.Null)
        elif self._statusOnFanIdle == LightFixture.StatusOnFanIdle.FanRunning :
            self.setStatusOnFanIdle(LightFixture.StatusOnFanIdle.Null)

    def setStatusOnFanIdle(self, aStatusOnFanIdle):
        self._statusOnFanIdle = aStatusOnFanIdle
        if self._status != LightFixture.Status.On and aStatusOnFanIdle != LightFixture.StatusOnFanIdle.Null :
            self.setStatus(LightFixture.Status.On)

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../EmptyAndNonEmptyStates.ump"
from enum import Enum, auto

class Light():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Light State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        On = auto()
        Off = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(Light.Status.On)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def flip(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Light.Status.On :
            self.setStatus(Light.Status.Off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../capitalizedStateMachineAttribute.ump"
from enum import Enum, auto

class Garage():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Garage State Machines
    class GarageDoor(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._garageDoor = None

    #------------------------
    # INTERFACE
    #------------------------
    def getGarageDoorFullName(self):
        answer = self._garageDoor.__str__()
        return answer

    def getGarageDoor(self):
        return self._garageDoor

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "stateMachineWithStringComparisonGuard.ump"
from enum import Enum, auto

class stateMachineWithStringComparisonGuard():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #stateMachineWithStringComparisonGuard Attributes
    #stateMachineWithStringComparisonGuard State Machines
    class CommandControl(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        IDLE = auto()
        CHECK_AVAILABILITY = auto()
        COMMAND_VALIDITY = auto()
        EXECUTION = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._commandControl = None
        self._cmdString = None
        self._cmdString = ""
        self.setCommandControl(stateMachineWithStringComparisonGuard.CommandControl.IDLE)

    #------------------------
    # INTERFACE
    #------------------------
    def setCmdString(self, aCmdString):
        wasSet = False
        self._cmdString = aCmdString
        wasSet = True
        return wasSet

    def getCmdString(self):
        return self._cmdString

    def getCommandControlFullName(self):
        answer = self._commandControl.__str__()
        return answer

    def getCommandControl(self):
        return self._commandControl

    def execute(self):
        wasEventProcessed = False
        aCommandControl = self._commandControl
        if aCommandControl == stateMachineWithStringComparisonGuard.CommandControl.IDLE :
            self.setCommandControl(stateMachineWithStringComparisonGuard.CommandControl.CHECK_AVAILABILITY)
            wasEventProcessed = True
        elif aCommandControl == stateMachineWithStringComparisonGuard.CommandControl.CHECK_AVAILABILITY :
            if not "" == self.getCmdString() :
                self.setCommandControl(stateMachineWithStringComparisonGuard.CommandControl.COMMAND_VALIDITY)
                wasEventProcessed = True
        elif aCommandControl == stateMachineWithStringComparisonGuard.CommandControl.COMMAND_VALIDITY :
            if isCommandValid(self.getCmdString()) :
                self.setCommandControl(stateMachineWithStringComparisonGuard.CommandControl.EXECUTION)
                wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setCommandControl(self, aCommandControl):
        self._commandControl = aCommandControl

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "cmdString" + ":" + str(self.getCmdString()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "checkExternalTransitions_withExitActions_2.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        on = auto()
        off = auto()

    class SmOn(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        m1 = auto()
        m2 = auto()

    class SmOnM1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t2 = auto()
        t3 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smOnM1 = None
        self._smOn = None
        self._sm = None
        self.setSmOn(X.SmOn.Null)
        self.setSmOnM1(X.SmOnM1.Null)
        self.setSm(X.Sm.on)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smOn != X.SmOn.Null :
            answer += "." + self._smOn.__str__()
        if self._smOnM1 != X.SmOnM1.Null :
            answer += "." + self._smOnM1.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmOn(self):
        return self._smOn

    def getSmOnM1(self):
        return self._smOnM1

    def e1(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.on :
            self.exitSm()
            self.setSm(X.Sm.off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e2(self):
        wasEventProcessed = False
        aSmOn = self._smOn
        if aSmOn == X.SmOn.m1 :
            self.exitSmOn()
            self.setSmOn(X.SmOn.m2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e3(self):
        wasEventProcessed = False
        aSmOnM1 = self._smOnM1
        if aSmOnM1 == X.SmOnM1.t2 :
            self.exitSmOnM1()
            self.setSmOnM1(X.SmOnM1.t3)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.on :
            self.exitSmOn()
            # line 4 "checkExternalTransitions_withExitActions_2.ump"
            on_exit_action()
        elif self._sm == X.Sm.off :
            # line 18 "checkExternalTransitions_withExitActions_2.ump"
            off_exit_action()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.on :
            if self._smOn == X.SmOn.Null :
                self.setSmOn(X.SmOn.m1)

    def exitSmOn(self):
        if self._smOn == X.SmOn.m1 :
            self.exitSmOnM1()
            # line 7 "checkExternalTransitions_withExitActions_2.ump"
            m1_exit_action()
            self.setSmOn(X.SmOn.Null)
        elif self._smOn == X.SmOn.m2 :
            self.setSmOn(X.SmOn.Null)

    def setSmOn(self, aSmOn):
        self._smOn = aSmOn
        if self._sm != X.Sm.on and aSmOn != X.SmOn.Null :
            self.setSm(X.Sm.on)
        # entry actions and do activities
        if self._smOn == X.SmOn.m1 :
            if self._smOnM1 == X.SmOnM1.Null :
                self.setSmOnM1(X.SmOnM1.t2)

    def exitSmOnM1(self):
        if self._smOnM1 == X.SmOnM1.t2 :
            # line 10 "checkExternalTransitions_withExitActions_2.ump"
            t2_exit_action()
            self.setSmOnM1(X.SmOnM1.Null)
        elif self._smOnM1 == X.SmOnM1.t3 :
            self.setSmOnM1(X.SmOnM1.Null)

    def setSmOnM1(self, aSmOnM1):
        self._smOnM1 = aSmOnM1
        if self._smOn != X.SmOn.m1 and aSmOnM1 != X.SmOnM1.Null :
            self.setSmOn(X.SmOn.m1)

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "parallelSm_sameNameDiffStates_2.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s0 = auto()
        s1 = auto()

    class SmS0T1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t1 = auto()

    class SmS0T2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t2 = auto()
        t3 = auto()

    class SmS1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s2 = auto()
        s3 = auto()

    class SmS1S2T1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t1 = auto()
        t4 = auto()

    class SmS1S2T6(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t6 = auto()

    class SmS1S2T2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t2 = auto()
        t5 = auto()

    class SmS1S3T7(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t7 = auto()
        t8 = auto()

    class SmS1S3T6(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t6 = auto()
        t9 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smS1S3T6 = None
        self._smS1S3T7 = None
        self._smS1S2T2 = None
        self._smS1S2T6 = None
        self._smS1S2T1 = None
        self._smS1 = None
        self._smS0T2 = None
        self._smS0T1 = None
        self._sm = None
        self.setSmS0T1(X.SmS0T1.Null)
        self.setSmS0T2(X.SmS0T2.Null)
        self.setSmS1(X.SmS1.Null)
        self.setSmS1S2T1(X.SmS1S2T1.Null)
        self.setSmS1S2T6(X.SmS1S2T6.Null)
        self.setSmS1S2T2(X.SmS1S2T2.Null)
        self.setSmS1S3T7(X.SmS1S3T7.Null)
        self.setSmS1S3T6(X.SmS1S3T6.Null)
        self.setSm(X.Sm.s0)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smS0T1 != X.SmS0T1.Null :
            answer += "." + self._smS0T1.__str__()
        if self._smS0T2 != X.SmS0T2.Null :
            answer += "." + self._smS0T2.__str__()
        if self._smS1 != X.SmS1.Null :
            answer += "." + self._smS1.__str__()
        if self._smS1S2T1 != X.SmS1S2T1.Null :
            answer += "." + self._smS1S2T1.__str__()
        if self._smS1S2T6 != X.SmS1S2T6.Null :
            answer += "." + self._smS1S2T6.__str__()
        if self._smS1S2T2 != X.SmS1S2T2.Null :
            answer += "." + self._smS1S2T2.__str__()
        if self._smS1S3T7 != X.SmS1S3T7.Null :
            answer += "." + self._smS1S3T7.__str__()
        if self._smS1S3T6 != X.SmS1S3T6.Null :
            answer += "." + self._smS1S3T6.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmS0T1(self):
        return self._smS0T1

    def getSmS0T2(self):
        return self._smS0T2

    def getSmS1(self):
        return self._smS1

    def getSmS1S2T1(self):
        return self._smS1S2T1

    def getSmS1S2T6(self):
        return self._smS1S2T6

    def getSmS1S2T2(self):
        return self._smS1S2T2

    def getSmS1S3T7(self):
        return self._smS1S3T7

    def getSmS1S3T6(self):
        return self._smS1S3T6

    def goS1(self):
        wasEventProcessed = False
        aSmS0T1 = self._smS0T1
        aSmS0T2 = self._smS0T2
        if aSmS0T1 == X.SmS0T1.t1 :
            self.exitSm()
            self.setSm(X.Sm.s1)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        if aSmS0T2 == X.SmS0T2.t2 :
            self.exitSm()
            self.setSm(X.Sm.s1)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goT4(self):
        wasEventProcessed = False
        aSmS1S2T1 = self._smS1S2T1
        if aSmS1S2T1 == X.SmS0T1.t1 :
            self.exitSmS1S2T1()
            self.setSmS1S2T1(X.SmS1S2T1.t4)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goT5(self):
        wasEventProcessed = False
        aSmS1S2T6 = self._smS1S2T6
        aSmS1S2T2 = self._smS1S2T2
        if aSmS1S2T6 == X.SmS1S2T6.t6 :
            self.exitSmS1S2T6()
            self.setSmS1S2T2(X.SmS1S2T2.t5)
            self.setSmS1S2T6(X.SmS1S2T6.t6)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        if aSmS1S2T2 == X.SmS0T2.t2 :
            self.exitSmS1S2T2()
            self.setSmS1S2T2(X.SmS1S2T2.t5)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goT8(self):
        wasEventProcessed = False
        aSmS1S3T7 = self._smS1S3T7
        if aSmS1S3T7 == X.SmS1S3T7.t7 :
            self.exitSmS1S3T7()
            self.setSmS1S3T7(X.SmS1S3T7.t8)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goT9(self):
        wasEventProcessed = False
        aSmS1S3T6 = self._smS1S3T6
        if aSmS1S3T6 == X.SmS1S2T6.t6 :
            self.exitSmS1S3T6()
            self.setSmS1S3T6(X.SmS1S3T6.t9)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s0 :
            self.exitSmS0T1()
            self.exitSmS0T2()
        elif self._sm == X.Sm.s1 :
            self.exitSmS1()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s0 :
            if self._smS0T1 == X.SmS0T1.Null :
                self.setSmS0T1(X.SmS0T1.t1)
            if self._smS0T2 == X.SmS0T2.Null :
                self.setSmS0T2(X.SmS0T2.t2)
        elif self._sm == X.Sm.s1 :
            if self._smS1 == X.SmS1.Null :
                self.setSmS1(X.SmS1.s2)

    def exitSmS0T1(self):
        if self._smS0T1 == X.SmS0T1.t1 :
            self.setSmS0T1(X.SmS0T1.Null)

    def setSmS0T1(self, aSmS0T1):
        self._smS0T1 = aSmS0T1
        if self._sm != X.Sm.s0 and aSmS0T1 != X.SmS0T1.Null :
            self.setSm(X.Sm.s0)

    def exitSmS0T2(self):
        if self._smS0T2 == X.SmS0T2.t2 :
            self.setSmS0T2(X.SmS0T2.Null)
        elif self._smS0T2 == X.SmS0T2.t3 :
            self.setSmS0T2(X.SmS0T2.Null)

    def setSmS0T2(self, aSmS0T2):
        self._smS0T2 = aSmS0T2
        if self._sm != X.Sm.s0 and aSmS0T2 != X.SmS0T2.Null :
            self.setSm(X.Sm.s0)

    def exitSmS1(self):
        if self._smS1 == X.SmS1.s2 :
            self.exitSmS1S2T1()
            self.exitSmS1S2T6()
            self.exitSmS1S2T2()
            self.setSmS1(X.SmS1.Null)
        elif self._smS1 == X.SmS1.s3 :
            self.exitSmS1S3T7()
            self.exitSmS1S3T6()
            self.setSmS1(X.SmS1.Null)

    def setSmS1(self, aSmS1):
        self._smS1 = aSmS1
        if self._sm != X.Sm.s1 and aSmS1 != X.SmS1.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1 == X.SmS1.s2 :
            if self._smS1S2T1 == X.SmS1S2T1.Null :
                self.setSmS1S2T1(X.SmS1S2T1.t1)
            if self._smS1S2T6 == X.SmS1S2T6.Null :
                self.setSmS1S2T6(X.SmS1S2T6.t6)
            if self._smS1S2T2 == X.SmS1S2T2.Null :
                self.setSmS1S2T2(X.SmS1S2T2.t2)
        elif self._smS1 == X.SmS1.s3 :
            if self._smS1S3T7 == X.SmS1S3T7.Null :
                self.setSmS1S3T7(X.SmS1S3T7.t7)
            if self._smS1S3T6 == X.SmS1S3T6.Null :
                self.setSmS1S3T6(X.SmS1S3T6.t6)

    def exitSmS1S2T1(self):
        if self._smS1S2T1 == X.SmS0T1.t1 :
            self.setSmS1S2T1(X.SmS1S2T1.Null)
        elif self._smS1S2T1 == X.SmS1S2T1.t4 :
            self.setSmS1S2T1(X.SmS1S2T1.Null)

    def setSmS1S2T1(self, aSmS1S2T1):
        self._smS1S2T1 = aSmS1S2T1
        if self._smS1 != X.SmS1.s2 and aSmS1S2T1 != X.SmS1S2T1.Null :
            self.setSmS1(X.SmS1.s2)

    def exitSmS1S2T6(self):
        if self._smS1S2T6 == X.SmS1S2T6.t6 :
            self.setSmS1S2T6(X.SmS1S2T6.Null)

    def setSmS1S2T6(self, aSmS1S2T6):
        self._smS1S2T6 = aSmS1S2T6
        if self._smS1 != X.SmS1.s2 and aSmS1S2T6 != X.SmS1S2T6.Null :
            self.setSmS1(X.SmS1.s2)

    def exitSmS1S2T2(self):
        if self._smS1S2T2 == X.SmS0T2.t2 :
            self.setSmS1S2T2(X.SmS1S2T2.Null)
        elif self._smS1S2T2 == X.SmS1S2T2.t5 :
            self.setSmS1S2T2(X.SmS1S2T2.Null)

    def setSmS1S2T2(self, aSmS1S2T2):
        self._smS1S2T2 = aSmS1S2T2
        if self._smS1 != X.SmS1.s2 and aSmS1S2T2 != X.SmS1S2T2.Null :
            self.setSmS1(X.SmS1.s2)

    def exitSmS1S3T7(self):
        if self._smS1S3T7 == X.SmS1S3T7.t7 :
            self.setSmS1S3T7(X.SmS1S3T7.Null)
        elif self._smS1S3T7 == X.SmS1S3T7.t8 :
            self.setSmS1S3T7(X.SmS1S3T7.Null)

    def setSmS1S3T7(self, aSmS1S3T7):
        self._smS1S3T7 = aSmS1S3T7
        if self._smS1 != X.SmS1.s3 and aSmS1S3T7 != X.SmS1S3T7.Null :
            self.setSmS1(X.SmS1.s3)

    def exitSmS1S3T6(self):
        if self._smS1S3T6 == X.SmS1S2T6.t6 :
            self.setSmS1S3T6(X.SmS1S3T6.Null)
        elif self._smS1S3T6 == X.SmS1S3T6.t9 :
            self.setSmS1S3T6(X.SmS1S3T6.Null)

    def setSmS1S3T6(self, aSmS1S3T6):
        self._smS1S3T6 = aSmS1S3T6
        if self._smS1 != X.SmS1.s3 and aSmS1S3T6 != X.SmS1S3T6.Null :
            self.setSmS1(X.SmS1.s3)

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 13 "../EventTransitionSpacing.ump"
from enum import Enum, auto

class Light():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Light State Machines
    class Bulb(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Off = auto()
        On = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._bulb = None
        self.setBulb(Light.Bulb.Off)

    #------------------------
    # INTERFACE
    #------------------------
    def getBulbFullName(self):
        answer = self._bulb.__str__()
        return answer

    def getBulb(self):
        return self._bulb

    def flip(self):
        wasEventProcessed = False
        aBulb = self._bulb
        if aBulb == Light.Bulb.Off :
            self.setBulb(Light.Bulb.On)
            wasEventProcessed = True
        elif aBulb == Light.Bulb.On :
            self.setBulb(Light.Bulb.Off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setBulb(self, aBulb):
        self._bulb = aBulb

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "checkExternalTransitions_concurrentStateMachines_2.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s4 = auto()

    class SmS1S2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s2 = auto()

    class SmS1S2A(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        a = auto()

    class SmS1S2AA(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t1 = auto()
        t2 = auto()

    class SmS1S2B(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        b = auto()

    class SmS1S2BB(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t3 = auto()
        t4 = auto()

    class SmS1S3(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s3 = auto()

    class SmS1S3S3(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t5 = auto()
        t6 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smS1S3S3 = None
        self._smS1S3 = None
        self._smS1S2BB = None
        self._smS1S2B = None
        self._smS1S2AA = None
        self._smS1S2A = None
        self._smS1S2 = None
        self._sm = None
        self.setSmS1S2(X.SmS1S2.Null)
        self.setSmS1S2A(X.SmS1S2A.Null)
        self.setSmS1S2AA(X.SmS1S2AA.Null)
        self.setSmS1S2B(X.SmS1S2B.Null)
        self.setSmS1S2BB(X.SmS1S2BB.Null)
        self.setSmS1S3(X.SmS1S3.Null)
        self.setSmS1S3S3(X.SmS1S3S3.Null)
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smS1S2 != X.SmS1S2.Null :
            answer += "." + self._smS1S2.__str__()
        if self._smS1S2A != X.SmS1S2A.Null :
            answer += "." + self._smS1S2A.__str__()
        if self._smS1S2AA != X.SmS1S2AA.Null :
            answer += "." + self._smS1S2AA.__str__()
        if self._smS1S2B != X.SmS1S2B.Null :
            answer += "." + self._smS1S2B.__str__()
        if self._smS1S2BB != X.SmS1S2BB.Null :
            answer += "." + self._smS1S2BB.__str__()
        if self._smS1S3 != X.SmS1S3.Null :
            answer += "." + self._smS1S3.__str__()
        if self._smS1S3S3 != X.SmS1S3S3.Null :
            answer += "." + self._smS1S3S3.__str__()
        if self._smS1S2AA != X.SmS1S2AA.Null :
            answer += "." + self._smS1S2AA.__str__()
        if self._smS1S2BB != X.SmS1S2BB.Null :
            answer += "." + self._smS1S2BB.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmS1S2(self):
        return self._smS1S2

    def getSmS1S2A(self):
        return self._smS1S2A

    def getSmS1S2AA(self):
        return self._smS1S2AA

    def getSmS1S2B(self):
        return self._smS1S2B

    def getSmS1S2BB(self):
        return self._smS1S2BB

    def getSmS1S3(self):
        return self._smS1S3

    def getSmS1S3S3(self):
        return self._smS1S3S3

    def goToT2(self):
        wasEventProcessed = False
        aSmS1S2AA = self._smS1S2AA
        if aSmS1S2AA == X.SmS1S2AA.t1 :
            self.exitSmS1S2AA()
            self.setSmS1S2AA(X.SmS1S2AA.t2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToT4(self):
        wasEventProcessed = False
        aSmS1S2AA = self._smS1S2AA
        if aSmS1S2AA == X.SmS1S2AA.t2 :
            self.exitSmS1S2()
            self.setSmS1S2BB(X.SmS1S2BB.t4)
            self.setSmS1S2A(X.SmS1S2A.a)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToT5(self):
        wasEventProcessed = False
        aSmS1S2BB = self._smS1S2BB
        if aSmS1S2BB == X.SmS1S2BB.t3 :
            self.exitSmS1S2()
            self.setSmS1S3S3(X.SmS1S3S3.t5)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToS4(self):
        wasEventProcessed = False
        aSmS1S2BB = self._smS1S2BB
        if aSmS1S2BB == X.SmS1S2BB.t4 :
            self.exitSm()
            self.setSm(X.Sm.s4)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToT6(self):
        wasEventProcessed = False
        aSmS1S3S3 = self._smS1S3S3
        if aSmS1S3S3 == X.SmS1S3S3.t5 :
            self.exitSmS1S3S3()
            self.setSmS1S3S3(X.SmS1S3S3.t6)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToAT2(self):
        wasEventProcessed = False
        aSmS1S3S3 = self._smS1S3S3
        if aSmS1S3S3 == X.SmS1S3S3.t6 :
            self.exitSmS1S2()
            self.setSmS1S2AA(X.SmS1S2AA.t2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s1 :
            self.exitSmS1S2()
            self.exitSmS1S3()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s1 :
            if self._smS1S2 == X.SmS1S2.Null :
                self.setSmS1S2(X.SmS1S2.s2)
            if self._smS1S3 == X.SmS1S3.Null :
                self.setSmS1S3(X.SmS1S3.s3)

    def exitSmS1S2(self):
        if self._smS1S2 == X.SmS1S2.s2 :
            self.exitSmS1S2A()
            self.exitSmS1S2B()
            self.setSmS1S2(X.SmS1S2.Null)

    def setSmS1S2(self, aSmS1S2):
        self._smS1S2 = aSmS1S2
        if self._sm != X.Sm.s1 and aSmS1S2 != X.SmS1S2.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1S2 == X.SmS1S2.s2 :
            if self._smS1S2A == X.SmS1S2A.Null :
                self.setSmS1S2A(X.SmS1S2A.a)
            if self._smS1S2B == X.SmS1S2B.Null :
                self.setSmS1S2B(X.SmS1S2B.b)

    def exitSmS1S2A(self):
        if self._smS1S2A == X.SmS1S2A.a :
            self.exitSmS1S2AA()
            # line 6 "checkExternalTransitions_concurrentStateMachines_2.ump"
            exit_a_action()
            self.setSmS1S2A(X.SmS1S2A.Null)

    def setSmS1S2A(self, aSmS1S2A):
        self._smS1S2A = aSmS1S2A
        if self._smS1S2 != X.SmS1S2.s2 and aSmS1S2A != X.SmS1S2A.Null :
            self.setSmS1S2(X.SmS1S2.s2)
        # entry actions and do activities
        if self._smS1S2A == X.SmS1S2A.a :
            if self._smS1S2AA == X.SmS1S2AA.Null :
                self.setSmS1S2AA(X.SmS1S2AA.t1)

    def exitSmS1S2AA(self):
        if self._smS1S2AA == X.SmS1S2AA.t1 :
            self.setSmS1S2AA(X.SmS1S2AA.Null)
        elif self._smS1S2AA == X.SmS1S2AA.t2 :
            self.setSmS1S2AA(X.SmS1S2AA.Null)

    def setSmS1S2AA(self, aSmS1S2AA):
        self._smS1S2AA = aSmS1S2AA
        if self._smS1S2A != X.SmS1S2A.a and aSmS1S2AA != X.SmS1S2AA.Null :
            self.setSmS1S2A(X.SmS1S2A.a)

    def exitSmS1S2B(self):
        if self._smS1S2B == X.SmS1S2B.b :
            self.exitSmS1S2BB()
            # line 16 "checkExternalTransitions_concurrentStateMachines_2.ump"
            exit_b_action()
            self.setSmS1S2B(X.SmS1S2B.Null)

    def setSmS1S2B(self, aSmS1S2B):
        self._smS1S2B = aSmS1S2B
        if self._smS1S2 != X.SmS1S2.s2 and aSmS1S2B != X.SmS1S2B.Null :
            self.setSmS1S2(X.SmS1S2.s2)
        # entry actions and do activities
        if self._smS1S2B == X.SmS1S2B.b :
            if self._smS1S2BB == X.SmS1S2BB.Null :
                self.setSmS1S2BB(X.SmS1S2BB.t3)

    def exitSmS1S2BB(self):
        if self._smS1S2BB == X.SmS1S2BB.t3 :
            self.setSmS1S2BB(X.SmS1S2BB.Null)
        elif self._smS1S2BB == X.SmS1S2BB.t4 :
            self.setSmS1S2BB(X.SmS1S2BB.Null)

    def setSmS1S2BB(self, aSmS1S2BB):
        self._smS1S2BB = aSmS1S2BB
        if self._smS1S2B != X.SmS1S2B.b and aSmS1S2BB != X.SmS1S2BB.Null :
            self.setSmS1S2B(X.SmS1S2B.b)

    def exitSmS1S3(self):
        if self._smS1S3 == X.SmS1S3.s3 :
            self.exitSmS1S3S3()
            self.setSmS1S3(X.SmS1S3.Null)

    def setSmS1S3(self, aSmS1S3):
        self._smS1S3 = aSmS1S3
        if self._sm != X.Sm.s1 and aSmS1S3 != X.SmS1S3.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1S3 == X.SmS1S3.s3 :
            if self._smS1S3S3 == X.SmS1S3S3.Null :
                self.setSmS1S3S3(X.SmS1S3S3.t5)

    def exitSmS1S3S3(self):
        if self._smS1S3S3 == X.SmS1S3S3.t5 :
            self.setSmS1S3S3(X.SmS1S3S3.Null)
        elif self._smS1S3S3 == X.SmS1S3S3.t6 :
            self.setSmS1S3S3(X.SmS1S3S3.Null)

    def setSmS1S3S3(self, aSmS1S3S3):
        self._smS1S3S3 = aSmS1S3S3
        if self._smS1S3 != X.SmS1S3.s3 and aSmS1S3S3 != X.SmS1S3S3.Null :
            self.setSmS1S3(X.SmS1S3.s3)

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "nestedStateMachineExtendedByMultipleClasses.ump"
from enum import Enum, auto

class Animal():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Animal Attributes
    #Animal State Machines
    class State(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        alive = auto()
        dead = auto()

    class StateAlive(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        normal = auto()
        zombie = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aIsAlive):
        self._stateAlive = None
        self._state = None
        self._isAlive = None
        self._isAlive = aIsAlive
        self.setStateAlive(Animal.StateAlive.Null)
        self.setState(Animal.State.alive)

    #------------------------
    # INTERFACE
    #------------------------
    def setIsAlive(self, aIsAlive):
        wasSet = False
        self._isAlive = aIsAlive
        wasSet = True
        return wasSet

    def getIsAlive(self):
        return self._isAlive

    # Code from template attribute_IsBoolean 
    def isIsAlive(self):
        return self._isAlive

    def getStateFullName(self):
        answer = self._state.__str__()
        if self._stateAlive != Animal.StateAlive.Null :
            answer += "." + self._stateAlive.__str__()
        return answer

    def getState(self):
        return self._state

    def getStateAlive(self):
        return self._stateAlive

    def kill(self):
        wasEventProcessed = False
        aState = self._state
        if aState == Animal.State.alive :
            self.exitState()
            self.setState(Animal.State.dead)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def zombify(self):
        wasEventProcessed = False
        aStateAlive = self._stateAlive
        if aStateAlive == Animal.StateAlive.normal :
            self.exitStateAlive()
            self.setStateAlive(Animal.StateAlive.zombie)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def haveBaby(self):
        wasEventProcessed = False
        aStateAlive = self._stateAlive
        if aStateAlive == Animal.StateAlive.zombie :
            self.exitStateAlive()
            self.setStateAlive(Animal.StateAlive.normal)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitState(self):
        if self._state == Animal.State.alive :
            self.exitStateAlive()

    def setState(self, aState):
        self._state = aState
        # entry actions and do activities
        if self._state == Animal.State.alive :
            if self._stateAlive == Animal.StateAlive.Null :
                self.setStateAlive(Animal.StateAlive.normal)

    def exitStateAlive(self):
        if self._stateAlive == Animal.StateAlive.normal :
            self.setStateAlive(Animal.StateAlive.Null)
        elif self._stateAlive == Animal.StateAlive.zombie :
            self.setStateAlive(Animal.StateAlive.Null)

    def setStateAlive(self, aStateAlive):
        self._stateAlive = aStateAlive
        if self._state != Animal.State.alive and aStateAlive != Animal.StateAlive.Null :
            self.setState(Animal.State.alive)

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "isAlive" + ":" + str(self.getIsAlive()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "eventWithArguments_1.ump"
from enum import Enum, auto

class LightFixture():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #LightFixture Attributes
    #LightFixture State Machines
    class Bulb(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Off = auto()
        Dimmed = auto()
        On = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._bulb = None
        self._brightness = None
        self._brightness = 0
        self.setBulb(LightFixture.Bulb.Off)

    #------------------------
    # INTERFACE
    #------------------------
    def setBrightness(self, aBrightness):
        wasSet = False
        self._brightness = aBrightness
        wasSet = True
        return wasSet

    def getBrightness(self):
        return self._brightness

    def getBulbFullName(self):
        answer = self._bulb.__str__()
        return answer

    def getBulb(self):
        return self._bulb

    def turnDimmer(self, lightval, lightval_1):
        wasEventProcessed = False
        aBulb = self._bulb
        if aBulb == LightFixture.Bulb.Off :
            # line 6 "eventWithArguments_1.ump"
            self.setBulb(LightFixture.Bulb.Off)
            wasEventProcessed = True
        elif aBulb == LightFixture.Bulb.Dimmed :
            # line 12 "eventWithArguments_1.ump"
            self.setBulb(LightFixture.Bulb.Dimmed)
            wasEventProcessed = True
        elif aBulb == LightFixture.Bulb.On :
            # line 16 "eventWithArguments_1.ump"
            self.setBulb(LightFixture.Bulb.Dimmed)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def flipSwitch(self):
        wasEventProcessed = False
        aBulb = self._bulb
        if aBulb == LightFixture.Bulb.Off :
            self.setBulb(LightFixture.Bulb.Dimmed)
            wasEventProcessed = True
        elif aBulb == LightFixture.Bulb.Dimmed :
            self.setBulb(LightFixture.Bulb.Off)
            wasEventProcessed = True
        elif aBulb == LightFixture.Bulb.On :
            self.setBulb(LightFixture.Bulb.Off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def entry(self):
        wasEventProcessed = False
        aBulb = self._bulb
        if aBulb == LightFixture.Bulb.Dimmed :
            if dimmer > 99 :
                self.setBulb(LightFixture.Bulb.On)
                wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setBulb(self, aBulb):
        self._bulb = aBulb

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "brightness" + ":" + str(self.getBrightness()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../eventWithArguments_2.ump"
from enum import Enum, auto

class Course():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Course State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Open = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(Course.Status.Open)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def register(self, name, age, grades):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Course.Status.Open :
            self.setStatus(Course.Status.Open)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../SimpleStateMachineSpacing.ump"
from enum import Enum, auto

class Mentor():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Mentor State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "nestedStates_Two_TimedTransition.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s2 = auto()

    class SmS1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s1a = auto()
        s1b = auto()

    class SmS2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s2a = auto()
        s2b = auto()

    #Helper Variables
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._timeouts2bTos1bHandler = None
        self._timeouts1aTos1bHandler = None
        self._smS2 = None
        self._smS1 = None
        self._sm = None
        self.setSmS1(X.SmS1.Null)
        self.setSmS2(X.SmS2.Null)
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smS1 != X.SmS1.Null :
            answer += "." + self._smS1.__str__()
        if self._smS2 != X.SmS2.Null :
            answer += "." + self._smS2.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmS1(self):
        return self._smS1

    def getSmS2(self):
        return self._smS2

    def timeouts1aTos1b(self):
        wasEventProcessed = False
        aSmS1 = self._smS1
        if aSmS1 == X.SmS1.s1a :
            self.exitSmS1()
            self.setSmS1(X.SmS1.s1b)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e1(self):
        wasEventProcessed = False
        aSmS1 = self._smS1
        if aSmS1 == X.SmS1.s1b :
            self.exitSm()
            self.setSm(X.Sm.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e2(self):
        wasEventProcessed = False
        aSmS2 = self._smS2
        if aSmS2 == X.SmS2.s2a :
            self.exitSm()
            self.setSm(X.Sm.s1)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def timeouts2bTos1b(self):
        wasEventProcessed = False
        aSmS2 = self._smS2
        if aSmS2 == X.SmS2.s2b :
            self.exitSm()
            self.setSmS1(X.SmS1.s1b)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s1 :
            self.exitSmS1()
        elif self._sm == X.Sm.s2 :
            self.exitSmS2()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s1 :
            if self._smS1 == X.SmS1.Null :
                self.setSmS1(X.SmS1.s1a)
        elif self._sm == X.Sm.s2 :
            if self._smS2 == X.SmS2.Null :
                self.setSmS2(X.SmS2.s2a)

    def exitSmS1(self):
        if self._smS1 == X.SmS1.s1a :
            self.setSmS1(X.SmS1.Null)
            self.stopTimeouts1aTos1bHandler()
        elif self._smS1 == X.SmS1.s1b :
            self.setSmS1(X.SmS1.Null)

    def setSmS1(self, aSmS1):
        self._smS1 = aSmS1
        if self._sm != X.Sm.s1 and aSmS1 != X.SmS1.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1 == X.SmS1.s1a :
            self.startTimeouts1aTos1bHandler()

    def exitSmS2(self):
        if self._smS2 == X.SmS2.s2a :
            self.setSmS2(X.SmS2.Null)
        elif self._smS2 == X.SmS2.s2b :
            self.setSmS2(X.SmS2.Null)
            self.stopTimeouts2bTos1bHandler()

    def setSmS2(self, aSmS2):
        self._smS2 = aSmS2
        if self._sm != X.Sm.s2 and aSmS2 != X.SmS2.Null :
            self.setSm(X.Sm.s2)
        # entry actions and do activities
        if self._smS2 == X.SmS2.s2b :
            self.startTimeouts2bTos1bHandler()

    def startTimeouts1aTos1bHandler(self):
        self._timeouts1aTos1bHandler = self.TimedEventHandler(self, "timeouts1aTos1b", 2)

    def stopTimeouts1aTos1bHandler(self):
        self._timeouts1aTos1bHandler.stop()

    def startTimeouts2bTos1bHandler(self):
        self._timeouts2bTos1bHandler = self.TimedEventHandler(self, "timeouts2bTos1b", 3)

    def stopTimeouts2bTos1bHandler(self):
        self._timeouts2bTos1bHandler.stop()

    class TimedEventHandler():
        def __init__(self, aController, aTimeoutMethodName, aHowLongInSeconds):
            from threading import Timer
            self._timer = None
            self._howLongInSeconds = None
            self._timeoutMethodName = None
            self._controller = None
            self._controller = aController
            self._timeoutMethodName = aTimeoutMethodName
            self._howLongInSeconds = aHowLongInSeconds
            self._timer = None
            self._timer = Timer(self._howLongInSeconds, self.run)
            self._timer.start()

        def stop(self):
            self._timer.cancel()

        def run(self):
            if "timeouts1aTos1b" == self._timeoutMethodName :
                shouldRestart = not self._controller.timeouts1aTos1b()
                if shouldRestart :
                    self._controller.startTimeouts1aTos1bHandler()
                return
            if "timeouts2bTos1b" == self._timeoutMethodName :
                shouldRestart = not self._controller.timeouts2bTos1b()
                if shouldRestart :
                    self._controller.startTimeouts2bTos1bHandler()
                return

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "parallelSm_sameNameDiffStates.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s0 = auto()
        s1 = auto()

    class SmS0T1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t1 = auto()

    class SmS0T2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t2 = auto()
        t3 = auto()

    class SmS1T1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t1 = auto()
        t4 = auto()

    class SmS1T2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t2 = auto()
        t5 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smS1T2 = None
        self._smS1T1 = None
        self._smS0T2 = None
        self._smS0T1 = None
        self._sm = None
        self.setSmS0T1(X.SmS0T1.Null)
        self.setSmS0T2(X.SmS0T2.Null)
        self.setSmS1T1(X.SmS1T1.Null)
        self.setSmS1T2(X.SmS1T2.Null)
        self.setSm(X.Sm.s0)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smS0T1 != X.SmS0T1.Null :
            answer += "." + self._smS0T1.__str__()
        if self._smS0T2 != X.SmS0T2.Null :
            answer += "." + self._smS0T2.__str__()
        if self._smS1T1 != X.SmS1T1.Null :
            answer += "." + self._smS1T1.__str__()
        if self._smS1T2 != X.SmS1T2.Null :
            answer += "." + self._smS1T2.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmS0T1(self):
        return self._smS0T1

    def getSmS0T2(self):
        return self._smS0T2

    def getSmS1T1(self):
        return self._smS1T1

    def getSmS1T2(self):
        return self._smS1T2

    def goS1(self):
        wasEventProcessed = False
        aSmS0T1 = self._smS0T1
        if aSmS0T1 == X.SmS0T1.t1 :
            self.exitSm()
            self.setSm(X.Sm.s1)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goT3(self):
        wasEventProcessed = False
        aSmS0T2 = self._smS0T2
        if aSmS0T2 == X.SmS0T2.t2 :
            self.exitSmS0T2()
            self.setSmS0T2(X.SmS0T2.t3)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goT4(self):
        wasEventProcessed = False
        aSmS1T1 = self._smS1T1
        if aSmS1T1 == X.SmS0T1.t1 :
            self.exitSmS1T1()
            self.setSmS1T1(X.SmS1T1.t4)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goT5(self):
        wasEventProcessed = False
        aSmS1T2 = self._smS1T2
        if aSmS1T2 == X.SmS0T2.t2 :
            self.exitSmS1T2()
            self.setSmS1T2(X.SmS1T2.t5)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s0 :
            self.exitSmS0T1()
            self.exitSmS0T2()
        elif self._sm == X.Sm.s1 :
            self.exitSmS1T1()
            self.exitSmS1T2()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s0 :
            if self._smS0T1 == X.SmS0T1.Null :
                self.setSmS0T1(X.SmS0T1.t1)
            if self._smS0T2 == X.SmS0T2.Null :
                self.setSmS0T2(X.SmS0T2.t2)
        elif self._sm == X.Sm.s1 :
            if self._smS1T1 == X.SmS1T1.Null :
                self.setSmS1T1(X.SmS1T1.t1)
            if self._smS1T2 == X.SmS1T2.Null :
                self.setSmS1T2(X.SmS1T2.t2)

    def exitSmS0T1(self):
        if self._smS0T1 == X.SmS0T1.t1 :
            self.setSmS0T1(X.SmS0T1.Null)

    def setSmS0T1(self, aSmS0T1):
        self._smS0T1 = aSmS0T1
        if self._sm != X.Sm.s0 and aSmS0T1 != X.SmS0T1.Null :
            self.setSm(X.Sm.s0)

    def exitSmS0T2(self):
        if self._smS0T2 == X.SmS0T2.t2 :
            self.setSmS0T2(X.SmS0T2.Null)
        elif self._smS0T2 == X.SmS0T2.t3 :
            self.setSmS0T2(X.SmS0T2.Null)

    def setSmS0T2(self, aSmS0T2):
        self._smS0T2 = aSmS0T2
        if self._sm != X.Sm.s0 and aSmS0T2 != X.SmS0T2.Null :
            self.setSm(X.Sm.s0)

    def exitSmS1T1(self):
        if self._smS1T1 == X.SmS0T1.t1 :
            self.setSmS1T1(X.SmS1T1.Null)
        elif self._smS1T1 == X.SmS1T1.t4 :
            self.setSmS1T1(X.SmS1T1.Null)

    def setSmS1T1(self, aSmS1T1):
        self._smS1T1 = aSmS1T1
        if self._sm != X.Sm.s1 and aSmS1T1 != X.SmS1T1.Null :
            self.setSm(X.Sm.s1)

    def exitSmS1T2(self):
        if self._smS1T2 == X.SmS0T2.t2 :
            self.setSmS1T2(X.SmS1T2.Null)
        elif self._smS1T2 == X.SmS1T2.t5 :
            self.setSmS1T2(X.SmS1T2.Null)

    def setSmS1T2(self, aSmS1T2):
        self._smS1T2 = aSmS1T2
        if self._sm != X.Sm.s1 and aSmS1T2 != X.SmS1T2.Null :
            self.setSm(X.Sm.s1)

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 13 "../EventTransition.ump"
from enum import Enum, auto

class Light():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Light State Machines
    class Bulb(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Off = auto()
        On = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._bulb = None
        self.setBulb(Light.Bulb.Off)

    #------------------------
    # INTERFACE
    #------------------------
    def getBulbFullName(self):
        answer = self._bulb.__str__()
        return answer

    def getBulb(self):
        return self._bulb

    def flip(self):
        wasEventProcessed = False
        aBulb = self._bulb
        if aBulb == Light.Bulb.Off :
            self.setBulb(Light.Bulb.On)
            wasEventProcessed = True
        elif aBulb == Light.Bulb.On :
            self.setBulb(Light.Bulb.Off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setBulb(self, aBulb):
        self._bulb = aBulb

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "stateMachineWithNegativeNumberGuard.ump"
from enum import Enum, auto

class stateMachineWithNegativeNumberGuard():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #stateMachineWithNegativeNumberGuard State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        on = auto()
        off = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(stateMachineWithNegativeNumberGuard.Status.on)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def turnOff(self, pn):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == stateMachineWithNegativeNumberGuard.Status.on :
            if pn > -1 :
                self.setStatus(stateMachineWithNegativeNumberGuard.Status.off)
                wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def turnOn(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == stateMachineWithNegativeNumberGuard.Status.off :
            self.setStatus(stateMachineWithNegativeNumberGuard.Status.on)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../twoEventsWithArguments.ump"
from enum import Enum, auto

class Course():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Course State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Open = auto()
        Full = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(Course.Status.Open)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def register(self, name, age, grades):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Course.Status.Open :
            self.setStatus(Course.Status.Open)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def reject(self, firstName):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Course.Status.Full :
            self.setStatus(Course.Status.Full)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../SimpleStateMachine.ump"
from enum import Enum, auto

class Mentor():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Mentor State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "nestedStates_timedTransition.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s2 = auto()

    class SmS1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        s1a = auto()
        s1b = auto()

    #Helper Variables
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._timeouts1aTos1bHandler = None
        self._smS1 = None
        self._sm = None
        self.setSmS1(X.SmS1.Null)
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smS1 != X.SmS1.Null :
            answer += "." + self._smS1.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmS1(self):
        return self._smS1

    def e2(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.s2 :
            self.setSm(X.Sm.s1)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def timeouts1aTos1b(self):
        wasEventProcessed = False
        aSmS1 = self._smS1
        if aSmS1 == X.SmS1.s1a :
            self.exitSmS1()
            self.setSmS1(X.SmS1.s1b)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e1(self):
        wasEventProcessed = False
        aSmS1 = self._smS1
        if aSmS1 == X.SmS1.s1b :
            self.exitSm()
            self.setSm(X.Sm.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s1 :
            self.exitSmS1()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s1 :
            if self._smS1 == X.SmS1.Null :
                self.setSmS1(X.SmS1.s1a)

    def exitSmS1(self):
        if self._smS1 == X.SmS1.s1a :
            self.setSmS1(X.SmS1.Null)
            self.stopTimeouts1aTos1bHandler()
        elif self._smS1 == X.SmS1.s1b :
            self.setSmS1(X.SmS1.Null)

    def setSmS1(self, aSmS1):
        self._smS1 = aSmS1
        if self._sm != X.Sm.s1 and aSmS1 != X.SmS1.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1 == X.SmS1.s1a :
            self.startTimeouts1aTos1bHandler()

    def startTimeouts1aTos1bHandler(self):
        self._timeouts1aTos1bHandler = self.TimedEventHandler(self, "timeouts1aTos1b", 2)

    def stopTimeouts1aTos1bHandler(self):
        self._timeouts1aTos1bHandler.stop()

    class TimedEventHandler():
        def __init__(self, aController, aTimeoutMethodName, aHowLongInSeconds):
            from threading import Timer
            self._timer = None
            self._howLongInSeconds = None
            self._timeoutMethodName = None
            self._controller = None
            self._controller = aController
            self._timeoutMethodName = aTimeoutMethodName
            self._howLongInSeconds = aHowLongInSeconds
            self._timer = None
            self._timer = Timer(self._howLongInSeconds, self.run)
            self._timer.start()

        def stop(self):
            self._timer.cancel()

        def run(self):
            if "timeouts1aTos1b" == self._timeoutMethodName :
                shouldRestart = not self._controller.timeouts1aTos1b()
                if shouldRestart :
                    self._controller.startTimeouts1aTos1bHandler()
                return

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../nestedStates_UnspecifiedReception.ump"
from enum import Enum, auto

class NestedStatesWthSameEventNames():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #NestedStatesWthSameEventNames State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        nestedState1 = auto()
        nestedState2 = auto()
        state5 = auto()

    class SmNestedState1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        state1 = auto()
        state2 = auto()

    class SmNestedState2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        state3 = auto()
        state4 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smNestedState2 = None
        self._smNestedState1 = None
        self._sm = None
        self.setSmNestedState1(NestedStatesWthSameEventNames.SmNestedState1.Null)
        self.setSmNestedState2(NestedStatesWthSameEventNames.SmNestedState2.Null)
        self.setSm(NestedStatesWthSameEventNames.Sm.nestedState1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smNestedState1 != NestedStatesWthSameEventNames.SmNestedState1.Null :
            answer += "." + self._smNestedState1.__str__()
        if self._smNestedState2 != NestedStatesWthSameEventNames.SmNestedState2.Null :
            answer += "." + self._smNestedState2.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmNestedState1(self):
        return self._smNestedState1

    def getSmNestedState2(self):
        return self._smNestedState2

    def e1(self):
        wasEventProcessed = False
        aSmNestedState1 = self._smNestedState1
        if aSmNestedState1 == NestedStatesWthSameEventNames.SmNestedState1.state1 :
            self.exitSmNestedState1()
            self.setSmNestedState1(NestedStatesWthSameEventNames.SmNestedState1.state2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            wasEventProcessed = self.unspecified(self.getSmNestedState1().__str__(), "e1")
        return wasEventProcessed

    def unspecified(self, state, event):
        wasEventProcessed = False
        aSmNestedState1 = self._smNestedState1
        aSmNestedState2 = self._smNestedState2
        if aSmNestedState1 == NestedStatesWthSameEventNames.SmNestedState1.state1 :
            self.exitSmNestedState1()
            self.setSmNestedState1(NestedStatesWthSameEventNames.SmNestedState1.state1)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        if aSmNestedState2 == NestedStatesWthSameEventNames.SmNestedState2.state4 :
            self.exitSm()
            self.setSm(NestedStatesWthSameEventNames.Sm.nestedState2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e2(self):
        wasEventProcessed = False
        aSmNestedState1 = self._smNestedState1
        if aSmNestedState1 == NestedStatesWthSameEventNames.SmNestedState1.state2 :
            self.exitSm()
            self.setSm(NestedStatesWthSameEventNames.Sm.state5)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def e4(self):
        wasEventProcessed = False
        aSmNestedState2 = self._smNestedState2
        if aSmNestedState2 == NestedStatesWthSameEventNames.SmNestedState2.state4 :
            self.exitSm()
            self.setSm(NestedStatesWthSameEventNames.Sm.state5)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            wasEventProcessed = self.unspecified(self.getSmNestedState2().__str__(), "e4")
        return wasEventProcessed

    def exitSm(self):
        if self._sm == NestedStatesWthSameEventNames.Sm.nestedState1 :
            self.exitSmNestedState1()
        elif self._sm == NestedStatesWthSameEventNames.Sm.nestedState2 :
            self.exitSmNestedState2()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == NestedStatesWthSameEventNames.Sm.nestedState1 :
            if self._smNestedState1 == NestedStatesWthSameEventNames.SmNestedState1.Null :
                self.setSmNestedState1(NestedStatesWthSameEventNames.SmNestedState1.state1)
        elif self._sm == NestedStatesWthSameEventNames.Sm.nestedState2 :
            if self._smNestedState2 == NestedStatesWthSameEventNames.SmNestedState2.Null :
                self.setSmNestedState2(NestedStatesWthSameEventNames.SmNestedState2.state3)

    def exitSmNestedState1(self):
        if self._smNestedState1 == NestedStatesWthSameEventNames.SmNestedState1.state1 :
            self.setSmNestedState1(NestedStatesWthSameEventNames.SmNestedState1.Null)
        elif self._smNestedState1 == NestedStatesWthSameEventNames.SmNestedState1.state2 :
            self.setSmNestedState1(NestedStatesWthSameEventNames.SmNestedState1.Null)

    def setSmNestedState1(self, aSmNestedState1):
        self._smNestedState1 = aSmNestedState1
        if self._sm != NestedStatesWthSameEventNames.Sm.nestedState1 and aSmNestedState1 != NestedStatesWthSameEventNames.SmNestedState1.Null :
            self.setSm(NestedStatesWthSameEventNames.Sm.nestedState1)

    def exitSmNestedState2(self):
        if self._smNestedState2 == NestedStatesWthSameEventNames.SmNestedState2.state3 :
            self.setSmNestedState2(NestedStatesWthSameEventNames.SmNestedState2.Null)
        elif self._smNestedState2 == NestedStatesWthSameEventNames.SmNestedState2.state4 :
            self.setSmNestedState2(NestedStatesWthSameEventNames.SmNestedState2.Null)

    def setSmNestedState2(self, aSmNestedState2):
        self._smNestedState2 = aSmNestedState2
        if self._sm != NestedStatesWthSameEventNames.Sm.nestedState2 and aSmNestedState2 != NestedStatesWthSameEventNames.SmNestedState2.Null :
            self.setSm(NestedStatesWthSameEventNames.Sm.nestedState2)

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../nestedStates.ump"
from enum import Enum, auto

class LightFixture():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #LightFixture State Machines
    class Bulb(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Off = auto()
        On = auto()

    class BulbOn(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        Normal = auto()
        Dimmed = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._bulbOn = None
        self._bulb = None
        self.setBulbOn(LightFixture.BulbOn.Null)
        self.setBulb(LightFixture.Bulb.Off)

    #------------------------
    # INTERFACE
    #------------------------
    def getBulbFullName(self):
        answer = self._bulb.__str__()
        if self._bulbOn != LightFixture.BulbOn.Null :
            answer += "." + self._bulbOn.__str__()
        return answer

    def getBulb(self):
        return self._bulb

    def getBulbOn(self):
        return self._bulbOn

    def flip(self):
        wasEventProcessed = False
        aBulb = self._bulb
        if aBulb == LightFixture.Bulb.Off :
            self.setBulb(LightFixture.Bulb.On)
            wasEventProcessed = True
        elif aBulb == LightFixture.Bulb.On :
            self.exitBulb()
            self.setBulb(LightFixture.Bulb.Off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def touch(self):
        wasEventProcessed = False
        aBulbOn = self._bulbOn
        if aBulbOn == LightFixture.BulbOn.Normal :
            self.exitBulbOn()
            self.setBulbOn(LightFixture.BulbOn.Dimmed)
            wasEventProcessed = True
        elif aBulbOn == LightFixture.BulbOn.Dimmed :
            self.exitBulb()
            self.setBulb(LightFixture.Bulb.Off)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitBulb(self):
        if self._bulb == LightFixture.Bulb.On :
            self.exitBulbOn()

    def setBulb(self, aBulb):
        self._bulb = aBulb
        # entry actions and do activities
        if self._bulb == LightFixture.Bulb.On :
            if self._bulbOn == LightFixture.BulbOn.Null :
                self.setBulbOn(LightFixture.BulbOn.Normal)

    def exitBulbOn(self):
        if self._bulbOn == LightFixture.BulbOn.Normal :
            self.setBulbOn(LightFixture.BulbOn.Null)
        elif self._bulbOn == LightFixture.BulbOn.Dimmed :
            self.setBulbOn(LightFixture.BulbOn.Null)

    def setBulbOn(self, aBulbOn):
        self._bulbOn = aBulbOn
        if self._bulb != LightFixture.Bulb.On and aBulbOn != LightFixture.BulbOn.Null :
            self.setBulb(LightFixture.Bulb.On)

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../BeforeAndAfter_StateMachineSet.ump"
from enum import Enum, auto

class LightFixture():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #LightFixture State Machines
    class Light(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        On = auto()
        Off = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._light = None
        self.setLight(LightFixture.Light.On)

    #------------------------
    # INTERFACE
    #------------------------
    def getLightFullName(self):
        answer = self._light.__str__()
        return answer

    def getLight(self):
        return self._light

    def flip(self):
        wasEventProcessed = False
        aLight = self._light
        if aLight == LightFixture.Light.On :
            self.setLight(LightFixture.Light.Off)
            wasEventProcessed = True
        elif aLight == LightFixture.Light.Off :
            self.setLight(LightFixture.Light.On)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setLight(self, aLight):
        # line 16 "../BeforeAndAfter_StateMachineSet.ump"
        print("About to flip")
        # END OF UMPLE BEFORE INJECTION
        self._light = aLight
        # line 12 "../BeforeAndAfter_StateMachineSet.ump"
        print("Just flipped")
        # END OF UMPLE AFTER INJECTION

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../multipleGuardsSameEvent.ump"
from enum import Enum, auto

class LightFixture():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #LightFixture Attributes
    #LightFixture State Machines
    class Bulb(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        On = auto()
        Off = auto()
        Amber = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._bulb = None
        self._brightness = None
        self._brightness = 0
        self.setBulb(LightFixture.Bulb.On)

    #------------------------
    # INTERFACE
    #------------------------
    def setBrightness(self, aBrightness):
        wasSet = False
        self._brightness = aBrightness
        wasSet = True
        return wasSet

    def getBrightness(self):
        return self._brightness

    def getBulbFullName(self):
        answer = self._bulb.__str__()
        return answer

    def getBulb(self):
        return self._bulb

    def push(self):
        wasEventProcessed = False
        aBulb = self._bulb
        if aBulb == LightFixture.Bulb.On :
            if self.getBrightness() < 1 :
                self.setBulb(LightFixture.Bulb.Off)
                wasEventProcessed = True
            if self.getBrightness() > 10 :
                self.setBulb(LightFixture.Bulb.Amber)
                wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setBulb(self, aBulb):
        self._bulb = aBulb

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "brightness" + ":" + str(self.getBrightness()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../externalStateMachine.ump"
from enum import Enum, auto

class Course():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Course State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Open = auto()
        Closed = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(Course.Status.Open)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def register(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Course.Status.Open :
            self.setStatus(Course.Status.Closed)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def deregister(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Course.Status.Closed :
            self.setStatus(Course.Status.Open)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../guardSpacing.ump"
from enum import Enum, auto

class Garage():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Garage Attributes
    #Garage State Machines
    class GarageDoor(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Open = auto()
        Closing = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aEntranceClear):
        self._garageDoor = None
        self._entranceClear = None
        self._entranceClear = aEntranceClear
        self.setGarageDoor(Garage.GarageDoor.Open)

    #------------------------
    # INTERFACE
    #------------------------
    def setEntranceClear(self, aEntranceClear):
        wasSet = False
        self._entranceClear = aEntranceClear
        wasSet = True
        return wasSet

    def getEntranceClear(self):
        return self._entranceClear

    # Code from template attribute_IsBoolean 
    def isEntranceClear(self):
        return self._entranceClear

    def getGarageDoorFullName(self):
        answer = self._garageDoor.__str__()
        return answer

    def getGarageDoor(self):
        return self._garageDoor

    def pressButton(self):
        wasEventProcessed = False
        aGarageDoor = self._garageDoor
        if aGarageDoor == Garage.GarageDoor.Open :
            if self.getEntranceClear() :
                self.setGarageDoor(Garage.GarageDoor.Closing)
                wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setGarageDoor(self, aGarageDoor):
        self._garageDoor = aGarageDoor

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "entranceClear" + ":" + str(self.getEntranceClear()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 9 "../SimpleStateMachineSpacing.ump"
from enum import Enum, auto

class Student():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Student State Machines
    class Grade(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Pass = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._grade = None
        self.setGrade(Student.Grade.Pass)

    #------------------------
    # INTERFACE
    #------------------------
    def getGradeFullName(self):
        answer = self._grade.__str__()
        return answer

    def getGrade(self):
        return self._grade

    def setGrade(self, aGrade):
        self._grade = aGrade
        return True

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../stateMachineSpacing1.ump"
from enum import Enum, auto

class Garage():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Garage State Machines
    class GarageDoor(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Closed = auto()
        Opening = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._garageDoor = None
        self.setGarageDoor(Garage.GarageDoor.Closed)

    #------------------------
    # INTERFACE
    #------------------------
    def getGarageDoorFullName(self):
        answer = self._garageDoor.__str__()
        return answer

    def getGarageDoor(self):
        return self._garageDoor

    def pressButton(self):
        wasEventProcessed = False
        aGarageDoor = self._garageDoor
        if aGarageDoor == Garage.GarageDoor.Closed :
            # line 7 "../stateMachineSpacing1.ump"
            turnLightOn()
            self.setGarageDoor(Garage.GarageDoor.Opening)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setGarageDoor(self, aGarageDoor):
        self._garageDoor = aGarageDoor

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../stateMachineSpacing2.ump"
from enum import Enum, auto

class Garage():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Garage State Machines
    class GarageDoor(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Closed = auto()
        Opening = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._garageDoor = None
        self.setGarageDoor(Garage.GarageDoor.Closed)

    #------------------------
    # INTERFACE
    #------------------------
    def getGarageDoorFullName(self):
        answer = self._garageDoor.__str__()
        return answer

    def getGarageDoor(self):
        return self._garageDoor

    def pressButton(self):
        wasEventProcessed = False
        aGarageDoor = self._garageDoor
        if aGarageDoor == Garage.GarageDoor.Closed :
            # line 7 "../stateMachineSpacing2.ump"
            turnLightOn()
            self.setGarageDoor(Garage.GarageDoor.Opening)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setGarageDoor(self, aGarageDoor):
        self._garageDoor = aGarageDoor

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "parallelSm_diffNamesDiffStates.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s0 = auto()
        s1 = auto()

    class SmS0T1(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t1 = auto()

    class SmS0T2(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t2 = auto()
        t3 = auto()

    class SmS1T4(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t4 = auto()
        t5 = auto()

    class SmS1T6(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t6 = auto()
        t7 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smS1T6 = None
        self._smS1T4 = None
        self._smS0T2 = None
        self._smS0T1 = None
        self._sm = None
        self.setSmS0T1(X.SmS0T1.Null)
        self.setSmS0T2(X.SmS0T2.Null)
        self.setSmS1T4(X.SmS1T4.Null)
        self.setSmS1T6(X.SmS1T6.Null)
        self.setSm(X.Sm.s0)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smS0T1 != X.SmS0T1.Null :
            answer += "." + self._smS0T1.__str__()
        if self._smS0T2 != X.SmS0T2.Null :
            answer += "." + self._smS0T2.__str__()
        if self._smS1T4 != X.SmS1T4.Null :
            answer += "." + self._smS1T4.__str__()
        if self._smS1T6 != X.SmS1T6.Null :
            answer += "." + self._smS1T6.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmS0T1(self):
        return self._smS0T1

    def getSmS0T2(self):
        return self._smS0T2

    def getSmS1T4(self):
        return self._smS1T4

    def getSmS1T6(self):
        return self._smS1T6

    def goS1(self):
        wasEventProcessed = False
        aSmS0T1 = self._smS0T1
        if aSmS0T1 == X.SmS0T1.t1 :
            self.exitSm()
            self.setSm(X.Sm.s1)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goT3(self):
        wasEventProcessed = False
        aSmS0T2 = self._smS0T2
        if aSmS0T2 == X.SmS0T2.t2 :
            self.exitSmS0T2()
            self.setSmS0T2(X.SmS0T2.t3)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goT5(self):
        wasEventProcessed = False
        aSmS1T4 = self._smS1T4
        if aSmS1T4 == X.SmS1T4.t4 :
            self.exitSmS1T4()
            self.setSmS1T4(X.SmS1T4.t5)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goT7(self):
        wasEventProcessed = False
        aSmS1T6 = self._smS1T6
        if aSmS1T6 == X.SmS1T6.t6 :
            self.exitSmS1T6()
            self.setSmS1T6(X.SmS1T6.t7)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s0 :
            self.exitSmS0T1()
            self.exitSmS0T2()
        elif self._sm == X.Sm.s1 :
            self.exitSmS1T4()
            self.exitSmS1T6()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s0 :
            if self._smS0T1 == X.SmS0T1.Null :
                self.setSmS0T1(X.SmS0T1.t1)
            if self._smS0T2 == X.SmS0T2.Null :
                self.setSmS0T2(X.SmS0T2.t2)
        elif self._sm == X.Sm.s1 :
            if self._smS1T4 == X.SmS1T4.Null :
                self.setSmS1T4(X.SmS1T4.t4)
            if self._smS1T6 == X.SmS1T6.Null :
                self.setSmS1T6(X.SmS1T6.t6)

    def exitSmS0T1(self):
        if self._smS0T1 == X.SmS0T1.t1 :
            self.setSmS0T1(X.SmS0T1.Null)

    def setSmS0T1(self, aSmS0T1):
        self._smS0T1 = aSmS0T1
        if self._sm != X.Sm.s0 and aSmS0T1 != X.SmS0T1.Null :
            self.setSm(X.Sm.s0)

    def exitSmS0T2(self):
        if self._smS0T2 == X.SmS0T2.t2 :
            self.setSmS0T2(X.SmS0T2.Null)
        elif self._smS0T2 == X.SmS0T2.t3 :
            self.setSmS0T2(X.SmS0T2.Null)

    def setSmS0T2(self, aSmS0T2):
        self._smS0T2 = aSmS0T2
        if self._sm != X.Sm.s0 and aSmS0T2 != X.SmS0T2.Null :
            self.setSm(X.Sm.s0)

    def exitSmS1T4(self):
        if self._smS1T4 == X.SmS1T4.t4 :
            self.setSmS1T4(X.SmS1T4.Null)
        elif self._smS1T4 == X.SmS1T4.t5 :
            self.setSmS1T4(X.SmS1T4.Null)

    def setSmS1T4(self, aSmS1T4):
        self._smS1T4 = aSmS1T4
        if self._sm != X.Sm.s1 and aSmS1T4 != X.SmS1T4.Null :
            self.setSm(X.Sm.s1)

    def exitSmS1T6(self):
        if self._smS1T6 == X.SmS1T6.t6 :
            self.setSmS1T6(X.SmS1T6.Null)
        elif self._smS1T6 == X.SmS1T6.t7 :
            self.setSmS1T6(X.SmS1T6.Null)

    def setSmS1T6(self, aSmS1T6):
        self._smS1T6 = aSmS1T6
        if self._sm != X.Sm.s1 and aSmS1T6 != X.SmS1T6.Null :
            self.setSm(X.Sm.s1)

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../timedEvent.ump"
from enum import Enum, auto

class Mentor():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Mentor Attributes
    #Mentor State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Ok = auto()
        NotOkay = auto()
        NotOk = auto()

    #Helper Variables
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._timeoutNotOkayToOkHandler = None
        self._timeoutOkToNotOkHandler = None
        self._status = None
        self._howLongUntilOk = None
        self._howLongUntilOk = 3
        self.setStatus(Mentor.Status.Ok)

    #------------------------
    # INTERFACE
    #------------------------
    def setHowLongUntilOk(self, aHowLongUntilOk):
        wasSet = False
        self._howLongUntilOk = aHowLongUntilOk
        wasSet = True
        return wasSet

    def getHowLongUntilOk(self):
        return self._howLongUntilOk

    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def timeoutOkToNotOk(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Mentor.Status.Ok :
            self.exitStatus()
            self.setStatus(Mentor.Status.NotOk)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def timeoutNotOkayToOk(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Mentor.Status.NotOkay :
            self.exitStatus()
            self.setStatus(Mentor.Status.Ok)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitStatus(self):
        if self._status == Mentor.Status.Ok :
            self.stopTimeoutOkToNotOkHandler()
        elif self._status == Mentor.Status.NotOkay :
            self.stopTimeoutNotOkayToOkHandler()

    def setStatus(self, aStatus):
        self._status = aStatus
        # entry actions and do activities
        if self._status == Mentor.Status.Ok :
            self.startTimeoutOkToNotOkHandler()
        elif self._status == Mentor.Status.NotOkay :
            self.startTimeoutNotOkayToOkHandler()

    def startTimeoutOkToNotOkHandler(self):
        self._timeoutOkToNotOkHandler = self.TimedEventHandler(self, "timeoutOkToNotOk", 4)

    def stopTimeoutOkToNotOkHandler(self):
        self._timeoutOkToNotOkHandler.stop()

    def startTimeoutNotOkayToOkHandler(self):
        self._timeoutNotOkayToOkHandler = self.TimedEventHandler(self, "timeoutNotOkayToOk", self._howLongUntilOk)

    def stopTimeoutNotOkayToOkHandler(self):
        self._timeoutNotOkayToOkHandler.stop()

    class TimedEventHandler():
        def __init__(self, aController, aTimeoutMethodName, aHowLongInSeconds):
            from threading import Timer
            self._timer = None
            self._howLongInSeconds = None
            self._timeoutMethodName = None
            self._controller = None
            self._controller = aController
            self._timeoutMethodName = aTimeoutMethodName
            self._howLongInSeconds = aHowLongInSeconds
            self._timer = None
            self._timer = Timer(self._howLongInSeconds, self.run)
            self._timer.start()

        def stop(self):
            self._timer.cancel()

        def run(self):
            if "timeoutOkToNotOk" == self._timeoutMethodName :
                shouldRestart = not self._controller.timeoutOkToNotOk()
                if shouldRestart :
                    self._controller.startTimeoutOkToNotOkHandler()
                return
            if "timeoutNotOkayToOk" == self._timeoutMethodName :
                shouldRestart = not self._controller.timeoutNotOkayToOk()
                if shouldRestart :
                    self._controller.startTimeoutNotOkayToOkHandler()
                return

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "howLongUntilOk" + ":" + str(self.getHowLongUntilOk()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "1600_guardsOnEntryAndExit.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s2 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._sm = None
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        return answer

    def getSm(self):
        return self._sm

    def hh(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.s1 :
            self.exitSm()
            self.setSm(X.Sm.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def hhh(self):
        wasEventProcessed = False
        aSm = self._sm
        if aSm == X.Sm.s2 :
            self.exitSm()
            self.setSm(X.Sm.s1)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s1 :
            # line 8 "1600_guardsOnEntryAndExit.ump"
            if not condition2 :
                print("s1 exit!")
        elif self._sm == X.Sm.s2 :
            # line 17 "1600_guardsOnEntryAndExit.ump"
            if condition4 :
                print("s2 exit!")

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s1 :
            # line 4 "1600_guardsOnEntryAndExit.ump"
            if condition :
                print("s1 entry!")
        elif self._sm == X.Sm.s2 :
            # line 13 "1600_guardsOnEntryAndExit.ump"
            if condition3 :
                print("s2 entry!")

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "checkExternalTransitions_concurrentStateMachines.ump"
from enum import Enum, auto

class X():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X State Machines
    class Sm(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        s1 = auto()
        s2 = auto()

    class SmS1A(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        a = auto()

    class SmS1AA(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t1 = auto()
        t2 = auto()

    class SmS1B(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        b = auto()

    class SmS1BB(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Null = auto()
        t3 = auto()
        t4 = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._smS1BB = None
        self._smS1B = None
        self._smS1AA = None
        self._smS1A = None
        self._sm = None
        self.setSmS1A(X.SmS1A.Null)
        self.setSmS1AA(X.SmS1AA.Null)
        self.setSmS1B(X.SmS1B.Null)
        self.setSmS1BB(X.SmS1BB.Null)
        self.setSm(X.Sm.s1)

    #------------------------
    # INTERFACE
    #------------------------
    def getSmFullName(self):
        answer = self._sm.__str__()
        if self._smS1A != X.SmS1A.Null :
            answer += "." + self._smS1A.__str__()
        if self._smS1AA != X.SmS1AA.Null :
            answer += "." + self._smS1AA.__str__()
        if self._smS1B != X.SmS1B.Null :
            answer += "." + self._smS1B.__str__()
        if self._smS1BB != X.SmS1BB.Null :
            answer += "." + self._smS1BB.__str__()
        return answer

    def getSm(self):
        return self._sm

    def getSmS1A(self):
        return self._smS1A

    def getSmS1AA(self):
        return self._smS1AA

    def getSmS1B(self):
        return self._smS1B

    def getSmS1BB(self):
        return self._smS1BB

    def goToT2(self):
        wasEventProcessed = False
        aSmS1AA = self._smS1AA
        if aSmS1AA == X.SmS1AA.t1 :
            self.exitSmS1AA()
            self.setSmS1AA(X.SmS1AA.t2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToT4(self):
        wasEventProcessed = False
        aSmS1AA = self._smS1AA
        if aSmS1AA == X.SmS1AA.t2 :
            self.exitSmS1A()
            self.setSmS1BB(X.SmS1BB.t4)
            self.setSmS1A(X.SmS1A.a)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def goToS2(self):
        wasEventProcessed = False
        aSmS1BB = self._smS1BB
        if aSmS1BB == X.SmS1BB.t4 :
            self.exitSm()
            self.setSm(X.Sm.s2)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def exitSm(self):
        if self._sm == X.Sm.s1 :
            self.exitSmS1A()
            self.exitSmS1B()

    def setSm(self, aSm):
        self._sm = aSm
        # entry actions and do activities
        if self._sm == X.Sm.s1 :
            if self._smS1A == X.SmS1A.Null :
                self.setSmS1A(X.SmS1A.a)
            if self._smS1B == X.SmS1B.Null :
                self.setSmS1B(X.SmS1B.b)

    def exitSmS1A(self):
        if self._smS1A == X.SmS1A.a :
            self.exitSmS1AA()
            # line 5 "checkExternalTransitions_concurrentStateMachines.ump"
            exit_a_action()
            self.setSmS1A(X.SmS1A.Null)

    def setSmS1A(self, aSmS1A):
        self._smS1A = aSmS1A
        if self._sm != X.Sm.s1 and aSmS1A != X.SmS1A.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1A == X.SmS1A.a :
            if self._smS1AA == X.SmS1AA.Null :
                self.setSmS1AA(X.SmS1AA.t1)

    def exitSmS1AA(self):
        if self._smS1AA == X.SmS1AA.t1 :
            self.setSmS1AA(X.SmS1AA.Null)
        elif self._smS1AA == X.SmS1AA.t2 :
            self.setSmS1AA(X.SmS1AA.Null)

    def setSmS1AA(self, aSmS1AA):
        self._smS1AA = aSmS1AA
        if self._smS1A != X.SmS1A.a and aSmS1AA != X.SmS1AA.Null :
            self.setSmS1A(X.SmS1A.a)

    def exitSmS1B(self):
        if self._smS1B == X.SmS1B.b :
            self.exitSmS1BB()
            # line 15 "checkExternalTransitions_concurrentStateMachines.ump"
            exit_b_action()
            self.setSmS1B(X.SmS1B.Null)

    def setSmS1B(self, aSmS1B):
        self._smS1B = aSmS1B
        if self._sm != X.Sm.s1 and aSmS1B != X.SmS1B.Null :
            self.setSm(X.Sm.s1)
        # entry actions and do activities
        if self._smS1B == X.SmS1B.b :
            if self._smS1BB == X.SmS1BB.Null :
                self.setSmS1BB(X.SmS1BB.t3)

    def exitSmS1BB(self):
        if self._smS1BB == X.SmS1BB.t3 :
            self.setSmS1BB(X.SmS1BB.Null)
        elif self._smS1BB == X.SmS1BB.t4 :
            self.setSmS1BB(X.SmS1BB.Null)

    def setSmS1BB(self, aSmS1BB):
        self._smS1BB = aSmS1BB
        if self._smS1B != X.SmS1B.b and aSmS1BB != X.SmS1BB.Null :
            self.setSmS1B(X.SmS1B.b)

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../AutoEventTransition.ump"
from enum import Enum, auto

class Light():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Light State Machines
    class Bulb(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Off = auto()
        On = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._bulb = None
        self.setBulb(Light.Bulb.Off)

    #------------------------
    # INTERFACE
    #------------------------
    def getBulbFullName(self):
        answer = self._bulb.__str__()
        return answer

    def getBulb(self):
        return self._bulb

    def __autotransition1__(self):
        wasEventProcessed = False
        aBulb = self._bulb
        if aBulb == Light.Bulb.Off :
            self.setBulb(Light.Bulb.On)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setBulb(self, aBulb):
        self._bulb = aBulb
        # entry actions and do activities
        if self._bulb == Light.Bulb.Off :
            self.__autotransition1__()

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 20 "../SimpleStateMachine.ump"
from enum import Enum, auto

class Course():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Course State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Open = auto()
        Full = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(Course.Status.Open)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def setStatus(self, aStatus):
        self._status = aStatus
        return True

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../oneGuard.ump"
from enum import Enum, auto

class LightFixture():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #LightFixture Attributes
    #LightFixture State Machines
    class Bulb(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        On = auto()
        Off = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._bulb = None
        self._brightness = None
        self._brightness = 0
        self.setBulb(LightFixture.Bulb.On)

    #------------------------
    # INTERFACE
    #------------------------
    def setBrightness(self, aBrightness):
        wasSet = False
        self._brightness = aBrightness
        wasSet = True
        return wasSet

    def getBrightness(self):
        return self._brightness

    def getBulbFullName(self):
        answer = self._bulb.__str__()
        return answer

    def getBulb(self):
        return self._bulb

    def push(self):
        wasEventProcessed = False
        aBulb = self._bulb
        if aBulb == LightFixture.Bulb.On :
            if self.getBrightness() < 1 :
                self.setBulb(LightFixture.Bulb.Off)
                wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setBulb(self, aBulb):
        self._bulb = aBulb

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "brightness" + ":" + str(self.getBrightness()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 12 "../SimpleStateMachine.ump"
from enum import Enum, auto

class Student():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Student State Machines
    class Grade(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Pass = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._grade = None
        self.setGrade(Student.Grade.Pass)

    #------------------------
    # INTERFACE
    #------------------------
    def getGradeFullName(self):
        answer = self._grade.__str__()
        return answer

    def getGrade(self):
        return self._grade

    def setGrade(self, aGrade):
        self._grade = aGrade
        return True

    def delete(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../EventTransition.ump"
from enum import Enum, auto

class Course():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Course State Machines
    class Status(Enum):
        def _generate_next_value_(name, start, count, last_values):
            return name
        def __str__(self):
            return str(self.value)
        Open = auto()

    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._status = None
        self.setStatus(Course.Status.Open)

    #------------------------
    # INTERFACE
    #------------------------
    def getStatusFullName(self):
        answer = self._status.__str__()
        return answer

    def getStatus(self):
        return self._status

    def register(self):
        wasEventProcessed = False
        aStatus = self._status
        if aStatus == Course.Status.Open :
            self.setStatus(Course.Status.Open)
            wasEventProcessed = True
        else :
            # Other states do respond to this event
            pass
        return wasEventProcessed

    def setStatus(self, aStatus):
        self._status = aStatus

    def delete(self):
        pass