# What’s new in h5py 2.2

## Support for Parallel HDF5

On UNIX platforms, you can now take advantage of MPI and Parallel HDF5. Cython, `mpi4py` and an MPI-enabled build of HDF5 are required.. See Parallel HDF5 in the documentation for details.

## Support for Python 3.3

Python 3.3 is now officially supported.

## Mini float support (issue #141)

Two-byte floats (NumPy `float16`) are supported.

## HDF5 scale/offset filter

The Scale/Offset filter added in HDF5 1.8 is now available.

## Field indexing is now allowed when writing to a dataset (issue #42)

H5py has long supported reading only certain fields from a dataset:

    >>> dset = f.create_dataset('x', (100,), dtype=np.dtype([('a', 'f'), ('b', 'i')]))
    >>> out = dset['a', 0:100:10]
    >>> out.dtype
    dtype('float32')

Now, field names are also allowed when writing to a dataset:

    >>> dset['a', 20:50] = 1.0

## Region references preserve shape (issue #295)

Previously, region references always resulted in a 1D selection, even when 2D slicing was used:

    >>> dset = f.create_dataset('x', (10, 10))
    >>> ref = dset.regionref[0:5,0:5]
    >>> out = dset[ref]
    >>> out.shape
    (25,)

Shape is now preserved:

    >>> out = dset[ref]
    >>> out.shape
    (5, 5)

Additionally, the shape of both the target dataspace and the selection shape can be determined via new methods on the `regionref` proxy (now available on both datasets and groups):

    >>> f.regionref.shape(ref)
    (10, 10)
    >>> f.regionref.selection(ref)
    (5, 5)

## Committed types can be linked to datasets and attributes

HDF5 supports “shared” named types stored in the file:

    >>> f['name'] = np.dtype("int64")

You can now use these types when creating a new dataset or attribute, and HDF5 will “link” the dataset type to the named type:

    >>> dset = f.create_dataset('int dataset', (10,), dtype=f['name'])
    >>> f.attrs.create('int scalar attribute', shape=(), dtype=f['name'])

## `move` method on Group objects

It’s no longer necessary to move objects in a file by manually re-linking them:

    >>> f.create_group('a')
    >>> f['b'] = f['a']
    >>> del f['a']

The method `Group.move` allows this to be performed in one step:

    >>> f.move('a', 'b')

Both the source and destination must be in the same file.