[PyQt] Returning a numpy.ndarray

Phil Thompson phil at riverbankcomputing.com
Fri May 9 17:35:25 BST 2008


On Friday 09 May 2008 17:10:26 Hans Meine wrote:
> Hi,
>
> I am trying to return a numpy array from one of my member functions.  I got
> it worked out, but I have one remaining, sip-related problem:
>
> As e.g. explained on http://numpy.scipy.org/numpydoc/numpy-13.html, I need
> to call import_array() in my module initialization code.  I am using
>
> %PostInitialisationCode
> import_array();
> %End
>
> for that.  However, import_array is defined in the numpy header files, so
> care must be taken not to produce clashing symbols in every compilation
> unit. This should be done by defining PY_ARRAY_UNIQUE_SYMBOL to a unique
> name and defining NO_IMPORT_ARRAY in all but the modules' main compilation
> unit in which the function is being called.  (Don't know where this is
> properly explained ATM.)
>
> However, I cannot get this to work; %UnitCode would be included in every
> unit, so it cannot be used becase NO_IMPORT_ARRAY must not be defined in
> sipfoocmodule.cpp.  Similarly, I tried %ModuleCode and %ModuleHeaderCode. I
> used %TypeHeaderCode to #define NO_IMPORT_ARRAY, but the sipfooBar.h header
> files are all included at the very beginning of sipfoocmodule.cpp, so it is
> defined there, too, before the %ModuleCode.  The only temporary solution I
> found is to manually move the code inserted by %ModuleCode above the
> mentioned #includes.  (Note that it cannot simply be #undef'ed, because it
> is used in conjunction with a subsequent #include which immediately
> evaluates the setting.)
>
> Is this impossible with sip (BTW: I am using sip 4.5.2 and PyQt 4.1.1),
> and/or has anybody else tried using numpy together with SIP/PyQt?

I didn't really understand your explanation, but another approach is to 
#define things on the command line.

Phil


More information about the PyQt mailing list