Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using cython .pxd files to Augment pure python files

Tags:

python

cython

Following the example here, "Augementing .pxd", I'm trying to use ".pxd" files to augment a pure python file. (Add type definitions external to the pure python file).

python file:

class A(object):
    def foo(self, i=3, x=None):
        print "Big" if i > 1000 else "Small"

pxd file:

cdef class A:
    cpdef foo(self, int i, x)

I've got a dictionary, which I'm defaulting to "None" in python. Unfortunately, cython doesn't like this.

If I use my "pure" python file, without declaring a type or declare the type as "dict" in the pxd file I get the error:

"Signature not compatible with previous declaration"

I noticed that it will compile if I do NOT specify a default value, but there's a reason for declaring the defaults.

Is there a way this can be handled?

like image 874
monkut Avatar asked Oct 04 '10 03:10

monkut


1 Answers

Optional arguments in cpdef functions are declared differently from cdef functions which essentially is same as python functions.

Your .pxd file should be modified to be written as

cdef class A:
    cpdef foo(self, int i=*, x=*)
like image 127
pyfunc Avatar answered Sep 29 '22 09:09

pyfunc