Version 0.58.0 (20 September 2023)

This is a major Numba release. Numba now uses towncrier to create the release notes, so please find a summary of all noteworthy items below.


Added towncrier

This PR adds towncrier as a GitHub workflow for checking release notes. From this PR onwards every PR made in Numba will require a appropriate release note associated with it. The reviewer may decide to skip adding release notes in smaller PRs with minimal impact by addition of a skip_release_notes label to the PR.


The minimum supported NumPy version is 1.22.

Following NEP-0029, the minimum supported NumPy version is now 1.22.


Add support for NumPy 1.25

Extend Numba to support new and changed features released in NumPy 1.25.


Remove NVVM 3.4 and CTK 11.0 / 11.1 support

Support for CUDA toolkits < 11.2 is removed.


Removal of Windows 32-bit Support

This release onwards, Numba has discontinued support for Windows 32-bit operating systems.


The minimum llvmlite version is now 0.41.0.

The minimum required version of llvmlite is now version 0.41.0.


Added RVSDG-frontend

This PR is a preliminary work on adding a RVSDG-frontend for processing bytecode. RVSDG (Regionalized Value-State Dependence Graph) allows us to have a dataflow-centric view instead of a traditional SSA-CFG view. This allows us to simplify the compiler in the future.


New Features

numba.experimental.jitclass gains support for __*matmul__ methods.

numba.experimental.jitclass now has support for the following methods:

  • __matmul__

  • __imatmul__

  • __rmatmul__


numba.experimental.jitclass gains support for reflected -dunder- methods.

numba.experimental.jitclass now has support for the following methods:

  • __radd__

  • __rand_

  • __rfloordiv__

  • __rlshift__

  • __ror_

  • __rmod_

  • __rmul_

  • __rpow_

  • __rrshift_

  • __rsub_

  • __rtruediv_

  • __rxor_


Add support for value max to NUMBA_OPT.

The optimisation level that Numba applies when compiling can be set through the environment variable NUMBA_OPT. This has historically been a value between 0 and 3 (inclusive). Support for the value max has now been added, this is a Numba-specific optimisation level which indicates that the user would like Numba to try running the most optimisation possible, potentially trading a longer compilation time for better run-time performance. In practice, use of the max level of optimisation may or may not benefit the run-time or compile-time performance of user code, but it has been added to present an easy to access option for users to try if they so wish.



Updates to numba.core.pythonapi.

Support for Python C-API functions PyBytes_AsString and PyBytes_AsStringAndSize is added to numba.core.pythonapi.PythonAPI as bytes_as_string and bytes_as_string_and_size methods respectively.


Support for isinstance is now non-experimental.

Support for the isinstance built-in function has moved from being considered an experimental feature to a fully supported feature.


NumPy Support

All modes are supported in numpy.correlate and numpy.convolve.

All values for the mode argument to numpy.correlate and numpy.convolve are now supported.


@vectorize accommodates arguments implementing __array_ufunc__.

Universal functions (ufuncs) created with numba.vectorize will now respect arguments implementing __array_ufunc__ (NEP-13) to allow pre- and post-processing of arguments and return values when the ufunc is called from the interpreter.


Added support for np.geomspace function.

This PR improves on #4074 by adding support for np.geomspace. The current implementation only supports scalar start and stop parameters.


Added support for np.vsplit, np.hsplit, np.dsplit.

This PR improves on #4074 by adding support for np.vsplit, np.hsplit, and np.dsplit.


Added support for np.row_stack function.

Support is added for numpy.row_stack.


Added support for functions np.polynomial.polyutils.trimseq, as well as functions polyadd, polysub, polymul from np.polynomial.polynomial.

Support is added for np.polynomial.polyutils.trimseq, np.polynomial.polynomial.polyadd, np.polynomial.polynomial.polysub, np.polynomial.polynomial.polymul.


Added support for np.diagflat function.

Support is added for numpy.diagflat.


Added support for np.resize function.

Support is added for numpy.resize.


Add np.trim_zeros

Support for np.trim_zeros() is added.


CUDA Changes

Bitwise operation ufunc support for the CUDA target.

Support is added for some ufuncs associated with bitwise operation on the CUDA target. Namely:

  • numpy.bitwise_and

  • numpy.bitwise_or

  • numpy.bitwise_not

  • numpy.bitwise_xor

  • numpy.invert

  • numpy.left_shift

  • numpy.right_shift


Add support for the latest CUDA driver codes.

Support is added for the latest set of CUDA driver codes.


Add NumPy comparison ufunc in CUDA

this PR adds support for comparison ufuncs for the CUDA target (eg. numpy.greater, numpy.greater_equal, numpy.less_equal, etc.).


Report absolute path of on Linux

numba -s now reports the absolute path to on Linux, to aid troubleshooting driver issues, particularly on WSL2 where a Linux driver can incorrectly be installed in the environment.


Add debuginfo support to nvdisasm output.

Support is added for debuginfo (source line and inlining information) in functions that make calls through nvdisasm. For example the CUDA dispatcher .inspect_sass method output is now augmented with this information.



This PR adds support for getting the SASS CFG in dot language format. It adds an inspect_sass_cfg() method to CUDADispatcher and the -cfg flag to the nvdisasm command line tool.


Support NVRTC using the ctypes binding

NVRTC can now be used when the ctypes binding is in use, enabling float16, and linking CUDA C / C++ sources without needing the NVIDIA CUDA Python bindings.


Fix CUDA atomics tests with toolkit 12.2

CUDA 12.2 generates slightly different PTX for some atomics, so the relevant tests are updated to look for the correct instructions when 12.2 is used.


Bug Fixes

Handling of different sized unsigned integer indexes are fixed in numba.typed.List.

An issue with the order of truncation/extension and casting of unsigned integer indexes in numba.typed.List has been fixed.


Prevent invalid fusion

This PR fixes an issue in which an array first read in a parfor and later written in the same parfor would only be classified as used in the parfor. When a subsequent parfor also used the same array then fusion of the parfors was happening which should have been forbidden given that that the first parfor was also writing to the array. This PR treats such arrays in a parfor as being both used and defined so that fusion will be prevented.


The numpy.allclose implementation now correctly handles default arguments.

The implementation of numpy.allclose is corrected to use TypingError to report typing errors.


Add type validation to numpy.isclose.

Type validation is added to the implementation of numpy.isclose.


Fix support for overloading dispatcher with non-compatible first-class functions

Fixes an error caused by not handling compilation error during casting of Dispatcher objects into first-class functions. With the fix, users can now overload a dispatcher with non-compatible first-class functions. Refer to for details.


Support dtype keyword argument in numpy.arange with parallel=True

Fixes parfors transformation to support the use of dtype keyword argument in numpy.arange(..., dtype=dtype).


Fix all @overloads to use parameter names that match public APIs.

Some of the Numba @overloads for functions in NumPy and Python’s built-ins were written using parameter names that did not match those used in API they were overloading. The result of this being that calling a function with such a mismatch using the parameter names as key-word arguments at the call site would result in a compilation error. This has now been universally fixed throughout the code base and a unit test is running with a best-effort attempt to prevent reintroduction of similar mistakes in the future. Fixed functions include:

From Python built-ins:

  • complex

From the Python random module:

  • random.seed

  • random.gauss

  • random.normalvariate

  • random.randrange

  • random.randint

  • random.uniform

  • random.shuffle

From the numpy module:

  • numpy.argmin

  • numpy.argmax

  • numpy.array_equal

  • numpy.average

  • numpy.count_nonzero

  • numpy.flip

  • numpy.fliplr

  • numpy.flipud

  • numpy.iinfo

  • numpy.isscalar

  • numpy.imag

  • numpy.real

  • numpy.reshape

  • numpy.rot90

  • numpy.swapaxes

  • numpy.union1d

  • numpy.unique

From the numpy.linalg module:

  • numpy.linalg.norm

  • numpy.linalg.cond

  • numpy.linalg.matrix_rank

From the numpy.random module:

  • numpy.random.beta

  • numpy.random.chisquare

  • numpy.random.f

  • numpy.random.gamma

  • numpy.random.hypergeometric

  • numpy.random.lognormal

  • numpy.random.pareto

  • numpy.random.randint

  • numpy.random.random_sample

  • numpy.random.ranf

  • numpy.random.rayleigh

  • numpy.random.sample

  • numpy.random.shuffle

  • numpy.random.standard_gamma

  • numpy.random.triangular

  • numpy.random.weibull



Support for @numba.extending.intrinsic(prefer_literal=True)

In the high level extension API, the prefer_literal option is added to the numba.extending.intrinsic decorator to prioritize the use of literal types when available. This has the same behavior as in the prefer_literal option in the numba.extending.overload decorator.



Deprecation of old-style NUMBA_CAPTURED_ERRORS

Added deprecation schedule of NUMBA_CAPTURED_ERRORS=old_style. NUMBA_CAPTURED_ERRORS=new_style will become the default in future releases. Details are documented at