v3.5 (27 Apr 2023)#

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

v3.5 Release Highlights

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

  • We added support for plugins.

  • We allowed the usage of Iris objects as weights for cube aggregations.

  • We made Iris’ use of the netCDF4 library thread-safe.

  • We improved performance by changing the netCDF loader to fetch data immediately from small netCDF. variables, instead of creating a dask array.

  • We added notes within docstrings clarifying whether operations maintain lazy data or not.

  • We’re so proud to fully support @ed-hawkins and #ShowYourStripes ❤️

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

📢 Announcements#

  1. Congratulations to @ESadek-MO who has become a core developer for Iris! 🎉

  2. Welcome and congratulations to @HGWright, @scottrobinson02 and @agriyakhetarpal who made their first contributions to Iris! 🎉

✨ Features#

  1. @bsherratt added support for plugins - see the corresponding documentation page for further information. (PR #5144)

  2. @rcomer enabled lazy evaluation of RMS calculations with weights. (PR #5017)

  3. @schlunma allowed the usage of cubes, coordinates, cell measures, or ancillary variables as weights for cube aggregations (iris.cube.Cube.collapsed(), iris.cube.Cube.aggregated_by(), and iris.cube.Cube.rolling_window()). This automatically adapts cube units if necessary. (PR #5084)

  4. @lbdreyer and @trexfeathers (reviewer) added iris.plot.hist() and iris.quickplot.hist(). (PR #5189)

  5. @tinyendian edited rotate_winds() to enable lazy computation of rotated wind vector components (Issue #4934, PR #4972)

  6. @ESadek-MO updated to the latest CF Standard Names Table v80 (07 February 2023). (PR #5244)

🐛 Bugs Fixed#

  1. @schlunma fixed iris.cube.CubeList.concatenate() so that it preserves derived coordinates. (Issue #2478, PR #5096)

  2. @trexfeathers and @pp-mo made Iris’ use of the netCDF4 library thread-safe. (PR #5095)

  3. @ESadek-MO removed check and error raise for saving cubes with masked iris.coords.CellMeasure. (Issue #5147, PR #5181)

  4. @scottrobinson02 fixed iris.util.new_axis creating an anonymous new dimension, when the scalar coord provided is already a dim coord. (Issue #4415, PR #5194)

  5. @HGWright and @trexfeathers (reviewer) changed the way CellMethod are printed to be more CF compliant. (PR #5224)

  6. @stephenworsley fixed the way discontiguities were discovered for 2D coords. Previously, the only bounds being compared were the bottom right bound in one cell with the bottom left bound in the cell to its right, and the top left bound in a cell with the bottom left bound in the cell above it. Now all bounds are compared with all adjacent bounds from neighbouring cells. This affects is_contiguous() and iris.util.find_discontiguities() where additional discontiguities may be detected which previously were not.

💣 Incompatible Changes#

  1. N/A

🚀 Performance Enhancements#

  1. @pp-mo changed the netCDF loader to fetch data immediately from small netCDF variables, instead of creating a dask array: This saves both time and memory. Note that some cubes, coordinates etc loaded from netCDF will now have real data where previously it was lazy. (PR #5229)

🔥 Deprecations#

  1. N/A

🔗 Dependencies#

  1. @trexfeathers introduced the libnetcdf <4.9 pin. (PR #5242)

📚 Documentation#

  1. @rcomer clarified instructions for updating gallery tests. (PR #5100)

  2. @tkknight unpinned pydata-sphinx-theme and set the default to use the light version (not dark) while we make the docs dark mode friendly (PR #5129)

  3. @jonseddon updated the citation to a more recent version of Iris. (PR #5116)

  4. @rcomer linked the PERCENTILE aggregator from the MEDIAN docstring, noting that the former handles lazy data. (PR #5128)

  5. @trexfeathers updated the WSL link to Microsoft’s latest documentation, and removed an ECMWF link in the v1.0 What’s New that was failing the linkcheck CI. (PR #5109)

  6. @trexfeathers added a new top-level Iris in the Community section, as a one-stop place to find out about getting involved, and how we relate to other projects. (PR #5025)

  7. The Iris community, with help from the Xarray community, produced the Iris ❤️ Xarray page, highlighting the similarities and differences between the two packages. (PR #5025)

  8. @bjlittle added a new section to the README.md to show our support for the outstanding work of @ed-hawkins et al for #ShowYourStripes. (PR #5141)

  9. @HGWright fixed some typo’s from Gitwash. (PR #5145)

  10. @Esadek-MO added notes to function docstrings to to clarify if the function preserves laziness or not. (PR #5137)

💼 Internal#

  1. @bouweandela and @trexfeathers (reviewer) modernized and simplified the code of iris.analysis._Groupby. (PR #5015)

  2. @fnattino changed the order of ncgen arguments in the command to create NetCDF files for testing (caused errors on OS X). (PR #5105)

  3. @rcomer removed some old infrastructure that printed test timings. (PR #5101)

  4. @lbdreyer and @trexfeathers (reviewer) added coverage testing. This can be enabled by using the “–coverage” flag when running the tests with nox i.e. nox --session tests -- --coverage. (PR #4765)

  5. @lbdreyer and @trexfeathers (reviewer) removed the --coding-tests option from Iris’ test runner. (PR #4765)

  6. @lbdreyer removed the Iris TestRunner. Tests are now run via nox or pytest. (PR #5205)

  7. @agriyakhetarpal and @trexfeathers prevented the GitHub action for publishing releases to PyPI from running in forks. (PR #5220, PR #5248)

  8. @trexfeathers moved the benchmark runner conveniences from noxfile.py to a dedicated benchmarks/bm_runner.py. (PR #5215)

  9. @bjlittle follow-up to PR #4972, enforced dask>=2022.09.0 minimum pin for first use of dask.array.ma.empty_like and replaced @tinyendian workaround. (PR #5225)

  10. @HGWright, @bjlittle and @trexfeathers removed the legacy pin for numpy array printing and replaced the test results files to match default numpy output. (PR #5235)