numpy/numpy (numpy)
### [`v1.21.0`](https://redirect.github.com/numpy/numpy/releases/tag/v1.21.0)
[Compare Source](https://redirect.github.com/numpy/numpy/compare/v1.20.3...v1.21.0)
# NumPy 1.21.0 Release Notes
The NumPy 1.21.0 release highlights are
- continued SIMD work covering more functions and platforms,
- initial work on the new dtype infrastructure and casting,
- universal2 wheels for Python 3.8 and Python 3.9 on Mac,
- improved documentation,
- improved annotations,
- new `PCG64DXSM` bitgenerator for random numbers.
In addition there are the usual large number of bug fixes and other
improvements.
The Python versions supported for this release are 3.7-3.9. Official
support for Python 3.10 will be added when it is released.
:warning: Warning: there are unresolved problems compiling NumPy 1.21.0 with gcc-11.1 .
- Optimization level `-O3` results in many wrong warnings when running the tests.
- On some hardware NumPy will hang in an infinite loop.
## New functions
##### Add PCG64DXSM BitGenerator
Uses of the PCG64 BitGenerator in a massively-parallel context have
been shown to have statistical weaknesses that were not apparent at the
first release in numpy 1.17. Most users will never observe this weakness
and are safe to continue to use PCG64. We have introduced a new
PCG64DXSM BitGenerator that will eventually become the new default
BitGenerator implementation used by `default_rng` in future releases.
PCG64DXSM solves the statistical weakness while preserving the
performance and the features of PCG64.
See `upgrading-pcg64` for more details.
([gh-18906](https://redirect.github.com/numpy/numpy/pull/18906))
## Expired deprecations
- The `shape` argument `numpy.unravel_index` cannot be
passed as `dims` keyword argument anymore. (Was deprecated in NumPy
1.16.)
([gh-17900](https://redirect.github.com/numpy/numpy/pull/17900))
- The function `PyUFunc_GenericFunction` has been disabled. It was
deprecated in NumPy 1.19. Users should call the ufunc directly using
the Python API.
([gh-18697](https://redirect.github.com/numpy/numpy/pull/18697))
- The function `PyUFunc_SetUsesArraysAsData` has been disabled. It was
deprecated in NumPy 1.19.
([gh-18697](https://redirect.github.com/numpy/numpy/pull/18697))
- The class `PolyBase` has been removed (deprecated in numpy 1.9.0).
Please use the abstract `ABCPolyBase` class instead.
([gh-18963](https://redirect.github.com/numpy/numpy/pull/18963))
- The unused `PolyError` and `PolyDomainError` exceptions are removed.
([gh-18963](https://redirect.github.com/numpy/numpy/pull/18963))
## Deprecations
##### The `.dtype` attribute must return a `dtype`
A `DeprecationWarning` is now given if the `.dtype` attribute of an
object passed into `np.dtype` or as a `dtype=obj` argument is not a
dtype. NumPy will stop attempting to recursively coerce the result of
`.dtype`.
([gh-13578](https://redirect.github.com/numpy/numpy/pull/13578))
##### Inexact matches for `numpy.convolve` and `numpy.correlate` are deprecated
`numpy.convolve` and `numpy.correlate` now
emit a warning when there are case insensitive and/or inexact matches
found for `mode` argument in the functions. Pass full `"same"`,
`"valid"`, `"full"` strings instead of `"s"`, `"v"`, `"f"` for the
`mode` argument.
([gh-17492](https://redirect.github.com/numpy/numpy/pull/17492))
##### `np.typeDict` has been formally deprecated
`np.typeDict` is a deprecated alias for `np.sctypeDict` and has been so
for over 14 years
([6689502](https://redirect.github.com/numpy/numpy/commit/668950285c407593a368336ff2e737c5da84af7d)).
A deprecation warning will now be issued whenever getting `np.typeDict`.
([gh-17586](https://redirect.github.com/numpy/numpy/pull/17586))
##### Exceptions will be raised during array-like creation
When an object raised an exception during access of the special
attributes `__array__` or `__array_interface__`, this exception was
usually ignored. A warning is now given when the exception is anything
but AttributeError. To silence the warning, the type raising the
exception has to be adapted to raise an `AttributeError`.
([gh-19001](https://redirect.github.com/numpy/numpy/pull/19001))
##### Four `ndarray.ctypes` methods have been deprecated
Four methods of the `ndarray.ctypes` object have been
deprecated, as they are (undocumentated) implementation artifacts of
their respective properties.
The methods in question are:
- `_ctypes.get_data` (use `_ctypes.data` instead)
- `_ctypes.get_shape` (use `_ctypes.shape` instead)
- `_ctypes.get_strides` (use `_ctypes.strides` instead)
- `_ctypes.get_as_parameter` (use `_ctypes._as_parameter_` instead)
([gh-19031](https://redirect.github.com/numpy/numpy/pull/19031))
## Expired deprecations
- The `shape` argument `numpy.unravel_index`] cannot be
passed as `dims` keyword argument anymore. (Was deprecated in NumPy
1.16.)
([gh-17900](https://redirect.github.com/numpy/numpy/pull/17900))
- The function `PyUFunc_GenericFunction` has been disabled. It was
deprecated in NumPy 1.19. Users should call the ufunc directly using
the Python API.
([gh-18697](https://redirect.github.com/numpy/numpy/pull/18697))
- The function `PyUFunc_SetUsesArraysAsData` has been disabled. It was
deprecated in NumPy 1.19.
([gh-18697](https://redirect.github.com/numpy/numpy/pull/18697))
##### Remove deprecated `PolyBase` and unused `PolyError` and `PolyDomainError`
The class `PolyBase` has been removed (deprecated in numpy 1.9.0).
Please use the abstract `ABCPolyBase` class instead.
Furthermore, the unused `PolyError` and `PolyDomainError` exceptions are
removed from the `numpy.polynomial`.
([gh-18963](https://redirect.github.com/numpy/numpy/pull/18963))
## Compatibility notes
##### Error type changes in universal functions
The universal functions may now raise different errors on invalid input
in some cases. The main changes should be that a `RuntimeError` was
replaced with a more fitting `TypeError`. When multiple errors were
present in the same call, NumPy may now raise a different one.
([gh-15271](https://redirect.github.com/numpy/numpy/pull/15271))
##### `__array_ufunc__` argument validation
NumPy will now partially validate arguments before calling
`__array_ufunc__`. Previously, it was possible to pass on invalid
arguments (such as a non-existing keyword argument) when dispatch was
known to occur.
([gh-15271](https://redirect.github.com/numpy/numpy/pull/15271))
##### `__array_ufunc__` and additional positional arguments
Previously, all positionally passed arguments were checked for
`__array_ufunc__` support. In the case of `reduce`, `accumulate`, and
`reduceat` all arguments may be passed by position. This means that when
they were passed by position, they could previously have been asked to
handle the ufunc call via `__array_ufunc__`. Since this depended on the
way the arguments were passed (by position or by keyword), NumPy will
now only dispatch on the input and output array. For example, NumPy will
never dispatch on the `where` array in a reduction such as
`np.add.reduce`.
([gh-15271](https://redirect.github.com/numpy/numpy/pull/15271))
##### Validate input values in `Generator.uniform`
Checked that `high - low >= 0` in `np.random.Generator.uniform`. Raises
`ValueError` if `low > high`. Previously out-of-order inputs were
accepted and silently swapped, so that if `low > high`, the value
generated was `high + (low - high) * random()`.
([gh-17921](https://redirect.github.com/numpy/numpy/pull/17921))
##### `/usr/include` removed from default include paths
The default include paths when building a package with `numpy.distutils`
no longer include `/usr/include`. This path is normally added by the
compiler, and hardcoding it can be problematic. In case this causes a
problem, please open an issue. A workaround is documented in PR 18658.
([gh-18658](https://redirect.github.com/numpy/numpy/pull/18658))
##### Changes to comparisons with `dtype=...`
When the `dtype=` (or `signature`) arguments to comparison ufuncs
(`equal`, `less`, etc.) is used, this will denote the desired output
dtype in the future. This means that:
> np.equal(2, 3, dtype=object)
will give a `FutureWarning` that it will return an `object` array in the
future, which currently happens for:
> np.equal(None, None, dtype=object)
due to the fact that `np.array(None)` is already an object array. (This
also happens for some other dtypes.)
Since comparisons normally only return boolean arrays, providing any
other dtype will always raise an error in the future and give a
`DeprecationWarning` now.
([gh-18718](https://redirect.github.com/numpy/numpy/pull/18718))
##### Changes to `dtype` and `signature` arguments in ufuncs
The universal function arguments `dtype` and `signature` which are also
valid for reduction such as `np.add.reduce` (which is the implementation
for `np.sum`) will now issue a warning when the `dtype` provided is not
a "basic" dtype.
NumPy almost always ignored metadata, byteorder or time units on these
inputs. NumPy will now always ignore it and raise an error if byteorder
or time unit changed. The following are the most important examples of
changes which will give the error. In some cases previously the
information stored was not ignored, in all of these an error is now
raised:
### Previously ignored the byte-order (affect if non-native)
np.add(3, 5, dtype=">i32")
### The biggest impact is for timedelta or datetimes:
arr = np.arange(10, dtype="m8[s]")
### The examples always ignored the time unit "ns":
np.add(arr, arr, dtype="m8[ns]")
np.maximum.reduce(arr, dtype="m8[ns]")
### The following previously did use "ns" (as opposed to `arr.dtype`)
np.add(3, 5, dtype="m8[ns]") # Now return generic time units
np.maximum(arr, arr, dtype="m8[ns]") # Now returns "s" (from `arr`)
The same applies for functions like `np.sum` which use these internally.
This change is necessary to achieve consistent handling within NumPy.
If you run into these, in most cases pass for example
`dtype=np.timedelta64` which clearly denotes a general `timedelta64`
without any unit or byte-order defined. If you need to specify the
output dtype precisely, you may do so by either casting the inputs or
providing an output array using `out=`.
NumPy may choose to allow providing an exact output `dtype` here in the
future, which would be preceded by a `FutureWarning`.
([gh-18718](https://redirect.github.com/numpy/numpy/pull/18718))
##### Ufunc `signature=...` and `dtype=` generalization and `casting`
The behaviour for `np.ufunc(1.0, 1.0, signature=...)` or
`np.ufunc(1.0, 1.0, dtype=...)` can now yield different loops in 1.21
compared to 1.20 because of changes in promotion. When `signature` was
previously used, the casting check on inputs was relaxed, which could
lead to downcasting inputs unsafely especially if combined with
`casting="unsafe"`.
Casting is now guaranteed to be safe. If a signature is only partially
provided, for example using `signature=("float64", None, None)`, this
could lead to no loop being found (an error). In that case, it is
necessary to provide the complete signature to enforce casting the
inputs. If `dtype="float64"` is used or only outputs are set (e.g.
`signature=(None, None, "float64")` the is unchanged. We expect that
very few users are affected by this change.
Further, the meaning of `dtype="float64"` has been slightly modified and
now strictly enforces only the correct output (and not input) DTypes.
This means it is now always equivalent to:
signature=(None, None, "float64")
(If the ufunc has two inputs and one output). Since this could lead to
no loop being found in some cases, NumPy will normally also search for
the loop:
signature=("float64", "float64", "float64")
if the first search failed. In the future, this behaviour may be
customized to achieve the expected results for more complex ufuncs. (For
some universal functions such as `np.ldexp` inputs can have different
DTypes.)
([gh-18880](https://redirect.github.com/numpy/numpy/pull/18880))
##### Distutils forces strict floating point model on clang
NumPy distutils will now always add the `-ffp-exception-behavior=strict`
compiler flag when compiling with clang. Clang defaults to a non-strict
version, which allows the compiler to generate code that does not set
floating point warnings/errors correctly.
([gh-19049](https://redirect.github.com/numpy/numpy/pull/19049))
## C API changes
##### Use of `ufunc->type_resolver` and "type tuple"
NumPy now normalizes the "type tuple" argument to the type resolver
functions before calling it. Note that in the use of this type resolver
is legacy behaviour and NumPy will not do so when possible. Calling
`ufunc->type_resolver` or `PyUFunc_DefaultTypeResolver` is strongly
discouraged and will now enforce a normalized type tuple if done. Note
that this does not affect providing a type resolver, which is expected
to keep working in most circumstances. If you have an unexpected
use-case for calling the type resolver, please inform the NumPy
developers so that a solution can be found.
([gh-18718](https://redirect.github.com/numpy/numpy/pull/18718))
## New Features
##### Added a mypy plugin for handling platform-specific `numpy.number` precisions
A [mypy](http://mypy-lang.org/) plugin is now available for
automatically assigning the (platform-dependent) precisions of certain
`numpy.number` subclasses, including the likes of
`numpy.int_`, `numpy.intp` and
`numpy.longlong`. See the documentation on
`scalar types `
for a comprehensive overview of the affected classes.
Note that while usage of the plugin is completely optional, without it
the precision of above-mentioned classes will be inferred as
`typing.Any`.
To enable the plugin, one must add it to their mypy \[configuration file]
(https://mypy.readthedocs.io/en/stable/config_file.html):
```{.ini}
[mypy]
plugins = numpy.typing.mypy_plugin
```
([gh-17843](https://redirect.github.com/numpy/numpy/pull/17843))
##### Let the mypy plugin manage extended-precision `numpy.number` subclasses
The [mypy](http://mypy-lang.org/) plugin, introduced in
[numpy/numpy#17843](https://redirect.github.com/numpy/numpy/pull/17843), has
been expanded: the plugin now removes annotations for platform-specific
extended-precision types that are not available to the platform in
question. For example, it will remove `numpy.float128`
when not available.
Without the plugin *all* extended-precision types will, as far as mypy
is concerned, be available on all platforms.
To enable the plugin, one must add it to their mypy [configuration
file](https://mypy.readthedocs.io/en/stable/config_file.html):
```{.ini}
[mypy]
plugins = numpy.typing.mypy_plugin
cn
```
([gh-18322](https://redirect.github.com/numpy/numpy/pull/18322))
##### New `min_digits` argument for printing float values
A new `min_digits` argument has been added to the dragon4 float printing
functions `numpy.format_float_positional` and
`numpy.format_float_scientific`. This kwd guarantees
that at least the given number of digits will be printed when printing
in unique=True mode, even if the extra digits are unnecessary to
uniquely specify the value. It is the counterpart to the precision
argument which sets the maximum number of digits to be printed. When
unique=False in fixed precision mode, it has no effect and the precision
argument fixes the number of digits.
([gh-18629](https://redirect.github.com/numpy/numpy/pull/18629))
##### f2py now recognizes Fortran abstract interface blocks
`numpy.f2py` can now parse abstract interface blocks.
([gh-18695](https://redirect.github.com/numpy/numpy/pull/18695))
##### BLAS and LAPACK configuration via environment variables
Autodetection of installed BLAS and LAPACK libraries can be bypassed by
using the `NPY_BLAS_LIBS` and `NPY_LAPACK_LIBS` environment variables.
Instead, the link flags in these environment variables will be used
directly, and the language is assumed to be F77. This is especially
useful in automated builds where the BLAS and LAPACK that are installed
are known exactly. A use case is replacing the actual implementation at
runtime via stub library links.
If `NPY_CBLAS_LIBS` is set (optional in addition to `NPY_BLAS_LIBS`),
this will be used as well, by defining `HAVE_CBLAS` and appending the
environment variable content to the link flags.
([gh-18737](https://redirect.github.com/numpy/numpy/pull/18737))
##### A runtime-subcriptable alias has been added for `ndarray`
`numpy.typing.NDArray` has been added, a runtime-subscriptable alias for
`np.ndarray[Any, np.dtype[~Scalar]]`. The new type alias can be used for
annotating arrays with a given dtype and unspecified shape.
NumPy does not support the annotating of array shapes as of 1.21,
this is expected to change in the future though (see
`646`{.interpreted-text role="pep"}).
##### Examples
```{.python}
>>> import numpy as np
>>> import numpy.typing as npt
>>> print(npt.NDArray)
numpy.ndarray[typing.Any, numpy.dtype[~ScalarType]]
>>> print(npt.NDArray[np.float64])
numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]
>>> NDArrayInt = npt.NDArray[np.int_]
>>> a: NDArrayInt = np.arange(10)
>>> def func(a: npt.ArrayLike) -> npt.NDArray[Any]:
... return np.array(a)
```
([gh-18935](https://redirect.github.com/numpy/numpy/pull/18935))
## Improvements
##### Arbitrary `period` option for `numpy.unwrap`
The size of the interval over which phases are unwrapped is no longer
restricted to `2 * pi`. This is especially useful for unwrapping
degrees, but can also be used for other intervals.
```{.python}
>>> phase_deg = np.mod(np.linspace(0,720,19), 360) - 180
>>> phase_deg
array([-180., -140., -100., -60., -20., 20., 60., 100., 140.,
-180., -140., -100., -60., -20., 20., 60., 100., 140.,
-180.])
>>> unwrap(phase_deg, period=360)
array([-180., -140., -100., -60., -20., 20., 60., 100., 140.,
180., 220., 260., 300., 340., 380., 420., 460., 500.,
540.])
```
([gh-16987](https://redirect.github.com/numpy/numpy/pull/16987))
##### `np.unique` now returns single `NaN`
When `np.unique` operated on an array with multiple `NaN` entries, its
return included a `NaN` for each entry that was `NaN` in the original
array. This is now improved such that the returned array contains just
one `NaN` as the last element.
Also for complex arrays all `NaN` values are considered equivalent (no
matter whether the `NaN` is in the real or imaginary part). As the
representant for the returned array the smallest one in the
lexicographical order is chosen - see `np.sort` for how the
lexicographical order is defined for complex arrays.
([gh-18070](https://redirect.github.com/numpy/numpy/pull/18070))
##### `Generator.rayleigh` and `Generator.geometric` performance improved
The performance of Rayleigh and geometric random variate generation in
`Generator` has improved. These are both transformation of exponential
random variables and the slow log-based inverse cdf transformation has
been replaced with the Ziggurat-based exponential variate generator.
This change breaks the stream of variates generated when variates from
either of these distributions are produced.
([gh-18666](https://redirect.github.com/numpy/numpy/pull/18666))
##### Placeholder annotations have been improved
All placeholder annotations, that were previously annotated as
`typing.Any`, have been improved. Where appropiate they have been
replaced with explicit function definitions, classes or other
miscellaneous objects.
([gh-18934](https://redirect.github.com/numpy/numpy/pull/18934))
## Performance improvements
##### Improved performance in integer division of NumPy arrays
Integer division of NumPy arrays now uses
[libdivide](https://libdivide.com/) when the divisor is a constant. With
the usage of libdivide and other minor optimizations, there is a large
speedup. The `//` operator and `np.floor_divide` makes use of the new
changes.
([gh-17727](https://redirect.github.com/numpy/numpy/pull/17727))
##### Improve performance of `np.save` and `np.load` for small arrays
`np.save` is now a lot faster for small arrays.
`np.load` is also faster for small arrays, but only when serializing
with a version >= `(3, 0)`.
Both are done by removing checks that are only relevant for Python 2,
while still maintaining compatibility with arrays which might have been
created by Python 2.
([gh-18657](https://redirect.github.com/numpy/numpy/pull/18657))
## Changes
##### `numpy.piecewise` output class now matches the input class
When `numpy.ndarray` subclasses are used on input to
`numpy.piecewise`, they are passed on to the functions.
The output will now be of the same subclass as well.
([gh-18110](https://redirect.github.com/numpy/numpy/pull/18110))
##### Enable Accelerate Framework
With the release of macOS 11.3, several different issues that numpy was
encountering when using Accelerate Framework's implementation of BLAS
and LAPACK should be resolved. This change enables the Accelerate
Framework as an option on macOS. If additional issues are found, please
file a bug report against Accelerate using the developer feedback
assistant tool (). We intend
to address issues promptly and plan to continue supporting and updating
our BLAS and LAPACK libraries.
([gh-18874](https://redirect.github.com/numpy/numpy/pull/18874))
## Checksums
##### MD5
e4b31fd5cb97e50238b3dbb3487b2cb7 numpy-1.21.0-cp37-cp37m-macosx_10_9_x86_64.whl
111e09f3fddd8e14540cf56493dd786a numpy-1.21.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
e2fc116043d1b91c627f3c8884151f33 numpy-1.21.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
82e267da77628b96cdf8832e475f6ef3 numpy-1.21.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
baa416fe77b840a19556f5d808eb3165 numpy-1.21.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl
aba24836f51bb0a855434c41de122e3d numpy-1.21.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
aa9f94fa6eabfa193902676825934196 numpy-1.21.0-cp37-cp37m-win32.whl
6d771c7670b95adb62627e383c883804 numpy-1.21.0-cp37-cp37m-win_amd64.whl
e6d77cae6054b738603415faf9cb4358 numpy-1.21.0-cp38-cp38-macosx_10_9_universal2.whl
9589cfe5a22f54956101b7131be5cabd numpy-1.21.0-cp38-cp38-macosx_10_9_x86_64.whl
5faa22dffa53cfe7d1d40d48aa817670 numpy-1.21.0-cp38-cp38-macosx_11_0_arm64.whl
b81545a2924a201817d433c3bad0bc7d numpy-1.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
3e60589e3325a3583880bf6998cfaca6 numpy-1.21.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
baf409eb08b7462899d45c42a7c1d854 numpy-1.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
4f311de7973503dde6ad3915f158fd63 numpy-1.21.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl
1a79926ad8d3dda573f5c2d8d06e0e38 numpy-1.21.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl
0b39eb396a1d5983f6eb2075a867a1a6 numpy-1.21.0-cp38-cp38-win32.whl
5c8c3e94f5a55123b1a0d3a4df14b505 numpy-1.21.0-cp38-cp38-win_amd64.whl
c6e9fa30e82e3ca1551d2f048d4a1dc4 numpy-1.21.0-cp39-cp39-macosx_10_9_universal2.whl
96d7d3a438296bfc68b819b3624936a5 numpy-1.21.0-cp39-cp39-macosx_10_9_x86_64.whl
31cf2152b4151912be9d165633a7d8eb numpy-1.21.0-cp39-cp39-macosx_11_0_arm64.whl
e49cd2db6ec712b8b1d516154b5a034a numpy-1.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
c10e13fef152ed1c64151c8b6f6d0799 numpy-1.21.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
a627acdfcd302807cf8592d5bd958d35 numpy-1.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
e2287cd16300b363d376b661646fded9 numpy-1.21.0-cp39-cp39-win32.whl
29d1bf596981d930bb1c95c944b4b3d8 numpy-1.21.0-cp39-cp39-win_amd64.whl
42d05fcbab6137a404be36f27fc254f0 numpy-1.21.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
003e34bd2cba06e7fe299a864964ea24 numpy-1.21.0.tar.gz
930ebfdffd10fed701a7823691f02983 numpy-1.21.0.zip
##### SHA256
d5caa946a9f55511e76446e170bdad1d12d6b54e17a2afe7b189112ed4412bb8 numpy-1.21.0-cp37-cp37m-macosx_10_9_x86_64.whl
ac4fd578322842dbda8d968e3962e9f22e862b6ec6e3378e7415625915e2da4d numpy-1.21.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
598fe100b2948465cf3ed64b1a326424b5e4be2670552066e17dfaa67246011d numpy-1.21.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
7c55407f739f0bfcec67d0df49103f9333edc870061358ac8a8c9e37ea02fcd2 numpy-1.21.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
75579acbadbf74e3afd1153da6177f846212ea2a0cc77de53523ae02c9256513 numpy-1.21.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl
cc367c86eb87e5b7c9592935620f22d13b090c609f1b27e49600cd033b529f54 numpy-1.21.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
d89b0dc7f005090e32bb4f9bf796e1dcca6b52243caf1803fdd2b748d8561f63 numpy-1.21.0-cp37-cp37m-win32.whl
eda2829af498946c59d8585a9fd74da3f810866e05f8df03a86f70079c7531dd numpy-1.21.0-cp37-cp37m-win_amd64.whl
1a784e8ff7ea2a32e393cc53eb0003eca1597c7ca628227e34ce34eb11645a0e numpy-1.21.0-cp38-cp38-macosx_10_9_universal2.whl
bba474a87496d96e61461f7306fba2ebba127bed7836212c360f144d1e72ac54 numpy-1.21.0-cp38-cp38-macosx_10_9_x86_64.whl
fd0a359c1c17f00cb37de2969984a74320970e0ceef4808c32e00773b06649d9 numpy-1.21.0-cp38-cp38-macosx_11_0_arm64.whl
e4d5a86a5257843a18fb1220c5f1c199532bc5d24e849ed4b0289fb59fbd4d8f numpy-1.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
620732f42259eb2c4642761bd324462a01cdd13dd111740ce3d344992dd8492f numpy-1.21.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
b9205711e5440954f861ceeea8f1b415d7dd15214add2e878b4d1cf2bcb1a914 numpy-1.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
ad09f55cc95ed8d80d8ab2052f78cc21cb231764de73e229140d81ff49d8145e numpy-1.21.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl
a1f2fb2da242568af0271455b89aee0f71e4e032086ee2b4c5098945d0e11cf6 numpy-1.21.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl
e58ddb53a7b4959932f5582ac455ff90dcb05fac3f8dcc8079498d43afbbde6c numpy-1.21.0-cp38-cp38-win32.whl
d2910d0a075caed95de1a605df00ee03b599de5419d0b95d55342e9a33ad1fb3 numpy-1.21.0-cp38-cp38-win_amd64.whl
a290989cd671cd0605e9c91a70e6df660f73ae87484218e8285c6522d29f6e38 numpy-1.21.0-cp39-cp39-macosx_10_9_universal2.whl
3537b967b350ad17633b35c2f4b1a1bbd258c018910b518c30b48c8e41272717 numpy-1.21.0-cp39-cp39-macosx_10_9_x86_64.whl
ccc6c650f8700ce1e3a77668bb7c43e45c20ac06ae00d22bdf6760b38958c883 numpy-1.21.0-cp39-cp39-macosx_11_0_arm64.whl
709884863def34d72b183d074d8ba5cfe042bc3ff8898f1ffad0209161caaa99 numpy-1.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
bebab3eaf0641bba26039fb0b2c5bf9b99407924b53b1ea86e03c32c64ef5aef numpy-1.21.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
cf680682ad0a3bef56dae200dbcbac2d57294a73e5b0f9864955e7dd7c2c2491 numpy-1.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
d95d16204cd51ff1a1c8d5f9958ce90ae190be81d348b514f9be39f878b8044a numpy-1.21.0-cp39-cp39-win32.whl
2ba579dde0563f47021dcd652253103d6fd66165b18011dce1a0609215b2791e numpy-1.21.0-cp39-cp39-win_amd64.whl
3c40e6b860220ed862e8097b8f81c9af6d7405b723f4a7af24a267b46f90e461 numpy-1.21.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
b662c841b29848c04d9134f31dbaa7d4c8e673f45bb3a5f28d02f49c424d558a numpy-1.21.0.tar.gz
e80fe25cba41c124d04c662f33f6364909b985f2eb5998aaa5ae4b9587242cce numpy-1.21.0.zip
### [`v1.20.3`](https://redirect.github.com/numpy/numpy/releases/tag/v1.20.3)
[Compare Source](https://redirect.github.com/numpy/numpy/compare/v1.20.2...v1.20.3)
# NumPy 1.20.3 Release Notes
NumPy 1.20.3 is a bugfix release containing several fixes merged to the
main branch after the NumPy 1.20.2 release.
## Contributors
A total of 7 people contributed to this release. People with a "+" by
their names contributed a patch for the first time.
- Anne Archibald
- Bas van Beek
- Charles Harris
- Dong Keun Oh +
- Kamil Choudhury +
- Sayed Adel
- Sebastian Berg
## Pull requests merged
A total of 15 pull requests were merged for this release.
- [#18763](https://redirect.github.com/numpy/numpy/pull/18763): BUG: Correct `datetime64` missing type overload for `datetime.date`...
- [#18764](https://redirect.github.com/numpy/numpy/pull/18764): MAINT: Remove `__all__` in favor of explicit re-exports
- [#18768](https://redirect.github.com/numpy/numpy/pull/18768): BLD: Strip extra newline when dumping gfortran version on MacOS
- [#18769](https://redirect.github.com/numpy/numpy/pull/18769): BUG: fix segfault in object/longdouble operations
- [#18794](https://redirect.github.com/numpy/numpy/pull/18794): MAINT: Use towncrier build explicitly
- [#18887](https://redirect.github.com/numpy/numpy/pull/18887): MAINT: Relax certain integer-type constraints
- [#18915](https://redirect.github.com/numpy/numpy/pull/18915): MAINT: Remove unsafe unions and ABCs from return-annotations
- [#18921](https://redirect.github.com/numpy/numpy/pull/18921): MAINT: Allow more recursion depth for scalar tests.
- [#18922](https://redirect.github.com/numpy/numpy/pull/18922): BUG: Initialize the full nditer buffer in case of error
- [#18923](https://redirect.github.com/numpy/numpy/pull/18923): BLD: remove unnecessary flag `-faltivec` on macOS
- [#18924](https://redirect.github.com/numpy/numpy/pull/18924): MAINT, CI: treats \_SIMD module build warnings as errors through...
- [#18925](https://redirect.github.com/numpy/numpy/pull/18925): BUG: for MINGW, threads.h existence test requires GLIBC > 2.12
- [#18941](https://redirect.github.com/numpy/numpy/pull/18941): BUG: Make changelog recognize gh- as a PR number prefix.
- [#18948](https://redirect.github.com/numpy/numpy/pull/18948): REL, DOC: Prepare for the NumPy 1.20.3 release.
- [#18953](https://redirect.github.com/numpy/numpy/pull/18953): BUG: Fix failing mypy test in 1.20.x.
## Checksums
##### MD5
702d0185042f1ff9a5d7e72a29f4e1c0 numpy-1.20.3-cp37-cp37m-macosx_10_9_x86_64.whl
3d0284b39b20c243b74f6690ad5ae27f numpy-1.20.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
d1b42dd67dc228088cf822eaab86d424 numpy-1.20.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
126b1a5d46cc7d9b9b426f56d075a1e0 numpy-1.20.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
5b0445346f08b610025dbd2064d4b482 numpy-1.20.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl
02bd4a2c764882e8af353c16344cb633 numpy-1.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
0f6a36724d5477c8fca6c34e73683db6 numpy-1.20.3-cp37-cp37m-win32.whl
c7d3ae93743d6c0ea2c9dfcad1d42cb4 numpy-1.20.3-cp37-cp37m-win_amd64.whl
445da50ae14b3318170ccf996baca72c numpy-1.20.3-cp38-cp38-macosx_10_9_x86_64.whl
c651fdb4829703e164bc78613c1a90a8 numpy-1.20.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
c9411ef729b8ebe9ed3b8e9dee3da4ac numpy-1.20.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
ff69ad241598607fdfea24155625a6e3 numpy-1.20.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
9fd8d44d8a5f19e434e9dfb7738d954f numpy-1.20.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl
d144fdfe141442a7f362d498bc9a40c2 numpy-1.20.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl
e7ffa27f1c75cf11529d90967fa15bbc numpy-1.20.3-cp38-cp38-win32.whl
58c12a54d1b5bc14d36ed2b0d8617fef numpy-1.20.3-cp38-cp38-win_amd64.whl
18efbadcb513054c765f826fc3bb1645 numpy-1.20.3-cp39-cp39-macosx_10_9_x86_64.whl
319300952bd42455cb2ad98188c74b5f numpy-1.20.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
1d1451f9a5a2eeef666fc512a101a6ca numpy-1.20.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
cdef3fb002bb5e3036f056ea0528c804 numpy-1.20.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
85e575735877094f3a76106e9d2a9cac numpy-1.20.3-cp39-cp39-win32.whl
59f1dba95dedc7a1bebc58ee7e7a945a numpy-1.20.3-cp39-cp39-win_amd64.whl
6abc979843929b41b099e4e6c0253063 numpy-1.20.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
802ddf90c7e226ba56ed0ea244f8b53d numpy-1.20.3.tar.gz
949d9114af9accc25ede1daa359c4227 numpy-1.20.3.zip
##### SHA256
70eb5808127284c4e5c9e836208e09d685a7978b6a216db85960b1a112eeace8 numpy-1.20.3-cp37-cp37m-macosx_10_9_x86_64.whl
6ca2b85a5997dabc38301a22ee43c82adcb53ff660b89ee88dded6b33687e1d8 numpy-1.20.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
c5bf0e132acf7557fc9bb8ded8b53bbbbea8892f3c9a1738205878ca9434206a numpy-1.20.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
db250fd3e90117e0312b611574cd1b3f78bec046783195075cbd7ba9c3d73f16 numpy-1.20.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
637d827248f447e63585ca3f4a7d2dfaa882e094df6cfa177cc9cf9cd6cdf6d2 numpy-1.20.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl
8b7bb4b9280da3b2856cb1fc425932f46fba609819ee1c62256f61799e6a51d2 numpy-1.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
67d44acb72c31a97a3d5d33d103ab06d8ac20770e1c5ad81bdb3f0c086a56cf6 numpy-1.20.3-cp37-cp37m-win32.whl
43909c8bb289c382170e0282158a38cf306a8ad2ff6dfadc447e90f9961bef43 numpy-1.20.3-cp37-cp37m-win_amd64.whl
f1452578d0516283c87608a5a5548b0cdde15b99650efdfd85182102ef7a7c17 numpy-1.20.3-cp38-cp38-macosx_10_9_x86_64.whl
6e51534e78d14b4a009a062641f465cfaba4fdcb046c3ac0b1f61dd97c861b1b numpy-1.20.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
e515c9a93aebe27166ec9593411c58494fa98e5fcc219e47260d9ab8a1cc7f9f numpy-1.20.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
c1c09247ccea742525bdb5f4b5ceeacb34f95731647fe55774aa36557dbb5fa4 numpy-1.20.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
66fbc6fed94a13b9801fb70b96ff30605ab0a123e775a5e7a26938b717c5d71a numpy-1.20.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl
ea9cff01e75a956dbee133fa8e5b68f2f92175233de2f88de3a682dd94deda65 numpy-1.20.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl
f39a995e47cb8649673cfa0579fbdd1cdd33ea497d1728a6cb194d6252268e48 numpy-1.20.3-cp38-cp38-win32.whl
1676b0a292dd3c99e49305a16d7a9f42a4ab60ec522eac0d3dd20cdf362ac010 numpy-1.20.3-cp38-cp38-win_amd64.whl
830b044f4e64a76ba71448fce6e604c0fc47a0e54d8f6467be23749ac2cbd2fb numpy-1.20.3-cp39-cp39-macosx_10_9_x86_64.whl
55b745fca0a5ab738647d0e4db099bd0a23279c32b31a783ad2ccea729e632df numpy-1.20.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
5d050e1e4bc9ddb8656d7b4f414557720ddcca23a5b88dd7cff65e847864c400 numpy-1.20.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
a9c65473ebc342715cb2d7926ff1e202c26376c0dcaaee85a1fd4b8d8c1d3b2f numpy-1.20.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
16f221035e8bd19b9dc9a57159e38d2dd060b48e93e1d843c49cb370b0f415fd numpy-1.20.3-cp39-cp39-win32.whl
6690080810f77485667bfbff4f69d717c3be25e5b11bb2073e76bb3f578d99b4 numpy-1.20.3-cp39-cp39-win_amd64.whl
4e465afc3b96dbc80cf4a5273e5e2b1e3451286361b4af70ce1adb2984d392f9 numpy-1.20.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
b7340f0628ce1823c151e3d2a2a8cba2a3ff1357fba4475a24b1816e75c21f90 numpy-1.20.3.tar.gz
e55185e51b18d788e49fe8305fd73ef4470596b33fc2c1ceb304566b99c71a69 numpy-1.20.3.zip
### [`v1.20.2`](https://redirect.github.com/numpy/numpy/releases/tag/v1.20.2)
[Compare Source](https://redirect.github.com/numpy/numpy/compare/v1.20.1...v1.20.2)
# NumPy 1.20.2 Release Notes
NumPy 1,20.2 is a bugfix release containing several fixes merged to the
main branch after the NumPy 1.20.1 release.
## Contributors
A total of 7 people contributed to this release. People with a "+" by
their names contributed a patch for the first time.
- Allan Haldane
- Bas van Beek
- Charles Harris
- Christoph Gohlke
- Mateusz Sokół +
- Michael Lamparski
- Sebastian Berg
## Pull requests merged
A total of 20 pull requests were merged for this release.
- [#18382](https://redirect.github.com/numpy/numpy/pull/18382): MAINT: Update f2py from master.
- [#18459](https://redirect.github.com/numpy/numpy/pull/18459): BUG: `diagflat` could overflow on windows or 32-bit platforms
- [#18460](https://redirect.github.com/numpy/numpy/pull/18460): BUG: Fix refcount leak in f2py `complex_double_from_pyobj`.
- [#18461](https://redirect.github.com/numpy/numpy/pull/18461): BUG: Fix tiny memory leaks when `like=` overrides are used
- [#18462](https://redirect.github.com/numpy/numpy/pull/18462): BUG: Remove temporary change of descr/flags in VOID functions
- [#18469](https://redirect.github.com/numpy/numpy/pull/18469): BUG: Segfault in nditer buffer dealloc for Object arrays
- [#18485](https://redirect.github.com/numpy/numpy/pull/18485): BUG: Remove suspicious type casting
- [#18486](https://redirect.github.com/numpy/numpy/pull/18486): BUG: remove nonsensical comparison of pointer < 0
- [#18487](https://redirect.github.com/numpy/numpy/pull/18487): BUG: verify pointer against NULL before using it
- [#18488](https://redirect.github.com/numpy/numpy/pull/18488): BUG: check if PyArray_malloc succeeded
- [#18546](https://redirect.github.com/numpy/numpy/pull/18546): BUG: incorrect error fallthrough in nditer
- [#18559](https://redirect.github.com/numpy/numpy/pull/18559): CI: Backport CI fixes from main.
- [#18599](https://redirect.github.com/numpy/numpy/pull/18599): MAINT: Add annotations for `__getitem__`, `__mul__` and...
- [#18611](https://redirect.github.com/numpy/numpy/pull/18611): BUG: NameError in numpy.distutils.fcompiler.compaq
- [#18612](https://redirect.github.com/numpy/numpy/pull/18612): BUG: Fixed `where` keyword for `np.mean` & `np.var` methods
- [#18617](https://redirect.github.com/numpy/numpy/pull/18617): CI: Update apt package list before Python install
- [#18636](https://redirect.github.com/numpy/numpy/pull/18636): MAINT: Ensure that re-exported sub-modules are properly annotated
- [#18638](https://redirect.github.com/numpy/numpy/pull/18638): BUG: Fix ma coercion list-of-ma-arrays if they do not cast to...
- [#18661](https://redirect.github.com/numpy/numpy/pull/18661): BUG: Fix small valgrind-found issues
- [#18671](https://redirect.github.com/numpy/numpy/pull/18671): BUG: Fix small issues found with pytest-leaks
## Checksums
##### MD5
a95718df123e0726a7dac5043050b251 numpy-1.20.2-cp37-cp37m-macosx_10_9_x86_64.whl
4cacfe903c60827c0e44d0bed7e3a760 numpy-1.20.2-cp37-cp37m-manylinux1_i686.whl
2879728d4f815f07c7d133347deefe45 numpy-1.20.2-cp37-cp37m-manylinux1_x86_64.whl
97546a3cf4ddcc9fcc7eb41b9558f1de numpy-1.20.2-cp37-cp37m-manylinux2010_i686.whl
65ffbc38abe1c1b92eb3bebf3484f679 numpy-1.20.2-cp37-cp37m-manylinux2010_x86_64.whl
5746efbd42db03518a51adbacbc70fa7 numpy-1.20.2-cp37-cp37m-manylinux2014_aarch64.whl
e9b8e30a5c62f003835b374dbc1c9031 numpy-1.20.2-cp37-cp37m-win32.whl
b2d0fa9383776ab68a1bbefc84331fc1 numpy-1.20.2-cp37-cp37m-win_amd64.whl
321aa118fbd40fe53a7c82557f3f2772 numpy-1.20.2-cp38-cp38-macosx_10_9_x86_64.whl
518013677b05371bbe7e1d6fa4ef61aa numpy-1.20.2-cp38-cp38-manylinux1_i686.whl
58c61ea025646c391788f7bc7f681fa5 numpy-1.20.2-cp38-cp38-manylinux1_x86_64.whl
e8ce1857f017bffeed46b003a0385b11 numpy-1.20.2-cp38-cp38-manylinux2010_i686.whl
8ed52b7194b0953d0b04b88fbabea1ac numpy-1.20.2-cp38-cp38-manylinux2010_x86_64.whl
0a9202dfd47fb02c8eab9f71f084633c numpy-1.20.2-cp38-cp38-manylinux2014_aarch64.whl
8c70e309be1ae43d2938895b56ffbdb7 numpy-1.20.2-cp38-cp38-win32.whl
8aaa91a51b79556643ad93cb1d55b7d3 numpy-1.20.2-cp38-cp38-win_amd64.whl
b1b03999df657ccd4e65ff6abcf7e042 numpy-1.20.2-cp39-cp39-macosx_10_9_x86_64.whl
139fef5109539031e570aee9aa3090bf numpy-1.20.2-cp39-cp39-manylinux2010_i686.whl
2c9463187e6a1a0245ed4a2db8e8e656 numpy-1.20.2-cp39-cp39-manylinux2010_x86_64.whl
b6cb08e8f56accedc4fdc29720ffb380 numpy-1.20.2-cp39-cp39-manylinux2014_aarch64.whl
a3024059b52e7688d3c98b82e2f2688e numpy-1.20.2-cp39-cp39-win32.whl
abcd17ffd3b29014ff15e93a74c2c3d6 numpy-1.20.2-cp39-cp39-win_amd64.whl
67704047e60c2b280f7e9f42400cca91 numpy-1.20.2-pp37-pypy37_pp73-manylinux2010_x86_64.whl
6fe93791438f9c1f69c9352680151002 numpy-1.20.2.tar.gz
5e1b381630af4d18db0fedd56b6d8da2 numpy-1.20.2.zip
##### SHA256
e9459f40244bb02b2f14f6af0cd0732791d72232bbb0dc4bab57ef88e75f6935 numpy-1.20.2-cp37-cp37m-macosx_10_9_x86_64.whl
a8e6859913ec8eeef3dbe9aed3bf475347642d1cdd6217c30f28dee8903528e6 numpy-1.20.2-cp37-cp37m-manylinux1_i686.whl
9cab23439eb1ebfed1aaec9cd42b7dc50fc96d5cd3147da348d9161f0501ada5 numpy-1.20.2-cp37-cp37m-manylinux1_x86_64.whl
9c0fab855ae790ca74b27e55240fe4f2a36a364a3f1ebcfd1fb5ac4088f1cec3 numpy-1.20.2-cp37-cp37m-manylinux2010_i686.whl
61d5b4cf73622e4d0c6b83408a16631b670fc045afd6540679aa35591a17fe6d numpy-1.20.2-cp37-cp37m-manylinux2010_x86_64.whl
d15007f857d6995db15195217afdbddfcd203dfaa0ba6878a2f580eaf810ecd6 numpy-1.20.2-cp37-cp37m-manylinux2014_aarch64.whl
d76061ae5cab49b83a8cf3feacefc2053fac672728802ac137dd8c4123397677 numpy-1.20.2-cp37-cp37m-win32.whl
bad70051de2c50b1a6259a6df1daaafe8c480ca98132da98976d8591c412e737 numpy-1.20.2-cp37-cp37m-win_amd64.whl
719656636c48be22c23641859ff2419b27b6bdf844b36a2447cb39caceb00935 numpy-1.20.2-cp38-cp38-macosx_10_9_x86_64.whl
aa046527c04688af680217fffac61eec2350ef3f3d7320c07fd33f5c6e7b4d5f numpy-1.20.2-cp38-cp38-manylinux1_i686.whl
2428b109306075d89d21135bdd6b785f132a1f5a3260c371cee1fae427e12727 numpy-1.20.2-cp38-cp38-manylinux1_x86_64.whl
e8e4fbbb7e7634f263c5b0150a629342cc19b47c5eba8d1cd4363ab3455ab576 numpy-1.20.2-cp38-cp38-manylinux2010_i686.whl
edb1f041a9146dcf02cd7df7187db46ab524b9af2515f392f337c7cbbf5b52cd numpy-1.20.2-cp38-cp38-manylinux2010_x86_64.whl
c73a7975d77f15f7f68dacfb2bca3d3f479f158313642e8ea9058eea06637931 numpy-1.20.2-cp38-cp38-manylinux2014_aarch64.whl
6c915ee7dba1071554e70a3664a839fbc033e1d6528199d4621eeaaa5487ccd2 numpy-1.20.2-cp38-cp38-win32.whl
471c0571d0895c68da309dacee4e95a0811d0a9f9f532a48dc1bea5f3b7ad2b7 numpy-1.20.2-cp38-cp38-win_amd64.whl
4703b9e937df83f5b6b7447ca5912b5f5f297aba45f91dbbbc63ff9278c7aa98 numpy-1.20.2-cp39-cp39-macosx_10_9_x86_64.whl
abc81829c4039e7e4c30f7897938fa5d4916a09c2c7eb9b244b7a35ddc9656f4 numpy-1.20.2-cp39-cp39-manylinux2010_i686.whl
377751954da04d4a6950191b20539066b4e19e3b559d4695399c5e8e3e683bf6 numpy-1.20.2-cp39-cp39-manylinux2010_x86_64.whl
6e51e417d9ae2e7848314994e6fc3832c9d426abce9328cf7571eefceb43e6c9 numpy-1.20.2-cp39-cp39-manylinux2014_aarch64.whl
780ae5284cb770ade51d4b4a7dce4faa554eb1d88a56d0e8b9f35fca9b0270ff numpy-1.20.2-cp39-cp39-win32.whl
924dc3f83de20437de95a73516f36e09918e9c9c18d5eac520062c49191025fb numpy-1.20.2-cp39-cp39-win_amd64.whl
97ce8b8ace7d3b9288d88177e66ee75480fb79b9cf745e91ecfe65d91a856042 numpy-1.20.2-pp37-pypy37_pp73-manylinux2010_x86_64.whl
c049f410c78e76ffb0af830a8afbdf8baac09897b4152b97b1a3b8345ee338ff numpy-1.20.2.tar.gz
878922bf5ad7550aa044aa9301d417e2d3ae50f0f577de92051d739ac6096cee numpy-1.20.2.zip
### [`v1.20.1`](https://redirect.github.com/numpy/numpy/releases/tag/v1.20.1)
[Compare Source](https://redirect.github.com/numpy/numpy/compare/v1.20.0...v1.20.1)
# NumPy 1.20.1 Release Notes
NumPy 1.20.1 is a rapid bugfix release fixing several bugs and
regressions reported after the 1.20.0 release.
## Highlights
- The distutils bug that caused problems with downstream projects is
fixed.
- The `random.shuffle` regression is fixed.
## Contributors
A total of 8 people contributed to this release. People with a "+" by
their names contributed a patch for the first time.
- Bas van Beek
- Charles Harris
- Nicholas McKibben +
- Pearu Peterson
- Ralf Gommers
- Sebastian Berg
- Tyler Reddy
- [@Aerysv](https://redirect.github.com/Aerysv) +
## Pull requests merged
A total of 15 pull requests were merged for this release.
- [#18306](https://redirect.github.com/numpy/numpy/pull/18306): MAINT: Add missing placeholder annotations
- [#18310](https://redirect.github.com/numpy/numpy/pull/18310): BUG: Fix typo in `numpy.__init__.py`
- [#18326](https://redirect.github.com/numpy/numpy/pull/18326): BUG: don't mutate list of fake libraries while iterating over...
- [#18327](https://redirect.github.com/numpy/numpy/pull/18327): MAINT: gracefully shuffle memoryviews
- [#18328](https://redirect.github.com/numpy/numpy/pull/18328): BUG: Use C linkage for random distributions
- [#18336](https://redirect.github.com/numpy/numpy/pull/18336): CI: fix when GitHub Actions builds trigger, and allow ci skips
- [#18337](https://redirect.github.com/numpy/numpy/pull/18337): BUG: Allow unmodified use of isclose, allclose, etc. with timedelta
- [#18345](https://redirect.github.com/numpy/numpy/pull/18345): BUG: Allow pickling all relevant DType types/classes
- [#18351](https://redirect.github.com/numpy/numpy/pull/18351): BUG: Fix missing signed_char dependency. Closes [#18335](https://redirect.github.com/numpy/numpy/issues/18335).
- [#18352](https://redirect.github.com/numpy/numpy/pull/18352): DOC: Change license date 2020 -> 2021
- [#18353](https://redirect.github.com/numpy/numpy/pull/18353): CI: CircleCI seems to occasionally time out, increase the limit
- [#18354](https://redirect.github.com/numpy/numpy/pull/18354): BUG: Fix f2py bugs when wrapping F90 subroutines.
- [#18356](https://redirect.github.com/numpy/numpy/pull/18356): MAINT: crackfortran regex simplify
- [#18357](https://redirect.github.com/numpy/numpy/pull/18357): BUG: threads.h existence test requires GLIBC > 2.12.
- [#18359](https://redirect.github.com/numpy/numpy/pull/18359): REL: Prepare for the NumPy 1.20.1 release.
## Checksums
##### MD5
c4748f4f8f703c5e96027407eca02b08 numpy-1.20.1-cp37-cp37m-macosx_10_9_x86_64.whl
f0bf3a78d6b3a169e5a7fb2637f7fd87 numpy-1.20.1-cp37-cp37m-manylinux1_i686.whl
493c17647c05ca5043bcbab1ac266a74 numpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whl
55ec954fc598c72b2bbf57bfa8b2a701 numpy-1.20.1-cp37-cp37m-manylinux2010_i686.whl
8cee88f9683d208686081522609a8726 numpy-1.20.1-cp37-cp37m-manylinux2010_x86_64.whl
26399d3ededc53b354de78f977a6197e numpy-1.20.1-cp37-cp37m-manylinux2014_aarch64.whl
81051f1e7a79eea8a5aaf5718114ce3a numpy-1.20.1-cp37-cp37m-win32.whl
899488c55824f02a7a6f0451fc86f63f numpy-1.20.1-cp37-cp37m-win_amd64.whl
17f4dae5a0d143b46345a9cf1a8c8dec numpy-1.20.1-cp38-cp38-macosx_10_9_x86_64.whl
f254e98e92b3054c567b6220b37b81d3 numpy-1.20.1-cp38-cp38-manylinux1_i686.whl
483f43a62c7e32ae991990786da90de1 numpy-1.20.1-cp38-cp38-manylinux1_x86_64.whl
bf578b783e36d3feb3344973306a9f96 numpy-1.20.1-cp38-cp38-manylinux2010_i686.whl
f5d6c77c898537017e64ee30b243fdca numpy-1.20.1-cp38-cp38-manylinux2010_x86_64.whl
5cf541a0d5af3d5812d2970a427075fb numpy-1.20.1-cp38-cp38-manylinux2014_aarch64.whl
178315c579c0a70285b8ee502eb498af numpy-1.20.1-cp38-cp38-win32.whl
5164a32e7a00a2b285302b563eb58afe numpy-1.20.1-cp38-cp38-win_amd64.whl
c123dd10788ea9ff788d735cbee444c5 numpy-1.20.1-cp39-cp39-macosx_10_9_x86_64.whl
72282fefe58650c6e7cc41f5b37b8662 numpy-1.20.1-cp39-cp39-manylinux2010_i686.whl
234d57c1a7b1f8b99c054a7a71a51cbe numpy-1.20.1-cp39-cp39-manylinux2010_x86_64.whl
352243d4285970e45d825024ca566d47 numpy-1.20.1-cp39-cp39-manylinux2014_aarch64.whl
a78c863323e0f56210c2e1acaad1bc22 numpy-1.20.1-cp39-cp39-win32.whl
86f9d3f358e7d7896e713bce99f17fdd numpy-1.20.1-cp39-cp39-win_amd64.whl
ed2c81132119fb3c7f73c6a2de306058 numpy-1.20.1-pp37-pypy37_pp73-manylinux2010_x86_64.whl
60a5e2517be19394a7df24f6d4add3f2 numpy-1.20.1.tar.gz
30ea1c7868e73eeff2c86ac465311220 numpy-1.20.1.zip
##### SHA256
ae61f02b84a0211abb56462a3b6cd1e7ec39d466d3160eb4e1da8bf6717cdbeb numpy-1.20.1-cp37-cp37m-macosx_10_9_x86_64.whl
65410c7f4398a0047eea5cca9b74009ea61178efd78d1be9847fac1d6716ec1e numpy-1.20.1-cp37-cp37m-manylinux1_i686.whl
2d7e27442599104ee08f4faed56bb87c55f8b10a5494ac2ead5c98a4b289e61f numpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whl
4ed8e96dc146e12c1c5cdd6fb9fd0757f2ba66048bf94c5126b7efebd12d0090 numpy-1.20.1-cp37-cp37m-manylinux2010_i686.whl
ecb5b74c702358cdc21268ff4c37f7466357871f53a30e6f84c686952bef16a9 numpy-1.20.1-cp37-cp37m-manylinux2010_x86_64.whl
b9410c0b6fed4a22554f072a86c361e417f0258838957b78bd063bde2c7f841f numpy-1.20.1-cp37-cp37m-manylinux2014_aarch64.whl
3d3087e24e354c18fb35c454026af3ed8997cfd4997765266897c68d724e4845 numpy-1.20.1-cp37-cp37m-win32.whl
89f937b13b8dd17b0099c7c2e22066883c86ca1575a975f754babc8fbf8d69a9 numpy-1.20.1-cp37-cp37m-win_amd64.whl
a1d7995d1023335e67fb070b2fae6f5968f5be3802b15ad6d79d81ecaa014fe0 numpy-1.20.1-cp38-cp38-macosx_10_9_x86_64.whl
60759ab15c94dd0e1ed88241fd4fa3312db4e91d2c8f5a2d4cf3863fad83d65b numpy-1.20.1-cp38-cp38-manylinux1_i686.whl
125a0e10ddd99a874fd357bfa1b636cd58deb78ba4a30b5ddb09f645c3512e04 numpy-1.20.1-cp38-cp38-manylinux1_x86_64.whl
c26287dfc888cf1e65181f39ea75e11f42ffc4f4529e5bd19add57ad458996e2 numpy-1.20.1-cp38-cp38-manylinux2010_i686.whl
7199109fa46277be503393be9250b983f325880766f847885607d9b13848f257 numpy-1.20.1-cp38-cp38-manylinux2010_x86_64.whl
72251e43ac426ff98ea802a931922c79b8d7596480300eb9f1b1e45e0543571e numpy-1.20.1-cp38-cp38-manylinux2014_aarch64.whl
c91ec9569facd4757ade0888371eced2ecf49e7982ce5634cc2cf4e7331a4b14 numpy-1.20.1-cp38-cp38-win32.whl
13adf545732bb23a796914fe5f891a12bd74cf3d2986eed7b7eba2941eea1590 numpy-1.20.1-cp38-cp38-win_amd64.whl
104f5e90b143dbf298361a99ac1af4cf59131218a045ebf4ee5990b83cff5fab numpy-1.20.1-cp39-cp39-macosx_10_9_x86_64.whl
89e5336f2bec0c726ac7e7cdae181b325a9c0ee24e604704ed830d241c5e47ff numpy-1.20.1-cp39-cp39-manylinux2010_i686.whl
032be656d89bbf786d743fee11d01ef318b0781281241997558fa7950028dd29 numpy-1.20.1-cp39-cp39-manylinux2010_x86_64.whl
66b467adfcf628f66ea4ac6430ded0614f5cc06ba530d09571ea404789064adc numpy-1.20.1-cp39-cp39-manylinux2014_aarch64.whl
12e4ba5c6420917571f1a5becc9338abbde71dd811ce40b37ba62dec7b39af6d numpy-1.20.1-cp39-cp39-win32.whl
9c94cab5054bad82a70b2e77741271790304651d584e2cdfe2041488e753863b numpy-1.20.1-cp39-cp39-win_amd64.whl
9eb551d122fadca7774b97db8a112b77231dcccda8e91a5bc99e79890797175e numpy-1.20.1-pp37-pypy37_pp73-manylinux2010_x86_64.whl
9bf51d69ebb4ca9239e55bedc2185fe2c0ec222da0adee7ece4125414676846d numpy-1.20.1.tar.gz
3bc63486a870294683980d76ec1e3efc786295ae00128f9ea38e2c6e74d5a60a numpy-1.20.1.zip
### [`v1.20.0`](https://redirect.github.com/numpy/numpy/releases/tag/v1.20.0)
[Compare Source](https://redirect.github.com/numpy/numpy/compare/v1.19.5...v1.20.0)
# NumPy 1.20.0 Release Notes
This NumPy release is the largest so made to date, some 684 PRs
contributed by 184 people have been merged. See the list of highlights
below for more details. The Python versions supported for this release
are 3.7-3.9, support for Python 3.6 has been dropped. Highlights are
- Annotations for NumPy functions. This work is ongoing and
improvements can be expected pending feedback from users.
- Wider use of SIMD to increase execution speed of ufuncs. Much work
has been done in introducing universal functions that will ease use
of modern features across different hardware platforms. This work is
ongoing.
- Preliminary work in changing the dtype and casting implementations
in order to provide an easier path to extending dtypes. This work is
ongoing but enough has been done to allow experimentation and
feedback.
- Extensive documentation improvements comprising some 185 PR merges.
This work is ongoing and part of the larger project to improve
NumPy's online presence and usefulness to new users.
- Further cleanups related to removing Python 2.7. This improves code
readability and removes technical debt.
- Preliminary support for the upcoming Cython 3.0.
## New functions
##### The random.Generator class has a new `permuted` function.
The new function differs from `shuffle` and `permutation` in that the
subarrays indexed by an axis are permuted rather than the axis being
treated as a separate 1-D array for every combination of the other
indexes. For example, it is now possible to permute the rows or columns
of a 2-D array.
([gh-15121](https://redirect.github.com/numpy/numpy/pull/15121))
##### `sliding_window_view` provides a sliding window view for numpy arrays
`numpy.lib.stride\_tricks.sliding\_window\_view` constructs
views on numpy arrays that offer a sliding or moving window access to
the array. This allows for the simple implementation of certain
algorithms, such as running means.
([gh-17394](https://redirect.github.com/numpy/numpy/pull/17394))
##### \[numpy.broadcast_shapes]{.title-ref} is a new user-facing function
`numpy.broadcast\_shapes` gets the resulting shape from
broadcasting the given shape tuples against each other.
```{.python}
>>> np.broadcast_shapes((1, 2), (3, 1))
(3, 2)
>>> np.broadcast_shapes(2, (3, 1))
(3, 2)
>>> np.broadcast_shapes((6, 7), (5, 6, 1), (7,), (5, 1, 7))
(5, 6, 7)
```
([gh-17535](https://redirect.github.com/numpy/numpy/pull/17535))
## Deprecations
##### Using the aliases of builtin types like `np.int` is deprecated
For a long time, `np.int` has been an alias of the builtin `int`. This
is repeatedly a cause of confusion for newcomers, and existed mainly for
historic reasons.
These aliases have been deprecated. The table below shows the full list
of deprecated aliases, along with their exact meaning. Replacing uses of
items in the first column with the contents of the second column will
work identically and silence the deprecation warning.
The third column lists alternative NumPy names which may occasionally be
preferential. See also `basics.types`{.interpreted-text role="ref"} for
additional details.
| Deprecated name |Identical to | NumPy scalar type names |
| --------------- | ----------- | -----------------------
| `numpy.bool` | `bool` | `numpy.bool\_` |
| `numpy.int` | `int` | `numpy.int\_` (default), `numpy.int64`, or `numpy.int32` |
| `numpy.float` | `float` | `numpy.float64`, `numpy.float\_`, `numpy.double` (equivalent) |
| `numpy.complex` | `complex` | `numpy.complex128`, `numpy.complex\_`, `numpy.cdouble` (equivalent) |
| `numpy.object` | `object` | `numpy.object\_` |
| `numpy.str` | `str` | `numpy.str\_` |
| `numpy.long` | `int` | ` numpy.int\_ `(C `long`), `numpy.longlong` (largest integer type) |
| `numpy.unicode` | `str` | `numpy.unicode\_` |
To give a clear guideline for the vast majority of cases, for the types
`bool`, `object`, `str` (and `unicode`) using the plain version is
shorter and clear, and generally a good replacement. For `float` and
`complex` you can use `float64` and `complex128` if you wish to be more
explicit about the precision.
For `np.int` a direct replacement with `np.int_` or `int` is also good
and will not change behavior, but the precision will continue to depend
on the computer and operating system. If you want to be more explicit
and review the current use, you have the following alternatives:
- `np.int64` or `np.int32` to specify the precision exactly. This
ensures that results cannot depend on the computer or operating
system.
- `np.int_` or `int` (the default), but be aware that it depends on
the computer and operating system.
- The C types: `np.cint` (int), `np.int_` (long), `np.longlong`.
- `np.intp` which is 32bit on 32bit machines 64bit on 64bit machines.
This can be the best type to use for indexing.
When used with `np.dtype(...)` or `dtype=...` changing it to the NumPy
name as mentioned above will have no effect on the output. If used as a
scalar with:
np.float(123)
changing it can subtly change the result. In this case, the Python
version `float(123)` or `int(12.)` is normally preferable, although the
NumPy version may be useful for consistency with NumPy arrays (for
example, NumPy behaves differently for things like division by zero).
([gh-14882](https://redirect.github.com/numpy/numpy/pull/14882))
##### Passing `shape=None` to functions with a non-optional shape argument is deprecated
Previously, this was an alias for passing `shape=()`. This deprecation
is emitted by `PyArray\_IntpConverter` in the C API. If your
API is intended to support passing `None`, then you should check for
`None` prior to invoking the converter, so as to be able to distinguish
`None` and `()`.
([gh-15886](https://redirect.github.com/numpy/numpy/pull/15886))
##### Indexing errors will be reported even when index result is empty
In the future, NumPy will raise an IndexError when an integer array
index contains out of bound values even if a non-indexed dimension is of
length 0. This will now emit a DeprecationWarning. This can happen when
the array is previously empty, or an empty slice is involved:
arr1 = np.zeros((5, 0))
arr1[[20]]
arr2 = np.zeros((5, 5))
arr2[[20], :0]
Previously the non-empty index `[20]` was not checked for correctness.
It will now be checked causing a deprecation warning which will be
turned into an error. This also applies to assignments.
([gh-15900](https://redirect.github.com/numpy/numpy/pull/15900))
##### Inexact matches for `mode` and `searchside` are deprecated
Inexact and case insensitive matches for `mode` and `searchside` were
valid inputs earlier and will give a DeprecationWarning now. For
example, below are some example usages which are now deprecated and will
give a DeprecationWarning:
import numpy as np
arr = np.array([[3, 6, 6], [4, 5, 1]])
### mode: inexact match
np.ravel_multi_index(arr, (7, 6), mode="clap") # should be "clip"
### searchside: inexact match
np.searchsorted(arr[0], 4, side='random') # should be "right"
([gh-16056](https://redirect.github.com/numpy/numpy/pull/16056))
##### Deprecation of \[numpy.dual
This PR contains the following updates:
==1.19.1
->==1.21.0
By merging this PR, the issue #21 will be automatically resolved and closed:
Release Notes
numpy/numpy (numpy)
### [`v1.21.0`](https://redirect.github.com/numpy/numpy/releases/tag/v1.21.0) [Compare Source](https://redirect.github.com/numpy/numpy/compare/v1.20.3...v1.21.0) # NumPy 1.21.0 Release Notes The NumPy 1.21.0 release highlights are - continued SIMD work covering more functions and platforms, - initial work on the new dtype infrastructure and casting, - universal2 wheels for Python 3.8 and Python 3.9 on Mac, - improved documentation, - improved annotations, - new `PCG64DXSM` bitgenerator for random numbers. In addition there are the usual large number of bug fixes and other improvements. The Python versions supported for this release are 3.7-3.9. Official support for Python 3.10 will be added when it is released. :warning: Warning: there are unresolved problems compiling NumPy 1.21.0 with gcc-11.1 . - Optimization level `-O3` results in many wrong warnings when running the tests. - On some hardware NumPy will hang in an infinite loop. ## New functions ##### Add PCG64DXSM BitGenerator Uses of the PCG64 BitGenerator in a massively-parallel context have been shown to have statistical weaknesses that were not apparent at the first release in numpy 1.17. Most users will never observe this weakness and are safe to continue to use PCG64. We have introduced a new PCG64DXSM BitGenerator that will eventually become the new default BitGenerator implementation used by `default_rng` in future releases. PCG64DXSM solves the statistical weakness while preserving the performance and the features of PCG64. See `upgrading-pcg64` for more details. ([gh-18906](https://redirect.github.com/numpy/numpy/pull/18906)) ## Expired deprecations - The `shape` argument `numpy.unravel_index` cannot be passed as `dims` keyword argument anymore. (Was deprecated in NumPy 1.16.) ([gh-17900](https://redirect.github.com/numpy/numpy/pull/17900)) - The function `PyUFunc_GenericFunction` has been disabled. It was deprecated in NumPy 1.19. Users should call the ufunc directly using the Python API. ([gh-18697](https://redirect.github.com/numpy/numpy/pull/18697)) - The function `PyUFunc_SetUsesArraysAsData` has been disabled. It was deprecated in NumPy 1.19. ([gh-18697](https://redirect.github.com/numpy/numpy/pull/18697)) - The class `PolyBase` has been removed (deprecated in numpy 1.9.0). Please use the abstract `ABCPolyBase` class instead. ([gh-18963](https://redirect.github.com/numpy/numpy/pull/18963)) - The unused `PolyError` and `PolyDomainError` exceptions are removed. ([gh-18963](https://redirect.github.com/numpy/numpy/pull/18963)) ## Deprecations ##### The `.dtype` attribute must return a `dtype` A `DeprecationWarning` is now given if the `.dtype` attribute of an object passed into `np.dtype` or as a `dtype=obj` argument is not a dtype. NumPy will stop attempting to recursively coerce the result of `.dtype`. ([gh-13578](https://redirect.github.com/numpy/numpy/pull/13578)) ##### Inexact matches for `numpy.convolve` and `numpy.correlate` are deprecated `numpy.convolve` and `numpy.correlate` now emit a warning when there are case insensitive and/or inexact matches found for `mode` argument in the functions. Pass full `"same"`, `"valid"`, `"full"` strings instead of `"s"`, `"v"`, `"f"` for the `mode` argument. ([gh-17492](https://redirect.github.com/numpy/numpy/pull/17492)) ##### `np.typeDict` has been formally deprecated `np.typeDict` is a deprecated alias for `np.sctypeDict` and has been so for over 14 years ([6689502](https://redirect.github.com/numpy/numpy/commit/668950285c407593a368336ff2e737c5da84af7d)). A deprecation warning will now be issued whenever getting `np.typeDict`. ([gh-17586](https://redirect.github.com/numpy/numpy/pull/17586)) ##### Exceptions will be raised during array-like creation When an object raised an exception during access of the special attributes `__array__` or `__array_interface__`, this exception was usually ignored. A warning is now given when the exception is anything but AttributeError. To silence the warning, the type raising the exception has to be adapted to raise an `AttributeError`. ([gh-19001](https://redirect.github.com/numpy/numpy/pull/19001)) ##### Four `ndarray.ctypes` methods have been deprecated Four methods of the `ndarray.ctypes` object have been deprecated, as they are (undocumentated) implementation artifacts of their respective properties. The methods in question are: - `_ctypes.get_data` (use `_ctypes.data` instead) - `_ctypes.get_shape` (use `_ctypes.shape` instead) - `_ctypes.get_strides` (use `_ctypes.strides` instead) - `_ctypes.get_as_parameter` (use `_ctypes._as_parameter_` instead) ([gh-19031](https://redirect.github.com/numpy/numpy/pull/19031)) ## Expired deprecations - The `shape` argument `numpy.unravel_index`] cannot be passed as `dims` keyword argument anymore. (Was deprecated in NumPy 1.16.) ([gh-17900](https://redirect.github.com/numpy/numpy/pull/17900)) - The function `PyUFunc_GenericFunction` has been disabled. It was deprecated in NumPy 1.19. Users should call the ufunc directly using the Python API. ([gh-18697](https://redirect.github.com/numpy/numpy/pull/18697)) - The function `PyUFunc_SetUsesArraysAsData` has been disabled. It was deprecated in NumPy 1.19. ([gh-18697](https://redirect.github.com/numpy/numpy/pull/18697)) ##### Remove deprecated `PolyBase` and unused `PolyError` and `PolyDomainError` The class `PolyBase` has been removed (deprecated in numpy 1.9.0). Please use the abstract `ABCPolyBase` class instead. Furthermore, the unused `PolyError` and `PolyDomainError` exceptions are removed from the `numpy.polynomial`. ([gh-18963](https://redirect.github.com/numpy/numpy/pull/18963)) ## Compatibility notes ##### Error type changes in universal functions The universal functions may now raise different errors on invalid input in some cases. The main changes should be that a `RuntimeError` was replaced with a more fitting `TypeError`. When multiple errors were present in the same call, NumPy may now raise a different one. ([gh-15271](https://redirect.github.com/numpy/numpy/pull/15271)) ##### `__array_ufunc__` argument validation NumPy will now partially validate arguments before calling `__array_ufunc__`. Previously, it was possible to pass on invalid arguments (such as a non-existing keyword argument) when dispatch was known to occur. ([gh-15271](https://redirect.github.com/numpy/numpy/pull/15271)) ##### `__array_ufunc__` and additional positional arguments Previously, all positionally passed arguments were checked for `__array_ufunc__` support. In the case of `reduce`, `accumulate`, and `reduceat` all arguments may be passed by position. This means that when they were passed by position, they could previously have been asked to handle the ufunc call via `__array_ufunc__`. Since this depended on the way the arguments were passed (by position or by keyword), NumPy will now only dispatch on the input and output array. For example, NumPy will never dispatch on the `where` array in a reduction such as `np.add.reduce`. ([gh-15271](https://redirect.github.com/numpy/numpy/pull/15271)) ##### Validate input values in `Generator.uniform` Checked that `high - low >= 0` in `np.random.Generator.uniform`. Raises `ValueError` if `low > high`. Previously out-of-order inputs were accepted and silently swapped, so that if `low > high`, the value generated was `high + (low - high) * random()`. ([gh-17921](https://redirect.github.com/numpy/numpy/pull/17921)) ##### `/usr/include` removed from default include paths The default include paths when building a package with `numpy.distutils` no longer include `/usr/include`. This path is normally added by the compiler, and hardcoding it can be problematic. In case this causes a problem, please open an issue. A workaround is documented in PR 18658. ([gh-18658](https://redirect.github.com/numpy/numpy/pull/18658)) ##### Changes to comparisons with `dtype=...` When the `dtype=` (or `signature`) arguments to comparison ufuncs (`equal`, `less`, etc.) is used, this will denote the desired output dtype in the future. This means that: > np.equal(2, 3, dtype=object) will give a `FutureWarning` that it will return an `object` array in the future, which currently happens for: > np.equal(None, None, dtype=object) due to the fact that `np.array(None)` is already an object array. (This also happens for some other dtypes.) Since comparisons normally only return boolean arrays, providing any other dtype will always raise an error in the future and give a `DeprecationWarning` now. ([gh-18718](https://redirect.github.com/numpy/numpy/pull/18718)) ##### Changes to `dtype` and `signature` arguments in ufuncs The universal function arguments `dtype` and `signature` which are also valid for reduction such as `np.add.reduce` (which is the implementation for `np.sum`) will now issue a warning when the `dtype` provided is not a "basic" dtype. NumPy almost always ignored metadata, byteorder or time units on these inputs. NumPy will now always ignore it and raise an error if byteorder or time unit changed. The following are the most important examples of changes which will give the error. In some cases previously the information stored was not ignored, in all of these an error is now raised: ### Previously ignored the byte-order (affect if non-native) np.add(3, 5, dtype=">i32") ### The biggest impact is for timedelta or datetimes: arr = np.arange(10, dtype="m8[s]") ### The examples always ignored the time unit "ns": np.add(arr, arr, dtype="m8[ns]") np.maximum.reduce(arr, dtype="m8[ns]") ### The following previously did use "ns" (as opposed to `arr.dtype`) np.add(3, 5, dtype="m8[ns]") # Now return generic time units np.maximum(arr, arr, dtype="m8[ns]") # Now returns "s" (from `arr`) The same applies for functions like `np.sum` which use these internally. This change is necessary to achieve consistent handling within NumPy. If you run into these, in most cases pass for example `dtype=np.timedelta64` which clearly denotes a general `timedelta64` without any unit or byte-order defined. If you need to specify the output dtype precisely, you may do so by either casting the inputs or providing an output array using `out=`. NumPy may choose to allow providing an exact output `dtype` here in the future, which would be preceded by a `FutureWarning`. ([gh-18718](https://redirect.github.com/numpy/numpy/pull/18718)) ##### Ufunc `signature=...` and `dtype=` generalization and `casting` The behaviour for `np.ufunc(1.0, 1.0, signature=...)` or `np.ufunc(1.0, 1.0, dtype=...)` can now yield different loops in 1.21 compared to 1.20 because of changes in promotion. When `signature` was previously used, the casting check on inputs was relaxed, which could lead to downcasting inputs unsafely especially if combined with `casting="unsafe"`. Casting is now guaranteed to be safe. If a signature is only partially provided, for example using `signature=("float64", None, None)`, this could lead to no loop being found (an error). In that case, it is necessary to provide the complete signature to enforce casting the inputs. If `dtype="float64"` is used or only outputs are set (e.g. `signature=(None, None, "float64")` the is unchanged. We expect that very few users are affected by this change. Further, the meaning of `dtype="float64"` has been slightly modified and now strictly enforces only the correct output (and not input) DTypes. This means it is now always equivalent to: signature=(None, None, "float64") (If the ufunc has two inputs and one output). Since this could lead to no loop being found in some cases, NumPy will normally also search for the loop: signature=("float64", "float64", "float64") if the first search failed. In the future, this behaviour may be customized to achieve the expected results for more complex ufuncs. (For some universal functions such as `np.ldexp` inputs can have different DTypes.) ([gh-18880](https://redirect.github.com/numpy/numpy/pull/18880)) ##### Distutils forces strict floating point model on clang NumPy distutils will now always add the `-ffp-exception-behavior=strict` compiler flag when compiling with clang. Clang defaults to a non-strict version, which allows the compiler to generate code that does not set floating point warnings/errors correctly. ([gh-19049](https://redirect.github.com/numpy/numpy/pull/19049)) ## C API changes ##### Use of `ufunc->type_resolver` and "type tuple" NumPy now normalizes the "type tuple" argument to the type resolver functions before calling it. Note that in the use of this type resolver is legacy behaviour and NumPy will not do so when possible. Calling `ufunc->type_resolver` or `PyUFunc_DefaultTypeResolver` is strongly discouraged and will now enforce a normalized type tuple if done. Note that this does not affect providing a type resolver, which is expected to keep working in most circumstances. If you have an unexpected use-case for calling the type resolver, please inform the NumPy developers so that a solution can be found. ([gh-18718](https://redirect.github.com/numpy/numpy/pull/18718)) ## New Features ##### Added a mypy plugin for handling platform-specific `numpy.number` precisions A [mypy](http://mypy-lang.org/) plugin is now available for automatically assigning the (platform-dependent) precisions of certain `numpy.number` subclasses, including the likes of `numpy.int_`, `numpy.intp` and `numpy.longlong`. See the documentation on `scalar types