github numpy/numpy v1.22.0rc3

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 152 contributers
spread over 602 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




b23c1c11503d1e1c29ac58c3febfbe1a  numpy-1.22.0rc3-cp310-cp310-macosx_10_9_universal2.whl
fdf997a0a53a1dcd33bb239132fa690f  numpy-1.22.0rc3-cp310-cp310-macosx_10_9_x86_64.whl
c7e7d35bb1bdf67b83e1cb0da8a761b6  numpy-1.22.0rc3-cp310-cp310-macosx_11_0_arm64.whl
148a33cfb225369800f3a9b3e3c9bb7d  numpy-1.22.0rc3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
021009e2e46a0d76d3dd876a23a48a2e  numpy-1.22.0rc3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
ff4080c69d1784e77d8dd0a8f81d85b8  numpy-1.22.0rc3-cp310-cp310-win_amd64.whl
11e8f56c37ce7e5584a4e63f866acbf9  numpy-1.22.0rc3-cp38-cp38-macosx_10_9_universal2.whl
cb378d8f6de2517f3eaa82893e8c6ad6  numpy-1.22.0rc3-cp38-cp38-macosx_10_9_x86_64.whl
e2e8c26bea00f2519cc5060d5480c746  numpy-1.22.0rc3-cp38-cp38-macosx_11_0_arm64.whl
7da9371b5f6f1a615610dc6625f4d783  numpy-1.22.0rc3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
e4757f030cd9ac121c5fff3ceb783975  numpy-1.22.0rc3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
08cd8858c64a7e2e4e4c19edc55f283e  numpy-1.22.0rc3-cp38-cp38-win32.whl
da71dfd7685f4056a892e5af7f01d516  numpy-1.22.0rc3-cp38-cp38-win_amd64.whl
029a566a13e7358465bd6b8b884b16f3  numpy-1.22.0rc3-cp39-cp39-macosx_10_9_universal2.whl
ce5c8ad1b490f2f834739b74502e9aed  numpy-1.22.0rc3-cp39-cp39-macosx_10_9_x86_64.whl
a7c6dae3cce7d3885b8600cd102adf74  numpy-1.22.0rc3-cp39-cp39-macosx_11_0_arm64.whl
e97a1ecbb39cfd7b80f78c73f4ecba51  numpy-1.22.0rc3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
ff32a6642b8c033b51da5421b626645c  numpy-1.22.0rc3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
4e8c44f9c72d9c72a5610cb142e9ee52  numpy-1.22.0rc3-cp39-cp39-win32.whl
5c264fca3e74568f0a54169fc55d506f  numpy-1.22.0rc3-cp39-cp39-win_amd64.whl
1aef1271d98ac4f7b9005a2baacc837e  numpy-1.22.0rc3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
19ed28cde2192447ac3ba2971a7d2660  numpy-1.22.0rc3.tar.gz


4315a66e64fe1adc7f7fa51116c87cdf5a78f2f8265c6d0ee27bfcbe845b3ddf  numpy-1.22.0rc3-cp310-cp310-macosx_10_9_universal2.whl
af16e2163c1edfaa82ec43a220acc31ad0ff51619efcb41d79440dfc130e9562  numpy-1.22.0rc3-cp310-cp310-macosx_10_9_x86_64.whl
ced56665c49691ad8a31d553e42248566678f188e7c1813cadc947bfb91f3abd  numpy-1.22.0rc3-cp310-cp310-macosx_11_0_arm64.whl
f13703ad4849ef62d3dadc1af1e00ce2762458b4466d4f3e339d84e6b450af33  numpy-1.22.0rc3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
6ebe0f0f40aa86c5cbe41e017e2028ba318e0743d93674a19f06a2401e602bd7  numpy-1.22.0rc3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
11fb5ee7b8a2a01bccdfb715889cb1a8490bfceeba1ab1ca9d01c92329ca5a4b  numpy-1.22.0rc3-cp310-cp310-win_amd64.whl
301df2531616ff7dac8224c104b38d301adabb96c12650dae06d2036da53c385  numpy-1.22.0rc3-cp38-cp38-macosx_10_9_universal2.whl
3d0b6fb9796ba83500990dc18d8dbeaca49559c7f7f47da723fee902a99ee4bb  numpy-1.22.0rc3-cp38-cp38-macosx_10_9_x86_64.whl
5b46584808f06d90df177520136cfeb5f2151b0e6a762e94c05a36f82140ff7b  numpy-1.22.0rc3-cp38-cp38-macosx_11_0_arm64.whl
20016b0ed895bb80f37caadd224b01b6cc52520766ba67d8f5536ac16ef08002  numpy-1.22.0rc3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
2313aa9b9684b36b0bf07e44432d025e0803518286a1ecae5f0ea947b46008df  numpy-1.22.0rc3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
af718720cb23c795a1470fde1a860c7fbbcd1387e1f3755cf734417f96124766  numpy-1.22.0rc3-cp38-cp38-win32.whl
26271b883db7ff9e375df36ad92fc9921fc336480d0aabe4483503640c9b5dd3  numpy-1.22.0rc3-cp38-cp38-win_amd64.whl
e55a7a201e1972e2686ffee1dba1ddf5e041989018a707540ba10be8367331b1  numpy-1.22.0rc3-cp39-cp39-macosx_10_9_universal2.whl
b445551ff10fe31adb76df0e6d0210e02c586686297faddcf453dd51ce2b2ea0  numpy-1.22.0rc3-cp39-cp39-macosx_10_9_x86_64.whl
a0964771a7660fd3d2420d6be0a08144f49f14d684bbe85f67467ad81bd73180  numpy-1.22.0rc3-cp39-cp39-macosx_11_0_arm64.whl
6eaa053519d1ed5922621ecb04d33d64769508060860eb0b8a07502d55554a2c  numpy-1.22.0rc3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
222ce51bf9d4c77f2222049d75ea908f1862302cab7d5ccdb88773b9514e10af  numpy-1.22.0rc3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
07805b77c2b4582bc6888795c0463bf3d4bd758dee922fcd685413eb3274295f  numpy-1.22.0rc3-cp39-cp39-win32.whl
b63c2976f10a94af28c2860a74d7cf07ed9489ebfd36fbadb9816d3bf6ba8efb  numpy-1.22.0rc3-cp39-cp39-win_amd64.whl
c3a8d12b5bf04ce3495ad2b4d706a3058415185c16d3e8d094264a9de62d52e2  numpy-1.22.0rc3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
2a61da0dc062655097cefa5ae47712317b677f22bf3f20cf397c52fae57dea8a  numpy-1.22.0rc3.tar.gz

Don't miss a new numpy release

NewReleases is sending notifications on new releases.