Skip to content

Commit

Permalink
fix for issue #1209
Browse files Browse the repository at this point in the history
  • Loading branch information
jswhit committed Nov 12, 2022
1 parent 55d19c1 commit 8ad370a
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 14 deletions.
8 changes: 3 additions & 5 deletions include/netCDF4.pxi
Expand Up @@ -368,6 +368,7 @@ cdef extern from "netcdf.h":
int nc_inq_enum_ident(int ncid, nc_type xtype, long long value, char *identifier) nogil



IF HAS_QUANTIZATION_SUPPORT:
cdef extern from "netcdf.h":
cdef enum:
Expand All @@ -377,6 +378,8 @@ IF HAS_QUANTIZATION_SUPPORT:
NC_QUANTIZE_BITROUND
int nc_def_var_quantize(int ncid, int varid, int quantize_mode, int nsd) nogil
int nc_inq_var_quantize(int ncid, int varid, int *quantize_modep, int *nsdp) nogil

IF HAS_NCFILTER:
cdef extern from "netcdf_filter.h":
int nc_inq_filter_avail(int ncid, unsigned filterid) nogil

Expand All @@ -388,32 +391,27 @@ IF HAS_SZIP_SUPPORT:
int nc_inq_var_quantize(int ncid, int varid, int *quantize_modep, int *nsdp) nogil
int nc_def_var_szip(int ncid, int varid, int options_mask, int pixels_per_bloc) nogil
int nc_inq_var_szip(int ncid, int varid, int *options_maskp, int *pixels_per_blockp) nogil
cdef extern from "netcdf_filter.h":
int nc_inq_filter_avail(int ncid, unsigned filterid) nogil

IF HAS_ZSTANDARD_SUPPORT:
cdef extern from "netcdf_filter.h":
cdef enum:
H5Z_FILTER_ZSTD
int nc_def_var_zstandard(int ncid, int varid, int level) nogil
int nc_inq_var_zstandard(int ncid, int varid, int* hasfilterp, int *levelp) nogil
int nc_inq_filter_avail(int ncid, unsigned id) nogil

IF HAS_BZIP2_SUPPORT:
cdef extern from "netcdf_filter.h":
cdef enum:
H5Z_FILTER_BZIP2
int nc_def_var_bzip2(int ncid, int varid, int level) nogil
int nc_inq_var_bzip2(int ncid, int varid, int* hasfilterp, int *levelp) nogil
int nc_inq_filter_avail(int ncid, unsigned filterid) nogil

IF HAS_BLOSC_SUPPORT:
cdef extern from "netcdf_filter.h":
cdef enum:
H5Z_FILTER_BLOSC
int nc_def_var_blosc(int ncid, int varid, unsigned subcompressor, unsigned level, unsigned blocksize, unsigned addshuffle) nogil
int nc_inq_var_blosc(int ncid, int varid, int* hasfilterp, unsigned* subcompressorp, unsigned* levelp, unsigned* blocksizep, unsigned* addshufflep) nogil
int nc_inq_filter_avail(int ncid, unsigned filterid) nogil

IF HAS_NC_OPEN_MEM:
cdef extern from "netcdf_mem.h":
Expand Down
14 changes: 12 additions & 2 deletions setup.py
Expand Up @@ -70,6 +70,7 @@ def check_api(inc_dirs,netcdf_lib_version):
has_zstandard = False
has_bzip2 = False
has_blosc = False
has_ncfilter = False
has_set_alignment = False

for d in inc_dirs:
Expand Down Expand Up @@ -116,6 +117,8 @@ def check_api(inc_dirs,netcdf_lib_version):
has_bzip2 = True
if line.startswith('EXTERNL int nc_def_var_blosc'):
has_blosc = True
if line.startswith('EXTERNL int nc_inq_filter_avail'):
has_ncfilter = True

ncmetapath = os.path.join(d,'netcdf_meta.h')
if os.path.exists(ncmetapath):
Expand Down Expand Up @@ -143,7 +146,7 @@ def check_api(inc_dirs,netcdf_lib_version):
return has_rename_grp, has_nc_inq_path, has_nc_inq_format_extended, \
has_cdf5_format, has_nc_open_mem, has_nc_create_mem, \
has_parallel4_support, has_pnetcdf_support, has_szip_support, has_quantize, \
has_zstandard, has_bzip2, has_blosc, has_set_alignment
has_zstandard, has_bzip2, has_blosc, has_set_alignment, has_ncfilter


def getnetcdfvers(libdirs):
Expand Down Expand Up @@ -557,7 +560,7 @@ def _populate_hdf5_info(dirstosearch, inc_dirs, libs, lib_dirs):
has_rename_grp, has_nc_inq_path, has_nc_inq_format_extended, \
has_cdf5_format, has_nc_open_mem, has_nc_create_mem, \
has_parallel4_support, has_pnetcdf_support, has_szip_support, has_quantize, \
has_zstandard, has_bzip2, has_blosc, has_set_alignment = \
has_zstandard, has_bzip2, has_blosc, has_set_alignment, has_ncfilter = \
check_api(inc_dirs,netcdf_lib_version)
# for netcdf 4.4.x CDF5 format is always enabled.
if netcdf_lib_version is not None and\
Expand Down Expand Up @@ -671,6 +674,13 @@ def _populate_hdf5_info(dirstosearch, inc_dirs, libs, lib_dirs):
sys.stdout.write('netcdf lib does not have nc_set_alignment function\n')
f.write('DEF HAS_SET_ALIGNMENT = 0\n')

if has_blosc:
sys.stdout.write('netcdf lib has nc_inq_filter_avail function\n')
f.write('DEF HAS_NCFILTER = 1\n')
else:
sys.stdout.write('netcdf lib does not have nc_inq_filter_avail function\n')
f.write('DEF HAS_NCFILTER = 0\n')

f.close()

if has_parallel4_support or has_pnetcdf_support:
Expand Down
20 changes: 13 additions & 7 deletions src/netCDF4/_netCDF4.pyx
Expand Up @@ -3543,15 +3543,21 @@ returns True if bzip2 compression filter is available"""
**`has_szip_filter(self)`**
returns True if szip compression filter is available"""
cdef int ierr
IF HAS_SZIP_SUPPORT:
with nogil:
ierr = nc_inq_filter_avail(self._grpid, H5Z_FILTER_SZIP)
if ierr:
IF HAS_NCFILTER:
IF HAS_SZIP_SUPPORT:
with nogil:
ierr = nc_inq_filter_avail(self._grpid, H5Z_FILTER_SZIP)
if ierr:
return False
else:
return True
ELSE:
return False
else:
ELSE:
IF HAS_SZIP_SUPPORT:
return True
ELSE:
return False
ELSE:
return False

cdef class Group(Dataset):
"""
Expand Down

0 comments on commit 8ad370a

Please sign in to comment.