---
title: "numpy Breaking Changes on PyPI | Since.dev"
description: "What each numpy release removed, renamed or changed: 3,278 breaking changes in 25 versions on PyPI, each with its source."
canonical_url: https://since.dev/packages/pypi/numpy
last_updated: 2026-01-10
---

# numpy breaking changes

Every breaking API change we have recorded in numpy on PyPI: 3,278 breaking changes in 25 versions. Below are its newest 6 versions, removals and renames first, each with its source.

Newest change January 10, 2026

## 2.4.1

563 breaking changes, first published January 10, 2026.

- **Removed** `numpy.conftest.coerce`  

numpy.conftest.coerce was removed in numpy 2.4.1 [pypi.org](https://pypi.org/project/numpy/2.4.1/)
- **Removed** `numpy.conftest.dtype`  

numpy.conftest.dtype was removed in numpy 2.4.1 [pypi.org](https://pypi.org/project/numpy/2.4.1/)
- **Removed** `numpy.conftest.env_setup`  

numpy.conftest.env_setup was removed in numpy 2.4.1 [pypi.org](https://pypi.org/project/numpy/2.4.1/)
- **Removed** `numpy.conftest.get_stringdtype_dtype`  

numpy.conftest.get_stringdtype_dtype was removed in numpy 2.4.1 [pypi.org](https://pypi.org/project/numpy/2.4.1/)
- **Removed** `numpy.conftest.na_object`  

numpy.conftest.na_object was removed in numpy 2.4.1 [pypi.org](https://pypi.org/project/numpy/2.4.1/)
- **Removed** `numpy.conftest.np`  

numpy.conftest.np was removed in numpy 2.4.1 [pypi.org](https://pypi.org/project/numpy/2.4.1/)
- **Removed** `numpy.conftest.pd_NA`  

numpy.conftest.pd_NA was removed in numpy 2.4.1 [pypi.org](https://pypi.org/project/numpy/2.4.1/)
- **Removed** `numpy.conftest.random_string_list`  

numpy.conftest.random_string_list was removed in numpy 2.4.1 [pypi.org](https://pypi.org/project/numpy/2.4.1/)
- **Removed** `numpy.lib.mixins.NDArrayOperatorsMixin.um`  

NDArrayOperatorsMixin.um was removed in numpy 2.4.1 [pypi.org](https://pypi.org/project/numpy/2.4.1/)
- **Removed** `numpy.lib.tests.test__datasource.TestDataSourceAbspath.setup_method`  

TestDataSourceAbspath.setup_method was removed in numpy 2.4.1 [pypi.org](https://pypi.org/project/numpy/2.4.1/)

And 553 more in this version.

## 2.4.0

32 breaking changes, first published January 10, 2026.

- **Removed**  

The NPY_ALIGNMENT_REQUIRED macro was removed from npy_cpu.h. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0)
- **Removed**  

XOP and FMA4 features were removed and Intel Xeon Phi support discontinued. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0)
- **Removed** `MachAr`  

The MachAr runtime discovery mechanism has been removed; finfo now uses C macro constants. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0)
- **Removed** `ndarray.ctypes._ctypes.get_as_parameter`  

get_as_parameter was removed; use \_ctypes.\_as_parameter\_. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0)
- **Removed** `ndarray.ctypes._ctypes.get_data`  

Four undocumented ctypes methods were removed; use the matching attributes instead. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0)
- **Removed** `ndarray.ctypes._ctypes.get_shape`  

get_shape was removed; use \_ctypes.shape. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0)
- **Removed** `ndarray.ctypes._ctypes.get_strides`  

get_strides was removed; use \_ctypes.strides. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0)
- **Removed** `numpy.fft.helper`  

Import from numpy.fft instead. [pypi.org](https://pypi.org/project/numpy/2.4.1/)
- **Removed** `numpy.in1d`  

Use numpy.isin instead. [pypi.org](https://pypi.org/project/numpy/2.4.1/)
- **Removed** `numpy.linalg.linalg`  

Import from numpy.linalg instead. [pypi.org](https://pypi.org/project/numpy/2.4.1/)

And 22 more in this version.

## 2.4.0rc1

27 breaking changes, first published January 10, 2026.

- **Removed** `_ctypes.get_as_parameter`  

Use the \_as_parameter\_ attribute instead. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0rc1)
- **Removed** `_ctypes.get_data`  

Use the data attribute instead. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0rc1)
- **Removed** `_ctypes.get_shape`  

Use the shape attribute instead. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0rc1)
- **Removed** `_ctypes.get_strides`  

Use the strides attribute instead. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0rc1)
- **Removed** `disp`  

Use your own printing function instead. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0rc1)
- **Removed** `MachAr`  

The MachAr mechanism behind finfo is gone; use numpy.finfo values instead. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0rc1)
- **Removed** `NPY_ALIGNMENT_REQUIRED`  

C extensions using this macro must stop referencing it. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0rc1)
- **Behavior changed**  

Scalar conversion of multi-dimensional arrays used to warn and now raises TypeError; extract a single element first. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0rc1)
- **Behavior changed**  

Deleting numpy from sys.modules and re-importing it raises ImportError because extension modules load only once per process. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0rc1)
- **Behavior changed**  

Calling a ufunc with a where mask and no out now warns; pass out=None to silence it. [github.com](https://github.com/numpy/numpy/releases/tag/v2.4.0rc1)

And 17 more in this version.

## 2.3.5

6 breaking changes, first published November 16, 2025.

- **Removed** `numpy.random.Generator.shuffle`  

Generator.shuffle was removed in numpy 2.3.5 [pypi.org](https://pypi.org/project/numpy/2.3.5/)
- **Signature changed** `numpy.lib.tests.test_function_base.vectorize.__init__`  

Was def \_\_init\_\_(self, pyfunc: Callable\[..., Any\] = np.\_NoValue, otypes: str | Iterable\[DTypeLike\] | None = None, doc: str | None = None, excluded: Iterable\[int | str\] | None = None, cache: builtins.bool = False, signature: str | None =... [pypi.org](https://pypi.org/project/numpy/2.3.5/)
- **Signature changed** `numpy.matlib.vectorize.__init__`  

Was def \_\_init\_\_(self, pyfunc: Callable\[..., Any\] = np.\_NoValue, otypes: str | Iterable\[DTypeLike\] | None = None, doc: str | None = None, excluded: Iterable\[int | str\] | None = None, cache: builtins.bool = False, signature: str | None =... [pypi.org](https://pypi.org/project/numpy/2.3.5/)
- **Signature changed** `numpy.strings.slice`  

Was def slice(a, start=None, stop=None, step=None, /); now def slice(a, start=None, stop=np.\_NoValue, step=None, /). [pypi.org](https://pypi.org/project/numpy/2.3.5/)
- **Signature changed** `numpy.trim_zeros`  

Was def trim_zeros(filt: \_TrimZerosSequence\[\_T\], trim: L\['f', 'b', 'fb', 'bf'\] = 'fb', axis=None) -> \_T; now def trim_zeros(filt: \_TrimZerosSequence\[\_T\], trim: L\['f', 'b', 'fb', 'bf'\] = 'fb', axis: \_ShapeLike | None = None) -> \_T. [pypi.org](https://pypi.org/project/numpy/2.3.5/)
- **Signature changed** `numpy.vectorize.__init__`  

Was def \_\_init\_\_(self, pyfunc: Callable\[..., Any\] = np.\_NoValue, otypes: str | Iterable\[DTypeLike\] | None = None, doc: str | None = None, excluded: Iterable\[int | str\] | None = None, cache: builtins.bool = False, signature: str | None =... [pypi.org](https://pypi.org/project/numpy/2.3.5/)

## 2.3.4

4 breaking changes, first published October 15, 2025.

- **Renamed**  

On win-arm64 the npymath and npyrandom static libraries now have a .lib file extension instead of .a. Projects that link against the old .a files must update their build to the new name and use a matching toolchain such as clang-cl. [github.com](https://github.com/numpy/numpy/releases/tag/v2.3.4)
- **Behavior changed** `numpy.setbufsize`  

np.setbufsize now raises ValueError when given a negative size, where it previously accepted the input. Code that passes negative values must be changed to pass a valid size. [github.com](https://github.com/numpy/numpy/releases/tag/v2.3.4)
- **Signature changed** `numpy.histogram`  

Was def histogram(a: ArrayLike, bins: \_BinKind | SupportsIndex | ArrayLike = 10, range: tuple\[float, float\] | None = None, density: bool = None, weights: ArrayLike | None = None) -> tuple\[NDArray\[Any\], NDArray\[Any\]\]; now def histogram(a... [pypi.org](https://pypi.org/project/numpy/2.3.4/)
- **Signature changed** `numpy.histogramdd`  

Was def histogramdd(sample: ArrayLike, bins: SupportsIndex | ArrayLike = 10, range: Sequence\[tuple\[float, float\]\] = None, density: bool | None = None, weights: ArrayLike | None = None) -> tuple\[NDArray\[Any\], tuple\[NDArray\[Any\], ...\]\]; now... [pypi.org](https://pypi.org/project/numpy/2.3.4/)

## 2.3.3

2 breaking changes, first published September 9, 2025.

- **Behavior changed** `numpy.linalg.cond`  

numpy.linalg.cond always returns a real dtype now, so code that relied on a complex result for complex input may need to change. [github.com](https://github.com/numpy/numpy/releases/tag/v2.3.3)
- **Signature changed** `numpy.linalg.tests.test_linalg.TestCond.test_basic_nonsvd`  

Was def test_basic_nonsvd(self); now def test_basic_nonsvd(self, is_complex). [pypi.org](https://pypi.org/project/numpy/2.3.3/)

## Check your code

These are the changes. To see which of them reach your code, [scan a public repository](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#api) reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

## Put your code on continuous management.

Scan a public repository now, or give your agent one line.

### See how out of date your code is.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
