From 832ed60f3c92464fa2480a53617973306d7f67c9 Mon Sep 17 00:00:00 2001 From: Shahram Najm Date: Fri, 23 Nov 2018 19:11:47 +0000 Subject: [PATCH] Python3: Enable Python 2 to work as before --- CMakeLists.txt | 10 +- examples/python/bufr_encode_flight.py | 2 +- examples/python/include.ctest.sh.in | 2 +- python/Makefile.am | 127 + python/README | 24 + python/dummy.am | 0 python/eccodes/high_level/codesfile.py | 5 +- python/extrules.am | 7 +- python/grib_interface.c | 167 +- python/grib_interface.h | 18 +- python/gribapi/errors.py | 2 +- python/gribapi/gribapi.py | 39 +- python/gribapi_swig.i | 42 +- python/numpy.i | 2003 +--- python/setup.py.autotools.in | 86 + python/swig_wrap_numpy.c | 2331 ++-- python/swig_wrap_numpy.py | 660 +- python/test_extra.py | 20 +- python/test_general.py | 56 +- python/test_index.py | 18 +- python/test_iterator.py | 6 +- python/test_keysiterator.py | 2 +- python3/CMakeLists.txt | 86 + python3/README.swig | 5 + python3/create_errors.py.sh | 111 + python3/eccodes/__init__.py | 11 + python3/eccodes/eccodes.py | 109 + python3/eccodes/high_level/__init__.py | 0 python3/eccodes/high_level/bufr.py | 97 + python3/eccodes/high_level/codesfile.py | 72 + python3/eccodes/high_level/codesmessage.py | 186 + python3/eccodes/high_level/gribfile.py | 17 + python3/eccodes/high_level/gribindex.py | 102 + python3/eccodes/high_level/gribmessage.py | 80 + python3/extrules.am | 7 + python3/grib_errors.h | 143 + python3/grib_interface.c | 2462 +++++ python3/grib_interface.h | 127 + python3/gribapi.c | 196 + python3/gribapi/__init__.py | 2 + python3/gribapi/errors.py | 235 + python3/gribapi/gribapi.py | 1963 ++++ python3/gribapi_swig.i | 265 + python3/numpy.i | 3183 ++++++ python3/run_tests.sh | 8 + python3/setup.py.in | 77 + python3/swig_wrap_numpy.c | 10558 +++++++++++++++++++ python3/swig_wrap_numpy.py | 747 ++ python3/test_iterator.py | 42 + tests/CMakeLists.txt | 2 +- 50 files changed, 22604 insertions(+), 3916 deletions(-) create mode 100644 python/Makefile.am create mode 100755 python/README create mode 100644 python/dummy.am create mode 100644 python/setup.py.autotools.in create mode 100644 python3/CMakeLists.txt create mode 100644 python3/README.swig create mode 100755 python3/create_errors.py.sh create mode 100644 python3/eccodes/__init__.py create mode 100644 python3/eccodes/eccodes.py create mode 100644 python3/eccodes/high_level/__init__.py create mode 100644 python3/eccodes/high_level/bufr.py create mode 100644 python3/eccodes/high_level/codesfile.py create mode 100644 python3/eccodes/high_level/codesmessage.py create mode 100644 python3/eccodes/high_level/gribfile.py create mode 100644 python3/eccodes/high_level/gribindex.py create mode 100644 python3/eccodes/high_level/gribmessage.py create mode 100644 python3/extrules.am create mode 100644 python3/grib_errors.h create mode 100644 python3/grib_interface.c create mode 100644 python3/grib_interface.h create mode 100644 python3/gribapi.c create mode 100644 python3/gribapi/__init__.py create mode 100644 python3/gribapi/errors.py create mode 100644 python3/gribapi/gribapi.py create mode 100644 python3/gribapi_swig.i create mode 100644 python3/numpy.i create mode 100755 python3/run_tests.sh create mode 100644 python3/setup.py.in create mode 100644 python3/swig_wrap_numpy.c create mode 100644 python3/swig_wrap_numpy.py create mode 100755 python3/test_iterator.py diff --git a/CMakeLists.txt b/CMakeLists.txt index e9b8e8a39..9fa8e50be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -347,7 +347,15 @@ add_subdirectory( memfs ) add_subdirectory( src ) add_subdirectory( tools ) add_subdirectory( fortran ) -add_subdirectory( python ) +if (PYTHON_VERSION_MAJOR GREATER 2) + ecbuild_info("Adding python3 directory ${PYTHON_VERSION_STRING}") + add_subdirectory( python3 ) + set( ECCODES_PYTHON_DIR "python3" ) +else() + ecbuild_info("Adding python2 directory ${PYTHON_VERSION_STRING}") + add_subdirectory( python ) + set( ECCODES_PYTHON_DIR "python2" ) +endif() add_subdirectory( tests ) add_subdirectory( tigge ) add_subdirectory( examples ) diff --git a/examples/python/bufr_encode_flight.py b/examples/python/bufr_encode_flight.py index 0cb8d4a68..9f8d4c340 100644 --- a/examples/python/bufr_encode_flight.py +++ b/examples/python/bufr_encode_flight.py @@ -10,7 +10,7 @@ # Description: how to encode flight dataset into BUFR - +from __future__ import print_function from datetime import datetime import traceback import numpy as np diff --git a/examples/python/include.ctest.sh.in b/examples/python/include.ctest.sh.in index 87fd71ffd..3a7c0765c 100644 --- a/examples/python/include.ctest.sh.in +++ b/examples/python/include.ctest.sh.in @@ -18,7 +18,7 @@ samp_dir="@CMAKE_BINARY_DIR@/@ECCODES_SAMPLES_SUFF@" ECCODES_SAMPLES_PATH=${samp_dir} export ECCODES_SAMPLES_PATH -PYTHONPATH=@PROJECT_BINARY_DIR@/python:$PYTHONPATH +PYTHONPATH=@PROJECT_BINARY_DIR@/@ECCODES_PYTHON_DIR@:$PYTHONPATH export PYTHONPATH echo "Current directory: `pwd`" diff --git a/python/Makefile.am b/python/Makefile.am new file mode 100644 index 000000000..c6f3d3d04 --- /dev/null +++ b/python/Makefile.am @@ -0,0 +1,127 @@ +if WITH_PYTHON + +if CREATING_SHARED_LIBS +############################################################################### +# Case when shared libraries are enabled +############################################################################### +pkgpyexec_LTLIBRARIES = _gribapi_swig.la + +_gribapi_swig_la_SOURCES = gribapi_swig_wrap.c grib_interface.c grib_interface.h +_gribapi_swig_la_LIBADD = $(top_builddir)/src/libeccodes.la $(PYTHON_LIBS) +_gribapi_swig_la_LDFLAGS = -module -avoid-version $(PYTHON_LDFLAGS) + +INCLUDES = $(PYTHON_INCLUDES) -I$(NUMPY_INCLUDE) + +gribapi_swig_wrap.c: swig_wrap_$(PYTHON_DATA_HANDLER).c + ln -s gribapi/gribapi.py + ln -s eccodes/eccodes.py + cp -f swig_wrap_$(PYTHON_DATA_HANDLER).c gribapi_swig_wrap.c + +gribapi_swig.py: swig_wrap_$(PYTHON_DATA_HANDLER).py + cp -f swig_wrap_$(PYTHON_DATA_HANDLER).py gribapi_swig.py + +# Extra stuff to go into the distribution +EXTRA_DIST = grib_interface.h \ + grib_interface.c \ + gribapi_swig.i \ + gribapi.py \ + eccodes.py \ + numpy.i \ + grib_errors.h \ + extrules.am \ + dummy.am \ + swig_wrap_array.c \ + swig_wrap_numpy.c \ + swig_wrap_array.py \ + swig_wrap_numpy.py \ + CMakeLists.txt + +# What else I want installed +pkgpyexec_DATA = \ + gribapi.py \ + eccodes.py \ + gribapi_swig.py + +CLEANFILES = \ + gribapi_swig_wrap.c \ + gribapi_swig.py \ + _gribapi_swig.la + +include $(DEVEL_RULES) + +else +############################################################################### +# When shared libraries are disabled. +# Uses the static library so must have --with-pic +############################################################################### +noinst_SCRIPTS = setup.py + +CLEANFILES = $(noinst_SCRIPTS) \ + gribapi_swig_wrap.c \ + gribapi_swig.py \ + _gribapi_swig.so + +# Extra stuff to go into the distribution +EXTRA_DIST = setup.py.autotools.in \ + grib_interface.h \ + grib_interface.c \ + gribapi_swig.i \ + gribapi.py \ + eccodes.py \ + numpy.i \ + grib_errors.h \ + extrules.am \ + dummy.am \ + swig_wrap_array.c \ + swig_wrap_numpy.c \ + swig_wrap_array.py \ + swig_wrap_numpy.py \ + CMakeLists.txt + +# What I want installed +pdir = $(libdir)/python$(PYTHON_VERSION)/site-packages/eccodes +p_DATA = \ + _gribapi_swig.so \ + gribapi.py \ + eccodes.py \ + gribapi_swig.py + +do_subst = sed -e 's,[@]LIB_JASPER[@],$(LIB_JASPER),g' \ + -e 's,[@]JASPER_DIR[@],$(JASPER_DIR),g' \ + -e 's,[@]LIB_OPENJPEG[@],$(LIB_OPENJPEG),g' \ + -e 's,[@]OPENJPEG_DIR[@],$(OPENJPEG_DIR),g' \ + -e 's,[@]LIB_AEC[@],$(LIB_AEC),g' \ + -e 's,[@]AEC_DIR[@],$(AEC_DIR),g' \ + -e 's,[@]LIB_PNG[@],$(LIB_PNG),g' \ + -e 's,[@]BUILD_DIR[@],$(top_builddir),g' \ + -e 's,[@]DATA_HANDLER[@],$(PYTHON_DATA_HANDLER),g' + +clean-local: + -rm -rf build + +setup.py: setup.py.autotools.in + $(do_subst) < setup.py.autotools.in > setup.py + +gribapi_swig_wrap.c: swig_wrap_$(PYTHON_DATA_HANDLER).c + ln -s gribapi/gribapi.py + ln -s eccodes/eccodes.py + cp -f swig_wrap_$(PYTHON_DATA_HANDLER).c gribapi_swig_wrap.c + +gribapi_swig.py: swig_wrap_$(PYTHON_DATA_HANDLER).py + cp -f swig_wrap_$(PYTHON_DATA_HANDLER).py gribapi_swig.py + +_gribapi_swig.so: setup.py gribapi_swig_wrap.c gribapi_swig.py + $(PYTHON) setup.py build_ext --inplace + +include $(DEVEL_RULES) + +endif + +else +# Case when WITH_PYTHON is not defined. Must add this rule otherwise +# make dist will fail +gribapi_swig_wrap.c: swig_wrap_array.c + cp -f swig_wrap_array.c gribapi_swig_wrap.c + +endif + diff --git a/python/README b/python/README new file mode 100755 index 000000000..fb798bc9d --- /dev/null +++ b/python/README @@ -0,0 +1,24 @@ +GRIB API Python bindings + +In order to enable the Python bindings in the build, +use the --enable-python configure flag. + +./configure --enable-python + +This will enable the build of the Python bindings with +NumPy support enabled. Python needs to be in the path +and, of course, the NumPy package installed. + +To build the Python bindings without NumPy support, use +the --disable-numpy configure flag. This will result in +Python array objects being used for data handling. + +On 'make install', the Python bindings will be installed under +'${GRIBAPI_install_dir}/lib/pythonX.X/site-packages/grib_api', +where X.X is the version of python used to build the bindings. +Add this folder to your PYTHONPATH and you are ready to go. + +For more information on the Python bindings, please visit our +website at: + +http://www.ecmwf.int/publications/manuals/grib_api/ diff --git a/python/dummy.am b/python/dummy.am new file mode 100644 index 000000000..e69de29bb diff --git a/python/eccodes/high_level/codesfile.py b/python/eccodes/high_level/codesfile.py index e55c96cb7..b80f8127f 100644 --- a/python/eccodes/high_level/codesfile.py +++ b/python/eccodes/high_level/codesfile.py @@ -6,9 +6,9 @@ Author: Daniel Lee, DWD, 2016 """ from .. import eccodes -import io -class CodesFile(io.IOBase): + +class CodesFile(file): """ An abstract class to specify and/or implement common behaviour that files @@ -43,7 +43,6 @@ class CodesFile(io.IOBase): self.message = 0 #: Open messages self.open_messages = [] - self.name = filename def __exit__(self, exception_type, exception_value, traceback): """Close all open messages, release file handle and close file.""" diff --git a/python/extrules.am b/python/extrules.am index 70b27ad39..a62a96f9f 100644 --- a/python/extrules.am +++ b/python/extrules.am @@ -1,7 +1,6 @@ -# Use SWIG version 3.0.12 -# Python3 support added with -py3 -# swig : gribapi_swig.i - swig -v -py3 -python -module gribapi_swig -o swig_wrap_numpy.c gribapi_swig.i + swig -python -module gribapi_swig -o swig_wrap_numpy.c gribapi_swig.i cp gribapi_swig.py swig_wrap_numpy.py +# swig -python -module gribapi_swig -o swig_wrap_array.c gribapi_swig.i +# cp gribapi_swig.py swig_wrap_array.py diff --git a/python/grib_interface.c b/python/grib_interface.c index 3838aa827..667996656 100644 --- a/python/grib_interface.c +++ b/python/grib_interface.c @@ -831,7 +831,7 @@ int grib_c_read_any_from_file(int* fid, char* buffer, int* nbytes) } } -int grib_c_write_file(int* fid, char* buffer, size_t* nbytes) +int grib_c_write_file(int* fid, char* buffer, int* nbytes) { grib_context* c; FILE* f=get_file(*fid); @@ -839,7 +839,7 @@ int grib_c_write_file(int* fid, char* buffer, size_t* nbytes) if (f) { int ioerr; c=grib_context_get_default( ); - if( fwrite(buffer, 1, *nbytes, f) != *nbytes) { + if( fwrite(buffer, 1, *nbytes, f) != *nbytes) { ioerr=errno; grib_context_log(c,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),"IO ERROR: %s",strerror(ioerr)); return GRIB_IO_PROBLEM; @@ -850,7 +850,7 @@ int grib_c_write_file(int* fid, char* buffer, size_t* nbytes) } } -int grib_c_read_file(int* fid, char* buffer, size_t* nbytes) +int grib_c_read_file(int* fid, char* buffer, int* nbytes) { grib_context* c; FILE* f=get_file(*fid); @@ -1004,7 +1004,7 @@ int grib_c_keys_iterator_get_name(int* iterid,char* name,int len) sprintf(buf,"%s",grib_keys_iterator_get_name(kiter)); lsize=strlen(buf); - if ((size_t)len < lsize) return GRIB_ARRAY_TOO_SMALL; + if (len < lsize) return GRIB_ARRAY_TOO_SMALL; memcpy(name,buf,lsize); name[lsize] = '\0'; @@ -1073,7 +1073,7 @@ int codes_c_bufr_keys_iterator_get_name(int* iterid,char* name,int len) sprintf(buf,"%s",codes_bufr_keys_iterator_get_name(kiter)); lsize=strlen(buf); - if ((size_t)len < lsize) return GRIB_ARRAY_TOO_SMALL; + if (len < lsize) return GRIB_ARRAY_TOO_SMALL; memcpy(name,buf,lsize); name[lsize] = '\0'; @@ -1235,95 +1235,6 @@ int grib_c_copy_namespace(int* gidsrc,char* name,int* giddest) return GRIB_INVALID_GRIB; } -/* ------------------------------------------------- */ -typedef struct file_info_cache_t file_info_cache_t; -struct file_info_cache_t { - file_info_cache_t* next; - int file_descriptor; - FILE* file_pointer; -}; -static file_info_cache_t* file_info_cache=0; -static void store_file_info(int fd, FILE* fp) -{ - file_info_cache_t* tb=(file_info_cache_t*)malloc(sizeof(file_info_cache_t)); - tb->file_descriptor = fd; - tb->file_pointer = fp; - tb->next = NULL; - /*printf("store_file_info: fd=%d fp=%p\n",fd,fp);*/ - if (!file_info_cache) { - file_info_cache = tb; - } else { - /*Add to end of linked list*/ - file_info_cache_t* q = file_info_cache; - while(q->next) q=q->next; - q->next = tb; - } -} -static FILE* retrieve_file_info(int fd) -{ - file_info_cache_t* p = file_info_cache; - /*printf("retrieve_file_info: fd=%d\n",fd);*/ - while (p) { - if (p->file_descriptor == fd) { - /*printf("\t result=%p\n",p->file_pointer);*/ - return p->file_pointer; - } - p = p->next; - } - /*printf("\t result=NULL\n");*/ - return NULL; -} -#if 0 -static int clear_file_info(int fd) -{ - printf("clear_file_info: fd=%d\n",fd); - file_info_cache_t* curr = file_info_cache; - while(curr) { - if (curr->file_descriptor==fd) { - curr->file_descriptor=-1; - curr->file_pointer=NULL; - /*TODO: Should delete this node */ - return GRIB_SUCCESS; - } - curr=curr->next; - } - return GRIB_INVALID_FILE; -} -#endif -static int clear_file_info(int fd) -{ - /*printf("clear_file_info: fd=%d\n",fd);*/ - file_info_cache_t *curr, *prev=NULL; - for(curr=file_info_cache; curr!=NULL; prev=curr, curr=curr->next) { - if (curr->file_descriptor==fd) {//found it - if(prev==NULL) {//fix head - file_info_cache = curr->next; - } else { - //Fix previous node's 'next' to skip over the removed node - prev->next = curr->next; - } - /*printf("\t Deleting entry curr (%d,%p)\n", curr->file_descriptor,curr->file_pointer);*/ - free(curr); - return GRIB_SUCCESS; - } - } - return GRIB_INVALID_FILE; -} -#if DEBUG -static void dump_file_info() -{ - int i=1; - file_info_cache_t* curr = file_info_cache; - if(!curr) printf("dump_file_info: EMPTY\n"); - else printf("dump_file_info:\n"); - while(curr) { - printf("\t %d: fd=%d fp=%p\n", i++,curr->file_descriptor,curr->file_pointer); - curr=curr->next; - } -} -#endif -/* ------------------------------------------------- */ - int grib_c_count_in_file(FILE* f,int* n) { int err = 0; @@ -1392,26 +1303,21 @@ int grib_c_new_any_from_file(FILE* f,int headers_only,int* gid) return GRIB_INVALID_FILE; } -int grib_c_new_bufr_from_file(FILE* f, int fd, char* fname, int headers_only,int* gid) +int grib_c_new_bufr_from_file(FILE* f,int headers_only,int* gid) { grib_handle *h = NULL; int err = 0; if(f){ - FILE* p = retrieve_file_info(fd); - if (p) { - h = codes_handle_new_from_file(0,p,PRODUCT_BUFR, &err); //use cached value - } else { - h = codes_handle_new_from_file(0,f,PRODUCT_BUFR, &err); //use FILE pointer passed in - store_file_info(fd, f); //store it for next time - } + /* h = bufr_new_from_file(0,f,headers_only,&err); */ + h = codes_handle_new_from_file(0,f,PRODUCT_BUFR, &err); if(h){ push_handle(h,gid); return GRIB_SUCCESS; } else { *gid=-1; - return GRIB_END_OF_FILE;//TODO: remove element from cache + return GRIB_END_OF_FILE; } } @@ -1419,27 +1325,13 @@ int grib_c_new_bufr_from_file(FILE* f, int fd, char* fname, int headers_only,int return GRIB_INVALID_FILE; } -int grib_c_new_from_file(FILE* f, int fd, char* fname, int* gid, int headers_only) +int grib_c_new_from_file(FILE* f, int* gid, int headers_only) { grib_handle *h = NULL; int err = 0; -#if 0 - printf("C grib_c_new_from_file: FILE*=%p\n", f); - printf("C grib_c_new_from_file: f->fileno=%d (fd=%d)\n", f->_fileno, fd); - printf("C grib_c_new_from_file: fn=%s\n", fname); -#endif - /*dump_file_info();*/ + if(f){ - FILE* p = retrieve_file_info(fd); - if (p) { - /*printf("C. using CACHED value from store...%p\n",p);*/ - h=grib_new_from_file(0,p,headers_only,&err);//use cached value - } else { - /*printf("C. using value from ARGS...%p\n",f);*/ - h=grib_new_from_file(0,f,headers_only,&err);//use FILE pointer passed in - store_file_info(fd, f); //store it for next time - /*dump_file_info();*/ - } + h=grib_new_from_file(0,f,headers_only,&err); if(h){ push_handle(h,gid); @@ -1447,10 +1339,7 @@ int grib_c_new_from_file(FILE* f, int fd, char* fname, int* gid, int headers_onl } else { *gid=-1; if (err == GRIB_SUCCESS) { - /*printf("C grib_c_new_from_file: GRIB_END_OF_FILE\n");*/ - clear_file_info(fd); - /*dump_file_info();*/ - return GRIB_END_OF_FILE; //TODO: remove element from cache + return GRIB_END_OF_FILE; } else { /* A real error occurred */ return err; @@ -1555,7 +1444,7 @@ int grib_c_print(int* gid, char* key){ int grib_c_get_error_string(int* err, char* buf, int len){ const char* err_msg = grib_get_error_message(*err); size_t erlen = strlen(err_msg); - if( (size_t)len < erlen) return GRIB_ARRAY_TOO_SMALL; + if( len < erlen) return GRIB_ARRAY_TOO_SMALL; strncpy(buf, err_msg,(size_t)erlen); buf[erlen] = '\0'; @@ -1681,7 +1570,7 @@ int grib_c_get_double(int* gid, char* key, double* val){ return err; } -int grib_c_get_int_array(int* gid, char* key, int *val, size_t* size){ +int grib_c_get_int_array(int* gid, char* key, int *val, int* size){ grib_handle *h = get_handle(*gid); long* long_val = NULL; @@ -1729,7 +1618,7 @@ int grib_c_index_get_string(int* gid, char* key, char* val, int *eachsize,int* s grib_index *h = get_index(*gid); int err = GRIB_SUCCESS; - size_t i; + int i; size_t lsize = *size; char** bufval; char* p=val; @@ -1748,7 +1637,7 @@ int grib_c_index_get_string(int* gid, char* key, char* val, int *eachsize,int* s int j; if (*eachsize < l ) { grib_context_free(h->context,bufval); - printf("eachsize=%d strlen(bufval[i])=%d\n",*eachsize,(int)strlen(bufval[i])); + printf("eachsize=%d strlen(bufval[i])=%d\n",*eachsize,(unsigned int)strlen(bufval[i])); return GRIB_ARRAY_TOO_SMALL; } memcpy(p,bufval[i],l); @@ -1778,7 +1667,7 @@ int grib_c_index_get_int(int* gid, char* key, int *val, int* size){ int err = GRIB_SUCCESS; size_t lsize = *size; long* lval=0; - size_t i; + int i; if(!h) return GRIB_INVALID_GRIB; @@ -1804,7 +1693,7 @@ int grib_c_index_get_real8(int* gid, char* key, double *val, int* size){ return err; } -int grib_c_set_int_array(int* gid, char* key, int* val, size_t* size){ +int grib_c_set_int_array(int* gid, char* key, int* val, int* size){ grib_handle *h = get_handle(*gid); int err = GRIB_SUCCESS; long* long_val = NULL; @@ -1935,7 +1824,7 @@ int grib_c_get_real4_elements(int* gid, char* key,int* index, float *val,int* si grib_handle *h = get_handle(*gid); int err = GRIB_SUCCESS; size_t lsize = *size; - size_t i=0; + long i=0; double* val8 = NULL; if(!h) return GRIB_INVALID_GRIB; @@ -1950,7 +1839,7 @@ int grib_c_get_real4_elements(int* gid, char* key,int* index, float *val,int* si err = grib_get_double_elements(h, key, index,(long)lsize,val8); - for(i=0; icontext,val8); @@ -1971,7 +1860,7 @@ int grib_c_get_real4(int* gid, char* key, float* val) return err; } -int grib_c_get_real4_array(int* gid, char* key, float *val, size_t* size) +int grib_c_get_real4_array(int* gid, char* key, float *val, int* size) { grib_handle *h = get_handle(*gid); int err = GRIB_SUCCESS; @@ -2013,7 +1902,7 @@ int grib_c_set_real4_array(int* gid, char* key, float*val, int* size) if(!val8) return GRIB_OUT_OF_MEMORY; - for(lsize=0; lsize<(size_t)*size; lsize++) + for(lsize=0;lsize<*size;lsize++) val8[lsize] = val[lsize]; err = grib_set_double_array(h, key, val8, lsize); @@ -2318,7 +2207,6 @@ void grib_c_check(int* err,char* call,char* str) int grib_c_write(int* gid, FILE* f) { - int err = 0; grib_handle *h = get_handle(*gid); const void* mess = NULL; size_t mess_len = 0; @@ -2326,17 +2214,12 @@ int grib_c_write(int* gid, FILE* f) if(!f) return GRIB_INVALID_FILE; if (!h) return GRIB_INVALID_GRIB; - err = grib_get_message(h,&mess,&mess_len); - if (err) return err; + grib_get_message(h,&mess,&mess_len); if(fwrite(mess,1, mess_len,f) != mess_len) { perror("grib_write"); return GRIB_IO_PROBLEM; } - err = fflush(f); - if(err) { - perror("write flush"); - return GRIB_IO_PROBLEM; - } + return GRIB_SUCCESS; } diff --git a/python/grib_interface.h b/python/grib_interface.h index fceafddaf..4c434f497 100644 --- a/python/grib_interface.h +++ b/python/grib_interface.h @@ -2,8 +2,8 @@ #define GRIB_INTERFACE_H int grib_c_read_any_from_file(int *fid, char *buffer, int *nbytes); -int grib_c_write_file(int *fid, char *buffer, size_t *nbytes); -int grib_c_read_file(int *fid, char *buffer, size_t *nbytes); +int grib_c_write_file(int *fid, char *buffer, int *nbytes); +int grib_c_read_file(int *fid, char *buffer, int *nbytes); int grib_c_open_file(int *fid, char *name, char *op); int grib_c_close_file(int *fid); int grib_c_multi_support_on(void); @@ -37,13 +37,9 @@ int grib_c_bufr_new_from_samples(int *gid, char *name); int grib_c_clone(int *gidsrc, int *giddest); int grib_c_copy_namespace(int *gidsrc, char *name, int *giddest); int grib_c_count_in_file(FILE *f, int *n); - -int grib_c_new_from_file(FILE *f, int fd, char* fname, int *gid, int headers_only); - +int grib_c_new_from_file(FILE *f, int *gid, int headers_only); int grib_c_new_any_from_file(FILE *f, int headers_only,int *gid); - -int grib_c_new_bufr_from_file(FILE *f, int fd, char* fname, int headers_only,int *gid); - +int grib_c_new_bufr_from_file(FILE *f, int headers_only,int *gid); int grib_c_new_gts_from_file(FILE *f,int headers_only, int *gid); int grib_c_new_metar_from_file(FILE* f,int headers_only, int* gid); int grib_c_new_from_index(int *iid, int *gid); @@ -62,13 +58,13 @@ int grib_c_index_get_size_long(int *gid, char *key, long *val); int grib_c_get_int(int *gid, char *key, int *val); int grib_c_get_long(int *gid, char *key, long *val); int grib_c_get_double(int *gid, char *key, double *val); -int grib_c_get_int_array(int *gid, char *key, int *val, size_t *size); +int grib_c_get_int_array(int *gid, char *key, int *val, int *size); int grib_c_get_long_array(int *gid, char *key, long *val, int *size); int grib_c_index_get_string(int *gid, char *key, char *val, int *eachsize, int *size); int grib_c_index_get_long(int *gid, char *key, long *val, int *size); int grib_c_index_get_int(int *gid, char *key, int *val, int *size); int grib_c_index_get_real8(int *gid, char *key, double *val, int *size); -int grib_c_set_int_array(int *gid, char *key, int *val, size_t *size); +int grib_c_set_int_array(int *gid, char *key, int *val, int *size); int grib_c_set_long_array(int *gid, char *key, long *val, int *size); int grib_c_set_int(int *gid, char *key, int *val); int grib_c_set_long(int *gid, char *key, long *val); @@ -80,7 +76,7 @@ int grib_c_set_real4(int *gid, char *key, float *val); int grib_c_get_real4_element(int *gid, char *key, int *index, float *val); int grib_c_get_real4_elements(int *gid, char *key, int *index, float *val, int *size); int grib_c_get_real4(int *gid, char *key, float *val); -int grib_c_get_real4_array(int *gid, char *key, float *val, size_t *size); +int grib_c_get_real4_array(int *gid, char *key, float *val, int *size); int grib_c_set_real4_array(int *gid, char *key, float *val, int *size); int grib_c_index_select_real8(int *gid, char *key, double *val); int grib_c_index_select_string(int *gid, char *key, char *val); diff --git a/python/gribapi/errors.py b/python/gribapi/errors.py index 7b0e6cd60..4bf949787 100644 --- a/python/gribapi/errors.py +++ b/python/gribapi/errors.py @@ -2,7 +2,7 @@ Exception class hierarchy """ -from . import gribapi_swig as _internal +import gribapi_swig as _internal class GribInternalError(Exception): diff --git a/python/gribapi/gribapi.py b/python/gribapi/gribapi.py index 977a0d543..a6a18ff5f 100644 --- a/python/gribapi/gribapi.py +++ b/python/gribapi/gribapi.py @@ -22,22 +22,15 @@ When this is enabed, then the system Python will be used to build the interface. - NumPy """ +import gribapi_swig as _internal # from gribapi import gribapi_swig as _internal -from . import gribapi_swig as _internal import types import sys import os from functools import wraps # import inspect from . import errors -from .errors import * # noqa - -try: - type(file) -except NameError: - import io - file=io.IOBase - long=int +from errors import * # noqa KEYTYPES = { 1: int, @@ -83,12 +76,12 @@ def require(**_params_): @wraps(_func_) # The wrapper function. Replaces the target function and receives its args def modified(*args, **kw): - arg_names = _func_.__code__.co_varnames + arg_names = _func_.func_code.co_varnames # argnames, varargs, kwargs, defaults = inspect.getargspec(_func_) kw.update(zip(arg_names, args)) - for name, allowed_types in _params_.items(): + for name, allowed_types in _params_.iteritems(): param = kw[name] - if isinstance(allowed_types, type): + if isinstance(allowed_types, types.TypeType): allowed_types = (allowed_types,) assert any([isinstance(param, type1) for type1 in allowed_types]), \ "Parameter '%s' should be of type %s" % (name, " or ".join([t.__name__ for t in allowed_types])) @@ -259,9 +252,7 @@ def bufr_new_from_file(fileobj, headers_only=False): @return id of the BUFR loaded in memory @exception GribInternalError """ - fd = fileobj.fileno() - fn = fileobj.name - err, bufrid = _internal.grib_c_new_bufr_from_file(fileobj, fd, fn, headers_only, 0) + err, bufrid = _internal.grib_c_new_bufr_from_file(fileobj, headers_only, 0) if err: if err == _internal.GRIB_END_OF_FILE: return None @@ -293,10 +284,7 @@ def grib_new_from_file(fileobj, headers_only=False): @return id of the grib loaded in memory @exception GribInternalError """ - fd = fileobj.fileno() - fn = fileobj.name - #print('Python grib_new_from_file: ', fd,' ', fn) - err, gribid = _internal.grib_c_new_from_file(fileobj, fd, fn, 0, headers_only) + err, gribid = _internal.grib_c_new_from_file(fileobj, 0, headers_only) if err: if err == _internal.GRIB_END_OF_FILE: return None @@ -828,7 +816,7 @@ def grib_set_long(msgid, key, value): except (ValueError, TypeError): raise TypeError("Invalid type") - if value > sys.maxsize: + if value > sys.maxint: raise TypeError("Invalid type") GRIB_CHECK(_internal.grib_c_set_long(msgid, key, value)) @@ -1491,7 +1479,7 @@ def grib_set_key_vals(gribid, key_vals): key_vals_str += kv elif isinstance(key_vals, dict): # A dictionary mapping keys to values - for key in key_vals.keys(): + for key in key_vals.iterkeys(): if len(key_vals_str) > 0: key_vals_str += ',' key_vals_str += key + '=' + str(key_vals[key]) @@ -1767,15 +1755,12 @@ def grib_set_array(msgid, key, value): if isinstance(val0, float): grib_set_double_array(msgid, key, value) + elif isinstance(val0, int): + grib_set_long_array(msgid, key, value) elif isinstance(val0, str): grib_set_string_array(msgid, key, value) else: - # Note: Cannot do isinstance(val0,int) for numpy.int64 - try: - n = int(val0) - except (ValueError, TypeError): - raise errors.GribInternalError("Invalid type of value when setting key '%s'." % key) - grib_set_long_array(msgid, key, value) + raise errors.GribInternalError("Invalid type of value when setting key '%s'." % key) @require(indexid=int, key=str) diff --git a/python/gribapi_swig.i b/python/gribapi_swig.i index 4885c1b3b..0224b77bf 100644 --- a/python/gribapi_swig.i +++ b/python/gribapi_swig.i @@ -17,18 +17,14 @@ import_array(); %} -/* Converts a PyFile instance to a stdio FILE* for reading binary files */ +/* Converts a PyFile instance to a stdio FILE* */ %typemap(in) FILE* { - int fileDescriptor = PyObject_AsFileDescriptor($input); - /*printf("swig.i fileDescriptor=%d\n", fileDescriptor);*/ - if(fileDescriptor >= 0) { - /* Convert file descriptor to a FILE pointer */ - $1 = fdopen(fileDescriptor,"rb"); // needs to be rb+ (or wb) for write - } - else { - PyErr_SetString(PyExc_TypeError, "$1_name must be a file type."); - return NULL; - } + if ( PyFile_Check($input) ){ + $1 = PyFile_AsFile($input); + } else { + PyErr_SetString(PyExc_TypeError, "$1_name must be a file type."); + return NULL; + } } %pointer_class(int, intp); @@ -41,9 +37,9 @@ import_array(); %array_functions(char*, stringArray); // creation -int grib_c_new_from_file(FILE* f, int fd, char* fname, int* INOUT, int headers_only); +int grib_c_new_from_file(FILE* f, int* INOUT, int headers_only); int grib_c_new_any_from_file(FILE* f, int headers_only, int* INOUT); -int grib_c_new_bufr_from_file(FILE* f, int fd, char* fname, int headers_only, int* INOUT); +int grib_c_new_bufr_from_file(FILE* f, int headers_only, int* INOUT); int grib_c_new_gts_from_file(FILE* f, int headers_only, int* INOUT); int grib_c_new_metar_from_file(FILE* f, int headers_only, int* INOUT); int grib_c_iterator_new(int* INPUT, int* OUTPUT, int* INPUT); @@ -68,19 +64,6 @@ int grib_c_new_from_message(int *INOUT, char *binmsg, size_t *INPUT); int grib_c_count_in_file(FILE* f,int* OUTPUT); // --- -/* Converts a PyFile instance to a stdio FILE* for writing binary files */ -%typemap(in) FILE* { - int fileDescriptor = PyObject_AsFileDescriptor($input); - if(fileDescriptor >= 0) { - /* Convert file descriptor to a FILE pointer */ - $1 = fdopen(fileDescriptor,"wb"); - } - else { - PyErr_SetString(PyExc_TypeError, "$1_name must be a file type."); - return NULL; - } -} - // grib handle operations int grib_c_release(int* gid); int grib_c_write(int* gid, FILE* f); @@ -239,8 +222,8 @@ int grib_c_find_nearest_four_single(int* gid, int* INPUT, double* INPUT, double* * Get the binary string message for a grib. * * Set the 3rd argument to nothing in 'cstring_output_allocate_size'. -* This is kind of difficult to explain, but, *msg will point directly to -* the binary message data of the current grib (which is stored in +* This is kind of difficult to explain, but, *msg will point directly to +* the binary message data of the current grib (which is stored in * handle->buffer->data if I remember correctly) so freeing it will cause * the binary message data in the grib_handle structure to be freed. This * is a problem as grib_api does not know that, so it tries to free it @@ -263,3 +246,6 @@ void grib_c_gts_header_on(); void grib_c_gts_header_off(); void grib_c_set_definitions_path(const char* path); void grib_c_set_samples_path(const char* path); + + + diff --git a/python/numpy.i b/python/numpy.i index 72d5824de..644e968ff 100644 --- a/python/numpy.i +++ b/python/numpy.i @@ -1,46 +1,11 @@ /* -*- C -*- (not really, but good for syntax highlighting) */ - -/* - * Copyright (c) 2005-2015, NumPy Developers. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * Neither the name of the NumPy Developers nor the names of any - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - #ifdef SWIGPYTHON %{ #ifndef SWIG_FILE_WITH_INIT -#define NO_IMPORT_ARRAY +# define NO_IMPORT_ARRAY #endif #include "stdio.h" -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION #include %} @@ -48,10 +13,56 @@ %fragment("NumPy_Backward_Compatibility", "header") { -%#if NPY_API_VERSION < 0x00000007 -%#define NPY_ARRAY_DEFAULT NPY_DEFAULT -%#define NPY_ARRAY_FARRAY NPY_FARRAY -%#define NPY_FORTRANORDER NPY_FORTRAN +/* Support older NumPy data type names +*/ +%#if NDARRAY_VERSION < 0x01000000 +%#define NPY_BOOL PyArray_BOOL +%#define NPY_BYTE PyArray_BYTE +%#define NPY_UBYTE PyArray_UBYTE +%#define NPY_SHORT PyArray_SHORT +%#define NPY_USHORT PyArray_USHORT +%#define NPY_INT PyArray_INT +%#define NPY_UINT PyArray_UINT +%#define NPY_LONG PyArray_LONG +%#define NPY_ULONG PyArray_ULONG +%#define NPY_LONGLONG PyArray_LONGLONG +%#define NPY_ULONGLONG PyArray_ULONGLONG +%#define NPY_FLOAT PyArray_FLOAT +%#define NPY_DOUBLE PyArray_DOUBLE +%#define NPY_LONGDOUBLE PyArray_LONGDOUBLE +%#define NPY_CFLOAT PyArray_CFLOAT +%#define NPY_CDOUBLE PyArray_CDOUBLE +%#define NPY_CLONGDOUBLE PyArray_CLONGDOUBLE +%#define NPY_OBJECT PyArray_OBJECT +%#define NPY_STRING PyArray_STRING +%#define NPY_UNICODE PyArray_UNICODE +%#define NPY_VOID PyArray_VOID +%#define NPY_NTYPES PyArray_NTYPES +%#define NPY_NOTYPE PyArray_NOTYPE +%#define NPY_CHAR PyArray_CHAR +%#define NPY_USERDEF PyArray_USERDEF +%#define npy_intp intp + +%#define NPY_MAX_BYTE MAX_BYTE +%#define NPY_MIN_BYTE MIN_BYTE +%#define NPY_MAX_UBYTE MAX_UBYTE +%#define NPY_MAX_SHORT MAX_SHORT +%#define NPY_MIN_SHORT MIN_SHORT +%#define NPY_MAX_USHORT MAX_USHORT +%#define NPY_MAX_INT MAX_INT +%#define NPY_MIN_INT MIN_INT +%#define NPY_MAX_UINT MAX_UINT +%#define NPY_MAX_LONG MAX_LONG +%#define NPY_MIN_LONG MIN_LONG +%#define NPY_MAX_ULONG MAX_ULONG +%#define NPY_MAX_LONGLONG MAX_LONGLONG +%#define NPY_MIN_LONGLONG MIN_LONGLONG +%#define NPY_MAX_ULONGLONG MAX_ULONGLONG +%#define NPY_MAX_INTP MAX_INTP +%#define NPY_MIN_INTP MIN_INTP + +%#define NPY_FARRAY FARRAY +%#define NPY_F_CONTIGUOUS F_CONTIGUOUS %#endif } @@ -69,48 +80,24 @@ { /* Macros to extract array attributes. */ -%#if NPY_API_VERSION < 0x00000007 -%#define is_array(a) ((a) && PyArray_Check((PyArrayObject*)a)) -%#define array_type(a) (int)(PyArray_TYPE((PyArrayObject*)a)) -%#define array_numdims(a) (((PyArrayObject*)a)->nd) -%#define array_dimensions(a) (((PyArrayObject*)a)->dimensions) -%#define array_size(a,i) (((PyArrayObject*)a)->dimensions[i]) -%#define array_strides(a) (((PyArrayObject*)a)->strides) -%#define array_stride(a,i) (((PyArrayObject*)a)->strides[i]) -%#define array_data(a) (((PyArrayObject*)a)->data) -%#define array_descr(a) (((PyArrayObject*)a)->descr) -%#define array_flags(a) (((PyArrayObject*)a)->flags) -%#define array_clearflags(a,f) (((PyArrayObject*)a)->flags) &= ~f -%#define array_enableflags(a,f) (((PyArrayObject*)a)->flags) = f -%#define array_is_fortran(a) (PyArray_ISFORTRAN((PyArrayObject*)a)) -%#else -%#define is_array(a) ((a) && PyArray_Check(a)) -%#define array_type(a) PyArray_TYPE((PyArrayObject*)a) -%#define array_numdims(a) PyArray_NDIM((PyArrayObject*)a) -%#define array_dimensions(a) PyArray_DIMS((PyArrayObject*)a) -%#define array_strides(a) PyArray_STRIDES((PyArrayObject*)a) -%#define array_stride(a,i) PyArray_STRIDE((PyArrayObject*)a,i) -%#define array_size(a,i) PyArray_DIM((PyArrayObject*)a,i) -%#define array_data(a) PyArray_DATA((PyArrayObject*)a) -%#define array_descr(a) PyArray_DESCR((PyArrayObject*)a) -%#define array_flags(a) PyArray_FLAGS((PyArrayObject*)a) -%#define array_enableflags(a,f) PyArray_ENABLEFLAGS((PyArrayObject*)a,f) -%#define array_clearflags(a,f) PyArray_CLEARFLAGS((PyArrayObject*)a,f) -%#define array_is_fortran(a) (PyArray_IS_F_CONTIGUOUS((PyArrayObject*)a)) -%#endif -%#define array_is_contiguous(a) (PyArray_ISCONTIGUOUS((PyArrayObject*)a)) -%#define array_is_native(a) (PyArray_ISNOTSWAPPED((PyArrayObject*)a)) +%#define is_array(a) ((a) && PyArray_Check((PyArrayObject *)a)) +%#define array_type(a) (int)(PyArray_TYPE(a)) +%#define array_numdims(a) (((PyArrayObject *)a)->nd) +%#define array_dimensions(a) (((PyArrayObject *)a)->dimensions) +%#define array_size(a,i) (((PyArrayObject *)a)->dimensions[i]) +%#define array_data(a) (((PyArrayObject *)a)->data) +%#define array_is_contiguous(a) (PyArray_ISCONTIGUOUS(a)) +%#define array_is_native(a) (PyArray_ISNOTSWAPPED(a)) +%#define array_is_fortran(a) (PyArray_ISFORTRAN(a)) } /**********************************************************************/ -%fragment("NumPy_Utilities", - "header") +%fragment("NumPy_Utilities", "header") { /* Given a PyObject, return a string describing its type. */ - const char* pytype_string(PyObject* py_obj) - { + const char* pytype_string(PyObject* py_obj) { if (py_obj == NULL ) return "C NULL value"; if (py_obj == Py_None ) return "Python None" ; if (PyCallable_Check(py_obj)) return "callable" ; @@ -120,71 +107,40 @@ if (PyDict_Check( py_obj)) return "dict" ; if (PyList_Check( py_obj)) return "list" ; if (PyTuple_Check( py_obj)) return "tuple" ; -%#if PY_MAJOR_VERSION < 3 if (PyFile_Check( py_obj)) return "file" ; if (PyModule_Check( py_obj)) return "module" ; if (PyInstance_Check(py_obj)) return "instance" ; -%#endif return "unknown type"; } /* Given a NumPy typecode, return a string describing the type. */ - const char* typecode_string(int typecode) - { - static const char* type_names[25] = {"bool", - "byte", - "unsigned byte", - "short", - "unsigned short", - "int", - "unsigned int", - "long", - "unsigned long", - "long long", - "unsigned long long", - "float", - "double", - "long double", - "complex float", - "complex double", - "complex long double", - "object", - "string", - "unicode", - "void", - "ntypes", - "notype", - "char", - "unknown"}; + const char* typecode_string(int typecode) { + static const char* type_names[25] = {"bool", "byte", "unsigned byte", + "short", "unsigned short", "int", + "unsigned int", "long", "unsigned long", + "long long", "unsigned long long", + "float", "double", "long double", + "complex float", "complex double", + "complex long double", "object", + "string", "unicode", "void", "ntypes", + "notype", "char", "unknown"}; return typecode < 24 ? type_names[typecode] : type_names[24]; } - /* Make sure input has correct numpy type. This now just calls - PyArray_EquivTypenums(). + /* Make sure input has correct numpy type. Allow character and byte + * to match. Also allow int and long to match. This is deprecated. + * You should use PyArray_EquivTypenums() instead. */ - int type_match(int actual_type, - int desired_type) - { + int type_match(int actual_type, int desired_type) { return PyArray_EquivTypenums(actual_type, desired_type); } - -%#ifdef SWIGPY_USE_CAPSULE - void free_cap(PyObject * cap) - { - void* array = (void*) PyCapsule_GetPointer(cap,SWIGPY_CAPSULE_NAME); - if (array != NULL) free(array); - } -%#endif - - } /**********************************************************************/ -%fragment("NumPy_Object_to_Array", - "header", +%fragment("NumPy_Object_to_Array", "header", fragment="NumPy_Backward_Compatibility", fragment="NumPy_Macros", fragment="NumPy_Utilities") @@ -193,8 +149,7 @@ * legal. If not, set the python error string appropriately and * return NULL. */ - PyArrayObject* obj_to_array_no_conversion(PyObject* input, - int typecode) + PyArrayObject* obj_to_array_no_conversion(PyObject* input, int typecode) { PyArrayObject* ary = NULL; if (is_array(input) && (typecode == NPY_NOTYPE || @@ -213,12 +168,11 @@ } else { - const char* desired_type = typecode_string(typecode); - const char* actual_type = pytype_string(input); + const char * desired_type = typecode_string(typecode); + const char * actual_type = pytype_string(input); PyErr_Format(PyExc_TypeError, "Array of type '%s' required. A '%s' was given", - desired_type, - actual_type); + desired_type, actual_type); ary = NULL; } return ary; @@ -229,12 +183,11 @@ * correct type. On failure, the python error string will be set and * the routine returns NULL. */ - PyArrayObject* obj_to_array_allow_conversion(PyObject* input, - int typecode, - int* is_new_object) + PyArrayObject* obj_to_array_allow_conversion(PyObject* input, int typecode, + int* is_new_object) { PyArrayObject* ary = NULL; - PyObject* py_obj; + PyObject* py_obj; if (is_array(input) && (typecode == NPY_NOTYPE || PyArray_EquivTypenums(array_type(input),typecode))) { @@ -243,7 +196,7 @@ } else { - py_obj = PyArray_FROMANY(input, typecode, 0, 0, NPY_ARRAY_DEFAULT); + py_obj = PyArray_FROMANY(input, typecode, 0, 0, NPY_DEFAULT); /* If NULL, PyArray_FromObject will have set python error value.*/ ary = (PyArrayObject*) py_obj; *is_new_object = 1; @@ -256,10 +209,8 @@ * not contiguous, create a new PyArrayObject using the original data, * flag it as a new object and return the pointer. */ - PyArrayObject* make_contiguous(PyArrayObject* ary, - int* is_new_object, - int min_dims, - int max_dims) + PyArrayObject* make_contiguous(PyArrayObject* ary, int* is_new_object, + int min_dims, int max_dims) { PyArrayObject* result; if (array_is_contiguous(ary)) @@ -270,9 +221,9 @@ else { result = (PyArrayObject*) PyArray_ContiguousFromObject((PyObject*)ary, - array_type(ary), - min_dims, - max_dims); + array_type(ary), + min_dims, + max_dims); *is_new_object = 1; } return result; @@ -284,8 +235,8 @@ * PyArrayObject using the original data, flag it as a new object * and return the pointer. */ - PyArrayObject* make_fortran(PyArrayObject* ary, - int* is_new_object) + PyArrayObject* make_fortran(PyArrayObject* ary, int* is_new_object, + int min_dims, int max_dims) { PyArrayObject* result; if (array_is_fortran(ary)) @@ -295,14 +246,8 @@ } else { - Py_INCREF(array_descr(ary)); - result = (PyArrayObject*) PyArray_FromArray(ary, - array_descr(ary), -%#if NPY_API_VERSION < 0x00000007 - NPY_FORTRANORDER); -%#else - NPY_ARRAY_F_CONTIGUOUS); -%#endif + Py_INCREF(ary->descr); + result = (PyArrayObject*) PyArray_FromArray(ary, ary->descr, NPY_FORTRAN); *is_new_object = 1; } return result; @@ -314,14 +259,13 @@ * will be set. */ PyArrayObject* obj_to_array_contiguous_allow_conversion(PyObject* input, - int typecode, - int* is_new_object) + int typecode, + int* is_new_object) { int is_new1 = 0; int is_new2 = 0; PyArrayObject* ary2; - PyArrayObject* ary1 = obj_to_array_allow_conversion(input, - typecode, + PyArrayObject* ary1 = obj_to_array_allow_conversion(input, typecode, &is_new1); if (ary1) { @@ -342,18 +286,17 @@ * will be set. */ PyArrayObject* obj_to_array_fortran_allow_conversion(PyObject* input, - int typecode, - int* is_new_object) + int typecode, + int* is_new_object) { int is_new1 = 0; int is_new2 = 0; PyArrayObject* ary2; - PyArrayObject* ary1 = obj_to_array_allow_conversion(input, - typecode, + PyArrayObject* ary1 = obj_to_array_allow_conversion(input, typecode, &is_new1); if (ary1) { - ary2 = make_fortran(ary1, &is_new2); + ary2 = make_fortran(ary1, &is_new2, 0, 0); if (is_new1 && is_new2) { Py_DECREF(ary1); @@ -363,12 +306,13 @@ *is_new_object = is_new1 || is_new2; return ary1; } + } /* end fragment */ + /**********************************************************************/ -%fragment("NumPy_Array_Requirements", - "header", +%fragment("NumPy_Array_Requirements", "header", fragment="NumPy_Backward_Compatibility", fragment="NumPy_Macros") { @@ -388,22 +332,6 @@ return contiguous; } - /* Test whether a python object is (C_ or F_) contiguous. If array is - * contiguous, return 1. Otherwise, set the python error string and - * return 0. - */ - int require_c_or_f_contiguous(PyArrayObject* ary) - { - int contiguous = 1; - if (!(array_is_contiguous(ary) || array_is_fortran(ary))) - { - PyErr_SetString(PyExc_TypeError, - "Array must be contiguous (C_ or F_). A non-contiguous array was given"); - contiguous = 0; - } - return contiguous; - } - /* Require that a numpy array is not byte-swapped. If the array is * not byte-swapped, return 1. Otherwise, set the python error string * and return 0. @@ -425,16 +353,14 @@ * dimensions. If the array has the specified number of dimensions, * return 1. Otherwise, set the python error string and return 0. */ - int require_dimensions(PyArrayObject* ary, - int exact_dimensions) + int require_dimensions(PyArrayObject* ary, int exact_dimensions) { int success = 1; if (array_numdims(ary) != exact_dimensions) { PyErr_Format(PyExc_TypeError, "Array must have %d dimensions. Given array has %d dimensions", - exact_dimensions, - array_numdims(ary)); + exact_dimensions, array_numdims(ary)); success = 0; } return success; @@ -445,9 +371,7 @@ * of dimensions, return 1. Otherwise, set the python error string * and return 0. */ - int require_dimensions_n(PyArrayObject* ary, - int* exact_dimensions, - int n) + int require_dimensions_n(PyArrayObject* ary, int* exact_dimensions, int n) { int success = 0; int i; @@ -471,8 +395,7 @@ strcat(dims_str,s); PyErr_Format(PyExc_TypeError, "Array must have %s dimensions. Given array has %d dimensions", - dims_str, - array_numdims(ary)); + dims_str, array_numdims(ary)); } return success; } @@ -481,13 +404,11 @@ * array has the specified shape, return 1. Otherwise, set the python * error string and return 0. */ - int require_size(PyArrayObject* ary, - npy_intp* size, - int n) + int require_size(PyArrayObject* ary, npy_intp* size, int n) { int i; int success = 1; - size_t len; + int len; char desired_dims[255] = "["; char s[255]; char actual_dims[255] = "["; @@ -523,158 +444,104 @@ actual_dims[len-1] = ']'; PyErr_Format(PyExc_TypeError, "Array must have shape of %s. Given array has shape of %s", - desired_dims, - actual_dims); + desired_dims, actual_dims); } return success; } - /* Require the given PyArrayObject to to be Fortran ordered. If the - * the PyArrayObject is already Fortran ordered, do nothing. Else, - * set the Fortran ordering flag and recompute the strides. + /* Require the given PyArrayObject to to be FORTRAN ordered. If the + * the PyArrayObject is already FORTRAN ordered, do nothing. Else, + * set the FORTRAN ordering flag and recompute the strides. */ int require_fortran(PyArrayObject* ary) { int success = 1; int nd = array_numdims(ary); int i; - npy_intp * strides = array_strides(ary); if (array_is_fortran(ary)) return success; - int n_non_one = 0; - /* Set the Fortran ordered flag */ - const npy_intp *dims = array_dimensions(ary); - for (i=0; i < nd; ++i) - n_non_one += (dims[i] != 1) ? 1 : 0; - if (n_non_one > 1) - array_clearflags(ary,NPY_ARRAY_CARRAY); - array_enableflags(ary,NPY_ARRAY_FARRAY); + /* Set the FORTRAN ordered flag */ + ary->flags = NPY_FARRAY; /* Recompute the strides */ - strides[0] = strides[nd-1]; + ary->strides[0] = ary->strides[nd-1]; for (i=1; i < nd; ++i) - strides[i] = strides[i-1] * array_size(ary,i-1); + ary->strides[i] = ary->strides[i-1] * array_size(ary,i-1); return success; } } /* Combine all NumPy fragments into one for convenience */ -%fragment("NumPy_Fragments", - "header", +%fragment("NumPy_Fragments", "header", fragment="NumPy_Backward_Compatibility", fragment="NumPy_Macros", fragment="NumPy_Utilities", fragment="NumPy_Object_to_Array", - fragment="NumPy_Array_Requirements") -{ -} + fragment="NumPy_Array_Requirements") { } /* End John Hunter translation (with modifications by Bill Spotz) */ /* %numpy_typemaps() macro * - * This macro defines a family of 75 typemaps that allow C arguments + * This macro defines a family of 41 typemaps that allow C arguments * of the form * - * 1. (DATA_TYPE IN_ARRAY1[ANY]) - * 2. (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) - * 3. (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) + * (DATA_TYPE IN_ARRAY1[ANY]) + * (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) + * (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) * - * 4. (DATA_TYPE IN_ARRAY2[ANY][ANY]) - * 5. (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) - * 6. (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) - * 7. (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) - * 8. (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2) + * (DATA_TYPE IN_ARRAY2[ANY][ANY]) + * (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) + * (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2) * - * 9. (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) - * 10. (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) - * 11. (DATA_TYPE** IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) - * 12. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) - * 13. (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) - * 14. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3) + * (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) + * (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) + * (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3) * - * 15. (DATA_TYPE IN_ARRAY4[ANY][ANY][ANY][ANY]) - * 16. (DATA_TYPE* IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) - * 17. (DATA_TYPE** IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) - * 18. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, , DIM_TYPE DIM4, DATA_TYPE* IN_ARRAY4) - * 19. (DATA_TYPE* IN_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) - * 20. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* IN_FARRAY4) + * (DATA_TYPE INPLACE_ARRAY1[ANY]) + * (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1) + * (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1) * - * 21. (DATA_TYPE INPLACE_ARRAY1[ANY]) - * 22. (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1) - * 23. (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1) + * (DATA_TYPE INPLACE_ARRAY2[ANY][ANY]) + * (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2) + * (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2) * - * 24. (DATA_TYPE INPLACE_ARRAY2[ANY][ANY]) - * 25. (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) - * 26. (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2) - * 27. (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) - * 28. (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2) + * (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY]) + * (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3) + * (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3) * - * 29. (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY]) - * 30. (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) - * 31. (DATA_TYPE** INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) - * 32. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3) - * 33. (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) - * 34. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3) + * (DATA_TYPE ARGOUT_ARRAY1[ANY]) + * (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) + * (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) * - * 35. (DATA_TYPE INPLACE_ARRAY4[ANY][ANY][ANY][ANY]) - * 36. (DATA_TYPE* INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) - * 37. (DATA_TYPE** INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) - * 38. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* INPLACE_ARRAY4) - * 39. (DATA_TYPE* INPLACE_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) - * 40. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* INPLACE_FARRAY4) + * (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) * - * 41. (DATA_TYPE ARGOUT_ARRAY1[ANY]) - * 42. (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) - * 43. (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) + * (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) * - * 44. (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) + * (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1) + * (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1) * - * 45. (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) + * (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) + * (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2) + * (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) + * (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2) * - * 46. (DATA_TYPE ARGOUT_ARRAY4[ANY][ANY][ANY][ANY]) - * - * 47. (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1) - * 48. (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1) - * - * 49. (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) - * 50. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2) - * 51. (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) - * 52. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2) - * - * 53. (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) - * 54. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3) - * 55. (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) - * 56. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3) - * - * 57. (DATA_TYPE** ARGOUTVIEW_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) - * 58. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEW_ARRAY4) - * 59. (DATA_TYPE** ARGOUTVIEW_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) - * 60. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEW_FARRAY4) - * - * 61. (DATA_TYPE** ARGOUTVIEWM_ARRAY1, DIM_TYPE* DIM1) - * 62. (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEWM_ARRAY1) - * - * 63. (DATA_TYPE** ARGOUTVIEWM_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) - * 64. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEWM_ARRAY2) - * 65. (DATA_TYPE** ARGOUTVIEWM_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) - * 66. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEWM_FARRAY2) - * - * 67. (DATA_TYPE** ARGOUTVIEWM_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) - * 68. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEWM_ARRAY3) - * 69. (DATA_TYPE** ARGOUTVIEWM_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) - * 70. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEWM_FARRAY3) - * - * 71. (DATA_TYPE** ARGOUTVIEWM_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) - * 72. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEWM_ARRAY4) - * 73. (DATA_TYPE** ARGOUTVIEWM_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) - * 74. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEWM_FARRAY4) - * - * 75. (DATA_TYPE* INPLACE_ARRAY_FLAT, DIM_TYPE DIM_FLAT) + * (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) + * (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3) + * (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) + * (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3) * * where "DATA_TYPE" is any type supported by the NumPy module, and * "DIM_TYPE" is any int-like type suitable for specifying dimensions. * The difference between "ARRAY" typemaps and "FARRAY" typemaps is - * that the "FARRAY" typemaps expect Fortran ordering of + * that the "FARRAY" typemaps expect FORTRAN ordering of * multidimensional arrays. In python, the dimensions will not need * to be specified (except for the "DATA_TYPE* ARGOUT_ARRAY1" * typemaps). The IN_ARRAYs can be a numpy array or any sequence that @@ -734,8 +601,7 @@ (PyArrayObject* array=NULL, int is_new_object=0) { npy_intp size[1] = { $1_dim0 }; - array = obj_to_array_contiguous_allow_conversion($input, - DATA_TYPECODE, + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); if (!array || !require_dimensions(array, 1) || !require_size(array, size, 1)) SWIG_fail; @@ -762,8 +628,7 @@ (PyArrayObject* array=NULL, int is_new_object=0) { npy_intp size[1] = { -1 }; - array = obj_to_array_contiguous_allow_conversion($input, - DATA_TYPECODE, + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); if (!array || !require_dimensions(array, 1) || !require_size(array, size, 1)) SWIG_fail; @@ -791,8 +656,7 @@ (PyArrayObject* array=NULL, int is_new_object=0) { npy_intp size[1] = {-1}; - array = obj_to_array_contiguous_allow_conversion($input, - DATA_TYPECODE, + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); if (!array || !require_dimensions(array, 1) || !require_size(array, size, 1)) SWIG_fail; @@ -820,8 +684,7 @@ (PyArrayObject* array=NULL, int is_new_object=0) { npy_intp size[2] = { $1_dim0, $1_dim1 }; - array = obj_to_array_contiguous_allow_conversion($input, - DATA_TYPECODE, + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); if (!array || !require_dimensions(array, 2) || !require_size(array, size, 2)) SWIG_fail; @@ -877,8 +740,7 @@ (PyArrayObject* array=NULL, int is_new_object=0) { npy_intp size[2] = { -1, -1 }; - array = obj_to_array_contiguous_allow_conversion($input, - DATA_TYPECODE, + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); if (!array || !require_dimensions(array, 2) || !require_size(array, size, 2)) SWIG_fail; @@ -907,8 +769,7 @@ (PyArrayObject* array=NULL, int is_new_object=0) { npy_intp size[2] = { -1, -1 }; - array = obj_to_array_fortran_allow_conversion($input, - DATA_TYPECODE, + array = obj_to_array_fortran_allow_conversion($input, DATA_TYPECODE, &is_new_object); if (!array || !require_dimensions(array, 2) || !require_size(array, size, 2) || !require_fortran(array)) SWIG_fail; @@ -937,8 +798,7 @@ (PyArrayObject* array=NULL, int is_new_object=0) { npy_intp size[2] = { -1, -1 }; - array = obj_to_array_fortran_allow_conversion($input, - DATA_TYPECODE, + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); if (!array || !require_dimensions(array, 2) || !require_size(array, size, 2) || !require_fortran(array)) SWIG_fail; @@ -967,8 +827,7 @@ (PyArrayObject* array=NULL, int is_new_object=0) { npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 }; - array = obj_to_array_contiguous_allow_conversion($input, - DATA_TYPECODE, + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); if (!array || !require_dimensions(array, 3) || !require_size(array, size, 3)) SWIG_fail; @@ -1012,88 +871,6 @@ { Py_DECREF(array$argnum); } } -/* Typemap suite for (DATA_TYPE** IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, - * DIM_TYPE DIM3) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DATA_TYPE** IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) -{ - /* for now, only concerned with lists */ - $1 = PySequence_Check($input); -} -%typemap(in, - fragment="NumPy_Fragments") - (DATA_TYPE** IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) - (DATA_TYPE** array=NULL, PyArrayObject** object_array=NULL, int* is_new_object_array=NULL) -{ - npy_intp size[2] = { -1, -1 }; - PyArrayObject* temp_array; - Py_ssize_t i; - int is_new_object; - - /* length of the list */ - $2 = PyList_Size($input); - - /* the arrays */ - array = (DATA_TYPE **)malloc($2*sizeof(DATA_TYPE *)); - object_array = (PyArrayObject **)calloc($2,sizeof(PyArrayObject *)); - is_new_object_array = (int *)calloc($2,sizeof(int)); - - if (array == NULL || object_array == NULL || is_new_object_array == NULL) - { - SWIG_fail; - } - - for (i=0; i<$2; i++) - { - temp_array = obj_to_array_contiguous_allow_conversion(PySequence_GetItem($input,i), DATA_TYPECODE, &is_new_object); - - /* the new array must be stored so that it can be destroyed in freearg */ - object_array[i] = temp_array; - is_new_object_array[i] = is_new_object; - - if (!temp_array || !require_dimensions(temp_array, 2)) SWIG_fail; - - /* store the size of the first array in the list, then use that for comparison. */ - if (i == 0) - { - size[0] = array_size(temp_array,0); - size[1] = array_size(temp_array,1); - } - - if (!require_size(temp_array, size, 2)) SWIG_fail; - - array[i] = (DATA_TYPE*) array_data(temp_array); - } - - $1 = (DATA_TYPE**) array; - $3 = (DIM_TYPE) size[0]; - $4 = (DIM_TYPE) size[1]; -} -%typemap(freearg) - (DATA_TYPE** IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) -{ - Py_ssize_t i; - - if (array$argnum!=NULL) free(array$argnum); - - /*freeing the individual arrays if needed */ - if (object_array$argnum!=NULL) - { - if (is_new_object_array$argnum!=NULL) - { - for (i=0; i<$2; i++) - { - if (object_array$argnum[i] != NULL && is_new_object_array$argnum[i]) - { Py_DECREF(object_array$argnum[i]); } - } - free(is_new_object_array$argnum); - } - free(object_array$argnum); - } -} - /* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, * DATA_TYPE* IN_ARRAY3) */ @@ -1171,8 +948,7 @@ (PyArrayObject* array=NULL, int is_new_object=0) { npy_intp size[3] = { -1, -1, -1 }; - array = obj_to_array_fortran_allow_conversion($input, - DATA_TYPECODE, + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); if (!array || !require_dimensions(array, 3) || !require_size(array, size, 3) || !require_fortran(array)) SWIG_fail; @@ -1188,245 +964,6 @@ { Py_DECREF(array$argnum); } } -/* Typemap suite for (DATA_TYPE IN_ARRAY4[ANY][ANY][ANY][ANY]) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DATA_TYPE IN_ARRAY4[ANY][ANY][ANY][ANY]) -{ - $1 = is_array($input) || PySequence_Check($input); -} -%typemap(in, - fragment="NumPy_Fragments") - (DATA_TYPE IN_ARRAY4[ANY][ANY][ANY][ANY]) - (PyArrayObject* array=NULL, int is_new_object=0) -{ - npy_intp size[4] = { $1_dim0, $1_dim1, $1_dim2 , $1_dim3}; - array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, - &is_new_object); - if (!array || !require_dimensions(array, 4) || - !require_size(array, size, 4)) SWIG_fail; - $1 = ($1_ltype) array_data(array); -} -%typemap(freearg) - (DATA_TYPE IN_ARRAY4[ANY][ANY][ANY][ANY]) -{ - if (is_new_object$argnum && array$argnum) - { Py_DECREF(array$argnum); } -} - -/* Typemap suite for (DATA_TYPE* IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, - * DIM_TYPE DIM3, DIM_TYPE DIM4) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DATA_TYPE* IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) -{ - $1 = is_array($input) || PySequence_Check($input); -} -%typemap(in, - fragment="NumPy_Fragments") - (DATA_TYPE* IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) - (PyArrayObject* array=NULL, int is_new_object=0) -{ - npy_intp size[4] = { -1, -1, -1, -1 }; - array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, - &is_new_object); - if (!array || !require_dimensions(array, 4) || - !require_size(array, size, 4)) SWIG_fail; - $1 = (DATA_TYPE*) array_data(array); - $2 = (DIM_TYPE) array_size(array,0); - $3 = (DIM_TYPE) array_size(array,1); - $4 = (DIM_TYPE) array_size(array,2); - $5 = (DIM_TYPE) array_size(array,3); -} -%typemap(freearg) - (DATA_TYPE* IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) -{ - if (is_new_object$argnum && array$argnum) - { Py_DECREF(array$argnum); } -} - -/* Typemap suite for (DATA_TYPE** IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, - * DIM_TYPE DIM3, DIM_TYPE DIM4) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DATA_TYPE** IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) -{ - /* for now, only concerned with lists */ - $1 = PySequence_Check($input); -} -%typemap(in, - fragment="NumPy_Fragments") - (DATA_TYPE** IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) - (DATA_TYPE** array=NULL, PyArrayObject** object_array=NULL, int* is_new_object_array=NULL) -{ - npy_intp size[3] = { -1, -1, -1 }; - PyArrayObject* temp_array; - Py_ssize_t i; - int is_new_object; - - /* length of the list */ - $2 = PyList_Size($input); - - /* the arrays */ - array = (DATA_TYPE **)malloc($2*sizeof(DATA_TYPE *)); - object_array = (PyArrayObject **)calloc($2,sizeof(PyArrayObject *)); - is_new_object_array = (int *)calloc($2,sizeof(int)); - - if (array == NULL || object_array == NULL || is_new_object_array == NULL) - { - SWIG_fail; - } - - for (i=0; i<$2; i++) - { - temp_array = obj_to_array_contiguous_allow_conversion(PySequence_GetItem($input,i), DATA_TYPECODE, &is_new_object); - - /* the new array must be stored so that it can be destroyed in freearg */ - object_array[i] = temp_array; - is_new_object_array[i] = is_new_object; - - if (!temp_array || !require_dimensions(temp_array, 3)) SWIG_fail; - - /* store the size of the first array in the list, then use that for comparison. */ - if (i == 0) - { - size[0] = array_size(temp_array,0); - size[1] = array_size(temp_array,1); - size[2] = array_size(temp_array,2); - } - - if (!require_size(temp_array, size, 3)) SWIG_fail; - - array[i] = (DATA_TYPE*) array_data(temp_array); - } - - $1 = (DATA_TYPE**) array; - $3 = (DIM_TYPE) size[0]; - $4 = (DIM_TYPE) size[1]; - $5 = (DIM_TYPE) size[2]; -} -%typemap(freearg) - (DATA_TYPE** IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) -{ - Py_ssize_t i; - - if (array$argnum!=NULL) free(array$argnum); - - /*freeing the individual arrays if needed */ - if (object_array$argnum!=NULL) - { - if (is_new_object_array$argnum!=NULL) - { - for (i=0; i<$2; i++) - { - if (object_array$argnum[i] != NULL && is_new_object_array$argnum[i]) - { Py_DECREF(object_array$argnum[i]); } - } - free(is_new_object_array$argnum); - } - free(object_array$argnum); - } -} - -/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, - * DATA_TYPE* IN_ARRAY4) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* IN_ARRAY4) -{ - $1 = is_array($input) || PySequence_Check($input); -} -%typemap(in, - fragment="NumPy_Fragments") - (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* IN_ARRAY4) - (PyArrayObject* array=NULL, int is_new_object=0) -{ - npy_intp size[4] = { -1, -1, -1 , -1}; - array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, - &is_new_object); - if (!array || !require_dimensions(array, 4) || - !require_size(array, size, 4)) SWIG_fail; - $1 = (DIM_TYPE) array_size(array,0); - $2 = (DIM_TYPE) array_size(array,1); - $3 = (DIM_TYPE) array_size(array,2); - $4 = (DIM_TYPE) array_size(array,3); - $5 = (DATA_TYPE*) array_data(array); -} -%typemap(freearg) - (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* IN_ARRAY4) -{ - if (is_new_object$argnum && array$argnum) - { Py_DECREF(array$argnum); } -} - -/* Typemap suite for (DATA_TYPE* IN_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, - * DIM_TYPE DIM3, DIM_TYPE DIM4) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DATA_TYPE* IN_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) -{ - $1 = is_array($input) || PySequence_Check($input); -} -%typemap(in, - fragment="NumPy_Fragments") - (DATA_TYPE* IN_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) - (PyArrayObject* array=NULL, int is_new_object=0) -{ - npy_intp size[4] = { -1, -1, -1, -1 }; - array = obj_to_array_fortran_allow_conversion($input, DATA_TYPECODE, - &is_new_object); - if (!array || !require_dimensions(array, 4) || - !require_size(array, size, 4) | !require_fortran(array)) SWIG_fail; - $1 = (DATA_TYPE*) array_data(array); - $2 = (DIM_TYPE) array_size(array,0); - $3 = (DIM_TYPE) array_size(array,1); - $4 = (DIM_TYPE) array_size(array,2); - $5 = (DIM_TYPE) array_size(array,3); -} -%typemap(freearg) - (DATA_TYPE* IN_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) -{ - if (is_new_object$argnum && array$argnum) - { Py_DECREF(array$argnum); } -} - -/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, - * DATA_TYPE* IN_FARRAY4) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* IN_FARRAY4) -{ - $1 = is_array($input) || PySequence_Check($input); -} -%typemap(in, - fragment="NumPy_Fragments") - (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* IN_FARRAY4) - (PyArrayObject* array=NULL, int is_new_object=0) -{ - npy_intp size[4] = { -1, -1, -1 , -1 }; - array = obj_to_array_fortran_allow_conversion($input, DATA_TYPECODE, - &is_new_object); - if (!array || !require_dimensions(array, 4) || - !require_size(array, size, 4) || !require_fortran(array)) SWIG_fail; - $1 = (DIM_TYPE) array_size(array,0); - $2 = (DIM_TYPE) array_size(array,1); - $3 = (DIM_TYPE) array_size(array,2); - $4 = (DIM_TYPE) array_size(array,3); - $5 = (DATA_TYPE*) array_data(array); -} -%typemap(freearg) - (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* IN_FARRAY4) -{ - if (is_new_object$argnum && array$argnum) - { Py_DECREF(array$argnum); } -} - /***************************/ /* In-Place Array Typemaps */ /***************************/ @@ -1650,72 +1187,6 @@ $4 = (DIM_TYPE) array_size(array,2); } -/* Typemap suite for (DATA_TYPE** INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, - * DIM_TYPE DIM3) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DATA_TYPE** INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) -{ - $1 = PySequence_Check($input); -} -%typemap(in, - fragment="NumPy_Fragments") - (DATA_TYPE** INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) - (DATA_TYPE** array=NULL, PyArrayObject** object_array=NULL) -{ - npy_intp size[2] = { -1, -1 }; - PyArrayObject* temp_array; - Py_ssize_t i; - - /* length of the list */ - $2 = PyList_Size($input); - - /* the arrays */ - array = (DATA_TYPE **)malloc($2*sizeof(DATA_TYPE *)); - object_array = (PyArrayObject **)calloc($2,sizeof(PyArrayObject *)); - - if (array == NULL || object_array == NULL) - { - SWIG_fail; - } - - for (i=0; i<$2; i++) - { - temp_array = obj_to_array_no_conversion(PySequence_GetItem($input,i), DATA_TYPECODE); - - /* the new array must be stored so that it can be destroyed in freearg */ - object_array[i] = temp_array; - - if ( !temp_array || !require_dimensions(temp_array, 2) || - !require_contiguous(temp_array) || - !require_native(temp_array) || - !PyArray_EquivTypenums(array_type(temp_array), DATA_TYPECODE) - ) SWIG_fail; - - /* store the size of the first array in the list, then use that for comparison. */ - if (i == 0) - { - size[0] = array_size(temp_array,0); - size[1] = array_size(temp_array,1); - } - - if (!require_size(temp_array, size, 2)) SWIG_fail; - - array[i] = (DATA_TYPE*) array_data(temp_array); - } - - $1 = (DATA_TYPE**) array; - $3 = (DIM_TYPE) size[0]; - $4 = (DIM_TYPE) size[1]; -} -%typemap(freearg) - (DATA_TYPE** INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) -{ - if (array$argnum!=NULL) free(array$argnum); - if (object_array$argnum!=NULL) free(object_array$argnum); -} - /* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, * DATA_TYPE* INPLACE_ARRAY3) */ @@ -1788,195 +1259,6 @@ $4 = (DATA_TYPE*) array_data(array); } -/* Typemap suite for (DATA_TYPE INPLACE_ARRAY4[ANY][ANY][ANY][ANY]) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DATA_TYPE INPLACE_ARRAY4[ANY][ANY][ANY][ANY]) -{ - $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), - DATA_TYPECODE); -} -%typemap(in, - fragment="NumPy_Fragments") - (DATA_TYPE INPLACE_ARRAY4[ANY][ANY][ANY][ANY]) - (PyArrayObject* array=NULL) -{ - npy_intp size[4] = { $1_dim0, $1_dim1, $1_dim2 , $1_dim3 }; - array = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!array || !require_dimensions(array,4) || !require_size(array, size, 4) || - !require_contiguous(array) || !require_native(array)) SWIG_fail; - $1 = ($1_ltype) array_data(array); -} - -/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, - * DIM_TYPE DIM3, DIM_TYPE DIM4) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DATA_TYPE* INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) -{ - $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), - DATA_TYPECODE); -} -%typemap(in, - fragment="NumPy_Fragments") - (DATA_TYPE* INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) - (PyArrayObject* array=NULL) -{ - array = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!array || !require_dimensions(array,4) || !require_contiguous(array) || - !require_native(array)) SWIG_fail; - $1 = (DATA_TYPE*) array_data(array); - $2 = (DIM_TYPE) array_size(array,0); - $3 = (DIM_TYPE) array_size(array,1); - $4 = (DIM_TYPE) array_size(array,2); - $5 = (DIM_TYPE) array_size(array,3); -} - -/* Typemap suite for (DATA_TYPE** INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, - * DIM_TYPE DIM3, DIM_TYPE DIM4) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DATA_TYPE** INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) -{ - $1 = PySequence_Check($input); -} -%typemap(in, - fragment="NumPy_Fragments") - (DATA_TYPE** INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) - (DATA_TYPE** array=NULL, PyArrayObject** object_array=NULL) -{ - npy_intp size[3] = { -1, -1, -1 }; - PyArrayObject* temp_array; - Py_ssize_t i; - - /* length of the list */ - $2 = PyList_Size($input); - - /* the arrays */ - array = (DATA_TYPE **)malloc($2*sizeof(DATA_TYPE *)); - object_array = (PyArrayObject **)calloc($2,sizeof(PyArrayObject *)); - - if (array == NULL || object_array == NULL) - { - SWIG_fail; - } - - for (i=0; i<$2; i++) - { - temp_array = obj_to_array_no_conversion(PySequence_GetItem($input,i), DATA_TYPECODE); - - /* the new array must be stored so that it can be destroyed in freearg */ - object_array[i] = temp_array; - - if ( !temp_array || !require_dimensions(temp_array, 3) || - !require_contiguous(temp_array) || - !require_native(temp_array) || - !PyArray_EquivTypenums(array_type(temp_array), DATA_TYPECODE) - ) SWIG_fail; - - /* store the size of the first array in the list, then use that for comparison. */ - if (i == 0) - { - size[0] = array_size(temp_array,0); - size[1] = array_size(temp_array,1); - size[2] = array_size(temp_array,2); - } - - if (!require_size(temp_array, size, 3)) SWIG_fail; - - array[i] = (DATA_TYPE*) array_data(temp_array); - } - - $1 = (DATA_TYPE**) array; - $3 = (DIM_TYPE) size[0]; - $4 = (DIM_TYPE) size[1]; - $5 = (DIM_TYPE) size[2]; -} -%typemap(freearg) - (DATA_TYPE** INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) -{ - if (array$argnum!=NULL) free(array$argnum); - if (object_array$argnum!=NULL) free(object_array$argnum); -} - -/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, - * DATA_TYPE* INPLACE_ARRAY4) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* INPLACE_ARRAY4) -{ - $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), - DATA_TYPECODE); -} -%typemap(in, - fragment="NumPy_Fragments") - (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* INPLACE_ARRAY4) - (PyArrayObject* array=NULL) -{ - array = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!array || !require_dimensions(array,4) || !require_contiguous(array) - || !require_native(array)) SWIG_fail; - $1 = (DIM_TYPE) array_size(array,0); - $2 = (DIM_TYPE) array_size(array,1); - $3 = (DIM_TYPE) array_size(array,2); - $4 = (DIM_TYPE) array_size(array,3); - $5 = (DATA_TYPE*) array_data(array); -} - -/* Typemap suite for (DATA_TYPE* INPLACE_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, - * DIM_TYPE DIM3, DIM_TYPE DIM4) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DATA_TYPE* INPLACE_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) -{ - $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), - DATA_TYPECODE); -} -%typemap(in, - fragment="NumPy_Fragments") - (DATA_TYPE* INPLACE_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) - (PyArrayObject* array=NULL) -{ - array = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!array || !require_dimensions(array,4) || !require_contiguous(array) || - !require_native(array) || !require_fortran(array)) SWIG_fail; - $1 = (DATA_TYPE*) array_data(array); - $2 = (DIM_TYPE) array_size(array,0); - $3 = (DIM_TYPE) array_size(array,1); - $4 = (DIM_TYPE) array_size(array,2); - $5 = (DIM_TYPE) array_size(array,3); -} - -/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, - * DATA_TYPE* INPLACE_FARRAY4) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* INPLACE_FARRAY4) -{ - $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), - DATA_TYPECODE); -} -%typemap(in, - fragment="NumPy_Fragments") - (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* INPLACE_FARRAY4) - (PyArrayObject* array=NULL) -{ - array = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!array || !require_dimensions(array,4) || !require_contiguous(array) - || !require_native(array) || !require_fortran(array)) SWIG_fail; - $1 = (DIM_TYPE) array_size(array,0); - $2 = (DIM_TYPE) array_size(array,1); - $3 = (DIM_TYPE) array_size(array,2); - $4 = (DIM_TYPE) array_size(array,3); - $5 = (DATA_TYPE*) array_data(array); -} - /*************************/ /* Argout Array Typemaps */ /*************************/ @@ -1986,7 +1268,7 @@ %typemap(in,numinputs=0, fragment="NumPy_Backward_Compatibility,NumPy_Macros") (DATA_TYPE ARGOUT_ARRAY1[ANY]) - (PyObject* array = NULL) + (PyObject * array = NULL) { npy_intp dims[1] = { $1_dim0 }; array = PyArray_SimpleNew(1, dims, DATA_TYPECODE); @@ -1996,7 +1278,7 @@ %typemap(argout) (DATA_TYPE ARGOUT_ARRAY1[ANY]) { - $result = SWIG_Python_AppendOutput($result,(PyObject*)array$argnum); + $result = SWIG_Python_AppendOutput($result,array$argnum); } /* Typemap suite for (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) @@ -2004,7 +1286,7 @@ %typemap(in,numinputs=1, fragment="NumPy_Fragments") (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) - (PyObject* array = NULL) + (PyObject * array = NULL) { npy_intp dims[1]; if (!PyInt_Check($input)) @@ -2024,7 +1306,7 @@ %typemap(argout) (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) { - $result = SWIG_Python_AppendOutput($result,(PyObject*)array$argnum); + $result = SWIG_Python_AppendOutput($result,array$argnum); } /* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) @@ -2032,7 +1314,7 @@ %typemap(in,numinputs=1, fragment="NumPy_Fragments") (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) - (PyObject* array = NULL) + (PyObject * array = NULL) { npy_intp dims[1]; if (!PyInt_Check($input)) @@ -2052,7 +1334,7 @@ %typemap(argout) (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) { - $result = SWIG_Python_AppendOutput($result,(PyObject*)array$argnum); + $result = SWIG_Python_AppendOutput($result,array$argnum); } /* Typemap suite for (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) @@ -2060,7 +1342,7 @@ %typemap(in,numinputs=0, fragment="NumPy_Backward_Compatibility,NumPy_Macros") (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) - (PyObject* array = NULL) + (PyObject * array = NULL) { npy_intp dims[2] = { $1_dim0, $1_dim1 }; array = PyArray_SimpleNew(2, dims, DATA_TYPECODE); @@ -2070,7 +1352,7 @@ %typemap(argout) (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) { - $result = SWIG_Python_AppendOutput($result,(PyObject*)array$argnum); + $result = SWIG_Python_AppendOutput($result,array$argnum); } /* Typemap suite for (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) @@ -2078,7 +1360,7 @@ %typemap(in,numinputs=0, fragment="NumPy_Backward_Compatibility,NumPy_Macros") (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) - (PyObject* array = NULL) + (PyObject * array = NULL) { npy_intp dims[3] = { $1_dim0, $1_dim1, $1_dim2 }; array = PyArray_SimpleNew(3, dims, DATA_TYPECODE); @@ -2088,25 +1370,7 @@ %typemap(argout) (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) { - $result = SWIG_Python_AppendOutput($result,(PyObject*)array$argnum); -} - -/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY4[ANY][ANY][ANY][ANY]) - */ -%typemap(in,numinputs=0, - fragment="NumPy_Backward_Compatibility,NumPy_Macros") - (DATA_TYPE ARGOUT_ARRAY4[ANY][ANY][ANY][ANY]) - (PyObject* array = NULL) -{ - npy_intp dims[4] = { $1_dim0, $1_dim1, $1_dim2, $1_dim3 }; - array = PyArray_SimpleNew(4, dims, DATA_TYPECODE); - if (!array) SWIG_fail; - $1 = ($1_ltype) array_data(array); -} -%typemap(argout) - (DATA_TYPE ARGOUT_ARRAY4[ANY][ANY][ANY][ANY]) -{ - $result = SWIG_Python_AppendOutput($result,(PyObject*)array$argnum); + $result = SWIG_Python_AppendOutput($result,array$argnum); } /*****************************/ @@ -2117,7 +1381,7 @@ */ %typemap(in,numinputs=0) (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim_temp) + (DATA_TYPE* data_temp , DIM_TYPE dim_temp) { $1 = &data_temp; $2 = &dim_temp; @@ -2127,18 +1391,16 @@ (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1) { npy_intp dims[1] = { *$2 }; - PyObject* obj = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - + PyObject * array = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$1)); if (!array) SWIG_fail; - $result = SWIG_Python_AppendOutput($result,obj); + $result = SWIG_Python_AppendOutput($result,array); } /* Typemap suite for (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1) */ %typemap(in,numinputs=0) (DIM_TYPE* DIM1 , DATA_TYPE** ARGOUTVIEW_ARRAY1) - (DIM_TYPE dim_temp, DATA_TYPE* data_temp = NULL ) + (DIM_TYPE dim_temp, DATA_TYPE* data_temp ) { $1 = &dim_temp; $2 = &data_temp; @@ -2148,18 +1410,16 @@ (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1) { npy_intp dims[1] = { *$1 }; - PyObject* obj = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$2)); - PyArrayObject* array = (PyArrayObject*) obj; - + PyObject * array = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$2)); if (!array) SWIG_fail; - $result = SWIG_Python_AppendOutput($result,obj); + $result = SWIG_Python_AppendOutput($result,array); } /* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) */ %typemap(in,numinputs=0) (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp) + (DATA_TYPE* data_temp , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp) { $1 = &data_temp; $2 = &dim1_temp; @@ -2170,18 +1430,16 @@ (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) { npy_intp dims[2] = { *$2, *$3 }; - PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - + PyObject * array = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1)); if (!array) SWIG_fail; - $result = SWIG_Python_AppendOutput($result,obj); + $result = SWIG_Python_AppendOutput($result,array); } /* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2) */ %typemap(in,numinputs=0) (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DATA_TYPE** ARGOUTVIEW_ARRAY2) - (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DATA_TYPE* data_temp = NULL ) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DATA_TYPE* data_temp ) { $1 = &dim1_temp; $2 = &dim2_temp; @@ -2192,18 +1450,16 @@ (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2) { npy_intp dims[2] = { *$1, *$2 }; - PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3)); - PyArrayObject* array = (PyArrayObject*) obj; - + PyObject * array = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3)); if (!array) SWIG_fail; - $result = SWIG_Python_AppendOutput($result,obj); + $result = SWIG_Python_AppendOutput($result,array); } /* Typemap suite for (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) */ %typemap(in,numinputs=0) (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp) + (DATA_TYPE* data_temp , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp) { $1 = &data_temp; $2 = &dim1_temp; @@ -2214,9 +1470,8 @@ (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) { npy_intp dims[2] = { *$2, *$3 }; - PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - + PyObject * obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject * array = (PyArrayObject*) obj; if (!array || !require_fortran(array)) SWIG_fail; $result = SWIG_Python_AppendOutput($result,obj); } @@ -2225,7 +1480,7 @@ */ %typemap(in,numinputs=0) (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DATA_TYPE** ARGOUTVIEW_FARRAY2) - (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DATA_TYPE* data_temp = NULL ) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DATA_TYPE* data_temp ) { $1 = &dim1_temp; $2 = &dim2_temp; @@ -2236,9 +1491,8 @@ (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2) { npy_intp dims[2] = { *$1, *$2 }; - PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3)); - PyArrayObject* array = (PyArrayObject*) obj; - + PyObject * obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3)); + PyArrayObject * array = (PyArrayObject*) obj; if (!array || !require_fortran(array)) SWIG_fail; $result = SWIG_Python_AppendOutput($result,obj); } @@ -2247,8 +1501,8 @@ DIM_TYPE* DIM3) */ %typemap(in,numinputs=0) - (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp) + (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) + (DATA_TYPE* data_temp, DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp) { $1 = &data_temp; $2 = &dim1_temp; @@ -2260,11 +1514,9 @@ (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) { npy_intp dims[3] = { *$2, *$3, *$4 }; - PyObject* obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - + PyObject * array = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1)); if (!array) SWIG_fail; - $result = SWIG_Python_AppendOutput($result,obj); + $result = SWIG_Python_AppendOutput($result,array); } /* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, @@ -2272,7 +1524,7 @@ */ %typemap(in,numinputs=0) (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3) - (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp = NULL) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp) { $1 = &dim1_temp; $2 = &dim2_temp; @@ -2284,19 +1536,17 @@ (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3) { npy_intp dims[3] = { *$1, *$2, *$3 }; - PyObject* obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$4)); - PyArrayObject* array = (PyArrayObject*) obj; - + PyObject * array = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$3)); if (!array) SWIG_fail; - $result = SWIG_Python_AppendOutput($result,obj); + $result = SWIG_Python_AppendOutput($result,array); } /* Typemap suite for (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) */ %typemap(in,numinputs=0) - (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp) + (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) + (DATA_TYPE* data_temp, DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp) { $1 = &data_temp; $2 = &dim1_temp; @@ -2308,10 +1558,9 @@ (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) { npy_intp dims[3] = { *$2, *$3, *$4 }; - PyObject* obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array || !require_fortran(array)) SWIG_fail; + PyObject * obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject * array = (PyArrayObject*) obj; + if (!array || require_fortran(array)) SWIG_fail; $result = SWIG_Python_AppendOutput($result,obj); } @@ -2319,8 +1568,8 @@ DATA_TYPE** ARGOUTVIEW_FARRAY3) */ %typemap(in,numinputs=0) - (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DATA_TYPE** ARGOUTVIEW_FARRAY3) - (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp = NULL ) + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp) { $1 = &dim1_temp; $2 = &dim2_temp; @@ -2332,803 +1581,12 @@ (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3) { npy_intp dims[3] = { *$1, *$2, *$3 }; - PyObject* obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$4)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array || !require_fortran(array)) SWIG_fail; + PyObject * obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$3)); + PyArrayObject * array = (PyArrayObject*) obj; + if (!array || require_fortran(array)) SWIG_fail; $result = SWIG_Python_AppendOutput($result,obj); } -/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, - DIM_TYPE* DIM3, DIM_TYPE* DIM4) - */ -%typemap(in,numinputs=0) - (DATA_TYPE** ARGOUTVIEW_ARRAY4, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp) -{ - $1 = &data_temp; - $2 = &dim1_temp; - $3 = &dim2_temp; - $4 = &dim3_temp; - $5 = &dim4_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility") - (DATA_TYPE** ARGOUTVIEW_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) -{ - npy_intp dims[4] = { *$2, *$3, *$4 , *$5 }; - PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array) SWIG_fail; - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, - DATA_TYPE** ARGOUTVIEW_ARRAY4) - */ -%typemap(in,numinputs=0) - (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 , DATA_TYPE** ARGOUTVIEW_ARRAY4) - (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp, DATA_TYPE* data_temp = NULL ) -{ - $1 = &dim1_temp; - $2 = &dim2_temp; - $3 = &dim3_temp; - $4 = &dim4_temp; - $5 = &data_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility") - (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEW_ARRAY4) -{ - npy_intp dims[4] = { *$1, *$2, *$3 , *$4 }; - PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$5)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array) SWIG_fail; - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, - DIM_TYPE* DIM3, DIM_TYPE* DIM4) - */ -%typemap(in,numinputs=0) - (DATA_TYPE** ARGOUTVIEW_FARRAY4, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp) -{ - $1 = &data_temp; - $2 = &dim1_temp; - $3 = &dim2_temp; - $4 = &dim3_temp; - $5 = &dim4_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements") - (DATA_TYPE** ARGOUTVIEW_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) -{ - npy_intp dims[4] = { *$2, *$3, *$4 , *$5 }; - PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array || !require_fortran(array)) SWIG_fail; - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, - DATA_TYPE** ARGOUTVIEW_FARRAY4) - */ -%typemap(in,numinputs=0) - (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 , DATA_TYPE** ARGOUTVIEW_FARRAY4) - (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp, DATA_TYPE* data_temp = NULL ) -{ - $1 = &dim1_temp; - $2 = &dim2_temp; - $3 = &dim3_temp; - $4 = &dim4_temp; - $5 = &data_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements") - (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEW_FARRAY4) -{ - npy_intp dims[4] = { *$1, *$2, *$3 , *$4 }; - PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$5)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array || !require_fortran(array)) SWIG_fail; - $result = SWIG_Python_AppendOutput($result,obj); -} - -/*************************************/ -/* Managed Argoutview Array Typemaps */ -/*************************************/ - -/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_ARRAY1, DIM_TYPE* DIM1) - */ -%typemap(in,numinputs=0) - (DATA_TYPE** ARGOUTVIEWM_ARRAY1, DIM_TYPE* DIM1 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim_temp) -{ - $1 = &data_temp; - $2 = &dim_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Utilities") - (DATA_TYPE** ARGOUTVIEWM_ARRAY1, DIM_TYPE* DIM1) -{ - npy_intp dims[1] = { *$2 }; - PyObject* obj = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEWM_ARRAY1) - */ -%typemap(in,numinputs=0) - (DIM_TYPE* DIM1 , DATA_TYPE** ARGOUTVIEWM_ARRAY1) - (DIM_TYPE dim_temp, DATA_TYPE* data_temp = NULL ) -{ - $1 = &dim_temp; - $2 = &data_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Utilities") - (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEWM_ARRAY1) -{ - npy_intp dims[1] = { *$1 }; - PyObject* obj = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$2)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) - */ -%typemap(in,numinputs=0) - (DATA_TYPE** ARGOUTVIEWM_ARRAY2, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp) -{ - $1 = &data_temp; - $2 = &dim1_temp; - $3 = &dim2_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Utilities") - (DATA_TYPE** ARGOUTVIEWM_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) -{ - npy_intp dims[2] = { *$2, *$3 }; - PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEWM_ARRAY2) - */ -%typemap(in,numinputs=0) - (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DATA_TYPE** ARGOUTVIEWM_ARRAY2) - (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DATA_TYPE* data_temp = NULL ) -{ - $1 = &dim1_temp; - $2 = &dim2_temp; - $3 = &data_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Utilities") - (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEWM_ARRAY2) -{ - npy_intp dims[2] = { *$1, *$2 }; - PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) - */ -%typemap(in,numinputs=0) - (DATA_TYPE** ARGOUTVIEWM_FARRAY2, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp) -{ - $1 = &data_temp; - $2 = &dim1_temp; - $3 = &dim2_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") - (DATA_TYPE** ARGOUTVIEWM_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) -{ - npy_intp dims[2] = { *$2, *$3 }; - PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array || !require_fortran(array)) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEWM_FARRAY2) - */ -%typemap(in,numinputs=0) - (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DATA_TYPE** ARGOUTVIEWM_FARRAY2) - (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DATA_TYPE* data_temp = NULL ) -{ - $1 = &dim1_temp; - $2 = &dim2_temp; - $3 = &data_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") - (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEWM_FARRAY2) -{ - npy_intp dims[2] = { *$1, *$2 }; - PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array || !require_fortran(array)) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, - DIM_TYPE* DIM3) - */ -%typemap(in,numinputs=0) - (DATA_TYPE** ARGOUTVIEWM_ARRAY3, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp) -{ - $1 = &data_temp; - $2 = &dim1_temp; - $3 = &dim2_temp; - $4 = &dim3_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Utilities") - (DATA_TYPE** ARGOUTVIEWM_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) -{ - npy_intp dims[3] = { *$2, *$3, *$4 }; - PyObject* obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, - DATA_TYPE** ARGOUTVIEWM_ARRAY3) - */ -%typemap(in,numinputs=0) - (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DATA_TYPE** ARGOUTVIEWM_ARRAY3) - (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp = NULL ) -{ - $1 = &dim1_temp; - $2 = &dim2_temp; - $3 = &dim3_temp; - $4 = &data_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Utilities") - (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEWM_ARRAY3) -{ - npy_intp dims[3] = { *$1, *$2, *$3 }; - PyObject* obj= PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$4)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, - DIM_TYPE* DIM3) - */ -%typemap(in,numinputs=0) - (DATA_TYPE** ARGOUTVIEWM_FARRAY3, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp) -{ - $1 = &data_temp; - $2 = &dim1_temp; - $3 = &dim2_temp; - $4 = &dim3_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") - (DATA_TYPE** ARGOUTVIEWM_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) -{ - npy_intp dims[3] = { *$2, *$3, *$4 }; - PyObject* obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array || !require_fortran(array)) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, - DATA_TYPE** ARGOUTVIEWM_FARRAY3) - */ -%typemap(in,numinputs=0) - (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DATA_TYPE** ARGOUTVIEWM_FARRAY3) - (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp = NULL ) -{ - $1 = &dim1_temp; - $2 = &dim2_temp; - $3 = &dim3_temp; - $4 = &data_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") - (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEWM_FARRAY3) -{ - npy_intp dims[3] = { *$1, *$2, *$3 }; - PyObject* obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$4)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array || !require_fortran(array)) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, - DIM_TYPE* DIM3, DIM_TYPE* DIM4) - */ -%typemap(in,numinputs=0) - (DATA_TYPE** ARGOUTVIEWM_ARRAY4, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp) -{ - $1 = &data_temp; - $2 = &dim1_temp; - $3 = &dim2_temp; - $4 = &dim3_temp; - $5 = &dim4_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Utilities") - (DATA_TYPE** ARGOUTVIEWM_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) -{ - npy_intp dims[4] = { *$2, *$3, *$4 , *$5 }; - PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, - DATA_TYPE** ARGOUTVIEWM_ARRAY4) - */ -%typemap(in,numinputs=0) - (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 , DATA_TYPE** ARGOUTVIEWM_ARRAY4) - (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp, DATA_TYPE* data_temp = NULL ) -{ - $1 = &dim1_temp; - $2 = &dim2_temp; - $3 = &dim3_temp; - $4 = &dim4_temp; - $5 = &data_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Utilities") - (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEWM_ARRAY4) -{ - npy_intp dims[4] = { *$1, *$2, *$3 , *$4 }; - PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$5)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, - DIM_TYPE* DIM3, DIM_TYPE* DIM4) - */ -%typemap(in,numinputs=0) - (DATA_TYPE** ARGOUTVIEWM_FARRAY4, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp) -{ - $1 = &data_temp; - $2 = &dim1_temp; - $3 = &dim2_temp; - $4 = &dim3_temp; - $5 = &dim4_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") - (DATA_TYPE** ARGOUTVIEWM_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) -{ - npy_intp dims[4] = { *$2, *$3, *$4 , *$5 }; - PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array || !require_fortran(array)) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, - DATA_TYPE** ARGOUTVIEWM_FARRAY4) - */ -%typemap(in,numinputs=0) - (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 , DATA_TYPE** ARGOUTVIEWM_FARRAY4) - (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp, DATA_TYPE* data_temp = NULL ) -{ - $1 = &dim1_temp; - $2 = &dim2_temp; - $3 = &dim3_temp; - $4 = &dim4_temp; - $5 = &data_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") - (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEWM_FARRAY4) -{ - npy_intp dims[4] = { *$1, *$2, *$3 , *$4 }; - PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$5)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array || !require_fortran(array)) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, - DIM_TYPE* DIM3, DIM_TYPE* DIM4) - */ -%typemap(in,numinputs=0) - (DATA_TYPE** ARGOUTVIEWM_ARRAY4, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp) -{ - $1 = &data_temp; - $2 = &dim1_temp; - $3 = &dim2_temp; - $4 = &dim3_temp; - $5 = &dim4_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Utilities") - (DATA_TYPE** ARGOUTVIEWM_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) -{ - npy_intp dims[4] = { *$2, *$3, *$4 , *$5 }; - PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, - DATA_TYPE** ARGOUTVIEWM_ARRAY4) - */ -%typemap(in,numinputs=0) - (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 , DATA_TYPE** ARGOUTVIEWM_ARRAY4) - (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp, DATA_TYPE* data_temp = NULL ) -{ - $1 = &dim1_temp; - $2 = &dim2_temp; - $3 = &dim3_temp; - $4 = &dim4_temp; - $5 = &data_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Utilities") - (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEWM_ARRAY4) -{ - npy_intp dims[4] = { *$1, *$2, *$3 , *$4 }; - PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$5)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, - DIM_TYPE* DIM3, DIM_TYPE* DIM4) - */ -%typemap(in,numinputs=0) - (DATA_TYPE** ARGOUTVIEWM_FARRAY4, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 ) - (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp) -{ - $1 = &data_temp; - $2 = &dim1_temp; - $3 = &dim2_temp; - $4 = &dim3_temp; - $5 = &dim4_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") - (DATA_TYPE** ARGOUTVIEWM_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) -{ - npy_intp dims[4] = { *$2, *$3, *$4 , *$5 }; - PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$1)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array || !require_fortran(array)) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, - DATA_TYPE** ARGOUTVIEWM_FARRAY4) - */ -%typemap(in,numinputs=0) - (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 , DATA_TYPE** ARGOUTVIEWM_FARRAY4) - (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp, DATA_TYPE* data_temp = NULL ) -{ - $1 = &dim1_temp; - $2 = &dim2_temp; - $3 = &dim3_temp; - $4 = &dim4_temp; - $5 = &data_temp; -} -%typemap(argout, - fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") - (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEWM_FARRAY4) -{ - npy_intp dims[4] = { *$1, *$2, *$3 , *$4 }; - PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$5)); - PyArrayObject* array = (PyArrayObject*) obj; - - if (!array || !require_fortran(array)) SWIG_fail; - -%#ifdef SWIGPY_USE_CAPSULE - PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); -%#else - PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); -%#endif - -%#if NPY_API_VERSION < 0x00000007 - PyArray_BASE(array) = cap; -%#else - PyArray_SetBaseObject(array,cap); -%#endif - - $result = SWIG_Python_AppendOutput($result,obj); -} - -/**************************************/ -/* In-Place Array Typemap - flattened */ -/**************************************/ - -/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY_FLAT, DIM_TYPE DIM_FLAT) - */ -%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, - fragment="NumPy_Macros") - (DATA_TYPE* INPLACE_ARRAY_FLAT, DIM_TYPE DIM_FLAT) -{ - $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), - DATA_TYPECODE); -} -%typemap(in, - fragment="NumPy_Fragments") - (DATA_TYPE* INPLACE_ARRAY_FLAT, DIM_TYPE DIM_FLAT) - (PyArrayObject* array=NULL, int i=1) -{ - array = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!array || !require_c_or_f_contiguous(array) - || !require_native(array)) SWIG_fail; - $1 = (DATA_TYPE*) array_data(array); - $2 = 1; - for (i=0; i < array_numdims(array); ++i) $2 *= array_size(array,i); -} - %enddef /* %numpy_typemaps() macro */ /* *************************************************************** */ @@ -3147,15 +1605,6 @@ %numpy_typemaps(unsigned long long, NPY_ULONGLONG, int) %numpy_typemaps(float , NPY_FLOAT , int) %numpy_typemaps(double , NPY_DOUBLE , int) -%numpy_typemaps(int8_t , NPY_INT8 , int) -%numpy_typemaps(int16_t , NPY_INT16 , int) -%numpy_typemaps(int32_t , NPY_INT32 , int) -%numpy_typemaps(int64_t , NPY_INT64 , int) -%numpy_typemaps(uint8_t , NPY_UINT8 , int) -%numpy_typemaps(uint16_t , NPY_UINT16 , int) -%numpy_typemaps(uint32_t , NPY_UINT32 , int) -%numpy_typemaps(uint64_t , NPY_UINT64 , int) - /* *************************************************************** * The follow macro expansion does not work, because C++ bool is 4 @@ -3171,13 +1620,15 @@ * %numpy_typemaps(long double, NPY_LONGDOUBLE, int) */ -#ifdef __cplusplus - -%include - -%numpy_typemaps(std::complex, NPY_CFLOAT , int) -%numpy_typemaps(std::complex, NPY_CDOUBLE, int) - -#endif +/* *************************************************************** + * Swig complains about a syntax error for the following macro + * expansions: + * + * %numpy_typemaps(complex float, NPY_CFLOAT , int) + * + * %numpy_typemaps(complex double, NPY_CDOUBLE, int) + * + * %numpy_typemaps(complex long double, NPY_CLONGDOUBLE, int) + */ #endif /* SWIGPYTHON */ diff --git a/python/setup.py.autotools.in b/python/setup.py.autotools.in new file mode 100644 index 000000000..4b4b43f0f --- /dev/null +++ b/python/setup.py.autotools.in @@ -0,0 +1,86 @@ +#!/usr/bin/env python + +from distutils.core import setup, Extension +import os,sys + +attdict = dict( + sources = ['gribapi_swig_wrap.c','grib_interface.c'], + swig_opts = [], + include_dirs = ['.'], + library_dirs = ["%s/lib" % sys.prefix], + libraries = [], + extra_objects = [], + extra_link_args = [], # See GRIB-616 +) + +add_attribute = lambda **args: [list.append(attdict[key],value) for key,value in args.items()] + +# assumes build_dir is same as source_dir -- not true for cmake builds +build_dir = '@BUILD_DIR@' +add_attribute( + include_dirs = os.path.join(build_dir,'src'), + extra_objects = os.path.join(build_dir, 'src', '.libs', 'libeccodes.a') +) + +with_jasper = '@LIB_JASPER@' +if with_jasper: + jasper_dir = '@JASPER_DIR@' + if jasper_dir and jasper_dir != 'system': + add_attribute( + include_dirs = os.path.join(jasper_dir,'include'), + library_dirs = os.path.join(jasper_dir,'lib'), + extra_link_args = '-Wl,-rpath,' + os.path.join(jasper_dir,'lib') + ) + add_attribute(libraries = 'jasper') + +with_openjpeg = '@LIB_OPENJPEG@' +if with_openjpeg: + openjpeg_dir = '@OPENJPEG_DIR@' + if openjpeg_dir and openjpeg_dir != 'system': + add_attribute( + include_dirs = os.path.join(openjpeg_dir,'include'), + library_dirs = os.path.join(openjpeg_dir,'lib'), + extra_link_args = '-Wl,-rpath,' + os.path.join(openjpeg_dir,'lib') + ) + add_attribute(libraries = 'openjpeg') + +# assumes png is supplied by system paths -- may not be true +png = '@LIB_PNG@' +if png: + add_attribute(libraries = 'png') + + +with_aec = '@LIB_AEC@' +if with_aec: + aec_dir = '@AEC_DIR@' + if aec_dir and aec_dir != 'system': + add_attribute( + include_dirs = os.path.join(aec_dir,'include'), + library_dirs = os.path.join(aec_dir,'lib'), + extra_link_args = '-Wl,-rpath,' + os.path.join(aec_dir,'lib') + ) + add_attribute(libraries = 'aec') + + +data_handler = '@DATA_HANDLER@' +if data_handler == "numpy": + import numpy + # Obtain the numpy include directory. This logic works across numpy versions. + try: + numpy_include = numpy.get_include() + except AttributeError: + numpy_include = numpy.get_numpy_include() + + add_attribute( + include_dirs = numpy_include, + ) + +gribapi_module = Extension('_gribapi_swig',**attdict) + +setup (name = 'gribapi', + version = '0.1', + author = 'ECMWF', + description = """Grib API SWIG module""", + ext_modules = [gribapi_module], + py_modules = ['gribapi_swig','gribapi'], + ) diff --git a/python/swig_wrap_numpy.c b/python/swig_wrap_numpy.c index 18d6d0618..dd5d0510e 100644 --- a/python/swig_wrap_numpy.c +++ b/python/swig_wrap_numpy.c @@ -1,18 +1,14 @@ /* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). - * Version 3.0.12 - * - * This file is not intended to be easily readable and contains a number of + * Version 1.3.40 + * + * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make - * changes to this file unless you know what you are doing--modify the SWIG - * interface file instead. + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. * ----------------------------------------------------------------------------- */ - -#ifndef SWIGPYTHON #define SWIGPYTHON -#endif - #define SWIG_PYTHON_DIRECTOR_NO_VTABLE /* ----------------------------------------------------------------------------- @@ -46,28 +42,28 @@ #ifndef SWIGUNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define SWIGUNUSED __attribute__ ((__unused__)) +# define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif # elif defined(__ICC) -# define SWIGUNUSED __attribute__ ((__unused__)) +# define SWIGUNUSED __attribute__ ((__unused__)) # else -# define SWIGUNUSED +# define SWIGUNUSED # endif #endif #ifndef SWIG_MSC_UNSUPPRESS_4505 # if defined(_MSC_VER) # pragma warning(disable : 4505) /* unreferenced local function has been removed */ -# endif +# endif #endif #ifndef SWIGUNUSEDPARM # ifdef __cplusplus # define SWIGUNUSEDPARM(p) # else -# define SWIGUNUSEDPARM(p) p SWIGUNUSED +# define SWIGUNUSEDPARM(p) p SWIGUNUSED # endif #endif @@ -82,11 +78,9 @@ #endif /* exporting methods */ -#if defined(__GNUC__) -# if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -# ifndef GCC_HASCLASSVISIBILITY -# define GCC_HASCLASSVISIBILITY -# endif +#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# ifndef GCC_HASCLASSVISIBILITY +# define GCC_HASCLASSVISIBILITY # endif #endif @@ -112,7 +106,7 @@ # define SWIGSTDCALL __stdcall # else # define SWIGSTDCALL -# endif +# endif #endif /* Deal with Microsoft's attempt at deprecating C standard runtime functions */ @@ -125,29 +119,10 @@ # define _SCL_SECURE_NO_DEPRECATE #endif -/* Deal with Apple's deprecated 'AssertMacros.h' from Carbon-framework */ -#if defined(__APPLE__) && !defined(__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES) -# define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 -#endif - -/* Intel's compiler complains if a variable which was never initialised is - * cast to void, which is a common idiom which we use to indicate that we - * are aware a variable isn't used. So we just silence that warning. - * See: https://github.com/swig/swig/issues/192 for more discussion. - */ -#ifdef __INTEL_COMPILER -# pragma warning disable 592 -#endif -#if defined(_DEBUG) && defined(SWIG_PYTHON_INTERPRETER_NO_DEBUG) -/* Use debug wrappers with the Python release dll */ -# undef _DEBUG -# include -# define _DEBUG -#else -# include -#endif +/* Python.h has to appear first */ +#include /* ----------------------------------------------------------------------------- * swigrun.swg @@ -173,7 +148,7 @@ You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for creating a static or dynamic library from the SWIG runtime code. In 99.9% of the cases, SWIG just needs to declare them as 'static'. - + But only do this if strictly necessary, ie, if you have problems with your compiler or suchlike. */ @@ -199,16 +174,16 @@ #define SWIG_POINTER_OWN 0x1 -/* +/* Flags/methods for returning states. - - The SWIG conversion methods, as ConvertPtr, return an integer + + The SWIG conversion methods, as ConvertPtr, return and integer that tells if the conversion was successful or not. And if not, an error code can be returned (see swigerrors.swg for the codes). - + Use the following macros/flags to set or process the returning states. - + In old versions of SWIG, code such as the following was usually written: if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { @@ -241,23 +216,23 @@ } else { // fail code } - + I.e., now SWIG_ConvertPtr can return new objects and you can identify the case and take care of the deallocation. Of course that also requires SWIG_ConvertPtr to return new result values, such as - int SWIG_ConvertPtr(obj, ptr,...) { - if () { - if () { - *ptr = ; - return SWIG_NEWOBJ; - } else { - *ptr = ; - return SWIG_OLDOBJ; - } - } else { - return SWIG_BADOBJ; - } + int SWIG_ConvertPtr(obj, ptr,...) { + if () { + if () { + *ptr = ; + return SWIG_NEWOBJ; + } else { + *ptr = ; + return SWIG_OLDOBJ; + } + } else { + return SWIG_BADOBJ; + } } Of course, returning the plain '0(success)/-1(fail)' still works, but you can be @@ -271,17 +246,17 @@ int fooi(int); and you call - + food(1) // cast rank '1' (1 -> 1.0) fooi(1) // cast rank '0' just use the SWIG_AddCast()/SWIG_CheckState() */ -#define SWIG_OK (0) +#define SWIG_OK (0) #define SWIG_ERROR (-1) #define SWIG_IsOK(r) (r >= 0) -#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) +#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) /* The CastRankLimit says how many bits are used for the cast rank */ #define SWIG_CASTRANKLIMIT (1 << 8) @@ -312,14 +287,14 @@ # endif # define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) # define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) -SWIGINTERNINLINE int SWIG_AddCast(int r) { +SWIGINTERNINLINE int SWIG_AddCast(int r) { return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; } -SWIGINTERNINLINE int SWIG_CheckState(int r) { - return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; +SWIGINTERNINLINE int SWIG_CheckState(int r) { + return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; } #else /* no cast-rank mode */ -# define SWIG_AddCast(r) (r) +# define SWIG_AddCast # define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) #endif @@ -363,7 +338,7 @@ typedef struct swig_module_info { void *clientdata; /* Language specific module data */ } swig_module_info; -/* +/* Compare two type names skipping the space characters, therefore "char*" == "char *" and "Class" == "Class", etc. @@ -383,18 +358,18 @@ SWIG_TypeNameComp(const char *f1, const char *l1, /* Check type equivalence in a name list like ||... - Return 0 if equal, -1 if nb < tb, 1 if nb > tb + Return 0 if not equal, 1 if equal */ SWIGRUNTIME int -SWIG_TypeCmp(const char *nb, const char *tb) { - int equiv = 1; +SWIG_TypeEquiv(const char *nb, const char *tb) { + int equiv = 0; const char* te = tb + strlen(tb); const char* ne = nb; - while (equiv != 0 && *ne) { + while (!equiv && *ne) { for (nb = ne; *ne; ++ne) { if (*ne == '|') break; } - equiv = SWIG_TypeNameComp(nb, ne, tb, te); + equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; if (*ne) ++ne; } return equiv; @@ -402,13 +377,24 @@ SWIG_TypeCmp(const char *nb, const char *tb) { /* Check type equivalence in a name list like ||... - Return 0 if not equal, 1 if equal + Return 0 if equal, -1 if nb < tb, 1 if nb > tb */ SWIGRUNTIME int -SWIG_TypeEquiv(const char *nb, const char *tb) { - return SWIG_TypeCmp(nb, tb) == 0 ? 1 : 0; +SWIG_TypeCompare(const char *nb, const char *tb) { + int equiv = 0; + const char* te = tb + strlen(tb); + const char* ne = nb; + while (!equiv && *ne) { + for (nb = ne; *ne; ++ne) { + if (*ne == '|') break; + } + equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; + if (*ne) ++ne; + } + return equiv; } + /* Check the typename */ @@ -436,7 +422,7 @@ SWIG_TypeCheck(const char *c, swig_type_info *ty) { return 0; } -/* +/* Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison */ SWIGRUNTIME swig_cast_info * @@ -471,7 +457,7 @@ SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); } -/* +/* Dynamic pointer casting. Down an inheritance hierarchy */ SWIGRUNTIME swig_type_info * @@ -515,7 +501,7 @@ SWIG_TypePrettyName(const swig_type_info *type) { return type->name; } -/* +/* Set the clientdata field for a type */ SWIGRUNTIME void @@ -523,14 +509,14 @@ SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { swig_cast_info *cast = ti->cast; /* if (ti->clientdata == clientdata) return; */ ti->clientdata = clientdata; - + while (cast) { if (!cast->converter) { swig_type_info *tc = cast->type; if (!tc->clientdata) { SWIG_TypeClientData(tc, clientdata); } - } + } cast = cast->next; } } @@ -539,31 +525,31 @@ SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { SWIG_TypeClientData(ti, clientdata); ti->owndata = 1; } - + /* Search for a swig_type_info structure only by mangled name Search is a O(log #types) - - We start searching at module start, and finish searching when start == end. + + We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * -SWIG_MangledTypeQueryModule(swig_module_info *start, - swig_module_info *end, +SWIG_MangledTypeQueryModule(swig_module_info *start, + swig_module_info *end, const char *name) { swig_module_info *iter = start; do { if (iter->size) { - size_t l = 0; - size_t r = iter->size - 1; + register size_t l = 0; + register size_t r = iter->size - 1; do { /* since l+r >= 0, we can (>> 1) instead (/ 2) */ - size_t i = (l + r) >> 1; + register size_t i = (l + r) >> 1; const char *iname = iter->types[i]->name; if (iname) { - int compare = strcmp(name, iname); - if (compare == 0) { + register int compare = strcmp(name, iname); + if (compare == 0) { return iter->types[i]; } else if (compare < 0) { if (i) { @@ -588,14 +574,14 @@ SWIG_MangledTypeQueryModule(swig_module_info *start, Search for a swig_type_info structure for either a mangled name or a human readable name. It first searches the mangled names of the types, which is a O(log #types) If a type is not found it then searches the human readable names, which is O(#types). - - We start searching at module start, and finish searching when start == end. + + We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * -SWIG_TypeQueryModule(swig_module_info *start, - swig_module_info *end, +SWIG_TypeQueryModule(swig_module_info *start, + swig_module_info *end, const char *name) { /* STEP 1: Search the name field using binary search */ swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); @@ -606,7 +592,7 @@ SWIG_TypeQueryModule(swig_module_info *start, of the str field (the human readable name) */ swig_module_info *iter = start; do { - size_t i = 0; + register size_t i = 0; for (; i < iter->size; ++i) { if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) return iter->types[i]; @@ -614,56 +600,56 @@ SWIG_TypeQueryModule(swig_module_info *start, iter = iter->next; } while (iter != end); } - + /* neither found a match */ return 0; } -/* +/* Pack binary data into a string */ SWIGRUNTIME char * SWIG_PackData(char *c, void *ptr, size_t sz) { static const char hex[17] = "0123456789abcdef"; - const unsigned char *u = (unsigned char *) ptr; - const unsigned char *eu = u + sz; + register const unsigned char *u = (unsigned char *) ptr; + register const unsigned char *eu = u + sz; for (; u != eu; ++u) { - unsigned char uu = *u; + register unsigned char uu = *u; *(c++) = hex[(uu & 0xf0) >> 4]; *(c++) = hex[uu & 0xf]; } return c; } -/* +/* Unpack binary data from a string */ SWIGRUNTIME const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) { - unsigned char *u = (unsigned char *) ptr; - const unsigned char *eu = u + sz; + register unsigned char *u = (unsigned char *) ptr; + register const unsigned char *eu = u + sz; for (; u != eu; ++u) { - char d = *(c++); - unsigned char uu; + register char d = *(c++); + register unsigned char uu; if ((d >= '0') && (d <= '9')) - uu = (unsigned char)((d - '0') << 4); + uu = ((d - '0') << 4); else if ((d >= 'a') && (d <= 'f')) - uu = (unsigned char)((d - ('a'-10)) << 4); - else + uu = ((d - ('a'-10)) << 4); + else return (char *) 0; d = *(c++); if ((d >= '0') && (d <= '9')) - uu |= (unsigned char)(d - '0'); + uu |= (d - '0'); else if ((d >= 'a') && (d <= 'f')) - uu |= (unsigned char)(d - ('a'-10)); - else + uu |= (d - ('a'-10)); + else return (char *) 0; *u = uu; } return c; } -/* +/* Pack 'void *' into a string buffer. */ SWIGRUNTIME char * @@ -723,18 +709,18 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { #endif /* Errors in SWIG */ -#define SWIG_UnknownError -1 -#define SWIG_IOError -2 -#define SWIG_RuntimeError -3 -#define SWIG_IndexError -4 -#define SWIG_TypeError -5 -#define SWIG_DivisionByZero -6 -#define SWIG_OverflowError -7 -#define SWIG_SyntaxError -8 -#define SWIG_ValueError -9 +#define SWIG_UnknownError -1 +#define SWIG_IOError -2 +#define SWIG_RuntimeError -3 +#define SWIG_IndexError -4 +#define SWIG_TypeError -5 +#define SWIG_DivisionByZero -6 +#define SWIG_OverflowError -7 +#define SWIG_SyntaxError -8 +#define SWIG_ValueError -9 #define SWIG_SystemError -10 #define SWIG_AttributeError -11 -#define SWIG_MemoryError -12 +#define SWIG_MemoryError -12 #define SWIG_NullReferenceError -13 @@ -746,16 +732,7 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { #define PyInt_Check(x) PyLong_Check(x) #define PyInt_AsLong(x) PyLong_AsLong(x) #define PyInt_FromLong(x) PyLong_FromLong(x) -#define PyInt_FromSize_t(x) PyLong_FromSize_t(x) -#define PyString_Check(name) PyBytes_Check(name) -#define PyString_FromString(x) PyUnicode_FromString(x) #define PyString_Format(fmt, args) PyUnicode_Format(fmt, args) -#define PyString_AsString(str) PyBytes_AsString(str) -#define PyString_Size(str) PyBytes_Size(str) -#define PyString_InternFromString(key) PyUnicode_InternFromString(key) -#define Py_TPFLAGS_HAVE_CLASS Py_TPFLAGS_BASETYPE -#define PyString_AS_STRING(x) PyUnicode_AS_STRING(x) -#define _PyLong_FromSsize_t(x) PyLong_FromSsize_t(x) #endif @@ -838,6 +815,10 @@ PyString_FromFormat(const char *fmt, ...) { } #endif +/* Add PyObject_Del for old Pythons */ +#if PY_VERSION_HEX < 0x01060000 +# define PyObject_Del(op) PyMem_DEL((op)) +#endif #ifndef PyObject_DEL # define PyObject_DEL PyObject_Del #endif @@ -891,68 +872,6 @@ PyObject *PyBool_FromLong(long ok) typedef int Py_ssize_t; # define PY_SSIZE_T_MAX INT_MAX # define PY_SSIZE_T_MIN INT_MIN -typedef inquiry lenfunc; -typedef intargfunc ssizeargfunc; -typedef intintargfunc ssizessizeargfunc; -typedef intobjargproc ssizeobjargproc; -typedef intintobjargproc ssizessizeobjargproc; -typedef getreadbufferproc readbufferproc; -typedef getwritebufferproc writebufferproc; -typedef getsegcountproc segcountproc; -typedef getcharbufferproc charbufferproc; -static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc)) -{ - long result = 0; - PyObject *i = PyNumber_Int(x); - if (i) { - result = PyInt_AsLong(i); - Py_DECREF(i); - } - return result; -} -#endif - -#if PY_VERSION_HEX < 0x02050000 -#define PyInt_FromSize_t(x) PyInt_FromLong((long)x) -#endif - -#if PY_VERSION_HEX < 0x02040000 -#define Py_VISIT(op) \ - do { \ - if (op) { \ - int vret = visit((op), arg); \ - if (vret) \ - return vret; \ - } \ - } while (0) -#endif - -#if PY_VERSION_HEX < 0x02030000 -typedef struct { - PyTypeObject type; - PyNumberMethods as_number; - PyMappingMethods as_mapping; - PySequenceMethods as_sequence; - PyBufferProcs as_buffer; - PyObject *name, *slots; -} PyHeapTypeObject; -#endif - -#if PY_VERSION_HEX < 0x02030000 -typedef destructor freefunc; -#endif - -#if ((PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 6) || \ - (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION > 0) || \ - (PY_MAJOR_VERSION > 3)) -# define SWIGPY_USE_CAPSULE -# define SWIGPY_CAPSULE_NAME ((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION ".type_pointer_capsule" SWIG_TYPE_TABLE_NAME) -#endif - -#if PY_VERSION_HEX < 0x03020000 -#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type) -#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name) -#define Py_hash_t long #endif /* ----------------------------------------------------------------------------- @@ -1099,6 +1018,9 @@ SWIG_Python_AddErrorMsg(const char* mesg) #ifdef __cplusplus extern "C" { +#if 0 +} /* cc-mode */ +#endif #endif /* ----------------------------------------------------------------------------- @@ -1124,24 +1046,27 @@ typedef struct swig_const_info { * Wrapper of PyInstanceMethod_New() used in Python 3 * It is exported to the generated module, used for -fastproxy * ----------------------------------------------------------------------------- */ +SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *self, PyObject *func) +{ #if PY_VERSION_HEX >= 0x03000000 -SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), PyObject *func) -{ return PyInstanceMethod_New(func); -} #else -SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), PyObject *SWIGUNUSEDPARM(func)) -{ return NULL; -} #endif +} #ifdef __cplusplus +#if 0 +{ /* cc-mode */ +#endif } #endif /* ----------------------------------------------------------------------------- + * See the LICENSE file for information on copyright, usage and redistribution + * of SWIG, and the README file for authors - http://www.swig.org/release.html. + * * pyrun.swg * * This file contains the runtime support for Python modules @@ -1156,15 +1081,7 @@ SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), #define SWIG_Python_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, 0) #define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtr(obj, pptr, type, flags) #define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, own) - -#ifdef SWIGPYTHON_BUILTIN -#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(self, ptr, type, flags) -#else -#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(NULL, ptr, type, flags) -#endif - -#define SWIG_InternalNewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(NULL, ptr, type, flags) - +#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(ptr, type, flags) #define SWIG_CheckImplicit(ty) SWIG_Python_CheckImplicit(ty) #define SWIG_AcquirePtr(ptr, src) SWIG_Python_AcquirePtr(ptr, src) #define swig_owntype int @@ -1179,7 +1096,7 @@ SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), /* for C or C++ function pointers */ #define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_Python_ConvertFunctionPtr(obj, pptr, type) -#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_Python_NewPointerObj(NULL, ptr, type, 0) +#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_Python_NewPointerObj(ptr, type, 0) /* for C++ member pointers, ie, member methods */ #define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) @@ -1188,7 +1105,7 @@ SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), /* Runtime API */ -#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata) +#define SWIG_GetModule(clientdata) SWIG_Python_GetModule() #define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer) #define SWIG_NewClientData(obj) SwigPyClientData_New(obj) @@ -1214,7 +1131,7 @@ SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) { SWIGINTERN void SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) { SWIG_PYTHON_THREAD_BEGIN_BLOCK; - PyErr_SetString(errtype, msg); + PyErr_SetString(errtype, (char *) msg); SWIG_PYTHON_THREAD_END_BLOCK; } @@ -1222,41 +1139,12 @@ SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) { /* Set a constant value */ -#if defined(SWIGPYTHON_BUILTIN) - -SWIGINTERN void -SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) { - PyObject *s = PyString_InternFromString(key); - PyList_Append(seq, s); - Py_DECREF(s); -} - -SWIGINTERN void -SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) { -#if PY_VERSION_HEX < 0x02030000 - PyDict_SetItemString(d, (char *)name, obj); -#else - PyDict_SetItemString(d, name, obj); -#endif - Py_DECREF(obj); - if (public_interface) - SwigPyBuiltin_AddPublicSymbol(public_interface, name); -} - -#else - SWIGINTERN void SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) { -#if PY_VERSION_HEX < 0x02030000 - PyDict_SetItemString(d, (char *)name, obj); -#else - PyDict_SetItemString(d, name, obj); -#endif + PyDict_SetItemString(d, (char*) name, obj); Py_DECREF(obj); } -#endif - /* Append a value to the result obj */ SWIGINTERN PyObject* @@ -1304,7 +1192,7 @@ SWIG_Python_AppendOutput(PyObject* result, PyObject* obj) { /* Unpack the argument tuple */ -SWIGINTERN Py_ssize_t +SWIGINTERN int SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs) { if (!args) { @@ -1317,18 +1205,10 @@ SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssi } } if (!PyTuple_Check(args)) { - if (min <= 1 && max >= 1) { - Py_ssize_t i; - objs[0] = args; - for (i = 1; i < max; ++i) { - objs[i] = 0; - } - return 2; - } PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple"); return 0; } else { - Py_ssize_t l = PyTuple_GET_SIZE(args); + register Py_ssize_t l = PyTuple_GET_SIZE(args); if (l < min) { PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", name, (min == max ? "" : "at least "), (int)min, (int)l); @@ -1338,7 +1218,7 @@ SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssi name, (min == max ? "" : "at most "), (int)max, (int)l); return 0; } else { - Py_ssize_t i; + register int i; for (i = 0; i < l; ++i) { objs[i] = PyTuple_GET_ITEM(args, i); } @@ -1377,11 +1257,11 @@ SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssi #define SWIG_POINTER_IMPLICIT_CONV (SWIG_POINTER_DISOWN << 1) -#define SWIG_BUILTIN_TP_INIT (SWIG_POINTER_OWN << 2) -#define SWIG_BUILTIN_INIT (SWIG_BUILTIN_TP_INIT | SWIG_POINTER_OWN) - #ifdef __cplusplus extern "C" { +#if 0 +} /* cc-mode */ +#endif #endif /* How to access Py_None */ @@ -1432,7 +1312,6 @@ typedef struct { PyObject *destroy; int delargs; int implicitconv; - PyTypeObject *pytype; } SwigPyClientData; SWIGRUNTIMEINLINE int @@ -1499,13 +1378,13 @@ SwigPyClientData_New(PyObject* obj) data->delargs = 0; } data->implicitconv = 0; - data->pytype = 0; return data; } } SWIGRUNTIME void -SwigPyClientData_Del(SwigPyClientData *data) { +SwigPyClientData_Del(SwigPyClientData* data) +{ Py_XDECREF(data->newraw); Py_XDECREF(data->newargs); Py_XDECREF(data->destroy); @@ -1519,28 +1398,8 @@ typedef struct { swig_type_info *ty; int own; PyObject *next; -#ifdef SWIGPYTHON_BUILTIN - PyObject *dict; -#endif } SwigPyObject; - -#ifdef SWIGPYTHON_BUILTIN - -SWIGRUNTIME PyObject * -SwigPyObject_get___dict__(PyObject *v, PyObject *SWIGUNUSEDPARM(args)) -{ - SwigPyObject *sobj = (SwigPyObject *)v; - - if (!sobj->dict) - sobj->dict = PyDict_New(); - - Py_INCREF(sobj->dict); - return sobj->dict; -} - -#endif - SWIGRUNTIME PyObject * SwigPyObject_long(SwigPyObject *v) { @@ -1589,25 +1448,53 @@ SwigPyObject_repr(SwigPyObject *v, PyObject *args) #endif { const char *name = SWIG_TypePrettyName(v->ty); - PyObject *repr = SWIG_Python_str_FromFormat("", (name ? name : "unknown"), (void *)v); + PyObject *repr = SWIG_Python_str_FromFormat("", name, v); if (v->next) { -# ifdef METH_NOARGS +#ifdef METH_NOARGS PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next); -# else +#else PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next, args); -# endif -# if PY_VERSION_HEX >= 0x03000000 +#endif +#if PY_VERSION_HEX >= 0x03000000 PyObject *joined = PyUnicode_Concat(repr, nrep); Py_DecRef(repr); Py_DecRef(nrep); repr = joined; -# else +#else PyString_ConcatAndDel(&repr,nrep); -# endif +#endif } return repr; } +SWIGRUNTIME int +SwigPyObject_print(SwigPyObject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) +{ + char *str; +#ifdef METH_NOARGS + PyObject *repr = SwigPyObject_repr(v); +#else + PyObject *repr = SwigPyObject_repr(v, NULL); +#endif + if (repr) { + str = SWIG_Python_str_AsChar(repr); + fputs(str, fp); + SWIG_Python_str_DelForPy3(str); + Py_DECREF(repr); + return 0; + } else { + return 1; + } +} + +SWIGRUNTIME PyObject * +SwigPyObject_str(SwigPyObject *v) +{ + char result[SWIG_BUFFER_SIZE]; + return SWIG_PackVoidPtr(result, v->ptr, v->ty->name, sizeof(result)) ? + SWIG_Python_str_FromChar(result) : 0; +} + SWIGRUNTIME int SwigPyObject_compare(SwigPyObject *v, SwigPyObject *w) { @@ -1625,43 +1512,27 @@ SwigPyObject_richcompare(SwigPyObject *v, SwigPyObject *w, int op) Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } - res = PyBool_FromLong( (SwigPyObject_compare(v, w)==0) == (op == Py_EQ) ? 1 : 0); + if( (SwigPyObject_compare(v, w)==0) == (op == Py_EQ) ) + res = Py_True; + else + res = Py_False; + Py_INCREF(res); return res; } -SWIGRUNTIME PyTypeObject* SwigPyObject_TypeOnce(void); +SWIGRUNTIME PyTypeObject* _PySwigObject_type(void); -#ifdef SWIGPYTHON_BUILTIN -static swig_type_info *SwigPyObject_stype = 0; SWIGRUNTIME PyTypeObject* SwigPyObject_type(void) { - SwigPyClientData *cd; - assert(SwigPyObject_stype); - cd = (SwigPyClientData*) SwigPyObject_stype->clientdata; - assert(cd); - assert(cd->pytype); - return cd->pytype; -} -#else -SWIGRUNTIME PyTypeObject* -SwigPyObject_type(void) { - static PyTypeObject *SWIG_STATIC_POINTER(type) = SwigPyObject_TypeOnce(); + static PyTypeObject *SWIG_STATIC_POINTER(type) = _PySwigObject_type(); return type; } -#endif SWIGRUNTIMEINLINE int SwigPyObject_Check(PyObject *op) { -#ifdef SWIGPYTHON_BUILTIN - PyTypeObject *target_tp = SwigPyObject_type(); - if (PyType_IsSubtype(op->ob_type, target_tp)) - return 1; - return (strcmp(op->ob_type->tp_name, "SwigPyObject") == 0); -#else return (Py_TYPE(op) == SwigPyObject_type()) || (strcmp(Py_TYPE(op)->tp_name,"SwigPyObject") == 0); -#endif } SWIGRUNTIME PyObject * @@ -1679,32 +1550,16 @@ SwigPyObject_dealloc(PyObject *v) if (destroy) { /* destroy is always a VARARGS method */ PyObject *res; - - /* PyObject_CallFunction() has the potential to silently drop - the active active exception. In cases of unnamed temporary - variable or where we just finished iterating over a generator - StopIteration will be active right now, and this needs to - remain true upon return from SwigPyObject_dealloc. So save - and restore. */ - - PyObject *val = NULL, *type = NULL, *tb = NULL; - PyErr_Fetch(&val, &type, &tb); - if (data->delargs) { - /* we need to create a temporary object to carry the destroy operation */ - PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0); - res = SWIG_Python_CallFunctor(destroy, tmp); - Py_DECREF(tmp); + /* we need to create a temporary object to carry the destroy operation */ + PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0); + res = SWIG_Python_CallFunctor(destroy, tmp); + Py_DECREF(tmp); } else { - PyCFunction meth = PyCFunction_GET_FUNCTION(destroy); - PyObject *mself = PyCFunction_GET_SELF(destroy); - res = ((*meth)(mself, v)); + PyCFunction meth = PyCFunction_GET_FUNCTION(destroy); + PyObject *mself = PyCFunction_GET_SELF(destroy); + res = ((*meth)(mself, v)); } - if (!res) - PyErr_WriteUnraisable(destroy); - - PyErr_Restore(val, type, tb); - Py_XDECREF(res); } #if !defined(SWIG_PYTHON_SILENT_MEMLEAK) @@ -1728,7 +1583,6 @@ SwigPyObject_append(PyObject* v, PyObject* next) next = tmp; #endif if (!SwigPyObject_Check(next)) { - PyErr_SetString(PyExc_TypeError, "Attempt to append a non SwigPyObject"); return NULL; } sobj->next = next; @@ -1782,10 +1636,8 @@ SwigPyObject_own(PyObject *v, PyObject *args) PyObject *val = 0; #if (PY_VERSION_HEX < 0x02020000) if (!PyArg_ParseTuple(args,(char *)"|O:own",&val)) -#elif (PY_VERSION_HEX < 0x02050000) - if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val)) #else - if (!PyArg_UnpackTuple(args, "own", 0, 1, &val)) + if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val)) #endif { return NULL; @@ -1817,7 +1669,7 @@ SwigPyObject_own(PyObject *v, PyObject *args) static PyMethodDef swigobject_methods[] = { {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_NOARGS, (char *)"releases ownership of the pointer"}, - {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_NOARGS, (char *)"acquires ownership of the pointer"}, + {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_NOARGS, (char *)"aquires ownership of the pointer"}, {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, {(char *)"append", (PyCFunction)SwigPyObject_append, METH_O, (char *)"appends another 'this' object"}, {(char *)"next", (PyCFunction)SwigPyObject_next, METH_NOARGS, (char *)"returns the next 'this' object"}, @@ -1828,7 +1680,7 @@ swigobject_methods[] = { static PyMethodDef swigobject_methods[] = { {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_VARARGS, (char *)"releases ownership of the pointer"}, - {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_VARARGS, (char *)"acquires ownership of the pointer"}, + {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_VARARGS, (char *)"aquires ownership of the pointer"}, {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, {(char *)"append", (PyCFunction)SwigPyObject_append, METH_VARARGS, (char *)"appends another 'this' object"}, {(char *)"next", (PyCFunction)SwigPyObject_next, METH_VARARGS, (char *)"returns the next 'this' object"}, @@ -1846,9 +1698,9 @@ SwigPyObject_getattr(SwigPyObject *sobj,char *name) #endif SWIGRUNTIME PyTypeObject* -SwigPyObject_TypeOnce(void) { +_PySwigObject_type(void) { static char swigobject_doc[] = "Swig object carries a C/C++ instance pointer"; - + static PyNumberMethods SwigPyObject_as_number = { (binaryfunc)0, /*nb_add*/ (binaryfunc)0, /*nb_subtract*/ @@ -1884,9 +1736,7 @@ SwigPyObject_TypeOnce(void) { (unaryfunc)SwigPyObject_oct, /*nb_oct*/ (unaryfunc)SwigPyObject_hex, /*nb_hex*/ #endif -#if PY_VERSION_HEX >= 0x03050000 /* 3.5 */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_matrix_multiply */ -#elif PY_VERSION_HEX >= 0x03000000 /* 3.0 */ +#if PY_VERSION_HEX >= 0x03000000 /* 3.0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index, nb_inplace_divide removed */ #elif PY_VERSION_HEX >= 0x02050000 /* 2.5.0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index */ @@ -1897,97 +1747,85 @@ SwigPyObject_TypeOnce(void) { #endif }; - static PyTypeObject swigpyobject_type; + static PyTypeObject swigpyobject_type; static int type_init = 0; if (!type_init) { - const PyTypeObject tmp = { + const PyTypeObject tmp + = { + /* PyObject header changed in Python 3 */ #if PY_VERSION_HEX >= 0x03000000 - PyVarObject_HEAD_INIT(NULL, 0) -#else - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ + PyVarObject_HEAD_INIT(&PyType_Type, 0) +#else + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ #endif - (char *)"SwigPyObject", /* tp_name */ - sizeof(SwigPyObject), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor)SwigPyObject_dealloc, /* tp_dealloc */ - 0, /* tp_print */ + (char *)"SwigPyObject", /* tp_name */ + sizeof(SwigPyObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)SwigPyObject_dealloc, /* tp_dealloc */ + (printfunc)SwigPyObject_print, /* tp_print */ #if PY_VERSION_HEX < 0x02020000 - (getattrfunc)SwigPyObject_getattr, /* tp_getattr */ + (getattrfunc)SwigPyObject_getattr, /* tp_getattr */ #else - (getattrfunc)0, /* tp_getattr */ + (getattrfunc)0, /* tp_getattr */ #endif - (setattrfunc)0, /* tp_setattr */ + (setattrfunc)0, /* tp_setattr */ #if PY_VERSION_HEX >= 0x03000000 - 0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */ + 0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */ #else - (cmpfunc)SwigPyObject_compare, /* tp_compare */ + (cmpfunc)SwigPyObject_compare, /* tp_compare */ #endif - (reprfunc)SwigPyObject_repr, /* tp_repr */ - &SwigPyObject_as_number, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - (hashfunc)0, /* tp_hash */ - (ternaryfunc)0, /* tp_call */ - 0, /* tp_str */ - PyObject_GenericGetAttr, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - swigobject_doc, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - (richcmpfunc)SwigPyObject_richcompare,/* tp_richcompare */ - 0, /* tp_weaklistoffset */ + (reprfunc)SwigPyObject_repr, /* tp_repr */ + &SwigPyObject_as_number, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + (reprfunc)SwigPyObject_str, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + swigobject_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + (richcmpfunc)SwigPyObject_richcompare, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ #if PY_VERSION_HEX >= 0x02020000 - 0, /* tp_iter */ - 0, /* tp_iternext */ - swigobject_methods, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - 0, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + swigobject_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ #endif #if PY_VERSION_HEX >= 0x02030000 - 0, /* tp_del */ -#endif -#if PY_VERSION_HEX >= 0x02060000 - 0, /* tp_version_tag */ -#endif -#if PY_VERSION_HEX >= 0x03040000 - 0, /* tp_finalize */ + 0, /* tp_del */ #endif #ifdef COUNT_ALLOCS - 0, /* tp_allocs */ - 0, /* tp_frees */ - 0, /* tp_maxalloc */ -#if PY_VERSION_HEX >= 0x02050000 - 0, /* tp_prev */ + 0,0,0,0 /* tp_alloc -> tp_next */ #endif - 0 /* tp_next */ -#endif - }; + }; swigpyobject_type = tmp; - type_init = 1; -#if PY_VERSION_HEX < 0x02020000 + /* for Python 3 we already assigned ob_type in PyVarObject_HEAD_INIT() */ +#if PY_VERSION_HEX < 0x03000000 swigpyobject_type.ob_type = &PyType_Type; -#else - if (PyType_Ready(&swigpyobject_type) < 0) - return NULL; #endif + type_init = 1; } return &swigpyobject_type; } @@ -2061,17 +1899,17 @@ SwigPyPacked_compare(SwigPyPacked *v, SwigPyPacked *w) return s ? s : strncmp((char *)v->pack, (char *)w->pack, 2*v->size); } -SWIGRUNTIME PyTypeObject* SwigPyPacked_TypeOnce(void); +SWIGRUNTIME PyTypeObject* _PySwigPacked_type(void); SWIGRUNTIME PyTypeObject* SwigPyPacked_type(void) { - static PyTypeObject *SWIG_STATIC_POINTER(type) = SwigPyPacked_TypeOnce(); + static PyTypeObject *SWIG_STATIC_POINTER(type) = _PySwigPacked_type(); return type; } SWIGRUNTIMEINLINE int SwigPyPacked_Check(PyObject *op) { - return ((op)->ob_type == SwigPyPacked_TypeOnce()) + return ((op)->ob_type == _PySwigPacked_type()) || (strcmp((op)->ob_type->tp_name,"SwigPyPacked") == 0); } @@ -2086,95 +1924,83 @@ SwigPyPacked_dealloc(PyObject *v) } SWIGRUNTIME PyTypeObject* -SwigPyPacked_TypeOnce(void) { +_PySwigPacked_type(void) { static char swigpacked_doc[] = "Swig object carries a C/C++ instance pointer"; static PyTypeObject swigpypacked_type; - static int type_init = 0; + static int type_init = 0; if (!type_init) { - const PyTypeObject tmp = { + const PyTypeObject tmp + = { + /* PyObject header changed in Python 3 */ #if PY_VERSION_HEX>=0x03000000 - PyVarObject_HEAD_INIT(NULL, 0) + PyVarObject_HEAD_INIT(&PyType_Type, 0) #else - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ #endif - (char *)"SwigPyPacked", /* tp_name */ - sizeof(SwigPyPacked), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor)SwigPyPacked_dealloc, /* tp_dealloc */ - (printfunc)SwigPyPacked_print, /* tp_print */ - (getattrfunc)0, /* tp_getattr */ - (setattrfunc)0, /* tp_setattr */ + (char *)"SwigPyPacked", /* tp_name */ + sizeof(SwigPyPacked), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)SwigPyPacked_dealloc, /* tp_dealloc */ + (printfunc)SwigPyPacked_print, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + (setattrfunc)0, /* tp_setattr */ #if PY_VERSION_HEX>=0x03000000 - 0, /* tp_reserved in 3.0.1 */ + 0, /* tp_reserved in 3.0.1 */ #else - (cmpfunc)SwigPyPacked_compare, /* tp_compare */ + (cmpfunc)SwigPyPacked_compare, /* tp_compare */ #endif - (reprfunc)SwigPyPacked_repr, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - (hashfunc)0, /* tp_hash */ - (ternaryfunc)0, /* tp_call */ - (reprfunc)SwigPyPacked_str, /* tp_str */ - PyObject_GenericGetAttr, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - swigpacked_doc, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ + (reprfunc)SwigPyPacked_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + (reprfunc)SwigPyPacked_str, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + swigpacked_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ #if PY_VERSION_HEX >= 0x02020000 - 0, /* tp_iter */ - 0, /* tp_iternext */ - 0, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - 0, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ #endif #if PY_VERSION_HEX >= 0x02030000 - 0, /* tp_del */ -#endif -#if PY_VERSION_HEX >= 0x02060000 - 0, /* tp_version_tag */ -#endif -#if PY_VERSION_HEX >= 0x03040000 - 0, /* tp_finalize */ + 0, /* tp_del */ #endif #ifdef COUNT_ALLOCS - 0, /* tp_allocs */ - 0, /* tp_frees */ - 0, /* tp_maxalloc */ -#if PY_VERSION_HEX >= 0x02050000 - 0, /* tp_prev */ + 0,0,0,0 /* tp_alloc -> tp_next */ #endif - 0 /* tp_next */ -#endif - }; + }; swigpypacked_type = tmp; - type_init = 1; -#if PY_VERSION_HEX < 0x02020000 + /* for Python 3 the ob_type already assigned in PyVarObject_HEAD_INIT() */ +#if PY_VERSION_HEX < 0x03000000 swigpypacked_type.ob_type = &PyType_Type; -#else - if (PyType_Ready(&swigpypacked_type) < 0) - return NULL; #endif + type_init = 1; } return &swigpypacked_type; } @@ -2221,13 +2047,10 @@ _SWIG_This(void) return SWIG_Python_str_FromChar("this"); } -static PyObject *swig_this = NULL; - SWIGRUNTIME PyObject * SWIG_This(void) { - if (swig_this == NULL) - swig_this = _SWIG_This(); + static PyObject *SWIG_STATIC_POINTER(swig_this) = _SWIG_This(); return swig_this; } @@ -2241,65 +2064,50 @@ SWIG_This(void) SWIGRUNTIME SwigPyObject * SWIG_Python_GetSwigThis(PyObject *pyobj) { - PyObject *obj; - - if (SwigPyObject_Check(pyobj)) + if (SwigPyObject_Check(pyobj)) { return (SwigPyObject *) pyobj; - -#ifdef SWIGPYTHON_BUILTIN - (void)obj; -# ifdef PyWeakref_CheckProxy - if (PyWeakref_CheckProxy(pyobj)) { - pyobj = PyWeakref_GET_OBJECT(pyobj); - if (pyobj && SwigPyObject_Check(pyobj)) - return (SwigPyObject*) pyobj; - } -# endif - return NULL; -#else - - obj = 0; - -#if (!defined(SWIG_PYTHON_SLOW_GETSET_THIS) && (PY_VERSION_HEX >= 0x02030000)) - if (PyInstance_Check(pyobj)) { - obj = _PyInstance_Lookup(pyobj, SWIG_This()); } else { - PyObject **dictptr = _PyObject_GetDictPtr(pyobj); - if (dictptr != NULL) { - PyObject *dict = *dictptr; - obj = dict ? PyDict_GetItem(dict, SWIG_This()) : 0; + PyObject *obj = 0; +#if (!defined(SWIG_PYTHON_SLOW_GETSET_THIS) && (PY_VERSION_HEX >= 0x02030000)) + if (PyInstance_Check(pyobj)) { + obj = _PyInstance_Lookup(pyobj, SWIG_This()); } else { -#ifdef PyWeakref_CheckProxy - if (PyWeakref_CheckProxy(pyobj)) { - PyObject *wobj = PyWeakref_GET_OBJECT(pyobj); - return wobj ? SWIG_Python_GetSwigThis(wobj) : 0; - } -#endif - obj = PyObject_GetAttr(pyobj,SWIG_This()); - if (obj) { - Py_DECREF(obj); + PyObject **dictptr = _PyObject_GetDictPtr(pyobj); + if (dictptr != NULL) { + PyObject *dict = *dictptr; + obj = dict ? PyDict_GetItem(dict, SWIG_This()) : 0; } else { - if (PyErr_Occurred()) PyErr_Clear(); - return 0; +#ifdef PyWeakref_CheckProxy + if (PyWeakref_CheckProxy(pyobj)) { + PyObject *wobj = PyWeakref_GET_OBJECT(pyobj); + return wobj ? SWIG_Python_GetSwigThis(wobj) : 0; + } +#endif + obj = PyObject_GetAttr(pyobj,SWIG_This()); + if (obj) { + Py_DECREF(obj); + } else { + if (PyErr_Occurred()) PyErr_Clear(); + return 0; + } } } - } #else - obj = PyObject_GetAttr(pyobj,SWIG_This()); - if (obj) { - Py_DECREF(obj); - } else { - if (PyErr_Occurred()) PyErr_Clear(); - return 0; - } + obj = PyObject_GetAttr(pyobj,SWIG_This()); + if (obj) { + Py_DECREF(obj); + } else { + if (PyErr_Occurred()) PyErr_Clear(); + return 0; + } #endif - if (obj && !SwigPyObject_Check(obj)) { - /* a PyObject is called 'this', try to get the 'real this' - SwigPyObject from it */ - return SWIG_Python_GetSwigThis(obj); + if (obj && !SwigPyObject_Check(obj)) { + /* a PyObject is called 'this', try to get the 'real this' + SwigPyObject from it */ + return SWIG_Python_GetSwigThis(obj); + } + return (SwigPyObject *)obj; } - return (SwigPyObject *)obj; -#endif } /* Acquire a pointer value */ @@ -2321,105 +2129,91 @@ SWIG_Python_AcquirePtr(PyObject *obj, int own) { SWIGRUNTIME int SWIG_Python_ConvertPtrAndOwn(PyObject *obj, void **ptr, swig_type_info *ty, int flags, int *own) { - int res; - SwigPyObject *sobj; - int implicit_conv = (flags & SWIG_POINTER_IMPLICIT_CONV) != 0; - - if (!obj) - return SWIG_ERROR; - if (obj == Py_None && !implicit_conv) { - if (ptr) - *ptr = 0; + if (!obj) return SWIG_ERROR; + if (obj == Py_None) { + if (ptr) *ptr = 0; return SWIG_OK; - } - - res = SWIG_ERROR; - - sobj = SWIG_Python_GetSwigThis(obj); - if (own) - *own = 0; - while (sobj) { - void *vptr = sobj->ptr; - if (ty) { - swig_type_info *to = sobj->ty; - if (to == ty) { - /* no type cast needed */ - if (ptr) *ptr = vptr; - break; - } else { - swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); - if (!tc) { - sobj = (SwigPyObject *)sobj->next; - } else { - if (ptr) { - int newmemory = 0; - *ptr = SWIG_TypeCast(tc,vptr,&newmemory); - if (newmemory == SWIG_CAST_NEW_MEMORY) { - assert(own); /* badly formed typemap which will lead to a memory leak - it must set and use own to delete *ptr */ - if (own) - *own = *own | SWIG_CAST_NEW_MEMORY; - } - } - break; - } - } - } else { - if (ptr) *ptr = vptr; - break; - } - } - if (sobj) { - if (own) - *own = *own | sobj->own; - if (flags & SWIG_POINTER_DISOWN) { - sobj->own = 0; - } - res = SWIG_OK; } else { - if (implicit_conv) { - SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; - if (data && !data->implicitconv) { - PyObject *klass = data->klass; - if (klass) { - PyObject *impconv; - data->implicitconv = 1; /* avoid recursion and call 'explicit' constructors*/ - impconv = SWIG_Python_CallFunctor(klass, obj); - data->implicitconv = 0; - if (PyErr_Occurred()) { - PyErr_Clear(); - impconv = 0; - } - if (impconv) { - SwigPyObject *iobj = SWIG_Python_GetSwigThis(impconv); - if (iobj) { - void *vptr; - res = SWIG_Python_ConvertPtrAndOwn((PyObject*)iobj, &vptr, ty, 0, 0); - if (SWIG_IsOK(res)) { - if (ptr) { - *ptr = vptr; - /* transfer the ownership to 'ptr' */ - iobj->own = 0; - res = SWIG_AddCast(res); - res = SWIG_AddNewMask(res); - } else { - res = SWIG_AddCast(res); - } + SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj); + if (own) + *own = 0; + while (sobj) { + void *vptr = sobj->ptr; + if (ty) { + swig_type_info *to = sobj->ty; + if (to == ty) { + /* no type cast needed */ + if (ptr) *ptr = vptr; + break; + } else { + swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); + if (!tc) { + sobj = (SwigPyObject *)sobj->next; + } else { + if (ptr) { + int newmemory = 0; + *ptr = SWIG_TypeCast(tc,vptr,&newmemory); + if (newmemory == SWIG_CAST_NEW_MEMORY) { + assert(own); + if (own) + *own = *own | SWIG_CAST_NEW_MEMORY; } } - Py_DECREF(impconv); - } - } + break; + } + } + } else { + if (ptr) *ptr = vptr; + break; } } - if (!SWIG_IsOK(res) && obj == Py_None) { - if (ptr) - *ptr = 0; - if (PyErr_Occurred()) - PyErr_Clear(); - res = SWIG_OK; + if (sobj) { + if (own) + *own = *own | sobj->own; + if (flags & SWIG_POINTER_DISOWN) { + sobj->own = 0; + } + return SWIG_OK; + } else { + int res = SWIG_ERROR; + if (flags & SWIG_POINTER_IMPLICIT_CONV) { + SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; + if (data && !data->implicitconv) { + PyObject *klass = data->klass; + if (klass) { + PyObject *impconv; + data->implicitconv = 1; /* avoid recursion and call 'explicit' constructors*/ + impconv = SWIG_Python_CallFunctor(klass, obj); + data->implicitconv = 0; + if (PyErr_Occurred()) { + PyErr_Clear(); + impconv = 0; + } + if (impconv) { + SwigPyObject *iobj = SWIG_Python_GetSwigThis(impconv); + if (iobj) { + void *vptr; + res = SWIG_Python_ConvertPtrAndOwn((PyObject*)iobj, &vptr, ty, 0, 0); + if (SWIG_IsOK(res)) { + if (ptr) { + *ptr = vptr; + /* transfer the ownership to 'ptr' */ + iobj->own = 0; + res = SWIG_AddCast(res); + res = SWIG_AddNewMask(res); + } else { + res = SWIG_AddCast(res); + } + } + } + Py_DECREF(impconv); + } + } + } + } + return res; } } - return res; } /* Convert a function ptr value */ @@ -2505,30 +2299,24 @@ SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this) } } else { #if PY_VERSION_HEX >= 0x03000000 - inst = ((PyTypeObject*) data->newargs)->tp_new((PyTypeObject*) data->newargs, Py_None, Py_None); - if (inst) { - PyObject_SetAttr(inst, SWIG_This(), swig_this); - Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG; - } + inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None); + PyObject_SetAttr(inst, SWIG_This(), swig_this); + Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG; #else PyObject *dict = PyDict_New(); - if (dict) { - PyDict_SetItem(dict, SWIG_This(), swig_this); - inst = PyInstance_NewRaw(data->newargs, dict); - Py_DECREF(dict); - } + PyDict_SetItem(dict, SWIG_This(), swig_this); + inst = PyInstance_NewRaw(data->newargs, dict); + Py_DECREF(dict); #endif } return inst; #else #if (PY_VERSION_HEX >= 0x02010000) - PyObject *inst = 0; + PyObject *inst; PyObject *dict = PyDict_New(); - if (dict) { - PyDict_SetItem(dict, SWIG_This(), swig_this); - inst = PyInstance_NewRaw(data->newargs, dict); - Py_DECREF(dict); - } + PyDict_SetItem(dict, SWIG_This(), swig_this); + inst = PyInstance_NewRaw(data->newargs, dict); + Py_DECREF(dict); return (PyObject *) inst; #else PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type); @@ -2579,7 +2367,7 @@ SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this) SWIGINTERN PyObject * SWIG_Python_InitShadowInstance(PyObject *args) { PyObject *obj[2]; - if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) { + if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) { return NULL; } else { SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]); @@ -2595,55 +2383,22 @@ SWIG_Python_InitShadowInstance(PyObject *args) { /* Create a new pointer object */ SWIGRUNTIME PyObject * -SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int flags) { - SwigPyClientData *clientdata; - PyObject * robj; - int own; - - if (!ptr) +SWIG_Python_NewPointerObj(void *ptr, swig_type_info *type, int flags) { + if (!ptr) { return SWIG_Py_Void(); - - clientdata = type ? (SwigPyClientData *)(type->clientdata) : 0; - own = (flags & SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0; - if (clientdata && clientdata->pytype) { - SwigPyObject *newobj; - if (flags & SWIG_BUILTIN_TP_INIT) { - newobj = (SwigPyObject*) self; - if (newobj->ptr) { - PyObject *next_self = clientdata->pytype->tp_alloc(clientdata->pytype, 0); - while (newobj->next) - newobj = (SwigPyObject *) newobj->next; - newobj->next = next_self; - newobj = (SwigPyObject *)next_self; -#ifdef SWIGPYTHON_BUILTIN - newobj->dict = 0; -#endif + } else { + int own = (flags & SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0; + PyObject *robj = SwigPyObject_New(ptr, type, own); + SwigPyClientData *clientdata = type ? (SwigPyClientData *)(type->clientdata) : 0; + if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) { + PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj); + if (inst) { + Py_DECREF(robj); + robj = inst; } - } else { - newobj = PyObject_New(SwigPyObject, clientdata->pytype); -#ifdef SWIGPYTHON_BUILTIN - newobj->dict = 0; -#endif } - if (newobj) { - newobj->ptr = ptr; - newobj->ty = type; - newobj->own = own; - newobj->next = 0; - return (PyObject*) newobj; - } - return SWIG_Py_Void(); + return robj; } - - assert(!(flags & SWIG_BUILTIN_TP_INIT)); - - robj = SwigPyObject_New(ptr, type, own); - if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) { - PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj); - Py_DECREF(robj); - robj = inst; - } - return robj; } /* Create a new packed object */ @@ -2662,19 +2417,15 @@ void *SWIG_ReturnGlobalTypeList(void *); #endif SWIGRUNTIME swig_module_info * -SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) { +SWIG_Python_GetModule(void) { static void *type_pointer = (void *)0; /* first check if module already created */ if (!type_pointer) { #ifdef SWIG_LINK_RUNTIME type_pointer = SWIG_ReturnGlobalTypeList((void *)0); #else -# ifdef SWIGPY_USE_CAPSULE - type_pointer = PyCapsule_Import(SWIGPY_CAPSULE_NAME, 0); -# else type_pointer = PyCObject_Import((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME); -# endif if (PyErr_Occurred()) { PyErr_Clear(); type_pointer = (void *)0; @@ -2692,11 +2443,13 @@ PyModule_AddObject(PyObject *m, char *name, PyObject *o) { PyObject *dict; if (!PyModule_Check(m)) { - PyErr_SetString(PyExc_TypeError, "PyModule_AddObject() needs module as first arg"); + PyErr_SetString(PyExc_TypeError, + "PyModule_AddObject() needs module as first arg"); return SWIG_ERROR; } if (!o) { - PyErr_SetString(PyExc_TypeError, "PyModule_AddObject() needs non-NULL value"); + PyErr_SetString(PyExc_TypeError, + "PyModule_AddObject() needs non-NULL value"); return SWIG_ERROR; } @@ -2715,17 +2468,9 @@ PyModule_AddObject(PyObject *m, char *name, PyObject *o) #endif SWIGRUNTIME void -#ifdef SWIGPY_USE_CAPSULE -SWIG_Python_DestroyModule(PyObject *obj) -#else SWIG_Python_DestroyModule(void *vptr) -#endif { -#ifdef SWIGPY_USE_CAPSULE - swig_module_info *swig_module = (swig_module_info *) PyCapsule_GetPointer(obj, SWIGPY_CAPSULE_NAME); -#else swig_module_info *swig_module = (swig_module_info *) vptr; -#endif swig_type_info **types = swig_module->types; size_t i; for (i =0; i < swig_module->size; ++i) { @@ -2736,33 +2481,25 @@ SWIG_Python_DestroyModule(void *vptr) } } Py_DECREF(SWIG_This()); - swig_this = NULL; } SWIGRUNTIME void SWIG_Python_SetModule(swig_module_info *swig_module) { + static PyMethodDef swig_empty_runtime_method_table[] = { {NULL, NULL, 0, NULL} };/* Sentinel */ + #if PY_VERSION_HEX >= 0x03000000 /* Add a dummy module object into sys.modules */ PyObject *module = PyImport_AddModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION); #else - static PyMethodDef swig_empty_runtime_method_table[] = { {NULL, NULL, 0, NULL} }; /* Sentinel */ - PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, swig_empty_runtime_method_table); + PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, + swig_empty_runtime_method_table); #endif -#ifdef SWIGPY_USE_CAPSULE - PyObject *pointer = PyCapsule_New((void *) swig_module, SWIGPY_CAPSULE_NAME, SWIG_Python_DestroyModule); - if (pointer && module) { - PyModule_AddObject(module, (char*)"type_pointer_capsule" SWIG_TYPE_TABLE_NAME, pointer); - } else { - Py_XDECREF(pointer); - } -#else PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule); if (pointer && module) { PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer); } else { Py_XDECREF(pointer); } -#endif } /* The python cached type query */ @@ -2780,20 +2517,12 @@ SWIG_Python_TypeQuery(const char *type) PyObject *obj = PyDict_GetItem(cache, key); swig_type_info *descriptor; if (obj) { -#ifdef SWIGPY_USE_CAPSULE - descriptor = (swig_type_info *) PyCapsule_GetPointer(obj, NULL); -#else descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj); -#endif } else { - swig_module_info *swig_module = SWIG_GetModule(0); + swig_module_info *swig_module = SWIG_Python_GetModule(); descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type); if (descriptor) { -#ifdef SWIGPY_USE_CAPSULE - obj = PyCapsule_New((void*) descriptor, NULL, NULL); -#else obj = PyCObject_FromVoidPtr(descriptor, NULL); -#endif PyDict_SetItem(cache, key, obj); Py_DECREF(obj); } @@ -2854,7 +2583,7 @@ SwigPyObject_GetDesc(PyObject *self) { SwigPyObject *v = (SwigPyObject *)self; swig_type_info *ty = v ? v->ty : 0; - return ty ? ty->str : ""; + return ty ? ty->str : (char*)""; } SWIGRUNTIME void @@ -2897,7 +2626,7 @@ SWIG_Python_TypeError(const char *type, PyObject *obj) /* Convert a pointer value, signal an exception on a type mismatch */ SWIGRUNTIME void * -SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(argnum), int flags) { +SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int argnum, int flags) { void *result; if (SWIG_Python_ConvertPtr(obj, &result, ty, flags) == -1) { PyErr_Clear(); @@ -2911,61 +2640,11 @@ SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(arg return result; } -#ifdef SWIGPYTHON_BUILTIN -SWIGRUNTIME int -SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) { - PyTypeObject *tp = obj->ob_type; - PyObject *descr; - PyObject *encoded_name; - descrsetfunc f; - int res = -1; - -# ifdef Py_USING_UNICODE - if (PyString_Check(name)) { - name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL); - if (!name) - return -1; - } else if (!PyUnicode_Check(name)) -# else - if (!PyString_Check(name)) -# endif - { - PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name); - return -1; - } else { - Py_INCREF(name); - } - - if (!tp->tp_dict) { - if (PyType_Ready(tp) < 0) - goto done; - } - - descr = _PyType_Lookup(tp, name); - f = NULL; - if (descr != NULL) - f = descr->ob_type->tp_descr_set; - if (!f) { - if (PyString_Check(name)) { - encoded_name = name; - Py_INCREF(name); - } else { - encoded_name = PyUnicode_AsUTF8String(name); - } - PyErr_Format(PyExc_AttributeError, "'%.100s' object has no attribute '%.200s'", tp->tp_name, PyString_AsString(encoded_name)); - Py_DECREF(encoded_name); - } else { - res = f(descr, obj, value); - } - - done: - Py_DECREF(name); - return res; -} -#endif - #ifdef __cplusplus +#if 0 +{ /* cc-mode */ +#endif } #endif @@ -3016,7 +2695,7 @@ static swig_module_info swig_module = {swig_types, 12, 0, 0, 0, 0}; #endif #define SWIG_name "_gribapi_swig" -#define SWIGVERSION 0x030012 +#define SWIGVERSION 0x010340 #define SWIG_VERSION SWIGVERSION @@ -3060,11 +2739,9 @@ SWIG_AsVal_double (PyObject *obj, double *val) if (PyFloat_Check(obj)) { if (val) *val = PyFloat_AsDouble(obj); return SWIG_OK; -#if PY_VERSION_HEX < 0x03000000 } else if (PyInt_Check(obj)) { - if (val) *val = (double) PyInt_AsLong(obj); + if (val) *val = PyInt_AsLong(obj); return SWIG_OK; -#endif } else if (PyLong_Check(obj)) { double v = PyLong_AsDouble(obj); if (!PyErr_Occurred()) { @@ -3138,7 +2815,6 @@ SWIG_CanCastAsInteger(double *d, double min, double max) { SWIGINTERN int SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val) { -#if PY_VERSION_HEX < 0x03000000 if (PyInt_Check(obj)) { long v = PyInt_AsLong(obj); if (v >= 0) { @@ -3147,16 +2823,13 @@ SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val) } else { return SWIG_OverflowError; } - } else -#endif - if (PyLong_Check(obj)) { + } else if (PyLong_Check(obj)) { unsigned long v = PyLong_AsUnsignedLong(obj); if (!PyErr_Occurred()) { if (val) *val = v; return SWIG_OK; } else { PyErr_Clear(); - return SWIG_OverflowError; } } #ifdef SWIG_PYTHON_CAST_MODE @@ -3183,79 +2856,12 @@ SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val) } -#include -#if !defined(SWIG_NO_LLONG_MAX) -# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) -# define LLONG_MAX __LONG_LONG_MAX__ -# define LLONG_MIN (-LLONG_MAX - 1LL) -# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) -# endif -#endif - - -#if defined(LLONG_MAX) && !defined(SWIG_LONG_LONG_AVAILABLE) -# define SWIG_LONG_LONG_AVAILABLE -#endif - - -#ifdef SWIG_LONG_LONG_AVAILABLE -SWIGINTERN int -SWIG_AsVal_unsigned_SS_long_SS_long (PyObject *obj, unsigned long long *val) -{ - int res = SWIG_TypeError; - if (PyLong_Check(obj)) { - unsigned long long v = PyLong_AsUnsignedLongLong(obj); - if (!PyErr_Occurred()) { - if (val) *val = v; - return SWIG_OK; - } else { - PyErr_Clear(); - res = SWIG_OverflowError; - } - } else { - unsigned long v; - res = SWIG_AsVal_unsigned_SS_long (obj,&v); - if (SWIG_IsOK(res)) { - if (val) *val = v; - return res; - } - } -#ifdef SWIG_PYTHON_CAST_MODE - { - const double mant_max = 1LL << DBL_MANT_DIG; - double d; - res = SWIG_AsVal_double (obj,&d); - if (SWIG_IsOK(res) && !SWIG_CanCastAsInteger(&d, 0, mant_max)) - return SWIG_OverflowError; - if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, mant_max)) { - if (val) *val = (unsigned long long)(d); - return SWIG_AddCast(res); - } - res = SWIG_TypeError; - } -#endif - return res; -} -#endif - - SWIGINTERNINLINE int SWIG_AsVal_size_t (PyObject * obj, size_t *val) { - int res = SWIG_TypeError; -#ifdef SWIG_LONG_LONG_AVAILABLE - if (sizeof(size_t) <= sizeof(unsigned long)) { -#endif - unsigned long v; - res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0); - if (SWIG_IsOK(res) && val) *val = (size_t)(v); -#ifdef SWIG_LONG_LONG_AVAILABLE - } else if (sizeof(size_t) <= sizeof(unsigned long long)) { - unsigned long long v; - res = SWIG_AsVal_unsigned_SS_long_SS_long (obj, val ? &v : 0); - if (SWIG_IsOK(res) && val) *val = (size_t)(v); - } -#endif + unsigned long v; + int res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0); + if (SWIG_IsOK(res) && val) *val = (size_t)(v); return res; } @@ -3280,20 +2886,12 @@ SWIG_FromCharPtrAndSize(const char* carray, size_t size) if (size > INT_MAX) { swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); return pchar_descriptor ? - SWIG_InternalNewPointerObj((char *)(carray), pchar_descriptor, 0) : SWIG_Py_Void(); + SWIG_NewPointerObj((char *)(carray), pchar_descriptor, 0) : SWIG_Py_Void(); } else { #if PY_VERSION_HEX >= 0x03000000 -#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) - return PyBytes_FromStringAndSize(carray, (Py_ssize_t)(size)); + return PyUnicode_FromStringAndSize(carray, (int)(size)); #else -#if PY_VERSION_HEX >= 0x03010000 - return PyUnicode_DecodeUTF8(carray, (Py_ssize_t)(size), "surrogateescape"); -#else - return PyUnicode_FromStringAndSize(carray, (Py_ssize_t)(size)); -#endif -#endif -#else - return PyString_FromStringAndSize(carray, (Py_ssize_t)(size)); + return PyString_FromStringAndSize(carray, (int)(size)); #endif } } else { @@ -3302,123 +2900,13 @@ SWIG_FromCharPtrAndSize(const char* carray, size_t size) } -SWIGINTERN int -SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) -{ -#if PY_VERSION_HEX>=0x03000000 -#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) - if (PyBytes_Check(obj)) -#else - if (PyUnicode_Check(obj)) -#endif -#else - if (PyString_Check(obj)) -#endif - { - char *cstr; Py_ssize_t len; -#if PY_VERSION_HEX>=0x03000000 -#if !defined(SWIG_PYTHON_STRICT_BYTE_CHAR) - if (!alloc && cptr) { - /* We can't allow converting without allocation, since the internal - representation of string in Python 3 is UCS-2/UCS-4 but we require - a UTF-8 representation. - TODO(bhy) More detailed explanation */ - return SWIG_RuntimeError; - } - obj = PyUnicode_AsUTF8String(obj); - if(alloc) *alloc = SWIG_NEWOBJ; -#endif - PyBytes_AsStringAndSize(obj, &cstr, &len); -#else - PyString_AsStringAndSize(obj, &cstr, &len); -#endif - if (cptr) { - if (alloc) { - /* - In python the user should not be able to modify the inner - string representation. To warranty that, if you define - SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string - buffer is always returned. - - The default behavior is just to return the pointer value, - so, be careful. - */ -#if defined(SWIG_PYTHON_SAFE_CSTRINGS) - if (*alloc != SWIG_OLDOBJ) -#else - if (*alloc == SWIG_NEWOBJ) -#endif - { - *cptr = (char *)memcpy(malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1)); - *alloc = SWIG_NEWOBJ; - } else { - *cptr = cstr; - *alloc = SWIG_OLDOBJ; - } - } else { -#if PY_VERSION_HEX>=0x03000000 -#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) - *cptr = PyBytes_AsString(obj); -#else - assert(0); /* Should never reach here with Unicode strings in Python 3 */ -#endif -#else - *cptr = SWIG_Python_str_AsChar(obj); -#endif - } - } - if (psize) *psize = len + 1; -#if PY_VERSION_HEX>=0x03000000 && !defined(SWIG_PYTHON_STRICT_BYTE_CHAR) - Py_XDECREF(obj); -#endif - return SWIG_OK; - } else { -#if defined(SWIG_PYTHON_2_UNICODE) -#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) -#error "Cannot use both SWIG_PYTHON_2_UNICODE and SWIG_PYTHON_STRICT_BYTE_CHAR at once" -#endif -#if PY_VERSION_HEX<0x03000000 - if (PyUnicode_Check(obj)) { - char *cstr; Py_ssize_t len; - if (!alloc && cptr) { - return SWIG_RuntimeError; - } - obj = PyUnicode_AsUTF8String(obj); - if (PyString_AsStringAndSize(obj, &cstr, &len) != -1) { - if (cptr) { - if (alloc) *alloc = SWIG_NEWOBJ; - *cptr = (char *)memcpy(malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1)); - } - if (psize) *psize = len + 1; - - Py_XDECREF(obj); - return SWIG_OK; - } else { - Py_XDECREF(obj); - } - } -#endif -#endif - - swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); - if (pchar_descriptor) { - void* vptr = 0; - if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { - if (cptr) *cptr = (char *) vptr; - if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0; - if (alloc) *alloc = SWIG_OLDOBJ; - return SWIG_OK; - } - } - } - return SWIG_TypeError; -} + #define SWIG_From_long PyInt_FromLong -SWIGINTERNINLINE PyObject* - SWIG_From_int (int value) -{ - return PyInt_FromLong((long) value); +SWIGINTERNINLINE PyObject * +SWIG_From_int (int value) +{ + return SWIG_From_long (value); } @@ -3427,39 +2915,44 @@ SWIGINTERNINLINE PyObject* #ifndef SWIG_FILE_WITH_INIT -#define NO_IMPORT_ARRAY +# define NO_IMPORT_ARRAY #endif #include "stdio.h" -#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION #include typedef int intp; SWIGINTERN intp *new_intp(void){ - return (int *)calloc(1,sizeof(int)); + return (int *)malloc(sizeof(int)); } SWIGINTERN void delete_intp(intp *self){ if (self) free((char*)self); } +#include +#if !defined(SWIG_NO_LLONG_MAX) +# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) +# define LLONG_MAX __LONG_LONG_MAX__ +# define LLONG_MIN (-LLONG_MAX - 1LL) +# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) +# endif +#endif + + SWIGINTERN int SWIG_AsVal_long (PyObject *obj, long* val) { -#if PY_VERSION_HEX < 0x03000000 if (PyInt_Check(obj)) { if (val) *val = PyInt_AsLong(obj); return SWIG_OK; - } else -#endif - if (PyLong_Check(obj)) { + } else if (PyLong_Check(obj)) { long v = PyLong_AsLong(obj); if (!PyErr_Occurred()) { if (val) *val = v; return SWIG_OK; } else { PyErr_Clear(); - return SWIG_OverflowError; } } #ifdef SWIG_PYTHON_CAST_MODE @@ -3517,7 +3010,7 @@ SWIGINTERN intp *intp_frompointer(int *t){ typedef size_t sizetp; SWIGINTERN sizetp *new_sizetp(void){ - return (size_t *)calloc(1,sizeof(size_t)); + return (size_t *)malloc(sizeof(size_t)); } SWIGINTERN void delete_sizetp(sizetp *self){ if (self) free((char*)self); @@ -3529,40 +3022,18 @@ SWIGINTERN size_t sizetp_value(sizetp *self){ return *self; } - #define SWIG_From_long PyInt_FromLong - - SWIGINTERNINLINE PyObject* SWIG_From_unsigned_SS_long (unsigned long value) { return (value > LONG_MAX) ? - PyLong_FromUnsignedLong(value) : PyInt_FromLong((long)(value)); + PyLong_FromUnsignedLong(value) : PyInt_FromLong((long)(value)); } -#ifdef SWIG_LONG_LONG_AVAILABLE -SWIGINTERNINLINE PyObject* -SWIG_From_unsigned_SS_long_SS_long (unsigned long long value) -{ - return (value > LONG_MAX) ? - PyLong_FromUnsignedLongLong(value) : PyInt_FromLong((long)(value)); -} -#endif - - SWIGINTERNINLINE PyObject * SWIG_From_size_t (size_t value) { -#ifdef SWIG_LONG_LONG_AVAILABLE - if (sizeof(size_t) <= sizeof(unsigned long)) { -#endif - return SWIG_From_unsigned_SS_long ((unsigned long)(value)); -#ifdef SWIG_LONG_LONG_AVAILABLE - } else { - /* assume sizeof(size_t) <= sizeof(unsigned long long) */ - return SWIG_From_unsigned_SS_long_SS_long ((unsigned long long)(value)); - } -#endif + return SWIG_From_unsigned_SS_long ((unsigned long)(value)); } SWIGINTERN size_t *sizetp_cast(sizetp *self){ @@ -3575,7 +3046,7 @@ SWIGINTERN sizetp *sizetp_frompointer(size_t *t){ typedef long longp; SWIGINTERN longp *new_longp(void){ - return (long *)calloc(1,sizeof(long)); + return (long *)malloc(sizeof(long)); } SWIGINTERN void delete_longp(longp *self){ if (self) free((char*)self); @@ -3596,7 +3067,7 @@ SWIGINTERN longp *longp_frompointer(long *t){ typedef double doublep; SWIGINTERN doublep *new_doublep(void){ - return (double *)calloc(1,sizeof(double)); + return (double *)malloc(sizeof(double)); } SWIGINTERN void delete_doublep(doublep *self){ if (self) free((char*)self); @@ -3618,7 +3089,7 @@ SWIGINTERN doublep *doublep_frompointer(double *t){ } static double *new_doubleArray(size_t nelements) { - return (double *)calloc(nelements, sizeof(double)); + return (double *)malloc((nelements)*sizeof(double)); } static void delete_doubleArray(double *ary) { @@ -3634,7 +3105,7 @@ SWIGINTERN doublep *doublep_frompointer(double *t){ static long *new_longArray(size_t nelements) { - return (long *)calloc(nelements, sizeof(long)); + return (long *)malloc((nelements)*sizeof(long)); } static void delete_longArray(long *ary) { @@ -3650,7 +3121,7 @@ SWIGINTERN doublep *doublep_frompointer(double *t){ static int *new_intArray(size_t nelements) { - return (int *)calloc(nelements, sizeof(int)); + return (int *)malloc((nelements)*sizeof(int)); } static void delete_intArray(int *ary) { @@ -3666,7 +3137,7 @@ SWIGINTERN doublep *doublep_frompointer(double *t){ static char* *new_stringArray(size_t nelements) { - return (char* *)calloc(nelements, sizeof(char*)); + return (char* *)malloc((nelements)*sizeof(char*)); } static void delete_stringArray(char* *ary) { @@ -3688,6 +3159,82 @@ SWIG_FromCharPtr(const char *cptr) } +SWIGINTERN int +SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) +{ +#if PY_VERSION_HEX>=0x03000000 + if (PyUnicode_Check(obj)) +#else + if (PyString_Check(obj)) +#endif + { + char *cstr; Py_ssize_t len; +#if PY_VERSION_HEX>=0x03000000 + if (!alloc && cptr) { + /* We can't allow converting without allocation, since the internal + representation of string in Python 3 is UCS-2/UCS-4 but we require + a UTF-8 representation. + TODO(bhy) More detailed explanation */ + return SWIG_RuntimeError; + } + obj = PyUnicode_AsUTF8String(obj); + PyBytes_AsStringAndSize(obj, &cstr, &len); + if(alloc) *alloc = SWIG_NEWOBJ; +#else + PyString_AsStringAndSize(obj, &cstr, &len); +#endif + if (cptr) { + if (alloc) { + /* + In python the user should not be able to modify the inner + string representation. To warranty that, if you define + SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string + buffer is always returned. + + The default behavior is just to return the pointer value, + so, be careful. + */ +#if defined(SWIG_PYTHON_SAFE_CSTRINGS) + if (*alloc != SWIG_OLDOBJ) +#else + if (*alloc == SWIG_NEWOBJ) +#endif + { + *cptr = (char *)memcpy((char *)malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1)); + *alloc = SWIG_NEWOBJ; + } + else { + *cptr = cstr; + *alloc = SWIG_OLDOBJ; + } + } else { + #if PY_VERSION_HEX>=0x03000000 + assert(0); /* Should never reach here in Python 3 */ + #endif + *cptr = SWIG_Python_str_AsChar(obj); + } + } + if (psize) *psize = len + 1; +#if PY_VERSION_HEX>=0x03000000 + Py_XDECREF(obj); +#endif + return SWIG_OK; + } else { + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + if (pchar_descriptor) { + void* vptr = 0; + if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { + if (cptr) *cptr = (char *) vptr; + if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0; + if (alloc) *alloc = SWIG_OLDOBJ; + return SWIG_OK; + } + } + } + return SWIG_TypeError; +} + + @@ -3711,52 +3258,75 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in } -#if NPY_API_VERSION < 0x00000007 -#define NPY_ARRAY_DEFAULT NPY_DEFAULT -#define NPY_ARRAY_FARRAY NPY_FARRAY -#define NPY_FORTRANORDER NPY_FORTRAN +/* Support older NumPy data type names +*/ +#if NDARRAY_VERSION < 0x01000000 +#define NPY_BOOL PyArray_BOOL +#define NPY_BYTE PyArray_BYTE +#define NPY_UBYTE PyArray_UBYTE +#define NPY_SHORT PyArray_SHORT +#define NPY_USHORT PyArray_USHORT +#define NPY_INT PyArray_INT +#define NPY_UINT PyArray_UINT +#define NPY_LONG PyArray_LONG +#define NPY_ULONG PyArray_ULONG +#define NPY_LONGLONG PyArray_LONGLONG +#define NPY_ULONGLONG PyArray_ULONGLONG +#define NPY_FLOAT PyArray_FLOAT +#define NPY_DOUBLE PyArray_DOUBLE +#define NPY_LONGDOUBLE PyArray_LONGDOUBLE +#define NPY_CFLOAT PyArray_CFLOAT +#define NPY_CDOUBLE PyArray_CDOUBLE +#define NPY_CLONGDOUBLE PyArray_CLONGDOUBLE +#define NPY_OBJECT PyArray_OBJECT +#define NPY_STRING PyArray_STRING +#define NPY_UNICODE PyArray_UNICODE +#define NPY_VOID PyArray_VOID +#define NPY_NTYPES PyArray_NTYPES +#define NPY_NOTYPE PyArray_NOTYPE +#define NPY_CHAR PyArray_CHAR +#define NPY_USERDEF PyArray_USERDEF +#define npy_intp intp + +#define NPY_MAX_BYTE MAX_BYTE +#define NPY_MIN_BYTE MIN_BYTE +#define NPY_MAX_UBYTE MAX_UBYTE +#define NPY_MAX_SHORT MAX_SHORT +#define NPY_MIN_SHORT MIN_SHORT +#define NPY_MAX_USHORT MAX_USHORT +#define NPY_MAX_INT MAX_INT +#define NPY_MIN_INT MIN_INT +#define NPY_MAX_UINT MAX_UINT +#define NPY_MAX_LONG MAX_LONG +#define NPY_MIN_LONG MIN_LONG +#define NPY_MAX_ULONG MAX_ULONG +#define NPY_MAX_LONGLONG MAX_LONGLONG +#define NPY_MIN_LONGLONG MIN_LONGLONG +#define NPY_MAX_ULONGLONG MAX_ULONGLONG +#define NPY_MAX_INTP MAX_INTP +#define NPY_MIN_INTP MIN_INTP + +#define NPY_FARRAY FARRAY +#define NPY_F_CONTIGUOUS F_CONTIGUOUS #endif /* Macros to extract array attributes. */ -#if NPY_API_VERSION < 0x00000007 -#define is_array(a) ((a) && PyArray_Check((PyArrayObject*)a)) -#define array_type(a) (int)(PyArray_TYPE((PyArrayObject*)a)) -#define array_numdims(a) (((PyArrayObject*)a)->nd) -#define array_dimensions(a) (((PyArrayObject*)a)->dimensions) -#define array_size(a,i) (((PyArrayObject*)a)->dimensions[i]) -#define array_strides(a) (((PyArrayObject*)a)->strides) -#define array_stride(a,i) (((PyArrayObject*)a)->strides[i]) -#define array_data(a) (((PyArrayObject*)a)->data) -#define array_descr(a) (((PyArrayObject*)a)->descr) -#define array_flags(a) (((PyArrayObject*)a)->flags) -#define array_clearflags(a,f) (((PyArrayObject*)a)->flags) &= ~f -#define array_enableflags(a,f) (((PyArrayObject*)a)->flags) = f -#define array_is_fortran(a) (PyArray_ISFORTRAN((PyArrayObject*)a)) -#else -#define is_array(a) ((a) && PyArray_Check(a)) -#define array_type(a) PyArray_TYPE((PyArrayObject*)a) -#define array_numdims(a) PyArray_NDIM((PyArrayObject*)a) -#define array_dimensions(a) PyArray_DIMS((PyArrayObject*)a) -#define array_strides(a) PyArray_STRIDES((PyArrayObject*)a) -#define array_stride(a,i) PyArray_STRIDE((PyArrayObject*)a,i) -#define array_size(a,i) PyArray_DIM((PyArrayObject*)a,i) -#define array_data(a) PyArray_DATA((PyArrayObject*)a) -#define array_descr(a) PyArray_DESCR((PyArrayObject*)a) -#define array_flags(a) PyArray_FLAGS((PyArrayObject*)a) -#define array_enableflags(a,f) PyArray_ENABLEFLAGS((PyArrayObject*)a,f) -#define array_clearflags(a,f) PyArray_CLEARFLAGS((PyArrayObject*)a,f) -#define array_is_fortran(a) (PyArray_IS_F_CONTIGUOUS((PyArrayObject*)a)) -#endif -#define array_is_contiguous(a) (PyArray_ISCONTIGUOUS((PyArrayObject*)a)) -#define array_is_native(a) (PyArray_ISNOTSWAPPED((PyArrayObject*)a)) +#define is_array(a) ((a) && PyArray_Check((PyArrayObject *)a)) +#define array_type(a) (int)(PyArray_TYPE(a)) +#define array_numdims(a) (((PyArrayObject *)a)->nd) +#define array_dimensions(a) (((PyArrayObject *)a)->dimensions) +#define array_size(a,i) (((PyArrayObject *)a)->dimensions[i]) +#define array_data(a) (((PyArrayObject *)a)->data) +#define array_is_contiguous(a) (PyArray_ISCONTIGUOUS(a)) +#define array_is_native(a) (PyArray_ISNOTSWAPPED(a)) +#define array_is_fortran(a) (PyArray_ISFORTRAN(a)) /* Given a PyObject, return a string describing its type. */ - const char* pytype_string(PyObject* py_obj) - { + const char* pytype_string(PyObject* py_obj) { if (py_obj == NULL ) return "C NULL value"; if (py_obj == Py_None ) return "Python None" ; if (PyCallable_Check(py_obj)) return "callable" ; @@ -3766,73 +3336,42 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in if (PyDict_Check( py_obj)) return "dict" ; if (PyList_Check( py_obj)) return "list" ; if (PyTuple_Check( py_obj)) return "tuple" ; -#if PY_MAJOR_VERSION < 3 if (PyFile_Check( py_obj)) return "file" ; if (PyModule_Check( py_obj)) return "module" ; if (PyInstance_Check(py_obj)) return "instance" ; -#endif return "unknown type"; } /* Given a NumPy typecode, return a string describing the type. */ - const char* typecode_string(int typecode) - { - static const char* type_names[25] = {"bool", - "byte", - "unsigned byte", - "short", - "unsigned short", - "int", - "unsigned int", - "long", - "unsigned long", - "long long", - "unsigned long long", - "float", - "double", - "long double", - "complex float", - "complex double", - "complex long double", - "object", - "string", - "unicode", - "void", - "ntypes", - "notype", - "char", - "unknown"}; + const char* typecode_string(int typecode) { + static const char* type_names[25] = {"bool", "byte", "unsigned byte", + "short", "unsigned short", "int", + "unsigned int", "long", "unsigned long", + "long long", "unsigned long long", + "float", "double", "long double", + "complex float", "complex double", + "complex long double", "object", + "string", "unicode", "void", "ntypes", + "notype", "char", "unknown"}; return typecode < 24 ? type_names[typecode] : type_names[24]; } - /* Make sure input has correct numpy type. This now just calls - PyArray_EquivTypenums(). + /* Make sure input has correct numpy type. Allow character and byte + * to match. Also allow int and long to match. This is deprecated. + * You should use PyArray_EquivTypenums() instead. */ - int type_match(int actual_type, - int desired_type) - { + int type_match(int actual_type, int desired_type) { return PyArray_EquivTypenums(actual_type, desired_type); } -#ifdef SWIGPY_USE_CAPSULE - void free_cap(PyObject * cap) - { - void* array = (void*) PyCapsule_GetPointer(cap,SWIGPY_CAPSULE_NAME); - if (array != NULL) free(array); - } -#endif - - - /* Given a PyObject pointer, cast it to a PyArrayObject pointer if * legal. If not, set the python error string appropriately and * return NULL. */ - PyArrayObject* obj_to_array_no_conversion(PyObject* input, - int typecode) + PyArrayObject* obj_to_array_no_conversion(PyObject* input, int typecode) { PyArrayObject* ary = NULL; if (is_array(input) && (typecode == NPY_NOTYPE || @@ -3851,12 +3390,11 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in } else { - const char* desired_type = typecode_string(typecode); - const char* actual_type = pytype_string(input); + const char * desired_type = typecode_string(typecode); + const char * actual_type = pytype_string(input); PyErr_Format(PyExc_TypeError, "Array of type '%s' required. A '%s' was given", - desired_type, - actual_type); + desired_type, actual_type); ary = NULL; } return ary; @@ -3867,12 +3405,11 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in * correct type. On failure, the python error string will be set and * the routine returns NULL. */ - PyArrayObject* obj_to_array_allow_conversion(PyObject* input, - int typecode, - int* is_new_object) + PyArrayObject* obj_to_array_allow_conversion(PyObject* input, int typecode, + int* is_new_object) { PyArrayObject* ary = NULL; - PyObject* py_obj; + PyObject* py_obj; if (is_array(input) && (typecode == NPY_NOTYPE || PyArray_EquivTypenums(array_type(input),typecode))) { @@ -3881,7 +3418,7 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in } else { - py_obj = PyArray_FROMANY(input, typecode, 0, 0, NPY_ARRAY_DEFAULT); + py_obj = PyArray_FROMANY(input, typecode, 0, 0, NPY_DEFAULT); /* If NULL, PyArray_FromObject will have set python error value.*/ ary = (PyArrayObject*) py_obj; *is_new_object = 1; @@ -3894,10 +3431,8 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in * not contiguous, create a new PyArrayObject using the original data, * flag it as a new object and return the pointer. */ - PyArrayObject* make_contiguous(PyArrayObject* ary, - int* is_new_object, - int min_dims, - int max_dims) + PyArrayObject* make_contiguous(PyArrayObject* ary, int* is_new_object, + int min_dims, int max_dims) { PyArrayObject* result; if (array_is_contiguous(ary)) @@ -3908,9 +3443,9 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in else { result = (PyArrayObject*) PyArray_ContiguousFromObject((PyObject*)ary, - array_type(ary), - min_dims, - max_dims); + array_type(ary), + min_dims, + max_dims); *is_new_object = 1; } return result; @@ -3922,8 +3457,8 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in * PyArrayObject using the original data, flag it as a new object * and return the pointer. */ - PyArrayObject* make_fortran(PyArrayObject* ary, - int* is_new_object) + PyArrayObject* make_fortran(PyArrayObject* ary, int* is_new_object, + int min_dims, int max_dims) { PyArrayObject* result; if (array_is_fortran(ary)) @@ -3933,14 +3468,8 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in } else { - Py_INCREF(array_descr(ary)); - result = (PyArrayObject*) PyArray_FromArray(ary, - array_descr(ary), -#if NPY_API_VERSION < 0x00000007 - NPY_FORTRANORDER); -#else - NPY_ARRAY_F_CONTIGUOUS); -#endif + Py_INCREF(ary->descr); + result = (PyArrayObject*) PyArray_FromArray(ary, ary->descr, NPY_FORTRAN); *is_new_object = 1; } return result; @@ -3952,14 +3481,13 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in * will be set. */ PyArrayObject* obj_to_array_contiguous_allow_conversion(PyObject* input, - int typecode, - int* is_new_object) + int typecode, + int* is_new_object) { int is_new1 = 0; int is_new2 = 0; PyArrayObject* ary2; - PyArrayObject* ary1 = obj_to_array_allow_conversion(input, - typecode, + PyArrayObject* ary1 = obj_to_array_allow_conversion(input, typecode, &is_new1); if (ary1) { @@ -3980,18 +3508,17 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in * will be set. */ PyArrayObject* obj_to_array_fortran_allow_conversion(PyObject* input, - int typecode, - int* is_new_object) + int typecode, + int* is_new_object) { int is_new1 = 0; int is_new2 = 0; PyArrayObject* ary2; - PyArrayObject* ary1 = obj_to_array_allow_conversion(input, - typecode, + PyArrayObject* ary1 = obj_to_array_allow_conversion(input, typecode, &is_new1); if (ary1) { - ary2 = make_fortran(ary1, &is_new2); + ary2 = make_fortran(ary1, &is_new2, 0, 0); if (is_new1 && is_new2) { Py_DECREF(ary1); @@ -4003,6 +3530,7 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in } + /* Test whether a python object is contiguous. If array is * contiguous, return 1. Otherwise, set the python error string and * return 0. @@ -4019,22 +3547,6 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in return contiguous; } - /* Test whether a python object is (C_ or F_) contiguous. If array is - * contiguous, return 1. Otherwise, set the python error string and - * return 0. - */ - int require_c_or_f_contiguous(PyArrayObject* ary) - { - int contiguous = 1; - if (!(array_is_contiguous(ary) || array_is_fortran(ary))) - { - PyErr_SetString(PyExc_TypeError, - "Array must be contiguous (C_ or F_). A non-contiguous array was given"); - contiguous = 0; - } - return contiguous; - } - /* Require that a numpy array is not byte-swapped. If the array is * not byte-swapped, return 1. Otherwise, set the python error string * and return 0. @@ -4056,16 +3568,14 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in * dimensions. If the array has the specified number of dimensions, * return 1. Otherwise, set the python error string and return 0. */ - int require_dimensions(PyArrayObject* ary, - int exact_dimensions) + int require_dimensions(PyArrayObject* ary, int exact_dimensions) { int success = 1; if (array_numdims(ary) != exact_dimensions) { PyErr_Format(PyExc_TypeError, "Array must have %d dimensions. Given array has %d dimensions", - exact_dimensions, - array_numdims(ary)); + exact_dimensions, array_numdims(ary)); success = 0; } return success; @@ -4076,9 +3586,7 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in * of dimensions, return 1. Otherwise, set the python error string * and return 0. */ - int require_dimensions_n(PyArrayObject* ary, - int* exact_dimensions, - int n) + int require_dimensions_n(PyArrayObject* ary, int* exact_dimensions, int n) { int success = 0; int i; @@ -4102,8 +3610,7 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in strcat(dims_str,s); PyErr_Format(PyExc_TypeError, "Array must have %s dimensions. Given array has %d dimensions", - dims_str, - array_numdims(ary)); + dims_str, array_numdims(ary)); } return success; } @@ -4112,13 +3619,11 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in * array has the specified shape, return 1. Otherwise, set the python * error string and return 0. */ - int require_size(PyArrayObject* ary, - npy_intp* size, - int n) + int require_size(PyArrayObject* ary, npy_intp* size, int n) { int i; int success = 1; - size_t len; + int len; char desired_dims[255] = "["; char s[255]; char actual_dims[255] = "["; @@ -4154,40 +3659,31 @@ int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_in actual_dims[len-1] = ']'; PyErr_Format(PyExc_TypeError, "Array must have shape of %s. Given array has shape of %s", - desired_dims, - actual_dims); + desired_dims, actual_dims); } return success; } - /* Require the given PyArrayObject to to be Fortran ordered. If the - * the PyArrayObject is already Fortran ordered, do nothing. Else, - * set the Fortran ordering flag and recompute the strides. + /* Require the given PyArrayObject to to be FORTRAN ordered. If the + * the PyArrayObject is already FORTRAN ordered, do nothing. Else, + * set the FORTRAN ordering flag and recompute the strides. */ int require_fortran(PyArrayObject* ary) { int success = 1; int nd = array_numdims(ary); int i; - npy_intp * strides = array_strides(ary); if (array_is_fortran(ary)) return success; - int n_non_one = 0; - /* Set the Fortran ordered flag */ - const npy_intp *dims = array_dimensions(ary); - for (i=0; i < nd; ++i) - n_non_one += (dims[i] != 1) ? 1 : 0; - if (n_non_one > 1) - array_clearflags(ary,NPY_ARRAY_CARRAY); - array_enableflags(ary,NPY_ARRAY_FARRAY); + /* Set the FORTRAN ordered flag */ + ary->flags = NPY_FARRAY; /* Recompute the strides */ - strides[0] = strides[nd-1]; + ary->strides[0] = ary->strides[nd-1]; for (i=1; i < nd; ++i) - strides[i] = strides[i-1] * array_size(ary,i-1); + ary->strides[i] = ary->strides[i-1] * array_size(ary,i-1); return success; } - - + #ifdef __cplusplus extern "C" { #endif @@ -4229,23 +3725,26 @@ SWIGINTERN PyObject *_wrap_memmove(PyObject *SWIGUNUSEDPARM(self), PyObject *arg size_t arg3 ; int res1 ; int res2 ; - char *buf2 = 0 ; - size_t size2 = 0 ; - int alloc2 = 0 ; + size_t val3 ; + int ecode3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; - if (!PyArg_ParseTuple(args,(char *)"OO:memmove",&obj0,&obj1)) SWIG_fail; + if (!PyArg_ParseTuple(args,(char *)"OOO:memmove",&obj0,&obj1,&obj2)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1), 0, 0); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "memmove" "', argument " "1"" of type '" "void *""'"); } - res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, &size2, &alloc2); + res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0); if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "memmove" "', argument " "2"" of type '" "void const *""'"); + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "memmove" "', argument " "2"" of type '" "void const *""'"); } - arg2 = (void *)(buf2); - arg3 = (size_t)(size2); + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "memmove" "', argument " "3"" of type '" "size_t""'"); + } + arg3 = (size_t)(val3); memmove(arg1,(void const *)arg2,arg3); resultobj = SWIG_Py_Void(); return resultobj; @@ -4386,7 +3885,7 @@ fail: SWIGINTERN PyObject *intp_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; - if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_intp, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } @@ -4523,7 +4022,7 @@ fail: SWIGINTERN PyObject *sizetp_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; - if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_sizetp, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } @@ -4660,7 +4159,7 @@ fail: SWIGINTERN PyObject *longp_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; - if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_longp, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } @@ -4797,7 +4296,7 @@ fail: SWIGINTERN PyObject *doublep_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; - if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_doublep, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } @@ -5260,76 +4759,51 @@ fail: SWIGINTERN PyObject *_wrap_grib_c_new_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; FILE *arg1 = (FILE *) 0 ; - int arg2 ; - char *arg3 = (char *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int val2 ; - int ecode2 = 0 ; - int res3 ; - char *buf3 = 0 ; - int alloc3 = 0 ; - int temp4 ; - int res4 = 0 ; - int val5 ; - int ecode5 = 0 ; + int *arg2 = (int *) 0 ; + int arg3 ; + int temp2 ; + int res2 = 0 ; + int val3 ; + int ecode3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - PyObject * obj4 = 0 ; int result; - if (!PyArg_ParseTuple(args,(char *)"OOOOO:grib_c_new_from_file",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail; + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_new_from_file",&obj0,&obj1,&obj2)) SWIG_fail; { - int fileDescriptor = PyObject_AsFileDescriptor(obj0); - /*printf("swig.i fileDescriptor=%d\n", fileDescriptor);*/ - if(fileDescriptor >= 0) { - /* Convert file descriptor to a FILE pointer */ - arg1 = fdopen(fileDescriptor,"rb"); // needs to be rb+ (or wb) for write - } - else { + if ( PyFile_Check(obj0) ){ + arg1 = PyFile_AsFile(obj0); + } else { PyErr_SetString(PyExc_TypeError, "f must be a file type."); return NULL; } } - ecode2 = SWIG_AsVal_int(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "grib_c_new_from_file" "', argument " "2"" of type '" "int""'"); - } - arg2 = (int)(val2); - res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_new_from_file" "', argument " "3"" of type '" "char *""'"); - } - arg3 = (char *)(buf3); - if (!(SWIG_IsOK((res4 = SWIG_ConvertPtr(obj3,SWIG_as_voidptrptr(&arg4),SWIGTYPE_p_int,0))))) { + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { int val; - int ecode = SWIG_AsVal_int(obj3, &val); + int ecode = SWIG_AsVal_int(obj1, &val); if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_file" "', argument " "4"" of type '" "int""'"); + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_file" "', argument " "2"" of type '" "int""'"); } - temp4 = (int)(val); - arg4 = &temp4; - res4 = SWIG_AddTmpMask(ecode); + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); } - ecode5 = SWIG_AsVal_int(obj4, &val5); - if (!SWIG_IsOK(ecode5)) { - SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "grib_c_new_from_file" "', argument " "5"" of type '" "int""'"); + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "grib_c_new_from_file" "', argument " "3"" of type '" "int""'"); } - arg5 = (int)(val5); - result = (int)grib_c_new_from_file(arg1,arg2,arg3,arg4,arg5); + arg3 = (int)(val3); + result = (int)grib_c_new_from_file(arg1,arg2,arg3); resultobj = SWIG_From_int((int)(result)); - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); } - if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); return resultobj; fail: - if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); return NULL; } @@ -5350,13 +4824,9 @@ SWIGINTERN PyObject *_wrap_grib_c_new_any_from_file(PyObject *SWIGUNUSEDPARM(sel if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_new_any_from_file",&obj0,&obj1,&obj2)) SWIG_fail; { - int fileDescriptor = PyObject_AsFileDescriptor(obj0); - /*printf("swig.i fileDescriptor=%d\n", fileDescriptor);*/ - if(fileDescriptor >= 0) { - /* Convert file descriptor to a FILE pointer */ - arg1 = fdopen(fileDescriptor,"rb"); // needs to be rb+ (or wb) for write - } - else { + if ( PyFile_Check(obj0) ){ + arg1 = PyFile_AsFile(obj0); + } else { PyErr_SetString(PyExc_TypeError, "f must be a file type."); return NULL; } @@ -5394,34 +4864,21 @@ SWIGINTERN PyObject *_wrap_grib_c_new_bufr_from_file(PyObject *SWIGUNUSEDPARM(se PyObject *resultobj = 0; FILE *arg1 = (FILE *) 0 ; int arg2 ; - char *arg3 = (char *) 0 ; - int arg4 ; - int *arg5 = (int *) 0 ; + int *arg3 = (int *) 0 ; int val2 ; int ecode2 = 0 ; - int res3 ; - char *buf3 = 0 ; - int alloc3 = 0 ; - int val4 ; - int ecode4 = 0 ; - int temp5 ; - int res5 = 0 ; + int temp3 ; + int res3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - PyObject * obj4 = 0 ; int result; - if (!PyArg_ParseTuple(args,(char *)"OOOOO:grib_c_new_bufr_from_file",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail; + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_new_bufr_from_file",&obj0,&obj1,&obj2)) SWIG_fail; { - int fileDescriptor = PyObject_AsFileDescriptor(obj0); - /*printf("swig.i fileDescriptor=%d\n", fileDescriptor);*/ - if(fileDescriptor >= 0) { - /* Convert file descriptor to a FILE pointer */ - arg1 = fdopen(fileDescriptor,"rb"); // needs to be rb+ (or wb) for write - } - else { + if ( PyFile_Check(obj0) ){ + arg1 = PyFile_AsFile(obj0); + } else { PyErr_SetString(PyExc_TypeError, "f must be a file type."); return NULL; } @@ -5431,38 +4888,26 @@ SWIGINTERN PyObject *_wrap_grib_c_new_bufr_from_file(PyObject *SWIGUNUSEDPARM(se SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "grib_c_new_bufr_from_file" "', argument " "2"" of type '" "int""'"); } arg2 = (int)(val2); - res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_new_bufr_from_file" "', argument " "3"" of type '" "char *""'"); - } - arg3 = (char *)(buf3); - ecode4 = SWIG_AsVal_int(obj3, &val4); - if (!SWIG_IsOK(ecode4)) { - SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "grib_c_new_bufr_from_file" "', argument " "4"" of type '" "int""'"); - } - arg4 = (int)(val4); - if (!(SWIG_IsOK((res5 = SWIG_ConvertPtr(obj4,SWIG_as_voidptrptr(&arg5),SWIGTYPE_p_int,0))))) { + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { int val; - int ecode = SWIG_AsVal_int(obj4, &val); + int ecode = SWIG_AsVal_int(obj2, &val); if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_bufr_from_file" "', argument " "5"" of type '" "int""'"); + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_bufr_from_file" "', argument " "3"" of type '" "int""'"); } - temp5 = (int)(val); - arg5 = &temp5; - res5 = SWIG_AddTmpMask(ecode); + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); } - result = (int)grib_c_new_bufr_from_file(arg1,arg2,arg3,arg4,arg5); + result = (int)grib_c_new_bufr_from_file(arg1,arg2,arg3); resultobj = SWIG_From_int((int)(result)); - if (SWIG_IsTmpObj(res5)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg5))); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); } else { - int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_int, new_flags)); + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); } - if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); return resultobj; fail: - if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); return NULL; } @@ -5483,13 +4928,9 @@ SWIGINTERN PyObject *_wrap_grib_c_new_gts_from_file(PyObject *SWIGUNUSEDPARM(sel if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_new_gts_from_file",&obj0,&obj1,&obj2)) SWIG_fail; { - int fileDescriptor = PyObject_AsFileDescriptor(obj0); - /*printf("swig.i fileDescriptor=%d\n", fileDescriptor);*/ - if(fileDescriptor >= 0) { - /* Convert file descriptor to a FILE pointer */ - arg1 = fdopen(fileDescriptor,"rb"); // needs to be rb+ (or wb) for write - } - else { + if ( PyFile_Check(obj0) ){ + arg1 = PyFile_AsFile(obj0); + } else { PyErr_SetString(PyExc_TypeError, "f must be a file type."); return NULL; } @@ -5539,13 +4980,9 @@ SWIGINTERN PyObject *_wrap_grib_c_new_metar_from_file(PyObject *SWIGUNUSEDPARM(s if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_new_metar_from_file",&obj0,&obj1,&obj2)) SWIG_fail; { - int fileDescriptor = PyObject_AsFileDescriptor(obj0); - /*printf("swig.i fileDescriptor=%d\n", fileDescriptor);*/ - if(fileDescriptor >= 0) { - /* Convert file descriptor to a FILE pointer */ - arg1 = fdopen(fileDescriptor,"rb"); // needs to be rb+ (or wb) for write - } - else { + if ( PyFile_Check(obj0) ){ + arg1 = PyFile_AsFile(obj0); + } else { PyErr_SetString(PyExc_TypeError, "f must be a file type."); return NULL; } @@ -6100,13 +5537,9 @@ SWIGINTERN PyObject *_wrap_grib_c_count_in_file(PyObject *SWIGUNUSEDPARM(self), arg2 = &temp2; if (!PyArg_ParseTuple(args,(char *)"O:grib_c_count_in_file",&obj0)) SWIG_fail; { - int fileDescriptor = PyObject_AsFileDescriptor(obj0); - /*printf("swig.i fileDescriptor=%d\n", fileDescriptor);*/ - if(fileDescriptor >= 0) { - /* Convert file descriptor to a FILE pointer */ - arg1 = fdopen(fileDescriptor,"rb"); // needs to be rb+ (or wb) for write - } - else { + if ( PyFile_Check(obj0) ){ + arg1 = PyFile_AsFile(obj0); + } else { PyErr_SetString(PyExc_TypeError, "f must be a file type."); return NULL; } @@ -6176,12 +5609,9 @@ SWIGINTERN PyObject *_wrap_grib_c_write(PyObject *SWIGUNUSEDPARM(self), PyObject res1 = SWIG_AddTmpMask(ecode); } { - int fileDescriptor = PyObject_AsFileDescriptor(obj1); - if(fileDescriptor >= 0) { - /* Convert file descriptor to a FILE pointer */ - arg2 = fdopen(fileDescriptor,"wb"); - } - else { + if ( PyFile_Check(obj1) ){ + arg2 = PyFile_AsFile(obj1); + } else { PyErr_SetString(PyExc_TypeError, "f must be a file type."); return NULL; } @@ -6591,12 +6021,9 @@ SWIGINTERN PyObject *_wrap_grib_c_multi_write(PyObject *SWIGUNUSEDPARM(self), Py res1 = SWIG_AddTmpMask(ecode); } { - int fileDescriptor = PyObject_AsFileDescriptor(obj1); - if(fileDescriptor >= 0) { - /* Convert file descriptor to a FILE pointer */ - arg2 = fdopen(fileDescriptor,"wb"); - } - else { + if ( PyFile_Check(obj1) ){ + arg2 = PyFile_AsFile(obj1); + } else { PyErr_SetString(PyExc_TypeError, "f must be a file type."); return NULL; } @@ -7798,7 +7225,7 @@ SWIGINTERN PyObject *_wrap_grib_c_get_string(PyObject *SWIGUNUSEDPARM(self), PyO if (!SWIG_IsOK(res3)) { SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_get_string" "', argument " "3"" of type '" "(char* string_val, size_t* string_size)""'"); } - buff3= (char *)calloc(n3+1, sizeof(char)); + buff3= (char *)malloc((n3+1)*sizeof(char)); arg3 = (char *)(buff3); size3 = (size_t)(n3); arg4 = &size3; @@ -8818,8 +8245,7 @@ SWIGINTERN PyObject *_wrap_grib_set_double_ndarray(PyObject *SWIGUNUSEDPARM(self npy_intp size[1] = { -1 }; - array3 = obj_to_array_contiguous_allow_conversion(obj2, - NPY_DOUBLE, + array3 = obj_to_array_contiguous_allow_conversion(obj2, NPY_DOUBLE, &is_new_object3); if (!array3 || !require_dimensions(array3, 1) || !require_size(array3, size, 1)) SWIG_fail; @@ -8888,8 +8314,7 @@ SWIGINTERN PyObject *_wrap_grib_set_long_ndarray(PyObject *SWIGUNUSEDPARM(self), npy_intp size[1] = { -1 }; - array3 = obj_to_array_contiguous_allow_conversion(obj2, - NPY_LONG, + array3 = obj_to_array_contiguous_allow_conversion(obj2, NPY_LONG, &is_new_object3); if (!array3 || !require_dimensions(array3, 1) || !require_size(array3, size, 1)) SWIG_fail; @@ -8972,7 +8397,7 @@ SWIGINTERN PyObject *_wrap_grib_get_double_ndarray(PyObject *SWIGUNUSEDPARM(self result = (int)grib_get_double_ndarray(arg1,arg2,arg3,arg4); resultobj = SWIG_From_int((int)(result)); { - resultobj = SWIG_Python_AppendOutput(resultobj,(PyObject*)array3); + resultobj = SWIG_Python_AppendOutput(resultobj,array3); } if (SWIG_IsNewObj(res1)) free((char*)arg1); if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); @@ -9036,7 +8461,7 @@ SWIGINTERN PyObject *_wrap_grib_get_long_ndarray(PyObject *SWIGUNUSEDPARM(self), result = (int)grib_get_long_ndarray(arg1,arg2,arg3,arg4); resultobj = SWIG_From_int((int)(result)); { - resultobj = SWIG_Python_AppendOutput(resultobj,(PyObject*)array3); + resultobj = SWIG_Python_AppendOutput(resultobj,array3); } if (SWIG_IsNewObj(res1)) free((char*)arg1); if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); @@ -9090,8 +8515,7 @@ SWIGINTERN PyObject *_wrap_grib_get_double_ndelements(PyObject *SWIGUNUSEDPARM(s npy_intp size[1] = { -1 }; - array3 = obj_to_array_contiguous_allow_conversion(obj2, - NPY_INT, + array3 = obj_to_array_contiguous_allow_conversion(obj2, NPY_INT, &is_new_object3); if (!array3 || !require_dimensions(array3, 1) || !require_size(array3, size, 1)) SWIG_fail; @@ -9117,7 +8541,7 @@ SWIGINTERN PyObject *_wrap_grib_get_double_ndelements(PyObject *SWIGUNUSEDPARM(s result = (int)grib_get_double_ndelements(arg1,arg2,arg3,arg4,arg5,arg6); resultobj = SWIG_From_int((int)(result)); { - resultobj = SWIG_Python_AppendOutput(resultobj,(PyObject*)array5); + resultobj = SWIG_Python_AppendOutput(resultobj,array5); } if (SWIG_IsNewObj(res1)) free((char*)arg1); if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); @@ -9802,18 +9226,18 @@ static swig_const_info swig_const_table[] = { #endif /* ----------------------------------------------------------------------------- * Type initialization: - * This problem is tough by the requirement that no dynamic - * memory is used. Also, since swig_type_info structures store pointers to + * This problem is tough by the requirement that no dynamic + * memory is used. Also, since swig_type_info structures store pointers to * swig_cast_info structures and swig_cast_info structures store pointers back - * to swig_type_info structures, we need some lookup code at initialization. - * The idea is that swig generates all the structures that are needed. - * The runtime then collects these partially filled structures. - * The SWIG_InitializeModule function takes these initial arrays out of + * to swig_type_info structures, we need some lookup code at initialization. + * The idea is that swig generates all the structures that are needed. + * The runtime then collects these partially filled structures. + * The SWIG_InitializeModule function takes these initial arrays out of * swig_module, and does all the lookup, filling in the swig_module.types * array with the correct data and linking the correct swig_cast_info * structures together. * - * The generated swig_type_info structures are assigned statically to an initial + * The generated swig_type_info structures are assigned staticly to an initial * array. We just loop through that array, and handle each type individually. * First we lookup if this type has been already loaded, and if so, use the * loaded structure instead of the generated one. Then we have to fill in the @@ -9823,17 +9247,17 @@ static swig_const_info swig_const_table[] = { * a column is one of the swig_cast_info structures for that type. * The cast_initial array is actually an array of arrays, because each row has * a variable number of columns. So to actually build the cast linked list, - * we find the array of casts associated with the type, and loop through it + * we find the array of casts associated with the type, and loop through it * adding the casts to the list. The one last trick we need to do is making * sure the type pointer in the swig_cast_info struct is correct. * - * First off, we lookup the cast->type name to see if it is already loaded. + * First off, we lookup the cast->type name to see if it is already loaded. * There are three cases to handle: * 1) If the cast->type has already been loaded AND the type we are adding * casting info to has not been loaded (it is in this module), THEN we * replace the cast->type pointer with the type pointer that has already * been loaded. - * 2) If BOTH types (the one we are adding casting info to, and the + * 2) If BOTH types (the one we are adding casting info to, and the * cast->type) are loaded, THEN the cast info has already been loaded by * the previous module so we just ignore it. * 3) Finally, if cast->type has not already been loaded, then we add that @@ -9857,7 +9281,9 @@ SWIGRUNTIME void SWIG_InitializeModule(void *clientdata) { size_t i; swig_module_info *module_head, *iter; - int init; + int found, init; + + clientdata = clientdata; /* check to see if the circular list has been setup, if not, set it up */ if (swig_module.next==0) { @@ -9876,23 +9302,27 @@ SWIG_InitializeModule(void *clientdata) { /* This is the first module loaded for this interpreter */ /* so set the swig module into the interpreter */ SWIG_SetModule(clientdata, &swig_module); + module_head = &swig_module; } else { /* the interpreter has loaded a SWIG module, but has it loaded this one? */ + found=0; iter=module_head; do { if (iter==&swig_module) { - /* Our module is already in the list, so there's nothing more to do. */ - return; + found=1; + break; } iter=iter->next; } while (iter!= module_head); - /* otherwise we must add our module into the list */ + /* if the is found in the list, then all is done and we may leave */ + if (found) return; + /* otherwise we must add out module into the list */ swig_module.next = module_head->next; module_head->next = &swig_module; } - /* When multiple interpreters are used, a module could have already been initialized in + /* When multiple interpeters are used, a module could have already been initialized in a different interpreter, but not yet have a pointer in this interpreter. In this case, we do not want to continue adding types... everything should be set up already */ @@ -10139,7 +9569,7 @@ extern "C" { var = var->next; } if (res == NULL && !PyErr_Occurred()) { - PyErr_Format(PyExc_AttributeError, "Unknown C global variable '%s'", n); + PyErr_SetString(PyExc_NameError,"Unknown C global variable"); } return res; } @@ -10156,7 +9586,7 @@ extern "C" { var = var->next; } if (res == 1 && !PyErr_Occurred()) { - PyErr_Format(PyExc_AttributeError, "Unknown C global variable '%s'", n); + PyErr_SetString(PyExc_NameError,"Unknown C global variable"); } return res; } @@ -10165,22 +9595,24 @@ extern "C" { swig_varlink_type(void) { static char varlink__doc__[] = "Swig var link object"; static PyTypeObject varlink_type; - static int type_init = 0; + static int type_init = 0; if (!type_init) { - const PyTypeObject tmp = { + const PyTypeObject tmp + = { + /* PyObject header changed in Python 3 */ #if PY_VERSION_HEX >= 0x03000000 - PyVarObject_HEAD_INIT(NULL, 0) + PyVarObject_HEAD_INIT(&PyType_Type, 0) #else PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ + 0, /* Number of items in variable part (ob_size) */ #endif - (char *)"swigvarlink", /* tp_name */ - sizeof(swig_varlinkobject), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor) swig_varlink_dealloc, /* tp_dealloc */ - (printfunc) swig_varlink_print, /* tp_print */ - (getattrfunc) swig_varlink_getattr, /* tp_getattr */ - (setattrfunc) swig_varlink_setattr, /* tp_setattr */ + (char *)"swigvarlink", /* Type name (tp_name) */ + sizeof(swig_varlinkobject), /* Basic size (tp_basicsize) */ + 0, /* Itemsize (tp_itemsize) */ + (destructor) swig_varlink_dealloc, /* Deallocator (tp_dealloc) */ + (printfunc) swig_varlink_print, /* Print (tp_print) */ + (getattrfunc) swig_varlink_getattr, /* get attr (tp_getattr) */ + (setattrfunc) swig_varlink_setattr, /* Set attr (tp_setattr) */ 0, /* tp_compare */ (reprfunc) swig_varlink_repr, /* tp_repr */ 0, /* tp_as_number */ @@ -10204,30 +9636,16 @@ extern "C" { #if PY_VERSION_HEX >= 0x02030000 0, /* tp_del */ #endif -#if PY_VERSION_HEX >= 0x02060000 - 0, /* tp_version_tag */ -#endif -#if PY_VERSION_HEX >= 0x03040000 - 0, /* tp_finalize */ -#endif #ifdef COUNT_ALLOCS - 0, /* tp_allocs */ - 0, /* tp_frees */ - 0, /* tp_maxalloc */ -#if PY_VERSION_HEX >= 0x02050000 - 0, /* tp_prev */ -#endif - 0 /* tp_next */ + 0,0,0,0 /* tp_alloc -> tp_next */ #endif }; varlink_type = tmp; - type_init = 1; -#if PY_VERSION_HEX < 0x02020000 + /* for Python 3 we already assigned ob_type in PyVarObject_HEAD_INIT() */ +#if PY_VERSION_HEX < 0x03000000 varlink_type.ob_type = &PyType_Type; -#else - if (PyType_Ready(&varlink_type) < 0) - return NULL; #endif + type_init = 1; } return &varlink_type; } @@ -10278,7 +9696,7 @@ extern "C" { for (i = 0; constants[i].type; ++i) { switch(constants[i].type) { case SWIG_PY_POINTER: - obj = SWIG_InternalNewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0); + obj = SWIG_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0); break; case SWIG_PY_BINARY: obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype)); @@ -10306,9 +9724,7 @@ extern "C" { size_t i; for (i = 0; methods[i].ml_name; ++i) { const char *c = methods[i].ml_doc; - if (!c) continue; - c = strstr(c, "swig_ptr: "); - if (c) { + if (c && (c = strstr(c, "swig_ptr: "))) { int j; swig_const_info *ci = 0; const char *name = c + 10; @@ -10320,15 +9736,15 @@ extern "C" { } } if (ci) { - void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0; - if (ptr) { - size_t shift = (ci->ptype) - types; - swig_type_info *ty = types_initial[shift]; - size_t ldoc = (c - methods[i].ml_doc); - size_t lptr = strlen(ty->name)+2*sizeof(void*)+2; - char *ndoc = (char*)malloc(ldoc + lptr + 10); - if (ndoc) { - char *buff = ndoc; + size_t shift = (ci->ptype) - types; + swig_type_info *ty = types_initial[shift]; + size_t ldoc = (c - methods[i].ml_doc); + size_t lptr = strlen(ty->name)+2*sizeof(void*)+2; + char *ndoc = (char*)malloc(ldoc + lptr + 10); + if (ndoc) { + char *buff = ndoc; + void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0; + if (ptr) { strncpy(buff, methods[i].ml_doc, ldoc); buff += ldoc; strncpy(buff, "swig_ptr: ", 10); @@ -10361,19 +9777,10 @@ PyObject* void #endif SWIG_init(void) { - PyObject *m, *d, *md; + PyObject *m, *d; #if PY_VERSION_HEX >= 0x03000000 static struct PyModuleDef SWIG_module = { -# if PY_VERSION_HEX >= 0x03020000 PyModuleDef_HEAD_INIT, -# else - { - PyObject_HEAD_INIT(NULL) - NULL, /* m_init */ - 0, /* m_index */ - NULL, /* m_copy */ - }, -# endif (char *) SWIG_name, NULL, -1, @@ -10385,46 +9792,6 @@ SWIG_init(void) { }; #endif -#if defined(SWIGPYTHON_BUILTIN) - static SwigPyClientData SwigPyObject_clientdata = { - 0, 0, 0, 0, 0, 0, 0 - }; - static PyGetSetDef this_getset_def = { - (char *)"this", &SwigPyBuiltin_ThisClosure, NULL, NULL, NULL - }; - static SwigPyGetSet thisown_getset_closure = { - (PyCFunction) SwigPyObject_own, - (PyCFunction) SwigPyObject_own - }; - static PyGetSetDef thisown_getset_def = { - (char *)"thisown", SwigPyBuiltin_GetterClosure, SwigPyBuiltin_SetterClosure, NULL, &thisown_getset_closure - }; - PyTypeObject *builtin_pytype; - int builtin_base_count; - swig_type_info *builtin_basetype; - PyObject *tuple; - PyGetSetDescrObject *static_getset; - PyTypeObject *metatype; - PyTypeObject *swigpyobject; - SwigPyClientData *cd; - PyObject *public_interface, *public_symbol; - PyObject *this_descr; - PyObject *thisown_descr; - PyObject *self = 0; - int i; - - (void)builtin_pytype; - (void)builtin_base_count; - (void)builtin_basetype; - (void)tuple; - (void)static_getset; - (void)self; - - /* Metaclass is used to implement static member variables */ - metatype = SwigPyObjectType(); - assert(metatype); -#endif - /* Fix SwigMethods to carry the callback ptrs when needed */ SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial); @@ -10433,52 +9800,12 @@ SWIG_init(void) { #else m = Py_InitModule((char *) SWIG_name, SwigMethods); #endif - - md = d = PyModule_GetDict(m); - (void)md; + d = PyModule_GetDict(m); SWIG_InitializeModule(0); - -#ifdef SWIGPYTHON_BUILTIN - swigpyobject = SwigPyObject_TypeOnce(); - - SwigPyObject_stype = SWIG_MangledTypeQuery("_p_SwigPyObject"); - assert(SwigPyObject_stype); - cd = (SwigPyClientData*) SwigPyObject_stype->clientdata; - if (!cd) { - SwigPyObject_stype->clientdata = &SwigPyObject_clientdata; - SwigPyObject_clientdata.pytype = swigpyobject; - } else if (swigpyobject->tp_basicsize != cd->pytype->tp_basicsize) { - PyErr_SetString(PyExc_RuntimeError, "Import error: attempted to load two incompatible swig-generated modules."); -# if PY_VERSION_HEX >= 0x03000000 - return NULL; -# else - return; -# endif - } - - /* All objects have a 'this' attribute */ - this_descr = PyDescr_NewGetSet(SwigPyObject_type(), &this_getset_def); - (void)this_descr; - - /* All objects have a 'thisown' attribute */ - thisown_descr = PyDescr_NewGetSet(SwigPyObject_type(), &thisown_getset_def); - (void)thisown_descr; - - public_interface = PyList_New(0); - public_symbol = 0; - (void)public_symbol; - - PyDict_SetItemString(md, "__all__", public_interface); - Py_DECREF(public_interface); - for (i = 0; SwigMethods[i].ml_name != NULL; ++i) - SwigPyBuiltin_AddPublicSymbol(public_interface, SwigMethods[i].ml_name); - for (i = 0; swig_const_table[i].name != 0; ++i) - SwigPyBuiltin_AddPublicSymbol(public_interface, swig_const_table[i].name); -#endif - SWIG_InstallConstants(d,swig_const_table); + SWIG_Python_SetConstant(d, "GRIB_SUCCESS",SWIG_From_int((int)(0))); SWIG_Python_SetConstant(d, "GRIB_END_OF_FILE",SWIG_From_int((int)(-1))); SWIG_Python_SetConstant(d, "GRIB_INTERNAL_ERROR",SWIG_From_int((int)(-2))); diff --git a/python/swig_wrap_numpy.py b/python/swig_wrap_numpy.py index 6eec5fc36..411433758 100644 --- a/python/swig_wrap_numpy.py +++ b/python/swig_wrap_numpy.py @@ -1,22 +1,12 @@ # This file was automatically generated by SWIG (http://www.swig.org). -# Version 3.0.12 +# Version 1.3.40 # # Do not make changes to this file unless you know what you are doing--modify # the SWIG interface file instead. +# This file is compatible with both classic and new-style classes. -from sys import version_info as _swig_python_version_info -if _swig_python_version_info >= (2, 7, 0): - def swig_import_helper(): - import importlib - pkg = __name__.rpartition('.')[0] - mname = '.'.join((pkg, '_gribapi_swig')).lstrip('.') - try: - return importlib.import_module(mname) - except ImportError: - return importlib.import_module('_gribapi_swig') - _gribapi_swig = swig_import_helper() - del swig_import_helper -elif _swig_python_version_info >= (2, 6, 0): +from sys import version_info +if version_info >= (2,6,0): def swig_import_helper(): from os.path import dirname import imp @@ -26,82 +16,63 @@ elif _swig_python_version_info >= (2, 6, 0): except ImportError: import _gribapi_swig return _gribapi_swig - try: - _mod = imp.load_module('_gribapi_swig', fp, pathname, description) - finally: - if fp is not None: + if fp is not None: + try: + _mod = imp.load_module('_gribapi_swig', fp, pathname, description) + finally: fp.close() - return _mod + return _mod _gribapi_swig = swig_import_helper() del swig_import_helper else: import _gribapi_swig -del _swig_python_version_info - +del version_info try: _swig_property = property except NameError: - pass # Python < 2.2 doesn't have 'property'. - -try: - import builtins as __builtin__ -except ImportError: - import __builtin__ - -def _swig_setattr_nondynamic(self, class_type, name, value, static=1): - if (name == "thisown"): - return self.this.own(value) + pass # Python < 2.2 doesn't have 'property'. +def _swig_setattr_nondynamic(self,class_type,name,value,static=1): + if (name == "thisown"): return self.this.own(value) if (name == "this"): if type(value).__name__ == 'SwigPyObject': self.__dict__[name] = value return - method = class_type.__swig_setmethods__.get(name, None) - if method: - return method(self, value) - if (not static): - if _newclass: - object.__setattr__(self, name, value) - else: - self.__dict__[name] = value + method = class_type.__swig_setmethods__.get(name,None) + if method: return method(self,value) + if (not static) or hasattr(self,name): + self.__dict__[name] = value else: raise AttributeError("You cannot add attributes to %s" % self) +def _swig_setattr(self,class_type,name,value): + return _swig_setattr_nondynamic(self,class_type,name,value,0) -def _swig_setattr(self, class_type, name, value): - return _swig_setattr_nondynamic(self, class_type, name, value, 0) - - -def _swig_getattr(self, class_type, name): - if (name == "thisown"): - return self.this.own() - method = class_type.__swig_getmethods__.get(name, None) - if method: - return method(self) - raise AttributeError("'%s' object has no attribute '%s'" % (class_type.__name__, name)) - +def _swig_getattr(self,class_type,name): + if (name == "thisown"): return self.this.own() + method = class_type.__swig_getmethods__.get(name,None) + if method: return method(self) + raise AttributeError(name) def _swig_repr(self): - try: - strthis = "proxy of " + self.this.__repr__() - except __builtin__.Exception: - strthis = "" + try: strthis = "proxy of " + self.this.__repr__() + except: strthis = "" return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,) try: _object = object _newclass = 1 -except __builtin__.Exception: - class _object: - pass +except AttributeError: + class _object : pass _newclass = 0 -def cdata(ptr: 'void *', nelements: 'size_t'=1) -> "SWIGCDATA": - return _gribapi_swig.cdata(ptr, nelements) + +def cdata(*args): + return _gribapi_swig.cdata(*args) cdata = _gribapi_swig.cdata -def memmove(data: 'void *', indata: 'void const *') -> "void": - return _gribapi_swig.memmove(data, indata) +def memmove(*args): + return _gribapi_swig.memmove(*args) memmove = _gribapi_swig.memmove GRIB_SUCCESS = _gribapi_swig.GRIB_SUCCESS GRIB_END_OF_FILE = _gribapi_swig.GRIB_END_OF_FILE @@ -176,33 +147,22 @@ class intp(_object): __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, intp, name) __repr__ = _swig_repr - - def __init__(self): + def __init__(self): this = _gribapi_swig.new_intp() - try: - self.this.append(this) - except __builtin__.Exception: - self.this = this + try: self.this.append(this) + except: self.this = this __swig_destroy__ = _gribapi_swig.delete_intp - __del__ = lambda self: None - - def assign(self, value: 'int') -> "void": - return _gribapi_swig.intp_assign(self, value) - - def value(self) -> "int": - return _gribapi_swig.intp_value(self) - - def cast(self) -> "int *": - return _gribapi_swig.intp_cast(self) - if _newclass: - frompointer = staticmethod(_gribapi_swig.intp_frompointer) - else: - frompointer = _gribapi_swig.intp_frompointer + __del__ = lambda self : None; + def assign(self, *args): return _gribapi_swig.intp_assign(self, *args) + def value(self): return _gribapi_swig.intp_value(self) + def cast(self): return _gribapi_swig.intp_cast(self) + __swig_getmethods__["frompointer"] = lambda x: _gribapi_swig.intp_frompointer + if _newclass:frompointer = staticmethod(_gribapi_swig.intp_frompointer) intp_swigregister = _gribapi_swig.intp_swigregister intp_swigregister(intp) -def intp_frompointer(t: 'int *') -> "intp *": - return _gribapi_swig.intp_frompointer(t) +def intp_frompointer(*args): + return _gribapi_swig.intp_frompointer(*args) intp_frompointer = _gribapi_swig.intp_frompointer class sizetp(_object): @@ -211,33 +171,22 @@ class sizetp(_object): __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, sizetp, name) __repr__ = _swig_repr - - def __init__(self): + def __init__(self): this = _gribapi_swig.new_sizetp() - try: - self.this.append(this) - except __builtin__.Exception: - self.this = this + try: self.this.append(this) + except: self.this = this __swig_destroy__ = _gribapi_swig.delete_sizetp - __del__ = lambda self: None - - def assign(self, value: 'size_t') -> "void": - return _gribapi_swig.sizetp_assign(self, value) - - def value(self) -> "size_t": - return _gribapi_swig.sizetp_value(self) - - def cast(self) -> "size_t *": - return _gribapi_swig.sizetp_cast(self) - if _newclass: - frompointer = staticmethod(_gribapi_swig.sizetp_frompointer) - else: - frompointer = _gribapi_swig.sizetp_frompointer + __del__ = lambda self : None; + def assign(self, *args): return _gribapi_swig.sizetp_assign(self, *args) + def value(self): return _gribapi_swig.sizetp_value(self) + def cast(self): return _gribapi_swig.sizetp_cast(self) + __swig_getmethods__["frompointer"] = lambda x: _gribapi_swig.sizetp_frompointer + if _newclass:frompointer = staticmethod(_gribapi_swig.sizetp_frompointer) sizetp_swigregister = _gribapi_swig.sizetp_swigregister sizetp_swigregister(sizetp) -def sizetp_frompointer(t: 'size_t *') -> "sizetp *": - return _gribapi_swig.sizetp_frompointer(t) +def sizetp_frompointer(*args): + return _gribapi_swig.sizetp_frompointer(*args) sizetp_frompointer = _gribapi_swig.sizetp_frompointer class longp(_object): @@ -246,33 +195,22 @@ class longp(_object): __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, longp, name) __repr__ = _swig_repr - - def __init__(self): + def __init__(self): this = _gribapi_swig.new_longp() - try: - self.this.append(this) - except __builtin__.Exception: - self.this = this + try: self.this.append(this) + except: self.this = this __swig_destroy__ = _gribapi_swig.delete_longp - __del__ = lambda self: None - - def assign(self, value: 'long') -> "void": - return _gribapi_swig.longp_assign(self, value) - - def value(self) -> "long": - return _gribapi_swig.longp_value(self) - - def cast(self) -> "long *": - return _gribapi_swig.longp_cast(self) - if _newclass: - frompointer = staticmethod(_gribapi_swig.longp_frompointer) - else: - frompointer = _gribapi_swig.longp_frompointer + __del__ = lambda self : None; + def assign(self, *args): return _gribapi_swig.longp_assign(self, *args) + def value(self): return _gribapi_swig.longp_value(self) + def cast(self): return _gribapi_swig.longp_cast(self) + __swig_getmethods__["frompointer"] = lambda x: _gribapi_swig.longp_frompointer + if _newclass:frompointer = staticmethod(_gribapi_swig.longp_frompointer) longp_swigregister = _gribapi_swig.longp_swigregister longp_swigregister(longp) -def longp_frompointer(t: 'long *') -> "longp *": - return _gribapi_swig.longp_frompointer(t) +def longp_frompointer(*args): + return _gribapi_swig.longp_frompointer(*args) longp_frompointer = _gribapi_swig.longp_frompointer class doublep(_object): @@ -281,467 +219,455 @@ class doublep(_object): __swig_getmethods__ = {} __getattr__ = lambda self, name: _swig_getattr(self, doublep, name) __repr__ = _swig_repr - - def __init__(self): + def __init__(self): this = _gribapi_swig.new_doublep() - try: - self.this.append(this) - except __builtin__.Exception: - self.this = this + try: self.this.append(this) + except: self.this = this __swig_destroy__ = _gribapi_swig.delete_doublep - __del__ = lambda self: None - - def assign(self, value: 'double') -> "void": - return _gribapi_swig.doublep_assign(self, value) - - def value(self) -> "double": - return _gribapi_swig.doublep_value(self) - - def cast(self) -> "double *": - return _gribapi_swig.doublep_cast(self) - if _newclass: - frompointer = staticmethod(_gribapi_swig.doublep_frompointer) - else: - frompointer = _gribapi_swig.doublep_frompointer + __del__ = lambda self : None; + def assign(self, *args): return _gribapi_swig.doublep_assign(self, *args) + def value(self): return _gribapi_swig.doublep_value(self) + def cast(self): return _gribapi_swig.doublep_cast(self) + __swig_getmethods__["frompointer"] = lambda x: _gribapi_swig.doublep_frompointer + if _newclass:frompointer = staticmethod(_gribapi_swig.doublep_frompointer) doublep_swigregister = _gribapi_swig.doublep_swigregister doublep_swigregister(doublep) -def doublep_frompointer(t: 'double *') -> "doublep *": - return _gribapi_swig.doublep_frompointer(t) +def doublep_frompointer(*args): + return _gribapi_swig.doublep_frompointer(*args) doublep_frompointer = _gribapi_swig.doublep_frompointer -def new_doubleArray(nelements: 'size_t') -> "double *": - return _gribapi_swig.new_doubleArray(nelements) +def new_doubleArray(*args): + return _gribapi_swig.new_doubleArray(*args) new_doubleArray = _gribapi_swig.new_doubleArray -def delete_doubleArray(ary: 'double *') -> "void": - return _gribapi_swig.delete_doubleArray(ary) +def delete_doubleArray(*args): + return _gribapi_swig.delete_doubleArray(*args) delete_doubleArray = _gribapi_swig.delete_doubleArray -def doubleArray_getitem(ary: 'double *', index: 'size_t') -> "double": - return _gribapi_swig.doubleArray_getitem(ary, index) +def doubleArray_getitem(*args): + return _gribapi_swig.doubleArray_getitem(*args) doubleArray_getitem = _gribapi_swig.doubleArray_getitem -def doubleArray_setitem(ary: 'double *', index: 'size_t', value: 'double') -> "void": - return _gribapi_swig.doubleArray_setitem(ary, index, value) +def doubleArray_setitem(*args): + return _gribapi_swig.doubleArray_setitem(*args) doubleArray_setitem = _gribapi_swig.doubleArray_setitem -def new_longArray(nelements: 'size_t') -> "long *": - return _gribapi_swig.new_longArray(nelements) +def new_longArray(*args): + return _gribapi_swig.new_longArray(*args) new_longArray = _gribapi_swig.new_longArray -def delete_longArray(ary: 'long *') -> "void": - return _gribapi_swig.delete_longArray(ary) +def delete_longArray(*args): + return _gribapi_swig.delete_longArray(*args) delete_longArray = _gribapi_swig.delete_longArray -def longArray_getitem(ary: 'long *', index: 'size_t') -> "long": - return _gribapi_swig.longArray_getitem(ary, index) +def longArray_getitem(*args): + return _gribapi_swig.longArray_getitem(*args) longArray_getitem = _gribapi_swig.longArray_getitem -def longArray_setitem(ary: 'long *', index: 'size_t', value: 'long') -> "void": - return _gribapi_swig.longArray_setitem(ary, index, value) +def longArray_setitem(*args): + return _gribapi_swig.longArray_setitem(*args) longArray_setitem = _gribapi_swig.longArray_setitem -def new_intArray(nelements: 'size_t') -> "int *": - return _gribapi_swig.new_intArray(nelements) +def new_intArray(*args): + return _gribapi_swig.new_intArray(*args) new_intArray = _gribapi_swig.new_intArray -def delete_intArray(ary: 'int *') -> "void": - return _gribapi_swig.delete_intArray(ary) +def delete_intArray(*args): + return _gribapi_swig.delete_intArray(*args) delete_intArray = _gribapi_swig.delete_intArray -def intArray_getitem(ary: 'int *', index: 'size_t') -> "int": - return _gribapi_swig.intArray_getitem(ary, index) +def intArray_getitem(*args): + return _gribapi_swig.intArray_getitem(*args) intArray_getitem = _gribapi_swig.intArray_getitem -def intArray_setitem(ary: 'int *', index: 'size_t', value: 'int') -> "void": - return _gribapi_swig.intArray_setitem(ary, index, value) +def intArray_setitem(*args): + return _gribapi_swig.intArray_setitem(*args) intArray_setitem = _gribapi_swig.intArray_setitem -def new_stringArray(nelements: 'size_t') -> "char **": - return _gribapi_swig.new_stringArray(nelements) +def new_stringArray(*args): + return _gribapi_swig.new_stringArray(*args) new_stringArray = _gribapi_swig.new_stringArray -def delete_stringArray(ary: 'char **') -> "void": - return _gribapi_swig.delete_stringArray(ary) +def delete_stringArray(*args): + return _gribapi_swig.delete_stringArray(*args) delete_stringArray = _gribapi_swig.delete_stringArray -def stringArray_getitem(ary: 'char **', index: 'size_t') -> "char *": - return _gribapi_swig.stringArray_getitem(ary, index) +def stringArray_getitem(*args): + return _gribapi_swig.stringArray_getitem(*args) stringArray_getitem = _gribapi_swig.stringArray_getitem -def stringArray_setitem(ary: 'char **', index: 'size_t', value: 'char *') -> "void": - return _gribapi_swig.stringArray_setitem(ary, index, value) +def stringArray_setitem(*args): + return _gribapi_swig.stringArray_setitem(*args) stringArray_setitem = _gribapi_swig.stringArray_setitem -def grib_c_new_from_file(f: 'FILE *', fd: 'int', fname: 'char *', INOUT: 'int *', headers_only: 'int') -> "int *": - return _gribapi_swig.grib_c_new_from_file(f, fd, fname, INOUT, headers_only) +def grib_c_new_from_file(*args): + return _gribapi_swig.grib_c_new_from_file(*args) grib_c_new_from_file = _gribapi_swig.grib_c_new_from_file -def grib_c_new_any_from_file(f: 'FILE *', headers_only: 'int', INOUT: 'int *') -> "int *": - return _gribapi_swig.grib_c_new_any_from_file(f, headers_only, INOUT) +def grib_c_new_any_from_file(*args): + return _gribapi_swig.grib_c_new_any_from_file(*args) grib_c_new_any_from_file = _gribapi_swig.grib_c_new_any_from_file -def grib_c_new_bufr_from_file(f: 'FILE *', fd: 'int', fname: 'char *', headers_only: 'int', INOUT: 'int *') -> "int *": - return _gribapi_swig.grib_c_new_bufr_from_file(f, fd, fname, headers_only, INOUT) +def grib_c_new_bufr_from_file(*args): + return _gribapi_swig.grib_c_new_bufr_from_file(*args) grib_c_new_bufr_from_file = _gribapi_swig.grib_c_new_bufr_from_file -def grib_c_new_gts_from_file(f: 'FILE *', headers_only: 'int', INOUT: 'int *') -> "int *": - return _gribapi_swig.grib_c_new_gts_from_file(f, headers_only, INOUT) +def grib_c_new_gts_from_file(*args): + return _gribapi_swig.grib_c_new_gts_from_file(*args) grib_c_new_gts_from_file = _gribapi_swig.grib_c_new_gts_from_file -def grib_c_new_metar_from_file(f: 'FILE *', headers_only: 'int', INOUT: 'int *') -> "int *": - return _gribapi_swig.grib_c_new_metar_from_file(f, headers_only, INOUT) +def grib_c_new_metar_from_file(*args): + return _gribapi_swig.grib_c_new_metar_from_file(*args) grib_c_new_metar_from_file = _gribapi_swig.grib_c_new_metar_from_file -def grib_c_iterator_new(arg1: 'int *', arg3: 'int *') -> "int *": - return _gribapi_swig.grib_c_iterator_new(arg1, arg3) +def grib_c_iterator_new(*args): + return _gribapi_swig.grib_c_iterator_new(*args) grib_c_iterator_new = _gribapi_swig.grib_c_iterator_new -def grib_c_keys_iterator_new(INPUT: 'int *', name_space: 'char *') -> "int *": - return _gribapi_swig.grib_c_keys_iterator_new(INPUT, name_space) +def grib_c_keys_iterator_new(*args): + return _gribapi_swig.grib_c_keys_iterator_new(*args) grib_c_keys_iterator_new = _gribapi_swig.grib_c_keys_iterator_new -def codes_c_bufr_keys_iterator_new(INPUT: 'int *') -> "int *": - return _gribapi_swig.codes_c_bufr_keys_iterator_new(INPUT) +def codes_c_bufr_keys_iterator_new(*args): + return _gribapi_swig.codes_c_bufr_keys_iterator_new(*args) codes_c_bufr_keys_iterator_new = _gribapi_swig.codes_c_bufr_keys_iterator_new -def grib_c_grib_new_from_samples(INOUT: 'int *', name: 'char *') -> "int *": - return _gribapi_swig.grib_c_grib_new_from_samples(INOUT, name) +def grib_c_grib_new_from_samples(*args): + return _gribapi_swig.grib_c_grib_new_from_samples(*args) grib_c_grib_new_from_samples = _gribapi_swig.grib_c_grib_new_from_samples -def grib_c_bufr_new_from_samples(INOUT: 'int *', name: 'char *') -> "int *": - return _gribapi_swig.grib_c_bufr_new_from_samples(INOUT, name) +def grib_c_bufr_new_from_samples(*args): + return _gribapi_swig.grib_c_bufr_new_from_samples(*args) grib_c_bufr_new_from_samples = _gribapi_swig.grib_c_bufr_new_from_samples -def grib_c_index_new_from_file(file: 'char *', keys: 'char *') -> "int *": - return _gribapi_swig.grib_c_index_new_from_file(file, keys) +def grib_c_index_new_from_file(*args): + return _gribapi_swig.grib_c_index_new_from_file(*args) grib_c_index_new_from_file = _gribapi_swig.grib_c_index_new_from_file -def grib_c_index_add_file(INPUT: 'int *', file: 'char *') -> "int": - return _gribapi_swig.grib_c_index_add_file(INPUT, file) +def grib_c_index_add_file(*args): + return _gribapi_swig.grib_c_index_add_file(*args) grib_c_index_add_file = _gribapi_swig.grib_c_index_add_file -def grib_c_new_from_index(INPUT: 'int *', INOUT: 'int *') -> "int *": - return _gribapi_swig.grib_c_new_from_index(INPUT, INOUT) +def grib_c_new_from_index(*args): + return _gribapi_swig.grib_c_new_from_index(*args) grib_c_new_from_index = _gribapi_swig.grib_c_new_from_index -def grib_c_index_write(INPUT: 'int *', file: 'char *') -> "int": - return _gribapi_swig.grib_c_index_write(INPUT, file) +def grib_c_index_write(*args): + return _gribapi_swig.grib_c_index_write(*args) grib_c_index_write = _gribapi_swig.grib_c_index_write -def grib_c_index_read(file: 'char *') -> "int *": - return _gribapi_swig.grib_c_index_read(file) +def grib_c_index_read(*args): + return _gribapi_swig.grib_c_index_read(*args) grib_c_index_read = _gribapi_swig.grib_c_index_read -def grib_c_new_from_message(INOUT: 'int *', binmsg: 'char *', INPUT: 'size_t *') -> "int *": - return _gribapi_swig.grib_c_new_from_message(INOUT, binmsg, INPUT) +def grib_c_new_from_message(*args): + return _gribapi_swig.grib_c_new_from_message(*args) grib_c_new_from_message = _gribapi_swig.grib_c_new_from_message -def grib_c_count_in_file(f: 'FILE *') -> "int *": - return _gribapi_swig.grib_c_count_in_file(f) +def grib_c_count_in_file(*args): + return _gribapi_swig.grib_c_count_in_file(*args) grib_c_count_in_file = _gribapi_swig.grib_c_count_in_file -def grib_c_release(gid: 'int *') -> "int": - return _gribapi_swig.grib_c_release(gid) +def grib_c_release(*args): + return _gribapi_swig.grib_c_release(*args) grib_c_release = _gribapi_swig.grib_c_release -def grib_c_write(gid: 'int *', f: 'FILE *') -> "int": - return _gribapi_swig.grib_c_write(gid, f) +def grib_c_write(*args): + return _gribapi_swig.grib_c_write(*args) grib_c_write = _gribapi_swig.grib_c_write -def grib_c_get_size_long(gid: 'int *', key: 'char *') -> "long *": - return _gribapi_swig.grib_c_get_size_long(gid, key) +def grib_c_get_size_long(*args): + return _gribapi_swig.grib_c_get_size_long(*args) grib_c_get_size_long = _gribapi_swig.grib_c_get_size_long -def grib_c_get_string_length(gid: 'int *', key: 'char *') -> "size_t *": - return _gribapi_swig.grib_c_get_string_length(gid, key) +def grib_c_get_string_length(*args): + return _gribapi_swig.grib_c_get_string_length(*args) grib_c_get_string_length = _gribapi_swig.grib_c_get_string_length -def grib_c_clone(gid: 'int *', INOUT: 'int *') -> "int *": - return _gribapi_swig.grib_c_clone(gid, INOUT) +def grib_c_clone(*args): + return _gribapi_swig.grib_c_clone(*args) grib_c_clone = _gribapi_swig.grib_c_clone -def grib_c_copy_namespace(gid: 'int *', name: 'char *', INPUT: 'int *') -> "int": - return _gribapi_swig.grib_c_copy_namespace(gid, name, INPUT) +def grib_c_copy_namespace(*args): + return _gribapi_swig.grib_c_copy_namespace(*args) grib_c_copy_namespace = _gribapi_swig.grib_c_copy_namespace -def grib_c_get_message_size(gid: 'int *') -> "size_t *": - return _gribapi_swig.grib_c_get_message_size(gid) +def grib_c_get_message_size(*args): + return _gribapi_swig.grib_c_get_message_size(*args) grib_c_get_message_size = _gribapi_swig.grib_c_get_message_size -def grib_c_get_message_offset(gid: 'int *') -> "size_t *": - return _gribapi_swig.grib_c_get_message_offset(gid) +def grib_c_get_message_offset(*args): + return _gribapi_swig.grib_c_get_message_offset(*args) grib_c_get_message_offset = _gribapi_swig.grib_c_get_message_offset -def grib_c_get_native_type(gid: 'int *', key: 'char *') -> "int *": - return _gribapi_swig.grib_c_get_native_type(gid, key) +def grib_c_get_native_type(*args): + return _gribapi_swig.grib_c_get_native_type(*args) grib_c_get_native_type = _gribapi_swig.grib_c_get_native_type -def grib_c_multi_new() -> "int *": - return _gribapi_swig.grib_c_multi_new() +def grib_c_multi_new(): + return _gribapi_swig.grib_c_multi_new() grib_c_multi_new = _gribapi_swig.grib_c_multi_new -def grib_c_multi_support_on() -> "int": - return _gribapi_swig.grib_c_multi_support_on() +def grib_c_multi_support_on(): + return _gribapi_swig.grib_c_multi_support_on() grib_c_multi_support_on = _gribapi_swig.grib_c_multi_support_on -def grib_c_multi_write(gid: 'int *', f: 'FILE *') -> "int": - return _gribapi_swig.grib_c_multi_write(gid, f) +def grib_c_multi_write(*args): + return _gribapi_swig.grib_c_multi_write(*args) grib_c_multi_write = _gribapi_swig.grib_c_multi_write -def grib_c_multi_support_off() -> "int": - return _gribapi_swig.grib_c_multi_support_off() +def grib_c_multi_support_off(): + return _gribapi_swig.grib_c_multi_support_off() grib_c_multi_support_off = _gribapi_swig.grib_c_multi_support_off -def grib_c_multi_release(gid: 'int *') -> "int": - return _gribapi_swig.grib_c_multi_release(gid) +def grib_c_multi_release(*args): + return _gribapi_swig.grib_c_multi_release(*args) grib_c_multi_release = _gribapi_swig.grib_c_multi_release -def grib_c_multi_append(arg1: 'int *', arg2: 'int *', arg3: 'int *') -> "int": - return _gribapi_swig.grib_c_multi_append(arg1, arg2, arg3) +def grib_c_multi_append(*args): + return _gribapi_swig.grib_c_multi_append(*args) grib_c_multi_append = _gribapi_swig.grib_c_multi_append -def grib_c_gribex_mode_on() -> "int": - return _gribapi_swig.grib_c_gribex_mode_on() +def grib_c_gribex_mode_on(): + return _gribapi_swig.grib_c_gribex_mode_on() grib_c_gribex_mode_on = _gribapi_swig.grib_c_gribex_mode_on -def grib_c_gribex_mode_off() -> "int": - return _gribapi_swig.grib_c_gribex_mode_off() +def grib_c_gribex_mode_off(): + return _gribapi_swig.grib_c_gribex_mode_off() grib_c_gribex_mode_off = _gribapi_swig.grib_c_gribex_mode_off -def grib_c_keys_iterator_next(iterid: 'int *') -> "int": - return _gribapi_swig.grib_c_keys_iterator_next(iterid) +def grib_c_keys_iterator_next(*args): + return _gribapi_swig.grib_c_keys_iterator_next(*args) grib_c_keys_iterator_next = _gribapi_swig.grib_c_keys_iterator_next -def codes_c_bufr_keys_iterator_next(iterid: 'int *') -> "int": - return _gribapi_swig.codes_c_bufr_keys_iterator_next(iterid) +def codes_c_bufr_keys_iterator_next(*args): + return _gribapi_swig.codes_c_bufr_keys_iterator_next(*args) codes_c_bufr_keys_iterator_next = _gribapi_swig.codes_c_bufr_keys_iterator_next -def grib_c_keys_iterator_delete(iterid: 'int *') -> "int": - return _gribapi_swig.grib_c_keys_iterator_delete(iterid) +def grib_c_keys_iterator_delete(*args): + return _gribapi_swig.grib_c_keys_iterator_delete(*args) grib_c_keys_iterator_delete = _gribapi_swig.grib_c_keys_iterator_delete -def codes_c_bufr_keys_iterator_delete(iterid: 'int *') -> "int": - return _gribapi_swig.codes_c_bufr_keys_iterator_delete(iterid) +def codes_c_bufr_keys_iterator_delete(*args): + return _gribapi_swig.codes_c_bufr_keys_iterator_delete(*args) codes_c_bufr_keys_iterator_delete = _gribapi_swig.codes_c_bufr_keys_iterator_delete -def grib_c_skip_computed(iterid: 'int *') -> "int": - return _gribapi_swig.grib_c_skip_computed(iterid) +def grib_c_skip_computed(*args): + return _gribapi_swig.grib_c_skip_computed(*args) grib_c_skip_computed = _gribapi_swig.grib_c_skip_computed -def grib_c_skip_coded(iterid: 'int *') -> "int": - return _gribapi_swig.grib_c_skip_coded(iterid) +def grib_c_skip_coded(*args): + return _gribapi_swig.grib_c_skip_coded(*args) grib_c_skip_coded = _gribapi_swig.grib_c_skip_coded -def grib_c_skip_edition_specific(iterid: 'int *') -> "int": - return _gribapi_swig.grib_c_skip_edition_specific(iterid) +def grib_c_skip_edition_specific(*args): + return _gribapi_swig.grib_c_skip_edition_specific(*args) grib_c_skip_edition_specific = _gribapi_swig.grib_c_skip_edition_specific -def grib_c_skip_duplicates(iterid: 'int *') -> "int": - return _gribapi_swig.grib_c_skip_duplicates(iterid) +def grib_c_skip_duplicates(*args): + return _gribapi_swig.grib_c_skip_duplicates(*args) grib_c_skip_duplicates = _gribapi_swig.grib_c_skip_duplicates -def grib_c_skip_read_only(iterid: 'int *') -> "int": - return _gribapi_swig.grib_c_skip_read_only(iterid) +def grib_c_skip_read_only(*args): + return _gribapi_swig.grib_c_skip_read_only(*args) grib_c_skip_read_only = _gribapi_swig.grib_c_skip_read_only -def grib_c_skip_function(iterid: 'int *') -> "int": - return _gribapi_swig.grib_c_skip_function(iterid) +def grib_c_skip_function(*args): + return _gribapi_swig.grib_c_skip_function(*args) grib_c_skip_function = _gribapi_swig.grib_c_skip_function -def grib_c_keys_iterator_rewind(iterid: 'int *') -> "int": - return _gribapi_swig.grib_c_keys_iterator_rewind(iterid) +def grib_c_keys_iterator_rewind(*args): + return _gribapi_swig.grib_c_keys_iterator_rewind(*args) grib_c_keys_iterator_rewind = _gribapi_swig.grib_c_keys_iterator_rewind -def codes_c_bufr_keys_iterator_rewind(iterid: 'int *') -> "int": - return _gribapi_swig.codes_c_bufr_keys_iterator_rewind(iterid) +def codes_c_bufr_keys_iterator_rewind(*args): + return _gribapi_swig.codes_c_bufr_keys_iterator_rewind(*args) codes_c_bufr_keys_iterator_rewind = _gribapi_swig.codes_c_bufr_keys_iterator_rewind -def grib_c_bufr_copy_data(gid: 'int *', INOUT: 'int *') -> "int *": - return _gribapi_swig.grib_c_bufr_copy_data(gid, INOUT) +def grib_c_bufr_copy_data(*args): + return _gribapi_swig.grib_c_bufr_copy_data(*args) grib_c_bufr_copy_data = _gribapi_swig.grib_c_bufr_copy_data -def grib_c_keys_iterator_get_name(iterid: 'int *', len: 'int') -> "char *": - return _gribapi_swig.grib_c_keys_iterator_get_name(iterid, len) +def grib_c_keys_iterator_get_name(*args): + return _gribapi_swig.grib_c_keys_iterator_get_name(*args) grib_c_keys_iterator_get_name = _gribapi_swig.grib_c_keys_iterator_get_name -def codes_c_bufr_keys_iterator_get_name(iterid: 'int *', len: 'int') -> "char *": - return _gribapi_swig.codes_c_bufr_keys_iterator_get_name(iterid, len) +def codes_c_bufr_keys_iterator_get_name(*args): + return _gribapi_swig.codes_c_bufr_keys_iterator_get_name(*args) codes_c_bufr_keys_iterator_get_name = _gribapi_swig.codes_c_bufr_keys_iterator_get_name -def grib_c_index_get_size_long(iid: 'int *', key: 'char *') -> "long *": - return _gribapi_swig.grib_c_index_get_size_long(iid, key) +def grib_c_index_get_size_long(*args): + return _gribapi_swig.grib_c_index_get_size_long(*args) grib_c_index_get_size_long = _gribapi_swig.grib_c_index_get_size_long -def grib_c_index_get_long(iid: 'int *', key: 'char *', val: 'long *', size: 'int *') -> "int": - return _gribapi_swig.grib_c_index_get_long(iid, key, val, size) +def grib_c_index_get_long(*args): + return _gribapi_swig.grib_c_index_get_long(*args) grib_c_index_get_long = _gribapi_swig.grib_c_index_get_long -def grib_c_index_get_real8(iid: 'int *', key: 'char *', val: 'double *', size: 'int *') -> "int": - return _gribapi_swig.grib_c_index_get_real8(iid, key, val, size) +def grib_c_index_get_real8(*args): + return _gribapi_swig.grib_c_index_get_real8(*args) grib_c_index_get_real8 = _gribapi_swig.grib_c_index_get_real8 -def grib_c_index_get_string(iid: 'int *', key: 'char *', INPUT: 'int *', INOUT: 'int *') -> "char *, int *": - return _gribapi_swig.grib_c_index_get_string(iid, key, INPUT, INOUT) +def grib_c_index_get_string(*args): + return _gribapi_swig.grib_c_index_get_string(*args) grib_c_index_get_string = _gribapi_swig.grib_c_index_get_string -def grib_c_index_select_long(iid: 'int *', key: 'char *', INPUT: 'long *') -> "int": - return _gribapi_swig.grib_c_index_select_long(iid, key, INPUT) +def grib_c_index_select_long(*args): + return _gribapi_swig.grib_c_index_select_long(*args) grib_c_index_select_long = _gribapi_swig.grib_c_index_select_long -def grib_c_index_select_real8(iid: 'int *', key: 'char *', INPUT: 'double *') -> "int": - return _gribapi_swig.grib_c_index_select_real8(iid, key, INPUT) +def grib_c_index_select_real8(*args): + return _gribapi_swig.grib_c_index_select_real8(*args) grib_c_index_select_real8 = _gribapi_swig.grib_c_index_select_real8 -def grib_c_index_select_string(iid: 'int *', key: 'char *', val: 'char *') -> "int": - return _gribapi_swig.grib_c_index_select_string(iid, key, val) +def grib_c_index_select_string(*args): + return _gribapi_swig.grib_c_index_select_string(*args) grib_c_index_select_string = _gribapi_swig.grib_c_index_select_string -def grib_c_index_release(iid: 'int *') -> "int": - return _gribapi_swig.grib_c_index_release(iid) +def grib_c_index_release(*args): + return _gribapi_swig.grib_c_index_release(*args) grib_c_index_release = _gribapi_swig.grib_c_index_release -def grib_c_iterator_delete(iterid: 'int *') -> "int": - return _gribapi_swig.grib_c_iterator_delete(iterid) +def grib_c_iterator_delete(*args): + return _gribapi_swig.grib_c_iterator_delete(*args) grib_c_iterator_delete = _gribapi_swig.grib_c_iterator_delete -def grib_c_iterator_next(iterid: 'int *') -> "double *, double *, double *": - return _gribapi_swig.grib_c_iterator_next(iterid) +def grib_c_iterator_next(*args): + return _gribapi_swig.grib_c_iterator_next(*args) grib_c_iterator_next = _gribapi_swig.grib_c_iterator_next -def grib_c_get_string(gid: 'int *', key: 'char *', string_val: 'char *') -> "size_t *": - return _gribapi_swig.grib_c_get_string(gid, key, string_val) +def grib_c_get_string(*args): + return _gribapi_swig.grib_c_get_string(*args) grib_c_get_string = _gribapi_swig.grib_c_get_string -def grib_c_get_string_array(gid: 'int *', key: 'char *', array_string_val: 'char **', size: 'size_t *') -> "int": - return _gribapi_swig.grib_c_get_string_array(gid, key, array_string_val, size) +def grib_c_get_string_array(*args): + return _gribapi_swig.grib_c_get_string_array(*args) grib_c_get_string_array = _gribapi_swig.grib_c_get_string_array -def grib_c_set_string(gid: 'int *', key: 'char *', sval: 'char *', len2: 'int') -> "int": - return _gribapi_swig.grib_c_set_string(gid, key, sval, len2) +def grib_c_set_string(*args): + return _gribapi_swig.grib_c_set_string(*args) grib_c_set_string = _gribapi_swig.grib_c_set_string -def grib_c_get_long(gid: 'int *', key: 'char *') -> "long *": - return _gribapi_swig.grib_c_get_long(gid, key) +def grib_c_get_long(*args): + return _gribapi_swig.grib_c_get_long(*args) grib_c_get_long = _gribapi_swig.grib_c_get_long -def grib_c_set_long(gid: 'int *', key: 'char *', INPUT: 'long *') -> "int": - return _gribapi_swig.grib_c_set_long(gid, key, INPUT) +def grib_c_set_long(*args): + return _gribapi_swig.grib_c_set_long(*args) grib_c_set_long = _gribapi_swig.grib_c_set_long -def grib_c_get_double(gid: 'int *', key: 'char *') -> "double *": - return _gribapi_swig.grib_c_get_double(gid, key) +def grib_c_get_double(*args): + return _gribapi_swig.grib_c_get_double(*args) grib_c_get_double = _gribapi_swig.grib_c_get_double -def grib_c_set_double(gid: 'int *', key: 'char *', INPUT: 'double *') -> "int": - return _gribapi_swig.grib_c_set_double(gid, key, INPUT) +def grib_c_set_double(*args): + return _gribapi_swig.grib_c_set_double(*args) grib_c_set_double = _gribapi_swig.grib_c_set_double -def grib_c_set_real8_array(gid: 'int *', key: 'char *', val: 'double *', size: 'int *') -> "int": - return _gribapi_swig.grib_c_set_real8_array(gid, key, val, size) +def grib_c_set_real8_array(*args): + return _gribapi_swig.grib_c_set_real8_array(*args) grib_c_set_real8_array = _gribapi_swig.grib_c_set_real8_array -def grib_c_get_real8_array(gid: 'int *', key: 'char *', val: 'double *', size: 'int *') -> "int": - return _gribapi_swig.grib_c_get_real8_array(gid, key, val, size) +def grib_c_get_real8_array(*args): + return _gribapi_swig.grib_c_get_real8_array(*args) grib_c_get_real8_array = _gribapi_swig.grib_c_get_real8_array -def grib_c_get_long_array(gid: 'int *', key: 'char *', val: 'long *', size: 'int *') -> "int": - return _gribapi_swig.grib_c_get_long_array(gid, key, val, size) +def grib_c_get_long_array(*args): + return _gribapi_swig.grib_c_get_long_array(*args) grib_c_get_long_array = _gribapi_swig.grib_c_get_long_array -def grib_c_set_long_array(gid: 'int *', key: 'char *', val: 'long *', size: 'int *') -> "int": - return _gribapi_swig.grib_c_set_long_array(gid, key, val, size) +def grib_c_set_long_array(*args): + return _gribapi_swig.grib_c_set_long_array(*args) grib_c_set_long_array = _gribapi_swig.grib_c_set_long_array -def grib_c_get_real8_element(gid: 'int *', key: 'char *', INPUT: 'int *') -> "double *": - return _gribapi_swig.grib_c_get_real8_element(gid, key, INPUT) +def grib_c_get_real8_element(*args): + return _gribapi_swig.grib_c_get_real8_element(*args) grib_c_get_real8_element = _gribapi_swig.grib_c_get_real8_element -def grib_c_get_real8_elements(gid: 'int *', key: 'char *', index: 'int *', val: 'double *', size: 'int *') -> "int": - return _gribapi_swig.grib_c_get_real8_elements(gid, key, index, val, size) +def grib_c_get_real8_elements(*args): + return _gribapi_swig.grib_c_get_real8_elements(*args) grib_c_get_real8_elements = _gribapi_swig.grib_c_get_real8_elements -def grib_c_set_missing(gid: 'int *', key: 'char *') -> "int": - return _gribapi_swig.grib_c_set_missing(gid, key) +def grib_c_set_missing(*args): + return _gribapi_swig.grib_c_set_missing(*args) grib_c_set_missing = _gribapi_swig.grib_c_set_missing -def grib_c_set_key_vals(gid: 'int *', keyvals: 'char *') -> "int": - return _gribapi_swig.grib_c_set_key_vals(gid, keyvals) +def grib_c_set_key_vals(*args): + return _gribapi_swig.grib_c_set_key_vals(*args) grib_c_set_key_vals = _gribapi_swig.grib_c_set_key_vals -def grib_c_is_missing(gid: 'int *', key: 'char *') -> "int *": - return _gribapi_swig.grib_c_is_missing(gid, key) +def grib_c_is_missing(*args): + return _gribapi_swig.grib_c_is_missing(*args) grib_c_is_missing = _gribapi_swig.grib_c_is_missing -def grib_c_is_defined(gid: 'int *', key: 'char *') -> "int *": - return _gribapi_swig.grib_c_is_defined(gid, key) +def grib_c_is_defined(*args): + return _gribapi_swig.grib_c_is_defined(*args) grib_c_is_defined = _gribapi_swig.grib_c_is_defined -def grib_c_set_string_array(gid: 'int *', key: 'char *', val: 'char const **') -> "int": - return _gribapi_swig.grib_c_set_string_array(gid, key, val) +def grib_c_set_string_array(*args): + return _gribapi_swig.grib_c_set_string_array(*args) grib_c_set_string_array = _gribapi_swig.grib_c_set_string_array -def grib_set_double_ndarray(gid: 'int *', key: 'char *', dpin_val: 'double *') -> "int": - return _gribapi_swig.grib_set_double_ndarray(gid, key, dpin_val) +def grib_set_double_ndarray(*args): + return _gribapi_swig.grib_set_double_ndarray(*args) grib_set_double_ndarray = _gribapi_swig.grib_set_double_ndarray -def grib_set_long_ndarray(gid: 'int *', key: 'char *', lpin_val: 'long *') -> "int": - return _gribapi_swig.grib_set_long_ndarray(gid, key, lpin_val) +def grib_set_long_ndarray(*args): + return _gribapi_swig.grib_set_long_ndarray(*args) grib_set_long_ndarray = _gribapi_swig.grib_set_long_ndarray -def grib_get_double_ndarray(gid: 'int *', key: 'char *', dpout_val: 'double *') -> "int": - return _gribapi_swig.grib_get_double_ndarray(gid, key, dpout_val) +def grib_get_double_ndarray(*args): + return _gribapi_swig.grib_get_double_ndarray(*args) grib_get_double_ndarray = _gribapi_swig.grib_get_double_ndarray -def grib_get_long_ndarray(gid: 'int *', key: 'char *', lpout_val: 'long *') -> "int": - return _gribapi_swig.grib_get_long_ndarray(gid, key, lpout_val) +def grib_get_long_ndarray(*args): + return _gribapi_swig.grib_get_long_ndarray(*args) grib_get_long_ndarray = _gribapi_swig.grib_get_long_ndarray -def grib_get_double_ndelements(gid: 'int *', key: 'char *', ipin_index: 'int *', dpout_val: 'double *') -> "int": - return _gribapi_swig.grib_get_double_ndelements(gid, key, ipin_index, dpout_val) +def grib_get_double_ndelements(*args): + return _gribapi_swig.grib_get_double_ndelements(*args) grib_get_double_ndelements = _gribapi_swig.grib_get_double_ndelements -def grib_c_find_nearest_single(gid: 'int *', arg2: 'int *', arg3: 'double *', arg4: 'double *') -> "double *, double *, double *, double *, int *": - return _gribapi_swig.grib_c_find_nearest_single(gid, arg2, arg3, arg4) +def grib_c_find_nearest_single(*args): + return _gribapi_swig.grib_c_find_nearest_single(*args) grib_c_find_nearest_single = _gribapi_swig.grib_c_find_nearest_single -def grib_c_find_nearest_four_single(gid: 'int *', arg2: 'int *', arg3: 'double *', arg4: 'double *', outlats: 'double *', outlons: 'double *', values: 'double *', distances: 'double *', indexes: 'int *') -> "int": - return _gribapi_swig.grib_c_find_nearest_four_single(gid, arg2, arg3, arg4, outlats, outlons, values, distances, indexes) +def grib_c_find_nearest_four_single(*args): + return _gribapi_swig.grib_c_find_nearest_four_single(*args) grib_c_find_nearest_four_single = _gribapi_swig.grib_c_find_nearest_four_single -def grib_c_get_message(gid: 'int *') -> "size_t *": - return _gribapi_swig.grib_c_get_message(gid) +def grib_c_get_message(*args): + return _gribapi_swig.grib_c_get_message(*args) grib_c_get_message = _gribapi_swig.grib_c_get_message -def grib_c_get_error_string(INPUT: 'int *', len: 'int') -> "char *": - return _gribapi_swig.grib_c_get_error_string(INPUT, len) +def grib_c_get_error_string(*args): + return _gribapi_swig.grib_c_get_error_string(*args) grib_c_get_error_string = _gribapi_swig.grib_c_get_error_string -def no_fail_on_wrong_length(flag: 'int') -> "void": - return _gribapi_swig.no_fail_on_wrong_length(flag) +def no_fail_on_wrong_length(*args): + return _gribapi_swig.no_fail_on_wrong_length(*args) no_fail_on_wrong_length = _gribapi_swig.no_fail_on_wrong_length -def grib_c_get_api_version() -> "long": - return _gribapi_swig.grib_c_get_api_version() +def grib_c_get_api_version(): + return _gribapi_swig.grib_c_get_api_version() grib_c_get_api_version = _gribapi_swig.grib_c_get_api_version -def grib_c_gts_header_on() -> "void": - return _gribapi_swig.grib_c_gts_header_on() +def grib_c_gts_header_on(): + return _gribapi_swig.grib_c_gts_header_on() grib_c_gts_header_on = _gribapi_swig.grib_c_gts_header_on -def grib_c_gts_header_off() -> "void": - return _gribapi_swig.grib_c_gts_header_off() +def grib_c_gts_header_off(): + return _gribapi_swig.grib_c_gts_header_off() grib_c_gts_header_off = _gribapi_swig.grib_c_gts_header_off -def grib_c_set_definitions_path(path: 'char const *') -> "void": - return _gribapi_swig.grib_c_set_definitions_path(path) +def grib_c_set_definitions_path(*args): + return _gribapi_swig.grib_c_set_definitions_path(*args) grib_c_set_definitions_path = _gribapi_swig.grib_c_set_definitions_path -def grib_c_set_samples_path(path: 'char const *') -> "void": - return _gribapi_swig.grib_c_set_samples_path(path) +def grib_c_set_samples_path(*args): + return _gribapi_swig.grib_c_set_samples_path(*args) grib_c_set_samples_path = _gribapi_swig.grib_c_set_samples_path -# This file is compatible with both classic and new-style classes. diff --git a/python/test_extra.py b/python/test_extra.py index 44c269f13..33c3e18c0 100755 --- a/python/test_extra.py +++ b/python/test_extra.py @@ -12,31 +12,31 @@ while 1: gid = grib_new_from_file(fid) if gid is None: break - print (grib_get(gid,"centre")) - print (grib_get(gid,"centre",int)) - print (grib_get(gid,"centre",float)) - print (grib_get(gid,"centre",str)) + print grib_get(gid,"centre") + print grib_get(gid,"centre",int) + print grib_get(gid,"centre",float) + print grib_get(gid,"centre",str) - print ("Nvalues = ",grib_get_size(gid,"values")) + print "Nvalues = ",grib_get_size(gid,"values") values = grib_get_array(gid,"values") - print (values[:10]) + print values[:10] values = values * 2 grib_set_double_array(gid,"values",values) values = grib_get_array(gid,"values") - print (values[:10]) + print values[:10] values = values / 2 grib_set_double_array(gid,"values",[1]) values = grib_get_values(gid) - print (values[:10]) + print values[:10] - print (grib_get(gid,"bitsPerValue")) + print grib_get(gid,"bitsPerValue") grib_set(gid,"bitsPerValue",10) - print (grib_get(gid,"bitsPerValue")) + print grib_get(gid,"bitsPerValue") grib_write(gid,oid) diff --git a/python/test_general.py b/python/test_general.py index 9befddc9a..6ccb76408 100755 --- a/python/test_general.py +++ b/python/test_general.py @@ -44,25 +44,25 @@ def test(): #grib_write_file(binstr_fid,x) #grib_close_file(binstr_fid) - print ("Operating on file '%s'" % infile) + print "Operating on file '%s'" % infile n = grib_count_in_file(fid) - print ("Message count ",n) + print "Message count ",n # multi support test grib_multi_support_on() ismulti = "no" if (n == grib_count_in_file(fid)) else "yes" - print ("Is multi field - %s" % ismulti) + print "Is multi field - %s" % ismulti grib_multi_support_off() # end multi support test # gribex support test on/off - print ("Gribex support on/off") + print "Gribex support on/off" grib_gribex_mode_on() grib_gribex_mode_off # end gribex support test - print ("Browsing through messages ") + print "Browsing through messages " for i in range(n): gid = grib_new_from_file(fid) @@ -70,71 +70,71 @@ def test(): #grib_print(gid,"centre") if i == 0: - print ("Message size: ",grib_get_message_size(gid)) + print "Message size: ",grib_get_message_size(gid) nval = grib_get_size(gid,"values") - print ("Number of values in message %d is %d" % (i,nval)) + print "Number of values in message %d is %d" % (i,nval) - print ("== %s %s %s %d ==" % \ + print "== %s %s %s %d ==" % \ ( \ grib_get_string(gid,"shortName"), \ grib_get_string(gid,"name"), \ grib_get_string(gid,"typeOfLevel"), \ grib_get_long(gid,"level"), \ - )) + ) - print ("Nearest point to 10,10: ") - print (grib_find_nearest(gid,10,10)) + print "Nearest point to 10,10: " + print grib_find_nearest(gid,10,10) - print (grib_find_nearest(gid,10,10,npoints=4)) + print grib_find_nearest(gid,10,10,npoints=4) rand_list = [] for i in range(0,5): rand_index = random.randint(1,nval) rand_list.append(rand_index) myval = grib_get_double_element(gid,"values",rand_index) - print ("Random index value[%d] = %.8f" % (rand_index,myval)) + print "Random index value[%d] = %.8f" % (rand_index,myval) all4rand = grib_get_double_elements(gid,"values",rand_list) - print ("All at once index values: ",all4rand) + print "All at once index values: ",all4rand centre = grib_get_string(gid,"centre") grib_set_string(gid,"centre","ecmf") new_centre = grib_get_string(gid,"centre") - print ("Before/after string centre: %s/%s" % (centre,new_centre)) + print "Before/after string centre: %s/%s" % (centre,new_centre) centre = grib_get_long(gid,"centre") grib_set_long(gid,"centre",99) new_centre = grib_get_long(gid,"centre") - print ("Before/after numeric centre: %d/%d" % (centre,new_centre)) + print "Before/after numeric centre: %d/%d" % (centre,new_centre) centre = grib_get_double(gid,"centre") grib_set_double(gid,"centre",9) new_centre = grib_get_double(gid,"centre") - print ("Before/after numeric floating point centre: %f/%f" % (centre,new_centre)) + print "Before/after numeric floating point centre: %f/%f" % (centre,new_centre) vals = grib_get_double_array(gid,"values") - print ("Values before: ",vals[:10]) + print "Values before: ",vals[:10] grib_set_double_array(gid,"values",(1.0, 2.0, 3.14)) vals = grib_get_double_array(gid,"values") - print ("Values after: ",vals[:10]) + print "Values after: ",vals[:10] - print ("Saving modified message to %s" % outfile) + print "Saving modified message to %s" % outfile if WRITE: grib_write(gid,out) - print ("Creating and saving a clone to %s" % clonefile) + print "Creating and saving a clone to %s" % clonefile clone_gid = grib_clone(gid) if WRITE: grib_write(clone_gid,clone_fid) grib_release(clone_gid) Ni = grib_get(gid,"Ni") - print ("Setting Ni to missing from --> ",Ni) + print "Setting Ni to missing from --> ",Ni grib_set_missing(gid,"Ni") assert grib_is_missing(gid,"Ni") miss_Ni = grib_get(gid,"Ni") - print ("Ni is now --> ",miss_Ni) + print "Ni is now --> ",miss_Ni grib_set(gid,"Ni",Ni) new_Ni = grib_get(gid,"Ni") - print ("Set Ni back to its original value --> ",new_Ni) + print "Set Ni back to its original value --> ",new_Ni assert Ni == new_Ni #grib_multi_write(gid,multi) @@ -145,7 +145,7 @@ def test(): fid.close() out.close() clone_fid.close() - print ("Closed file") + print "Closed file" def main(): @@ -155,13 +155,13 @@ def main(): if VERBOSE: traceback.print_exc(file=sys.stderr) else: - print (err.msg, file=sys.stderr) + print >>sys.stderr,err.msg return 1 except Usage: - print ("Usage: %s infile" % sys.argv[0]) + print "Usage: %s infile" % sys.argv[0] sys.exit(2) if __name__ == "__main__": main() - print ("------------------------------------") + print "------------------------------------" diff --git a/python/test_index.py b/python/test_index.py index 69e22c739..1a488d238 100755 --- a/python/test_index.py +++ b/python/test_index.py @@ -34,20 +34,20 @@ def test(): infile = sys.argv[1] index_keys = ["shortName","level","number","step"] - print ("indexing...") + print "indexing..." iid = grib_index_new_from_file(infile,index_keys) - print ("end indexing...") + print "end indexing..." index_vals = [] for key in index_keys: - print ("%sSize=%d" % ( + print "%sSize=%d" % ( key, grib_index_get_size(iid,key) - )) + ) key_vals = grib_index_get_string(iid,key) - print (" ".join(key_vals)) + print " ".join(key_vals) index_vals.append(key_vals) @@ -58,7 +58,7 @@ def test(): while 1: gid = grib_new_from_index(iid) if gid is None: break - print (" ".join(["%s=%s" % (key,grib_get_string(gid,key)) for key in index_keys])) + print " ".join(["%s=%s" % (key,grib_get_string(gid,key)) for key in index_keys]) grib_release(gid) grib_index_release(iid) @@ -71,13 +71,13 @@ def main(): if VERBOSE: traceback.print_exc(file=sys.stderr) else: - print (err.msg, file=sys.stderr) + print >>sys.stderr,err.msg return 1 except Usage: - print ("Usage: %s infile" % sys.argv[0]) + print "Usage: %s infile" % sys.argv[0] sys.exit(2) if __name__ == "__main__": main() - #print ("------------------------------------") + #print "------------------------------------" diff --git a/python/test_iterator.py b/python/test_iterator.py index b980e5862..149c891f1 100755 --- a/python/test_iterator.py +++ b/python/test_iterator.py @@ -26,12 +26,12 @@ def main(): sys.stdout.write("- %d - lat=%.6f lon=%.6f value=" % (i,lat,lon)) if value == missingValue: - print("missing") + print "missing" else: - print("%.6f" % value) + print "%.6f" % value i += 1 - + grib_iterator_delete(iterid) grib_release(gid) diff --git a/python/test_keysiterator.py b/python/test_keysiterator.py index c6752d824..f527a6cef 100755 --- a/python/test_keysiterator.py +++ b/python/test_keysiterator.py @@ -22,7 +22,7 @@ for i in range(count): keyname = grib_keys_iterator_get_name(iterid) keyval = grib_get_string(iterid,keyname) keytype = grib_get_native_type(gid,keyname) - print ("%s = %s (%s)" % (keyname,keyval,str(keytype))) + print "%s = %s (%s)" % (keyname,keyval,str(keytype)) grib_keys_iterator_delete(iterid) grib_release(gid) diff --git a/python3/CMakeLists.txt b/python3/CMakeLists.txt new file mode 100644 index 000000000..33aa1f0c1 --- /dev/null +++ b/python3/CMakeLists.txt @@ -0,0 +1,86 @@ +if( HAVE_PYTHON ) + + #find_package( SWIG ) + #if( SWIG_FOUND ) + # include( ${SWIG_USE_FILE} ) + #endif() + + # preparing for generating setup.py + if( HAVE_LIBJASPER ) + get_filename_component(JASPER_DIR ${JASPER_INCLUDE_DIR} PATH ) + endif() + + if( HAVE_LIBOPENJPEG ) + # Get the name of the OpenJPEG library: version dependent! + # E.g. openjpeg (version 1.5) or openjp2 (version 2.x) + get_filename_component(OPENJPEG_LIB_DIR ${OPENJPEG_LIBRARY} PATH ) + get_filename_component(OJ_NAME_WE ${OPENJPEG_LIBRARY} NAME_WE ) + STRING(REGEX REPLACE "^lib" "" OJ_WITHOUT_LIB ${OJ_NAME_WE}) + endif() + + if( HAVE_AEC ) + get_filename_component(AEC_DIR ${AEC_INCLUDE_DIR} PATH ) + endif() + + configure_file( setup.py.in setup.py ) + + # compile swig interface + # set(CMAKE_SWIG_FLAGS "") + # set_source_files_properties( gribapi_swig.i PROPERTIES C ON ) + + # if( NUMPY_FOUND ) + # set( CMAKE_SWIG_FLAGS "-DNUMPY" ) + # include_directories( ${NUMPY_INCLUDE_DIRS} ) + # endif() + + ####### Do not invoke swig. Use our own generated C wrapper file ###### + set( _gribapi_swig "gribapi/_gribapi_swig${CMAKE_SHARED_LIBRARY_SUFFIX}" ) + # Build the extension module for use in build tree with RPATH pointing to the build tree + add_custom_command( OUTPUT ${_gribapi_swig} + COMMAND ${PYTHON_EXECUTABLE} setup.py build_ext --inplace --rpath ${CMAKE_BINARY_DIR}/lib + DEPENDS grib_interface.h grib_interface.c swig_wrap_numpy.c setup.py.in eccodes ) + add_custom_target(eccodes_build_swig_wrapper ALL DEPENDS ${_gribapi_swig}) + + #ecbuild_add_library(TARGET _gribapi_swig + # TYPE SHARED + # NOINSTALL + # SOURCES grib_interface.h grib_interface.c swig_wrap_numpy.c + # INCLUDES ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${PYTHON_INCLUDE_DIRS} + # LIBS eccodes ${PYTHON_LIBRARIES} ) + # Don't use the lib prefix. This is needed for the python case where a _modulename.so is generated + #set_target_properties(_gribapi_swig PROPERTIES PREFIX "") + + # Copy gribapi and eccodes python modules to build area + file( COPY eccodes gribapi DESTINATION . ) + configure_file( swig_wrap_numpy.py gribapi/gribapi_swig.py COPYONLY ) + + # Build the extension module for use in install tree with RPATH pointing to install tree + install(CODE "message(\"Building Python extension modules: +${PYTHON_EXECUTABLE} setup.py build_ext --rpath ${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}\") + execute_process(COMMAND ${PYTHON_EXECUTABLE} setup.py build_ext --rpath ${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})") + + # Library installation directory override + if( NOT INSTALL_LIB_DIR STREQUAL lib ) + execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "from __future__ import print_function; import sys; print(sys.version[:3], end='')" + OUTPUT_VARIABLE PYVER ) + set( __install_lib "--install-lib=${ECCODES_FULL_INSTALL_LIB_DIR}/python${PYVER}/site-packages" ) + endif() + + # Call distutils for installation + install(CODE "if( NOT \$ENV{DESTDIR} STREQUAL \"\" ) + set( __root \"--root=\$ENV{DESTDIR}\" ) + endif() + message(\"Installing Python modules: +${PYTHON_EXECUTABLE} setup.py install \${__root} + ${__install_lib} + --prefix=${CMAKE_INSTALL_PREFIX} + --record=${CMAKE_BINARY_DIR}/extra_install.txt\") + execute_process(COMMAND ${PYTHON_EXECUTABLE} setup.py install + \${__root} + --prefix=${CMAKE_INSTALL_PREFIX} + ${__install_lib} + --record=${CMAKE_BINARY_DIR}/extra_install.txt + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})") + +endif() diff --git a/python3/README.swig b/python3/README.swig new file mode 100644 index 000000000..ebe9782d3 --- /dev/null +++ b/python3/README.swig @@ -0,0 +1,5 @@ + +# we use pre-generated files from SWIG - to recreate them use: + +swig -python -module gribapi_swig -o swig_wrap_numpy.c gribapi_swig.i +cp gribapi_swig.py swig_wrap_numpy.py diff --git a/python3/create_errors.py.sh b/python3/create_errors.py.sh new file mode 100755 index 000000000..fd78090ea --- /dev/null +++ b/python3/create_errors.py.sh @@ -0,0 +1,111 @@ +#!/usr/bin/env perl + +# This script is used to generate the file "python/gribapi/errors.py" +# It reads "src/grib_errors.c" which it expects to be up-to-date with +# all the error codes. + +$|=1; + +my $input = '../src/grib_errors.c'; +my $print_class = 1; +my %errmap = (); + +# Print header +# ------------------------------------- +my $header = <<'END_HEADER'; +""" +Exception class hierarchy +""" + +import gribapi_swig as _internal + + +class GribInternalError(Exception): + """ + @brief Wrap errors coming from the C API in a Python exception object. + + Base class for all exceptions + """ + + def __init__(self, value): + # Call the base class constructor with the parameters it needs + Exception.__init__(self, value) + if type(value) is int: + err, self.msg = _internal.grib_c_get_error_string(value, 1024) + assert err == 0 + else: + self.msg = value + + def __str__(self): + return self.msg + + +END_HEADER +print $header; + +# Print the exception classes +# ------------------------------------- +while (<>) { + # Example of input line + # "Passed array is too small", /* -6 GRIB_ARRAY_TOO_SMALL */ + if (/^"(.*)",\s+\/\* (.*) (.*) \*\//) { + $desc = $1; + $code = $2; + $name = $3; + next if ($code == 0); + + $name =~ s/GRIB_//; + $name_lc = $name; + $name_lc =~ s/_/ /g; + $name_lc = lc $name_lc; + $name_lc =~ s/(\w+)/\u$1/g; + $name_lc =~ s/ //g; + + $name = $name_lc; + if ($name !~ /Error$/) { + $name = $name . "Error"; + } + + $name = 'FunctionNotImplementedError' if ($name eq 'NotImplementedError'); + $name = 'MessageEndNotFoundError' if ($name eq '7777NotFoundError'); + $name = 'IOProblemError' if ($name eq 'IoProblemError'); + $name = 'MessageInvalidError' if ($name eq 'InvalidMessageError'); + $name = 'GeocalculusError' if ($name eq 'GeocalculusProblemError'); + $name = 'InvalidOrderByError' if ($name eq 'InvalidOrderbyError'); + $name = 'InvalidBitsPerValueError' if ($name eq 'InvalidBpvError'); + $name = 'KeyValueNotFoundError' if ($name eq 'NotFoundError'); + $name = 'MemoryAllocationError' if ($name eq 'OutOfMemoryError'); + + # Print the class declaration + print "class ${name}(GribInternalError):\n"; + print " \"\"\"${desc}.\"\"\"\n"; + + $errmap{$code} = $name; # store for later + } +} + +# Print the map +# ------------------------------------- +my $size = keys %errmap; +print "\nERROR_MAP = {\n"; +my $i = 0; +for $key (sort { $a <=> $b } keys %errmap) { + $i++; + my $ktext = sprintf("%-3d", $key); + print " $ktext : $errmap{$key}"; + print ",\n" if ($i < $size); +} +print "\n}\n\n"; + + +# Print footer +# ------------------------------------- +my $footer = <<'END_FOOTER'; + +def raise_grib_error(errid): + """ + Raise the GribInternalError corresponding to ``errid``. + """ + raise ERROR_MAP[errid](errid) +END_FOOTER +print $footer; diff --git a/python3/eccodes/__init__.py b/python3/eccodes/__init__.py new file mode 100644 index 000000000..42006b9f0 --- /dev/null +++ b/python3/eccodes/__init__.py @@ -0,0 +1,11 @@ +from __future__ import absolute_import +import sys + +from .eccodes import * +from .eccodes import __version__ + +if sys.version_info >= (2, 6): + from .high_level.gribfile import GribFile + from .high_level.gribmessage import GribMessage + from .high_level.gribindex import GribIndex + from .high_level.bufr import BufrFile, BufrMessage diff --git a/python3/eccodes/eccodes.py b/python3/eccodes/eccodes.py new file mode 100644 index 000000000..1e008ffb8 --- /dev/null +++ b/python3/eccodes/eccodes.py @@ -0,0 +1,109 @@ +from gribapi import __version__ + +from gribapi import GRIB_CHECK as CODES_CHECK + +from gribapi import CODES_PRODUCT_GRIB +from gribapi import CODES_PRODUCT_BUFR +from gribapi import CODES_PRODUCT_ANY +from gribapi import GRIB_MISSING_DOUBLE as CODES_MISSING_DOUBLE +from gribapi import GRIB_MISSING_LONG as CODES_MISSING_LONG + +from gribapi import gts_new_from_file as codes_gts_new_from_file +from gribapi import metar_new_from_file as codes_metar_new_from_file +from gribapi import codes_new_from_file +from gribapi import any_new_from_file as codes_any_new_from_file +from gribapi import bufr_new_from_file as codes_bufr_new_from_file +from gribapi import grib_new_from_file as codes_grib_new_from_file + +from gribapi import grib_count_in_file as codes_count_in_file +from gribapi import grib_multi_support_on as codes_grib_multi_support_on +from gribapi import grib_multi_support_off as codes_grib_multi_support_off +from gribapi import grib_release as codes_release +from gribapi import grib_get_string as codes_get_string +from gribapi import grib_set_string as codes_set_string +from gribapi import grib_gribex_mode_on as codes_gribex_mode_on +from gribapi import grib_gribex_mode_off as codes_gribex_mode_off +from gribapi import grib_write as codes_write +from gribapi import grib_multi_write as codes_grib_multi_write +from gribapi import grib_multi_append as codes_grib_multi_append +from gribapi import grib_get_size as codes_get_size +from gribapi import grib_get_string_length as codes_get_string_length +from gribapi import grib_skip_computed as codes_skip_computed +from gribapi import grib_skip_coded as codes_skip_coded +from gribapi import grib_skip_edition_specific as codes_skip_edition_specific +from gribapi import grib_skip_duplicates as codes_skip_duplicates +from gribapi import grib_skip_read_only as codes_skip_read_only +from gribapi import grib_skip_function as codes_skip_function +from gribapi import grib_iterator_new as codes_grib_iterator_new +from gribapi import grib_iterator_delete as codes_grib_iterator_delete +from gribapi import grib_iterator_next as codes_grib_iterator_next +from gribapi import grib_keys_iterator_new as codes_keys_iterator_new +from gribapi import grib_keys_iterator_next as codes_keys_iterator_next +from gribapi import grib_keys_iterator_delete as codes_keys_iterator_delete +from gribapi import grib_keys_iterator_get_name as codes_keys_iterator_get_name +from gribapi import grib_keys_iterator_rewind as codes_keys_iterator_rewind +from gribapi import codes_bufr_keys_iterator_new +from gribapi import codes_bufr_keys_iterator_next +from gribapi import codes_bufr_keys_iterator_delete +from gribapi import codes_bufr_keys_iterator_get_name +from gribapi import codes_bufr_keys_iterator_rewind +from gribapi import grib_get_long as codes_get_long +from gribapi import grib_get_double as codes_get_double +from gribapi import grib_set_long as codes_set_long +from gribapi import grib_set_double as codes_set_double +from gribapi import grib_new_from_samples as codes_grib_new_from_samples +from gribapi import codes_bufr_new_from_samples +from gribapi import codes_new_from_samples +from gribapi import codes_bufr_copy_data +from gribapi import grib_clone as codes_clone +from gribapi import grib_set_double_array as codes_set_double_array +from gribapi import grib_get_double_array as codes_get_double_array +from gribapi import grib_get_string_array as codes_get_string_array +from gribapi import grib_set_string_array as codes_set_string_array +from gribapi import grib_set_long_array as codes_set_long_array +from gribapi import grib_get_long_array as codes_get_long_array +from gribapi import grib_multi_new as codes_grib_multi_new +from gribapi import grib_multi_release as codes_grib_multi_release +from gribapi import grib_copy_namespace as codes_copy_namespace +from gribapi import grib_index_new_from_file as codes_index_new_from_file +from gribapi import grib_index_add_file as codes_index_add_file +from gribapi import grib_index_release as codes_index_release +from gribapi import grib_index_get_size as codes_index_get_size +from gribapi import grib_index_get_long as codes_index_get_long +from gribapi import grib_index_get_string as codes_index_get_string +from gribapi import grib_index_get_double as codes_index_get_double +from gribapi import grib_index_select_long as codes_index_select_long +from gribapi import grib_index_select_double as codes_index_select_double +from gribapi import grib_index_select_string as codes_index_select_string +from gribapi import grib_new_from_index as codes_new_from_index +from gribapi import grib_get_message_size as codes_get_message_size +from gribapi import grib_get_message_offset as codes_get_message_offset +from gribapi import grib_get_double_element as codes_get_double_element +from gribapi import grib_get_double_elements as codes_get_double_elements +from gribapi import grib_get_elements as codes_get_elements +from gribapi import grib_set_missing as codes_set_missing +from gribapi import grib_set_key_vals as codes_set_key_vals +from gribapi import grib_is_missing as codes_is_missing +from gribapi import grib_is_defined as codes_is_defined +from gribapi import grib_find_nearest as codes_grib_find_nearest +from gribapi import grib_get_native_type as codes_get_native_type +from gribapi import grib_get as codes_get +from gribapi import grib_get_array as codes_get_array +from gribapi import grib_get_values as codes_get_values +from gribapi import grib_set_values as codes_set_values +from gribapi import grib_set as codes_set +from gribapi import grib_set_array as codes_set_array +from gribapi import grib_index_get as codes_index_get +from gribapi import grib_index_select as codes_index_select +from gribapi import grib_index_write as codes_index_write +from gribapi import grib_index_read as codes_index_read +from gribapi import grib_no_fail_on_wrong_length as codes_no_fail_on_wrong_length +from gribapi import grib_gts_header as codes_gts_header +from gribapi import grib_get_api_version as codes_get_api_version +from gribapi import grib_get_message as codes_get_message +from gribapi import grib_new_from_message as codes_new_from_message +from gribapi import grib_set_definitions_path as codes_set_definitions_path +from gribapi import grib_set_samples_path as codes_set_samples_path + +from gribapi import GribInternalError as CodesInternalError +from gribapi.errors import * diff --git a/python3/eccodes/high_level/__init__.py b/python3/eccodes/high_level/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/python3/eccodes/high_level/bufr.py b/python3/eccodes/high_level/bufr.py new file mode 100644 index 000000000..e333391a9 --- /dev/null +++ b/python3/eccodes/high_level/bufr.py @@ -0,0 +1,97 @@ +""" +Classes for handling BUFR with a high level interface. + +``BufrFiles`` can be treated mostly as regular files and used as context +managers, as can ``BufrMessages``. Each of these classes destructs itself and +any child instances appropriately. + +Author: Daniel Lee, DWD, 2016 +""" + +from .. import eccodes +from .codesmessage import CodesMessage +from .codesfile import CodesFile + + +class BufrMessage(CodesMessage): + + __doc__ = "\n".join(CodesMessage.__doc__.splitlines()[4:]).format( + prod_type="BUFR", classname="BufrMessage", parent="BufrFile", + alias="bufr") + + product_kind = eccodes.CODES_PRODUCT_BUFR + + # Arguments included explicitly to support introspection + # TODO: Can we get this to work with an index? + def __init__(self, codes_file=None, clone=None, sample=None, + headers_only=False): + """ + Open a message and inform the GRIB file that it's been incremented. + + The message is taken from ``codes_file``, cloned from ``clone`` or + ``sample``, or taken from ``index``, in that order of precedence. + """ + super(self.__class__, self).__init__(codes_file, clone, sample, + headers_only) + #self._unpacked = False + + #def get(self, key, ktype=None): + # """Return requested value, unpacking data values if necessary.""" + # # TODO: Only do this if accessing arrays that need unpacking + # if not self._unpacked: + # self.unpacked = True + # return super(self.__class__, self).get(key, ktype) + + #def missing(self, key): + # """ + # Report if key is missing.# + # + # Overloaded due to confusing behaviour in ``codes_is_missing`` (SUP-1874). + # """ + # return not bool(eccodes.codes_is_defined(self.codes_id, key)) + + def unpack(self): + """Decode data section""" + eccodes.codes_set(self.codes_id, 'unpack', 1) + + def pack(self): + """Encode data section""" + eccodes.codes_set(self.codes_id, 'pack', 1) + + def keys(self, namespace=None): + #self.unpack() + #return super(self.__class__, self).keys(namespace) + iterator = eccodes.codes_bufr_keys_iterator_new(self.codes_id) + keys = [] + while eccodes.codes_bufr_keys_iterator_next(iterator): + key = eccodes.codes_bufr_keys_iterator_get_name(iterator) + keys.append(key) + eccodes.codes_bufr_keys_iterator_delete(iterator) + return keys + + #@property + #def unpacked(self): + # return self._unpacked + + #@unpacked.setter + #def unpacked(self, val): + # eccodes.codes_set(self.codes_id, "unpack", val) + # self._unpacked = val + + #def __setitem__(self, key, value): + # """Set item and pack BUFR.""" + # if not self._unpacked: + # self.unpacked = True + # super(self.__class__, self).__setitem__(key, value) + # eccodes.codes_set(self.codes_id, "pack", True) + + def copy_data(self, destMsg): + """Copy data values from this message to another message""" + return eccodes.codes_bufr_copy_data(self.codes_id, destMsg.codes_id) + +class BufrFile(CodesFile): + + __doc__ = "\n".join(CodesFile.__doc__.splitlines()[4:]).format( + prod_type="BUFR", classname="BufrFile", alias="bufr") + + MessageClass = BufrMessage diff --git a/python3/eccodes/high_level/codesfile.py b/python3/eccodes/high_level/codesfile.py new file mode 100644 index 000000000..e55c96cb7 --- /dev/null +++ b/python3/eccodes/high_level/codesfile.py @@ -0,0 +1,72 @@ +""" +``CodesFile`` class that implements a file that is readable by ecCodes and +closes itself and its messages when it is no longer needed. + +Author: Daniel Lee, DWD, 2016 +""" + +from .. import eccodes +import io + +class CodesFile(io.IOBase): + + """ + An abstract class to specify and/or implement common behaviour that files + read by ecCodes should implement. + + A {prod_type} file handle meant for use in a context manager. + + Individual messages can be accessed using the ``next`` method. Of course, + it is also possible to iterate over each message in the file:: + + >>> with {classname}(filename) as {alias}: + ... # Print number of messages in file + ... len({alias}) + ... # Open all messages in file + ... for msg in {alias}: + ... print(msg[key_name]) + ... len({alias}.open_messages) + >>> # When the file is closed, any open messages are closed + >>> len({alias}.open_messages) + """ + + #: Type of messages belonging to this file + MessageClass = None + + def __init__(self, filename, mode="r"): + """Open file and receive codes file handle.""" + #: File handle for working with actual file on disc + #: The class holds the file it works with because ecCodes' + # typechecking does not allow using inherited classes. + self.file_handle = open(filename, mode) + #: Number of message in file currently being read + self.message = 0 + #: Open messages + self.open_messages = [] + self.name = filename + + def __exit__(self, exception_type, exception_value, traceback): + """Close all open messages, release file handle and close file.""" + while self.open_messages: + self.open_messages.pop().close() + self.file_handle.close() + + def __len__(self): + """Return total number of messages in file.""" + return eccodes.codes_count_in_file(self.file_handle) + + def __enter__(self): + return self + + def close(self): + """Possibility to manually close file.""" + self.__exit__(None, None, None) + + def __iter__(self): + return self + + def next(self): + try: + return self.MessageClass(self) + except IOError: + raise StopIteration() diff --git a/python3/eccodes/high_level/codesmessage.py b/python3/eccodes/high_level/codesmessage.py new file mode 100644 index 000000000..234c1448e --- /dev/null +++ b/python3/eccodes/high_level/codesmessage.py @@ -0,0 +1,186 @@ +""" +``CodesMessage`` class that implements a message readable by ecCodes that +allows access to the message's key-value pairs in a dictionary-like manner +and closes the message when it is no longer needed, coordinating this with +its host file. + +Author: Daniel Lee, DWD, 2016 +""" + +from .. import eccodes + + +class CodesMessage(object): + + """ + An abstract class to specify and/or implement common behaviour that + messages read by ecCodes should implement. + + A {prod_type} message. + + Each ``{classname}`` is stored as a key/value pair in a dictionary-like + structure. It can be used in a context manager or by itself. When the + ``{parent}`` it belongs to is closed, the ``{parent}`` closes any open + ``{classname}``s that belong to it. If a ``{classname}`` is closed before + its ``{parent}`` is closed, it informs the ``{parent}`` of its closure. + + Scalar and vector values are set appropriately through the same method. + + ``{classname}``s can be instantiated from a ``{parent}``, cloned from + other ``{classname}``s or taken from samples. Iterating over the members + of a ``{parent}`` extracts the ``{classname}``s it contains until the + ``{parent}`` is exhausted. + + Usage:: + + >>> with {parent}(filename) as {alias}: + ... # Access a key from each message + ... for msg in {alias}: + ... print(msg[key_name]) + ... # Report number of keys in message + ... len(msg) + ... # Report message size in bytes + ... msg.size + ... # Report keys in message + ... msg.keys() + ... # Set scalar value + ... msg[scalar_key] = 5 + ... # Check key's value + ... msg[scalar_key] + ... msg[key_name] + ... # Array values are set transparently + ... msg[array_key] = [1, 2, 3] + ... # Messages can be written to file + ... with open(testfile, "w") as test: + ... msg.write(test) + ... # Messages can be cloned from other messages + ... msg2 = {classname}(clone=msg) + ... # If desired, messages can be closed manually or used in with + ... msg.close() + """ + + #: ecCodes enum-like PRODUCT constant + product_kind = None + + def __init__(self, codes_file=None, clone=None, sample=None, + headers_only=False, other_args_found=False): + """ + Open a message and inform the host file that it's been incremented. + + If ``codes_file`` is not supplied, the message is cloned from + ``CodesMessage`` ``clone``. If neither is supplied, + the ``CodesMessage`` is cloned from ``sample``. + + :param codes_file: A file readable for ecCodes + :param clone: A valid ``CodesMessage`` + :param sample: A valid sample path to create ``CodesMessage`` from + """ + if not other_args_found and codes_file is None and clone is None and sample is None: + raise RuntimeError("CodesMessage initialization parameters not " + "present.") + #: Unique ID, for ecCodes interface + self.codes_id = None + #: File containing message + self.codes_file = None + if codes_file is not None: + self.codes_id = eccodes.codes_new_from_file( + codes_file.file_handle, self.product_kind, headers_only) + if self.codes_id is None: + raise IOError("CodesFile %s is exhausted" % codes_file.name) + self.codes_file = codes_file + self.codes_file.message += 1 + self.codes_file.open_messages.append(self) + elif clone is not None: + self.codes_id = eccodes.codes_clone(clone.codes_id) + elif sample is not None: + self.codes_id = eccodes.codes_new_from_samples( + sample, self.product_kind) + + def write(self, outfile=None): + """Write message to file.""" + if not outfile: + # This is a hack because the API does not accept inheritance + outfile = self.codes_file.file_handle + eccodes.codes_write(self.codes_id, outfile) + + def __setitem__(self, key, value): + """ + Set value associated with key. + + Iterables and scalars are handled intelligently. + """ + # Passed key is iterable. Value has to be iterable too + if hasattr(key, "__iter__"): + if type(key) != type(value): + raise TypeError('Key must have same type as value') + if len(key) != len(value): + raise ValueError('Key array must have same size as value array') + eccodes.codes_set_key_vals(self.codes_id,",".join([str(key[i])+"="+str(value[i]) for i in range(len(key))])) + elif hasattr(value, "__iter__"): + # Passed value is iterable and not string + eccodes.codes_set_array(self.codes_id, key, value) + else: + eccodes.codes_set(self.codes_id, key, value) + + def keys(self, namespace=None): + """Get available keys in message.""" + iterator = eccodes.codes_keys_iterator_new(self.codes_id, + namespace=namespace) + keys = [] + while eccodes.codes_keys_iterator_next(iterator): + key = eccodes.codes_keys_iterator_get_name(iterator) + keys.append(key) + eccodes.codes_keys_iterator_delete(iterator) + return keys + + def size(self): + """Return size of message in bytes.""" + return eccodes.codes_get_message_size(self.codes_id) + + def dump(self): + """Dump message's binary content.""" + return eccodes.codes_get_message(self.codes_id) + + def get(self, key, ktype=None): + """Get value of a given key as its native or specified type.""" + # if self.missing(key): + # raise KeyError("Value of key %s is MISSING." % key) + if eccodes.codes_get_size(self.codes_id, key) > 1: + ret = eccodes.codes_get_array(self.codes_id, key, ktype) + else: + ret = eccodes.codes_get(self.codes_id, key, ktype) + return ret + + def __exit__(self, exc_type, exc_val, exc_tb): + """Release message handle and inform host file of release.""" + eccodes.codes_release(self.codes_id) + + def __enter__(self): + return self + + def close(self): + """Possibility to manually close message.""" + self.__exit__(None, None, None) + + def __contains__(self, key): + """Check whether a key is present in message.""" + return key in self.keys() + + def __len__(self): + """Return key count.""" + return len(self.keys()) + + def __getitem__(self, key): + """Return value associated with key as its native type.""" + return self.get(key) + + def __iter__(self): + return iter(self.keys()) + + # Not yet implemented + # def itervalues(self): + # return self.values() + + def items(self): + """Return list of tuples of all key/value pairs.""" + return [(key, self[key]) for key in self.keys()] diff --git a/python3/eccodes/high_level/gribfile.py b/python3/eccodes/high_level/gribfile.py new file mode 100644 index 000000000..6e074fe09 --- /dev/null +++ b/python3/eccodes/high_level/gribfile.py @@ -0,0 +1,17 @@ +""" +``GribFile`` class that implements a GRIB file that closes itself and its +messages when it is no longer needed. + +Author: Daniel Lee, DWD, 2014 +""" + +from .codesfile import CodesFile +from .gribmessage import GribMessage + + +class GribFile(CodesFile): + + __doc__ = "\n".join(CodesFile.__doc__.splitlines()[4:]).format( + prod_type="GRIB", classname="GribFile", alias="grib") + + MessageClass = GribMessage diff --git a/python3/eccodes/high_level/gribindex.py b/python3/eccodes/high_level/gribindex.py new file mode 100644 index 000000000..934dd03a4 --- /dev/null +++ b/python3/eccodes/high_level/gribindex.py @@ -0,0 +1,102 @@ +""" +``GribIndex`` class that implements a GRIB index that allows access to +ecCodes's index functionality. + +Author: Daniel Lee, DWD, 2014 +""" + +from .. import eccodes +from .gribmessage import GribMessage + + +class GribIndex(object): + """ + A GRIB index meant for use in a context manager. + + Usage:: + + >>> # Create index from file with keys + >>> with GribIndex(filename, keys) as idx: + ... # Write index to file + ... idx.write(index_file) + >>> # Read index from file + >>> with GribIndex(file_index=index_file) as idx: + ... # Add new file to index + ... idx.add(other_filename) + ... # Report number of unique values for given key + ... idx.size(key) + ... # Report unique values indexed by key + ... idx.values(key) + ... # Request GribMessage matching key, value + ... msg = idx.select({key: value}) + """ + + def __enter__(self): + return self + + def __exit__(self, exception_type, exception_value, traceback): + """Release GRIB message handle and inform file of release.""" + while self.open_messages: + self.open_messages[0].close() + eccodes.codes_index_release(self.iid) + + def close(self): + """Possibility to manually close index.""" + self.__exit__(None, None, None) + + def __init__(self, filename=None, keys=None, file_index=None, + grib_index=None): + """ + Create new GRIB index over ``keys`` from ``filename``. + + ``filename`` should be a string of the desired file's filename. + ``keys`` should be a sequence of keys to index. ``file_index`` should + be a string of the file that the index should be loaded from. + ``grib_index`` should be another ``GribIndex``. + + If ``filename`` and ``keys`` are provided, the ``GribIndex`` is + initialized over the given keys from the given file. If they are not + provided, the ``GribIndex`` is read from ``indexfile``. If + ``grib_index`` is provided, it is cloned from the given ``GribIndex``. + """ + #: Grib index ID + self.iid = None + if filename and keys: + self.iid = eccodes.codes_index_new_from_file(filename, keys) + elif file_index: + self.iid = eccodes.codes_index_read(file_index) + elif grib_index: + self.iid = eccodes.codes_new_from_index(grib_index.iid) + else: + raise RuntimeError("No source was supplied " + "(possibilities: grib_file, clone, sample).") + #: Indexed keys. Only available if GRIB is initialized from file. + self.keys = keys + #: Open GRIB messages + self.open_messages = [] + + def size(self, key): + """Return number of distinct values for index key.""" + return eccodes.codes_index_get_size(self.iid, key) + + def values(self, key, ktype=str): + """Return distinct values of index key.""" + return eccodes.codes_index_get(self.iid, key, ktype) + + def add(self, filename): + """Add ``filename`` to the ``GribIndex``.""" + eccodes.codes_index_add_file(self.iid, filename) + + def write(self, outfile): + """Write index to filename at ``outfile``.""" + eccodes.codes_index_write(self.iid, outfile) + + def select(self, key_value_pairs): + """ + Return message associated with given key value pairs. + + ``key_value_pairs`` should be passed as a dictionary. + """ + for key in key_value_pairs: + eccodes.codes_index_select(self.iid, key, key_value_pairs[key]) + return GribMessage(gribindex=self) diff --git a/python3/eccodes/high_level/gribmessage.py b/python3/eccodes/high_level/gribmessage.py new file mode 100644 index 000000000..c87cfedd9 --- /dev/null +++ b/python3/eccodes/high_level/gribmessage.py @@ -0,0 +1,80 @@ +""" +``GribMessage`` class that implements a GRIB message that allows access to +the message's key-value pairs in a dictionary-like manner and closes the +message when it is no longer needed, coordinating this with its host file. + +Author: Daniel Lee, DWD, 2014 +""" + +from .codesmessage import CodesMessage +from .. import eccodes + + +class IndexNotSelectedError(Exception): + """GRIB index was requested before selecting key/value pairs.""" + + +class GribMessage(CodesMessage): + + __doc__ = "\n".join(CodesMessage.__doc__.splitlines()[4:]).format( + prod_type="GRIB", classname="GribMessage", parent="GribFile", + alias="grib") + + product_kind = eccodes.CODES_PRODUCT_GRIB + + # Arguments included explicitly to support introspection + def __init__(self, codes_file=None, clone=None, sample=None, + headers_only=False, gribindex=None): + """ + Open a message and inform the GRIB file that it's been incremented. + + The message is taken from ``codes_file``, cloned from ``clone`` or + ``sample``, or taken from ``index``, in that order of precedence. + """ + grib_args_present = True + if gribindex is None: + grib_args_present = False + super(self.__class__, self).__init__(codes_file, clone, sample, + headers_only, grib_args_present) + #: GribIndex referencing message + self.grib_index = None + if gribindex is not None: + self.codes_id = eccodes.codes_new_from_index(gribindex.iid) + if not self.codes_id: + raise IndexNotSelectedError("All keys must have selected " + "values before receiving message " + "from index.") + self.grib_index = gribindex + gribindex.open_messages.append(self) + + def __exit__(self, exc_type, exc_val, exc_tb): + """Release GRIB message handle and inform file of release.""" + super(self.__class__, self).__exit__(exc_type, exc_val, exc_tb) + if self.grib_index: + self.grib_index.open_messages.remove(self) + + def missing(self, key): + """Report if the value of a key is MISSING.""" + return bool(eccodes.codes_is_missing(self.codes_id, key)) + + def set_missing(self, key): + """Set the value of key to MISSING.""" + eccodes.codes_set_missing(self.codes_id, key) + + @property + def gid(self): + """Provided for backwards compatibility.""" + return self.codes_id + + @property + def grib_file(self): + """Provided for backwards compatibility.""" + return self.codes_file + + @gid.setter + def gid(self, val): + self.codes_id = val + + @grib_file.setter + def grib_file(self, val): + self.codes_file = val diff --git a/python3/extrules.am b/python3/extrules.am new file mode 100644 index 000000000..70b27ad39 --- /dev/null +++ b/python3/extrules.am @@ -0,0 +1,7 @@ +# Use SWIG version 3.0.12 +# Python3 support added with -py3 +# +swig : gribapi_swig.i + swig -v -py3 -python -module gribapi_swig -o swig_wrap_numpy.c gribapi_swig.i + cp gribapi_swig.py swig_wrap_numpy.py + diff --git a/python3/grib_errors.h b/python3/grib_errors.h new file mode 100644 index 000000000..2b35a261b --- /dev/null +++ b/python3/grib_errors.h @@ -0,0 +1,143 @@ +/* This part is automatically generated by ./errors.pl, do not edit */ +#ifndef grib_errors_H +#define grib_errors_H +/*! \defgroup errors Error codes +Error codes returned by the grib_api functions. +*/ +/*! @{*/ +/** No error */ +#define GRIB_SUCCESS 0 +/** End of resource reached */ +#define GRIB_END_OF_FILE -1 +/** Internal error */ +#define GRIB_INTERNAL_ERROR -2 +/** Passed buffer is too small */ +#define GRIB_BUFFER_TOO_SMALL -3 +/** Function not yet implemented */ +#define GRIB_NOT_IMPLEMENTED -4 +/** Missing 7777 at end of message */ +#define GRIB_7777_NOT_FOUND -5 +/** Passed array is too small */ +#define GRIB_ARRAY_TOO_SMALL -6 +/** File not found */ +#define GRIB_FILE_NOT_FOUND -7 +/** Code not found in code table */ +#define GRIB_CODE_NOT_FOUND_IN_TABLE -8 +/** Array size mismatch */ +#define GRIB_WRONG_ARRAY_SIZE -9 +/** Key/value not found */ +#define GRIB_NOT_FOUND -10 +/** Input output problem */ +#define GRIB_IO_PROBLEM -11 +/** Message invalid */ +#define GRIB_INVALID_MESSAGE -12 +/** Decoding invalid */ +#define GRIB_DECODING_ERROR -13 +/** Encoding invalid */ +#define GRIB_ENCODING_ERROR -14 +/** Code cannot unpack because of string too small */ +#define GRIB_NO_MORE_IN_SET -15 +/** Problem with calculation of geographic attributes */ +#define GRIB_GEOCALCULUS_PROBLEM -16 +/** Memory allocation error */ +#define GRIB_OUT_OF_MEMORY -17 +/** Value is read only */ +#define GRIB_READ_ONLY -18 +/** Invalid argument */ +#define GRIB_INVALID_ARGUMENT -19 +/** Null handle */ +#define GRIB_NULL_HANDLE -20 +/** Invalid section number */ +#define GRIB_INVALID_SECTION_NUMBER -21 +/** Value cannot be missing */ +#define GRIB_VALUE_CANNOT_BE_MISSING -22 +/** Wrong message length */ +#define GRIB_WRONG_LENGTH -23 +/** Invalid key type */ +#define GRIB_INVALID_TYPE -24 +/** Unable to set step */ +#define GRIB_WRONG_STEP -25 +/** Wrong units for step (step must be integer) */ +#define GRIB_WRONG_STEP_UNIT -26 +/** Invalid file id */ +#define GRIB_INVALID_FILE -27 +/** Invalid grib id */ +#define GRIB_INVALID_GRIB -28 +/** Invalid index id */ +#define GRIB_INVALID_INDEX -29 +/** Invalid iterator id */ +#define GRIB_INVALID_ITERATOR -30 +/** Invalid keys iterator id */ +#define GRIB_INVALID_KEYS_ITERATOR -31 +/** Invalid nearest id */ +#define GRIB_INVALID_NEAREST -32 +/** Invalid order by */ +#define GRIB_INVALID_ORDERBY -33 +/** Missing a key from the fieldset */ +#define GRIB_MISSING_KEY -34 +/** The point is out of the grid area */ +#define GRIB_OUT_OF_AREA -35 +/** Concept no match */ +#define GRIB_CONCEPT_NO_MATCH -36 +/** Hash array no match */ +#define GRIB_HASH_ARRAY_NO_MATCH -37 +/** Definitions files not found */ +#define GRIB_NO_DEFINITIONS -38 +/** Wrong type while packing */ +#define GRIB_WRONG_TYPE -39 +/** End of resource */ +#define GRIB_END -40 +/** Unable to code a field without values */ +#define GRIB_NO_VALUES -41 +/** Grid description is wrong or inconsistent */ +#define GRIB_WRONG_GRID -42 +/** End of index reached */ +#define GRIB_END_OF_INDEX -43 +/** Null index */ +#define GRIB_NULL_INDEX -44 +/** End of resource reached when reading message */ +#define GRIB_PREMATURE_END_OF_FILE -45 +/** An internal array is too small */ +#define GRIB_INTERNAL_ARRAY_TOO_SMALL -46 +/** Message is too large for the current architecture */ +#define GRIB_MESSAGE_TOO_LARGE -47 +/** Constant field */ +#define GRIB_CONSTANT_FIELD -48 +/** Switch unable to find a matching case */ +#define GRIB_SWITCH_NO_MATCH -49 +/** Underflow */ +#define GRIB_UNDERFLOW -50 +/** Message malformed */ +#define GRIB_MESSAGE_MALFORMED -51 +/** Index is corrupted */ +#define GRIB_CORRUPTED_INDEX -52 +/** Invalid number of bits per value */ +#define GRIB_INVALID_BPV -53 +/** Edition of two messages is different */ +#define GRIB_DIFFERENT_EDITION -54 +/** Value is different */ +#define GRIB_VALUE_DIFFERENT -55 +/** Invalid key value */ +#define GRIB_INVALID_KEY_VALUE -56 +/** String is smaller than requested */ +#define GRIB_STRING_TOO_SMALL -57 +/** Wrong type conversion */ +#define GRIB_WRONG_CONVERSION -58 +/** Missing BUFR table entry for descriptor */ +#define GRIB_MISSING_BUFR_ENTRY -59 +/** Null pointer */ +#define GRIB_NULL_POINTER -60 +/** Attribute is already present, cannot add */ +#define GRIB_ATTRIBUTE_CLASH -61 +/** Too many attributes. Increase MAX_ACCESSOR_ATTRIBUTES */ +#define GRIB_TOO_MANY_ATTRIBUTES -62 +/** Attribute not found. */ +#define GRIB_ATTRIBUTE_NOT_FOUND -63 +/** Edition not supported. */ +#define GRIB_UNSUPPORTED_EDITION -64 +/** Value out of coding range */ +#define GRIB_OUT_OF_RANGE -65 +/** Size of bitmap is incorrect */ +#define GRIB_WRONG_BITMAP_SIZE -66 +/*! @}*/ +#endif diff --git a/python3/grib_interface.c b/python3/grib_interface.c new file mode 100644 index 000000000..3838aa827 --- /dev/null +++ b/python3/grib_interface.c @@ -0,0 +1,2462 @@ +/* + * Copyright 2005-2018 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include "assert.h" + +#if HAVE_SYS_TYPES_H +# include +#endif + +#if HAVE_SYS_STAT_H +# include +#endif + +#ifdef HAVE_FCNTL_H +# include +#endif + +#include +#include + +#if GRIB_PTHREADS + static pthread_once_t once = PTHREAD_ONCE_INIT; + static pthread_mutex_t handle_mutex = PTHREAD_MUTEX_INITIALIZER; + static pthread_mutex_t index_mutex = PTHREAD_MUTEX_INITIALIZER; + static pthread_mutex_t multi_handle_mutex = PTHREAD_MUTEX_INITIALIZER; + static pthread_mutex_t iterator_mutex = PTHREAD_MUTEX_INITIALIZER; + static pthread_mutex_t keys_iterator_mutex = PTHREAD_MUTEX_INITIALIZER; + + static void init() { + pthread_mutexattr_t attr; + + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&handle_mutex,&attr); + pthread_mutex_init(&index_mutex,&attr); + pthread_mutex_init(&multi_handle_mutex,&attr); + pthread_mutex_init(&iterator_mutex,&attr); + pthread_mutex_init(&keys_iterator_mutex,&attr); + pthread_mutexattr_destroy(&attr); + + } +#elif GRIB_OMP_THREADS + static int once = 0; + static omp_nest_lock_t handle_mutex; + static omp_nest_lock_t index_mutex; + static omp_nest_lock_t multi_handle_mutex; + static omp_nest_lock_t iterator_mutex; + static omp_nest_lock_t keys_iterator_mutex; + + static void init() + { + GRIB_OMP_CRITICAL(lock_python) + { + if (once == 0) + { + omp_init_nest_lock(&handle_mutex); + omp_init_nest_lock(&index_mutex); + omp_init_nest_lock(&multi_handle_mutex); + omp_init_nest_lock(&iterator_mutex); + omp_init_nest_lock(&keys_iterator_mutex); + once = 1; + } + } + } +#endif + +int GRIB_NULL=-1; +int GRIB_NULL_NEAREST=-1; + +typedef struct l_grib_file l_grib_file; + +struct l_grib_file { + int id; + FILE* f; + l_grib_file* next; +}; + +typedef struct l_grib_handle l_grib_handle; + +struct l_grib_handle { + int id; + grib_handle* h; + l_grib_handle* next; +}; + +typedef struct l_grib_index l_grib_index; + +struct l_grib_index { + int id; + grib_index* h; + l_grib_index* next; +}; + +typedef struct l_grib_multi_handle l_grib_multi_handle; + +struct l_grib_multi_handle { + int id; + grib_multi_handle* h; + l_grib_multi_handle* next; +}; + +typedef struct l_grib_iterator l_grib_iterator; + +struct l_grib_iterator { + int id; + grib_iterator* i; + l_grib_iterator* next; +}; + +typedef struct l_grib_keys_iterator l_grib_keys_iterator; +struct l_grib_keys_iterator { + int id; + grib_keys_iterator* i; + l_grib_keys_iterator* next; +}; + +typedef struct l_bufr_keys_iterator l_bufr_keys_iterator; +struct l_bufr_keys_iterator { + int id; + bufr_keys_iterator* i; + l_bufr_keys_iterator* next; +}; + +static l_grib_handle* handle_set = NULL; +static l_grib_index* index_set = NULL; +static l_grib_multi_handle* multi_handle_set = NULL; +static l_grib_file* file_set = NULL; +static l_grib_iterator* iterator_set = NULL; +static l_grib_keys_iterator* keys_iterator_set = NULL; +static l_bufr_keys_iterator* bufr_keys_iterator_set = NULL; + +static int push_file(FILE* f){ + l_grib_file* current = file_set; + l_grib_file* previous = file_set; + l_grib_file* new = NULL; + int myindex = 1; + + if(!file_set){ + file_set = malloc(sizeof(l_grib_file)); + file_set->id = myindex; + file_set->f = f; + file_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->f = f; + return current->id ; + } else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_handle)); + new->id = myindex; + new->f = f; + new->next = current; + previous->next = new; + return myindex; +} + +static void _push_handle(grib_handle *h,int *gid) +{ + l_grib_handle* current= handle_set; + l_grib_handle* previous= handle_set; + l_grib_handle* new= NULL; + int myindex= 1; + + if (*gid > 0 ) { + while(current) { + if(current->id == *gid) break; + current = current->next; + } + if (current) { + grib_handle_delete(current->h); + current->h=h; + return; + } + } + + current= handle_set; + + if(!handle_set){ + handle_set = malloc(sizeof(l_grib_handle)); + handle_set->id = myindex; + handle_set->h = h; + handle_set->next = NULL; + *gid=myindex; + return; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->h = h; + *gid=current->id; + return; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_handle)); + new->id = myindex; + new->h = h; + new->next = current; + previous->next = new; + + *gid=myindex; + return; +} + +static void _push_index(grib_index *h,int *gid) +{ + l_grib_index* current= index_set; + l_grib_index* previous= index_set; + l_grib_index* new= NULL; + int myindex= 1; + + if (*gid > 0 ) { + while(current) { + if(current->id == *gid) break; + current = current->next; + } + if (current) { + grib_index_delete(current->h); + current->h=h; + return; + } + } + + current= index_set; + + if(!index_set){ + index_set = malloc(sizeof(l_grib_index)); + index_set->id = myindex; + index_set->h = h; + index_set->next = NULL; + *gid=myindex; + return; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->h = h; + *gid=current->id; + return; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_index)); + new->id = myindex; + new->h = h; + new->next = current; + previous->next = new; + + *gid=myindex; + return; +} + +static void _push_multi_handle(grib_multi_handle *h,int *gid) +{ + l_grib_multi_handle* current= multi_handle_set; + l_grib_multi_handle* previous= multi_handle_set; + l_grib_multi_handle* new= NULL; + int myindex= 1; + + if (*gid > 0 ) { + while(current) { + if(current->id == *gid) break; + current = current->next; + } + if (current) { + grib_multi_handle_delete(current->h); + current->h=h; + return; + } + } + + current= multi_handle_set; + + if(!multi_handle_set){ + multi_handle_set = malloc(sizeof(l_grib_multi_handle)); + multi_handle_set->id = myindex; + multi_handle_set->h = h; + multi_handle_set->next = NULL; + *gid=myindex; + return; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->h = h; + *gid=current->id; + return; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_multi_handle)); + new->id = myindex; + new->h = h; + new->next = current; + previous->next = new; + + *gid=myindex; + return; +} + +static void push_handle(grib_handle *h,int *gid) +{ + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&handle_mutex) + _push_handle(h,gid); + GRIB_MUTEX_UNLOCK(&handle_mutex) + return; +} + +static void push_index(grib_index *h,int *gid) +{ + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&index_mutex) + _push_index(h,gid); + GRIB_MUTEX_UNLOCK(&index_mutex) + return; +} + +static void push_multi_handle(grib_multi_handle *h,int *gid) +{ + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&multi_handle_mutex) + _push_multi_handle(h,gid); + GRIB_MUTEX_UNLOCK(&multi_handle_mutex) + return; +} + +static int _push_iterator(grib_iterator *i) +{ + l_grib_iterator* current = iterator_set; + l_grib_iterator* previous = iterator_set; + l_grib_iterator* new = NULL; + int myindex = 1; + + if(!iterator_set){ + iterator_set = malloc(sizeof(l_grib_iterator)); + iterator_set->id = myindex; + iterator_set->i = i; + iterator_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->i = i; + return current->id; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_iterator)); + new->id = myindex; + new->i = i; + new->next = current; + previous->next = new; + + return myindex; +} + +static int push_iterator(grib_iterator *i) +{ + int ret=0; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&iterator_mutex) + ret=_push_iterator(i); + GRIB_MUTEX_UNLOCK(&iterator_mutex) + return ret; +} + +static int _push_keys_iterator(grib_keys_iterator *i) +{ + l_grib_keys_iterator* current = keys_iterator_set; + l_grib_keys_iterator* previous = keys_iterator_set; + l_grib_keys_iterator* new = NULL; + int myindex = 1; + + if(!keys_iterator_set){ + keys_iterator_set = malloc(sizeof(l_grib_keys_iterator)); + keys_iterator_set->id = myindex; + keys_iterator_set->i = i; + keys_iterator_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->i = i; + return current->id; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + if(!previous) return -1; + + new = malloc(sizeof(l_grib_keys_iterator)); + new->id = myindex; + new->i = i; + new->next = current; + previous->next = new; + + return myindex; +} +static int push_keys_iterator(grib_keys_iterator *i) +{ + int ret=0; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&keys_iterator_mutex) + ret=_push_keys_iterator(i); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) + return ret; +} + +//BUFR keys iterator +static int _push_bufr_keys_iterator(bufr_keys_iterator *i) +{ + l_bufr_keys_iterator* current = bufr_keys_iterator_set; + l_bufr_keys_iterator* previous = bufr_keys_iterator_set; + l_bufr_keys_iterator* the_new = NULL; + int myindex = 1; + + if(!bufr_keys_iterator_set){ + bufr_keys_iterator_set = (l_bufr_keys_iterator*)malloc(sizeof(l_bufr_keys_iterator)); + Assert(bufr_keys_iterator_set); + bufr_keys_iterator_set->id = myindex; + bufr_keys_iterator_set->i = i; + bufr_keys_iterator_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->i = i; + return current->id; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + if(!previous) return -1; + + the_new = (l_bufr_keys_iterator*)malloc(sizeof(l_bufr_keys_iterator)); + Assert(the_new); + the_new->id = myindex; + the_new->i = i; + the_new->next = current; + previous->next = the_new; + + return myindex; +} +static int push_bufr_keys_iterator(bufr_keys_iterator *i) +{ + int ret=0; + GRIB_MUTEX_INIT_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&keys_iterator_mutex); + ret=_push_bufr_keys_iterator(i); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex); + return ret; +} + + +static grib_handle* _get_handle(int handle_id) +{ + l_grib_handle* current= handle_set; + + while(current){ + if(current->id == handle_id) return current->h; + current = current->next; + } + + return NULL; +} + +static grib_index* _get_index(int index_id) +{ + l_grib_index* current= index_set; + + while(current){ + if(current->id == index_id) return current->h; + current = current->next; + } + + return NULL; +} + +static grib_multi_handle* _get_multi_handle(int multi_handle_id) +{ + l_grib_multi_handle* current= multi_handle_set; + + while(current){ + if(current->id == multi_handle_id) return current->h; + current = current->next; + } + + return NULL; +} + +static grib_handle* get_handle(int handle_id) +{ + grib_handle* h=NULL; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&handle_mutex) + h=_get_handle(handle_id); + GRIB_MUTEX_UNLOCK(&handle_mutex) + return h; +} + +static grib_index* get_index(int index_id) +{ + grib_index* h=NULL; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&index_mutex) + h=_get_index(index_id); + GRIB_MUTEX_UNLOCK(&index_mutex) + return h; +} + +static grib_multi_handle* get_multi_handle(int multi_handle_id) +{ + grib_multi_handle* h=NULL; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&multi_handle_mutex) + h=_get_multi_handle(multi_handle_id); + GRIB_MUTEX_UNLOCK(&multi_handle_mutex) + return h; +} + +static FILE* get_file(int file_id) +{ + l_grib_file* current = file_set; + while(current){ + if(current->id == file_id) return current->f; + current = current->next; + } + return NULL; +} + +static grib_iterator* _get_iterator(int iterator_id) +{ + l_grib_iterator* current = iterator_set; + + while(current){ + if(current->id == iterator_id) return current->i; + current = current->next; + } + return NULL; +} +static grib_iterator* get_iterator(int iterator_id) +{ + grib_iterator* i=NULL; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&iterator_mutex) + i=_get_iterator(iterator_id); + GRIB_MUTEX_UNLOCK(&iterator_mutex) + return i; +} + +static grib_keys_iterator* _get_keys_iterator(int keys_iterator_id) +{ + l_grib_keys_iterator* current = keys_iterator_set; + + while(current){ + if(current->id == keys_iterator_id) return current->i; + current = current->next; + } + return NULL; +} +static grib_keys_iterator* get_keys_iterator(int keys_iterator_id) +{ + grib_keys_iterator* i=NULL; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&keys_iterator_mutex) + i=_get_keys_iterator(keys_iterator_id); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) + return i; +} + +//BUFR keys iterator +static bufr_keys_iterator* _get_bufr_keys_iterator(int keys_iterator_id) +{ + l_bufr_keys_iterator* current = bufr_keys_iterator_set; + + while(current){ + if(current->id == keys_iterator_id) return current->i; + current = current->next; + } + return NULL; +} +static bufr_keys_iterator* get_bufr_keys_iterator(int keys_iterator_id) +{ + bufr_keys_iterator* i=NULL; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&keys_iterator_mutex) + i=_get_bufr_keys_iterator(keys_iterator_id); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) + return i; +} + + +static int clear_file(int file_id) +{ + l_grib_file* current = file_set; + int ret = 0; + while(current){ + if(current->id == file_id){ + current->id = -(current->id); + if (current->f) { + ret = fclose(current->f); + if (0 == ret) { + return GRIB_SUCCESS; + } else { + return GRIB_IO_PROBLEM; + } + } + return GRIB_SUCCESS; + } + current = current->next; + } + return GRIB_INVALID_FILE; +} + +static int _clear_handle(int handle_id) +{ + l_grib_handle* current = handle_set; + + /* look for the input grib id to release it */ + while(current){ + if(current->id == handle_id){ + current->id = -(current->id); + if(current->h) return grib_handle_delete(current->h); + } + current = current->next; + } + + /* fail with invalid grib id if not found */ + return GRIB_INVALID_GRIB; +} + +static int _clear_index(int index_id) +{ + l_grib_index* current = index_set; + + while(current){ + if(current->id == index_id){ + current->id = -(current->id); + if (current->h) { + grib_index_delete(current->h); + return GRIB_SUCCESS; + } + } + current = current->next; + } + return GRIB_SUCCESS; +} + +static int _clear_multi_handle(int multi_handle_id) +{ + l_grib_multi_handle* current = multi_handle_set; + + while(current){ + if(current->id == multi_handle_id){ + current->id = -(current->id); + if(current->h) return grib_multi_handle_delete(current->h); + } + current = current->next; + } + return GRIB_SUCCESS; +} + +static int clear_handle(int handle_id) +{ + int ret=0; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&handle_mutex) + ret=_clear_handle(handle_id); + GRIB_MUTEX_UNLOCK(&handle_mutex) + return ret; +} + +static int clear_index(int index_id) +{ + int ret=0; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&index_mutex) + ret=_clear_index(index_id); + GRIB_MUTEX_UNLOCK(&index_mutex) + return ret; +} + +static int clear_multi_handle(int multi_handle_id) +{ + int ret=0; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&multi_handle_mutex) + ret=_clear_multi_handle(multi_handle_id); + GRIB_MUTEX_UNLOCK(&multi_handle_mutex) + return ret; +} + +static int _clear_iterator(int iterator_id) +{ + l_grib_iterator* current = iterator_set; + + while(current){ + if(current->id == iterator_id){ + current->id = -(current->id); + return grib_iterator_delete(current->i); + } + current = current->next; + } + return GRIB_INVALID_ITERATOR; +} + +static int clear_iterator(int iterator_id) +{ + int ret=0; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&iterator_mutex) + ret=_clear_iterator(iterator_id); + GRIB_MUTEX_UNLOCK(&iterator_mutex) + return ret; +} + +static int _clear_keys_iterator(int keys_iterator_id) +{ + l_grib_keys_iterator* current = keys_iterator_set; + + while(current){ + if(current->id == keys_iterator_id){ + current->id = -(current->id); + return grib_keys_iterator_delete(current->i); + } + current = current->next; + } + return GRIB_INVALID_KEYS_ITERATOR; +} +static int clear_keys_iterator(int keys_iterator_id) +{ + int ret=0; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&keys_iterator_mutex) + ret=_clear_keys_iterator(keys_iterator_id); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) + return ret; +} + +//BUFR keys iterator +static int _clear_bufr_keys_iterator(int keys_iterator_id) +{ + l_bufr_keys_iterator* current = bufr_keys_iterator_set; + + while(current){ + if(current->id == keys_iterator_id){ + current->id = -(current->id); + return codes_bufr_keys_iterator_delete(current->i); + } + current = current->next; + } + return GRIB_INVALID_KEYS_ITERATOR; +} +static int clear_bufr_keys_iterator(int keys_iterator_id) +{ + int ret=0; + GRIB_MUTEX_INIT_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&keys_iterator_mutex); + ret=_clear_bufr_keys_iterator(keys_iterator_id); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex); + return ret; +} + +int grib_c_read_any_from_file(int* fid, char* buffer, int* nbytes) +{ + grib_context* c; + int err=0; + size_t size=(size_t)nbytes; + FILE* f=get_file(*fid); + + if (f) { + c=grib_context_get_default( ); + err=grib_read_any_from_file(c,f,buffer,&size); + *nbytes=size; + return err; + } else { + return GRIB_INVALID_FILE; + } +} + +int grib_c_write_file(int* fid, char* buffer, size_t* nbytes) +{ + grib_context* c; + FILE* f=get_file(*fid); + + if (f) { + int ioerr; + c=grib_context_get_default( ); + if( fwrite(buffer, 1, *nbytes, f) != *nbytes) { + ioerr=errno; + grib_context_log(c,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),"IO ERROR: %s",strerror(ioerr)); + return GRIB_IO_PROBLEM; + } + return GRIB_SUCCESS; + } else { + return GRIB_INVALID_FILE; + } +} + +int grib_c_read_file(int* fid, char* buffer, size_t* nbytes) +{ + grib_context* c; + FILE* f=get_file(*fid); + + if (f) { + int ioerr; + c=grib_context_get_default( ); + if( fread(buffer, 1, *nbytes, f) != *nbytes) { + ioerr=errno; + grib_context_log(c,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),"IO ERROR: %s",strerror(ioerr)); + return GRIB_IO_PROBLEM; + } + return GRIB_SUCCESS; + } else { + return GRIB_INVALID_FILE; + } +} + +int grib_c_open_file(int* fid, char* name , char* op) +{ + FILE* f = NULL; + int ioerr=0; + int ret=GRIB_SUCCESS; + + /*TODO Proper context passed as external parameter */ + grib_context* context=grib_context_get_default(); + + f = fopen(name,op); + + if(!f) { + ioerr=errno; + grib_context_log(context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),"IO ERROR: %s: %s",strerror(ioerr),name); + *fid = -1; + ret=GRIB_IO_PROBLEM; + } else { + *fid = push_file(f); + ret=GRIB_SUCCESS; + } + return ret; +} + +int grib_c_close_file(int* fid){ + return clear_file(*fid); +} + +int grib_c_multi_support_on(void) { + grib_multi_support_on(0); + return GRIB_SUCCESS; +} + +int grib_c_multi_support_off(void) { + grib_multi_support_off(0); + return GRIB_SUCCESS; +} + +static int _grib_c_iterator_new_(int* gid,int* iterid,int* mode) +{ + int err=0; + grib_handle* h; + grib_iterator* iter; + + h=get_handle(*gid); + if (!h) { + *iterid=-1; + return GRIB_NULL_HANDLE; + } + iter=grib_iterator_new(h,*mode,&err); + if (iter) + *iterid=push_iterator(iter); + else + *iterid=-1; + return err; +} + +int grib_c_iterator_new(int* gid,int* iterid,int* mode) +{ + int ret=0; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&iterator_mutex) + ret=_grib_c_iterator_new_(gid,iterid,mode); + GRIB_MUTEX_UNLOCK(&iterator_mutex) + return ret; +} + +int grib_c_iterator_next(int* iterid,double* lat,double* lon,double* value) +{ + grib_iterator* iter=get_iterator(*iterid); + if (!iter) return GRIB_INVALID_ITERATOR; + return grib_iterator_next(iter,lat,lon,value); +} + +int grib_c_iterator_delete(int* iterid) +{ + return clear_iterator(*iterid); +} + +static int _grib_c_keys_iterator_new_(int* gid,int* iterid,char* name_space) +{ + int err=0; + grib_handle* h; + grib_keys_iterator* iter; + + h=get_handle(*gid); + if (!h) { + *iterid=-1; + return GRIB_NULL_HANDLE; + } + iter=grib_keys_iterator_new(h,0,name_space); + if (iter) + *iterid=push_keys_iterator(iter); + else + *iterid=-1; + return err; +} +int grib_c_keys_iterator_new(int* gid,int* iterid,char* name_space) +{ + int ret=0; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&keys_iterator_mutex) + ret=_grib_c_keys_iterator_new_(gid,iterid,name_space); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) + return ret; +} +int grib_c_keys_iterator_next(int* iterid) +{ + int ret = 0; + + grib_keys_iterator* iter= get_keys_iterator(*iterid); + + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + + ret = grib_keys_iterator_next(iter); + + return ret; +} +int grib_c_keys_iterator_delete(int* iterid) +{ + return clear_keys_iterator(*iterid); +} +int grib_c_keys_iterator_get_name(int* iterid,char* name,int len) +{ + size_t lsize=len; + char buf[1024]={0,}; + + grib_keys_iterator* kiter=get_keys_iterator(*iterid); + + if (!kiter) return GRIB_INVALID_KEYS_ITERATOR; + if (grib_keys_iterator_get_accessor(kiter)==NULL) + return GRIB_INVALID_KEYS_ITERATOR; + + sprintf(buf,"%s",grib_keys_iterator_get_name(kiter)); + lsize=strlen(buf); + + if ((size_t)len < lsize) return GRIB_ARRAY_TOO_SMALL; + + memcpy(name,buf,lsize); + name[lsize] = '\0'; + + return 0; +} +int grib_c_keys_iterator_rewind(int* kiter) +{ + grib_keys_iterator* i=get_keys_iterator(*kiter); + + if (!i) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_rewind(i); +} + +/*BUFR keys iterator*/ +static int _codes_c_bufr_keys_iterator_new_(int* gid,int* iterid) +{ + int err=0; + grib_handle* h; + bufr_keys_iterator* iter; + + h=get_handle(*gid); + if (!h) { + *iterid=-1; + return GRIB_NULL_HANDLE; + } + iter=codes_bufr_keys_iterator_new(h,0); + if (iter) + *iterid=push_bufr_keys_iterator(iter); + else + *iterid=-1; + return err; +} +int codes_c_bufr_keys_iterator_new(int* gid,int* iterid) +{ + int ret=0; + GRIB_MUTEX_INIT_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&keys_iterator_mutex) + ret = _codes_c_bufr_keys_iterator_new_(gid,iterid); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) + return ret; +} + +int codes_c_bufr_keys_iterator_next(int* iterid) +{ + int ret = 0; + bufr_keys_iterator* iter= get_bufr_keys_iterator(*iterid); + + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + + ret = codes_bufr_keys_iterator_next(iter); + return ret; +} + +int codes_c_bufr_keys_iterator_get_name(int* iterid,char* name,int len) +{ + size_t lsize=len; + char buf[1024]={0,}; + + bufr_keys_iterator* kiter=get_bufr_keys_iterator(*iterid); + + if (!kiter) return GRIB_INVALID_KEYS_ITERATOR; + if (codes_bufr_keys_iterator_get_accessor(kiter)==NULL) + return GRIB_INVALID_KEYS_ITERATOR; + + sprintf(buf,"%s",codes_bufr_keys_iterator_get_name(kiter)); + lsize=strlen(buf); + + if ((size_t)len < lsize) return GRIB_ARRAY_TOO_SMALL; + + memcpy(name,buf,lsize); + name[lsize] = '\0'; + + return 0; +} + +int codes_c_bufr_keys_iterator_rewind(int* kiter) +{ + bufr_keys_iterator* i=get_bufr_keys_iterator(*kiter); + + if (!i) return GRIB_INVALID_KEYS_ITERATOR; + return codes_bufr_keys_iterator_rewind(i); +} + +int codes_c_bufr_keys_iterator_delete(int* iterid) +{ + return clear_bufr_keys_iterator(*iterid); +} + + +int grib_c_gribex_mode_on(void) +{ + grib_gribex_mode_on(0); + return GRIB_SUCCESS; +} + +int grib_c_gribex_mode_off(void) +{ + grib_gribex_mode_off(0); + return GRIB_SUCCESS; +} + +int grib_c_skip_computed(int* iterid) +{ + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_COMPUTED); +} + +int grib_c_skip_coded(int* iterid) +{ + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_CODED); +} + +int grib_c_skip_edition_specific(int* iterid) +{ + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_EDITION_SPECIFIC); +} + +int grib_c_skip_duplicates(int* iterid) +{ + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_DUPLICATES); +} + +int grib_c_skip_read_only(int* iterid) +{ + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_READ_ONLY); +} + +int grib_c_skip_function(int* iterid) +{ + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_FUNCTION); +} + +int grib_c_new_from_message(int* gid, void* buffer , size_t* bufsize) +{ + grib_handle *h = NULL; + h = grib_handle_new_from_message_copy(0, buffer, *bufsize); + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_INTERNAL_ERROR; +} + +int grib_c_new_from_message_copy(int* gid, void* buffer , size_t* bufsize) +{ + grib_handle *h = NULL; + h = grib_handle_new_from_message_copy(0, buffer, *bufsize); + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_INTERNAL_ERROR; +} + +int grib_c_grib_new_from_samples(int* gid, char* name) +{ + grib_handle *h = NULL; + + h = grib_handle_new_from_samples(NULL,name); + /* grib_context_set_debug(h->context,1);*/ + + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_FILE_NOT_FOUND; +} + +int grib_c_bufr_new_from_samples(int* gid, char* name) +{ + grib_handle *h = NULL; + + h = codes_bufr_handle_new_from_samples(NULL,name); + /* grib_context_set_debug(h->context,1);*/ + + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_FILE_NOT_FOUND; +} + +int grib_c_clone(int* gidsrc,int* giddest) +{ + grib_handle *src = get_handle(*gidsrc); + grib_handle *dest = NULL; + + if(src){ + dest = grib_handle_clone(src); + if(dest){ + push_handle(dest,giddest); + return GRIB_SUCCESS; + } + } + + *giddest = -1; + return GRIB_INVALID_GRIB; +} + +int grib_c_copy_namespace(int* gidsrc,char* name,int* giddest) +{ + grib_handle *src = get_handle(*gidsrc); + grib_handle *dest = get_handle(*giddest); + + if(src && dest) + return grib_copy_namespace(dest,name,src); + + return GRIB_INVALID_GRIB; +} + +/* ------------------------------------------------- */ +typedef struct file_info_cache_t file_info_cache_t; +struct file_info_cache_t { + file_info_cache_t* next; + int file_descriptor; + FILE* file_pointer; +}; +static file_info_cache_t* file_info_cache=0; +static void store_file_info(int fd, FILE* fp) +{ + file_info_cache_t* tb=(file_info_cache_t*)malloc(sizeof(file_info_cache_t)); + tb->file_descriptor = fd; + tb->file_pointer = fp; + tb->next = NULL; + /*printf("store_file_info: fd=%d fp=%p\n",fd,fp);*/ + if (!file_info_cache) { + file_info_cache = tb; + } else { + /*Add to end of linked list*/ + file_info_cache_t* q = file_info_cache; + while(q->next) q=q->next; + q->next = tb; + } +} +static FILE* retrieve_file_info(int fd) +{ + file_info_cache_t* p = file_info_cache; + /*printf("retrieve_file_info: fd=%d\n",fd);*/ + while (p) { + if (p->file_descriptor == fd) { + /*printf("\t result=%p\n",p->file_pointer);*/ + return p->file_pointer; + } + p = p->next; + } + /*printf("\t result=NULL\n");*/ + return NULL; +} +#if 0 +static int clear_file_info(int fd) +{ + printf("clear_file_info: fd=%d\n",fd); + file_info_cache_t* curr = file_info_cache; + while(curr) { + if (curr->file_descriptor==fd) { + curr->file_descriptor=-1; + curr->file_pointer=NULL; + /*TODO: Should delete this node */ + return GRIB_SUCCESS; + } + curr=curr->next; + } + return GRIB_INVALID_FILE; +} +#endif +static int clear_file_info(int fd) +{ + /*printf("clear_file_info: fd=%d\n",fd);*/ + file_info_cache_t *curr, *prev=NULL; + for(curr=file_info_cache; curr!=NULL; prev=curr, curr=curr->next) { + if (curr->file_descriptor==fd) {//found it + if(prev==NULL) {//fix head + file_info_cache = curr->next; + } else { + //Fix previous node's 'next' to skip over the removed node + prev->next = curr->next; + } + /*printf("\t Deleting entry curr (%d,%p)\n", curr->file_descriptor,curr->file_pointer);*/ + free(curr); + return GRIB_SUCCESS; + } + } + return GRIB_INVALID_FILE; +} +#if DEBUG +static void dump_file_info() +{ + int i=1; + file_info_cache_t* curr = file_info_cache; + if(!curr) printf("dump_file_info: EMPTY\n"); + else printf("dump_file_info:\n"); + while(curr) { + printf("\t %d: fd=%d fp=%p\n", i++,curr->file_descriptor,curr->file_pointer); + curr=curr->next; + } +} +#endif +/* ------------------------------------------------- */ + +int grib_c_count_in_file(FILE* f,int* n) +{ + int err = 0; + if (f) err=grib_count_in_file(0, f,n); + return err; +} + +int grib_c_new_gts_from_file(FILE* f,int headers_only, int* gid) +{ + grib_handle *h = NULL; + int err = 0; + + if(f){ + h = gts_new_from_file(0,f,&err); + + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +int grib_c_new_metar_from_file(FILE* f,int headers_only, int* gid) +{ + grib_handle *h = NULL; + int err = 0; + + if(f){ + h = metar_new_from_file(0,f,&err); + + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +int grib_c_new_any_from_file(FILE* f,int headers_only,int* gid) +{ + grib_handle *h = NULL; + int err = 0; + if(f){ + h = codes_handle_new_from_file(0,f,PRODUCT_ANY, &err); + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +int grib_c_new_bufr_from_file(FILE* f, int fd, char* fname, int headers_only,int* gid) +{ + grib_handle *h = NULL; + int err = 0; + + if(f){ + FILE* p = retrieve_file_info(fd); + if (p) { + h = codes_handle_new_from_file(0,p,PRODUCT_BUFR, &err); //use cached value + } else { + h = codes_handle_new_from_file(0,f,PRODUCT_BUFR, &err); //use FILE pointer passed in + store_file_info(fd, f); //store it for next time + } + + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_FILE;//TODO: remove element from cache + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +int grib_c_new_from_file(FILE* f, int fd, char* fname, int* gid, int headers_only) +{ + grib_handle *h = NULL; + int err = 0; +#if 0 + printf("C grib_c_new_from_file: FILE*=%p\n", f); + printf("C grib_c_new_from_file: f->fileno=%d (fd=%d)\n", f->_fileno, fd); + printf("C grib_c_new_from_file: fn=%s\n", fname); +#endif + /*dump_file_info();*/ + if(f){ + FILE* p = retrieve_file_info(fd); + if (p) { + /*printf("C. using CACHED value from store...%p\n",p);*/ + h=grib_new_from_file(0,p,headers_only,&err);//use cached value + } else { + /*printf("C. using value from ARGS...%p\n",f);*/ + h=grib_new_from_file(0,f,headers_only,&err);//use FILE pointer passed in + store_file_info(fd, f); //store it for next time + /*dump_file_info();*/ + } + + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + if (err == GRIB_SUCCESS) { + /*printf("C grib_c_new_from_file: GRIB_END_OF_FILE\n");*/ + clear_file_info(fd); + /*dump_file_info();*/ + return GRIB_END_OF_FILE; //TODO: remove element from cache + } else { + /* A real error occurred */ + return err; + } + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +int grib_c_new_from_index(int* iid, int* gid){ + int err = 0; + grib_index* i = get_index(*iid); + + grib_handle *h = NULL; + + if(i){ + h = grib_handle_new_from_index(i,&err); + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_INDEX; + } + } + + *gid=-1; + return GRIB_INVALID_INDEX; +} + +int grib_c_index_new_from_file(char* file ,char* keys ,int* gid){ + int err = 0; + grib_index *i = NULL; + + if(*file){ + i = grib_index_new_from_file(0,file,keys,&err); + if(i){ + push_index(i,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +int grib_c_index_add_file(int* iid, char* file) { + grib_index *i = get_index(*iid); + int err = GRIB_SUCCESS; + + if (!i) { + return GRIB_INVALID_INDEX; + } else { + err = grib_index_add_file(i,file); + return err; + } +} + +int grib_c_index_release(int* hid){ + return clear_index(*hid); +} + +int grib_c_multi_release(int* hid){ + return clear_multi_handle(*hid); +} + +int grib_c_release(int* hid){ + return clear_handle(*hid); +} + +int grib_c_dump(int* gid){ + grib_handle *h = get_handle(*gid); + + if(!h) + return GRIB_INVALID_GRIB; + else + grib_dump_content(h,stdout,"wmo",0,NULL); + + return GRIB_SUCCESS; +} + +int grib_c_print(int* gid, char* key){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + grib_dumper* d = NULL; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + d = grib_dumper_factory("serialize",h,stdout,0,0); + err = grib_print(h, key, d); + grib_dumper_delete(d); + return err; + } +} + +int grib_c_get_error_string(int* err, char* buf, int len){ + const char* err_msg = grib_get_error_message(*err); + size_t erlen = strlen(err_msg); + if( (size_t)len < erlen) return GRIB_ARRAY_TOO_SMALL; + + strncpy(buf, err_msg,(size_t)erlen); + buf[erlen] = '\0'; + + return GRIB_SUCCESS; +} + +int grib_c_get_size_int(int* gid, char* key, int* val){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t tsize = 0; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_get_size(h, key, &tsize); + *val = tsize; + return err; + } +} + +int grib_c_get_message_offset(int* gid, size_t* offset){ + int err = GRIB_SUCCESS; + off_t myoffset; + grib_handle *h = get_handle(*gid); + + if(!h) + return GRIB_INVALID_GRIB; + else { + err=grib_get_message_offset(h, &myoffset); + *offset=myoffset; + return err; + } +} + +int grib_c_get_message_size(int* gid, size_t* size){ + grib_handle *h = get_handle(*gid); + + if(!h) + return GRIB_INVALID_GRIB; + else + return grib_get_message_size(h, size); +} + +int grib_c_get_string_length(int* gid, char* key, size_t* val){ + grib_handle *h = get_handle(*gid); + + if(!h) + return GRIB_INVALID_GRIB; + else + return grib_get_string_length(h, key, val); + +} + +int grib_c_get_size_long(int* gid, char* key, long* val){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t tsize = 0; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_get_size(h, key, &tsize); + *val = tsize; + return err; + } +} + +int grib_c_index_get_size_int(int* gid, char* key, int* val){ + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + size_t tsize = 0; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_index_get_size(h, key, &tsize); + *val = tsize; + return err; + } +} + +int grib_c_index_get_size_long(int* gid, char* key, long* val){ + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + size_t tsize = 0; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_index_get_size(h, key, &tsize); + *val = tsize; + return err; + } +} + +int grib_c_get_int(int* gid, char* key, int* val){ + grib_handle *h = get_handle(*gid); + long long_val; + int err = GRIB_SUCCESS; + + if(!h) return GRIB_INVALID_GRIB; + err = grib_get_long(h, key,&long_val); + *val = long_val; + return err; +} + +int grib_c_get_long(int* gid, char* key, long* val){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + + if(!h) return GRIB_INVALID_GRIB; + err = grib_get_long(h, key, val); + return err; +} + +int grib_c_get_double(int* gid, char* key, double* val){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + + if(!h) return GRIB_INVALID_GRIB; + err = grib_get_double(h, key, val); + return err; +} + +int grib_c_get_int_array(int* gid, char* key, int *val, size_t* size){ + + grib_handle *h = get_handle(*gid); + long* long_val = NULL; + int err = GRIB_SUCCESS; + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + + if(sizeof(long) == sizeof(int)){ + long_val = (long*)val; + err = grib_get_long_array(h, key, long_val, &lsize); + *size = lsize; + return err; + } + if(*size) + long_val = grib_context_malloc(h->context,(*size)*(sizeof(long))); + else + long_val = grib_context_malloc(h->context,(sizeof(long))); + + if(!long_val) return GRIB_OUT_OF_MEMORY; + err = grib_get_long_array(h, key, long_val, &lsize); + + for(*size=0;*sizecontext,long_val); + return err; +} + +int grib_c_get_long_array(int* gid, char* key, long *val, int* size){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + + err = grib_get_long_array(h, key, val, &lsize); + *size=lsize; + + return err; +} + +int grib_c_index_get_string(int* gid, char* key, char* val, int *eachsize,int* size){ + + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + size_t i; + size_t lsize = *size; + char** bufval; + char* p=val; + + if(!h) return GRIB_INVALID_GRIB; + + bufval=(char**)grib_context_malloc_clear(h->context,sizeof(char*)* *size); + + err = grib_index_get_string(h, key, bufval, &lsize); + *size = lsize; + + if (err) return err; + + for (i=0;icontext,bufval); + printf("eachsize=%d strlen(bufval[i])=%d\n",*eachsize,(int)strlen(bufval[i])); + return GRIB_ARRAY_TOO_SMALL; + } + memcpy(p,bufval[i],l); + p+=l; + for (j=0;j<*eachsize-l;j++) *(p++)=' '; + } + grib_context_free(h->context,bufval); + + return err; +} + +int grib_c_index_get_long(int* gid, char* key, long *val, int* size){ + + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + err = grib_index_get_long(h, key, val, &lsize); + *size = lsize; + return err; +} + +int grib_c_index_get_int(int* gid, char* key, int *val, int* size){ + + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + long* lval=0; + size_t i; + + if(!h) return GRIB_INVALID_GRIB; + + lval=grib_context_malloc(h->context,sizeof(long)* *size); + if (!lval) return GRIB_OUT_OF_MEMORY; + + err = grib_index_get_long(h, key, lval, &lsize); + for (i=0;icontext,(lsize)*(sizeof(long))); + else + long_val = grib_context_malloc(h->context,(sizeof(long))); + + if(!long_val) return GRIB_OUT_OF_MEMORY; + + for(lsize=0;lsize<(*size);lsize++) + long_val[lsize] = val[lsize]; + + err = grib_set_long_array(h, key, long_val, lsize); + + grib_context_free(h->context,long_val); + return err; +} + +int grib_c_set_long_array(int* gid, char* key, long* val, int* size){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_long_array(h, key, val, lsize); + + return err; +} + +int grib_c_set_int(int* gid, char* key, int* val){ + grib_handle *h = get_handle(*gid); + long long_val = *val; + if(!h) return GRIB_INVALID_GRIB; + return grib_set_long(h, key, long_val); +} + +int grib_c_set_long(int* gid, char* key, long* val){ + grib_handle *h = get_handle(*gid); + if(!h) return GRIB_INVALID_GRIB; + return grib_set_long(h, key, *val); +} + +int grib_c_set_missing(int* gid, char* key){ + + grib_handle *h = get_handle(*gid); + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_missing(h, key); +} + +/* + * Submits all keys with the given values in one go. + * 'keyvals' is a string of the form: + * key1=val1,key2=val2,key3=val3 + */ +int grib_c_set_key_vals(int* gid, char* keyvals) +{ + grib_handle* h = get_handle(*gid); + if (!h) return GRIB_INVALID_GRIB; + { + int err = GRIB_SUCCESS; + grib_values values[1024]={{0,},}; + int count = 1000; /* max. num key/val pairs */ + if ((err = parse_keyval_string(NULL, keyvals, 1, GRIB_TYPE_UNDEFINED, values, &count)) != GRIB_SUCCESS) { + return err; + } + if ((err = grib_set_values(h,values,count)) != GRIB_SUCCESS) { + return err; + } + } + return GRIB_SUCCESS; +} + +int grib_c_is_missing(int* gid, char* key,int* isMissing) +{ + int err=0; + grib_handle *h = get_handle(*gid); + if(!h) return GRIB_INVALID_GRIB; + + *isMissing=grib_is_missing(h, key,&err); + return err; +} + +int grib_c_is_defined(int* gid, char* key,int* isDefined) +{ + grib_handle *h = get_handle(*gid); + if(!h) return GRIB_INVALID_GRIB; + + *isDefined=grib_is_defined(h, key); + return GRIB_SUCCESS; +} + +int grib_c_set_real4(int* gid, char* key, float* val) +{ + grib_handle *h = get_handle(*gid); + double val8 = *val; + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_double(h, key, val8); +} + +int grib_c_get_real4_element(int* gid, char* key, int* index,float* val) +{ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + double val8 = 0; + + if(!h) return GRIB_INVALID_GRIB; + + err = grib_get_double_element(h, key, *index,&val8); + *val = val8; + return err; +} + +int grib_c_get_real4_elements(int* gid, char* key,int* index, float *val,int* size) +{ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + size_t i=0; + double* val8 = NULL; + + if(!h) return GRIB_INVALID_GRIB; + + if(*size) + val8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + else + val8 = grib_context_malloc(h->context,sizeof(double)); + + if(!val8) return GRIB_OUT_OF_MEMORY; + + + err = grib_get_double_elements(h, key, index,(long)lsize,val8); + + for(i=0; icontext,val8); + + return err; +} + +int grib_c_get_real4(int* gid, char* key, float* val) +{ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + double val8 = 0; + + if(!h) return GRIB_INVALID_GRIB; + + err = grib_get_double(h, key, &val8); + *val = val8; + return err; +} + +int grib_c_get_real4_array(int* gid, char* key, float *val, size_t* size) +{ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + double* val8 = NULL; + + if(!h) return GRIB_INVALID_GRIB; + + if(*size) + val8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + else + val8 = grib_context_malloc(h->context,sizeof(double)); + + if(!val8) return GRIB_OUT_OF_MEMORY; + + err = grib_get_double_array(h, key, val8, &lsize); + + for(*size=0;*sizecontext,val8); + + return err; +} + +int grib_c_set_real4_array(int* gid, char* key, float*val, int* size) +{ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + double* val8 = NULL; + + if(!h) return GRIB_INVALID_GRIB; + + if(*size) + val8 = grib_context_malloc(h->context,lsize*(sizeof(double))); + else + val8 = grib_context_malloc(h->context,sizeof(double)); + + if(!val8) return GRIB_OUT_OF_MEMORY; + + for(lsize=0; lsize<(size_t)*size; lsize++) + val8[lsize] = val[lsize]; + + err = grib_set_double_array(h, key, val8, lsize); + grib_context_free(h->context,val8); + return err; +} + +int grib_c_index_select_real8(int* gid, char* key, double* val) +{ + grib_index *h = get_index(*gid); + + if(!h) return GRIB_INVALID_GRIB; + return grib_index_select_double(h, key, *val); +} + +int grib_c_index_select_string(int* gid, char* key, char* val) +{ + grib_index *h = get_index(*gid); + + if(!h) return GRIB_INVALID_GRIB; + return grib_index_select_string(h, key, val); +} + +int grib_c_index_select_int(int* gid, char* key, int* val) +{ + grib_index *h = get_index(*gid); + long lval=*val; + + if(!h) return GRIB_INVALID_GRIB; + return grib_index_select_long(h, key, lval); +} + +int grib_c_index_select_long(int* gid, char* key, long* val) +{ + grib_index *h = get_index(*gid); + + if(!h) return GRIB_INVALID_GRIB; + return grib_index_select_long(h, key, *val); +} + +int grib_c_set_real8(int* gid, char* key, double* val) +{ + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + return grib_set_double(h, key, *val); +} + +int grib_c_get_real8(int* gid, char* key, double* val) +{ + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_get_double(h, key, val); +} + +int grib_c_set_double(int *gid, char *key, double *val) +{ + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_double(h, key, *val); +} + +int grib_c_get_real8_element(int* gid, char* key,int* index, double* val) +{ + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_get_double_element(h, key, *index,val); +} + +int grib_c_get_real8_elements(int* gid, char* key,int* index, double* val, int *size) +{ + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_get_double_elements(h, key, index,*size,val); +} + +int grib_c_find_nearest_four_single(int* gid,int* is_lsm, + double* inlat,double* inlon, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes) +{ + grib_nearest* nearest=NULL; + int err=0, result=0; + unsigned long flags=0; + size_t len=4; + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + nearest=grib_nearest_new(h,&err); + if (err!=GRIB_SUCCESS) return err; + + result = grib_nearest_find(nearest,h,*inlat,*inlon, + flags,outlats,outlons,values,distances,indexes,&len); + grib_nearest_delete(nearest); + return result; +} + +int grib_c_find_nearest_single(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes) +{ + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_nearest_find_multiple(h,*is_lsm, + inlats,inlons,1,outlats,outlons, + values,distances,indexes); +} + +int grib_c_find_nearest_multiple(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes, int* npoints) +{ + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_nearest_find_multiple(h,*is_lsm, + inlats,inlons,*npoints,outlats,outlons, + values,distances,indexes); +} + +int grib_c_get_real8_array(int* gid, char* key, double*val, int* size) +{ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_get_double_array(h, key, val, &lsize); + *size = lsize; + return err; + } +} + +int grib_c_set_real8_array(int* gid, char* key, double*val, int* size) +{ + grib_handle *h = get_handle(*gid); + + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_double_array(h, key, val, lsize); +} + +int grib_c_set_double_array(int* gid, char* key, double*val, int* size) +{ + grib_handle *h = get_handle(*gid); + + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_double_array(h, key, val, lsize); +} + +int grib_c_get_string(int* gid, char* key, char* val, size_t *lsize) +{ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + + if(!h) return GRIB_INVALID_GRIB; + + err = grib_get_string(h, key, val, lsize); + + return err; +} + +int grib_c_get_string_array(int* gid, char* key, char** val, size_t *lsize) +{ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + + if(!h) return GRIB_INVALID_GRIB; + + err = grib_get_string_array(h, key, val, lsize); + + return err; +} + +int grib_c_set_string(int* gid, char* key, char* val, int len2) +{ + grib_handle *h = get_handle(*gid); + + size_t lsize = len2; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_string(h, key, val, &lsize); +} + +int grib_c_set_string_array(int *gid, char *key, const char **val) +{ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t lsize = 0; + + if(!h) return GRIB_INVALID_GRIB; + + /* Note: The array passed in will have its final entry as NULL */ + /* so to find its size we just iterate thru it. */ + /* See typemap for char** in swig interface file */ + while(val[lsize]) { + ++lsize; + } + err = grib_set_string_array(h, key, val, lsize); + return err; +} + +int grib_c_get_data_real4(int* gid,float* lats, float* lons,float* values,size_t* size) +{ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + double *lat8=NULL,*lon8=NULL,*val8 = NULL; + size_t i=0; + + if(!h) return GRIB_INVALID_GRIB; + + val8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + if(!val8) return GRIB_OUT_OF_MEMORY; + lon8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + if(!lon8) return GRIB_OUT_OF_MEMORY; + lat8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + if(!lat8) return GRIB_OUT_OF_MEMORY; + + err=grib_get_data(h,lat8,lon8,val8); + + for(i=0;i<*size;i++) { + values[i] = val8[i]; + lats[i] = lat8[i]; + lons[i] = lon8[i]; + } + + grib_context_free(h->context,val8); + grib_context_free(h->context,lat8); + grib_context_free(h->context,lon8); + + return err; +} +/* +int grib_c_get_data_real8(int* gid,double* lats, double* lons,double* values,size_t* size) +{ + grib_handle *h = get_handle(*gid); + return grib_get_data(h,lats,lons,values); +} +*/ +int grib_c_copy_message(int* gid, void* mess,size_t* len) +{ + grib_handle *h = get_handle(*gid); + if(!h) + return GRIB_INVALID_GRIB; + + if(*len < h->buffer->ulength) { + grib_context_log(h->context,GRIB_LOG_ERROR,"grib_copy_message: buffer=%ld message size=%ld",*len,h->buffer->ulength); + return GRIB_BUFFER_TOO_SMALL; + } + + memcpy(mess,h->buffer->data,h->buffer->ulength); + *len=h->buffer->ulength; + return GRIB_SUCCESS; +} + +int grib_c_bufr_copy_data(int *msgid_src, int *msgid_dst) +{ + int err = 0; + grib_handle* src = get_handle(*msgid_src); + grib_handle* dest = get_handle(*msgid_dst); + if (!src || !dest) { + return GRIB_INVALID_GRIB; + } + + err = codes_bufr_copy_data(src, dest); + return err; +} + +void grib_c_check(int* err,char* call,char* str) +{ + grib_context* c=grib_context_get_default(); + if ( *err == GRIB_SUCCESS || *err == GRIB_END_OF_FILE ) return; + grib_context_log(c,GRIB_LOG_ERROR,"%s: %s %s", + call,str,grib_get_error_message(*err)); + exit(*err); +} + +int grib_c_write(int* gid, FILE* f) +{ + int err = 0; + grib_handle *h = get_handle(*gid); + const void* mess = NULL; + size_t mess_len = 0; + + if(!f) return GRIB_INVALID_FILE; + if (!h) return GRIB_INVALID_GRIB; + + err = grib_get_message(h,&mess,&mess_len); + if (err) return err; + if(fwrite(mess,1, mess_len,f) != mess_len) { + perror("grib_write"); + return GRIB_IO_PROBLEM; + } + err = fflush(f); + if(err) { + perror("write flush"); + return GRIB_IO_PROBLEM; + } + return GRIB_SUCCESS; +} + +int grib_c_multi_new(int* mgid) +{ + grib_multi_handle *mh = grib_multi_handle_new(0); + if (!mh) return GRIB_INVALID_GRIB; + push_multi_handle(mh,mgid); + return GRIB_SUCCESS; +} + +int grib_c_multi_write(int* gid, FILE* f) +{ + grib_multi_handle *h = get_multi_handle(*gid); + + if(!f) return GRIB_INVALID_FILE; + if (!h) return GRIB_INVALID_GRIB; + + return grib_multi_handle_write(h,f); +} + +int grib_c_multi_append(int* ingid, int* sec,int* mgid) +{ + grib_handle *h = get_handle(*ingid); + grib_multi_handle *mh = get_multi_handle(*mgid); + + if (!h) return GRIB_INVALID_GRIB; + + if (!mh) { + mh=grib_multi_handle_new(h->context); + push_multi_handle(mh,mgid); + } + + return grib_multi_handle_append(h,*sec,mh); +} + +int grib_c_get_native_type(int* gid, char* key, int* type) +{ + grib_handle *h = get_handle(*gid); + + if (!h) return GRIB_INVALID_GRIB; + + return grib_get_native_type(h, key, type); +} + +int grib_c_index_write(int* gid, char* file) +{ + grib_index *i = get_index(*gid); + int err = GRIB_SUCCESS; + + if (!i) { + return GRIB_INVALID_GRIB; + } else { + err = grib_index_write(i,file); + return err; + } +} + +int grib_c_index_read(char* file, int* gid) +{ + int err = 0; + grib_index *i = NULL; + + if (*file) { + i = grib_index_read(0,file,&err); + if (i) { + push_index(i,gid); + return GRIB_SUCCESS; + } else { + *gid = -1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +void no_fail_on_wrong_length(int flag) +{ + grib_context *c = grib_context_get_default(); + int value; + assert(c != NULL); + value = (flag != 0) ? 1 : 0; + c->no_fail_on_wrong_length = value; +} + +void grib_c_gts_header_on(void) +{ + grib_context *c = grib_context_get_default(); + assert(c != NULL); + grib_gts_header_on(c); +} + +void grib_c_gts_header_off(void) +{ + grib_context *c = grib_context_get_default(); + assert(c != NULL); + grib_gts_header_off(c); +} + +long grib_c_get_api_version(void) +{ + return grib_get_api_version(); +} + +int grib_c_get_message(int *gid, const void **msg, size_t *size) +{ + grib_handle *h = get_handle(*gid); + return grib_get_message(h,msg,size); +} + +void grib_c_set_definitions_path(const char* path) +{ + grib_context *c = grib_context_get_default(); + grib_context_set_definitions_path(c, path); +} + +void grib_c_set_samples_path(const char* path) +{ + grib_context *c = grib_context_get_default(); + grib_context_set_samples_path(c, path); +} diff --git a/python3/grib_interface.h b/python3/grib_interface.h new file mode 100644 index 000000000..fceafddaf --- /dev/null +++ b/python3/grib_interface.h @@ -0,0 +1,127 @@ +#ifndef GRIB_INTERFACE_H +#define GRIB_INTERFACE_H + +int grib_c_read_any_from_file(int *fid, char *buffer, int *nbytes); +int grib_c_write_file(int *fid, char *buffer, size_t *nbytes); +int grib_c_read_file(int *fid, char *buffer, size_t *nbytes); +int grib_c_open_file(int *fid, char *name, char *op); +int grib_c_close_file(int *fid); +int grib_c_multi_support_on(void); +int grib_c_multi_support_off(void); +int grib_c_iterator_new(int *gid, int *iterid, int *mode); +int grib_c_iterator_next(int *iterid, double *lat, double *lon, double *value); +int grib_c_iterator_delete(int *iterid); +int grib_c_keys_iterator_new(int *gid, int *iterid, char *name_space); +int grib_c_keys_iterator_next(int *iterid); +int grib_c_keys_iterator_get_name(int *iterid, char *name, int len); +int grib_c_keys_iterator_rewind(int *kiter); +int grib_c_keys_iterator_delete(int *iterid); +int codes_c_bufr_keys_iterator_new(int *gid, int *iterid); +int codes_c_bufr_keys_iterator_next(int *iterid); +int codes_c_bufr_keys_iterator_get_name(int *iterid, char *name, int len); +int codes_c_bufr_keys_iterator_rewind(int *kiter); +int codes_c_bufr_keys_iterator_delete(int *iterid); + +int grib_c_gribex_mode_on(void); +int grib_c_gribex_mode_off(void); +int grib_c_skip_computed(int *iterid); +int grib_c_skip_coded(int *iterid); +int grib_c_skip_edition_specific(int *iterid); +int grib_c_skip_duplicates(int *iterid); +int grib_c_skip_read_only(int *iterid); +int grib_c_skip_function(int *iterid); +int grib_c_new_from_message(int *gid, void *buffer, size_t *bufsize); +int grib_c_new_from_message_copy(int *gid, void *buffer, size_t *bufsize); +int grib_c_grib_new_from_samples(int *gid, char *name); +int grib_c_bufr_new_from_samples(int *gid, char *name); +int grib_c_clone(int *gidsrc, int *giddest); +int grib_c_copy_namespace(int *gidsrc, char *name, int *giddest); +int grib_c_count_in_file(FILE *f, int *n); + +int grib_c_new_from_file(FILE *f, int fd, char* fname, int *gid, int headers_only); + +int grib_c_new_any_from_file(FILE *f, int headers_only,int *gid); + +int grib_c_new_bufr_from_file(FILE *f, int fd, char* fname, int headers_only,int *gid); + +int grib_c_new_gts_from_file(FILE *f,int headers_only, int *gid); +int grib_c_new_metar_from_file(FILE* f,int headers_only, int* gid); +int grib_c_new_from_index(int *iid, int *gid); +int grib_c_index_new_from_file(char *file, char *keys, int *gid); +int grib_c_index_add_file(int* iid, char* file); +int grib_c_index_release(int *hid); +int grib_c_multi_release(int *hid); +int grib_c_release(int *hid); +int grib_c_dump(int *gid); +int grib_c_print(int *gid, char *key); +int grib_c_get_error_string(int *err, char *buf, int len); +int grib_c_get_size_int(int *gid, char *key, int *val); +int grib_c_get_size_long(int *gid, char *key, long *val); +int grib_c_index_get_size_int(int *gid, char *key, int *val); +int grib_c_index_get_size_long(int *gid, char *key, long *val); +int grib_c_get_int(int *gid, char *key, int *val); +int grib_c_get_long(int *gid, char *key, long *val); +int grib_c_get_double(int *gid, char *key, double *val); +int grib_c_get_int_array(int *gid, char *key, int *val, size_t *size); +int grib_c_get_long_array(int *gid, char *key, long *val, int *size); +int grib_c_index_get_string(int *gid, char *key, char *val, int *eachsize, int *size); +int grib_c_index_get_long(int *gid, char *key, long *val, int *size); +int grib_c_index_get_int(int *gid, char *key, int *val, int *size); +int grib_c_index_get_real8(int *gid, char *key, double *val, int *size); +int grib_c_set_int_array(int *gid, char *key, int *val, size_t *size); +int grib_c_set_long_array(int *gid, char *key, long *val, int *size); +int grib_c_set_int(int *gid, char *key, int *val); +int grib_c_set_long(int *gid, char *key, long *val); +int grib_c_set_missing(int *gid, char *key); +int grib_c_set_key_vals(int* gid, char* keyvals); +int grib_c_is_missing(int *gid, char *key, int *isMissing); +int grib_c_is_defined(int *gid, char *key, int *isDefined); +int grib_c_set_real4(int *gid, char *key, float *val); +int grib_c_get_real4_element(int *gid, char *key, int *index, float *val); +int grib_c_get_real4_elements(int *gid, char *key, int *index, float *val, int *size); +int grib_c_get_real4(int *gid, char *key, float *val); +int grib_c_get_real4_array(int *gid, char *key, float *val, size_t *size); +int grib_c_set_real4_array(int *gid, char *key, float *val, int *size); +int grib_c_index_select_real8(int *gid, char *key, double *val); +int grib_c_index_select_string(int *gid, char *key, char *val); +int grib_c_index_select_int(int *gid, char *key, int *val); +int grib_c_index_select_long(int *gid, char *key, long *val); +int grib_c_set_real8(int *gid, char *key, double *val); +int grib_c_get_real8(int *gid, char *key, double *val); +int grib_c_get_real8_element(int *gid, char *key, int *index, double *val); +int grib_c_get_real8_elements(int *gid, char *key, int *index, double *val, int *size); +int grib_c_find_nearest_four_single(int *gid, int *is_lsm, double *inlat, double *inlon, double *outlats, double *outlons, double *values, double *distances, int *indexes); +int grib_c_find_nearest_single(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes); +int grib_c_find_nearest_multiple(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes, int *npoints); +int grib_c_get_real8_array(int *gid, char *key, double *val, int *size); +int grib_c_set_real8_array(int *gid, char *key, double *val, int *size); +int grib_c_get_string(int *gid, char *key, char *val, size_t *lsize); +int grib_c_get_string_array(int* gid, char* key, char** val, size_t *lsize); +int grib_c_set_string(int *gid, char *key, char *val, int len2); +int grib_c_set_string_array(int *gid, char *key, const char **val); +int grib_c_get_data_real4(int *gid, float *lats, float *lons, float *values, size_t *size); +/*int grib_c_get_data_real8(int *gid, double *lats, double *lons, double *values, size_t *size);*/ +int grib_c_get_message_size(int *gid, size_t *len); +int grib_c_get_message_offset(int *gid, size_t *len); +int grib_c_copy_message(int *gid, void *mess, size_t *len); +int grib_c_bufr_copy_data(int *msgid_src, int *msgid_dst); +void grib_c_check(int *err, char *call, char *str); +int grib_c_write(int *gid, FILE *f); +int grib_c_multi_new(int* mgid); +int grib_c_multi_write(int *gid, FILE *f); +int grib_c_multi_append(int *ingid, int *sec, int *mgid); +int grib_c_set_double_array(int* gid, char* key, double*val, int* size); +int grib_c_set_double(int* gid, char* key, double*val); +int grib_c_get_native_type(int* gid, char* key, int* type); +int grib_c_index_write(int* gid, char* file); +int grib_c_index_read(char* file, int* gid); +void no_fail_on_wrong_length(int flag); +long grib_c_get_api_version(void); +void grib_c_gts_header_on(void); +void grib_c_gts_header_off(void); +int grib_c_get_message(int *gid, const void **msg, size_t *size); +int grib_c_get_string_length(int* gid, char* key, size_t* val); +void grib_c_set_definitions_path(const char* path); +void grib_c_set_samples_path(const char* path); + +#endif diff --git a/python3/gribapi.c b/python3/gribapi.c new file mode 100644 index 000000000..79548ac5b --- /dev/null +++ b/python3/gribapi.c @@ -0,0 +1,196 @@ +/* + * Copyright 2005-2018 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "Python.h" +#include "grib_api.h" + +static PyObject* Error; + +PyDoc_STRVAR(gribapi__doc__, + "gribapi point evalutation kernel"); + +PyDoc_STRVAR(read__doc__, + "gribapi point evalutation kernel"); + +static PyObject * +py_new_handle_from_file(PyObject *self, PyObject *args) +{ + /* TODO: Call PyFile_Check or PyFile_CheckExact */ + int err = 0; + grib_handle *h; + PyObject *file; + + if(!PyArg_ParseTuple(args,"O",&file)) + return NULL; + + h = grib_handle_new_from_file(NULL,PyFile_AsFile(file),&err); + + if(err) { + /* http://www.ragestorm.net/tutorial?id=21 */ + PyErr_Format(Error,"grib_api: %s",grib_get_error_message(err)); + return NULL; + } + + + /* TODO: Do an OO version */ + + if(h) + return PyLong_FromVoidPtr(h); + + Py_RETURN_NONE; +} + +static PyObject * +py_handle_delete(PyObject *self, PyObject *args) +{ + PyObject* h; + if(!PyArg_ParseTuple(args,"O",&h)) + return NULL; + grib_handle_delete(PyLong_AsVoidPtr(h)); + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +py_keys_iterator_delete(PyObject *self, PyObject *args) +{ + PyObject* h; + if(!PyArg_ParseTuple(args,"O",&h)) + return NULL; + grib_keys_iterator_delete(PyLong_AsVoidPtr(h)); + Py_INCREF(Py_None); + return Py_None; +} + + +static PyObject * +py_get_string(PyObject *self, PyObject *args) +{ + PyObject* h; + char *s; + size_t size; + char tmp[1024]; + int err; + + if(!PyArg_ParseTuple(args,"Os",&h,&s)) + return NULL; + + size = sizeof(tmp); + err = grib_get_string(PyLong_AsVoidPtr(h),s,tmp,&size); + + if(err) { + /* http://www.ragestorm.net/tutorial?id=21 */ + PyErr_Format(Error,"grib_api: %s %s",s,grib_get_error_message(err)); + return NULL; + } + + return PyString_InternFromString(tmp); + +} + +static PyObject * +py_keys_iterator_next(PyObject *self, PyObject *args) +{ + PyObject* h; + int more; + + if(!PyArg_ParseTuple(args,"O",&h)) + return NULL; + + more = grib_keys_iterator_next(PyLong_AsVoidPtr(h)); + if(more) + { + Py_RETURN_TRUE; + } + else + { + Py_RETURN_FALSE; + } +} + + +static PyObject * +py_keys_iterator_get_string(PyObject *self, PyObject *args) +{ + PyObject* h; + size_t size; + char tmp[1024]; + int err; + + if(!PyArg_ParseTuple(args,"O",&h)) + return NULL; + + size = sizeof(tmp); + err = grib_keys_iterator_get_string(PyLong_AsVoidPtr(h),tmp,&size); + + if(err) { + /* http://www.ragestorm.net/tutorial?id=21 */ + PyErr_Format(Error,"grib_api: %s",grib_get_error_message(err)); + return NULL; + } + + return PyString_InternFromString(tmp); + +} + +static PyObject * +py_keys_iterator_get_name(PyObject *self, PyObject *args) +{ + PyObject* h; + + if(!PyArg_ParseTuple(args,"O",&h)) + return NULL; + + + return PyString_InternFromString(grib_keys_iterator_get_name(PyLong_AsVoidPtr(h))); + +} + +static PyObject * +py_keys_iterator_new(PyObject *self, PyObject *args) +{ + PyObject* h; + char *s; + + if(!PyArg_ParseTuple(args,"Os",&h,&s)) + return NULL; + + return PyLong_FromVoidPtr(grib_keys_iterator_new(PyLong_AsVoidPtr(h),GRIB_KEYS_ITERATOR_ALL_KEYS,s)); +} + +static PyMethodDef gribapi_methods[] = { + + {"new_handle_from_file", py_new_handle_from_file, METH_VARARGS, read__doc__}, + {"get_string", py_get_string, METH_VARARGS, read__doc__}, + {"keys_iterator_new", py_keys_iterator_new, METH_VARARGS, read__doc__}, + {"keys_iterator_delete", py_keys_iterator_delete, METH_VARARGS, read__doc__}, + {"handle_delete", py_handle_delete, METH_VARARGS, read__doc__}, + {"keys_iterator_get_string", py_keys_iterator_get_string, METH_VARARGS, read__doc__}, + {"keys_iterator_get_name", py_keys_iterator_get_name, METH_VARARGS, read__doc__}, + {"keys_iterator_next", py_keys_iterator_next, METH_VARARGS, read__doc__}, + + + {NULL, NULL} /* sentinel */ +}; + +PyMODINIT_FUNC +initgribapi(void) +{ + PyObject* m; + + /* There have been several InitModule functions over time */ + m = Py_InitModule3("gribapi", gribapi_methods, gribapi__doc__); + + /* TODO: Create our own exception */ + Error = PyErr_NewException("grib.apierror",NULL,NULL); + Py_INCREF(Error); + PyModule_AddObject(m, "error", Error); +} + diff --git a/python3/gribapi/__init__.py b/python3/gribapi/__init__.py new file mode 100644 index 000000000..51f03e0e3 --- /dev/null +++ b/python3/gribapi/__init__.py @@ -0,0 +1,2 @@ +from .gribapi import * # noqa +from .gribapi import __version__ diff --git a/python3/gribapi/errors.py b/python3/gribapi/errors.py new file mode 100644 index 000000000..7b0e6cd60 --- /dev/null +++ b/python3/gribapi/errors.py @@ -0,0 +1,235 @@ +""" +Exception class hierarchy +""" + +from . import gribapi_swig as _internal + + +class GribInternalError(Exception): + """ + @brief Wrap errors coming from the C API in a Python exception object. + + Base class for all exceptions + """ + + def __init__(self, value): + # Call the base class constructor with the parameters it needs + Exception.__init__(self, value) + if type(value) is int: + err, self.msg = _internal.grib_c_get_error_string(value, 1024) + assert err == 0 + else: + self.msg = value + + def __str__(self): + return self.msg + + +class WrongBitmapSizeError(GribInternalError): + """Size of bitmap is incorrect.""" +class OutOfRangeError(GribInternalError): + """Value out of coding range.""" +class UnsupportedEditionError(GribInternalError): + """Edition not supported..""" +class AttributeNotFoundError(GribInternalError): + """Attribute not found..""" +class TooManyAttributesError(GribInternalError): + """Too many attributes. Increase MAX_ACCESSOR_ATTRIBUTES.""" +class AttributeClashError(GribInternalError): + """Attribute is already present, cannot add.""" +class NullPointerError(GribInternalError): + """Null pointer.""" +class MissingBufrEntryError(GribInternalError): + """Missing BUFR table entry for descriptor.""" +class WrongConversionError(GribInternalError): + """Wrong type conversion.""" +class StringTooSmallError(GribInternalError): + """String is smaller than requested.""" +class InvalidKeyValueError(GribInternalError): + """Invalid key value.""" +class ValueDifferentError(GribInternalError): + """Value is different.""" +class DifferentEditionError(GribInternalError): + """Edition of two messages is different.""" +class InvalidBitsPerValueError(GribInternalError): + """Invalid number of bits per value.""" +class CorruptedIndexError(GribInternalError): + """Index is corrupted.""" +class MessageMalformedError(GribInternalError): + """Message malformed.""" +class UnderflowError(GribInternalError): + """Underflow.""" +class SwitchNoMatchError(GribInternalError): + """Switch unable to find a matching case.""" +class ConstantFieldError(GribInternalError): + """Constant field.""" +class MessageTooLargeError(GribInternalError): + """Message is too large for the current architecture.""" +class InternalArrayTooSmallError(GribInternalError): + """An internal array is too small.""" +class PrematureEndOfFileError(GribInternalError): + """End of resource reached when reading message.""" +class NullIndexError(GribInternalError): + """Null index.""" +class EndOfIndexError(GribInternalError): + """End of index reached.""" +class WrongGridError(GribInternalError): + """Grid description is wrong or inconsistent.""" +class NoValuesError(GribInternalError): + """Unable to code a field without values.""" +class EndError(GribInternalError): + """End of resource.""" +class WrongTypeError(GribInternalError): + """Wrong type while packing.""" +class NoDefinitionsError(GribInternalError): + """Definitions files not found.""" +class HashArrayNoMatchError(GribInternalError): + """Hash array no match.""" +class ConceptNoMatchError(GribInternalError): + """Concept no match.""" +class OutOfAreaError(GribInternalError): + """The point is out of the grid area.""" +class MissingKeyError(GribInternalError): + """Missing a key from the fieldset.""" +class InvalidOrderByError(GribInternalError): + """Invalid order by.""" +class InvalidNearestError(GribInternalError): + """Invalid nearest id.""" +class InvalidKeysIteratorError(GribInternalError): + """Invalid keys iterator id.""" +class InvalidIteratorError(GribInternalError): + """Invalid iterator id.""" +class InvalidIndexError(GribInternalError): + """Invalid index id.""" +class InvalidGribError(GribInternalError): + """Invalid grib id.""" +class InvalidFileError(GribInternalError): + """Invalid file id.""" +class WrongStepUnitError(GribInternalError): + """Wrong units for step (step must be integer).""" +class WrongStepError(GribInternalError): + """Unable to set step.""" +class InvalidTypeError(GribInternalError): + """Invalid key type.""" +class WrongLengthError(GribInternalError): + """Wrong message length.""" +class ValueCannotBeMissingError(GribInternalError): + """Value cannot be missing.""" +class InvalidSectionNumberError(GribInternalError): + """Invalid section number.""" +class NullHandleError(GribInternalError): + """Null handle.""" +class InvalidArgumentError(GribInternalError): + """Invalid argument.""" +class ReadOnlyError(GribInternalError): + """Value is read only.""" +class MemoryAllocationError(GribInternalError): + """Memory allocation error.""" +class GeocalculusError(GribInternalError): + """Problem with calculation of geographic attributes.""" +class NoMoreInSetError(GribInternalError): + """Code cannot unpack because of string too small.""" +class EncodingError(GribInternalError): + """Encoding invalid.""" +class DecodingError(GribInternalError): + """Decoding invalid.""" +class MessageInvalidError(GribInternalError): + """Message invalid.""" +class IOProblemError(GribInternalError): + """Input output problem.""" +class KeyValueNotFoundError(GribInternalError): + """Key/value not found.""" +class WrongArraySizeError(GribInternalError): + """Array size mismatch.""" +class CodeNotFoundInTableError(GribInternalError): + """Code not found in code table.""" +class FileNotFoundError(GribInternalError): + """File not found.""" +class ArrayTooSmallError(GribInternalError): + """Passed array is too small.""" +class MessageEndNotFoundError(GribInternalError): + """Missing 7777 at end of message.""" +class FunctionNotImplementedError(GribInternalError): + """Function not yet implemented.""" +class BufferTooSmallError(GribInternalError): + """Passed buffer is too small.""" +class InternalError(GribInternalError): + """Internal error.""" +class EndOfFileError(GribInternalError): + """End of resource reached.""" + +ERROR_MAP = { + -66 : WrongBitmapSizeError, + -65 : OutOfRangeError, + -64 : UnsupportedEditionError, + -63 : AttributeNotFoundError, + -62 : TooManyAttributesError, + -61 : AttributeClashError, + -60 : NullPointerError, + -59 : MissingBufrEntryError, + -58 : WrongConversionError, + -57 : StringTooSmallError, + -56 : InvalidKeyValueError, + -55 : ValueDifferentError, + -54 : DifferentEditionError, + -53 : InvalidBitsPerValueError, + -52 : CorruptedIndexError, + -51 : MessageMalformedError, + -50 : UnderflowError, + -49 : SwitchNoMatchError, + -48 : ConstantFieldError, + -47 : MessageTooLargeError, + -46 : InternalArrayTooSmallError, + -45 : PrematureEndOfFileError, + -44 : NullIndexError, + -43 : EndOfIndexError, + -42 : WrongGridError, + -41 : NoValuesError, + -40 : EndError, + -39 : WrongTypeError, + -38 : NoDefinitionsError, + -37 : HashArrayNoMatchError, + -36 : ConceptNoMatchError, + -35 : OutOfAreaError, + -34 : MissingKeyError, + -33 : InvalidOrderByError, + -32 : InvalidNearestError, + -31 : InvalidKeysIteratorError, + -30 : InvalidIteratorError, + -29 : InvalidIndexError, + -28 : InvalidGribError, + -27 : InvalidFileError, + -26 : WrongStepUnitError, + -25 : WrongStepError, + -24 : InvalidTypeError, + -23 : WrongLengthError, + -22 : ValueCannotBeMissingError, + -21 : InvalidSectionNumberError, + -20 : NullHandleError, + -19 : InvalidArgumentError, + -18 : ReadOnlyError, + -17 : MemoryAllocationError, + -16 : GeocalculusError, + -15 : NoMoreInSetError, + -14 : EncodingError, + -13 : DecodingError, + -12 : MessageInvalidError, + -11 : IOProblemError, + -10 : KeyValueNotFoundError, + -9 : WrongArraySizeError, + -8 : CodeNotFoundInTableError, + -7 : FileNotFoundError, + -6 : ArrayTooSmallError, + -5 : MessageEndNotFoundError, + -4 : FunctionNotImplementedError, + -3 : BufferTooSmallError, + -2 : InternalError, + -1 : EndOfFileError +} + + +def raise_grib_error(errid): + """ + Raise the GribInternalError corresponding to ``errid``. + """ + raise ERROR_MAP[errid](errid) diff --git a/python3/gribapi/gribapi.py b/python3/gribapi/gribapi.py new file mode 100644 index 000000000..977a0d543 --- /dev/null +++ b/python3/gribapi/gribapi.py @@ -0,0 +1,1963 @@ +""" +@package gribapi +@brief This package is the \b Python interface to ecCodes. It offers almost one to one bindings to the C API functions. + +The Python interface to ecCodes uses the NumPy package +as the container of choice for the possible arrays of values that can be encoded/decoded in and from a message. +Numpy is a package used for scientific computing in Python and an efficient container for generic data. + +The Python interface can be enabled/disabled from CMake by using the following flag:\n + +@code{.unparsed} + -DENABLE_PYTHON=ON +or + -DENABLE_PYTHON=OFF +@endcode + +When this is enabed, then the system Python will be used to build the interface. + +@em Requirements: + + - Python 2.6 or higher + - NumPy + +""" +# from gribapi import gribapi_swig as _internal +from . import gribapi_swig as _internal +import types +import sys +import os +from functools import wraps +# import inspect +from . import errors +from .errors import * # noqa + +try: + type(file) +except NameError: + import io + file=io.IOBase + long=int + +KEYTYPES = { + 1: int, + 2: float, + 3: str, +} + +CODES_PRODUCT_ANY = 0 +""" Generic product kind """ +CODES_PRODUCT_GRIB = 1 +""" GRIB product kind """ +CODES_PRODUCT_BUFR = 2 +""" BUFR product kind """ +CODES_PRODUCT_METAR = 3 +""" METAR product kind """ +CODES_PRODUCT_GTS = 4 +""" GTS product kind """ +CODES_PRODUCT_TAF = 5 +""" TAF product kind """ + +# Constants for 'missing' +GRIB_MISSING_DOUBLE = -1e+100 +GRIB_MISSING_LONG = 2147483647 + + +# GRIB-51 Skip function arguments type checking if the +# environment variable is defined +no_type_checks = os.environ.get('ECCODES_PYTHON_NO_TYPE_CHECKS') is not None + + +# Function-arguments type-checking decorator +# inspired from http://code.activestate.com/recipes/454322-type-checking-decorator/ +# modified to support multiple allowed types and all types in the same decorator call +# This returns a decorator. _params_ is the dict with the type specs +def require(**_params_): + """ + The actual decorator. Receives the target function in _func_ + """ + def check_types(_func_, _params_=_params_): + if no_type_checks: + return _func_ + + @wraps(_func_) + # The wrapper function. Replaces the target function and receives its args + def modified(*args, **kw): + arg_names = _func_.__code__.co_varnames + # argnames, varargs, kwargs, defaults = inspect.getargspec(_func_) + kw.update(zip(arg_names, args)) + for name, allowed_types in _params_.items(): + param = kw[name] + if isinstance(allowed_types, type): + allowed_types = (allowed_types,) + assert any([isinstance(param, type1) for type1 in allowed_types]), \ + "Parameter '%s' should be of type %s" % (name, " or ".join([t.__name__ for t in allowed_types])) + return _func_(**kw) + return modified + return check_types + +# @cond +class Bunch(dict): + """ + The collector of a bunch of named stuff :). + """ + def __init__(self, **kw): + dict.__init__(self, kw) + self.__dict__.update(kw) + + def __setitem__(self, key, value): + dict.__setitem__(self, key, value) + self.__dict__[key] = value + + def __setattr__(self, key, value): + dict.__setitem__(self, key, value) + self.__dict__[key] = value + + def __delitem__(self, key): + dict.__delitem__(self, key) + del self.__dict__[key] + + def __delattr__(self, key): + dict.__delitem__(self, key) + del self.__dict__[key] + + def __str__(self): + state = ["%s=%r" % (attribute, value) + for (attribute, value) + in self.__dict__.items()] + return '\n'.join(state) +# @endcond + + +# @cond +@require(errid=int) +def GRIB_CHECK(errid): + """ + Utility function checking the ecCodes error code and raising + an error if that was set. + + @param errid the C interface error id to check + @exception GribInternalError + """ + if errid: + errors.raise_grib_error(errid) +# @endcond + + +@require(fileobj=file) +def gts_new_from_file(fileobj, headers_only=False): + """ + @brief Load in memory a GTS message from a file. + + The message can be accessed through its id and will be available\n + until @ref grib_release is called.\n + + @param fileobj python file object + @param headers_only whether or not to load the message with the headers only + @return id of the GTS loaded in memory + @exception GribInternalError + """ + err, gtsid = _internal.grib_c_new_gts_from_file(fileobj, headers_only, 0) + if err: + if err == _internal.GRIB_END_OF_FILE: + return None + else: + GRIB_CHECK(err) + else: + return gtsid + + +@require(fileobj=file) +def metar_new_from_file(fileobj, headers_only=False): + """ + @brief Load in memory a METAR message from a file. + + The message can be accessed through its id and will be available\n + until @ref grib_release is called.\n + + @param fileobj python file object + @param headers_only whether or not to load the message with the headers only + @return id of the METAR loaded in memory + @exception GribInternalError + """ + err, metarid = _internal.grib_c_new_metar_from_file(fileobj, headers_only, 0) + if err: + if err == _internal.GRIB_END_OF_FILE: + return None + else: + GRIB_CHECK(err) + else: + return metarid + + +@require(fileobj=file, product_kind=int) +def codes_new_from_file(fileobj, product_kind, headers_only=False): + """ + @brief Load in memory a message from a file for a given product. + + The message can be accessed through its id and will be available\n + until @ref grib_release is called.\n + + \b Examples: \ref get_product_kind.py "get_product_kind.py" + + @param fileobj python file object + @param product_kind one of CODES_PRODUCT_GRIB, CODES_PRODUCT_BUFR, CODES_PRODUCT_METAR or CODES_PRODUCT_GTS + @param headers_only whether or not to load the message with the headers only + @return id of the message loaded in memory + @exception GribInternalError + """ + if product_kind == CODES_PRODUCT_GRIB: + return grib_new_from_file(fileobj, headers_only) + if product_kind == CODES_PRODUCT_BUFR: + return bufr_new_from_file(fileobj, headers_only) + if product_kind == CODES_PRODUCT_METAR: + return metar_new_from_file(fileobj, headers_only) + if product_kind == CODES_PRODUCT_GTS: + return gts_new_from_file(fileobj, headers_only) + if product_kind == CODES_PRODUCT_ANY: + return any_new_from_file(fileobj, headers_only) + raise Exception("Invalid product kind: " + product_kind) + + +@require(fileobj=file) +def any_new_from_file(fileobj, headers_only=False): + """ + @brief Load in memory a message from a file. + + The message can be accessed through its id and will be available\n + until @ref grib_release is called.\n + + \b Examples: \ref grib_get_keys.py "grib_get_keys.py" + + @param fileobj python file object + @param headers_only whether or not to load the message with the headers only + @return id of the message loaded in memory + @exception GribInternalError + """ + err, msgid = _internal.grib_c_new_any_from_file(fileobj, headers_only, 0) + if err: + if err == _internal.GRIB_END_OF_FILE: + return None + else: + GRIB_CHECK(err) + else: + return msgid + + +@require(fileobj=file) +def bufr_new_from_file(fileobj, headers_only=False): + """ + @brief Load in memory a BUFR message from a file. + + The message can be accessed through its id and will be available\n + until @ref grib_release is called.\n + + \b Examples: \ref bufr_get_keys.py "bufr_get_keys.py" + + @param fileobj python file object + @param headers_only whether or not to load the message with the headers only + @return id of the BUFR loaded in memory + @exception GribInternalError + """ + fd = fileobj.fileno() + fn = fileobj.name + err, bufrid = _internal.grib_c_new_bufr_from_file(fileobj, fd, fn, headers_only, 0) + if err: + if err == _internal.GRIB_END_OF_FILE: + return None + else: + GRIB_CHECK(err) + else: + return bufrid + + +@require(fileobj=file) +def grib_new_from_file(fileobj, headers_only=False): + """ + @brief Load in memory a GRIB message from a file. + + The message can be accessed through its gribid and will be available\n + until @ref grib_release is called.\n + + The message can be loaded headers only by using the headers_only argument. + Default is to have the headers only option set to off (False). If set to on (True), + data values will be skipped. This will result in a significant performance gain + if one is only interested in browsing through messages to retrieve metadata. + Any attempt to retrieve data values keys when in the headers only mode will + result in a key not found error. + + \b Examples: \ref grib_get_keys.py "grib_get_keys.py" + + @param fileobj python file object + @param headers_only whether or not to load the message with the headers only + @return id of the grib loaded in memory + @exception GribInternalError + """ + fd = fileobj.fileno() + fn = fileobj.name + #print('Python grib_new_from_file: ', fd,' ', fn) + err, gribid = _internal.grib_c_new_from_file(fileobj, fd, fn, 0, headers_only) + if err: + if err == _internal.GRIB_END_OF_FILE: + return None + else: + GRIB_CHECK(err) + else: + return gribid + + +@require(fileobj=file) +def grib_count_in_file(fileobj): + """ + @brief Count the messages in a file. + + \b Examples: \ref count_messages.py "count_messages.py" + + @param fileobj python file object + @return number of messages in the file + @exception GribInternalError + """ + err, num = _internal.grib_c_count_in_file(fileobj) + GRIB_CHECK(err) + return num + + +def grib_multi_support_on(): + """ + @brief Turn on the support for multiple fields in a single GRIB message. + + @exception GribInternalError + """ + _internal.grib_c_multi_support_on() + + +def grib_multi_support_off(): + """ + @brief Turn off the support for multiple fields in a single GRIB message. + + @exception GribInternalError + """ + _internal.grib_c_multi_support_off() + + +@require(msgid=int) +def grib_release(msgid): + """ + @brief Free the memory for the message referred to by msgid. + + \b Examples: \ref grib_get_keys.py "grib_get_keys.py" + + @param msgid id of the message loaded in memory + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_release(msgid)) + + +@require(msgid=int, key=str) +def grib_get_string(msgid, key): + """ + @brief Get the string value of a key from a message. + + @param msgid id of the message loaded in memory + @param key key name + @return string value of key + @exception GribInternalError + """ + length = grib_get_string_length(msgid, key) + err, value = _internal.grib_c_get_string(msgid, key, length) + GRIB_CHECK(err) + + stpos = value.find('\0') + if stpos != -1: + value = value[0:stpos] + + return value + + +@require(msgid=int, key=str, value=str) +def grib_set_string(msgid, key, value): + """ + @brief Set the value for a string key in a message. + + @param msgid id of the message loaded in memory + @param key key name + @param value string value + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_set_string(msgid, key, value, len(value))) + + +def grib_gribex_mode_on(): + """ + @brief Turn on the compatibility mode with GRIBEX. + + @exception GribInternalError + """ + _internal.grib_c_gribex_mode_on() + + +def grib_gribex_mode_off(): + """ + @brief Turn off the compatibility mode with GRIBEX. + + @exception GribInternalError + """ + _internal.grib_c_gribex_mode_off() + + +@require(msgid=int, fileobj=file) +def grib_write(msgid, fileobj): + """ + @brief Write a message to a file. + + \b Examples: \ref grib_set_keys.py "grib_set_keys.py" + + @param msgid id of the message loaded in memory + @param fileobj python file object + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_write(msgid, fileobj)) + + +@require(multigribid=int, fileobj=file) +def grib_multi_write(multigribid, fileobj): + """ + @brief Write a multi-field GRIB message to a file. + + \b Examples: \ref grib_multi_write.py "grib_multi_write.py" + + @param multigribid id of the multi-field grib loaded in memory + @param fileobj python file object + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_multi_write(multigribid, fileobj)) + + +@require(ingribid=int, startsection=int, multigribid=int) +def grib_multi_append(ingribid, startsection, multigribid): + """ + @brief Append a single-field GRIB message to a multi-field GRIB message. + + Only the sections with section number greather or equal "startsection" + are copied from the input single message to the multi-field output grib. + + \b Examples: \ref grib_multi_write.py "grib_multi_write.py" + + @param ingribid id of the input single-field GRIB + @param startsection starting from startsection (included) all the sections are copied + from the input single grib to the output multi-field grib + @param multigribid id of the output multi-field GRIB + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_multi_append(ingribid, startsection, multigribid)) + + +@require(msgid=int, key=str) +def grib_get_size(msgid, key): + """ + @brief Get the size of an array key. + + \b Examples: \ref grib_get_keys.py "grib_get_keys.py",\ref count_messages.py "count_messages.py" + + @param msgid id of the message loaded in memory + @param key name of the key + @exception GribInternalError + """ + err, result = _internal.grib_c_get_size_long(msgid, key) + GRIB_CHECK(err) + return result + + +@require(msgid=int, key=str) +def grib_get_string_length(msgid, key): + """ + @brief Get the length of the string version of a key. + + @param msgid id of the message loaded in memory + @param key name of the key + @exception GribInternalError + """ + err, result = _internal.grib_c_get_string_length(msgid, key) + GRIB_CHECK(err) + return result + + +@require(iterid=int) +def grib_skip_computed(iterid): + """ + @brief Skip the computed keys in a keys iterator. + + The computed keys are not coded in the message, they are computed + from other keys. + + @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_delete + + @param iterid keys iterator id + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_skip_computed(iterid)) + + +@require(iterid=int) +def grib_skip_coded(iterid): + """ + @brief Skip the coded keys in a keys iterator. + + The coded keys are actually coded in the message. + + @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_delete + + @param iterid keys iterator id + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_skip_coded(iterid)) + + +@require(iterid=int) +def grib_skip_edition_specific(iterid): + """ + @brief Skip the edition specific keys in a keys iterator. + + @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_delete + + @param iterid keys iterator id + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_skip_edition_specific(iterid)) + + +@require(iterid=int) +def grib_skip_duplicates(iterid): + """ + @brief Skip the duplicate keys in a keys iterator. + + @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_delete + + @param iterid keys iterator id + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_skip_duplicates(iterid)) + + +@require(iterid=int) +def grib_skip_read_only(iterid): + """ + @brief Skip the read_only keys in a keys iterator. + + Read only keys cannot be set. + + @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_delete + + @param iterid keys iterator id + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_skip_read_only(iterid)) + + +@require(iterid=int) +def grib_skip_function(iterid): + """ + @brief Skip the function keys in a keys iterator. + + @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_delete + + @param iterid keys iterator id + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_skip_function(iterid)) + + +@require(gribid=int, mode=int) +def grib_iterator_new(gribid, mode): + """ + @brief Create a new geoiterator for the given GRIB message, using its geometry and values. + + The geoiterator can be used to go through all the geopoints in a GRIB message and + retrieve the values corresponding to those geopoints. + + \b Examples: \ref grib_iterator.py "grib_iterator.py" + + @param gribid id of the GRIB loaded in memory + @param mode flags for future use + @return geoiterator id + """ + err, iterid = _internal.grib_c_iterator_new(gribid, mode) + GRIB_CHECK(err) + return iterid + + +@require(iterid=int) +def grib_iterator_delete(iterid): + """ + @brief Delete a geoiterator and free memory. + + \b Examples: \ref grib_iterator.py "grib_iterator.py" + + @param iterid geoiterator id + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_iterator_delete(iterid)) + + +@require(iterid=int) +def grib_iterator_next(iterid): + """ + @brief Retrieve the next value from a geoiterator. + + \b Examples: \ref grib_iterator.py "grib_iterator.py" + + @param iterid geoiterator id + @return tuple with the latitude, longitude and value + @exception GribInternalError + """ + err, lat, lon, value = _internal.grib_c_iterator_next(iterid) + if err == 0: + return [] + elif err < 0: + GRIB_CHECK(err) + else: + return (lat, lon, value) + + +@require(msgid=int) +def grib_keys_iterator_new(msgid, namespace=None): + """ + @brief Create a new iterator on the keys. + + The keys iterator can be navigated to give all the key names which + can then be used to get or set the key values with \ref grib_get or + \ref grib_set. + The set of keys returned can be controlled with the input variable + namespace or using the functions + \ref grib_skip_read_only, \ref grib_skip_duplicates, + \ref grib_skip_coded,\ref grib_skip_computed. + If namespace is a non empty string only the keys belonging to + that namespace are returned. Example namespaces are "ls" (to get the same + default keys as the grib_ls) and "mars" to get the keys used by mars. + + \b Examples: \ref grib_iterator.py "grib_iterator.py" + + @param msgid id of the message loaded in memory + @param namespace the namespace of the keys to search for (all the keys if None) + @return keys iterator id to be used in the keys iterator functions + @exception GribInternalError + """ + err, iterid = _internal.grib_c_keys_iterator_new(msgid, namespace) + GRIB_CHECK(err) + return iterid + + +@require(iterid=int) +def grib_keys_iterator_next(iterid): + """ + @brief Advance to the next keys iterator value. + + \b Examples: \ref grib_keys_iterator.py "grib_keys_iterator.py" + + @param iterid keys iterator id created with @ref grib_keys_iterator_new + @exception GribInternalError + """ + res = _internal.grib_c_keys_iterator_next(iterid) + if res < 0: + GRIB_CHECK(res) + return res + + +@require(iterid=int) +def grib_keys_iterator_delete(iterid): + """ + @brief Delete a keys iterator and free memory. + + \b Examples: \ref grib_keys_iterator.py "grib_keys_iterator.py" + + @param iterid keys iterator id created with @ref grib_keys_iterator_new + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_keys_iterator_delete(iterid)) + + +@require(iterid=int) +def grib_keys_iterator_get_name(iterid): + """ + @brief Get the name of a key from a keys iterator. + + \b Examples: \ref grib_keys_iterator.py "grib_keys_iterator.py" + + @param iterid keys iterator id created with @ref grib_keys_iterator_new + @return key name to be retrieved + @exception GribInternalError + """ + err, name = _internal.grib_c_keys_iterator_get_name(iterid, 1024) + GRIB_CHECK(err) + return name + + +@require(iterid=int) +def grib_keys_iterator_rewind(iterid): + """ + @brief Rewind a keys iterator. + + @param iterid keys iterator id created with @ref grib_keys_iterator_new + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_keys_iterator_rewind(iterid)) + +# BUFR keys iterator +@require(msgid=int) +def codes_bufr_keys_iterator_new(msgid): + """ + @brief Create a new iterator on the BUFR keys. + + The keys iterator can be navigated to give all the key names which + can then be used to get or set the key values with \ref codes_get or + \ref codes_set. + + \b Examples: \ref bufr_keys_iterator.py "bufr_keys_iterator.py" + + @param msgid id of the BUFR message loaded in memory + @return keys iterator id to be used in the keys iterator functions + @exception GribInternalError + """ + err, iterid = _internal.codes_c_bufr_keys_iterator_new(msgid) + GRIB_CHECK(err) + return iterid + + +@require(iterid=int) +def codes_bufr_keys_iterator_next(iterid): + """ + @brief Advance to the next BUFR keys iterator value. + + \b Examples: \ref bufr_keys_iterator.py "bufr_keys_iterator.py" + + @param iterid keys iterator id created with @ref codes_bufr_keys_iterator_new + @exception GribInternalError + """ + res = _internal.codes_c_bufr_keys_iterator_next(iterid) + if res < 0: + GRIB_CHECK(res) + return res + + +@require(iterid=int) +def codes_bufr_keys_iterator_delete(iterid): + """ + @brief Delete a BUFR keys iterator and free memory. + + \b Examples: \ref bufr_keys_iterator.py "bufr_keys_iterator.py" + + @param iterid keys iterator id created with @ref codes_bufr_keys_iterator_new + @exception GribInternalError + """ + GRIB_CHECK(_internal.codes_c_bufr_keys_iterator_delete(iterid)) + + +@require(iterid=int) +def codes_bufr_keys_iterator_get_name(iterid): + """ + @brief Get the name of a key from a BUFR keys iterator. + + \b Examples: \ref bufr_keys_iterator.py "bufr_keys_iterator.py" + + @param iterid keys iterator id created with @ref codes_bufr_keys_iterator_new + @return key name to be retrieved + @exception GribInternalError + """ + err, name = _internal.codes_c_bufr_keys_iterator_get_name(iterid, 1024) + GRIB_CHECK(err) + return name + + +@require(iterid=int) +def codes_bufr_keys_iterator_rewind(iterid): + """ + @brief Rewind a BUFR keys iterator. + + @param iterid keys iterator id created with @ref codes_bufr_keys_iterator_new + @exception GribInternalError + """ + GRIB_CHECK(_internal.codes_c_bufr_keys_iterator_rewind(iterid)) + + + +@require(msgid=int, key=str) +def grib_get_long(msgid, key): + """ + @brief Get the value of a key in a message as an integer. + + @param msgid id of the message loaded in memory + @param key key name + @return value of key as int + @exception GribInternalError + """ + err, value = _internal.grib_c_get_long(msgid, key) + GRIB_CHECK(err) + return value + + +@require(msgid=int, key=str) +def grib_get_double(msgid, key): + """ + @brief Get the value of a key in a message as a float. + + @param msgid id of the message loaded in memory + @param key key name + @return value of key as float + @exception GribInternalError + """ + err, value = _internal.grib_c_get_double(msgid, key) + GRIB_CHECK(err) + return value + + +@require(msgid=int, key=str, value=(int, long, float, str)) +def grib_set_long(msgid, key, value): + """ + @brief Set the integer value for a key in a message. + + A TypeError exception will be thrown if value cannot be represented + as an integer. + + @param msgid id of the message loaded in memory + @param key key name + @param value value to set + @exception GribInternalError,TypeError + """ + try: + value = int(value) + except (ValueError, TypeError): + raise TypeError("Invalid type") + + if value > sys.maxsize: + raise TypeError("Invalid type") + + GRIB_CHECK(_internal.grib_c_set_long(msgid, key, value)) + + +@require(msgid=int, key=str, value=(int, long, float, str)) +def grib_set_double(msgid, key, value): + """ + @brief Set the double value for a key in a message. + + A TypeError exception will be thrown if value cannot be represented + as a float. + + @param msgid id of the message loaded in memory + @param key key name + @param value float value to set + @exception GribInternalError,TypeError + """ + try: + value = float(value) + except (ValueError, TypeError): + raise TypeError("Invalid type") + + GRIB_CHECK(_internal.grib_c_set_double(msgid, key, value)) + + +@require(samplename=str, product_kind=int) +def codes_new_from_samples(samplename, product_kind): + """ + @brief Create a new valid message from a sample for a given product. + + The available samples are picked up from the directory pointed to + by the environment variable ECCODES_SAMPLES_PATH. + To know where the samples directory is run the codes_info tool.\n + + \b Examples: \ref grib_samples.py "grib_samples.py" + + @param samplename name of the sample to be used + @param product_kind CODES_PRODUCT_GRIB or CODES_PRODUCT_BUFR + @return id of the message loaded in memory + @exception GribInternalError + """ + if product_kind == CODES_PRODUCT_GRIB: + return grib_new_from_samples(samplename) + if product_kind == CODES_PRODUCT_BUFR: + return codes_bufr_new_from_samples(samplename) + raise Exception("Invalid product kind: " + product_kind) + + +@require(samplename=str) +def grib_new_from_samples(samplename): + """ + @brief Create a new valid GRIB message from a sample. + + The available samples are picked up from the directory pointed to + by the environment variable ECCODES_SAMPLES_PATH. + To know where the samples directory is run the codes_info tool.\n + + \b Examples: \ref grib_samples.py "grib_samples.py" + + @param samplename name of the sample to be used + @return id of the message loaded in memory + @exception GribInternalError + """ + err, msgid = _internal.grib_c_grib_new_from_samples(0, samplename) + GRIB_CHECK(err) + return msgid + + +@require(samplename=str) +def codes_bufr_new_from_samples(samplename): + """ + @brief Create a new valid BUFR message from a sample. + + The available samples are picked up from the directory pointed to + by the environment variable ECCODES_SAMPLES_PATH. + To know where the samples directory is run the codes_info tool.\n + + \b Examples: \ref bufr_copy_data.py "bufr_copy_data.py" + + @param samplename name of the BUFR sample to be used + @return id of the message loaded in memory + @exception GribInternalError + """ + err, msgid = _internal.grib_c_bufr_new_from_samples(0, samplename) + GRIB_CHECK(err) + return msgid + +@require(msgid_src=int, msgid_dst=int) +def codes_bufr_copy_data(msgid_src, msgid_dst): + """ + @brief Copy data values from a BUFR message msgid_src to another message msgid_dst + + Copies all the values in the data section that are present in the same position + in the data tree and with the same number of values to the output handle. + + @param msgid_src id of the message from which the data are copied + @param msgid_dst id of the message to which the data are copied + @return id of new message + @exception GribInternalError + """ + err, msgid_dst = _internal.grib_c_bufr_copy_data(msgid_src, msgid_dst) + GRIB_CHECK(err) + return msgid_dst + + +@require(msgid_src=int) +def grib_clone(msgid_src): + """ + @brief Create a copy of a message. + + Create a copy of a given message (\em msgid_src) resulting in a new + message in memory (\em msgid_dest) identical to the original one. + + \b Examples: \ref grib_clone.py "grib_clone.py" + + @param msgid_src id of message to be cloned + @return id of clone + @exception GribInternalError + """ + err, newmsgid_src = _internal.grib_c_clone(msgid_src, 0) + GRIB_CHECK(err) + return newmsgid_src + + +@require(msgid=int, key=str) +def grib_set_double_array(msgid, key, inarray): + """ + @brief Set the value of the key to a double array. + + The input array can be a numpy.ndarray or a python sequence like tuple, list, array, ... + + The wrapper will internally try to convert the input to a NumPy array + before extracting its data and length. This is possible as NumPy + allows the construction of arrays from arbitrary python sequences. + + The elements of the input sequence need to be convertible to a double. + + @param msgid id of the message loaded in memory + @param key key name + @param inarray tuple,list,array,numpy.ndarray + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_set_double_ndarray(msgid, key, inarray)) + + +@require(msgid=int, key=str) +def grib_get_double_array(msgid, key): + """ + @brief Get the value of the key as a NumPy array of doubles. + + @param msgid id of the message loaded in memory + @param key key name + @return numpy.ndarray + @exception GribInternalError + """ + nval = grib_get_size(msgid, key) + err, result = _internal.grib_get_double_ndarray(msgid, key, nval) + GRIB_CHECK(err) + return result + + +@require(msgid=int, key=str) +def grib_get_string_array(msgid, key): + """ + @brief Get the value of the key as a list of strings. + + @param msgid id of the message loaded in memory + @param key key name + @return list + @exception GribInternalError + """ + nval = grib_get_size(msgid, key) + a = _internal.new_stringArray(nval) + s = _internal.sizetp() + s.assign(nval) + + GRIB_CHECK(_internal.grib_c_get_string_array(msgid, key, a, s)) + + newsize = s.value() + result = list() + for i in range(newsize): + result.append(_internal.stringArray_getitem(a, i)) + + _internal.delete_stringArray(a) + + return result + + +@require(msgid=int, key=str) +def grib_set_string_array(msgid, key, inarray): + """ + @brief Set the value of the key to a string array. + + The input array can be a python sequence like tuple, list, array, ... + + The wrapper will internally try to convert the input to a NumPy array + before extracting its data and length. This is possible as NumPy + allows the construction of arrays from arbitrary python sequences. + + The elements of the input sequence need to be convertible to a double. + + @param msgid id of the message loaded in memory + @param key key name + @param inarray tuple,list,array + @exception GribInternalError + """ + GRIB_CHECK( _internal.grib_c_set_string_array(msgid, key, list(inarray)) ) + + +@require(msgid=int, key=str) +def grib_set_long_array(msgid, key, inarray): + """ + @brief Set the value of the key to an integer array. + + The input array can be a numpy.ndarray or a python sequence like tuple, list, array, ... + + The wrapper will internally try to convert the input to a NumPy array + before extracting its data and length. This is possible as NumPy + allows the construction of arrays from arbitrary python sequences. + + The elements of the input sequence need to be convertible to an int. + + @param msgid id of the message loaded in memory + @param key key name + @param inarray tuple,list,python array,numpy.ndarray + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_set_long_ndarray(msgid, key, inarray)) + + +@require(msgid=int, key=str) +def grib_get_long_array(msgid, key): + """ + @brief Get the integer array of values for a key from a message. + + @param msgid id of the message loaded in memory + @param key key name + @return numpy.ndarray + @exception GribInternalError + """ + nval = grib_get_size(msgid, key) + err, result = _internal.grib_get_long_ndarray(msgid, key, nval) + GRIB_CHECK(err) + return result + + +def grib_multi_new(): + """ + @brief Create a new multi-field GRIB message and return its id. + + \b Examples: \ref grib_multi_write.py "grib_multi_write.py" + + @return id of the multi-field message + @exception GribInternalError + """ + err, mgid = _internal.grib_c_multi_new() + GRIB_CHECK(err) + return mgid + + +@require(gribid=int) +def grib_multi_release(gribid): + """ + @brief Release a multi-field message from memory. + + \b Examples: \ref grib_multi_write.py "grib_multi_write.py" + + @param gribid id of the multi-field we want to release the memory for + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_multi_release(gribid)) + + +@require(gribid_src=int, namespace=str, gribid_dest=int) +def grib_copy_namespace(gribid_src, namespace, gribid_dest): + """ + @brief Copy the value of all the keys belonging to a namespace from the source message + to the destination message. + + @param gribid_src id of source message + @param gribid_dest id of destination message + @param namespace namespace to be copied + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_copy_namespace(gribid_src, namespace, gribid_dest)) + + +@require(filename=str, keys=(tuple, list)) +def grib_index_new_from_file(filename, keys): + """ + @brief Create a new index from a file. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param filename path of the file to index on + @param keys sequence of keys to index on. + The type of the key can be explicitly declared appending :l for long (or alternatively :i), :d for double, :s for string to the key name. + @return index id + @exception GribInternalError + """ + ckeys = ",".join(keys) + err, iid = _internal.grib_c_index_new_from_file(filename, ckeys) + GRIB_CHECK(err) + return iid + + +@require(indexid=int, filename=str) +def grib_index_add_file(indexid, filename): + """ + @brief Add a file to an index. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param indexid id of the index to add the file to + @param filename path of the file to be added to index + @exception GribInternalError + """ + err = _internal.grib_c_index_add_file(indexid, filename) + GRIB_CHECK(err) + + +@require(indexid=int) +def grib_index_release(indexid): + """ + @brief Delete an index. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param indexid id of an index created from a file. + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_index_release(indexid)) + + +@require(indexid=int, key=str) +def grib_index_get_size(indexid, key): + """ + @brief Get the number of distinct values for the index key. + The key must belong to the index. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param indexid id of an index created from a file. The index must have been created on the given key. + @param key key for which the number of values is computed + @return number of distinct values for key in index + @exception GribInternalError + """ + err, value = _internal.grib_c_index_get_size_long(indexid, key) + GRIB_CHECK(err) + return value + + +@require(indexid=int, key=str) +def grib_index_get_long(indexid, key): + """ + @brief Get the distinct values of the key in argument contained in the index. + The key must belong to the index. + + This function is used when the type of the key was explicitly defined as long or when the native type of the key is long. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param indexid id of an index created from a file. The index must have been created with the key in argument. + @param key key for wich the values are returned + @return tuple with values of key in index + @exception GribInternalError + """ + nval = grib_index_get_size(indexid, key) + + a = _internal.new_longArray(nval) + s = _internal.intp() + s.assign(nval) + + GRIB_CHECK(_internal.grib_c_index_get_long(indexid, key, a, s)) + + result = [] + for i in range(nval): + result.append(_internal.longArray_getitem(a, i)) + + _internal.delete_longArray(a) + + return tuple(result) + + +@require(indexid=int, key=str) +def grib_index_get_string(indexid, key): + """ + @brief Get the distinct values of the key in argument contained in the index. + The key must belong to the index. + + This function is used when the type of the key was explicitly defined as string or when the native type of the key is string. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param indexid id of an index created from a file. The index must have been created with the key in argument. + @param key key for wich the values are returned + @return tuple with values of key in index + @exception GribInternalError + """ + nval = grib_index_get_size(indexid, key) + max_val_size = 1024 + + err, raw_result, outnval = _internal.grib_c_index_get_string(indexid, key, max_val_size, nval) + GRIB_CHECK(err) + + assert nval == outnval + + result = [] + for i in range(nval): + low = i * max_val_size + high = (i + 1) * max_val_size + value = raw_result[low:high].rstrip() + result.append(value) + + return tuple(result) + + +@require(indexid=int, key=str) +def grib_index_get_double(indexid, key): + """ + @brief Get the distinct values of the key in argument contained in the index. + The key must belong to the index. + + This function is used when the type of the key was explicitly defined as double or when the native type of the key is double. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param indexid id of an index created from a file. The index must have been created with the key in argument. + @param key key for wich the values are returned + @return tuple with values of key in index + @exception GribInternalError + """ + nval = grib_index_get_size(indexid, key) + + a = _internal.new_doubleArray(nval) + s = _internal.intp() + s.assign(nval) + + GRIB_CHECK(_internal.grib_c_index_get_real8(indexid, key, a, s)) + + result = [] + for i in range(nval): + result.append(_internal.doubleArray_getitem(a, i)) + + _internal.delete_doubleArray(a) + + return tuple(result) + + +@require(indexid=int, key=str, value=int) +def grib_index_select_long(indexid, key, value): + """ + @brief Select the message subset with key==value. + The value is an integer. + + The key must have been created with integer type or have integer as native type if the type was not explicitly defined in the index creation. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param indexid id of an index created from a file. The index must have been created with the key in argument. + @param key key to be selected + @param value value of the key to select + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_index_select_long(indexid, key, value)) + + +@require(indexid=int, key=str, value=float) +def grib_index_select_double(indexid, key, value): + """ + @brief Select the message subset with key==value. + The value is a double. + + The key must have been created with integer type or have integer as native type if the type was not explicitly defined in the index creation. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param indexid id of an index created from a file. The index must have been created with the key in argument. + @param key key to be selected + @param value value of the key to select + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_index_select_real8(indexid, key, value)) + + +@require(indexid=int, key=str, value=str) +def grib_index_select_string(indexid, key, value): + """ + @brief Select the message subset with key==value. + The value is an integer. + + The key must have been created with string type or have string as native type if the type was not explicitly defined in the index creation. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param indexid id of an index created from a file. The index must have been created with the key in argument. + @param key key to be selected + @param value value of the key to select + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_index_select_string(indexid, key, value)) + + +@require(indexid=int) +def grib_new_from_index(indexid): + """ + @brief Create a new handle from an index after having selected the key values. + + All the keys belonging to the index must be selected before calling this function. + Successive calls to this function will return all the handles compatible with the constraints defined selecting the values of the index keys. + + The message can be accessed through its gribid and will be available until @ref grib_release is called. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param indexid id of an index created from a file. + @return id of the message loaded in memory or None if end of index + @exception GribInternalError + """ + err, gribid = _internal.grib_c_new_from_index(indexid, 0) + + if err: + if err == _internal.GRIB_END_OF_INDEX: + return None + else: + GRIB_CHECK(err) + else: + return gribid + + +@require(msgid=int) +def grib_get_message_size(msgid): + """ + @brief Get the size of a coded message. + + @param msgid id of the message loaded in memory + @return size in bytes of the message + @exception GribInternalError + """ + err, value = _internal.grib_c_get_message_size(msgid) + GRIB_CHECK(err) + return value + + +@require(msgid=int) +def grib_get_message_offset(msgid): + """ + @brief Get the offset of a coded message. + + @param msgid id of the message loaded in memory + @return offset in bytes of the message + @exception GribInternalError + """ + err, value = _internal.grib_c_get_message_offset(msgid) + GRIB_CHECK(err) + return value + + +@require(msgid=int, key=str, index=int) +def grib_get_double_element(msgid, key, index): + """ + @brief Get as double the i-th element of the "key" array. + + @param msgid id of the message loaded in memory + @param key the key to be searched + @param index zero based index of value to retrieve + @return value + @exception GribInternalError + + """ + err, value = _internal.grib_c_get_real8_element(msgid, key, index) + GRIB_CHECK(err) + return value + + +@require(msgid=int, key=str, indexes=(list, tuple)) +def grib_get_double_elements(msgid, key, indexes): + """ + @brief Get as double array the elements of the "key" array whose indexes are listed in the input array. + + @param msgid id of the message loaded in memory + @param key the key to be searched + @param indexes list or tuple of indexes + @return numpy.ndarray + @exception GribInternalError + + """ + nidx = len(indexes) + err, result = _internal.grib_get_double_ndelements(msgid, key, indexes, nidx) + GRIB_CHECK(err) + return result + + +@require(msgid=int, key=str) +def grib_get_elements(msgid, key, indexes): + """ + @brief Retrieve the elements of the key array for the indexes specified in the input. + + @param msgid id of the message loaded in memory + @param key the key to be searched + @param indexes single index or a list of indexes + @return numpy.ndarray containing the values of key for the given indexes + @exception GribInternalError + """ + try: + iter(indexes) + except TypeError: + indexes = (indexes,) + + nidx = len(indexes) + err, result = _internal.grib_get_double_ndelements(msgid, key, indexes, nidx) + GRIB_CHECK(err) + return result + + +@require(msgid=int, key=str) +def grib_set_missing(msgid, key): + """ + @brief Set as missing the value for a key in a GRIB message. + + It can be used to set a missing value in the GRIB header but not in + the data values. + + \b Examples: \ref grib_set_missing.py "grib_set_missing.py" + + @param msgid id of the message loaded in memory + @param key key name + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_set_missing(msgid, key)) + + +@require(gribid=int) +def grib_set_key_vals(gribid, key_vals): + """ + Set the values for several keys at once in a grib message. + + @param gribid id of the grib loaded in memory + @param key_vals can be a string, list/tuple or dictionary. + If a string, format must be "key1=val1,key2=val2" + If a list, it must contain strings of the form "key1=val1" + @exception GribInternalError + """ + if len(key_vals) == 0: + raise errors.InvalidKeyValueError("Empty key/values argument") + key_vals_str = "" + if isinstance(key_vals, str): + # Plain string. We need to do a DEEP copy so as not to change the original + key_vals_str = ''.join(key_vals) + elif isinstance(key_vals, list) or isinstance(key_vals, tuple): + # A list of key=val strings + for kv in key_vals: + if not isinstance(kv, str): + raise TypeError("Invalid list/tuple element type '%s'" % kv) + if '=' not in str(kv): + raise errors.GribInternalError("Invalid list/tuple element format '%s'" % kv) + if len(key_vals_str) > 0: + key_vals_str += ',' + key_vals_str += kv + elif isinstance(key_vals, dict): + # A dictionary mapping keys to values + for key in key_vals.keys(): + if len(key_vals_str) > 0: + key_vals_str += ',' + key_vals_str += key + '=' + str(key_vals[key]) + else: + raise TypeError("Invalid argument type") + + GRIB_CHECK(_internal.grib_c_set_key_vals(gribid, key_vals_str)) + + +@require(msgid=int, key=str) +def grib_is_missing(msgid, key): + """ + @brief Check if the value of a key is MISSING. + + The value of a key is considered as MISSING when all the bits assigned to it + are set to 1. This is different from the actual key missing from the grib message. + The value of a key MISSING has a special significance and that can be read about + in the WMO documentation. + + @param msgid id of the message loaded in memory + @param key key name + @return 0->not missing, 1->missing + @exception GribInternalError + """ + err, value = _internal.grib_c_is_missing(msgid, key) + GRIB_CHECK(err) + return value + + +@require(msgid=int, key=str) +def grib_is_defined(msgid, key): + """ + @brief Check if a key is defined (exists) + @param msgid id of the message loaded in memory + @param key key name + @return 0->not defined, 1->defined + @exception GribInternalError + """ + err, value = _internal.grib_c_is_defined(msgid, key) + GRIB_CHECK(err) + return value + + +@require(gribid=int, inlat=(int, float), inlon=(int, float)) +def grib_find_nearest(gribid, inlat, inlon, is_lsm=False, npoints=1): + """ + @brief Find the nearest grid point or the nearest four grid points to a given latitude/longitude. + + The number of nearest points returned can be controled through the npoints function argument. + + \b Examples: \ref grib_nearest.py "grib_nearest.py" + + @param gribid id of the grib loaded in memory + @param inlat latitude of the point + @param inlon longitude of the point + @param is_lsm True if the nearest land point is required otherwise False. + @param npoints 1 or 4 nearest grid points + @return (npoints*(outlat,outlon,value,dist,index)) + @exception GribInternalError + """ + if npoints == 1: + err, outlat, outlon, value, dist, idx = _internal.grib_c_find_nearest_single(gribid, is_lsm, inlat, inlon) + GRIB_CHECK(err) + return (Bunch(lat=outlat, lon=outlon, value=value, distance=dist, index=idx),) + elif npoints == 4: + poutlat = _internal.new_doubleArray(4) + poutlon = _internal.new_doubleArray(4) + pvalues = _internal.new_doubleArray(4) + pdist = _internal.new_doubleArray(4) + pidx = _internal.new_intArray(4) + + GRIB_CHECK(_internal.grib_c_find_nearest_four_single(gribid, is_lsm, inlat, inlon, poutlat, poutlon, pvalues, pdist, pidx)) + + result = [] + for i in range(4): + result.append(Bunch(lat=_internal.doubleArray_getitem(poutlat, i), + lon=_internal.doubleArray_getitem(poutlon, i), + value=_internal.doubleArray_getitem(pvalues, i), + distance=_internal.doubleArray_getitem(pdist, i), + index=_internal.intArray_getitem(pidx, i))) + + _internal.delete_doubleArray(poutlat) + _internal.delete_doubleArray(poutlon) + _internal.delete_doubleArray(pvalues) + _internal.delete_doubleArray(pdist) + _internal.delete_intArray(pidx) + + return tuple(result) + else: + raise ValueError("Invalid value for npoints. Expecting 1 or 4.") + + +@require(msgid=int, key=str) +def grib_get_native_type(msgid, key): + """ + @brief Retrieve the native type of a key. + + Possible values can be int, float or string. + + @param msgid id of the message loaded in memory + @param key key we want to find out the type for + @return type of key given as input or None if not determined + @exception GribInternalError + """ + err, itype = _internal.grib_c_get_native_type(msgid, key) + GRIB_CHECK(err) + if itype in KEYTYPES: + return KEYTYPES[itype] + else: + return None + + +@require(msgid=int, key=str) +def grib_get(msgid, key, ktype=None): + """ + @brief Get the value of a key in a message. + + The type of value returned depends on the native type of the requested key. + The type of value returned can be forced by using the type argument of the + function. The type argument can be int, float or str. + + The \em msgid references a message loaded in memory. + + \b Examples: \ref grib_get_keys.py "grib_get_keys.py", \ref grib_print_data.py "grib_print_data.py" + + @see grib_new_from_file, grib_release, grib_set + + @param msgid id of the message loaded in memory + @param key key name + @param ktype the type we want the output in (int, float or str), native type if not specified + @return scalar value of key as int, float or str + @exception GribInternalError + """ + if not key: + raise ValueError("Invalid key name") + + if ktype is None: + ktype = grib_get_native_type(msgid, key) + + result = None + if ktype is int: + result = grib_get_long(msgid, key) + elif ktype is float: + result = grib_get_double(msgid, key) + elif ktype is str: + result = grib_get_string(msgid, key) + + return result + + +@require(msgid=int, key=str) +def grib_get_array(msgid, key, ktype=None): + """ + @brief Get the contents of an array key. + + The type of the array returned depends on the native type of the requested key. + For numeric data, the output array will be stored in a NumPy ndarray. + The type of value returned can be forced by using the type argument of the function. + The type argument can be int, float or string. + + @param msgid id of the message loaded in memory + @param key the key to get the value for + @param ktype the type we want the output in (can be int, float or string), native type if not specified + @return numpy.ndarray + @exception GribInternalError + """ + if ktype is None: + ktype = grib_get_native_type(msgid, key) + + result = None + if ktype is int: + result = grib_get_long_array(msgid, key) + elif ktype is float: + result = grib_get_double_array(msgid, key) + elif ktype is str: + result = grib_get_string_array(msgid, key) + + return result + + +@require(gribid=int) +def grib_get_values(gribid): + """ + @brief Retrieve the contents of the 'values' key for a GRIB message. + + A NumPy ndarray containing the values in the GRIB message is returned. + + \b Examples: \ref grib_print_data.py "grib_print_data.py", \ref grib_samples.py "grib_samples.py" + + @param gribid id of the GRIB loaded in memory + @return numpy.ndarray + @exception GribInternalError + """ + return grib_get_double_array(gribid, "values") + + +@require(gribid=int) +def grib_set_values(gribid, values): + """ + @brief Set the contents of the 'values' key for a GRIB message. + + The input array can be a numpy.ndarray or a python sequence like tuple, list, array, ... + + The wrapper will internally try to convert the input to a NumPy array + before extracting its data and length. This is possible as NumPy + allows the construction of arrays from arbitrary python sequences. + + The elements of the input sequence need to be convertible to a double. + + \b Examples: \ref grib_clone.py "grib_clone.py", \ref grib_samples.py "grib_samples.py" + + @param gribid id of the GRIB loaded in memory + @param values array of values to set as tuple, list, array or numpy.ndarray + """ + grib_set_double_array(gribid, "values", values) + + +@require(msgid=int, key=str) +def grib_set(msgid, key, value): + """ + @brief Set the value for a scalar key in a message. + + The input value can be a python int, float or str. + + \b Examples: \ref grib_set_keys.py "grib_set_keys.py" + + @see grib_new_from_file, grib_release, grib_get + + @param msgid id of the message loaded in memory + @param key key name + @param value scalar value to set for key + @exception GribInternalError + """ + if isinstance(value, int): + grib_set_long(msgid, key, value) + elif isinstance(value, float): + grib_set_double(msgid, key, value) + elif isinstance(value, str): + grib_set_string(msgid, key, value) + #elif hasattr(value, "__iter__"): + # # The value passed in is iterable; i.e. a list or array etc + # grib_set_array(msgid, key, value) + else: + raise errors.GribInternalError("Invalid type of value when setting key '%s'." % key) + + +@require(msgid=int, key=str) +def grib_set_array(msgid, key, value): + """ + @brief Set the value for an array key in a message. + + Examples of array keys: + "values" - data values + "pl" - list of number of points for each latitude in a reduced grid + "pv" - list of vertical levels + + The input array can be a numpy.ndarray or a python sequence like tuple, list, array, ... + + The wrapper will internally try to convert the input to a NumPy array + before extracting its data and length. This is possible as NumPy + allows the construction of arrays from arbitrary python sequences. + + @param msgid id of the message loaded in memory + @param key key name + @param value array to set for key + @exception GribInternalError + """ + val0 = None + try: + val0 = value[0] + except TypeError: + pass + + if isinstance(val0, float): + grib_set_double_array(msgid, key, value) + elif isinstance(val0, str): + grib_set_string_array(msgid, key, value) + else: + # Note: Cannot do isinstance(val0,int) for numpy.int64 + try: + n = int(val0) + except (ValueError, TypeError): + raise errors.GribInternalError("Invalid type of value when setting key '%s'." % key) + grib_set_long_array(msgid, key, value) + + +@require(indexid=int, key=str) +def grib_index_get(indexid, key, ktype=str): + """ + @brief Get the distinct values of an index key. + The key must belong to the index. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param indexid id of an index created from a file. The index must have been created on the given key. + @param key key for which the values are returned + @param ktype the type we want the output in (int, float or str), str if not specified + @return array of values + @exception GribInternalError + """ + # Cannot get the native type of a key from an index + # so right now the default is str. The user can overwrite + # the type but there is no way right now to do it automatically. + + # if ktype is None: + # ktype = grib_get_native_type(indexid,key) + + result = None + if ktype is int: + result = grib_index_get_long(indexid, key) + elif ktype is float: + result = grib_index_get_double(indexid, key) + elif ktype is str: + result = grib_index_get_string(indexid, key) + + return result + + +@require(indexid=int, key=str) +def grib_index_select(indexid, key, value): + """ + @brief Select the message subset with key==value. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param indexid id of an index created from a file. The index must have been created with the key in argument. + @param key key to be selected + @param value value of the key to select + @exception GribInternalError + """ + if isinstance(value, int): + grib_index_select_long(indexid, key, value) + elif isinstance(value, float): + grib_index_select_double(indexid, key, value) + elif isinstance(value, str): + grib_index_select_string(indexid, key, value) + else: + raise errors.GribInternalError("Invalid type of value when setting key '%s'." % key) + + +@require(indexid=int, filename=str) +def grib_index_write(indexid, filename): + """ + @brief Write an index to a file for later reuse. + + An index can be loaded back from an index file with \ref grib_index_read. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param indexid id of the index + @param filename path of file to save the index to + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_index_write(indexid, filename)) + + +@require(filename=str) +def grib_index_read(filename): + """ + @brief Loads an index previously saved with \ref grib_index_write to a file. + + \b Examples: \ref grib_index.py "grib_index.py" + + @param filename path of file to load the index from + @return id of the loaded index + @exception GribInternalError + """ + err, indexid = _internal.grib_c_index_read(filename) + GRIB_CHECK(err) + return indexid + + +@require(flag=bool) +def grib_no_fail_on_wrong_length(flag): + """ + @brief Do not fail if the message has the wrong length. + + @param flag True/False + """ + if flag: + _internal.no_fail_on_wrong_length(1) + else: + _internal.no_fail_on_wrong_length(0) + + +@require(flag=bool) +def grib_gts_header(flag): + """ + @brief Set the GTS header on/off. + + @param flag True/False + """ + if flag: + _internal.grib_c_gts_header_on() + else: + _internal.grib_c_gts_header_off() + + +def grib_get_api_version(): + """ + @brief Get the API version. + + Returns the version of the API as a string in the format "major.minor.revision". + """ + div = lambda v, d: (v / d, v % d) + v = _internal.grib_c_get_api_version() + v, revision = div(v, 100) + v, minor = div(v, 100) + major = v + + return "%d.%d.%d" % (major, minor, revision) + +__version__ = grib_get_api_version() + + +@require(msgid=int) +def grib_get_message(msgid): + """ + @brief Get the binary message. + + Returns the binary string message associated with the message identified by msgid. + + @see grib_new_from_message + + @param msgid id of the message loaded in memory + @return binary string message associated with msgid + @exception GribInternalError + """ + error, message = _internal.grib_c_get_message(msgid) + GRIB_CHECK(error) + return message + + +@require(message=str) +def grib_new_from_message(message): + """ + @brief Create a handle from a message in memory. + + Create a new message from the input binary string and return its id. + + @see grib_get_message + + @param message binary string message + @return msgid of the newly created message + @exception GribInternalError + """ + error, msgid = _internal.grib_c_new_from_message(0, message, len(message)) + GRIB_CHECK(error) + return msgid + + +@require(defs_path=str) +def grib_set_definitions_path(defs_path): + """ + @brief Set the definitions path + + @param defs_path definitions path + """ + _internal.grib_c_set_definitions_path(defs_path) + + +@require(samples_path=str) +def grib_set_samples_path(samples_path): + """ + @brief Set the samples path + + @param samples_path samples path + """ + _internal.grib_c_set_samples_path(samples_path) diff --git a/python3/gribapi_swig.i b/python3/gribapi_swig.i new file mode 100644 index 000000000..4885c1b3b --- /dev/null +++ b/python3/gribapi_swig.i @@ -0,0 +1,265 @@ +%module gribapi_swig + +%include "cpointer.i" +%include "cstring.i" +%include "typemaps.i" +%include "cdata.i" +%include "carrays.i" +%include "grib_errors.h" + +%{ +#define SWIG_FILE_WITH_INIT +#include "grib_interface.h" +%} + +%include "numpy.i" +%init %{ +import_array(); +%} + +/* Converts a PyFile instance to a stdio FILE* for reading binary files */ +%typemap(in) FILE* { + int fileDescriptor = PyObject_AsFileDescriptor($input); + /*printf("swig.i fileDescriptor=%d\n", fileDescriptor);*/ + if(fileDescriptor >= 0) { + /* Convert file descriptor to a FILE pointer */ + $1 = fdopen(fileDescriptor,"rb"); // needs to be rb+ (or wb) for write + } + else { + PyErr_SetString(PyExc_TypeError, "$1_name must be a file type."); + return NULL; + } +} + +%pointer_class(int, intp); +%pointer_class(size_t, sizetp); +%pointer_class(long, longp); +%pointer_class(double, doublep); +%array_functions(double, doubleArray); +%array_functions(long, longArray); +%array_functions(int, intArray); +%array_functions(char*, stringArray); + +// creation +int grib_c_new_from_file(FILE* f, int fd, char* fname, int* INOUT, int headers_only); +int grib_c_new_any_from_file(FILE* f, int headers_only, int* INOUT); +int grib_c_new_bufr_from_file(FILE* f, int fd, char* fname, int headers_only, int* INOUT); +int grib_c_new_gts_from_file(FILE* f, int headers_only, int* INOUT); +int grib_c_new_metar_from_file(FILE* f, int headers_only, int* INOUT); +int grib_c_iterator_new(int* INPUT, int* OUTPUT, int* INPUT); +int grib_c_keys_iterator_new(int* INPUT, int* OUTPUT, char* name_space); +int codes_c_bufr_keys_iterator_new(int* INPUT, int* OUTPUT); +int grib_c_grib_new_from_samples(int* INOUT, char* name); +int grib_c_bufr_new_from_samples(int* INOUT, char* name); +int grib_c_index_new_from_file(char* file, char* keys, int* OUTPUT); +int grib_c_index_add_file(int* INPUT, char* file); +int grib_c_new_from_index(int *INPUT, int *INOUT); +int grib_c_index_write(int* INPUT, char* file); +int grib_c_index_read(char* file, int* OUTPUT); +int grib_c_new_from_message(int *INOUT, char *binmsg, size_t *INPUT); +// --- + +%apply int* INPUT { int* fid }; +%apply int* INPUT { int* gid }; +%apply int* INPUT { int* iterid }; +%apply int* INPUT { int* iid }; + +// file operations +int grib_c_count_in_file(FILE* f,int* OUTPUT); +// --- + +/* Converts a PyFile instance to a stdio FILE* for writing binary files */ +%typemap(in) FILE* { + int fileDescriptor = PyObject_AsFileDescriptor($input); + if(fileDescriptor >= 0) { + /* Convert file descriptor to a FILE pointer */ + $1 = fdopen(fileDescriptor,"wb"); + } + else { + PyErr_SetString(PyExc_TypeError, "$1_name must be a file type."); + return NULL; + } +} + +// grib handle operations +int grib_c_release(int* gid); +int grib_c_write(int* gid, FILE* f); +int grib_c_get_size_long(int* gid, char* key, long* OUTPUT); +int grib_c_get_string_length(int* gid, char* key, size_t* OUTPUT); +int grib_c_clone(int* gid,int* INOUT); +int grib_c_copy_namespace(int* gid, char* name, int* INPUT); +int grib_c_get_message_size(int* gid, size_t* OUTPUT); +int grib_c_get_message_offset(int* gid, size_t* OUTPUT); +int grib_c_get_native_type(int* gid, char* key, int* OUTPUT); +// --- + +// multi support +int grib_c_multi_new(int* OUTPUT); +int grib_c_multi_support_on(void); +int grib_c_multi_write(int* gid, FILE* f); +int grib_c_multi_support_off(void); +int grib_c_multi_release(int* gid); +int grib_c_multi_append(int* INPUT, int* INPUT,int* INPUT); +// --- + +// gribex support +int grib_c_gribex_mode_on(void); +int grib_c_gribex_mode_off(void); +// --- + +// keys iterator +int grib_c_keys_iterator_next(int* iterid); +int codes_c_bufr_keys_iterator_next(int* iterid); +int grib_c_keys_iterator_delete(int* iterid); +int codes_c_bufr_keys_iterator_delete(int* iterid); +int grib_c_skip_computed(int* iterid); +int grib_c_skip_coded(int* iterid); +int grib_c_skip_edition_specific(int* iterid); +int grib_c_skip_duplicates(int* iterid); +int grib_c_skip_read_only(int* iterid); +int grib_c_skip_function(int* iterid); +int grib_c_keys_iterator_rewind(int* iterid); +int codes_c_bufr_keys_iterator_rewind(int* iterid); +int grib_c_bufr_copy_data(int* gid, int* INOUT); + + +%cstring_bounded_output(char* name, 1024); +int grib_c_keys_iterator_get_name(int* iterid, char* name, int len); +int codes_c_bufr_keys_iterator_get_name(int* iterid, char* name, int len); +// --- + +// indexing routines +int grib_c_index_get_size_long(int* iid, char* key, long* OUTPUT); +int grib_c_index_get_long(int* iid, char* key, long* val, int* size); +int grib_c_index_get_real8(int* iid, char* key, double* val, int* size); +%cstring_bounded_output(char* index_string_output, 1024*1024); +int grib_c_index_get_string(int* iid, char* key, char* index_string_output, int* INPUT, int* INOUT); +int grib_c_index_select_long(int *iid, char *key, long *INPUT); +int grib_c_index_select_real8(int *iid, char *key, double *INPUT); +int grib_c_index_select_string(int *iid, char *key, char *val); +int grib_c_index_release(int* iid); +// --- + +// values iterator +int grib_c_iterator_delete(int* iterid); +int grib_c_iterator_next(int* iterid, double* OUTPUT, double* OUTPUT, double* OUTPUT); +// --- + +// getting/setting key values +%cstring_output_withsize(char* string_val, size_t* string_size) +int grib_c_get_string(int* gid, char* key, char* string_val, size_t* string_size); +int grib_c_get_string_array(int* gid, char* key, char** array_string_val, size_t* size); +int grib_c_set_string(int* gid, char* key, char* sval, int len2); +int grib_c_get_long(int* gid, char* key, long* OUTPUT); +int grib_c_set_long(int* gid, char* key, long* INPUT); +int grib_c_get_double(int* gid, char* key, double* OUTPUT); +int grib_c_set_double(int* gid, char* key, double* INPUT); +int grib_c_set_real8_array(int* gid, char* key, double* val, int* size); +int grib_c_get_real8_array(int* gid, char* key, double* val, int* size); +int grib_c_get_long_array(int* gid, char* key, long* val, int* size); +int grib_c_set_long_array(int* gid, char* key, long* val, int* size); +int grib_c_get_real8_element(int* gid, char* key, int* INPUT, double* OUTPUT); +int grib_c_get_real8_elements(int* gid, char* key, int* index, double* val, int* size); +int grib_c_set_missing(int* gid, char* key); +int grib_c_set_key_vals(int* gid, char* keyvals); +int grib_c_is_missing(int* gid, char* key, int* OUTPUT); +int grib_c_is_defined(int* gid, char* key, int* OUTPUT); + +// http://www.swig.org/Doc1.3/Python.html +// This tells SWIG to treat char ** as a special case +%typemap(in) char ** { + /* Check if is a list */ + if (PyList_Check($input)) { + int size = PyList_Size($input); + int i = 0; + $1 = (char **) malloc((size+1)*sizeof(char *)); + for (i = 0; i < size; i++) { + PyObject *o = PyList_GetItem($input,i); + if (PyString_Check(o)) + $1[i] = PyString_AsString(PyList_GetItem($input,i)); + else { + PyErr_SetString(PyExc_TypeError,"list must contain strings"); + free($1); + return NULL; + } + } + $1[i] = 0; /* Last entry set to NULL */ + } else { + PyErr_SetString(PyExc_TypeError,"not a list"); + return NULL; + } +} +// This cleans up the char ** array we malloc'd before the function call +%typemap(freearg) char ** { + free((char *) $1); +} +int grib_c_set_string_array(int *gid, char *key, const char** val); + +// Numpy Support +%apply (double* IN_ARRAY1, int DIM1) {(double* dpin_val, int dpin_val_dim1)}; +%apply (long* IN_ARRAY1, int DIM1) {(long* lpin_val, int lpin_val_dim1)}; +%apply (int* IN_ARRAY1, int DIM1) {(int* ipin_index, int ipin_index_dim1)}; +%apply (double* ARGOUT_ARRAY1, int DIM1) {(double* dpout_val, int dpout_val_dim1)}; +%apply (long* ARGOUT_ARRAY1, int DIM1) {(long* lpout_val, int lpout_val_dim1)}; + +%inline %{ +//void with_numpy() { +// return; +//} +int grib_set_double_ndarray(int* gid, char* key, double* dpin_val, int dpin_val_dim1) { + return grib_c_set_real8_array(gid,key,dpin_val,&dpin_val_dim1); +} +int grib_set_long_ndarray(int* gid, char* key, long* lpin_val, int lpin_val_dim1) { + return grib_c_set_long_array(gid,key,lpin_val,&lpin_val_dim1); +} +int grib_get_double_ndarray(int* gid, char* key, double* dpout_val, int dpout_val_dim1) { + return grib_c_get_real8_array(gid,key,dpout_val,&dpout_val_dim1); +} +int grib_get_long_ndarray(int* gid, char* key, long* lpout_val, int lpout_val_dim1) { + return grib_c_get_long_array(gid,key,lpout_val,&lpout_val_dim1); +} +int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_index_dim1, double* dpout_val, int dpout_val_dim1) { + return grib_c_get_real8_elements(gid,key,ipin_index,dpout_val,&dpout_val_dim1); +} +%} +%clear double* dpin_val, int dpin_val_dim1; +%clear long* lpin_val, int lpin_val_dim1; +%clear int* ipout_val, int ipout_val_dim1; +%clear double* dpout_val, int dpout_val_dim1; +%clear long* lpout_val, int lpout_val_dim1; + +// --- + +// nearest +int grib_c_find_nearest_single(int* gid, int* INPUT, double* INPUT, double* INPUT, double* OUTPUT, double* OUTPUT, double* OUTPUT, double* OUTPUT, int* OUTPUT); +int grib_c_find_nearest_four_single(int* gid, int* INPUT, double* INPUT, double* INPUT, double* outlats, double* outlons, double* values, double* distances, int* indexes); +// --- + +/* +* Get the binary string message for a grib. +* +* Set the 3rd argument to nothing in 'cstring_output_allocate_size'. +* This is kind of difficult to explain, but, *msg will point directly to +* the binary message data of the current grib (which is stored in +* handle->buffer->data if I remember correctly) so freeing it will cause +* the binary message data in the grib_handle structure to be freed. This +* is a problem as grib_api does not know that, so it tries to free it +* itself (grib_release does that) resulting in a 'Segmentation fault'. +*/ +%cstring_output_allocate_size(const void **binmsg, size_t *binmsglen,); +int grib_c_get_message(int *gid, const void **binmsg, size_t *binmsglen); +%clear const void **binmsg, size_t *binmsglen; + +%clear int* fid; +%clear int* gid; +%clear int* iterid; + +%cstring_bounded_output(char* error_message, 1024); +int grib_c_get_error_string(int* INPUT, char* error_message, int len); + +void no_fail_on_wrong_length(int flag); +long grib_c_get_api_version(); +void grib_c_gts_header_on(); +void grib_c_gts_header_off(); +void grib_c_set_definitions_path(const char* path); +void grib_c_set_samples_path(const char* path); diff --git a/python3/numpy.i b/python3/numpy.i new file mode 100644 index 000000000..72d5824de --- /dev/null +++ b/python3/numpy.i @@ -0,0 +1,3183 @@ +/* -*- C -*- (not really, but good for syntax highlighting) */ + +/* + * Copyright (c) 2005-2015, NumPy Developers. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * * Neither the name of the NumPy Developers nor the names of any + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef SWIGPYTHON + +%{ +#ifndef SWIG_FILE_WITH_INIT +#define NO_IMPORT_ARRAY +#endif +#include "stdio.h" +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +%} + +/**********************************************************************/ + +%fragment("NumPy_Backward_Compatibility", "header") +{ +%#if NPY_API_VERSION < 0x00000007 +%#define NPY_ARRAY_DEFAULT NPY_DEFAULT +%#define NPY_ARRAY_FARRAY NPY_FARRAY +%#define NPY_FORTRANORDER NPY_FORTRAN +%#endif +} + +/**********************************************************************/ + +/* The following code originally appeared in + * enthought/kiva/agg/src/numeric.i written by Eric Jones. It was + * translated from C++ to C by John Hunter. Bill Spotz has modified + * it to fix some minor bugs, upgrade from Numeric to numpy (all + * versions), add some comments and functionality, and convert from + * direct code insertion to SWIG fragments. + */ + +%fragment("NumPy_Macros", "header") +{ +/* Macros to extract array attributes. + */ +%#if NPY_API_VERSION < 0x00000007 +%#define is_array(a) ((a) && PyArray_Check((PyArrayObject*)a)) +%#define array_type(a) (int)(PyArray_TYPE((PyArrayObject*)a)) +%#define array_numdims(a) (((PyArrayObject*)a)->nd) +%#define array_dimensions(a) (((PyArrayObject*)a)->dimensions) +%#define array_size(a,i) (((PyArrayObject*)a)->dimensions[i]) +%#define array_strides(a) (((PyArrayObject*)a)->strides) +%#define array_stride(a,i) (((PyArrayObject*)a)->strides[i]) +%#define array_data(a) (((PyArrayObject*)a)->data) +%#define array_descr(a) (((PyArrayObject*)a)->descr) +%#define array_flags(a) (((PyArrayObject*)a)->flags) +%#define array_clearflags(a,f) (((PyArrayObject*)a)->flags) &= ~f +%#define array_enableflags(a,f) (((PyArrayObject*)a)->flags) = f +%#define array_is_fortran(a) (PyArray_ISFORTRAN((PyArrayObject*)a)) +%#else +%#define is_array(a) ((a) && PyArray_Check(a)) +%#define array_type(a) PyArray_TYPE((PyArrayObject*)a) +%#define array_numdims(a) PyArray_NDIM((PyArrayObject*)a) +%#define array_dimensions(a) PyArray_DIMS((PyArrayObject*)a) +%#define array_strides(a) PyArray_STRIDES((PyArrayObject*)a) +%#define array_stride(a,i) PyArray_STRIDE((PyArrayObject*)a,i) +%#define array_size(a,i) PyArray_DIM((PyArrayObject*)a,i) +%#define array_data(a) PyArray_DATA((PyArrayObject*)a) +%#define array_descr(a) PyArray_DESCR((PyArrayObject*)a) +%#define array_flags(a) PyArray_FLAGS((PyArrayObject*)a) +%#define array_enableflags(a,f) PyArray_ENABLEFLAGS((PyArrayObject*)a,f) +%#define array_clearflags(a,f) PyArray_CLEARFLAGS((PyArrayObject*)a,f) +%#define array_is_fortran(a) (PyArray_IS_F_CONTIGUOUS((PyArrayObject*)a)) +%#endif +%#define array_is_contiguous(a) (PyArray_ISCONTIGUOUS((PyArrayObject*)a)) +%#define array_is_native(a) (PyArray_ISNOTSWAPPED((PyArrayObject*)a)) +} + +/**********************************************************************/ + +%fragment("NumPy_Utilities", + "header") +{ + /* Given a PyObject, return a string describing its type. + */ + const char* pytype_string(PyObject* py_obj) + { + if (py_obj == NULL ) return "C NULL value"; + if (py_obj == Py_None ) return "Python None" ; + if (PyCallable_Check(py_obj)) return "callable" ; + if (PyString_Check( py_obj)) return "string" ; + if (PyInt_Check( py_obj)) return "int" ; + if (PyFloat_Check( py_obj)) return "float" ; + if (PyDict_Check( py_obj)) return "dict" ; + if (PyList_Check( py_obj)) return "list" ; + if (PyTuple_Check( py_obj)) return "tuple" ; +%#if PY_MAJOR_VERSION < 3 + if (PyFile_Check( py_obj)) return "file" ; + if (PyModule_Check( py_obj)) return "module" ; + if (PyInstance_Check(py_obj)) return "instance" ; +%#endif + + return "unknown type"; + } + + /* Given a NumPy typecode, return a string describing the type. + */ + const char* typecode_string(int typecode) + { + static const char* type_names[25] = {"bool", + "byte", + "unsigned byte", + "short", + "unsigned short", + "int", + "unsigned int", + "long", + "unsigned long", + "long long", + "unsigned long long", + "float", + "double", + "long double", + "complex float", + "complex double", + "complex long double", + "object", + "string", + "unicode", + "void", + "ntypes", + "notype", + "char", + "unknown"}; + return typecode < 24 ? type_names[typecode] : type_names[24]; + } + + /* Make sure input has correct numpy type. This now just calls + PyArray_EquivTypenums(). + */ + int type_match(int actual_type, + int desired_type) + { + return PyArray_EquivTypenums(actual_type, desired_type); + } + +%#ifdef SWIGPY_USE_CAPSULE + void free_cap(PyObject * cap) + { + void* array = (void*) PyCapsule_GetPointer(cap,SWIGPY_CAPSULE_NAME); + if (array != NULL) free(array); + } +%#endif + + +} + +/**********************************************************************/ + +%fragment("NumPy_Object_to_Array", + "header", + fragment="NumPy_Backward_Compatibility", + fragment="NumPy_Macros", + fragment="NumPy_Utilities") +{ + /* Given a PyObject pointer, cast it to a PyArrayObject pointer if + * legal. If not, set the python error string appropriately and + * return NULL. + */ + PyArrayObject* obj_to_array_no_conversion(PyObject* input, + int typecode) + { + PyArrayObject* ary = NULL; + if (is_array(input) && (typecode == NPY_NOTYPE || + PyArray_EquivTypenums(array_type(input), typecode))) + { + ary = (PyArrayObject*) input; + } + else if is_array(input) + { + const char* desired_type = typecode_string(typecode); + const char* actual_type = typecode_string(array_type(input)); + PyErr_Format(PyExc_TypeError, + "Array of type '%s' required. Array of type '%s' given", + desired_type, actual_type); + ary = NULL; + } + else + { + const char* desired_type = typecode_string(typecode); + const char* actual_type = pytype_string(input); + PyErr_Format(PyExc_TypeError, + "Array of type '%s' required. A '%s' was given", + desired_type, + actual_type); + ary = NULL; + } + return ary; + } + + /* Convert the given PyObject to a NumPy array with the given + * typecode. On success, return a valid PyArrayObject* with the + * correct type. On failure, the python error string will be set and + * the routine returns NULL. + */ + PyArrayObject* obj_to_array_allow_conversion(PyObject* input, + int typecode, + int* is_new_object) + { + PyArrayObject* ary = NULL; + PyObject* py_obj; + if (is_array(input) && (typecode == NPY_NOTYPE || + PyArray_EquivTypenums(array_type(input),typecode))) + { + ary = (PyArrayObject*) input; + *is_new_object = 0; + } + else + { + py_obj = PyArray_FROMANY(input, typecode, 0, 0, NPY_ARRAY_DEFAULT); + /* If NULL, PyArray_FromObject will have set python error value.*/ + ary = (PyArrayObject*) py_obj; + *is_new_object = 1; + } + return ary; + } + + /* Given a PyArrayObject, check to see if it is contiguous. If so, + * return the input pointer and flag it as not a new object. If it is + * not contiguous, create a new PyArrayObject using the original data, + * flag it as a new object and return the pointer. + */ + PyArrayObject* make_contiguous(PyArrayObject* ary, + int* is_new_object, + int min_dims, + int max_dims) + { + PyArrayObject* result; + if (array_is_contiguous(ary)) + { + result = ary; + *is_new_object = 0; + } + else + { + result = (PyArrayObject*) PyArray_ContiguousFromObject((PyObject*)ary, + array_type(ary), + min_dims, + max_dims); + *is_new_object = 1; + } + return result; + } + + /* Given a PyArrayObject, check to see if it is Fortran-contiguous. + * If so, return the input pointer, but do not flag it as not a new + * object. If it is not Fortran-contiguous, create a new + * PyArrayObject using the original data, flag it as a new object + * and return the pointer. + */ + PyArrayObject* make_fortran(PyArrayObject* ary, + int* is_new_object) + { + PyArrayObject* result; + if (array_is_fortran(ary)) + { + result = ary; + *is_new_object = 0; + } + else + { + Py_INCREF(array_descr(ary)); + result = (PyArrayObject*) PyArray_FromArray(ary, + array_descr(ary), +%#if NPY_API_VERSION < 0x00000007 + NPY_FORTRANORDER); +%#else + NPY_ARRAY_F_CONTIGUOUS); +%#endif + *is_new_object = 1; + } + return result; + } + + /* Convert a given PyObject to a contiguous PyArrayObject of the + * specified type. If the input object is not a contiguous + * PyArrayObject, a new one will be created and the new object flag + * will be set. + */ + PyArrayObject* obj_to_array_contiguous_allow_conversion(PyObject* input, + int typecode, + int* is_new_object) + { + int is_new1 = 0; + int is_new2 = 0; + PyArrayObject* ary2; + PyArrayObject* ary1 = obj_to_array_allow_conversion(input, + typecode, + &is_new1); + if (ary1) + { + ary2 = make_contiguous(ary1, &is_new2, 0, 0); + if ( is_new1 && is_new2) + { + Py_DECREF(ary1); + } + ary1 = ary2; + } + *is_new_object = is_new1 || is_new2; + return ary1; + } + + /* Convert a given PyObject to a Fortran-ordered PyArrayObject of the + * specified type. If the input object is not a Fortran-ordered + * PyArrayObject, a new one will be created and the new object flag + * will be set. + */ + PyArrayObject* obj_to_array_fortran_allow_conversion(PyObject* input, + int typecode, + int* is_new_object) + { + int is_new1 = 0; + int is_new2 = 0; + PyArrayObject* ary2; + PyArrayObject* ary1 = obj_to_array_allow_conversion(input, + typecode, + &is_new1); + if (ary1) + { + ary2 = make_fortran(ary1, &is_new2); + if (is_new1 && is_new2) + { + Py_DECREF(ary1); + } + ary1 = ary2; + } + *is_new_object = is_new1 || is_new2; + return ary1; + } +} /* end fragment */ + +/**********************************************************************/ + +%fragment("NumPy_Array_Requirements", + "header", + fragment="NumPy_Backward_Compatibility", + fragment="NumPy_Macros") +{ + /* Test whether a python object is contiguous. If array is + * contiguous, return 1. Otherwise, set the python error string and + * return 0. + */ + int require_contiguous(PyArrayObject* ary) + { + int contiguous = 1; + if (!array_is_contiguous(ary)) + { + PyErr_SetString(PyExc_TypeError, + "Array must be contiguous. A non-contiguous array was given"); + contiguous = 0; + } + return contiguous; + } + + /* Test whether a python object is (C_ or F_) contiguous. If array is + * contiguous, return 1. Otherwise, set the python error string and + * return 0. + */ + int require_c_or_f_contiguous(PyArrayObject* ary) + { + int contiguous = 1; + if (!(array_is_contiguous(ary) || array_is_fortran(ary))) + { + PyErr_SetString(PyExc_TypeError, + "Array must be contiguous (C_ or F_). A non-contiguous array was given"); + contiguous = 0; + } + return contiguous; + } + + /* Require that a numpy array is not byte-swapped. If the array is + * not byte-swapped, return 1. Otherwise, set the python error string + * and return 0. + */ + int require_native(PyArrayObject* ary) + { + int native = 1; + if (!array_is_native(ary)) + { + PyErr_SetString(PyExc_TypeError, + "Array must have native byteorder. " + "A byte-swapped array was given"); + native = 0; + } + return native; + } + + /* Require the given PyArrayObject to have a specified number of + * dimensions. If the array has the specified number of dimensions, + * return 1. Otherwise, set the python error string and return 0. + */ + int require_dimensions(PyArrayObject* ary, + int exact_dimensions) + { + int success = 1; + if (array_numdims(ary) != exact_dimensions) + { + PyErr_Format(PyExc_TypeError, + "Array must have %d dimensions. Given array has %d dimensions", + exact_dimensions, + array_numdims(ary)); + success = 0; + } + return success; + } + + /* Require the given PyArrayObject to have one of a list of specified + * number of dimensions. If the array has one of the specified number + * of dimensions, return 1. Otherwise, set the python error string + * and return 0. + */ + int require_dimensions_n(PyArrayObject* ary, + int* exact_dimensions, + int n) + { + int success = 0; + int i; + char dims_str[255] = ""; + char s[255]; + for (i = 0; i < n && !success; i++) + { + if (array_numdims(ary) == exact_dimensions[i]) + { + success = 1; + } + } + if (!success) + { + for (i = 0; i < n-1; i++) + { + sprintf(s, "%d, ", exact_dimensions[i]); + strcat(dims_str,s); + } + sprintf(s, " or %d", exact_dimensions[n-1]); + strcat(dims_str,s); + PyErr_Format(PyExc_TypeError, + "Array must have %s dimensions. Given array has %d dimensions", + dims_str, + array_numdims(ary)); + } + return success; + } + + /* Require the given PyArrayObject to have a specified shape. If the + * array has the specified shape, return 1. Otherwise, set the python + * error string and return 0. + */ + int require_size(PyArrayObject* ary, + npy_intp* size, + int n) + { + int i; + int success = 1; + size_t len; + char desired_dims[255] = "["; + char s[255]; + char actual_dims[255] = "["; + for(i=0; i < n;i++) + { + if (size[i] != -1 && size[i] != array_size(ary,i)) + { + success = 0; + } + } + if (!success) + { + for (i = 0; i < n; i++) + { + if (size[i] == -1) + { + sprintf(s, "*,"); + } + else + { + sprintf(s, "%ld,", (long int)size[i]); + } + strcat(desired_dims,s); + } + len = strlen(desired_dims); + desired_dims[len-1] = ']'; + for (i = 0; i < n; i++) + { + sprintf(s, "%ld,", (long int)array_size(ary,i)); + strcat(actual_dims,s); + } + len = strlen(actual_dims); + actual_dims[len-1] = ']'; + PyErr_Format(PyExc_TypeError, + "Array must have shape of %s. Given array has shape of %s", + desired_dims, + actual_dims); + } + return success; + } + + /* Require the given PyArrayObject to to be Fortran ordered. If the + * the PyArrayObject is already Fortran ordered, do nothing. Else, + * set the Fortran ordering flag and recompute the strides. + */ + int require_fortran(PyArrayObject* ary) + { + int success = 1; + int nd = array_numdims(ary); + int i; + npy_intp * strides = array_strides(ary); + if (array_is_fortran(ary)) return success; + int n_non_one = 0; + /* Set the Fortran ordered flag */ + const npy_intp *dims = array_dimensions(ary); + for (i=0; i < nd; ++i) + n_non_one += (dims[i] != 1) ? 1 : 0; + if (n_non_one > 1) + array_clearflags(ary,NPY_ARRAY_CARRAY); + array_enableflags(ary,NPY_ARRAY_FARRAY); + /* Recompute the strides */ + strides[0] = strides[nd-1]; + for (i=1; i < nd; ++i) + strides[i] = strides[i-1] * array_size(ary,i-1); + return success; + } +} + +/* Combine all NumPy fragments into one for convenience */ +%fragment("NumPy_Fragments", + "header", + fragment="NumPy_Backward_Compatibility", + fragment="NumPy_Macros", + fragment="NumPy_Utilities", + fragment="NumPy_Object_to_Array", + fragment="NumPy_Array_Requirements") +{ +} + +/* End John Hunter translation (with modifications by Bill Spotz) + */ + +/* %numpy_typemaps() macro + * + * This macro defines a family of 75 typemaps that allow C arguments + * of the form + * + * 1. (DATA_TYPE IN_ARRAY1[ANY]) + * 2. (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) + * 3. (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) + * + * 4. (DATA_TYPE IN_ARRAY2[ANY][ANY]) + * 5. (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + * 6. (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) + * 7. (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + * 8. (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2) + * + * 9. (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) + * 10. (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + * 11. (DATA_TYPE** IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + * 12. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) + * 13. (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + * 14. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3) + * + * 15. (DATA_TYPE IN_ARRAY4[ANY][ANY][ANY][ANY]) + * 16. (DATA_TYPE* IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) + * 17. (DATA_TYPE** IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) + * 18. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, , DIM_TYPE DIM4, DATA_TYPE* IN_ARRAY4) + * 19. (DATA_TYPE* IN_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) + * 20. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* IN_FARRAY4) + * + * 21. (DATA_TYPE INPLACE_ARRAY1[ANY]) + * 22. (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1) + * 23. (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1) + * + * 24. (DATA_TYPE INPLACE_ARRAY2[ANY][ANY]) + * 25. (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + * 26. (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2) + * 27. (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + * 28. (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2) + * + * 29. (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY]) + * 30. (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + * 31. (DATA_TYPE** INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + * 32. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3) + * 33. (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + * 34. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3) + * + * 35. (DATA_TYPE INPLACE_ARRAY4[ANY][ANY][ANY][ANY]) + * 36. (DATA_TYPE* INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) + * 37. (DATA_TYPE** INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) + * 38. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* INPLACE_ARRAY4) + * 39. (DATA_TYPE* INPLACE_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) + * 40. (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* INPLACE_FARRAY4) + * + * 41. (DATA_TYPE ARGOUT_ARRAY1[ANY]) + * 42. (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) + * 43. (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) + * + * 44. (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) + * + * 45. (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) + * + * 46. (DATA_TYPE ARGOUT_ARRAY4[ANY][ANY][ANY][ANY]) + * + * 47. (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1) + * 48. (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1) + * + * 49. (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) + * 50. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2) + * 51. (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) + * 52. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2) + * + * 53. (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) + * 54. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3) + * 55. (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) + * 56. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3) + * + * 57. (DATA_TYPE** ARGOUTVIEW_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) + * 58. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEW_ARRAY4) + * 59. (DATA_TYPE** ARGOUTVIEW_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) + * 60. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEW_FARRAY4) + * + * 61. (DATA_TYPE** ARGOUTVIEWM_ARRAY1, DIM_TYPE* DIM1) + * 62. (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEWM_ARRAY1) + * + * 63. (DATA_TYPE** ARGOUTVIEWM_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) + * 64. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEWM_ARRAY2) + * 65. (DATA_TYPE** ARGOUTVIEWM_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) + * 66. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEWM_FARRAY2) + * + * 67. (DATA_TYPE** ARGOUTVIEWM_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) + * 68. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEWM_ARRAY3) + * 69. (DATA_TYPE** ARGOUTVIEWM_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) + * 70. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEWM_FARRAY3) + * + * 71. (DATA_TYPE** ARGOUTVIEWM_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) + * 72. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEWM_ARRAY4) + * 73. (DATA_TYPE** ARGOUTVIEWM_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) + * 74. (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEWM_FARRAY4) + * + * 75. (DATA_TYPE* INPLACE_ARRAY_FLAT, DIM_TYPE DIM_FLAT) + * + * where "DATA_TYPE" is any type supported by the NumPy module, and + * "DIM_TYPE" is any int-like type suitable for specifying dimensions. + * The difference between "ARRAY" typemaps and "FARRAY" typemaps is + * that the "FARRAY" typemaps expect Fortran ordering of + * multidimensional arrays. In python, the dimensions will not need + * to be specified (except for the "DATA_TYPE* ARGOUT_ARRAY1" + * typemaps). The IN_ARRAYs can be a numpy array or any sequence that + * can be converted to a numpy array of the specified type. The + * INPLACE_ARRAYs must be numpy arrays of the appropriate type. The + * ARGOUT_ARRAYs will be returned as new numpy arrays of the + * appropriate type. + * + * These typemaps can be applied to existing functions using the + * %apply directive. For example: + * + * %apply (double* IN_ARRAY1, int DIM1) {(double* series, int length)}; + * double prod(double* series, int length); + * + * %apply (int DIM1, int DIM2, double* INPLACE_ARRAY2) + * {(int rows, int cols, double* matrix )}; + * void floor(int rows, int cols, double* matrix, double f); + * + * %apply (double IN_ARRAY3[ANY][ANY][ANY]) + * {(double tensor[2][2][2] )}; + * %apply (double ARGOUT_ARRAY3[ANY][ANY][ANY]) + * {(double low[2][2][2] )}; + * %apply (double ARGOUT_ARRAY3[ANY][ANY][ANY]) + * {(double upp[2][2][2] )}; + * void luSplit(double tensor[2][2][2], + * double low[2][2][2], + * double upp[2][2][2] ); + * + * or directly with + * + * double prod(double* IN_ARRAY1, int DIM1); + * + * void floor(int DIM1, int DIM2, double* INPLACE_ARRAY2, double f); + * + * void luSplit(double IN_ARRAY3[ANY][ANY][ANY], + * double ARGOUT_ARRAY3[ANY][ANY][ANY], + * double ARGOUT_ARRAY3[ANY][ANY][ANY]); + */ + +%define %numpy_typemaps(DATA_TYPE, DATA_TYPECODE, DIM_TYPE) + +/************************/ +/* Input Array Typemaps */ +/************************/ + +/* Typemap suite for (DATA_TYPE IN_ARRAY1[ANY]) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE IN_ARRAY1[ANY]) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE IN_ARRAY1[ANY]) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[1] = { $1_dim0 }; + array = obj_to_array_contiguous_allow_conversion($input, + DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 1) || + !require_size(array, size, 1)) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} +%typemap(freearg) + (DATA_TYPE IN_ARRAY1[ANY]) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[1] = { -1 }; + array = obj_to_array_contiguous_allow_conversion($input, + DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 1) || + !require_size(array, size, 1)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); +} +%typemap(freearg) + (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[1] = {-1}; + array = obj_to_array_contiguous_allow_conversion($input, + DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 1) || + !require_size(array, size, 1)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DATA_TYPE*) array_data(array); +} +%typemap(freearg) + (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE IN_ARRAY2[ANY][ANY]) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE IN_ARRAY2[ANY][ANY]) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE IN_ARRAY2[ANY][ANY]) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[2] = { $1_dim0, $1_dim1 }; + array = obj_to_array_contiguous_allow_conversion($input, + DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 2) || + !require_size(array, size, 2)) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} +%typemap(freearg) + (DATA_TYPE IN_ARRAY2[ANY][ANY]) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[2] = { -1, -1 }; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 2) || + !require_size(array, size, 2)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); +} +%typemap(freearg) + (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[2] = { -1, -1 }; + array = obj_to_array_contiguous_allow_conversion($input, + DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 2) || + !require_size(array, size, 2)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DATA_TYPE*) array_data(array); +} +%typemap(freearg) + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[2] = { -1, -1 }; + array = obj_to_array_fortran_allow_conversion($input, + DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 2) || + !require_size(array, size, 2) || !require_fortran(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); +} +%typemap(freearg) + (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[2] = { -1, -1 }; + array = obj_to_array_fortran_allow_conversion($input, + DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 2) || + !require_size(array, size, 2) || !require_fortran(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DATA_TYPE*) array_data(array); +} +%typemap(freearg) + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 }; + array = obj_to_array_contiguous_allow_conversion($input, + DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 3) || + !require_size(array, size, 3)) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} +%typemap(freearg) + (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[3] = { -1, -1, -1 }; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 3) || + !require_size(array, size, 3)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); + $4 = (DIM_TYPE) array_size(array,2); +} +%typemap(freearg) + (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE** IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE** IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + /* for now, only concerned with lists */ + $1 = PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE** IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + (DATA_TYPE** array=NULL, PyArrayObject** object_array=NULL, int* is_new_object_array=NULL) +{ + npy_intp size[2] = { -1, -1 }; + PyArrayObject* temp_array; + Py_ssize_t i; + int is_new_object; + + /* length of the list */ + $2 = PyList_Size($input); + + /* the arrays */ + array = (DATA_TYPE **)malloc($2*sizeof(DATA_TYPE *)); + object_array = (PyArrayObject **)calloc($2,sizeof(PyArrayObject *)); + is_new_object_array = (int *)calloc($2,sizeof(int)); + + if (array == NULL || object_array == NULL || is_new_object_array == NULL) + { + SWIG_fail; + } + + for (i=0; i<$2; i++) + { + temp_array = obj_to_array_contiguous_allow_conversion(PySequence_GetItem($input,i), DATA_TYPECODE, &is_new_object); + + /* the new array must be stored so that it can be destroyed in freearg */ + object_array[i] = temp_array; + is_new_object_array[i] = is_new_object; + + if (!temp_array || !require_dimensions(temp_array, 2)) SWIG_fail; + + /* store the size of the first array in the list, then use that for comparison. */ + if (i == 0) + { + size[0] = array_size(temp_array,0); + size[1] = array_size(temp_array,1); + } + + if (!require_size(temp_array, size, 2)) SWIG_fail; + + array[i] = (DATA_TYPE*) array_data(temp_array); + } + + $1 = (DATA_TYPE**) array; + $3 = (DIM_TYPE) size[0]; + $4 = (DIM_TYPE) size[1]; +} +%typemap(freearg) + (DATA_TYPE** IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + Py_ssize_t i; + + if (array$argnum!=NULL) free(array$argnum); + + /*freeing the individual arrays if needed */ + if (object_array$argnum!=NULL) + { + if (is_new_object_array$argnum!=NULL) + { + for (i=0; i<$2; i++) + { + if (object_array$argnum[i] != NULL && is_new_object_array$argnum[i]) + { Py_DECREF(object_array$argnum[i]); } + } + free(is_new_object_array$argnum); + } + free(object_array$argnum); + } +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, + * DATA_TYPE* IN_ARRAY3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[3] = { -1, -1, -1 }; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 3) || + !require_size(array, size, 3)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DIM_TYPE) array_size(array,2); + $4 = (DATA_TYPE*) array_data(array); +} +%typemap(freearg) + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[3] = { -1, -1, -1 }; + array = obj_to_array_fortran_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 3) || + !require_size(array, size, 3) | !require_fortran(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); + $4 = (DIM_TYPE) array_size(array,2); +} +%typemap(freearg) + (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, + * DATA_TYPE* IN_FARRAY3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[3] = { -1, -1, -1 }; + array = obj_to_array_fortran_allow_conversion($input, + DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 3) || + !require_size(array, size, 3) || !require_fortran(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DIM_TYPE) array_size(array,2); + $4 = (DATA_TYPE*) array_data(array); +} +%typemap(freearg) + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE IN_ARRAY4[ANY][ANY][ANY][ANY]) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE IN_ARRAY4[ANY][ANY][ANY][ANY]) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE IN_ARRAY4[ANY][ANY][ANY][ANY]) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[4] = { $1_dim0, $1_dim1, $1_dim2 , $1_dim3}; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 4) || + !require_size(array, size, 4)) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} +%typemap(freearg) + (DATA_TYPE IN_ARRAY4[ANY][ANY][ANY][ANY]) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE* IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3, DIM_TYPE DIM4) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[4] = { -1, -1, -1, -1 }; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 4) || + !require_size(array, size, 4)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); + $4 = (DIM_TYPE) array_size(array,2); + $5 = (DIM_TYPE) array_size(array,3); +} +%typemap(freearg) + (DATA_TYPE* IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE** IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3, DIM_TYPE DIM4) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE** IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) +{ + /* for now, only concerned with lists */ + $1 = PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE** IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) + (DATA_TYPE** array=NULL, PyArrayObject** object_array=NULL, int* is_new_object_array=NULL) +{ + npy_intp size[3] = { -1, -1, -1 }; + PyArrayObject* temp_array; + Py_ssize_t i; + int is_new_object; + + /* length of the list */ + $2 = PyList_Size($input); + + /* the arrays */ + array = (DATA_TYPE **)malloc($2*sizeof(DATA_TYPE *)); + object_array = (PyArrayObject **)calloc($2,sizeof(PyArrayObject *)); + is_new_object_array = (int *)calloc($2,sizeof(int)); + + if (array == NULL || object_array == NULL || is_new_object_array == NULL) + { + SWIG_fail; + } + + for (i=0; i<$2; i++) + { + temp_array = obj_to_array_contiguous_allow_conversion(PySequence_GetItem($input,i), DATA_TYPECODE, &is_new_object); + + /* the new array must be stored so that it can be destroyed in freearg */ + object_array[i] = temp_array; + is_new_object_array[i] = is_new_object; + + if (!temp_array || !require_dimensions(temp_array, 3)) SWIG_fail; + + /* store the size of the first array in the list, then use that for comparison. */ + if (i == 0) + { + size[0] = array_size(temp_array,0); + size[1] = array_size(temp_array,1); + size[2] = array_size(temp_array,2); + } + + if (!require_size(temp_array, size, 3)) SWIG_fail; + + array[i] = (DATA_TYPE*) array_data(temp_array); + } + + $1 = (DATA_TYPE**) array; + $3 = (DIM_TYPE) size[0]; + $4 = (DIM_TYPE) size[1]; + $5 = (DIM_TYPE) size[2]; +} +%typemap(freearg) + (DATA_TYPE** IN_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) +{ + Py_ssize_t i; + + if (array$argnum!=NULL) free(array$argnum); + + /*freeing the individual arrays if needed */ + if (object_array$argnum!=NULL) + { + if (is_new_object_array$argnum!=NULL) + { + for (i=0; i<$2; i++) + { + if (object_array$argnum[i] != NULL && is_new_object_array$argnum[i]) + { Py_DECREF(object_array$argnum[i]); } + } + free(is_new_object_array$argnum); + } + free(object_array$argnum); + } +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, + * DATA_TYPE* IN_ARRAY4) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* IN_ARRAY4) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* IN_ARRAY4) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[4] = { -1, -1, -1 , -1}; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 4) || + !require_size(array, size, 4)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DIM_TYPE) array_size(array,2); + $4 = (DIM_TYPE) array_size(array,3); + $5 = (DATA_TYPE*) array_data(array); +} +%typemap(freearg) + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* IN_ARRAY4) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE* IN_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3, DIM_TYPE DIM4) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* IN_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* IN_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[4] = { -1, -1, -1, -1 }; + array = obj_to_array_fortran_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 4) || + !require_size(array, size, 4) | !require_fortran(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); + $4 = (DIM_TYPE) array_size(array,2); + $5 = (DIM_TYPE) array_size(array,3); +} +%typemap(freearg) + (DATA_TYPE* IN_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, + * DATA_TYPE* IN_FARRAY4) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* IN_FARRAY4) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* IN_FARRAY4) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[4] = { -1, -1, -1 , -1 }; + array = obj_to_array_fortran_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 4) || + !require_size(array, size, 4) || !require_fortran(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DIM_TYPE) array_size(array,2); + $4 = (DIM_TYPE) array_size(array,3); + $5 = (DATA_TYPE*) array_data(array); +} +%typemap(freearg) + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* IN_FARRAY4) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/***************************/ +/* In-Place Array Typemaps */ +/***************************/ + +/* Typemap suite for (DATA_TYPE INPLACE_ARRAY1[ANY]) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE INPLACE_ARRAY1[ANY]) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE INPLACE_ARRAY1[ANY]) + (PyArrayObject* array=NULL) +{ + npy_intp size[1] = { $1_dim0 }; + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,1) || !require_size(array, size, 1) || + !require_contiguous(array) || !require_native(array)) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} + +/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1) + (PyArrayObject* array=NULL, int i=1) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,1) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = 1; + for (i=0; i < array_numdims(array); ++i) $2 *= array_size(array,i); +} + +/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1) + (PyArrayObject* array=NULL, int i=0) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,1) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = 1; + for (i=0; i < array_numdims(array); ++i) $1 *= array_size(array,i); + $2 = (DATA_TYPE*) array_data(array); +} + +/* Typemap suite for (DATA_TYPE INPLACE_ARRAY2[ANY][ANY]) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE INPLACE_ARRAY2[ANY][ANY]) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE INPLACE_ARRAY2[ANY][ANY]) + (PyArrayObject* array=NULL) +{ + npy_intp size[2] = { $1_dim0, $1_dim1 }; + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,2) || !require_size(array, size, 2) || + !require_contiguous(array) || !require_native(array)) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} + +/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,2) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,2) || !require_contiguous(array) || + !require_native(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DATA_TYPE*) array_data(array); +} + +/* Typemap suite for (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,2) || !require_contiguous(array) + || !require_native(array) || !require_fortran(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,2) || !require_contiguous(array) || + !require_native(array) || !require_fortran(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DATA_TYPE*) array_data(array); +} + +/* Typemap suite for (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY]) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY]) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY]) + (PyArrayObject* array=NULL) +{ + npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 }; + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,3) || !require_size(array, size, 3) || + !require_contiguous(array) || !require_native(array)) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} + +/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,3) || !require_contiguous(array) || + !require_native(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); + $4 = (DIM_TYPE) array_size(array,2); +} + +/* Typemap suite for (DATA_TYPE** INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE** INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + $1 = PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE** INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + (DATA_TYPE** array=NULL, PyArrayObject** object_array=NULL) +{ + npy_intp size[2] = { -1, -1 }; + PyArrayObject* temp_array; + Py_ssize_t i; + + /* length of the list */ + $2 = PyList_Size($input); + + /* the arrays */ + array = (DATA_TYPE **)malloc($2*sizeof(DATA_TYPE *)); + object_array = (PyArrayObject **)calloc($2,sizeof(PyArrayObject *)); + + if (array == NULL || object_array == NULL) + { + SWIG_fail; + } + + for (i=0; i<$2; i++) + { + temp_array = obj_to_array_no_conversion(PySequence_GetItem($input,i), DATA_TYPECODE); + + /* the new array must be stored so that it can be destroyed in freearg */ + object_array[i] = temp_array; + + if ( !temp_array || !require_dimensions(temp_array, 2) || + !require_contiguous(temp_array) || + !require_native(temp_array) || + !PyArray_EquivTypenums(array_type(temp_array), DATA_TYPECODE) + ) SWIG_fail; + + /* store the size of the first array in the list, then use that for comparison. */ + if (i == 0) + { + size[0] = array_size(temp_array,0); + size[1] = array_size(temp_array,1); + } + + if (!require_size(temp_array, size, 2)) SWIG_fail; + + array[i] = (DATA_TYPE*) array_data(temp_array); + } + + $1 = (DATA_TYPE**) array; + $3 = (DIM_TYPE) size[0]; + $4 = (DIM_TYPE) size[1]; +} +%typemap(freearg) + (DATA_TYPE** INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + if (array$argnum!=NULL) free(array$argnum); + if (object_array$argnum!=NULL) free(object_array$argnum); +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, + * DATA_TYPE* INPLACE_ARRAY3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,3) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DIM_TYPE) array_size(array,2); + $4 = (DATA_TYPE*) array_data(array); +} + +/* Typemap suite for (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,3) || !require_contiguous(array) || + !require_native(array) || !require_fortran(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); + $4 = (DIM_TYPE) array_size(array,2); +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, + * DATA_TYPE* INPLACE_FARRAY3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,3) || !require_contiguous(array) + || !require_native(array) || !require_fortran(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DIM_TYPE) array_size(array,2); + $4 = (DATA_TYPE*) array_data(array); +} + +/* Typemap suite for (DATA_TYPE INPLACE_ARRAY4[ANY][ANY][ANY][ANY]) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE INPLACE_ARRAY4[ANY][ANY][ANY][ANY]) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE INPLACE_ARRAY4[ANY][ANY][ANY][ANY]) + (PyArrayObject* array=NULL) +{ + npy_intp size[4] = { $1_dim0, $1_dim1, $1_dim2 , $1_dim3 }; + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,4) || !require_size(array, size, 4) || + !require_contiguous(array) || !require_native(array)) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} + +/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3, DIM_TYPE DIM4) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,4) || !require_contiguous(array) || + !require_native(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); + $4 = (DIM_TYPE) array_size(array,2); + $5 = (DIM_TYPE) array_size(array,3); +} + +/* Typemap suite for (DATA_TYPE** INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3, DIM_TYPE DIM4) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE** INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) +{ + $1 = PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE** INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) + (DATA_TYPE** array=NULL, PyArrayObject** object_array=NULL) +{ + npy_intp size[3] = { -1, -1, -1 }; + PyArrayObject* temp_array; + Py_ssize_t i; + + /* length of the list */ + $2 = PyList_Size($input); + + /* the arrays */ + array = (DATA_TYPE **)malloc($2*sizeof(DATA_TYPE *)); + object_array = (PyArrayObject **)calloc($2,sizeof(PyArrayObject *)); + + if (array == NULL || object_array == NULL) + { + SWIG_fail; + } + + for (i=0; i<$2; i++) + { + temp_array = obj_to_array_no_conversion(PySequence_GetItem($input,i), DATA_TYPECODE); + + /* the new array must be stored so that it can be destroyed in freearg */ + object_array[i] = temp_array; + + if ( !temp_array || !require_dimensions(temp_array, 3) || + !require_contiguous(temp_array) || + !require_native(temp_array) || + !PyArray_EquivTypenums(array_type(temp_array), DATA_TYPECODE) + ) SWIG_fail; + + /* store the size of the first array in the list, then use that for comparison. */ + if (i == 0) + { + size[0] = array_size(temp_array,0); + size[1] = array_size(temp_array,1); + size[2] = array_size(temp_array,2); + } + + if (!require_size(temp_array, size, 3)) SWIG_fail; + + array[i] = (DATA_TYPE*) array_data(temp_array); + } + + $1 = (DATA_TYPE**) array; + $3 = (DIM_TYPE) size[0]; + $4 = (DIM_TYPE) size[1]; + $5 = (DIM_TYPE) size[2]; +} +%typemap(freearg) + (DATA_TYPE** INPLACE_ARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) +{ + if (array$argnum!=NULL) free(array$argnum); + if (object_array$argnum!=NULL) free(object_array$argnum); +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, + * DATA_TYPE* INPLACE_ARRAY4) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* INPLACE_ARRAY4) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* INPLACE_ARRAY4) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,4) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DIM_TYPE) array_size(array,2); + $4 = (DIM_TYPE) array_size(array,3); + $5 = (DATA_TYPE*) array_data(array); +} + +/* Typemap suite for (DATA_TYPE* INPLACE_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3, DIM_TYPE DIM4) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* INPLACE_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* INPLACE_FARRAY4, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,4) || !require_contiguous(array) || + !require_native(array) || !require_fortran(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); + $4 = (DIM_TYPE) array_size(array,2); + $5 = (DIM_TYPE) array_size(array,3); +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, + * DATA_TYPE* INPLACE_FARRAY4) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* INPLACE_FARRAY4) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DIM_TYPE DIM4, DATA_TYPE* INPLACE_FARRAY4) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,4) || !require_contiguous(array) + || !require_native(array) || !require_fortran(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DIM_TYPE) array_size(array,2); + $4 = (DIM_TYPE) array_size(array,3); + $5 = (DATA_TYPE*) array_data(array); +} + +/*************************/ +/* Argout Array Typemaps */ +/*************************/ + +/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY1[ANY]) + */ +%typemap(in,numinputs=0, + fragment="NumPy_Backward_Compatibility,NumPy_Macros") + (DATA_TYPE ARGOUT_ARRAY1[ANY]) + (PyObject* array = NULL) +{ + npy_intp dims[1] = { $1_dim0 }; + array = PyArray_SimpleNew(1, dims, DATA_TYPECODE); + if (!array) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} +%typemap(argout) + (DATA_TYPE ARGOUT_ARRAY1[ANY]) +{ + $result = SWIG_Python_AppendOutput($result,(PyObject*)array$argnum); +} + +/* Typemap suite for (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) + */ +%typemap(in,numinputs=1, + fragment="NumPy_Fragments") + (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) + (PyObject* array = NULL) +{ + npy_intp dims[1]; + if (!PyInt_Check($input)) + { + const char* typestring = pytype_string($input); + PyErr_Format(PyExc_TypeError, + "Int dimension expected. '%s' given.", + typestring); + SWIG_fail; + } + $2 = (DIM_TYPE) PyInt_AsLong($input); + dims[0] = (npy_intp) $2; + array = PyArray_SimpleNew(1, dims, DATA_TYPECODE); + if (!array) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); +} +%typemap(argout) + (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) +{ + $result = SWIG_Python_AppendOutput($result,(PyObject*)array$argnum); +} + +/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) + */ +%typemap(in,numinputs=1, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) + (PyObject* array = NULL) +{ + npy_intp dims[1]; + if (!PyInt_Check($input)) + { + const char* typestring = pytype_string($input); + PyErr_Format(PyExc_TypeError, + "Int dimension expected. '%s' given.", + typestring); + SWIG_fail; + } + $1 = (DIM_TYPE) PyInt_AsLong($input); + dims[0] = (npy_intp) $1; + array = PyArray_SimpleNew(1, dims, DATA_TYPECODE); + if (!array) SWIG_fail; + $2 = (DATA_TYPE*) array_data(array); +} +%typemap(argout) + (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) +{ + $result = SWIG_Python_AppendOutput($result,(PyObject*)array$argnum); +} + +/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) + */ +%typemap(in,numinputs=0, + fragment="NumPy_Backward_Compatibility,NumPy_Macros") + (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) + (PyObject* array = NULL) +{ + npy_intp dims[2] = { $1_dim0, $1_dim1 }; + array = PyArray_SimpleNew(2, dims, DATA_TYPECODE); + if (!array) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} +%typemap(argout) + (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) +{ + $result = SWIG_Python_AppendOutput($result,(PyObject*)array$argnum); +} + +/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) + */ +%typemap(in,numinputs=0, + fragment="NumPy_Backward_Compatibility,NumPy_Macros") + (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) + (PyObject* array = NULL) +{ + npy_intp dims[3] = { $1_dim0, $1_dim1, $1_dim2 }; + array = PyArray_SimpleNew(3, dims, DATA_TYPECODE); + if (!array) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} +%typemap(argout) + (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) +{ + $result = SWIG_Python_AppendOutput($result,(PyObject*)array$argnum); +} + +/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY4[ANY][ANY][ANY][ANY]) + */ +%typemap(in,numinputs=0, + fragment="NumPy_Backward_Compatibility,NumPy_Macros") + (DATA_TYPE ARGOUT_ARRAY4[ANY][ANY][ANY][ANY]) + (PyObject* array = NULL) +{ + npy_intp dims[4] = { $1_dim0, $1_dim1, $1_dim2, $1_dim3 }; + array = PyArray_SimpleNew(4, dims, DATA_TYPECODE); + if (!array) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} +%typemap(argout) + (DATA_TYPE ARGOUT_ARRAY4[ANY][ANY][ANY][ANY]) +{ + $result = SWIG_Python_AppendOutput($result,(PyObject*)array$argnum); +} + +/*****************************/ +/* Argoutview Array Typemaps */ +/*****************************/ + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim_temp) +{ + $1 = &data_temp; + $2 = &dim_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility") + (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1) +{ + npy_intp dims[1] = { *$2 }; + PyObject* obj = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DATA_TYPE** ARGOUTVIEW_ARRAY1) + (DIM_TYPE dim_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim_temp; + $2 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility") + (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1) +{ + npy_intp dims[1] = { *$1 }; + PyObject* obj = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$2)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility") + (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) +{ + npy_intp dims[2] = { *$2, *$3 }; + PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DATA_TYPE** ARGOUTVIEW_ARRAY2) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2) +{ + npy_intp dims[2] = { *$1, *$2 }; + PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements") + (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) +{ + npy_intp dims[2] = { *$2, *$3 }; + PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array || !require_fortran(array)) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DATA_TYPE** ARGOUTVIEW_FARRAY2) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2) +{ + npy_intp dims[2] = { *$1, *$2 }; + PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array || !require_fortran(array)) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, + DIM_TYPE* DIM3) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; + $4 = &dim3_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility") + (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) +{ + npy_intp dims[3] = { *$2, *$3, *$4 }; + PyObject* obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, + DATA_TYPE** ARGOUTVIEW_ARRAY3) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp = NULL) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &dim3_temp; + $4 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3) +{ + npy_intp dims[3] = { *$1, *$2, *$3 }; + PyObject* obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$4)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, + DIM_TYPE* DIM3) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; + $4 = &dim3_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements") + (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) +{ + npy_intp dims[3] = { *$2, *$3, *$4 }; + PyObject* obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array || !require_fortran(array)) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, + DATA_TYPE** ARGOUTVIEW_FARRAY3) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DATA_TYPE** ARGOUTVIEW_FARRAY3) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &dim3_temp; + $4 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3) +{ + npy_intp dims[3] = { *$1, *$2, *$3 }; + PyObject* obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$4)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array || !require_fortran(array)) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, + DIM_TYPE* DIM3, DIM_TYPE* DIM4) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEW_ARRAY4, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; + $4 = &dim3_temp; + $5 = &dim4_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility") + (DATA_TYPE** ARGOUTVIEW_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) +{ + npy_intp dims[4] = { *$2, *$3, *$4 , *$5 }; + PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, + DATA_TYPE** ARGOUTVIEW_ARRAY4) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 , DATA_TYPE** ARGOUTVIEW_ARRAY4) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &dim3_temp; + $4 = &dim4_temp; + $5 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEW_ARRAY4) +{ + npy_intp dims[4] = { *$1, *$2, *$3 , *$4 }; + PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$5)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, + DIM_TYPE* DIM3, DIM_TYPE* DIM4) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEW_FARRAY4, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; + $4 = &dim3_temp; + $5 = &dim4_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements") + (DATA_TYPE** ARGOUTVIEW_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) +{ + npy_intp dims[4] = { *$2, *$3, *$4 , *$5 }; + PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array || !require_fortran(array)) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, + DATA_TYPE** ARGOUTVIEW_FARRAY4) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 , DATA_TYPE** ARGOUTVIEW_FARRAY4) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &dim3_temp; + $4 = &dim4_temp; + $5 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEW_FARRAY4) +{ + npy_intp dims[4] = { *$1, *$2, *$3 , *$4 }; + PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$5)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array || !require_fortran(array)) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/*************************************/ +/* Managed Argoutview Array Typemaps */ +/*************************************/ + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_ARRAY1, DIM_TYPE* DIM1) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEWM_ARRAY1, DIM_TYPE* DIM1 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim_temp) +{ + $1 = &data_temp; + $2 = &dim_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Utilities") + (DATA_TYPE** ARGOUTVIEWM_ARRAY1, DIM_TYPE* DIM1) +{ + npy_intp dims[1] = { *$2 }; + PyObject* obj = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEWM_ARRAY1) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DATA_TYPE** ARGOUTVIEWM_ARRAY1) + (DIM_TYPE dim_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim_temp; + $2 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Utilities") + (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEWM_ARRAY1) +{ + npy_intp dims[1] = { *$1 }; + PyObject* obj = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$2)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEWM_ARRAY2, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Utilities") + (DATA_TYPE** ARGOUTVIEWM_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) +{ + npy_intp dims[2] = { *$2, *$3 }; + PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEWM_ARRAY2) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DATA_TYPE** ARGOUTVIEWM_ARRAY2) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Utilities") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEWM_ARRAY2) +{ + npy_intp dims[2] = { *$1, *$2 }; + PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEWM_FARRAY2, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") + (DATA_TYPE** ARGOUTVIEWM_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) +{ + npy_intp dims[2] = { *$2, *$3 }; + PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array || !require_fortran(array)) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEWM_FARRAY2) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DATA_TYPE** ARGOUTVIEWM_FARRAY2) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEWM_FARRAY2) +{ + npy_intp dims[2] = { *$1, *$2 }; + PyObject* obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array || !require_fortran(array)) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, + DIM_TYPE* DIM3) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEWM_ARRAY3, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; + $4 = &dim3_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Utilities") + (DATA_TYPE** ARGOUTVIEWM_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) +{ + npy_intp dims[3] = { *$2, *$3, *$4 }; + PyObject* obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, + DATA_TYPE** ARGOUTVIEWM_ARRAY3) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DATA_TYPE** ARGOUTVIEWM_ARRAY3) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &dim3_temp; + $4 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Utilities") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEWM_ARRAY3) +{ + npy_intp dims[3] = { *$1, *$2, *$3 }; + PyObject* obj= PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$4)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, + DIM_TYPE* DIM3) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEWM_FARRAY3, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; + $4 = &dim3_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") + (DATA_TYPE** ARGOUTVIEWM_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) +{ + npy_intp dims[3] = { *$2, *$3, *$4 }; + PyObject* obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array || !require_fortran(array)) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, + DATA_TYPE** ARGOUTVIEWM_FARRAY3) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DATA_TYPE** ARGOUTVIEWM_FARRAY3) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &dim3_temp; + $4 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEWM_FARRAY3) +{ + npy_intp dims[3] = { *$1, *$2, *$3 }; + PyObject* obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$4)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array || !require_fortran(array)) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, + DIM_TYPE* DIM3, DIM_TYPE* DIM4) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEWM_ARRAY4, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; + $4 = &dim3_temp; + $5 = &dim4_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Utilities") + (DATA_TYPE** ARGOUTVIEWM_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) +{ + npy_intp dims[4] = { *$2, *$3, *$4 , *$5 }; + PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, + DATA_TYPE** ARGOUTVIEWM_ARRAY4) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 , DATA_TYPE** ARGOUTVIEWM_ARRAY4) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &dim3_temp; + $4 = &dim4_temp; + $5 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Utilities") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEWM_ARRAY4) +{ + npy_intp dims[4] = { *$1, *$2, *$3 , *$4 }; + PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$5)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, + DIM_TYPE* DIM3, DIM_TYPE* DIM4) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEWM_FARRAY4, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; + $4 = &dim3_temp; + $5 = &dim4_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") + (DATA_TYPE** ARGOUTVIEWM_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) +{ + npy_intp dims[4] = { *$2, *$3, *$4 , *$5 }; + PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array || !require_fortran(array)) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, + DATA_TYPE** ARGOUTVIEWM_FARRAY4) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 , DATA_TYPE** ARGOUTVIEWM_FARRAY4) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &dim3_temp; + $4 = &dim4_temp; + $5 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEWM_FARRAY4) +{ + npy_intp dims[4] = { *$1, *$2, *$3 , *$4 }; + PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$5)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array || !require_fortran(array)) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, + DIM_TYPE* DIM3, DIM_TYPE* DIM4) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEWM_ARRAY4, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; + $4 = &dim3_temp; + $5 = &dim4_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Utilities") + (DATA_TYPE** ARGOUTVIEWM_ARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) +{ + npy_intp dims[4] = { *$2, *$3, *$4 , *$5 }; + PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, + DATA_TYPE** ARGOUTVIEWM_ARRAY4) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 , DATA_TYPE** ARGOUTVIEWM_ARRAY4) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &dim3_temp; + $4 = &dim4_temp; + $5 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Utilities") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEWM_ARRAY4) +{ + npy_intp dims[4] = { *$1, *$2, *$3 , *$4 }; + PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$5)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEWM_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, + DIM_TYPE* DIM3, DIM_TYPE* DIM4) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEWM_FARRAY4, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 ) + (DATA_TYPE* data_temp = NULL , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; + $4 = &dim3_temp; + $5 = &dim4_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") + (DATA_TYPE** ARGOUTVIEWM_FARRAY4, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4) +{ + npy_intp dims[4] = { *$2, *$3, *$4 , *$5 }; + PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array || !require_fortran(array)) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, + DATA_TYPE** ARGOUTVIEWM_FARRAY4) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DIM_TYPE* DIM3 , DIM_TYPE* DIM4 , DATA_TYPE** ARGOUTVIEWM_FARRAY4) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DIM_TYPE dim4_temp, DATA_TYPE* data_temp = NULL ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &dim3_temp; + $4 = &dim4_temp; + $5 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements,NumPy_Utilities") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DIM_TYPE* DIM4, DATA_TYPE** ARGOUTVIEWM_FARRAY4) +{ + npy_intp dims[4] = { *$1, *$2, *$3 , *$4 }; + PyObject* obj = PyArray_SimpleNewFromData(4, dims, DATA_TYPECODE, (void*)(*$5)); + PyArrayObject* array = (PyArrayObject*) obj; + + if (!array || !require_fortran(array)) SWIG_fail; + +%#ifdef SWIGPY_USE_CAPSULE + PyObject* cap = PyCapsule_New((void*)(*$1), SWIGPY_CAPSULE_NAME, free_cap); +%#else + PyObject* cap = PyCObject_FromVoidPtr((void*)(*$1), free); +%#endif + +%#if NPY_API_VERSION < 0x00000007 + PyArray_BASE(array) = cap; +%#else + PyArray_SetBaseObject(array,cap); +%#endif + + $result = SWIG_Python_AppendOutput($result,obj); +} + +/**************************************/ +/* In-Place Array Typemap - flattened */ +/**************************************/ + +/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY_FLAT, DIM_TYPE DIM_FLAT) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* INPLACE_ARRAY_FLAT, DIM_TYPE DIM_FLAT) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* INPLACE_ARRAY_FLAT, DIM_TYPE DIM_FLAT) + (PyArrayObject* array=NULL, int i=1) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_c_or_f_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = 1; + for (i=0; i < array_numdims(array); ++i) $2 *= array_size(array,i); +} + +%enddef /* %numpy_typemaps() macro */ +/* *************************************************************** */ + +/* Concrete instances of the %numpy_typemaps() macro: Each invocation + * below applies all of the typemaps above to the specified data type. + */ +%numpy_typemaps(signed char , NPY_BYTE , int) +%numpy_typemaps(unsigned char , NPY_UBYTE , int) +%numpy_typemaps(short , NPY_SHORT , int) +%numpy_typemaps(unsigned short , NPY_USHORT , int) +%numpy_typemaps(int , NPY_INT , int) +%numpy_typemaps(unsigned int , NPY_UINT , int) +%numpy_typemaps(long , NPY_LONG , int) +%numpy_typemaps(unsigned long , NPY_ULONG , int) +%numpy_typemaps(long long , NPY_LONGLONG , int) +%numpy_typemaps(unsigned long long, NPY_ULONGLONG, int) +%numpy_typemaps(float , NPY_FLOAT , int) +%numpy_typemaps(double , NPY_DOUBLE , int) +%numpy_typemaps(int8_t , NPY_INT8 , int) +%numpy_typemaps(int16_t , NPY_INT16 , int) +%numpy_typemaps(int32_t , NPY_INT32 , int) +%numpy_typemaps(int64_t , NPY_INT64 , int) +%numpy_typemaps(uint8_t , NPY_UINT8 , int) +%numpy_typemaps(uint16_t , NPY_UINT16 , int) +%numpy_typemaps(uint32_t , NPY_UINT32 , int) +%numpy_typemaps(uint64_t , NPY_UINT64 , int) + + +/* *************************************************************** + * The follow macro expansion does not work, because C++ bool is 4 + * bytes and NPY_BOOL is 1 byte + * + * %numpy_typemaps(bool, NPY_BOOL, int) + */ + +/* *************************************************************** + * On my Mac, I get the following warning for this macro expansion: + * 'swig/python detected a memory leak of type 'long double *', no destructor found.' + * + * %numpy_typemaps(long double, NPY_LONGDOUBLE, int) + */ + +#ifdef __cplusplus + +%include + +%numpy_typemaps(std::complex, NPY_CFLOAT , int) +%numpy_typemaps(std::complex, NPY_CDOUBLE, int) + +#endif + +#endif /* SWIGPYTHON */ diff --git a/python3/run_tests.sh b/python3/run_tests.sh new file mode 100755 index 000000000..d60911cf7 --- /dev/null +++ b/python3/run_tests.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +input=$1 + +./test_general.py $input +./test_index.py $input +./test_keysiterator.py $input +./test_iterator.py $input diff --git a/python3/setup.py.in b/python3/setup.py.in new file mode 100644 index 000000000..6a12698a4 --- /dev/null +++ b/python3/setup.py.in @@ -0,0 +1,77 @@ +#!/usr/bin/env python + +from distutils.core import setup, Extension +import os +import sys + +import numpy +# Obtain the numpy include directory. This logic works across numpy versions. +try: + numpy_include = numpy.get_include() +except AttributeError: + numpy_include = numpy.get_numpy_include() + +# See ECC-644 +extra_compile_args = [] +cmake_c_compiler_id='@CMAKE_C_COMPILER_ID@' +if cmake_c_compiler_id == 'PGI': + extra_compile_args.append('-noswitcherror') + +attdict = dict(sources=['@CMAKE_CURRENT_SOURCE_DIR@/swig_wrap_numpy.c', + '@CMAKE_CURRENT_SOURCE_DIR@/grib_interface.c'], + swig_opts=[], + include_dirs=['.', '@CMAKE_CURRENT_BINARY_DIR@/../src', + '@CMAKE_CURRENT_SOURCE_DIR@/../src', + numpy_include], + library_dirs=['@CMAKE_BINARY_DIR@/lib'], + runtime_library_dirs=[], + libraries=['eccodes'], + extra_compile_args=extra_compile_args, + extra_objects=[]) + +shared_libs='@BUILD_SHARED_LIBS@' +if shared_libs == 'OFF': + + add_attribute = lambda **args: [list.append(attdict[key], value) + for key, value in args.items()] + + if @HAVE_LIBJASPER@: + jasper_dir = '@JASPER_DIR@' + if jasper_dir and jasper_dir != 'system': + add_attribute(library_dirs=os.path.join(jasper_dir, 'lib'), + runtime_library_dirs=os.path.join(jasper_dir, 'lib')) + add_attribute(libraries='jasper') + + if @HAVE_LIBOPENJPEG@: + openjpeg_lib_dir = '@OPENJPEG_LIB_DIR@' + openjpeg_libname = '@OJ_WITHOUT_LIB@' + if openjpeg_lib_dir: + add_attribute(library_dirs=openjpeg_lib_dir, + runtime_library_dirs=openjpeg_lib_dir) + add_attribute(libraries=openjpeg_libname) + + # assumes png is supplied by system paths -- may not be true + if @HAVE_LIBPNG@: + add_attribute(libraries='png') + + if @HAVE_MEMFS@: + add_attribute(libraries='eccodes_memfs') + + if @HAVE_AEC@: + aec_dir = '@AEC_DIR@' + if aec_dir and aec_dir != 'system': + add_attribute(library_dirs=os.path.join(aec_dir, 'lib'), + runtime_library_dirs=os.path.join(aec_dir, 'lib')) + add_attribute(libraries='aec') + + +setup(name='eccodes', + version='@ECCODES_VERSION_STR@', + author='ECMWF', + author_email='Software.Support@ecmwf.int', + description="""Python interface for ecCodes""", + license='Apache License, Version 2.0', + url='https://software.ecmwf.int/wiki/display/ECC/ecCodes+Home', + download_url='https://software.ecmwf.int/wiki/display/ECC/Releases', + ext_modules=[Extension('gribapi._gribapi_swig', **attdict)], + packages=['eccodes', 'eccodes.high_level', 'gribapi']) diff --git a/python3/swig_wrap_numpy.c b/python3/swig_wrap_numpy.c new file mode 100644 index 000000000..18d6d0618 --- /dev/null +++ b/python3/swig_wrap_numpy.c @@ -0,0 +1,10558 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 3.0.12 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + + +#ifndef SWIGPYTHON +#define SWIGPYTHON +#endif + +#define SWIG_PYTHON_DIRECTOR_NO_VTABLE + +/* ----------------------------------------------------------------------------- + * This section contains generic SWIG labels for method/variable + * declarations/attributes, and other compiler dependent labels. + * ----------------------------------------------------------------------------- */ + +/* template workaround for compilers that cannot correctly implement the C++ standard */ +#ifndef SWIGTEMPLATEDISAMBIGUATOR +# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) +# define SWIGTEMPLATEDISAMBIGUATOR template +# elif defined(__HP_aCC) +/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ +/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ +# define SWIGTEMPLATEDISAMBIGUATOR template +# else +# define SWIGTEMPLATEDISAMBIGUATOR +# endif +#endif + +/* inline attribute */ +#ifndef SWIGINLINE +# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) +# define SWIGINLINE inline +# else +# define SWIGINLINE +# endif +#endif + +/* attribute recognised by some compilers to avoid 'unused' warnings */ +#ifndef SWIGUNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +# elif defined(__ICC) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +#endif + +#ifndef SWIG_MSC_UNSUPPRESS_4505 +# if defined(_MSC_VER) +# pragma warning(disable : 4505) /* unreferenced local function has been removed */ +# endif +#endif + +#ifndef SWIGUNUSEDPARM +# ifdef __cplusplus +# define SWIGUNUSEDPARM(p) +# else +# define SWIGUNUSEDPARM(p) p SWIGUNUSED +# endif +#endif + +/* internal SWIG method */ +#ifndef SWIGINTERN +# define SWIGINTERN static SWIGUNUSED +#endif + +/* internal inline SWIG method */ +#ifndef SWIGINTERNINLINE +# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE +#endif + +/* exporting methods */ +#if defined(__GNUC__) +# if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# ifndef GCC_HASCLASSVISIBILITY +# define GCC_HASCLASSVISIBILITY +# endif +# endif +#endif + +#ifndef SWIGEXPORT +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# if defined(STATIC_LINKED) +# define SWIGEXPORT +# else +# define SWIGEXPORT __declspec(dllexport) +# endif +# else +# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) +# define SWIGEXPORT __attribute__ ((visibility("default"))) +# else +# define SWIGEXPORT +# endif +# endif +#endif + +/* calling conventions for Windows */ +#ifndef SWIGSTDCALL +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# define SWIGSTDCALL __stdcall +# else +# define SWIGSTDCALL +# endif +#endif + +/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ +#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ +#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) +# define _SCL_SECURE_NO_DEPRECATE +#endif + +/* Deal with Apple's deprecated 'AssertMacros.h' from Carbon-framework */ +#if defined(__APPLE__) && !defined(__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES) +# define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 +#endif + +/* Intel's compiler complains if a variable which was never initialised is + * cast to void, which is a common idiom which we use to indicate that we + * are aware a variable isn't used. So we just silence that warning. + * See: https://github.com/swig/swig/issues/192 for more discussion. + */ +#ifdef __INTEL_COMPILER +# pragma warning disable 592 +#endif + + +#if defined(_DEBUG) && defined(SWIG_PYTHON_INTERPRETER_NO_DEBUG) +/* Use debug wrappers with the Python release dll */ +# undef _DEBUG +# include +# define _DEBUG +#else +# include +#endif + +/* ----------------------------------------------------------------------------- + * swigrun.swg + * + * This file contains generic C API SWIG runtime support for pointer + * type checking. + * ----------------------------------------------------------------------------- */ + +/* This should only be incremented when either the layout of swig_type_info changes, + or for whatever reason, the runtime changes incompatibly */ +#define SWIG_RUNTIME_VERSION "4" + +/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ +#ifdef SWIG_TYPE_TABLE +# define SWIG_QUOTE_STRING(x) #x +# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) +# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) +#else +# define SWIG_TYPE_TABLE_NAME +#endif + +/* + You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for + creating a static or dynamic library from the SWIG runtime code. + In 99.9% of the cases, SWIG just needs to declare them as 'static'. + + But only do this if strictly necessary, ie, if you have problems + with your compiler or suchlike. +*/ + +#ifndef SWIGRUNTIME +# define SWIGRUNTIME SWIGINTERN +#endif + +#ifndef SWIGRUNTIMEINLINE +# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE +#endif + +/* Generic buffer size */ +#ifndef SWIG_BUFFER_SIZE +# define SWIG_BUFFER_SIZE 1024 +#endif + +/* Flags for pointer conversions */ +#define SWIG_POINTER_DISOWN 0x1 +#define SWIG_CAST_NEW_MEMORY 0x2 + +/* Flags for new pointer objects */ +#define SWIG_POINTER_OWN 0x1 + + +/* + Flags/methods for returning states. + + The SWIG conversion methods, as ConvertPtr, return an integer + that tells if the conversion was successful or not. And if not, + an error code can be returned (see swigerrors.swg for the codes). + + Use the following macros/flags to set or process the returning + states. + + In old versions of SWIG, code such as the following was usually written: + + if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { + // success code + } else { + //fail code + } + + Now you can be more explicit: + + int res = SWIG_ConvertPtr(obj,vptr,ty.flags); + if (SWIG_IsOK(res)) { + // success code + } else { + // fail code + } + + which is the same really, but now you can also do + + Type *ptr; + int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); + if (SWIG_IsOK(res)) { + // success code + if (SWIG_IsNewObj(res) { + ... + delete *ptr; + } else { + ... + } + } else { + // fail code + } + + I.e., now SWIG_ConvertPtr can return new objects and you can + identify the case and take care of the deallocation. Of course that + also requires SWIG_ConvertPtr to return new result values, such as + + int SWIG_ConvertPtr(obj, ptr,...) { + if () { + if () { + *ptr = ; + return SWIG_NEWOBJ; + } else { + *ptr = ; + return SWIG_OLDOBJ; + } + } else { + return SWIG_BADOBJ; + } + } + + Of course, returning the plain '0(success)/-1(fail)' still works, but you can be + more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the + SWIG errors code. + + Finally, if the SWIG_CASTRANK_MODE is enabled, the result code + allows to return the 'cast rank', for example, if you have this + + int food(double) + int fooi(int); + + and you call + + food(1) // cast rank '1' (1 -> 1.0) + fooi(1) // cast rank '0' + + just use the SWIG_AddCast()/SWIG_CheckState() +*/ + +#define SWIG_OK (0) +#define SWIG_ERROR (-1) +#define SWIG_IsOK(r) (r >= 0) +#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) + +/* The CastRankLimit says how many bits are used for the cast rank */ +#define SWIG_CASTRANKLIMIT (1 << 8) +/* The NewMask denotes the object was created (using new/malloc) */ +#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) +/* The TmpMask is for in/out typemaps that use temporal objects */ +#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) +/* Simple returning values */ +#define SWIG_BADOBJ (SWIG_ERROR) +#define SWIG_OLDOBJ (SWIG_OK) +#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) +#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) +/* Check, add and del mask methods */ +#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) +#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) +#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) +#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) +#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) +#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) + +/* Cast-Rank Mode */ +#if defined(SWIG_CASTRANK_MODE) +# ifndef SWIG_TypeRank +# define SWIG_TypeRank unsigned long +# endif +# ifndef SWIG_MAXCASTRANK /* Default cast allowed */ +# define SWIG_MAXCASTRANK (2) +# endif +# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) +# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) +SWIGINTERNINLINE int SWIG_AddCast(int r) { + return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; +} +SWIGINTERNINLINE int SWIG_CheckState(int r) { + return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; +} +#else /* no cast-rank mode */ +# define SWIG_AddCast(r) (r) +# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) +#endif + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *(*swig_converter_func)(void *, int *); +typedef struct swig_type_info *(*swig_dycast_func)(void **); + +/* Structure to store information on one type */ +typedef struct swig_type_info { + const char *name; /* mangled name of this type */ + const char *str; /* human readable name of this type */ + swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ + struct swig_cast_info *cast; /* linked list of types that can cast into this type */ + void *clientdata; /* language specific type data */ + int owndata; /* flag if the structure owns the clientdata */ +} swig_type_info; + +/* Structure to store a type and conversion function used for casting */ +typedef struct swig_cast_info { + swig_type_info *type; /* pointer to type that is equivalent to this type */ + swig_converter_func converter; /* function to cast the void pointers */ + struct swig_cast_info *next; /* pointer to next cast in linked list */ + struct swig_cast_info *prev; /* pointer to the previous cast */ +} swig_cast_info; + +/* Structure used to store module information + * Each module generates one structure like this, and the runtime collects + * all of these structures and stores them in a circularly linked list.*/ +typedef struct swig_module_info { + swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ + size_t size; /* Number of types in this module */ + struct swig_module_info *next; /* Pointer to next element in circularly linked list */ + swig_type_info **type_initial; /* Array of initially generated type structures */ + swig_cast_info **cast_initial; /* Array of initially generated casting structures */ + void *clientdata; /* Language specific module data */ +} swig_module_info; + +/* + Compare two type names skipping the space characters, therefore + "char*" == "char *" and "Class" == "Class", etc. + + Return 0 when the two name types are equivalent, as in + strncmp, but skipping ' '. +*/ +SWIGRUNTIME int +SWIG_TypeNameComp(const char *f1, const char *l1, + const char *f2, const char *l2) { + for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { + while ((*f1 == ' ') && (f1 != l1)) ++f1; + while ((*f2 == ' ') && (f2 != l2)) ++f2; + if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; + } + return (int)((l1 - f1) - (l2 - f2)); +} + +/* + Check type equivalence in a name list like ||... + Return 0 if equal, -1 if nb < tb, 1 if nb > tb +*/ +SWIGRUNTIME int +SWIG_TypeCmp(const char *nb, const char *tb) { + int equiv = 1; + const char* te = tb + strlen(tb); + const char* ne = nb; + while (equiv != 0 && *ne) { + for (nb = ne; *ne; ++ne) { + if (*ne == '|') break; + } + equiv = SWIG_TypeNameComp(nb, ne, tb, te); + if (*ne) ++ne; + } + return equiv; +} + +/* + Check type equivalence in a name list like ||... + Return 0 if not equal, 1 if equal +*/ +SWIGRUNTIME int +SWIG_TypeEquiv(const char *nb, const char *tb) { + return SWIG_TypeCmp(nb, tb) == 0 ? 1 : 0; +} + +/* + Check the typename +*/ +SWIGRUNTIME swig_cast_info * +SWIG_TypeCheck(const char *c, swig_type_info *ty) { + if (ty) { + swig_cast_info *iter = ty->cast; + while (iter) { + if (strcmp(iter->type->name, c) == 0) { + if (iter == ty->cast) + return iter; + /* Move iter to the top of the linked list */ + iter->prev->next = iter->next; + if (iter->next) + iter->next->prev = iter->prev; + iter->next = ty->cast; + iter->prev = 0; + if (ty->cast) ty->cast->prev = iter; + ty->cast = iter; + return iter; + } + iter = iter->next; + } + } + return 0; +} + +/* + Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison +*/ +SWIGRUNTIME swig_cast_info * +SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) { + if (ty) { + swig_cast_info *iter = ty->cast; + while (iter) { + if (iter->type == from) { + if (iter == ty->cast) + return iter; + /* Move iter to the top of the linked list */ + iter->prev->next = iter->next; + if (iter->next) + iter->next->prev = iter->prev; + iter->next = ty->cast; + iter->prev = 0; + if (ty->cast) ty->cast->prev = iter; + ty->cast = iter; + return iter; + } + iter = iter->next; + } + } + return 0; +} + +/* + Cast a pointer up an inheritance hierarchy +*/ +SWIGRUNTIMEINLINE void * +SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { + return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); +} + +/* + Dynamic pointer casting. Down an inheritance hierarchy +*/ +SWIGRUNTIME swig_type_info * +SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { + swig_type_info *lastty = ty; + if (!ty || !ty->dcast) return ty; + while (ty && (ty->dcast)) { + ty = (*ty->dcast)(ptr); + if (ty) lastty = ty; + } + return lastty; +} + +/* + Return the name associated with this type +*/ +SWIGRUNTIMEINLINE const char * +SWIG_TypeName(const swig_type_info *ty) { + return ty->name; +} + +/* + Return the pretty name associated with this type, + that is an unmangled type name in a form presentable to the user. +*/ +SWIGRUNTIME const char * +SWIG_TypePrettyName(const swig_type_info *type) { + /* The "str" field contains the equivalent pretty names of the + type, separated by vertical-bar characters. We choose + to print the last name, as it is often (?) the most + specific. */ + if (!type) return NULL; + if (type->str != NULL) { + const char *last_name = type->str; + const char *s; + for (s = type->str; *s; s++) + if (*s == '|') last_name = s+1; + return last_name; + } + else + return type->name; +} + +/* + Set the clientdata field for a type +*/ +SWIGRUNTIME void +SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { + swig_cast_info *cast = ti->cast; + /* if (ti->clientdata == clientdata) return; */ + ti->clientdata = clientdata; + + while (cast) { + if (!cast->converter) { + swig_type_info *tc = cast->type; + if (!tc->clientdata) { + SWIG_TypeClientData(tc, clientdata); + } + } + cast = cast->next; + } +} +SWIGRUNTIME void +SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { + SWIG_TypeClientData(ti, clientdata); + ti->owndata = 1; +} + +/* + Search for a swig_type_info structure only by mangled name + Search is a O(log #types) + + We start searching at module start, and finish searching when start == end. + Note: if start == end at the beginning of the function, we go all the way around + the circular list. +*/ +SWIGRUNTIME swig_type_info * +SWIG_MangledTypeQueryModule(swig_module_info *start, + swig_module_info *end, + const char *name) { + swig_module_info *iter = start; + do { + if (iter->size) { + size_t l = 0; + size_t r = iter->size - 1; + do { + /* since l+r >= 0, we can (>> 1) instead (/ 2) */ + size_t i = (l + r) >> 1; + const char *iname = iter->types[i]->name; + if (iname) { + int compare = strcmp(name, iname); + if (compare == 0) { + return iter->types[i]; + } else if (compare < 0) { + if (i) { + r = i - 1; + } else { + break; + } + } else if (compare > 0) { + l = i + 1; + } + } else { + break; /* should never happen */ + } + } while (l <= r); + } + iter = iter->next; + } while (iter != end); + return 0; +} + +/* + Search for a swig_type_info structure for either a mangled name or a human readable name. + It first searches the mangled names of the types, which is a O(log #types) + If a type is not found it then searches the human readable names, which is O(#types). + + We start searching at module start, and finish searching when start == end. + Note: if start == end at the beginning of the function, we go all the way around + the circular list. +*/ +SWIGRUNTIME swig_type_info * +SWIG_TypeQueryModule(swig_module_info *start, + swig_module_info *end, + const char *name) { + /* STEP 1: Search the name field using binary search */ + swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); + if (ret) { + return ret; + } else { + /* STEP 2: If the type hasn't been found, do a complete search + of the str field (the human readable name) */ + swig_module_info *iter = start; + do { + size_t i = 0; + for (; i < iter->size; ++i) { + if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) + return iter->types[i]; + } + iter = iter->next; + } while (iter != end); + } + + /* neither found a match */ + return 0; +} + +/* + Pack binary data into a string +*/ +SWIGRUNTIME char * +SWIG_PackData(char *c, void *ptr, size_t sz) { + static const char hex[17] = "0123456789abcdef"; + const unsigned char *u = (unsigned char *) ptr; + const unsigned char *eu = u + sz; + for (; u != eu; ++u) { + unsigned char uu = *u; + *(c++) = hex[(uu & 0xf0) >> 4]; + *(c++) = hex[uu & 0xf]; + } + return c; +} + +/* + Unpack binary data from a string +*/ +SWIGRUNTIME const char * +SWIG_UnpackData(const char *c, void *ptr, size_t sz) { + unsigned char *u = (unsigned char *) ptr; + const unsigned char *eu = u + sz; + for (; u != eu; ++u) { + char d = *(c++); + unsigned char uu; + if ((d >= '0') && (d <= '9')) + uu = (unsigned char)((d - '0') << 4); + else if ((d >= 'a') && (d <= 'f')) + uu = (unsigned char)((d - ('a'-10)) << 4); + else + return (char *) 0; + d = *(c++); + if ((d >= '0') && (d <= '9')) + uu |= (unsigned char)(d - '0'); + else if ((d >= 'a') && (d <= 'f')) + uu |= (unsigned char)(d - ('a'-10)); + else + return (char *) 0; + *u = uu; + } + return c; +} + +/* + Pack 'void *' into a string buffer. +*/ +SWIGRUNTIME char * +SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { + char *r = buff; + if ((2*sizeof(void *) + 2) > bsz) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,&ptr,sizeof(void *)); + if (strlen(name) + 1 > (bsz - (r - buff))) return 0; + strcpy(r,name); + return buff; +} + +SWIGRUNTIME const char * +SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { + if (*c != '_') { + if (strcmp(c,"NULL") == 0) { + *ptr = (void *) 0; + return name; + } else { + return 0; + } + } + return SWIG_UnpackData(++c,ptr,sizeof(void *)); +} + +SWIGRUNTIME char * +SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { + char *r = buff; + size_t lname = (name ? strlen(name) : 0); + if ((2*sz + 2 + lname) > bsz) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,ptr,sz); + if (lname) { + strncpy(r,name,lname+1); + } else { + *r = 0; + } + return buff; +} + +SWIGRUNTIME const char * +SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { + if (*c != '_') { + if (strcmp(c,"NULL") == 0) { + memset(ptr,0,sz); + return name; + } else { + return 0; + } + } + return SWIG_UnpackData(++c,ptr,sz); +} + +#ifdef __cplusplus +} +#endif + +/* Errors in SWIG */ +#define SWIG_UnknownError -1 +#define SWIG_IOError -2 +#define SWIG_RuntimeError -3 +#define SWIG_IndexError -4 +#define SWIG_TypeError -5 +#define SWIG_DivisionByZero -6 +#define SWIG_OverflowError -7 +#define SWIG_SyntaxError -8 +#define SWIG_ValueError -9 +#define SWIG_SystemError -10 +#define SWIG_AttributeError -11 +#define SWIG_MemoryError -12 +#define SWIG_NullReferenceError -13 + + + +/* Compatibility macros for Python 3 */ +#if PY_VERSION_HEX >= 0x03000000 + +#define PyClass_Check(obj) PyObject_IsInstance(obj, (PyObject *)&PyType_Type) +#define PyInt_Check(x) PyLong_Check(x) +#define PyInt_AsLong(x) PyLong_AsLong(x) +#define PyInt_FromLong(x) PyLong_FromLong(x) +#define PyInt_FromSize_t(x) PyLong_FromSize_t(x) +#define PyString_Check(name) PyBytes_Check(name) +#define PyString_FromString(x) PyUnicode_FromString(x) +#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args) +#define PyString_AsString(str) PyBytes_AsString(str) +#define PyString_Size(str) PyBytes_Size(str) +#define PyString_InternFromString(key) PyUnicode_InternFromString(key) +#define Py_TPFLAGS_HAVE_CLASS Py_TPFLAGS_BASETYPE +#define PyString_AS_STRING(x) PyUnicode_AS_STRING(x) +#define _PyLong_FromSsize_t(x) PyLong_FromSsize_t(x) + +#endif + +#ifndef Py_TYPE +# define Py_TYPE(op) ((op)->ob_type) +#endif + +/* SWIG APIs for compatibility of both Python 2 & 3 */ + +#if PY_VERSION_HEX >= 0x03000000 +# define SWIG_Python_str_FromFormat PyUnicode_FromFormat +#else +# define SWIG_Python_str_FromFormat PyString_FromFormat +#endif + + +/* Warning: This function will allocate a new string in Python 3, + * so please call SWIG_Python_str_DelForPy3(x) to free the space. + */ +SWIGINTERN char* +SWIG_Python_str_AsChar(PyObject *str) +{ +#if PY_VERSION_HEX >= 0x03000000 + char *cstr; + char *newstr; + Py_ssize_t len; + str = PyUnicode_AsUTF8String(str); + PyBytes_AsStringAndSize(str, &cstr, &len); + newstr = (char *) malloc(len+1); + memcpy(newstr, cstr, len+1); + Py_XDECREF(str); + return newstr; +#else + return PyString_AsString(str); +#endif +} + +#if PY_VERSION_HEX >= 0x03000000 +# define SWIG_Python_str_DelForPy3(x) free( (void*) (x) ) +#else +# define SWIG_Python_str_DelForPy3(x) +#endif + + +SWIGINTERN PyObject* +SWIG_Python_str_FromChar(const char *c) +{ +#if PY_VERSION_HEX >= 0x03000000 + return PyUnicode_FromString(c); +#else + return PyString_FromString(c); +#endif +} + +/* Add PyOS_snprintf for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 +# if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM) +# define PyOS_snprintf _snprintf +# else +# define PyOS_snprintf snprintf +# endif +#endif + +/* A crude PyString_FromFormat implementation for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 + +#ifndef SWIG_PYBUFFER_SIZE +# define SWIG_PYBUFFER_SIZE 1024 +#endif + +static PyObject * +PyString_FromFormat(const char *fmt, ...) { + va_list ap; + char buf[SWIG_PYBUFFER_SIZE * 2]; + int res; + va_start(ap, fmt); + res = vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + return (res < 0 || res >= (int)sizeof(buf)) ? 0 : PyString_FromString(buf); +} +#endif + +#ifndef PyObject_DEL +# define PyObject_DEL PyObject_Del +#endif + +/* A crude PyExc_StopIteration exception for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 +# ifndef PyExc_StopIteration +# define PyExc_StopIteration PyExc_RuntimeError +# endif +# ifndef PyObject_GenericGetAttr +# define PyObject_GenericGetAttr 0 +# endif +#endif + +/* Py_NotImplemented is defined in 2.1 and up. */ +#if PY_VERSION_HEX < 0x02010000 +# ifndef Py_NotImplemented +# define Py_NotImplemented PyExc_RuntimeError +# endif +#endif + +/* A crude PyString_AsStringAndSize implementation for old Pythons */ +#if PY_VERSION_HEX < 0x02010000 +# ifndef PyString_AsStringAndSize +# define PyString_AsStringAndSize(obj, s, len) {*s = PyString_AsString(obj); *len = *s ? strlen(*s) : 0;} +# endif +#endif + +/* PySequence_Size for old Pythons */ +#if PY_VERSION_HEX < 0x02000000 +# ifndef PySequence_Size +# define PySequence_Size PySequence_Length +# endif +#endif + +/* PyBool_FromLong for old Pythons */ +#if PY_VERSION_HEX < 0x02030000 +static +PyObject *PyBool_FromLong(long ok) +{ + PyObject *result = ok ? Py_True : Py_False; + Py_INCREF(result); + return result; +} +#endif + +/* Py_ssize_t for old Pythons */ +/* This code is as recommended by: */ +/* http://www.python.org/dev/peps/pep-0353/#conversion-guidelines */ +#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN) +typedef int Py_ssize_t; +# define PY_SSIZE_T_MAX INT_MAX +# define PY_SSIZE_T_MIN INT_MIN +typedef inquiry lenfunc; +typedef intargfunc ssizeargfunc; +typedef intintargfunc ssizessizeargfunc; +typedef intobjargproc ssizeobjargproc; +typedef intintobjargproc ssizessizeobjargproc; +typedef getreadbufferproc readbufferproc; +typedef getwritebufferproc writebufferproc; +typedef getsegcountproc segcountproc; +typedef getcharbufferproc charbufferproc; +static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc)) +{ + long result = 0; + PyObject *i = PyNumber_Int(x); + if (i) { + result = PyInt_AsLong(i); + Py_DECREF(i); + } + return result; +} +#endif + +#if PY_VERSION_HEX < 0x02050000 +#define PyInt_FromSize_t(x) PyInt_FromLong((long)x) +#endif + +#if PY_VERSION_HEX < 0x02040000 +#define Py_VISIT(op) \ + do { \ + if (op) { \ + int vret = visit((op), arg); \ + if (vret) \ + return vret; \ + } \ + } while (0) +#endif + +#if PY_VERSION_HEX < 0x02030000 +typedef struct { + PyTypeObject type; + PyNumberMethods as_number; + PyMappingMethods as_mapping; + PySequenceMethods as_sequence; + PyBufferProcs as_buffer; + PyObject *name, *slots; +} PyHeapTypeObject; +#endif + +#if PY_VERSION_HEX < 0x02030000 +typedef destructor freefunc; +#endif + +#if ((PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 6) || \ + (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION > 0) || \ + (PY_MAJOR_VERSION > 3)) +# define SWIGPY_USE_CAPSULE +# define SWIGPY_CAPSULE_NAME ((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION ".type_pointer_capsule" SWIG_TYPE_TABLE_NAME) +#endif + +#if PY_VERSION_HEX < 0x03020000 +#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type) +#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name) +#define Py_hash_t long +#endif + +/* ----------------------------------------------------------------------------- + * error manipulation + * ----------------------------------------------------------------------------- */ + +SWIGRUNTIME PyObject* +SWIG_Python_ErrorType(int code) { + PyObject* type = 0; + switch(code) { + case SWIG_MemoryError: + type = PyExc_MemoryError; + break; + case SWIG_IOError: + type = PyExc_IOError; + break; + case SWIG_RuntimeError: + type = PyExc_RuntimeError; + break; + case SWIG_IndexError: + type = PyExc_IndexError; + break; + case SWIG_TypeError: + type = PyExc_TypeError; + break; + case SWIG_DivisionByZero: + type = PyExc_ZeroDivisionError; + break; + case SWIG_OverflowError: + type = PyExc_OverflowError; + break; + case SWIG_SyntaxError: + type = PyExc_SyntaxError; + break; + case SWIG_ValueError: + type = PyExc_ValueError; + break; + case SWIG_SystemError: + type = PyExc_SystemError; + break; + case SWIG_AttributeError: + type = PyExc_AttributeError; + break; + default: + type = PyExc_RuntimeError; + } + return type; +} + + +SWIGRUNTIME void +SWIG_Python_AddErrorMsg(const char* mesg) +{ + PyObject *type = 0; + PyObject *value = 0; + PyObject *traceback = 0; + + if (PyErr_Occurred()) PyErr_Fetch(&type, &value, &traceback); + if (value) { + char *tmp; + PyObject *old_str = PyObject_Str(value); + PyErr_Clear(); + Py_XINCREF(type); + + PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); + SWIG_Python_str_DelForPy3(tmp); + Py_DECREF(old_str); + Py_DECREF(value); + } else { + PyErr_SetString(PyExc_RuntimeError, mesg); + } +} + +#if defined(SWIG_PYTHON_NO_THREADS) +# if defined(SWIG_PYTHON_THREADS) +# undef SWIG_PYTHON_THREADS +# endif +#endif +#if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */ +# if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL) +# if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */ +# define SWIG_PYTHON_USE_GIL +# endif +# endif +# if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */ +# ifndef SWIG_PYTHON_INITIALIZE_THREADS +# define SWIG_PYTHON_INITIALIZE_THREADS PyEval_InitThreads() +# endif +# ifdef __cplusplus /* C++ code */ + class SWIG_Python_Thread_Block { + bool status; + PyGILState_STATE state; + public: + void end() { if (status) { PyGILState_Release(state); status = false;} } + SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {} + ~SWIG_Python_Thread_Block() { end(); } + }; + class SWIG_Python_Thread_Allow { + bool status; + PyThreadState *save; + public: + void end() { if (status) { PyEval_RestoreThread(save); status = false; }} + SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {} + ~SWIG_Python_Thread_Allow() { end(); } + }; +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK SWIG_Python_Thread_Block _swig_thread_block +# define SWIG_PYTHON_THREAD_END_BLOCK _swig_thread_block.end() +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW SWIG_Python_Thread_Allow _swig_thread_allow +# define SWIG_PYTHON_THREAD_END_ALLOW _swig_thread_allow.end() +# else /* C code */ +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK PyGILState_STATE _swig_thread_block = PyGILState_Ensure() +# define SWIG_PYTHON_THREAD_END_BLOCK PyGILState_Release(_swig_thread_block) +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW PyThreadState *_swig_thread_allow = PyEval_SaveThread() +# define SWIG_PYTHON_THREAD_END_ALLOW PyEval_RestoreThread(_swig_thread_allow) +# endif +# else /* Old thread way, not implemented, user must provide it */ +# if !defined(SWIG_PYTHON_INITIALIZE_THREADS) +# define SWIG_PYTHON_INITIALIZE_THREADS +# endif +# if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK) +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK +# endif +# if !defined(SWIG_PYTHON_THREAD_END_BLOCK) +# define SWIG_PYTHON_THREAD_END_BLOCK +# endif +# if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW) +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW +# endif +# if !defined(SWIG_PYTHON_THREAD_END_ALLOW) +# define SWIG_PYTHON_THREAD_END_ALLOW +# endif +# endif +#else /* No thread support */ +# define SWIG_PYTHON_INITIALIZE_THREADS +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK +# define SWIG_PYTHON_THREAD_END_BLOCK +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW +# define SWIG_PYTHON_THREAD_END_ALLOW +#endif + +/* ----------------------------------------------------------------------------- + * Python API portion that goes into the runtime + * ----------------------------------------------------------------------------- */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* ----------------------------------------------------------------------------- + * Constant declarations + * ----------------------------------------------------------------------------- */ + +/* Constant Types */ +#define SWIG_PY_POINTER 4 +#define SWIG_PY_BINARY 5 + +/* Constant information structure */ +typedef struct swig_const_info { + int type; + char *name; + long lvalue; + double dvalue; + void *pvalue; + swig_type_info **ptype; +} swig_const_info; + + +/* ----------------------------------------------------------------------------- + * Wrapper of PyInstanceMethod_New() used in Python 3 + * It is exported to the generated module, used for -fastproxy + * ----------------------------------------------------------------------------- */ +#if PY_VERSION_HEX >= 0x03000000 +SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), PyObject *func) +{ + return PyInstanceMethod_New(func); +} +#else +SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), PyObject *SWIGUNUSEDPARM(func)) +{ + return NULL; +} +#endif + +#ifdef __cplusplus +} +#endif + + +/* ----------------------------------------------------------------------------- + * pyrun.swg + * + * This file contains the runtime support for Python modules + * and includes code for managing global variables and pointer + * type checking. + * + * ----------------------------------------------------------------------------- */ + +/* Common SWIG API */ + +/* for raw pointers */ +#define SWIG_Python_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, 0) +#define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtr(obj, pptr, type, flags) +#define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, own) + +#ifdef SWIGPYTHON_BUILTIN +#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(self, ptr, type, flags) +#else +#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(NULL, ptr, type, flags) +#endif + +#define SWIG_InternalNewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(NULL, ptr, type, flags) + +#define SWIG_CheckImplicit(ty) SWIG_Python_CheckImplicit(ty) +#define SWIG_AcquirePtr(ptr, src) SWIG_Python_AcquirePtr(ptr, src) +#define swig_owntype int + +/* for raw packed data */ +#define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) +#define SWIG_NewPackedObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) + +/* for class or struct pointers */ +#define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags) +#define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags) + +/* for C or C++ function pointers */ +#define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_Python_ConvertFunctionPtr(obj, pptr, type) +#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_Python_NewPointerObj(NULL, ptr, type, 0) + +/* for C++ member pointers, ie, member methods */ +#define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) +#define SWIG_NewMemberObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) + + +/* Runtime API */ + +#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata) +#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer) +#define SWIG_NewClientData(obj) SwigPyClientData_New(obj) + +#define SWIG_SetErrorObj SWIG_Python_SetErrorObj +#define SWIG_SetErrorMsg SWIG_Python_SetErrorMsg +#define SWIG_ErrorType(code) SWIG_Python_ErrorType(code) +#define SWIG_Error(code, msg) SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg) +#define SWIG_fail goto fail + + +/* Runtime API implementation */ + +/* Error manipulation */ + +SWIGINTERN void +SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyErr_SetObject(errtype, obj); + Py_DECREF(obj); + SWIG_PYTHON_THREAD_END_BLOCK; +} + +SWIGINTERN void +SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyErr_SetString(errtype, msg); + SWIG_PYTHON_THREAD_END_BLOCK; +} + +#define SWIG_Python_Raise(obj, type, desc) SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(desc), obj) + +/* Set a constant value */ + +#if defined(SWIGPYTHON_BUILTIN) + +SWIGINTERN void +SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) { + PyObject *s = PyString_InternFromString(key); + PyList_Append(seq, s); + Py_DECREF(s); +} + +SWIGINTERN void +SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) { +#if PY_VERSION_HEX < 0x02030000 + PyDict_SetItemString(d, (char *)name, obj); +#else + PyDict_SetItemString(d, name, obj); +#endif + Py_DECREF(obj); + if (public_interface) + SwigPyBuiltin_AddPublicSymbol(public_interface, name); +} + +#else + +SWIGINTERN void +SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) { +#if PY_VERSION_HEX < 0x02030000 + PyDict_SetItemString(d, (char *)name, obj); +#else + PyDict_SetItemString(d, name, obj); +#endif + Py_DECREF(obj); +} + +#endif + +/* Append a value to the result obj */ + +SWIGINTERN PyObject* +SWIG_Python_AppendOutput(PyObject* result, PyObject* obj) { +#if !defined(SWIG_PYTHON_OUTPUT_TUPLE) + if (!result) { + result = obj; + } else if (result == Py_None) { + Py_DECREF(result); + result = obj; + } else { + if (!PyList_Check(result)) { + PyObject *o2 = result; + result = PyList_New(1); + PyList_SetItem(result, 0, o2); + } + PyList_Append(result,obj); + Py_DECREF(obj); + } + return result; +#else + PyObject* o2; + PyObject* o3; + if (!result) { + result = obj; + } else if (result == Py_None) { + Py_DECREF(result); + result = obj; + } else { + if (!PyTuple_Check(result)) { + o2 = result; + result = PyTuple_New(1); + PyTuple_SET_ITEM(result, 0, o2); + } + o3 = PyTuple_New(1); + PyTuple_SET_ITEM(o3, 0, obj); + o2 = result; + result = PySequence_Concat(o2, o3); + Py_DECREF(o2); + Py_DECREF(o3); + } + return result; +#endif +} + +/* Unpack the argument tuple */ + +SWIGINTERN Py_ssize_t +SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs) +{ + if (!args) { + if (!min && !max) { + return 1; + } else { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none", + name, (min == max ? "" : "at least "), (int)min); + return 0; + } + } + if (!PyTuple_Check(args)) { + if (min <= 1 && max >= 1) { + Py_ssize_t i; + objs[0] = args; + for (i = 1; i < max; ++i) { + objs[i] = 0; + } + return 2; + } + PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple"); + return 0; + } else { + Py_ssize_t l = PyTuple_GET_SIZE(args); + if (l < min) { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", + name, (min == max ? "" : "at least "), (int)min, (int)l); + return 0; + } else if (l > max) { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", + name, (min == max ? "" : "at most "), (int)max, (int)l); + return 0; + } else { + Py_ssize_t i; + for (i = 0; i < l; ++i) { + objs[i] = PyTuple_GET_ITEM(args, i); + } + for (; l < max; ++l) { + objs[l] = 0; + } + return i + 1; + } + } +} + +/* A functor is a function object with one single object argument */ +#if PY_VERSION_HEX >= 0x02020000 +#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunctionObjArgs(functor, obj, NULL); +#else +#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunction(functor, "O", obj); +#endif + +/* + Helper for static pointer initialization for both C and C++ code, for example + static PyObject *SWIG_STATIC_POINTER(MyVar) = NewSomething(...); +*/ +#ifdef __cplusplus +#define SWIG_STATIC_POINTER(var) var +#else +#define SWIG_STATIC_POINTER(var) var = 0; if (!var) var +#endif + +/* ----------------------------------------------------------------------------- + * Pointer declarations + * ----------------------------------------------------------------------------- */ + +/* Flags for new pointer objects */ +#define SWIG_POINTER_NOSHADOW (SWIG_POINTER_OWN << 1) +#define SWIG_POINTER_NEW (SWIG_POINTER_NOSHADOW | SWIG_POINTER_OWN) + +#define SWIG_POINTER_IMPLICIT_CONV (SWIG_POINTER_DISOWN << 1) + +#define SWIG_BUILTIN_TP_INIT (SWIG_POINTER_OWN << 2) +#define SWIG_BUILTIN_INIT (SWIG_BUILTIN_TP_INIT | SWIG_POINTER_OWN) + +#ifdef __cplusplus +extern "C" { +#endif + +/* How to access Py_None */ +#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# ifndef SWIG_PYTHON_NO_BUILD_NONE +# ifndef SWIG_PYTHON_BUILD_NONE +# define SWIG_PYTHON_BUILD_NONE +# endif +# endif +#endif + +#ifdef SWIG_PYTHON_BUILD_NONE +# ifdef Py_None +# undef Py_None +# define Py_None SWIG_Py_None() +# endif +SWIGRUNTIMEINLINE PyObject * +_SWIG_Py_None(void) +{ + PyObject *none = Py_BuildValue((char*)""); + Py_DECREF(none); + return none; +} +SWIGRUNTIME PyObject * +SWIG_Py_None(void) +{ + static PyObject *SWIG_STATIC_POINTER(none) = _SWIG_Py_None(); + return none; +} +#endif + +/* The python void return value */ + +SWIGRUNTIMEINLINE PyObject * +SWIG_Py_Void(void) +{ + PyObject *none = Py_None; + Py_INCREF(none); + return none; +} + +/* SwigPyClientData */ + +typedef struct { + PyObject *klass; + PyObject *newraw; + PyObject *newargs; + PyObject *destroy; + int delargs; + int implicitconv; + PyTypeObject *pytype; +} SwigPyClientData; + +SWIGRUNTIMEINLINE int +SWIG_Python_CheckImplicit(swig_type_info *ty) +{ + SwigPyClientData *data = (SwigPyClientData *)ty->clientdata; + return data ? data->implicitconv : 0; +} + +SWIGRUNTIMEINLINE PyObject * +SWIG_Python_ExceptionType(swig_type_info *desc) { + SwigPyClientData *data = desc ? (SwigPyClientData *) desc->clientdata : 0; + PyObject *klass = data ? data->klass : 0; + return (klass ? klass : PyExc_RuntimeError); +} + + +SWIGRUNTIME SwigPyClientData * +SwigPyClientData_New(PyObject* obj) +{ + if (!obj) { + return 0; + } else { + SwigPyClientData *data = (SwigPyClientData *)malloc(sizeof(SwigPyClientData)); + /* the klass element */ + data->klass = obj; + Py_INCREF(data->klass); + /* the newraw method and newargs arguments used to create a new raw instance */ + if (PyClass_Check(obj)) { + data->newraw = 0; + data->newargs = obj; + Py_INCREF(obj); + } else { +#if (PY_VERSION_HEX < 0x02020000) + data->newraw = 0; +#else + data->newraw = PyObject_GetAttrString(data->klass, (char *)"__new__"); +#endif + if (data->newraw) { + Py_INCREF(data->newraw); + data->newargs = PyTuple_New(1); + PyTuple_SetItem(data->newargs, 0, obj); + } else { + data->newargs = obj; + } + Py_INCREF(data->newargs); + } + /* the destroy method, aka as the C++ delete method */ + data->destroy = PyObject_GetAttrString(data->klass, (char *)"__swig_destroy__"); + if (PyErr_Occurred()) { + PyErr_Clear(); + data->destroy = 0; + } + if (data->destroy) { + int flags; + Py_INCREF(data->destroy); + flags = PyCFunction_GET_FLAGS(data->destroy); +#ifdef METH_O + data->delargs = !(flags & (METH_O)); +#else + data->delargs = 0; +#endif + } else { + data->delargs = 0; + } + data->implicitconv = 0; + data->pytype = 0; + return data; + } +} + +SWIGRUNTIME void +SwigPyClientData_Del(SwigPyClientData *data) { + Py_XDECREF(data->newraw); + Py_XDECREF(data->newargs); + Py_XDECREF(data->destroy); +} + +/* =============== SwigPyObject =====================*/ + +typedef struct { + PyObject_HEAD + void *ptr; + swig_type_info *ty; + int own; + PyObject *next; +#ifdef SWIGPYTHON_BUILTIN + PyObject *dict; +#endif +} SwigPyObject; + + +#ifdef SWIGPYTHON_BUILTIN + +SWIGRUNTIME PyObject * +SwigPyObject_get___dict__(PyObject *v, PyObject *SWIGUNUSEDPARM(args)) +{ + SwigPyObject *sobj = (SwigPyObject *)v; + + if (!sobj->dict) + sobj->dict = PyDict_New(); + + Py_INCREF(sobj->dict); + return sobj->dict; +} + +#endif + +SWIGRUNTIME PyObject * +SwigPyObject_long(SwigPyObject *v) +{ + return PyLong_FromVoidPtr(v->ptr); +} + +SWIGRUNTIME PyObject * +SwigPyObject_format(const char* fmt, SwigPyObject *v) +{ + PyObject *res = NULL; + PyObject *args = PyTuple_New(1); + if (args) { + if (PyTuple_SetItem(args, 0, SwigPyObject_long(v)) == 0) { + PyObject *ofmt = SWIG_Python_str_FromChar(fmt); + if (ofmt) { +#if PY_VERSION_HEX >= 0x03000000 + res = PyUnicode_Format(ofmt,args); +#else + res = PyString_Format(ofmt,args); +#endif + Py_DECREF(ofmt); + } + Py_DECREF(args); + } + } + return res; +} + +SWIGRUNTIME PyObject * +SwigPyObject_oct(SwigPyObject *v) +{ + return SwigPyObject_format("%o",v); +} + +SWIGRUNTIME PyObject * +SwigPyObject_hex(SwigPyObject *v) +{ + return SwigPyObject_format("%x",v); +} + +SWIGRUNTIME PyObject * +#ifdef METH_NOARGS +SwigPyObject_repr(SwigPyObject *v) +#else +SwigPyObject_repr(SwigPyObject *v, PyObject *args) +#endif +{ + const char *name = SWIG_TypePrettyName(v->ty); + PyObject *repr = SWIG_Python_str_FromFormat("", (name ? name : "unknown"), (void *)v); + if (v->next) { +# ifdef METH_NOARGS + PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next); +# else + PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next, args); +# endif +# if PY_VERSION_HEX >= 0x03000000 + PyObject *joined = PyUnicode_Concat(repr, nrep); + Py_DecRef(repr); + Py_DecRef(nrep); + repr = joined; +# else + PyString_ConcatAndDel(&repr,nrep); +# endif + } + return repr; +} + +SWIGRUNTIME int +SwigPyObject_compare(SwigPyObject *v, SwigPyObject *w) +{ + void *i = v->ptr; + void *j = w->ptr; + return (i < j) ? -1 : ((i > j) ? 1 : 0); +} + +/* Added for Python 3.x, would it also be useful for Python 2.x? */ +SWIGRUNTIME PyObject* +SwigPyObject_richcompare(SwigPyObject *v, SwigPyObject *w, int op) +{ + PyObject* res; + if( op != Py_EQ && op != Py_NE ) { + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } + res = PyBool_FromLong( (SwigPyObject_compare(v, w)==0) == (op == Py_EQ) ? 1 : 0); + return res; +} + + +SWIGRUNTIME PyTypeObject* SwigPyObject_TypeOnce(void); + +#ifdef SWIGPYTHON_BUILTIN +static swig_type_info *SwigPyObject_stype = 0; +SWIGRUNTIME PyTypeObject* +SwigPyObject_type(void) { + SwigPyClientData *cd; + assert(SwigPyObject_stype); + cd = (SwigPyClientData*) SwigPyObject_stype->clientdata; + assert(cd); + assert(cd->pytype); + return cd->pytype; +} +#else +SWIGRUNTIME PyTypeObject* +SwigPyObject_type(void) { + static PyTypeObject *SWIG_STATIC_POINTER(type) = SwigPyObject_TypeOnce(); + return type; +} +#endif + +SWIGRUNTIMEINLINE int +SwigPyObject_Check(PyObject *op) { +#ifdef SWIGPYTHON_BUILTIN + PyTypeObject *target_tp = SwigPyObject_type(); + if (PyType_IsSubtype(op->ob_type, target_tp)) + return 1; + return (strcmp(op->ob_type->tp_name, "SwigPyObject") == 0); +#else + return (Py_TYPE(op) == SwigPyObject_type()) + || (strcmp(Py_TYPE(op)->tp_name,"SwigPyObject") == 0); +#endif +} + +SWIGRUNTIME PyObject * +SwigPyObject_New(void *ptr, swig_type_info *ty, int own); + +SWIGRUNTIME void +SwigPyObject_dealloc(PyObject *v) +{ + SwigPyObject *sobj = (SwigPyObject *) v; + PyObject *next = sobj->next; + if (sobj->own == SWIG_POINTER_OWN) { + swig_type_info *ty = sobj->ty; + SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; + PyObject *destroy = data ? data->destroy : 0; + if (destroy) { + /* destroy is always a VARARGS method */ + PyObject *res; + + /* PyObject_CallFunction() has the potential to silently drop + the active active exception. In cases of unnamed temporary + variable or where we just finished iterating over a generator + StopIteration will be active right now, and this needs to + remain true upon return from SwigPyObject_dealloc. So save + and restore. */ + + PyObject *val = NULL, *type = NULL, *tb = NULL; + PyErr_Fetch(&val, &type, &tb); + + if (data->delargs) { + /* we need to create a temporary object to carry the destroy operation */ + PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0); + res = SWIG_Python_CallFunctor(destroy, tmp); + Py_DECREF(tmp); + } else { + PyCFunction meth = PyCFunction_GET_FUNCTION(destroy); + PyObject *mself = PyCFunction_GET_SELF(destroy); + res = ((*meth)(mself, v)); + } + if (!res) + PyErr_WriteUnraisable(destroy); + + PyErr_Restore(val, type, tb); + + Py_XDECREF(res); + } +#if !defined(SWIG_PYTHON_SILENT_MEMLEAK) + else { + const char *name = SWIG_TypePrettyName(ty); + printf("swig/python detected a memory leak of type '%s', no destructor found.\n", (name ? name : "unknown")); + } +#endif + } + Py_XDECREF(next); + PyObject_DEL(v); +} + +SWIGRUNTIME PyObject* +SwigPyObject_append(PyObject* v, PyObject* next) +{ + SwigPyObject *sobj = (SwigPyObject *) v; +#ifndef METH_O + PyObject *tmp = 0; + if (!PyArg_ParseTuple(next,(char *)"O:append", &tmp)) return NULL; + next = tmp; +#endif + if (!SwigPyObject_Check(next)) { + PyErr_SetString(PyExc_TypeError, "Attempt to append a non SwigPyObject"); + return NULL; + } + sobj->next = next; + Py_INCREF(next); + return SWIG_Py_Void(); +} + +SWIGRUNTIME PyObject* +#ifdef METH_NOARGS +SwigPyObject_next(PyObject* v) +#else +SwigPyObject_next(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *) v; + if (sobj->next) { + Py_INCREF(sobj->next); + return sobj->next; + } else { + return SWIG_Py_Void(); + } +} + +SWIGINTERN PyObject* +#ifdef METH_NOARGS +SwigPyObject_disown(PyObject *v) +#else +SwigPyObject_disown(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *)v; + sobj->own = 0; + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject* +#ifdef METH_NOARGS +SwigPyObject_acquire(PyObject *v) +#else +SwigPyObject_acquire(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *)v; + sobj->own = SWIG_POINTER_OWN; + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject* +SwigPyObject_own(PyObject *v, PyObject *args) +{ + PyObject *val = 0; +#if (PY_VERSION_HEX < 0x02020000) + if (!PyArg_ParseTuple(args,(char *)"|O:own",&val)) +#elif (PY_VERSION_HEX < 0x02050000) + if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val)) +#else + if (!PyArg_UnpackTuple(args, "own", 0, 1, &val)) +#endif + { + return NULL; + } + else + { + SwigPyObject *sobj = (SwigPyObject *)v; + PyObject *obj = PyBool_FromLong(sobj->own); + if (val) { +#ifdef METH_NOARGS + if (PyObject_IsTrue(val)) { + SwigPyObject_acquire(v); + } else { + SwigPyObject_disown(v); + } +#else + if (PyObject_IsTrue(val)) { + SwigPyObject_acquire(v,args); + } else { + SwigPyObject_disown(v,args); + } +#endif + } + return obj; + } +} + +#ifdef METH_O +static PyMethodDef +swigobject_methods[] = { + {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_NOARGS, (char *)"releases ownership of the pointer"}, + {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_NOARGS, (char *)"acquires ownership of the pointer"}, + {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, + {(char *)"append", (PyCFunction)SwigPyObject_append, METH_O, (char *)"appends another 'this' object"}, + {(char *)"next", (PyCFunction)SwigPyObject_next, METH_NOARGS, (char *)"returns the next 'this' object"}, + {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_NOARGS, (char *)"returns object representation"}, + {0, 0, 0, 0} +}; +#else +static PyMethodDef +swigobject_methods[] = { + {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_VARARGS, (char *)"releases ownership of the pointer"}, + {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_VARARGS, (char *)"acquires ownership of the pointer"}, + {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, + {(char *)"append", (PyCFunction)SwigPyObject_append, METH_VARARGS, (char *)"appends another 'this' object"}, + {(char *)"next", (PyCFunction)SwigPyObject_next, METH_VARARGS, (char *)"returns the next 'this' object"}, + {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_VARARGS, (char *)"returns object representation"}, + {0, 0, 0, 0} +}; +#endif + +#if PY_VERSION_HEX < 0x02020000 +SWIGINTERN PyObject * +SwigPyObject_getattr(SwigPyObject *sobj,char *name) +{ + return Py_FindMethod(swigobject_methods, (PyObject *)sobj, name); +} +#endif + +SWIGRUNTIME PyTypeObject* +SwigPyObject_TypeOnce(void) { + static char swigobject_doc[] = "Swig object carries a C/C++ instance pointer"; + + static PyNumberMethods SwigPyObject_as_number = { + (binaryfunc)0, /*nb_add*/ + (binaryfunc)0, /*nb_subtract*/ + (binaryfunc)0, /*nb_multiply*/ + /* nb_divide removed in Python 3 */ +#if PY_VERSION_HEX < 0x03000000 + (binaryfunc)0, /*nb_divide*/ +#endif + (binaryfunc)0, /*nb_remainder*/ + (binaryfunc)0, /*nb_divmod*/ + (ternaryfunc)0,/*nb_power*/ + (unaryfunc)0, /*nb_negative*/ + (unaryfunc)0, /*nb_positive*/ + (unaryfunc)0, /*nb_absolute*/ + (inquiry)0, /*nb_nonzero*/ + 0, /*nb_invert*/ + 0, /*nb_lshift*/ + 0, /*nb_rshift*/ + 0, /*nb_and*/ + 0, /*nb_xor*/ + 0, /*nb_or*/ +#if PY_VERSION_HEX < 0x03000000 + 0, /*nb_coerce*/ +#endif + (unaryfunc)SwigPyObject_long, /*nb_int*/ +#if PY_VERSION_HEX < 0x03000000 + (unaryfunc)SwigPyObject_long, /*nb_long*/ +#else + 0, /*nb_reserved*/ +#endif + (unaryfunc)0, /*nb_float*/ +#if PY_VERSION_HEX < 0x03000000 + (unaryfunc)SwigPyObject_oct, /*nb_oct*/ + (unaryfunc)SwigPyObject_hex, /*nb_hex*/ +#endif +#if PY_VERSION_HEX >= 0x03050000 /* 3.5 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_matrix_multiply */ +#elif PY_VERSION_HEX >= 0x03000000 /* 3.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index, nb_inplace_divide removed */ +#elif PY_VERSION_HEX >= 0x02050000 /* 2.5.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index */ +#elif PY_VERSION_HEX >= 0x02020000 /* 2.2.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */ +#elif PY_VERSION_HEX >= 0x02000000 /* 2.0.0 */ + 0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_or */ +#endif + }; + + static PyTypeObject swigpyobject_type; + static int type_init = 0; + if (!type_init) { + const PyTypeObject tmp = { +#if PY_VERSION_HEX >= 0x03000000 + PyVarObject_HEAD_INIT(NULL, 0) +#else + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ +#endif + (char *)"SwigPyObject", /* tp_name */ + sizeof(SwigPyObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)SwigPyObject_dealloc, /* tp_dealloc */ + 0, /* tp_print */ +#if PY_VERSION_HEX < 0x02020000 + (getattrfunc)SwigPyObject_getattr, /* tp_getattr */ +#else + (getattrfunc)0, /* tp_getattr */ +#endif + (setattrfunc)0, /* tp_setattr */ +#if PY_VERSION_HEX >= 0x03000000 + 0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */ +#else + (cmpfunc)SwigPyObject_compare, /* tp_compare */ +#endif + (reprfunc)SwigPyObject_repr, /* tp_repr */ + &SwigPyObject_as_number, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + swigobject_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + (richcmpfunc)SwigPyObject_richcompare,/* tp_richcompare */ + 0, /* tp_weaklistoffset */ +#if PY_VERSION_HEX >= 0x02020000 + 0, /* tp_iter */ + 0, /* tp_iternext */ + swigobject_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ +#endif +#if PY_VERSION_HEX >= 0x02030000 + 0, /* tp_del */ +#endif +#if PY_VERSION_HEX >= 0x02060000 + 0, /* tp_version_tag */ +#endif +#if PY_VERSION_HEX >= 0x03040000 + 0, /* tp_finalize */ +#endif +#ifdef COUNT_ALLOCS + 0, /* tp_allocs */ + 0, /* tp_frees */ + 0, /* tp_maxalloc */ +#if PY_VERSION_HEX >= 0x02050000 + 0, /* tp_prev */ +#endif + 0 /* tp_next */ +#endif + }; + swigpyobject_type = tmp; + type_init = 1; +#if PY_VERSION_HEX < 0x02020000 + swigpyobject_type.ob_type = &PyType_Type; +#else + if (PyType_Ready(&swigpyobject_type) < 0) + return NULL; +#endif + } + return &swigpyobject_type; +} + +SWIGRUNTIME PyObject * +SwigPyObject_New(void *ptr, swig_type_info *ty, int own) +{ + SwigPyObject *sobj = PyObject_NEW(SwigPyObject, SwigPyObject_type()); + if (sobj) { + sobj->ptr = ptr; + sobj->ty = ty; + sobj->own = own; + sobj->next = 0; + } + return (PyObject *)sobj; +} + +/* ----------------------------------------------------------------------------- + * Implements a simple Swig Packed type, and use it instead of string + * ----------------------------------------------------------------------------- */ + +typedef struct { + PyObject_HEAD + void *pack; + swig_type_info *ty; + size_t size; +} SwigPyPacked; + +SWIGRUNTIME int +SwigPyPacked_print(SwigPyPacked *v, FILE *fp, int SWIGUNUSEDPARM(flags)) +{ + char result[SWIG_BUFFER_SIZE]; + fputs("pack, v->size, 0, sizeof(result))) { + fputs("at ", fp); + fputs(result, fp); + } + fputs(v->ty->name,fp); + fputs(">", fp); + return 0; +} + +SWIGRUNTIME PyObject * +SwigPyPacked_repr(SwigPyPacked *v) +{ + char result[SWIG_BUFFER_SIZE]; + if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) { + return SWIG_Python_str_FromFormat("", result, v->ty->name); + } else { + return SWIG_Python_str_FromFormat("", v->ty->name); + } +} + +SWIGRUNTIME PyObject * +SwigPyPacked_str(SwigPyPacked *v) +{ + char result[SWIG_BUFFER_SIZE]; + if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))){ + return SWIG_Python_str_FromFormat("%s%s", result, v->ty->name); + } else { + return SWIG_Python_str_FromChar(v->ty->name); + } +} + +SWIGRUNTIME int +SwigPyPacked_compare(SwigPyPacked *v, SwigPyPacked *w) +{ + size_t i = v->size; + size_t j = w->size; + int s = (i < j) ? -1 : ((i > j) ? 1 : 0); + return s ? s : strncmp((char *)v->pack, (char *)w->pack, 2*v->size); +} + +SWIGRUNTIME PyTypeObject* SwigPyPacked_TypeOnce(void); + +SWIGRUNTIME PyTypeObject* +SwigPyPacked_type(void) { + static PyTypeObject *SWIG_STATIC_POINTER(type) = SwigPyPacked_TypeOnce(); + return type; +} + +SWIGRUNTIMEINLINE int +SwigPyPacked_Check(PyObject *op) { + return ((op)->ob_type == SwigPyPacked_TypeOnce()) + || (strcmp((op)->ob_type->tp_name,"SwigPyPacked") == 0); +} + +SWIGRUNTIME void +SwigPyPacked_dealloc(PyObject *v) +{ + if (SwigPyPacked_Check(v)) { + SwigPyPacked *sobj = (SwigPyPacked *) v; + free(sobj->pack); + } + PyObject_DEL(v); +} + +SWIGRUNTIME PyTypeObject* +SwigPyPacked_TypeOnce(void) { + static char swigpacked_doc[] = "Swig object carries a C/C++ instance pointer"; + static PyTypeObject swigpypacked_type; + static int type_init = 0; + if (!type_init) { + const PyTypeObject tmp = { +#if PY_VERSION_HEX>=0x03000000 + PyVarObject_HEAD_INIT(NULL, 0) +#else + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ +#endif + (char *)"SwigPyPacked", /* tp_name */ + sizeof(SwigPyPacked), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)SwigPyPacked_dealloc, /* tp_dealloc */ + (printfunc)SwigPyPacked_print, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + (setattrfunc)0, /* tp_setattr */ +#if PY_VERSION_HEX>=0x03000000 + 0, /* tp_reserved in 3.0.1 */ +#else + (cmpfunc)SwigPyPacked_compare, /* tp_compare */ +#endif + (reprfunc)SwigPyPacked_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + (reprfunc)SwigPyPacked_str, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + swigpacked_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ +#if PY_VERSION_HEX >= 0x02020000 + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ +#endif +#if PY_VERSION_HEX >= 0x02030000 + 0, /* tp_del */ +#endif +#if PY_VERSION_HEX >= 0x02060000 + 0, /* tp_version_tag */ +#endif +#if PY_VERSION_HEX >= 0x03040000 + 0, /* tp_finalize */ +#endif +#ifdef COUNT_ALLOCS + 0, /* tp_allocs */ + 0, /* tp_frees */ + 0, /* tp_maxalloc */ +#if PY_VERSION_HEX >= 0x02050000 + 0, /* tp_prev */ +#endif + 0 /* tp_next */ +#endif + }; + swigpypacked_type = tmp; + type_init = 1; +#if PY_VERSION_HEX < 0x02020000 + swigpypacked_type.ob_type = &PyType_Type; +#else + if (PyType_Ready(&swigpypacked_type) < 0) + return NULL; +#endif + } + return &swigpypacked_type; +} + +SWIGRUNTIME PyObject * +SwigPyPacked_New(void *ptr, size_t size, swig_type_info *ty) +{ + SwigPyPacked *sobj = PyObject_NEW(SwigPyPacked, SwigPyPacked_type()); + if (sobj) { + void *pack = malloc(size); + if (pack) { + memcpy(pack, ptr, size); + sobj->pack = pack; + sobj->ty = ty; + sobj->size = size; + } else { + PyObject_DEL((PyObject *) sobj); + sobj = 0; + } + } + return (PyObject *) sobj; +} + +SWIGRUNTIME swig_type_info * +SwigPyPacked_UnpackData(PyObject *obj, void *ptr, size_t size) +{ + if (SwigPyPacked_Check(obj)) { + SwigPyPacked *sobj = (SwigPyPacked *)obj; + if (sobj->size != size) return 0; + memcpy(ptr, sobj->pack, size); + return sobj->ty; + } else { + return 0; + } +} + +/* ----------------------------------------------------------------------------- + * pointers/data manipulation + * ----------------------------------------------------------------------------- */ + +SWIGRUNTIMEINLINE PyObject * +_SWIG_This(void) +{ + return SWIG_Python_str_FromChar("this"); +} + +static PyObject *swig_this = NULL; + +SWIGRUNTIME PyObject * +SWIG_This(void) +{ + if (swig_this == NULL) + swig_this = _SWIG_This(); + return swig_this; +} + +/* #define SWIG_PYTHON_SLOW_GETSET_THIS */ + +/* TODO: I don't know how to implement the fast getset in Python 3 right now */ +#if PY_VERSION_HEX>=0x03000000 +#define SWIG_PYTHON_SLOW_GETSET_THIS +#endif + +SWIGRUNTIME SwigPyObject * +SWIG_Python_GetSwigThis(PyObject *pyobj) +{ + PyObject *obj; + + if (SwigPyObject_Check(pyobj)) + return (SwigPyObject *) pyobj; + +#ifdef SWIGPYTHON_BUILTIN + (void)obj; +# ifdef PyWeakref_CheckProxy + if (PyWeakref_CheckProxy(pyobj)) { + pyobj = PyWeakref_GET_OBJECT(pyobj); + if (pyobj && SwigPyObject_Check(pyobj)) + return (SwigPyObject*) pyobj; + } +# endif + return NULL; +#else + + obj = 0; + +#if (!defined(SWIG_PYTHON_SLOW_GETSET_THIS) && (PY_VERSION_HEX >= 0x02030000)) + if (PyInstance_Check(pyobj)) { + obj = _PyInstance_Lookup(pyobj, SWIG_This()); + } else { + PyObject **dictptr = _PyObject_GetDictPtr(pyobj); + if (dictptr != NULL) { + PyObject *dict = *dictptr; + obj = dict ? PyDict_GetItem(dict, SWIG_This()) : 0; + } else { +#ifdef PyWeakref_CheckProxy + if (PyWeakref_CheckProxy(pyobj)) { + PyObject *wobj = PyWeakref_GET_OBJECT(pyobj); + return wobj ? SWIG_Python_GetSwigThis(wobj) : 0; + } +#endif + obj = PyObject_GetAttr(pyobj,SWIG_This()); + if (obj) { + Py_DECREF(obj); + } else { + if (PyErr_Occurred()) PyErr_Clear(); + return 0; + } + } + } +#else + obj = PyObject_GetAttr(pyobj,SWIG_This()); + if (obj) { + Py_DECREF(obj); + } else { + if (PyErr_Occurred()) PyErr_Clear(); + return 0; + } +#endif + if (obj && !SwigPyObject_Check(obj)) { + /* a PyObject is called 'this', try to get the 'real this' + SwigPyObject from it */ + return SWIG_Python_GetSwigThis(obj); + } + return (SwigPyObject *)obj; +#endif +} + +/* Acquire a pointer value */ + +SWIGRUNTIME int +SWIG_Python_AcquirePtr(PyObject *obj, int own) { + if (own == SWIG_POINTER_OWN) { + SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj); + if (sobj) { + int oldown = sobj->own; + sobj->own = own; + return oldown; + } + } + return 0; +} + +/* Convert a pointer value */ + +SWIGRUNTIME int +SWIG_Python_ConvertPtrAndOwn(PyObject *obj, void **ptr, swig_type_info *ty, int flags, int *own) { + int res; + SwigPyObject *sobj; + int implicit_conv = (flags & SWIG_POINTER_IMPLICIT_CONV) != 0; + + if (!obj) + return SWIG_ERROR; + if (obj == Py_None && !implicit_conv) { + if (ptr) + *ptr = 0; + return SWIG_OK; + } + + res = SWIG_ERROR; + + sobj = SWIG_Python_GetSwigThis(obj); + if (own) + *own = 0; + while (sobj) { + void *vptr = sobj->ptr; + if (ty) { + swig_type_info *to = sobj->ty; + if (to == ty) { + /* no type cast needed */ + if (ptr) *ptr = vptr; + break; + } else { + swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); + if (!tc) { + sobj = (SwigPyObject *)sobj->next; + } else { + if (ptr) { + int newmemory = 0; + *ptr = SWIG_TypeCast(tc,vptr,&newmemory); + if (newmemory == SWIG_CAST_NEW_MEMORY) { + assert(own); /* badly formed typemap which will lead to a memory leak - it must set and use own to delete *ptr */ + if (own) + *own = *own | SWIG_CAST_NEW_MEMORY; + } + } + break; + } + } + } else { + if (ptr) *ptr = vptr; + break; + } + } + if (sobj) { + if (own) + *own = *own | sobj->own; + if (flags & SWIG_POINTER_DISOWN) { + sobj->own = 0; + } + res = SWIG_OK; + } else { + if (implicit_conv) { + SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; + if (data && !data->implicitconv) { + PyObject *klass = data->klass; + if (klass) { + PyObject *impconv; + data->implicitconv = 1; /* avoid recursion and call 'explicit' constructors*/ + impconv = SWIG_Python_CallFunctor(klass, obj); + data->implicitconv = 0; + if (PyErr_Occurred()) { + PyErr_Clear(); + impconv = 0; + } + if (impconv) { + SwigPyObject *iobj = SWIG_Python_GetSwigThis(impconv); + if (iobj) { + void *vptr; + res = SWIG_Python_ConvertPtrAndOwn((PyObject*)iobj, &vptr, ty, 0, 0); + if (SWIG_IsOK(res)) { + if (ptr) { + *ptr = vptr; + /* transfer the ownership to 'ptr' */ + iobj->own = 0; + res = SWIG_AddCast(res); + res = SWIG_AddNewMask(res); + } else { + res = SWIG_AddCast(res); + } + } + } + Py_DECREF(impconv); + } + } + } + } + if (!SWIG_IsOK(res) && obj == Py_None) { + if (ptr) + *ptr = 0; + if (PyErr_Occurred()) + PyErr_Clear(); + res = SWIG_OK; + } + } + return res; +} + +/* Convert a function ptr value */ + +SWIGRUNTIME int +SWIG_Python_ConvertFunctionPtr(PyObject *obj, void **ptr, swig_type_info *ty) { + if (!PyCFunction_Check(obj)) { + return SWIG_ConvertPtr(obj, ptr, ty, 0); + } else { + void *vptr = 0; + + /* here we get the method pointer for callbacks */ + const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc); + const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0; + if (desc) + desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0; + if (!desc) + return SWIG_ERROR; + if (ty) { + swig_cast_info *tc = SWIG_TypeCheck(desc,ty); + if (tc) { + int newmemory = 0; + *ptr = SWIG_TypeCast(tc,vptr,&newmemory); + assert(!newmemory); /* newmemory handling not yet implemented */ + } else { + return SWIG_ERROR; + } + } else { + *ptr = vptr; + } + return SWIG_OK; + } +} + +/* Convert a packed value value */ + +SWIGRUNTIME int +SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *ty) { + swig_type_info *to = SwigPyPacked_UnpackData(obj, ptr, sz); + if (!to) return SWIG_ERROR; + if (ty) { + if (to != ty) { + /* check type cast? */ + swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); + if (!tc) return SWIG_ERROR; + } + } + return SWIG_OK; +} + +/* ----------------------------------------------------------------------------- + * Create a new pointer object + * ----------------------------------------------------------------------------- */ + +/* + Create a new instance object, without calling __init__, and set the + 'this' attribute. +*/ + +SWIGRUNTIME PyObject* +SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this) +{ +#if (PY_VERSION_HEX >= 0x02020000) + PyObject *inst = 0; + PyObject *newraw = data->newraw; + if (newraw) { + inst = PyObject_Call(newraw, data->newargs, NULL); + if (inst) { +#if !defined(SWIG_PYTHON_SLOW_GETSET_THIS) + PyObject **dictptr = _PyObject_GetDictPtr(inst); + if (dictptr != NULL) { + PyObject *dict = *dictptr; + if (dict == NULL) { + dict = PyDict_New(); + *dictptr = dict; + PyDict_SetItem(dict, SWIG_This(), swig_this); + } + } +#else + PyObject *key = SWIG_This(); + PyObject_SetAttr(inst, key, swig_this); +#endif + } + } else { +#if PY_VERSION_HEX >= 0x03000000 + inst = ((PyTypeObject*) data->newargs)->tp_new((PyTypeObject*) data->newargs, Py_None, Py_None); + if (inst) { + PyObject_SetAttr(inst, SWIG_This(), swig_this); + Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG; + } +#else + PyObject *dict = PyDict_New(); + if (dict) { + PyDict_SetItem(dict, SWIG_This(), swig_this); + inst = PyInstance_NewRaw(data->newargs, dict); + Py_DECREF(dict); + } +#endif + } + return inst; +#else +#if (PY_VERSION_HEX >= 0x02010000) + PyObject *inst = 0; + PyObject *dict = PyDict_New(); + if (dict) { + PyDict_SetItem(dict, SWIG_This(), swig_this); + inst = PyInstance_NewRaw(data->newargs, dict); + Py_DECREF(dict); + } + return (PyObject *) inst; +#else + PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type); + if (inst == NULL) { + return NULL; + } + inst->in_class = (PyClassObject *)data->newargs; + Py_INCREF(inst->in_class); + inst->in_dict = PyDict_New(); + if (inst->in_dict == NULL) { + Py_DECREF(inst); + return NULL; + } +#ifdef Py_TPFLAGS_HAVE_WEAKREFS + inst->in_weakreflist = NULL; +#endif +#ifdef Py_TPFLAGS_GC + PyObject_GC_Init(inst); +#endif + PyDict_SetItem(inst->in_dict, SWIG_This(), swig_this); + return (PyObject *) inst; +#endif +#endif +} + +SWIGRUNTIME void +SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this) +{ + PyObject *dict; +#if (PY_VERSION_HEX >= 0x02020000) && !defined(SWIG_PYTHON_SLOW_GETSET_THIS) + PyObject **dictptr = _PyObject_GetDictPtr(inst); + if (dictptr != NULL) { + dict = *dictptr; + if (dict == NULL) { + dict = PyDict_New(); + *dictptr = dict; + } + PyDict_SetItem(dict, SWIG_This(), swig_this); + return; + } +#endif + dict = PyObject_GetAttrString(inst, (char*)"__dict__"); + PyDict_SetItem(dict, SWIG_This(), swig_this); + Py_DECREF(dict); +} + + +SWIGINTERN PyObject * +SWIG_Python_InitShadowInstance(PyObject *args) { + PyObject *obj[2]; + if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) { + return NULL; + } else { + SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]); + if (sthis) { + SwigPyObject_append((PyObject*) sthis, obj[1]); + } else { + SWIG_Python_SetSwigThis(obj[0], obj[1]); + } + return SWIG_Py_Void(); + } +} + +/* Create a new pointer object */ + +SWIGRUNTIME PyObject * +SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int flags) { + SwigPyClientData *clientdata; + PyObject * robj; + int own; + + if (!ptr) + return SWIG_Py_Void(); + + clientdata = type ? (SwigPyClientData *)(type->clientdata) : 0; + own = (flags & SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0; + if (clientdata && clientdata->pytype) { + SwigPyObject *newobj; + if (flags & SWIG_BUILTIN_TP_INIT) { + newobj = (SwigPyObject*) self; + if (newobj->ptr) { + PyObject *next_self = clientdata->pytype->tp_alloc(clientdata->pytype, 0); + while (newobj->next) + newobj = (SwigPyObject *) newobj->next; + newobj->next = next_self; + newobj = (SwigPyObject *)next_self; +#ifdef SWIGPYTHON_BUILTIN + newobj->dict = 0; +#endif + } + } else { + newobj = PyObject_New(SwigPyObject, clientdata->pytype); +#ifdef SWIGPYTHON_BUILTIN + newobj->dict = 0; +#endif + } + if (newobj) { + newobj->ptr = ptr; + newobj->ty = type; + newobj->own = own; + newobj->next = 0; + return (PyObject*) newobj; + } + return SWIG_Py_Void(); + } + + assert(!(flags & SWIG_BUILTIN_TP_INIT)); + + robj = SwigPyObject_New(ptr, type, own); + if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) { + PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj); + Py_DECREF(robj); + robj = inst; + } + return robj; +} + +/* Create a new packed object */ + +SWIGRUNTIMEINLINE PyObject * +SWIG_Python_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) { + return ptr ? SwigPyPacked_New((void *) ptr, sz, type) : SWIG_Py_Void(); +} + +/* -----------------------------------------------------------------------------* + * Get type list + * -----------------------------------------------------------------------------*/ + +#ifdef SWIG_LINK_RUNTIME +void *SWIG_ReturnGlobalTypeList(void *); +#endif + +SWIGRUNTIME swig_module_info * +SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) { + static void *type_pointer = (void *)0; + /* first check if module already created */ + if (!type_pointer) { +#ifdef SWIG_LINK_RUNTIME + type_pointer = SWIG_ReturnGlobalTypeList((void *)0); +#else +# ifdef SWIGPY_USE_CAPSULE + type_pointer = PyCapsule_Import(SWIGPY_CAPSULE_NAME, 0); +# else + type_pointer = PyCObject_Import((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, + (char*)"type_pointer" SWIG_TYPE_TABLE_NAME); +# endif + if (PyErr_Occurred()) { + PyErr_Clear(); + type_pointer = (void *)0; + } +#endif + } + return (swig_module_info *) type_pointer; +} + +#if PY_MAJOR_VERSION < 2 +/* PyModule_AddObject function was introduced in Python 2.0. The following function + is copied out of Python/modsupport.c in python version 2.3.4 */ +SWIGINTERN int +PyModule_AddObject(PyObject *m, char *name, PyObject *o) +{ + PyObject *dict; + if (!PyModule_Check(m)) { + PyErr_SetString(PyExc_TypeError, "PyModule_AddObject() needs module as first arg"); + return SWIG_ERROR; + } + if (!o) { + PyErr_SetString(PyExc_TypeError, "PyModule_AddObject() needs non-NULL value"); + return SWIG_ERROR; + } + + dict = PyModule_GetDict(m); + if (dict == NULL) { + /* Internal error -- modules must have a dict! */ + PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__", + PyModule_GetName(m)); + return SWIG_ERROR; + } + if (PyDict_SetItemString(dict, name, o)) + return SWIG_ERROR; + Py_DECREF(o); + return SWIG_OK; +} +#endif + +SWIGRUNTIME void +#ifdef SWIGPY_USE_CAPSULE +SWIG_Python_DestroyModule(PyObject *obj) +#else +SWIG_Python_DestroyModule(void *vptr) +#endif +{ +#ifdef SWIGPY_USE_CAPSULE + swig_module_info *swig_module = (swig_module_info *) PyCapsule_GetPointer(obj, SWIGPY_CAPSULE_NAME); +#else + swig_module_info *swig_module = (swig_module_info *) vptr; +#endif + swig_type_info **types = swig_module->types; + size_t i; + for (i =0; i < swig_module->size; ++i) { + swig_type_info *ty = types[i]; + if (ty->owndata) { + SwigPyClientData *data = (SwigPyClientData *) ty->clientdata; + if (data) SwigPyClientData_Del(data); + } + } + Py_DECREF(SWIG_This()); + swig_this = NULL; +} + +SWIGRUNTIME void +SWIG_Python_SetModule(swig_module_info *swig_module) { +#if PY_VERSION_HEX >= 0x03000000 + /* Add a dummy module object into sys.modules */ + PyObject *module = PyImport_AddModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION); +#else + static PyMethodDef swig_empty_runtime_method_table[] = { {NULL, NULL, 0, NULL} }; /* Sentinel */ + PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, swig_empty_runtime_method_table); +#endif +#ifdef SWIGPY_USE_CAPSULE + PyObject *pointer = PyCapsule_New((void *) swig_module, SWIGPY_CAPSULE_NAME, SWIG_Python_DestroyModule); + if (pointer && module) { + PyModule_AddObject(module, (char*)"type_pointer_capsule" SWIG_TYPE_TABLE_NAME, pointer); + } else { + Py_XDECREF(pointer); + } +#else + PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule); + if (pointer && module) { + PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer); + } else { + Py_XDECREF(pointer); + } +#endif +} + +/* The python cached type query */ +SWIGRUNTIME PyObject * +SWIG_Python_TypeCache(void) { + static PyObject *SWIG_STATIC_POINTER(cache) = PyDict_New(); + return cache; +} + +SWIGRUNTIME swig_type_info * +SWIG_Python_TypeQuery(const char *type) +{ + PyObject *cache = SWIG_Python_TypeCache(); + PyObject *key = SWIG_Python_str_FromChar(type); + PyObject *obj = PyDict_GetItem(cache, key); + swig_type_info *descriptor; + if (obj) { +#ifdef SWIGPY_USE_CAPSULE + descriptor = (swig_type_info *) PyCapsule_GetPointer(obj, NULL); +#else + descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj); +#endif + } else { + swig_module_info *swig_module = SWIG_GetModule(0); + descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type); + if (descriptor) { +#ifdef SWIGPY_USE_CAPSULE + obj = PyCapsule_New((void*) descriptor, NULL, NULL); +#else + obj = PyCObject_FromVoidPtr(descriptor, NULL); +#endif + PyDict_SetItem(cache, key, obj); + Py_DECREF(obj); + } + } + Py_DECREF(key); + return descriptor; +} + +/* + For backward compatibility only +*/ +#define SWIG_POINTER_EXCEPTION 0 +#define SWIG_arg_fail(arg) SWIG_Python_ArgFail(arg) +#define SWIG_MustGetPtr(p, type, argnum, flags) SWIG_Python_MustGetPtr(p, type, argnum, flags) + +SWIGRUNTIME int +SWIG_Python_AddErrMesg(const char* mesg, int infront) +{ + if (PyErr_Occurred()) { + PyObject *type = 0; + PyObject *value = 0; + PyObject *traceback = 0; + PyErr_Fetch(&type, &value, &traceback); + if (value) { + char *tmp; + PyObject *old_str = PyObject_Str(value); + Py_XINCREF(type); + PyErr_Clear(); + if (infront) { + PyErr_Format(type, "%s %s", mesg, tmp = SWIG_Python_str_AsChar(old_str)); + } else { + PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); + } + SWIG_Python_str_DelForPy3(tmp); + Py_DECREF(old_str); + } + return 1; + } else { + return 0; + } +} + +SWIGRUNTIME int +SWIG_Python_ArgFail(int argnum) +{ + if (PyErr_Occurred()) { + /* add information about failing argument */ + char mesg[256]; + PyOS_snprintf(mesg, sizeof(mesg), "argument number %d:", argnum); + return SWIG_Python_AddErrMesg(mesg, 1); + } else { + return 0; + } +} + +SWIGRUNTIMEINLINE const char * +SwigPyObject_GetDesc(PyObject *self) +{ + SwigPyObject *v = (SwigPyObject *)self; + swig_type_info *ty = v ? v->ty : 0; + return ty ? ty->str : ""; +} + +SWIGRUNTIME void +SWIG_Python_TypeError(const char *type, PyObject *obj) +{ + if (type) { +#if defined(SWIG_COBJECT_TYPES) + if (obj && SwigPyObject_Check(obj)) { + const char *otype = (const char *) SwigPyObject_GetDesc(obj); + if (otype) { + PyErr_Format(PyExc_TypeError, "a '%s' is expected, 'SwigPyObject(%s)' is received", + type, otype); + return; + } + } else +#endif + { + const char *otype = (obj ? obj->ob_type->tp_name : 0); + if (otype) { + PyObject *str = PyObject_Str(obj); + const char *cstr = str ? SWIG_Python_str_AsChar(str) : 0; + if (cstr) { + PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received", + type, otype, cstr); + SWIG_Python_str_DelForPy3(cstr); + } else { + PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received", + type, otype); + } + Py_XDECREF(str); + return; + } + } + PyErr_Format(PyExc_TypeError, "a '%s' is expected", type); + } else { + PyErr_Format(PyExc_TypeError, "unexpected type is received"); + } +} + + +/* Convert a pointer value, signal an exception on a type mismatch */ +SWIGRUNTIME void * +SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(argnum), int flags) { + void *result; + if (SWIG_Python_ConvertPtr(obj, &result, ty, flags) == -1) { + PyErr_Clear(); +#if SWIG_POINTER_EXCEPTION + if (flags) { + SWIG_Python_TypeError(SWIG_TypePrettyName(ty), obj); + SWIG_Python_ArgFail(argnum); + } +#endif + } + return result; +} + +#ifdef SWIGPYTHON_BUILTIN +SWIGRUNTIME int +SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) { + PyTypeObject *tp = obj->ob_type; + PyObject *descr; + PyObject *encoded_name; + descrsetfunc f; + int res = -1; + +# ifdef Py_USING_UNICODE + if (PyString_Check(name)) { + name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL); + if (!name) + return -1; + } else if (!PyUnicode_Check(name)) +# else + if (!PyString_Check(name)) +# endif + { + PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name); + return -1; + } else { + Py_INCREF(name); + } + + if (!tp->tp_dict) { + if (PyType_Ready(tp) < 0) + goto done; + } + + descr = _PyType_Lookup(tp, name); + f = NULL; + if (descr != NULL) + f = descr->ob_type->tp_descr_set; + if (!f) { + if (PyString_Check(name)) { + encoded_name = name; + Py_INCREF(name); + } else { + encoded_name = PyUnicode_AsUTF8String(name); + } + PyErr_Format(PyExc_AttributeError, "'%.100s' object has no attribute '%.200s'", tp->tp_name, PyString_AsString(encoded_name)); + Py_DECREF(encoded_name); + } else { + res = f(descr, obj, value); + } + + done: + Py_DECREF(name); + return res; +} +#endif + + +#ifdef __cplusplus +} +#endif + + + +#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) + +#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else + + + +/* -------- TYPES TABLE (BEGIN) -------- */ + +#define SWIGTYPE_p_FILE swig_types[0] +#define SWIGTYPE_p_char swig_types[1] +#define SWIGTYPE_p_double swig_types[2] +#define SWIGTYPE_p_doublep swig_types[3] +#define SWIGTYPE_p_int swig_types[4] +#define SWIGTYPE_p_intp swig_types[5] +#define SWIGTYPE_p_long swig_types[6] +#define SWIGTYPE_p_longp swig_types[7] +#define SWIGTYPE_p_p_char swig_types[8] +#define SWIGTYPE_p_p_void swig_types[9] +#define SWIGTYPE_p_size_t swig_types[10] +#define SWIGTYPE_p_sizetp swig_types[11] +static swig_type_info *swig_types[13]; +static swig_module_info swig_module = {swig_types, 12, 0, 0, 0, 0}; +#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) +#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) + +/* -------- TYPES TABLE (END) -------- */ + +#if (PY_VERSION_HEX <= 0x02000000) +# if !defined(SWIG_PYTHON_CLASSIC) +# error "This python version requires swig to be run with the '-classic' option" +# endif +#endif + +/*----------------------------------------------- + @(target):= _gribapi_swig.so + ------------------------------------------------*/ +#if PY_VERSION_HEX >= 0x03000000 +# define SWIG_init PyInit__gribapi_swig + +#else +# define SWIG_init init_gribapi_swig + +#endif +#define SWIG_name "_gribapi_swig" + +#define SWIGVERSION 0x030012 +#define SWIG_VERSION SWIGVERSION + + +#define SWIG_as_voidptr(a) (void *)((const void *)(a)) +#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),(void**)(a)) + + +typedef struct SWIGCDATA { + char *data; + size_t len; +} SWIGCDATA; + + + + + + +static SWIGCDATA cdata_void(void *ptr, size_t nelements) + + + +{ + SWIGCDATA d; + d.data = (char *) ptr; + + + + d.len = nelements; + + return d; +} + + + + + +SWIGINTERN int +SWIG_AsVal_double (PyObject *obj, double *val) +{ + int res = SWIG_TypeError; + if (PyFloat_Check(obj)) { + if (val) *val = PyFloat_AsDouble(obj); + return SWIG_OK; +#if PY_VERSION_HEX < 0x03000000 + } else if (PyInt_Check(obj)) { + if (val) *val = (double) PyInt_AsLong(obj); + return SWIG_OK; +#endif + } else if (PyLong_Check(obj)) { + double v = PyLong_AsDouble(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_OK; + } else { + PyErr_Clear(); + } + } +#ifdef SWIG_PYTHON_CAST_MODE + { + int dispatch = 0; + double d = PyFloat_AsDouble(obj); + if (!PyErr_Occurred()) { + if (val) *val = d; + return SWIG_AddCast(SWIG_OK); + } else { + PyErr_Clear(); + } + if (!dispatch) { + long v = PyLong_AsLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_AddCast(SWIG_AddCast(SWIG_OK)); + } else { + PyErr_Clear(); + } + } + } +#endif + return res; +} + + +#include + + +#include + + +SWIGINTERNINLINE int +SWIG_CanCastAsInteger(double *d, double min, double max) { + double x = *d; + if ((min <= x && x <= max)) { + double fx = floor(x); + double cx = ceil(x); + double rd = ((x - fx) < 0.5) ? fx : cx; /* simple rint */ + if ((errno == EDOM) || (errno == ERANGE)) { + errno = 0; + } else { + double summ, reps, diff; + if (rd < x) { + diff = x - rd; + } else if (rd > x) { + diff = rd - x; + } else { + return 1; + } + summ = rd + x; + reps = diff/summ; + if (reps < 8*DBL_EPSILON) { + *d = rd; + return 1; + } + } + } + return 0; +} + + +SWIGINTERN int +SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val) +{ +#if PY_VERSION_HEX < 0x03000000 + if (PyInt_Check(obj)) { + long v = PyInt_AsLong(obj); + if (v >= 0) { + if (val) *val = v; + return SWIG_OK; + } else { + return SWIG_OverflowError; + } + } else +#endif + if (PyLong_Check(obj)) { + unsigned long v = PyLong_AsUnsignedLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_OK; + } else { + PyErr_Clear(); + return SWIG_OverflowError; + } + } +#ifdef SWIG_PYTHON_CAST_MODE + { + int dispatch = 0; + unsigned long v = PyLong_AsUnsignedLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_AddCast(SWIG_OK); + } else { + PyErr_Clear(); + } + if (!dispatch) { + double d; + int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d)); + if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, ULONG_MAX)) { + if (val) *val = (unsigned long)(d); + return res; + } + } + } +#endif + return SWIG_TypeError; +} + + +#include +#if !defined(SWIG_NO_LLONG_MAX) +# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) +# define LLONG_MAX __LONG_LONG_MAX__ +# define LLONG_MIN (-LLONG_MAX - 1LL) +# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) +# endif +#endif + + +#if defined(LLONG_MAX) && !defined(SWIG_LONG_LONG_AVAILABLE) +# define SWIG_LONG_LONG_AVAILABLE +#endif + + +#ifdef SWIG_LONG_LONG_AVAILABLE +SWIGINTERN int +SWIG_AsVal_unsigned_SS_long_SS_long (PyObject *obj, unsigned long long *val) +{ + int res = SWIG_TypeError; + if (PyLong_Check(obj)) { + unsigned long long v = PyLong_AsUnsignedLongLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_OK; + } else { + PyErr_Clear(); + res = SWIG_OverflowError; + } + } else { + unsigned long v; + res = SWIG_AsVal_unsigned_SS_long (obj,&v); + if (SWIG_IsOK(res)) { + if (val) *val = v; + return res; + } + } +#ifdef SWIG_PYTHON_CAST_MODE + { + const double mant_max = 1LL << DBL_MANT_DIG; + double d; + res = SWIG_AsVal_double (obj,&d); + if (SWIG_IsOK(res) && !SWIG_CanCastAsInteger(&d, 0, mant_max)) + return SWIG_OverflowError; + if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, mant_max)) { + if (val) *val = (unsigned long long)(d); + return SWIG_AddCast(res); + } + res = SWIG_TypeError; + } +#endif + return res; +} +#endif + + +SWIGINTERNINLINE int +SWIG_AsVal_size_t (PyObject * obj, size_t *val) +{ + int res = SWIG_TypeError; +#ifdef SWIG_LONG_LONG_AVAILABLE + if (sizeof(size_t) <= sizeof(unsigned long)) { +#endif + unsigned long v; + res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0); + if (SWIG_IsOK(res) && val) *val = (size_t)(v); +#ifdef SWIG_LONG_LONG_AVAILABLE + } else if (sizeof(size_t) <= sizeof(unsigned long long)) { + unsigned long long v; + res = SWIG_AsVal_unsigned_SS_long_SS_long (obj, val ? &v : 0); + if (SWIG_IsOK(res) && val) *val = (size_t)(v); + } +#endif + return res; +} + + +SWIGINTERN swig_type_info* +SWIG_pchar_descriptor(void) +{ + static int init = 0; + static swig_type_info* info = 0; + if (!init) { + info = SWIG_TypeQuery("_p_char"); + init = 1; + } + return info; +} + + +SWIGINTERNINLINE PyObject * +SWIG_FromCharPtrAndSize(const char* carray, size_t size) +{ + if (carray) { + if (size > INT_MAX) { + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + return pchar_descriptor ? + SWIG_InternalNewPointerObj((char *)(carray), pchar_descriptor, 0) : SWIG_Py_Void(); + } else { +#if PY_VERSION_HEX >= 0x03000000 +#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + return PyBytes_FromStringAndSize(carray, (Py_ssize_t)(size)); +#else +#if PY_VERSION_HEX >= 0x03010000 + return PyUnicode_DecodeUTF8(carray, (Py_ssize_t)(size), "surrogateescape"); +#else + return PyUnicode_FromStringAndSize(carray, (Py_ssize_t)(size)); +#endif +#endif +#else + return PyString_FromStringAndSize(carray, (Py_ssize_t)(size)); +#endif + } + } else { + return SWIG_Py_Void(); + } +} + + +SWIGINTERN int +SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) +{ +#if PY_VERSION_HEX>=0x03000000 +#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + if (PyBytes_Check(obj)) +#else + if (PyUnicode_Check(obj)) +#endif +#else + if (PyString_Check(obj)) +#endif + { + char *cstr; Py_ssize_t len; +#if PY_VERSION_HEX>=0x03000000 +#if !defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + if (!alloc && cptr) { + /* We can't allow converting without allocation, since the internal + representation of string in Python 3 is UCS-2/UCS-4 but we require + a UTF-8 representation. + TODO(bhy) More detailed explanation */ + return SWIG_RuntimeError; + } + obj = PyUnicode_AsUTF8String(obj); + if(alloc) *alloc = SWIG_NEWOBJ; +#endif + PyBytes_AsStringAndSize(obj, &cstr, &len); +#else + PyString_AsStringAndSize(obj, &cstr, &len); +#endif + if (cptr) { + if (alloc) { + /* + In python the user should not be able to modify the inner + string representation. To warranty that, if you define + SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string + buffer is always returned. + + The default behavior is just to return the pointer value, + so, be careful. + */ +#if defined(SWIG_PYTHON_SAFE_CSTRINGS) + if (*alloc != SWIG_OLDOBJ) +#else + if (*alloc == SWIG_NEWOBJ) +#endif + { + *cptr = (char *)memcpy(malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1)); + *alloc = SWIG_NEWOBJ; + } else { + *cptr = cstr; + *alloc = SWIG_OLDOBJ; + } + } else { +#if PY_VERSION_HEX>=0x03000000 +#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + *cptr = PyBytes_AsString(obj); +#else + assert(0); /* Should never reach here with Unicode strings in Python 3 */ +#endif +#else + *cptr = SWIG_Python_str_AsChar(obj); +#endif + } + } + if (psize) *psize = len + 1; +#if PY_VERSION_HEX>=0x03000000 && !defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + Py_XDECREF(obj); +#endif + return SWIG_OK; + } else { +#if defined(SWIG_PYTHON_2_UNICODE) +#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) +#error "Cannot use both SWIG_PYTHON_2_UNICODE and SWIG_PYTHON_STRICT_BYTE_CHAR at once" +#endif +#if PY_VERSION_HEX<0x03000000 + if (PyUnicode_Check(obj)) { + char *cstr; Py_ssize_t len; + if (!alloc && cptr) { + return SWIG_RuntimeError; + } + obj = PyUnicode_AsUTF8String(obj); + if (PyString_AsStringAndSize(obj, &cstr, &len) != -1) { + if (cptr) { + if (alloc) *alloc = SWIG_NEWOBJ; + *cptr = (char *)memcpy(malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1)); + } + if (psize) *psize = len + 1; + + Py_XDECREF(obj); + return SWIG_OK; + } else { + Py_XDECREF(obj); + } + } +#endif +#endif + + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + if (pchar_descriptor) { + void* vptr = 0; + if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { + if (cptr) *cptr = (char *) vptr; + if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0; + if (alloc) *alloc = SWIG_OLDOBJ; + return SWIG_OK; + } + } + } + return SWIG_TypeError; +} + + +SWIGINTERNINLINE PyObject* + SWIG_From_int (int value) +{ + return PyInt_FromLong((long) value); +} + + +#define SWIG_FILE_WITH_INIT +#include "grib_interface.h" + + +#ifndef SWIG_FILE_WITH_INIT +#define NO_IMPORT_ARRAY +#endif +#include "stdio.h" +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include + + +typedef int intp; + +SWIGINTERN intp *new_intp(void){ + return (int *)calloc(1,sizeof(int)); + } +SWIGINTERN void delete_intp(intp *self){ + if (self) free((char*)self); + } + +SWIGINTERN int +SWIG_AsVal_long (PyObject *obj, long* val) +{ +#if PY_VERSION_HEX < 0x03000000 + if (PyInt_Check(obj)) { + if (val) *val = PyInt_AsLong(obj); + return SWIG_OK; + } else +#endif + if (PyLong_Check(obj)) { + long v = PyLong_AsLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_OK; + } else { + PyErr_Clear(); + return SWIG_OverflowError; + } + } +#ifdef SWIG_PYTHON_CAST_MODE + { + int dispatch = 0; + long v = PyInt_AsLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_AddCast(SWIG_OK); + } else { + PyErr_Clear(); + } + if (!dispatch) { + double d; + int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d)); + if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) { + if (val) *val = (long)(d); + return res; + } + } + } +#endif + return SWIG_TypeError; +} + + +SWIGINTERN int +SWIG_AsVal_int (PyObject * obj, int *val) +{ + long v; + int res = SWIG_AsVal_long (obj, &v); + if (SWIG_IsOK(res)) { + if ((v < INT_MIN || v > INT_MAX)) { + return SWIG_OverflowError; + } else { + if (val) *val = (int)(v); + } + } + return res; +} + +SWIGINTERN void intp_assign(intp *self,int value){ + *self = value; + } +SWIGINTERN int intp_value(intp *self){ + return *self; + } +SWIGINTERN int *intp_cast(intp *self){ + return self; + } +SWIGINTERN intp *intp_frompointer(int *t){ + return (intp *) t; + } + +typedef size_t sizetp; + +SWIGINTERN sizetp *new_sizetp(void){ + return (size_t *)calloc(1,sizeof(size_t)); + } +SWIGINTERN void delete_sizetp(sizetp *self){ + if (self) free((char*)self); + } +SWIGINTERN void sizetp_assign(sizetp *self,size_t value){ + *self = value; + } +SWIGINTERN size_t sizetp_value(sizetp *self){ + return *self; + } + + #define SWIG_From_long PyInt_FromLong + + +SWIGINTERNINLINE PyObject* +SWIG_From_unsigned_SS_long (unsigned long value) +{ + return (value > LONG_MAX) ? + PyLong_FromUnsignedLong(value) : PyInt_FromLong((long)(value)); +} + + +#ifdef SWIG_LONG_LONG_AVAILABLE +SWIGINTERNINLINE PyObject* +SWIG_From_unsigned_SS_long_SS_long (unsigned long long value) +{ + return (value > LONG_MAX) ? + PyLong_FromUnsignedLongLong(value) : PyInt_FromLong((long)(value)); +} +#endif + + +SWIGINTERNINLINE PyObject * +SWIG_From_size_t (size_t value) +{ +#ifdef SWIG_LONG_LONG_AVAILABLE + if (sizeof(size_t) <= sizeof(unsigned long)) { +#endif + return SWIG_From_unsigned_SS_long ((unsigned long)(value)); +#ifdef SWIG_LONG_LONG_AVAILABLE + } else { + /* assume sizeof(size_t) <= sizeof(unsigned long long) */ + return SWIG_From_unsigned_SS_long_SS_long ((unsigned long long)(value)); + } +#endif +} + +SWIGINTERN size_t *sizetp_cast(sizetp *self){ + return self; + } +SWIGINTERN sizetp *sizetp_frompointer(size_t *t){ + return (sizetp *) t; + } + +typedef long longp; + +SWIGINTERN longp *new_longp(void){ + return (long *)calloc(1,sizeof(long)); + } +SWIGINTERN void delete_longp(longp *self){ + if (self) free((char*)self); + } +SWIGINTERN void longp_assign(longp *self,long value){ + *self = value; + } +SWIGINTERN long longp_value(longp *self){ + return *self; + } +SWIGINTERN long *longp_cast(longp *self){ + return self; + } +SWIGINTERN longp *longp_frompointer(long *t){ + return (longp *) t; + } + +typedef double doublep; + +SWIGINTERN doublep *new_doublep(void){ + return (double *)calloc(1,sizeof(double)); + } +SWIGINTERN void delete_doublep(doublep *self){ + if (self) free((char*)self); + } +SWIGINTERN void doublep_assign(doublep *self,double value){ + *self = value; + } +SWIGINTERN double doublep_value(doublep *self){ + return *self; + } + + #define SWIG_From_double PyFloat_FromDouble + +SWIGINTERN double *doublep_cast(doublep *self){ + return self; + } +SWIGINTERN doublep *doublep_frompointer(double *t){ + return (doublep *) t; + } + + static double *new_doubleArray(size_t nelements) { + return (double *)calloc(nelements, sizeof(double)); + } + + static void delete_doubleArray(double *ary) { + free((char*)ary); + } + + static double doubleArray_getitem(double *ary, size_t index) { + return ary[index]; + } + static void doubleArray_setitem(double *ary, size_t index, double value) { + ary[index] = value; + } + + + static long *new_longArray(size_t nelements) { + return (long *)calloc(nelements, sizeof(long)); + } + + static void delete_longArray(long *ary) { + free((char*)ary); + } + + static long longArray_getitem(long *ary, size_t index) { + return ary[index]; + } + static void longArray_setitem(long *ary, size_t index, long value) { + ary[index] = value; + } + + + static int *new_intArray(size_t nelements) { + return (int *)calloc(nelements, sizeof(int)); + } + + static void delete_intArray(int *ary) { + free((char*)ary); + } + + static int intArray_getitem(int *ary, size_t index) { + return ary[index]; + } + static void intArray_setitem(int *ary, size_t index, int value) { + ary[index] = value; + } + + + static char* *new_stringArray(size_t nelements) { + return (char* *)calloc(nelements, sizeof(char*)); + } + + static void delete_stringArray(char* *ary) { + free((char*)ary); + } + + static char* stringArray_getitem(char* *ary, size_t index) { + return ary[index]; + } + static void stringArray_setitem(char* *ary, size_t index, char* value) { + ary[index] = value; + } + + +SWIGINTERNINLINE PyObject * +SWIG_FromCharPtr(const char *cptr) +{ + return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0)); +} + + + + + +//void with_numpy() { +// return; +//} +int grib_set_double_ndarray(int* gid, char* key, double* dpin_val, int dpin_val_dim1) { + return grib_c_set_real8_array(gid,key,dpin_val,&dpin_val_dim1); +} +int grib_set_long_ndarray(int* gid, char* key, long* lpin_val, int lpin_val_dim1) { + return grib_c_set_long_array(gid,key,lpin_val,&lpin_val_dim1); +} +int grib_get_double_ndarray(int* gid, char* key, double* dpout_val, int dpout_val_dim1) { + return grib_c_get_real8_array(gid,key,dpout_val,&dpout_val_dim1); +} +int grib_get_long_ndarray(int* gid, char* key, long* lpout_val, int lpout_val_dim1) { + return grib_c_get_long_array(gid,key,lpout_val,&lpout_val_dim1); +} +int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_index_dim1, double* dpout_val, int dpout_val_dim1) { + return grib_c_get_real8_elements(gid,key,ipin_index,dpout_val,&dpout_val_dim1); +} + + +#if NPY_API_VERSION < 0x00000007 +#define NPY_ARRAY_DEFAULT NPY_DEFAULT +#define NPY_ARRAY_FARRAY NPY_FARRAY +#define NPY_FORTRANORDER NPY_FORTRAN +#endif + + +/* Macros to extract array attributes. + */ +#if NPY_API_VERSION < 0x00000007 +#define is_array(a) ((a) && PyArray_Check((PyArrayObject*)a)) +#define array_type(a) (int)(PyArray_TYPE((PyArrayObject*)a)) +#define array_numdims(a) (((PyArrayObject*)a)->nd) +#define array_dimensions(a) (((PyArrayObject*)a)->dimensions) +#define array_size(a,i) (((PyArrayObject*)a)->dimensions[i]) +#define array_strides(a) (((PyArrayObject*)a)->strides) +#define array_stride(a,i) (((PyArrayObject*)a)->strides[i]) +#define array_data(a) (((PyArrayObject*)a)->data) +#define array_descr(a) (((PyArrayObject*)a)->descr) +#define array_flags(a) (((PyArrayObject*)a)->flags) +#define array_clearflags(a,f) (((PyArrayObject*)a)->flags) &= ~f +#define array_enableflags(a,f) (((PyArrayObject*)a)->flags) = f +#define array_is_fortran(a) (PyArray_ISFORTRAN((PyArrayObject*)a)) +#else +#define is_array(a) ((a) && PyArray_Check(a)) +#define array_type(a) PyArray_TYPE((PyArrayObject*)a) +#define array_numdims(a) PyArray_NDIM((PyArrayObject*)a) +#define array_dimensions(a) PyArray_DIMS((PyArrayObject*)a) +#define array_strides(a) PyArray_STRIDES((PyArrayObject*)a) +#define array_stride(a,i) PyArray_STRIDE((PyArrayObject*)a,i) +#define array_size(a,i) PyArray_DIM((PyArrayObject*)a,i) +#define array_data(a) PyArray_DATA((PyArrayObject*)a) +#define array_descr(a) PyArray_DESCR((PyArrayObject*)a) +#define array_flags(a) PyArray_FLAGS((PyArrayObject*)a) +#define array_enableflags(a,f) PyArray_ENABLEFLAGS((PyArrayObject*)a,f) +#define array_clearflags(a,f) PyArray_CLEARFLAGS((PyArrayObject*)a,f) +#define array_is_fortran(a) (PyArray_IS_F_CONTIGUOUS((PyArrayObject*)a)) +#endif +#define array_is_contiguous(a) (PyArray_ISCONTIGUOUS((PyArrayObject*)a)) +#define array_is_native(a) (PyArray_ISNOTSWAPPED((PyArrayObject*)a)) + + + /* Given a PyObject, return a string describing its type. + */ + const char* pytype_string(PyObject* py_obj) + { + if (py_obj == NULL ) return "C NULL value"; + if (py_obj == Py_None ) return "Python None" ; + if (PyCallable_Check(py_obj)) return "callable" ; + if (PyString_Check( py_obj)) return "string" ; + if (PyInt_Check( py_obj)) return "int" ; + if (PyFloat_Check( py_obj)) return "float" ; + if (PyDict_Check( py_obj)) return "dict" ; + if (PyList_Check( py_obj)) return "list" ; + if (PyTuple_Check( py_obj)) return "tuple" ; +#if PY_MAJOR_VERSION < 3 + if (PyFile_Check( py_obj)) return "file" ; + if (PyModule_Check( py_obj)) return "module" ; + if (PyInstance_Check(py_obj)) return "instance" ; +#endif + + return "unknown type"; + } + + /* Given a NumPy typecode, return a string describing the type. + */ + const char* typecode_string(int typecode) + { + static const char* type_names[25] = {"bool", + "byte", + "unsigned byte", + "short", + "unsigned short", + "int", + "unsigned int", + "long", + "unsigned long", + "long long", + "unsigned long long", + "float", + "double", + "long double", + "complex float", + "complex double", + "complex long double", + "object", + "string", + "unicode", + "void", + "ntypes", + "notype", + "char", + "unknown"}; + return typecode < 24 ? type_names[typecode] : type_names[24]; + } + + /* Make sure input has correct numpy type. This now just calls + PyArray_EquivTypenums(). + */ + int type_match(int actual_type, + int desired_type) + { + return PyArray_EquivTypenums(actual_type, desired_type); + } + +#ifdef SWIGPY_USE_CAPSULE + void free_cap(PyObject * cap) + { + void* array = (void*) PyCapsule_GetPointer(cap,SWIGPY_CAPSULE_NAME); + if (array != NULL) free(array); + } +#endif + + + + + /* Given a PyObject pointer, cast it to a PyArrayObject pointer if + * legal. If not, set the python error string appropriately and + * return NULL. + */ + PyArrayObject* obj_to_array_no_conversion(PyObject* input, + int typecode) + { + PyArrayObject* ary = NULL; + if (is_array(input) && (typecode == NPY_NOTYPE || + PyArray_EquivTypenums(array_type(input), typecode))) + { + ary = (PyArrayObject*) input; + } + else if is_array(input) + { + const char* desired_type = typecode_string(typecode); + const char* actual_type = typecode_string(array_type(input)); + PyErr_Format(PyExc_TypeError, + "Array of type '%s' required. Array of type '%s' given", + desired_type, actual_type); + ary = NULL; + } + else + { + const char* desired_type = typecode_string(typecode); + const char* actual_type = pytype_string(input); + PyErr_Format(PyExc_TypeError, + "Array of type '%s' required. A '%s' was given", + desired_type, + actual_type); + ary = NULL; + } + return ary; + } + + /* Convert the given PyObject to a NumPy array with the given + * typecode. On success, return a valid PyArrayObject* with the + * correct type. On failure, the python error string will be set and + * the routine returns NULL. + */ + PyArrayObject* obj_to_array_allow_conversion(PyObject* input, + int typecode, + int* is_new_object) + { + PyArrayObject* ary = NULL; + PyObject* py_obj; + if (is_array(input) && (typecode == NPY_NOTYPE || + PyArray_EquivTypenums(array_type(input),typecode))) + { + ary = (PyArrayObject*) input; + *is_new_object = 0; + } + else + { + py_obj = PyArray_FROMANY(input, typecode, 0, 0, NPY_ARRAY_DEFAULT); + /* If NULL, PyArray_FromObject will have set python error value.*/ + ary = (PyArrayObject*) py_obj; + *is_new_object = 1; + } + return ary; + } + + /* Given a PyArrayObject, check to see if it is contiguous. If so, + * return the input pointer and flag it as not a new object. If it is + * not contiguous, create a new PyArrayObject using the original data, + * flag it as a new object and return the pointer. + */ + PyArrayObject* make_contiguous(PyArrayObject* ary, + int* is_new_object, + int min_dims, + int max_dims) + { + PyArrayObject* result; + if (array_is_contiguous(ary)) + { + result = ary; + *is_new_object = 0; + } + else + { + result = (PyArrayObject*) PyArray_ContiguousFromObject((PyObject*)ary, + array_type(ary), + min_dims, + max_dims); + *is_new_object = 1; + } + return result; + } + + /* Given a PyArrayObject, check to see if it is Fortran-contiguous. + * If so, return the input pointer, but do not flag it as not a new + * object. If it is not Fortran-contiguous, create a new + * PyArrayObject using the original data, flag it as a new object + * and return the pointer. + */ + PyArrayObject* make_fortran(PyArrayObject* ary, + int* is_new_object) + { + PyArrayObject* result; + if (array_is_fortran(ary)) + { + result = ary; + *is_new_object = 0; + } + else + { + Py_INCREF(array_descr(ary)); + result = (PyArrayObject*) PyArray_FromArray(ary, + array_descr(ary), +#if NPY_API_VERSION < 0x00000007 + NPY_FORTRANORDER); +#else + NPY_ARRAY_F_CONTIGUOUS); +#endif + *is_new_object = 1; + } + return result; + } + + /* Convert a given PyObject to a contiguous PyArrayObject of the + * specified type. If the input object is not a contiguous + * PyArrayObject, a new one will be created and the new object flag + * will be set. + */ + PyArrayObject* obj_to_array_contiguous_allow_conversion(PyObject* input, + int typecode, + int* is_new_object) + { + int is_new1 = 0; + int is_new2 = 0; + PyArrayObject* ary2; + PyArrayObject* ary1 = obj_to_array_allow_conversion(input, + typecode, + &is_new1); + if (ary1) + { + ary2 = make_contiguous(ary1, &is_new2, 0, 0); + if ( is_new1 && is_new2) + { + Py_DECREF(ary1); + } + ary1 = ary2; + } + *is_new_object = is_new1 || is_new2; + return ary1; + } + + /* Convert a given PyObject to a Fortran-ordered PyArrayObject of the + * specified type. If the input object is not a Fortran-ordered + * PyArrayObject, a new one will be created and the new object flag + * will be set. + */ + PyArrayObject* obj_to_array_fortran_allow_conversion(PyObject* input, + int typecode, + int* is_new_object) + { + int is_new1 = 0; + int is_new2 = 0; + PyArrayObject* ary2; + PyArrayObject* ary1 = obj_to_array_allow_conversion(input, + typecode, + &is_new1); + if (ary1) + { + ary2 = make_fortran(ary1, &is_new2); + if (is_new1 && is_new2) + { + Py_DECREF(ary1); + } + ary1 = ary2; + } + *is_new_object = is_new1 || is_new2; + return ary1; + } + + + /* Test whether a python object is contiguous. If array is + * contiguous, return 1. Otherwise, set the python error string and + * return 0. + */ + int require_contiguous(PyArrayObject* ary) + { + int contiguous = 1; + if (!array_is_contiguous(ary)) + { + PyErr_SetString(PyExc_TypeError, + "Array must be contiguous. A non-contiguous array was given"); + contiguous = 0; + } + return contiguous; + } + + /* Test whether a python object is (C_ or F_) contiguous. If array is + * contiguous, return 1. Otherwise, set the python error string and + * return 0. + */ + int require_c_or_f_contiguous(PyArrayObject* ary) + { + int contiguous = 1; + if (!(array_is_contiguous(ary) || array_is_fortran(ary))) + { + PyErr_SetString(PyExc_TypeError, + "Array must be contiguous (C_ or F_). A non-contiguous array was given"); + contiguous = 0; + } + return contiguous; + } + + /* Require that a numpy array is not byte-swapped. If the array is + * not byte-swapped, return 1. Otherwise, set the python error string + * and return 0. + */ + int require_native(PyArrayObject* ary) + { + int native = 1; + if (!array_is_native(ary)) + { + PyErr_SetString(PyExc_TypeError, + "Array must have native byteorder. " + "A byte-swapped array was given"); + native = 0; + } + return native; + } + + /* Require the given PyArrayObject to have a specified number of + * dimensions. If the array has the specified number of dimensions, + * return 1. Otherwise, set the python error string and return 0. + */ + int require_dimensions(PyArrayObject* ary, + int exact_dimensions) + { + int success = 1; + if (array_numdims(ary) != exact_dimensions) + { + PyErr_Format(PyExc_TypeError, + "Array must have %d dimensions. Given array has %d dimensions", + exact_dimensions, + array_numdims(ary)); + success = 0; + } + return success; + } + + /* Require the given PyArrayObject to have one of a list of specified + * number of dimensions. If the array has one of the specified number + * of dimensions, return 1. Otherwise, set the python error string + * and return 0. + */ + int require_dimensions_n(PyArrayObject* ary, + int* exact_dimensions, + int n) + { + int success = 0; + int i; + char dims_str[255] = ""; + char s[255]; + for (i = 0; i < n && !success; i++) + { + if (array_numdims(ary) == exact_dimensions[i]) + { + success = 1; + } + } + if (!success) + { + for (i = 0; i < n-1; i++) + { + sprintf(s, "%d, ", exact_dimensions[i]); + strcat(dims_str,s); + } + sprintf(s, " or %d", exact_dimensions[n-1]); + strcat(dims_str,s); + PyErr_Format(PyExc_TypeError, + "Array must have %s dimensions. Given array has %d dimensions", + dims_str, + array_numdims(ary)); + } + return success; + } + + /* Require the given PyArrayObject to have a specified shape. If the + * array has the specified shape, return 1. Otherwise, set the python + * error string and return 0. + */ + int require_size(PyArrayObject* ary, + npy_intp* size, + int n) + { + int i; + int success = 1; + size_t len; + char desired_dims[255] = "["; + char s[255]; + char actual_dims[255] = "["; + for(i=0; i < n;i++) + { + if (size[i] != -1 && size[i] != array_size(ary,i)) + { + success = 0; + } + } + if (!success) + { + for (i = 0; i < n; i++) + { + if (size[i] == -1) + { + sprintf(s, "*,"); + } + else + { + sprintf(s, "%ld,", (long int)size[i]); + } + strcat(desired_dims,s); + } + len = strlen(desired_dims); + desired_dims[len-1] = ']'; + for (i = 0; i < n; i++) + { + sprintf(s, "%ld,", (long int)array_size(ary,i)); + strcat(actual_dims,s); + } + len = strlen(actual_dims); + actual_dims[len-1] = ']'; + PyErr_Format(PyExc_TypeError, + "Array must have shape of %s. Given array has shape of %s", + desired_dims, + actual_dims); + } + return success; + } + + /* Require the given PyArrayObject to to be Fortran ordered. If the + * the PyArrayObject is already Fortran ordered, do nothing. Else, + * set the Fortran ordering flag and recompute the strides. + */ + int require_fortran(PyArrayObject* ary) + { + int success = 1; + int nd = array_numdims(ary); + int i; + npy_intp * strides = array_strides(ary); + if (array_is_fortran(ary)) return success; + int n_non_one = 0; + /* Set the Fortran ordered flag */ + const npy_intp *dims = array_dimensions(ary); + for (i=0; i < nd; ++i) + n_non_one += (dims[i] != 1) ? 1 : 0; + if (n_non_one > 1) + array_clearflags(ary,NPY_ARRAY_CARRAY); + array_enableflags(ary,NPY_ARRAY_FARRAY); + /* Recompute the strides */ + strides[0] = strides[nd-1]; + for (i=1; i < nd; ++i) + strides[i] = strides[i-1] * array_size(ary,i-1); + return success; + } + + + +#ifdef __cplusplus +extern "C" { +#endif +SWIGINTERN PyObject *_wrap_cdata(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + void *arg1 = (void *) 0 ; + size_t arg2 = (size_t) 1 ; + int res1 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + SWIGCDATA result; + + if (!PyArg_ParseTuple(args,(char *)"O|O:cdata",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1), 0, 0); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "cdata" "', argument " "1"" of type '" "void *""'"); + } + if (obj1) { + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "cdata" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + } + result = cdata_void(arg1,arg2); + resultobj = SWIG_FromCharPtrAndSize((&result)->data,(&result)->len); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_memmove(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + void *arg1 = (void *) 0 ; + void *arg2 = (void *) 0 ; + size_t arg3 ; + int res1 ; + int res2 ; + char *buf2 = 0 ; + size_t size2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:memmove",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1), 0, 0); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "memmove" "', argument " "1"" of type '" "void *""'"); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, &size2, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "memmove" "', argument " "2"" of type '" "void const *""'"); + } + arg2 = (void *)(buf2); + arg3 = (size_t)(size2); + memmove(arg1,(void const *)arg2,arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_intp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_intp")) SWIG_fail; + result = (intp *)new_intp(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_intp, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_intp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *arg1 = (intp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_intp",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_intp, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_intp" "', argument " "1"" of type '" "intp *""'"); + } + arg1 = (intp *)(argp1); + delete_intp(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intp_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *arg1 = (intp *) 0 ; + int arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:intp_assign",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_intp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intp_assign" "', argument " "1"" of type '" "intp *""'"); + } + arg1 = (intp *)(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intp_assign" "', argument " "2"" of type '" "int""'"); + } + arg2 = (int)(val2); + intp_assign(arg1,arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intp_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *arg1 = (intp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:intp_value",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_intp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intp_value" "', argument " "1"" of type '" "intp *""'"); + } + arg1 = (intp *)(argp1); + result = (int)intp_value(arg1); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intp_cast(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *arg1 = (intp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:intp_cast",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_intp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intp_cast" "', argument " "1"" of type '" "intp *""'"); + } + arg1 = (intp *)(argp1); + result = (int *)intp_cast(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intp_frompointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + intp *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:intp_frompointer",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intp_frompointer" "', argument " "1"" of type '" "int *""'"); + } + arg1 = (int *)(argp1); + result = (intp *)intp_frompointer(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_intp, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *intp_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_intp, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_new_sizetp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + sizetp *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_sizetp")) SWIG_fail; + result = (sizetp *)new_sizetp(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_sizetp, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_sizetp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + sizetp *arg1 = (sizetp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_sizetp",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_sizetp, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_sizetp" "', argument " "1"" of type '" "sizetp *""'"); + } + arg1 = (sizetp *)(argp1); + delete_sizetp(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_sizetp_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + sizetp *arg1 = (sizetp *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:sizetp_assign",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_sizetp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "sizetp_assign" "', argument " "1"" of type '" "sizetp *""'"); + } + arg1 = (sizetp *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "sizetp_assign" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + sizetp_assign(arg1,arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_sizetp_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + sizetp *arg1 = (sizetp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + size_t result; + + if (!PyArg_ParseTuple(args,(char *)"O:sizetp_value",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_sizetp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "sizetp_value" "', argument " "1"" of type '" "sizetp *""'"); + } + arg1 = (sizetp *)(argp1); + result = sizetp_value(arg1); + resultobj = SWIG_From_size_t((size_t)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_sizetp_cast(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + sizetp *arg1 = (sizetp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + size_t *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:sizetp_cast",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_sizetp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "sizetp_cast" "', argument " "1"" of type '" "sizetp *""'"); + } + arg1 = (sizetp *)(argp1); + result = (size_t *)sizetp_cast(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_size_t, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_sizetp_frompointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + size_t *arg1 = (size_t *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + sizetp *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:sizetp_frompointer",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_size_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "sizetp_frompointer" "', argument " "1"" of type '" "size_t *""'"); + } + arg1 = (size_t *)(argp1); + result = (sizetp *)sizetp_frompointer(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_sizetp, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *sizetp_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_sizetp, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_new_longp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_longp")) SWIG_fail; + result = (longp *)new_longp(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_longp, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_longp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *arg1 = (longp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_longp",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_longp, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_longp" "', argument " "1"" of type '" "longp *""'"); + } + arg1 = (longp *)(argp1); + delete_longp(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longp_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *arg1 = (longp *) 0 ; + long arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + long val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:longp_assign",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_longp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longp_assign" "', argument " "1"" of type '" "longp *""'"); + } + arg1 = (longp *)(argp1); + ecode2 = SWIG_AsVal_long(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "longp_assign" "', argument " "2"" of type '" "long""'"); + } + arg2 = (long)(val2); + longp_assign(arg1,arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longp_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *arg1 = (longp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + long result; + + if (!PyArg_ParseTuple(args,(char *)"O:longp_value",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_longp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longp_value" "', argument " "1"" of type '" "longp *""'"); + } + arg1 = (longp *)(argp1); + result = (long)longp_value(arg1); + resultobj = SWIG_From_long((long)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longp_cast(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *arg1 = (longp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + long *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:longp_cast",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_longp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longp_cast" "', argument " "1"" of type '" "longp *""'"); + } + arg1 = (longp *)(argp1); + result = (long *)longp_cast(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_long, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longp_frompointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long *arg1 = (long *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + longp *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:longp_frompointer",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longp_frompointer" "', argument " "1"" of type '" "long *""'"); + } + arg1 = (long *)(argp1); + result = (longp *)longp_frompointer(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_longp, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *longp_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_longp, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_new_doublep(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_doublep")) SWIG_fail; + result = (doublep *)new_doublep(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_doublep, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_doublep(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *arg1 = (doublep *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_doublep",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_doublep, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_doublep" "', argument " "1"" of type '" "doublep *""'"); + } + arg1 = (doublep *)(argp1); + delete_doublep(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doublep_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *arg1 = (doublep *) 0 ; + double arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + double val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:doublep_assign",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_doublep, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doublep_assign" "', argument " "1"" of type '" "doublep *""'"); + } + arg1 = (doublep *)(argp1); + ecode2 = SWIG_AsVal_double(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "doublep_assign" "', argument " "2"" of type '" "double""'"); + } + arg2 = (double)(val2); + doublep_assign(arg1,arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doublep_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *arg1 = (doublep *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + double result; + + if (!PyArg_ParseTuple(args,(char *)"O:doublep_value",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_doublep, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doublep_value" "', argument " "1"" of type '" "doublep *""'"); + } + arg1 = (doublep *)(argp1); + result = (double)doublep_value(arg1); + resultobj = SWIG_From_double((double)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doublep_cast(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *arg1 = (doublep *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + double *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:doublep_cast",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_doublep, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doublep_cast" "', argument " "1"" of type '" "doublep *""'"); + } + arg1 = (doublep *)(argp1); + result = (double *)doublep_cast(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_double, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doublep_frompointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + double *arg1 = (double *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + doublep *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:doublep_frompointer",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doublep_frompointer" "', argument " "1"" of type '" "double *""'"); + } + arg1 = (double *)(argp1); + result = (doublep *)doublep_frompointer(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_doublep, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *doublep_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_doublep, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_new_doubleArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + size_t arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + double *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_doubleArray",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_doubleArray" "', argument " "1"" of type '" "size_t""'"); + } + arg1 = (size_t)(val1); + result = (double *)new_doubleArray(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_double, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_doubleArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + double *arg1 = (double *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_doubleArray",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_doubleArray" "', argument " "1"" of type '" "double *""'"); + } + arg1 = (double *)(argp1); + delete_doubleArray(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doubleArray_getitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + double *arg1 = (double *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + double result; + + if (!PyArg_ParseTuple(args,(char *)"OO:doubleArray_getitem",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doubleArray_getitem" "', argument " "1"" of type '" "double *""'"); + } + arg1 = (double *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "doubleArray_getitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + result = (double)doubleArray_getitem(arg1,arg2); + resultobj = SWIG_From_double((double)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doubleArray_setitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + double *arg1 = (double *) 0 ; + size_t arg2 ; + double arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + double val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:doubleArray_setitem",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doubleArray_setitem" "', argument " "1"" of type '" "double *""'"); + } + arg1 = (double *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "doubleArray_setitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + ecode3 = SWIG_AsVal_double(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "doubleArray_setitem" "', argument " "3"" of type '" "double""'"); + } + arg3 = (double)(val3); + doubleArray_setitem(arg1,arg2,arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_longArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + size_t arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + long *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_longArray",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_longArray" "', argument " "1"" of type '" "size_t""'"); + } + arg1 = (size_t)(val1); + result = (long *)new_longArray(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_long, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_longArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long *arg1 = (long *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_longArray",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_longArray" "', argument " "1"" of type '" "long *""'"); + } + arg1 = (long *)(argp1); + delete_longArray(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longArray_getitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long *arg1 = (long *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + long result; + + if (!PyArg_ParseTuple(args,(char *)"OO:longArray_getitem",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longArray_getitem" "', argument " "1"" of type '" "long *""'"); + } + arg1 = (long *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "longArray_getitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + result = (long)longArray_getitem(arg1,arg2); + resultobj = SWIG_From_long((long)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longArray_setitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long *arg1 = (long *) 0 ; + size_t arg2 ; + long arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + long val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:longArray_setitem",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longArray_setitem" "', argument " "1"" of type '" "long *""'"); + } + arg1 = (long *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "longArray_setitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + ecode3 = SWIG_AsVal_long(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "longArray_setitem" "', argument " "3"" of type '" "long""'"); + } + arg3 = (long)(val3); + longArray_setitem(arg1,arg2,arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_intArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + size_t arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + int *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_intArray",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_intArray" "', argument " "1"" of type '" "size_t""'"); + } + arg1 = (size_t)(val1); + result = (int *)new_intArray(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_intArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_intArray",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_intArray" "', argument " "1"" of type '" "int *""'"); + } + arg1 = (int *)(argp1); + delete_intArray(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intArray_getitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:intArray_getitem",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intArray_getitem" "', argument " "1"" of type '" "int *""'"); + } + arg1 = (int *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intArray_getitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + result = (int)intArray_getitem(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intArray_setitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + size_t arg2 ; + int arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:intArray_setitem",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intArray_setitem" "', argument " "1"" of type '" "int *""'"); + } + arg1 = (int *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intArray_setitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intArray_setitem" "', argument " "3"" of type '" "int""'"); + } + arg3 = (int)(val3); + intArray_setitem(arg1,arg2,arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_stringArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + size_t arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + char **result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_stringArray",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_stringArray" "', argument " "1"" of type '" "size_t""'"); + } + arg1 = (size_t)(val1); + result = (char **)new_stringArray(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_p_char, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_stringArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + char **arg1 = (char **) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_stringArray",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_char, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_stringArray" "', argument " "1"" of type '" "char **""'"); + } + arg1 = (char **)(argp1); + delete_stringArray(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_stringArray_getitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + char **arg1 = (char **) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + char *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:stringArray_getitem",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_char, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "stringArray_getitem" "', argument " "1"" of type '" "char **""'"); + } + arg1 = (char **)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "stringArray_getitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + result = (char *)stringArray_getitem(arg1,arg2); + resultobj = SWIG_FromCharPtr((const char *)result); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_stringArray_setitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + char **arg1 = (char **) 0 ; + size_t arg2 ; + char *arg3 = (char *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:stringArray_setitem",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_char, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "stringArray_setitem" "', argument " "1"" of type '" "char **""'"); + } + arg1 = (char **)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "stringArray_setitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "stringArray_setitem" "', argument " "3"" of type '" "char *""'"); + } + arg3 = (char *)(buf3); + stringArray_setitem(arg1,arg2,arg3); + resultobj = SWIG_Py_Void(); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return resultobj; +fail: + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + FILE *arg1 = (FILE *) 0 ; + int arg2 ; + char *arg3 = (char *) 0 ; + int *arg4 = (int *) 0 ; + int arg5 ; + int val2 ; + int ecode2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + int temp4 ; + int res4 = 0 ; + int val5 ; + int ecode5 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOO:grib_c_new_from_file",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail; + { + int fileDescriptor = PyObject_AsFileDescriptor(obj0); + /*printf("swig.i fileDescriptor=%d\n", fileDescriptor);*/ + if(fileDescriptor >= 0) { + /* Convert file descriptor to a FILE pointer */ + arg1 = fdopen(fileDescriptor,"rb"); // needs to be rb+ (or wb) for write + } + else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "grib_c_new_from_file" "', argument " "2"" of type '" "int""'"); + } + arg2 = (int)(val2); + res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_new_from_file" "', argument " "3"" of type '" "char *""'"); + } + arg3 = (char *)(buf3); + if (!(SWIG_IsOK((res4 = SWIG_ConvertPtr(obj3,SWIG_as_voidptrptr(&arg4),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj3, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_file" "', argument " "4"" of type '" "int""'"); + } + temp4 = (int)(val); + arg4 = &temp4; + res4 = SWIG_AddTmpMask(ecode); + } + ecode5 = SWIG_AsVal_int(obj4, &val5); + if (!SWIG_IsOK(ecode5)) { + SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "grib_c_new_from_file" "', argument " "5"" of type '" "int""'"); + } + arg5 = (int)(val5); + result = (int)grib_c_new_from_file(arg1,arg2,arg3,arg4,arg5); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res4)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); + } else { + int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); + } + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return resultobj; +fail: + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_any_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + FILE *arg1 = (FILE *) 0 ; + int arg2 ; + int *arg3 = (int *) 0 ; + int val2 ; + int ecode2 = 0 ; + int temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_new_any_from_file",&obj0,&obj1,&obj2)) SWIG_fail; + { + int fileDescriptor = PyObject_AsFileDescriptor(obj0); + /*printf("swig.i fileDescriptor=%d\n", fileDescriptor);*/ + if(fileDescriptor >= 0) { + /* Convert file descriptor to a FILE pointer */ + arg1 = fdopen(fileDescriptor,"rb"); // needs to be rb+ (or wb) for write + } + else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "grib_c_new_any_from_file" "', argument " "2"" of type '" "int""'"); + } + arg2 = (int)(val2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_any_from_file" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_new_any_from_file(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_bufr_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + FILE *arg1 = (FILE *) 0 ; + int arg2 ; + char *arg3 = (char *) 0 ; + int arg4 ; + int *arg5 = (int *) 0 ; + int val2 ; + int ecode2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + int val4 ; + int ecode4 = 0 ; + int temp5 ; + int res5 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOO:grib_c_new_bufr_from_file",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail; + { + int fileDescriptor = PyObject_AsFileDescriptor(obj0); + /*printf("swig.i fileDescriptor=%d\n", fileDescriptor);*/ + if(fileDescriptor >= 0) { + /* Convert file descriptor to a FILE pointer */ + arg1 = fdopen(fileDescriptor,"rb"); // needs to be rb+ (or wb) for write + } + else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "grib_c_new_bufr_from_file" "', argument " "2"" of type '" "int""'"); + } + arg2 = (int)(val2); + res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_new_bufr_from_file" "', argument " "3"" of type '" "char *""'"); + } + arg3 = (char *)(buf3); + ecode4 = SWIG_AsVal_int(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "grib_c_new_bufr_from_file" "', argument " "4"" of type '" "int""'"); + } + arg4 = (int)(val4); + if (!(SWIG_IsOK((res5 = SWIG_ConvertPtr(obj4,SWIG_as_voidptrptr(&arg5),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj4, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_bufr_from_file" "', argument " "5"" of type '" "int""'"); + } + temp5 = (int)(val); + arg5 = &temp5; + res5 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_new_bufr_from_file(arg1,arg2,arg3,arg4,arg5); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res5)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg5))); + } else { + int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_int, new_flags)); + } + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return resultobj; +fail: + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_gts_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + FILE *arg1 = (FILE *) 0 ; + int arg2 ; + int *arg3 = (int *) 0 ; + int val2 ; + int ecode2 = 0 ; + int temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_new_gts_from_file",&obj0,&obj1,&obj2)) SWIG_fail; + { + int fileDescriptor = PyObject_AsFileDescriptor(obj0); + /*printf("swig.i fileDescriptor=%d\n", fileDescriptor);*/ + if(fileDescriptor >= 0) { + /* Convert file descriptor to a FILE pointer */ + arg1 = fdopen(fileDescriptor,"rb"); // needs to be rb+ (or wb) for write + } + else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "grib_c_new_gts_from_file" "', argument " "2"" of type '" "int""'"); + } + arg2 = (int)(val2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_gts_from_file" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_new_gts_from_file(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_metar_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + FILE *arg1 = (FILE *) 0 ; + int arg2 ; + int *arg3 = (int *) 0 ; + int val2 ; + int ecode2 = 0 ; + int temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_new_metar_from_file",&obj0,&obj1,&obj2)) SWIG_fail; + { + int fileDescriptor = PyObject_AsFileDescriptor(obj0); + /*printf("swig.i fileDescriptor=%d\n", fileDescriptor);*/ + if(fileDescriptor >= 0) { + /* Convert file descriptor to a FILE pointer */ + arg1 = fdopen(fileDescriptor,"rb"); // needs to be rb+ (or wb) for write + } + else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "grib_c_new_metar_from_file" "', argument " "2"" of type '" "int""'"); + } + arg2 = (int)(val2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_metar_from_file" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_new_metar_from_file(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_iterator_new(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = SWIG_TMPOBJ ; + int temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_iterator_new",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_iterator_new" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_iterator_new" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_iterator_new(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_new(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + char *arg3 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = SWIG_TMPOBJ ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_keys_iterator_new",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_new" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res3 = SWIG_AsCharPtrAndSize(obj1, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_keys_iterator_new" "', argument " "3"" of type '" "char *""'"); + } + arg3 = (char *)(buf3); + result = (int)grib_c_keys_iterator_new(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_codes_c_bufr_keys_iterator_new(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"O:codes_c_bufr_keys_iterator_new",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "codes_c_bufr_keys_iterator_new" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)codes_c_bufr_keys_iterator_new(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_grib_new_from_samples(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_grib_new_from_samples",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_grib_new_from_samples" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_grib_new_from_samples" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_grib_new_from_samples(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res1)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1))); + } else { + int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags)); + } + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_bufr_new_from_samples(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_bufr_new_from_samples",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_bufr_new_from_samples" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_bufr_new_from_samples" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_bufr_new_from_samples(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res1)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1))); + } else { + int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags)); + } + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_new_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int res1 ; + char *buf1 = 0 ; + int alloc1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_index_new_from_file",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "grib_c_index_new_from_file" "', argument " "1"" of type '" "char *""'"); + } + arg1 = (char *)(buf1); + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_new_from_file" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_index_new_from_file(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_add_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_index_add_file",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_add_file" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_add_file" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_index_add_file(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_from_index(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_new_from_index",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_index" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_index" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_new_from_index(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_write(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_index_write",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_write" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_write" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_index_write(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_read(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + char *arg1 = (char *) 0 ; + int *arg2 = (int *) 0 ; + int res1 ; + char *buf1 = 0 ; + int alloc1 = 0 ; + int temp2 ; + int res2 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_index_read",&obj0)) SWIG_fail; + res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "grib_c_index_read" "', argument " "1"" of type '" "char *""'"); + } + arg1 = (char *)(buf1); + result = (int)grib_c_index_read(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + return resultobj; +fail: + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_from_message(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + size_t *arg3 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + size_t temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_new_from_message",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_message" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_new_from_message" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_size_t,0))))) { + size_t val; + int ecode = SWIG_AsVal_size_t(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_message" "', argument " "3"" of type '" "size_t""'"); + } + temp3 = (size_t)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_new_from_message(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res1)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1))); + } else { + int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags)); + } + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_count_in_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + FILE *arg1 = (FILE *) 0 ; + int *arg2 = (int *) 0 ; + int temp2 ; + int res2 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_count_in_file",&obj0)) SWIG_fail; + { + int fileDescriptor = PyObject_AsFileDescriptor(obj0); + /*printf("swig.i fileDescriptor=%d\n", fileDescriptor);*/ + if(fileDescriptor >= 0) { + /* Convert file descriptor to a FILE pointer */ + arg1 = fdopen(fileDescriptor,"rb"); // needs to be rb+ (or wb) for write + } + else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + result = (int)grib_c_count_in_file(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_release(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_release",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_release" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_release(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_write(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + FILE *arg2 = (FILE *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_write",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_write" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + { + int fileDescriptor = PyObject_AsFileDescriptor(obj1); + if(fileDescriptor >= 0) { + /* Convert file descriptor to a FILE pointer */ + arg2 = fdopen(fileDescriptor,"wb"); + } + else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + result = (int)grib_c_write(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_size_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_size_long",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_size_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_size_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_size_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_long, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_string_length(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + size_t *arg3 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + size_t temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_string_length",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_string_length" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_string_length" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_string_length(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_size_t((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_size_t, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_clone",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_clone" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_clone" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_clone(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_copy_namespace(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_copy_namespace",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_copy_namespace" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_copy_namespace" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_copy_namespace" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_copy_namespace(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_message_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + size_t *arg2 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + size_t temp2 ; + int res2 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_get_message_size",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_message_size" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_get_message_size(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_size_t((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_size_t, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_message_offset(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + size_t *arg2 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + size_t temp2 ; + int res2 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_get_message_offset",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_message_offset" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_get_message_offset(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_size_t((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_size_t, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_native_type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_native_type",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_native_type" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_native_type" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_native_type(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_new(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = SWIG_TMPOBJ ; + int result; + + arg1 = &temp1; + if (!PyArg_ParseTuple(args,(char *)":grib_c_multi_new")) SWIG_fail; + result = (int)grib_c_multi_new(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res1)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1))); + } else { + int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_support_on(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_multi_support_on")) SWIG_fail; + result = (int)grib_c_multi_support_on(); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_write(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + FILE *arg2 = (FILE *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_multi_write",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_write" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + { + int fileDescriptor = PyObject_AsFileDescriptor(obj1); + if(fileDescriptor >= 0) { + /* Convert file descriptor to a FILE pointer */ + arg2 = fdopen(fileDescriptor,"wb"); + } + else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + result = (int)grib_c_multi_write(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_support_off(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_multi_support_off")) SWIG_fail; + result = (int)grib_c_multi_support_off(); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_release(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_multi_release",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_release" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_multi_release(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + int temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_multi_append",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_append" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_append" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_append" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_multi_append(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_gribex_mode_on(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_gribex_mode_on")) SWIG_fail; + result = (int)grib_c_gribex_mode_on(); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_gribex_mode_off(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_gribex_mode_off")) SWIG_fail; + result = (int)grib_c_gribex_mode_off(); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_next(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_keys_iterator_next",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_next" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_keys_iterator_next(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_codes_c_bufr_keys_iterator_next(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:codes_c_bufr_keys_iterator_next",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "codes_c_bufr_keys_iterator_next" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)codes_c_bufr_keys_iterator_next(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_delete(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_keys_iterator_delete",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_delete" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_keys_iterator_delete(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_codes_c_bufr_keys_iterator_delete(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:codes_c_bufr_keys_iterator_delete",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "codes_c_bufr_keys_iterator_delete" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)codes_c_bufr_keys_iterator_delete(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_computed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_computed",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_computed" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_computed(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_coded(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_coded",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_coded" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_coded(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_edition_specific(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_edition_specific",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_edition_specific" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_edition_specific(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_duplicates(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_duplicates",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_duplicates" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_duplicates(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_read_only(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_read_only",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_read_only" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_read_only(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_function(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_function",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_function" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_function(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_rewind(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_keys_iterator_rewind",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_rewind" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_keys_iterator_rewind(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_codes_c_bufr_keys_iterator_rewind(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:codes_c_bufr_keys_iterator_rewind",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "codes_c_bufr_keys_iterator_rewind" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)codes_c_bufr_keys_iterator_rewind(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_bufr_copy_data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_bufr_copy_data",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_bufr_copy_data" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_bufr_copy_data" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_bufr_copy_data(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_get_name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + int temp1 ; + int res1 = 0 ; + char temp2[1024+1] ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg2 = (char *) temp2; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_keys_iterator_get_name",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_get_name" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + ecode3 = SWIG_AsVal_int(obj1, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "grib_c_keys_iterator_get_name" "', argument " "3"" of type '" "int""'"); + } + arg3 = (int)(val3); + result = (int)grib_c_keys_iterator_get_name(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + arg2[1024] = 0; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg2)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_codes_c_bufr_keys_iterator_get_name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + int temp1 ; + int res1 = 0 ; + char temp2[1024+1] ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg2 = (char *) temp2; + if (!PyArg_ParseTuple(args,(char *)"OO:codes_c_bufr_keys_iterator_get_name",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "codes_c_bufr_keys_iterator_get_name" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + ecode3 = SWIG_AsVal_int(obj1, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "codes_c_bufr_keys_iterator_get_name" "', argument " "3"" of type '" "int""'"); + } + arg3 = (int)(val3); + result = (int)codes_c_bufr_keys_iterator_get_name(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + arg2[1024] = 0; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg2)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_get_size_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_index_get_size_long",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_size_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_get_size_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_index_get_size_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_long, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_get_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_index_get_long",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_get_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_index_get_long" "', argument " "3"" of type '" "long *""'"); + } + arg3 = (long *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_index_get_long" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_index_get_long(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_get_real8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_index_get_real8",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_real8" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_get_real8" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_index_get_real8" "', argument " "3"" of type '" "double *""'"); + } + arg3 = (double *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_index_get_real8" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_index_get_real8(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_get_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int *arg4 = (int *) 0 ; + int *arg5 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + char temp3[1024*1024+1] ; + int temp4 ; + int res4 = 0 ; + int temp5 ; + int res5 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + arg3 = (char *) temp3; + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_index_get_string",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_get_string" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res4 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg4),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_string" "', argument " "4"" of type '" "int""'"); + } + temp4 = (int)(val); + arg4 = &temp4; + res4 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res5 = SWIG_ConvertPtr(obj3,SWIG_as_voidptrptr(&arg5),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj3, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_string" "', argument " "5"" of type '" "int""'"); + } + temp5 = (int)(val); + arg5 = &temp5; + res5 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_index_get_string(arg1,arg2,arg3,arg4,arg5); + resultobj = SWIG_From_int((int)(result)); + arg3[1024*1024] = 0; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg3)); + if (SWIG_IsTmpObj(res5)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg5))); + } else { + int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_select_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_index_select_long",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_select_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_long,0))))) { + long val; + int ecode = SWIG_AsVal_long(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_long" "', argument " "3"" of type '" "long""'"); + } + temp3 = (long)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_index_select_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_select_real8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + double temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_index_select_real8",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_real8" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_select_real8" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_real8" "', argument " "3"" of type '" "double""'"); + } + temp3 = (double)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_index_select_real8(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_select_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_index_select_string",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_select_string" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_index_select_string" "', argument " "3"" of type '" "char *""'"); + } + arg3 = (char *)(buf3); + result = (int)grib_c_index_select_string(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_release(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_index_release",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_release" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_index_release(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_iterator_delete(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_iterator_delete",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_iterator_delete" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_iterator_delete(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_iterator_next(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + double *arg2 = (double *) 0 ; + double *arg3 = (double *) 0 ; + double *arg4 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + double temp2 ; + int res2 = SWIG_TMPOBJ ; + double temp3 ; + int res3 = SWIG_TMPOBJ ; + double temp4 ; + int res4 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; + arg3 = &temp3; + arg4 = &temp4; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_iterator_next",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_iterator_next" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_iterator_next(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res4)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg4))); + } else { + int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + size_t *arg4 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + size_t n3 ; + char *buff3 = 0 ; + size_t size3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_get_string",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_string" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_AsVal_size_t (obj2, &n3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_get_string" "', argument " "3"" of type '" "(char* string_val, size_t* string_size)""'"); + } + buff3= (char *)calloc(n3+1, sizeof(char)); + arg3 = (char *)(buff3); + size3 = (size_t)(n3); + arg4 = &size3; + result = (int)grib_c_get_string(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtrAndSize(arg3,*arg4)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (buff3) free((char*)buff3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (buff3) free((char*)buff3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_string_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + char **arg3 = (char **) 0 ; + size_t *arg4 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_get_string_array",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_string_array" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_string_array" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_p_char, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_get_string_array" "', argument " "3"" of type '" "char **""'"); + } + arg3 = (char **)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_size_t, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_get_string_array" "', argument " "4"" of type '" "size_t *""'"); + } + arg4 = (size_t *)(argp4); + result = (int)grib_c_get_string_array(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + int val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_set_string",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_string" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_set_string" "', argument " "3"" of type '" "char *""'"); + } + arg3 = (char *)(buf3); + ecode4 = SWIG_AsVal_int(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "grib_c_set_string" "', argument " "4"" of type '" "int""'"); + } + arg4 = (int)(val4); + result = (int)grib_c_set_string(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_long",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_long, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_set_long",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_long,0))))) { + long val; + int ecode = SWIG_AsVal_long(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_long" "', argument " "3"" of type '" "long""'"); + } + temp3 = (long)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_set_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_double(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + double temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_double",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_double" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_double" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_double(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_double(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + double temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_set_double",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_double" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_double" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_double" "', argument " "3"" of type '" "double""'"); + } + temp3 = (double)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_set_double(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_real8_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_set_real8_array",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_real8_array" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_real8_array" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_set_real8_array" "', argument " "3"" of type '" "double *""'"); + } + arg3 = (double *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_set_real8_array" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_set_real8_array(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_real8_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_get_real8_array",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_real8_array" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_real8_array" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_get_real8_array" "', argument " "3"" of type '" "double *""'"); + } + arg3 = (double *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_get_real8_array" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_get_real8_array(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_long_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_get_long_array",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_long_array" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_long_array" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_get_long_array" "', argument " "3"" of type '" "long *""'"); + } + arg3 = (long *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_get_long_array" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_get_long_array(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_long_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_set_long_array",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_long_array" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_long_array" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_set_long_array" "', argument " "3"" of type '" "long *""'"); + } + arg3 = (long *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_set_long_array" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_set_long_array(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_real8_element(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + double *arg4 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = 0 ; + double temp4 ; + int res4 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + arg4 = &temp4; + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_get_real8_element",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_real8_element" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_real8_element" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_real8_element" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_get_real8_element(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res4)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg4))); + } else { + int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_real8_elements(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + double *arg4 = (double *) 0 ; + int *arg5 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + void *argp5 = 0 ; + int res5 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOO:grib_c_get_real8_elements",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_real8_elements" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_real8_elements" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_get_real8_elements" "', argument " "3"" of type '" "int *""'"); + } + arg3 = (int *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_get_real8_elements" "', argument " "4"" of type '" "double *""'"); + } + arg4 = (double *)(argp4); + res5 = SWIG_ConvertPtr(obj4, &argp5,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res5)) { + SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "grib_c_get_real8_elements" "', argument " "5"" of type '" "int *""'"); + } + arg5 = (int *)(argp5); + result = (int)grib_c_get_real8_elements(arg1,arg2,arg3,arg4,arg5); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_missing(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_set_missing",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_missing" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_missing" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_set_missing(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_key_vals(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_set_key_vals",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_key_vals" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_key_vals" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_set_key_vals(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_is_missing(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_is_missing",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_is_missing" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_is_missing" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_is_missing(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_is_defined(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_is_defined",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_is_defined" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_is_defined" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_is_defined(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_string_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + char **arg3 = (char **) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_set_string_array",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_string_array" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_string_array" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + { + /* Check if is a list */ + if (PyList_Check(obj2)) { + int size = PyList_Size(obj2); + int i = 0; + arg3 = (char **) malloc((size+1)*sizeof(char *)); + for (i = 0; i < size; i++) { + PyObject *o = PyList_GetItem(obj2,i); + if (PyString_Check(o)) + arg3[i] = PyString_AsString(PyList_GetItem(obj2,i)); + else { + PyErr_SetString(PyExc_TypeError,"list must contain strings"); + free(arg3); + return NULL; + } + } + arg3[i] = 0; /* Last entry set to NULL */ + } else { + PyErr_SetString(PyExc_TypeError,"not a list"); + return NULL; + } + } + result = (int)grib_c_set_string_array(arg1,arg2,(char const **)arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + { + free((char *) arg3); + } + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + { + free((char *) arg3); + } + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_set_double_ndarray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int arg4 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyArrayObject *array3 = NULL ; + int is_new_object3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_set_double_ndarray",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_set_double_ndarray" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_set_double_ndarray" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + { + npy_intp size[1] = { + -1 + }; + array3 = obj_to_array_contiguous_allow_conversion(obj2, + NPY_DOUBLE, + &is_new_object3); + if (!array3 || !require_dimensions(array3, 1) || + !require_size(array3, size, 1)) SWIG_fail; + arg3 = (double*) array_data(array3); + arg4 = (int) array_size(array3,0); + } + result = (int)grib_set_double_ndarray(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + { + if (is_new_object3 && array3) + { + Py_DECREF(array3); + } + } + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + { + if (is_new_object3 && array3) + { + Py_DECREF(array3); + } + } + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_set_long_ndarray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int arg4 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyArrayObject *array3 = NULL ; + int is_new_object3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_set_long_ndarray",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_set_long_ndarray" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_set_long_ndarray" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + { + npy_intp size[1] = { + -1 + }; + array3 = obj_to_array_contiguous_allow_conversion(obj2, + NPY_LONG, + &is_new_object3); + if (!array3 || !require_dimensions(array3, 1) || + !require_size(array3, size, 1)) SWIG_fail; + arg3 = (long*) array_data(array3); + arg4 = (int) array_size(array3,0); + } + result = (int)grib_set_long_ndarray(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + { + if (is_new_object3 && array3) + { + Py_DECREF(array3); + } + } + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + { + if (is_new_object3 && array3) + { + Py_DECREF(array3); + } + } + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_get_double_ndarray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int arg4 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject *array3 = NULL ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_get_double_ndarray",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_get_double_ndarray" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_get_double_ndarray" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + { + npy_intp dims[1]; + if (!PyInt_Check(obj2)) + { + const char* typestring = pytype_string(obj2); + PyErr_Format(PyExc_TypeError, + "Int dimension expected. '%s' given.", + typestring); + SWIG_fail; + } + arg4 = (int) PyInt_AsLong(obj2); + dims[0] = (npy_intp) arg4; + array3 = PyArray_SimpleNew(1, dims, NPY_DOUBLE); + if (!array3) SWIG_fail; + arg3 = (double*) array_data(array3); + } + result = (int)grib_get_double_ndarray(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + { + resultobj = SWIG_Python_AppendOutput(resultobj,(PyObject*)array3); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_get_long_ndarray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int arg4 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject *array3 = NULL ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_get_long_ndarray",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_get_long_ndarray" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_get_long_ndarray" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + { + npy_intp dims[1]; + if (!PyInt_Check(obj2)) + { + const char* typestring = pytype_string(obj2); + PyErr_Format(PyExc_TypeError, + "Int dimension expected. '%s' given.", + typestring); + SWIG_fail; + } + arg4 = (int) PyInt_AsLong(obj2); + dims[0] = (npy_intp) arg4; + array3 = PyArray_SimpleNew(1, dims, NPY_LONG); + if (!array3) SWIG_fail; + arg3 = (long*) array_data(array3); + } + result = (int)grib_get_long_ndarray(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + { + resultobj = SWIG_Python_AppendOutput(resultobj,(PyObject*)array3); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_get_double_ndelements(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int arg4 ; + double *arg5 = (double *) 0 ; + int arg6 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyArrayObject *array3 = NULL ; + int is_new_object3 = 0 ; + PyObject *array5 = NULL ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_get_double_ndelements",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_get_double_ndelements" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_get_double_ndelements" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + { + npy_intp size[1] = { + -1 + }; + array3 = obj_to_array_contiguous_allow_conversion(obj2, + NPY_INT, + &is_new_object3); + if (!array3 || !require_dimensions(array3, 1) || + !require_size(array3, size, 1)) SWIG_fail; + arg3 = (int*) array_data(array3); + arg4 = (int) array_size(array3,0); + } + { + npy_intp dims[1]; + if (!PyInt_Check(obj3)) + { + const char* typestring = pytype_string(obj3); + PyErr_Format(PyExc_TypeError, + "Int dimension expected. '%s' given.", + typestring); + SWIG_fail; + } + arg6 = (int) PyInt_AsLong(obj3); + dims[0] = (npy_intp) arg6; + array5 = PyArray_SimpleNew(1, dims, NPY_DOUBLE); + if (!array5) SWIG_fail; + arg5 = (double*) array_data(array5); + } + result = (int)grib_get_double_ndelements(arg1,arg2,arg3,arg4,arg5,arg6); + resultobj = SWIG_From_int((int)(result)); + { + resultobj = SWIG_Python_AppendOutput(resultobj,(PyObject*)array5); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + { + if (is_new_object3 && array3) + { + Py_DECREF(array3); + } + } + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + { + if (is_new_object3 && array3) + { + Py_DECREF(array3); + } + } + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_find_nearest_single(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + double *arg3 = (double *) 0 ; + double *arg4 = (double *) 0 ; + double *arg5 = (double *) 0 ; + double *arg6 = (double *) 0 ; + double *arg7 = (double *) 0 ; + double *arg8 = (double *) 0 ; + int *arg9 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + double temp3 ; + int res3 = 0 ; + double temp4 ; + int res4 = 0 ; + double temp5 ; + int res5 = SWIG_TMPOBJ ; + double temp6 ; + int res6 = SWIG_TMPOBJ ; + double temp7 ; + int res7 = SWIG_TMPOBJ ; + double temp8 ; + int res8 = SWIG_TMPOBJ ; + int temp9 ; + int res9 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + arg5 = &temp5; + arg6 = &temp6; + arg7 = &temp7; + arg8 = &temp8; + arg9 = &temp9; + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_find_nearest_single",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_single" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_single" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_single" "', argument " "3"" of type '" "double""'"); + } + temp3 = (double)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res4 = SWIG_ConvertPtr(obj3,SWIG_as_voidptrptr(&arg4),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj3, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_single" "', argument " "4"" of type '" "double""'"); + } + temp4 = (double)(val); + arg4 = &temp4; + res4 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_find_nearest_single(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res5)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg5))); + } else { + int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res6)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg6))); + } else { + int new_flags = SWIG_IsNewObj(res6) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg6), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res7)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg7))); + } else { + int new_flags = SWIG_IsNewObj(res7) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg7), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res8)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg8))); + } else { + int new_flags = SWIG_IsNewObj(res8) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg8), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res9)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg9))); + } else { + int new_flags = SWIG_IsNewObj(res9) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg9), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_find_nearest_four_single(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + double *arg3 = (double *) 0 ; + double *arg4 = (double *) 0 ; + double *arg5 = (double *) 0 ; + double *arg6 = (double *) 0 ; + double *arg7 = (double *) 0 ; + double *arg8 = (double *) 0 ; + int *arg9 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + double temp3 ; + int res3 = 0 ; + double temp4 ; + int res4 = 0 ; + void *argp5 = 0 ; + int res5 = 0 ; + void *argp6 = 0 ; + int res6 = 0 ; + void *argp7 = 0 ; + int res7 = 0 ; + void *argp8 = 0 ; + int res8 = 0 ; + void *argp9 = 0 ; + int res9 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + PyObject * obj5 = 0 ; + PyObject * obj6 = 0 ; + PyObject * obj7 = 0 ; + PyObject * obj8 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOO:grib_c_find_nearest_four_single",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_four_single" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_four_single" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_four_single" "', argument " "3"" of type '" "double""'"); + } + temp3 = (double)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res4 = SWIG_ConvertPtr(obj3,SWIG_as_voidptrptr(&arg4),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj3, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_four_single" "', argument " "4"" of type '" "double""'"); + } + temp4 = (double)(val); + arg4 = &temp4; + res4 = SWIG_AddTmpMask(ecode); + } + res5 = SWIG_ConvertPtr(obj4, &argp5,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res5)) { + SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "grib_c_find_nearest_four_single" "', argument " "5"" of type '" "double *""'"); + } + arg5 = (double *)(argp5); + res6 = SWIG_ConvertPtr(obj5, &argp6,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res6)) { + SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "grib_c_find_nearest_four_single" "', argument " "6"" of type '" "double *""'"); + } + arg6 = (double *)(argp6); + res7 = SWIG_ConvertPtr(obj6, &argp7,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res7)) { + SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "grib_c_find_nearest_four_single" "', argument " "7"" of type '" "double *""'"); + } + arg7 = (double *)(argp7); + res8 = SWIG_ConvertPtr(obj7, &argp8,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res8)) { + SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "grib_c_find_nearest_four_single" "', argument " "8"" of type '" "double *""'"); + } + arg8 = (double *)(argp8); + res9 = SWIG_ConvertPtr(obj8, &argp9,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res9)) { + SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "grib_c_find_nearest_four_single" "', argument " "9"" of type '" "int *""'"); + } + arg9 = (int *)(argp9); + result = (int)grib_c_find_nearest_four_single(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_message(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + void **arg2 = (void **) 0 ; + size_t *arg3 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + void *temp2 = 0 ; + size_t tempn2 ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; arg3 = &tempn2; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_get_message",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_message" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_get_message(arg1,(void const **)arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (*arg2) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtrAndSize(*arg2,*arg3)); + ; + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_error_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + int temp1 ; + int res1 = 0 ; + char temp2[1024+1] ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg2 = (char *) temp2; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_error_string",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_error_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + ecode3 = SWIG_AsVal_int(obj1, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "grib_c_get_error_string" "', argument " "3"" of type '" "int""'"); + } + arg3 = (int)(val3); + result = (int)grib_c_get_error_string(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + arg2[1024] = 0; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg2)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_no_fail_on_wrong_length(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int arg1 ; + int val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:no_fail_on_wrong_length",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_int(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "no_fail_on_wrong_length" "', argument " "1"" of type '" "int""'"); + } + arg1 = (int)(val1); + no_fail_on_wrong_length(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_api_version(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_get_api_version")) SWIG_fail; + result = (long)grib_c_get_api_version(); + resultobj = SWIG_From_long((long)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_gts_header_on(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_gts_header_on")) SWIG_fail; + grib_c_gts_header_on(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_gts_header_off(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_gts_header_off")) SWIG_fail; + grib_c_gts_header_off(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_definitions_path(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + char *arg1 = (char *) 0 ; + int res1 ; + char *buf1 = 0 ; + int alloc1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_set_definitions_path",&obj0)) SWIG_fail; + res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "grib_c_set_definitions_path" "', argument " "1"" of type '" "char const *""'"); + } + arg1 = (char *)(buf1); + grib_c_set_definitions_path((char const *)arg1); + resultobj = SWIG_Py_Void(); + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + return resultobj; +fail: + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_samples_path(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + char *arg1 = (char *) 0 ; + int res1 ; + char *buf1 = 0 ; + int alloc1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_set_samples_path",&obj0)) SWIG_fail; + res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "grib_c_set_samples_path" "', argument " "1"" of type '" "char const *""'"); + } + arg1 = (char *)(buf1); + grib_c_set_samples_path((char const *)arg1); + resultobj = SWIG_Py_Void(); + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + return resultobj; +fail: + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + return NULL; +} + + +static PyMethodDef SwigMethods[] = { + { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL}, + { (char *)"cdata", _wrap_cdata, METH_VARARGS, NULL}, + { (char *)"memmove", _wrap_memmove, METH_VARARGS, NULL}, + { (char *)"new_intp", _wrap_new_intp, METH_VARARGS, NULL}, + { (char *)"delete_intp", _wrap_delete_intp, METH_VARARGS, NULL}, + { (char *)"intp_assign", _wrap_intp_assign, METH_VARARGS, NULL}, + { (char *)"intp_value", _wrap_intp_value, METH_VARARGS, NULL}, + { (char *)"intp_cast", _wrap_intp_cast, METH_VARARGS, NULL}, + { (char *)"intp_frompointer", _wrap_intp_frompointer, METH_VARARGS, NULL}, + { (char *)"intp_swigregister", intp_swigregister, METH_VARARGS, NULL}, + { (char *)"new_sizetp", _wrap_new_sizetp, METH_VARARGS, NULL}, + { (char *)"delete_sizetp", _wrap_delete_sizetp, METH_VARARGS, NULL}, + { (char *)"sizetp_assign", _wrap_sizetp_assign, METH_VARARGS, NULL}, + { (char *)"sizetp_value", _wrap_sizetp_value, METH_VARARGS, NULL}, + { (char *)"sizetp_cast", _wrap_sizetp_cast, METH_VARARGS, NULL}, + { (char *)"sizetp_frompointer", _wrap_sizetp_frompointer, METH_VARARGS, NULL}, + { (char *)"sizetp_swigregister", sizetp_swigregister, METH_VARARGS, NULL}, + { (char *)"new_longp", _wrap_new_longp, METH_VARARGS, NULL}, + { (char *)"delete_longp", _wrap_delete_longp, METH_VARARGS, NULL}, + { (char *)"longp_assign", _wrap_longp_assign, METH_VARARGS, NULL}, + { (char *)"longp_value", _wrap_longp_value, METH_VARARGS, NULL}, + { (char *)"longp_cast", _wrap_longp_cast, METH_VARARGS, NULL}, + { (char *)"longp_frompointer", _wrap_longp_frompointer, METH_VARARGS, NULL}, + { (char *)"longp_swigregister", longp_swigregister, METH_VARARGS, NULL}, + { (char *)"new_doublep", _wrap_new_doublep, METH_VARARGS, NULL}, + { (char *)"delete_doublep", _wrap_delete_doublep, METH_VARARGS, NULL}, + { (char *)"doublep_assign", _wrap_doublep_assign, METH_VARARGS, NULL}, + { (char *)"doublep_value", _wrap_doublep_value, METH_VARARGS, NULL}, + { (char *)"doublep_cast", _wrap_doublep_cast, METH_VARARGS, NULL}, + { (char *)"doublep_frompointer", _wrap_doublep_frompointer, METH_VARARGS, NULL}, + { (char *)"doublep_swigregister", doublep_swigregister, METH_VARARGS, NULL}, + { (char *)"new_doubleArray", _wrap_new_doubleArray, METH_VARARGS, NULL}, + { (char *)"delete_doubleArray", _wrap_delete_doubleArray, METH_VARARGS, NULL}, + { (char *)"doubleArray_getitem", _wrap_doubleArray_getitem, METH_VARARGS, NULL}, + { (char *)"doubleArray_setitem", _wrap_doubleArray_setitem, METH_VARARGS, NULL}, + { (char *)"new_longArray", _wrap_new_longArray, METH_VARARGS, NULL}, + { (char *)"delete_longArray", _wrap_delete_longArray, METH_VARARGS, NULL}, + { (char *)"longArray_getitem", _wrap_longArray_getitem, METH_VARARGS, NULL}, + { (char *)"longArray_setitem", _wrap_longArray_setitem, METH_VARARGS, NULL}, + { (char *)"new_intArray", _wrap_new_intArray, METH_VARARGS, NULL}, + { (char *)"delete_intArray", _wrap_delete_intArray, METH_VARARGS, NULL}, + { (char *)"intArray_getitem", _wrap_intArray_getitem, METH_VARARGS, NULL}, + { (char *)"intArray_setitem", _wrap_intArray_setitem, METH_VARARGS, NULL}, + { (char *)"new_stringArray", _wrap_new_stringArray, METH_VARARGS, NULL}, + { (char *)"delete_stringArray", _wrap_delete_stringArray, METH_VARARGS, NULL}, + { (char *)"stringArray_getitem", _wrap_stringArray_getitem, METH_VARARGS, NULL}, + { (char *)"stringArray_setitem", _wrap_stringArray_setitem, METH_VARARGS, NULL}, + { (char *)"grib_c_new_from_file", _wrap_grib_c_new_from_file, METH_VARARGS, NULL}, + { (char *)"grib_c_new_any_from_file", _wrap_grib_c_new_any_from_file, METH_VARARGS, NULL}, + { (char *)"grib_c_new_bufr_from_file", _wrap_grib_c_new_bufr_from_file, METH_VARARGS, NULL}, + { (char *)"grib_c_new_gts_from_file", _wrap_grib_c_new_gts_from_file, METH_VARARGS, NULL}, + { (char *)"grib_c_new_metar_from_file", _wrap_grib_c_new_metar_from_file, METH_VARARGS, NULL}, + { (char *)"grib_c_iterator_new", _wrap_grib_c_iterator_new, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_new", _wrap_grib_c_keys_iterator_new, METH_VARARGS, NULL}, + { (char *)"codes_c_bufr_keys_iterator_new", _wrap_codes_c_bufr_keys_iterator_new, METH_VARARGS, NULL}, + { (char *)"grib_c_grib_new_from_samples", _wrap_grib_c_grib_new_from_samples, METH_VARARGS, NULL}, + { (char *)"grib_c_bufr_new_from_samples", _wrap_grib_c_bufr_new_from_samples, METH_VARARGS, NULL}, + { (char *)"grib_c_index_new_from_file", _wrap_grib_c_index_new_from_file, METH_VARARGS, NULL}, + { (char *)"grib_c_index_add_file", _wrap_grib_c_index_add_file, METH_VARARGS, NULL}, + { (char *)"grib_c_new_from_index", _wrap_grib_c_new_from_index, METH_VARARGS, NULL}, + { (char *)"grib_c_index_write", _wrap_grib_c_index_write, METH_VARARGS, NULL}, + { (char *)"grib_c_index_read", _wrap_grib_c_index_read, METH_VARARGS, NULL}, + { (char *)"grib_c_new_from_message", _wrap_grib_c_new_from_message, METH_VARARGS, NULL}, + { (char *)"grib_c_count_in_file", _wrap_grib_c_count_in_file, METH_VARARGS, NULL}, + { (char *)"grib_c_release", _wrap_grib_c_release, METH_VARARGS, NULL}, + { (char *)"grib_c_write", _wrap_grib_c_write, METH_VARARGS, NULL}, + { (char *)"grib_c_get_size_long", _wrap_grib_c_get_size_long, METH_VARARGS, NULL}, + { (char *)"grib_c_get_string_length", _wrap_grib_c_get_string_length, METH_VARARGS, NULL}, + { (char *)"grib_c_clone", _wrap_grib_c_clone, METH_VARARGS, NULL}, + { (char *)"grib_c_copy_namespace", _wrap_grib_c_copy_namespace, METH_VARARGS, NULL}, + { (char *)"grib_c_get_message_size", _wrap_grib_c_get_message_size, METH_VARARGS, NULL}, + { (char *)"grib_c_get_message_offset", _wrap_grib_c_get_message_offset, METH_VARARGS, NULL}, + { (char *)"grib_c_get_native_type", _wrap_grib_c_get_native_type, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_new", _wrap_grib_c_multi_new, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_support_on", _wrap_grib_c_multi_support_on, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_write", _wrap_grib_c_multi_write, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_support_off", _wrap_grib_c_multi_support_off, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_release", _wrap_grib_c_multi_release, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_append", _wrap_grib_c_multi_append, METH_VARARGS, NULL}, + { (char *)"grib_c_gribex_mode_on", _wrap_grib_c_gribex_mode_on, METH_VARARGS, NULL}, + { (char *)"grib_c_gribex_mode_off", _wrap_grib_c_gribex_mode_off, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_next", _wrap_grib_c_keys_iterator_next, METH_VARARGS, NULL}, + { (char *)"codes_c_bufr_keys_iterator_next", _wrap_codes_c_bufr_keys_iterator_next, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_delete", _wrap_grib_c_keys_iterator_delete, METH_VARARGS, NULL}, + { (char *)"codes_c_bufr_keys_iterator_delete", _wrap_codes_c_bufr_keys_iterator_delete, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_computed", _wrap_grib_c_skip_computed, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_coded", _wrap_grib_c_skip_coded, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_edition_specific", _wrap_grib_c_skip_edition_specific, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_duplicates", _wrap_grib_c_skip_duplicates, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_read_only", _wrap_grib_c_skip_read_only, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_function", _wrap_grib_c_skip_function, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_rewind", _wrap_grib_c_keys_iterator_rewind, METH_VARARGS, NULL}, + { (char *)"codes_c_bufr_keys_iterator_rewind", _wrap_codes_c_bufr_keys_iterator_rewind, METH_VARARGS, NULL}, + { (char *)"grib_c_bufr_copy_data", _wrap_grib_c_bufr_copy_data, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_get_name", _wrap_grib_c_keys_iterator_get_name, METH_VARARGS, NULL}, + { (char *)"codes_c_bufr_keys_iterator_get_name", _wrap_codes_c_bufr_keys_iterator_get_name, METH_VARARGS, NULL}, + { (char *)"grib_c_index_get_size_long", _wrap_grib_c_index_get_size_long, METH_VARARGS, NULL}, + { (char *)"grib_c_index_get_long", _wrap_grib_c_index_get_long, METH_VARARGS, NULL}, + { (char *)"grib_c_index_get_real8", _wrap_grib_c_index_get_real8, METH_VARARGS, NULL}, + { (char *)"grib_c_index_get_string", _wrap_grib_c_index_get_string, METH_VARARGS, NULL}, + { (char *)"grib_c_index_select_long", _wrap_grib_c_index_select_long, METH_VARARGS, NULL}, + { (char *)"grib_c_index_select_real8", _wrap_grib_c_index_select_real8, METH_VARARGS, NULL}, + { (char *)"grib_c_index_select_string", _wrap_grib_c_index_select_string, METH_VARARGS, NULL}, + { (char *)"grib_c_index_release", _wrap_grib_c_index_release, METH_VARARGS, NULL}, + { (char *)"grib_c_iterator_delete", _wrap_grib_c_iterator_delete, METH_VARARGS, NULL}, + { (char *)"grib_c_iterator_next", _wrap_grib_c_iterator_next, METH_VARARGS, NULL}, + { (char *)"grib_c_get_string", _wrap_grib_c_get_string, METH_VARARGS, NULL}, + { (char *)"grib_c_get_string_array", _wrap_grib_c_get_string_array, METH_VARARGS, NULL}, + { (char *)"grib_c_set_string", _wrap_grib_c_set_string, METH_VARARGS, NULL}, + { (char *)"grib_c_get_long", _wrap_grib_c_get_long, METH_VARARGS, NULL}, + { (char *)"grib_c_set_long", _wrap_grib_c_set_long, METH_VARARGS, NULL}, + { (char *)"grib_c_get_double", _wrap_grib_c_get_double, METH_VARARGS, NULL}, + { (char *)"grib_c_set_double", _wrap_grib_c_set_double, METH_VARARGS, NULL}, + { (char *)"grib_c_set_real8_array", _wrap_grib_c_set_real8_array, METH_VARARGS, NULL}, + { (char *)"grib_c_get_real8_array", _wrap_grib_c_get_real8_array, METH_VARARGS, NULL}, + { (char *)"grib_c_get_long_array", _wrap_grib_c_get_long_array, METH_VARARGS, NULL}, + { (char *)"grib_c_set_long_array", _wrap_grib_c_set_long_array, METH_VARARGS, NULL}, + { (char *)"grib_c_get_real8_element", _wrap_grib_c_get_real8_element, METH_VARARGS, NULL}, + { (char *)"grib_c_get_real8_elements", _wrap_grib_c_get_real8_elements, METH_VARARGS, NULL}, + { (char *)"grib_c_set_missing", _wrap_grib_c_set_missing, METH_VARARGS, NULL}, + { (char *)"grib_c_set_key_vals", _wrap_grib_c_set_key_vals, METH_VARARGS, NULL}, + { (char *)"grib_c_is_missing", _wrap_grib_c_is_missing, METH_VARARGS, NULL}, + { (char *)"grib_c_is_defined", _wrap_grib_c_is_defined, METH_VARARGS, NULL}, + { (char *)"grib_c_set_string_array", _wrap_grib_c_set_string_array, METH_VARARGS, NULL}, + { (char *)"grib_set_double_ndarray", _wrap_grib_set_double_ndarray, METH_VARARGS, NULL}, + { (char *)"grib_set_long_ndarray", _wrap_grib_set_long_ndarray, METH_VARARGS, NULL}, + { (char *)"grib_get_double_ndarray", _wrap_grib_get_double_ndarray, METH_VARARGS, NULL}, + { (char *)"grib_get_long_ndarray", _wrap_grib_get_long_ndarray, METH_VARARGS, NULL}, + { (char *)"grib_get_double_ndelements", _wrap_grib_get_double_ndelements, METH_VARARGS, NULL}, + { (char *)"grib_c_find_nearest_single", _wrap_grib_c_find_nearest_single, METH_VARARGS, NULL}, + { (char *)"grib_c_find_nearest_four_single", _wrap_grib_c_find_nearest_four_single, METH_VARARGS, NULL}, + { (char *)"grib_c_get_message", _wrap_grib_c_get_message, METH_VARARGS, NULL}, + { (char *)"grib_c_get_error_string", _wrap_grib_c_get_error_string, METH_VARARGS, NULL}, + { (char *)"no_fail_on_wrong_length", _wrap_no_fail_on_wrong_length, METH_VARARGS, NULL}, + { (char *)"grib_c_get_api_version", _wrap_grib_c_get_api_version, METH_VARARGS, NULL}, + { (char *)"grib_c_gts_header_on", _wrap_grib_c_gts_header_on, METH_VARARGS, NULL}, + { (char *)"grib_c_gts_header_off", _wrap_grib_c_gts_header_off, METH_VARARGS, NULL}, + { (char *)"grib_c_set_definitions_path", _wrap_grib_c_set_definitions_path, METH_VARARGS, NULL}, + { (char *)"grib_c_set_samples_path", _wrap_grib_c_set_samples_path, METH_VARARGS, NULL}, + { NULL, NULL, 0, NULL } +}; + + +/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ + +static void *_p_intpTo_p_int(void *x, int *SWIGUNUSEDPARM(newmemory)) { + return (void *)((int *) ((intp *) x)); +} +static void *_p_doublepTo_p_double(void *x, int *SWIGUNUSEDPARM(newmemory)) { + return (void *)((double *) ((doublep *) x)); +} +static void *_p_sizetpTo_p_size_t(void *x, int *SWIGUNUSEDPARM(newmemory)) { + return (void *)((size_t *) ((sizetp *) x)); +} +static void *_p_longpTo_p_long(void *x, int *SWIGUNUSEDPARM(newmemory)) { + return (void *)((long *) ((longp *) x)); +} +static swig_type_info _swigt__p_FILE = {"_p_FILE", "FILE *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_double = {"_p_double", "double *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_doublep = {"_p_doublep", "doublep *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_int = {"_p_int", "int *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_intp = {"_p_intp", "intp *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_long = {"_p_long", "long *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_longp = {"_p_longp", "longp *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_p_void = {"_p_p_void", "void **", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_size_t = {"_p_size_t", "size_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_sizetp = {"_p_sizetp", "sizetp *", 0, 0, (void*)0, 0}; + +static swig_type_info *swig_type_initial[] = { + &_swigt__p_FILE, + &_swigt__p_char, + &_swigt__p_double, + &_swigt__p_doublep, + &_swigt__p_int, + &_swigt__p_intp, + &_swigt__p_long, + &_swigt__p_longp, + &_swigt__p_p_char, + &_swigt__p_p_void, + &_swigt__p_size_t, + &_swigt__p_sizetp, +}; + +static swig_cast_info _swigc__p_FILE[] = { {&_swigt__p_FILE, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_double[] = { {&_swigt__p_double, 0, 0, 0}, {&_swigt__p_doublep, _p_doublepTo_p_double, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_doublep[] = { {&_swigt__p_doublep, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_int[] = { {&_swigt__p_intp, _p_intpTo_p_int, 0, 0}, {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_intp[] = { {&_swigt__p_intp, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_long[] = { {&_swigt__p_long, 0, 0, 0}, {&_swigt__p_longp, _p_longpTo_p_long, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_longp[] = { {&_swigt__p_longp, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_p_void[] = { {&_swigt__p_p_void, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_size_t[] = { {&_swigt__p_sizetp, _p_sizetpTo_p_size_t, 0, 0}, {&_swigt__p_size_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_sizetp[] = { {&_swigt__p_sizetp, 0, 0, 0},{0, 0, 0, 0}}; + +static swig_cast_info *swig_cast_initial[] = { + _swigc__p_FILE, + _swigc__p_char, + _swigc__p_double, + _swigc__p_doublep, + _swigc__p_int, + _swigc__p_intp, + _swigc__p_long, + _swigc__p_longp, + _swigc__p_p_char, + _swigc__p_p_void, + _swigc__p_size_t, + _swigc__p_sizetp, +}; + + +/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ + +static swig_const_info swig_const_table[] = { +{0, 0, 0, 0.0, 0, 0}}; + +#ifdef __cplusplus +} +#endif +/* ----------------------------------------------------------------------------- + * Type initialization: + * This problem is tough by the requirement that no dynamic + * memory is used. Also, since swig_type_info structures store pointers to + * swig_cast_info structures and swig_cast_info structures store pointers back + * to swig_type_info structures, we need some lookup code at initialization. + * The idea is that swig generates all the structures that are needed. + * The runtime then collects these partially filled structures. + * The SWIG_InitializeModule function takes these initial arrays out of + * swig_module, and does all the lookup, filling in the swig_module.types + * array with the correct data and linking the correct swig_cast_info + * structures together. + * + * The generated swig_type_info structures are assigned statically to an initial + * array. We just loop through that array, and handle each type individually. + * First we lookup if this type has been already loaded, and if so, use the + * loaded structure instead of the generated one. Then we have to fill in the + * cast linked list. The cast data is initially stored in something like a + * two-dimensional array. Each row corresponds to a type (there are the same + * number of rows as there are in the swig_type_initial array). Each entry in + * a column is one of the swig_cast_info structures for that type. + * The cast_initial array is actually an array of arrays, because each row has + * a variable number of columns. So to actually build the cast linked list, + * we find the array of casts associated with the type, and loop through it + * adding the casts to the list. The one last trick we need to do is making + * sure the type pointer in the swig_cast_info struct is correct. + * + * First off, we lookup the cast->type name to see if it is already loaded. + * There are three cases to handle: + * 1) If the cast->type has already been loaded AND the type we are adding + * casting info to has not been loaded (it is in this module), THEN we + * replace the cast->type pointer with the type pointer that has already + * been loaded. + * 2) If BOTH types (the one we are adding casting info to, and the + * cast->type) are loaded, THEN the cast info has already been loaded by + * the previous module so we just ignore it. + * 3) Finally, if cast->type has not already been loaded, then we add that + * swig_cast_info to the linked list (because the cast->type) pointer will + * be correct. + * ----------------------------------------------------------------------------- */ + +#ifdef __cplusplus +extern "C" { +#if 0 +} /* c-mode */ +#endif +#endif + +#if 0 +#define SWIGRUNTIME_DEBUG +#endif + + +SWIGRUNTIME void +SWIG_InitializeModule(void *clientdata) { + size_t i; + swig_module_info *module_head, *iter; + int init; + + /* check to see if the circular list has been setup, if not, set it up */ + if (swig_module.next==0) { + /* Initialize the swig_module */ + swig_module.type_initial = swig_type_initial; + swig_module.cast_initial = swig_cast_initial; + swig_module.next = &swig_module; + init = 1; + } else { + init = 0; + } + + /* Try and load any already created modules */ + module_head = SWIG_GetModule(clientdata); + if (!module_head) { + /* This is the first module loaded for this interpreter */ + /* so set the swig module into the interpreter */ + SWIG_SetModule(clientdata, &swig_module); + } else { + /* the interpreter has loaded a SWIG module, but has it loaded this one? */ + iter=module_head; + do { + if (iter==&swig_module) { + /* Our module is already in the list, so there's nothing more to do. */ + return; + } + iter=iter->next; + } while (iter!= module_head); + + /* otherwise we must add our module into the list */ + swig_module.next = module_head->next; + module_head->next = &swig_module; + } + + /* When multiple interpreters are used, a module could have already been initialized in + a different interpreter, but not yet have a pointer in this interpreter. + In this case, we do not want to continue adding types... everything should be + set up already */ + if (init == 0) return; + + /* Now work on filling in swig_module.types */ +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: size %d\n", swig_module.size); +#endif + for (i = 0; i < swig_module.size; ++i) { + swig_type_info *type = 0; + swig_type_info *ret; + swig_cast_info *cast; + +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); +#endif + + /* if there is another module already loaded */ + if (swig_module.next != &swig_module) { + type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); + } + if (type) { + /* Overwrite clientdata field */ +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: found type %s\n", type->name); +#endif + if (swig_module.type_initial[i]->clientdata) { + type->clientdata = swig_module.type_initial[i]->clientdata; +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name); +#endif + } + } else { + type = swig_module.type_initial[i]; + } + + /* Insert casting types */ + cast = swig_module.cast_initial[i]; + while (cast->type) { + /* Don't need to add information already in the list */ + ret = 0; +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: look cast %s\n", cast->type->name); +#endif + if (swig_module.next != &swig_module) { + ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); +#ifdef SWIGRUNTIME_DEBUG + if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name); +#endif + } + if (ret) { + if (type == swig_module.type_initial[i]) { +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: skip old type %s\n", ret->name); +#endif + cast->type = ret; + ret = 0; + } else { + /* Check for casting already in the list */ + swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type); +#ifdef SWIGRUNTIME_DEBUG + if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name); +#endif + if (!ocast) ret = 0; + } + } + + if (!ret) { +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); +#endif + if (type->cast) { + type->cast->prev = cast; + cast->next = type->cast; + } + type->cast = cast; + } + cast++; + } + /* Set entry in modules->types array equal to the type */ + swig_module.types[i] = type; + } + swig_module.types[i] = 0; + +#ifdef SWIGRUNTIME_DEBUG + printf("**** SWIG_InitializeModule: Cast List ******\n"); + for (i = 0; i < swig_module.size; ++i) { + int j = 0; + swig_cast_info *cast = swig_module.cast_initial[i]; + printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); + while (cast->type) { + printf("SWIG_InitializeModule: cast type %s\n", cast->type->name); + cast++; + ++j; + } + printf("---- Total casts: %d\n",j); + } + printf("**** SWIG_InitializeModule: Cast List ******\n"); +#endif +} + +/* This function will propagate the clientdata field of type to +* any new swig_type_info structures that have been added into the list +* of equivalent types. It is like calling +* SWIG_TypeClientData(type, clientdata) a second time. +*/ +SWIGRUNTIME void +SWIG_PropagateClientData(void) { + size_t i; + swig_cast_info *equiv; + static int init_run = 0; + + if (init_run) return; + init_run = 1; + + for (i = 0; i < swig_module.size; i++) { + if (swig_module.types[i]->clientdata) { + equiv = swig_module.types[i]->cast; + while (equiv) { + if (!equiv->converter) { + if (equiv->type && !equiv->type->clientdata) + SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); + } + equiv = equiv->next; + } + } + } +} + +#ifdef __cplusplus +#if 0 +{ + /* c-mode */ +#endif +} +#endif + + + +#ifdef __cplusplus +extern "C" { +#endif + + /* Python-specific SWIG API */ +#define SWIG_newvarlink() SWIG_Python_newvarlink() +#define SWIG_addvarlink(p, name, get_attr, set_attr) SWIG_Python_addvarlink(p, name, get_attr, set_attr) +#define SWIG_InstallConstants(d, constants) SWIG_Python_InstallConstants(d, constants) + + /* ----------------------------------------------------------------------------- + * global variable support code. + * ----------------------------------------------------------------------------- */ + + typedef struct swig_globalvar { + char *name; /* Name of global variable */ + PyObject *(*get_attr)(void); /* Return the current value */ + int (*set_attr)(PyObject *); /* Set the value */ + struct swig_globalvar *next; + } swig_globalvar; + + typedef struct swig_varlinkobject { + PyObject_HEAD + swig_globalvar *vars; + } swig_varlinkobject; + + SWIGINTERN PyObject * + swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) { +#if PY_VERSION_HEX >= 0x03000000 + return PyUnicode_InternFromString(""); +#else + return PyString_FromString(""); +#endif + } + + SWIGINTERN PyObject * + swig_varlink_str(swig_varlinkobject *v) { +#if PY_VERSION_HEX >= 0x03000000 + PyObject *str = PyUnicode_InternFromString("("); + PyObject *tail; + PyObject *joined; + swig_globalvar *var; + for (var = v->vars; var; var=var->next) { + tail = PyUnicode_FromString(var->name); + joined = PyUnicode_Concat(str, tail); + Py_DecRef(str); + Py_DecRef(tail); + str = joined; + if (var->next) { + tail = PyUnicode_InternFromString(", "); + joined = PyUnicode_Concat(str, tail); + Py_DecRef(str); + Py_DecRef(tail); + str = joined; + } + } + tail = PyUnicode_InternFromString(")"); + joined = PyUnicode_Concat(str, tail); + Py_DecRef(str); + Py_DecRef(tail); + str = joined; +#else + PyObject *str = PyString_FromString("("); + swig_globalvar *var; + for (var = v->vars; var; var=var->next) { + PyString_ConcatAndDel(&str,PyString_FromString(var->name)); + if (var->next) PyString_ConcatAndDel(&str,PyString_FromString(", ")); + } + PyString_ConcatAndDel(&str,PyString_FromString(")")); +#endif + return str; + } + + SWIGINTERN int + swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) { + char *tmp; + PyObject *str = swig_varlink_str(v); + fprintf(fp,"Swig global variables "); + fprintf(fp,"%s\n", tmp = SWIG_Python_str_AsChar(str)); + SWIG_Python_str_DelForPy3(tmp); + Py_DECREF(str); + return 0; + } + + SWIGINTERN void + swig_varlink_dealloc(swig_varlinkobject *v) { + swig_globalvar *var = v->vars; + while (var) { + swig_globalvar *n = var->next; + free(var->name); + free(var); + var = n; + } + } + + SWIGINTERN PyObject * + swig_varlink_getattr(swig_varlinkobject *v, char *n) { + PyObject *res = NULL; + swig_globalvar *var = v->vars; + while (var) { + if (strcmp(var->name,n) == 0) { + res = (*var->get_attr)(); + break; + } + var = var->next; + } + if (res == NULL && !PyErr_Occurred()) { + PyErr_Format(PyExc_AttributeError, "Unknown C global variable '%s'", n); + } + return res; + } + + SWIGINTERN int + swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) { + int res = 1; + swig_globalvar *var = v->vars; + while (var) { + if (strcmp(var->name,n) == 0) { + res = (*var->set_attr)(p); + break; + } + var = var->next; + } + if (res == 1 && !PyErr_Occurred()) { + PyErr_Format(PyExc_AttributeError, "Unknown C global variable '%s'", n); + } + return res; + } + + SWIGINTERN PyTypeObject* + swig_varlink_type(void) { + static char varlink__doc__[] = "Swig var link object"; + static PyTypeObject varlink_type; + static int type_init = 0; + if (!type_init) { + const PyTypeObject tmp = { +#if PY_VERSION_HEX >= 0x03000000 + PyVarObject_HEAD_INIT(NULL, 0) +#else + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ +#endif + (char *)"swigvarlink", /* tp_name */ + sizeof(swig_varlinkobject), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor) swig_varlink_dealloc, /* tp_dealloc */ + (printfunc) swig_varlink_print, /* tp_print */ + (getattrfunc) swig_varlink_getattr, /* tp_getattr */ + (setattrfunc) swig_varlink_setattr, /* tp_setattr */ + 0, /* tp_compare */ + (reprfunc) swig_varlink_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + (reprfunc) swig_varlink_str, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + 0, /* tp_flags */ + varlink__doc__, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ +#if PY_VERSION_HEX >= 0x02020000 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */ +#endif +#if PY_VERSION_HEX >= 0x02030000 + 0, /* tp_del */ +#endif +#if PY_VERSION_HEX >= 0x02060000 + 0, /* tp_version_tag */ +#endif +#if PY_VERSION_HEX >= 0x03040000 + 0, /* tp_finalize */ +#endif +#ifdef COUNT_ALLOCS + 0, /* tp_allocs */ + 0, /* tp_frees */ + 0, /* tp_maxalloc */ +#if PY_VERSION_HEX >= 0x02050000 + 0, /* tp_prev */ +#endif + 0 /* tp_next */ +#endif + }; + varlink_type = tmp; + type_init = 1; +#if PY_VERSION_HEX < 0x02020000 + varlink_type.ob_type = &PyType_Type; +#else + if (PyType_Ready(&varlink_type) < 0) + return NULL; +#endif + } + return &varlink_type; + } + + /* Create a variable linking object for use later */ + SWIGINTERN PyObject * + SWIG_Python_newvarlink(void) { + swig_varlinkobject *result = PyObject_NEW(swig_varlinkobject, swig_varlink_type()); + if (result) { + result->vars = 0; + } + return ((PyObject*) result); + } + + SWIGINTERN void + SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) { + swig_varlinkobject *v = (swig_varlinkobject *) p; + swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar)); + if (gv) { + size_t size = strlen(name)+1; + gv->name = (char *)malloc(size); + if (gv->name) { + strncpy(gv->name,name,size); + gv->get_attr = get_attr; + gv->set_attr = set_attr; + gv->next = v->vars; + } + } + v->vars = gv; + } + + SWIGINTERN PyObject * + SWIG_globals(void) { + static PyObject *_SWIG_globals = 0; + if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink(); + return _SWIG_globals; + } + + /* ----------------------------------------------------------------------------- + * constants/methods manipulation + * ----------------------------------------------------------------------------- */ + + /* Install Constants */ + SWIGINTERN void + SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) { + PyObject *obj = 0; + size_t i; + for (i = 0; constants[i].type; ++i) { + switch(constants[i].type) { + case SWIG_PY_POINTER: + obj = SWIG_InternalNewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0); + break; + case SWIG_PY_BINARY: + obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype)); + break; + default: + obj = 0; + break; + } + if (obj) { + PyDict_SetItemString(d, constants[i].name, obj); + Py_DECREF(obj); + } + } + } + + /* -----------------------------------------------------------------------------*/ + /* Fix SwigMethods to carry the callback ptrs when needed */ + /* -----------------------------------------------------------------------------*/ + + SWIGINTERN void + SWIG_Python_FixMethods(PyMethodDef *methods, + swig_const_info *const_table, + swig_type_info **types, + swig_type_info **types_initial) { + size_t i; + for (i = 0; methods[i].ml_name; ++i) { + const char *c = methods[i].ml_doc; + if (!c) continue; + c = strstr(c, "swig_ptr: "); + if (c) { + int j; + swig_const_info *ci = 0; + const char *name = c + 10; + for (j = 0; const_table[j].type; ++j) { + if (strncmp(const_table[j].name, name, + strlen(const_table[j].name)) == 0) { + ci = &(const_table[j]); + break; + } + } + if (ci) { + void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0; + if (ptr) { + size_t shift = (ci->ptype) - types; + swig_type_info *ty = types_initial[shift]; + size_t ldoc = (c - methods[i].ml_doc); + size_t lptr = strlen(ty->name)+2*sizeof(void*)+2; + char *ndoc = (char*)malloc(ldoc + lptr + 10); + if (ndoc) { + char *buff = ndoc; + strncpy(buff, methods[i].ml_doc, ldoc); + buff += ldoc; + strncpy(buff, "swig_ptr: ", 10); + buff += 10; + SWIG_PackVoidPtr(buff, ptr, ty->name, lptr); + methods[i].ml_doc = ndoc; + } + } + } + } + } + } + +#ifdef __cplusplus +} +#endif + +/* -----------------------------------------------------------------------------* + * Partial Init method + * -----------------------------------------------------------------------------*/ + +#ifdef __cplusplus +extern "C" +#endif + +SWIGEXPORT +#if PY_VERSION_HEX >= 0x03000000 +PyObject* +#else +void +#endif +SWIG_init(void) { + PyObject *m, *d, *md; +#if PY_VERSION_HEX >= 0x03000000 + static struct PyModuleDef SWIG_module = { +# if PY_VERSION_HEX >= 0x03020000 + PyModuleDef_HEAD_INIT, +# else + { + PyObject_HEAD_INIT(NULL) + NULL, /* m_init */ + 0, /* m_index */ + NULL, /* m_copy */ + }, +# endif + (char *) SWIG_name, + NULL, + -1, + SwigMethods, + NULL, + NULL, + NULL, + NULL + }; +#endif + +#if defined(SWIGPYTHON_BUILTIN) + static SwigPyClientData SwigPyObject_clientdata = { + 0, 0, 0, 0, 0, 0, 0 + }; + static PyGetSetDef this_getset_def = { + (char *)"this", &SwigPyBuiltin_ThisClosure, NULL, NULL, NULL + }; + static SwigPyGetSet thisown_getset_closure = { + (PyCFunction) SwigPyObject_own, + (PyCFunction) SwigPyObject_own + }; + static PyGetSetDef thisown_getset_def = { + (char *)"thisown", SwigPyBuiltin_GetterClosure, SwigPyBuiltin_SetterClosure, NULL, &thisown_getset_closure + }; + PyTypeObject *builtin_pytype; + int builtin_base_count; + swig_type_info *builtin_basetype; + PyObject *tuple; + PyGetSetDescrObject *static_getset; + PyTypeObject *metatype; + PyTypeObject *swigpyobject; + SwigPyClientData *cd; + PyObject *public_interface, *public_symbol; + PyObject *this_descr; + PyObject *thisown_descr; + PyObject *self = 0; + int i; + + (void)builtin_pytype; + (void)builtin_base_count; + (void)builtin_basetype; + (void)tuple; + (void)static_getset; + (void)self; + + /* Metaclass is used to implement static member variables */ + metatype = SwigPyObjectType(); + assert(metatype); +#endif + + /* Fix SwigMethods to carry the callback ptrs when needed */ + SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial); + +#if PY_VERSION_HEX >= 0x03000000 + m = PyModule_Create(&SWIG_module); +#else + m = Py_InitModule((char *) SWIG_name, SwigMethods); +#endif + + md = d = PyModule_GetDict(m); + (void)md; + + SWIG_InitializeModule(0); + +#ifdef SWIGPYTHON_BUILTIN + swigpyobject = SwigPyObject_TypeOnce(); + + SwigPyObject_stype = SWIG_MangledTypeQuery("_p_SwigPyObject"); + assert(SwigPyObject_stype); + cd = (SwigPyClientData*) SwigPyObject_stype->clientdata; + if (!cd) { + SwigPyObject_stype->clientdata = &SwigPyObject_clientdata; + SwigPyObject_clientdata.pytype = swigpyobject; + } else if (swigpyobject->tp_basicsize != cd->pytype->tp_basicsize) { + PyErr_SetString(PyExc_RuntimeError, "Import error: attempted to load two incompatible swig-generated modules."); +# if PY_VERSION_HEX >= 0x03000000 + return NULL; +# else + return; +# endif + } + + /* All objects have a 'this' attribute */ + this_descr = PyDescr_NewGetSet(SwigPyObject_type(), &this_getset_def); + (void)this_descr; + + /* All objects have a 'thisown' attribute */ + thisown_descr = PyDescr_NewGetSet(SwigPyObject_type(), &thisown_getset_def); + (void)thisown_descr; + + public_interface = PyList_New(0); + public_symbol = 0; + (void)public_symbol; + + PyDict_SetItemString(md, "__all__", public_interface); + Py_DECREF(public_interface); + for (i = 0; SwigMethods[i].ml_name != NULL; ++i) + SwigPyBuiltin_AddPublicSymbol(public_interface, SwigMethods[i].ml_name); + for (i = 0; swig_const_table[i].name != 0; ++i) + SwigPyBuiltin_AddPublicSymbol(public_interface, swig_const_table[i].name); +#endif + + SWIG_InstallConstants(d,swig_const_table); + + SWIG_Python_SetConstant(d, "GRIB_SUCCESS",SWIG_From_int((int)(0))); + SWIG_Python_SetConstant(d, "GRIB_END_OF_FILE",SWIG_From_int((int)(-1))); + SWIG_Python_SetConstant(d, "GRIB_INTERNAL_ERROR",SWIG_From_int((int)(-2))); + SWIG_Python_SetConstant(d, "GRIB_BUFFER_TOO_SMALL",SWIG_From_int((int)(-3))); + SWIG_Python_SetConstant(d, "GRIB_NOT_IMPLEMENTED",SWIG_From_int((int)(-4))); + SWIG_Python_SetConstant(d, "GRIB_7777_NOT_FOUND",SWIG_From_int((int)(-5))); + SWIG_Python_SetConstant(d, "GRIB_ARRAY_TOO_SMALL",SWIG_From_int((int)(-6))); + SWIG_Python_SetConstant(d, "GRIB_FILE_NOT_FOUND",SWIG_From_int((int)(-7))); + SWIG_Python_SetConstant(d, "GRIB_CODE_NOT_FOUND_IN_TABLE",SWIG_From_int((int)(-8))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_ARRAY_SIZE",SWIG_From_int((int)(-9))); + SWIG_Python_SetConstant(d, "GRIB_NOT_FOUND",SWIG_From_int((int)(-10))); + SWIG_Python_SetConstant(d, "GRIB_IO_PROBLEM",SWIG_From_int((int)(-11))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_MESSAGE",SWIG_From_int((int)(-12))); + SWIG_Python_SetConstant(d, "GRIB_DECODING_ERROR",SWIG_From_int((int)(-13))); + SWIG_Python_SetConstant(d, "GRIB_ENCODING_ERROR",SWIG_From_int((int)(-14))); + SWIG_Python_SetConstant(d, "GRIB_NO_MORE_IN_SET",SWIG_From_int((int)(-15))); + SWIG_Python_SetConstant(d, "GRIB_GEOCALCULUS_PROBLEM",SWIG_From_int((int)(-16))); + SWIG_Python_SetConstant(d, "GRIB_OUT_OF_MEMORY",SWIG_From_int((int)(-17))); + SWIG_Python_SetConstant(d, "GRIB_READ_ONLY",SWIG_From_int((int)(-18))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_ARGUMENT",SWIG_From_int((int)(-19))); + SWIG_Python_SetConstant(d, "GRIB_NULL_HANDLE",SWIG_From_int((int)(-20))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_SECTION_NUMBER",SWIG_From_int((int)(-21))); + SWIG_Python_SetConstant(d, "GRIB_VALUE_CANNOT_BE_MISSING",SWIG_From_int((int)(-22))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_LENGTH",SWIG_From_int((int)(-23))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_TYPE",SWIG_From_int((int)(-24))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_STEP",SWIG_From_int((int)(-25))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_STEP_UNIT",SWIG_From_int((int)(-26))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_FILE",SWIG_From_int((int)(-27))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_GRIB",SWIG_From_int((int)(-28))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_INDEX",SWIG_From_int((int)(-29))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_ITERATOR",SWIG_From_int((int)(-30))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_KEYS_ITERATOR",SWIG_From_int((int)(-31))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_NEAREST",SWIG_From_int((int)(-32))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_ORDERBY",SWIG_From_int((int)(-33))); + SWIG_Python_SetConstant(d, "GRIB_MISSING_KEY",SWIG_From_int((int)(-34))); + SWIG_Python_SetConstant(d, "GRIB_OUT_OF_AREA",SWIG_From_int((int)(-35))); + SWIG_Python_SetConstant(d, "GRIB_CONCEPT_NO_MATCH",SWIG_From_int((int)(-36))); + SWIG_Python_SetConstant(d, "GRIB_HASH_ARRAY_NO_MATCH",SWIG_From_int((int)(-37))); + SWIG_Python_SetConstant(d, "GRIB_NO_DEFINITIONS",SWIG_From_int((int)(-38))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_TYPE",SWIG_From_int((int)(-39))); + SWIG_Python_SetConstant(d, "GRIB_END",SWIG_From_int((int)(-40))); + SWIG_Python_SetConstant(d, "GRIB_NO_VALUES",SWIG_From_int((int)(-41))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_GRID",SWIG_From_int((int)(-42))); + SWIG_Python_SetConstant(d, "GRIB_END_OF_INDEX",SWIG_From_int((int)(-43))); + SWIG_Python_SetConstant(d, "GRIB_NULL_INDEX",SWIG_From_int((int)(-44))); + SWIG_Python_SetConstant(d, "GRIB_PREMATURE_END_OF_FILE",SWIG_From_int((int)(-45))); + SWIG_Python_SetConstant(d, "GRIB_INTERNAL_ARRAY_TOO_SMALL",SWIG_From_int((int)(-46))); + SWIG_Python_SetConstant(d, "GRIB_MESSAGE_TOO_LARGE",SWIG_From_int((int)(-47))); + SWIG_Python_SetConstant(d, "GRIB_CONSTANT_FIELD",SWIG_From_int((int)(-48))); + SWIG_Python_SetConstant(d, "GRIB_SWITCH_NO_MATCH",SWIG_From_int((int)(-49))); + SWIG_Python_SetConstant(d, "GRIB_UNDERFLOW",SWIG_From_int((int)(-50))); + SWIG_Python_SetConstant(d, "GRIB_MESSAGE_MALFORMED",SWIG_From_int((int)(-51))); + SWIG_Python_SetConstant(d, "GRIB_CORRUPTED_INDEX",SWIG_From_int((int)(-52))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_BPV",SWIG_From_int((int)(-53))); + SWIG_Python_SetConstant(d, "GRIB_DIFFERENT_EDITION",SWIG_From_int((int)(-54))); + SWIG_Python_SetConstant(d, "GRIB_VALUE_DIFFERENT",SWIG_From_int((int)(-55))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_KEY_VALUE",SWIG_From_int((int)(-56))); + SWIG_Python_SetConstant(d, "GRIB_STRING_TOO_SMALL",SWIG_From_int((int)(-57))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_CONVERSION",SWIG_From_int((int)(-58))); + SWIG_Python_SetConstant(d, "GRIB_MISSING_BUFR_ENTRY",SWIG_From_int((int)(-59))); + SWIG_Python_SetConstant(d, "GRIB_NULL_POINTER",SWIG_From_int((int)(-60))); + SWIG_Python_SetConstant(d, "GRIB_ATTRIBUTE_CLASH",SWIG_From_int((int)(-61))); + SWIG_Python_SetConstant(d, "GRIB_TOO_MANY_ATTRIBUTES",SWIG_From_int((int)(-62))); + SWIG_Python_SetConstant(d, "GRIB_ATTRIBUTE_NOT_FOUND",SWIG_From_int((int)(-63))); + SWIG_Python_SetConstant(d, "GRIB_UNSUPPORTED_EDITION",SWIG_From_int((int)(-64))); + SWIG_Python_SetConstant(d, "GRIB_OUT_OF_RANGE",SWIG_From_int((int)(-65))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_BITMAP_SIZE",SWIG_From_int((int)(-66))); + + import_array(); + +#if PY_VERSION_HEX >= 0x03000000 + return m; +#else + return; +#endif +} + diff --git a/python3/swig_wrap_numpy.py b/python3/swig_wrap_numpy.py new file mode 100644 index 000000000..6eec5fc36 --- /dev/null +++ b/python3/swig_wrap_numpy.py @@ -0,0 +1,747 @@ +# This file was automatically generated by SWIG (http://www.swig.org). +# Version 3.0.12 +# +# Do not make changes to this file unless you know what you are doing--modify +# the SWIG interface file instead. + +from sys import version_info as _swig_python_version_info +if _swig_python_version_info >= (2, 7, 0): + def swig_import_helper(): + import importlib + pkg = __name__.rpartition('.')[0] + mname = '.'.join((pkg, '_gribapi_swig')).lstrip('.') + try: + return importlib.import_module(mname) + except ImportError: + return importlib.import_module('_gribapi_swig') + _gribapi_swig = swig_import_helper() + del swig_import_helper +elif _swig_python_version_info >= (2, 6, 0): + def swig_import_helper(): + from os.path import dirname + import imp + fp = None + try: + fp, pathname, description = imp.find_module('_gribapi_swig', [dirname(__file__)]) + except ImportError: + import _gribapi_swig + return _gribapi_swig + try: + _mod = imp.load_module('_gribapi_swig', fp, pathname, description) + finally: + if fp is not None: + fp.close() + return _mod + _gribapi_swig = swig_import_helper() + del swig_import_helper +else: + import _gribapi_swig +del _swig_python_version_info + +try: + _swig_property = property +except NameError: + pass # Python < 2.2 doesn't have 'property'. + +try: + import builtins as __builtin__ +except ImportError: + import __builtin__ + +def _swig_setattr_nondynamic(self, class_type, name, value, static=1): + if (name == "thisown"): + return self.this.own(value) + if (name == "this"): + if type(value).__name__ == 'SwigPyObject': + self.__dict__[name] = value + return + method = class_type.__swig_setmethods__.get(name, None) + if method: + return method(self, value) + if (not static): + if _newclass: + object.__setattr__(self, name, value) + else: + self.__dict__[name] = value + else: + raise AttributeError("You cannot add attributes to %s" % self) + + +def _swig_setattr(self, class_type, name, value): + return _swig_setattr_nondynamic(self, class_type, name, value, 0) + + +def _swig_getattr(self, class_type, name): + if (name == "thisown"): + return self.this.own() + method = class_type.__swig_getmethods__.get(name, None) + if method: + return method(self) + raise AttributeError("'%s' object has no attribute '%s'" % (class_type.__name__, name)) + + +def _swig_repr(self): + try: + strthis = "proxy of " + self.this.__repr__() + except __builtin__.Exception: + strthis = "" + return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,) + +try: + _object = object + _newclass = 1 +except __builtin__.Exception: + class _object: + pass + _newclass = 0 + + +def cdata(ptr: 'void *', nelements: 'size_t'=1) -> "SWIGCDATA": + return _gribapi_swig.cdata(ptr, nelements) +cdata = _gribapi_swig.cdata + +def memmove(data: 'void *', indata: 'void const *') -> "void": + return _gribapi_swig.memmove(data, indata) +memmove = _gribapi_swig.memmove +GRIB_SUCCESS = _gribapi_swig.GRIB_SUCCESS +GRIB_END_OF_FILE = _gribapi_swig.GRIB_END_OF_FILE +GRIB_INTERNAL_ERROR = _gribapi_swig.GRIB_INTERNAL_ERROR +GRIB_BUFFER_TOO_SMALL = _gribapi_swig.GRIB_BUFFER_TOO_SMALL +GRIB_NOT_IMPLEMENTED = _gribapi_swig.GRIB_NOT_IMPLEMENTED +GRIB_7777_NOT_FOUND = _gribapi_swig.GRIB_7777_NOT_FOUND +GRIB_ARRAY_TOO_SMALL = _gribapi_swig.GRIB_ARRAY_TOO_SMALL +GRIB_FILE_NOT_FOUND = _gribapi_swig.GRIB_FILE_NOT_FOUND +GRIB_CODE_NOT_FOUND_IN_TABLE = _gribapi_swig.GRIB_CODE_NOT_FOUND_IN_TABLE +GRIB_WRONG_ARRAY_SIZE = _gribapi_swig.GRIB_WRONG_ARRAY_SIZE +GRIB_NOT_FOUND = _gribapi_swig.GRIB_NOT_FOUND +GRIB_IO_PROBLEM = _gribapi_swig.GRIB_IO_PROBLEM +GRIB_INVALID_MESSAGE = _gribapi_swig.GRIB_INVALID_MESSAGE +GRIB_DECODING_ERROR = _gribapi_swig.GRIB_DECODING_ERROR +GRIB_ENCODING_ERROR = _gribapi_swig.GRIB_ENCODING_ERROR +GRIB_NO_MORE_IN_SET = _gribapi_swig.GRIB_NO_MORE_IN_SET +GRIB_GEOCALCULUS_PROBLEM = _gribapi_swig.GRIB_GEOCALCULUS_PROBLEM +GRIB_OUT_OF_MEMORY = _gribapi_swig.GRIB_OUT_OF_MEMORY +GRIB_READ_ONLY = _gribapi_swig.GRIB_READ_ONLY +GRIB_INVALID_ARGUMENT = _gribapi_swig.GRIB_INVALID_ARGUMENT +GRIB_NULL_HANDLE = _gribapi_swig.GRIB_NULL_HANDLE +GRIB_INVALID_SECTION_NUMBER = _gribapi_swig.GRIB_INVALID_SECTION_NUMBER +GRIB_VALUE_CANNOT_BE_MISSING = _gribapi_swig.GRIB_VALUE_CANNOT_BE_MISSING +GRIB_WRONG_LENGTH = _gribapi_swig.GRIB_WRONG_LENGTH +GRIB_INVALID_TYPE = _gribapi_swig.GRIB_INVALID_TYPE +GRIB_WRONG_STEP = _gribapi_swig.GRIB_WRONG_STEP +GRIB_WRONG_STEP_UNIT = _gribapi_swig.GRIB_WRONG_STEP_UNIT +GRIB_INVALID_FILE = _gribapi_swig.GRIB_INVALID_FILE +GRIB_INVALID_GRIB = _gribapi_swig.GRIB_INVALID_GRIB +GRIB_INVALID_INDEX = _gribapi_swig.GRIB_INVALID_INDEX +GRIB_INVALID_ITERATOR = _gribapi_swig.GRIB_INVALID_ITERATOR +GRIB_INVALID_KEYS_ITERATOR = _gribapi_swig.GRIB_INVALID_KEYS_ITERATOR +GRIB_INVALID_NEAREST = _gribapi_swig.GRIB_INVALID_NEAREST +GRIB_INVALID_ORDERBY = _gribapi_swig.GRIB_INVALID_ORDERBY +GRIB_MISSING_KEY = _gribapi_swig.GRIB_MISSING_KEY +GRIB_OUT_OF_AREA = _gribapi_swig.GRIB_OUT_OF_AREA +GRIB_CONCEPT_NO_MATCH = _gribapi_swig.GRIB_CONCEPT_NO_MATCH +GRIB_HASH_ARRAY_NO_MATCH = _gribapi_swig.GRIB_HASH_ARRAY_NO_MATCH +GRIB_NO_DEFINITIONS = _gribapi_swig.GRIB_NO_DEFINITIONS +GRIB_WRONG_TYPE = _gribapi_swig.GRIB_WRONG_TYPE +GRIB_END = _gribapi_swig.GRIB_END +GRIB_NO_VALUES = _gribapi_swig.GRIB_NO_VALUES +GRIB_WRONG_GRID = _gribapi_swig.GRIB_WRONG_GRID +GRIB_END_OF_INDEX = _gribapi_swig.GRIB_END_OF_INDEX +GRIB_NULL_INDEX = _gribapi_swig.GRIB_NULL_INDEX +GRIB_PREMATURE_END_OF_FILE = _gribapi_swig.GRIB_PREMATURE_END_OF_FILE +GRIB_INTERNAL_ARRAY_TOO_SMALL = _gribapi_swig.GRIB_INTERNAL_ARRAY_TOO_SMALL +GRIB_MESSAGE_TOO_LARGE = _gribapi_swig.GRIB_MESSAGE_TOO_LARGE +GRIB_CONSTANT_FIELD = _gribapi_swig.GRIB_CONSTANT_FIELD +GRIB_SWITCH_NO_MATCH = _gribapi_swig.GRIB_SWITCH_NO_MATCH +GRIB_UNDERFLOW = _gribapi_swig.GRIB_UNDERFLOW +GRIB_MESSAGE_MALFORMED = _gribapi_swig.GRIB_MESSAGE_MALFORMED +GRIB_CORRUPTED_INDEX = _gribapi_swig.GRIB_CORRUPTED_INDEX +GRIB_INVALID_BPV = _gribapi_swig.GRIB_INVALID_BPV +GRIB_DIFFERENT_EDITION = _gribapi_swig.GRIB_DIFFERENT_EDITION +GRIB_VALUE_DIFFERENT = _gribapi_swig.GRIB_VALUE_DIFFERENT +GRIB_INVALID_KEY_VALUE = _gribapi_swig.GRIB_INVALID_KEY_VALUE +GRIB_STRING_TOO_SMALL = _gribapi_swig.GRIB_STRING_TOO_SMALL +GRIB_WRONG_CONVERSION = _gribapi_swig.GRIB_WRONG_CONVERSION +GRIB_MISSING_BUFR_ENTRY = _gribapi_swig.GRIB_MISSING_BUFR_ENTRY +GRIB_NULL_POINTER = _gribapi_swig.GRIB_NULL_POINTER +GRIB_ATTRIBUTE_CLASH = _gribapi_swig.GRIB_ATTRIBUTE_CLASH +GRIB_TOO_MANY_ATTRIBUTES = _gribapi_swig.GRIB_TOO_MANY_ATTRIBUTES +GRIB_ATTRIBUTE_NOT_FOUND = _gribapi_swig.GRIB_ATTRIBUTE_NOT_FOUND +GRIB_UNSUPPORTED_EDITION = _gribapi_swig.GRIB_UNSUPPORTED_EDITION +GRIB_OUT_OF_RANGE = _gribapi_swig.GRIB_OUT_OF_RANGE +GRIB_WRONG_BITMAP_SIZE = _gribapi_swig.GRIB_WRONG_BITMAP_SIZE +class intp(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, intp, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, intp, name) + __repr__ = _swig_repr + + def __init__(self): + this = _gribapi_swig.new_intp() + try: + self.this.append(this) + except __builtin__.Exception: + self.this = this + __swig_destroy__ = _gribapi_swig.delete_intp + __del__ = lambda self: None + + def assign(self, value: 'int') -> "void": + return _gribapi_swig.intp_assign(self, value) + + def value(self) -> "int": + return _gribapi_swig.intp_value(self) + + def cast(self) -> "int *": + return _gribapi_swig.intp_cast(self) + if _newclass: + frompointer = staticmethod(_gribapi_swig.intp_frompointer) + else: + frompointer = _gribapi_swig.intp_frompointer +intp_swigregister = _gribapi_swig.intp_swigregister +intp_swigregister(intp) + +def intp_frompointer(t: 'int *') -> "intp *": + return _gribapi_swig.intp_frompointer(t) +intp_frompointer = _gribapi_swig.intp_frompointer + +class sizetp(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, sizetp, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, sizetp, name) + __repr__ = _swig_repr + + def __init__(self): + this = _gribapi_swig.new_sizetp() + try: + self.this.append(this) + except __builtin__.Exception: + self.this = this + __swig_destroy__ = _gribapi_swig.delete_sizetp + __del__ = lambda self: None + + def assign(self, value: 'size_t') -> "void": + return _gribapi_swig.sizetp_assign(self, value) + + def value(self) -> "size_t": + return _gribapi_swig.sizetp_value(self) + + def cast(self) -> "size_t *": + return _gribapi_swig.sizetp_cast(self) + if _newclass: + frompointer = staticmethod(_gribapi_swig.sizetp_frompointer) + else: + frompointer = _gribapi_swig.sizetp_frompointer +sizetp_swigregister = _gribapi_swig.sizetp_swigregister +sizetp_swigregister(sizetp) + +def sizetp_frompointer(t: 'size_t *') -> "sizetp *": + return _gribapi_swig.sizetp_frompointer(t) +sizetp_frompointer = _gribapi_swig.sizetp_frompointer + +class longp(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, longp, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, longp, name) + __repr__ = _swig_repr + + def __init__(self): + this = _gribapi_swig.new_longp() + try: + self.this.append(this) + except __builtin__.Exception: + self.this = this + __swig_destroy__ = _gribapi_swig.delete_longp + __del__ = lambda self: None + + def assign(self, value: 'long') -> "void": + return _gribapi_swig.longp_assign(self, value) + + def value(self) -> "long": + return _gribapi_swig.longp_value(self) + + def cast(self) -> "long *": + return _gribapi_swig.longp_cast(self) + if _newclass: + frompointer = staticmethod(_gribapi_swig.longp_frompointer) + else: + frompointer = _gribapi_swig.longp_frompointer +longp_swigregister = _gribapi_swig.longp_swigregister +longp_swigregister(longp) + +def longp_frompointer(t: 'long *') -> "longp *": + return _gribapi_swig.longp_frompointer(t) +longp_frompointer = _gribapi_swig.longp_frompointer + +class doublep(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, doublep, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, doublep, name) + __repr__ = _swig_repr + + def __init__(self): + this = _gribapi_swig.new_doublep() + try: + self.this.append(this) + except __builtin__.Exception: + self.this = this + __swig_destroy__ = _gribapi_swig.delete_doublep + __del__ = lambda self: None + + def assign(self, value: 'double') -> "void": + return _gribapi_swig.doublep_assign(self, value) + + def value(self) -> "double": + return _gribapi_swig.doublep_value(self) + + def cast(self) -> "double *": + return _gribapi_swig.doublep_cast(self) + if _newclass: + frompointer = staticmethod(_gribapi_swig.doublep_frompointer) + else: + frompointer = _gribapi_swig.doublep_frompointer +doublep_swigregister = _gribapi_swig.doublep_swigregister +doublep_swigregister(doublep) + +def doublep_frompointer(t: 'double *') -> "doublep *": + return _gribapi_swig.doublep_frompointer(t) +doublep_frompointer = _gribapi_swig.doublep_frompointer + + +def new_doubleArray(nelements: 'size_t') -> "double *": + return _gribapi_swig.new_doubleArray(nelements) +new_doubleArray = _gribapi_swig.new_doubleArray + +def delete_doubleArray(ary: 'double *') -> "void": + return _gribapi_swig.delete_doubleArray(ary) +delete_doubleArray = _gribapi_swig.delete_doubleArray + +def doubleArray_getitem(ary: 'double *', index: 'size_t') -> "double": + return _gribapi_swig.doubleArray_getitem(ary, index) +doubleArray_getitem = _gribapi_swig.doubleArray_getitem + +def doubleArray_setitem(ary: 'double *', index: 'size_t', value: 'double') -> "void": + return _gribapi_swig.doubleArray_setitem(ary, index, value) +doubleArray_setitem = _gribapi_swig.doubleArray_setitem + +def new_longArray(nelements: 'size_t') -> "long *": + return _gribapi_swig.new_longArray(nelements) +new_longArray = _gribapi_swig.new_longArray + +def delete_longArray(ary: 'long *') -> "void": + return _gribapi_swig.delete_longArray(ary) +delete_longArray = _gribapi_swig.delete_longArray + +def longArray_getitem(ary: 'long *', index: 'size_t') -> "long": + return _gribapi_swig.longArray_getitem(ary, index) +longArray_getitem = _gribapi_swig.longArray_getitem + +def longArray_setitem(ary: 'long *', index: 'size_t', value: 'long') -> "void": + return _gribapi_swig.longArray_setitem(ary, index, value) +longArray_setitem = _gribapi_swig.longArray_setitem + +def new_intArray(nelements: 'size_t') -> "int *": + return _gribapi_swig.new_intArray(nelements) +new_intArray = _gribapi_swig.new_intArray + +def delete_intArray(ary: 'int *') -> "void": + return _gribapi_swig.delete_intArray(ary) +delete_intArray = _gribapi_swig.delete_intArray + +def intArray_getitem(ary: 'int *', index: 'size_t') -> "int": + return _gribapi_swig.intArray_getitem(ary, index) +intArray_getitem = _gribapi_swig.intArray_getitem + +def intArray_setitem(ary: 'int *', index: 'size_t', value: 'int') -> "void": + return _gribapi_swig.intArray_setitem(ary, index, value) +intArray_setitem = _gribapi_swig.intArray_setitem + +def new_stringArray(nelements: 'size_t') -> "char **": + return _gribapi_swig.new_stringArray(nelements) +new_stringArray = _gribapi_swig.new_stringArray + +def delete_stringArray(ary: 'char **') -> "void": + return _gribapi_swig.delete_stringArray(ary) +delete_stringArray = _gribapi_swig.delete_stringArray + +def stringArray_getitem(ary: 'char **', index: 'size_t') -> "char *": + return _gribapi_swig.stringArray_getitem(ary, index) +stringArray_getitem = _gribapi_swig.stringArray_getitem + +def stringArray_setitem(ary: 'char **', index: 'size_t', value: 'char *') -> "void": + return _gribapi_swig.stringArray_setitem(ary, index, value) +stringArray_setitem = _gribapi_swig.stringArray_setitem + +def grib_c_new_from_file(f: 'FILE *', fd: 'int', fname: 'char *', INOUT: 'int *', headers_only: 'int') -> "int *": + return _gribapi_swig.grib_c_new_from_file(f, fd, fname, INOUT, headers_only) +grib_c_new_from_file = _gribapi_swig.grib_c_new_from_file + +def grib_c_new_any_from_file(f: 'FILE *', headers_only: 'int', INOUT: 'int *') -> "int *": + return _gribapi_swig.grib_c_new_any_from_file(f, headers_only, INOUT) +grib_c_new_any_from_file = _gribapi_swig.grib_c_new_any_from_file + +def grib_c_new_bufr_from_file(f: 'FILE *', fd: 'int', fname: 'char *', headers_only: 'int', INOUT: 'int *') -> "int *": + return _gribapi_swig.grib_c_new_bufr_from_file(f, fd, fname, headers_only, INOUT) +grib_c_new_bufr_from_file = _gribapi_swig.grib_c_new_bufr_from_file + +def grib_c_new_gts_from_file(f: 'FILE *', headers_only: 'int', INOUT: 'int *') -> "int *": + return _gribapi_swig.grib_c_new_gts_from_file(f, headers_only, INOUT) +grib_c_new_gts_from_file = _gribapi_swig.grib_c_new_gts_from_file + +def grib_c_new_metar_from_file(f: 'FILE *', headers_only: 'int', INOUT: 'int *') -> "int *": + return _gribapi_swig.grib_c_new_metar_from_file(f, headers_only, INOUT) +grib_c_new_metar_from_file = _gribapi_swig.grib_c_new_metar_from_file + +def grib_c_iterator_new(arg1: 'int *', arg3: 'int *') -> "int *": + return _gribapi_swig.grib_c_iterator_new(arg1, arg3) +grib_c_iterator_new = _gribapi_swig.grib_c_iterator_new + +def grib_c_keys_iterator_new(INPUT: 'int *', name_space: 'char *') -> "int *": + return _gribapi_swig.grib_c_keys_iterator_new(INPUT, name_space) +grib_c_keys_iterator_new = _gribapi_swig.grib_c_keys_iterator_new + +def codes_c_bufr_keys_iterator_new(INPUT: 'int *') -> "int *": + return _gribapi_swig.codes_c_bufr_keys_iterator_new(INPUT) +codes_c_bufr_keys_iterator_new = _gribapi_swig.codes_c_bufr_keys_iterator_new + +def grib_c_grib_new_from_samples(INOUT: 'int *', name: 'char *') -> "int *": + return _gribapi_swig.grib_c_grib_new_from_samples(INOUT, name) +grib_c_grib_new_from_samples = _gribapi_swig.grib_c_grib_new_from_samples + +def grib_c_bufr_new_from_samples(INOUT: 'int *', name: 'char *') -> "int *": + return _gribapi_swig.grib_c_bufr_new_from_samples(INOUT, name) +grib_c_bufr_new_from_samples = _gribapi_swig.grib_c_bufr_new_from_samples + +def grib_c_index_new_from_file(file: 'char *', keys: 'char *') -> "int *": + return _gribapi_swig.grib_c_index_new_from_file(file, keys) +grib_c_index_new_from_file = _gribapi_swig.grib_c_index_new_from_file + +def grib_c_index_add_file(INPUT: 'int *', file: 'char *') -> "int": + return _gribapi_swig.grib_c_index_add_file(INPUT, file) +grib_c_index_add_file = _gribapi_swig.grib_c_index_add_file + +def grib_c_new_from_index(INPUT: 'int *', INOUT: 'int *') -> "int *": + return _gribapi_swig.grib_c_new_from_index(INPUT, INOUT) +grib_c_new_from_index = _gribapi_swig.grib_c_new_from_index + +def grib_c_index_write(INPUT: 'int *', file: 'char *') -> "int": + return _gribapi_swig.grib_c_index_write(INPUT, file) +grib_c_index_write = _gribapi_swig.grib_c_index_write + +def grib_c_index_read(file: 'char *') -> "int *": + return _gribapi_swig.grib_c_index_read(file) +grib_c_index_read = _gribapi_swig.grib_c_index_read + +def grib_c_new_from_message(INOUT: 'int *', binmsg: 'char *', INPUT: 'size_t *') -> "int *": + return _gribapi_swig.grib_c_new_from_message(INOUT, binmsg, INPUT) +grib_c_new_from_message = _gribapi_swig.grib_c_new_from_message + +def grib_c_count_in_file(f: 'FILE *') -> "int *": + return _gribapi_swig.grib_c_count_in_file(f) +grib_c_count_in_file = _gribapi_swig.grib_c_count_in_file + +def grib_c_release(gid: 'int *') -> "int": + return _gribapi_swig.grib_c_release(gid) +grib_c_release = _gribapi_swig.grib_c_release + +def grib_c_write(gid: 'int *', f: 'FILE *') -> "int": + return _gribapi_swig.grib_c_write(gid, f) +grib_c_write = _gribapi_swig.grib_c_write + +def grib_c_get_size_long(gid: 'int *', key: 'char *') -> "long *": + return _gribapi_swig.grib_c_get_size_long(gid, key) +grib_c_get_size_long = _gribapi_swig.grib_c_get_size_long + +def grib_c_get_string_length(gid: 'int *', key: 'char *') -> "size_t *": + return _gribapi_swig.grib_c_get_string_length(gid, key) +grib_c_get_string_length = _gribapi_swig.grib_c_get_string_length + +def grib_c_clone(gid: 'int *', INOUT: 'int *') -> "int *": + return _gribapi_swig.grib_c_clone(gid, INOUT) +grib_c_clone = _gribapi_swig.grib_c_clone + +def grib_c_copy_namespace(gid: 'int *', name: 'char *', INPUT: 'int *') -> "int": + return _gribapi_swig.grib_c_copy_namespace(gid, name, INPUT) +grib_c_copy_namespace = _gribapi_swig.grib_c_copy_namespace + +def grib_c_get_message_size(gid: 'int *') -> "size_t *": + return _gribapi_swig.grib_c_get_message_size(gid) +grib_c_get_message_size = _gribapi_swig.grib_c_get_message_size + +def grib_c_get_message_offset(gid: 'int *') -> "size_t *": + return _gribapi_swig.grib_c_get_message_offset(gid) +grib_c_get_message_offset = _gribapi_swig.grib_c_get_message_offset + +def grib_c_get_native_type(gid: 'int *', key: 'char *') -> "int *": + return _gribapi_swig.grib_c_get_native_type(gid, key) +grib_c_get_native_type = _gribapi_swig.grib_c_get_native_type + +def grib_c_multi_new() -> "int *": + return _gribapi_swig.grib_c_multi_new() +grib_c_multi_new = _gribapi_swig.grib_c_multi_new + +def grib_c_multi_support_on() -> "int": + return _gribapi_swig.grib_c_multi_support_on() +grib_c_multi_support_on = _gribapi_swig.grib_c_multi_support_on + +def grib_c_multi_write(gid: 'int *', f: 'FILE *') -> "int": + return _gribapi_swig.grib_c_multi_write(gid, f) +grib_c_multi_write = _gribapi_swig.grib_c_multi_write + +def grib_c_multi_support_off() -> "int": + return _gribapi_swig.grib_c_multi_support_off() +grib_c_multi_support_off = _gribapi_swig.grib_c_multi_support_off + +def grib_c_multi_release(gid: 'int *') -> "int": + return _gribapi_swig.grib_c_multi_release(gid) +grib_c_multi_release = _gribapi_swig.grib_c_multi_release + +def grib_c_multi_append(arg1: 'int *', arg2: 'int *', arg3: 'int *') -> "int": + return _gribapi_swig.grib_c_multi_append(arg1, arg2, arg3) +grib_c_multi_append = _gribapi_swig.grib_c_multi_append + +def grib_c_gribex_mode_on() -> "int": + return _gribapi_swig.grib_c_gribex_mode_on() +grib_c_gribex_mode_on = _gribapi_swig.grib_c_gribex_mode_on + +def grib_c_gribex_mode_off() -> "int": + return _gribapi_swig.grib_c_gribex_mode_off() +grib_c_gribex_mode_off = _gribapi_swig.grib_c_gribex_mode_off + +def grib_c_keys_iterator_next(iterid: 'int *') -> "int": + return _gribapi_swig.grib_c_keys_iterator_next(iterid) +grib_c_keys_iterator_next = _gribapi_swig.grib_c_keys_iterator_next + +def codes_c_bufr_keys_iterator_next(iterid: 'int *') -> "int": + return _gribapi_swig.codes_c_bufr_keys_iterator_next(iterid) +codes_c_bufr_keys_iterator_next = _gribapi_swig.codes_c_bufr_keys_iterator_next + +def grib_c_keys_iterator_delete(iterid: 'int *') -> "int": + return _gribapi_swig.grib_c_keys_iterator_delete(iterid) +grib_c_keys_iterator_delete = _gribapi_swig.grib_c_keys_iterator_delete + +def codes_c_bufr_keys_iterator_delete(iterid: 'int *') -> "int": + return _gribapi_swig.codes_c_bufr_keys_iterator_delete(iterid) +codes_c_bufr_keys_iterator_delete = _gribapi_swig.codes_c_bufr_keys_iterator_delete + +def grib_c_skip_computed(iterid: 'int *') -> "int": + return _gribapi_swig.grib_c_skip_computed(iterid) +grib_c_skip_computed = _gribapi_swig.grib_c_skip_computed + +def grib_c_skip_coded(iterid: 'int *') -> "int": + return _gribapi_swig.grib_c_skip_coded(iterid) +grib_c_skip_coded = _gribapi_swig.grib_c_skip_coded + +def grib_c_skip_edition_specific(iterid: 'int *') -> "int": + return _gribapi_swig.grib_c_skip_edition_specific(iterid) +grib_c_skip_edition_specific = _gribapi_swig.grib_c_skip_edition_specific + +def grib_c_skip_duplicates(iterid: 'int *') -> "int": + return _gribapi_swig.grib_c_skip_duplicates(iterid) +grib_c_skip_duplicates = _gribapi_swig.grib_c_skip_duplicates + +def grib_c_skip_read_only(iterid: 'int *') -> "int": + return _gribapi_swig.grib_c_skip_read_only(iterid) +grib_c_skip_read_only = _gribapi_swig.grib_c_skip_read_only + +def grib_c_skip_function(iterid: 'int *') -> "int": + return _gribapi_swig.grib_c_skip_function(iterid) +grib_c_skip_function = _gribapi_swig.grib_c_skip_function + +def grib_c_keys_iterator_rewind(iterid: 'int *') -> "int": + return _gribapi_swig.grib_c_keys_iterator_rewind(iterid) +grib_c_keys_iterator_rewind = _gribapi_swig.grib_c_keys_iterator_rewind + +def codes_c_bufr_keys_iterator_rewind(iterid: 'int *') -> "int": + return _gribapi_swig.codes_c_bufr_keys_iterator_rewind(iterid) +codes_c_bufr_keys_iterator_rewind = _gribapi_swig.codes_c_bufr_keys_iterator_rewind + +def grib_c_bufr_copy_data(gid: 'int *', INOUT: 'int *') -> "int *": + return _gribapi_swig.grib_c_bufr_copy_data(gid, INOUT) +grib_c_bufr_copy_data = _gribapi_swig.grib_c_bufr_copy_data + +def grib_c_keys_iterator_get_name(iterid: 'int *', len: 'int') -> "char *": + return _gribapi_swig.grib_c_keys_iterator_get_name(iterid, len) +grib_c_keys_iterator_get_name = _gribapi_swig.grib_c_keys_iterator_get_name + +def codes_c_bufr_keys_iterator_get_name(iterid: 'int *', len: 'int') -> "char *": + return _gribapi_swig.codes_c_bufr_keys_iterator_get_name(iterid, len) +codes_c_bufr_keys_iterator_get_name = _gribapi_swig.codes_c_bufr_keys_iterator_get_name + +def grib_c_index_get_size_long(iid: 'int *', key: 'char *') -> "long *": + return _gribapi_swig.grib_c_index_get_size_long(iid, key) +grib_c_index_get_size_long = _gribapi_swig.grib_c_index_get_size_long + +def grib_c_index_get_long(iid: 'int *', key: 'char *', val: 'long *', size: 'int *') -> "int": + return _gribapi_swig.grib_c_index_get_long(iid, key, val, size) +grib_c_index_get_long = _gribapi_swig.grib_c_index_get_long + +def grib_c_index_get_real8(iid: 'int *', key: 'char *', val: 'double *', size: 'int *') -> "int": + return _gribapi_swig.grib_c_index_get_real8(iid, key, val, size) +grib_c_index_get_real8 = _gribapi_swig.grib_c_index_get_real8 + +def grib_c_index_get_string(iid: 'int *', key: 'char *', INPUT: 'int *', INOUT: 'int *') -> "char *, int *": + return _gribapi_swig.grib_c_index_get_string(iid, key, INPUT, INOUT) +grib_c_index_get_string = _gribapi_swig.grib_c_index_get_string + +def grib_c_index_select_long(iid: 'int *', key: 'char *', INPUT: 'long *') -> "int": + return _gribapi_swig.grib_c_index_select_long(iid, key, INPUT) +grib_c_index_select_long = _gribapi_swig.grib_c_index_select_long + +def grib_c_index_select_real8(iid: 'int *', key: 'char *', INPUT: 'double *') -> "int": + return _gribapi_swig.grib_c_index_select_real8(iid, key, INPUT) +grib_c_index_select_real8 = _gribapi_swig.grib_c_index_select_real8 + +def grib_c_index_select_string(iid: 'int *', key: 'char *', val: 'char *') -> "int": + return _gribapi_swig.grib_c_index_select_string(iid, key, val) +grib_c_index_select_string = _gribapi_swig.grib_c_index_select_string + +def grib_c_index_release(iid: 'int *') -> "int": + return _gribapi_swig.grib_c_index_release(iid) +grib_c_index_release = _gribapi_swig.grib_c_index_release + +def grib_c_iterator_delete(iterid: 'int *') -> "int": + return _gribapi_swig.grib_c_iterator_delete(iterid) +grib_c_iterator_delete = _gribapi_swig.grib_c_iterator_delete + +def grib_c_iterator_next(iterid: 'int *') -> "double *, double *, double *": + return _gribapi_swig.grib_c_iterator_next(iterid) +grib_c_iterator_next = _gribapi_swig.grib_c_iterator_next + +def grib_c_get_string(gid: 'int *', key: 'char *', string_val: 'char *') -> "size_t *": + return _gribapi_swig.grib_c_get_string(gid, key, string_val) +grib_c_get_string = _gribapi_swig.grib_c_get_string + +def grib_c_get_string_array(gid: 'int *', key: 'char *', array_string_val: 'char **', size: 'size_t *') -> "int": + return _gribapi_swig.grib_c_get_string_array(gid, key, array_string_val, size) +grib_c_get_string_array = _gribapi_swig.grib_c_get_string_array + +def grib_c_set_string(gid: 'int *', key: 'char *', sval: 'char *', len2: 'int') -> "int": + return _gribapi_swig.grib_c_set_string(gid, key, sval, len2) +grib_c_set_string = _gribapi_swig.grib_c_set_string + +def grib_c_get_long(gid: 'int *', key: 'char *') -> "long *": + return _gribapi_swig.grib_c_get_long(gid, key) +grib_c_get_long = _gribapi_swig.grib_c_get_long + +def grib_c_set_long(gid: 'int *', key: 'char *', INPUT: 'long *') -> "int": + return _gribapi_swig.grib_c_set_long(gid, key, INPUT) +grib_c_set_long = _gribapi_swig.grib_c_set_long + +def grib_c_get_double(gid: 'int *', key: 'char *') -> "double *": + return _gribapi_swig.grib_c_get_double(gid, key) +grib_c_get_double = _gribapi_swig.grib_c_get_double + +def grib_c_set_double(gid: 'int *', key: 'char *', INPUT: 'double *') -> "int": + return _gribapi_swig.grib_c_set_double(gid, key, INPUT) +grib_c_set_double = _gribapi_swig.grib_c_set_double + +def grib_c_set_real8_array(gid: 'int *', key: 'char *', val: 'double *', size: 'int *') -> "int": + return _gribapi_swig.grib_c_set_real8_array(gid, key, val, size) +grib_c_set_real8_array = _gribapi_swig.grib_c_set_real8_array + +def grib_c_get_real8_array(gid: 'int *', key: 'char *', val: 'double *', size: 'int *') -> "int": + return _gribapi_swig.grib_c_get_real8_array(gid, key, val, size) +grib_c_get_real8_array = _gribapi_swig.grib_c_get_real8_array + +def grib_c_get_long_array(gid: 'int *', key: 'char *', val: 'long *', size: 'int *') -> "int": + return _gribapi_swig.grib_c_get_long_array(gid, key, val, size) +grib_c_get_long_array = _gribapi_swig.grib_c_get_long_array + +def grib_c_set_long_array(gid: 'int *', key: 'char *', val: 'long *', size: 'int *') -> "int": + return _gribapi_swig.grib_c_set_long_array(gid, key, val, size) +grib_c_set_long_array = _gribapi_swig.grib_c_set_long_array + +def grib_c_get_real8_element(gid: 'int *', key: 'char *', INPUT: 'int *') -> "double *": + return _gribapi_swig.grib_c_get_real8_element(gid, key, INPUT) +grib_c_get_real8_element = _gribapi_swig.grib_c_get_real8_element + +def grib_c_get_real8_elements(gid: 'int *', key: 'char *', index: 'int *', val: 'double *', size: 'int *') -> "int": + return _gribapi_swig.grib_c_get_real8_elements(gid, key, index, val, size) +grib_c_get_real8_elements = _gribapi_swig.grib_c_get_real8_elements + +def grib_c_set_missing(gid: 'int *', key: 'char *') -> "int": + return _gribapi_swig.grib_c_set_missing(gid, key) +grib_c_set_missing = _gribapi_swig.grib_c_set_missing + +def grib_c_set_key_vals(gid: 'int *', keyvals: 'char *') -> "int": + return _gribapi_swig.grib_c_set_key_vals(gid, keyvals) +grib_c_set_key_vals = _gribapi_swig.grib_c_set_key_vals + +def grib_c_is_missing(gid: 'int *', key: 'char *') -> "int *": + return _gribapi_swig.grib_c_is_missing(gid, key) +grib_c_is_missing = _gribapi_swig.grib_c_is_missing + +def grib_c_is_defined(gid: 'int *', key: 'char *') -> "int *": + return _gribapi_swig.grib_c_is_defined(gid, key) +grib_c_is_defined = _gribapi_swig.grib_c_is_defined + +def grib_c_set_string_array(gid: 'int *', key: 'char *', val: 'char const **') -> "int": + return _gribapi_swig.grib_c_set_string_array(gid, key, val) +grib_c_set_string_array = _gribapi_swig.grib_c_set_string_array + +def grib_set_double_ndarray(gid: 'int *', key: 'char *', dpin_val: 'double *') -> "int": + return _gribapi_swig.grib_set_double_ndarray(gid, key, dpin_val) +grib_set_double_ndarray = _gribapi_swig.grib_set_double_ndarray + +def grib_set_long_ndarray(gid: 'int *', key: 'char *', lpin_val: 'long *') -> "int": + return _gribapi_swig.grib_set_long_ndarray(gid, key, lpin_val) +grib_set_long_ndarray = _gribapi_swig.grib_set_long_ndarray + +def grib_get_double_ndarray(gid: 'int *', key: 'char *', dpout_val: 'double *') -> "int": + return _gribapi_swig.grib_get_double_ndarray(gid, key, dpout_val) +grib_get_double_ndarray = _gribapi_swig.grib_get_double_ndarray + +def grib_get_long_ndarray(gid: 'int *', key: 'char *', lpout_val: 'long *') -> "int": + return _gribapi_swig.grib_get_long_ndarray(gid, key, lpout_val) +grib_get_long_ndarray = _gribapi_swig.grib_get_long_ndarray + +def grib_get_double_ndelements(gid: 'int *', key: 'char *', ipin_index: 'int *', dpout_val: 'double *') -> "int": + return _gribapi_swig.grib_get_double_ndelements(gid, key, ipin_index, dpout_val) +grib_get_double_ndelements = _gribapi_swig.grib_get_double_ndelements + +def grib_c_find_nearest_single(gid: 'int *', arg2: 'int *', arg3: 'double *', arg4: 'double *') -> "double *, double *, double *, double *, int *": + return _gribapi_swig.grib_c_find_nearest_single(gid, arg2, arg3, arg4) +grib_c_find_nearest_single = _gribapi_swig.grib_c_find_nearest_single + +def grib_c_find_nearest_four_single(gid: 'int *', arg2: 'int *', arg3: 'double *', arg4: 'double *', outlats: 'double *', outlons: 'double *', values: 'double *', distances: 'double *', indexes: 'int *') -> "int": + return _gribapi_swig.grib_c_find_nearest_four_single(gid, arg2, arg3, arg4, outlats, outlons, values, distances, indexes) +grib_c_find_nearest_four_single = _gribapi_swig.grib_c_find_nearest_four_single + +def grib_c_get_message(gid: 'int *') -> "size_t *": + return _gribapi_swig.grib_c_get_message(gid) +grib_c_get_message = _gribapi_swig.grib_c_get_message + +def grib_c_get_error_string(INPUT: 'int *', len: 'int') -> "char *": + return _gribapi_swig.grib_c_get_error_string(INPUT, len) +grib_c_get_error_string = _gribapi_swig.grib_c_get_error_string + +def no_fail_on_wrong_length(flag: 'int') -> "void": + return _gribapi_swig.no_fail_on_wrong_length(flag) +no_fail_on_wrong_length = _gribapi_swig.no_fail_on_wrong_length + +def grib_c_get_api_version() -> "long": + return _gribapi_swig.grib_c_get_api_version() +grib_c_get_api_version = _gribapi_swig.grib_c_get_api_version + +def grib_c_gts_header_on() -> "void": + return _gribapi_swig.grib_c_gts_header_on() +grib_c_gts_header_on = _gribapi_swig.grib_c_gts_header_on + +def grib_c_gts_header_off() -> "void": + return _gribapi_swig.grib_c_gts_header_off() +grib_c_gts_header_off = _gribapi_swig.grib_c_gts_header_off + +def grib_c_set_definitions_path(path: 'char const *') -> "void": + return _gribapi_swig.grib_c_set_definitions_path(path) +grib_c_set_definitions_path = _gribapi_swig.grib_c_set_definitions_path + +def grib_c_set_samples_path(path: 'char const *') -> "void": + return _gribapi_swig.grib_c_set_samples_path(path) +grib_c_set_samples_path = _gribapi_swig.grib_c_set_samples_path +# This file is compatible with both classic and new-style classes. + + diff --git a/python3/test_iterator.py b/python3/test_iterator.py new file mode 100755 index 000000000..b980e5862 --- /dev/null +++ b/python3/test_iterator.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python + +import sys +from gribapi import * +import profile + +def main(): + infile = sys.argv[1] + fid = open(infile,"r") + count = grib_count_in_file(fid) + + for i in range(count): + gid = grib_new_from_file(fid) + nval = grib_get_size(gid,"values") + iterid = grib_iterator_new(gid,0) + + missingValue = grib_get_double(gid,"missingValue") + + i=0 + while 1: + result = grib_iterator_next(iterid) + if not result: break + + [lat,lon,value] = result + + sys.stdout.write("- %d - lat=%.6f lon=%.6f value=" % (i,lat,lon)) + + if value == missingValue: + print("missing") + else: + print("%.6f" % value) + + i += 1 + + grib_iterator_delete(iterid) + grib_release(gid) + + fid.close() + +if __name__ == "__main__": + #profile.run('main()') + main() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9a0e1b767..39480257d 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -202,7 +202,7 @@ if( HAVE_PYTHON AND ENABLE_EXTRA_TESTS ) ecbuild_add_test( TARGET eccodes_t_${test} TYPE SCRIPT COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/${test}.sh - ENVIRONMENT PYTHON=${PYTHON_EXECUTABLE} PYTHONPATH=${PROJECT_BINARY_DIR}/python + ENVIRONMENT PYTHON=${PYTHON_EXECUTABLE} PYTHONPATH=${PROJECT_BINARY_DIR}/${ECCODES_PYTHON_DIR} TEST_DEPENDS eccodes_download_bufrs ) endforeach()