def METHOD_NAME(self, oth):
    """Compare two ruvs and return the differences
    returns a tuple - the first element is the
    result of cmp() - the second element is a string"""
    if self is oth:
        return (0, "\tRUVs are the same")
    if not self:
        return (-1, "\tfirst RUV is empty")
    if not oth:
        return (1, "\tsecond RUV is empty")
    diff = cmp(self.gen, oth.gen)
    if diff:
        return (diff, "\tgeneration [" + str(self.gen) +
                "] not equal to [" + str(oth.gen) +
                "]: likely not yet initialized")
    retstr = ''
    for rid in list(self.rid.keys()):
        for item in ('max', 'min'):
            csn = self.rid[rid][item]
            csnoth = oth.rid[rid][item]
            csndiff = cmp(csn, csnoth)
            if csndiff:
                if len(retstr):
                    retstr += "\n"
                retstr += ("\trid %d %scsn %s\n\t[%s] vs [%s]" %
                           (rid, item, csn.diff2str(csnoth), csn, csnoth))
                if not diff:
                    diff = csndiff
    if not diff:
        retstr = "\tup-to-date - RUVs are equal"
    return (diff, retstr)