@@ -2268,21 +2268,14 @@ def __init__(self, new_op): # noqa: C901
22682268 self .operands = {"o0" : value1 , "o1" : value2 }
22692269 self .expression = f"{ op } (o0, o1)"
22702270 return
2271- elif value2 is None :
2272- if isinstance (value1 , LazyExpr ):
2273- self .expression = f"{ op } ({ value1 .expression } )"
2274- self .operands = value1 .operands
2275- else :
2276- self .operands = {"o0" : value1 }
2277- self .expression = "o0" if op is None else f"{ op } (o0)"
2278- return
22792271 elif isinstance (value1 , LazyExpr ) or isinstance (value2 , LazyExpr ):
22802272 if isinstance (value1 , LazyExpr ):
22812273 newexpr = value1 .update_expr (new_op )
22822274 else :
22832275 newexpr = value2 .update_expr (new_op )
22842276 self .expression = newexpr .expression
22852277 self .operands = newexpr .operands
2278+ self ._dtype = newexpr .dtype
22862279 return
22872280
22882281 self ._dtype = dtype_
@@ -2339,6 +2332,7 @@ def update_expr(self, new_op): # noqa: C901
23392332 # One of the two operands are LazyExpr instances
23402333 try :
23412334 value1 , op , value2 = new_op
2335+ dtype_ = check_dtype (op , value1 , value2 ) # conserve dtype
23422336 # The new expression and operands
23432337 expression = None
23442338 new_operands = {}
@@ -2402,7 +2396,9 @@ def update_expr(self, new_op): # noqa: C901
24022396 self .operands = value2 .operands
24032397 # Return a new expression
24042398 operands = self .operands | new_operands
2405- return self ._new_expr (expression , operands , guess = False , out = None , where = None )
2399+ expr = self ._new_expr (expression , operands , guess = False , out = None , where = None )
2400+ expr ._dtype = dtype_ # override dtype with preserved dtype
2401+ return expr
24062402 finally :
24072403 blosc2 ._disable_overloaded_equal = prev_flag
24082404
0 commit comments