.. include:: ../common_links.inc v3.13 (07 Aug 2025) ******************* This document explains the changes made to Iris for this release (:doc:`View all changes `.) .. dropdown:: v3.13 Release Highlights :color: primary :icon: info :animate: fade-in The highlights for this minor release of Iris include: * Extended :data:`iris.loading.LOAD_PROBLEMS` to all NetCDF objects added to a :class:`~iris.cube.Cube` during loading, thus providing richer diagnostics to help understand loading issues. * Added support for loading and saving multiple *Coordinate Reference Systems* (CRS) for a :class:`~iris.cube.Cube` when using NetCDF. Additionally, we can now generate a *Well-Known Text* (`WKT`_) representation of the CRS when saving, which can be useful for interoperability with other tools. * Made :class:`~iris.MeshCoord` immutable, with automatic updates when the associated mesh changes. * Enabled correct loading and saving of bounds for `CF Parametric Vertical Coordinates`_. * In terms of performance, we have made significant improvements to the memory usage of hybrid coordinates, which are now automatically rechunked to avoid excessive memory usage. This is particularly useful for large datasets with derived coordinates, and reference surfaces are now lazy by default. Additionally, we've extended NetCDF compression to include auxiliary coordinates and ancillary variables, which can help reduce file sizes and improve loading times 🚀 And finally, get in touch with us on :issue:`GitHub` if you have any issues or feature requests for improving Iris. Enjoy! v3.13.1 (26 Aug 2025) ===================== .. dropdown:: v3.13.1 Patches :color: primary :icon: alert :animate: fade-in :open: The patches in this release of Iris include: #. Improved compatibility with NumPy >= v1.25 for array comparisons, in response to deprecations around un-broadcastable arrays. :ref:`See the full entry for more<3_12_3_array_comparison>`. 📢 Announcements ================ #. `@bjlittle`_ migrated the ``SciTools`` social community from ``X`` (formally ``Twitter``) to `Bluesky `__ 🦋. (:pull:`6237`) ✨ Features =========== #. `@trexfeathers`_ and `@ukmo-ccbunney`_ extended the :data:`iris.loading.LOAD_PROBLEMS` capturing to *all* NetCDF objects that are added to a :class:`~iris.cube.Cube` during loading, as well as a selection of other objects such as :class:`~iris.coord_systems.CoordSystem`. Note this includes an improvement to how :class:`~iris.coords.DimCoord` is 'gracefully' converted to :class:`~iris.coords.AuxCoord` if it is masked - the mask is now preserved when it was not previously. See also: :ref:`load-problems`. (:pull:`6465`, :pull:`6529`) #. `@wjbenfold`_ and `@trexfeathers`_ added ``crs_wkt`` to the attributes when saving a :class:`~iris.coord_systems.CoordSystem` to a NetCDF file. Note that ``crs_wkt`` is considered *supplementary* by the CF conventions, with ``grid_mapping`` being the primary source of information, and ``crs_wkt`` not expected to contain conflicting information. Because of this, Iris generates :class:`~iris.coord_systems.CoordSystem` exclusively from ``grid_mapping`` when loading, and writes a fresh ``crs_wkt`` whenever a :class:`~iris.coord_systems.CoordSystem` is saved. If your use case goes beyond the CF conventions, you can modify the save and load process for your needs by using the `Ncdata`_ package. See `CRS WKT in the CF Conventions`_ for more. (:issue:`3796`, :pull:`6519`) #. `@ukmo-ccbunney`_ and `@trexfeathers`_ added support for **multiple coordinate systems** and **ordered coordinates** when loading and saving NetCDF files. This allows for coordinates to be explicitly associated with a coordinate system via an extended syntax in the ``grid_mapping`` attribute of a NetCDF data variable. This extended syntax also supports specification of multiple coordinate systems per data variable. Setting the property ``cube.extended_grid_mapping = True`` will enable extended grid mapping syntax when saving a NetCDF file and also generate an associated **well known text** attribute (``crs_wkt``; as described in :issue:`3796`). See `CRS Grid Mappings and Projections`_ for more information. (:issue:`3388`:, :pull:`6536`:) #. `@ESadek-MO`_ made :class:`~iris.MeshCoord`\s immutable. :class:`iris.MeshCoord`\s are now updated automatically when changing the attached mesh. All changes to the :class:`iris.MeshCoord` should instead be done to the relevant :class:`iris.Coord` located on the attached :class:`iris.MeshXY`. This change also affects the behaviour when calling :attr:`iris.MeshCoord.points` and :attr:`MeshCoord.bounds`, which will return real data but will leave the :class:`iris.MeshCoord` (and attached mesh) lazy. (:issue:`4757`, :pull:`6405`) #. `@pp-mo`_ made it possible for the reference surfaces of derived coordinates, like orography, to be lazy. (:pull:`6517`). #. `@HGWright`_ and `@pp-mo`_ enabled correct loading and saving of the bounds of CF parametric coordinates (that is, Iris derived coordinates). This was previously incorrect. However the fix is opt-in, controlled by the ``derived_bounds`` flag in the :data:`iris.FUTURE` object, to avoid breaking existing code. (:issue:`3678`, :pull:`6481`, :pull:`6540`) #. `@bjlittle`_ extended ``zlib`` compression of :class:`~iris.cube.Cube` data payload when saving to NetCDF to also include any auxiliary coordinates and ancillary variables with the same ``shape``. (:issue:`6539`, :pull:`6552`) #. `@pp-mo`_ added support for saving and loading the special ``GRIB_PARAM`` attributes to NetCDF, as used by iris-grib to record the exact grib-file encoding of phenomenon types. This means that data sourced from GRIB grib files can be freely saved and re-loaded to NetCDF without loss of information. (`Issue Iris-grib#596 `__, :pull:`6566`). 🐛 Bugs Fixed ============= #. `@HGWright`_ added a new warning to inform users that the boolean coordinate generated by :meth:`iris.coord_categorisation.add_season_membership` is not saveable to NetCDF. (:pull:`6305`) #. `@bouweandela`_ changed the ``convert_units`` method on cubes and coordinates so it also converts the values of the attributes ``"actual_range"``, ``"valid_max"``, ``"valid_min"``, and ``"valid_range"``. (:pull:`6416`) #. `@ukmo-ccbunney`_ fixed loading and merging of masked data in scalar ``AuxCoords``. (:issue:`3584`, :pull:`6468`) #. `@stephenworsley`_ fixed the html representation of cubes in Jupyter when coordinates share the same name. (:pull:`6476`) #. `@schlunma`_ fixed loading of NetCDF files with coordinates that have non-string units. (:issue:`6505`, :pull:`6506`) #. `@ukmo-ccbunney`_ correctly set the ``bplon`` PP field parameter when saving a cube defined on Limited Area Model (LAM) grid to PP format. Activate this behaviour with the new Futures flag ``iris.FUTURE.lam_pole_offset=True``. (:issue:`3560`, :pull:`6520`) #. `@stephenworsley`_ fixed incompatibilities with numpy v2.3 affecting arrays of dates and array printing. (:pull:`6518`) #. `@stephenworsley`_ fixed a bug which caused :meth:`~iris.cube.CubeList.concatenate_cube` to fail when concatenating over multiple axes. (:pull:`6533`) #. `@bjlittle`_ fixed :func:`~iris.pandas.as_data_frame` to correctly convert a scalar cube to a :class:`pandas.DataFrame`. (:issue:`6419`, :pull:`6567`) 💣 Incompatible Changes ======================= #. N/A 🚀 Performance Enhancements =========================== #. `@pp-mo`_ implemented automatic rechunking of hybrid (aka factory/derived) coordinates to avoid excessive memory usage. (:issue:`6404`, :pull:`6516`) 🔥 Deprecations =============== #. N/A 🔗 Dependencies =============== #. N/A 📚 Documentation ================ #. `@trexfeathers`_ and `@ukmo-ccbunney`_ added :ref:`load-problems` to the user guide. (:pull:`6529`) #. `@trexfeathers`_ and `@ukmo-ccbunney`_ added a new user guide page: :ref:`iris-philosophy`, for readers who are interested in why Iris is designed/maintained the way it is. Initial content: :ref:`code-maintenance`, :ref:`load-problems-explanation`, :ref:`filtering-warnings-explanation`. (:pull:`6529`) #. `@tkknight`_ updated image to ensure it renders correctly using various web browsers on Windows and Linux. (:pull:`6560`) 💼 Internal =========== #. `@pp-mo`_ replaced the PR-based linkchecks with a daily scheduled link checker based on `lychee `__. (:issue:`4140`, :pull:`6386`) #. `@trexfeathers`_ added a CI workflow to quickly validate that the benchmarking setup is still working. (:pull:`6496`) #. `@trexfeathers`_ improved the stack trace for errors that occur during benchmark data generation, showing developers the root problem at-a-glance without needing local replication. (:pull:`6524`) #. `@bjlittle`_ added support for `Trusted Publishing`_ of source distributions and binary wheels to PyPI and Test PyPI. (:pull:`6543`) #. `@ESadek-MO`_ moved `@rcomer`_'s `mocked_compute` testing fixture into the `conftest.py` for the unit testing directory, and used this fixture in :mod:`iris/tests/unit/analysis/maths/test__arith_dask_array.py` and :mod:`iris/tests/unit/util/maths/test_broadcast_to_shape.py`. (:issue:`5704`, :pull:`6564`) #. `@DarkVoyager11`_ added a round trip integration test for NetCDF calendar attributes. (:issue:`2985`, :pull:`6562`) #. `@pp-mo`_ made a unified mechanism for 'managed' cube attributes: ones which get converted between an iris-internal and an in-file form for saving/loading to NetCDF, such as STASH objects in a STASH attribute. (:pull:`6566`). .. comment Whatsnew author names (@github name) in alphabetical order. Note that, core dev names are automatically included by the common_links.inc: .. _@DarkVoyager11: https://github.com/DarkVoyager11 .. comment Whatsnew resources in alphabetical order: .. _CRS WKT in the CF Conventions: https://cfconventions.org/Data/cf-conventions/cf-conventions-1.12/cf-conventions.html#use-of-the-crs-well-known-text-format .. _CRS Grid Mappings and Projections: https://cfconventions.org/Data/cf-conventions/cf-conventions-1.12/cf-conventions.html#grid-mappings-and-projections .. _Ncdata: https://github.com/pp-mo/ncdata .. _Trusted Publishing: https://docs.pypi.org/trusted-publishers/ .. _WKT: https://www.ogc.org/standards/wkt-crs/ .. _CF Parametric Vertical Coordinates: https://cfconventions.org/Data/cf-conventions/cf-conventions-1.12/cf-conventions.html#parametric-vertical-coordinates