@property<EOL><INDENT>def complement(self):<DEDENT>
<EOL>if self.is_empty:<EOL><INDENT>return StridedInterval.top(self.bits)<EOL><DEDENT>if self.is_top:<EOL><INDENT>return StridedInterval.empty(self.bits)<EOL><DEDENT>y_plus_1 = StridedInterval._modular_add(self.upper_bound, <NUM_LIT:1>, self.bits)<EOL>x_minus_1 = StridedInterval._modular_sub(self.lower_bound, <NUM_LIT:1>, self.bits)<EOL>dist = StridedInterval._wrapped_cardinality(y_plus_1, x_minus_1, self.bits) - <NUM_LIT:1><EOL>if dist < <NUM_LIT:0>:<EOL><INDENT>new_stride = <NUM_LIT:0><EOL><DEDENT>elif self._stride == <NUM_LIT:0>:<EOL><INDENT>new_stride = <NUM_LIT:1><EOL><DEDENT>else:<EOL><INDENT>new_stride = fractions.gcd(self._stride, dist)<EOL><DEDENT>return StridedInterval(lower_bound=y_plus_1,<EOL>upper_bound=x_minus_1,<EOL>bits=self.bits,<EOL>stride=new_stride,<EOL>uninitialized=self.uninitialized)<EOL>
Return the complement of the interval
Refer section 3.1 augmented for managing strides

:return: