def _ssplit(self):
south_pole_right = self.max_int(self.bits) <EOL>if self.upper_bound < self.lower_bound:<EOL><INDENT>a_upper_bound = south_pole_right - ((south_pole_right - self.lower_bound) % self.stride)<EOL>a = StridedInterval(bits=self.bits, stride=self.stride, lower_bound=self.lower_bound,<EOL>upper_bound=a_upper_bound, uninitialized=self.uninitialized)<EOL>b_lower_bound = self._modular_add(a_upper_bound, self.stride, self.bits)<EOL>b = StridedInterval(bits=self.bits, stride=self.stride, lower_bound=b_lower_bound,<EOL>upper_bound=self.upper_bound, uninitialized=self.uninitialized)<EOL>return [ a, b ]<EOL><DEDENT>else:<EOL><INDENT>return [ self.copy() ]<EOL><DEDENT>
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