def _nsplit(self):
north_pole_left = self.max_int(self.bits - <NUM_LIT:1>) <EOL>north_pole_right = <NUM_LIT:2> ** (self.bits - <NUM_LIT:1>) <EOL>straddling = False<EOL>if self.upper_bound >= north_pole_right:<EOL><INDENT>if self.lower_bound > self.upper_bound:<EOL><INDENT>straddling = True<EOL><DEDENT>elif self.lower_bound <= north_pole_left:<EOL><INDENT>straddling = True<EOL><DEDENT><DEDENT>else:<EOL><INDENT>if self.lower_bound > self.upper_bound and self.lower_bound <= north_pole_left:<EOL><INDENT>straddling = True<EOL><DEDENT><DEDENT>if straddling:<EOL><INDENT>a_upper_bound = north_pole_left - ((north_pole_left - 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 = a_upper_bound + self.stride<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 north pole, which is the same as in signed arithmetic.

:return: A list of split StridedIntervals