v3.8 (29 Feb 2024)#

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

v3.8 Release Highlights

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

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

v3.8.1 (04 Mar 2024)#

v3.8.1 Patches

The patches in this release of Iris include:

  1. @stephenworsley fixed a potential memory leak for Iris uses of dask.array.map_blocks(); known specifically to be a problem in the iris.analysis.AreaWeighted regridder. (PR #5767)

📢 Announcements#

  1. @lbdreyer relicensed Iris from LGPL-3 to BSD-3. (PR #5577)

  2. @HGWright, @bjlittle and @trexfeathers (reviewers) added a CITATION.cff file to Iris and updated the citation documentation , to help users cite Iris in their work. (PR #5483)

✨ Features#

  1. @pp-mo, @lbdreyer and @trexfeathers improved Cube attributes handling to better preserve the distinction between dataset-level and variable-level attributes, allowing file-Cube-file round-tripping of NetCDF attributes. See CubeAttrsDict, NetCDF save() and Future for more. (PR #5152, split attributes project)

  2. @rcomer rewrote broadcast_to_shape() so it now handles lazy data. (PR #5307)

  3. @trexfeathers and @HGWright (reviewer) sub-categorised all Iris’ UserWarnings for richer filtering. The full index of sub-categories can be seen here: iris.warnings . (PR #5498, PR #5760)

  4. @trexfeathers added the ObliqueMercator and RotatedMercator coordinate systems, complete with NetCDF loading and saving. (PR #5548)

  5. @trexfeathers added the use_year_at_season_start parameter to iris.coord_categorisation.add_season_year(). When use_year_at_season_start==True: seasons spanning the year boundary (e.g. Winter - December to February) will be assigned to the preceding year (e.g. the year of December) instead of the following year (the default behaviour). (PR #5573)

  6. @HGWright added ignore_axis to allow manual intervention preventing guess_coord_axis() from acting on a coordinate. @trexfeathers documented this. (PR #5551, PR #5744)

  7. @pp-mo, @trexfeathers and @ESadek-MO added more control over NetCDF chunking with the use of the iris.fileformats.netcdf.loader.CHUNK_CONTROL context manager. (PR #5588)

  8. @acchamber and @trexfeathers (reviewer) added iris.util.mask_cube_from_shapefile(). This builds on the original work of @ckmo, @david-bentley, @jmendesmetoffice, @evyve and @pelson for the UK Met Office ASCEND library. See Masking from a shapefile for documentation. (PR #5470)

  9. @trexfeathers updated to the latest CF Standard Names Table v84 (19 January 2024). (PR #5761)

🐛 Bugs Fixed#

  1. @scottrobinson02 fixed the output units when dividing a coordinate by a cube. (Issue #5305, PR #5331)

  2. @ESadek-MO has updated iris.tests.graphics.idiff to stop duplicated file names preventing acceptance. (Issue #5098, PR #5482)

  3. @acchamber and @rcomer modified 2D plots so that time axes and their ticks have more sensible default labels. (Issue #5426, PR #5561)

  4. @rcomer and @trexfeathers (reviewer) added handling for realization coordinates when saving pp files (Issue #4747, PR #5568)

  5. @ESadek-MO has updated iris.fileformats._nc_load_rules.helpers to lessen warning duplication. (Issue #5536, PR #5685)

  6. @bjlittle fixed coordinate construction in the NetCDF loading pipeline to ensure that bounds have the same units as the associated points. (Issue #1801, PR #5746)

💣 Incompatible Changes#

  1. @bouweandela and @trexfeathers (reviewer) updated Cube comparison so equality is now possible between cubes with data containing a numpy.nan. e.g. Cube([np.nan, 1.0]) == Cube([np.nan, 1.0]) will now evaluate to True, while previously this would have been False. (PR #5713)

🚀 Performance Enhancements#

  1. @stephenworsley improved the speed of AreaWeighted regridding. (PR #5543)

  2. @bouweandela made iris.util.array_equal() faster when comparing lazy data from file. This will also speed up coordinate comparison. (PR #5610)

  3. @bouweandela changed iris.coords.Coord.cell() so it does not realize all coordinate data and only loads a single cell instead. (PR #5693)

  4. @rcomer and @trexfeathers (reviewer) modified pearsonr() so it preserves lazy data in all cases and also runs a little faster. (PR #5638)

  5. @bouweandela made comparing coordinates and arrays to themselves faster. (PR #5691)

  6. @bouweandela and @trexfeathers (reviewer) made comparing cubes to themselves faster. (PR #5713)

🔥 Deprecations#

  1. N/A

🔗 Dependencies#

  1. @bjlittle enforced the minimum pin of numpy>1.21 in accordance with the NEP29 Drop Schedule. (PR #5525)

  2. @bjlittle enforced the minimum pin of numpy>1.22 in accordance with the NEP29 Drop Schedule. (PR #5668)

  3. @bjlittle updated ubuntu and mambaforge to the latest versions for readthedocs (PR #5702)

📚 Documentation#

  1. @trexfeathers documented the intended use of warnings filtering with Iris. See Filtering Warnings. (PR #5509)

  2. @rcomer updated the Global Average Annual Temperature Maps to show how a colourbar may steal space from multiple axes. (PR #5537)

  3. @tkknight improved the top navgation bar alignment and amount of links shown. Also improved how the warning banner is implemented. (PR #5505 and PR #5508)

  4. @tkknight removed broken git links. (PR #5569)

  5. @ESadek-MO added a phrasebook for synonymous terms used in similar packages. (PR #5564)

  6. @ESadek-MO and @trexfeathers created a technical paper for NetCDF saving and loading, NetCDF I/O Handling in Iris with a section on chunking, and placeholders for further topics. (PR #5588)

  7. @bouweandela updated all hyperlinks to https. (PR #5621)

  8. @ESadek-MO created an index page for Further Topics, and relocated all ‘Technical Papers’ into Further Topics. (PR #5602)

  9. @trexfeathers made drop-down icons visible to show which pages link to ‘sub-pages’. (PR #5684)

  10. @trexfeathers improved the documentation of acceptable Cube standard names in iris.analysis.calculus.curl(). (PR #5680)

  11. @tkknight added ruff documentation in the Continuous Integration (CI) Testing of the Developers Guide. (PR #5701)

  12. @tkknight configured the API documentation to show 2 levels for the ToC (Table of Contents) for each page. (PR #5714)

💼 Internal#

  1. @trexfeathers and @ESadek-MO (reviewer) performed a suite of fixes and improvements for benchmarking, primarily to get on demand pull request benchmarking working properly. (Main pull request: PR #5437, more detail: PR #5430, PR #5431, PR #5432, PR #5434, PR #5436)

  2. @trexfeathers set a number of memory benchmarks to be on-demand, as they were vulnerable to false positives in CI runs. (PR #5481)

  3. @acchamber and @ESadek-MO resolved several deprecation to reduce number of warnings raised during tests. (PR #5493, PR #5511)

  4. @trexfeathers replaced all uses of the logging.WARNING level, in favour of using Python warnings, following team agreement. (PR #5488)

  5. @trexfeathers adapted benchmarking to work with ASV >=v0.6 by no longer using the --strict argument. (PR #5496)

  6. @fazledyn-or replaced NotImplementedError with NotImplemented as a proper method call. (PR #5544)

  7. @bjlittle corrected various comment spelling mistakes detected by codespell. (PR #5546)

  8. @rcomer reduced the size of the conda environment used for testing. (PR #5606)

  9. @trexfeathers and @pp-mo improved how the conda-forge feedstock release candidate branch is managed, via: Release Do-Nothing Script. (PR #5515)

  10. @bjlittle adopted and configured the ruff linter. (PR #5623)

  11. @bjlittle configured the line-length = 88 for black, isort and ruff. (PR #5632)

  12. @bjlittle replaced isort with ruff. (PR #5633)

  13. @bjlittle replaced black with ruff. (PR #5634)

  14. @tkknight and @bjlittle (reviewer) updated codebase to be compliant with almost all of the rules for ruff pydocstyle. (SciTools/iris#5625)

  15. @tkknight and @bjlittle (reviewer) updated codebase to ensure docstrings that are not covered by the ruff checks, are consistent with numpydocstyle. (Issue #4721)