==============================
This release primarily adds support for Python 3.13 and Numpy 2.0.
NiBabel 6.0 will drop support for Numpy 1.x.
New features
------------
* Update NIfTI extension protocol to include ``.content : bytes``, ``.text : str`` and
``.json() : dict`` properties/methods for accessing extension contents.
Exceptions will be raised on ``.text`` and ``.json()`` if conversion fails. (pr/1336) (CM)
Enhancements
------------
* Ability to read data from many multiframe DICOM files that previously generated errors (pr/1340)
(Brendan Moloney, reviewed by CM)
* ``nib-nifti-dx`` now supports NIfTI-2 files with a ``--nifti2`` flag (pr/1323) (CM)
* Update :mod:`nibabel.streamlines.tractogram` to support ragged arrays. (pr/1291)
(Serge Koudoro, reviewed by CM)
* Filter numpy ``UserWarning`` on ``np.finfo(np.longdouble)``. This can occur on
Windows systems, but it's done in the context of checking for the problem that
is being warned against, so there's no need to be noisy. (pr/1310)
(Joshua Newton, reviewed by CM)
* Improve error message for for dicomwrapper errors in shape calculation (pr/1302)
(YOH, reviewed by CM)
* Support "flat" ASCII-encoded GIFTI DataArrays (pr/1298) (PM, reviewed by CM)
Bug fixes
---------
* Fix location initialization/update in OrthoSlicer3D for permuted axes (pr/1319, pr/1350)
(Guillaume Becq, reviewed by CM)
* Fix DICOM scaling, making frame filtering explicit (pr/1342) (Brendan Moloney, reviewed by CM)
* Fixed multiframe DICOM issue where data could be flipped along slice dimension relative to the
affine (pr/1340) (Brendan Moloney, reviewed by CM)
* Fixed multiframe DICOM issue where ``image_position`` and the translation component in the
``affine`` could be incorrect (pr/1340) (Brendan Moloney, reviewed by CM)
Maintenance
-----------
* Numpy 2.0 compatibility and addressing deprecations in numpy API
(pr/1304, pr/1330, pr/1331, pr/1334, pr/1337) (Jon Haitz Legarreta Gorroño, CM)
* Python 3.13 compatibility (pr/1315) (Sandro from the Fedora Project, reviewed by CM)
* Testing on Python 3.13 with free-threading (pr/1339) (CM)
* Testing on ARM64 Mac OS runners (pr/1320) (CM)
* Proactively address deprecations in coming Python versions (pr/1329, pr/1332, pr/1333)
(Jon Haitz Legarreta Gorroño, reviewed by CM)
* Replace nose-era ``setup()`` and ``teardown()`` functions with pytest equivalents
(pr/1325) (Sandro from the Fedora Project, reviewed by Étienne Mollier and CM)
* Transitioned from blue/isort/flake8 to `ruff <https://docs.astral.sh/ruff/>`__. (pr/1289)
(Dimitri Papadopoulos, reviewed by CM)
* Vetted and added various rules to the ruff configuration for auto-formatting and style
guide enforcement. (pr/1321, pr/1351, pr/1352, pr/1353, pr/1354, pr/1355, pr/1357, pr/1358,
pr/1359, pr/1360, pr/1361, pr/1362, pr/1363, pr/1364, pr/1368, pr/1369)
(Dimitri Papadopoulos, reviewed by CM)
* Fixing typos when found. (pr/1313, pr/1370) (MB, Dimitri Papadopoulos)
* Applied Repo-Review suggestions (Dimitri Papadopoulos, reviewed by CM)
API changes and deprecations
----------------------------
* Raise :class:`~nibabel.spatialimages.HeaderDataError` from
:func:`~nibabel.nifti1.Nifti1Header.set_qform` if the affine fails to decompose.
This would previously result in :class:`numpy.linalg.LinAlgError`. (pr/1227) (CM)
* The :func:`nibabel.onetime.auto_attr` module can be replaced by :func:`functools.cached_property`
in all supported versions of Python. This alias may be removed in future versions. (pr/1341) (CM)
* Removed the deprecated ``nisext`` (setuptools extensions) package. (pr/1290) (CM, reviewed by MB)