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

class Analyzer():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Analyzer Associations
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self):
        self._parent = None
        self._children = None
        self._children = []
        self._parent = []

    #------------------------
    # INTERFACE
    #------------------------
    # Code from template association_GetMany 
    def getChild(self, index):
        aChild = self._children[index]
        return aChild

    def getChildren(self):
        newChildren = tuple(self._children)
        return newChildren

    def numberOfChildren(self):
        number = len(self._children)
        return number

    def hasChildren(self):
        has = len(self._children) > 0
        return has

    def indexOfChild(self, aChild):
        index = (-1 if not aChild in self._children else self._children.index(aChild))
        return index

    # Code from template association_GetMany 
    def getParent1(self, index):
        aParent = self._parent[index]
        return aParent

    def getParent2(self):
        newParent = tuple(self._parent)
        return newParent

    def numberOfParent(self):
        number = len(self._parent)
        return number

    def hasParent(self):
        has = len(self._parent) > 0
        return has

    def indexOfParent(self, aParent):
        index = (-1 if not aParent in self._parent else self._parent.index(aParent))
        return index

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

    # Code from template association_AddManyToManyMethod 
    def addChild(self, aChild):
        wasAdded = False
        if (aChild) in self._children :
            return False
        self._children.append(aChild)
        if aChild.indexOfParent(self) != -1 :
            wasAdded = True
        else :
            wasAdded = aChild.addParent(self)
            if not wasAdded :
                self._children.remove(aChild)
        return wasAdded

    # Code from template association_RemoveMany 
    def removeChild(self, aChild):
        wasRemoved = False
        if not (aChild) in self._children :
            return wasRemoved
        oldIndex = (-1 if not aChild in self._children else self._children.index(aChild))
        self._children.remove(oldIndex)
        if aChild.indexOfParent(self) == -1 :
            wasRemoved = True
        else :
            wasRemoved = aChild.removeParent(self)
            if not wasRemoved :
                self._children.insert(oldIndex, aChild)
        return wasRemoved

    # Code from template association_AddIndexControlFunctions 
    def addChildAt(self, aChild, index):
        wasAdded = False
        if self.addChild(aChild) :
            if index < 0 :
                index = 0
            if index > self.numberOfChildren() :
                index = self.numberOfChildren() - 1
            self._children.remove(aChild)
            self._children.insert(index, aChild)
            wasAdded = True
        return wasAdded

    def addOrMoveChildAt(self, aChild, index):
        wasAdded = False
        if (aChild) in self._children :
            if index < 0 :
                index = 0
            if index > self.numberOfChildren() :
                index = self.numberOfChildren() - 1
            self._children.remove(aChild)
            self._children.insert(index, aChild)
            wasAdded = True
        else :
            wasAdded = self.addChildAt(aChild, index)
        return wasAdded

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

    # Code from template association_AddManyToManyMethod 
    def addParent(self, aParent):
        wasAdded = False
        if (aParent) in self._parent :
            return False
        self._parent.append(aParent)
        if aParent.indexOfChild(self) != -1 :
            wasAdded = True
        else :
            wasAdded = aParent.addChild(self)
            if not wasAdded :
                self._parent.remove(aParent)
        return wasAdded

    # Code from template association_RemoveMany 
    def removeParent(self, aParent):
        wasRemoved = False
        if not (aParent) in self._parent :
            return wasRemoved
        oldIndex = (-1 if not aParent in self._parent else self._parent.index(aParent))
        self._parent.remove(oldIndex)
        if aParent.indexOfChild(self) == -1 :
            wasRemoved = True
        else :
            wasRemoved = aParent.removeChild(self)
            if not wasRemoved :
                self._parent.insert(oldIndex, aParent)
        return wasRemoved

    # Code from template association_AddIndexControlFunctions 
    def addParentAt(self, aParent, index):
        wasAdded = False
        if self.addParent(aParent) :
            if index < 0 :
                index = 0
            if index > self.numberOfParent() :
                index = self.numberOfParent() - 1
            self._parent.remove(aParent)
            self._parent.insert(index, aParent)
            wasAdded = True
        return wasAdded

    def addOrMoveParentAt(self, aParent, index):
        wasAdded = False
        if (aParent) in self._parent :
            if index < 0 :
                index = 0
            if index > self.numberOfParent() :
                index = self.numberOfParent() - 1
            self._parent.remove(aParent)
            self._parent.insert(index, aParent)
            wasAdded = True
        else :
            wasAdded = self.addParentAt(aParent, index)
        return wasAdded

    def delete(self):
        copyOfChildren = self._children.copy()
        self._children.clear()
        for aChild in copyOfChildren:
            aChild.removeParent(self)

        copyOfParent = self._parent.copy()
        self._parent.clear()
        for aParent in copyOfParent:
            aParent.removeChild(self)

    def getParent(self, *argv):
        if len(argv) == 1 and isinstance(argv[0], int) :
            return self.getParent1(argv[0])
        if len(argv) == 0 :
            return self.getParent2()
        raise TypeError("No method matches provided parameters")


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

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

    #------------------------
    # INTERFACE
    #------------------------
    # Code from template association_GetMany 
    def getOffspring1(self, index):
        aOffspring = self._offspring[index]
        return aOffspring

    def getOffspring2(self):
        newOffspring = tuple(self._offspring)
        return newOffspring

    def numberOfOffspring(self):
        number = len(self._offspring)
        return number

    def hasOffspring(self):
        has = len(self._offspring) > 0
        return has

    def indexOfOffspring(self, aOffspring):
        index = (-1 if not aOffspring in self._offspring else self._offspring.index(aOffspring))
        return index

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

    # Code from template association_AddManyToManyMethod 
    def addOffspring(self, aOffspring):
        wasAdded = False
        if (aOffspring) in self._offspring :
            return False
        self._offspring.append(aOffspring)
        if aOffspring.indexOfParent(self) != -1 :
            wasAdded = True
        else :
            wasAdded = aOffspring.addParent(self)
            if not wasAdded :
                self._offspring.remove(aOffspring)
        return wasAdded

    # Code from template association_RemoveMany 
    def removeOffspring(self, aOffspring):
        wasRemoved = False
        if not (aOffspring) in self._offspring :
            return wasRemoved
        oldIndex = (-1 if not aOffspring in self._offspring else self._offspring.index(aOffspring))
        self._offspring.remove(oldIndex)
        if aOffspring.indexOfParent(self) == -1 :
            wasRemoved = True
        else :
            wasRemoved = aOffspring.removeParent(self)
            if not wasRemoved :
                self._offspring.insert(oldIndex, aOffspring)
        return wasRemoved

    # Code from template association_AddIndexControlFunctions 
    def addOffspringAt(self, aOffspring, index):
        wasAdded = False
        if self.addOffspring(aOffspring) :
            if index < 0 :
                index = 0
            if index > self.numberOfOffspring() :
                index = self.numberOfOffspring() - 1
            self._offspring.remove(aOffspring)
            self._offspring.insert(index, aOffspring)
            wasAdded = True
        return wasAdded

    def addOrMoveOffspringAt(self, aOffspring, index):
        wasAdded = False
        if (aOffspring) in self._offspring :
            if index < 0 :
                index = 0
            if index > self.numberOfOffspring() :
                index = self.numberOfOffspring() - 1
            self._offspring.remove(aOffspring)
            self._offspring.insert(index, aOffspring)
            wasAdded = True
        else :
            wasAdded = self.addOffspringAt(aOffspring, index)
        return wasAdded

    def delete(self):
        copyOfOffspring = self._offspring.copy()
        self._offspring.clear()
        for aOffspring in copyOfOffspring:
            aOffspring.removeParent(self)

    def getOffspring(self, *argv):
        if len(argv) == 1 and isinstance(argv[0], int) :
            return self.getOffspring1(argv[0])
        if len(argv) == 0 :
            return self.getOffspring2()
        raise TypeError("No method matches provided parameters")