v3.13 (07 Aug 2025)#
This document explains the changes made to Iris for this release (View all changes.)
v3.13 Release Highlights
The highlights for this minor release of Iris include:
Extended
iris.loading.LOAD_PROBLEMSto all NetCDF objects added to aCubeduring loading, thus providing richer diagnostics to help understand loading issues.Added support for loading and saving multiple Coordinate Reference Systems (CRS) for a
Cubewhen 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
MeshCoordimmutable, 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 GitHub if you have any issues or feature requests for improving Iris. Enjoy!
v3.13.1 (26 Aug 2025)#
v3.13.1 Patches
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. See the full entry for more.
๐ข Announcements#
โจ Features#
@trexfeathers and @ukmo-ccbunney extended the
iris.loading.LOAD_PROBLEMScapturing to all NetCDF objects that are added to aCubeduring loading, as well as a selection of other objects such asCoordSystem. Note this includes an improvement to howDimCoordis โgracefullyโ converted toAuxCoordif it is masked - the mask is now preserved when it was not previously. See also: Load Problems. (PR #6465, PR #6529)@wjbenfold and @trexfeathers added
crs_wktto the attributes when saving aCoordSystemto a NetCDF file. Note thatcrs_wktis considered supplementary by the CF conventions, withgrid_mappingbeing the primary source of information, andcrs_wktnot expected to contain conflicting information. Because of this, Iris generatesCoordSystemexclusively fromgrid_mappingwhen loading, and writes a freshcrs_wktwhenever aCoordSystemis 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, PR #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_mappingattribute of a NetCDF data variable. This extended syntax also supports specification of multiple coordinate systems per data variable. Setting the propertycube.extended_grid_mapping = Truewill 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:, PR #6536:)@ESadek-MO made
MeshCoords immutable.iris.MeshCoords are now updated automatically when changing the attached mesh. All changes to theiris.MeshCoordshould instead be done to the relevantiris.Coordlocated on the attachediris.MeshXY. This change also affects the behaviour when callingiris.MeshCoord.pointsandMeshCoord.bounds, which will return real data but will leave theiris.MeshCoord(and attached mesh) lazy. (Issue #4757, PR #6405)@pp-mo made it possible for the reference surfaces of derived coordinates, like orography, to be lazy. (PR #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_boundsflag in theiris.FUTUREobject, to avoid breaking existing code. (Issue #3678, PR #6481, PR #6540)@bjlittle extended
zlibcompression ofCubedata payload when saving to NetCDF to also include any auxiliary coordinates and ancillary variables with the sameshape. (Issue #6539, PR #6552)@pp-mo added support for saving and loading the special
GRIB_PARAMattributes 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, PR #6566).
๐ Bugs Fixed#
@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)@bouweandela changed the
convert_unitsmethod on cubes and coordinates so it also converts the values of the attributes"actual_range","valid_max","valid_min", and"valid_range". (PR #6416)@ukmo-ccbunney fixed loading and merging of masked data in scalar
AuxCoords. (Issue #3584, PR #6468)@stephenworsley fixed the html representation of cubes in Jupyter when coordinates share the same name. (PR #6476)
@schlunma fixed loading of NetCDF files with coordinates that have non-string units. (Issue #6505, PR #6506)
@ukmo-ccbunney correctly set the
bplonPP field parameter when saving a cube defined on Limited Area Model (LAM) grid to PP format. Activate this behaviour with the new Futures flagiris.FUTURE.lam_pole_offset=True. (Issue #3560, PR #6520)@stephenworsley fixed incompatibilities with numpy v2.3 affecting arrays of dates and array printing. (PR #6518)
@stephenworsley fixed a bug which caused
concatenate_cube()to fail when concatenating over multiple axes. (PR #6533)@bjlittle fixed
as_data_frame()to correctly convert a scalar cube to apandas.DataFrame. (Issue #6419, PR #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, PR #6516)
๐ฅ Deprecations#
N/A
๐ Dependencies#
N/A
๐ Documentation#
@trexfeathers and @ukmo-ccbunney added Load Problems to the user guide. (PR #6529)
@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)
@tkknight updated image to ensure it renders correctly using various web browsers on Windows and Linux. (PR #6560)
๐ผ Internal#
@pp-mo replaced the PR-based linkchecks with a daily scheduled link checker based on lychee. (Issue #4140, PR #6386)
@trexfeathers added a CI workflow to quickly validate that the benchmarking setup is still working. (PR #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. (PR #6524)
@bjlittle added support for Trusted Publishing of source distributions and binary wheels to PyPI and Test PyPI. (PR #6543)
@ESadek-MO moved @rcomerโs mocked_compute testing fixture into the conftest.py for the unit testing directory, and used this fixture in
iris/tests/unit/analysis/maths/test__arith_dask_array.pyandiris/tests/unit/util/maths/test_broadcast_to_shape.py. (Issue #5704, PR #6564)@DarkVoyager11 added a round trip integration test for NetCDF calendar attributes. (Issue #2985, PR #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. (PR #6566).