Calcul et programmation avec Python/SageMath et meilleures pratiques

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

À 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?
  1. 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
  1. 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.
    
  1. Partager: git pull et git push (d'abord tout le monde ensemble dans le même dépôt)
  1. 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,

  1. Continuer l'exercice de création d'une classe matrice.

  2. Expliquer la création d'un package Python

    https://gitub.u-bordeaux.fr/slabbe003/matrice.git

  3. Éditeur de texte (VIM)

  4. SageMath:

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

  6. Git

    • latexdiff-git -r 7464f76 article.tex --force --pdf
    • git clone localement
    • clé SSH
  7. RISE (tranformer un notebook jupyter en diapositives interactives)

    https://rise.readthedocs.io/en/maint-5.5/installation.html

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"
  1. Les jeudis Sage: https://cea.labri.fr/pmwiki.php/Groupe/Sage