7777    StringType ,
7878    StructType ,
7979)
80- from  pyiceberg .utils .singleton  import  Singleton 
81- 
82- 
83- class  ExpressionA (BooleanExpression , Singleton ):
84-     def  __invert__ (self ) ->  BooleanExpression :
85-         return  ExpressionB ()
86- 
87-     def  __repr__ (self ) ->  str :
88-         return  "ExpressionA()" 
89- 
90-     def  __str__ (self ) ->  str :
91-         return  "testexpra" 
92- 
93- 
94- class  ExpressionB (BooleanExpression , Singleton ):
95-     def  __invert__ (self ) ->  BooleanExpression :
96-         return  ExpressionA ()
97- 
98-     def  __repr__ (self ) ->  str :
99-         return  "ExpressionB()" 
100- 
101-     def  __str__ (self ) ->  str :
102-         return  "testexprb" 
10380
10481
10582def  test_isnull_inverse () ->  None :
@@ -504,18 +481,18 @@ def test_bind_case_insensitive(pred: UnboundPredicate[Any], table_schema_simple:
504481    "exp, testexpra, testexprb" , 
505482    [ 
506483        ( 
507-             And (ExpressionA ( ), ExpressionB ( )), 
508-             And (ExpressionA ( ), ExpressionB ( )), 
509-             Or (ExpressionA ( ), ExpressionB ( )), 
484+             And (IsNull ( "a" ), IsNull ( "b" )), 
485+             And (IsNull ( "a" ), IsNull ( "b" )), 
486+             Or (IsNull ( "a" ), IsNull ( "b" )), 
510487        ), 
511488        ( 
512-             Or (ExpressionA ( ), ExpressionB ( )), 
513-             Or (ExpressionA ( ), ExpressionB ( )), 
514-             And (ExpressionA ( ), ExpressionB ( )), 
489+             Or (IsNull ( "a" ), IsNull ( "b" )), 
490+             Or (IsNull ( "a" ), IsNull ( "b" )), 
491+             And (IsNull ( "a" ), IsNull ( "b" )), 
515492        ), 
516-         (Not (ExpressionA ( )), Not (ExpressionA ( )), ExpressionB ( )), 
517-         (ExpressionA ( ), ExpressionA ( ), ExpressionB ( )), 
518-         (ExpressionB ( ), ExpressionB ( ), ExpressionA ( )), 
493+         (Not (IsNull ( "a" )), Not (IsNull ( "a" )), IsNull ( "b" )), 
494+         (IsNull ( "a" ), IsNull ( "a" ), IsNull ( "b" )), 
495+         (IsNull ( "b" ), IsNull ( "b" ), IsNull ( "a" )), 
519496        ( 
520497            In (Reference ("foo" ), ("hello" , "world" )), 
521498            In (Reference ("foo" ), ("hello" , "world" )), 
@@ -536,16 +513,16 @@ def test_eq(exp: BooleanExpression, testexpra: BooleanExpression, testexprb: Boo
536513    "lhs, rhs" , 
537514    [ 
538515        ( 
539-             And (ExpressionA ( ), ExpressionB ( )), 
540-             Or (ExpressionB ( ), ExpressionA ( )), 
516+             And (IsNull ( "a" ), IsNull ( "b" )), 
517+             Or (NotNull ( "a" ), NotNull ( "b" )), 
541518        ), 
542519        ( 
543-             Or (ExpressionA ( ), ExpressionB ( )), 
544-             And (ExpressionB ( ), ExpressionA ( )), 
520+             Or (IsNull ( "a" ), IsNull ( "b" )), 
521+             And (NotNull ( "a" ), NotNull ( "b" )), 
545522        ), 
546523        ( 
547-             Not (ExpressionA ( )), 
548-             ExpressionA ( ), 
524+             Not (IsNull ( "a" )), 
525+             IsNull ( "a" ), 
549526        ), 
550527        ( 
551528            In (Reference ("foo" ), ("hello" , "world" )), 
@@ -559,8 +536,8 @@ def test_eq(exp: BooleanExpression, testexpra: BooleanExpression, testexprb: Boo
559536        (LessThan (Reference ("foo" ), 5 ), GreaterThanOrEqual (Reference ("foo" ), 5 )), 
560537        (EqualTo (Reference ("foo" ), 5 ), NotEqualTo (Reference ("foo" ), 5 )), 
561538        ( 
562-             ExpressionA ( ), 
563-             ExpressionB ( ), 
539+             IsNull ( "a" ), 
540+             NotNull ( "a" ), 
564541        ), 
565542    ], 
566543) 
@@ -572,14 +549,14 @@ def test_negate(lhs: BooleanExpression, rhs: BooleanExpression) -> None:
572549    "lhs, rhs" , 
573550    [ 
574551        ( 
575-             And (ExpressionA ( ), ExpressionB ( ), ExpressionA ( )), 
576-             And (ExpressionA ( ), And (ExpressionB ( ), ExpressionA ( ))), 
552+             And (IsNull ( "a" ), IsNull ( "b" ), IsNull ( "a" )), 
553+             And (IsNull ( "a" ), And (IsNull ( "b" ), IsNull ( "a" ))), 
577554        ), 
578555        ( 
579-             Or (ExpressionA ( ), ExpressionB ( ), ExpressionA ( )), 
580-             Or (ExpressionA ( ), Or (ExpressionB ( ), ExpressionA ( ))), 
556+             Or (IsNull ( "a" ), IsNull ( "b" ), IsNull ( "a" )), 
557+             Or (IsNull ( "a" ), Or (IsNull ( "b" ), IsNull ( "a" ))), 
581558        ), 
582-         (Not (Not (ExpressionA ( ))), ExpressionA ( )), 
559+         (Not (Not (IsNull ( "a" ))), IsNull ( "a" )), 
583560    ], 
584561) 
585562def  test_reduce (lhs : BooleanExpression , rhs : BooleanExpression ) ->  None :
@@ -589,13 +566,13 @@ def test_reduce(lhs: BooleanExpression, rhs: BooleanExpression) -> None:
589566@pytest .mark .parametrize ( 
590567    "lhs, rhs" , 
591568    [ 
592-         (And (AlwaysTrue (), ExpressionB ( )), ExpressionB ( )), 
593-         (And (AlwaysFalse (), ExpressionB ( )), AlwaysFalse ()), 
594-         (And (ExpressionB ( ), AlwaysTrue ()), ExpressionB ( )), 
595-         (Or (AlwaysTrue (), ExpressionB ( )), AlwaysTrue ()), 
596-         (Or (AlwaysFalse (), ExpressionB ( )), ExpressionB ( )), 
597-         (Or (ExpressionA ( ), AlwaysFalse ()), ExpressionA ( )), 
598-         (Not (Not (ExpressionA ( ))), ExpressionA ( )), 
569+         (And (AlwaysTrue (), IsNull ( "b" )), IsNull ( "b" )), 
570+         (And (AlwaysFalse (), IsNull ( "b" )), AlwaysFalse ()), 
571+         (And (IsNull ( "b" ), AlwaysTrue ()), IsNull ( "b" )), 
572+         (Or (AlwaysTrue (), IsNull ( "b" )), AlwaysTrue ()), 
573+         (Or (AlwaysFalse (), IsNull ( "b" )), IsNull ( "b" )), 
574+         (Or (IsNull ( "a" ), AlwaysFalse ()), IsNull ( "a" )), 
575+         (Not (Not (IsNull ( "a" ))), IsNull ( "a" )), 
599576        (Not (AlwaysTrue ()), AlwaysFalse ()), 
600577        (Not (AlwaysFalse ()), AlwaysTrue ()), 
601578    ], 
0 commit comments