@@ -1924,21 +1924,32 @@ cdef int aux_miniexpr(me_udata *udata, int64_t nchunk, int32_t nblock,
19241924
19251925 cdef me_expr* miniexpr_handle = udata.miniexpr_handle
19261926 cdef void * aux_reduc_ptr
1927- cdef uintptr_t offset_bytes
1928- cdef int nblocks_per_chunk = udata.array.chunknitems // udata.array.blocknitems
1927+ # Calculate blocks per chunk using CEILING division (chunks are padded to fit whole blocks)
1928+ cdef int nblocks_per_chunk = (udata.array.chunknitems + udata.array.blocknitems - 1 ) // udata.array.blocknitems
1929+ # Calculate the global linear block index: nchunk * blocks_per_chunk + nblock
1930+ # This works because blocks never span chunks (chunks are padded to block boundaries)
1931+ cdef int64_t linear_block_index = nchunk * nblocks_per_chunk + nblock
1932+ cdef uintptr_t offset_bytes = typesize * linear_block_index
1933+
19291934 if miniexpr_handle == NULL :
19301935 raise ValueError (" miniexpr: handle not assigned" )
1936+
1937+ # Skip evaluation if blocknitems is invalid (can happen for padding blocks beyond data)
1938+ if blocknitems <= 0 :
1939+ # Free resources
1940+ for i in range (udata.ninputs):
1941+ free(input_buffers[i])
1942+ free(input_buffers)
1943+ return 0
1944+
19311945 # Call thread-safe miniexpr C API
19321946 if udata.aux_reduc_ptr == NULL :
19331947 rc = me_eval(miniexpr_handle, < const void ** > input_buffers, udata.ninputs,
19341948 < void * > params_output, blocknitems)
19351949 else :
19361950 # Reduction operation
1937- offset_bytes = < uintptr_t> typesize * (nchunk * nblocks_per_chunk + nblock)
19381951 aux_reduc_ptr = < void * > (< uintptr_t> udata.aux_reduc_ptr + offset_bytes)
19391952 rc = me_eval(miniexpr_handle, < const void ** > input_buffers, udata.ninputs, aux_reduc_ptr, blocknitems)
1940- # The output buffer is cleared in the prefilter function
1941- # memset(<void *>params_output, 0, udata.array.sc.blocksize) # clear output buffer
19421953 if rc != 0 :
19431954 raise RuntimeError (f" miniexpr: issues during evaluation; error code: {rc}" )
19441955
0 commit comments