Releases: numpy/numpy
Release list
v2.5.2 (Aug 9, 2026)
NumPy 2.5.2 Release Notes
The NumPy 2.5.2 is a patch release that fixes bugs discovered after the 2.5.1
release. The big news is that it includes wheels for the newly released
Python 3.15.0rc1.
This release supports Python versions 3.12-3.15
C API changes
PyArray_StringDTypeObject is opaque under the abi3t stable ABI
The PyArray_StringDTypeObject was accidentally exposed in NumPy
2.5 when targeting the free-threading-compatible stable ABI
(Py_TARGET_ABI3T). PyArray_StringDTypeObject is now an opaque
struct: extensions compiled that way cannot access its fields, since
the struct layout depends on the size of the object header. Any code
that accessed PyArray_StringDTypeObject fields in an abi3t build
would have crashed, so we are making this API change in a bugfix
release.
The NpyString allocator API remains usable by passing the
descriptor object pointer, e.g.
NpyString_acquire_allocator((PyArray_StringDTypeObject *)descr).
(gh-31771)
Contributors
A total of 16 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
- Abhijeetsingh Meena +
- Charalampos Stratakis
- Charles Harris
- Chris Ninham +
- David Woods
- Geonho +
- Gopu Yeshwanth Reddy +
- Iason Krommydas
- Ijtihed Kilani
- Jelle Zijlstra +
- Joren Hammudoglu
- Kumar Aditya
- Mike Boyle
- Nathan Goldbaum
- Raghuveer Devulapalli
- Sebastian Berg
Pull requests merged
A total of 28 pull requests were merged for this release.
- #31864: MAINT: Prepare 2.5.x for further development
- #31889: TYP: Backport multiple static typing fixes 1.
- #31900: TST: add tests for stable ABI numpy extensions (#31822)
- #31901: BUG: fix
StringDTypecoerce flag in binary ufunc promotion... - #31902: BLD: fix meson deprecation warnings (#31892)
- #31921: TYP: Backport multiple typing fixes 2.
- #31947: MAINT: Update x86-simd-sort subproject (5adb334 → fa944ef) (#31908)
- #31949: BUG: fix crash on 32 bit systems using abi3t (#31771)
- #31950: MNT: remove some obsolete string to bool workarounds (#31859)
- #31952: BUG: centralized helper for output coerce and na_object in stringdtype...
- #31953: BUG: fix CPU feature env diagnostic buffer overruns (#31905)
- #31954: BUG: restore ndarray.conjugate() for legacy user-defined dtypes...
- #31955: TYP: Avoid shadowed dtype annotations
- #32077: MAINT: Update verdored-meson/meson to match main.
- #32114: BUG: fix refcount leak on overlapping copyto with where=False
- #32115: BUG: fix swallowed cast error in fancy indexing assignment (#31975)
- #32116: BUG: Fix buffered iterator stride after removing multi-index
- #32117: BUG: fix
np.fromitercorruption when reusing aStringDType... - #32119: BUG: add a special case for StringDType in np.isdtype (#32030)
- #32121: BUG: reference leak in
simd_sequence_from_iterable(#32038) - #32122: BUG: ensure lock is held when accessing or writing to RNG state...
- #32123: BUG: fully reset cached RNG state for non-MT19937 RNGs (#32062)
- #32135: TYP: type capabilities max dimensions
- #32158: BUG: avoid possible stack overflow in arraydescr_dealloc (#32133)
- #32206: MAINT: Update cibuildwheel to v4.2.0
- #32214: MAINT: Skip limited_api tests on some platforms.
- #32220: TYP:
iscloseshape-typing fix for 2d array-likes (#32205) - #32221: BUG: avoid segfaults when legacy copyswap slot is not defined...
v2.5.1 (July 4, 2026)
NumPy 2.5.1 Release Notes
The NumPy 2.5.1 is a patch release that fixes bugs discovered after the 2.5.0
release. The most noticeable is the fix is to the numpy datetime cython API
which should allow downstream to support NumPy versions older than 2.5.
Preparation for Python 3.15 continues along with typing improvements.
This release supports Python versions 3.12-3.14
Changes
-
The minimum supported GCC version has been updated from 9.3.0 to 10.3.0
(gh-31843)
Contributors
A total of 10 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
- Adhyan Gupta +
- Ankit Ahlawat
- Charles Harris
- Iason Krommydas
- Joren Hammudoglu
- Kumar Aditya
- Nathan Goldbaum
- Sebastian Berg
- Ties Jan Hefting +
- Vineet Kumar
Pull requests merged
A total of 20 pull requests were merged for this release.
- #31707: MAINT: Prepare 2.5.x for further development
- #31721: CI: fix new
cython-linterrors (#31711) - #31723: MAINT: Update meson to match main
- #31729: TST: use setup-sde instead of curl to get SDE binaries (#31727)
- #31829: BUG: Relax finfo to be easier accessible for all user dtypes...
- #31831: TYP: Fix
flatiter.__next__return type forobject_and... - #31832: BUG: avoid deadlocks using NpyString API (#31682)
- #31833: BUG: fix out array leak in reduceat and accumulate when dtype...
- #31835: BUG: fix numpy datetime cython APIs to be compatible with older...
- #31836: TYP: Fix incorrect dtype inference of
asarray([])(#31732) - #31837: TYP: Fix
np.ma.masked_array2.5.0 regression - #31838: FIX: Refactor error handling in array_setstate to prevent typecode...
- #31839: TST: xfail multithreaded BLAS test more generously
- #31840: MAINT: Rename subroutine for crackfortran tests
- #31842: BUG: fix leak in reductions when a ufunc override errors or is...
- #31849: BLD: set minimum required gcc version to 10.3 (#31843)
- #31855: CI: fix hangs on MacOS ASan CI (#31853)
- #31856: BUG: fix several bugs in StringDType operations (#31846)
- #31857: BUG: Fix segfault in MT19937 by preventing recursive seed lists...
- #31858: BUG: Fix signed integer overflow in datetime.c (#31688)
v2.5.0 (June 21, 2026)
NumPy 2.5.0 Release Notes
Numpy 2.5.0 is a transitional release. It drops support for Python 3.11,
marking the end of distutils, and expires a large number of deprecations made
in the 2.0.x release. It also improves free threading and brings sorting into
compliance with the array-api standard with the addition of descending sorts.
There is also a fair amount of preparation for Python 3.15, which will be
supported starting with the first rc.
This release supports Python versions 3.12-3.14.
Highlights
- Distutils has been removed,
- Many expired deprecations, see below,
- Many new deprecations, see below,
- Many static typing improvements.
- Improved support for free threading,
- Support for descending sorts,
See New Features below for other additions.
Deprecations
-
numpy.char.chararrayis deprecated. Use anndarraywith a string or bytes dtype instead.(gh-30605)
-
numpy.takenow correctly checks if the result can be cast to the provided
out=outunder the same-kind rule. ADeprecationWarningis given now
when this check fails. Previously,takeincorrectly checked ifout
could be cast to the result (the wrong direction). This deprecation also
affectscompressand possibly other functions. (Future versions of NumPy
may tighten the casting check further.)(gh-30615)
-
The
numpy.char.[as]arrayfunctions are deprecated. Use an
numpy.[as]arraywith a string or bytes dtype instead.(gh-30802)
-
Setting the dtype attribute is deprecated because mutating an array is unsafe
if an array is shared, especially by multiple threads. As an alternative,
you can create a view with a new dtype viaarray.view(dtype=new_dtype).(gh-29244)
-
Setting the
shapeattribute is deprecated because mutating an array is
unsafe if an array is shared, especially by multiple threads. As an
alternative, you can create a new view vianp.reshapeor
np.ndarray.reshape. For example:x = np.arange(15); x = np.reshape(x, (3, 5)).
To ensure no copy is made from the data, one can usenp.reshape(..., copy=False).While setting the shape on an array is discouraged, for cases where it is
difficult to work around, e.g., in__array_finalize__, it is possible
with the private methodnp.ndarray._set_shape.(gh-29536)
-
Using the
genericunit innumpy.timedelta64is deprecated since this
can lead to unexpected behavior such as non-transitive comparison, see
gh-28287 for details. As
an alternative, specify an explicit unit such as's'(seconds) or'D'
(days) when constructingnumpy.timedelta64. Due to this change, operations
that implicitly rely on thegenericunit are also deprecated. For
example:arr = np.array([1, 2, 3], dtype="m8[s]") # `1` is implicitly converted to generic timedelta64 arr + 1(gh-29619)
-
Resizing a Numpy array in place is deprecated since mutating an array is
unsafe if an array is shared, especially by multiple threads. As an
alternative, you can create a resized array vianp.resize.(gh-30181)
-
numpy.fixis deprecated, usenumpy.truncinstead. It is faster and
follows the Array API standard. Both functions provide identical
functionality: rounding array elements towards zero.(gh-30644)
-
numpy.ma.round_is deprecated.numpy.ma.roundcan be used as a
replacement.(gh-30738)
-
numpy.typenameis deprecated because the names returned by it were
outdated and inconsistent.numpy.dtype.namecan be used as a
replacement.(gh-30774)
-
Inputs other than integers are deprecated for
numpy.triu_indicesand
numpy.tril_indices. Non-integer values for theM,kandN
parameters ofnumpy.triare deprecated. Non-integer values for thek
parameter of bothnumpy.tril_indices_fromandnumpy.triu_indices_from
are deprecated.(gh-30869)
-
Deprecations in custom
dtypeproperty and__array_finalize__.Previously
arr.view(dtype=new_dtype)calledarr.dtype = new_dtype
also for subclasses, i.e., the attribute setting. That path is now
deprecated and refined, meaning that even subclasses that do not see this
DeprecationWarningmay wish to update their code.A subclass that does any
dtypespecific logic (i.e. verifying the dtype
in__array_finalize__or has adtypeproperty) should now:- Set
_set_dtype = Nonein which casearr.view(dtype=new_dtype)
will call__array_finalize__with the new dtype, ensuring that
any validation__array_finalize__will run is done. - Or, for a quick fix, define
_set_dtypeas a function (calling
ndarray._set_dtype()to avoidDeprecationWarnings.
(Future versions might migrate towards the_set_dtype = Nonepath.)
Ideally, follow NumPy's deprecation to prevent
dtypemutation by users.
The use ofndarray._set_dtype()may be necessary for some subclass
finalization patterns, but should otherwise be avoided.(gh-31293)
- Set
Expired deprecations
-
numpy.distutilshas been removed(gh-30340)
-
Passing
Noneas dtype tonp.finfowill now raise aTypeError
(deprecated since 1.25)(gh-30460)
-
numpy.crossno longer supports 2-dimensional vectors.
(Deprecated since 2.0)(gh-30461)
-
numpy._core.numerictypes.maximum_sctypehas been removed.
(deprecated since 2.0)(gh-30462)
-
numpy.row_stackhas been removed in favor ofnumpy.vstack.
(deprecated since 2.0)(gh-30463)
-
get_array_wraphas been removed.
(deprecated since 2.0)(gh-30463)
-
recfromtxtandrecfromcsvhave been removed fromnumpy.lib._npyio
in favor ofnumpy.genfromtxt.
(deprecated since 2.0)(gh-30467)
-
The
numpy.chararrayre-export ofnumpy.char.chararrayhas been removed.
(deprecated since 2.0)(gh-30604)
-
bincountnow raises aTypeErrorfor non-integer inputs.
(deprecated since 2.1)(gh-30610)
-
The
numpy.lib.mathalias for the standard librarymathmodule has
been removed.
(deprecated since 1.25)(gh-30612)
-
Data type alias
'a'was removed in favor of'S'.
(deprecated since 2.0)(gh-30613)
-
_add_newdoc_ufunc(ufunc, newdoc)has been removed in favor of
ufunc.__doc__ = newdoc.
(deprecated since 2.2)(gh-30614)
Compatibility notes
linalg.eig and linalg.eigvals now always return complex arrays
Previously, the return values depended on whether the eigenvalues happen to lie
on the real line (which, for a general, non-symmetric matrix, is not
guaranteed).
This change makes consistent what was a value-dependent result. To retain the
previous behavior, do:
w = eigvals(a)
if np.any(w.imag == 0): # this is what NumPy used to do
w = w.real
If your matrix is symmetrix/hermitian, use eigh and eigvalsh instead of
eig and eigvals. These are guaranteed to return real values. A common
case is covariance matrices, which are symmetric and positive definite by
construction.
(gh-30411)
MSVC support
NumPy now requires minimum MSVC 19.35 toolchain version on Windows platforms.
This corresponds to Visual Studio 2022 version 17.5 Preview 2 or newer.
(gh-30489)
Cython support
NumPy's Cython headers (accessed via cimport numpy) now require Cython 3.0
or newer to build. If you try to compile a project that depends on NumPy's
Cython headers using Cython 0.29 or older, you will see a message like this:
Error compiling Cython file:
------------------------------------------------------------
...
# versions.
#
# See __init__.cython-30.pxd for the real Cython header
#
DEF err = int('Build aborted: the NumPy Cython headers require Cython 3.0.0 or newer.')
------------------------------------------------------------
/path/to/site-packages/numpy/__init__.pxd:11:13: Error in compile-time expression:
ValueError: invalid literal for int() with base 10:
'Build aborted: the NumPy Cython headers require Cython 3.0.0 or newer.'
Note that the invalid integer is not a bug in NumPy - we are intentionally
generating this error to avoid triggering a more obscure error later in the
build when an older Cython version tries to use a Cython feature that was not
available in the old Cython version.
(gh-30770)
numpy.where no longer truncates Python integers
Previously, if the x or y argument of numpy.where was a Python
integer that was out of range of the output type, it would be silently
...
v2.5.0rc1 (June 2, 2026)
NumPy 2.5.0 Release Notes
Numpy 2.5.0 is a transitional release. It drops support for Python 3.11,
marking the end of distutils, and expires a large number of deprecations made
in the 2.0.x release. It also improves free threading and brings sorting into
compliance with the array-api standard with the addition of descending sorts.
Python 3.15 will be supported when it is released.
This release supports Python versions 3.12-3.14.
Highlights
- Distutils has been removed,
- Many expired deprecations, see below,
- Many new deprecations, see below,
- Many static typing improvements.
- Improved support for free threading,
- Support for descending sorts,
See New Features below for other additions.
Deprecations
-
numpy.char.chararrayis deprecated. Use anndarraywith a string or bytes dtype instead.(gh-30605)
-
numpy.takenow correctly checks if the result can be cast to the provided
out=outunder the same-kind rule. ADeprecationWarningis given now
when this check fails. Previously,takeincorrectly checked ifout
could be cast to the result (the wrong direction). This deprecation also
affectscompressand possibly other functions. (Future versions of NumPy
may tighten the casting check further.)(gh-30615)
-
The
numpy.char.[as]arrayfunctions are deprecated. Use an
numpy.[as]arraywith a string or bytes dtype instead.(gh-30802)
-
Setting the dtype attribute is deprecated because mutating an array is unsafe
if an array is shared, especially by multiple threads. As an alternative,
you can create a view with a new dtype viaarray.view(dtype=new_dtype).(gh-29244)
-
Setting the
shapeattribute is deprecated because mutating an array is
unsafe if an array is shared, especially by multiple threads. As an
alternative, you can create a new view vianp.reshapeor
np.ndarray.reshape. For example:x = np.arange(15); x = np.reshape(x, (3, 5)).
To ensure no copy is made from the data, one can usenp.reshape(..., copy=False).While setting the shape on an array is discouraged, for cases where it is
difficult to work around, e.g., in__array_finalize__, it is possible
with the private methodnp.ndarray._set_shape.(gh-29536)
-
Using the
genericunit innumpy.timedelta64is deprecated since this
can lead to unexpected behavior such as non-transitive comparison, see
gh-28287 for details. As
an alternative, specify an explicit unit such as's'(seconds) or'D'
(days) when constructingnumpy.timedelta64. Due to this change, operations
that implicitly rely on thegenericunit are also deprecated. For
example:arr = np.array([1, 2, 3], dtype="m8[s]") # `1` is implicitly converted to generic timedelta64 arr + 1(gh-29619)
-
Resizing a Numpy array in place is deprecated since mutating an array is
unsafe if an array is shared, especially by multiple threads. As an
alternative, you can create a resized array vianp.resize.(gh-30181)
-
numpy.fixis deprecated, usenumpy.truncinstead. It is faster and
follows the Array API standard. Both functions provide identical
functionality: rounding array elements towards zero.(gh-30644)
-
numpy.ma.round_is deprecated.numpy.ma.roundcan be used as a
replacement.(gh-30738)
-
numpy.typenameis deprecated because the names returned by it were
outdated and inconsistent.numpy.dtype.namecan be used as a
replacement.(gh-30774)
-
Inputs other than integers are deprecated for
numpy.triu_indicesand
numpy.tril_indices. Non-integer values for theM,kandN
parameters ofnumpy.triare deprecated. Non-integer values for thek
parameter of bothnumpy.tril_indices_fromandnumpy.triu_indices_from
are deprecated.(gh-30869)
-
Deprecations in custom
dtypeproperty and__array_finalize__.Previously
arr.view(dtype=new_dtype)calledarr.dtype = new_dtype
also for subclasses, i.e., the attribute setting. That path is now
deprecated and refined, meaning that even subclasses that do not see this
DeprecationWarningmay wish to update their code.A subclass that does any
dtypespecific logic (i.e. verifying the dtype
in__array_finalize__or has adtypeproperty) should now:- Set
_set_dtype = Nonein which casearr.view(dtype=new_dtype)
will call__array_finalize__with the new dtype, ensuring that
any validation__array_finalize__will run is done. - Or, for a quick fix, define
_set_dtypeas a function (calling
ndarray._set_dtype()to avoidDeprecationWarnings.
(Future versions might migrate towards the_set_dtype = Nonepath.)
Ideally, follow NumPy's deprecation to prevent
dtypemutation by users.
The use ofndarray._set_dtype()may be necessary for some subclass
finalization patterns, but should otherwise be avoided.(gh-31293)
- Set
Expired deprecations
-
numpy.distutilshas been removed(gh-30340)
-
Passing
Noneas dtype tonp.finfowill now raise aTypeError
(deprecated since 1.25)(gh-30460)
-
numpy.crossno longer supports 2-dimensional vectors.
(Deprecated since 2.0)(gh-30461)
-
numpy._core.numerictypes.maximum_sctypehas been removed.
(deprecated since 2.0)(gh-30462)
-
numpy.row_stackhas been removed in favor ofnumpy.vstack.
(deprecated since 2.0)(gh-30463)
-
get_array_wraphas been removed.
(deprecated since 2.0)(gh-30463)
-
recfromtxtandrecfromcsvhave been removed fromnumpy.lib._npyio
in favor ofnumpy.genfromtxt.
(deprecated since 2.0)(gh-30467)
-
The
numpy.chararrayre-export ofnumpy.char.chararrayhas been removed.
(deprecated since 2.0)(gh-30604)
-
bincountnow raises aTypeErrorfor non-integer inputs.
(deprecated since 2.1)(gh-30610)
-
The
numpy.lib.mathalias for the standard librarymathmodule has
been removed.
(deprecated since 1.25)(gh-30612)
-
Data type alias
'a'was removed in favor of'S'.
(deprecated since 2.0)(gh-30613)
-
_add_newdoc_ufunc(ufunc, newdoc)has been removed in favor of
ufunc.__doc__ = newdoc.
(deprecated since 2.2)(gh-30614)
Compatibility notes
linalg.eig and linalg.eigvals now always return complex arrays
Previously, the return values depended on whether the eigenvalues happen to lie
on the real line (which, for a general, non-symmetric matrix, is not
guaranteed).
This change makes consistent what was a value-dependent result. To retain the
previous behavior, do:
w = eigvals(a)
if np.any(w.imag == 0): # this is what NumPy used to do
w = w.real
If your matrix is symmetrix/hermitian, use eigh and eigvalsh instead of
eig and eigvals. These are guaranteed to return real values. A common
case is covariance matrices, which are symmetric and positive definite by
construction.
(gh-30411)
MSVC support
NumPy now requires minimum MSVC 19.35 toolchain version on Windows platforms.
This corresponds to Visual Studio 2022 version 17.5 Preview 2 or newer.
(gh-30489)
Cython support
NumPy's Cython headers (accessed via cimport numpy) now require Cython 3.0
or newer to build. If you try to compile a project that depends on NumPy's
Cython headers using Cython 0.29 or older, you will see a message like this:
Error compiling Cython file:
------------------------------------------------------------
...
# versions.
#
# See __init__.cython-30.pxd for the real Cython header
#
DEF err = int('Build aborted: the NumPy Cython headers require Cython 3.0.0 or newer.')
------------------------------------------------------------
/path/to/site-packages/numpy/__init__.pxd:11:13: Error in compile-time expression:
ValueError: invalid literal for int() with base 10:
'Build aborted: the NumPy Cython headers require Cython 3.0.0 or newer.'
Note that the invalid integer is not a bug in NumPy - we are intentionally
generating this error to avoid triggering a more obscure error later in the
build when an older Cython version tries to use a Cython feature that was not
available in the old Cython version.
(gh-30770)
numpy.where no longer truncates Python integers
Previously, if the x or y argument of numpy.where was a Python
integer that was out of range of the output type, it would be silently
truncated. Now, an OverflowError will be raised instead.
T...
v2.4.6 (May 18, 2026)
NumPy 2.4.6 Release Notes
NumPy 2.4.6 is a quick release that fixes a regression discovered in the 2.4.5
release.
This release supports Python versions 3.11-3.14
Contributors
A total of 4 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
- !EarlMilktea
- Charles Harris
- Sebastian Berg
- Warren Weckesser
Pull requests merged
A total of 4 pull requests were merged for this release.
v2.4.5 (May 15, 2026)
NumPy 2.4.5 Release Notes
NumPy 2.4.5 is a patch release that fixes bugs discovered after the 2.4.4
release, has some typing improvements, and maintains infrastructure.
This release supports Python versions 3.11-3.14
Contributors
A total of 17 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
- Aleksei Nikiforov
- Anarion Zuo +
- Ankit Ahlawat
- Breno Favaretto +
- Charles Harris
- Igor Krivenko +
- Ijtihed Kilani +
- Joren Hammudoglu
- Maarten Baert +
- Matti Picus
- Nathan Goldbaum
- Praneeth Kodumagulla +
- Ralf Gommers
- RoomWithOutRoof +
- Sebastian Berg
- Warren Weckesser
- div +
Pull requests merged
A total of 28 pull requests were merged for this release.
- #31093: MAINT: Prepare 2.4.x for further development
- #31182: TYP: fix
np.shapeassignability issue for python lists (#31171) - #31197: ENH: Return rank 0 for empty matrices in matrix_rank (#30422)
- #31198: CI/BUG: add native jobs for s390x, fix bug in
pack_inner... - #31199: BUG: f2py map complex_long_double to NPY_CLONGDOUBLE
- #31205: MAINT: f2py: Stop setting re._MAXCACHE to 50.
- #31206: BUG: fix heap buffer overflow in timedelta to string casts
- #31207: MAINT: Rename ppc64le and s390x workflow (#31121)
- #31208: BUG: Fix matvec/vecmat in-place aliasing (out=input produces...
- #31209: TYP:
tile: accept numpy scalars and arrays as second argument... - #31211: DEP: Undo deprecation for np.dtype() signature used by old pickles...
- #31212: REV: Manual revert of float16 svml use (#31178)
- #31222: TYP:
ix_fix for boolean and non-1d input (#31218) - #31329: BUG: incorrect temp elision for new-style (NEP 43) user-defined...
- #31330: TYP: fix sliding_window_view axis parameter typing
- #31335: BUG: Prevent deadlock due to downstream importing NumPy in dlopen...
- #31336: BUG: Fix segfault in nditer.multi_index when __getitem__ raises...
- #31338: TYP: Fix ruff lint error
- #31357: BUG: fix memory leak in np.zeros when fill-zero loop raises (#31320)
- #31358: BUG: np.einsum() fails with a 0-dimensional out argument and...
- #31379: BUG: Fix signed overflow issue in npy_gcd for INT_MIN on s390x...
- #31383: CI: remove Cirrus CI FreeBSD job (#31380)
- #31390: BUILD: newer MKL uses so.3
- #31391: BLD/MAINT: improve support for Intel LLVM compilers
- #31401: BUG: Avoid UB in safe[add,sub,mul] helpers (#31396)
- #31402: BUG: exclude __pycache__ directories from wheels (#31397)
- #31404: TYP:
_NestedSequencetype parameter default to work around... - #31426: TYP: Fix
DTypeLikeruntime type-checker support (#31425)
2.4.4 (Mar 29, 2026)
NumPy 2.4.4 Release Notes
The NumPy 2.4.4 is a patch release that fixes bugs discovered after the 2.4.3
release. It should finally close issue #30816, the OpenBLAS threading problem
on ARM.
This release supports Python versions 3.11-3.14
Contributors
A total of 8 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
- Charles Harris
- Daniel Haag +
- Denis Prokopenko +
- Harshith J +
- Koki Watanabe
- Marten van Kerkwijk
- Matti Picus
- Nathan Goldbaum
Pull requests merged
A total of 7 pull requests were merged for this release.
- #30978: MAINT: Prepare 2.4.x for further development
- #31049: BUG: Add test to reproduce problem described in #30816 (#30818)
- #31052: BUG: fix FNV-1a 64-bit selection by using NPY_SIZEOF_UINTP (#31035)
- #31053: BUG: avoid warning on ufunc with where=True and no output
- #31058: DOC: document caveats of ndarray.resize on 3.14 and newer
- #31079: TST: fix POWER VSX feature mapping (#30801)
- #31084: MAINT: numpy.i: Replace deprecated
sprintfwithsnprintf...
2.4.3 (Mar 9, 2026)
NumPy 2.4.3 Release Notes
The NumPy 2.4.3 is a patch release that fixes bugs discovered after the
2.4.2 release. The most user visible fix may be a threading fix for
OpenBLAS on ARM, closing issue #30816.
This release supports Python versions 3.11-3.14
Contributors
A total of 11 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
- Antareep Sarkar +
- Charles Harris
- Joren Hammudoglu
- Matthieu Darbois
- Matti Picus
- Nathan Goldbaum
- Peter Hawkins
- Pieter Eendebak
- Sebastian Berg
- Warren Weckesser
- stratakis +
Pull requests merged
A total of 14 pull requests were merged for this release.
- #30759: MAINT: Prepare 2.4.x for further development
- #30827: BUG: Fix some leaks found via LeakSanitizer (#30756)
- #30841: MAINT: Synchronize 2.4.x submodules with main
- #30849: TYP:
matlib: missing extended precision imports - #30850: BUG: Fix weak hash function in np.isin(). (#30840)
- #30921: BUG: fix infinite recursion in np.ma.flatten_structured_array...
- #30922: BUG: Fix buffer overrun in CPU baseline validation (#30877)
- #30923: BUG: Fix busdaycalendar's handling of a bool array weekmask....
- #30924: BUG: Fix reference leaks and NULL pointer dereferences (#30908)
- #30925: MAINT: fix two minor issues noticed when touching the C API setup
- #30955: ENH: Test .kind not .char in np.testing.assert_equal (#30879)
- #30957: BUG: fix type issues in uses if PyDataType macros
- #30958: MAINT: Don't use vulture 2.15, it has false positives
- #30973: MAINT: update openblas (#30961)
2.4.2 (Feb 1, 2026)
NumPy 2.4.2 Release Notes
The NumPy 2.4.2 is a patch release that fixes bugs discovered after the
2.4.1 release. Highlights are:
- Fixes memory leaks
- Updates OpenBLAS to fix hangs
This release supports Python versions 3.11-3.14
Contributors
A total of 9 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
- Charles Harris
- Daniel Tang +
- Joren Hammudoglu
- Kumar Aditya
- Matti Picus
- Nathan Goldbaum
- Ralf Gommers
- Sebastian Berg
- Vikram Kumar +
Pull requests merged
A total of 12 pull requests were merged for this release.
- #30629: MAINT: Prepare 2.4.x for further development
- #30636: TYP:
arange: accept datetime strings - #30657: MAINT: avoid possible race condition by not touching
os.environ... - #30700: BUG: validate contraction axes in tensordot (#30521)
- #30701: DOC: __array_namespace__info__: set_module not __module__ (#30679)
- #30702: BUG: fix free-threaded PyObject layout in replace_scalar_type_names...
- #30703: TST: fix limited API example in tests for latest Cython
- #30709: BUG: Fix some bugs found via valgrind (#30680)
- #30712: MAINT: replace ob_type access with Py_TYPE in PyArray_CheckExact
- #30713: BUG: Fixup the quantile promotion fixup
- #30736: BUG: fix thread safety of
array_getbuffer(#30667) - #30737: backport scipy-openblas version change
2.4.1 (Jan 10, 2026)
NumPy 2.4.1 Release Notes
The NumPy 2.4.1 is a patch release that fixes bugs discoved after the
2.4.0 release. In particular, the typo SeedlessSequence is preserved to
enable wheels using the random Cython API and built against NumPy < 2.4.0
to run without errors.
This release supports Python versions 3.11-3.14
Contributors
A total of 9 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.
- Alexander Shadchin
- Bill Tompkins +
- Charles Harris
- Joren Hammudoglu
- Marten van Kerkwijk
- Nathan Goldbaum
- Raghuveer Devulapalli
- Ralf Gommers
- Sebastian Berg
Pull requests merged
A total of 15 pull requests were merged for this release.
- #30490: MAINT: Prepare 2.4.x for further development
- #30503: DOC:
numpy.select: fixdefaultparameter docstring... - #30504: REV: Revert part of #30164 (#30500)
- #30506: TYP:
numpy.select: allow passing array-likedefault... - #30507: MNT: use if constexpr for compile-time branch selection
- #30513: BUG: Fix leak in flat assignment iterator
- #30516: BUG: fix heap overflow in fixed-width string multiply (#30511)
- #30523: BUG: Ensure summed weights returned by np.average always are...
- #30527: TYP: Fix return type of histogram2d
- #30594: MAINT: avoid passing ints to random functions that take double...
- #30595: BLD: Avoiding conflict with pygit2 for static build
- #30596: MAINT: Fix msvccompiler missing error on FreeBSD
- #30608: BLD: update vendored Meson to 1.9.2
- #30620: ENH: use more fine-grained critical sections in array coercion...
- #30623: BUG: Undo result type change of quantile/percentile but keep...