def _unsigned_bounds(self):
        """
        Get lower bound and upper bound for `self` in unsigned arithmetic.

        :return: a list of (lower_bound, upper_bound) tuples.
        """

        ssplit = self._ssplit()
        if len(ssplit) == 1:
            lb = ssplit[0].lower_bound
            ub = ssplit[0].upper_bound

            return [ (lb, ub) ]
        elif len(ssplit) == 2:
            # ssplit[0] is on the left hemisphere, and ssplit[1] is on the right hemisphere

            lb_1 = ssplit[0].lower_bound
            ub_1 = ssplit[0].upper_bound

            lb_2 = ssplit[1].lower_bound
            ub_2 = ssplit[1].upper_bound

            return [ (lb_1, ub_1), (lb_2, ub_2) ]
        else:
            raise Exception('WTF')
Get lower bound and upper bound for `self` in unsigned arithmetic.

        :return: a list of (lower_bound, upper_bound) tuples.