This file is no longer updated and is provided for historical purposes only.
Please see docs/iris/src/whatsnew/ for a changelog.


Release 1.4 (14 June 2013)
==========================

* Saving multiple cubes to netcdf
  https://github.com/SciTools/iris/pull/367

* Rework Coord nearest_neighbour to support circular cases
  https://github.com/SciTools/iris/pull/391

* Simplified resource configuration
  https://github.com/SciTools/iris/pull/406

* Helper function for regridding that returns x and y coords
  https://github.com/SciTools/iris/pull/437

* Added iris.tests.assertArrayAllClose 
  https://github.com/SciTools/iris/pull/440

* Add bilinear interpolation between rectilinear grids.
  https://github.com/SciTools/iris/pull/442

* Added tolerances to Coord.is_contiguous()
  https://github.com/SciTools/iris/pull/459

* Pandas interoperability
  https://github.com/SciTools/iris/pull/439

* Nimrod level type 12 (below ground)
  https://github.com/SciTools/iris/pull/199

* Modified logic in Unit.convert to handle numpy scalars
  https://github.com/SciTools/iris/pull/472

* Experimental OPeNDAP functionality.
  https://github.com/SciTools/iris/pull/422

* Experimental GeoTiff export functionality: 
  `iris.experimental.raster.export_geotiff`

* Added a PEP8 test to ensure coding standards
  https://github.com/SciTools/iris/pull/476

* Add licence header check to tests
  https://github.com/SciTools/iris/issues/454

* Cube merge string coords.
  https://github.com/SciTools/iris/pull/475

* Unambiguous season year naming
  https://github.com/SciTools/iris/pull/490

* Area weighted regridding
  https://github.com/SciTools/iris/pull/464

* Removal of strict constraint in izip().
  https://github.com/SciTools/iris/pull/495

* PP save with no time forecast.
  https://github.com/SciTools/iris/pull/498

* Load of nimrod files with multiple fields and period of interest
  https://github.com/SciTools/iris/pull/507

* Conservative regridding, preserving area sums
  https://github.com/SciTools/iris/pull/453

* Handle missing values from grib messages
  https://github.com/SciTools/iris/pull/520

* PP export rule to calculate forecast period
  https://github.com/SciTools/iris/pull/514

* Preserve masked arrays during aggregation
  https://github.com/SciTools/iris/pull/527

* Support for ieee 32bit fieldsfiles to iris.load
  https://github.com/SciTools/iris/pull/297

* NetCDF load support for transverse Mercator and climatology
  https://github.com/SciTools/iris/pull/521

* Polar stereo grib loading
  https://github.com/SciTools/iris/pull/518

* GRIB export of cubes with no vertical information
  See https://github.com/SciTools/iris/issues/519 for ongoing discussion

* GRIB2 parameter translation
  https://github.com/SciTools/iris/pull/482
  
* Added depth rules for bounds
  https://github.com/SciTools/iris/pull/451

* Added a test for license checking of code files
  https://github.com/SciTools/iris/pull/477
  
* Fixed netcdf save cubelist bug
  https://github.com/SciTools/iris/pull/488
  
* Add an optimisation for single valued coordinate constraints
  https://github.com/SciTools/iris/pull/428
  
* Improved error message within Cube.aggregated_by()
  https://github.com/SciTools/iris/pull/504
  
* Change unit print-out
  https://github.com/SciTools/iris/pull/465

* Modified linear() to handle non-scalar length one coords
  https://github.com/SciTools/iris/pull/508
  
* Propagate all coord names in construct midpoint
  https://github.com/SciTools/iris/pull/499
  
* Resolved pickling issues with deferred loading
  https://github.com/SciTools/iris/pull/511
  
* Modified plot.py to pass coords arg through to _map_common()
  https://github.com/SciTools/iris/pull/463
  
* Use cartopy v0.8.0
  https://github.com/SciTools/iris/pull/494
  
  
Incompatible changes
--------------------
* As part of simplifying the mechanism for accessing test data
  `iris.io.select_data_path()`, `iris.config.DATA_REPOSITORY`,
  `iris.config.MASTER_DATA_REPOSITORY` and
  `iris.config.RESOURCE_DIR` have been removed.

Deprecations
------------
* The *add_custom_season_** functions from coord_categorisation.py have been deprecated in favour of adding their functionality to the *add_season_** functions



----------------------------


Release 1.3 (27 March 2013)
===========================

Features added
--------------
* Experimental support for loading ABF/ABL files.
* Support in `iris.analysis.interpolate.linear` for longitude ranges
  other than [-180, 180].
* Support for customised CF profiles on export to netCDF.
* The documentation now includes guidance on how to cite Iris.
* The ability to calculate the exponential of a Cube, via
  `iris.analysis.maths.exp()`.
* Experimental support for concatenating Cubes along existing dimensions
  via `iris.experimental.concatenate.concatenate()`.

Bugs fixed
----------
* Printing a Cube now supports Unicode attribute values.
* PP export now sets LBMIN correctly.
* Converting between reference times now works correctly for
  units with non-Gregorian calendars.
* Slicing a CubeList now returns a CubeList instead of a normal list.

Incompatible changes
--------------------
* N/A

Deprecations
------------
* The boolean methods/properties on the `Unit` class have been updated
  to `is_...()` methods, in line with the project's naming conventions.

  ========================== ======================
  Deprecated property/method New method
  ========================== ======================
  convertible()              is_convertible()
  dimensionless              is_dimensionless()
  no_unit                    is_no_unit()
  time_reference             is_time_reference()
  unknown                    is_unknown()
  ========================== ======================


----------------------------


Release 1.2 (7 March 2013)
==========================


Features added
--------------
* :meth:`iris.cube.Cube.convert_units()` and
  :meth:`iris.coords.Coord.convert_units()` have been added for straightforward
  conversion of cubes and coordinates from one unit to another.
* :attr:`iris.cube.Cube.var_name`, :attr:`iris.coords.Coord.var_name` and
  :attr:`iris.aux_factory.AuxCoordFactory.var_name` attributes have been added.
  This attribute represents the CF variable name of the object. It is populated
  when loading from CF-netCDF files and is used when writing to CF-netCDF. A
  var_name keyword argument has also been added to the
  :meth:`iris.cube.Cube.coord()`, :meth:`iris.cube.Cube.coords()` and
  :meth:`iris.cube.Cube.aux_factory()` methods.
* :meth:`iris.coords.Coord.is_compatible()` has been added. This method is
  used to determine whether two coordinates are sufficiently alike to
  allow operations such as :meth:`iris.coords.Coord.intersect()` and
  :func:`iris.analysis.interpolate.regrid()` to take place. A corresponding
  method for cubes, :meth:`iris.cube.Cube.is_compatible()`, has also been
  added.
* Printing a :class:`~iris.cube.Cube` is now more user friendly with regards 
  to dates and time. All *time* and *forecast_reference_time* scalar coordinates
  now display human readable date/time information.
* The units of a :class:`~iris.cube.Cube` are now shown when it is printed.
* The area weights calculated by :func:`iris.analysis.cartography.area_weights`
  may now be normalised relative to the total grid area.
* Weights may now be passed to :meth:`iris.cube.Cube.rolling_window` aggregations,
  thus allowing arbitrary digital filters to be applied to a :class:`~iris.cube.Cube`.

Bugs fixed
----------
* The GRIB hindcast interpretation of negative forecast times can be enabled
  via the :data:`iris.fileformats.grib.hindcast_workaround` flag.
* The NIMROD file loader has been extended to cope with orography vertical
  coordinates.

Incompatible changes
--------------------
* The deprecated :attr:`iris.cube.Cube.unit` and :attr:`iris.coords.Coord.unit`
  attributes have been removed.

Deprecations
------------
* The :meth:`iris.coords.Coord.unit_converted()` method has been deprecated.
  Users should make a copy of the coordinate using
  :meth:`iris.coords.Coord.copy()` and then call the
  :meth:`iris.coords.Coord.convert_units()` method of the new coordinate.
* With the addition of the var_name attribute the signatures of DimCoord and
  AuxCoord have changed. This should have no impact if you are providing
  parameters as keyword arguments, but it may cause issues if you are relying
  on the position/order of the arguments.
* Iteration over a :class:`~iris.cube.Cube` has been deprecated. Instead,
  users should use :meth:`iris.cube.Cube.slices`.


----------------------------


Release 1.1 (7 Dec, 2012)
=========================


Features added
--------------
* Support for Mac OS X.
* GRIB1 import now supports time units of "3 hours".
* Fieldsfile import now supports unpacked and "CRAY" 32-bit packed data
  in 64-bit Fieldsfiles.
* PP file import now supports "CRAY" 32-bit packed data.
* Various performance improvements, particularly for netCDF import,
  PP import, and constraints.
* GRIB2 export now supports level types of altitude and height
  (codes 102 and 103).
* iris.analysis.cartography.area_weights now supports non-standard
  dimension orders.
* PP file import now adds the "forecast_reference_time" for fields
  where LBTIM is 11, 12, 13, 31, or 32.
* PP file import now supports LBTIM values of 1, 2, and 3.
* Fieldsfile import now has some support for ancillary files.
* Coordinate categorisation functions added for day-of-year and
  user-defined seasons.
* GRIB2 import now has partial support for probability data defined
  with product template 4.9.

Bugs fixed
----------
* PP export no longer attempts to set/overwrite the STASH code based on
  the standard_name.
* Cell comparisons now work consistently, which fixes a bug where
  bounded_cell > point_cell compares the point to the bounds but,
  point_cell < bounded_cell compares the points.
* Fieldsfile import now correctly recognises pre v3.1 and post v5.2
  versions, which fixes a bug where the two were interchanged.
* iris.analysis.trajectory.interpolate now handles hybrid-height.

Incompatible changes
--------------------
* N/A

Deprecations
------------
* N/A


----------------------------


Release 1.0 (15 Oct, 2012)
==========================

Features added
--------------
* Iris can now represent hybrid-pressure vertical coordinates, and load
  them from GRIB files.
* Initial support for CF-style coordinate systems: lat-lon, rotated lat-lon,
  and transverse Mercator (incl. OSGB).
* Iris can now load NIMROD files.
* Availability of Cynthia Brewer colour palettes.
* Add a citation to a plot.
* Readability improvements to Cube summary.
* Ensures netCDF files are properly closed.
* A more explicit set of load functions, which also allow the automatic
  cube merging to be bypassed as a last resort.
* Save netCDF files with an unlimited dimension.
* The ability to project a cube with a lat-lon or rotated lat-lon coordinate
  system into a range of map projections e.g. Polar Stereographic.

Incompatible changes
--------------------
* The "source" and "history" metadata are now represented as Cube
  attributes, where previously they used coordinates.
* With the change to cartopy, the function iris.plot.gcm() is obsolete
  and has been removed.
* Three functions have been removed from iris.analysis.cartography:
  lat_lon_range(), get_lat_lon_grids(), and
  get_lat_lon_contiguous_grids(). They have been replaced with
  generalised versions: get_xy_grids()
  and get_xy_contiguous_bounded_grids().
* iris.plot.gcm, iris.plot.map_setup functions are now removed as part
  of the change to using cartopy. See the "what's new" section for further
  information on working with cartopy.
* The method `Cube.coord_dims()` now returns a tuple instead of a list.

Deprecations
------------
* The methods `Coord.cos()` and `Coord.sin()` have been deprecated.
* The function `load_strict()` has been deprecated. Code should now use
  `iris.load_cube()` and `iris.load_cubes()` instead.


----------------------------


Release 0.9.1 (11 Sep, 2012)
============================

Features added
--------------
* Fixed an issue with netCDF loading that failed to close file handles.

Incompatible changes
--------------------
* None

Deprecations
------------
* None


----------------------------


Release 0.9 (14 Aug, 2012)
==========================
 
Features added
--------------
* Iris is now an open source project. See `Iris on github <https://github.com/SciTools/iris>`_.
* Hybrid vertical coordinates are implemented with the new :class:`~iris.aux_factory.AuxCoordFactory`.
* More graceful loading of units. See `here <https://github.com/SciTools/iris/pull/17>`_ for more details.
 
Incompatible changes
--------------------
* The Iris data model is now fully aligned with the `CF data model <http://cf-pcmdi.llnl.gov/documents/cf-conventions/>`_ .
  Iris remains file-format independent, as is the underlying CF data model.
* Cube merging has been re-written for the new CF data model with the benefit that some corner cases are now better handled. 
  Some users may find that their cubes, once merged, now have a smaller total shape and more intelligent handling of dimension coordinate picking.

Deprecations
------------
* None


----------------------------


Release 0.8 (29 May, 2012)
==========================
 
Features added
--------------
* Cube trajectory extraction now supports irregular grids (ORCA2) using nearest-neighbour interpolation.
* Support cube arithmetic with masked array data.
* PP loading now utilises improved field-code to standard_name/unit mapping.
* Upgraded to use centrally installed and managed version 2 of PP packing library.

Incompatible changes
--------------------
* The ability to add UK Met Office branding to plots has been moved to
  the UK Met Office's internal `monty` library.
* The ability to read colour palettes from the UKMO IDL library has been
  moved to the UK Met Office's internal `monty` library.
 
Deprecations
------------
* None


----------------------------


Release 0.7 (23 Mar, 2012)
==========================


Features added
--------------
* Cubes can now have missing data in the form of numpy masked arrays. All plotting and aggregating routines
  should now support masked data handling without any user code changes necessary.
* GRIB2 saving now supported for common cases. GRIB loading capabilities further extended.
* NetCDF loading of multidimensional auxiliary data implemented, providing initial support for data with an ORCA grid.
* Extended the number of PP STASH code to standard name mappings.
* PP saving of non ``latitude, longitude`` cubes added.
* Cube merging has been upgraded to support optimisation of ``time``, ``forecast_period`` and 
  ``forecast_reference_time`` dimensionality.
* Added new gallery entry highlighting NetCDF support for rotated pole data.
* NetCDF saving should now be CF-1.5 compliant.
* Custom made colour palettes from the UKMO IDL library can now be loaded as matplotlib colour
  palettes (see :func:`iris.clrtools.load_clr`).
* It is now possible to iterate over multiple cubes "in step", ensuring that the metadata is consistent between the 
  given cubes (see :func:`iris.iterate.izip`).
* Cell methods will now appear in the printout of a cube.
* Supporting software dependency versions have been updated. Of particular note is matplotlib which has gone from version 1.0.1
  up to `1.1.0 <http://matplotlib.sourceforge.net/users/whats_new.html#new-in-matplotlib-1-1>`_ . This may have a small impact on
  some plot element placements.  

Incompatible changes
--------------------
* The call signature for custom loader functions handled via :class:`~iris.io.format_picker.FormatSpecification` has changed.  
  Previously the signature was ``loader(filename, callback)`` and now looks like ``loader(filenames, callback)`` where ``filenames``
  is an iterable of filenames.
* Custom aggregators should now create :class:`iris.analysis.Aggregator` instances rather than defining 
  a the partial creation of an Aggregate (i.e. ``partial(iris.analysis.Aggregate, ...)`` becomes ``iris.analysis.Aggregator(...)``.
* PP STASH code ingestion is now stricter. In particular handling of partial stash codes (i.e. those without a model or section) 
  is no longer done, meaning that some cubes which previously had a standard name may no longer have a standard name. 
  Further work is planned to support field code translation which should provide more robust and accurate PP interpretations.
* For parity with the CF-NetCDF community 'phenomenon_time' has now become 'time'.

Deprecations
------------
* Callback functions to ``iris.load`` and ``iris.load_strict`` should no longer return a value.
  Updated documentation can be found at :func:`iris.load`.


----------------------------


Release 0.6 (20 Jan, 2012)
==========================

Features added
--------------
* The PP loader now supports PP fields with a header release number of 3.
  (As used by the UM version 8.1)

* Initial support for multidimensional coordinates (i.e. those which span multiple
  cube data dimensions) with the standard ExplicitCoord class.

* Added cube to CF-netCDF saving.

* Print of a cube now supports multi-dimensional coordinates, and re-categorisation of
  cube coordinates into "dimensioned", "scalar" and "other" (i.e. neither dimensioned or
  scalar).

* Provide support for CF-netCDF label variables and 1-D auxiliary coordinate variables.

Incompatible changes
--------------------
* The ``cube.coords`` dictionary has been replaced with the ``cube.coord`` and ``cube.coords`` methods 
  for easier identification of coordinates.
* ``iris.cdm.coords`` has been moved and separated to ``iris.coords and`` ``iris.coord_systems``.
* CF-netCDF global attributes are now put in the cube "attributes" dictionary rather than
  as scalar cube coordinates. Additionally any "unused" CF-netCDF variable attributes are also put in the 
  cube "attributes" dictionary.

Deprecations
------------
* ``cube.axes`` is now deprecated and read-only. A coordinate's dimensions on a cube can be  
  found with the ``cube.coord_dims`` method. An interim cube convenience property
  "axes" is provided to support legacy getter functionality.

* ``cube.axis_length`` is now deprecated. A cube's shape can be determined with ``cube.shape``
  and the dimensions to which a coordinate is associated can be determined with ``cube.coord_dims``.


----------------------------

Release 0.5 (31 Oct, 2011)
==========================

* Overhaul to NetCDF loading. Iris will now load a far wider variety of CF
  compliant NetCDF files.

* Cubes loaded from PP will now have the associated "STASH" code in MSI format
  within the cube custom "attributes" dictionary.

* Cubes now have an "attributes" dictionary which can be used for phenomenon
  definition - cubes with different attributes are representing fundamentally
  different phenomenon.

* Strings can now be used to constrain standard name on load/extract.

* Plotting routines now pick the colour palettes based on the cube to plot.

* Added ability to derive area weights from a shapely geometry.

* Cubes can now be operated on (added, multiplied, etc.) using numpy arrays.

* New example of how to load custom ascii files into Cubes.

* Percentile aggregation added.

* Deferred data loading for Cubes loaded from netCDF.

* Pickle support for cubes. Pickling should be reserved for short term storage and 
  optimisation purposes only as pickle files will not be compatible across releases. 
