def _involuted_reverse(self):
def inv_is_top(si):<EOL><INDENT>return (si.stride == <NUM_LIT:1> and<EOL>self._lower_bound == StridedInterval._modular_add(self._upper_bound, <NUM_LIT:1>, self.bits)<EOL>)<EOL><DEDENT>o = self.copy()<EOL>o._reversed = not o._reversed<EOL>if o.bits == <NUM_LIT:8>:<EOL><INDENT>return o.copy()<EOL><DEDENT>if inv_is_top(o):<EOL><INDENT>si = o.copy()<EOL>return si<EOL><DEDENT>else:<EOL><INDENT>lb = o._lower_bound<EOL>ub = o._upper_bound<EOL>rounded_bits = ((o.bits + <NUM_LIT:7>) // <NUM_LIT:8>) * <NUM_LIT:8><EOL>lb_r = []<EOL>ub_r = []<EOL>for i in xrange(<NUM_LIT:0>, rounded_bits, <NUM_LIT:8>):<EOL><INDENT>if i != <NUM_LIT:0>:<EOL><INDENT>lb = lb >> <NUM_LIT:8><EOL>ub = ub >> <NUM_LIT:8><EOL><DEDENT>lb_r.append(lb & <NUM_LIT>)<EOL>ub_r.append(ub & <NUM_LIT>)<EOL><DEDENT>si_lb = None<EOL>si_ub = None<EOL>for b in lb_r:<EOL><INDENT>if si_lb is None:<EOL><INDENT>si_lb = b<EOL><DEDENT>else:<EOL><INDENT>si_lb <<= <NUM_LIT:8><EOL>si_lb |= b<EOL><DEDENT><DEDENT>for b in ub_r:<EOL><INDENT>if si_ub is None:<EOL><INDENT>si_ub = b<EOL><DEDENT>else:<EOL><INDENT>si_ub <<= <NUM_LIT:8><EOL>si_ub |= b<EOL><DEDENT><DEDENT>si = StridedInterval(bits=o.bits,<EOL>lower_bound=si_lb,<EOL>upper_bound=si_ub,<EOL>stride=o._stride,<EOL>uninitialized=o.uninitialized)<EOL>si._reversed = o._reversed<EOL>if not o.is_integer:<EOL><INDENT>logger.warning('<STR_LIT>', self)<EOL><DEDENT>return si<EOL><DEDENT>
This method reverses the StridedInterval object for real. Do expect loss of precision for most cases!

:return: A new reversed StridedInterval instance