.. currentmodule:: numpy

==========================
NumPy 1.26.1 Release Notes
==========================

NumPy 1.26.1 is a maintenance release that fixes bugs and regressions
discovered after the 1.26.0 release. In addition, it adds new functionality for
detecting BLAS and LAPACK when building from source. Highlights are:

- Improved detection of BLAS and LAPACK libraries for meson builds
- Pickle compatibility with the upcoming NumPy 2.0.

The 1.26.release series is the last planned minor release series before NumPy
2.0. The Python versions supported by this release are 3.9-3.12.


Build system changes
====================

Improved BLAS/LAPACK detection and control
------------------------------------------

Auto-detection for a number of BLAS and LAPACK is now implemented for Meson.
By default, the build system will try to detect MKL, Accelerate (on macOS
>=13.3), OpenBLAS, FlexiBLAS, BLIS and reference BLAS/LAPACK. Support for MKL
was significantly improved, and support for FlexiBLAS was added.

New command-line flags are available to further control the selection of the
BLAS and LAPACK libraries to build against.

To select a specific library, use the config-settings interface via ``pip`` or
``pypa/build``. E.g., to select ``libblas``/``liblapack``, use::

    $ pip install numpy -Csetup-args=-Dblas=blas -Csetup-args=-Dlapack=lapack
    $ # OR
    $ python -m build . -Csetup-args=-Dblas=blas -Csetup-args=-Dlapack=lapack

This works not only for the libraries named above, but for any library that
Meson is able to detect with the given name through ``pkg-config`` or CMake.

Besides ``-Dblas`` and ``-Dlapack``, a number of other new flags are available
to control BLAS/LAPACK selection and behavior:

- ``-Dblas-order`` and ``-Dlapack-order``: a list of library names to search
  for in order, overriding the default search order.
- ``-Duse-ilp64``: if set to ``true``, use ILP64 (64-bit integer) BLAS and
  LAPACK. Note that with this release, ILP64 support has been extended to
  include MKL and FlexiBLAS. OpenBLAS and Accelerate were supported in previous
  releases.
- ``-Dallow-noblas``: if set to ``true``, allow NumPy to build with its
  internal (very slow) fallback routines instead of linking against an external
  BLAS/LAPACK library. *The default for this flag may be changed to ``true``
  in a future 1.26.x release, however for 1.26.1 we'd prefer to keep it as
  ``false`` because if failures to detect an installed library are happening,
  we'd like a bug report for that, so we can quickly assess whether the new
  auto-detection machinery needs further improvements.*
- ``-Dmkl-threading``: to select the threading layer for MKL. There are four
  options: ``seq``, ``iomp``, ``gomp`` and ``tbb``. The default is ``auto``,
  which selects from those four as appropriate given the version of MKL
  selected.
- ``-Dblas-symbol-suffix``: manually select the symbol suffix to use for the
  library - should only be needed for linking against libraries built in a
  non-standard way.


New features
============

``numpy._core`` submodule stubs
-------------------------------

``numpy._core`` submodule stubs were added to provide compatibility with
pickled arrays created using NumPy 2.0 when running Numpy 1.26.


Contributors
============

A total of 13 people contributed to this release.  People with a "+" by their
names contributed a patch for the first time.

* Andrew Nelson
* Anton Prosekin +
* Charles Harris
* Chongyun Lee +
* Ivan A. Melnikov +
* Jake Lishman +
* Mahder Gebremedhin +
* Mateusz Sokół
* Matti Picus
* Munira Alduraibi +
* Ralf Gommers
* Rohit Goswami
* Sayed Adel


Pull requests merged
====================

A total of 20 pull requests were merged for this release.

* `#24742 <https://github.com/numpy/numpy/pull/24742>`__: MAINT: Update cibuildwheel version
* `#24748 <https://github.com/numpy/numpy/pull/24748>`__: MAINT: fix version string in wheels built with setup.py
* `#24771 <https://github.com/numpy/numpy/pull/24771>`__: BLD, BUG: Fix build failure for host flags e.g. ``-march=native``...
* `#24773 <https://github.com/numpy/numpy/pull/24773>`__: DOC: Updated the f2py docs to remove a note on -fimplicit-none
* `#24776 <https://github.com/numpy/numpy/pull/24776>`__: BUG: Fix SIMD f32 trunc test on s390x when baseline is none
* `#24785 <https://github.com/numpy/numpy/pull/24785>`__: BLD: add libquadmath to licences and other tweaks (#24753)
* `#24786 <https://github.com/numpy/numpy/pull/24786>`__: MAINT: Activate ``use-compute-credits`` for Cirrus.
* `#24803 <https://github.com/numpy/numpy/pull/24803>`__: BLD: updated vendored-meson/meson for mips64 fix
* `#24804 <https://github.com/numpy/numpy/pull/24804>`__: MAINT: fix licence path win
* `#24813 <https://github.com/numpy/numpy/pull/24813>`__: BUG: Fix order of Windows OS detection macros.
* `#24831 <https://github.com/numpy/numpy/pull/24831>`__: BUG, SIMD: use scalar cmul on bad Apple clang x86_64 (#24828)
* `#24840 <https://github.com/numpy/numpy/pull/24840>`__: BUG: Fix DATA statements for f2py
* `#24870 <https://github.com/numpy/numpy/pull/24870>`__: API: Add ``NumpyUnpickler`` for backporting
* `#24872 <https://github.com/numpy/numpy/pull/24872>`__: MAINT: Xfail test failing on PyPy.
* `#24879 <https://github.com/numpy/numpy/pull/24879>`__: BLD: fix math func feature checks, fix FreeBSD build, add CI...
* `#24899 <https://github.com/numpy/numpy/pull/24899>`__: ENH: meson: implement BLAS/LAPACK auto-detection and many CI...
* `#24902 <https://github.com/numpy/numpy/pull/24902>`__: DOC: add a 1.26.1 release notes section for BLAS/LAPACK build...
* `#24906 <https://github.com/numpy/numpy/pull/24906>`__: MAINT: Backport ``numpy._core`` stubs. Remove ``NumpyUnpickler``
* `#24911 <https://github.com/numpy/numpy/pull/24911>`__: MAINT: Bump pypa/cibuildwheel from 2.16.1 to 2.16.2
* `#24912 <https://github.com/numpy/numpy/pull/24912>`__: BUG: loongarch doesn't use REAL(10)

