@staticmethod<EOL><INDENT>def _wrapped_unsigned_mul(a, b):<DEDENT>
if a.bits != b.bits:<EOL><INDENT>logger.warning("<STR_LIT>")<EOL><DEDENT>bits = max(a.bits, b.bits)<EOL>lb = a.lower_bound * b.lower_bound<EOL>ub = a.upper_bound * b.upper_bound<EOL>uninit_flag = a.uninitialized | b.uninitialized<EOL>if (ub - lb) < (<NUM_LIT:2> ** bits):<EOL><INDENT>if b.is_integer:<EOL><INDENT>stride = abs(a.stride * b.lower_bound)<EOL><DEDENT>elif a.is_integer:<EOL><INDENT>stride = abs(a.lower_bound * b.stride)<EOL><DEDENT>else:<EOL><INDENT>stride = fractions.gcd(a.stride, b.stride)<EOL><DEDENT>return StridedInterval(bits=bits, stride=stride, lower_bound=lb, upper_bound=ub, uninitialized=uninit_flag)<EOL><DEDENT>else:<EOL><INDENT>return StridedInterval.top(bits, uninitialized=False)<EOL><DEDENT>
Perform wrapped unsigned multiplication on two StridedIntervals.

:param a: The first operand (StridedInterval)
:param b: The second operand (StridedInterval)
:return: The multiplication result