@staticmethod<EOL><INDENT>def _minimal_common_integer_splitted(si_0, si_1):<DEDENT>
a, c = si_0.stride, si_1.stride<EOL>b, d = si_0.lower_bound, si_1.lower_bound<EOL>if si_0.is_integer:<EOL><INDENT>if si_1.is_integer:<EOL><INDENT>return None if si_0.lower_bound != si_1.lower_bound else si_0.lower_bound<EOL><DEDENT>elif si_0.lower_bound >= si_1.lower_bound andsi_0.lower_bound <= si_1.upper_bound and(si_0.lower_bound - si_1.lower_bound) % si_1.stride == <NUM_LIT:0>:<EOL><INDENT>return si_0.lower_bound<EOL><DEDENT>else:<EOL><INDENT>return None<EOL><DEDENT><DEDENT>elif si_1.is_integer:<EOL><INDENT>return StridedInterval._minimal_common_integer_splitted(si_1, si_0)<EOL><DEDENT>if si_0.upper_bound < si_1.lower_bound or si_1.upper_bound < si_0.lower_bound:<EOL><INDENT>return None<EOL><DEDENT>if (d - b) % StridedInterval.gcd(a, c) != <NUM_LIT:0>:<EOL><INDENT>return None<EOL><DEDENT>"""<STR_LIT>"""<EOL>x, y = StridedInterval.diop_natural_solution_linear(-(b-d), a, -c)<EOL>if a is None or b is None:<EOL><INDENT>return None<EOL><DEDENT>first_integer = x * a + b<EOL>assert first_integer == y*c + d<EOL>if first_integer >= si_0.lower_bound and first_integer <= si_0.upper_bound andfirst_integer >= si_1.lower_bound and first_integer <= si_1.upper_bound:<EOL><INDENT>return first_integer<EOL><DEDENT>else:<EOL><INDENT>return None<EOL><DEDENT>
Calculates the minimal integer that appears in both StridedIntervals.
It's equivalent to finding an integral solution for equation `ax + b = cy + d` that makes `ax + b` minimal
si_0.stride, si_1.stride being a and c, and si_0.lower_bound, si_1.lower_bound being b and d, respectively.
Upper bounds are used to check whether the minimal common integer exceeds the bound or not. None is returned
if no minimal common integers can be found within the range.

Some assumptions:
# - None of the StridedIntervals straddles the south pole. Consequently, we have x <= max_int(si.bits) and y <=
#   max_int(si.bits)
# - a, b, c, d are all positive integers
# - x >= 0, y >= 0

:param StridedInterval si_0: the first StridedInterval
:param StridedInterval si_1: the second StrideInterval
:return: the minimal common integer, or None if there is no common integer