diff --git a/pyiceberg/expressions/visitors.py b/pyiceberg/expressions/visitors.py index 320cd3110e..d835d0d4c5 100644 --- a/pyiceberg/expressions/visitors.py +++ b/pyiceberg/expressions/visitors.py @@ -1852,10 +1852,10 @@ def visit_is_nan(self, term: BoundTerm) -> BooleanExpression: def visit_not_nan(self, term: BoundTerm) -> BooleanExpression: val = term.eval(self.struct) - if isinstance(val, SupportsFloat) and not math.isnan(val): - return self.visit_true() - else: + if isinstance(val, SupportsFloat) and math.isnan(val): return self.visit_false() + else: + return self.visit_true() def visit_less_than(self, term: BoundTerm, literal: LiteralValue) -> BooleanExpression: if term.eval(self.struct) < literal.value: diff --git a/tests/expressions/test_residual_evaluator.py b/tests/expressions/test_residual_evaluator.py index 375639ee7b..29dbfcea8d 100644 --- a/tests/expressions/test_residual_evaluator.py +++ b/tests/expressions/test_residual_evaluator.py @@ -211,7 +211,7 @@ def test_is_not_nan() -> None: res_eval = residual_evaluator_of(spec=spec, expr=predicate, case_sensitive=True, schema=schema) residual = res_eval.residual_for(Record(None)) - assert residual == AlwaysFalse() + assert residual == AlwaysTrue() residual = res_eval.residual_for(Record(2)) assert residual == AlwaysTrue() @@ -223,7 +223,7 @@ def test_is_not_nan() -> None: res_eval = residual_evaluator_of(spec=spec, expr=predicate, case_sensitive=True, schema=schema) residual = res_eval.residual_for(Record(None)) - assert residual == AlwaysFalse() + assert residual == AlwaysTrue() residual = res_eval.residual_for(Record(2)) assert residual == AlwaysTrue()