[Numpy-discussion] [EXTERNAL] swig interface file (numpy.i) warning

Bill Spotz wfspotz@sandia....
Wed Feb 27 17:44:24 CST 2013


Is there documentation for the new C API for numpy?

Thanks,
Bill

On Feb 26, 2013, at 2:04 PM, Bill Spotz wrote:

> So the difference is that I was wanting to make changes in the git repository that is at version 1.8.  I would expect it to still work, though.
> 
> I can take a look at the scipy issue.
> 
> -Bill
> 
> On Feb 26, 2013, at 1:41 PM, Ralf Gommers wrote:
> 
>> On Mon, Feb 25, 2013 at 6:12 AM, Bill Spotz <wfspotz@sandia.gov> wrote:
>> I wanted to take a stab at updating numpy.i to not use deprecated NumPy C/API code.  Nothing in the git logs indicates this has already been done. I added
>> 
>> #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
>> 
>> to numpy.i right before it includes numpy/arrayobject.h.  The built-in tests for numpy.i should be sufficient to ferret out all of the deprecated calls.  When I try to make the tests, the compiler tells me that it has included
>> 
>> npy_deprecated_api.h
>> 
>> and I get a compiler error when it includes old_defines.h, telling me that it is deprecated.  Shouldn't my #define prevent this from happening?  I'm confused.  Any guidance would be appreciated.
>> 
>> Hi Bill, this works as expected for me. I did the following:
>> 
>> 1. Build 1.7.0 release in-place
>> 2. Set PYTHONPATH to in-place build.
>> 3. $ cd doc/swig
>> 4. $ make test  # runs all tests
>> 5. Add define in numpy.i like you did
>> 6. $ make test  # now fails because old_defines.h wasn't included
>> 
>> First failure is:
>> 
>> Array_wrap.cxx:5506:20: error: ‘PyArrayObject’ has no member named ‘data’
>> Array_wrap.cxx: In function ‘PyObject* _wrap_new_Array2(PyObject*, PyObject*)’:
>> Array_wrap.cxx:5635:55: error: cannot convert ‘PyObject* {aka _object*}’ to ‘const PyArrayObject* {aka const tagPyArrayObject*}’ for argument ‘1’ to ‘int PyArray_TYPE(const PyArrayObject*)’
>> error: command 'gcc' failed with exit status 1
>> 
>> 
>> If you're about to update numpy.i, maybe you could take along the divergence between the numpy and scipy versions of it? A ticket was just opened for that: http://projects.scipy.org/scipy/ticket/1825
>> I don't know how much work that would be, or why we even have two versions.
>> 
>> Cheers,
>> Ralf
>> 
>> 
>> 
>> Thanks,
>> Bill
>> 
>> On Oct 9, 2012, at 9:18 PM, Tom Krauss wrote:
>> 
>>> This code reproduces the error - I think it is small enough for email.  (large) numpy.i not included, let me know if you want that too.  Makefile will need to be tailored to your environment.
>>> If it's more convenient, or you have trouble reproducing, I can create a branch on github - let me know.
>>> 
>>> On Tue, Oct 9, 2012 at 1:47 PM, Tom Krauss <thomas.p.krauss@gmail.com> wrote:
>>> I can't attach the exact code but would be happy to provide something simple that has the same issue.  I'll post something here when I can get to it.
>>> - Tom
>>> 
>>> 
>>> On Tue, Oct 9, 2012 at 10:52 AM, Bill Spotz <wfspotz@sandia.gov> wrote:
>>> Tom, Charles,
>>> 
>>> If you discuss this further, be sure to CC me.
>>> 
>>> -Bill Spotz
>>> 
>>> On Oct 9, 2012, at 8:50 AM, Charles R Harris wrote:
>>> 
>>>> Hi Tom,
>>>> 
>>>> On Tue, Oct 9, 2012 at 8:30 AM, Tom Krauss <thomas.p.krauss@gmail.com> wrote:
>>>> Hi,
>>>> 
>>>> I've been happy to use numpy.i for generating SWIG interfaces to C++.
>>>> 
>>>> For a while, I've noticed this warning while compiling:
>>>> /Users/tkrauss/projects/dev_env/lib/python2.7/site-packages/numpy-1.8.0.dev_f2f0ac0_20120725-py2.7-macosx-10.8-x86_64.egg/numpy/core/include/numpy/npy_deprecated_api.h:11:2: warning: #warning "Using deprecated NumPy API, disable it by #defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION"
>>>> 
>>>> and today tried to get rid of the warning.
>>>> 
>>>> So, in numpy.i, I followed the warning's advice.  I added the # def here:
>>>> 
>>>> %{
>>>> #ifndef SWIG_FILE_WITH_INIT
>>>> #  define NO_IMPORT_ARRAY
>>>> #endif
>>>> #include "stdio.h"
>>>> #define NPY_NO_DEPRECATED_API  NPY_1_7_API_VERSION
>>>> #include <numpy/arrayobject.h>
>>>> %}
>>>> 
>>>> SWIG was happy, but when compiling the C++ wrapper, there were many warnings followed by many errors.  The warnings were for redefinition of NPY_MIN_BYTE and similar.  The errors were for all kinds of stuff, excerpt here:
>>>> native_wrap.cpp:3632: error: ‘PyArray_NOTYPE’ was not declared in this scope
>>>> native_wrap.cpp:3633: error: cannot convert ‘PyObject*’ to ‘const PyArrayObject*’ for argument ‘1’ to ‘int PyArray_TYPE(const PyArrayObject*)’
>>>> native_wrap.cpp: At global scope:
>>>> native_wrap.cpp:3877: error: ‘intp’ has not been declared
>>>> native_wrap.cpp: In function ‘int require_fortran(PyArrayObject*)’:
>>>> native_wrap.cpp:3929: error: ‘struct tagPyArrayObject’ has no member named ‘nd’
>>>> native_wrap.cpp:3933: error: ‘struct tagPyArrayObject’ has no member named ‘flags’
>>>> native_wrap.cpp:3933: error: ‘FARRAY’ was not declared in this scope
>>>> native_wrap.cpp:20411: error: ‘struct tagPyArrayObject’ has no member named ‘data’
>>>> 
>>>> It looks like there is a new C API for numpy, and the version of numpy.i that I have doesn't use it.
>>>> 
>>>> Is there a new version of numpy.i available (or in development) that works with the new API?  Short term it will just get rid of a warning but I am interested in a good long term solution in case I need to upgrade numpy.
>>>> 
>>>> 
>>>> In the long term we would like to hide the ndarray internals, essentially making them private. There are still some incomplete areas, f2py and, apparently, numpy.i. Your feedback here is quite helpful and if you have some time we can try to get this straightened out. Could you attach the code you are trying to interface? If you have a github account you could also set up a branch where we could work on this.
>>>> 
>>>> Chuck
>>>> _______________________________________________
>>>> NumPy-Discussion mailing list
>>>> NumPy-Discussion@scipy.org
>>>> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>>> 
>>> ** Bill Spotz                                              **
>>> ** Sandia National Laboratories  Voice: (505)845-0170      **
>>> ** P.O. Box 5800                 Fax:   (505)284-0154      **
>>> ** Albuquerque, NM 87185-0370    Email: wfspotz@sandia.gov **
> 




More information about the NumPy-Discussion mailing list