Sem'in, Strasbourg, 12 novembre 2020
Matthieu Boileau
IRMA, CNRS, Université de Strasbourg
L'histoire est racontée sur le blog de Fernando Perez et dans cet article de Karlijn Willems.
Une multitude de noyaux :
Python, Julia, R
Sagemath, Cling (C++), Fortran, bash, go
, etc.Une page web dynamique constituée d'une séquence de cellules de deux types :
code
: éditables et exécutablesOn bénéficie de la technologie du web : texte riche, rendu des images, sons et vidéos, aides en ligne, etc.
Source : https://github.com/activityhistory/jupyter_on_github
Si j'écris :
```bash
ls -al
```
la cellule markdown est rendue en bash
:
ls -al
Maintenant :
```python
def dit_hopla():
print("Hopla!")
dit_hopla()
```
Rendu en python
:
def dit_hopla():
print("Hopla!")
dit_hopla()
MathJax
)¶Note : Attention à l'ajout de contenu html/javascript qui peut créer des interactions non voulues, en particulier lors des conversions.
def dit_hopla(mot=''):
print(f"Hopla {mot}!")
dit_hopla('Geiss')
Hopla Geiss!
Le compteur affiche In [*]
pendant l'exécution :
import time
time.sleep(2) # attend 2 secondes
dit_hopla()
Hopla !
Pour les tracés graphiques, patience...
Du point de vue utilisateur, on peut regrouper les fonctionnalités dans trois catégories :
Pour découvrir l'utilisation des notebooks, l'aide propose un tour guidé :
Help > User interface tour
.
Des magic commands en ligne et par cellule qui permettent d'interagir avec le système ou d'appeler d'autres langages.
%lsmagic
Available line magics: %alias %alias_magic %autoawait %autocall %automagic %autosave %bookmark %cat %cd %clear %colors %conda %config %connect_info %cp %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %killbgscripts %ldir %less %lf %lk %ll %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %lx %macro %magic %man %matplotlib %mkdir %more %mv %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %pip %popd %pprint %precision %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %rep %rerun %reset %reset_selective %rm %rmdir %run %save %sc %set_env %store %sx %system %tb %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode Available cell magics: %%! %%HTML %%SVG %%bash %%capture %%debug %%file %%html %%javascript %%js %%latex %%markdown %%perl %%prun %%pypy %%python %%python2 %%python3 %%ruby %%script %%sh %%svg %%sx %%system %%time %%timeit %%writefile Automagic is ON, % prefix IS NOT needed for line magics.
Note : pour SageMath, les notebooks Sage sont désormais remplacés par les notebooks Jupyter.
Dans cet exemple :
Allons sur GPU avec PyOpenCL : 04-opencl-tp.ipynb
Extrait du cours de Marielle Simon dans la Master Class Probabilités 2020 à l'IRMA.
Notebooks complets sur https://gitlab.math.unistra.fr/proba-mc2020/proba-mc2020
Quelques initialisations
%matplotlib inline
from matplotlib import rcParams
from matplotlib import pyplot as plt
from ipywidgets import interact, IntSlider
rcParams['figure.figsize'] = (10., 8.) # Enlarge figure
rcParams['animation.html'] = 'html5' # to render animation in notebook
import srw # Import simple random walk module from srw.py
On crée et on joue une animation pour une marche aléatoire de $nstep$ pas qui démarre en $(x, y) = (0, 0)$.
walk = srw.Walk2D(nstep=100) # Create a 100-step random walk
anim = walk.generate_animation()
plt.close(anim._fig) # Close the initial figure to display only the animation figure
anim # Now play
On tire des marches complètes pour un nombre variable $nstep$ de pas.
def plot_walk(nstep: int):
"""Calcule et trace une marche aléatoire de nstep pas"""
srw.Walk2D(nstep).plot()
slider = IntSlider(min=100, max=20000, step=100, value=5000,
continuous_update=False)
Les ipwidgets améliorent et simplifient l'interaction avec le code :
interact(plot_walk, nstep=slider);
<function __main__.plot_walk(nstep: int)>
Un exemple très riche dans ce cours de Randall J. LeVeque :
On y trouve :
Par Vincent Vigon et Léo Bois :
C'est très beau, je veux travailler avec ! Comment fais-je ?...
Trois problématiques principales :
Mais pour quels besoins ? Enseignement ? Communication scientifique ? Calcul ? Voire calcul intensif ?
Tout est stocké dans un fichier au format texte json
(y compris les sorties d'exécution) donc :
avec nbconvert
, de nombreux exports sont disponibles :
REVEAL.js
(ce support en est un !)Le notebook peut être exécuté lors de l'export pour contenir la sortie des exécutions.
#%%bash
#jupyter nbconvert --to html rejoindre-jupyter.ipynb --template classic
#ls -al rejoindre-jupyter.html
qui produit le fichier rejoindre-jupyter.html
:
#import os, webbrowser
#webbrowser.open_new_tab(f'file:///{os.getcwd()}/rejoindre-jupyter.html');
Partage, conversion et publication peuvent être facilement assurés par une chaîne d'intégration continue telle que GitLab-CI.
Par exemple, ce notebook est publié sur https://boileau.pages.math.unistra.fr/rejoindre-jupyter en ajoutant le simple fichier .gitlab-ci.yml
suivant dans la racine du projet :
image: boileaum/jupyter
pages:
script:
- make
tags:
- pages
artifacts:
paths:
- public
Le morceau difficile, c'est l'exécution...
Votre machine, celles de vos étudiants, etc.
atlas
Sur ces deux serveurs Jupyter, vous accédez à votre compte file.math.unistra.fr
.
Voir la doc sur l'intranet.
Basé sur repo2docker
.
requirements.txt
, apt.txt
, environment.yml
ou même Dockerfile
$\implies$ La solution "riche".
Un exemple : https://jupyter.math.unistra.fr
Attention : projet en sommeil.
Un outil python qui vous aide à mettre en ligne votre support de cours basé sur les notebooks :
En bonus, la publication avec GitLab Pages :
Un exemple avec https://gitlab.math.unistra.fr/boileau/proba-mc2020
Une documentation assez faible mais l'auteur est facile à trouver : bureau I101.
Beamer | Jupyter (REVEAL) |
---|---|
Avec sa bibliothèque de widgets, Jupyter peut être vu également comme un atelier de fabrication d'applications web pour le calcul et le traitement des données.
En particulier, voila permet de transformer un notebook en une application web standalone.
Deux exemples :
Les notebooks Jupyter :