Les stages

PDF
Développement de bindings c++/python : application à un code de calcul astrophysique pour la mission Euclid (3/4 mois)
Development of c++/python bindings: application to an astrophysical code for the Euclid mission (3/4 months)

Spécialité

Génie logiciel

Niveau d'étude

Bac+3

Formation

Ingenieur/Master

Unité d'accueil

Candidature avant le

01/03/2023

Durée

3 mois

Poursuite possible en thèse

non

Contact

Dagoneau Nicolas
+33 1 69 08 71 16

Résumé/Summary
Initiation à la création de bindings C++ vers python permettant d'instancier des classes C++ et d'appeler leurs méthodes dans un script python. Mise en application dans un code de calcul astrophysique pour la mission spatiale Euclid.
Introduction to the development of C++ to Python bindings allowing to instantiate C++ classes and to call their methods in a Python script. Implementation in an astrophysical code for the Euclid space mission.
Sujet détaillé/Full description
La mission spatiale Euclid, dont le lancement est prévu mi-2023, a pour objectif de faire des relevés de galaxies afin d'étudier la distribution de masse dans l'Univers. Pour cela, le Laboratoire d'ingénierie logicielle pour les applications scientifiques (LILAS) a la charge du développement d'une partie du code d'analyse (voir : https://www.aanda.org/articles/aa/full_html/2020/06/aa36865-19/aa36865-19.html). Ce code est développé en C++ (<= C++ 17), et tire largement parti du principe de la programmation orientée objet. Il est composé de librairies basées sur des classes et de programmes qui utilisent ces classes pour remplir les objectifs fixés par la mission Euclid. Ces programmes ont vocation à être exécutés par le pipeline de traitement de données au sol.

Afin de faciliter l'utilisation de la librairie, il est possible de construire des bindings permettant d'appeler le code C++ compilé dans des scripts python. Les classes du C++ peuvent donc être instanciées comme des objets python, sur lesquels il est possible d'appeler les méthodes du C++. Cette technique présente plusieurs avantages :
- proposer une interface simple d'utilisation en python associée aux performances du C++, à destination de la communauté scientifique d’Euclid ;
- exécution du code en dehors du pipeline de traitement de données, pour tester et valider le code C++ ;
- éviter la duplication du code C++ en python.

Pour remplir cet objectif, le segment sol d’Euclid permet l'utilisation de deux outils de génération de bindings : swig et pybind11, le choix de l’un d’entre eux sera à déterminer.

Le but de ce stage est d'abord de s'initier à cette pratique sur une librairie C++ simple (potentiellement écrite pour l'occasion), de monter en difficulté en incluant la librairie tierce partie boost (notamment employée pour les objets Matrix qu'elle contient) et enfin de commencer à construire des bindings des classes C++ du code de calcul pour Euclid dont le LILAS a la charge.
The Euclid space mission, scheduled for launch in mid-2023, aims to carry out surveys of galaxies in order to study the mass distribution in the universe. For this purpose, the Laboratoire d'ingénierie logicielle pour les applications scientifiques (LILAS) is in charge of developing part of the analysis code (see: https://www.aanda.org/articles/aa/full_html/2020/06/aa36865-19/aa36865-19.html). This code is developed in C++ (<= C++ 17), and largely takes advantage of the principles of object-oriented programming. It is composed of class-based libraries and programs that use these classes to fulfil the objectives set by the Euclid mission. These programs are intended to be executed by the ground-based data processing pipeline.

In order to facilitate the use of the library, it is possible to build bindings allowing to call the compiled C++ code in python scripts. C++ classes can thus be instantiated as python objects, on which it is possible to call C++ methods. This technique has several advantages:
- providing an easy-to-use python interface combined with C++ performance for the Euclid scientific community;
- running the code outside the data processing pipeline to test and validate the C++ code;
- avoid duplication of C++ code in Python.

To achieve this goal, the Euclid ground segment allows the use of two bindings generation tools: swig and pybind11, one between the two will have to be chosen.

The aim of this internship is first to learn this practice on a simple C++ library (potentially written for the occasion), then tackle the more difficult task of including the boost third party library (mainly used for the Matrix objects it contains) and finally to start building bindings of the C++ classes of the computation code for Euclid for which LILAS is responsible.
Mots clés/Keywords
Bindings, Python, C++, swig, pybind11
Logiciels
Python, C++, Git, Unix

 

Retour en haut