On Sep 11, 2009, at 12:24 PM, Darren Dale wrote:

> On Fri, Sep 11, 2009 at 1:36 PM, Dag Sverre Seljebotn
> <[email protected]> wrote:
>>> On Fri, Sep 11, 2009 at 12:26 PM, Dag Sverre Seljebotn
>>> <[email protected]> wrote:
>>>> Hi Darren,
>>>>
>>>>> Hello,
>>>>>
>>>>> I am just learning cython, please bear with me. This is maybe a  
>>>>> common
>>>>> question, but I didn't recognize it in the documentation or the  
>>>>> FAQs.
>>>>> How do you make cython definitions available to external C  
>>>>> code? For
>>>>> example, converting some of numpy's code in numpy/core/src/ 
>>>>> multiarray
>>>>> to cython without affecting the C API?
>>>>
>>>> Doing just this is something I've been eager to try myself,  
>>>> please don't
>>>> hesitate to ask any questions you might have in the process.
>>>>
>>>> I hope it's OK that I write down some thoughts I have about  
>>>> this, even
>>>> if
>>>> they're not really related to your question.
>>>>
>>>> One thing that complicates this process is that NumPy has a  
>>>> requirement
>>>> that both modes of building the multiarray module works:
>>>> - Building all C files seperately, then linking
>>>>  -- But this won't work with Cython out of the box because the  
>>>> module
>>>> initialization code won't get called, so that globals etc. are not
>>>> initialized properly.
>>>> - Including all C files in a single master C file, then compile  
>>>> only
>>>> that
>>>> one file
>>>>  -- This won't work with Cython as it inserts module  
>>>> initialization code
>>>> which will conflict with the module initialization code already  
>>>> present
>>>> in multiarray.
>>>
>>> Where can I learn more about these requirements?
>>
>> It's just how the build works, there's two seperate ways of building
>> things; one "old" and one new which David introduced recently. I  
>> asked
>> whether the old one would be dropped, but it appears not:
>>
>> http://thread.gmane.org/gmane.comp.python.numeric.general/32385
>>
>> I'm not sure if this is all that well documented anywhere, I think  
>> the
>> information has to be extracted on the mailing lists. Please ask  
>> again
>> whenever you're stuck.
>>
>> If you can get Cython code into the multiarray module using any of  
>> the
>> build modes it would be a great first step -- I don't expect it to  
>> be easy
>> (because Cython is made for writing entire modules, not for mixing  
>> with
>> other C source also making up the module), but I think it is doable.
>
> So let me see if I understood you: Cython is not currently designed to
> let you build a module up from several submodule sources, be they C or
> Cython, because it will not expose the symbols in those submodules.
> Isn't it possible to make these available by treating them as external
> C sources, using the "cdef extern from "spam.h":" discussed at
> http://docs.cython.org/docs/external_C_code.html#referencing-c- 
> header-files
> ?
>
> Although I am very interested in diving into cython, if it is not
> currently a good fit for helping with the numpy py3 transition then I
> should probably focus on getting up to speed on what needs to be done
> with the existing numpy C code.

Yes, you can use the include keyword to build up a module out of  
several other files. The disadvantage of this is that you couldn't  
compile pieces independently--the whole thing would end up being one  
huge .c file. I don't think any of the obstacles for using Cython for  
the core of NumPy are insurmountable, but they may require some  
modification of Cython (e.g. to produce output .c files that are not  
independent modules, made to be linked using c linker). It's not  
clear the best way to go about this (though someone who knows more  
about the NumPy build system would know better than I).

- Robert


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

Reply via email to