[Numpy-discussion] newbie for writing numpy/scipy extensions

Gennan Chen gnchen at cortechs.net
Thu Apr 27 12:24:38 CDT 2006


Thanks!

That solve the problem. May I ask what does those #define really   
means??

Gen


On Apr 27, 2006, at 11:35 AM, Travis Oliphant wrote:

> Gennan Chen wrote:
>
>> Hi! All,
>>
>> I just start writing my own python extension based on numpy.  
>> Couple  of questions here:
>>
>> 1. I have some utility functions, such as wrappers for   
>> PyArray_GETPTR* needed be access by different extension modules.  
>> So,  I put them in utlis.h and utlis.c. In utils.h, I need to  
>> include  "numpy/arrayobject.h". But the compilation failed when I  
>> include it  again in my extension module function, wrap.c:
>>
>> #include "numpy/arrayobject.h"
>> #include "utils.h"
>>
>> When I remove it and use
>>
>> #include "utils.h"
>>
>> the compilation works. So, is it true that I can only include   
>> arrayobject.h once?
>
>
> No, you can include arrayobject.h more than once.  However, if you  
> make use of C-API functions (not just macros that access elements  
> of the array) in more than one file for the same extension module,  
> you need to do a couple of things to make it work.
>
> In the original file you must define PY_ARRAY_UNIQUE_SYMBOL to  
> something unique to your extension module before you include the  
> arrayobject.h file.
>
> In the helper c file you must define PY_ARRAY_UNIQUE_SYMBOL and  
> define NO_IMPORT_ARRAY prior to including the arrayobject.h
>
> Thus, in wrap.c you do (feel free to change the name from  
> _chen_extension to something else)
>
> #define PY_ARRAY_UNIQUE_SYMBOL  _chen_extension #include "numpy/ 
> arrayobject.h"
>
> and in
>
> utils.c  you do
>
> #define PY_ARRAY_UNIQUE_SYMBOL  _chen_extension #define  
> NO_IMPORT_ARRAY
> #include "numpy/arrayobject.h"
>
>
>>
>> 2.  which import I should use in my initial function:
>>
>> import_array()
>
>
> import_array()
>
> -Travis
>
>





More information about the Numpy-discussion mailing list