In addition to the
.pyx source files, Cython uses
which work like C header files – they contain Cython declarations
(and sometimes code sections) which are only meant for inclusion by
Cython modules. A
pxd file is imported into a
pyx module by
pxd files have many use-cases:
They can be used for sharing external C declarations.
They can contain functions which are well suited for inlining by the C compiler. Such functions should be marked
inline, example:cdef inline int int_min(int a, int b): return b if b < a else a
When accompanying an equally named
pyxfile, they provide a Cython interface to the Cython module so that other Cython modules can communicate with it using a more efficient protocol than the Python one.
In our integration example, we might break it up into
pxd files like this:
cmath.pxdfunction which defines the C functions available from the C
math.hheader file, like
sin. Then one would simply do
from cmath cimport sinin
integrate.pxdso that other modules written in Cython can define fast custom functions to integrate.cdef class Function: cpdef evaluate(self, double x) cpdef integrate(Function f, double a, double b, int N)
Note that if you have a cdef class with attributes, the attributes must be declared in the class declaration
pxdfile (if you use one), not the
pyxfile. The compiler will tell you about this.