in geneve/solver/type_long.py [0:0]
def __init__(self, field, constraints, field_constraints, schema):
super().__init__(field, constraints, field_constraints, schema)
self.min_value = LongLimits.MIN
self.max_value = LongLimits.MAX
self.exclude_values = set()
for k, v, *_ in constraints + field_constraints:
if k == ">=":
v = int(v)
if self.min_value < v:
self.min_value = v
elif k == "<=":
v = int(v)
if self.max_value > v:
self.max_value = v
elif k == ">":
v = int(v)
if self.min_value < v + 1:
self.min_value = v + 1
elif k == "<":
v = int(v)
if self.max_value > v - 1:
self.max_value = v - 1
for k, v, *_ in constraints:
if k == "==":
v = int(v)
if self.value is None or self.value == v:
self.value = v
else:
raise ConflictError(f"is already {self.value}, cannot set to {v}", field, k)
elif k == "!=":
self.exclude_values.add(int(v))
while self.min_value in self.exclude_values:
self.min_value += 1
while self.max_value in self.exclude_values:
self.max_value -= 1
if self.min_value > self.max_value:
raise ConflictError(f"empty solution space, {self.min_value} <= x <= {self.max_value}", field)
self.exclude_values = {v for v in self.exclude_values if v >= self.min_value and v <= self.max_value}
if self.value is not None and self.value in self.exclude_values:
if len(self.exclude_values) == 1:
raise ConflictError(f"cannot be {self.exclude_values.pop()}", field)
else:
raise ConflictError(f"cannot be any of ({', '.join(str(v) for v in sorted(self.exclude_values))})", field)
if self.value is not None and (self.value < self.min_value or self.value > self.max_value):
raise ConflictError(f"out of boundary, {self.min_value} <= {self.value} <= {self.max_value}", field)