Version 0.68.0 (30 September 2026)

This is a major Numba release. Numba now supports Python 3.15. This release also expands Windows ARM64 conda packages and wheels from Python 3.12 through 3.14. Linux x86_64 and aarch64 wheels are now tagged to be compatible with GLIBC >= 2.27.

Please find a summary of all noteworthy items below.

Highlights

Support for Python 3.15

Support for Python 3.15 is added. This includes updates for bytecode changes such as GET_ITER / POP_ITER stack behavior, LOAD_COMMON_CONSTANT, and exception-table splits from NOT_TAKEN.

(PR-#10732)

Improvements

Added support for using IntEnum as NumPy array’s index.

IntEnum members can now be used directly as array indices, for example a[MyEnum.FOO], without an explicit cast to an integer.

(PR-#9230)

Enable tuple types in np.sum function.

The np.sum function now supports tuple types for the axis argument, allowing users to specify multiple axes along which to perform the operation at runtime.

(PR-#10661)

Preserve array layout when slicing with a None step

Previously, a slice with an explicit None step was typed as a three-member slice, so x[a:b:None] inferred an "A" layout where x[a:b] inferred "C".

(PR-#10781)

Enable using ILP64 BLAS and LAPACK.

Users can opt in to using ILP64 (64-bit integer) LAPACK ABI. To opt in, define the NUMBA_LAPACK_ILP64=1 environment variable at numba build time, and make sure that SciPy available at run time exports the ILP64 cython_lapack ABI (this currently requires SciPy >= 1.18, built from source).

(PR-#10784)

Enable ahead-of-time compilation of ILP64 linear algebra.

The LAPACK ABI with which Numba was built is now used by Numba produced ahead-of-time compiled modules. i.e. if Numba was built with the ILP64 LAPACK ABI then Numba emits AOT compiled modules with that ABI.

(PR-#10818)

NumPy Support

Added kind argument to ndarray.sort

ndarray.sort now accepts the kind argument in nopython mode and supports "mergesort" in addition to the default "quicksort", matching the kind support already available in ndarray.argsort. Both methods also accept "stable" as an alias for "mergesort" and reject any other kind at compile time. The default value keeps the existing behaviour.

(PR-#10703)

Add support for np.nanargmax and np.nanargmin.

The np.nanargmax and np.nanargmin functions are now supported in nopython mode. NaN values are skipped when locating the argument of the maximum/minimum, the axis argument is supported, and NumPy is matched by raising ValueError with the same messages for empty and all-NaN input. Integer input behaves like np.argmax/np.argmin as NaN is not representable in integer dtypes.

(PR-#10808)

Bug Fixes

Add missing config.DISABLE_PERFORMANCE_WARNINGS checks

A bug where some Numba functions raise a NumbaPerformanceWarning despite setting config.DISABLE_PERFORMANCE_WARNINGS (or the NUMBA_DISABLE_PERFORMANCE_WARNINGS environment variable) has been fixed.

(PR-#9794)

Fix complex multiplication and division NaN recovery for Python 3.14+

Complex number multiplication and division now match CPython 3.14+ behaviour when infinities produce nan+nanj under IEEE 754 arithmetic. The NaN recovery logic from CPython’s _Py_c_prod() and _Py_c_quot() is applied for * and / on complex types when running on Python 3.14 and later.

(PR-#10528)

Make .nbi cache index files reproducible

Source freshness stamps in the on-disk cache (.nbi files) now use a content hash of the source instead of the file’s modification time. The modification time varies across hosts and filesystems (and its precision differs between filesystems), which made cache index files non-reproducible. Using a content hash makes the stamps deterministic and filesystem-agnostic. As a result, InTreeCacheLocatorFsAgnostic is now deprecated in favour of InTreeCacheLocator.

(PR-#10659)

Fix false NumbaPerformanceWarning when indexing with newaxis

Indexing a contiguous array with np.newaxis (for example x[:, None]) was incorrectly treated as breaking contiguity, since the slice preceding the newaxis was no longer considered the innermost index. This caused a spurious NumbaPerformanceWarning to be raised from np.dot(), np.vdot(), and @ when one of their operands had been reshaped with newaxis, even though the array was still contiguous (#10086).

(PR-#10684)

Fix np.clip writing past the end of a caller-provided out array

np.clip did not check the shape of an explicit out argument, so an out that did not match the shape of the result was written past its end and a wrong array was returned with no error. The shape is now validated and a mismatch raises ValueError, matching NumPy.

(PR-#10761)

Fix AssertionError when unifying mismatched first-class function types

A tuple holding two first-class functions with the same argument count but different signatures raised a bare AssertionError with no message, from typeof while typing the argument, so no Numba error context was attached either. unified_function_type now returns None for that case, as its documentation already describes, which lets BaseTuple.from_types fall back to a heterogeneous tuple and the call report the actual mismatch.

(PR-#10763)

Fix first-class function return-type mismatch

Passing a jit-compiled function as a first-class function (numba.types.FunctionType) argument whose declared return type does not use the same LLVM value type as the compiled function’s return type now raises an error instead of silently producing a corrupted return value (no cast is inserted at the call).

(PR-#10764)

Coalesce runs of list appends in the list_to_tuple peephole

The peephole that rewrites the BUILD_LIST/LIST_APPEND/ LIST_TO_TUPLE bytecode sequence emitted a separate one-element build_tuple and binary addition for every appended item. The resulting chain of tuple concatenations makes both the Numba IR and the LLVM IR lowered from it quadratic in the number of items. CPython uses this bytecode for every call with more than 30 arguments, so wide calls were disproportionately expensive to compile. Consecutive appends are now collected into a single build_tuple.

(PR-#10782)

Fix math.ldexp and np.ldexp with negative exponents on PowerPC64LE

The exponent argument of the numba_ldexp and numba_ldexpf helpers is a C int, and ABIs such as PowerPC64LE ELFv2 require the caller to sign-extend it into the full argument register. The declaration Numba emitted used a bare i32 parameter, which carries no signedness, so LLVM did not sign-extend it and a negative exponent reached the callee as a large positive one. Both lowerings, for math.ldexp and for the np.ldexp ufunc, now mark the exponent parameter signext.

(PR-#10789)

Changes

Relax NumPy sin/cos test comparisons on Linux x86_64 with NumPy < 1.25

Follow-up to PR #10572, which added a 4-ULP allowance for NumPy < 1.25 sin/cos on Linux x86_64. Apply that allowance in the remaining tests that were missed, and skip tests where the NumPy < 1.25 error cannot be matched by relative ULP comparison.

(PR-#10786)

Linux x86_64 wheels now require glibc 2.28 or newer

linux-64 wheels are built as manylinux_2_28 instead of manylinux2014. Installing from PyPI requires glibc 2.28 or newer. Systems with older glibc can remain on Numba 0.67. linux-aarch64 was already on manylinux_2_28.

(PR-#10804)

Documentation Changes

Document container types in reference manual

Updated the documentation for Numba types to reference ListType, DictType, and SetType.

(PR-#10775)

Pull-Requests:

Authors: