introduction à boost-python - groupe calcul · 2019-12-20 · boost-python v. louvet introduction...
TRANSCRIPT
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Introduction a Boost-Python
V. Louvet
Institut Camille Jordan & CNRS
14 decembre 2006
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
1 Introduction
2 Exemple simple
3 Exemple un (tout petit) peu plus complique : petit code deresolution d’ODE
Interfacage des classesConstructeursAttributs prives et propertiesSurcharge d’operateursHeritageFonctions virtuellesPassage de containers
4 Conclusion
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Sommaire
1 Introduction
2 Exemple simple
3 Exemple un (tout petit) peu plus complique : petit code deresolution d’ODE
Interfacage des classesConstructeursAttributs prives et propertiesSurcharge d’operateursHeritageFonctions virtuellesPassage de containers
4 Conclusion
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Introduction
Qu’est-ce que Boost.Python ?
• Librairie open source en C++ qui fournit une interfacepermettant de relier des classes et fonctions C++ enPython en utilisant juste un compilateur C++.
• L’interfacage est non-intrusif vis a vis du code C++.
• L’utilisation de techniques de metaprogramming permetde simplifier la syntaxe sous la forme du type desdeclarations d’interfaces du langage IDL.
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Introduction
Qu’est-ce que Boost.Python ?
• Librairie open source en C++ qui fournit une interfacepermettant de relier des classes et fonctions C++ enPython en utilisant juste un compilateur C++.
• L’interfacage est non-intrusif vis a vis du code C++.
• L’utilisation de techniques de metaprogramming permetde simplifier la syntaxe sous la forme du type desdeclarations d’interfaces du langage IDL.
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Introduction
Qu’est-ce que Boost.Python ?
• Librairie open source en C++ qui fournit une interfacepermettant de relier des classes et fonctions C++ enPython en utilisant juste un compilateur C++.
• L’interfacage est non-intrusif vis a vis du code C++.
• L’utilisation de techniques de metaprogramming permetde simplifier la syntaxe sous la forme du type desdeclarations d’interfaces du langage IDL.
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Sommaire
1 Introduction
2 Exemple simple
3 Exemple un (tout petit) peu plus complique : petit code deresolution d’ODE
Interfacage des classesConstructeursAttributs prives et propertiesSurcharge d’operateursHeritageFonctions virtuellesPassage de containers
4 Conclusion
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Exemple simpleAppel d’une fonction
Code C++
double f a c t ( i n t n ) {double f = 1 ;whi le ( n > 1) f ∗= n−−;return f ;
}
double nepe r ( i n t n ) {double s = 0 . ;f o r ( i n t i = 0 ; i < n ; i++)s += 1/ f a c t ( i ) ;return s ;
}
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Exemple simpleAppel d’une fonction
Interfacage avec Python
#i n c l u d e <boos t / python . hpp>u s i n g namespace boos t : : python ;
BOOST PYTHON MODULE( nepe r ) {de f (” nepe r ” , nepe r ) ;}
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Exemple simpleAppel d’une fonction : et en python ?
Code Python
import nepe rp r i n t nepe r . nepe r (100)
Resultats
2.71828182846
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Sommaire
1 Introduction
2 Exemple simple
3 Exemple un (tout petit) peu plus complique : petit code deresolution d’ODE
Interfacage des classesConstructeursAttributs prives et propertiesSurcharge d’operateursHeritageFonctions virtuellesPassage de containers
4 Conclusion
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Sommaire
1 Introduction
2 Exemple simple
3 Exemple un (tout petit) peu plus complique : petit code deresolution d’ODE
Interfacage des classesConstructeursAttributs prives et propertiesSurcharge d’operateursHeritageFonctions virtuellesPassage de containers
4 Conclusion
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEInterfacage des classes
Code C++ : classe maillage 1D homogene
c l a s s ma i l l a g e {p u b l i c :doub le uns tx2 ( ) con s t { r e t u r n un s t x2 ; }i n t np ( ) con s t { r e t u r n np ; }
p r i v a t e :i n t np ; /∗!< Nombre de Pts ∗/doub le un s t x2 ; /∗!< 1/( tx ˆ2) ∗/
} ;
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEInterfacage des classes
Interfacage python
#i n c l u d e <boos t / python . hpp>#i n c l u d e ” ma i l l a g e . hpp”u s i n g namespace boos t : : python ;BOOST PYTHON MODULE( rd ) {
c l a s s <ma i l l a g e >(” ma i l l a g e ” ). def ( ” uns tx2 ” ,& ma i l l a g e : : uns tx2 ). def ( ”np” ,& ma i l l a g e : : np );
}
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Sommaire
1 Introduction
2 Exemple simple
3 Exemple un (tout petit) peu plus complique : petit code deresolution d’ODE
Interfacage des classesConstructeursAttributs prives et propertiesSurcharge d’operateursHeritageFonctions virtuellesPassage de containers
4 Conclusion
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEConstructeurs
Code C++ : constructeur de la classe maillage
c l a s s ma i l l a g e {p u b l i c :m a i l l a g e ( i n t np , doub le s z )
: s i z e ( s z ) , np ( np ) {doub le t x = s i z e /( np −1);un s t x2 = 1 . / ( tx ∗ t x ) ;p t s . r e s i z e ( np ) ;
f o r ( i n t i = 0 ; i < np ; i++)p t s [ i ] = −( s i z e /2.)+
doub le ( i ) / ( np−1)∗ s i z e ;}
p r i v a t e :doub le s i z e ; /∗!< T a i l l e du domaine ∗/
} ;
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEConstructeurs
Interfacage python
#i n c l u d e <boos t / python . hpp>#i n c l u d e ” ma i l l a g e . hpp”u s i n g namespace boos t : : python ;BOOST PYTHON MODULE( rd ) {
c l a s s <ma i l l a g e >(” ma i l l a g e ” ,i n i t <i n t , double , double >())
. def ( ” uns tx2 ” ,& ma i l l a g e : : uns tx2 )
. def ( ”np” ,& ma i l l a g e : : np );
}
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEConstructeurs
On peut rajouter d’autres constructeurs : C++
c l a s s ma i l l a g e {pub l i c :m a i l l a g e ( ) { /∗ l e c t u r e s u r f i c h i e r ∗/ . . . }
}
On peut rajouter d’autres constructeurs : interface python
#i n c l u d e <boos t / python . hpp>#i n c l u d e ” ma i l l a g e . hpp”u s i n g namespace boos t : : python ;BOOST PYTHON MODULE( rd ) {
c l a s s <ma i l l a g e >(” ma i l l a g e ” ,i n i t <i n t , double , double >())
. def ( i n i t <>()). . .;
}
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Sommaire
1 Introduction
2 Exemple simple
3 Exemple un (tout petit) peu plus complique : petit code deresolution d’ODE
Interfacage des classesConstructeursAttributs prives et propertiesSurcharge d’operateursHeritageFonctions virtuellesPassage de containers
4 Conclusion
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEAttributs prives et properties
• Passage d’un attribut public de la classe :
Attribut public en C++
c l a s s ma i l l a g e {p u b l i c :s t r i n g msg ;
} ;
Interface python
c l a s s <ma i l l a g e > ( . . . ). d e f r e a d o n l y ( ‘ ‘ msg ’ ’ ,& ma i l l a g e : : msg )
Utilisation directe en python
ma i l = rd . ma i l l a g e ( )p r i n t mai l . msg
• Passage d’un attribut prive de la classe par l’intermediairedes methodes classiques set et get
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEAttributs prives et properties
• Passage d’un attribut public de la classe :• Passage d’un attribut prive de la classe par l’intermediaire
des methodes classiques set et get
Attribut prive en C++
vo i d ma i l l a g e : : s e tnp ( i n t n ) { np=n ; }i n t ma i l l a g e : : getnp ( ) con s t { r e t u r n np ; }
Interface python
c l a s s <ma i l l a g e > ( . . . ). a dd p r op e r t y ( ‘ ‘ np ’ ’ ,& ma i l l a g e : : getnp ,
&ma i l l a g e : : s e tnp )
Utilisation directe en python
ma i l . np = 100
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Sommaire
1 Introduction
2 Exemple simple
3 Exemple un (tout petit) peu plus complique : petit code deresolution d’ODE
Interfacage des classesConstructeursAttributs prives et propertiesSurcharge d’operateursHeritageFonctions virtuellesPassage de containers
4 Conclusion
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODESurcharge d’operateurs
Considerons la classe de variables du probleme
Classe C++
c l a s s ph i {p u b l i c :
ph i ( i n t np , vec to r <double> v i n i t ) :np ( np ) {ph i . r e s i z e ( np ) ;
f o r ( i n t i = 0 ; i < np ; i++)/∗ I n i t i a l i s a t i o n de ph i a p a r t i r de v i n i t ∗/
}
f r i e n d ph i& op e r a t o r+(ph i& ph , doub le x ) {f o r ( i n t i = 0 ; i < ph . np ; i++)
ph . p h i [ i ] = ph . p h i [ i ] + x ;r e t u r n ph ;
}
p r i v a t e :i n t np ; /∗!< Nombre de p o i n t s des t a b l e a u x ∗/vec to r <double> ph i ; /∗!< Tableau s o l u t i o n ∗/
} ;
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODESurcharge d’operateurs
Considerons la classe de variables du probleme
Interface python
c l a s s <phi >(” ph i ” , i n i t <i n t , v e c to r <double> > ( ) ). de f ( s e l f + doub l e ( ) );
Utilisation directe en python
ma i l=rd . ma i l l a g e ( 101 , 140 . )ph=rd . ph i ( ma i l . np ( ) , ma i l . p t s ( ) )ph+12.
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Sommaire
1 Introduction
2 Exemple simple
3 Exemple un (tout petit) peu plus complique : petit code deresolution d’ODE
Interfacage des classesConstructeursAttributs prives et propertiesSurcharge d’operateursHeritageFonctions virtuellesPassage de containers
4 Conclusion
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEHeritage
Considerons la classe solveur
Classe C++ Solver
c l a s s s o l v e r {p u b l i c :
s o l v e r ( doub le t t o t , i n t nt ) :t t o t ( t t o t ) , n t ( nt ) {d t = t t o t / n t ;
}
v i r t u a l ˜ s o l v e r ( ) {}vo i d s o l v e ( vec to r <double> vec ) { . . . }
p r o t e c t e d :doub le t t o t ; /∗!< Temps t o t a l ∗/i n t n t ; /∗!< Nombre de pas de temps ∗/doub le d t ; /∗!< Pas de temps ∗/
} ;
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEHeritage
Un solveur particulier
Classe C++ RK4
c l a s s rk4 : p u b l i c s o l v e r {p u b l i c :
rk4 ( doub le t t o t , i n t nt , i n t ntab ): s o l v e r ( t t o t , nt ) , n tab ( ntab ) { . . . }
p r i v a t e :i n t ntab ;
} ;
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEHeritage
L’interface python correspondante
Classe C++ RK4
c l a s s <s o l v e r >(” s o l v e r ” , i n i t <double , i n t >()). d e f ( ” s o l v e ” ,& s o l v e r : : s o l v e );
c l a s s <rk4 , bases<s o l v e r > >(” rk4 ” , i n i t <double , i n t , i n t >());
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEHeritage
• Les classes derivees heritent automatiquement de toutesles methodes de la classe Python de base.
• Les conversions de la classe derivee vers la classe de basesont parfaitement gerees par Boost.Python : les methodesC++ (interfacees pour Python) qui attendent un pointeurou une reference sur un objet de la classe de baseacceptent un objet de la classe derivee.
• Il est aussi possible de deriver directement en Python lesclasses C++ interfacees par Boost.Python.
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Sommaire
1 Introduction
2 Exemple simple
3 Exemple un (tout petit) peu plus complique : petit code deresolution d’ODE
Interfacage des classesConstructeursAttributs prives et propertiesSurcharge d’operateursHeritageFonctions virtuellesPassage de containers
4 Conclusion
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEFonctions virtuelles
Virtualisation de la methode solve
Classe C++ Solver et rk4
c l a s s s o l v e r {p u b l i c :
v i r t u a l v o i d s o l v e ( vec to r <double >) = 0 ;. . .
} ;c l a s s rk4 : p u b l i c s o l v e r {p u b l i c :
vo i d s o l v e ( vec to r <double> v e cph i ) { . . . }} ;
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEFonctions virtuelles
Pour interfacer les methodes virtuelles proprement, il faut ecrireune classe “enveloppe” derivant de la classe de base, de facona respecter le principe de non-intrusion du code C++.
Classe wrapper
#i n c l u d e <boos t / python /wrapper . hpp>#i n c l u d e <boos t / python / c a l l . hpp>c l a s s so l ve rWrap : p u b l i c s o l v e r {p u b l i c :
so l ve rWrap ( PyObject ∗ s e l f , doub le t t o t , i n t nt ): s o l v e r ( t t o t , nt ) , s e l f ( s e l f ) {}so l ve rWrap ( PyObject ∗ s e l f , con s t s o l v e r& s ): s o l v e r ( s ) , s e l f ( s e l f ) {}v i r t u a l ˜ so l ve rWrap ( ) {}v i r t u a l v o i d s o l v e ( vec to r <double> vec ) {
ca l l me thod <vo id >( s e l f , ” s o l v e ” , vec ) ;}
p r i v a t e :PyObject ∗ s e l f ;
} ;
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEFonctions virtuelles
L’element cle qui permet la surcharge en Python est l’appel dela methode call method. Tous les constructeurs de la classewrapper doivent etre redefinis avec un argument initial de typePyObject*. Cet argument doit etre stocke de facon a pouvoiretre utilise lors de l’appel de call method. Si la fonction n’estpas virtuelle pure, il faut prevoir une fonction par defautsolve default afin de pouvoir appeler la fonction solve de laclasse de base.
Interface Python
c l a s s <s o l v e r , so lverWrap >(” s o l v e r ” , i n i t <double , i n t >()). d e f ( ” s o l v e ” ,& s o l v e r : : s o l v e );
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Sommaire
1 Introduction
2 Exemple simple
3 Exemple un (tout petit) peu plus complique : petit code deresolution d’ODE
Interfacage des classesConstructeursAttributs prives et propertiesSurcharge d’operateursHeritageFonctions virtuellesPassage de containers
4 Conclusion
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEPassage de containers C++
Revenons a notre classe maillage. On voudrait pouvoir accederau tableau des points de ce maillage. Il nous faut donc unemethode get sur cet attribut.
Methode get sur pts
c l a s s ma i l l a g e {. . .
v e c to r <double> p t s ( ) con s t {r e t u r n p t s ;
}} ;
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Interfacage d’un petit code de resolution d’ODEPassage de containers C++
Il nous faut donc une enveloppe pour la classe std : :vector. Onutilise pour cela l’indexation de Boost.Python qui permetl’exportation simple de conteneur C++ en Python. Lesconteneurs indexables sont ceux qui autorisent un accesaleatoire via l’operateur [] (typiquement std : :vector).
Interface pour la classe vector et la methode pts
c l a s s <ma i l l a g e >(” ma i l l a g e ” , i n i t <i n t , double >()). d e f ( ” p t s ” ,& ma i l l a g e : : p t s );
c l a s s <s t d : : v e c to r <double> >(” s t d v e c t o r d o u b l e ” ). d e f ( v e c t o r i n d e x i n g s u i t e <s t d : : v e c to r <double> >());
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Sommaire
1 Introduction
2 Exemple simple
3 Exemple un (tout petit) peu plus complique : petit code deresolution d’ODE
Interfacage des classesConstructeursAttributs prives et propertiesSurcharge d’operateursHeritageFonctions virtuellesPassage de containers
4 Conclusion
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Conclusion
• Un outil puissant.
• Une documentation pas toujours tres explicite.
• Tres utilise dans les jeux videos (par exemple CivilizationIV).
• Je n’ai pas parle de beaucoup de choses ...
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Conclusion
• Un outil puissant.
• Une documentation pas toujours tres explicite.
• Tres utilise dans les jeux videos (par exemple CivilizationIV).
• Je n’ai pas parle de beaucoup de choses ...
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Conclusion
• Un outil puissant.
• Une documentation pas toujours tres explicite.
• Tres utilise dans les jeux videos (par exemple CivilizationIV).
• Je n’ai pas parle de beaucoup de choses ...
Introduction aBoost-Python
V. Louvet
Introduction
Exemplesimple
Exemple un(tout petit)peu pluscomplique
Interfacage desclasses
Constructeurs
Attributs priveset properties
Surcharged’operateurs
Heritage
Fonctionsvirtuelles
Passage decontainers
Conclusion
Conclusion
• Un outil puissant.
• Une documentation pas toujours tres explicite.
• Tres utilise dans les jeux videos (par exemple CivilizationIV).
• Je n’ai pas parle de beaucoup de choses ...