[Cython] How to define C-consts in python module scope

mark florisson markflorisson88 at gmail.com
Wed Jul 20 18:51:24 CEST 2011


On 20 July 2011 18:06, Lisandro Dalcin <dalcinl at gmail.com> wrote:
> On 19 July 2011 20:48, Robert Bradshaw <robertwb at math.washington.edu> wrote:
>> On Tue, Jul 19, 2011 at 3:02 PM, Lisandro Dalcin <dalcinl at gmail.com> wrote:
>>> On 19 July 2011 02:24, Vitja Makarov <vitja.makarov at gmail.com> wrote:
>>>> 2011/7/18 Robert Bradshaw <robertwb at math.washington.edu>:
>>>>> Trevor King and I discussed this quite a while back, but every time I
>>>>> got around to looking at his code (I don't think he ever created a
>>>>> formal pull request) something came up. The idea was that we could
>>>>> support cpdef structs and extern functions as well.
>>>>>
>>>>
>>>> That's interesting, I think I shouldn't hurry with my pull request.
>>>>
>>>> 2011/7/19 Robert Bradshaw <robertwb at math.washington.edu>:
>>>>> On Mon, Jul 18, 2011 at 4:34 PM, Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:
>>>>>> My suggestion is
>>>>>>
>>>>>>  cdef exposed enum:
>>>>>>    ...
>>>>>
>>>>> I agree, public is an overloaded word. This meaning is analogous to
>>>>> its use for cdef class members. Perhaps we should use "api" for api
>>>>> generation, and public used for Python-level access, with cpdef being
>>>>> the preferred form for declaring Python-accessible types.
>>>>>
>>>>
>>>> It seems to me that cpdef is more cythonic but exposed could be used
>>>> in this case:
>>>>
>>>> cdef extern from "ev.h":
>>>>    exposed enum:
>>>>        EV_READ
>>>>        EV_WRITE
>>>>
>>>
>>> And what about this?
>>>
>>> cdef extern from "ev.h":
>>>   cpdef enum:
>>>       EV_READ
>>>       EV_WRITE
>>
>> Yep, exactly.
>>
>>> BTW, how is this supposed to work with *.pxd files? I think the values
>>> will be exposed just in the matching implementation .pyx file, and not
>>> with cimport, right?
>>
>> It would be an error unless there's an corresponding .pyx file (which
>> could be empty). The idea is that one could also define extern cpdef
>> functions and structs and wrappers would be provided.
>>
>
> It would be an error? What do you mean? if you cpdef enum in foo.pxd,
> and have foo.pyx, then the enumerations should be exposed in the 'foo'
> module. But then if you "cimport foo" in bar.pyx, that should succeed
> but the enumerations should not be exposed in the "bar" module... Am I
> missing something?
>

I believe Robert confirmed what you said and added to that that it
would be an error to have a cpdef extern enum in a .pxd without a
corresponding .pyx file.

> --
> Lisandro Dalcin
> ---------------
> CIMEC (INTEC/CONICET-UNL)
> Predio CONICET-Santa Fe
> Colectora RN 168 Km 472, Paraje El Pozo
> 3000 Santa Fe, Argentina
> Tel: +54-342-4511594 (ext 1011)
> Tel/Fax: +54-342-4511169
> _______________________________________________
> cython-devel mailing list
> cython-devel at python.org
> http://mail.python.org/mailman/listinfo/cython-devel
>


More information about the cython-devel mailing list