|
| 1 | +.. include:: ../common_links.inc |
| 2 | + |
| 3 | +v3.15 (17 Mar 2026 [release candidate]) |
| 4 | +*************************************** |
| 5 | + |
| 6 | +This document explains the changes made to Iris for this release |
| 7 | +(:doc:`View all changes <index>`.) |
| 8 | + |
| 9 | + |
| 10 | +.. dropdown:: v3.15 Release Highlights |
| 11 | + :color: primary |
| 12 | + :icon: info |
| 13 | + :animate: fade-in |
| 14 | + :open: |
| 15 | + |
| 16 | + The highlights for this minor release of Iris include: |
| 17 | + |
| 18 | + * Overhauling the user documentation structure to maximise discoverability |
| 19 | + and engagement with user needs going forward. |
| 20 | + |
| 21 | + * NIMROD loader improvements to expand the types of NIMROD files Iris can load. |
| 22 | + |
| 23 | + * Documentation page explaining how to access files in S3 buckets. |
| 24 | + |
| 25 | + * Compatibility with Pandas version 3. |
| 26 | + |
| 27 | + * Several large pieces of work **behind the scenes** to put Iris in the best |
| 28 | + possible place for the future. To be continued! |
| 29 | + |
| 30 | + * Investigating how Iris can provide native `Zarr`_ loading and saving |
| 31 | + (beyond what is already possible via `ncdata`_). |
| 32 | + |
| 33 | + * Completed a 2-year project converting all tests from unittest to pytest, |
| 34 | + including compliance with the Ruff `PT` standard. |
| 35 | + |
| 36 | + * In-progress work to fully support arrays of characters/strings. |
| 37 | + |
| 38 | + * Investigating how Iris can integrate with the `Pint`_ units library, to |
| 39 | + increase interoperability with the wider scientific Python ecosystem. |
| 40 | + |
| 41 | + * Layout groundwork for making Iris fully Pip-installable, reducing the |
| 42 | + dependency footprint and improving handling of optional dependencies. |
| 43 | + |
| 44 | + And finally, get in touch with us on :issue:`GitHub<new/choose>` if you have |
| 45 | + any issues or feature requests for improving Iris. Enjoy! |
| 46 | + |
| 47 | + |
| 48 | +📢 Announcements |
| 49 | +================ |
| 50 | + |
| 51 | +#. We've had a makeover! ✨ All user documentation pages have been reorganised |
| 52 | + into a new structure: :doc:`/user_manual/index`. This restructure is to |
| 53 | + maximise discoverability of the available pages, as well as embracing the |
| 54 | + `Diataxis`_ framework for better engagement with user needs going forward. |
| 55 | + |
| 56 | + |
| 57 | +✨ Features |
| 58 | +=========== |
| 59 | + |
| 60 | +#. `@ukmo-ccbunney`_ added new *cube component* convenience methods that allow |
| 61 | + for manipulation of any named dimensional component that can be attached to a |
| 62 | + cube (i.e. coordinates, cell measures and ancillary variables) via a common |
| 63 | + interface. The following methods are provided: |
| 64 | + |
| 65 | + * :func:`~iris.cube.Cube.component` and :func:`~iris.cube.Cube.components`: |
| 66 | + get one or more components from a cube |
| 67 | + * :func:`~iris.cube.Cube.add_component`: add a component to a cube |
| 68 | + * :func:`~iris.cube.Cube.remove_component`: remove a component from a cube |
| 69 | + * :func:`~iris.cube.Cube.component_dims`: return the cube dimension(s) |
| 70 | + spanned by a component. |
| 71 | + |
| 72 | + (:issue:`5819`, :pull:`6854`) |
| 73 | + |
| 74 | +#. `@ESadek-MO`_ added functionality to allow :func:`~iris.cube.Cube.concatenate`, |
| 75 | + :func:`~iris.cube.Cube.rolling_window` and :func:`~iris.cube.Cube.intersection` |
| 76 | + to work with dataless cubes. (:pull:`6860`, :pull:`6757`) |
| 77 | + |
| 78 | +#. `@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`) |
| 79 | + |
| 80 | +#. `@stephenworsley`_ added the coordinate method :meth:`~iris.coords.Coord.as_string_arrays` |
| 81 | + and the class :class:`~iris.coords.PointBoundStrings` to help represent points and |
| 82 | + bounds data on coordinates. This adapts code suggestions by `@rcomer`_ and `@vsherratt`_. (:issue:`4508`, :pull:`6978`) |
| 83 | + |
| 84 | +🐛 Bugs Fixed |
| 85 | +============= |
| 86 | + |
| 87 | +#. `@ukmo-ccbunney`_ changed formatting of numpy scalars attributes when generating a |
| 88 | + Cube/Coord summary to use ``str`` representation instead of ``repr``. |
| 89 | + (:pull:`6966`, :issue:`6692`) |
| 90 | + |
| 91 | + |
| 92 | +💣 Incompatible Changes |
| 93 | +======================= |
| 94 | + |
| 95 | +#. `@hsteptoe`_ and `@ESadek-MO`_ (reviewer) disabled the ``copy`` behaviour |
| 96 | + across :mod:`iris.pandas`, as it is incompatible with Pandas v3 (see |
| 97 | + `New pandas v3 copy behaviour`_). The parameter is still present, to help |
| 98 | + mitigate disruption, but now marked for deprecation. (:pull:`6948`, |
| 99 | + :issue:`6761`) |
| 100 | + |
| 101 | + |
| 102 | +🚀 Performance Enhancements |
| 103 | +=========================== |
| 104 | + |
| 105 | +#. Note that ``libnetcdf`` version 4.10.0 (released 25th Feb 2026) improves |
| 106 | + NetCDF loading and saving performance, measured between 20-40% in Iris' |
| 107 | + benchmarks (:issue:`6984`). |
| 108 | + |
| 109 | + |
| 110 | +🔥 Deprecations |
| 111 | +=============== |
| 112 | + |
| 113 | +#. `@ESadek-MO`_ has deprecated the :class:`~iris.tests.IrisTest` class, and other unittest-based |
| 114 | + testing conveniences in favour of the conveniences found in :mod:`iris/tests/_shared_utils.py`. |
| 115 | + (:pull:`6950`) |
| 116 | + |
| 117 | +#. `@hsteptoe`_ has deprecated the use of the `copy` kwarg across :mod:`iris.pandas` to reflect changes |
| 118 | + to the default behaviour of pandas v3 `New pandas v3 copy behaviour`_. (:pull:`6948`) |
| 119 | + |
| 120 | + |
| 121 | +🔗 Dependencies |
| 122 | +=============== |
| 123 | + |
| 124 | +#. `@hsteptoe`_ and `@ESadek-MO`_ (reviewer) made :mod:`iris.pandas` |
| 125 | + interoperability compatible with pandas v3. (:pull:`6948`, :issue:`6761`) |
| 126 | + |
| 127 | + |
| 128 | +📚 Documentation |
| 129 | +================ |
| 130 | + |
| 131 | +#. `@tkknight`_ reduced the space used on the documentation homepage by the quick |
| 132 | + link cards to allow for easier reading. (:pull:`6886`) |
| 133 | + |
| 134 | +#. `@tkknight`_ added a gallery carousel to the documentation homepage. (:pull:`6884`) |
| 135 | + |
| 136 | +#. :user:`bjlittle` added the ``:user:`` `extlinks`_ ``github`` user convenience. |
| 137 | + (:pull:`6931`) |
| 138 | + |
| 139 | +#. `@pp-mo`_ added a page on how to access datafiles in S3 buckets: |
| 140 | + :doc:`/user_manual/tutorial/s3_io`. |
| 141 | + (:issue:`6374`, :pull:`6951`) |
| 142 | + |
| 143 | +#. `@trexfeathers`_, `@stephenworsley`_, `@ESadek-MO`_ and `@tkknight`_ reorganised **all** |
| 144 | + user documentation pages into a new structure: :doc:`/user_manual/index`. |
| 145 | + This restructure is to maximise discoverability of the available pages, as |
| 146 | + well as embracing the `Diataxis`_ framework for better engagement with user |
| 147 | + needs going forward. (:issue:`6511`, :pull:`6868`) |
| 148 | + |
| 149 | + |
| 150 | +💼 Internal |
| 151 | +=========== |
| 152 | + |
| 153 | +#. `@trexfeathers`_ and `@hdyson`_ updated ``_ff_replacement.py`` to clarify |
| 154 | + that Iris supports Ancillaries. (:pull:`6792`) |
| 155 | + |
| 156 | +#. `@trexfeathers`_ adapted ``test_OceanSigmaZFactory`` for NumPy 2.4 - only |
| 157 | + 0-dimensional arrays can now be converted to scalars. (:pull:`6876`) |
| 158 | + |
| 159 | +#. `@trexfeathers`_ updated benchmarking to source Mule from its new home: |
| 160 | + https://github.com/MetOffice/mule . (:pull:`6879`) |
| 161 | + |
| 162 | +#. `@tkknight`_ removed flake8, we have ruff now instead. (:pull:`6889`) |
| 163 | + |
| 164 | +#. `@trexfeathers`_ and `@ukmo-ccbunney`_ updated CI to support Python 3.14 |
| 165 | + inline with `SPEC0 Minimum Supported Dependencies`_. Note: `pyvista` (and |
| 166 | + hence `geovista`) is not yet compatible with Python 3.14, so |
| 167 | + :mod:`iris.experimental.geovista` is currently only available for |
| 168 | + Python \<3.14. (:pull:`6816`, :issue:`6775`) |
| 169 | + |
| 170 | +#. `@ESadek-MO`_, `@trexfeathers`_, `@bjlittle`_, `@HGWright`_, `@pp-mo`_, |
| 171 | + `@stephenworsley`_ and `@ukmo-ccbunney`_ converted the entirity of the tests |
| 172 | + from unittest to pytest. Iris is now also ruff-PT compliant, save for PT019. |
| 173 | + (:issue:`6212`, :pull:`6939`) |
| 174 | + |
| 175 | +#. `@hsteptoe`_ and `@ESadek-MO`_ (reviewer) updated chained assignment useage within the tests |
| 176 | + associated with :mod:`iris.pandas` to reflect changes in pandas v3 `New pandas v3 copy behaviour`_. |
| 177 | + (:pull:`6948`, :issue:`6761`) |
| 178 | + |
| 179 | +#. `@hsteptoe`_ and `@ESadek-MO`_ (reviewer) added static type hinting to :mod:`iris.pandas`. (:pull:`6948`) |
| 180 | + |
| 181 | +.. comment |
| 182 | + Whatsnew author names (@github name) in alphabetical order. Note that, |
| 183 | + core dev names are automatically included by the common_links.inc: |
| 184 | +
|
| 185 | +.. _@hdyson: https://github.com/hdyson |
| 186 | +.. _@hsteptoe: https://github.com/hsteptoe |
| 187 | + |
| 188 | +.. comment |
| 189 | + Whatsnew resources in alphabetical order: |
| 190 | +
|
| 191 | +.. _New pandas v3 copy behaviour: https://pandas.pydata.org/docs/whatsnew/v3.0.0.html#consistent-copy-view-behaviour-with-copy-on-write |
| 192 | +.. _SPEC0 Minimum Supported Dependencies: https://scientific-python.org/specs/spec-0000/ |
| 193 | +.. _Zarr: https://zarr.dev/ |
| 194 | +.. _ncdata: https://github.com/SciTools/ncdata |
| 195 | +.. _Pint: https://github.com/hgrecco/pint |
0 commit comments