@normalize_types<EOL><INDENT>def union(self, b):<DEDENT>
if not allow_dsis:<EOL><INDENT>return StridedInterval.least_upper_bound(self, b)<EOL><DEDENT>else:<EOL><INDENT>if self.cardinality > discrete_strided_interval_set.DEFAULT_MAX_CARDINALITY_WITHOUT_COLLAPSING orb.cardinality > discrete_strided_interval_set.DEFAULT_MAX_CARDINALITY_WITHOUT_COLLAPSING:<EOL><INDENT>return StridedInterval.least_upper_bound(self, b)<EOL><DEDENT>else:<EOL><INDENT>dsis = DiscreteStridedIntervalSet(bits=self._bits, si_set={ self })<EOL>return dsis.union(b)<EOL><DEDENT><DEDENT>
The union operation. It might return a DiscreteStridedIntervalSet to allow for better precision in analysis.

:param b: Operand
:return: A new DiscreteStridedIntervalSet, or a new StridedInterval.