Skip to content

Commit 369e470

Browse files
Allow special cased dunder methods
1 parent d708214 commit 369e470

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

python/egglog/runtime.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,11 +383,17 @@ def __eq__(self, other: NoReturn) -> Expr: # type: ignore
383383
for name in list(BINARY_METHODS) + list(UNARY_METHODS) + ["__getitem__", "__call__"]:
384384

385385
def _special_method(self: RuntimeExpr, *args: object, __name: str = name) -> RuntimeExpr:
386-
return RuntimeMethod(self.__egg_decls__, self.__egg_typed_expr__, __name)(*args)
386+
# First, try to resolve as preserved method
387+
try:
388+
method = self.__egg_decls__.get_class_decl(self.__egg_typed_expr__.tp.name).preserved_methods[__name]
389+
except KeyError:
390+
return RuntimeMethod(self.__egg_decls__, self.__egg_typed_expr__, __name)(*args)
391+
else:
392+
return method(self, *args)
387393

388394
setattr(RuntimeExpr, name, _special_method)
389395

390-
for name in ["__bool__", "__len__"]:
396+
for name in ["__bool__", "__len__", "__complex__", "__int__", "__float__", "__hash__", "__iter__"]:
391397

392398
def _preserved_method(self: RuntimeExpr, __name: str = name):
393399
try:

0 commit comments

Comments
 (0)