v3.13.0.dev102 (14 Jul 2025) [unreleased]#

This document explains the changes made to Iris for this release (View all changes.)

v3.13.0.dev102 Release Highlights

The highlights for this major/minor release of Iris include:

  • N/A

And finally, get in touch with us on GitHub if you have any issues or feature requests for improving Iris. Enjoy!

📢 Announcements#

  1. @bjlittle migrated the SciTools social community from X (formally Twitter) to Bluesky 🦋. (PR #6237)

✨ Features#

  1. @trexfeathers and @ukmo-ccbunney extended the iris.loading.LOAD_PROBLEMS capturing to all NetCDF objects that are added to a Cube during loading, as well as a selection of other objects such as CoordSystem. Note this includes an improvement to how DimCoord is ‘gracefully’ converted to AuxCoord if it is masked - the mask is now preserved when it was not previously. See also: Load Problems. (PR #6465, PR #6529)

  2. @ESadek-MO made MeshCoords immutable. 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 iris.Coord located on the attached iris.MeshXY. This change also affects the behaviour when calling iris.MeshCoord.points and MeshCoord.bounds, which will return real data but will leave the iris.MeshCoord (and attached mesh) lazy. (Issue #4757, PR #6405)

  3. @pp-mo made it possible for the reference surfaces of derived coordinates, like orography, to be lazy. (:pull: 6517).

  4. @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 iris.FUTURE object, to avoid breaking existing code. (Issue #3678, PR #6481, PR #6540)

  5. @bjlittle extended zlib compression of Cube data payload when saving to NetCDF to also include any auxiliary coordinates and ancillary variables with the same shape. (Issue #6539, PR #6552)

🐛 Bugs Fixed#

  1. @HGWright added a new warning to inform users that the boolean coordinate generated by iris.coord_categorisation.add_season_membership() is not saveable to netcdf. (PR #6305)

  2. @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". (PR #6416)

  3. @ukmo-ccbunney fixed loading and merging of masked data in scalar AuxCoords. (Issue #3584, PR #6468)

  4. @stephenworsley fixed the html representation of cubes in Jupyter when coordinates share the same name. (PR #6476)

  5. @schlunma fixed loading of netCDF files with coordinates that have non-string units. (Issue #6505, PR #6506)

  6. @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, PR #6520)

  7. @stephenworsley fixed incompatibilities with numpy v2.3 affecting arrays of dates and array printing. (PR #6518)

  8. @stephenworsley fixed a bug which caused concatenate_cube() to fail when concatenating over multiple axes. (PR #6533)

💣 Incompatible Changes#

  1. N/A

🚀 Performance Enhancements#

  1. @pp-mo implemented automatic rechunking of hybrid (aka factory/derived) coordinates to avoid excessive memory usage. (Issue #6404, PR #6516)

🔥 Deprecations#

  1. N/A

🔗 Dependencies#

  1. N/A

📚 Documentation#

  1. @trexfeathers and @ukmo-ccbunney added Load Problems to the user guide. (PR #6529)

  2. @trexfeathers and @ukmo-ccbunney added a new user guide page: Iris’ Philosophy, for readers who are interested in why Iris is designed/maintained the way it is. Initial content: Code Maintenance, Loading Invalid File Content, Verbose Warnings. (PR #6529)

  3. @tkknight updated image to ensure it renders correctly using various web browsers on Windows and Linux. (PR #6560)

💼 Internal#

  1. @pp-mo replaced the PR-based linkchecks with a daily scheduled link checker based on lychee. (Issue #4140, PR #6386)

  2. @trexfeathers added a CI workflow to quickly validate that the benchmarking setup is still working. (PR #6496)

  3. @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. (PR #6524)