Version 0.62.0 (18 September 2025)¶
Table of Contents
This is a major Numba release. Numba now supports an LLVM 20 enabled llvmlite by requiring llvmlite 0.45 as a minimum. Furthermore, this release re-enables NumPy 1.22 support and adds NumPy 2.3 support.
Importantly for users, this is the last release to officially support the Intel
x86_64 macOS platform – also known as osx-64. This does not mean support
will be removed from the source tree, just that continuous integration will no
longer test this platform and new releases will not include binary artifacts as
part of the release process. For more details see:
https://github.com/numba/numba/issues/10187.
Further, please note that the Intel SVML library is not supported by this release of Numba. This loss of support was caused by the patch that enables the SVML optimisations not applying cleanly to the LLVM 20 code base when upgrading llvmlite (the library used by Numba to bind to LLVM). The impact of this change is a loss of performance in cases where SVML would previously have been used, it is hoped that the issues with this patch can be resolved in the future.
Please find a summary of all noteworthy items below.
Highlights¶
Remove new type system from numba¶
This release removes the new type system contained within files that have names
prefixed by new_*. This decision was made due to technical complexities faced
upon implementation of a new type system as described in:
https://numba.discourse.group/t/numpy-2-x-support-community-update/2815
New Features¶
Add NUMBA_CACHE_LOCATOR_CLASSES environment variable and InTreeCacheLocatorFsAgnostic¶
A new environment variable NUMBA_CACHE_LOCATOR_CLASSES has been added that allows users to override the default cache locator classes and their order. This variable accepts a comma-separated list of locator class names.
Additionally, a new cache locator class InTreeCacheLocatorFsAgnostic has been
introduced. This locator is a subclass of InTreeCacheLocator that is agnostic
to filesystem differences, particularly timestamp precision differences (e.g.,
milliseconds vs seconds). This helps ensure cache consistency across different
filesystems and environments.
(PR-#9899)
Improvements¶
Use the New Pass Manager¶
LLVM’s New Pass Manager is used for the optimization pipelines. The use of the Legacy Pass Manager, which is removed in later LLVM versions, is accessed by a configuration variable, USE_LLVM_LEGACY_PASS_MANAGER.
(PR-#9676)
Fall back to inspect.getsourcelines() in first line finder¶
If the first line finder can’t locate source code on disk, it now tries using
inspect.getsourcelines() to get the source. This enables it to locate
source for cells in Jupyter notebooks, so that line info for them can be
generated for profiling tools.
(PR-#9861)
[UX] TypedDict: better error message for KeyError #9892¶
The KeyError raised from __getitem__ for the numba.typed.Dict in
case of an non-existing key now reports the value of the key. This behaviour is
in-line with the regular dict via CPython.
(PR-#9892)
Improve compilation time by more lazy strings.¶
Make additional large strings be generated lazily so that you don’t pay the cost unless you actually use them.
(PR-#9916)
Implemented support for np.frombuffer kwargs offset and count¶
np.frombuffer now support offset and count kwargs.
(PR-#9926)
Improve Environment Object Support in PYCC¶
Added support for Environment objects referenced indirectly by entry points in PYCC-compiled code. Previously, PYCC was unable to handle these indirect Environment object references, which limited certain compilation scenarios.
Document and test as_numba_type’s role in instance checks¶
Documentation now explains how as_numba_type() is used in the
implementation of instance checks, and a test is added to ensure it continues
to function as expected.
NumPy Support¶
Bug Fixes¶
Avoid type inference hangs¶
Type inference can take a long time if it repeatedly attempts to resolve functions that have already failed. A patch is added to cache failed resolutions for the current compilation session.
This changes compiler behavior in the following way:
Previously, if a function resolution imported new extensions, those extensions could add support for the failing function.
Now, the compiler will not retry failed resolutions, so new extensions added during function resolution cannot add support retroactively.
It is important to note importing of extensions during function resolution phase are unexpected. They should be avoided as they can cause confusing behavior.
To help isolate any issues arising from this change, an environment variable
NUMBA_DISABLE_TYPEINFER_FAIL_CACHE is added to disable the cache.
(PR-#9259)
Fixed np.median raising AssertionError for empty arrays when NumPy returns NaN¶
Fixed an issue where passing empty arrays to np.median would cause an AssertionError. Now empty arrays correctly return NaN as expected.
(PR-#9805)
Fix coverage to respect configuration option¶
Fixes a problem that Numba’s coverage support is not respecting the coverage configuration options.
(PR-#9862)
Support floating point arguments for np.random.negative_binomial¶
The function np.random.negative_binomial was fixed and now supports
floating point types as arguments.
(PR-#9876)
Avoid declaring if operation bools in debug info¶
Internal bool variables that hold the result of conditional tests in if
operations are no longer declared, and therefore can’t show up in the
locals in GDB.
(PR-#9888)
[DUX] fix use of rstcheck in towncrier check script¶
The script maint/towncrier_rst_validator.py now correctly reports any RST
issues encountered when calling rstcheck via subprocess.check_output.
This helps to improve the developer experience as any issues are reported
directly and the developers no longer need to be confused and/or run a
secondary tools
(PR-#9893)
Fix IntEnumMember.can_convert_to() when no conversions found¶
A spurious TypeError that was raised when no conversion from an
IntEnumMember was possible has now been fixed.
Added support for __invert__ method in jitclass.¶
Support is added for the __invert__ method in jitclass.
Fix np.searchsorted with float32 NaN values¶
Fixes a bug in np.searchsorted where passing a float32 array containing
NaN values produces incorrect results. This issue occurs due to the use of an
incorrect comparison function.
Fix deprecation warning caused by tostring() in structured record constant¶
Replaces the deprecated usage of tostring() with tobytes() in
numba/np/arrayobj.py:constant_record. This resolves a DeprecationWarning
raised when creating structured record constants under recent versions of NumPy.
fix: handle nan correctly in np.unique¶
np.unique overload has been updated to handle np.nan values correctly
– this fix also propagates to the np.union1d overload, fixing its behavior
with np.nan inputs
Fix error for unsupported axis kwarg in average¶
Be explicit about the axis kwarg not being supported and fix logic in error
handling
Fix error formatting when paths contain curly braces¶
Fix KeyError in error formatting for file paths containing curly braces
(e.g., C:\\Users\\{GUID}\\... on Windows). Pre-formatted messages without
formatting arguments are now preserved as-is.
Changes¶
Fix list comprehension support for Python 3.13.4¶
Python 3.13.4 introduced a change in the bytecode generated for generator expressions, which also affects list comprehensions. See python/cpython#135171 for details. Numba relied on pattern matching the previous bytecode sequence, which no longer matched after the change. This update restores compatibility.
Pull-Requests¶
PR #9259: Stop type inference from indefinite retry on failed function resolution (gmarkall sklam)
PR #9390: Add .tobytes() method (alanhdu guilhermeleobas)
PR #9401: Add type annotations for @intrinsic (aneeshdurg)
PR #9595: Fix #9585: Correct exceptions raised by NumPy dtype typing and catch them (gmarkall)
PR #9676: Move Numba to LLVM’s NewPassManager (yashssh gmarkall)
PR #9805: Handle empty arrays in np.median implementation and add datetime check (tanishac25)
PR #9807: Resolve mutable default argument problems (EarlMilktea)
PR #9821: Add debug print to debug test_monitoring_multiple_threads failing on … (sklam)
PR #9823: Initialize 0.62.0dev : Bump llvmlite to next dev version (kc611)
PR #9828: Add new type-checking level (EarlMilktea)
PR #9831: Lint core/tracing.py using flake8 (EarlMilktea)
PR #9832: Lint core/withcontexts.py using flake8 (EarlMilktea)
PR #9837: Replace “hard-errors” with NumbaErrors. (stuartarchibald)
PR #9843: Cherry-picks and Changelog entries for 0.61.0rc2 (kc611 sklam)
PR #9848: Fix #9846. GET_ITER in comprehension changed to NOP. (sklam)
PR #9850: Handle empty traceback in get_loc method to prevent IndexError (tanishac25)
PR #9861: Fall back on inspect.getsourcelines() in first line finder (gmarkall)
PR #9862: Fix coverage support to respect include and omit and other options (sklam)
PR #9876: Support floating point arguments for np.random.negative_binomial (dforero0896 esc daria-shaw)
PR #9887: Add env-var NUMBA_JIT_COVERAGE to disable coverage (sklam)
PR #9888: Prevent bools from if ops being interpreted as user variables (gmarkall)
PR #9892: [UX] TypedDict: better error message for KeyError (esc)
PR #9893: [DUX] fix use of rstcheck in towncrier check script (esc)
PR #9897: Cherry Picks and changelog modifications for 0.61.0 final (kc611 esc)
PR #9899: Prevent cache invalidation due to file system differences on various systems (futurewasfree)
PR #9905: Cherry-pick change-log and version support table modifications to main (kc611 esc)
PR #9926: Implemented np.frombuffer kwargs offset and count (hbina)
PR #9943: Direct CUDA issues to the numba-cuda repo (gmarkall)
PR #9946: Replace deprecated abstractproperty and abstractclassmethod (sklam)
PR #9955: Use linkonce_odr linkage for __excinfo_unwrap_args global (sklam)
PR #9961: Fix flake8 issue on main branch. (stuartarchibald)
PR #9973: Prevent unsafe type conversions use in range. (stuartarchibald)
PR #10032: Updated dates in version support table and release notes (kc611)
PR #10035: Add support for PYCC for functions that has indirect dependency on Environment object (sklam)
PR #10043: Backport change-log and version support table modifications for 0.61.2 to main. (kc611 swap357)
PR #10044: Document and test as_numba_type’s role in instance checks (gmarkall)
PR #10047: Fix IntEnumMember.can_convert_to() when no conversions found (gmarkall)
PR #10050: Fixed invert in overload and added testcase. (LuniaKunal)
PR #10052: Fix bug in np.searchsorted when the arguments have float32 dtype (guilhermeleobas)
PR #10059: gha/add linux-arm64 wheel builder workflow (swap357)
PR #10065: gha/add numba linux-arm64 conda builder (swap357)
PR #10068: Document the inline and forceinline kwargs (gmarkall)
PR #10072: Docs: Fix jit decorator parameter name from ‘signature’ to ‘signature_or_function’ (esc dipampaul17)
PR #10073: Fix C++ linkage for Python builds with Valgrind (tiran seibert)
PR #10079: Fix looplifting issue in for-zip, for-enumerate (sklam)
PR #10081: Resolve NumPy DeprecationWarning in constant_record (mreraser)
PR #10088: fix: handle nan correctly in np.unique (Saransh-cpp)
PR #10097: Add support for posinf and neginf in nan_to_num (Saransh-cpp gmarkall)
PR #10102: Fix error for unsupported axis kwarg in average (Saransh-cpp gmarkall)
PR #10107: gha/seperate wheel build and test matrices (swap357)
PR #10122: add ufunc.reduceat support (guilhermeleobas)
PR #10146: Prepare Numba for LLVM20 changes (swap357 yashssh)
PR #10147: Fixes for NumPy 2.3.0 (eric-wieser)
PR #10152: Explicitly accept conda TOS in Windows Azure public CI (kc611)
PR #10159: Added ‘is’ operator for structref types, issue #9936 (KevinMai0202)
PR #10167: Fix Azure failure by reducing memory use. (sklam)
PR #10176: Fix GHA windows workers memory pressure issue (sklam)
PR #10179: update azure pipeline configs to use numpy2.3 (swap357)
PR #10183: Revert NumPy 1.23 support removal (kc611 swap357)
PR #10189: Fix CI: skip test if LLVM reports host CPU as ‘generic’ (sklam)
PR #10190: gha/replace conda installation of llvmlite with pip on wheel workflows (swap357)
PR #10192: gha/fix artifact llvmlite artifact name on win-64 test step (swap357)
PR #10193: gha/fix llvmlite channel path format on win artifact handling (swap357)
PR #10194: gha/add env variables for reduced testing on win-64 wheel builder (swap357)
PR #10206: GHA/ update artifact names in wheel builder workflows (swap357)
PR #10216: Update conda_build_config.yaml to pin osx compiler version to 19 (swap357)
PR #10218: add no SVML support note to 0.62.0 release notes (swap357)
PR #10232: Update release date and change-log for 0.62.0 (esc)