diff options
| author | Charles Harris <charlesr.harris@gmail.com> | 2022-01-01 09:50:18 -0700 |
|---|---|---|
| committer | Charles Harris <charlesr.harris@gmail.com> | 2022-01-01 09:50:18 -0700 |
| commit | b7461971eb5a4b070cdba9e51154d72d2ca7e286 (patch) | |
| tree | 0b2767a3f8ac10304e98dd820ce3a3643ec09c6c /doc/source/release | |
| parent | f224ca3c43260730d43636a42d4670735f144906 (diff) | |
| download | numpy-b7461971eb5a4b070cdba9e51154d72d2ca7e286.tar.gz | |
REL: Update main after 1.22.0 release.
Diffstat (limited to 'doc/source/release')
| -rw-r--r-- | doc/source/release/1.22.0-notes.rst | 433 |
1 files changed, 423 insertions, 10 deletions
diff --git a/doc/source/release/1.22.0-notes.rst b/doc/source/release/1.22.0-notes.rst index 0760a3dd7..5e215de42 100644 --- a/doc/source/release/1.22.0-notes.rst +++ b/doc/source/release/1.22.0-notes.rst @@ -3,43 +3,456 @@ ========================== NumPy 1.22.0 Release Notes ========================== +NumPy 1.22.0 is a big release featuring the work of 153 contributors spread +over 609 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 + applications 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. +* The universal functions have been refactored to implement most of + :ref:`NEP 43 <NEP43>`. This also unlocks the ability to experiment with the + future DType API. +* A new configurable allocator for use by downstream projects. -Highlights -========== +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. -New functions -============= + +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``. + +(`gh-19539 <https://github.com/numpy/numpy/pull/19539>`__) + +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. + +(`gh-19615 <https://github.com/numpy/numpy/pull/19615>`__) Deprecations ============ +Use delimiter rather than delimitor as kwarg in mrecords +-------------------------------------------------------- +The misspelled keyword argument ``delimitor`` of +``numpy.ma.mrecords.fromtextfile()`` has been changed to ``delimiter``, using +it will emit a deprecation warning. -Future Changes -============== +(`gh-19921 <https://github.com/numpy/numpy/pull/19921>`__) +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. -Expired deprecations -==================== +(`gh-20000 <https://github.com/numpy/numpy/pull/20000>`__) + +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. + +(`gh-20201 <https://github.com/numpy/numpy/pull/20201>`__) 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. + +(`gh-19479 <https://github.com/numpy/numpy/pull/19479>`__) + +Removed floor division support for complex types +------------------------------------------------ +Floor division of complex types will now result in a ``TypeError`` + +.. code-block:: python + + >>> a = np.arange(10) + 1j* np.arange(10) + >>> a // 1 + TypeError: ufunc 'floor_divide' not supported for the input types... + +(`gh-19135 <https://github.com/numpy/numpy/pull/19135>`__) + +``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. + +(`gh-19356 <https://github.com/numpy/numpy/pull/19356>`__) + +Python 3.7 is no longer supported +--------------------------------- +Python support has been dropped. This is rather strict, there are changes that +require Python >= 3.8. + +(`gh-19665 <https://github.com/numpy/numpy/pull/19665>`__) + +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 ``np.set_printoptions(legacy="1.21")``. + +(`gh-19687 <https://github.com/numpy/numpy/pull/19687>`__) + +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 :math:`2^{64}` on platforms +that do not support 128-bit integers(e.g., Windows and 32-bit Linux). + +(`gh-20049 <https://github.com/numpy/numpy/pull/20049>`__) + +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 ``numpy.float32``. + +(`gh-20314 <https://github.com/numpy/numpy/pull/20314>`__) + 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. + +(`gh-19259 <https://github.com/numpy/numpy/pull/19259>`__) + +Experimental exposure of future DType and UFunc API +--------------------------------------------------- +The new header ``experimental_public_dtype_api.h`` allows to experiment with +future API for improved universal function and especially user DType support. +At this time it is advisable to experiment using the development version +of NumPy since some changes are expected and new features will be unlocked. + +(`gh-19919 <https://github.com/numpy/numpy/pull/19919>`__) + 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 :ref:`data_memory` reference docs. +Also add a ``NUMPY_WARN_IF_NO_MEM_POLICY`` override to warn on dangerous use +of transfering ownership by setting ``NPY_ARRAY_OWNDATA``. + +.. _`NEP 49`: https://numpy.org/neps/nep-0049.html + +(`gh-17582 <https://github.com/numpy/numpy/pull/17582>`__) + +Implementation of the NEP 47 (adopting the array API standard) +-------------------------------------------------------------- +An initial implementation of `NEP 47`_ (adoption 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 +<https://data-apis.org/array-api/latest/index.html>`_ 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. + +.. _`NEP 47`: https://numpy.org/neps/nep-0047-array-api-standard.html + +(`gh-18585 <https://github.com/numpy/numpy/pull/18585>`__) + +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. + +.. _`Doxygen`: https://www.doxygen.nl/index.html +.. _`Breathe`: https://breathe.readthedocs.io/en/latest/ + +(`gh-18884 <https://github.com/numpy/numpy/pull/18884>`__) + +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 ``ctypes.c_int64``. + +To enable the plugin, one must add it to their mypy `configuration file`_: + +.. code-block:: ini + + [mypy] + plugins = numpy.typing.mypy_plugin + + +.. _mypy: http://mypy-lang.org/ +.. _configuration file: https://mypy.readthedocs.io/en/stable/config_file.html +.. _`numpy/numpy#17843`: https://github.com/numpy/numpy/pull/17843 + +(`gh-19062 <https://github.com/numpy/numpy/pull/19062>`__) + +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``. + +(`gh-19083 <https://github.com/numpy/numpy/pull/19083>`__) + +``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. + +(`gh-19211 <https://github.com/numpy/numpy/pull/19211>`__) + +``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++. + +.. code-block:: python + + >>> np.uint32(1023).bit_count() + 10 + >>> np.int32(-127).bit_count() + 7 + +(`gh-19355 <https://github.com/numpy/numpy/pull/19355>`__) + +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. + +(`gh-19459 <https://github.com/numpy/numpy/pull/19459>`__) + +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. + +(`gh-19513 <https://github.com/numpy/numpy/pull/19513>`__) + +Added support for LoongArch +--------------------------- +LoongArch is a new instruction set, numpy compilation failure on LoongArch +architecture, so add the commit. + +(`gh-19527 <https://github.com/numpy/numpy/pull/19527>`__) + +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. + +(`gh-19754 <https://github.com/numpy/numpy/pull/19754>`__) + +``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. + +.. code-block:: python + + >>> np.float32(-2.0).is_integer() + True + >>> np.float64(3.2).is_integer() + False + >>> np.int32(-2).is_integer() + True + +(`gh-19803 <https://github.com/numpy/numpy/pull/19803>`__) + +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. + +(`gh-19805 <https://github.com/numpy/numpy/pull/19805>`__) + +``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. + +.. code-block:: python + + >>> import numpy as np + >>> from typing import Any + + >>> np.ndarray[Any, np.dtype[np.float64]] + numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]] + +(`gh-19879 <https://github.com/numpy/numpy/pull/19879>`__) + Improvements ============ +``ctypeslib.load_library`` can now take any path-like object +------------------------------------------------------------ +All parameters in the can now take any :term:`python:path-like object`. +This includes the likes of strings, bytes and objects implementing the +:meth:`__fspath__<os.PathLike.__fspath__>` protocol. + +(`gh-17530 <https://github.com/numpy/numpy/pull/17530>`__) + +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``. + +(`gh-18536 <https://github.com/numpy/numpy/pull/18536>`__) + +``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. + +(`gh-19151 <https://github.com/numpy/numpy/pull/19151>`__) + +``numpy.fromregex`` now accepts ``os.PathLike`` implementations +--------------------------------------------------------------- +``numpy.fromregex`` now accepts objects implementing the ``__fspath__<os.PathLike>`` +protocol, *e.g.* ``pathlib.Path``. + +(`gh-19680 <https://github.com/numpy/numpy/pull/19680>`__) + +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. + +(`gh-19857 <https://github.com/numpy/numpy/pull/19857>`__) + +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`` + +(`gh-20027 <https://github.com/numpy/numpy/pull/20027>`__) + +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). + +(`gh-20217 <https://github.com/numpy/numpy/pull/20217>`__) + +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. + +(`gh-19478 <https://github.com/numpy/numpy/pull/19478>`__) + +OpenBLAS v0.3.17 +---------------- +Update the OpenBLAS used in testing and in wheels to v0.3.17 + +(`gh-19462 <https://github.com/numpy/numpy/pull/19462>`__) -Changes -======= |
