Le langage Python est un langage interprété multi-paradigme utilisable dans de très nombreux contextes grâce à des bibliothèques spécialisées. La communauté Python ne cesse de s'élargir en offrant à ce langage de plus en plus de possibilités. Un ensemble d'outils en calcul et en visualisation scientifique permettent d'utiliser le langage Python comme un langage de haut niveau pour le prototypage et l’environnement des codes de calcul. Il permet également le développement d'applications performantes « sur mesure » car il est interfaçable facilement avec des routines écrites en langages de bas niveau (Fortran, C ou C++). Ce langage aide ainsi à réaliser rapidement des codes de recherche efficaces. De plus, il facilite l'évolution de ces codes vers de vrais logiciels puisqu'il existe un ensemble de modules permettant de faire rapidement des interfaces graphiques, des applications web, ... Les utilisateurs peuvent ainsi interagir sur leurs simulations numériques et visualiser les résultats obtenus de façon confortable.
Cette formation avait pour but d’expliquer l’intérêt du langage Python dans le domaine du calcul scientifique, dans tous les aspects du développement, du cycle de vie, et de l’utilisation d’un code de calcul.
Lors de cette formation, nous avons considèré un modèle mathématique issu d'un problème le plus multidisciplinaire possible. Il a servit de fil conducteur pour développer un code de calcul le plus abouti possible, c’est-à-dire avec pré et post-traitement des données et packaging.
La formation s'est déroulée sous forme de cours théoriques qui ont été mis en pratique lors de TP. Cela a permis de parcourir tous les stades de conception d'un tel logiciel et de voir à chaque étape quels sont les modules Python les plus adaptés.
Les points abordés lors de cette formation ont été les suivants:
- Les principaux concepts du langage Python.
- Les modules Python dédiés au calcul: manipulation de tableaux multidimensionnels (numpy), bibliothèques scientifiques (scipy).
- Les outils de debogage et de profilage.
- L'interfaçage Python avec des routines écrites en langages bas niveaux : Fortran (f2py) et C/C++(swig), pour avoir des codes performants et réutiliser les sources existantes.
- Visualisation des résultats numériques obtenus en temps réel (vtk, matplotlib, VPython et Qwt), ou à l’issu du calcul (interfaçage de Paraview).
- Le packaging.
- Les outils de parallélisation.
- Bref historique
- Que peut-on faire avec Python ?
- L'interpréteur de base et IPython
- Les types de base
- Les modules
- Les entrées/sorties
- Les classes
- ...
Introduction :
- historique
- contexte calcul intensif
- migration numarray ?
Manipulations de base :
- création
- indexing/slicing
- quelques méthodes
Détails des tableaux :
- shape, dtype, order
- I/O
- print options
- masked arrays
- fonctions utilisateur "UFuncs"
- extension de types
Divers :
- quelques packages (random, matrices, strings, ...)
- gestion des erreurs
- méthodes et fonctions supplémentaires
Présentation générale du module et de ce qu'il contient
Présentation plus détaillée du contenu de quelques sous-modules :
- interpolation
- FFT
- intégration (résolution ODE)
- algèbre linéaire
- matrices creuses
- optimisation
TP sur les bases de Python, Numpy et scipy
Sylvain Faure, Loïc Gouarin, Konrad Hinsen, Marc Poinot
Introduction: tour d'horizon des modules Python de visualisation (2D et 3D)
Matplotlib: visualisation 2D (et 3D) interactive
PyQwt: visualisation performante bas niveau
guiqwt (avec guidata) :
- visualisation performante haut niveau
- aide à la conception de logiciels de traitement du signal et de l'image
Présentation de la librairie graphique VTK
Lecture des données et formats de fichiers de données
Pipeline graphique et filtres
Exemples d'utilisation de quelques filtres :
- champ de vecteurs
- plans de coupe
- isosurfaces
- rendu volumique
- ...
- Techniques de débogage
- Présentation du débogeur PDB
- Analyse post-mortem
- Point d'arrêt
- Observation de variables
- Stratégies de débogage
- Présentation d'un problème type : calcul des temps de vol des suites de Syracuse
- Lenteur du langage Python : motivation pour interfacer avec un autre langage
- Présentation du module ctypes et sa performance
- Bref rappel sur f2py et comparaison des temps avec les approches précédentes
- Présentation et optimisation du problème avec Swig
- Inconvénient de Swig (contrôle de fin de la durée de vie ou du comportement des objets impossible, etc)
- Présentation API C via le problème modèle et performance
- Utilisation de l'API Numpy avec l'API C et les problèmes de cycle de vie des tableaux
- Création de nouvelles classes via l'API C et définition des opérateurs
- Gestion de l'héritage
- Conclusions
- Pourquoi interfacer Python avec Fortran ?
- Quels outils pour interfaçage Python-Fortran ?
- Prérequis pour l'utilisation de f2py.
- Première interface.
- Appel des fonctions f2py dans Python.
- Ajouter une variable de sortie calculée par une subroutine fortran.
- Documentation des fonctions interfacées.
- Les directives pour améliorer l'interface.
- La compilation d'une application mixte Python/Fortran.
- Créer et éditer les fichiers signature.
- Interfaçage avec le langage C.
- Comment gérer un module Fortran 90 ?
- Encapsulation de données et subroutines Fortran dans un objet Python.
- Bonus: Implémenter des subroutines Fortran dans un notebook SAGEMATH.
- Le rôle des modules d'extension en Python: optimisation et interfaçage.
- Présentation du langage Cython.
- L'optimisation ligne par ligne.
- L'interfaçage avec du code en C.
- Travailler avec des tableaux NumPy.
- Classes et types d'extension: les avantages du C++ sans ses désagréments.
- Contourner le GIL pour profiter des processeurs multicoeurs.
Introduction :
- Principe
- ReST
Fonctions :
- Architecture de la documentation
- Directives
- Production HTML et Latex
Mise en oeuvre :
- Package Python
- C / C++ / Fortran
- Exemples
- Le parallélisme en Python
- Le problème du GIL
- Présentation du module multiprocessing
- Stratégies de parallélisation
- L'avenir : futures
Présentation des différents modules permettant d'utiliser MPI
Présentation détaillée de mpi4py :
- nombre de processus, rang d'un processus
- communications point à point
- communications collectives
Exemple détaillé
distutils : Un utilitaire python pour produire et distribuer despackages python
- Qu'est-ce qu'un package ?
- Contrôle de la compilation des modules C/Fortran
- Gestion de Numpy
Utilitaire Scons : basé sur le langage python
- Scons, un langage descriptif
- Exemple de compilation d'un programme Fortran, C
- Utilisation des distutils au sein de Scons
Tests unitaires
- Présentation du module unittest
- Présentation du module nose
- Romaric David (Direction Informatique, Strasbourg)
- Thierry Dumont (Institut Camille Jordan, Lyon)
- Sylvain Faure (Maths, Orsay)
- Konrad Hinsen (Centre de Biophysique Moléculaire, Orléans)
- Loïc Gouarin (Maths, Orsay)
- Xavier Juvigny (ONERA, Châtillon)
- Pierre Navaro (IRMA, Strasbourg)
- Violaine Louvet (Institut Camille Jordan, Lyon)
- Marc Poinot (ONERA, Châtillon)
- Pierre Raybaut (CEA, Paris)
- Eric Sonnendrucker (IRMA, Strasbourg)