Ayoubhm07 commented on code in PR #4004:
URL: https://github.com/apache/iceberg-python/pull/4004#discussion_r4070164887


##########
pyiceberg/expressions/__init__.py:
##########
@@ -698,6 +698,11 @@ class SetPredicate(UnboundPredicate, ABC):
     def __init__(
         self, term: str | UnboundTerm, literals: Iterable[Any] | 
Iterable[LiteralValue] | None = None, **kwargs: Any
     ) -> None:
+        # `In.__new__` and `NotIn.__new__` have to build the literal set to 
pick the predicate
+        # class, so they initialize the instance with it. Without this guard 
the set is built twice.
+        if hasattr(self, "literals"):

Review Comment:
   @rambleraptor Fair point ..I dropped the guard....python always runs 
__init__ after __new__ returns an instance so __new__ now hands over the set it 
built and __init__ runs once +++ looking into it also surfaced a bug on main : 
an In built from a generator comes out empty because __new__ consumes the 
iterator before __init__ reads it so the filter silently matches nothing... 
Regression tests added, same speedup



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to