diff --git a/pyfive/dataobjects.py b/pyfive/dataobjects.py index adb19eb..57e5a90 100644 --- a/pyfive/dataobjects.py +++ b/pyfive/dataobjects.py @@ -480,6 +480,10 @@ def _get_contiguous_data(self, property_offset): def _get_chunked_data(self, offset): """ Return data which is chunked. """ + + if np.prod(self.shape) == 0: + return np.empty(self.shape, dtype=self.dtype) + self._get_chunk_params() chunk_btree = BTreeV1RawDataChunks( self.fh, self._chunk_address, self._chunk_dims) diff --git a/tests/h5netcdf_test.hdf5 b/tests/h5netcdf_test.hdf5 new file mode 100644 index 0000000..e6cdbfb Binary files /dev/null and b/tests/h5netcdf_test.hdf5 differ diff --git a/tests/make_netcdf_unlimited.py b/tests/make_netcdf_unlimited.py new file mode 100644 index 0000000..1701f58 --- /dev/null +++ b/tests/make_netcdf_unlimited.py @@ -0,0 +1,18 @@ +#! /usr/bin/env python +""" Create a netcdf file with an unlimited dimension, but no data """ + +import netCDF4 +import numpy as np + +f = netCDF4.Dataset('netcdf4_empty_unlimited.nc', 'w') +f.createDimension('x', 4) +f.createDimension('unlimited', None) # Unlimited dimension +v = f.createVariable("foo_unlimited", float, ("x", "unlimited")) +f.close() + +f = netCDF4.Dataset('netcdf4_unlimited.nc', 'w') +f.createDimension('x', 4) +f.createDimension('unlimited', None) # Unlimited dimension +v = f.createVariable("foo_unlimited", float, ("x", "unlimited")) +v[:] = np.ones((4,1)) +f.close() diff --git a/tests/netcdf4_empty_unlimited.nc b/tests/netcdf4_empty_unlimited.nc new file mode 100644 index 0000000..9f7d7a9 Binary files /dev/null and b/tests/netcdf4_empty_unlimited.nc differ diff --git a/tests/netcdf4_unlimited.nc b/tests/netcdf4_unlimited.nc new file mode 100644 index 0000000..0074901 Binary files /dev/null and b/tests/netcdf4_unlimited.nc differ diff --git a/tests/test_netcdf_unlimited.py b/tests/test_netcdf_unlimited.py new file mode 100644 index 0000000..adfe475 --- /dev/null +++ b/tests/test_netcdf_unlimited.py @@ -0,0 +1,43 @@ +""" Unit tests for pyfive's ability to read a NetCDF4 Classic file with an unlimited dimension""" +import os +import warnings + +import numpy as np +from numpy.testing import assert_array_equal + +import pyfive + +DIRNAME = os.path.dirname(__file__) +NETCDF4_UNLIMITED_FILE = os.path.join(DIRNAME, 'netcdf4_unlimited.nc') +NETCDF4_EMPTY_UNLIMITED_FILE = os.path.join(DIRNAME, 'netcdf4_empty_unlimited.nc') +H5NETCDF_FILE = os.path.join(DIRNAME, 'h5netcdf_test.hdf5') + +def test_read_netcdf4_unlimited(): + """" This works""" + + with pyfive.File(NETCDF4_UNLIMITED_FILE) as hfile: + + # dataset + var1 = hfile['foo_unlimited'] + assert var1.dtype == np.dtype('