Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove deprecated Cython IF, DEF #1277

Merged
merged 15 commits into from
Oct 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ dist/
netCDF4/_netCDF4.c
netCDF4/*.so
include/constants.pyx
include/parallel_support_imports.pxi
netcdftime/_netcdftime.c
venv/
.eggs/
Expand Down
7 changes: 6 additions & 1 deletion Changelog
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
version 1.6.5 (not yet released)
version 1.7.0 (not yet released)
===============================
* fix for deprecated Cython `DEF` and `IF` statements using compatibility header
with shims for unavailable functionality

version 1.6.5 (tag v1.6.5rel)
===============================
* fix for issue #1271 (mask ignored if bool MA assinged to uint8 var)
* include information on specific object when reporting errors from netcdf-c
Expand Down
6 changes: 6 additions & 0 deletions include/mpi-compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
#ifndef MPI_COMPAT_H
#define MPI_COMPAT_H

#include "netcdf-compat.h"

#if HAS_PARALLEL_SUPPORT

#include <mpi.h>

#if (MPI_VERSION < 3) && !defined(PyMPI_HAVE_MPI_Message)
Expand All @@ -16,4 +20,6 @@ typedef void *PyMPI_MPI_Session;
#define MPI_Session PyMPI_MPI_Session
#endif

#endif /* HAS_PARALLEL_SUPPORT */

#endif/*MPI_COMPAT_H*/
164 changes: 85 additions & 79 deletions include/netCDF4.pxi
Original file line number Diff line number Diff line change
Expand Up @@ -358,94 +358,17 @@ cdef extern from "netcdf.h":
int nc_set_chunk_cache(size_t size, size_t nelems, float preemption) nogil
int nc_set_var_chunk_cache(int ncid, int varid, size_t size, size_t nelems, float preemption) nogil
int nc_get_var_chunk_cache(int ncid, int varid, size_t *sizep, size_t *nelemsp, float *preemptionp) nogil
int nc_rename_grp(int grpid, char *name) nogil
int nc_def_enum(int ncid, nc_type base_typeid, char *name, nc_type *typeidp) nogil
int nc_insert_enum(int ncid, nc_type xtype, char *name, void *value) nogil
int nc_inq_enum(int ncid, nc_type xtype, char *name, nc_type *base_nc_typep,\
size_t *base_sizep, size_t *num_membersp) nogil
int nc_inq_enum_member(int ncid, nc_type xtype, int idx, char *name, void *value) nogil

int nc_inq_enum_ident(int ncid, nc_type xtype, long long value, char *identifier) nogil
int nc_rc_set(char* key, char* value) nogil

IF HAS_QUANTIZATION_SUPPORT:
cdef extern from "netcdf.h":
cdef enum:
NC_NOQUANTIZE
NC_QUANTIZE_BITGROOM
NC_QUANTIZE_GRANULARBR
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

IF HAS_SZIP_SUPPORT:
cdef extern from "netcdf.h":
cdef enum:
H5Z_FILTER_SZIP
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
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

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

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

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

IF HAS_NC_OPEN_MEM:
cdef extern from "netcdf_mem.h":
int nc_open_mem(const char *path, int mode, size_t size, void* memory, int *ncidp) nogil
cdef extern from "mpi-compat.h":
pass

IF HAS_NC_CREATE_MEM:
cdef extern from "netcdf_mem.h":
int nc_create_mem(const char *path, int mode, size_t initialize, int *ncidp) nogil
ctypedef struct NC_memio:
size_t size
void* memory
int flags
int nc_close_memio(int ncid, NC_memio* info) nogil

IF HAS_PARALLEL4_SUPPORT or HAS_PNETCDF_SUPPORT:
cdef extern from "mpi-compat.h": pass
cdef extern from "netcdf_par.h":
ctypedef int MPI_Comm
ctypedef int MPI_Info
int nc_create_par(char *path, int cmode, MPI_Comm comm, MPI_Info info, int *ncidp) nogil
int nc_open_par(char *path, int mode, MPI_Comm comm, MPI_Info info, int *ncidp) nogil
int nc_var_par_access(int ncid, int varid, int par_access) nogil
cdef enum:
NC_COLLECTIVE
NC_INDEPENDENT
cdef extern from "netcdf.h":
cdef enum:
NC_MPIIO
NC_MPIPOSIX
NC_PNETCDF

IF HAS_SET_ALIGNMENT:
cdef extern from "netcdf.h":
int nc_set_alignment(int threshold, int alignment)
int nc_get_alignment(int *threshold, int *alignment)

# taken from numpy.pxi in numpy 1.0rc2.
cdef extern from "numpy/arrayobject.h":
Expand All @@ -459,3 +382,86 @@ cdef extern from "numpy/arrayobject.h":
char* PyArray_BYTES(ndarray) nogil
npy_intp* PyArray_STRIDES(ndarray) nogil
void import_array()


include "parallel_support_imports.pxi"

# Compatibility shims
cdef extern from "netcdf-compat.h":
int nc_rename_grp(int grpid, char *name) nogil
int nc_set_alignment(int threshold, int alignment)
int nc_get_alignment(int *threshold, int *alignment)
int nc_rc_set(char* key, char* value) nogil

int nc_open_mem(const char *path, int mode, size_t size, void* memory, int *ncidp) nogil
int nc_create_mem(const char *path, int mode, size_t initialize, int *ncidp) nogil
ctypedef struct NC_memio:
size_t size
void* memory
int flags
int nc_close_memio(int ncid, NC_memio* info) nogil

# Quantize shims
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

# Filter shims
int nc_inq_filter_avail(int ncid, unsigned filterid) 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

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_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_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

# Parallel shims
int nc_create_par(char *path, int cmode, MPI_Comm comm, MPI_Info info, int *ncidp) nogil
int nc_open_par(char *path, int mode, MPI_Comm comm, MPI_Info info, int *ncidp) nogil
int nc_var_par_access(int ncid, int varid, int par_access) nogil

cdef enum:
HAS_RENAME_GRP
HAS_NC_INQ_PATH
HAS_NC_INQ_FORMAT_EXTENDED
HAS_NC_OPEN_MEM
HAS_NC_CREATE_MEM
HAS_CDF5_FORMAT
HAS_PARALLEL_SUPPORT
HAS_PARALLEL4_SUPPORT
HAS_PNETCDF_SUPPORT
HAS_SZIP_SUPPORT
HAS_QUANTIZATION_SUPPORT
HAS_ZSTANDARD_SUPPORT
HAS_BZIP2_SUPPORT
HAS_BLOSC_SUPPORT
HAS_SET_ALIGNMENT
HAS_NCFILTER
HAS_NCRCSET

NC_NOQUANTIZE
NC_QUANTIZE_BITGROOM
NC_QUANTIZE_GRANULARBR
NC_QUANTIZE_BITROUND

H5Z_FILTER_SZIP
H5Z_FILTER_ZSTD
H5Z_FILTER_BZIP2
H5Z_FILTER_BLOSC

NC_COLLECTIVE
NC_INDEPENDENT

NC_MPIIO
NC_MPIPOSIX
NC_PNETCDF
Loading