introduction à boost-python - groupe calcul · 2019-12-20 · boost-python v. louvet introduction...

41
Introduction ` a Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´ e Interfa¸ cage des classes Constructeurs Attributs priv´ es et properties Surcharge d’op´ erateurs eritage Fonctions virtuelles Passage de containers Conclusion Introduction ` a Boost-Python V. Louvet Institut Camille Jordan & CNRS 14 d´ ecembre 2006

Upload: others

Post on 29-Jul-2020

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 2: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 3: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 4: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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.

Page 5: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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.

Page 6: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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.

Page 7: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 8: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 ;

}

Page 9: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 ) ;}

Page 10: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 11: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 12: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 13: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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) ∗/

} ;

Page 14: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 );

}

Page 15: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 16: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 ∗/

} ;

Page 17: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 );

}

Page 18: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 <>()). . .;

}

Page 19: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 20: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 21: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 22: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 23: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 ∗/

} ;

Page 24: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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.

Page 25: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 26: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 ∗/

} ;

Page 27: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 ;

} ;

Page 28: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 >());

Page 29: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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.

Page 30: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 31: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 ) { . . . }} ;

Page 32: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 ;

} ;

Page 33: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 );

Page 34: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 35: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 ;

}} ;

Page 36: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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> >());

Page 37: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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

Page 38: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 ...

Page 39: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 ...

Page 40: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 ...

Page 41: Introduction à Boost-Python - groupe Calcul · 2019-12-20 · Boost-Python V. Louvet Introduction Exemple simple Exemple un (tout petit) peu plus compliqu´e Interfacage des classes

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 ...