github numpy/numpy v1.22.0rc2

latest releases: v1.24.0.dev0, v1.22.4, v1.21.6...
pre-release5 months ago

NumPy 1.22.0 Release Notes

NumPy 1.22.0 is a big release featuring the work of 151 contributers
spread over 589 pull requests. There have been many improvements,
highlights are:

  • Annotations of the main namespace are essentially complete. Upstream
    is a moving target, so there will likely be further improvements,
    but the major work is done. This is probably the most user visible
    enhancement in this release.
  • A preliminary version of the proposed Array-API is provided. This is
    a step in creating a standard collection of functions that can be
    used across application such as CuPy and JAX.
  • NumPy now has a DLPack backend. DLPack provides a common interchange
    format for array (tensor) data.
  • New methods for quantile, percentile, and related functions. The
    new methods provide a complete set of the methods commonly found in
    the literature.
  • A new configurable allocator for use by downstream projects.

These are in addition to the ongoing work to provide SIMD support for
commonly used functions, improvements to F2PY, and better documentation.

The Python versions supported in this release are 3.8-3.10, Python 3.7
has been dropped. Note that 32 bit wheels are only provided for Python
3.8 and 3.9 on Windows, all other wheels are 64 bits on account of
Ubuntu, Fedora, and other Linux distributions dropping 32 bit support.
All 64 bit wheels are also linked with 64 bit integer OpenBLAS, which should fix
the occasional problems encountered by folks using truly huge arrays.

Expired deprecations

Deprecated numeric style dtype strings have been removed

Using the strings "Bytes0", "Datetime64", "Str0", "Uint32",
and "Uint64" as a dtype will now raise a TypeError.


Expired deprecations for loads, ndfromtxt, and mafromtxt in npyio

numpy.loads was deprecated in v1.15, with the recommendation that
users use pickle.loads instead. ndfromtxt and mafromtxt were both
deprecated in v1.17 - users should use numpy.genfromtxt instead with
the appropriate value for the usemask parameter.



Use delimiter rather than delimitor as kwarg in mrecords

The misspelled keyword argument delimitor of has been changed to delimiter,
using it will emit a deprecation warning.


Passing boolean kth values to (arg-)partition has been deprecated

numpy.partition and numpy.argpartition would previously accept
boolean values for the kth parameter, which would subsequently be
converted into integers. This behavior has now been deprecated.


The np.MachAr class has been deprecated

The numpy.MachAr class and finfo.machar <numpy.finfo> attribute have
been deprecated. Users are encouraged to access the property if interest
directly from the corresponding numpy.finfo attribute.


Compatibility notes

Distutils forces strict floating point model on clang

NumPy now sets the -ftrapping-math option on clang to enforce correct
floating point error handling for universal functions. Clang defaults to
non-IEEE and C99 conform behaviour otherwise. This change (using the
equivalent but newer -ffp-exception-behavior=strict) was attempted in
NumPy 1.21, but was effectively never used.


Removed floor division support for complex types

Floor division of complex types will now result in a TypeError

>>> a = np.arange(10) + 1j* np.arange(10)
>>> a // 1
TypeError: ufunc 'floor_divide' not supported for the input types...


numpy.vectorize functions now produce the same output class as the base function

When a function that respects numpy.ndarray subclasses is vectorized
using numpy.vectorize, the vectorized function will now be
subclass-safe also for cases that a signature is given (i.e., when
creating a gufunc): the output class will be the same as that returned
by the first call to the underlying function.


Python 3.7 is no longer supported

Python support has been dropped. This is rather strict, there are
changes that require Python >= 3.8.


str/repr of complex dtypes now include space after punctuation

The repr of
np.dtype({"names": ["a"], "formats": [int], "offsets": [2]}) is now
dtype({'names': ['a'], 'formats': ['<i8'], 'offsets': [2], 'itemsize': 10}),
whereas spaces where previously omitted after colons and between fields.

The old behavior can be restored via


Corrected advance in PCG64DSXM and PCG64

Fixed a bug in the advance method of PCG64DSXM and PCG64. The bug
only affects results when the step was larger than $2^{64}$ on platforms
that do not support 128-bit integers(e.g., Windows and 32-bit Linux).


Change in generation of random 32 bit floating point variates

There was bug in the generation of 32 bit floating point values from the
uniform distribution that would result in the least significant bit of
the random variate always being 0. This has been fixed.

This change affects the variates produced by the random.Generator
methods random, standard_normal, standard_exponential, and
standard_gamma, but only when the dtype is specified as


C API changes

Masked inner-loops cannot be customized anymore

The masked inner-loop selector is now never used. A warning will be
given in the unlikely event that it was customized.

We do not expect that any code uses this. If you do use it, you must
unset the selector on newer NumPy version. Please also contact the NumPy
developers, we do anticipate providing a new, more specific, mechanism.

The customization was part of a never-implemented feature to allow for
faster masked operations.


New Features

NEP 49 configurable allocators

As detailed in NEP 49, the
function used for allocation of the data segment of a ndarray can be
changed. The policy can be set globally or in a context. For more
information see the NEP and the data_memory{.interpreted-text
role="ref"} reference docs. Also add a NUMPY_WARN_IF_NO_MEM_POLICY
override to warn on dangerous use of transfering ownership by setting


Implementation of the NEP 47 (adopting the array API standard)

An initial implementation of NEP47, adoption
of the array API standard, has been added as numpy.array_api. The
implementation is experimental and will issue a UserWarning on import,
as the array API standard is still in
draft state. numpy.array_api is a conforming implementation of the
array API standard, which is also minimal, meaning that only those
functions and behaviors that are required by the standard are
implemented (see the NEP for more info). Libraries wishing to make use
of the array API standard are encouraged to use numpy.array_api to
check that they are only using functionality that is guaranteed to be
present in standard conforming implementations.


Generate C/C++ API reference documentation from comments blocks is now possible

This feature depends on Doxygen in
the generation process and on
Breathe to integrate it
with Sphinx.


Assign the platform-specific c_intp precision via a mypy plugin

The mypy plugin, introduced in
numpy/numpy#17843, has
again been expanded: the plugin now is now responsible for setting the
platform-specific precision of numpy.ctypeslib.c_intp, the latter
being used as data type for various numpy.ndarray.ctypes attributes.

Without the plugin, aforementioned type will default to

To enable the plugin, one must add it to their mypy configuration

plugins = numpy.typing.mypy_plugin


Add NEP 47-compatible dlpack support

Add a ndarray.__dlpack__() method which returns a dlpack C structure
wrapped in a PyCapsule. Also add a np._from_dlpack(obj) function,
where obj supports __dlpack__(), and returns an ndarray.


keepdims optional argument added to numpy.argmin, numpy.argmax

keepdims argument is added to numpy.argmin, numpy.argmax. If set
to True, the axes which are reduced are left in the result as
dimensions with size one. The resulting array has the same number of
dimensions and will broadcast with the input array.


bit_count to compute the number of 1-bits in an integer

Computes the number of 1-bits in the absolute value of the input. This
works on all the numpy integer types. Analogous to the builtin
int.bit_count or popcount in C++.

>>> np.uint32(1023).bit_count()
>>> np.int32(-127).bit_count()


The ndim and axis attributes have been added to numpy.AxisError

The ndim and axis parameters are now also stored as attributes
within each numpy.AxisError instance.


Preliminary support for windows/arm64 target

numpy added support for windows/arm64 target. Please note OpenBLAS
support is not yet available for windows/arm64 target.


Added support for LoongArch

LoongArch is a new instruction set, numpy compilation failure on
LoongArch architecture, so add the commit.


A .clang-format file has been added

Clang-format is a C/C++ code formatter, together with the added
.clang-format file, it produces code close enough to the NumPy
C_STYLE_GUIDE for general use. Clang-format version 12+ is required
due to the use of several new features, it is available in Fedora 34 and
Ubuntu Focal among other distributions.


is_integer is now available to numpy.floating and numpy.integer

Based on its counterpart in Python float and int, the numpy floating
point and integer types now support float.is_integer. Returns True
if the number is finite with integral value, and False otherwise.

>>> np.float32(-2.0).is_integer()
>>> np.float64(3.2).is_integer()
>>> np.int32(-2).is_integer()


Symbolic parser for Fortran dimension specifications

A new symbolic parser has been added to f2py in order to correctly parse
dimension specifications. The parser is the basis for future
improvements and provides compatibility with Draft Fortran 202x.


ndarray, dtype and number are now runtime-subscriptable

Mimicking PEP-585, the numpy.ndarray,
numpy.dtype and numpy.number classes are now subscriptable for
python 3.9 and later. Consequently, expressions that were previously
only allowed in .pyi stub files or with the help of
from __future__ import annotations are now also legal during runtime.

>>> import numpy as np
>>> from typing import Any

>>> np.ndarray[Any, np.dtype[np.float64]]
numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]



ctypeslib.load_library can now take any path-like object

All parameters in the can now take any
python:path-like object{.interpreted-text role="term"}. This includes
the likes of strings, bytes and objects implementing the
__fspath__<os.PathLike.__fspath__>{.interpreted-text role="meth"}


Add smallest_normal and smallest_subnormal attributes to finfo

The attributes smallest_normal and smallest_subnormal are available
as an extension of finfo class for any floating-point data type. To
use these new attributes, write np.finfo(np.float64).smallest_normal
or np.finfo(np.float64).smallest_subnormal.


numpy.linalg.qr accepts stacked matrices as inputs

numpy.linalg.qr is able to produce results for stacked matrices as
inputs. Moreover, the implementation of QR decomposition has been
shifted to C from Python.


numpy.fromregex now accepts os.PathLike implementations

numpy.fromregex now accepts objects implementing the
__fspath__<os.PathLike> protocol, e.g. pathlib.Path.


Add new methods for quantile and percentile

quantile and percentile now have have a method= keyword argument
supporting 13 different methods. This replaces the interpolation=
keyword argument.

The methods are now aligned with nine methods which can be found in
scientific literature and the R language. The remaining methods are the
previous discontinuous variations of the default "linear" one.

Please see the documentation of numpy.percentile for more information.


Missing parameters have been added to the nan<x> functions

A number of the nan<x> functions previously lacked parameters that
were present in their <x>-based counterpart, e.g. the where
parameter was present in numpy.mean but absent from numpy.nanmean.

The following parameters have now been added to the nan<x> functions:

  • nanmin: initial & where
  • nanmax: initial & where
  • nanargmin: keepdims & out
  • nanargmax: keepdims & out
  • nansum: initial & where
  • nanprod: initial & where
  • nanmean: where
  • nanvar: where
  • nanstd: where


Annotating the main Numpy namespace

Starting from the 1.20 release, PEP 484 type annotations have been
included for parts of the NumPy library; annotating the remaining
functions being a work in progress. With the release of 1.22 this
process has been completed for the main NumPy namespace, which is now
fully annotated.

Besides the main namespace, a limited number of sub-packages contain
annotations as well. This includes, among others, numpy.testing,
numpy.linalg and numpy.random (available since 1.21).


Vectorize umath module using AVX-512

By leveraging Intel Short Vector Math Library (SVML), 18 umath functions
(exp2, log2, log10, expm1, log1p, cbrt, sin, cos, tan,
arcsin, arccos, arctan, sinh, cosh, tanh, arcsinh,
arccosh, arctanh) are vectorized using AVX-512 instruction set for
both single and double precision implementations. This change is
currently enabled only for Linux users and on processors with AVX-512
instruction set. It provides an average speed up of 32x and 14x for
single and double precision functions respectively.


OpenBLAS v0.3.17

Update the OpenBLAS used in testing and in wheels to v0.3.17




824c4112f63bb1059703524f2ea39a7c  numpy-1.22.0rc2-cp310-cp310-macosx_10_9_universal2.whl
f97f47414e7fdc8bad39fa87d9248e47  numpy-1.22.0rc2-cp310-cp310-macosx_10_9_x86_64.whl
7c184eb9216073b516733cfe5b5d65aa  numpy-1.22.0rc2-cp310-cp310-macosx_11_0_arm64.whl
43dd129a673e3346fa37d1b466da3252  numpy-1.22.0rc2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
236e5f9cb23a328a8c6ee8735c49f057  numpy-1.22.0rc2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
40e7f1b4a8912d757f02fc07cea3d920  numpy-1.22.0rc2-cp310-cp310-win_amd64.whl
9c3a547153ba9b2425fad1bca20e7893  numpy-1.22.0rc2-cp38-cp38-macosx_10_9_universal2.whl
71254fdd07cd21554ff259f773387b36  numpy-1.22.0rc2-cp38-cp38-macosx_10_9_x86_64.whl
5f19bc28ccbadaf467a98b4be99eec26  numpy-1.22.0rc2-cp38-cp38-macosx_11_0_arm64.whl
35e8024c21aec5b166666a25cc58d1c4  numpy-1.22.0rc2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
549ef12115032ea5acc505e426e1c1ee  numpy-1.22.0rc2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
b1cad86de88044c80edb5768a5d1a636  numpy-1.22.0rc2-cp38-cp38-win32.whl
dfddc47854c314fd0a08586f2a766e01  numpy-1.22.0rc2-cp38-cp38-win_amd64.whl
eec2378e50ea4c16d6d398adc576c260  numpy-1.22.0rc2-cp39-cp39-macosx_10_9_universal2.whl
ed6e62d63e1f5a28f8fb58407ec960f8  numpy-1.22.0rc2-cp39-cp39-macosx_10_9_x86_64.whl
5947f1b695955d871583d863f7f65d81  numpy-1.22.0rc2-cp39-cp39-macosx_11_0_arm64.whl
1f07317b9b7a97f4995d1df3eddd4eef  numpy-1.22.0rc2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
8c3b5fed43af5ea6d758812ff41aefd7  numpy-1.22.0rc2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
ab851c749351b74de5049e06aff8c92f  numpy-1.22.0rc2-cp39-cp39-win32.whl
351086196ee8548bc130e1597a0ed9e1  numpy-1.22.0rc2-cp39-cp39-win_amd64.whl
920888e42e2d43393b48d67da1e98d2d  numpy-1.22.0rc2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
f67b97d052658b42c6bcdcb05c212dd0  numpy-1.22.0rc2.tar.gz


7bfcf46e1acc8750f623b4b1329e14be65ffadb543f4521f8e1b430d0520c81b  numpy-1.22.0rc2-cp310-cp310-macosx_10_9_universal2.whl
81cb12f4ad3b45f7b4b49abec16ab880dea88965e3097730eb985be0e34a4d2d  numpy-1.22.0rc2-cp310-cp310-macosx_10_9_x86_64.whl
1d5e23b15da36ddf5e2101e39b6dcd7303fddfe2454eae10d008220a358e0e83  numpy-1.22.0rc2-cp310-cp310-macosx_11_0_arm64.whl
7e1bc4a0bf6663147d740a5a54693774c337474f98185ba7a64d330239377d39  numpy-1.22.0rc2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
d54a2a0628f8bc0e4d35865c4e98a8832529cbf0988beaa793bc001a0a7d8ee4  numpy-1.22.0rc2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
a080d72182500b252f3d11821edd7bc4909e867da60a1067aad54e1e7cc66cd9  numpy-1.22.0rc2-cp310-cp310-win_amd64.whl
0fe7e7c972bb6ae27e9f587e1504db3c0dac4dd07be86d54aab8f5539b3e5c12  numpy-1.22.0rc2-cp38-cp38-macosx_10_9_universal2.whl
449b9a32f51829b8701f0632cb0ec994fc6a2583ee9360f49dd63ed83ae00ccd  numpy-1.22.0rc2-cp38-cp38-macosx_10_9_x86_64.whl
e5ba4a2828a70eb929305322e7ccab4a394dd09aebadc820fb3bab8a78a798a5  numpy-1.22.0rc2-cp38-cp38-macosx_11_0_arm64.whl
50f171a7193796a88da1097a70bb8c972f700d0f94a981a7a96043d1d2334c28  numpy-1.22.0rc2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
56ae14a0f3b254ede5743c86641277072b0e0ac4a1b6e7903fe574856c120339  numpy-1.22.0rc2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
a77afd61d5941d0439c245f29e6dd49781d1debee0441b46ac286e12a681d4db  numpy-1.22.0rc2-cp38-cp38-win32.whl
49785892d8573135bb1cd7684b0b42803aab0a10b0e68f5f675c8030b3aa9f9c  numpy-1.22.0rc2-cp38-cp38-win_amd64.whl
1e4220474a0a2614deb817b98ce569cf58c53cf66a168ba55eeeb9f8e3878375  numpy-1.22.0rc2-cp39-cp39-macosx_10_9_universal2.whl
5296fb0303c8d5653f83081fe8f11d6e88ecebe77aca149e9bfe3ec68297929a  numpy-1.22.0rc2-cp39-cp39-macosx_10_9_x86_64.whl
4f067fe9e9acf18e6ee450854ced9d3204d8e817bcd4dcbc4db6cdc9f2ba838b  numpy-1.22.0rc2-cp39-cp39-macosx_11_0_arm64.whl
68be281c331c9811a3fbae5990c4f8b14f7e26206869bf441314a414cb96aaa6  numpy-1.22.0rc2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
2ce70ec6ee651364e63907aca89cf55556de4e6ca9e01af3a7a6228b9b436878  numpy-1.22.0rc2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
467c2290325fa5ca82d443815a98ef10a93b31d7771a1b4e08396d1e1128c74f  numpy-1.22.0rc2-cp39-cp39-win32.whl
b46ab9c390828933485289cc7ff5d41d612d1a9b4633ff06814fc7efc9966518  numpy-1.22.0rc2-cp39-cp39-win_amd64.whl
e0c7009fde55f27cbec3b21c487fc7cfffcb23c2058b27b153c07a856e144e06  numpy-1.22.0rc2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
f1f7c11a270959f08ca4cef566b8db5795357801f2023e512763554a563fd736  numpy-1.22.0rc2.tar.gz

Don't miss a new numpy release

NewReleases is sending notifications on new releases.