'Return the union of ``self`` with all the arguments (in linear time
complexity, with first occurrence order preserved).'

def union(self, *args):

    ids = list(self._ids)
    for arg in args:
        if (not (isinstance(arg, BaseModel) and (arg._name == self._name))):
            raise TypeError(('Mixing    apples    and    oranges:    %s.union(%s)' % (self, arg)))
        ids.extend(arg._ids)
    return self.browse(OrderedSet(ids))
