Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
195 changes: 195 additions & 0 deletions docs/src/whatsnew/3.15.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
.. include:: ../common_links.inc

v3.15 (17 Mar 2026 [release candidate])
***************************************

This document explains the changes made to Iris for this release
(:doc:`View all changes <index>`.)


.. dropdown:: v3.15 Release Highlights
:color: primary
:icon: info
:animate: fade-in
:open:

The highlights for this minor release of Iris include:

* Overhauling the user documentation structure to maximise discoverability
and engagement with user needs going forward.

* NIMROD loader improvements to expand the types of NIMROD files Iris can load.

* Documentation page explaining how to access files in S3 buckets.

* Compatibility with Pandas version 3.

* Several large pieces of work **behind the scenes** to put Iris in the best
possible place for the future. To be continued!

* Investigating how Iris can provide native `Zarr`_ loading and saving
(beyond what is already possible via `ncdata`_).

* Completed a 2-year project converting all tests from unittest to pytest,
including compliance with the Ruff `PT` standard.

* In-progress work to fully support arrays of characters/strings.

* Investigating how Iris can integrate with the `Pint`_ units library, to
increase interoperability with the wider scientific Python ecosystem.

* Layout groundwork for making Iris fully Pip-installable, reducing the
dependency footprint and improving handling of optional dependencies.

And finally, get in touch with us on :issue:`GitHub<new/choose>` if you have
any issues or feature requests for improving Iris. Enjoy!


📢 Announcements
================

#. We've had a makeover! ✨ All user documentation pages have been reorganised
into a new structure: :doc:`/user_manual/index`. This restructure is to
maximise discoverability of the available pages, as well as embracing the
`Diataxis`_ framework for better engagement with user needs going forward.


✨ Features
===========

#. `@ukmo-ccbunney`_ added new *cube component* convenience methods that allow
for manipulation of any named dimensional component that can be attached to a
cube (i.e. coordinates, cell measures and ancillary variables) via a common
interface. The following methods are provided:

* :func:`~iris.cube.Cube.component` and :func:`~iris.cube.Cube.components`:
get one or more components from a cube
* :func:`~iris.cube.Cube.add_component`: add a component to a cube
* :func:`~iris.cube.Cube.remove_component`: remove a component from a cube
* :func:`~iris.cube.Cube.component_dims`: return the cube dimension(s)
spanned by a component.

(:issue:`5819`, :pull:`6854`)

#. `@ESadek-MO`_ added functionality to allow :func:`~iris.cube.Cube.concatenate`,
:func:`~iris.cube.Cube.rolling_window` and :func:`~iris.cube.Cube.intersection`
to work with dataless cubes. (:pull:`6860`, :pull:`6757`)

#. `@HGWright`_ added to the Nimrod loader to expand the types of Nimrod files it can load. This includes selecting which Nimrod table to use the data entry headers from. (:issue:`4505`, :pull:`6763`)

#. `@stephenworsley`_ added the coordinate method :meth:`~iris.coords.Coord.as_string_arrays`
and the class :class:`~iris.coords.PointBoundStrings` to help represent points and
bounds data on coordinates. This adapts code suggestions by `@rcomer`_ and `@vsherratt`_. (:issue:`4508`, :pull:`6978`)

🐛 Bugs Fixed
=============

#. `@ukmo-ccbunney`_ changed formatting of numpy scalars attributes when generating a
Cube/Coord summary to use ``str`` representation instead of ``repr``.
(:pull:`6966`, :issue:`6692`)


💣 Incompatible Changes
=======================

#. `@hsteptoe`_ and `@ESadek-MO`_ (reviewer) disabled the ``copy`` behaviour
across :mod:`iris.pandas`, as it is incompatible with Pandas v3 (see
`New pandas v3 copy behaviour`_). The parameter is still present, to help
mitigate disruption, but now marked for deprecation. (:pull:`6948`,
:issue:`6761`)


🚀 Performance Enhancements
===========================

#. Note that ``libnetcdf`` version 4.10.0 (released 25th Feb 2026) improves
NetCDF loading and saving performance, measured between 20-40% in Iris'
benchmarks (:issue:`6984`).


🔥 Deprecations
===============

#. `@ESadek-MO`_ has deprecated the :class:`~iris.tests.IrisTest` class, and other unittest-based
testing conveniences in favour of the conveniences found in :mod:`iris/tests/_shared_utils.py`.
(:pull:`6950`)

#. `@hsteptoe`_ has deprecated the use of the `copy` kwarg across :mod:`iris.pandas` to reflect changes
to the default behaviour of pandas v3 `New pandas v3 copy behaviour`_. (:pull:`6948`)


🔗 Dependencies
===============

#. `@hsteptoe`_ and `@ESadek-MO`_ (reviewer) made :mod:`iris.pandas`
interoperability compatible with pandas v3. (:pull:`6948`, :issue:`6761`)


📚 Documentation
================

#. `@tkknight`_ reduced the space used on the documentation homepage by the quick
link cards to allow for easier reading. (:pull:`6886`)

#. `@tkknight`_ added a gallery carousel to the documentation homepage. (:pull:`6884`)

#. :user:`bjlittle` added the ``:user:`` `extlinks`_ ``github`` user convenience.
(:pull:`6931`)

#. `@pp-mo`_ added a page on how to access datafiles in S3 buckets:
:doc:`/user_manual/tutorial/s3_io`.
(:issue:`6374`, :pull:`6951`)

#. `@trexfeathers`_, `@stephenworsley`_, `@ESadek-MO`_ and `@tkknight`_ reorganised **all**
user documentation pages into a new structure: :doc:`/user_manual/index`.
This restructure is to maximise discoverability of the available pages, as
well as embracing the `Diataxis`_ framework for better engagement with user
needs going forward. (:issue:`6511`, :pull:`6868`)


💼 Internal
===========

#. `@trexfeathers`_ and `@hdyson`_ updated ``_ff_replacement.py`` to clarify
that Iris supports Ancillaries. (:pull:`6792`)

#. `@trexfeathers`_ adapted ``test_OceanSigmaZFactory`` for NumPy 2.4 - only
0-dimensional arrays can now be converted to scalars. (:pull:`6876`)

#. `@trexfeathers`_ updated benchmarking to source Mule from its new home:
https://github.com/MetOffice/mule . (:pull:`6879`)

#. `@tkknight`_ removed flake8, we have ruff now instead. (:pull:`6889`)

#. `@trexfeathers`_ and `@ukmo-ccbunney`_ updated CI to support Python 3.14
inline with `SPEC0 Minimum Supported Dependencies`_. Note: `pyvista` (and
hence `geovista`) is not yet compatible with Python 3.14, so
:mod:`iris.experimental.geovista` is currently only available for
Python \<3.14. (:pull:`6816`, :issue:`6775`)

#. `@ESadek-MO`_, `@trexfeathers`_, `@bjlittle`_, `@HGWright`_, `@pp-mo`_,
`@stephenworsley`_ and `@ukmo-ccbunney`_ converted the entirity of the tests
from unittest to pytest. Iris is now also ruff-PT compliant, save for PT019.
(:issue:`6212`, :pull:`6939`)

#. `@hsteptoe`_ and `@ESadek-MO`_ (reviewer) updated chained assignment useage within the tests
associated with :mod:`iris.pandas` to reflect changes in pandas v3 `New pandas v3 copy behaviour`_.
(:pull:`6948`, :issue:`6761`)

#. `@hsteptoe`_ and `@ESadek-MO`_ (reviewer) added static type hinting to :mod:`iris.pandas`. (:pull:`6948`)

.. comment
Whatsnew author names (@github name) in alphabetical order. Note that,
core dev names are automatically included by the common_links.inc:

.. _@hdyson: https://github.com/hdyson
.. _@hsteptoe: https://github.com/hsteptoe

.. comment
Whatsnew resources in alphabetical order:

.. _New pandas v3 copy behaviour: https://pandas.pydata.org/docs/whatsnew/v3.0.0.html#consistent-copy-view-behaviour-with-copy-on-write
.. _SPEC0 Minimum Supported Dependencies: https://scientific-python.org/specs/spec-0000/
.. _Zarr: https://zarr.dev/
.. _ncdata: https://github.com/SciTools/ncdata
.. _Pint: https://github.com/hgrecco/pint
1 change: 1 addition & 0 deletions docs/src/whatsnew/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ What's New in Iris
:hidden:

latest.rst
3.15.rst
3.14.rst
3.13.rst
3.12.rst
Expand Down
92 changes: 8 additions & 84 deletions docs/src/whatsnew/latest.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,38 +24,14 @@ This document explains the changes made to Iris for this release
📢 Announcements
================

#. We've had a makeover! ✨ All user documentation pages have been reorganised
into a new structure: :doc:`/user_manual/index`. This restructure is to
maximise discoverability of the available pages, as well as embracing the
`Diataxis`_ framework for better engagement with user needs going forward.
#. N/A


✨ Features
===========

#. `@ukmo-ccbunney`_ added new *cube component* convenience methods that allow
for manipulation of any named dimensional component that can be attached to a
cube (i.e. coordinates, cell measures and ancillary variables) via a common
interface. The following methods are provided:

* :func:`~iris.cube.Cube.component` and :func:`~iris.cube.Cube.components`:
get one or more components from a cube
* :func:`~iris.cube.Cube.add_component`: add a component to a cube
* :func:`~iris.cube.Cube.remove_component`: remove a component from a cube
* :func:`~iris.cube.Cube.component_dims`: return the cube dimension(s)
spanned by a component.

(:issue:`5819`, :pull:`6854`)

#. `@ESadek-MO`_ added functionality to allow :func:`~iris.cube.Cube.concatenate`,
:func:`~iris.cube.Cube.rolling_window` and :func:`~iris.cube.Cube.intersection`
to work with dataless cubes. (:pull:`6860`, :pull:`6757`)

#. `@HGWright`_ added to the Nimrod loader to expand the types of Nimrod files it can load. This includes selecting which Nimrod table to use the data entry headers from. (:issue:`4505`, :pull:`6763`)
#. N/A

#. `@stephenworsley`_ added the coordinate method :meth:`~iris.coords.Coord.as_string_arrays`
and the class :class:`~iris.coords.PointBoundStrings` to help represent points and
bounds data on coordinates. This adapts code suggestions by `@rcomer`_ and `@vsherratt`_. (:issue:`4508`, :pull:`6978`)

🐛 Bugs Fixed
=============
Expand All @@ -78,12 +54,7 @@ This document explains the changes made to Iris for this release
🔥 Deprecations
===============

#. `@ESadek-MO`_ has deprecated the :class:`~iris.tests.IrisTest` class, and other unittest-based
testing conveniences in favour of the conveniences found in :mod:`iris/tests/_shared_utils.py`.
(:pull:`6950`)

#. `@hsteptoe`_ has deprecated the use of the `copy` kwarg across :mod:`iris.pandas` to reflect changes
to the default behaviour of pandas v3 `New pandas v3 copy behaviour`_. (:pull:`6948`)
#. N/A


🔗 Dependencies
Expand All @@ -95,68 +66,21 @@ This document explains the changes made to Iris for this release
📚 Documentation
================

#. `@tkknight`_ reduced the space used on the documentation homepage by the quick
link cards to allow for easier reading. (:pull:`6886`)

#. `@tkknight`_ added a gallery carousel to the documentation homepage. (:pull:`6884`)

#. :user:`bjlittle` added the ``:user:`` `extlinks`_ ``github`` user convenience.
(:pull:`6931`)

#. `@pp-mo`_ added a page on how to access datafiles in S3 buckets.
(:issue:`6374`, :pull:`6951`)

#. `@trexfeathers`_, `@stephenworsley`_, `@ESadek-MO`_ and `@tkknight`_ reorganised **all**
user documentation pages into a new structure: :doc:`/user_manual/index`.
This restructure is to maximise discoverability of the available pages, as
well as embracing the `Diataxis`_ framework for better engagement with user
needs going forward. (:issue:`6511`, :pull:`6868`)
#. N/A


💼 Internal
===========

#. `@trexfeathers`_ and `@hdyson`_ updated ``_ff_replacement.py`` to clarify
that Iris supports Ancillaries. (:pull:`6792`)

#. `@trexfeathers`_ adapted ``test_OceanSigmaZFactory`` for NumPy 2.4 - only
0-dimensional arrays can now be converted to scalars. (:pull:`6876`)

#. `@trexfeathers`_ updated benchmarking to source Mule from its new home:
https://github.com/MetOffice/mule . (:pull:`6879`)

#. `@tkknight`_ removed flake8, we have ruff now instead. (:pull:`6889`)

#. `@trexfeathers`_ and `@ukmo-ccbunney`_ updated CI to support Python 3.14
inline with `SPEC0 Minimum Supported Dependencies`_. Note: `pyvista` (and
hence `geovista`) is not yet compatible with Python 3.14, so
:mod:`iris.experimental.geovista` is currently only available for
Python \<3.14. (:pull:`6816`, :issue:`6775`)

#. `@ESadek-MO`_, `@trexfeathers`_, `@bjlittle`_, `@HGWright`_, `@pp-mo`_,
`@stephenworsley`_ and `@ukmo-ccbunney`_ converted the entirity of the tests
from unittest to pytest. Iris is now also ruff-PT compliant, save for PT019.
(:issue:`6212`, :pull:`6939`)

#. `@hsteptoe`_ and `@ESadek-MO`_ (reviewer) updated chained assignment useage within the tests
associated with :mod:`iris.pandas` to reflect changes in pandas v3 `New pandas v3 copy behaviour`_.
(:pull:`6948`, :issue:`6761`)

#. `@hsteptoe`_ and `@ESadek-MO`_ (reviewer) added static type hinting to :mod:`iris.pandas`. (:pull:`6948`)
#. N/A

#. `@ukmo-ccbunney`_ changed formatting of numpy scalars attributes when generating a
Cube/Coord summary to use ``str`` representation instead of ``repr``.
(:pull:`6966`, :issue:`6692`)

.. comment
Whatsnew author names (@github name) in alphabetical order. Note that,
core dev names are automatically included by the common_links.inc:

.. _@hdyson: https://github.com/hdyson
.. _@hsteptoe: https://github.com/hsteptoe

.. comment
Whatsnew resources in alphabetical order:

.. _New pandas v3 copy behaviour: https://pandas.pydata.org/docs/whatsnew/v3.0.0.html#consistent-copy-view-behaviour-with-copy-on-write
.. _SPEC0 Minimum Supported Dependencies: https://scientific-python.org/specs/spec-0000/

.. comment
Whatsnew resources in alphabetical order:
Loading