v2.4 (20 Feb 2020)
******************

This document explains the changes made to Iris for this release
(:doc:`View all changes <index>`.)


Features
========

.. admonition:: Last python 2 version of Iris

    Iris 2.4 is a final extra release of Iris 2, which back-ports specific
    desired features from Iris 3 (not yet released).

    The purpose of this is both to support early adoption of certain newer
    features, and to provide a final release for Python 2.

    The next release of Iris will be version 3.0 : a major-version release which
    introduces breaking API and behavioural changes, and only supports Python 3.

* :class:`iris.coord_systems.Geostationary` can now accept creation arguments of
  `false_easting=None` or `false_northing=None`, equivalent to values of 0.
  Previously these kwargs could be omitted, but could not be set to `None`.
  This also enables loading of netcdf data on a Geostationary grid, where
  either of these keys is not present as a grid-mapping variable
  property : Previously, loading any such data caused an exception.

* The area weights used when performing area weighted regridding with
  :class:`iris.analysis.AreaWeighted` are now cached.  This allows a
  significant speed up when regridding multiple similar cubes, by repeatedly
  using a :func:`iris.analysis.AreaWeighted.regridder` objects
  which you created first.

* Name constraint matching against cubes during loading or extracting has been
  relaxed from strictly matching against the :meth:`~iris.cube.Cube.name`, to
  matching against either the ``standard_name``, ``long_name``, NetCDF
  ``var_name``, or ``STASH`` attributes metadata of a cube.

* Cubes and coordinates now have a new ``names`` property that contains a tuple
  of the ``standard_name``, ``long_name``, NetCDF ``var_name``, and ``STASH``
  attributes metadata.  

* The :class:`~iris.NameConstraint` provides richer name constraint matching
  when loading or extracting against cubes, by supporting a constraint against
  any combination of ``standard_name``, ``long_name``, NetCDF ``var_name`` and
  ``STASH`` from the attributes dictionary of a :class:`~iris.cube.Cube`.


Bugs Fixed
==========

* Fixed a problem which was causing file loads to fetch *all* field data
  whenever UM files (PP or Fieldsfiles) were loaded.
  With large source files, initial file loads are slow, with large memory usage
  before any cube data is even fetched.  Large enough files will cause a crash.
  The problem occurs only with Dask versions >= 2.0.


Internal
========

* Iris is now able to use the latest version of matplotlib.
