code: def _ssplit(self):
          
  
          south_pole_right = self.max_int(self.bits) # 111...1
          # south_pole_left = 0
  
          # Is `self` straddling the south pole?
          if self.upper_bound < self.lower_bound:
              # It straddles the south pole!
  
              a_upper_bound = south_pole_right - ((south_pole_right - 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 = self._modular_add(a_upper_bound, self.stride, self.bits)
              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 south pole, which is the same as in unsigned arithmetic.
          When returning two StridedIntervals (which means a splitting occurred), it is guaranteed that the first
          StridedInterval is on the right side of the south pole.
  
          :return: a list of split StridedIntervals, that contains either one or two StridedIntervals