code: def _nsplit(self):
          
  
          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() ]
docs: Split `self` at the north pole, which is the same as in signed arithmetic.
  
          :return: A list of split StridedIntervals