@@ -3109,6 +3109,7 @@ def _new_expr(cls, expression, operands, guess, out=None, where=None, ne_args=No
31093109 # Validate the expression
31103110 validate_expr (expression )
31113111 expression = convert_to_slice (expression )
3112+ chunks , blocks = None , None
31123113 if guess :
31133114 # The expression has been validated, so we can evaluate it
31143115 # in guessing mode to avoid computing reductions
@@ -3139,6 +3140,11 @@ def _new_expr(cls, expression, operands, guess, out=None, where=None, ne_args=No
31393140 # (e.g. all operands are numpy arrays or constructors)
31403141 # or passed "a", "a[:10]", 'sum(a)'
31413142 expression_ , operands_ = conserve_functions (_expression , _operands , local_vars )
3143+ if hasattr (new_expr , "chunks" ) and new_expr .chunks != (1 ,) * len (_shape ):
3144+ # for constructors with chunks in kwargs, chunks will be specified
3145+ # for general expression new_expr is just with dummy scalar variables (so ignore)
3146+ chunks = new_expr .chunks
3147+ blocks = new_expr .blocks
31423148 new_expr = cls (None )
31433149 new_expr .expression = f"({ expression_ } )" # force parenthesis
31443150 new_expr .operands = operands_
@@ -3147,6 +3153,8 @@ def _new_expr(cls, expression, operands, guess, out=None, where=None, ne_args=No
31473153 # Cache the dtype and shape (should be immutable)
31483154 new_expr ._dtype = _dtype
31493155 new_expr ._shape = _shape
3156+ if chunks is not None and blocks is not None :
3157+ new_expr ._chunks , new_expr ._blocks = chunks , blocks
31503158 else :
31513159 # Create a new LazyExpr object
31523160 new_expr = cls (None )
0 commit comments