yes, I verified that it get called.
On 11/14/2013 10:31 AM, Bill Spotz wrote:
> Burlen,
>
> Have you actually verified that the first instance of import_array() actually
> gets called? Because the behavior suggests that it does not.
>
> In PyTrilinos, I wrap the import_array() call inside a C++ singleton, and put
> that singleton in a dynamic library that all my packages link to, thus
> insuring that it gets called once and only once.
>
> -Bill
>
> On Nov 14, 2013, at 11:10 AM, Burlen Loring wrote:
>
>> Hi David,
>>
>> Yes, that the situation. using your naming convention, in addtion to
>> foo_wrap.c I have another file , say foo_convert.cxx, for massaging
>> python data structures into our internal data structures. This source is
>> compiled with a c++ compiler so that I can use templates to simplify
>> handling the numerous types a user could throw at us. All of the sources
>> are linked into the module's .so. I need to use various numpy functions
>> in my data conversions functions that live in foo_convert.cxx. For
>> example I'm using PyArray_Check because I need to discerne between numpy
>> arrays, and python lists and tuples.
>>
>> What I'm confused about is that calls to numpy funtions from this file
>> are segv'ing unless I add another call to import_array() made from
>> foo_convert.cxx. I'd like to understand why that's necessary, and why
>> the import_array() call in the module's init section in foo_wrap.c
>> doesn't have any affect even though it's called first?
>>
>> Thanks
>> Burlen
>>
>> On 11/13/2013 10:48 PM, David Froger wrote:
>>> Hi Burlen,
>>>
>>> SWIG will generate a file named for example foo_wrap.c, which will
>>> contains a call to import_array() inserted by SWIG because of the
>>> %init %{
>>> import_array();
>>> %}
>>> in the SWIG script.
>>> So in the file foo_wrap.c (which will be compiled to a Python module
>>> _foo.so), you should be able to used PyArray_Check without segfault.
>>> Typically, PyArray_Check will be inserted in foo_wrap.c by a typemap,
>>> for example a typemap from numpy.i .
>>>
>>> Do you use PyArray_Check in the foo_wrap.c or in another file? Is
>>> PyArray_Check in called in another C library, that _foo.so is linked
>>> with?
>>>
>>> David
>>>
>>> Quoting Burlen Loring (2013-11-14 02:21:19)
>>>> Hi,
>>>>
>>>> I'd like to add numpy support to an existing code that uses swig. I've
>>>> changed the source file that has code to convert python lists into
>>>> native data from c to c++ so I can use templates to handle data
>>>> conversions. The problem I'm having is a segfault on PyArray_Check
>>>> called from my c++ source. Looking at things in the debugger the
>>>> argument passed to it is indeed an intialized python list, my swig file
>>>> has import_array() in it's init, and I've verified that it is getting
>>>> called. adding a function in my c++ source to call import_array() a
>>>> second time prevents the segfault. Could anyone explain why I need the
>>>> import_array() in both places? If that's the correct way to handle it?
>>>>
>>>> Thanks
>>>> Burlen
>>>> _______________________________________________
>>>> NumPy-Discussion mailing list
>>>> [email protected]
>>>> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>>> _______________________________________________
>>> NumPy-Discussion mailing list
>>> [email protected]
>>> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>> _______________________________________________
>> NumPy-Discussion mailing list
>> [email protected]
>> 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: [email protected] **
>
>
>
>
>
_______________________________________________
NumPy-Discussion mailing list
[email protected]
http://mail.scipy.org/mailman/listinfo/numpy-discussion