Calcul et programmation avec Python/SageMath et meilleures pratiques
Cours dans le cadre de l'École doctorale de mathématiques et informatique (EDMI) de l'Université de Bordeaux.
Dates: 25 février, 4 mars, 11 mars, 18 mars 2021 de 9h à 12h.
À faire avant le cours du 25 février: installer python, ipython, sagemath (facultatif), jupyter et jupyterlab. Voir ces instructions.
25 février 2021: Interfaces Python et initiation à la programmation en Python
- 9h00 à 9h30: Présentation d’introduction.pdf
- 9h20 à 9h50: Division en groupes Windows, OSX, Linux (discussions installation)
- 9h50 à 10h20: Calculatrice Python, et structures de données de base int, float, +, -, *, /, //, math, bool, help(), type, print, variables, affectation, bool, str, list, range (sauvegarde de la session python.txt)
- 10h30 à 11h00: IPython: interactive Python (sauvegarde de la session ipython.txt)
- 11h00 à 12h00: Notebook Jupyter et programmation en Python : User Interface Tour, if, for, while, def (exercices-programmation-python.ipynb)
À faire avant le cours du 4 mars:
- Compléter les exercices. Faire des lectures complémentaires telles que le tutoriel Python 3 (voir les liens dans la présentation d'introduction).
- Se créer un compte sur https://gitub.u-bordeaux.fr/ sinon sur https://about.gitlab.com/
- S'assurer que vous pouvez ouvrir JupyterLab.
- S'assurer que vous pouvez ouvrir un Jupyter notebook, un fichier texte et un terminal dans JupyterLab.
- S'assurer que git est installé. Faire git --version dans le terminal de JupyterLab devrait retourner quelque chose comme ceci: git version 2.17.1
4 mars 2021: Les classes en Python et le logiciel de contrôle de version git
Voici un résumé de ce que nous avons fait aujourd'hui. La séance d'aujourd'hui a été enregistrée. Elle est disponible ici.
- 9h00 à 9h20: Présentation de début de séance, les 4 libertés d'un logiciel libre (utiliser, ouvrir, modifier, redistribuer). Avec le logiciel de contrôle de version git, on peut profiter pleinement des 4 libertés des logiciels libres.
9h20 à 9h30: Utiliser un logiciel libre. Nous testons le logiciel libre sympy en ligne à l'adresse https://live.sympy.org/
9h30 à 10h: Nous apprenons à regarder le code source d'un logiciel comme sympy
Cloner le dépôt sympy:
git clone https://github.com/sympy/sympy.git
Afficher l'historiques des modifications en commençant par les plus récentes:
git log
Afficher le contenu du plus récent commit:
git show
Afficher le contenu du plus récent commit:
git show <commit hash>
Afficher les principaux contributeurs:
git shortlog git shortlog -ns
Nous définisons l'alias lg:
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)[%an]%Creset' --abbrev-commit --date=relative"
et nous l'utilisons:
git lg
10h00 à 11h00: Nous apprenons d'abord à utiliser l'interface JupyterLab. Nous l'utilisons pour apprendre la programmation orientée objet en Python en écrivant une class Fraise dans un fichier fraise.py. La commande %run permet de réexécuter le fichier dans la console ipython et tester les modifications du fichier:
%run fraise.py
11h00 à 12h: Nous apprenons à modifier un logiciel libre.
Nous faisons un clone du dépôt:
git clone https://gitub.u-bordeaux.fr/slabbe003/fruit.git
Le but ici est de modifier le contenu de ce dépôt (ajouter une nouvelle classe pour un fruit de son choix). Pour cela, on utilise l'éditeur de texte de JupyterLab.
Pour regarder les modifications effectuées, on utilise:
git status git diff
Pour ajouter les modifications dans le prochain commit, on fait:
git add <fichiers_concernes>
Il est bien de refaire git status pour constater la différence:
git status
On peut maintenant enregistrer les modifications effectuées:
git commit -m "<message décrivant le commit>"
Avant de faire un son premier commit, il faut définir son nom et son adresse courriel une fois et pour toute:
git config --global user.name "Prenom Nom" git config --global user.email "prenom.nom@u-bordeaux.fr"
Pour jeudi prochain, nous utiliserons la commande "make". Vous pouvez tester l'installation de ce programme en écrivant "make" dans un terminal et la touche "enter". Par exemple, ceci confirme que "make" est bien installé:
$ make make: *** Pas de cible spécifiée et aucun makefile n'a été trouvé. Arrêt.
La réponse suivante confirme que le programme "make" n'est pas installé:
$ make make : commande introuvable
Si vous êtes sur windows, vous voulez peut-être installer SageMath et jupyterlab (se qui inclut un terminal avec make, ce qui vous permettra de travailler) en suivant les instructions que vous obtenez en cliquant sur les liens. Ou sinon, sans sagemath, en suivant les instructions décrites ici.
Séance 3: 11 mars 2021: apprendre à utiliser git dans un projet en groupe
Thèmes: logiciel de contrôle de version (git), tests (doctest), logiciel de création de fichiers (make), continuer les exercices/le projet Matrice
Plan de la séance:
Parler des exercices, Zen of Python
Faire un tour de table avec les questions suivantes:
- Qu'avez-vous appris jusqu'à présent?
- Qu'avez-vous mal compris jusqu'à présent?
- Que voulez-vous apprendre dans les deux prochaines séances?
Rappeler les 4 libertés d'un logiciel libre et les commandes git associées:
- Utiliser (un logiciel)
- Regarder: git clone (une fois pour toute) et git pull
- Modifier: git add, git commit -m et git push
- Partager: git pull et git push (d'abord tout le monde ensemble, prendre les présences)
- Partager: git pull et git push (8 groupes, chacun dans son groupe, class Matrice)
Doctests
Makefile
En détail:
Parler des corrections des exercices https://mensuel.framapad.org/p/9xfux7nkju-solutions-exercices-python-9lz1
Exercice 2.4, Discuter de la solution #2 proposée par Alexis Maillard
l = (1,2,3,4,5,6,7,8,9,10) pair = list() impair = list() for i in range(len(l)): if l[i]%2 == 0: pair.append(l[i]) else: impair.append(l[i]) print('Nombres pairs',pair) print('Nombres impairs',impair)
The Zen of Python: import this
Faire un tour de table avec les questions suivantes:
- Qu'avez-vous appris jusqu'à présent?
- Qu'avez-vous mal compris jusqu'à présent?
- Que voulez-vous apprendre dans les deux prochaines séances?
- Regarder le code source: git clone (une fois pour toute) et git pull
git clone https://github.com/sympy/sympy.git
Mettre à jour le git du sympy avec git pull
Faire git remote -v, git config -l et cat .git/config,
Faire:
$ du -h -d1 16K ./.github 3,2M ./doc 144M ./.git 960K ./examples 28K ./data 112K ./.ci 144K ./bin 168K ./release 33M ./sympy 181M .
Quelques commandes git pour explorer l'historique d'un dépôt:
- git log -p
- git log --stat
- git log --graph
- git lg
- Modifier le code: git add, git commit -m et git push
git clone https://gitub.u-bordeaux.fr/slabbe003/ma-these.git
Créer un dépôt git "ma thèse de doctorat" ou "mon site web" sur gitub
Sondage 'latex' vs 'autre chose'
Faire un clone git clone
Faire quelques commits, utiliser git diff --cached pour voir ce qu'on commit
Faire git push quelques fois
Son ordinateur brûle: on recommence à travailler avec git clone
Best Practices, https://doi.org/10.1371/journal.pbio.1001745
3. Make incremental changes. 3a. Work in small steps with frequent feedback and course correction. 3b. Use a version control system. 3c. Put everything that has been created manually in version control.
- Partager: git pull et git push (d'abord tout le monde ensemble dans le même dépôt)
- git clone https://gitub.u-bordeaux.fr/cours-edmi-python-meilleures-pratiques/bac-a-sable.git
- Prendre les présences dans un fichier du bac a sable
- Séparer le groupe en 8 équipes
- Partager: git pull et git push (8 groupes, chacun dans son groupe)
git clone https://gitub.u-bordeaux.fr/edmi-equipe1/matrice.git
Normalement tout le monde a le droit d'écriture
Travailler en équipe sur la classe matrice, faire l'exercice demandé
- Exécuter les doctest d'un fichier python:
- python3 -B -m doctest matrix.py
- python3 -B -m doctest -v matrix.py
Best Practices, https://doi.org/10.1371/journal.pbio.1001745
5. Plan for mistakes. 5a. Add assertions to programs to check their operation. 5b. Use an off-the-shelf unit testing library. 5c. Turn bugs into test cases.
Rappeler le fonctionnement BBB pour le début de la division en groupes
Rappeler le fonctionnement BBB pour la fin de la division en groupes
Bosser en groupes
Best Practices, https://doi.org/10.1371/journal.pbio.1001745
2a Make the computer repeat tasks. 2b Save recent commands in a file for re-use.
Parler du makefile
Faire un sondage sur ce qu'on veut faire pour la prochaine séance en proposant des choix
Quelques commandes d'aide sur git à consulter au besoin:
- git help
- git help tutorial
- git help everyday
Séance 4: 18 mars 2021
Thèmes: documentation (ReStructuredText, sphinx), création d'un paquet Python et reproductibilité, éditeur de texte,
Continuer l'exercice de création d'une classe matrice.
Expliquer la création d'un package Python
- Installer (gràce à setup.py)
- Utiliser
- Tester (doctest, pytest, tox)
- Documenter (sphinx, syntaxe https://docutils.sourceforge.io/rst.html)
- Makefile
Éditeur de texte (VIM)
- import antigravity
- Is it Worth the time? https://xkcd.com/1205/
- Apprendre Vim
- Bram Moolenaar, the creator of vim, https://www.moolenaar.net/
- Seven habits of effective text editing, Bram Moolenaar, November 2000, https://www.moolenaar.net/habits.html
- Seven habits of effective text editing 2.0, Feb 2007, http://dx.doi.org/10.13140/2.1.2204.9929 https://www.youtube.com/watch?v=eX9m3g5J-XA
- Débuter de zéro avec VIM #1 (par cocadmin) https://www.youtube.com/watch?v=JinFsXrOHao
SageMath:
- Ressource: http://sagebook.gforge.inria.fr/
- Tutoriels: https://doc.sagemath.org/html/en/tutorial/index.html
- Manuel de référence: https://doc.sagemath.org/html/en/reference/index.html
- L'utiliser en ligne: https://sagecell.sagemath.org/
- Interfaces: console, Jupyter, JupyterLab
- Différences avec Python: par exemple / et ^
- help()
- Touche tabulation mat[TAB] pour avoir une liste de commandes
- Le point d'interrogation matrix? pour avoir de l'aide
- Parent
- Ressource: https://ask.sagemath.org/questions/
Makefile et librairies Python (pandas, datetime, os)
https://gitub.u-bordeaux.fr/cours-edmi-python-meilleures-pratiques/mon-article.git
L'objectif ici est d'automatiser les commandes qu'on effectue souvent. En particulier, voir le super exposé How reproducible is a mouse click?
Git
- latexdiff-git -r 7464f76 article.tex --force --pdf
- git clone localement
- clé SSH
RISE (tranformer un notebook jupyter en diapositives interactives)
En Sage, faire:
./sage -pip install rise
Et possiblement aussi l'une des deux commandes suivantes:
./sage -sh -c "jupyter-nbextension install rise --py --sys-prefix" ./sage -sh -c "jupyter-nbextension enable rise --py --sys-prefix"
- Les jeudis Sage: https://cea.labri.fr/pmwiki.php/Groupe/Sage