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

On this page
2.4.1
- Removed
numpy.conftest.coerce
numpy.conftest.coerce was removed in numpy 2.4.1 pypi.org - Removed
numpy.conftest.dtype
numpy.conftest.dtype was removed in numpy 2.4.1 pypi.org - Removed
numpy.conftest.env_setup
numpy.conftest.env_setup was removed in numpy 2.4.1 pypi.org - Removed
numpy.conftest.get_stringdtype_dtype
numpy.conftest.get_stringdtype_dtype was removed in numpy 2.4.1 pypi.org - Removed
numpy.conftest.na_object
numpy.conftest.na_object was removed in numpy 2.4.1 pypi.org - Removed
numpy.conftest.np
numpy.conftest.np was removed in numpy 2.4.1 pypi.org - Removed
numpy.conftest.pd_NA
numpy.conftest.pd_NA was removed in numpy 2.4.1 pypi.org - Removed
numpy.conftest.random_string_list
numpy.conftest.random_string_list was removed in numpy 2.4.1 pypi.org - Removed
numpy.lib.mixins.NDArrayOperatorsMixin.um
NDArrayOperatorsMixin.um was removed in numpy 2.4.1 pypi.org - Removed
numpy.lib.tests.test__datasource.TestDataSourceAbspath.setup_method
TestDataSourceAbspath.setup_method was removed in numpy 2.4.1 pypi.org
And 553 more in this version.
2.4.0
- Removed
The NPY_ALIGNMENT_REQUIRED macro was removed from npy_cpu.h. github.com - Removed
XOP and FMA4 features were removed and Intel Xeon Phi support discontinued. github.com - Removed
MachAr
The MachAr runtime discovery mechanism has been removed; finfo now uses C macro constants. github.com - Removed
ndarray.ctypes._ctypes.get_as_parameter
get_as_parameter was removed; use _ctypes._as_parameter_. github.com - Removed
ndarray.ctypes._ctypes.get_data
Four undocumented ctypes methods were removed; use the matching attributes instead. github.com - Removed
ndarray.ctypes._ctypes.get_shape
get_shape was removed; use _ctypes.shape. github.com - Removed
ndarray.ctypes._ctypes.get_strides
get_strides was removed; use _ctypes.strides. github.com - Removed
numpy.fft.helper
Import from numpy.fft instead. pypi.org - Removed
numpy.in1d
Use numpy.isin instead. pypi.org - Removed
numpy.linalg.linalg
Import from numpy.linalg instead. pypi.org
And 22 more in this version.
2.4.0rc1
- Removed
_ctypes.get_as_parameter
Use the _as_parameter_ attribute instead. github.com - Removed
_ctypes.get_data
Use the data attribute instead. github.com - Removed
_ctypes.get_shape
Use the shape attribute instead. github.com - Removed
_ctypes.get_strides
Use the strides attribute instead. github.com - Removed
disp
Use your own printing function instead. github.com - Removed
MachAr
The MachAr mechanism behind finfo is gone; use numpy.finfo values instead. github.com - Removed
NPY_ALIGNMENT_REQUIRED
C extensions using this macro must stop referencing it. github.com - Behavior changed
Scalar conversion of multi-dimensional arrays used to warn and now raises TypeError; extract a single element first. github.com - Behavior changed
Deleting numpy from sys.modules and re-importing it raises ImportError because extension modules load only once per process. github.com - Behavior changed
Calling a ufunc with a where mask and no out now warns; pass out=None to silence it. github.com
And 17 more in this version.
2.3.5
- Removed
numpy.random.Generator.shuffle
Generator.shuffle was removed in numpy 2.3.5 pypi.org - 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 - 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 - 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 - 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 - 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
2.3.4
- 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 - 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 - 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 - 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
2.3.3
- 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 - 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
Check your code
These are the changes. To see which of them reach your code, scan a public repository, or have your coding agent call check_code with your manifest or lockfile over MCP. The 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.
Tell your agent what changed since it was trained.
claude mcp add --transport http since https://api.since.dev/mcp