v3.1 (17 Sep 2021)
This document explains the changes made to Iris for this release (View all changes.)
v3.1.0 Release Highlights
The highlights for this minor release of Iris include:
Much faster import times, from minimised loading of submodules. However, note that this may break existing code which does not declare all imports. See minimised imports.
Speedup for loading single phenomena from netcdf. See netcdf load speedup.
Updated formatting of cube printouts. See new-style cube printouts.
Multiple improvements to developer guide documentation. See entries in the “Documentation” section, below.
And finally, get in touch with us on GitHub if you have any issues or feature requests for improving Iris. Enjoy!
A special thanks goes to @akuhnregnier, @gcaria, @jamesp, @schlunma, @MHBalsmeier and @Badboy-16 all of whom made their first contributions to Iris, which were gratefully received and included in this release. Keep up the awesome work! 🍻
@pelson and @trexfeathers enhanced
iris.quickplot.plot()to automatically place the cube on the x axis if the primary coordinate being plotted against is a vertical coordinate. E.g.
iris.plot.plot(z_cube)will produce a z-vs-phenomenon plot, where before it would have produced a phenomenon-vs-z plot. (PR #3906)
iris.common.metadata.hexdigest()to the public API. Previously it was a private function introduced in
v3.0.0. Given any object,
hexdigest()returns a string representation of the 64-bit non-cryptographic hash of the object using the extremely fast xxhash hashing algorithm. (PR #4020)
🐛 Bugs Fixed
contourf()to skip the special handling for antialiasing when data values are too low for it to have an effect. This caused unexpected artifacts in some edge cases, as shown at Issue #4086. (PR #4150)
🚀 Performance Enhancements
@bjlittle Optimised the creation of dynamic metadata manager classes within the
metadata_manager_factory(), resulting in a significant speed-up in the creation of Iris
Cubeinstances. (PR #4227)
cube = iris.load('x.nc', NameConstraint('air_temperature')).
Note that this optimisation only applies when matching on standard name, long name or NetCDF variable name, not when matching on STASH. (PR #4176)
💣 Incompatible Changes
The adoption of ‘isort’ has significantly reduced the import time of Iris packages.
However, this may break existing code which, for convenience, relies on some subpackages being imported implicitly (as some, but not all, previously were).
import iris; print(iris.cube.Cube).
This style is essentially unsafe, and in this case no longer works. It must be modified to explicitly import all subpackages,
import iris.cube; print(iris.cube.Cube).
@bjlittle updated the
feature-requestGitHub issue templates to remove an external URL reference that caused un-posted user issue content to be lost in the browser when followed. (PR #4147)
@pp-mo and @stephenworsley refactored almost all of
iris.cube.Cube.summary()into the new private module:
iris._representation; rewritten with a more modular approach, resulting in more readable and extensible code. (PR #3987) (PR #4206)