#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "nameSpaceDefaultTest1.ump"

class A():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        pass

    #------------------------
    # INTERFACE
    #------------------------
    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 "nameSpaceDefaultTest1.ump"
# line 9 "nameSpaceDefaultTest1.ump"

class B():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        pass

    #------------------------
    # INTERFACE
    #------------------------
    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 7 "nameSpaceDefaultTest1.ump"

class C():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        pass

    #------------------------
    # INTERFACE
    #------------------------
    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 2 "nameSpaceDefaultTest1.ump"
# line 5 "nameSpaceDefaultTest1.ump"
# line 1 "nameSpaceDefaultTest1.ump"
from abc import ABC, abstractmethod

class I(ABC):
    @abstractmethod
    def __init__(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "nameSpaceDefaultTest2.ump"
from J import J

class X(J):
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X Associations
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._ies = None
        self._ies = []

    #------------------------
    # INTERFACE
    #------------------------
    # Code from template association_GetMany 
    def getY(self, index):
        aY = self._ies[index]
        return aY

    def getIes(self):
        newIes = tuple(self._ies)
        return newIes

    def numberOfIes(self):
        number = len(self._ies)
        return number

    def hasIes(self):
        has = len(self._ies) > 0
        return has

    def indexOfY(self, aY):
        index = (-1 if not aY in self._ies else self._ies.index(aY))
        return index

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

    # Code from template association_AddManyToManyMethod 
    def addY(self, aY):
        wasAdded = False
        if (aY) in self._ies :
            return False
        self._ies.append(aY)
        if aY.indexOfX(self) != -1 :
            wasAdded = True
        else :
            wasAdded = aY.addX(self)
            if not wasAdded :
                self._ies.remove(aY)
        return wasAdded

    # Code from template association_RemoveMany 
    def removeY(self, aY):
        wasRemoved = False
        if not (aY) in self._ies :
            return wasRemoved
        oldIndex = (-1 if not aY in self._ies else self._ies.index(aY))
        self._ies.remove(oldIndex)
        if aY.indexOfX(self) == -1 :
            wasRemoved = True
        else :
            wasRemoved = aY.removeX(self)
            if not wasRemoved :
                self._ies.insert(oldIndex, aY)
        return wasRemoved

    # Code from template association_AddIndexControlFunctions 
    def addYAt(self, aY, index):
        wasAdded = False
        if self.addY(aY) :
            if index < 0 :
                index = 0
            if index > self.numberOfIes() :
                index = self.numberOfIes() - 1
            self._ies.remove(aY)
            self._ies.insert(index, aY)
            wasAdded = True
        return wasAdded

    def addOrMoveYAt(self, aY, index):
        wasAdded = False
        if (aY) in self._ies :
            if index < 0 :
                index = 0
            if index > self.numberOfIes() :
                index = self.numberOfIes() - 1
            self._ies.remove(aY)
            self._ies.insert(index, aY)
            wasAdded = True
        else :
            wasAdded = self.addYAt(aY, index)
        return wasAdded

    def delete(self):
        copyOfIes = self._ies.copy()
        self._ies.clear()
        for aY in copyOfIes:
            aY.removeX(self)


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 5 "nameSpaceDefaultTest2.ump"
# line 1 "nameSpaceDefaultTest2.ump"

class Y():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Y Associations
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._xs = None
        self._xs = []

    #------------------------
    # INTERFACE
    #------------------------
    # Code from template association_GetMany 
    def getX(self, index):
        aX = self._xs[index]
        return aX

    def getXs(self):
        newXs = tuple(self._xs)
        return newXs

    def numberOfXs(self):
        number = len(self._xs)
        return number

    def hasXs(self):
        has = len(self._xs) > 0
        return has

    def indexOfX(self, aX):
        index = (-1 if not aX in self._xs else self._xs.index(aX))
        return index

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

    # Code from template association_AddManyToManyMethod 
    def addX(self, aX):
        wasAdded = False
        if (aX) in self._xs :
            return False
        self._xs.append(aX)
        if aX.indexOfY(self) != -1 :
            wasAdded = True
        else :
            wasAdded = aX.addY(self)
            if not wasAdded :
                self._xs.remove(aX)
        return wasAdded

    # Code from template association_RemoveMany 
    def removeX(self, aX):
        wasRemoved = False
        if not (aX) in self._xs :
            return wasRemoved
        oldIndex = (-1 if not aX in self._xs else self._xs.index(aX))
        self._xs.remove(oldIndex)
        if aX.indexOfY(self) == -1 :
            wasRemoved = True
        else :
            wasRemoved = aX.removeY(self)
            if not wasRemoved :
                self._xs.insert(oldIndex, aX)
        return wasRemoved

    # Code from template association_AddIndexControlFunctions 
    def addXAt(self, aX, index):
        wasAdded = False
        if self.addX(aX) :
            if index < 0 :
                index = 0
            if index > self.numberOfXs() :
                index = self.numberOfXs() - 1
            self._xs.remove(aX)
            self._xs.insert(index, aX)
            wasAdded = True
        return wasAdded

    def addOrMoveXAt(self, aX, index):
        wasAdded = False
        if (aX) in self._xs :
            if index < 0 :
                index = 0
            if index > self.numberOfXs() :
                index = self.numberOfXs() - 1
            self._xs.remove(aX)
            self._xs.insert(index, aX)
            wasAdded = True
        else :
            wasAdded = self.addXAt(aX, index)
        return wasAdded

    def delete(self):
        copyOfXs = self._xs.copy()
        self._xs.clear()
        for aX in copyOfXs:
            aX.removeY(self)


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "nameSpaceDefaultTest2.ump"
from abc import ABC, abstractmethod

class I(ABC):
    @abstractmethod
    def __init__(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 2 "nameSpaceDefaultTest2.ump"
from abc import ABC, abstractmethod
from I import I

class J(ABC, I):
    @abstractmethod
    def __init__(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 4 "../nameSpaceRedefinedTest1.ump"
# line 8 "../nameSpaceRedefinedTest1.ump"

class A():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        pass

    #------------------------
    # INTERFACE
    #------------------------
    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 5 "../nameSpaceRedefinedTest1.ump"
# line 1 "../nameSpaceRedefinedTest1.ump"

class B():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #B Attributes
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aX):
        self._x = None
        self._x = aX

    #------------------------
    # INTERFACE
    #------------------------
    def setX(self, aX):
        wasSet = False
        self._x = aX
        wasSet = True
        return wasSet

    def getX(self):
        return self._x

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "x" + ":" + str(self.getX()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "../nameSpaceRedefinedTest1.ump"
# line 3 "../nameSpaceRedefinedTest1.ump"
# line 7 "../nameSpaceRedefinedTest1.ump"
from abc import ABC, abstractmethod

class I(ABC):
    @abstractmethod
    def __init__(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../nameSpaceRedefinedTest2.ump"
from J import J

class X(J):
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #X Associations
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._ies = None
        self._ies = []

    #------------------------
    # INTERFACE
    #------------------------
    # Code from template association_GetMany 
    def getY(self, index):
        aY = self._ies[index]
        return aY

    def getIes(self):
        newIes = tuple(self._ies)
        return newIes

    def numberOfIes(self):
        number = len(self._ies)
        return number

    def hasIes(self):
        has = len(self._ies) > 0
        return has

    def indexOfY(self, aY):
        index = (-1 if not aY in self._ies else self._ies.index(aY))
        return index

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

    # Code from template association_AddManyToManyMethod 
    def addY(self, aY):
        wasAdded = False
        if (aY) in self._ies :
            return False
        self._ies.append(aY)
        if aY.indexOfX(self) != -1 :
            wasAdded = True
        else :
            wasAdded = aY.addX(self)
            if not wasAdded :
                self._ies.remove(aY)
        return wasAdded

    # Code from template association_RemoveMany 
    def removeY(self, aY):
        wasRemoved = False
        if not (aY) in self._ies :
            return wasRemoved
        oldIndex = (-1 if not aY in self._ies else self._ies.index(aY))
        self._ies.remove(oldIndex)
        if aY.indexOfX(self) == -1 :
            wasRemoved = True
        else :
            wasRemoved = aY.removeX(self)
            if not wasRemoved :
                self._ies.insert(oldIndex, aY)
        return wasRemoved

    # Code from template association_AddIndexControlFunctions 
    def addYAt(self, aY, index):
        wasAdded = False
        if self.addY(aY) :
            if index < 0 :
                index = 0
            if index > self.numberOfIes() :
                index = self.numberOfIes() - 1
            self._ies.remove(aY)
            self._ies.insert(index, aY)
            wasAdded = True
        return wasAdded

    def addOrMoveYAt(self, aY, index):
        wasAdded = False
        if (aY) in self._ies :
            if index < 0 :
                index = 0
            if index > self.numberOfIes() :
                index = self.numberOfIes() - 1
            self._ies.remove(aY)
            self._ies.insert(index, aY)
            wasAdded = True
        else :
            wasAdded = self.addYAt(aY, index)
        return wasAdded

    def delete(self):
        copyOfIes = self._ies.copy()
        self._ies.clear()
        for aY in copyOfIes:
            aY.removeX(self)


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "../nameSpaceRedefinedTest2.ump"

class Y():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Y Associations
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._xs = None
        self._xs = []

    #------------------------
    # INTERFACE
    #------------------------
    # Code from template association_GetMany 
    def getX(self, index):
        aX = self._xs[index]
        return aX

    def getXs(self):
        newXs = tuple(self._xs)
        return newXs

    def numberOfXs(self):
        number = len(self._xs)
        return number

    def hasXs(self):
        has = len(self._xs) > 0
        return has

    def indexOfX(self, aX):
        index = (-1 if not aX in self._xs else self._xs.index(aX))
        return index

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

    # Code from template association_AddManyToManyMethod 
    def addX(self, aX):
        wasAdded = False
        if (aX) in self._xs :
            return False
        self._xs.append(aX)
        if aX.indexOfY(self) != -1 :
            wasAdded = True
        else :
            wasAdded = aX.addY(self)
            if not wasAdded :
                self._xs.remove(aX)
        return wasAdded

    # Code from template association_RemoveMany 
    def removeX(self, aX):
        wasRemoved = False
        if not (aX) in self._xs :
            return wasRemoved
        oldIndex = (-1 if not aX in self._xs else self._xs.index(aX))
        self._xs.remove(oldIndex)
        if aX.indexOfY(self) == -1 :
            wasRemoved = True
        else :
            wasRemoved = aX.removeY(self)
            if not wasRemoved :
                self._xs.insert(oldIndex, aX)
        return wasRemoved

    # Code from template association_AddIndexControlFunctions 
    def addXAt(self, aX, index):
        wasAdded = False
        if self.addX(aX) :
            if index < 0 :
                index = 0
            if index > self.numberOfXs() :
                index = self.numberOfXs() - 1
            self._xs.remove(aX)
            self._xs.insert(index, aX)
            wasAdded = True
        return wasAdded

    def addOrMoveXAt(self, aX, index):
        wasAdded = False
        if (aX) in self._xs :
            if index < 0 :
                index = 0
            if index > self.numberOfXs() :
                index = self.numberOfXs() - 1
            self._xs.remove(aX)
            self._xs.insert(index, aX)
            wasAdded = True
        else :
            wasAdded = self.addXAt(aX, index)
        return wasAdded

    def delete(self):
        copyOfXs = self._xs.copy()
        self._xs.clear()
        for aX in copyOfXs:
            aX.removeY(self)


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 1 "../nameSpaceRedefinedTest2.ump"
from abc import ABC, abstractmethod

class I(ABC):
    @abstractmethod
    def __init__(self):
        pass


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 2 "../nameSpaceRedefinedTest2.ump"
from abc import ABC, abstractmethod
from I import I

class J(ABC, I):
    @abstractmethod
    def __init__(self):
        pass