-
Added
dr.median(), which computes the median along one or more axes. (commit 292dac). -
dr.minimum()anddr.maximum()now consistently propagate NaNs, while the new functionsdr.fmin()anddr.fmax()suppress them. This is consistent with other frameworks (e.g., NumPy/PyTorch). The operations coincide for integers. (commit 9e0a01, Dr.Jit-Core commits efdfc1, 807937). -
dr.count()now works on nested arrays and reduces along user-specified axes. (commit 508f9b). -
The expression
dr.opaque(value)can now be used to make an opaque deep copy of a PyTree argument. (commit 10093d). -
dr.scatter_reduce()now consistently supportsReduceOp.MinandReduceOp.Maxreductions of floating point arrays. The Metal and CUDA backend emulate them using integer min/max atomics. The LLVM backend uses a CAS loop with a non-atomic load that potentially skips the loop if it would not change the result. (commit 4d5103, Dr.Jit-Core commit 241a64). -
The on-disk kernel cache in
~/.drjitpreviously grew without bound. Dr.Jit now evicts least recently used entries. The cache directory, its size limit, and its verbosity can be configured through environment variables. Cache files also shrank to roughly a quarter of their former size. See the cache configuration documentation for details. (Dr.Jit-Core commit 10436e). -
dr.copysign()now maps onto a dedicated backend IR node on the CUDA, LLVM, and Metal backends. (commit 5ac8a8, Dr.Jit-Core commit 14d599). -
dr.clip()is now defined asminimum(maximum(value, min), max)instead ofmaximum(minimum(value, max), min)for consistency with NumPy/PyTorch. This is only relevant when the interval is inverted (min > max). Following the change above, the operation now also propagates NaNs. (commit 83a0b1). -
dr.stack(),dr.vstack(),dr.hstack(),dr.column_stack(), anddr.dstack()now promote non-tensor types to tensors. (commit 3735e1). -
Constructing a nested array from a 1D dynamic Dr.Jit array (e.g.,
Array3f(Float(1, 2, 3))) now consistently broadcasts (commit b804db). -
A packet scatter that decomposes into individual scatters no longer serializes into separate kernels. (commit b128b6).
-
dr.unravel()now casts its input to the flat type implied bydtypeinstead of rejecting a mismatch, which makes expressions likeArray3f64(TensorXf(...))legal. (commit b7db80). -
Fixed several bugs and changed defaults in
dr.convolve()anddr.resample():-
Convolutions with custom continuous filters did not correctly evaluate the filter at all integer offsets within
[-filter_radius, filter_radius]. Filter presets likeboxorgaussianwere not affected. (commit 232932). -
A rounding issue could lead to incorrect output for the
"nearest","wrap","reflect", and"mirror"boundaries. The default"zero"boundary condition was unaffected. (commit 232932). -
dr.convolve()no longer normalizes the filter weights by default. With the default arguments, it is now equivalent tonumpy.convolve(..., mode='same'). Specifynormalize=Trueto restore the previous behavior. (commit 715c2d). -
Periodic boundary conditions (
"wrap","reflect", and"mirror") extended the array by a single period. Larger filters could trigger undefined behavior by reading beyond the end of the array. The extension now repeats as often as needed. (commit 6b5f56).
-
-
Fixed the behavior of
dr.dot()and__rsub__on cooperative vectors. (PRs #521, #529, contributed by Lovro Nuic). -
Fixed
dr.cumsum()over a tuple of axes, which previously only applied a single axis. (PR #522, contributed by Lovro Nuic). -
Slicing the outer dimension of a nested array (e.g.
value[3:]) produced a result with the wrong size. (PR #523, contributed by Delio Vicini). -
Fixed a miscompilation in symbolic
ifstatements with partially evaluated state. (commit 9a7db9). -
Fixed a race condition in
dr.sync_thread(). (Dr.Jit-Core commit c5a8a9). -
Miscellaneous Jit-Core fixes. (Dr.Jit-Core commits b1b839, 26d4a1, 546967, ac46d8, 8eeccd).
-
Miscellaneous minor fixes in Dr.Jit. (commits abfa1c, b547d8, 564a37, 479252, c478bb, 02e2b4).