You are viewing the latest unreleased documentation v3.2.dev0. You may prefer a stable version.

v3.2.dev0 (01 Dec 2021) [unreleased]๏ƒ

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

๐Ÿ“ข Announcements๏ƒ

  1. Welcome to @wjbenfold, @tinyendian, @larsbarring, @akuhnregnier, @bsherratt and @aaronspring who made their first contributions to Iris. The first of many we hope!

  2. Congratulations to @wjbenfold who has become a core developer for Iris! ๐ŸŽ‰

โœจ Features๏ƒ

  1. @bjlittle, @pp-mo, @trexfeathers and @stephenworsley added support for unstructured meshes, as described by UGRID. This involved adding a data model (PR #3968, PR #4014, PR #4027, PR #4036, PR #4053, PR #4439) and API (PR #4063, PR #4064), and supporting representation (PR #4033, PR #4054) of data on meshes. Most of this new API can be found in iris.experimental.ugrid. The key objects introduced are iris.experimental.ugrid.mesh.Mesh, iris.experimental.ugrid.mesh.MeshCoord and iris.experimental.ugrid.load.PARSE_UGRID_ON_LOAD. A iris.experimental.ugrid.mesh.Mesh contains a full description of a UGRID type mesh. MeshCoords are coordinates that reference and represent a Mesh for use on a Cube. Cubes are also given the property mesh which returns a Mesh if one is attached to the Cube via a MeshCoord.

  2. @trexfeathers added support for loading unstructured mesh data from netcdf data, for files using the UGRID conventions. The context manager PARSE_UGRID_ON_LOAD provides a way to load UGRID files so that Cubes can be returned with a Mesh attached. (PR #4058).

  3. @pp-mo added support to save cubes with meshes to netcdf files, using the UGRID conventions. The existing iris.save() function now does this, when saving cubes with meshes. A routine iris.experimental.ugrid.save.save_mesh() allows saving Mesh objects to netcdf without any associated data (i.e. not attached to cubes). (PR #4318 and PR #4339).

  4. @trexfeathers added iris.experimental.ugrid.mesh.Mesh.from_coords() for inferring a Mesh from an appropriate collection of iris.coords.Coords.

  5. @larsbarring updated equalise_attributes() to return a list of dictionaries containing the attributes removed from each Cube. (PR #4357)

  6. @trexfeathers enabled streaming of all lazy arrays when saving to NetCDF files (was previously just Cube data). This is important given the much greater size of AuxCoord points and Connectivity indices under the UGRID model. (PR #4375)

  7. @bsherratt added a threshold parameter to intersection() (PR #4363)

  8. @wjbenfold added test data to ci benchmarks so that it is accessible to benchmark scripts. Also added a regridding benchmark that uses this data (PR #4402)

๐Ÿ› Bugs Fixed๏ƒ

  1. @rcomer fixed intersection() for special cases where one cellโ€™s bounds align with the requested maximum and negative minimum, fixing Issue #4221. (PR #4278)

  2. @bsherratt fixed further edge cases in intersection(), including Issue #3698 (PR #4363)

  3. @tinyendian fixed the error message produced by concatenate_cube() when a cube list contains cubes with different names, which will no longer report โ€œCube names differ: var1 != var1โ€ if var1 appears multiple times in the list (Issue #4342, PR #4345)

  4. @larsbarring fixed GeoCS to handle spherical ellipsoid parameter inverse_flattening = 0 (:issue: 4146, PR #4348)

  5. @pdearnshaw fixed an error in the call to cftime.datetime in pp_save_rules that prevented the saving to PP of climate means for DJF (PR #4391)

  6. @wjbenfold improved the error message for failure of concatenate() to indicate that the value of a scalar coordinate may be mismatched, rather than the metadata (Issue #4096, PR #4387)

  7. @bsherratt fixed a regression to the NAME file loader introduced in 3.0.4, as well as some long-standing bugs with vertical coordinates and number formats. (PR #4411)

  8. @rcomer fixed subset() to alway return None if no value match is found. (PR #4417)

  9. @wjbenfold resolved an issue that previously caused regridding with lazy data to take significantly longer than with real data. Relevant benchmark shows a time decrease from >10s to 625ms. (Issue #4280, PR #4400)

  10. @wjbenfold changed iris.util.points_step() to stop it from warning when applied to a single point (Issue #4250, PR #4367)

  11. @trexfeathers changed _DimensionalMetadata and Connectivity equality methods to preserve array laziness, allowing efficient comparisons even with larger-than-memory objects. (PR #4439)

๐Ÿ’ฃ Incompatible Changes๏ƒ

  1. N/A

๐Ÿš€ Performance Enhancements๏ƒ

  1. N/A

๐Ÿ”ฅ Deprecations๏ƒ

  1. N/A

๐Ÿ”— Dependencies๏ƒ

  1. @bjlittle introduced the cartopy >=0.20 minimum pin. (PR #4331)

  2. @trexfeathers introduced the cf-units >=3 and nc-time-axis >=1.3 minimum pins. (PR #4356)

  3. @bjlittle introduced the numpy >=1.19 minimum pin, in accordance with NEP-29 deprecation policy. (PR #4386)

๐Ÿ“š Documentation๏ƒ

  1. @rcomer updated the โ€œPlotting Wind Direction Using Quiverโ€ Gallery example. (PR #4120)

  2. @trexfeathers included Iris GitHub Discussions in get involved. (PR #4307)

  3. @wjbenfold improved readability in userguide interpolation section. (PR #4314)

  4. @wjbenfold added explanation about the absence of | operator for iris.Constraint to userguide loading section and to api reference documentation. (PR #4321)

  5. @trexfeathers added more detail on making iris-test-data available during Running the Tests. (PR #4359)

  6. @lbdreyer added a section to the release documentation outlining the role of the Release Manager. (PR #4413)

  7. @trexfeathers encouraged contributors to include type hinting in code they are working on - Code Formatting. (PR #4390)

๐Ÿ’ผ Internal๏ƒ

  1. @trexfeathers set the linkcheck to ignore http://www.nationalarchives.gov.uk/doc/open-government-licence since this always works locally, but never within CI. (PR #4307)

  2. @wjbenfold netCDF integration tests now skip TestConstrainedLoad if test data is missing (PR #4319)

  3. @wjbenfold excluded Good First Issue labelled issues from being marked stale. (PR #4317)

  4. @tkknight added additional make targets for reducing the time of the documentation build including html-noapi and html-quick. Useful for development purposes only. For more information see Building the documentation. (PR #4333)

  5. @rcomer modified the animation test to prevent it throwing a warning that sometimes interferes with unrelated tests. (PR #4330)

  6. @rcomer removed a now redundant workaround in contourf(). (PR #4349)

  7. @trexfeathers refactored iris.experimental.ugrid into sub-modules. (PR #4347).

  8. @bjlittle enabled the sort-all pre-commit hook to automatically sort __all__ entries into alphabetical order. (PR #4353)

  9. @rcomer modified a NetCDF saver test to prevent it triggering a numpy deprecation warning. (Issue #4374, PR #4376)

  10. @akuhnregnier removed addition of period from wrap_lons() and updated affected tests using assertArrayAllClose following Issue #3993. (PR #4421)

  11. @rcomer updated some tests to work with Matplotlib v3.5. (PR #4428)

  12. @rcomer applied minor fixes to some regridding tests. (PR #4432)

  13. @lbdreyer corrected the license PyPI classifier. (PR #4435)

  14. @aaronspring exchanged dask with dask-core in testing environments reducing the number of dependencies installed for testing. (PR #4434)

  15. @wjbenfold prevented github action runs in forks (Issue #4441, PR #4444)