in pyiceberg/expressions/visitors.py [0:0]
def visit_not_equal(self, term: BoundTerm[L], literal: Literal[L]) -> bool:
# Rows must match when X < Min or Max < X because it is not in the range
field_id = term.ref().field.field_id
if self._can_contain_nulls(field_id) or self._can_contain_nans(field_id):
return ROWS_MUST_MATCH
field = self._get_field(field_id)
if lower_bytes := self.lower_bounds.get(field_id):
lower = _from_byte_buffer(field.field_type, lower_bytes)
if self._is_nan(lower):
# NaN indicates unreliable bounds.
# See the _StrictMetricsEvaluator docs for more.
return ROWS_MIGHT_NOT_MATCH
if lower > literal.value:
return ROWS_MUST_MATCH
if upper_bytes := self.upper_bounds.get(field_id):
upper = _from_byte_buffer(field.field_type, upper_bytes)
if upper < literal.value:
return ROWS_MUST_MATCH
return ROWS_MIGHT_NOT_MATCH