Octobre 2024
Marc BUFFAT département-composante mécanique, Université Lyon 1
Enseignant en mécanique, modélisation numérique, calcul scientifique avec une expertise en mécanique des fluides et HPC
Besoins | Méthode |
---|---|
Besoin d'outils numériques adaptés à mes enseignements et mes étudiants | Développement basé sur les besoins pédagogiques |
Outils comme Matlab et Maple trop contraignants | Utilisation de notebook Jupyter des 2015 |
Choix du langage Python | Utilisation de Python dans ma recherche (HPC) dès 2010 |
Problématique environnementale | Solution mutualisée éco-éfficiente |
Adaptation des outils à ma pédagogie et non l'inverse
Approche KISS de la Philosophie d'Unix
Suivre le ZEN du python
import this
The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
Logiciels libres que l'on peut étendre, adapter aux besoins et faire communiquer
Python | Jupyter | Flask | Debian linux | GitLab |
---|---|---|---|---|
Basé sur l' EcoSystème Jupyter (pour l'éducation)
Ensemble d'outils open source pour l'informatique interactive et exploratoire, et une plate-forme interactive pour créer des récits informatiques
Large communauté internationale avec une convention internationale annuelle JupyerCon
Développement sur des serveurs virtualisées Debian + JupyterHub au dpt méca depuis 2015,
Dans le cadre du projet AMI INCLUDE, déploiement à Lyon 1 depuis 2022 puis à l'INSA en 2024
Infrastructure actuelle au CISR : gestion des VM avec KVM
site du projet https://jupyter.univ-lyon1.fr
à l'UCB Lyon 1 un serveur par année de formation
(L1 ~ 1500 étudiants, L2 ~ 470 étudiants, L3 ~280 étudiants, M1 ~ 230 étudiants, M2 170 étudiants)
7 portails (Méca, Physique, Chimie, Maths, Génie-électrique, Science de la terre, Info.)+ 1 transversal ($\leadsto$ ~3000 étudiants)
31 cours (UE) ouverts avec ~ 90 enseignants dans les équipes pédagogiques
en 2024 1ere et 2nd année INSA de Lyon
Exemples sur https://perso.univ-lyon1.fr/marc.buffat/
en CM (cours) avec des notebooks de cours ( à trous)
en TP à l'aide de notebooks de TP (avec de la programmation) avec des tests de validations
TP virtuels (en mécanique des fluides: tube à choc, aérodynamique d'une aile
écriture de livres de cours avec Jupyter-Book
évaluation des étudiants
formation en IA avec GPU
Présentation au JCAD Nov. 2024, et au AICOMAS Paris Fev. 2025
Cours de L2: outils mathématiques et numériques (Python) pour la mécanique (6 ECTS)
Attention j'utilise aussi le tableau et la craie, et je pousse mes étudiants à écrire des notes avec du papier et un crayon, et à venir en TP en salle informatique avec du papier et un crayon !!
L'approche pédagogique "learning by doing"
What comes first, "using" or "understanding"? The natural mode of learning is to first use, leading slowly to understanding. (Seymour Papert)
principe: inclure des tests dans la cellule sous le code à évaluer
assert()
attention tests d'évaluation $\neq$ test de validation de code
# écrire une fonction calculant la moyenne géométrique de 3 nbres
import numpy as np
def moyenne_geo(a,b,c):
val = (a*b*c)**(1./3)
return val
assert(moyenne_geo(1,2,4) == 2.)
# test plus complet
def valide_moyenne_geo():
a = 10*np.random.rand()
b = 10*np.random.rand()
c = 10*np.random.rand()
return np.equal(moyenne_geo(a,b,c),(a*b*c)**(1./3))
assert(valide_moyenne_geo())
# autre version (peut etre mis dans une bib.)
def valide_exo(pge):
for n in range(5):
a = 10*np.random.rand()
b = 20*np.random.rand()
c = 30*np.random.rand()
res = pge(a,b,c)
if not np.equal(res,(a*b*c)**(1./3)) :
print("Validation calcul moyenne geométrique")
print("résultat faux pour a={} b={} c={}",ab,b,c)
return False
return True
assert(valide_exo(moyenne_geo))
Architecture d'un cours sur les serveurs Jupyter de Lyon 1
Menu nbgrader pour distribuer et récupérer les TP des étudiants
Interface Flask pour
Type des cellules avec nbgrader
définition de la solution
### BEGIN SOLUTION
### END SOLUTION
tests cachés
### BEGIN HIDDEN TESTS
### END HIDDEN TESTS
mise en oeuvre de l'exemple précédent:
exercice:
Notebook iPython :
exportation possible directe vers le système Tomuss (UCB Lyon 1) ou export en csv
cours de L2 "outils numériques pour la mécanique : introduction à Python"
analyse de données pour la prédiction du réchauffement terrestre
cours MGC208L sur l2-nbgrader.univ-lyon1.fr
TP 05_TP_regression_linéaire:
Objectifs
Besoins
solution
Teaching and Learning with Jupyter: https://jupyter4edu.github.io/jupyter-edu-book
Exemples de Notebook: https://perso.univ-lyon1.fr/marc.buffat