Split `self` at the north pole, which is the same as in signed arithmetic.

        :return: A list of split StridedIntervals

def _nsplit(self):
        """
        Split `self` at the north pole, which is the same as in signed arithmetic.

        :return: A list of split StridedIntervals
        """

        north_pole_left = self.max_int(self.bits - 1) # 01111...1
        north_pole_right = 2 ** (self.bits - 1) # 1000...0

        # Is `self` straddling the north pole?
        straddling = False
        if self.upper_bound >= north_pole_right:
            if self.lower_bound > self.upper_bound:
                # Yes it does!
                straddling = True
            elif self.lower_bound <= north_pole_left:
                straddling = True

        else:
            if self.lower_bound > self.upper_bound and self.lower_bound <= north_pole_left:
                straddling = True

        if straddling:
            a_upper_bound = north_pole_left - ((north_pole_left - self.lower_bound) % self.stride)
            a = StridedInterval(bits=self.bits, stride=self.stride, lower_bound=self.lower_bound,
                                upper_bound=a_upper_bound, uninitialized=self.uninitialized)

            b_lower_bound = a_upper_bound + self.stride
            b = StridedInterval(bits=self.bits, stride=self.stride, lower_bound=b_lower_bound,
                                upper_bound=self.upper_bound, uninitialized=self.uninitialized)

            return [ a, b ]

        else:
            return [ self.copy() ]