'Returns the value at a given position/slice. It raises IndexError if the position is invalid,
or TypeError if the key type is invalid.'

def __getitem__(self, key):

    if isinstance(key, slice):
        return [self[i] for i in xrange(*key.indices(len(self)))]
    elif isinstance(key, int):
        if (key < 0):
            key += len(self)
        if ((key >= len(self)) or (key < 0)):
            raise IndexError('Index    out    of    range')
        return self.getValueAbsolute(key)
    else:
        raise TypeError('Invalid    argument    type')
