- New features
- Added
jax.numpy.minmax(andjnp.minmax), which returns both the
minimum and maximum of an array, matching NumPy 2.3+ (#40089). - Added
jax.lax.log2and primitivejax.lax.log2_p, making
log2a first-class primitive in JAX (jax.numpy.log2now lowers via
jax.lax.log2). - Added
jax.lax.one_minus_squareprimitive to accurately compute
1 - x^2near $\pm 1$ and provide accurate derivatives near $0$. - Added
jax.export.symbolic_dim_boundsfor querying conservative
bounds on symbolic dimension expressions (#40006). - Added
frozendictsupport to JAX pytrees for Python 3.15 (PEP 814). -
jax.distributed.initializecan now secure the coordination service
with mutual TLS via the newmtls_cert_file,mtls_key_file,
mtls_ca_file,mtls_peer_uri_prefixandverify_secure_credentials
arguments (or theJAX_MTLS_CERT_FILE,JAX_MTLS_KEY_FILE,
JAX_MTLS_CA_FILE,JAX_MTLS_PEER_URI_PREFIXand
JAX_DISTRIBUTED_VERIFY_SECURE_CREDENTIALSenvironment variables). - Added cluster detection support for Open MPI 5 in
jax.distributed.initialize(#40512). - Added support for reading
TPU_PROCESS_ADDRESSES_PATHin GKE TPU clusters. - Widened
jax.random.generalized_normal'spparameter type from
floattoRealArray, allowing array-valued shape parameters (#40126). - Added
exclude_argnamesargument tojax.experimental.program_order. - [oneAPI GPU] Added oneMKL LAPACK solver kernels for QR decomposition
(geqrf,orgqr/ungqr,ormqr/unmqr), LU decomposition (getrf),
symmetric/Hermitian eigenvalue decomposition (syevd/heevd), SVD
(gesvd), and hybrid solver kernels (geqp3,eig)
(#40000, #40186, #40543). -
jaxlibwheels now ship C++ FFI extension headers (collectives.h,
record.h) to support out-of-tree plugins (#40333).
- Added
- Breaking changes
- Removed deprecated
jax.experimental.shard_alike. Use explicit sharding
mode instead (seesharding).
- Removed deprecated
- Changes
- Optimized large JAX
jax.sharding.Meshconstruction by avoiding
redundant device array allocations and copies. - Thread-safety improvements across JAX and
jaxlibfor free-threaded Python
(Python 3.13t, 3.14t, 3.15t). -
inline=Trueinjax.jitnow corresponds to
jax.Inline.JAX_LATEinstead ofjax.Inline.JAX_EARLY. - The minimum CuDNN version for CUDA 12 is v9.10.2.
- JAX now uses Bazel 8.7.0 to build from source.
- JAX now uses Bzlmod for its Bazel builds instead of WORKSPACE.
- On GPU, multi-dimensional inverse real FFTs (
jax.numpy.fft.irfftn,
jax.numpy.fft.irfft2andjax.lax.fftwithFftType.IRFFT)
are again lowered to a single C2R transform, as before JAX 0.10.0, instead
of an IFFT over the outer axes and a 1-D IRFFT with two transposes. The
input is first made Hermitian-symmetric along the outer axes, which does
not change the result under NumPy's convention (only the last axis is
assumed symmetric), so results are unchanged while the transform is
~1.4x faster at typical sizes. - Re-enabled scan-based lowering of cumulative sums (
jax.numpy.cumsum)
on GPU, improving performance. -
jax.numpy.trinow returns an array with the default float dtype
when thedtypeargument is not specified. Previously it always returned
float32(#40242). -
jax.numpy.uniquewithaxisspecified now matches NumPy's output
shape for arrays that are empty along the given axis, instead of
fabricating a phantom slice for fully-empty inputs. - Improved numerical accuracy of
jax.numpy.log2by pre-computing the
1 / log(2)constant factor (#40430). - Added
out_shardingparameter tojax.numpy.histogram. - Updated
jax.remat'sprevent_cseargument signature to accept
bool | Sequence[bool], matchingjax.checkpoint. - Made
jax.experimental.checkifyerror code assignment deterministic.
- Optimized large JAX
- Bug fixes
- Fixed numerical overflow in
jax.numpy.arccoshandjax.lax.acosh
gradients for large inputs (#40643, #40634). - Fixed first-, second-, and higher-order autodiff gradients of
jax.lax.bessel_i0eandjax.lax.bessel_i1eat0.0
(#40640, #40635). - Fixed
jax.numpy.linalg.eighgradients producing NaN or incorrect
values for large eigenvalues (#40149, #40141). -
jax.numpy.sincnow uses a Taylor series near zero, giving
accurate derivatives of all orders. Previously, autodiff of the
sin(πx)/(πx)quotient suffered catastrophic cancellation near zero
(#34139, #10750). - Fixed a bug where
jax.numpy.linalg.condreturned NaN instead of
infinity for singular matrices whenpisNoneor2, matching NumPy
and the other norms. - Fixed
jax.numpy.histogramcrashing on empty arrays
(#40025, #40020). - Fixed
jax.numpy.intersect1dandjax.numpy.setxor1dwith
size=0, which previously raised a ValueError; they now return empty
arrays of the natural result dtype. - Fixed
jax.numpy.setdiff1draising anIndexErrorwhen called with
size=0on non-empty inputs; it now returns an empty array. - Fixed incorrect gradients for
jax.scipy.linalg.choleskyand
jax.numpy.linalg.choleskywithsymmetrize_input=Falsewhere
non-zero gradients leaked into the unused triangle of the input matrix
(#40421). - Fixed
jax.numpy.medianon an input that is empty along the
reduction axis, which previously raised an internal error fromgather;
it now raises aValueError. - Fixed a potential division-by-zero error in
jax.nn.initializers.variance_scalingfor zero-size inputs
(#35096). - Fixed
jax.custom_roottangents when auxiliary values are
integer-typed (#39913, #24295). - Fixed color cycling in
jax.debug.visualize_array_sharding
(#39922, #25695). - Adjusted JVP rule for
jax.lax.minandjax.lax.maxto not
depend on bitwise equivalence between forward and backward pass results
(#40578). - Fixed symbolic product bounds calculation in
jax.exportwhen
even-powered factor bounds cross zero or zero factors are paired with
infinite bounds (#40054). - Fixed state discharge accumulation (
ref_addupdate) on indexed
ReshapeTransformviews. - [ROCm] Worked around a rocFFT twiddle cache bug in multi-dimensional real
FFTs (#40389).
- Fixed numerical overflow in