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 ;
double∗m a r r c o e f s ;
}Ve cteu r ;
Vecteur∗vecteur 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 Vecteur∗v ) ;
i n t vecteur is null (const Vecteur∗v ) ;
double∗v e ct e u r g e t Co e f s ( V ec te ur ∗v ) ;
double vecteur normL2 ( const Vecteur∗v ) ;
void vecteur add (const Vecteur∗v1 , const Vecteur∗v2 ,
Vecteur∗v3 ) ;
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
Vecteur∗vecteu 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%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!