.. _release_notes: Release Notes ============= What's new in iris-grib v0.22.0 ------------------------------- :Release: 0.22.0 :Date: 24 March 2026 Features ^^^^^^^^ * `@MoseleyS `_ added support for loading GRIB2 data found in the Met Office wholesale Weather Data Hub and CEDA archive. `(PR#647) `_ * `@andrewgryan `_ and `@trexfeathers `_ added saving support for Earth shape 6 - fixed radius 6,371,229 m. `(PR#712) `_ Fixes ^^^^^ * `@pp-mo `_ fixed the setting of :class:`~iris_grib.grib_message.GribMessage` values, making it possible to set values for keys that have not been read yet. `(PR#766) `_ * `@pp-mo `_ fixed a problem of scaled integers rounding incorrectly, resulting from the transition to NumPy v2. `(PR#767) `_ Documentation ^^^^^^^^^^^^^ * `@trexfeathers `_ reorganised the documentation to be easier to navigate, using the Diataxis framework. `(PR#768) `_ Dependencies ^^^^^^^^^^^^ * `@trexfeathers `_ updated the supported Python versions to be 3.12, 3.13, 3.14; in line with `SPEC 0 `_. `(PR#770) `_ * `@trexfeathers `_ updated the minimum supported Iris version to >=3.10, owing to some internal changes in Iris-grib. `(PR#770) `_ * Iris-grib is continually updated to test against the latest version of its dependencies, allowing us to respond promptly to any breaking changes, and to provide a record of what changed and when. * Iris-grib is continually updated to follow the latest coding standard conventions in scientific Python - via `repo-review `_ and `pre-commit `_ - maximising the ease of contribution and maintenance. Internal ^^^^^^^^ * `@ESadek-MO `_ improved Pickle testing to not rely on Iris, and to use PyTest. `(PR#620) `_ * `@stephenworsley `_ increased Iris-grib's compliance with Scientific Python's `repo-review `_. `(PR#638) `_ * `@pp-mo `_ added testing for reading/writing ``GRIB_PARAM`` attributes in NetCDF files. `(PR#677) `_ * Various improvements to coding standards ('linting'): * `PR#599 `_ * `PR#625 `_ * `PR#667 `_ * `PR#694 `_ * `PR#758 `_ * `@pp-mo `_ dropped the outdated use of the ``np.floating`` type. `PR#664 `_ * `@trexfeathers `_ adapted tests for upstream changes in ecCodes test data (ECC-2110). `(PR#716) `_ * `@trexfeathers `_ adapted tests for an upstream fix in cf-time date2num conversion (cftime#355). `(PR#748) `_ * `@pp-mo `_ and `@trexfeathers `_ are working through a large refactor so that GRIB1 and GRIB2 support share as much code as possible. Progress in this release: `PR#738 `_ * `@ukmo-ccbunney `_ and `@ESadek-MO `_ aligned ``CITATION.cff`` and ``MANIFEST.in`` with agreed SciTools standards. `(PR#675) `_, `(PR#676) `_ New Contributors ^^^^^^^^^^^^^^^^ Welcome to * `@MoseleyS `_ * `@andrewgryan `_ * `@ukmo-ccbunney `_ What's new in iris-grib v0.21.0 ------------------------------- :Release: 0.21.0 :Date: 07 January 2025 Dependencies ^^^^^^^^^^^^ * `@pp-mo `_ added a fix to support ecCodes versions >= 2.38 `(PR#578) `_ * `@pp-mo `_ fixed tests to work with numpy versions >= 2.0 `(PR#580) `_ Internal ^^^^^^^^ * `@trexfeathers `_ added integration tests to ensure code coverage of GRIB1 loading code, to enable future refactoring. `(ISSUE#488) `_, `(PR#583) `_ * `@pp-mo `_ updated repository automation to meet current SciTools code quality recommendations `(PR#568) `_, `(PR#572) `_ What's new in iris-grib v0.20.0 ------------------------------- :Release: 0.20.0 :Date: 29 August 2024 Features ^^^^^^^^ * `@abooton `_ added support for saving data on a Lambert Azimuthal Equal Area (LAEA) projection, as grid definition template 3.140. `(ISSUE#344) `_, `(PR#343) `_ * `@trexfeathers `_, `@mo-marqh `_ and `@pp-mo `_ added support for production definition template 4.6, i.e. percentile forecasts. `(PR#401) `_, `(PR#295) `_, `(PR#271) `_ * `@pp-mo `_ expanded the use of the "GRIB_PARAM" attributes to GRIB1 loading, and documented it more thoroughly. `(ISSUE#330) `_, `(PR#402) `_ * `@DPeterK `_ and `@trexfeathers `_ added saving support for grid definition template 20 - polar stereographic. `(ISSUE#122) `_, `(PR#405) `_ Documentation ^^^^^^^^^^^^^ * `@tkknight `_ fixed docs building on ReadTheDocs, and enabled a test docs-build for each individual PR. `(ISSUE#365) `_, `(PR#366) `_ * `@tkknight `_ made docs builds treat warnings as errors. `(PR#471) `_ * `@pp-mo `_ reworked the main docs page to : headline basic load + save with Iris, rather than lower-level functions; better explain load-pairs and save-pairs usage; make all usage examples into doctests. `(ISSUE#398) `_, `(PR#402) `_ * `@bjlittle `_ updated the readme, replacing README.rst with README.md and adding a logo . `(PR#440) `_, `(PR#447) `_ * `@tkknight `_ fixed the display formatting of linux commands. `(PR#455) `_ Dependencies ^^^^^^^^^^^^ * `@pp-mo `_ enabled support for `eccodes v2.36 `_. Eccodes v2.36 has implemented some backwards incompatible changes : The ``indicatorOfUnitOfTimeRange`` key was removed, to be replaced with ``indicatorOfUnitForForecastTime`` (but only in GRIB v2 messages, not GRIB 1); and the ``iScansPositively`` and ``jScansPositively`` keys became read-only. The resulting changes mean **we now only support eccodes >=2.33**. `(PR#504) `_ * `@bjlittle `_ added iris-sample-data as a dependency, as required for doctests. `(PR#413) `_ * `@pp-mo `_ made essential changes for compatibility with Iris >= 3.10. `(PR#463) `_ Internal ^^^^^^^^ * `@trexfeathers `_ updated CONTRIBUTING.md in line with the newer v5 SciTools CLA. `(PR#371) `_ * `@pp-mo `_ updated an obsolete license header in one test. `(PR#374) `_ * `@trexfeathers `_ and `@pp-mo `_ added a pre-commit configuration and got all checks passing. `(ISSUE#388) `_, `(PR#400) `_, `(PR#406) `_ * `@HGWright `_ and `@trexfeathers `_ replaced setup.py with pyproject.toml. `(ISSUE#387) `_, `(PR#408) `_, `(PR#429) `_ * `@stephenworsley `_ configured for MyPy checking via pre-commit. `(ISSUE#386) `_, `(PR#407) `_ * `@ESadek-MO `_ and `@bjlittle `_ migrated CI testing from Cirrus to GitHub Actions. `(ISSUE#340) `_, `(PR#415) `_, `(PR#425) `_, `(PR#432) `_ * `@trexfeathers `_ and `@HGWright `_ adopted Ruff for code style checking. `(ISSUE#384) `_, `(PR#430) `_, `(PR#419) `_ * `@bjlittle `_ migrated the test runs from nose to pytest. `(ISSUE#253) `_, `(ISSUE#412) `_, `(PR#420) `_, `(PR#424) `_ * `@stephenworsley `_ removed the now-redundant _iris_mercator_support.py. `(ISSUE#431) `_, `(PR#433) `_, `(PR#435) `_ * `@bjlittle `_ added build manifest checking in GHA. `(PR#427) `_, `(PR#436) `_, `(PR#441) `_ * `@bjlittle `_ added dependabot checking. `(PR#426) `_ * `@bjlittle `_ removed 'wheel' dependency from build system, as-per `repo-review `_. `(PR#437) `_ * `@bjlittle `_ fixed blacken-docs url in pre-commit, as per `repo-review `_. `(PR#438) `_ * `@bjlittle `_ provided a custom per-commit.ci message, as per `repo-review `_. `(PR#439) `_ * `@pp-mo `_ removed obsolete workaround routines relating to older eccodes versions. `(ISSUE#239) `_, `(PR#410) `_ * `@HGWright `_ implemented version handling with setuptools.scm . `(ISSUE#418) `_, `(PR#444) `_ * `@bjlittle `_ moved the top-level ``./iris_grib`` folder to ``./src/iris_grib``, in line with modern practice, as per `repo-review `_. `(ISSUE#421) `_, `(PR#450) `_ * `@bjlittle `_ adopted .git-blame-ignore-revs to exclude some very noisy PRs from file "blame" views `(PR#452) `_ * `@bjlittle `_ dropped Python 3.9 support and added 3.12, in accordance with `nep29 `_. `(PR#453) `_ * `@bjlittle `_ updated all optional dependency requirements, and added codecov support. `(PR#454) `_, `(PR#459) `_ * `@bjlittle `_ added repository health checking with `repo-review `_ via pre-commit. `(ISSUE#392) `_, `(PR#456) `_ * `@bjlittle `_ added a CODE_OF_CONDUCT.md . `(PR#460) `_ * `@bjlittle `_ aligned .gitignore with a suggested standard form `(PR#461) `_ * `@bjlittle `_ fixed some spelling errors to satisfy codespell `(PR#479) `_ * `@githubalexliu `_ fixed a problem with the MyPy checking. `(ISSUE#496) `_, `(PR#497) `_ * `@trexfeathers `_ aligned the pre-commit-config with the SciTools "reference" version. `(PR#464) `_, New Contributors ^^^^^^^^^^^^^^^^ Welcome to * `@abooton `_ * `@githubalexliu `_ * `@stephenworsley `_ * `@tkknight `_ fixed the display formatting of linux * `@DPeterK `_ * `@ESadek-MO `_ * `@HGWright `_ What's new in iris-grib v0.19.1 ------------------------------- :Release: 0.19.1 :Date: 14 December 2023 Documentation ^^^^^^^^^^^^^ * `@pp-mo `_ updated the release notes with v0.19 changes. `(PR#370) `_ What's new in iris-grib v0.19.0 ------------------------------- :Release: 0.19.0 :Date: 16 November 2023 See also : `GitHub v0.19.0 release page `_ Features ^^^^^^^^ * `@lbdreyer `_ and `@pp-mo `_ (reviewer) modified the loading of GRIB messages with an unrecognised fixed surface type. These are now loaded in as an unnamed coordinate with an attribute called GRIB_fixed_surface_type. iris-grib will also save out cubes with this attribute as the given fixed surface type. `(PR#318) `_ * `@trexfeathers `_ extended Transverse Mercator to support negative scanning. `(PR#296) `_ * `@trexfeathers `_ added a number of new GRIB-CF mappings, i.e. translations from GRIB parameters to CF standard names and vice-versa. `(PR#297) `_ Bugs Fixed ^^^^^^^^^^ * `@lbdreyer `_ and `@pp-mo `_ (reviewer) modified the GRIB1 loading code so that it no longer assumes a spherical Earth with radius of 6371229 m and instead uses the resolutionAndComponentFlag to determine the shape of the Earth. This can either be a spherical Earth with radius of 6367470 m or an oblate spheroid, the latter of which is not supported. Note that this change in Earth's radius will result in a different coordinate system and may also affect the coordinate values. `(PR#316) `_ * `@s-boardman `_ corrected the calculation of bounded forecast periods in GRIB1 loading. `(PR#322) `_ * `@david-bentley `_ fixed the calculation of message file offsets to work in Windows as well as Linux, which was causing load failures. `(PR#287) `_ * `@bjlittle `_ fixed an error that occurred when a message had all-missing data points. `(PR#362) `_ Internal ^^^^^^^^ * `@lbdreyer `_ relicensed the repo from LGPL-3 to BSD-3. `(PR#359) `_ Dependencies ^^^^^^^^^^^^ * now requires Python version >= 3.9 * replaced deprecated eccodes-python PyPI package with new eccodes by @valeriupredoi in #357 * `@valeriupredoi `_ replaced the deprecated eccodes-python PyPI package with eccodes. `(PR#357) `_ New Contributors ^^^^^^^^^^^^^^^^ Welcome to * `@s-boardman `_ * `@david-bentley `_ * `@valeriupredoi `_ What's new in iris-grib v0.18.0 ------------------------------- :Release: 0.18.0 :Date: 14 March 2022 Bugs Fixed ^^^^^^^^^^ * `@lbdreyer `_ made various updates to allow iris-grib to work with the latest versions of `iris `_, `cf-units `_, `ecCodes `_ and `cartopy `_, including casting the usage of :meth:`cf_units.Unit.date2num` as float. setting and setting the values of some missing keys using ``gribapi.GRIB_MISSING_LONG``. `(PR#288) `_ Dependencies ^^^^^^^^^^^^ * now requires Python version >= 3.8 Internal ^^^^^^^^ * `@TomDufall `_ updated the code so that it was `flake8 `_ compliant and enabled flake8 checks to the CI. `(PR#271) `_ What's new in iris-grib v0.17.1 ------------------------------- :Release: 0.17.1 :Date: 8 June 2021 Bugs Fixed ^^^^^^^^^^ * `@TomDufall `_ removed the empty slice handling (originally added in v0.15.1) as this used iris.util._array_slice_ifempty which was removed in Iris v3.0.2 and is no longer necessary. `(PR#270) `_ Dependencies ^^^^^^^^^^^^ * now requires Iris version >= 3.0.2. * now requires Python version >= 3.7. What's new in iris-grib v0.17 ----------------------------- :Release: 0.17.0 :Date: 18 May 2021 Features ^^^^^^^^ * `@m1dr `_ added support for GRIB regulation 92.1.8 for loading GRIB files where the longitude increment is not given. `(PR#261) `_ * `@lbdreyer `_ added support for loading grid point and spectral data with CCSDS recommended lossless compression, i.e. data representation template 42. `(PR#264) `_ Internal ^^^^^^^^ * `@jamesp `_ moved CI testing to Cirrus CI. `(PR#250) `_ What's new in iris-grib v0.16 ----------------------------- :Release: 0.16.0 :Date: 27 Jan 2021 Features ^^^^^^^^ * `@tpowellmeto `_ added support for loading data on a "Lambert Azimuthal Equal Area Projection", i.e. grid definition template 3.140. `(PR#187) `_ * `@bjlittle `_ made all the tests runnable for a packaged install of iris-grib, where the grib testdata files will be missing. `(PR#212) `_ * `@m1dr `_ added support for loading statistical fields, as encoded in production definition template 3.8, even when the "interval time increment" value is not specified (i.e. set to "missing"). `(PR#206) `_ * `@pp-mo `_ ported some tests from Iris, which test grib saving of data loaded from other formats. `(PR#213) `_ * All grib-dependent testing is now contained in iris-grib : **There are no remaining tests in Iris which use grib.** Bugs Fixed ^^^^^^^^^^ * `@lbdreyer `_ unpinned the python-eccodes version for Travis testing, and added a workaround for a known bug in recent versions of python-eccodes. Previously, we could only test against python-eccodes versions ">=0.9.1,<2". `(PR#208) `_ * `@pp-mo `_ fixed save operations to round off the the integer values of vertical surfaces, instead of truncating them. `(PR#210) `_ * `@pp-mo `_ fixed loading of grid definition template 3.90, "Space view perspective or orthographic grid", which was **broken since Iris 2.3**. This now produces data with an iris `Geostationary `_ coordinate system. Prior to Iris 2.3, what is now the Iris 'Geostationary' class was (incorrectly) named "VerticalPerspective" : When that was `corrected in Iris 2.3 `_ , it broke the iris-grib loading, since the data was now incorrectly assigned the "new-style" Iris `VerticalPerspective `_ coordinate system, equivalent to the Cartopy `NearsidePerspective `_ and Proj `"nsper" `_ . The plotting behaviour of this is now **the same again as before Iris 2.3** : only the Iris coordinate system has changed. `(PR#223) `_ * `@pp-mo `_ fixed a problem where cubes were loading from GRIB 1 with a changed coordinate system, since eccodes versions >= 1.19. This resulted from a change to eccodes, which now returns a different 'shapeOfTheEarth' parameter. This resulted in a coordinate system with a different earth radius. For backwards compatibility, the earth radius has now been fixed to the same value as previously. However, pending further investigation, this value may be technically incorrect and we may yet decide to change it in a future release. `(PR#240) `_ Dependencies ^^^^^^^^^^^^ * now requires Iris version >= 3.0 Needed for the bugfix in `PR#223 `_ . What's new in iris-grib v0.15.1 ------------------------------- :Release: 0.15.1 :Date: 24 Feb 2020 Bugs Fixed ^^^^^^^^^^ * `@pp-mo `_ fixed a problem that caused very slow loading, and possible memory overflows, with Dask versions >= 2.0. **This requires Iris >= 2.4**, as a new minimum dependency. ( This problem was shared with UM file access in Iris, fixed in Iris 2.4. `(PR#190) `_ * `@trexfeathers `_ fixed all the tests to work with the latest Iris version, previously broken since Iris >= 2.3. `(PR#184) `_ and `(PR#185) `_ * `@lbdreyer `_ fixed a problem with the metadata in setup.py. `(PR#183) `_ Internal ^^^^^^^^ * `@lbdreyer `_ and `@pp-mo `_ ported various grib-specific tests from Iris. ( `PR#191 `_ , `PR#192 `_ , `PR#194 `_ , `PR#195 `_ , `PR#198 `_ , `PR#199 `_ , `PR#200 `_ , `PR#201 `_ and `PR#203 `_ ) Dependencies ^^^^^^^^^^^^ * now requires Iris version >= 2.4 Needed for the bugfix in `PR#190 `_ . What's new in iris-grib v0.15 ----------------------------- :Release: 0.15.0 :Date: 5 Dec 2019 Features ^^^^^^^^ * Updated translations between GRIB parameter code and CF standard_name or long_name : * additional WAFC codes, both to and from CF * 'mass_fraction_of_cloud_liquid_water_in_air' and 'mass_fraction_of_cloud_ice_in_air', both to and from CF * 'surface_downwelling_longwave_flux_in_air', now translates to GRIBcode(2, 0, 5, 3) (but not the reverse). * for full details, see : https://github.com/Scitools/iris-grib/compare/c4243ae..5c314e3#diff-cf46b46880cae59e82a91c7ab6bb81ba * Added support for loading GRIB messages with no fixed surface set in the product definition section * Added support for loading GRIB messages where i or j increment are not set * Added support for saving cubes that have a "depth" coordinate * Cubes loaded from GRIB files now contain a new GRIB_PARAM attribute, the value of which is an instance of iris_grib.grib_phenom_translation.GRIBCode and represents the parameter code. When saving, if a cube has a GRIBCode attribute, this determines the parameter code in the created message(s): This will _override_ any translation from the CF names. Bug Fixes ^^^^^^^^^ * Reverted a bug that was fixed in v0.13 related to loading hybrid pressure levels. It was agreed that the initial behaviour was correct Dependencies ^^^^^^^^^^^^ * Python 2 is no longer supported What's new in iris-grib v0.14 ----------------------------- :Release: 0.14.0 :Date: 6 Mar 2019 Features ^^^^^^^^ * Added support for WAFC aviation codes. * Added loading and saving of statistically processed values over a spatial area at a horizontal level or in a horizontal layer at a point in time (product definition template 15 in code table 4.0) :Release: 0.14.1 :Date: 12 Jun 2019 Bug Fixes ^^^^^^^^^ * Added fixes to get iris-grib working with the Python 3 compatible release of eccodes. This included workarounds such that lists that are returned by eccodes are converted to NumPy arrays as expected. What's new in iris-grib v0.13 ----------------------------- :Release: 0.13.0 :Date: 15 Jun 2018 Features ^^^^^^^^ * Added saving of data on Hybrid Pressure levels (surface type 119 in code table 4.5). * Added loading and saving of data on Hybrid Height levels (surface type 118 in code table 4.5). * Added loading and saving of data using Mercator projection (grid definition template 10 in template table 3.1) .. note:: Loading and saving for the Mercator projection is only available using iris versions greater than 2.1.0. * Added saving for data on irregular, non-rotated grids (grid definition template 4 in template table 3.1) * Added release notes for versions since 0.9. Bug Fixes ^^^^^^^^^ * Fixed a bug with loading data on Hybrid Pressure levels (surface types 105 and 119 in code table 4.5). Previously, *all* hybrid coordinate values, in both 'level_pressure' and 'sigma' coordinates, were loaded from the next level up, i.e. (model_level_number + 1). .. note:: This changes loading behaviour for data on hybrid pressure levels only. This is an incompatible change, but the coefficient values previously returned were essentially useless, with some values missing. What's new in iris-grib v0.12 ----------------------------- :Release: 0.12 :Date: 25 Oct 2017 Updated to work with `ecCodes `_ as its interface to GRIB files. This is ECMWF's replacement for the older GRIB-API, which is now deprecated. What's new in iris-grib v0.11 ----------------------------- :Release: 0.11 :Date: 25 Oct 2017 Update for Iris v2.0+, using `dask `_ in place of `biggus `_ for deferred loading. What's new in iris-grib v0.9 ----------------------------- :Release: 0.9.0 :Date: 25 Jul 2016 Stable release of iris-grib to support iris v1.10