v1.7 (04 Jul 2014)
This document explains the changes made to Iris for this release (View all changes.)
Showcase: Iris is making use of Biggus
Iris is now making extensive use of Biggus for virtual arrays and lazy array evaluation. In practice this means that analyses of cubes with data bigger than the available system memory are now possible.
Other than the improved functionality the changes are mostly transparent; for example, before the introduction of biggus, MemoryErrors were likely for very large datasets:
>>> result = extremely_large_cube.collapsed('time', iris.analyis.MEAN) MemoryError
Now, for supported operations, the evaluation is lazy (i.e. it doesn’t take place until the actual data is subsequently requested) and can handle data larger than available system memory:
>>> result = extremely_large_cube.collapsed('time', iris.analyis.MEAN) >>> print(type(result)) <class 'iris.cube.Cube'>
Memory is still a limiting factor if ever the data is desired as a NumPy
array (e.g. via
cube.data), but additional
methods have been added to the Cube to support querying and subsequently
accessing the “lazy” data form (see
Showcase: New interpolation and regridding API
New interpolation and regridding interfaces have been added which simplify and extend the existing functionality.
interpolated_cube = cube.interpolate(interpolation_points, interpolation_scheme)
regridded_cube = cube.regrid(target_grid_cube, regridding_scheme)
Whilst not all schemes have been migrated to the new interface,
iris.analysis.Linear defines both linear interpolation and
iris.analysis.AreaWeighted defines an area weighted
Showcase: Merge and concatenate reporting
Merge reporting is designed as an aid to the merge processes. Should merging
CubeList fail, merge reporting means that a
descriptive error will be raised that details the differences between the
cubes in the
CubeList that prevented the merge from
CubeList method, called
merge_cube(), has been introduced. Calling it on a
CubeList will result in a single merged
Cube being returned or an error message being raised
that describes why the merge process failed.
The following example demonstrates the error message that describes a merge failure caused by cubes having differing attributes:
>>> cube_list = iris.cube.CubeList((c1, c2)) >>> cube_list.merge_cube() Traceback (most recent call last): ... raise iris.exceptions.MergeError(msgs) iris.exceptions.MergeError: failed to merge into a single cube. cube.attributes keys differ: 'foo'
Concatenate reporting is the equivalent process for concatenating a
CubeList. It is accessed through the method
concatenate_cube(), which will return a single
concatenated cube or produce an error message that describes why the
concatenate process failed.
Showcase: Cube broadcasting
When performing cube arithmetic, cubes now follow similar broadcasting rules as NumPy arrays.
However, the additional richness of Iris coordinate meta-data provides an enhanced capability beyond the basic broadcasting behaviour of NumPy.
This means that when performing cube arithmetic, the dimensionality and shape of cubes no longer need to match. For example, if the dimensionality of a cube is reduced by collapsing, then the result can be used to subtract from the original cube to calculate an anomaly:
>>> time_mean = original_cube.collapsed('time', iris.analysis.MEAN) >>> mean_anomaly = original_cube - time_mean
Given both broadcasting and coordinate meta-data, Iris can now perform arithmetic with cubes that have similar but not identical shape:
>>> similar_cube = original_cube.copy() >>> similar_cube.transpose() >>> zero_cube = original_cube - similar_cube
Merge reporting that raises a descriptive error if the merge process fails.
Linear interpolation and regridding now make use of SciPy’s RegularGridInterpolator for much faster linear interpolation.
NAME file loading now handles the “no time averaging” column and translates height/altitude above ground/sea-level columns into appropriate coordinate metadata.
The NetCDF saver has been extended to allow saving of cubes with hybrid pressure auxiliary factories.
PP/FF loading supports LBLEV of 9999.
Extended GRIB1 loading to support data on hybrid pressure levels.
iris.coord_categorisation.add_day_of_year()can be used to add categorised day of year coordinates based on time coordinates with non-Gregorian calendars.
Support for loading data on reduced grids from GRIB files in raw form without automatically interpolating to a regular grid.
Extended NetCDF loading to support the “ocean sigma over z” auxiliary coordinate factory.
Support added for loading CF-NetCDF data with bounds arrays that are missing a vertex dimension.
Loading of PP and FF files has been optimised through deferring creation of PPField attributes.
Automatic association of a coordinate’s CF formula terms variable with the data variable associated with that coordinate.
PP loading translates cross-section height into a dimensional auxiliary coordinate.
String auxiliary coordinates can now be plotted with the Iris plotting wrappers.
iris.analysis.geometry.geometry_area_weights()now allows for the calculation of normalized cell weights.
Many new translations between the CF spec and STASH codes or GRIB2 parameter codes.
PP save rules add the data’s UM Version to the attributes of the saved file when appropriate.
NetCDF reference surface variable promotion available through the
A speed improvement in calculation of
The mdtol keyword was added to area-weighted regridding to allow control of the tolerance for missing data. For a further description of this concept, see
Handling for patching of the CF conventions global attribute via a defined cf_patch_conventions function.
Deferred GRIB data loading has been introduced for reduced memory consumption when loading GRIB files.
Concatenate reporting that raises a descriptive error if the concatenation process fails.
A speed improvement when loading PP or FF data and constraining on STASH code.
Data containing more than one reference cube for constructing hybrid height coordinates can now be loaded.
Removed cause of increased margin of error when interpolating.
Changed floating-point precision used when wrapping points for interpolation.
Mappables that can be used to generate colorbars are now returned by Iris plotting wrappers.
NetCDF load ignores over-specified formula terms on bounded dimensionless vertical coordinates.
Auxiliary coordinate factory loading now correctly interprets formula term variables for “atmosphere hybrid sigma pressure” coordinate data.
Corrected comparison of NumPy NaN values in cube merge process.
iris.cube.Cube.intersection()to correct calculating the intersection of a cube with split bounds, handling of circular coordinates, handling of monotonically descending bounded coordinates and for finding a wrapped two-point result and longitude tolerances.
Aggregate_by may now be passed single-value coordinates.
Making a copy of a
iris.coords.DimCoordno longer results in the writeable flag on the copied points and bounds arrays being set to True.
Can now save to PP a cube that has vertical levels but no orography.
Fix a bug causing surface altitude and surface pressure fields to not appear in cubes loaded with a STASH constraint.
Fixed support for
iris.fileformats.pp.STASHobjects in STASH constraints.
A fix to avoid a problem where cube attribute names clash with NetCDF reserved attribute names.
A fix to allow
iris.cube.CubeList.concatenate()to deal with descending coordinate order.
v1.7.3 (16 Dec 2014)
Scalar dimension coordinates can now be concatenated with
Arbitrary names can no longer be set for elements of a
Cubes that contain a pseudo-level coordinate can now be saved to PP.
Fixed a bug in the FieldsFile loader that prevented it always loading all available fields.
v1.7.4 (15 Apr 2015)
Coord.guess_bounds()can now deal with circular coordinates.
Coord.nearest_neighbour_index()can now work with descending bounds.
Passing weights to
Cube.rolling_window()no longer prevents other keyword arguments from being passed to the aggregator.
Several minor fixes to allow use of Iris on Windows.
Made use of the new standard_parallels keyword in Cartopy’s LambertConformal projection (Cartopy v0.12). Older versions of Iris will not be able to create LambertConformal coordinate systems with Cartopy >= 0.12.
Saving a cube with a STASH attribute to NetCDF now produces a variable with an attribute of “um_stash_source” rather than “ukmo__um_stash_source”.
Cubes saved to NetCDF with a coordinate system referencing a spherical ellipsoid now result in the grid mapping variable containing only the “earth_radius” attribute, rather than the “semi_major_axis” and “semi_minor_axis”.
Collapsing a cube over all of its dimensions now results in a scalar cube rather than a 1d cube.
iris.util.ensure_array()has been deprecated.
Matplotlib is no longer a core Iris dependency.
An example demonstrating custom log-scale colouring has been added. See Colouring Anomaly Data With Logarithmic Scaling.
An example of reprojecting data from 2D auxiliary spatial coordinates (such as that from the ORCA grid) has been added. See Tri-Polar Grid Projected Plotting.
A clarification of the behaviour of
A new “Technical Papers” section has been added to the documentation along with the addition of a paper providing an overview of the load process for UM-like fileformats (e.g. PP and Fieldsfile).