Interfac¸age C/C++ avec cython
Xavier Juvigny
ONERA/HPC
D´
ecembre 2013
Interfac¸age avec une librairie C existante
Motivations:
IAppeler des fonctions issues de librairies C existantes
IRendre appelable par du C des fonctions python ou des
fonctions C d ´
efinies dans Cython.
Principe:
Header C .h Header Cython .pxd
Module Cython .pyx
Module Python .py
traduire
importe
importe
Interfacer une fonction C
Exemple : interfacer les fonctions sin et cos de math.h pour
cr´
eer une fonction renvoyant le sinus et le cosinus
ICr´
eer un header cython math.pxd dans un package
appropri ´
e
cdef ex t er n from "math.h" :
doub le s i n ( do ub le an gl e )
double cos ( double ang le )
IOn peut appeler maintenant les deux fonctions dans un
module cython sincos.pyd :
ci m por t math
def sin c o s ( an gle ) :
"""
Retourne le sinus et le cosinus de l’angle
"""
retur n math . s in ( angle ) , math . cos ( angle )
IScript python utilisant le module cython :
from sin c o s import si nc os
from math import p i
print sin c o s (0 .25 p i )
Interfacer une structure C et ses fonctions dans une
classe Python
Exemple : Interfacer une structure Vecteur avec ses
fonctions associ ´
ees
Le header C Vecteur.h
typedef st ru c t {
i n t m dim ;
doublem a r r c o e f s ;
}Ve cteu r ;
Vecteurvecteur new ( i n t dim ) ;
void v e c t e u r f r e e ( Ve cte ur ve c t ) ;
i n t vecteur getDim (const Vecteurv ) ;
i n t vecteur is null (const Vecteurv ) ;
doublev e ct e u r g e t Co e f s ( V ec te ur v ) ;
double vecteur normL2 ( const Vecteurv ) ;
void vecteur add (const Vecteurv1 , const Vecteurv2 ,
Vecteurv3 ) ;
Remarque : is null vecteur retourne en bool ´
een sous
forme d’entier.
Interfacer une structure C et ses fonctions dans une
classe Python
Le header Cython cVecteur.pxd correspondant `
a
Vecteur.h
# f i l e : cV ecteu r . pxd
cdef ex t er n from "Vecteur.h" :
ct y pe d ef s t r u c t Vec teur :
i n t m dim
do ub le m a r r c o e f s
Vecteurvecteu r new ( i n t dim )
v oi d v e c t e u r f r e e ( V ect eur vec t )
v oi d v e ct e ur a d d ( V ec teu r v1 , V ec te ur v2 , V ec te ur v3 )
i n t vecte u r getDi m ( Vect eur v )
b i n t v e c t e u r i s n u l l ( V ecteur v ) ;
do ub le v e c te u r g et C o e f ( V ec te ur v , i n t i )
v o i d v e c t e u r s e t C o e f ( Ve c te ur v , i n t i , double co e f )
do ub le v e c te u r g e t C oe f s ( Ve ct eu r v )
do ub le ve ct eu r n or mL 2 ( Ve ct eu r v )
Remarque : Remarquer le bint pour l’entier consid ´
er´
e comme
bool´
een.
1 / 18 100%