1# size_t, ptrdiff_t are defined in stdlib.h
2cdef extern from "stdlib.h":
3    ctypedef long size_t
4    ctypedef long ptrdiff_t
5
6# hdf5 version info.
7cdef extern from "H5public.h":
8    ctypedef int herr_t
9    int H5get_libversion( unsigned int *majnum, unsigned int *minnum, unsigned int *relnum )
10
11cdef extern from *:
12    ctypedef char* const_char_ptr "const char*"
13
14# netcdf functions.
15cdef extern from "netcdf.h":
16    ctypedef int nclong
17    ctypedef int nc_type
18    ctypedef struct nc_vlen_t:
19        size_t len                 # Length of VL data (in base type units)
20        void *p                    # Pointer to VL data
21    float NC_FILL_FLOAT
22    long NC_FILL_INT
23    double NC_FILL_DOUBLE
24    char NC_FILL_CHAR
25    long long NC_FILL_INT64
26    unsigned long NC_FILL_UINT
27    unsigned long long NC_FILL_UINT64
28    cdef enum:
29        NC_NAT # NAT = 'Not A Type' (c.f. NaN)
30        NC_BYTE # signed 1 byte integer
31        NC_CHAR # ISO/ASCII character
32        NC_SHORT # signed 2 byte integer
33        NC_INT # signed 4 byte integer
34        NC_LONG # deprecated, but required for backward compatibility.
35        NC_FLOAT # single precision floating point number
36        NC_DOUBLE # double precision floating point number
37        NC_UBYTE # unsigned 1 byte int
38        NC_USHORT # unsigned 2-byte int
39        NC_UINT # unsigned 4-byte int
40        NC_INT64 # signed 8-byte int
41        NC_UINT64 # unsigned 8-byte int
42        NC_STRING # string
43        NC_VLEN # used internally for vlen types
44        NC_OPAQUE # used internally for opaque types
45        NC_COMPOUND # used internally for compound types
46        NC_ENUM # used internally for enum types.
47        # Use these 'mode' flags for nc_open.
48        NC_NOWRITE # default is read only
49        NC_WRITE # read & write
50        # Use these 'mode' flags for nc_create.
51        NC_CLOBBER
52        NC_NOCLOBBER # Don't destroy existing file on create
53        NC_64BIT_OFFSET # Use large (64-bit) file offsets
54        NC_64BIT_DATA # Use cdf-5 format
55        NC_NETCDF4 # Use netCDF-4/HDF5 format
56        NC_CLASSIC_MODEL # Enforce strict netcdf-3 rules.
57        # Use these 'mode' flags for both nc_create and nc_open.
58        NC_SHARE # Share updates, limit cacheing
59        # The following flag currently is ignored, but use in
60        # nc_open() or nc_create() may someday support use of advisory
61        # locking to prevent multiple writers from clobbering a file
62        NC_LOCK  # Use locking if available
63        #       Default fill values, used unless _FillValue attribute is set.
64        # These values are stuffed into newly allocated space as appropriate.
65        # The hope is that one might use these to notice that a particular datum
66        # has not been set.
67        NC_FILL_BYTE
68        #NC_FILL_CHAR
69        NC_FILL_SHORT
70        #NC_FILL_INT
71        #NC_FILL_FLOAT
72        #NC_FILL_DOUBLE
73        NC_FILL_UBYTE
74        NC_FILL_USHORT
75        #NC_FILL_UINT
76        #NC_FILL_INT64
77        #NC_FILL_UINT64
78        # These represent the max and min values that can be stored in a
79        # netCDF file for their associated types. Recall that a C compiler
80        # may define int to be any length it wants, but a NC_INT is *always*
81        # a 4 byte signed int. On a platform with has 64 bit ints, there will
82        # be many ints which are outside the range supported by NC_INT. But
83        # since NC_INT is an external format, it has to mean the same thing
84        # everywhere.
85        NC_MAX_BYTE
86        NC_MIN_BYTE
87        NC_MAX_CHAR
88        NC_MAX_SHORT
89        NC_MIN_SHORT
90        NC_MAX_INT
91        NC_MIN_INT
92        NC_MAX_FLOAT
93        NC_MIN_FLOAT
94        NC_MAX_DOUBLE8
95        NC_MIN_DOUBLE
96        NC_MAX_UBYTE
97        NC_MAX_USHORT
98        NC_MAX_UINT
99        NC_MAX_INT64
100        NC_MIN_INT64
101        NC_MAX_UINT64
102        X_INT64_MAX
103        X_INT64_MIN
104        X_UINT64_MAX
105        # The above values are defaults.
106        # If you wish a variable to use a different value than the above
107        # defaults, create an attribute with the same type as the variable
108        # and the following reserved name. The value you give the attribute
109        # will be used as the fill value for that variable.
110        _FillValue
111        NC_FILL
112        NC_NOFILL
113        # Starting with version 3.6, there are different format netCDF
114        # files. 4.0 instroduces the third one. These defines are only for
115        # the nc_set_default_format function.
116        NC_FORMAT_CLASSIC
117        NC_FORMAT_64BIT
118        NC_FORMAT_64BIT_OFFSET
119        NC_FORMAT_64BIT_DATA
120        NC_FORMAT_NETCDF4
121        NC_FORMAT_NETCDF4_CLASSIC
122        NC_FORMAT_NC3
123        NC_FORMAT_NC_HDF4
124        NC_FORMAT_NC_HDF5
125        NC_FORMAT_DAP2
126        NC_FORMAT_DAP4
127        NC_FORMAT_PNETCDF
128        NC_FORMAT_UNDEFINED
129        # Let nc__create() or nc__open() figure out
130        # as suitable chunk size.
131        NC_SIZEHINT_DEFAULT
132        # In nc__enddef(), align to the chunk size.
133        NC_ALIGN_CHUNK
134        # 'size' argument to ncdimdef for an unlimited dimension
135        NC_UNLIMITED
136        # attribute id to put/get a global attribute
137        NC_GLOBAL
138        # These maximums are enforced by the interface, to facilitate writing
139        # applications and utilities.  However, nothing is statically allocated to
140        # these sizes internally.
141        NC_MAX_DIMS
142        NC_MAX_ATTRS
143        NC_MAX_VARS
144        NC_MAX_NAME
145        NC_MAX_VAR_DIMS
146        #   Algorithms for netcdf-4 chunking.
147        NC_CHUNK_SEQ
148        NC_CHUNK_SUB
149        NC_CHUNK_SIZES
150        NC_CHUNKED
151        NC_CONTIGUOUS
152        # The netcdf version 3 functions all return integer error status.
153        # These are the possible values, in addition to certain
154        # values from the system errno.h.
155        NC_ISSYSERR
156        NC_NOERR
157        NC2_ERR
158        NC_EBADID
159        NC_ENFILE
160        NC_EEXIST
161        NC_EINVAL
162        NC_EPERM
163        NC_ENOTINDEFINE
164        NC_EINDEFINE
165        NC_EINVALCOORDS
166        NC_EMAXDIMS
167        NC_ENAMEINUSE
168        NC_ENOTATT
169        NC_EMAXATTS
170        NC_EBADTYPE
171        NC_EBADDIM
172        NC_EUNLIMPOS
173        NC_EMAXVARS
174        NC_ENOTVAR
175        NC_EGLOBAL
176        NC_ENOTNC
177        NC_ESTS
178        NC_EMAXNAME
179        NC_EUNLIMIT
180        NC_ENORECVARS
181        NC_ECHAR
182        NC_EEDGE
183        NC_ESTRIDE
184        NC_EBADNAME
185        # N.B. following must match value in ncx.h
186        NC_ERANGE         # Math result not representable
187        NC_ENOMEM         # Memory allocation (malloc) failure
188        NC_EVARSIZE        # One or more variable sizes violate format constraints
189        NC_EDIMSIZE        # Invalid dimension size
190        NC_ETRUNC          # NetCDFFile likely truncated or possibly corrupted
191        # The following was added in support of netcdf-4. Make all netcdf-4
192        # error codes < -100 so that errors can be added to netcdf-3 if
193        # needed.
194        NC4_FIRST_ERROR
195        NC_EHDFERR
196        NC_ECANTREAD
197        NC_ECANTWRITE
198        NC_ECANTCREATE
199        NC_EFILEMETA
200        NC_EDIMMETA
201        NC_EATTMETA
202        NC_EVARMETA
203        NC_ENOCOMPOUND
204        NC_EATTEXISTS
205        NC_ENOTNC4
206        NC_ESTRICTNC3
207        NC_ENOTNC3
208        NC_ENOPAR
209        NC_EPARINIT
210        NC_EBADGRPID
211        NC_EBADTYPID
212        NC_ETYPDEFINED
213        NC_EBADFIELD
214        NC_EBADCLASS
215        NC4_LAST_ERROR
216        NC_ENDIAN_NATIVE
217        NC_ENDIAN_LITTLE
218        NC_ENDIAN_BIG
219        NC_SZIP_EC_OPTION_MASK  # entropy encoding
220        NC_SZIP_NN_OPTION_MASK  # nearest neighbor encoding
221    const_char_ptr *nc_inq_libvers() nogil
222    const_char_ptr *nc_strerror(int ncerr)
223    int nc_create(char *path, int cmode, int *ncidp)
224    int nc__create(char *path, int cmode, size_t initialsz, size_t *chunksizehintp, int *ncidp)
225    int nc_open(char *path, int mode, int *ncidp)
226    int nc__open(char *path, int mode, size_t *chunksizehintp, int *ncidp)
227    int nc_inq_path(int ncid, size_t *pathlen, char *path) nogil
228    int nc_inq_format_extended(int ncid, int *formatp, int* modep) nogil
229    int nc_inq_ncid(int ncid, char *name, int *grp_ncid) nogil
230    int nc_inq_grps(int ncid, int *numgrps, int *ncids) nogil
231    int nc_inq_grpname(int ncid, char *name) nogil
232    int nc_inq_grp_parent(int ncid, int *parent_ncid) nogil
233    int nc_inq_varids(int ncid, int *nvars, int *varids) nogil
234    int nc_inq_dimids(int ncid, int *ndims, int *dimids, int include_parents) nogil
235    int nc_def_grp(int parent_ncid, char *name, int *new_ncid)
236    int nc_def_compound(int ncid, size_t size, char *name, nc_type *typeidp)
237    int nc_insert_compound(int ncid, nc_type xtype, char *name,
238                   size_t offset, nc_type field_typeid)
239    int nc_insert_array_compound(int ncid, nc_type xtype, char *name,
240                         size_t offset, nc_type field_typeid,
241                         int ndims, int *dim_sizes)
242    int nc_inq_type(int ncid, nc_type xtype, char *name, size_t *size) nogil
243    int nc_inq_compound(int ncid, nc_type xtype, char *name, size_t *size,
244                size_t *nfieldsp) nogil
245    int nc_inq_compound_name(int ncid, nc_type xtype, char *name) nogil
246    int nc_inq_compound_size(int ncid, nc_type xtype, size_t *size) nogil
247    int nc_inq_compound_nfields(int ncid, nc_type xtype, size_t *nfieldsp) nogil
248    int nc_inq_compound_field(int ncid, nc_type xtype, int fieldid, char *name,
249                      size_t *offsetp, nc_type *field_typeidp, int *ndimsp,
250                      int *dim_sizesp) nogil
251    int nc_inq_compound_fieldname(int ncid, nc_type xtype, int fieldid,
252                          char *name) nogil
253    int nc_inq_compound_fieldindex(int ncid, nc_type xtype, char *name,
254                           int *fieldidp) nogil
255    int nc_inq_compound_fieldoffset(int ncid, nc_type xtype, int fieldid,
256                            size_t *offsetp) nogil
257    int nc_inq_compound_fieldtype(int ncid, nc_type xtype, int fieldid,
258                          nc_type *field_typeidp) nogil
259    int nc_inq_compound_fieldndims(int ncid, nc_type xtype, int fieldid,
260                           int *ndimsp) nogil
261    int nc_inq_compound_fielddim_sizes(int ncid, nc_type xtype, int fieldid,
262                               int *dim_sizes) nogil
263    int nc_def_vlen(int ncid, char *name, nc_type base_typeid, nc_type *xtypep)
264    int nc_inq_vlen(int ncid, nc_type xtype, char *name, size_t *datum_sizep,
265            nc_type *base_nc_typep) nogil
266    int nc_inq_user_type(int ncid, nc_type xtype, char *name, size_t *size,
267                     nc_type *base_nc_typep, size_t *nfieldsp, int *classp) nogil
268    int nc_inq_typeids(int ncid, int *ntypes, int *typeids) nogil
269    int nc_put_att(int ncid, int varid, char *name, nc_type xtype,
270               size_t len, void *op)
271    int nc_get_att(int ncid, int varid, char *name, void *ip) nogil
272    int nc_get_att_string(int ncid, int varid, char *name, char **ip) nogil
273    int nc_put_att_string(int ncid, int varid, char *name, size_t len, char **op) nogil
274    int nc_def_opaque(int ncid, size_t size, char *name, nc_type *xtypep)
275    int nc_inq_opaque(int ncid, nc_type xtype, char *name, size_t *sizep)
276    int nc_put_att_opaque(int ncid, int varid, char *name,
277                      size_t len, void *op)
278    int nc_get_att_opaque(int ncid, int varid, char *name,
279                      void *ip)
280    int nc_put_cmp_att_opaque(int ncid, nc_type xtype, int fieldid,
281                          char *name, size_t len, void *op)
282    int nc_get_cmp_att_opaque(int ncid, nc_type xtype, int fieldid,
283                          char *name, void *ip)
284    int nc_put_var1(int ncid, int varid, size_t *indexp,
285                void *op)
286    int nc_get_var1(int ncid, int varid,  size_t *indexp,
287                void *ip)
288    int nc_put_vara(int ncid, int varid,  size_t *startp,
289                size_t *countp, void *op)
290    int nc_get_vara(int ncid, int varid,  size_t *startp,
291                size_t *countp, void *ip) nogil
292    int nc_put_vars(int ncid, int varid,  size_t *startp,
293                size_t *countp, ptrdiff_t *stridep,
294                void *op)
295    int nc_get_vars(int ncid, int varid,  size_t *startp,
296                size_t *countp, ptrdiff_t *stridep,
297                void *ip) nogil
298    int nc_put_varm(int ncid, int varid,  size_t *startp,
299                size_t *countp, ptrdiff_t *stridep,
300                ptrdiff_t *imapp, void *op)
301    int nc_get_varm(int ncid, int varid,  size_t *startp,
302                size_t *countp, ptrdiff_t *stridep,
303                ptrdiff_t *imapp, void *ip)
304    int nc_put_var(int ncid, int varid,  void *op)
305    int nc_get_var(int ncid, int varid,  void *ip)
306    int nc_def_var_deflate(int ncid, int varid, int shuffle, int deflate,
307	           	   int deflate_level)
308    int nc_def_var_fletcher32(int ncid, int varid, int fletcher32)
309    int nc_inq_var_fletcher32(int ncid, int varid, int *fletcher32p) nogil
310    int nc_def_var_chunking(int ncid, int varid, int contiguous, size_t *chunksizesp)
311    int nc_def_var_fill(int ncid, int varid, int no_fill, void *fill_value)
312    int nc_def_var_endian(int ncid, int varid, int endian)
313    int nc_inq_var_chunking(int ncid, int varid, int *contiguousp, size_t *chunksizesp) nogil
314    int nc_inq_var_deflate(int ncid, int varid, int *shufflep,
315      		   int *deflatep, int *deflate_levelp) nogil
316    int nc_inq_var_fill(int ncid, int varid, int *no_fill, void *fill_value) nogil
317    int nc_inq_var_endian(int ncid, int varid, int *endianp) nogil
318    int nc_set_fill(int ncid, int fillmode, int *old_modep)
319    int nc_set_default_format(int format, int *old_formatp)
320    int nc_redef(int ncid)
321    int nc__enddef(int ncid, size_t h_minfree, size_t v_align,
322            size_t v_minfree, size_t r_align)
323    int nc_enddef(int ncid)
324    int nc_sync(int ncid)
325    int nc_abort(int ncid)
326    int nc_close(int ncid)
327    int nc_inq(int ncid, int *ndimsp, int *nvarsp, int *nattsp, int *unlimdimidp) nogil
328    int nc_inq_ndims(int ncid, int *ndimsp) nogil
329    int nc_inq_nvars(int ncid, int *nvarsp) nogil
330    int nc_inq_natts(int ncid, int *nattsp) nogil
331    int nc_inq_unlimdim(int ncid, int *unlimdimidp) nogil
332    int nc_inq_unlimdims(int ncid, int *nunlimdimsp, int *unlimdimidsp) nogil
333    int nc_inq_format(int ncid, int *formatp) nogil
334    int nc_def_dim(int ncid, char *name, size_t len, int *idp)
335    int nc_inq_dimid(int ncid, char *name, int *idp) nogil
336    int nc_inq_dim(int ncid, int dimid, char *name, size_t *lenp) nogil
337    int nc_inq_dimname(int ncid, int dimid, char *name) nogil
338    int nc_inq_dimlen(int ncid, int dimid, size_t *lenp) nogil
339    int nc_rename_dim(int ncid, int dimid, char *name)
340    int nc_inq_att(int ncid, int varid, char *name,
341               nc_type *xtypep, size_t *lenp) nogil
342    int nc_inq_attid(int ncid, int varid, char *name, int *idp) nogil
343    int nc_inq_atttype(int ncid, int varid, char *name, nc_type *xtypep) nogil
344    int nc_inq_attlen(int ncid, int varid, char *name, size_t *lenp) nogil
345    int nc_inq_attname(int ncid, int varid, int attnum, char *name) nogil
346    int nc_copy_att(int ncid_in, int varid_in, char *name, int ncid_out, int varid_out)
347    int nc_rename_att(int ncid, int varid, char *name, char *newname)
348    int nc_del_att(int ncid, int varid, char *name)
349    int nc_put_att_text(int ncid, int varid, char *name,
350                    size_t len, char *op)
351    int nc_get_att_text(int ncid, int varid, char *name, char *ip) nogil
352    int nc_put_att_uchar(int ncid, int varid, char *name, nc_type xtype,
353                     size_t len, unsigned char *op)
354    int nc_get_att_uchar(int ncid, int varid, char *name, unsigned char *ip)
355    int nc_put_att_schar(int ncid, int varid, char *name, nc_type xtype,
356                     size_t len, signed char *op)
357    int nc_get_att_schar(int ncid, int varid, char *name, signed char *ip)
358    int nc_put_att_short(int ncid, int varid, char *name, nc_type xtype,
359                     size_t len, short *op)
360    int nc_get_att_short(int ncid, int varid, char *name, short *ip)
361    int nc_put_att_int(int ncid, int varid, char *name, nc_type xtype,
362                   size_t len, int *op)
363    int nc_get_att_int(int ncid, int varid, char *name, int *ip)
364    int nc_put_att_long(int ncid, int varid, char *name, nc_type xtype,
365                    size_t len, long *op)
366    int nc_get_att_long(int ncid, int varid, char *name, long *ip)
367    int nc_put_att_float(int ncid, int varid, char *name, nc_type xtype,
368                     size_t len, float *op)
369    int nc_get_att_float(int ncid, int varid, char *name, float *ip)
370    int nc_put_att_double(int ncid, int varid, char *name, nc_type xtype,
371                      size_t len, double *op)
372    int nc_get_att_double(int ncid, int varid, char *name, double *ip)
373    int nc_put_att_ushort(int ncid, int varid, char *name, nc_type xtype,
374                      size_t len, unsigned short *op)
375    int nc_get_att_ushort(int ncid, int varid, char *name, unsigned short *ip)
376    int nc_put_att_uint(int ncid, int varid, char *name, nc_type xtype,
377                    size_t len, unsigned int *op)
378    int nc_get_att_uint(int ncid, int varid, char *name, unsigned int *ip)
379    int nc_put_att_longlong(int ncid, int varid, char *name, nc_type xtype,
380                     size_t len, long long *op)
381    int nc_get_att_longlong(int ncid, int varid, char *name, long long *ip)
382    int nc_put_att_ulonglong(int ncid, int varid, char *name, nc_type xtype,
383                         size_t len, unsigned long long *op)
384    int nc_get_att_ulonglong(int ncid, int varid, char *name,
385                         unsigned long long *ip)
386    int nc_def_var(int ncid, char *name, nc_type xtype, int ndims,
387               int *dimidsp, int *varidp)
388    int nc_inq_var(int ncid, int varid, char *name, nc_type *xtypep,
389               int *ndimsp, int *dimidsp, int *nattsp) nogil
390    int nc_inq_varid(int ncid, char *name, int *varidp) nogil
391    int nc_inq_varname(int ncid, int varid, char *name) nogil
392    int nc_inq_vartype(int ncid, int varid, nc_type *xtypep) nogil
393    int nc_inq_varndims(int ncid, int varid, int *ndimsp) nogil
394    int nc_inq_vardimid(int ncid, int varid, int *dimidsp) nogil
395    int nc_inq_varnatts(int ncid, int varid, int *nattsp) nogil
396    int nc_rename_var(int ncid, int varid, char *name)
397    int nc_copy_var(int ncid_in, int varid, int ncid_out)
398    int nc_put_var1_text(int ncid, int varid, size_t *indexp, char *op)
399    int nc_get_var1_text(int ncid, int varid, size_t *indexp, char *ip)
400    int nc_put_var1_uchar(int ncid, int varid, size_t *indexp,
401                      unsigned char *op)
402    int nc_get_var1_uchar(int ncid, int varid, size_t *indexp,
403                      unsigned char *ip)
404    int nc_put_var1_schar(int ncid, int varid, size_t *indexp,
405                      signed char *op)
406    int nc_get_var1_schar(int ncid, int varid, size_t *indexp,
407                      signed char *ip)
408    int nc_put_var1_short(int ncid, int varid, size_t *indexp,
409                      short *op)
410    int nc_get_var1_short(int ncid, int varid, size_t *indexp,
411                      short *ip)
412    int nc_put_var1_int(int ncid, int varid, size_t *indexp, int *op)
413    int nc_get_var1_int(int ncid, int varid, size_t *indexp, int *ip)
414    int nc_put_var1_long(int ncid, int varid, size_t *indexp, long *op)
415    int nc_get_var1_long(int ncid, int varid, size_t *indexp, long *ip)
416    int nc_put_var1_float(int ncid, int varid, size_t *indexp, float *op)
417    int nc_get_var1_float(int ncid, int varid, size_t *indexp, float *ip)
418    int nc_put_var1_double(int ncid, int varid, size_t *indexp, double *op)
419    int nc_get_var1_double(int ncid, int varid, size_t *indexp, double *ip)
420    int nc_put_var1_ubyte(int ncid, int varid, size_t *indexp,
421                      unsigned char *op)
422    int nc_get_var1_ubyte(int ncid, int varid, size_t *indexp,
423                      unsigned char *ip)
424    int nc_put_var1_ushort(int ncid, int varid, size_t *indexp,
425                       unsigned short *op)
426    int nc_get_var1_ushort(int ncid, int varid, size_t *indexp,
427                       unsigned short *ip)
428    int nc_put_var1_uint(int ncid, int varid, size_t *indexp,
429                     unsigned int *op)
430    int nc_get_var1_uint(int ncid, int varid, size_t *indexp,
431                     unsigned int *ip)
432    int nc_put_var1_longlong(int ncid, int varid, size_t *indexp,
433                         long long *op)
434    int nc_get_var1_longlong(int ncid, int varid, size_t *indexp,
435                      long long *ip)
436    int nc_put_var1_ulonglong(int ncid, int varid, size_t *indexp,
437                       unsigned long long *op)
438    int nc_get_var1_ulonglong(int ncid, int varid, size_t *indexp,
439                       unsigned long long *ip)
440    int nc_put_vara_text(int ncid, int varid,
441            size_t *startp, size_t *countp, char *op)
442    int nc_get_vara_text(int ncid, int varid,
443            size_t *startp, size_t *countp, char *ip)
444    int nc_put_vara_uchar(int ncid, int varid,
445            size_t *startp, size_t *countp, unsigned char *op)
446    int nc_get_vara_uchar(int ncid, int varid, size_t *startp,
447                      size_t *countp, unsigned char *ip)
448    int nc_put_vara_schar(int ncid, int varid, size_t *startp,
449                      size_t *countp, signed char *op)
450    int nc_get_vara_schar(int ncid, int varid, size_t *startp,
451                      size_t *countp, signed char *ip)
452    int nc_put_vara_short(int ncid, int varid, size_t *startp,
453                      size_t *countp, short *op)
454    int nc_get_vara_short(int ncid, int varid, size_t *startp,
455                      size_t *countp, short *ip)
456    int nc_put_vara_int(int ncid, int varid, size_t *startp,
457                    size_t *countp, int *op)
458    int nc_get_vara_int(int ncid, int varid, size_t *startp,
459                    size_t *countp, int *ip)
460    int nc_put_vara_long(int ncid, int varid, size_t *startp,
461                     size_t *countp, long *op)
462    int nc_get_vara_long(int ncid, int varid,
463            size_t *startp, size_t *countp, long *ip)
464    int nc_put_vara_float(int ncid, int varid,
465            size_t *startp, size_t *countp, float *op)
466    int nc_get_vara_float(int ncid, int varid,
467            size_t *startp, size_t *countp, float *ip)
468    int nc_put_vara_double(int ncid, int varid, size_t *startp,
469                       size_t *countp, double *op)
470    int nc_get_vara_double(int ncid, int varid, size_t *startp,
471                       size_t *countp, double *ip)
472    int nc_put_vara_ubyte(int ncid, int varid, size_t *startp,
473                      size_t *countp, unsigned char *op)
474    int nc_get_vara_ubyte(int ncid, int varid, size_t *startp,
475                      size_t *countp, unsigned char *ip)
476    int nc_put_vara_ushort(int ncid, int varid, size_t *startp,
477                       size_t *countp, unsigned short *op)
478    int nc_get_vara_ushort(int ncid, int varid, size_t *startp,
479                       size_t *countp, unsigned short *ip)
480    int nc_put_vara_uint(int ncid, int varid, size_t *startp,
481                     size_t *countp, unsigned int *op)
482    int nc_get_vara_uint(int ncid, int varid, size_t *startp,
483                     size_t *countp, unsigned int *ip)
484    int nc_put_vara_longlong(int ncid, int varid, size_t *startp,
485                      size_t *countp, long long *op)
486    int nc_get_vara_longlong(int ncid, int varid, size_t *startp,
487                      size_t *countp, long long *ip)
488    int nc_put_vara_ulonglong(int ncid, int varid, size_t *startp,
489                       size_t *countp, unsigned long long *op)
490    int nc_get_vara_ulonglong(int ncid, int varid, size_t *startp,
491                       size_t *countp, unsigned long long *ip)
492    int nc_put_vars_text(int ncid, int varid,
493            size_t *startp, size_t *countp, ptrdiff_t *stridep,
494            char *op)
495    int nc_get_vars_text(int ncid, int varid,
496            size_t *startp, size_t *countp, ptrdiff_t *stridep,
497            char *ip)
498    int nc_put_vars_uchar(int ncid, int varid,
499            size_t *startp, size_t *countp, ptrdiff_t *stridep,
500            unsigned char *op)
501    int nc_get_vars_uchar(int ncid, int varid,
502            size_t *startp, size_t *countp, ptrdiff_t *stridep,
503            unsigned char *ip)
504    int nc_put_vars_schar(int ncid, int varid,
505            size_t *startp, size_t *countp, ptrdiff_t *stridep,
506            signed char *op)
507    int nc_get_vars_schar(int ncid, int varid,
508            size_t *startp, size_t *countp, ptrdiff_t *stridep,
509            signed char *ip)
510    int nc_put_vars_short(int ncid, int varid,
511            size_t *startp, size_t *countp, ptrdiff_t *stridep,
512            short *op)
513    int nc_get_vars_short(int ncid, int varid, size_t *startp,
514                      size_t *countp, ptrdiff_t *stridep,
515                      short *ip)
516    int nc_put_vars_int(int ncid, int varid,
517            size_t *startp, size_t *countp, ptrdiff_t *stridep,
518            int *op)
519    int nc_get_vars_int(int ncid, int varid,
520            size_t *startp, size_t *countp, ptrdiff_t *stridep,
521            int *ip)
522    int nc_put_vars_long(int ncid, int varid,
523            size_t *startp, size_t *countp, ptrdiff_t *stridep,
524            long *op)
525    int nc_get_vars_long(int ncid, int varid,
526            size_t *startp, size_t *countp, ptrdiff_t *stridep,
527            long *ip)
528    int nc_put_vars_float(int ncid, int varid,
529            size_t *startp, size_t *countp, ptrdiff_t *stridep,
530            float *op)
531    int nc_get_vars_float(int ncid, int varid,
532            size_t *startp, size_t *countp, ptrdiff_t *stridep,
533            float *ip)
534    int nc_put_vars_double(int ncid, int varid,
535            size_t *startp, size_t *countp, ptrdiff_t *stridep,
536            double *op)
537    int nc_get_vars_double(int ncid, int varid, size_t *startp,
538                       size_t *countp, ptrdiff_t *stridep,
539                       double *ip)
540    int nc_put_vars_ubyte(int ncid, int varid, size_t *startp,
541                      size_t *countp, ptrdiff_t *stridep,
542                      unsigned char *op)
543    int nc_get_vars_ubyte(int ncid, int varid, size_t *startp,
544                      size_t *countp, ptrdiff_t *stridep,
545                      unsigned char *ip)
546    int nc_put_vars_ushort(int ncid, int varid, size_t *startp,
547                       size_t *countp, ptrdiff_t *stridep,
548                       unsigned short *op)
549    int nc_get_vars_ushort(int ncid, int varid, size_t *startp,
550                       size_t *countp, ptrdiff_t *stridep,
551                       unsigned short *ip)
552    int nc_put_vars_uint(int ncid, int varid, size_t *startp,
553                     size_t *countp, ptrdiff_t *stridep,
554                     unsigned int *op)
555    int nc_get_vars_uint(int ncid, int varid, size_t *startp,
556                     size_t *countp, ptrdiff_t *stridep,
557                     unsigned int *ip)
558    int nc_put_vars_longlong(int ncid, int varid, size_t *startp,
559                      size_t *countp, ptrdiff_t *stridep,
560                      long long *op)
561    int nc_get_vars_longlong(int ncid, int varid, size_t *startp,
562                      size_t *countp, ptrdiff_t *stridep,
563                      long long *ip)
564    int nc_put_vars_ulonglong(int ncid, int varid, size_t *startp,
565                       size_t *countp, ptrdiff_t *stridep,
566                       unsigned long long *op)
567    int nc_get_vars_ulonglong(int ncid, int varid, size_t *startp,
568                       size_t *countp, ptrdiff_t *stridep,
569                       unsigned long long *ip)
570    int nc_put_varm_text(int ncid, int varid, size_t *startp,
571                     size_t *countp, ptrdiff_t *stridep,
572                     ptrdiff_t *imapp, char *op)
573    int nc_get_varm_text(int ncid, int varid, size_t *startp,
574                     size_t *countp, ptrdiff_t *stridep,
575                     ptrdiff_t *imapp, char *ip)
576    int nc_put_varm_uchar(int ncid, int varid, size_t *startp,
577                      size_t *countp, ptrdiff_t *stridep,
578                      ptrdiff_t *imapp, unsigned char *op)
579    int nc_get_varm_uchar(int ncid, int varid, size_t *startp,
580                      size_t *countp, ptrdiff_t *stridep,
581                      ptrdiff_t *imapp, unsigned char *ip)
582    int nc_put_varm_schar(int ncid, int varid, size_t *startp,
583                      size_t *countp, ptrdiff_t *stridep,
584                      ptrdiff_t *imapp, signed char *op)
585    int nc_get_varm_schar(int ncid, int varid, size_t *startp,
586                      size_t *countp, ptrdiff_t *stridep,
587                      ptrdiff_t *imapp, signed char *ip)
588    int nc_put_varm_short(int ncid, int varid, size_t *startp,
589                      size_t *countp, ptrdiff_t *stridep,
590                      ptrdiff_t *imapp, short *op)
591    int nc_get_varm_short(int ncid, int varid, size_t *startp,
592                      size_t *countp, ptrdiff_t *stridep,
593                      ptrdiff_t *imapp, short *ip)
594    int nc_put_varm_int(int ncid, int varid, size_t *startp,
595                    size_t *countp, ptrdiff_t *stridep,
596                    ptrdiff_t *imapp, int *op)
597    int nc_get_varm_int(int ncid, int varid, size_t *startp,
598                    size_t *countp, ptrdiff_t *stridep,
599                    ptrdiff_t *imapp, int *ip)
600    int nc_put_varm_long(int ncid, int varid, size_t *startp,
601                     size_t *countp, ptrdiff_t *stridep,
602                     ptrdiff_t *imapp, long *op)
603    int nc_get_varm_long(int ncid, int varid, size_t *startp,
604                     size_t *countp, ptrdiff_t *stridep,
605                     ptrdiff_t *imapp, long *ip)
606    int nc_put_varm_float(int ncid, int varid,size_t *startp,
607                      size_t *countp, ptrdiff_t *stridep,
608                      ptrdiff_t *imapp, float *op)
609    int nc_get_varm_float(int ncid, int varid,size_t *startp,
610                      size_t *countp, ptrdiff_t *stridep,
611                      ptrdiff_t *imapp, float *ip)
612    int nc_put_varm_double(int ncid, int varid, size_t *startp,
613                       size_t *countp, ptrdiff_t *stridep,
614                       ptrdiff_t *imapp, double *op)
615    int nc_get_varm_double(int ncid, int varid, size_t *startp,
616                       size_t *countp, ptrdiff_t *stridep,
617                       ptrdiff_t * imapp, double *ip)
618    int nc_put_varm_ubyte(int ncid, int varid, size_t *startp,
619                      size_t *countp, ptrdiff_t *stridep,
620                      ptrdiff_t * imapp, unsigned char *op)
621    int nc_get_varm_ubyte(int ncid, int varid, size_t *startp,
622                      size_t *countp, ptrdiff_t *stridep,
623                      ptrdiff_t * imapp, unsigned char *ip)
624    int nc_put_varm_ushort(int ncid, int varid, size_t *startp,
625                       size_t *countp, ptrdiff_t *stridep,
626                       ptrdiff_t * imapp, unsigned short *op)
627    int nc_get_varm_ushort(int ncid, int varid, size_t *startp,
628                       size_t *countp, ptrdiff_t *stridep,
629                       ptrdiff_t * imapp, unsigned short *ip)
630    int nc_put_varm_uint(int ncid, int varid, size_t *startp,
631                     size_t *countp, ptrdiff_t *stridep,
632                     ptrdiff_t * imapp, unsigned int *op)
633    int nc_get_varm_uint(int ncid, int varid, size_t *startp,
634                     size_t *countp, ptrdiff_t *stridep,
635                     ptrdiff_t * imapp, unsigned int *ip)
636    int nc_put_varm_longlong(int ncid, int varid, size_t *startp,
637                      size_t *countp, ptrdiff_t *stridep,
638                      ptrdiff_t * imapp, long long *op)
639    int nc_get_varm_longlong(int ncid, int varid, size_t *startp,
640                      size_t *countp, ptrdiff_t *stridep,
641                      ptrdiff_t * imapp, long long *ip)
642    int nc_put_varm_ulonglong(int ncid, int varid, size_t *startp,
643                       size_t *countp, ptrdiff_t *stridep,
644                       ptrdiff_t * imapp, unsigned long long *op)
645    int nc_get_varm_ulonglong(int ncid, int varid, size_t *startp,
646                       size_t *countp, ptrdiff_t *stridep,
647                       ptrdiff_t * imapp, unsigned long long *ip)
648    int nc_put_var_text(int ncid, int varid, char *op)
649    int nc_get_var_text(int ncid, int varid, char *ip)
650    int nc_put_var_uchar(int ncid, int varid, unsigned char *op)
651    int nc_get_var_uchar(int ncid, int varid, unsigned char *ip)
652    int nc_put_var_schar(int ncid, int varid, signed char *op)
653    int nc_get_var_schar(int ncid, int varid, signed char *ip)
654    int nc_put_var_short(int ncid, int varid, short *op)
655    int nc_get_var_short(int ncid, int varid, short *ip)
656    int nc_put_var_int(int ncid, int varid, int *op)
657    int nc_get_var_int(int ncid, int varid, int *ip)
658    int nc_put_var_long(int ncid, int varid, long *op)
659    int nc_get_var_long(int ncid, int varid, long *ip)
660    int nc_put_var_float(int ncid, int varid, float *op)
661    int nc_get_var_float(int ncid, int varid, float *ip)
662    int nc_put_var_double(int ncid, int varid, double *op)
663    int nc_get_var_double(int ncid, int varid, double *ip)
664    int nc_put_var_ubyte(int ncid, int varid, unsigned char *op)
665    int nc_get_var_ubyte(int ncid, int varid, unsigned char *ip)
666    int nc_put_var_ushort(int ncid, int varid, unsigned short *op)
667    int nc_get_var_ushort(int ncid, int varid, unsigned short *ip)
668    int nc_put_var_uint(int ncid, int varid, unsigned int *op)
669    int nc_get_var_uint(int ncid, int varid, unsigned int *ip)
670    int nc_put_var_longlong(int ncid, int varid, long long *op)
671    int nc_get_var_longlong(int ncid, int varid, long long *ip)
672    int nc_put_var_ulonglong(int ncid, int varid, unsigned long long *op)
673    int nc_get_var_ulonglong(int ncid, int varid, unsigned long long *ip)
674    # set logging verbosity level.
675    void nc_set_log_level(int new_level)
676    int nc_show_metadata(int ncid)
677    int nc_free_vlen(nc_vlen_t *vl)
678    int nc_free_vlens(size_t len, nc_vlen_t *vl)
679    int nc_free_string(size_t len, char **data)
680    int nc_set_chunk_cache(size_t size, size_t nelems, float preemption)
681    int nc_get_chunk_cache(size_t *sizep, size_t *nelemsp, float *preemptionp)
682    int nc_set_var_chunk_cache(int ncid, int varid, size_t size, size_t nelems, float preemption)
683    int nc_get_var_chunk_cache(int ncid, int varid, size_t *sizep, size_t *nelemsp, float *preemptionp) nogil
684    int nc_rename_grp(int grpid, char *name)
685    int nc_def_enum(int ncid, nc_type base_typeid, char *name, nc_type *typeidp)
686    int nc_insert_enum(int ncid, nc_type xtype, char *name, void *value)
687    int nc_inq_enum(int ncid, nc_type xtype, char *name, nc_type *base_nc_typep,\
688	    size_t *base_sizep, size_t *num_membersp) nogil
689    int nc_inq_enum_member(int ncid, nc_type xtype, int idx, char *name, void *value) nogil
690
691    int nc_inq_enum_ident(int ncid, nc_type xtype, long long value, char *identifier) nogil
692
693
694IF HAS_NC_OPEN_MEM:
695    cdef extern from "netcdf_mem.h":
696        int nc_open_mem(const char *path, int mode, size_t size, void* memory, int *ncidp)
697
698IF HAS_NC_CREATE_MEM:
699    cdef extern from "netcdf_mem.h":
700        int nc_create_mem(const char *path, int mode, size_t initialize, int *ncidp);
701        ctypedef struct NC_memio:
702            size_t size
703            void* memory
704            int flags
705        int nc_close_memio(int ncid, NC_memio* info);
706
707IF HAS_PARALLEL4_SUPPORT or HAS_PNETCDF_SUPPORT:
708    cdef extern from "mpi-compat.h": pass
709    cdef extern from "netcdf_par.h":
710        ctypedef int MPI_Comm
711        ctypedef int MPI_Info
712        int nc_create_par(char *path, int cmode, MPI_Comm comm, MPI_Info info, int *ncidp);
713        int nc_open_par(char *path, int mode, MPI_Comm comm, MPI_Info info, int *ncidp);
714        int nc_var_par_access(int ncid, int varid, int par_access);
715        cdef enum:
716            NC_COLLECTIVE
717            NC_INDEPENDENT
718    cdef extern from "netcdf.h":
719        cdef enum:
720            NC_MPIIO
721            NC_MPIPOSIX
722            NC_PNETCDF
723
724# taken from numpy.pxi in numpy 1.0rc2.
725cdef extern from "numpy/arrayobject.h":
726    ctypedef int npy_intp
727    ctypedef extern class numpy.ndarray [object PyArrayObject]:
728        pass
729    npy_intp PyArray_SIZE(ndarray arr)
730    npy_intp PyArray_ISCONTIGUOUS(ndarray arr)
731    npy_intp PyArray_ISALIGNED(ndarray arr)
732    void* PyArray_DATA(ndarray) nogil
733    char* PyArray_BYTES(ndarray) nogil
734    npy_intp* PyArray_STRIDES(ndarray) nogil
735    void import_array()
736