On 2009-04-28 13:10, Dag Sverre Seljebotn wrote:
> Robert Bradshaw wrote:
>> On Apr 28, 2009, at 11:01 AM, Robert Kern wrote:
>>
>>> On 2009-04-28 01:05, Dag Sverre Seljebotn wrote:
>>> [Mike Fletcher wrote:]
>>>>>       * You have to call import_array() in your module or many of the
>>>>>         Numpy C API entry points will segfault
>>>> Are you sure about this? I never do it. I know you need to do it
>>>> from C
>>>> code, but is it not enough in Cython to do
>>>>
>>>> import numpy
>>>>
>>>> ?
>>> If you call any of the PyArray_* functions, you will need an
>>> import_array()
>>> call. That does not just import numpy; it sets up the function
>>> pointer table in
>>> your extension module such that the PyArray_* #defines reference
>>> the right
>>> functions.
>> So "import numpy" doesn't call import_array() then?

No, "import numpy" just imports numpy just as in Python. Each numpy-using 
extension module has a variable local to it that points to the global table of 
function pointers. import_array() must be called once per extension module in 
order to make that module-local variable point to the correct location.

> Apparently a plain import it does what is needed for normal/trivial
> usage of NumPy/Cython, but if you in addition need to call low-level
> PyArray_*-functions then you need the call.
>
> This is fairly well documented in the NumPy API, and my tutorial doesn't
> mention PyArray_*-functions, so I consider the issue OK. (Though we
> could certainly have additional documentation on the wiki for using the
> lower-level NumPy API from Cython).

It would be wise to include it in the tutorial with a comment about when it is 
necessary. People have a wide variety of entry points into the material. They 
may start with your tutorial and just need to use a few API functions. They may 
very well skip the parts in the numpy docs about setting up an extension module 
thinking that Cython took care of everything for them.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco

_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to