diff --git a/module4/ressources/docker_tutorial_fr.org b/module4/ressources/docker_tutorial_fr.org
index b43a28df0ae712b0470be55c9b456d38430a7bf3..075f33231113fbee660e39366e20f39a2aaf922f 100644
--- a/module4/ressources/docker_tutorial_fr.org
+++ b/module4/ressources/docker_tutorial_fr.org
@@ -65,10 +65,10 @@ mesure.
- [[#27-exemple-de-reconstruction-dun-vieil-environnement-optionnel][2.7 Exemple de reconstruction d'un "vieil" environnement (Optionnel)]]
- [[#28-faire-construire-son-image-par-dockerhub-optionnel][2.8 Faire construire son image par dockerhub (Optionnel)]]
- [[#séquence-3-mettre-en-place-un-test-et-utiliser-lintégration-continue-pour-sassurer-de-la-robustesse-dun-code][Séquence 3: Mettre en place un test et utiliser l'intégration continue pour s'assurer de la robustesse d'un code]]
+ - [[#30-mise-en-place][3.0 Mise en place]]
- [[#31-exécuter-ce-notebook-dans-un-conteneur-et-mettre-en-place-un-test][3.1 Exécuter ce notebook dans un conteneur et mettre en place un test]]
- [[#32-activer-lintégration-continue-pour-que-ce-test-soit-exécuté-à-chaque-commit-dans-le-conteneur-de-notre-choix][3.2 Activer l'intégration continue pour que ce test soit exécuté à chaque commit dans le conteneur de notre choix]]
- - [[#33-rajouter-un-test-pour-repérer-si-des-environnements-plus-à-jour-cassent-notre-test][3.3 Rajouter un test pour repérer si des environnements plus à jour cassent notre test]]
- - [[#34-limitations][3.4 Limitations]]
+- [[#conclusions][Conclusions]]
* TODO Séquence 1: Familiarisation avec le principe de conteneur
#+BEGIN_CENTER
@@ -315,11 +315,9 @@ ls -la ~/
#+RESULTS:
#+begin_example
-hostname; whoami ; python ;
aa68f9214de3
root
bash: python: command not found
-ls -la ~/
total 16
drwx------ 2 root root 4096 Jul 8 03:30 .
drwxr-xr-x 1 root root 4096 Aug 15 09:36 ..
@@ -337,9 +335,6 @@ ls -la ~/
#+end_src
#+RESULTS:
-:
-: ~/myfile.txt
-: ls -la ~/
: total 20
: drwx------ 1 root root 4096 Aug 15 09:41 .
: drwxr-xr-x 1 root root 4096 Aug 15 09:36 ..
@@ -372,11 +367,9 @@ exit
#+RESULTS:
#+begin_example
-hostname; whoami ; python ;
f8705ae9aeff
root
bash: python: command not found
-ls -la ~/
total 16
drwx------ 2 root root 4096 Jul 8 03:30 .
drwxr-xr-x 1 root root 4096 Aug 15 09:44 ..
@@ -452,12 +445,12 @@ test_jupyter
#+end_example
Ainsi, plutôt que d'aller dans le répertoire =my_work/= pour y
-travailler sans bien contrôler dans quel environnement je travaille,
-je vais lancer un conteneur à l'environnement logiciel contrôlé et à
-qui j'aurai donné accès au répertoire =my_work/=. Je travaillerai alors
-normalement à ceci près que je lancerai toutes mes commandes dans mon
-conteneur docker. Le résultat de mes commandes sera disponible comme
-d'habitude dans le répertoire =my_work/=.
+travailler directement sans bien contrôler dans quel environnement je
+travaille, je vais lancer un conteneur à l'environnement logiciel
+contrôlé et à qui j'aurai donné accès au répertoire =my_work/=. Je
+travaillerai alors normalement à ceci près que je lancerai toutes mes
+commandes dans mon conteneur docker. Le résultat de mes commandes sera
+disponible comme d'habitude dans le répertoire =my_work/=.
Mettons cela en pratique avec un environnement un peu plus fourni
qu'une debian minimaliste.
@@ -514,8 +507,8 @@ parcourir https://hub.docker.com/jupyter et la [[https://jupyter-docker-stacks.r
image]].
Préparez-vous à ce que l'exécution de la commande qui suit prenne donc
-un peu de temps puisqu'elle commencera par rappatrier la dernière
-image de =jupyter/scipy-notebook= avant de l'exécuter.
+un peu de temps puisqu'elle commencera par rapatrier la dernière image
+de =jupyter/scipy-notebook= (3.47GB!) avant de l'exécuter.
#+begin_src shell :results output :exports both
docker run -p 8888:8888 jupyter/scipy-notebook
#+end_src
@@ -549,19 +542,21 @@ qui puisse perturber votre machine.
Comment ça marche ? Par défaut, le serveur jupyter s'ouvre sur le port
8888 et il vous indique donc que si vous vous connectez à l'adresse
-=http://127.0.0.1:8888=, vous y trouverez le seveur jupyter que vous
-venez de lancer. Mais ce serveur est dans votre docker et vous n'y
-avez pas accès. le =-p 8888:8888= permet de lier le port 8888 de votre
-propre machine au port 8888 du conteneur.
+=http://127.0.0.1:8888=, vous y trouverez le serveur jupyter que vous
+venez de lancer. Mais ce serveur et ce port sont dans votre docker et
+vous n'y avez pas accès... Le =-p 8888:8888= permet de lier le port 8888
+de votre propre machine au port 8888 du conteneur et ainsi de vous
+donner accès au serveur jupyter.
Fermons le et relançons le en activant la nouvelle interface de
-jupyter: JupyterLab.
+jupyter: JupyterLab!
#+begin_src shell :results output :exports both
docker run -p 8888:8888 -e JUPYTER_ENABLE_LAB=yes jupyter/scipy-notebook # from the doc
#+end_src
Dans cette interface, vous avez accès d'un seul coup d'oeil au
-navigateur de fichiers, au notebooks, au terminaux, etc...
+navigateur de fichiers, au notebooks, au terminaux, etc... C'est plus
+moderne.
Vous pouvez bien sûr y importer les fichiers et les données dont vous
auriez besoin mais le plus simple pour travailler confortablement est
@@ -634,8 +629,19 @@ paquets utilisés. Si je peux facilement accéder à d'anciennes images,
il va souvent être difficile de savoir ce qu'elles contiennent
exactement, comment elles ont été construites et comment en faire une
variation.
-** 1.2(B) Utiliser docker pour travailler au jour le jour: Rstudio
-** 1.2(C) Utiliser docker pour travailler au jour le jour: Emacs
+** TODO 1.2(B) Utiliser docker pour travailler au jour le jour: Rstudio
+https://hub.docker.com/r/rocker/rstudio/
+
+** TODO 1.2(C) Utiliser docker pour travailler au jour le jour: Emacs
+https://github.com/JAremko/docker-emacs
+https://hub.docker.com/r/jare/emacs
+
+#+begin_src shell :results output :exports both
+docker run -ti -v /tmp/.X11-unix:/tmp/.X11-unix:ro -e DISPLAY="unix$DISPLAY" -e UNAME="alegrand" -e GNAME="alegrand" -e UID="1000" -e GID="1000" -v ~/Work/Documents/Enseignements/RR_MOOC/gitlab-inria/mooc-rr-ressources/module2/ressources/rr_org:/home/emacs/.emacs.d -v /tmp/:/mnt/workspace jare/emacs emacs
+#+end_src
+
+#+RESULTS:
+
** 1.3 Limitations
Utiliser un conteneur est donc assez facile et très pratique car cela
vous permet de travailler en isolation de votre machine et d'utiliser
@@ -1602,7 +1608,7 @@ REPOSITORY TAG IMAGE ID
alegrand/moocrr_debian_snapshot_jupyter 20171209T114814Z cffc98c65d75 4 minutes ago 743MB
alegrand/moocrr_debian_snapshot_slim 20171003T094008Z a0a1d1dcf7ce 2 hours ago 62.9MB
#+end_example
-
+*** Le jeu des 7 erreurs
C'est Parfait. Par curiosité, j'ai relancé l'ensemble du script une
heure plus tard et voilà ce qu'indiquait alors Docker:
#+begin_src shell :results output :exports both
@@ -1811,35 +1817,12 @@ faire en sorte que ce soit directement dockerhub qui construise vos
images. L'avantage principal est une garantie de traçabilité et que
l'image a bien été construite de la façon indiquée.
* Séquence 3: Mettre en place un test et utiliser l'intégration continue pour s'assurer de la robustesse d'un code
-Point de départ: un notebook
-** 3.1 Exécuter ce notebook dans un conteneur et mettre en place un test
-- Utiliser nbconvert et diff
-** 3.2 Activer l'intégration continue pour que ce test soit exécuté à chaque commit dans le conteneur de notre choix
-** 3.3 Rajouter un test pour repérer si des environnements plus à jour cassent notre test
-** 3.4 Limitations
-- Qui a "raison" ? Comment savoir ce qui a causé la différence ?
-* Old notes :noexport:
-** Autre progression :noexport:
-1. Automatiser l'exécution d'un notebook sur sa machine -> script. Pas
- de contrôle du tout de l'environnement. *Où stoquer le résultat?*
- *Comment indiquer si c'est OK ?*
-2. CI: debian; apt-get install ; youpi! Mais lent et pas complètement
- figé... *Qui a "raison" ?* *Comment savoir ce qui a causé la différence ?*
-3. Figer une image docker et automatiser sa construction en local
- (possibilité de faire à distance mais demande une mise en oeuvre un
- peu particulière, fragile si on ne sait pas faire à la main).
-4. Intégrer son image au CI
-5. Publier la recette et garantir que l'image correspond à cette
- recette ?
-6. Reconstruire un environnement particulier? Une vieille debian par
- exemple ?
-** Automatiser l'exécution d'un notebook
-Commençons par un notebook tout simple, celui de challenger, et
-vérifions qu'il s'exécute bien sur "ma machine". Je commence par créer
-un répertoire pour ce notebook.
+** 3.0 Mise en place
+Dans cette séquence, nous travaillerons sur un notebook tout simple,
+celui de challenger. Je commence par créer un répertoire de travail.
#+begin_src shell :session *shell* :results output :exports both
-mkdir -p mooc_docker
-cd mooc_docker
+mkdir -p moocrr_notebook
+cd moocrr_notebook
#+end_src
#+RESULTS:
@@ -1852,4020 +1835,977 @@ wget https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-modele/raw/master/modul
#+RESULTS:
#+begin_example
---2019-07-23 09:19:24-- https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-modele/raw/master/module2/exo5/exo5_fr.ipynb?inline=false
+--2019-08-20 11:04:41-- https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-modele/raw/master/module2/exo5/exo5_fr.ipynb?inline=false
Resolving gitlab.inria.fr (gitlab.inria.fr)... 128.93.193.8
Connecting to gitlab.inria.fr (gitlab.inria.fr)|128.93.193.8|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 41019 (40K) [text/plain]
Saving to: 'notebook.ipynb'
-[ ] 0 --.-KB/s notebook.ipynb 100%[===================>] 40.06K --.-KB/s in 0.09s
+[ ] 0 --.-KB/s
notebook.ipynb 100%[===================>] 40.06K --.-KB/s in 0.1s
-2019-07-23 09:19:25 (448 KB/s) - 'notebook.ipynb' saved [41019/41019]
---2019-07-23 09:19:25-- https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-modele/raw/master/module2/exo5/shuttle.csv?inline=false
+2019-08-20 11:04:41 (416 KB/s) - 'notebook.ipynb' saved [41019/41019]
+--2019-08-20 11:04:41-- https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-modele/raw/master/module2/exo5/shuttle.csv?inline=false
Resolving gitlab.inria.fr (gitlab.inria.fr)... 128.93.193.8
Connecting to gitlab.inria.fr (gitlab.inria.fr)|128.93.193.8|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 485 [text/plain]
Saving to: 'shuttle.csv'
-[ ] 0 --.-KB/s shuttle.csv 100%[===================>] 485 --.-KB/s in 0s
+[ ] 0 --.-KB/s
shuttle.csv 100%[===================>] 485 --.-KB/s in 0s
-2019-07-23 09:19:25 (4.23 MB/s) - 'shuttle.csv' saved [485/485]
+2019-08-20 11:04:41 (4.20 MB/s) - 'shuttle.csv' saved [485/485]
#+end_example
+** 3.1 Exécuter ce notebook dans un conteneur et mettre en place un test
+*** Exécution du notebook avec =nbconvert=
+Je peux lancer jupyter en interactif et réexecuter mon notebook.
#+begin_src shell :session *shell* :results output :exports both
-ls -l
+docker run --volume=`pwd`:/home/jovyan/ -p 8888:8888 -e JUPYTER_ENABLE_LAB=yes jupyter/scipy-notebook
#+end_src
-#+RESULTS:
-: total 56
-: -rw-r--r-- 1 alegrand alegrand 41019 Jul 23 09:19 notebook.ipynb
-: -rw-r--r-- 1 alegrand alegrand 485 Jul 23 09:19 shuttle.csv
-
-Ce notebook a déja été exécuté. Exportons le au format html pour voir
-à quoi il [[file:mooc_docker/notebook.html][ressemble]]:
+Mais ce n'est pas très pratique tous ces clicks et en plus je risque
+d'écraser mon notebook d'origine, donc utilisons la ligne de commande
+avec =nbconvert=:
#+begin_src shell :session *shell* :results output :exports both
-jupyter-nbconvert --to html notebook.ipynb
-ls -l
+docker run --volume=`pwd`:/home/jovyan/ jupyter/scipy-notebook \
+ jupyter-nbconvert --to notebook --execute notebook.ipynb --output notebook.nbconvert.ipynb
#+end_src
#+RESULTS:
-: [NbConvertApp] Converting notebook notebook.ipynb to html
-: [NbConvertApp] Writing 305180 bytes to notebook.html
-: total 356
-: -rw-r--r-- 1 alegrand alegrand 305302 Jul 23 09:20 notebook.html
-: -rw-r--r-- 1 alegrand alegrand 41019 Jul 23 09:19 notebook.ipynb
-: -rw-r--r-- 1 alegrand alegrand 485 Jul 23 09:19 shuttle.csv
-
-Je vais maintenant le ré-exécuter sur ma machine.
+:
+: [NbConvertApp] Converting notebook notebook.ipynb to notebook
+: [NbConvertApp] Executing notebook with kernel: python3
+: [NbConvertApp] Writing 41309 bytes to notebook.nbconvert.ipynb
+
+*** Utilisation de =diff=
+Alors, est-ce que mon notebook est identique au précédent ?
#+begin_src shell :session *shell* :results output :exports both
-jupyter nbconvert --to notebook --execute notebook.ipynb --output notebook_rerun.ipynb
-jupyter nbconvert --to html --execute notebook_rerun.ipynb
ls -l
#+end_src
#+RESULTS:
-#+begin_example
-[NbConvertApp] Converting notebook notebook.ipynb to notebook
-[NbConvertApp] Executing notebook with kernel: python3
-[NbConvertApp] Writing 41346 bytes to notebook_rerun.ipynb
-[NbConvertApp] Converting notebook notebook_rerun.ipynb to html
-[NbConvertApp] Executing notebook with kernel: python3
-[NbConvertApp] Writing 305683 bytes to notebook_rerun.html
-total 700
--rw-r--r-- 1 alegrand alegrand 305302 Jul 23 09:20 notebook.html
--rw-r--r-- 1 alegrand alegrand 41019 Jul 23 09:19 notebook.ipynb
--rw-r--r-- 1 alegrand alegrand 305805 Jul 23 09:21 notebook_rerun.html
--rw-r--r-- 1 alegrand alegrand 41473 Jul 23 09:21 notebook_rerun.ipynb
--rw-r--r-- 1 alegrand alegrand 485 Jul 23 09:19 shuttle.csv
-#+end_example
+: total 100
+: -rw-r--r-- 1 alegrand alegrand 41019 Aug 20 11:04 notebook.ipynb
+: -rw-r--r-- 1 alegrand users 41436 Aug 20 11:05 notebook.nbconvert.ipynb
+: -rw-r--r-- 1 alegrand alegrand 485 Aug 20 11:04 shuttle.csv
-Tiens, je peux alors m'appercevoir que le notebook ainsi obtenu est
-différent de celui d'origine. Je peux ouvrir les deux sorties html,
-mais pas facile de repérer les différences... Diff aide un peu mais il
-vaut mieux ignorer les images stoquées dans le notebook au format binaire.
+Ah, et bien déjà il n'a pas la même taille... D'où viennent les
+différences ? Je pourrais faire un commit et utiliser gitlab pour
+repérer les différences mais ça ne serait pas bien automatisable. Donc
+utilisons les outils faits pour: =diff=
#+begin_src shell :session *shell* :results output :exports both
-diff notebook.ipynb notebook_rerun.ipynb | grep -v image/png | sed 's/^/>/'
+diff -b notebook.ipynb notebook.nbconvert.ipynb | sed 's/^/>/'
#+end_src
#+RESULTS:
#+begin_example
456c456
+< "image/png": "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\n",
---
-506a507,514
+> "image/png": "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\n",
+506a507,515
> "name": "stderr",
> "output_type": "stream",
> "text": [
-> "/usr/lib/python3/dist-packages/statsmodels/compat/pandas.py:56: FutureWarning: The pandas.core.datetools module is deprecated and will be removed in a future version. Please use the pandas.tseries module instead.\n",
-> " from pandas.core import datetools\n"
+> "/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:6: DeprecationWarning: Calling Family(..) with a link class as argument is deprecated.\n",
+> "Use an instance of a link class instead.\n",
+> " \n"
> ]
> },
> {
-512c520
-< "
\n",
+558,560c570,573
< "Date: Sat, 13 Apr 2019 Deviance: 0.22231\n",
< "Time: 19:11:24 Pearson chi2: 0.236\n",
< "No. Iterations: 4 Covariance Type: nonrobust\n",
---
-> "Link Function: logit Scale: 1.0\n",
-> "Method: IRLS Log-Likelihood: -3.6370\n",
-> "Date: Tue, 23 Jul 2019 Deviance: 3.3763\n",
-> "Time: 09:21:16 Pearson chi2: 0.236\n",
-> "No. Iterations: 5 \n",
-613c621
+> "Date: Tue, 20 Aug 2019 Deviance: 0.22231\n",
+> "Time: 09:05:05 Pearson chi2: 0.236\n",
+> "No. Iterations: 4 \n",
+> "Covariance Type: nonrobust \n",
+613c626
+< "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEKCAYAAAAcgp5RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAGyFJREFUeJzt3X2UVPWd5/H3pxuQBhEjkhkFDWSWtHF9ABRQWZ3WqGhORLPrE2vGMRNCdmeMk83Knng2E43Rc2YHd2I26zgy6jgxiUo8iiSHCahjT2Y8PoCCILAIY4g2JEGND7Q2Snd/9497u6kuqunqpvqhfnxe5/Tpurd+de/3V7fvp27fuvUrRQRmZpaumsEuwMzM+peD3swscQ56M7PEOejNzBLnoDczS5yD3swscT0GvaR7Je2U9HI390vS/5G0VdI6SdMrX6aZmfVVOUf09wEX7Of+C4Ep+c8C4M4DL8vMzCqlx6CPiF8Av9tPk4uBH0TmWeBwSUdVqkAzMzswwyqwjAnA6wXTTfm8Xxc3lLSA7KifkSNHnnLsscdWYPVDU3t7OzU16b4FknL/Uu4buH/V7pVXXnkzIsb35jGVCHqVmFdyXIWIWAwsBqivr4/NmzdXYPVDU2NjIw0NDYNdRr9JuX8p9w3cv2on6Ve9fUwlXvaagGMKpicCOyqwXDMzq4BKBP0y4Or86pvTgHcjYp/TNmZmNjh6PHUj6QGgAThSUhNwIzAcICL+FlgOfBbYCnwAfLG/ijUzs97rMegjYl4P9wfwZxWryMyqwp49e2hqamL37t2DXUoXY8eOZdOmTYNdxgEbOXIkEydOZPjw4Qe8rEq8GWtmB6GmpibGjBnDpEmTkEpdkzE4du3axZgxYwa7jAMSEbz11ls0NTUxefLkA15eutcgmVm/2r17N+PGjRtSIZ8KSYwbN65i/y056M2szxzy/aeSz62D3swscT5Hb2ZVq7a2lhNPPLFzeunSpYwbN24QKxqaHPRmVrXq6upYu3Ztl3m7du3qvN3a2sqwYY45n7oxs6T86Ec/4rLLLuOiiy7i/PPPB2DRokXMmDGDk046iRtvvLGz7a233kp9fT3nnnsu8+bN47bbbgOgoaGB1atXA/Dmm28yadIkANra2li4cGHnsu666y5g77ALl156KccddxxXXXUV2ZXnsGrVKs444wxOPvlkZs6cya5duzjzzDO7vEDNnj2bdevW9dtz4pc6Mztg3/7pBjbueK+iyzz+6MO48aJ/v982LS0tTJ06FYDJkyfz6KOPAvDMM8+wbt06jjjiCFauXMmWLVt4/vnniQjmzp3LL37xC0aPHs2DDz7ImjVraG1tZfr06Zxyyin7Xd8999zD2LFjWbVqFR9++CGzZ8/ufDFZs2YNGzZs4Oijj2b27Nk8/fTTzJw5kyuuuIKHHnqIGTNm8N5771FXV8f8+fO57777uP3223nllVf48MMPOemkkyrwrJXmoDezqlXq1A3AeeedxxFHHAHAypUrWblyJdOmTQOgubmZLVu2sGvXLj7/+c8zatQoAObOndvj+lauXMm6det4+OGHAXj33XfZsmULI0aMYObMmUycOBGAqVOnsm3bNsaOHctRRx3FjBkzADjssMMAuOyyy/jOd77DokWLuPfee7nmmmsO7InogYPezA5YT0feA2306NGdtyOCG264ga985Std2tx+++3dXsI4bNgw2tvbAbpcyx4RfP/732fOnDld2jc2NnLIIYd0TtfW1tLa2kpElFzHqFGjOO+883jsscdYsmRJ52mi/uJz9GaWtDlz5nDvvffS3NwMwPbt29m5cydnnXUWjz76KC0tLezatYuf/vSnnY+ZNGkSL7zwAkDn0XvHsu6880727NkDwCuvvML777/f7bqPO+44duzYwapVq4DsjeLW1lYA5s+fz3XXXceMGTM6//voLz6iN7OknX/++WzatInTTz8dgEMPPZQf/vCHTJ8+nSuuuIKpU6fyiU98gjPPPLPzMddffz2XX345999/P+ecc07n/Pnz57Nt2zamT59ORDB+/HiWLl3a7bpHjBjBQw89xFe/+lVaWlqoq6vjiSee4NBDD+WUU07hsMMO44tfHIBxICNiUH4+9alPRcqeeuqpwS6hX6Xcv5T7FlG5/m3cuLEiy6m09957r0+Pu/HGG2PRokUVrqZ727dvjylTpkRbW1u3bUo9x8Dq6GXe+tSNmdkA+8EPfsCsWbO49dZbB+RrD33qxswMuOmmmwZsXVdffTVXX331gK3PR/Rm1mcRJb8e2iqgks+tg97M+mTkyJG89dZbDvt+EPl49CNHjqzI8nzqxsz6ZOLEiTQ1NfHGG28Mdild7N69u2IBOZg6vmGqEhz0ZtYnw4cP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\n",
---
+> "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEKCAYAAAAcgp5RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAay0lEQVR4nO3dfZRU9Z3n8fenGwgNIoxIMgoayBzSrhsVMYDK6PYYBc2JT7tRJM6YuMMSd2Iy2T1ho+dkVjPRc3YO7hwzGSOyhnGMGR/GVdQcJqBuOs64PqABQSQ8rCHSkAQxo9DaKN393T/u7aa6upuuLqof6ufndU6frnvrd299v1Vdn7p969YtRQRmZpaumqEuwMzMBpaD3swscQ56M7PEOejNzBLnoDczS5yD3swscX0GvaQVkvZIerWX6yXpbyRtl7RB0szKl2lmZuUqZYv+HuDCw1x/ETA9/1kM3HnkZZmZWaX0GfQR8Qzwu8MMuRS4NzLPAxMkHVepAs3M7MiMqMA6JgM7C6ab8nm/Lh4oaTHZVj+jR48+48QTT6zAzQ9P7e3t1NSk+xaI+6teKfcG6fe3devWvRExqT/LVCLo1cO8Hs+rEBHLgeUA9fX1sWXLlgrc/PDU2NhIQ0PDUJcxYNxf9Uq5N0i/P0m/6u8ylXjZawJOKJieAuyuwHrNzKwCKhH0jwPX5EffnAm8ExHddtuYmdnQ6HPXjaT7gQbgWElNwE3ASICIWAasAj4LbAfeA64dqGLNzKz/+gz6iFjYx/UBfKViFZlZVTh48CBNTU0cOHBgqEvpYvz48WzevHmoyzhio0ePZsqUKYwcOfKI11WJN2PN7EOoqamJcePGMXXqVKSejskYGvv372fcuHFDXcYRiQjeeustmpqamDZt2hGvL91jkMxsQB04cICJEycOq5BPhSQmTpxYsf+WHPRmVjaH/MCp5H3roDczS5z30ZtZ1aqtreWUU07pnF65ciUTJ04cwoqGJwe9mVWturo61q9f32Xe/v37Oy+3trYyYoRjzrtuzCwpP/rRj7jiiiu4+OKLmTdvHgBLly5l1qxZnHrqqdx0002dY2+99Vbq6+s5//zzWbhwIbfddhsADQ0NvPTSSwDs3buXqVOnAtDW1saSJUs613XXXXcBh0678PnPf56TTjqJq6++muzIc1i7di1nn302p512GrNnz2b//v2cc845XV6g5s6dy4YNGwbsPvFLnZkdsW8/sYnXdu+r6DpPPv5obrr43x52TEtLCzNmzABg2rRpPProowA899xzbNiwgWOOOYY1a9awbds2XnzxRSKCSy65hGeeeYaxY8fywAMPsG7dOlpbW5k5cyZnnHHGYW/vBz/4AePHj2ft2rW8//77zJ07t/PFZN26dWzatInjjz+euXPn8uyzzzJ79mwWLFjAgw8+yKxZs9i3bx91dXUsWrSIe+65h9tvv52tW7fy/vvvc+qpp1bgXuuZg97MqlZPu24ALrjgAo455hgA1qxZw5o1azj99NMBaG5uZtu2bezfv5/LL7+cMWPGAHDJJZf0eXtr1qxhw4YNPPzwwwC88847bNu2jVGjRjF79mymTJkCwIwZM9ixYwfjx4/nuOOOY9asWQAcffTRAFxxxRV85zvfYenSpaxYsYIvfelLR3ZH9MFBb2ZHrK8t78E2duzYzssRwY033siXv/zlLmNuv/32Xg9hHDFiBO3t7QBdjmWPCL73ve8xf/78LuMbGxv5yEc+0jldW1tLa2srEdHjbYwZM4YLLriAxx57jIceeqhzN9FA8T56M0va/PnzWbFiBc3NzQDs2rWLPXv2cO655/Loo4/S0tLC/v37eeKJJzqXmTp1Ki+//DJA59Z7x7ruvPNODh48CMDWrVt59913e73tk046id27d7N27Voge6O4tbUVgEWLFvG1r32NWbNmdf73MVC8RW9mSZs3bx6bN2/mrLPOAuCoo47ivvvuY+bMmSxYsIAZM2bw8Y9/nHPOOadzmW984xtceeWV/PCHP+S8887rnL9o0SJ27NjBzJkziQgmTZrEypUre73tUaNG8eCDD/LVr36VlpYW6urqeOqppzjqqKM444wzOProo7n22kE4D2REDMnPJz/5yUjZT3/606EuYUC5v+pVqd5ee+21iqyn0vbt21fWcjfddFMsXbq0wtX0bteuXTF9+vRoa2vrdUxP9zHwUvQzb73rxsxskN17773MmTOHW2+9dVC+9tC7bszMgJtvvnnQbuuaa67hmmuuGbTb8xa9mZUtosevh7YKqOR966A3s7KMHj2at956y2E/ACI/H/3o0aMrsj7vujGzskyZMoWmpibefPPNoS6liwMHDlQsIIdSxzdMVYKD3szKMnLkyIp8+1Gl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\n",
#+end_example
-Certaines différences sont insignifiantes (l'heure, la date ou le
-warning sur =pandas.core.datetools= qui ne sera bientôt plus maintenu),
-mais d'autres sont plus alarmantes. Le nombre d'itérations pour
-calculer la régression logistique n'est pas le même (5 au lieu de 4)
-et les valeurs de Log-Likelihood et de Deviance sont très
-différentes. Que s'est-il passé ? A priori, ce sont des bibliothèques
-python différentes qui ont été utilisées et qui expliquent ces
-différences. Nous allons voir comment contrôler tout ceci.
-** Identifier les dépendances
-Je vais vous montrer comment créer et manipuler une image et un
-conteneur docker sur ma machine pas à pas. Vous n'aurez pas forcément
-à réaliser ce genre de choses par la suite sur votre machine mais il
-est bon que vous voyiez comment cela se passe afin que, lorsque vous
-utiliserez des outils qui font ça automatiquement pour vous dans le
-cloud, il n'y ait rien de mystérieux.
-
-Docker va vous permettre d'exécuter des programmes dans ce que l'on
-appelle des conteneurs. Un /conteneur/ est une sorte de mini-machine
-virtuelle dont le système de fichier est appelé /image/ et qui va donc
-exécuter un /programme/. Je peux avoir à un instant donné plusieurs
-conteneurs exécutant des programmes différents issus d'images
-différentes ou identiques.
-- Le premier avantage de cette approche est que votre programme sera
- isolé du reste de votre machine et, quoi que vous fassiez dans ce
- conteneur, vous n'abimerez pas votre propre machine en installant
- des bibliothèques plus anciennes ou plus modernes qui seraient
- incompatibles.
-- Le second avantage est que vous pourrez préparer plusieurs
- conteneurs différents pour vérifier si votre programme fonctionne
- toujours bien.
-*** S'assurer que docker est bien installé
-Je suis sur une machine linux (une debian) et j'ai donc installé
-docker via le paquet =docker.io=. J'ai aussi pris soin de me mettre dans
-le groupe docker pour ne pas avoir à passer root à chaque fois. Voici
-comment j'ai fait.
-#+begin_src shell :results output :exports both :eval never
-sudo apt-get install docker.io
-sudo adduser alegrand docker
-#+end_src
+Difficile de s'y repérer. Le tout début concerne des images qui
+seraient différentes. Les premiers caractères sont identiques ainsi
+que les derniers mais si on regarde au milieu, on peut repérer des
+caractères différents. Bon, il y a certainement une différence au
+niveau des images mais on verra ça plus tard, conçentrons nous sur le
+reste pour l'instant. D'autre part, les espaces ou les tabulations
+n'ont pas d'importance non plus donc demandons à =diff= de les ignorer.
#+begin_src shell :session *shell* :results output :exports both
-docker version
+diff -w --ignore-matching-lines="image/png" notebook.ipynb notebook.nbconvert.ipynb | sed 's/^/>/'
#+end_src
#+RESULTS:
#+begin_example
-Client:
- Version: 1.13.1
- API version: 1.26
- Go version: go1.9.3
- Git commit: 092cba3
- Built: Thu Feb 1 09:36:44 2018
- OS/Arch: linux/amd64
-Server:
- Version: 1.13.1
- API version: 1.26 (minimum version 1.12)
- Go version: go1.9.3
- Git commit: 092cba3
- Built: Thu Feb 1 09:36:44 2018
- OS/Arch: linux/amd64
- Experimental: false
+506a507,515
+> "name": "stderr",
+> "output_type": "stream",
+> "text": [
+> "/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:6: DeprecationWarning: Calling Family(..) with a link class as argument is deprecated.\n",
+> "Use an instance of a link class instead.\n",
+> " \n"
+> ]
+> },
+> {
+527c536,539
+< "
Date:
Sat, 13 Apr 2019
Deviance:
0.22231
\n",
+---
+> "
Date:
Tue, 20 Aug 2019
Deviance:
0.22231
\n",
+> "
\n",
+> "
\n",
+> "
Time:
09:05:05
Pearson chi2:
0.236
\n",
+530c542
+< "
Time:
19:11:24
Pearson chi2:
0.236
\n",
+---
+> "
No. Iterations:
4
\n",
+533c545
+< "
No. Iterations:
4
Covariance Type:
nonrobust
\n",
+---
+> "
Covariance Type:
nonrobust
\n",
+558,560c570,573
+< "Date: Sat, 13 Apr 2019 Deviance: 0.22231\n",
+< "Time: 19:11:24 Pearson chi2: 0.236\n",
+< "No. Iterations: 4 Covariance Type: nonrobust\n",
+---
+> "Date: Tue, 20 Aug 2019 Deviance: 0.22231\n",
+> "Time: 09:05:05 Pearson chi2: 0.236\n",
+> "No. Iterations: 4 \n",
+> "Covariance Type: nonrobust \n",
#+end_example
-*** Récupérer une image de base
-Nous pouvons commener. L'idée pour bien contrôler son environnement va
-être de partir d'un environnement minimaliste et dans lequel notre
-notebook aura d'ailleurs peu de chances de s'exécuter. Je partirai
-d'une image debian stable.
-#+begin_src shell :session *shell* :results output :exports both
-docker pull debian:stable
-#+end_src
-
-#+RESULTS:
-: stable: Pulling from library/debian
-:
-: 5893bf6f34bb: Pulling fs layer
-: 5893bf6f34bb: Downloading 507kB/50.38MB
-: 5893bf6f34bb: Verifying Checksum
-: 5893bf6f34bb: Download complete
-: 5893bf6f34bb: Extracting 524.3kB/50.38MB
-: 5893bf6f34bb: Pull complete
-: Digest: sha256:4d28f191a4c9dec569867dd9af1e388c995146057a36d5b3086e599af7c2379b
-: Status: Downloaded newer image for debian:stable
-La commande précédent s'est connectée sur le https://hub.docker.com/
-pour y télécharger une image officielle debian stable. Je peux la
-trouver listée ici: https://hub.docker.com/_/debian. Que puis-je
-savoir sur cette image ?
+En fait, la plupart des différences sont insignifiantes du point de
+vue de notre calcul (l'heure, la date, le warning sur
+=pandas.core.datetools= qui ne sera bientôt plus maintenu, ou le
+="nbformat_minor"= qui concerne le format de jupyter). Je pourrais
+supprimer les parties sur les dates mais on voit néanmoins que le
+format de stockage n'aide pas à repérer les différentes. En effet, le
+fait que les informations sur la date soient sur deux lignes et
+mélangées avec les informations sur la =Deviance= et le =Pearson chi2=
+n'est vraiment pas commode. Voici une façon possible de faire en sorte
+que diff ignore ces différences de façon assez conservative puisque je
+supprime (avec =sed=) les informations sur la date et l'heure tout en
+laissant les valeurs pour =Deviance= et =Pearson chi2= de façon à ce
+qu'elles restent comparées par =diff=.
#+begin_src shell :session *shell* :results output :exports both
-docker image ls
+mkdir -p sed/
+sed -e "s/Date:.*Deviance:/Deviance/" -e "s/Time:.*Pearson/Pearson/" notebook.ipynb > sed/notebook.ipynb
+sed -e "s/Date:.*Deviance:/Deviance/" -e "s/Time:.*Pearson/Pearson/" notebook.nbconvert.ipynb > sed/notebook.nbconvert.ipynb
+diff -w --ignore-matching-lines="image/png" \
+ --ignore-matching-lines="nbformat_minor" \
+ --ignore-matching-lines="hidePrompt" \
+ --ignore-matching-lines="scrolled" \
+ --ignore-matching-lines="No. Iterations:" \
+ --ignore-matching-lines="Covariance Type:" \
+ sed/notebook.ipynb sed/notebook.nbconvert.ipynb | sed 's/^/>/'
#+end_src
#+RESULTS:
#+begin_example
-REPOSITORY TAG IMAGE ID CREATED SIZE
-simgrid-website latest 0f3727380ab6 12 days ago 1.19GB
-debian stable 40e13c3c9aab 12 days ago 114MB
-#+end_example
-
-Mon image apparaît. Elle fait 114MB et a été construite il y a 12
-jours.
-*** Exécuter une commande dans un conteneur
-Grâce à la commande docker run, je vais pouvoir exécuter des commandes
-dans le conteneur que je viens de télécharger. Par exemple, comme ceci.
-#+begin_src shell :session *shell* :results output :exports both
-docker run debian:stable ls
-#+end_src
-#+RESULTS:
-#+begin_example
-bin
-boot
-dev
-etc
-home
-lib
-lib64
-media
-mnt
-opt
-proc
-root
-run
-sbin
-srv
-sys
-tmp
-usr
-var
+506a507,515
+> "name": "stderr",
+> "output_type": "stream",
+> "text": [
+> "/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:6: DeprecationWarning: Calling Family(..) with a link class as argument is deprecated.\n",
+> "Use an instance of a link class instead.\n",
+> " \n"
+> ]
+> },
+> {
+533c542,545
+< "
No. Iterations:
4
Covariance Type:
nonrobust
\n",
+---
+> "
No. Iterations:
4
\n",
+> "
\n",
+> "
\n",
+> "
Covariance Type:
nonrobust
\n",
#+end_example
-Bon, ok, ce n'est pas très impressionnant. Essayons avec la commande
-=hostname= qui me renverra comment s'appelle la machine.
-#+begin_src shell :session *shell* :results output :exports both
-docker run debian:stable hostname
-#+end_src
-
-#+RESULTS:
-: 07193bfee89f
-
-Ah, oui, c'est assez différent de ce que j'obtiens quand je lance
-cette commande directement sur ma machine:
+Bon, difficile de faire ignorer ce warning et la partie restante
+concerne un export HTML sur deux lignes au lieu d'une.
+*** Comparaison des images
+Je suis quand même curieux de la différence au niveau des
+images. D'après
+https://ipython.org/ipython-doc/dev/notebook/nbformat.html, les images
+sont sérialisées et encodées à l'aide de =base64=. Je vais donc tenter
+de les extraire et les comparer (il y a deux images, le =tail= permet de
+prendre la dernière, le sed permet d'enlever la partie avant et après
+le contenu de l'image).
#+begin_src shell :session *shell* :results output :exports both
-hostname
+grep "image/png" notebook.nbconvert.ipynb | tail -n 1 | sed -e 's/.*: "//g' -e 's/".*//g' | base64 -d > img1_nbconvert.png
#+end_src
#+RESULTS:
-: icarus
+: base64: invalid input
-Continuons de comparer. Est-ce que l'on trouve python dans cet
-environnement ?
+Malgré le message d'erreur, l'image est correctement transformée. Je
+tente la même chose pour le notebook d'origine.
#+begin_src shell :session *shell* :results output :exports both
-ls /usr/bin/X11//python3 # chez moi oui
-docker run debian:stable ls -l /usr/bin/X11//python3 # mais pas dans cet environnement
-#+end_src
-
-#+RESULTS:
-: [0m[01;36m/usr/bin/X11//python3[0m
-: ls: cannot access '/usr/bin/X11//python3': No such file or directory
-
-En fait, à chaque fois que je lance cette commande docker, c'est un
-peu comme si un mini-système d'exploitation démarrait, exécutait cette
-commande et s'éteignait... C'est un peu pénible d'avoir à toujours
-préfixer par =docker run=, donc une solution simple consiste à lancer
-docker en mode interactif.
-*** Docker en interactif
-À partir de maintenant, il vous faudra bien faire attention à
-distinguer les commandes qui sont lancées sur mon système de base de
-celles qui sont lancées dans notre conteneur docker.
-#+begin_src shell :session *docker* :results output :exports both
-docker run --name debian -t -i debian:stable
-#+end_src
-
-#+RESULTS:
-:
-: echo 'org_babel_sh_eoe'
-
-Je peux alors exécuter plusieurs séries de commandes facilement dans
-mon environnement:
-#+begin_src shell :session *docker* :results output :exports both
-hostname
-python
+grep "image/png" notebook.ipynb | tail -n 1 | sed -e 's/.*: "//g' -e 's/".*//g' | base64 -d > img1.png
#+end_src
#+RESULTS:
-: hostname
-: dca997abf7cc
-: python
-: bash: python: command not found
+: base64: invalid input
-Mmh, et bien installons python du coup.
-#+begin_src shell :session *docker* :results output :exports both
-whoami
-apt-get update
-apt-get install -y python3
-#+end_src
+[[file:moocrr_notebook/img1.png][file:moocrr_notebook/img1.png]] [[file:moocrr_notebook/img1_nbconvert.png][file:moocrr_notebook/img1_nbconvert.png]]
+Si j'ouvre les deux images, elles semblent identiques mais si on
+utilise un logiciel pour mettre en évidence les différences:
+# Les images ont-elles bien la même tailles et peuvent-elles être comparées ?
+# #+begin_src shell :session *shell* :results output :exports both
+# identify img1*
+# #+end_src
-#+RESULTS:
-: whoami
-: root
-: apt-get update
-: Get:1 http://cdn-fastly.deb.debian.org/debian stable InRelease [118 kB]
-: Get:2 http://security-cdn.debian.org/debian-security stable/updates InRelease [39.1 kB]
-: Get:3 http://cdn-fastly.deb.debian.org/debian stable-updates InRelease [46.8 kB]
-: Get:4 http://security-cdn.debian.org/debian-security stable/updates/main amd64 Packages [49.4 kB]
-: Get:5 http://cdn-fastly.deb.debian.org/debian stable/main amd64 Packages [7897 kB]
-: Fetched 8150 kB in 12s (682 kB/s)
-: Reading package lists... Done
-: apt-get install python3
-: apt-get install python3
-: Reading package lists... Done
-: Building dependency tree
-: Reading state information... Done
-: The following additional packages will be installed:
-: bzip2 file libexpat1 libmagic-mgc libmagic1 libmpdec2 libpython3-stdlib
-: libpython3.7-minimal libpython3.7-stdlib libreadline7 libsqlite3-0 libssl1.1
-: mime-support python3-minimal python3.7 python3.7-minimal readline-common xz-utils
-: Suggested packages:
-: bzip2-doc python3-doc python3-tk python3-venv python3.7-venv python3.7-doc binutils
-: binfmt-support readline-doc
-: The following NEW packages will be installed:
-: bzip2 file libexpat1 libmagic-mgc libmagic1 libmpdec2 libpython3-stdlib
-: libpython3.7-minimal libpython3.7-stdlib libreadline7 libsqlite3-0 libssl1.1
-: mime-support python3 python3-minimal python3.7 python3.7-minimal readline-common
-: xz-utils
-: 0 upgraded, 19 newly installed, 0 to remove and 0 not upgraded.
-: Need to get 7789 kB of archives.
-: After this operation, 36.3 MB of additional disk space will be used.
-: Get:1 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libssl1.1 amd64 1.1.1c-1 [1535 kB]
-: Get:2 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libpython3.7-minimal amd64 3.7.3-2 [588 kB]
-: Get:3 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libexpat1 amd64 2.2.6-2 [106 kB]
-: Get:4 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3.7-minimal amd64 3.7.3-2 [1736 kB]
-: Get:5 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-minimal amd64 3.7.3-1 [36.6 kB]
-: Get:6 http://cdn-fastly.deb.debian.org/debian stable/main amd64 mime-support all 3.62 [37.2 kB]
-: Get:7 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libmpdec2 amd64 2.4.2-2 [87.2 kB]
-: Get:8 http://cdn-fastly.deb.debian.org/debian stable/main amd64 readline-common all 7.0-5 [70.6 kB]
-: Get:9 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libreadline7 amd64 7.0-5 [151 kB]
-: Get:10 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libsqlite3-0 amd64 3.27.2-3 [641 kB]
-: Get:11 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libpython3.7-stdlib amd64 3.7.3-2 [1732 kB]
-: Get:12 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3.7 amd64 3.7.3-2 [330 kB]
-: Get:13 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libpython3-stdlib amd64 3.7.3-1 [20.0 kB]
-: Get:14 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3 amd64 3.7.3-1 [61.5 kB]
-: Get:15 http://cdn-fastly.deb.debian.org/debian stable/main amd64 bzip2 amd64 1.0.6-9.1 [48.3 kB]
-: Get:16 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libmagic-mgc amd64 1:5.35-4 [242 kB]
-: Get:17 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libmagic1 amd64 1:5.35-4 [117 kB]
-: Get:18 http://cdn-fastly.deb.debian.org/debian stable/main amd64 file amd64 1:5.35-4 [66.3 kB]
-: Get:19 http://cdn-fastly.deb.debian.org/debian stable/main amd64 xz-utils amd64 5.2.4-1 [183 kB]
-: Fetched 7789 kB in 12s (635 kB/s)
-: debconf: delaying package configuration, since apt-utils is not installed
-: Selecting previously unselected package libssl1.1:amd64.
-: (Reading database ... 6674 files and directories currently installed.)
-: Preparing to unpack .../libssl1.1_1.1.1c-1_amd64.deb ...
-: Unpacking libssl1.1:amd64 (1.1.1c-1) ...
-: Selecting previously unselected package libpython3.7-minimal:amd64.
-: Preparing to unpack .../libpython3.7-minimal_3.7.3-2_amd64.deb ...
-: Unpacking libpython3.7-minimal:amd64 (3.7.3-2) ...
-: Selecting previously unselected package libexpat1:amd64.
-: Preparing to unpack .../libexpat1_2.2.6-2_amd64.deb ...
-: Unpacking libexpat1:amd64 (2.2.6-2) ...
-: Selecting previously unselected package python3.7-minimal.
-: Preparing to unpack .../python3.7-minimal_3.7.3-2_amd64.deb ...
-: Unpacking python3.7-minimal (3.7.3-2) ...
-: Setting up libssl1.1:amd64 (1.1.1c-1) ...
-: debconf: unable to initialize frontend: Dialog
-: debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
-: debconf: falling back to frontend: Readline
-: debconf: unable to initialize frontend: Readline
-: debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/x86_64-linux-gnu/perl5/5.28 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.28 /usr/share/perl/5.28 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)
-: debconf: falling back to frontend: Teletype
-: Setting up libpython3.7-minimal:amd64 (3.7.3-2) ...
-: Setting up libexpat1:amd64 (2.2.6-2) ...
-: Setting up python3.7-minimal (3.7.3-2) ...
-: Selecting previously unselected package python3-minimal.
-: (Reading database ... 6935 files and directories currently installed.)
-: Preparing to unpack .../0-python3-minimal_3.7.3-1_amd64.deb ...
-: Unpacking python3-minimal (3.7.3-1) ...
-: Selecting previously unselected package mime-support.
-: Preparing to unpack .../1-mime-support_3.62_all.deb ...
-: Unpacking mime-support (3.62) ...
-: Selecting previously unselected package libmpdec2:amd64.
-: Preparing to unpack .../2-libmpdec2_2.4.2-2_amd64.deb ...
-: Unpacking libmpdec2:amd64 (2.4.2-2) ...
-: Selecting previously unselected package readline-common.
-: Preparing to unpack .../3-readline-common_7.0-5_all.deb ...
-: Unpacking readline-common (7.0-5) ...
-: Selecting previously unselected package libreadline7:amd64.
-: Preparing to unpack .../4-libreadline7_7.0-5_amd64.deb ...
-: Unpacking libreadline7:amd64 (7.0-5) ...
-: Selecting previously unselected package libsqlite3-0:amd64.
-: Preparing to unpack .../5-libsqlite3-0_3.27.2-3_amd64.deb ...
-: Unpacking libsqlite3-0:amd64 (3.27.2-3) ...
-: Selecting previously unselected package libpython3.7-stdlib:amd64.
-: Preparing to unpack .../6-libpython3.7-stdlib_3.7.3-2_amd64.deb ...
-: Unpacking libpython3.7-stdlib:amd64 (3.7.3-2) ...
-: Selecting previously unselected package python3.7.
-: Preparing to unpack .../7-python3.7_3.7.3-2_amd64.deb ...
-: Unpacking python3.7 (3.7.3-2) ...
-: Selecting previously unselected package libpython3-stdlib:amd64.
-: Preparing to unpack .../8-libpython3-stdlib_3.7.3-1_amd64.deb ...
-: Unpacking libpython3-stdlib:amd64 (3.7.3-1) ...
-: Setting up python3-minimal (3.7.3-1) ...
-: Selecting previously unselected package python3.
-: (Reading database ... 7404 files and directories currently installed.)
-: Preparing to unpack .../0-python3_3.7.3-1_amd64.deb ...
-: Unpacking python3 (3.7.3-1) ...
-: Selecting previously unselected package bzip2.
-: Preparing to unpack .../1-bzip2_1.0.6-9.1_amd64.deb ...
-: Unpacking bzip2 (1.0.6-9.1) ...
-: Selecting previously unselected package libmagic-mgc.
-: Preparing to unpack .../2-libmagic-mgc_1%3a5.35-4_amd64.deb ...
-: Unpacking libmagic-mgc (1:5.35-4) ...
-: Selecting previously unselected package libmagic1:amd64.
-: Preparing to unpack .../3-libmagic1_1%3a5.35-4_amd64.deb ...
-: Unpacking libmagic1:amd64 (1:5.35-4) ...
-: Selecting previously unselected package file.
-: Preparing to unpack .../4-file_1%3a5.35-4_amd64.deb ...
-: Unpacking file (1:5.35-4) ...
-: Selecting previously unselected package xz-utils.
-: Preparing to unpack .../5-xz-utils_5.2.4-1_amd64.deb ...
-: Unpacking xz-utils (5.2.4-1) ...
-: Setting up mime-support (3.62) ...
-: Setting up libmagic-mgc (1:5.35-4) ...
-: Setting up libsqlite3-0:amd64 (3.27.2-3) ...
-: Setting up libmagic1:amd64 (1:5.35-4) ...
-: Setting up file (1:5.35-4) ...
-: Setting up bzip2 (1.0.6-9.1) ...
-: Setting up xz-utils (5.2.4-1) ...
-: update-alternatives: using /usr/bin/xz to provide /usr/bin/lzma (lzma) in auto mode
-: Setting up libmpdec2:amd64 (2.4.2-2) ...
-: Setting up readline-common (7.0-5) ...
-: Setting up libreadline7:amd64 (7.0-5) ...
-: Setting up libpython3.7-stdlib:amd64 (3.7.3-2) ...
-: Setting up libpython3-stdlib:amd64 (3.7.3-1) ...
-: Setting up python3.7 (3.7.3-2) ...
-: Setting up python3 (3.7.3-1) ...
-: running python rtupdate hooks for python3.7...
-: running python post-rtupdate hooks for python3.7...
-: Processing triggers for libc-bin (2.28-10) ...
-
-Je peux donc enfin exécuter du code python dans mon environnement
-docker.
+# #+RESULTS:
+# : img1.png PNG 378x266 378x266+0+0 8-bit sRGB 7.02KB 0.000u 0:00.000
+# : img1_orig.png PNG 378x266 378x266+0+0 8-bit sRGB 7.11KB 0.000u 0:00.000
-#+begin_src shell :session *docker* :results output :exports both
-ls -l /usr/bin/X11//python3
-python3 --version
-#+end_src
+# Argh, ça commence mal Et bien, dans le doute,
-#+RESULTS:
-: ls -l /usr/bin/X11//python3
-: python3.7
-: python3 --version
-: Python 3.7.3
+# #+begin_src shell :session *shell* :results output :exports both
+# convert img1.png -crop 386x266+0+0 img1.png
+# convert img1_orig.png -crop 386x266+0+0 img1_orig.png
+# #+end_src
-Au passage, on peut vérifier que ce n'est pas le même que celui qui est
-sur ma machine:
+# #+RESULTS:
+# Et maintenant, comparons:
#+begin_src shell :session *shell* :results output :exports both
-python3 --version
-#+end_src
-
-#+RESULTS:
-: Python 3.7.2rc1
-*** Installer tous les paquets dont on a besoin
-Bien, j'ai python3 mais ça ne suffira pas pour exécuter mon notebook. Il me
-faudra aussi bien sûr =jupyter= et différents paquets comme =matplotlib=,
-=pandas=, =numpy=, =statsmodels=... Courage, allons-y!
-
-#+begin_src shell :session *docker* :results output :exports both
-apt-get install -y jupyter-nbconvert python3-ipykernel python3-matplotlib python3-pandas python3-numpy python3-statsmodels
+compare img1.png img1_nbconvert.png diff.png
#+end_src
#+RESULTS:
-#+BEGIN_EXAMPLE
-apt-get install -y jupyter-nbconvert python3-ipykernel python3-matplotlib python3-pandas python3-numpy python3-statsmodels
-0 upgraded, 247 newly installed, 0 to remove and 0 not upgraded.
-Need to get 204 MB of archives.
-After this operation, 742 MB of additional disk space will be used.
-#+END_EXAMPLE
-
-Misère. Donc, 800Mb plus tard... :)
-
-Je peux alors lancer python qui importe matplotlib.
-#+begin_src shell :session *docker* :results output :exports both
-python3 -c "import matplotlib"
-#+end_src
-#+RESULTS:
+[[file:moocrr_notebook/diff.png][file:moocrr_notebook/diff.png]]
-Alors que la même chose avec un paquet non existant me renvoie un
-message d'erreur:
+L'image d'origine est en gris pale et les différences sont indiquées
+en rouge. Il y a bien une légère différence entre ces deux images même
+si c'est à peine perceptible. Les points et un des axes ne sont pas
+exactement au même endroit. Il y a donc des différences mais elles ne
+sont pas significatives et il est assez difficile de mettre en place
+un test pour les ignorer. Je vais donc abandonner cette piste pour
+l'instant.
+*** Automatisation de la comparaison
+Le plus simple, dans ce cas présent, me semble donc être de conserver
+plusieurs sorties "acceptables" et de s'y comparer.
#+begin_src shell :session *shell* :results output :exports both
-python3 -c "import gnuplot365"
-#+end_src
-
-#+RESULTS:
-: Traceback (most recent call last):
-: ", line 1, in
-: ModuleNotFoundError: No module named 'gnuplot365'
-
-Bon, tout a l'air de très bien marcher. Tiens à tout hasard, si je
-cherche python via =docker run=, qu'est-ce que j'obtiens ?
-
+mkdir -p correct_output/
+cp notebook.ipynb correct_output/notebook_orig.ipynb
+cp notebook.nbconvert.ipynb correct_output/notebook_844815ed865e.ipynb
+chmod a-w correct_output/*.ipynb
+ls -l correct_output/
+#+end_src
+
+#+RESULTS:
+: total 88
+: -r--r--r-- 1 alegrand alegrand 41436 Aug 20 11:12 notebook_844815ed865e.ipynb
+: -r--r--r-- 1 alegrand alegrand 41019 Aug 20 11:12 notebook_orig.ipynb
+
+Dans le répertoire =correct_output/=, j'ai donc déposé deux notebooks
+exécutés, l'un qui est celui d'origine et dont je ne connais pas
+l'environnement d'exécution, et l'autre qui a été exécuté dans un
+conteneur =jupyter/scipy-notebook= dont l'identifiant est
+=844815ed865e=. Pour éviter de les altérer accidentellement, j'ai enlevé
+les droits d'écriture à quiconque mais il faudra bien évidemment les
+mettre dans un git.
+
+Je rassemble les commandes précédentes dans [[file:moocrr_notebook/notebook_test.sh][ce script]] que je
+structure avec une petite fonction:
+#+begin_src shell :results output :exports both :tangle moocrr_notebook/notebook_test.sh
+jupyter-nbconvert --to notebook --execute notebook.ipynb --output notebook.nbconvert.ipynb
+
+compare_notebooks() {
+ OLD=$1
+ NEW=$2
+ mkdir -p `dirname sed/$1`
+ mkdir -p `dirname sed/$2`
+ echo "======= Comparing to $OLD ======="
+ sed -e "s/Date:.*Deviance:/Deviance/" -e "s/Time:.*Pearson/Pearson/" $1 > sed/$1
+ sed -e "s/Date:.*Deviance:/Deviance/" -e "s/Time:.*Pearson/Pearson/" $2 > sed/$2
+ # Test #1 (--ignore-matching-lines="image/png" )
+ diff -w --ignore-matching-lines="nbformat_minor" \
+ --ignore-matching-lines="hidePrompt" \
+ --ignore-matching-lines="scrolled" \
+ --ignore-matching-lines="No. Iterations:" \
+ --ignore-matching-lines="Covariance Type:" \
+ sed/$1 sed/$2 # | sed 's/^/>/'
+ CMP_RES=$?
+ echo "======= End of Comparison ======="
+ rm sed/$1 sed/$2
+ return $CMP_RES
+}
+
+compare_notebooks correct_output/notebook_orig.ipynb notebook.nbconvert.ipynb
+CMP1=$?
+compare_notebooks correct_output/notebook_844815ed865e.ipynb notebook.nbconvert.ipynb
+CMP2=$?
+
+if [ $CMP1 -eq "0" -o $CMP2 -eq "0" ] ; then
+ echo "Test succeeded";
+ return 0;
+else
+ echo "Test failed";
+ return 1;
+fi
+#+end_src
+
+#+RESULTS:
+*** Utilisation du test dans différents environnements
+**** =scipy-notebook=
+Je peux alors utiliser ce script pour exécuter mon notebook (dans un
+conteneur) et comparer le résultat aux deux sorties considérées comme
+correctes. Normalement, je devrais obtenir un succès.
#+begin_src shell :session *shell* :results output :exports both
-docker run debian:stable ls -l /usr/bin/X11//python3
+docker run --volume=`pwd`:/home/jovyan/ jupyter/scipy-notebook \
+ sh notebook_test.sh
#+end_src
#+RESULTS:
-: ls: cannot access '/usr/bin/X11//python3': No such file or directory
-
-Gloups. À ce stade j'ai donc un environnement docker qui est toujours
-en train de s'exécuter et dans lequel python3 est bien installé mais
-ça n'est pas accessible en dehors. En fait, dès que je fermerai le
-terminal où se trouve mon docker interactif, je risque de perdre tout
-ce que je viens d'installer.
-*** Gérer ses conteneurs et figer un environnement
-Il est temps que je vous montre comment manipuler ces conteneur. Tout
-d'abord, la commande =docker ps= me permet de savoir quels sont les
-conteneurs en cours d'exécution (il n'y en a qu'un pour l'instant mais
-je pourrais en avoir plusieurs):
-#+begin_src shell :session *shell* :results output :exports both
-docker ps
-#+end_src
+#+begin_example
-#+RESULTS:
-: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-: dca997abf7cc debian:stable "bash" 35 minutes ago Up 35 minutes debian
+[NbConvertApp] Converting notebook notebook.ipynb to notebook
+[NbConvertApp] Executing notebook with kernel: python3
+[NbConvertApp] Writing 41309 bytes to notebook.nbconvert.ipynb
+======= Comparing to correct_output/notebook_orig.ipynb =======
+456c456
+< "image/png": "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\n",
+---
+> "image/png": "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\n",
+506a507,515
+> "name": "stderr",
+> "output_type": "stream",
+> "text": [
+> "/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:6: DeprecationWarning: Calling Family(..) with a link class as argument is deprecated.\n",
+> "Use an instance of a link class instead.\n",
+> " \n"
+> ]
+> },
+> {
+533c542,545
+< "
No. Iterations:
4
Covariance Type:
nonrobust
\n",
+---
+> "
No. Iterations:
4
\n",
+> "
\n",
+> "
\n",
+> "
Covariance Type:
nonrobust
\n",
+613c626
+< "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEKCAYAAAAcgp5RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAGyFJREFUeJzt3X2UVPWd5/H3pxuQBhEjkhkFDWSWtHF9ABRQWZ3WqGhORLPrE2vGMRNCdmeMk83Knng2E43Rc2YHd2I26zgy6jgxiUo8iiSHCahjT2Y8PoCCILAIY4g2JEGND7Q2Snd/9497u6kuqunqpvqhfnxe5/Tpurd+de/3V7fvp27fuvUrRQRmZpaumsEuwMzM+peD3swscQ56M7PEOejNzBLnoDczS5yD3swscT0GvaR7Je2U9HI390vS/5G0VdI6SdMrX6aZmfVVOUf09wEX7Of+C4Ep+c8C4M4DL8vMzCqlx6CPiF8Av9tPk4uBH0TmWeBwSUdVqkAzMzswwyqwjAnA6wXTTfm8Xxc3lLSA7KifkSNHnnLsscdWYPVDU3t7OzU16b4FknL/Uu4buH/V7pVXXnkzIsb35jGVCHqVmFdyXIWIWAwsBqivr4/NmzdXYPVDU2NjIw0NDYNdRr9JuX8p9w3cv2on6Ve9fUwlXvaagGMKpicCOyqwXDMzq4BKBP0y4Or86pvTgHcjYp/TNmZmNjh6PHUj6QGgAThSUhNwIzAcICL+FlgOfBbYCnwAfLG/ijUzs97rMegjYl4P9wfwZxWryMyqwp49e2hqamL37t2DXUoXY8eOZdOmTYNdxgEbOXIkEydOZPjw4Qe8rEq8GWtmB6GmpibGjBnDpEmTkEpdkzE4du3axZgxYwa7jAMSEbz11ls0NTUxefLkA15eutcgmVm/2r17N+PGjRtSIZ8KSYwbN65i/y056M2szxzy/aeSz62D3swscT5Hb2ZVq7a2lhNPPLFzeunSpYwbN24QKxqaHPRmVrXq6upYu3Ztl3m7du3qvN3a2sqwYY45n7oxs6T86Ec/4rLLLuOiiy7i/PPPB2DRokXMmDGDk046iRtvvLGz7a233kp9fT3nnnsu8+bN47bbbgOgoaGB1atXA/Dmm28yadIkANra2li4cGHnsu666y5g77ALl156KccddxxXXXUV2ZXnsGrVKs444wxOPvlkZs6cya5duzjzzDO7vEDNnj2bdevW9dtz4pc6Mztg3/7pBjbueK+iyzz+6MO48aJ/v982LS0tTJ06FYDJkyfz6KOPAvDMM8+wbt06jjjiCFauXMmWLVt4/vnniQjmzp3LL37xC0aPHs2DDz7ImjVraG1tZfr06Zxyyin7Xd8999zD2LFjWbVqFR9++CGzZ8/ufDFZs2YNGzZs4Oijj2b27Nk8/fTTzJw5kyuuuIKHHnqIGTNm8N5771FXV8f8+fO57777uP3223nllVf48MMPOemkkyrwrJXmoDezqlXq1A3AeeedxxFHHAHAypUrWblyJdOmTQOgubmZLVu2sGvXLj7/+c8zatQoAObOndvj+lauXMm6det4+OGHAXj33XfZsmULI0aMYObMmUycOBGAqVOnsm3bNsaOHctRRx3FjBkzADjssMMAuOyyy/jOd77DokWLuPfee7nmmmsO7InogYPezA5YT0feA2306NGdtyOCG264ga985Std2tx+++3dXsI4bNgw2tvbAbpcyx4RfP/732fOnDld2jc2NnLIIYd0TtfW1tLa2kpElFzHqFGjOO+883jsscdYsmRJ52mi/uJz9GaWtDlz5nDvvffS3NwMwPbt29m5cydnnXUWjz76KC0tLezatYuf/vSnnY+ZNGkSL7zwAkDn0XvHsu6880727NkDwCuvvML777/f7bqPO+44duzYwapVq4DsjeLW1lYA5s+fz3XXXceMGTM6//voLz6iN7OknX/++WzatInTTz8dgEMPPZQf/vCHTJ8+nSuuuIKpU6fyiU98gjPPPLPzMddffz2XX345999/P+ecc07n/Pnz57Nt2zamT59ORDB+/HiWLl3a7bpHjBjBQw89xFe/+lVaWlqoq6vjiSee4NBDD+WUU07hsMMO44tfHIBxICNiUH4+9alPRcqeeuqpwS6hX6Xcv5T7FlG5/m3cuLEiy6m09957r0+Pu/HGG2PRokUVrqZ727dvjylTpkRbW1u3bUo9x8Dq6GXe+tSNmdkA+8EPfsCsWbO49dZbB+RrD33qxswMuOmmmwZsXVdffTVXX331gK3PR/Rm1mcRJb8e2iqgks+tg97M+mTkyJG89dZbDvt+EPl49CNHjqzI8nzqxsz6ZOLEiTQ1NfHGG28Mdild7N69u2IBOZg6vmGqEhz0ZtYnw4cP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\n",
+---
+> "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEKCAYAAAAcgp5RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAay0lEQVR4nO3dfZRU9Z3n8fenGwgNIoxIMgoayBzSrhsVMYDK6PYYBc2JT7tRJM6YuMMSd2Iy2T1ho+dkVjPRc3YO7hwzGSOyhnGMGR/GVdQcJqBuOs64PqABQSQ8rCHSkAQxo9DaKN393T/u7aa6upuuLqof6ufndU6frnvrd299v1Vdn7p969YtRQRmZpaumqEuwMzMBpaD3swscQ56M7PEOejNzBLnoDczS5yD3swscX0GvaQVkvZIerWX6yXpbyRtl7RB0szKl2lmZuUqZYv+HuDCw1x/ETA9/1kM3HnkZZmZWaX0GfQR8Qzwu8MMuRS4NzLPAxMkHVepAs3M7MiMqMA6JgM7C6ab8nm/Lh4oaTHZVj+jR48+48QTT6zAzQ9P7e3t1NSk+xaI+6teKfcG6fe3devWvRExqT/LVCLo1cO8Hs+rEBHLgeUA9fX1sWXLlgrc/PDU2NhIQ0PDUJcxYNxf9Uq5N0i/P0m/6u8ylXjZawJOKJieAuyuwHrNzKwCKhH0jwPX5EffnAm8ExHddtuYmdnQ6HPXjaT7gQbgWElNwE3ASICIWAasAj4LbAfeA64dqGLNzKz/+gz6iFjYx/UBfKViFZlZVTh48CBNTU0cOHBgqEvpYvz48WzevHmoyzhio0ePZsqUKYwcOfKI11WJN2PN7EOoqamJcePGMXXqVKSejskYGvv372fcuHFDXcYRiQjeeustmpqamDZt2hGvL91jkMxsQB04cICJEycOq5BPhSQmTpxYsf+WHPRmVjaH/MCp5H3roDczS5z30ZtZ1aqtreWUU07pnF65ciUTJ04cwoqGJwe9mVWturo61q9f32Xe/v37Oy+3trYyYoRjzrtuzCwpP/rRj7jiiiu4+OKLmTdvHgBLly5l1qxZnHrqqdx0002dY2+99Vbq6+s5//zzWbhwIbfddhsADQ0NvPTSSwDs3buXqVOnAtDW1saSJUs613XXXXcBh0678PnPf56TTjqJq6++muzIc1i7di1nn302p512GrNnz2b//v2cc845XV6g5s6dy4YNGwbsPvFLnZkdsW8/sYnXdu+r6DpPPv5obrr43x52TEtLCzNmzABg2rRpPProowA899xzbNiwgWOOOYY1a9awbds2XnzxRSKCSy65hGeeeYaxY8fywAMPsG7dOlpbW5k5cyZnnHHGYW/vBz/4AePHj2ft2rW8//77zJ07t/PFZN26dWzatInjjz+euXPn8uyzzzJ79mwWLFjAgw8+yKxZs9i3bx91dXUsWrSIe+65h9tvv52tW7fy/vvvc+qpp1bgXuuZg97MqlZPu24ALrjgAo455hgA1qxZw5o1azj99NMBaG5uZtu2bezfv5/LL7+cMWPGAHDJJZf0eXtr1qxhw4YNPPzwwwC88847bNu2jVGjRjF79mymTJkCwIwZM9ixYwfjx4/nuOOOY9asWQAcffTRAFxxxRV85zvfYenSpaxYsYIvfelLR3ZH9MFBb2ZHrK8t78E2duzYzssRwY033siXv/zlLmNuv/32Xg9hHDFiBO3t7QBdjmWPCL73ve8xf/78LuMbGxv5yEc+0jldW1tLa2srEdHjbYwZM4YLLriAxx57jIceeqhzN9FA8T56M0va/PnzWbFiBc3NzQDs2rWLPXv2cO655/Loo4/S0tLC/v37eeKJJzqXmTp1Ki+//DJA59Z7x7ruvPNODh48CMDWrVt59913e73tk046id27d7N27Voge6O4tbUVgEWLFvG1r32NWbNmdf73MVC8RW9mSZs3bx6bN2/mrLPOAuCoo47ivvvuY+bMmSxYsIAZM2bw8Y9/nHPOOadzmW984xtceeWV/PCHP+S8887rnL9o0SJ27NjBzJkziQgmTZrEypUre73tUaNG8eCDD/LVr36VlpYW6urqeOqppzjqqKM444wzOProo7n22kE4D2REDMnPJz/5yUjZT3/606EuYUC5v+pVqd5ee+21iqyn0vbt21fWcjfddFMsXbq0wtX0bteuXTF9+vRoa2vrdUxP9zHwUvQzb73rxsxskN17773MmTOHW2+9dVC+9tC7bszMgJtvvnnQbuuaa67hmmuuGbTb8xa9mZUtosevh7YKqOR966A3s7KMHj2at956y2E/ACI/H/3o0aMrsj7vujGzskyZMoWmpibefPPNoS6liwMHDlQsIIdSxzdMVYKD3szKMnLkyIp8+1Gl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\n",
+======= End of Comparison =======
+======= Comparing to correct_output/notebook_844815ed865e.ipynb =======
+======= End of Comparison =======
+Test succeeded
+#+end_example
+
+Parfait!
+**** =alegrand38/moocrr_debian_stable_jupyter:1.0=
+Et maintenant, à tout hasard, je vais essayer ce script avec
+un des environnements que j'ai construit précédemment à partir d'une
+=debian/stable=.
-Mon conteneur est donc identifié par ce =CONTAINER_ID= et il
-s'exécute depuis une demi-heure. Il a été modifié depuis qu'il a
-commencé et je peux demander à docker ce qui a changé (attention,
-c'est long alors je coupe pour ne montrer que le début):
#+begin_src shell :session *shell* :results output :exports both
-docker diff dca997abf7cc | head -n 60
-#+end_src
-
-#+RESULTS:
-#+begin_example
-C /bin
-A /bin/bunzip2
-A /bin/bzcat
-A /bin/bzcmp
-A /bin/bzdiff
-A /bin/bzegrep
-A /bin/bzexe
-A /bin/bzfgrep
-A /bin/bzgrep
-A /bin/bzip2
-A /bin/bzip2recover
-A /bin/bzless
-A /bin/bzmore
-A /bin/fuser
-A /bin/kill
-A /bin/ps
-C /etc
-C /etc/.pwd.lock
-D /etc/X11
-A /etc/X11/Xreset
-A /etc/X11/Xreset.d
-A /etc/X11/Xreset.d/README
-A /etc/X11/Xresources
-A /etc/X11/Xresources/x11-common
-A /etc/X11/Xsession
-A /etc/X11/Xsession.d
-A /etc/X11/Xsession.d/20x11-common_process-args
-A /etc/X11/Xsession.d/30x11-common_xresources
-A /etc/X11/Xsession.d/35x11-common_xhost-local
-A /etc/X11/Xsession.d/40x11-common_xsessionrc
-A /etc/X11/Xsession.d/50x11-common_determine-startup
-A /etc/X11/Xsession.d/90gpg-agent
-A /etc/X11/Xsession.d/90x11-common_ssh-agent
-A /etc/X11/Xsession.d/99x11-common_start
-A /etc/X11/Xsession.options
-A /etc/X11/rgb.txt
-C /etc/alternatives
-A /etc/alternatives/c++
-A /etc/alternatives/c89
-A /etc/alternatives/c89.1.gz
-A /etc/alternatives/c99
-A /etc/alternatives/c99.1.gz
-A /etc/alternatives/cc
-A /etc/alternatives/cpp
-A /etc/alternatives/faked.1.gz
-A /etc/alternatives/faked.es.1.gz
-A /etc/alternatives/faked.fr.1.gz
-A /etc/alternatives/faked.sv.1.gz
-A /etc/alternatives/fakeroot
-A /etc/alternatives/fakeroot.1.gz
-A /etc/alternatives/fakeroot.es.1.gz
-A /etc/alternatives/fakeroot.fr.1.gz
-A /etc/alternatives/fakeroot.sv.1.gz
-A /etc/alternatives/jsonschema
-A /etc/alternatives/libblas.so.3-x86_64-linux-gnu
-A /etc/alternatives/liblapack.so.3-x86_64-linux-gnu
-A /etc/alternatives/lzcat
-A /etc/alternatives/lzcat.1.gz
-A /etc/alternatives/lzcmp
-A /etc/alternatives/lzcmp.1.gz
-#+end_example
-
-Je vais sauvegarder cet environnement avec la commande =docker commit=.
-#+begin_src shell :session *shell* :results output :exports both
-docker commit debian debian_stable_jupyter
-#+end_src
-
-#+RESULTS:
-: sha256:2b001b2c02a66a7bf2ab2e7e3d234f3611bc7e6228e2f423ceb7d294cb6bd442
-
-Et voilà! Mon nouvel environnement est maintenant figé et visible sur
-ma machine:
-#+begin_src shell :session *shell* :results output :exports both
-docker image ls
-#+end_src
-
-#+RESULTS:
-#+begin_example
-REPOSITORY TAG IMAGE ID CREATED SIZE
-debian_stable_jupyter latest 2b001b2c02a6 About a minute ago 962MB
-simgrid-website latest 0f3727380ab6 13 days ago 1.19GB
-debian stable 40e13c3c9aab 13 days ago 114MB
-#+end_example
-
-#+begin_src shell :session *shell* :results output :exports both
-docker run debian_stable_jupyter ls -l /usr/bin/X11//python3
-#+end_src
-
-#+RESULTS:
-:
-: python3.7
-
-Je peux donc maintenant arrêter mon conteneur:
-#+begin_src shell :session *shell* :results output :exports both
-docker stop debian
-#+end_src
-
-#+RESULTS:
-: exit
-: debian
-
-Je peux alors vérifier que mon conteneur est arrêté.
-#+begin_src shell :results output :exports both
-docker ps
-#+end_src
-
-#+RESULTS:
-: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
-*** Exécuter notre notebook dans ce nouvel environnemnt
-Le conteneur ayant son propre système de fichier, il va falloir
-trouver un moyen d'y importer notre notebook. Le plus simple consiste
-à monter notre répertoire courant dans le =/tmp= du conteneur.
-
-#+begin_src shell :session *shell* :results output :exports both
-echo "-- Sans partage"
-docker run debian_stable_jupyter ls /tmp
-echo "-- Avec partage"
-docker run --volume=`pwd`:/tmp debian_stable_jupyter ls /tmp
-#+end_src
-
-#+RESULTS:
-: -- Sans partage
-: ]0;alegrand@icarus: /home/alegrand/Work/Documents/Enseignements/RR_MOOC/gitlab-inria/mooc-rr-ressources/module4/ressources/mooc_docker[01;32micarus[00m:[01;34m~/Work/Documents/Enseignements/RR_MOOC/gitlab-inria/mooc-rr-ressources/module4/ressources/mooc_docker[00m$ -- Avec partage
-: notebook.html
-: notebook.ipynb
-: notebook_rerun.html
-: notebook_rerun.ipynb
-: shuttle.csv
-
-#+begin_src shell :session *shell* :results output :exports both
-cp notebook.ipynb notebook_docker.ipynb
-docker run --volume=`pwd`:/tmp debian_stable_jupyter jupyter-nbconvert --to notebook --execute /tmp/notebook_docker.ipynb --output /tmp/notebook_docker.ipynb
-docker run --volume=`pwd`:/tmp debian_stable_jupyter jupyter-nbconvert --to html /tmp/notebook_docker.ipynb
-#+end_src
-
-#+RESULTS:
-:
-: [NbConvertApp] Converting notebook /tmp/notebook_docker.ipynb to notebook
-: [NbConvertApp] Executing notebook with kernel: python3
-: [NbConvertApp] Writing 41346 bytes to /tmp/notebook_docker.ipynb
-: [NbConvertApp] Converting notebook /tmp/notebook_docker.ipynb to html
-: [NbConvertApp] Writing 317710 bytes to /tmp/notebook_docker.html
-
-#+begin_src shell :session *shell* :results output :exports both
-ls -l
-#+end_src
-
-#+RESULTS:
-: total 1056
-: -rw-r--r-- 1 alegrand alegrand 305302 Jul 23 09:20 notebook.html
-: -rw-r--r-- 1 alegrand alegrand 41019 Jul 23 09:19 notebook.ipynb
-: -rw-r--r-- 1 root root 317832 Jul 23 10:10 notebook_docker.html
-: -rw-r--r-- 1 alegrand alegrand 41473 Jul 23 10:10 notebook_docker.ipynb
-: -rw-r--r-- 1 alegrand alegrand 305805 Jul 23 09:21 notebook_rerun.html
-: -rw-r--r-- 1 alegrand alegrand 41473 Jul 23 09:21 notebook_rerun.ipynb
-: -rw-r--r-- 1 alegrand alegrand 485 Jul 23 09:19 shuttle.csv
-
-Une fois de plus le résultat semble différent (pas la même
-taille). Regardons les différences entre ce qui a été exécuté dans mon
-environnement de base et dans mon conteneur.
-#+begin_src shell :session *shell* :results output :exports both
-diff notebook_rerun.ipynb notebook_docker.ipynb # | sed 's/^/>/'
+docker run --volume=`pwd`:/root/ alegrand38/moocrr_debian_stable_jupyter:1.0 \
+ sh -c "cd /root; sh notebook_test.sh"
#+end_src
#+RESULTS:
#+begin_example
+[NbConvertApp] Converting notebook notebook.ipynb to notebook
+[NbConvertApp] Executing notebook with kernel: python3
+[NbConvertApp] Writing 41346 bytes to notebook.nbconvert.ipynb
+======= Comparing to correct_output/notebook_orig.ipynb =======
456c456
-< "image/png": "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\n",
+< "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAFaNJREFUeJzt3X2QZXV95/H3p2cGGASFwGZiMSAQWFdKCWALGtxkiMRCqxzWwgfYSjRGnWwJlTImRuK6hLCmaiUxJlaIOroaYUuRh1Vnd3ERNK3REmHUCY/BzCJCgwHFUWkY5oH+7h/3zvFOd0/37aHPvUz3+1XVNfec+zvnfvvL4X76PNxzU1VIkgQwMuwCJElPH4aCJKlhKEiSGoaCJKlhKEiSGoaCJKnRWigk+XiSh5Pcvofnk+SDSTYnuTXJKW3VIknqT5t7Cn8PnDXL868Aju/+rAM+1GItkqQ+tBYKVfVV4MezDDkbuLw6bgIOSfLstuqRJM1t+RBf+wjg/p7p8e68H0wdmGQdnb0JVq5c+cIjjzxyIAU+VZOTk4yMeNqmlz2Zzp5MZ09m9lT68t3vfvdHVfVv5ho3zFDIDPNmvOdGVa0H1gOMjo7Wxo0b26xrwYyNjbFmzZphl/G0Yk+msyfT2ZOZPZW+JPl+P+OGGcXjQO+f/KuBB4dUiySJ4YbCBuAN3auQXgz8tKqmHTqSJA1Oa4ePknwaWAMcnmQc+FNgBUBVfRi4DnglsBl4HHhTW7VIkvrTWihU1XlzPF/A+W29viRp/jy9L0lqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqtBoKSc5KcneSzUkunOH5o5L8Q5LvJLk1ySvbrEeSNLvWQiHJMuAy4BXACcB5SU6YMuw9wFVVdTJwLvB3bdUjSZpbm3sKpwKbq+qeqtoOXAmcPWVMAc/sPn4W8GCL9UiS5pCqamfFyWuAs6rqLd3p3wZOq6oLesY8G/gicCjwDODMqvrWDOtaB6wDWLVq1QuvvPLKVmpeaBMTExx00EHDLuNpxZ5MZ0+msyczeyp9OeOMM75VVaNzjVu+V2vvT2aYNzWBzgP+vqren+QlwBVJnl9Vk7stVLUeWA8wOjpaa9asaaPeBTc2Nsa+Uuug2JPp7Ml09mRmg+hLm4ePxoEje6ZXM/3w0JuBqwCq6hvAAcDhLdYkSZpFm6FwC3B8kmOS7EfnRPKGKWPuA14GkOR5dELhhy3WJEmaRWuhUFU7gQuA64G76FxldEeSS5Ks7Q77Q+CtSf4J+DTwO9XWSQ5J0pzaPKdAVV0HXDdl3kU9j+8ETm+zBklS//xEsySpYShIkhqGgiSpYShIkhqGgiSpYShIkhqGgiSpYShIkhqGgiSpYShIkhqGgiSpYShIkhqGgiSpYShIkhqGgiSpYShIkhqGgiSpYShIkhqGgiSpYShIkhqGgiSpYShIkhqGgiSpYShIkhqGgiSpYShIkhqGgiSpYShIkhqGgiSpYShIkhqGgiSpYShIkhqGgiSpYShIkhqthkKSs5LcnWRzkgv3MOZ1Se5MckeST7VZjyRpdsv7GZTk+VV1+3xWnGQZcBnwm8A4cEuSDVV1Z8+Y44E/AU6vqi1JfnE+ryFJWlj97il8OMnNSd6W5JA+lzkV2FxV91TVduBK4OwpY94KXFZVWwCq6uE+1y1JakFfewpV9dLuX/W/C2xMcjPwiaq6YZbFjgDu75keB06bMubfAiT5OrAMuLiq/u/UFSVZB6wDWLVqFWNjY/2UPXQTExP7TK2DYk+msyfT2ZOZDaIvfYUCQFX9S5L3ABuBDwInJwnw7qr6nzMskplWM8PrHw+sAVYD/9g9VPWTKa+9HlgPMDo6WmvWrOm37KEaGxtjX6l1UOzJdPZkOnsys0H0pa/DR0lOTPIB4C7gN4BXVdXzuo8/sIfFxoEje6ZXAw/OMObzVbWjqr4H3E0nJCRJQ9DvOYW/Bb4N/EpVnV9V3waoqgeB9+xhmVuA45Mck2Q/4Fxgw5QxnwPOAEhyOJ3DSffM71eQJC2Ufg8fvRLYWlVPAiQZAQ6oqser6oqZFqiqnUkuAK6nc77g41V1R5JLgI1VtaH73MuT3Ak8Cbyzqh55ir+TJGkv9RsKNwJnAhPd6QOBLwK/OttCVXUdcN2UeRf1PC7gHd0fSdKQ9Xv46ICq2hUIdB8f2E5JkqRh6TcUHktyyq6JJC8EtrZTkiRpWPo9fPR24Ooku64eejbw+nZKkiQNS78fXrslyb8Dnkvn8wf/XFU7Wq1MkjRwfX94DXgRcHR3mZOTUFWXt1KVJGko+r0h3hXALwOb6Fw6Cp1PJxsKkrSI9LunMAqc0L2EVJK0SPV79dHtwC+1WYgkafj63VM4HLize3fUbbtmVtXaVqqSJA1Fv6FwcZtFSJKeHvq9JPUrSZ4DHF9VNyY5kM79jCRJi0i/t85+K3AN8JHurCPo3OFUkrSI9Hui+XzgdOBn0PnCHcDvU5akRabfUNjW/Z5lAJIsZ/q3qEmS9nH9hsJXkrwbWJnkN4Grgf/VXlmSpGHoNxQuBH4I3Ab8Hp3vSNjTN65JkvZR/V59NAl8tPsjSVqk+r330feY4RxCVR274BVJkoZmPvc+2uUA4LXALyx8OZKkYerrnEJVPdLz80BV/TXwGy3XJkkasH4PH53SMzlCZ8/h4FYqkiQNTb+Hj97f83gncC/wugWvRpI0VP1efXRG24VIkoav38NH75jt+ar6q4UpR5I0TPO5+uhFwIbu9KuArwL3t1GUJGk45vMlO6dU1aMASS4Grq6qt7RVmCRp8Pq9zcVRwPae6e3A0QtejSRpqPrdU7gCuDnJZ+l8svnVwOWtVSVJGop+rz768yRfAP59d9abquo77ZUlSRqGfg8fARwI/Kyq/gYYT3JMSzVJkoak36/j/FPgXcCfdGetAP5HW0VJkoaj3z2FVwNrgccAqupBvM2FJC06/YbC9qoqurfPTvKM9kqSJA1Lv6FwVZKPAIckeStwI37hjiQtOv1effSX3e9m/hnwXOCiqrqh1cokSQM3555CkmVJbqyqG6rqnVX1R/0GQpKzktydZHOSC2cZ95oklWR0T2MkSe2bMxSq6kng8STPms+KkywDLgNeAZwAnJfkhBnGHQz8PvDN+axfkrTw+v1E8xPAbUluoHsFEkBV/f4sy5wKbK6qewCSXAmcDdw5Zdx/BS4F/qjfoiVJ7eg3FP5P92c+jmD3u6iOA6f1DkhyMnBkVf3vJHsMhSTrgHUAq1atYmxsbJ6lDMfExMQ+U+ug2JPp7Ml09mRmg+jLrKGQ5Kiquq+qPrkX684M86pn3SPAB4DfmWtFVbUeWA8wOjpaa9as2YtyBm9sbIx9pdZBsSfT2ZPp7MnMBtGXuc4pfG7XgyTXznPd48CRPdOrgQd7pg8Gng+MJbkXeDGwwZPNkjQ8c4VC71/7x85z3bcAxyc5Jsl+wLn8/Et6qKqfVtXhVXV0VR0N3ASsraqN83wdSdICmSsUag+P51RVO4ELgOuBu4CrquqOJJckWTu/MiVJgzDXieZfSfIzOnsMK7uP6U5XVT1ztoWr6jrguinzLtrD2DV9VSxJas2soVBVywZViCRp+ObzfQqSpEXOUJAkNQwFSVLDUJAkNZZMKDwysY1/uv8nPDKxbdilSNK8PTKxja07nmz9PWxJhMLnNz3A6e/7Mr/1sW9y+vu+zIZNDwy7JEnq2673sO/98LHW38MWfSg8MrGNd117K0/smOTRbTt5Ysckf3ztre4xSNon9L6HPVnV+nvYog+F8S1bWTGy+6+5YmSE8S1bh1SRJPVv0O9hiz4UVh+6kh2Tk7vN2zE5yepDVw6pIknq36DfwxZ9KBx20P5ces6JHLBihIP3X84BK0a49JwTOeyg/YddmiTNqfc9bFnS+ntYv1+ys09be9IRnH7c4Yxv2crqQ1caCJL2Kbvew27+xtf4+tqXtvoetiRCATppaxhI2lcddtD+rFyxrPX3sUV/+EiS1D9DQZLUMBQkSQ1DQZLUMBQkSQ1DQZLUMBQkSQ1DQZLUMBQkSQ1DQZLUMBQkSQ1DQZLUMBQkSQ1DQZLUMBQkSQ1DQZLUMBQkSQ1DQZLUMBQkSQ1DQZLUMBQkSY1WQyHJWUnuTrI5yYUzPP+OJHcmuTXJl5I8p816JEmzay0UkiwDLgNeAZwAnJfkhCnDvgOMVtWJwDXApW3VI0maW5t7CqcCm6vqnqraDlwJnN07oKr+oaoe707eBKxusR5J0hyWt7juI4D7e6bHgdNmGf9m4AszPZFkHbAOYNWqVYyNjS1Qie2amJjYZ2odFHsynT2Zzp7MbBB9aTMUMsO8mnFg8lvAKPDrMz1fVeuB9QCjo6O1Zs2aBSqxXWNjY+wrtQ6KPZnOnkxnT2Y2iL60GQrjwJE906uBB6cOSnIm8J+BX6+qbS3WI0maQ5vnFG4Bjk9yTJL9gHOBDb0DkpwMfARYW1UPt1iLJKkPrYVCVe0ELgCuB+4CrqqqO5JckmRtd9hfAAcBVyfZlGTDHlYnSRqANg8fUVXXAddNmXdRz+Mz23z9peSRiW2Mb9nK6kNXcthB+7e+3GJmT4Zr80OPsuXxHWx+6FGOW3XwsMtZcloNBQ3G5zc9wLuuvZUVIyPsmJzk0nNOZO1JR7S23GJmT4bros/dxuU33ccfvmAnf/CBr/KGlxzFJWe/YNhlLSne5mIf98jENt517a08sWOSR7ft5Ikdk/zxtbfyyMTs5+z3drnFzJ4M1+aHHuXym+7bbd7l37iPzQ89OqSKliZDYR83vmUrK0Z2/8+4YmSE8S1bW1luMbMnw7Xp/p/Ma77aYSjs41YfupIdk5O7zdsxOcnqQ1e2stxiZk+G66QjD5nXfLXDUNjHHXbQ/lx6zokcsGKEg/dfzgErRrj0nBPnPEG6t8stZvZkuI5bdTBveMlRu817w0uO8mTzgHmieRFYe9IRnH7c4fO+YmZvl1vM7MlwXXL2C3jDi4/mtm/dxI1/8GIDYQgMhUXisIP236s3sL1dbjGzJ8N13KqDGT9whYEwJB4+kiQ1DAVJUsNQkCQ1DAVJUsNQkCQ1DAVJUsNQkCQ1DAVJUsNQkCQ1DAVJUsNQkCQ1DAVJUsNQkCQ1DAVJUsNQkCQ1DAVJUsNQkCQ1DAVJUsNQkCQ1DAVJUsNQkCQ1DAVJUsNQkCQ1DAVJUsNQkCQ1DAVJUsNQkCQ1DAVJUqPVUEhyVpK7k2xOcuEMz++f5DPd57+Z5Og265Ekza61UEiyDLgMeAVwAnBekhOmDHszsKWqjgM+ALyvrXokSXNrc0/hVGBzVd1TVduBK4Gzp4w5G/hk9/E1wMuSpMWaJEmzWN7iuo8A7u+ZHgdO29OYqtqZ5KfAYcCPegclWQes605OJLm7lYoX3uFM+V1kT2ZgT6azJzN7Kn15Tj+D2gyFmf7ir70YQ1WtB9YvRFGDlGRjVY0Ou46nE3synT2Zzp7MbBB9afPw0ThwZM/0auDBPY1Jshx4FvDjFmuSJM2izVC4BTg+yTFJ9gPOBTZMGbMBeGP38WuAL1fVtD0FSdJgtHb4qHuO4ALgemAZ8PGquiPJJcDGqtoA/HfgiiSb6ewhnNtWPUOyzx3yGgB7Mp09mc6ezKz1vsQ/zCVJu/iJZklSw1CQJDUMhQWS5N4ktyXZlGRjd97FSR7oztuU5JXDrnPQkhyS5Jok/5zkriQvSfILSW5I8i/dfw8ddp2DtIeeLNltJclze37vTUl+luTtS3k7maUnrW8nnlNYIEnuBUar6kc98y4GJqrqL4dV17Al+STwj1X1se5VaAcC7wZ+XFX/rXtPrEOr6l1DLXSA9tCTt7PEtxVobo/zAJ0Pup7PEt5OdpnSkzfR8nbinoJak+SZwK/RucqMqtpeVT9h99ubfBL4D8OpcPBm6Yk6Xgb8v6r6Pkt4O5mityetMxQWTgFfTPKt7m05drkgya1JPr6Udn+7jgV+CHwiyXeSfCzJM4BVVfUDgO6/vzjMIgdsTz2Bpb2t7HIu8Onu46W8nfTq7Qm0vJ0YCgvn9Ko6hc5dYc9P8mvAh4BfBk4CfgC8f4j1DcNy4BTgQ1V1MvAYMO0W6kvMnnqy1LcVuofS1gJXD7uWp4sZetL6dmIoLJCqerD778PAZ4FTq+qhqnqyqiaBj9K5c+xSMg6MV9U3u9PX0HlDfCjJswG6/z48pPqGYcaeuK0AnT+ovl1VD3Wnl/J2sstuPRnEdmIoLIAkz0hy8K7HwMuB23dt0F2vBm4fRn3DUlX/Ctyf5LndWS8D7mT325u8Efj8EMobij31ZKlvK13nsfthkiW7nfTYrSeD2E68+mgBJDmWzt4BdA4PfKqq/jzJFXR28wq4F/i9XcdIl4okJwEfA/YD7qFz9cQIcBVwFHAf8NqqWjI3QtxDTz7IEt5WkhxI5zb6x1bVT7vzDmNpbycz9aT19xRDQZLU8PCRJKlhKEiSGoaCJKlhKEiSGoaCJKnR2jevSYPWvYTxS93JXwKepHNLCeh8mHD7UAqbRZLfBa7rfn5BGjovSdWi9HS6Q22SZVX15B6e+xpwQVVtmsf6llfVzgUrUOrh4SMtCUnemOTm7j3o/y7JSJLlSX6S5C+SfDvJ9UlOS/KVJPfsuld9krck+Wz3+buTvKfP9b43yc3AqUn+LMktSW5P8uF0vJ7OB5E+011+vyTjSQ7prvvFSW7sPn5vko8kuYHOzfSWJ/mr7mvfmuQtg++qFiNDQYtekufTuSXAr1bVSXQOm57bffpZwBe7NzPcDlxM59YTrwUu6VnNqd1lTgH+Y5KT+ljvt6vq1Kr6BvA3VfUi4AXd586qqs8Am4DXV9VJfRzeOhl4VVX9NrAOeLiqTgVeROcmjEftTX+kXp5T0FJwJp03zo1JAFbSuX0AwNaquqH7+Dbgp1W1M8ltwNE967i+qrYAJPkc8FI6///sab3b+fmtTwBeluSdwAHA4cC3gC/M8/f4fFU90X38cuB5SXpD6Hg6t4OQ9pqhoKUgwMer6r/sNjNZTufNe5dJYFvP497/P6aefKs51ru1uifsuvew+Vs6d0N9IMl76YTDTHby8z34qWMem/I7va2qvoS0gDx8pKXgRuB1SQ6HzlVKe3Go5eXpfLfygXS+Eezr81jvSjoh86Pu3XTP6XnuUeDgnul7gRd2H/eOm+p64G3dANr1nb4r5/k7SdO4p6BFr6puS/JnwI1JRoAdwH8CHpzHar4GfIrOF5xcsetqoX7WW1WPpPO9zLcD3we+2fP0J4CPJdlK57zFxcBHk/wrcPMs9XyEzt1DN3UPXT1MJ6ykp8RLUqU5dK/seX5VvX3YtUht8/CRJKnhnoIkqeGegiSpYShIkhqGgiSpYShIkhqGgiSp8f8B+Q9eu+sB8EwAAAAASUVORK5CYII=\n",
---
> "image/png": "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\n",
-538c538
-< "
Time:
09:21:16
Pearson chi2:
0.236
\n",
+506a507,514
+> "name": "stderr",
+> "output_type": "stream",
+> "text": [
+> "/usr/lib/python3/dist-packages/statsmodels/compat/pandas.py:56: FutureWarning: The pandas.core.datetools module is deprecated and will be removed in a future version. Please use the pandas.tseries module instead.\n",
+> " from pandas.core import datetools\n"
+> ]
+> },
+> {
+521c529
+< "
\n",
+556,558c564,566
+< "Link Function: logit Scale: 1.0000\n",
+< "Method: IRLS Log-Likelihood: -2.5250\n",
+< "Deviance 0.22231\n",
+---
+> "Link Function: logit Scale: 1.0\n",
+> "Method: IRLS Log-Likelihood: -3.6370\n",
+> "Deviance 3.3763\n",
+613c621
+< "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEKCAYAAAAcgp5RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAGyFJREFUeJzt3X2UVPWd5/H3pxuQBhEjkhkFDWSWtHF9ABRQWZ3WqGhORLPrE2vGMRNCdmeMk83Knng2E43Rc2YHd2I26zgy6jgxiUo8iiSHCahjT2Y8PoCCILAIY4g2JEGND7Q2Snd/9497u6kuqunqpvqhfnxe5/Tpurd+de/3V7fvp27fuvUrRQRmZpaumsEuwMzM+peD3swscQ56M7PEOejNzBLnoDczS5yD3swscT0GvaR7Je2U9HI390vS/5G0VdI6SdMrX6aZmfVVOUf09wEX7Of+C4Ep+c8C4M4DL8vMzCqlx6CPiF8Av9tPk4uBH0TmWeBwSUdVqkAzMzswwyqwjAnA6wXTTfm8Xxc3lLSA7KifkSNHnnLsscdWYPVDU3t7OzU16b4FknL/Uu4buH/V7pVXXnkzIsb35jGVCHqVmFdyXIWIWAwsBqivr4/NmzdXYPVDU2NjIw0NDYNdRr9JuX8p9w3cv2on6Ve9fUwlXvaagGMKpicCOyqwXDMzq4BKBP0y4Or86pvTgHcjYp/TNmZmNjh6PHUj6QGgAThSUhNwIzAcICL+FlgOfBbYCnwAfLG/ijUzs97rMegjYl4P9wfwZxWryMyqwp49e2hqamL37t2DXUoXY8eOZdOmTYNdxgEbOXIkEydOZPjw4Qe8rEq8GWtmB6GmpibGjBnDpEmTkEpdkzE4du3axZgxYwa7jAMSEbz11ls0NTUxefLkA15eutcgmVm/2r17N+PGjRtSIZ8KSYwbN65i/y056M2szxzy/aeSz62D3swscT5Hb2ZVq7a2lhNPPLFzeunSpYwbN24QKxqaHPRmVrXq6upYu3Ztl3m7du3qvN3a2sqwYY45n7oxs6T86Ec/4rLLLuOiiy7i/PPPB2DRokXMmDGDk046iRtvvLGz7a233kp9fT3nnnsu8+bN47bbbgOgoaGB1atXA/Dmm28yadIkANra2li4cGHnsu666y5g77ALl156KccddxxXXXUV2ZXnsGrVKs444wxOPvlkZs6cya5duzjzzDO7vEDNnj2bdevW9dtz4pc6Mztg3/7pBjbueK+iyzz+6MO48aJ/v982LS0tTJ06FYDJkyfz6KOPAvDMM8+wbt06jjjiCFauXMmWLVt4/vnniQjmzp3LL37xC0aPHs2DDz7ImjVraG1tZfr06Zxyyin7Xd8999zD2LFjWbVqFR9++CGzZ8/ufDFZs2YNGzZs4Oijj2b27Nk8/fTTzJw5kyuuuIKHHnqIGTNm8N5771FXV8f8+fO57777uP3223nllVf48MMPOemkkyrwrJXmoDezqlXq1A3AeeedxxFHHAHAypUrWblyJdOmTQOgubmZLVu2sGvXLj7/+c8zatQoAObOndvj+lauXMm6det4+OGHAXj33XfZsmULI0aMYObMmUycOBGAqVOnsm3bNsaOHctRRx3FjBkzADjssMMAuOyyy/jOd77DokWLuPfee7nmmmsO7InogYPezA5YT0feA2306NGdtyOCG264ga985Std2tx+++3dXsI4bNgw2tvbAbpcyx4RfP/732fOnDld2jc2NnLIIYd0TtfW1tLa2kpElFzHqFGjOO+883jsscdYsmRJ52mi/uJz9GaWtDlz5nDvvffS3NwMwPbt29m5cydnnXUWjz76KC0tLezatYuf/vSnnY+ZNGkSL7zwAkDn0XvHsu6880727NkDwCuvvML777/f7bqPO+44duzYwapVq4DsjeLW1lYA5s+fz3XXXceMGTM6//voLz6iN7OknX/++WzatInTTz8dgEMPPZQf/vCHTJ8+nSuuuIKpU6fyiU98gjPPPLPzMddffz2XX345999/P+ecc07n/Pnz57Nt2zamT59ORDB+/HiWLl3a7bpHjBjBQw89xFe/+lVaWlqoq6vjiSee4NBDD+WUU07hsMMO44tfHIBxICNiUH4+9alPRcqeeuqpwS6hX6Xcv5T7FlG5/m3cuLEiy6m09957r0+Pu/HGG2PRokUVrqZ727dvjylTpkRbW1u3bUo9x8Dq6GXe+tSNmdkA+8EPfsCsWbO49dZbB+RrD33qxswMuOmmmwZsXVdffTVXX331gK3PR/Rm1mcRJb8e2iqgks+tg97M+mTkyJG89dZbDvt+EPl49CNHjqzI8nzqxsz6ZOLEiTQ1NfHGG28Mdild7N69u2IBOZg6vmGqEhz0ZtYnw4cP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\n",
---
> "image/png": "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\n",
+======= End of Comparison =======
+======= Comparing to correct_output/notebook_844815ed865e.ipynb =======
+456c456
+< "image/png": "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\n",
+---
+> "image/png": "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\n",
+510,512c510,511
+< "/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:6: DeprecationWarning: Calling Family(..) with a link class as argument is deprecated.\n",
+< "Use an instance of a link class instead.\n",
+< " \n"
+---
+> "/usr/lib/python3/dist-packages/statsmodels/compat/pandas.py:56: FutureWarning: The pandas.core.datetools module is deprecated and will be removed in a future version. Please use the pandas.tseries module instead.\n",
+> " from pandas.core import datetools\n"
+530c529
+< "
Link Function:
logit
Scale:
1.0000
\n",
+---
+> "
Link Function:
logit
Scale:
1.0
\n",
+533c532
+< "
Method:
IRLS
Log-Likelihood:
-2.5250
\n",
+---
+> "
Method:
IRLS
Log-Likelihood:
-3.6370
\n",
+536c535
+< "
Deviance
0.22231
\n",
+---
+> "
Deviance
3.3763
\n",
+542,545c541
+< "
No. Iterations:
4
\n",
+< "
\n",
+< "
\n",
+< "
Covariance Type:
nonrobust
\n",
+---
+> "
No. Iterations:
5
\n",
+568,570c564,566
+< "Link Function: logit Scale: 1.0000\n",
+< "Method: IRLS Log-Likelihood: -2.5250\n",
+< "Deviance 0.22231\n",
+---
+> "Link Function: logit Scale: 1.0\n",
+> "Method: IRLS Log-Likelihood: -3.6370\n",
+> "Deviance 3.3763\n",
+626c621
+< "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEKCAYAAAAcgp5RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAay0lEQVR4nO3dfZRU9Z3n8fenGwgNIoxIMgoayBzSrhsVMYDK6PYYBc2JT7tRJM6YuMMSd2Iy2T1ho+dkVjPRc3YO7hwzGSOyhnGMGR/GVdQcJqBuOs64PqABQSQ8rCHSkAQxo9DaKN393T/u7aa6upuuLqof6ufndU6frnvrd299v1Vdn7p969YtRQRmZpaumqEuwMzMBpaD3swscQ56M7PEOejNzBLnoDczS5yD3swscX0GvaQVkvZIerWX6yXpbyRtl7RB0szKl2lmZuUqZYv+HuDCw1x/ETA9/1kM3HnkZZmZWaX0GfQR8Qzwu8MMuRS4NzLPAxMkHVepAs3M7MiMqMA6JgM7C6ab8nm/Lh4oaTHZVj+jR48+48QTT6zAzQ9P7e3t1NSk+xaI+6teKfcG6fe3devWvRExqT/LVCLo1cO8Hs+rEBHLgeUA9fX1sWXLlgrc/PDU2NhIQ0PDUJcxYNxf9Uq5N0i/P0m/6u8ylXjZawJOKJieAuyuwHrNzKwCKhH0jwPX5EffnAm8ExHddtuYmdnQ6HPXjaT7gQbgWElNwE3ASICIWAasAj4LbAfeA64dqGLNzKz/+gz6iFjYx/UBfKViFZlZVTh48CBNTU0cOHBgqEvpYvz48WzevHmoyzhio0ePZsqUKYwcOfKI11WJN2PN7EOoqamJcePGMXXqVKSejskYGvv372fcuHFDXcYRiQjeeustmpqamDZt2hGvL91jkMxsQB04cICJEycOq5BPhSQmTpxYsf+WHPRmVjaH/MCp5H3roDczS5z30ZtZ1aqtreWUU07pnF65ciUTJ04cwoqGJwe9mVWturo61q9f32Xe/v37Oy+3trYyYoRjzrtuzCwpP/rRj7jiiiu4+OKLmTdvHgBLly5l1qxZnHrqqdx0002dY2+99Vbq6+s5//zzWbhwIbfddhsADQ0NvPTSSwDs3buXqVOnAtDW1saSJUs613XXXXcBh0678PnPf56TTjqJq6++muzIc1i7di1nn302p512GrNnz2b//v2cc845XV6g5s6dy4YNGwbsPvFLnZkdsW8/sYnXdu+r6DpPPv5obrr43x52TEtLCzNmzABg2rRpPProowA899xzbNiwgWOOOYY1a9awbds2XnzxRSKCSy65hGeeeYaxY8fywAMPsG7dOlpbW5k5cyZnnHHGYW/vBz/4AePHj2ft2rW8//77zJ07t/PFZN26dWzatInjjz+euXPn8uyzzzJ79mwWLFjAgw8+yKxZs9i3bx91dXUsWrSIe+65h9tvv52tW7fy/vvvc+qpp1bgXuuZg97MqlZPu24ALrjgAo455hgA1qxZw5o1azj99NMBaG5uZtu2bezfv5/LL7+cMWPGAHDJJZf0eXtr1qxhw4YNPPzwwwC88847bNu2jVGjRjF79mymTJkCwIwZM9ixYwfjx4/nuOOOY9asWQAcffTRAFxxxRV85zvfYenSpaxYsYIvfelLR3ZH9MFBb2ZHrK8t78E2duzYzssRwY033siXv/zlLmNuv/32Xg9hHDFiBO3t7QBdjmWPCL73ve8xf/78LuMbGxv5yEc+0jldW1tLa2srEdHjbYwZM4YLLriAxx57jIceeqhzN9FA8T56M0va/PnzWbFiBc3NzQDs2rWLPXv2cO655/Loo4/S0tLC/v37eeKJJzqXmTp1Ki+//DJA59Z7x7ruvPNODh48CMDWrVt59913e73tk046id27d7N27Voge6O4tbUVgEWLFvG1r32NWbNmdf73MVC8RW9mSZs3bx6bN2/mrLPOAuCoo47ivvvuY+bMmSxYsIAZM2bw8Y9/nHPOOadzmW984xtceeWV/PCHP+S8887rnL9o0SJ27NjBzJkziQgmTZrEypUre73tUaNG8eCDD/LVr36VlpYW6urqeOqppzjqqKM444wzOProo7n22kE4D2REDMnPJz/5yUjZT3/606EuYUC5v+pVqd5ee+21iqyn0vbt21fWcjfddFMsXbq0wtX0bteuXTF9+vRoa2vrdUxP9zHwUvQzb73rxsxskN17773MmTOHW2+9dVC+9tC7bszMgJtvvnnQbuuaa67hmmuuGbTb8xa9mZUtosevh7YKqOR966A3s7KMHj2at956y2E/ACI/H/3o0aMrsj7vujGzskyZMoWmpibefPPNoS6liwMHDlQsIIdSxzdMVYKD3szKMnLkyIp8+1Gl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\n",
+---
+> "image/png": "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\n",
+======= End of Comparison =======
+Test failed
#+end_example
-Aaah, cette fois-ci, forcément, la date a changé mais ça a l'air moins
-grave que tout à l'heure. Et si on regarde très attentivement on fini
-par remarquer que quelques lettres ont changé dans l'encodage des
-images. Elles sont donc a différentes mais pas sûr que ça soit visible
-à l'oeil nu.
-
-*** Conclusion
-Nous avons donc vu comment construire un environnement
-manuellement. Ce n'est pas très compliqué mais il faut être
-soigneux. Ici tout s'est passé sans encombre mais la première fois,
-j'avais oublié d'installer le noyau jupyter python3
-(=python3-ipykernel=) au moment de la réexécution de
-=notebook_docker.ipynb=, j'ai eu droit à un joli message d'erreur. Il
-faut alors relancer le conteneur en interactif, réinstaller ce qui
-manque, le figer de l'extérieur, etc.
-
-Mais pourquoi ne pas avoir téléchargé le notebook et les dans
-l'environnement? Et bien parce que ce n'est pas propre et qu'ils y
-seraient restés... Ce que je souhaite obtenir ici, c'est figer un
-environnemnet logiciel avec les bonnes dépendances pour pouvoir
-refaire mes calculs éventuellement sur de nouvelles données. C'est
-pour cela que je partage le répertoire contenant mon notebook et mon
-fichier csv.
-*** Update :noexport:
-
-Renaming the image to =debian_stable_jupyter_alpha=.
-#+begin_src shell :results output :exports both
-docker tag debian_stable_jupyter debian_stable_jupyter_alpha
-docker rmi debian_stable_jupyter
-#+end_src
-
-#+begin_src shell :session *shell* :results output :exports both
-docker run --volume=`pwd`:/tmp --name debian_mooc -t -i debian_stable_jupyter_alpha
-#+end_src
-
-#+RESULTS:
-
-#+begin_src shell :session *shell* :results output :exports both
-apt-get install -y python3-ipykernel
-#+end_src
-
-#+begin_src shell :results output :exports both
-docker ps
-#+end_src
-
-#+RESULTS:
-: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-: a2d6b6cd921c debian_stable_jupyter_alpha "bash" 4 minutes ago Up 4 minutes debian_mooc
-
-#+begin_src shell :results output :exports both
-docker diff a2d6b6cd921c | head -n 60
-#+end_src
-
-#+RESULTS:
-#+begin_example
-C /root
-D /root/.cache
-A /root/.cache/matplotlib
-A /root/.cache/matplotlib/fontlist-v300.json
-A /root/.cache/matplotlib/tex.cache
-D /root/.ipython
-A /root/.ipython/extensions
-A /root/.ipython/nbextensions
-A /root/.ipython/profile_default
-A /root/.ipython/profile_default/db
-A /root/.ipython/profile_default/history.sqlite
-A /root/.ipython/profile_default/log
-A /root/.ipython/profile_default/pid
-A /root/.ipython/profile_default/security
-A /root/.ipython/profile_default/startup
-A /root/.ipython/profile_default/startup/README
-C /usr/lib/python3/dist-packages
-C /usr/lib/python3/dist-packages/__pycache__
-A /usr/lib/python3/dist-packages/__pycache__/ipykernel_launcher.cpython-37.pyc
-D /usr/lib/python3/dist-packages/ipykernel
-A /usr/lib/python3/dist-packages/ipykernel/__init__.py
-A /usr/lib/python3/dist-packages/ipykernel/__main__.py
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/__init__.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/__main__.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/_eventloop_macos.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/_version.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/codeutil.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/connect.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/datapub.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/displayhook.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/embed.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/eventloops.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/heartbeat.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/iostream.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/ipkernel.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/jsonutil.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/kernelapp.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/kernelbase.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/kernelspec.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/log.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/parentpoller.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/pickleutil.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/serialize.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/__pycache__/zmqshell.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/_eventloop_macos.py
-A /usr/lib/python3/dist-packages/ipykernel/_version.py
-A /usr/lib/python3/dist-packages/ipykernel/codeutil.py
-A /usr/lib/python3/dist-packages/ipykernel/comm
-A /usr/lib/python3/dist-packages/ipykernel/comm/__init__.py
-A /usr/lib/python3/dist-packages/ipykernel/comm/__pycache__
-A /usr/lib/python3/dist-packages/ipykernel/comm/__pycache__/__init__.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/comm/__pycache__/comm.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/comm/__pycache__/manager.cpython-37.pyc
-A /usr/lib/python3/dist-packages/ipykernel/comm/comm.py
-A /usr/lib/python3/dist-packages/ipykernel/comm/manager.py
-A /usr/lib/python3/dist-packages/ipykernel/connect.py
-A /usr/lib/python3/dist-packages/ipykernel/datapub.py
-A /usr/lib/python3/dist-packages/ipykernel/displayhook.py
-A /usr/lib/python3/dist-packages/ipykernel/embed.py
-#+end_example
-
-#+begin_src shell :results output :exports both
-docker commit debian_mooc debian_stable_jupyter
-#+end_src
-
-#+RESULTS:
-: sha256:2b001b2c02a66a7bf2ab2e7e3d234f3611bc7e6228e2f423ceb7d294cb6bd442
-
-** Automatiser la construction d'un environnement et le partager.
-Vous remarquerez que dans tout ce qui a précédé, j'ai noté dans mon
-journal de ce que j'ai effectué mais vous n'avez aucune garantie que
-je n'ai rien oublié. De plus, si vous voulez refaire cet environnement
-vous même, il vous faudra suivre ces instructions scrupuleusement en
-espérant que rien n'aille de travers.
-
-Je vais donc maintenant introduire alors la notion de dockerfile qui
-va réaliser la préparation de l'environnement automatiquement à l'aide
-de la commande =docker build= puis je montrerais comment le rendre
-public à l'aide de la commande =docker push=. Vous allez voir que c'est
-bien plus simple que tout ce que je vous ai montré précedémment
-puisque tout est caché!
-
-*** Automatiser la construction de son environnement
-Je commence par créer un répertoire dans lequel sera stoqué un
-=[[file:mooc_docker_image/Dockerfile][Dockerfile]]=.
-
-#+begin_src shell :results output :exports both
-mkdir -p mooc_docker_image
-#+end_src
-
-#+RESULTS:
-
-Et dont voici le contenu. Vous voyez qu'il part d'une image
-=debian:stable=, la met à jour et installe les différents
-#+begin_src shell :results output :exports both :tangle mooc_docker_image/Dockerfile
-FROM debian:stable
-
-LABEL maintainer="Arnaud Legrand "
-
-RUN apt-get update \
- && apt-get install -y python3 \
- jupyter-nbconvert python3-ipykernel \
- python3-matplotlib python3-pandas python3-numpy python3-statsmodels
-#+end_src
-
-#+begin_src shell :results output :exports both
-docker build mooc_docker_image
-#+end_src
-
-#+RESULTS:
-#+begin_example
-Sending build context to Docker daemon 2.048kB
-Step 1/3 : FROM debian:stable
- ---> 40e13c3c9aab
-Step 2/3 : LABEL maintainer "Arnaud Legrand "
- ---> Running in 8a9a34c45d09
- ---> 0ab85d4f10f5
-Removing intermediate container 8a9a34c45d09
-Step 3/3 : RUN apt-get update && apt-get install -y python3 jupyter-nbconvert python3-ipykernel python3-matplotlib python3-pandas python3-numpy python3-statsmodels
- ---> Running in e2a4b2e6b46b
-Get:1 http://cdn-fastly.deb.debian.org/debian stable InRelease [118 kB]
-Get:2 http://security-cdn.debian.org/debian-security stable/updates InRelease [39.1 kB]
-Get:3 http://cdn-fastly.deb.debian.org/debian stable-updates InRelease [46.8 kB]
-Get:4 http://security-cdn.debian.org/debian-security stable/updates/main amd64 Packages [49.4 kB]
-Get:5 http://cdn-fastly.deb.debian.org/debian stable/main amd64 Packages [7897 kB]
-Fetched 8150 kB in 9s (870 kB/s)
-Reading package lists...
-Reading package lists...
-Building dependency tree...
-Reading state information...
-The following additional packages will be installed:
- binutils binutils-common binutils-x86-64-linux-gnu blt build-essential bzip2
- ca-certificates cpp cpp-8 dbus dh-python dirmngr dpkg-dev fakeroot file
- fontconfig-config fonts-lyx g++ g++-8 gcc gcc-8 gir1.2-glib-2.0 gnupg
- gnupg-l10n gnupg-utils gpg gpg-agent gpg-wks-client gpg-wks-server gpgconf
- gpgsm javascript-common krb5-locales libaec0 libalgorithm-diff-perl
- libalgorithm-diff-xs-perl libalgorithm-merge-perl libamd2 libapparmor1
- libasan5 libassuan0 libatomic1 libbinutils libblas3 libblosc1 libbsd0
- libc-dev-bin libc6-dev libcamd2 libcc1-0 libccolamd2 libcholmod3 libcolamd2
- libdbus-1-3 libdpkg-perl libdsdp-5.8gf libexpat1 libexpat1-dev libfakeroot
- libfftw3-double3 libfile-fcntllock-perl libfontconfig1 libfreetype6
- libgcc-8-dev libgdbm-compat4 libgdbm6 libgfortran5 libgirepository-1.0-1
- libglib2.0-0 libglib2.0-data libglpk40 libgomp1 libgpm2 libgsl23
- libgslcblas0 libgssapi-krb5-2 libhdf5-103 libicu63 libimagequant0 libisl19
- libitm1 libjbig0 libjpeg62-turbo libjs-jquery libjs-jquery-ui libk5crypto3
- libkeyutils1 libkrb5-3 libkrb5support0 libksba8 liblapack3 liblcms2-2
- libldap-2.4-2 libldap-common liblocale-gettext-perl liblsan0 libltdl7
- liblua5.1-0 liblzo2-2 libmagic-mgc libmagic1 libmetis5 libmpc3 libmpdec2
- libmpfr6 libmpx2 libncurses6 libnorm1 libnpth0 libperl5.28 libpgm-5.2-0
- libpng16-16 libprocps7 libpython3-dev libpython3-stdlib libpython3.7
- libpython3.7-dev libpython3.7-minimal libpython3.7-stdlib libquadmath0
- libreadline7 libsasl2-2 libsasl2-modules libsasl2-modules-db libsnappy1v5
- libsodium23 libsqlite3-0 libssl1.1 libstdc++-8-dev libsuitesparseconfig5
- libsz2 libtcl8.6 libtiff5 libtk8.6 libtsan0 libubsan1 libumfpack5 libwebp6
- libwebpdemux2 libwebpmux3 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6
- libxext6 libxft2 libxml2 libxrender1 libxslt1.1 libxss1 libyaml-0-2 libzmq5
- linux-libc-dev lsb-base make manpages manpages-dev mime-support netbase
- openssl pandoc pandoc-data patch perl perl-modules-5.28 pinentry-curses
- procps psmisc python-matplotlib-data python-pip-whl python-tables-data
- python3-asn1crypto python3-atomicwrites python3-attr python3-bleach
- python3-bs4 python3-cffi-backend python3-chardet python3-crypto
- python3-cryptography python3-cvxopt python3-cycler python3-dateutil
- python3-dbus python3-decorator python3-defusedxml python3-dev
- python3-distutils python3-entrypoints python3-gi python3-html5lib
- python3-ipython python3-ipython-genutils python3-jinja2 python3-joblib
- python3-jsonschema python3-jupyter-client python3-jupyter-core
- python3-keyring python3-keyrings.alt python3-kiwisolver python3-lib2to3
- python3-lxml python3-markupsafe python3-minimal python3-mistune
- python3-more-itertools python3-nbconvert python3-nbformat python3-numexpr
- python3-olefile python3-pandas-lib python3-pandocfilters python3-patsy
- python3-pexpect python3-pickleshare python3-pil python3-pip
- python3-pkg-resources python3-pluggy python3-prompt-toolkit python3-psutil
- python3-ptyprocess python3-py python3-pygments python3-pyparsing
- python3-pytest python3-scipy python3-secretstorage python3-setuptools
- python3-simplegeneric python3-simplejson python3-six python3-soupsieve
- python3-statsmodels-lib python3-tables python3-tables-lib python3-testpath
- python3-tk python3-tornado python3-traitlets python3-tz python3-wcwidth
- python3-webencodings python3-wheel python3-xdg python3-zmq python3.7
- python3.7-dev python3.7-minimal readline-common sensible-utils
- shared-mime-info tk8.6-blt2.5 ttf-bitstream-vera ucf x11-common
- xdg-user-dirs xz-utils
-Suggested packages:
- binutils-doc blt-demo bzip2-doc cpp-doc gcc-8-locales
- default-dbus-session-bus | dbus-session-bus dbus-user-session libpam-systemd
- pinentry-gnome3 tor debian-keyring g++-multilib g++-8-multilib gcc-8-doc
- libstdc++6-8-dbg gcc-multilib autoconf automake libtool flex bison gdb
- gcc-doc gcc-8-multilib libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg
- libasan5-dbg liblsan0-dbg libtsan0-dbg libubsan1-dbg libmpx2-dbg
- libquadmath0-dbg parcimonie xloadimage scdaemon apache2 | lighttpd | httpd
- glibc-doc git bzr libfftw3-bin libfftw3-dev gdbm-l10n libiodbc2-dev
- default-libmysqlclient-dev gpm gsl-ref-psdoc | gsl-doc-pdf | gsl-doc-info
- | gsl-ref-html krb5-doc krb5-user libjs-jquery-ui-docs liblcms2-utils
- libsasl2-modules-gssapi-mit | libsasl2-modules-gssapi-heimdal
- libsasl2-modules-ldap libsasl2-modules-otp libsasl2-modules-sql
- libstdc++-8-doc tcl8.6 tk8.6 make-doc man-browser texlive-latex-recommended
- texlive-xetex texlive-luatex pandoc-citeproc texlive-latex-extra context
- wkhtmltopdf librsvg2-bin groff ghc nodejs php python ruby r-base-core
- libjs-mathjax node-katex ed diffutils-doc perl-doc libterm-readline-gnu-perl
- | libterm-readline-perl-perl libb-debug-perl liblocale-codes-perl
- pinentry-doc python3-doc python3-venv python-attr-doc python-bleach-doc
- python-crypto-doc python-cryptography-doc python3-cryptography-vectors
- python-cvxopt-doc python-cycler-doc python-dbus-doc python3-dbus-dbg
- python3-genshi python-jinja2-doc python-jsonschema-doc gnome-keyring
- libkf5wallet-bin gir1.2-gnomekeyring-1.0 python3-lxml-dbg python-lxml-doc
- dvipng ffmpeg gir1.2-gtk-3.0 ghostscript inkscape ipython3 librsvg2-common
- python-matplotlib-doc python3-cairocffi python3-gi-cairo python3-gobject
- python3-nose python3-pyqt4 python3-sip texlive-extra-utils ttf-staypuft
- python-nbconvert-doc gfortran python-numpy-doc python3-numpy-dbg
- python-pandas-doc python-patsy-doc python-pexpect-doc python-pil-doc
- python3-pil-dbg python-psutil-doc subversion python-pygments-doc
- python-pyparsing-doc python-scipy-doc python-secretstorage-doc
- python-setuptools-doc python-statsmodels-doc python-tables-doc
- python3-netcdf4 vitables tix python3-tk-dbg python3-pycurl
- python-tornado-doc python3-twisted python3.7-venv python3.7-doc
- binfmt-support readline-doc
-The following NEW packages will be installed:
- binutils binutils-common binutils-x86-64-linux-gnu blt build-essential bzip2
- ca-certificates cpp cpp-8 dbus dh-python dirmngr dpkg-dev fakeroot file
- fontconfig-config fonts-lyx g++ g++-8 gcc gcc-8 gir1.2-glib-2.0 gnupg
- gnupg-l10n gnupg-utils gpg gpg-agent gpg-wks-client gpg-wks-server gpgconf
- gpgsm javascript-common jupyter-nbconvert krb5-locales libaec0
- libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl
- libamd2 libapparmor1 libasan5 libassuan0 libatomic1 libbinutils libblas3
- libblosc1 libbsd0 libc-dev-bin libc6-dev libcamd2 libcc1-0 libccolamd2
- libcholmod3 libcolamd2 libdbus-1-3 libdpkg-perl libdsdp-5.8gf libexpat1
- libexpat1-dev libfakeroot libfftw3-double3 libfile-fcntllock-perl
- libfontconfig1 libfreetype6 libgcc-8-dev libgdbm-compat4 libgdbm6
- libgfortran5 libgirepository-1.0-1 libglib2.0-0 libglib2.0-data libglpk40
- libgomp1 libgpm2 libgsl23 libgslcblas0 libgssapi-krb5-2 libhdf5-103 libicu63
- libimagequant0 libisl19 libitm1 libjbig0 libjpeg62-turbo libjs-jquery
- libjs-jquery-ui libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libksba8
- liblapack3 liblcms2-2 libldap-2.4-2 libldap-common liblocale-gettext-perl
- liblsan0 libltdl7 liblua5.1-0 liblzo2-2 libmagic-mgc libmagic1 libmetis5
- libmpc3 libmpdec2 libmpfr6 libmpx2 libncurses6 libnorm1 libnpth0 libperl5.28
- libpgm-5.2-0 libpng16-16 libprocps7 libpython3-dev libpython3-stdlib
- libpython3.7 libpython3.7-dev libpython3.7-minimal libpython3.7-stdlib
- libquadmath0 libreadline7 libsasl2-2 libsasl2-modules libsasl2-modules-db
- libsnappy1v5 libsodium23 libsqlite3-0 libssl1.1 libstdc++-8-dev
- libsuitesparseconfig5 libsz2 libtcl8.6 libtiff5 libtk8.6 libtsan0 libubsan1
- libumfpack5 libwebp6 libwebpdemux2 libwebpmux3 libx11-6 libx11-data libxau6
- libxcb1 libxdmcp6 libxext6 libxft2 libxml2 libxrender1 libxslt1.1 libxss1
- libyaml-0-2 libzmq5 linux-libc-dev lsb-base make manpages manpages-dev
- mime-support netbase openssl pandoc pandoc-data patch perl perl-modules-5.28
- pinentry-curses procps psmisc python-matplotlib-data python-pip-whl
- python-tables-data python3 python3-asn1crypto python3-atomicwrites
- python3-attr python3-bleach python3-bs4 python3-cffi-backend python3-chardet
- python3-crypto python3-cryptography python3-cvxopt python3-cycler
- python3-dateutil python3-dbus python3-decorator python3-defusedxml
- python3-dev python3-distutils python3-entrypoints python3-gi
- python3-html5lib python3-ipykernel python3-ipython python3-ipython-genutils
- python3-jinja2 python3-joblib python3-jsonschema python3-jupyter-client
- python3-jupyter-core python3-keyring python3-keyrings.alt python3-kiwisolver
- python3-lib2to3 python3-lxml python3-markupsafe python3-matplotlib
- python3-minimal python3-mistune python3-more-itertools python3-nbconvert
- python3-nbformat python3-numexpr python3-numpy python3-olefile
- python3-pandas python3-pandas-lib python3-pandocfilters python3-patsy
- python3-pexpect python3-pickleshare python3-pil python3-pip
- python3-pkg-resources python3-pluggy python3-prompt-toolkit python3-psutil
- python3-ptyprocess python3-py python3-pygments python3-pyparsing
- python3-pytest python3-scipy python3-secretstorage python3-setuptools
- python3-simplegeneric python3-simplejson python3-six python3-soupsieve
- python3-statsmodels python3-statsmodels-lib python3-tables
- python3-tables-lib python3-testpath python3-tk python3-tornado
- python3-traitlets python3-tz python3-wcwidth python3-webencodings
- python3-wheel python3-xdg python3-zmq python3.7 python3.7-dev
- python3.7-minimal readline-common sensible-utils shared-mime-info
- tk8.6-blt2.5 ttf-bitstream-vera ucf x11-common xdg-user-dirs xz-utils
-0 upgraded, 267 newly installed, 0 to remove and 0 not upgraded.
-Need to get 212 MB of archives.
-After this operation, 779 MB of additional disk space will be used.
-Get:1 http://cdn-fastly.deb.debian.org/debian stable/main amd64 perl-modules-5.28 all 5.28.1-6 [2873 kB]
-Get:2 http://security-cdn.debian.org/debian-security stable/updates/main amd64 linux-libc-dev amd64 4.19.37-5+deb10u1 [1185 kB]
-Get:12 http://security-cdn.debian.org/debian-security stable/updates/main amd64 libzmq5 amd64 4.3.1-4+deb10u1 [246 kB]
-Get:3 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libgdbm6 amd64 1.18.1-4 [64.7 kB]
-Get:4 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libgdbm-compat4 amd64 1.18.1-4 [44.1 kB]
-Get:5 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libperl5.28 amd64 5.28.1-6 [3883 kB]
-Get:6 http://cdn-fastly.deb.debian.org/debian stable/main amd64 perl amd64 5.28.1-6 [204 kB]
-Get:7 http://cdn-fastly.deb.debian.org/debian stable/main amd64 liblocale-gettext-perl amd64 1.07-3+b4 [18.9 kB]
-Get:8 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libssl1.1 amd64 1.1.1c-1 [1535 kB]
-Get:9 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libpython3.7-minimal amd64 3.7.3-2 [588 kB]
-Get:10 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libexpat1 amd64 2.2.6-2 [106 kB]
-Get:11 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3.7-minimal amd64 3.7.3-2 [1736 kB]
-Get:13 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-minimal amd64 3.7.3-1 [36.6 kB]
-Get:14 http://cdn-fastly.deb.debian.org/debian stable/main amd64 mime-support all 3.62 [37.2 kB]
-Get:15 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libmpdec2 amd64 2.4.2-2 [87.2 kB]
-Get:16 http://cdn-fastly.deb.debian.org/debian stable/main amd64 readline-common all 7.0-5 [70.6 kB]
-Get:17 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libreadline7 amd64 7.0-5 [151 kB]
-Get:18 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libsqlite3-0 amd64 3.27.2-3 [641 kB]
-Get:19 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libpython3.7-stdlib amd64 3.7.3-2 [1732 kB]
-Get:20 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3.7 amd64 3.7.3-2 [330 kB]
-Get:21 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libpython3-stdlib amd64 3.7.3-1 [20.0 kB]
-Get:22 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3 amd64 3.7.3-1 [61.5 kB]
-Get:23 http://cdn-fastly.deb.debian.org/debian stable/main amd64 netbase all 5.6 [19.4 kB]
-Get:24 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libncurses6 amd64 6.1+20181013-2 [102 kB]
-Get:25 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libprocps7 amd64 2:3.3.15-2 [61.7 kB]
-Get:26 http://cdn-fastly.deb.debian.org/debian stable/main amd64 lsb-base all 10.2019051400 [28.4 kB]
-Get:27 http://cdn-fastly.deb.debian.org/debian stable/main amd64 procps amd64 2:3.3.15-2 [259 kB]
-Get:28 http://cdn-fastly.deb.debian.org/debian stable/main amd64 sensible-utils all 0.0.12 [15.8 kB]
-Get:29 http://cdn-fastly.deb.debian.org/debian stable/main amd64 bzip2 amd64 1.0.6-9.1 [48.3 kB]
-Get:30 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libapparmor1 amd64 2.13.2-10 [94.7 kB]
-Get:31 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libdbus-1-3 amd64 1.12.16-1 [214 kB]
-Get:32 http://cdn-fastly.deb.debian.org/debian stable/main amd64 dbus amd64 1.12.16-1 [235 kB]
-Get:33 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libmagic-mgc amd64 1:5.35-4 [242 kB]
-Get:34 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libmagic1 amd64 1:5.35-4 [117 kB]
-Get:35 http://cdn-fastly.deb.debian.org/debian stable/main amd64 file amd64 1:5.35-4 [66.3 kB]
-Get:36 http://cdn-fastly.deb.debian.org/debian stable/main amd64 krb5-locales all 1.17-3 [95.4 kB]
-Get:37 http://cdn-fastly.deb.debian.org/debian stable/main amd64 manpages all 4.16-2 [1295 kB]
-Get:38 http://cdn-fastly.deb.debian.org/debian stable/main amd64 ucf all 3.0038+nmu1 [69.0 kB]
-Get:39 http://cdn-fastly.deb.debian.org/debian stable/main amd64 xz-utils amd64 5.2.4-1 [183 kB]
-Get:40 http://cdn-fastly.deb.debian.org/debian stable/main amd64 binutils-common amd64 2.31.1-16 [2073 kB]
-Get:41 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libbinutils amd64 2.31.1-16 [478 kB]
-Get:42 http://cdn-fastly.deb.debian.org/debian stable/main amd64 binutils-x86-64-linux-gnu amd64 2.31.1-16 [1823 kB]
-Get:43 http://cdn-fastly.deb.debian.org/debian stable/main amd64 binutils amd64 2.31.1-16 [56.8 kB]
-Get:44 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libtcl8.6 amd64 8.6.9+dfsg-2 [1005 kB]
-Get:45 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libpng16-16 amd64 1.6.36-6 [292 kB]
-Get:46 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libfreetype6 amd64 2.9.1-3 [379 kB]
-Get:47 http://cdn-fastly.deb.debian.org/debian stable/main amd64 ttf-bitstream-vera all 1.10-8 [352 kB]
-Get:48 http://cdn-fastly.deb.debian.org/debian stable/main amd64 fontconfig-config all 2.13.1-2 [280 kB]
-Get:49 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libfontconfig1 amd64 2.13.1-2 [346 kB]
-Get:50 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libxau6 amd64 1:1.0.8-1+b2 [19.9 kB]
-Get:51 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libbsd0 amd64 0.9.1-2 [99.5 kB]
-Get:52 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libxdmcp6 amd64 1:1.1.2-3 [26.3 kB]
-Get:53 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libxcb1 amd64 1.13.1-2 [137 kB]
-Get:54 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libx11-data all 2:1.6.7-1 [298 kB]
-Get:55 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libx11-6 amd64 2:1.6.7-1 [754 kB]
-Get:56 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libxext6 amd64 2:1.3.3-1+b2 [52.5 kB]
-Get:57 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libxrender1 amd64 1:0.9.10-1 [33.0 kB]
-Get:58 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libxft2 amd64 2.3.2-2 [57.2 kB]
-Get:59 http://cdn-fastly.deb.debian.org/debian stable/main amd64 x11-common all 1:7.7+19 [251 kB]
-Get:60 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libxss1 amd64 1:1.2.3-1 [17.8 kB]
-Get:61 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libtk8.6 amd64 8.6.9-2 [768 kB]
-Get:62 http://cdn-fastly.deb.debian.org/debian stable/main amd64 tk8.6-blt2.5 amd64 2.5.3+dfsg-4 [587 kB]
-Get:63 http://cdn-fastly.deb.debian.org/debian stable/main amd64 blt amd64 2.5.3+dfsg-4 [14.8 kB]
-Get:64 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libc-dev-bin amd64 2.28-10 [275 kB]
-Get:65 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libc6-dev amd64 2.28-10 [2691 kB]
-Get:66 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libisl19 amd64 0.20-2 [587 kB]
-Get:67 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libmpfr6 amd64 4.0.2-1 [775 kB]
-Get:68 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libmpc3 amd64 1.1.0-1 [41.3 kB]
-Get:69 http://cdn-fastly.deb.debian.org/debian stable/main amd64 cpp-8 amd64 8.3.0-6 [8914 kB]
-Get:70 http://cdn-fastly.deb.debian.org/debian stable/main amd64 cpp amd64 4:8.3.0-1 [19.4 kB]
-Get:71 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libcc1-0 amd64 8.3.0-6 [46.6 kB]
-Get:72 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libgomp1 amd64 8.3.0-6 [75.8 kB]
-Get:73 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libitm1 amd64 8.3.0-6 [27.7 kB]
-Get:74 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libatomic1 amd64 8.3.0-6 [9032 B]
-Get:75 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libasan5 amd64 8.3.0-6 [362 kB]
-Get:76 http://cdn-fastly.deb.debian.org/debian stable/main amd64 liblsan0 amd64 8.3.0-6 [131 kB]
-Get:77 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libtsan0 amd64 8.3.0-6 [283 kB]
-Get:78 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libubsan1 amd64 8.3.0-6 [120 kB]
-Get:79 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libmpx2 amd64 8.3.0-6 [11.4 kB]
-Get:80 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libquadmath0 amd64 8.3.0-6 [133 kB]
-Get:81 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libgcc-8-dev amd64 8.3.0-6 [2298 kB]
-Get:82 http://cdn-fastly.deb.debian.org/debian stable/main amd64 gcc-8 amd64 8.3.0-6 [9452 kB]
-Get:83 http://cdn-fastly.deb.debian.org/debian stable/main amd64 gcc amd64 4:8.3.0-1 [5196 B]
-Get:84 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libstdc++-8-dev amd64 8.3.0-6 [1532 kB]
-Get:85 http://cdn-fastly.deb.debian.org/debian stable/main amd64 g++-8 amd64 8.3.0-6 [9752 kB]
-Get:86 http://cdn-fastly.deb.debian.org/debian stable/main amd64 g++ amd64 4:8.3.0-1 [1644 B]
-Get:87 http://cdn-fastly.deb.debian.org/debian stable/main amd64 make amd64 4.2.1-1.2 [341 kB]
-Get:88 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libdpkg-perl all 1.19.7 [1414 kB]
-Get:89 http://cdn-fastly.deb.debian.org/debian stable/main amd64 patch amd64 2.7.6-3 [126 kB]
-Get:90 http://cdn-fastly.deb.debian.org/debian stable/main amd64 dpkg-dev all 1.19.7 [1773 kB]
-Get:91 http://cdn-fastly.deb.debian.org/debian stable/main amd64 build-essential amd64 12.6 [7576 B]
-Get:92 http://cdn-fastly.deb.debian.org/debian stable/main amd64 openssl amd64 1.1.1c-1 [842 kB]
-Get:93 http://cdn-fastly.deb.debian.org/debian stable/main amd64 ca-certificates all 20190110 [157 kB]
-Get:94 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-lib2to3 all 3.7.3-1 [76.7 kB]
-Get:95 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-distutils all 3.7.3-1 [142 kB]
-Get:96 http://cdn-fastly.deb.debian.org/debian stable/main amd64 dh-python all 3.20190308 [99.3 kB]
-Get:97 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libassuan0 amd64 2.5.2-1 [49.4 kB]
-Get:98 http://cdn-fastly.deb.debian.org/debian stable/main amd64 gpgconf amd64 2.2.12-1 [509 kB]
-Get:99 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libksba8 amd64 1.3.5-2 [99.7 kB]
-Get:100 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libsasl2-modules-db amd64 2.1.27+dfsg-1 [69.0 kB]
-Get:101 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libsasl2-2 amd64 2.1.27+dfsg-1 [106 kB]
-Get:102 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libldap-common all 2.4.47+dfsg-3 [89.4 kB]
-Get:103 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libldap-2.4-2 amd64 2.4.47+dfsg-3 [224 kB]
-Get:104 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libnpth0 amd64 1.6-1 [18.4 kB]
-Get:105 http://cdn-fastly.deb.debian.org/debian stable/main amd64 dirmngr amd64 2.2.12-1 [711 kB]
-Get:106 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libfakeroot amd64 1.23-1 [45.9 kB]
-Get:107 http://cdn-fastly.deb.debian.org/debian stable/main amd64 fakeroot amd64 1.23-1 [85.8 kB]
-Get:108 http://cdn-fastly.deb.debian.org/debian stable/main amd64 fonts-lyx all 2.3.2-1 [199 kB]
-Get:109 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libglib2.0-0 amd64 2.58.3-2 [1259 kB]
-Get:110 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libgirepository-1.0-1 amd64 1.58.3-2 [92.8 kB]
-Get:111 http://cdn-fastly.deb.debian.org/debian stable/main amd64 gir1.2-glib-2.0 amd64 1.58.3-2 [143 kB]
-Get:112 http://cdn-fastly.deb.debian.org/debian stable/main amd64 gnupg-l10n all 2.2.12-1 [1008 kB]
-Get:113 http://cdn-fastly.deb.debian.org/debian stable/main amd64 gnupg-utils amd64 2.2.12-1 [857 kB]
-Get:114 http://cdn-fastly.deb.debian.org/debian stable/main amd64 gpg amd64 2.2.12-1 [862 kB]
-Get:115 http://cdn-fastly.deb.debian.org/debian stable/main amd64 pinentry-curses amd64 1.1.0-2 [64.5 kB]
-Get:116 http://cdn-fastly.deb.debian.org/debian stable/main amd64 gpg-agent amd64 2.2.12-1 [617 kB]
-Get:117 http://cdn-fastly.deb.debian.org/debian stable/main amd64 gpg-wks-client amd64 2.2.12-1 [484 kB]
-Get:118 http://cdn-fastly.deb.debian.org/debian stable/main amd64 gpg-wks-server amd64 2.2.12-1 [477 kB]
-Get:119 http://cdn-fastly.deb.debian.org/debian stable/main amd64 gpgsm amd64 2.2.12-1 [602 kB]
-Get:120 http://cdn-fastly.deb.debian.org/debian stable/main amd64 gnupg all 2.2.12-1 [715 kB]
-Get:121 http://cdn-fastly.deb.debian.org/debian stable/main amd64 javascript-common all 11 [6120 B]
-Get:122 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-entrypoints all 0.3-1 [5508 B]
-Get:123 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-decorator all 4.3.0-1.1 [14.5 kB]
-Get:124 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-ptyprocess all 0.6.0-1 [13.2 kB]
-Get:125 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-pexpect all 4.6.0-1 [52.4 kB]
-Get:126 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-pickleshare all 0.7.5-1 [7348 B]
-Get:127 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-pkg-resources all 40.8.0-1 [153 kB]
-Get:128 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-six all 1.12.0-1 [15.7 kB]
-Get:129 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-wcwidth all 0.1.7+dfsg1-3 [15.0 kB]
-Get:130 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-prompt-toolkit all 1.0.15-1 [179 kB]
-Get:131 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-pygments all 2.3.1+dfsg-1 [594 kB]
-Get:132 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-simplegeneric all 0.8.1-2 [11.1 kB]
-Get:133 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-ipython-genutils all 0.2.0-1 [20.9 kB]
-Get:134 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-traitlets all 4.3.2-1 [60.7 kB]
-Get:135 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-ipython all 5.8.0-1 [390 kB]
-Get:136 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-dateutil all 2.7.3-3 [64.5 kB]
-Get:137 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-jupyter-core all 4.4.0-2 [38.5 kB]
-Get:138 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-tornado amd64 5.1.1-4 [354 kB]
-Get:139 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libkeyutils1 amd64 1.6-6 [15.0 kB]
-Get:140 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libkrb5support0 amd64 1.17-3 [65.6 kB]
-Get:141 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libk5crypto3 amd64 1.17-3 [121 kB]
-Get:142 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libkrb5-3 amd64 1.17-3 [370 kB]
-Get:143 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libgssapi-krb5-2 amd64 1.17-3 [158 kB]
-Get:144 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libnorm1 amd64 1.5.8+dfsg2-1 [287 kB]
-Get:145 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libpgm-5.2-0 amd64 5.2.122~dfsg-3 [158 kB]
-Get:146 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libsodium23 amd64 1.0.17-1 [158 kB]
-Get:147 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-zmq amd64 17.1.2-2 [268 kB]
-Get:148 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-jupyter-client all 5.2.3-1 [63.7 kB]
-Get:149 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-testpath all 0.4.2+dfsg-1 [8796 B]
-Get:150 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-webencodings all 0.5.1-1 [10.9 kB]
-Get:151 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-html5lib all 1.0.1-1 [89.5 kB]
-Get:152 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-bleach all 3.1.0-1 [113 kB]
-Get:153 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-defusedxml all 0.5.0-2 [20.1 kB]
-Get:154 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-markupsafe amd64 1.1.0-1 [14.8 kB]
-Get:155 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-jinja2 all 2.10-2 [106 kB]
-Get:156 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-mistune all 0.8.4-1 [16.1 kB]
-Get:157 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-jsonschema all 2.6.0-4 [33.5 kB]
-Get:158 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-nbformat all 4.4.0-1 [30.1 kB]
-Get:159 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-pandocfilters all 1.4.2-1 [18.7 kB]
-Get:160 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-nbconvert all 5.4-2 [103 kB]
-Get:161 http://cdn-fastly.deb.debian.org/debian stable/main amd64 jupyter-nbconvert all 5.4-2 [12.6 kB]
-Get:162 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libaec0 amd64 1.0.2-1 [20.1 kB]
-Get:163 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libalgorithm-diff-perl all 1.19.03-2 [47.9 kB]
-Get:164 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libalgorithm-diff-xs-perl amd64 0.04-5+b1 [11.8 kB]
-Get:165 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libalgorithm-merge-perl all 0.08-3 [12.7 kB]
-Get:166 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libsuitesparseconfig5 amd64 1:5.4.0+dfsg-1 [20.9 kB]
-Get:167 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libamd2 amd64 1:5.4.0+dfsg-1 [33.4 kB]
-Get:168 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libgfortran5 amd64 8.3.0-6 [581 kB]
-Get:169 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libblas3 amd64 3.8.0-2 [148 kB]
-Get:170 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libsnappy1v5 amd64 1.1.7-1 [17.0 kB]
-Get:171 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libblosc1 amd64 1.15.1+ds1-1 [44.9 kB]
-Get:172 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libcamd2 amd64 1:5.4.0+dfsg-1 [35.0 kB]
-Get:173 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libccolamd2 amd64 1:5.4.0+dfsg-1 [36.4 kB]
-Get:174 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libcolamd2 amd64 1:5.4.0+dfsg-1 [30.3 kB]
-Get:175 http://cdn-fastly.deb.debian.org/debian stable/main amd64 liblapack3 amd64 3.8.0-2 [2110 kB]
-Get:176 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libmetis5 amd64 5.1.0.dfsg-5+b2 [175 kB]
-Get:177 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libcholmod3 amd64 1:5.4.0+dfsg-1 [324 kB]
-Get:178 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libdsdp-5.8gf amd64 5.8-9.4 [189 kB]
-Get:179 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libexpat1-dev amd64 2.2.6-2 [152 kB]
-Get:180 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libfftw3-double3 amd64 3.3.8-2 [733 kB]
-Get:181 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libfile-fcntllock-perl amd64 0.22-3+b5 [35.4 kB]
-Get:182 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libglib2.0-data all 2.58.3-2 [1109 kB]
-Get:183 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libltdl7 amd64 2.4.6-9 [390 kB]
-Get:184 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libglpk40 amd64 4.65-2 [418 kB]
-Get:185 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libgpm2 amd64 1.20.7-5 [35.1 kB]
-Get:186 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libgslcblas0 amd64 2.5+dfsg-6 [101 kB]
-Get:187 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libgsl23 amd64 2.5+dfsg-6 [880 kB]
-Get:188 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libsz2 amd64 1.0.2-1 [6676 B]
-Get:189 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libhdf5-103 amd64 1.10.4+repack-10 [1325 kB]
-Get:190 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libicu63 amd64 63.1-6 [8292 kB]
-Get:191 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libimagequant0 amd64 2.12.2-1.1 [32.5 kB]
-Get:192 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libjbig0 amd64 2.1-3.1+b2 [31.0 kB]
-Get:193 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libjpeg62-turbo amd64 1:1.5.2-2+b1 [134 kB]
-Get:194 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libjs-jquery all 3.3.1~dfsg-3 [332 kB]
-Get:195 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libjs-jquery-ui all 1.12.1+dfsg-5 [232 kB]
-Get:196 http://cdn-fastly.deb.debian.org/debian stable/main amd64 liblcms2-2 amd64 2.9-3 [145 kB]
-Get:197 http://cdn-fastly.deb.debian.org/debian stable/main amd64 liblua5.1-0 amd64 5.1.5-8.1+b2 [111 kB]
-Get:198 http://cdn-fastly.deb.debian.org/debian stable/main amd64 liblzo2-2 amd64 2.10-0.1 [56.1 kB]
-Get:199 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libpython3.7 amd64 3.7.3-2 [1498 kB]
-Get:200 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libpython3.7-dev amd64 3.7.3-2 [48.4 MB]
-Get:201 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libpython3-dev amd64 3.7.3-1 [20.1 kB]
-Get:202 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libsasl2-modules amd64 2.1.27+dfsg-1 [104 kB]
-Get:203 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libwebp6 amd64 0.6.1-2 [263 kB]
-Get:204 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libtiff5 amd64 4.0.10-4 [257 kB]
-Get:205 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libumfpack5 amd64 1:5.4.0+dfsg-1 [243 kB]
-Get:206 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libwebpdemux2 amd64 0.6.1-2 [87.5 kB]
-Get:207 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libwebpmux3 amd64 0.6.1-2 [97.7 kB]
-Get:208 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libxml2 amd64 2.9.4+dfsg1-7+b3 [687 kB]
-Get:209 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libxslt1.1 amd64 1.1.32-2 [236 kB]
-Get:210 http://cdn-fastly.deb.debian.org/debian stable/main amd64 libyaml-0-2 amd64 0.2.1-1 [47.2 kB]
-Get:211 http://cdn-fastly.deb.debian.org/debian stable/main amd64 manpages-dev all 4.16-2 [2232 kB]
-Get:212 http://cdn-fastly.deb.debian.org/debian stable/main amd64 pandoc-data all 2.2.1-3 [329 kB]
-Get:213 http://cdn-fastly.deb.debian.org/debian stable/main amd64 pandoc amd64 2.2.1-3+b2 [14.7 MB]
-Get:214 http://cdn-fastly.deb.debian.org/debian stable/main amd64 psmisc amd64 23.2-1 [126 kB]
-Get:215 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python-matplotlib-data all 3.0.2-2 [4138 kB]
-Get:216 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python-pip-whl all 18.1-5 [1591 kB]
-Get:217 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python-tables-data all 3.4.4-2 [53.1 kB]
-Get:218 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-asn1crypto all 0.24.0-1 [78.2 kB]
-Get:219 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-atomicwrites all 1.1.5-2 [6892 B]
-Get:220 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-attr all 18.2.0-1 [37.3 kB]
-Get:221 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-soupsieve all 1.8+dfsg-1 [27.6 kB]
-Get:222 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-bs4 all 4.7.1-1 [94.1 kB]
-Get:223 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-cffi-backend amd64 1.12.2-1 [79.7 kB]
-Get:224 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-chardet all 3.0.4-3 [80.5 kB]
-Get:225 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-crypto amd64 2.6.1-9+b1 [263 kB]
-Get:226 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-cryptography amd64 2.6.1-3 [218 kB]
-Get:227 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-cvxopt amd64 1.1.9+dfsg-3+b1 [269 kB]
-Get:228 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-cycler all 0.10.0-1 [7556 B]
-Get:229 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-dbus amd64 1.2.8-3 [103 kB]
-Get:230 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3.7-dev amd64 3.7.3-2 [509 kB]
-Get:231 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-dev amd64 3.7.3-1 [1264 B]
-Get:232 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-gi amd64 3.30.4-1 [180 kB]
-Get:233 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-ipykernel all 4.9.0-1 [75.7 kB]
-Get:234 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-joblib all 0.13.0-2 [187 kB]
-Get:235 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-secretstorage all 2.3.1-2 [14.2 kB]
-Get:236 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-keyring all 17.1.1-1 [43.1 kB]
-Get:237 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-keyrings.alt all 3.1.1-1 [18.2 kB]
-Get:238 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-kiwisolver amd64 1.0.1-2+b1 [65.4 kB]
-Get:239 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-lxml amd64 4.3.2-1 [1161 kB]
-Get:240 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-pyparsing all 2.2.0+dfsg1-2 [89.6 kB]
-Get:241 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-numpy amd64 1:1.16.2-1 [2119 kB]
-Get:242 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-matplotlib amd64 3.0.2-2 [5353 kB]
-Get:243 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-more-itertools all 4.2.0-1 [42.2 kB]
-Get:244 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-numexpr amd64 2.6.9-1 [140 kB]
-Get:245 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-olefile all 0.46-1 [35.9 kB]
-Get:246 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-tz all 2019.1-1 [27.1 kB]
-Get:247 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-pandas-lib amd64 0.23.3+dfsg-3 [3475 kB]
-Get:248 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-pandas all 0.23.3+dfsg-3 [1750 kB]
-Get:249 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-patsy all 0.5.0+git13-g54dcf7b-1 [172 kB]
-Get:250 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-pil amd64 5.4.1-2 [395 kB]
-Get:251 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-pip all 18.1-5 [171 kB]
-Get:252 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-pluggy all 0.8.0-1 [20.6 kB]
-Get:253 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-psutil amd64 5.5.1-1 [166 kB]
-Get:254 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-py all 1.7.0-2 [86.6 kB]
-Get:255 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-pytest all 3.10.1-2 [243 kB]
-Get:256 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-scipy amd64 1.1.0-7 [10.0 MB]
-Get:257 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-setuptools all 40.8.0-1 [306 kB]
-Get:258 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-simplejson amd64 3.16.0-1 [60.7 kB]
-Get:259 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-statsmodels-lib amd64 0.8.0-9 [365 kB]
-Get:260 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-statsmodels all 0.8.0-9 [3004 kB]
-Get:261 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-tables-lib amd64 3.4.4-2 [438 kB]
-Get:262 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-tables all 3.4.4-2 [342 kB]
-Get:263 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-tk amd64 3.7.3-1 [97.4 kB]
-Get:264 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-wheel all 0.32.3-2 [19.4 kB]
-Get:265 http://cdn-fastly.deb.debian.org/debian stable/main amd64 python3-xdg all 0.25-5 [35.9 kB]
-Get:266 http://cdn-fastly.deb.debian.org/debian stable/main amd64 shared-mime-info amd64 1.10-1 [766 kB]
-Get:267 http://cdn-fastly.deb.debian.org/debian stable/main amd64 xdg-user-dirs amd64 0.17-2 [53.8 kB]
-[91mdebconf: delaying package configuration, since apt-utils is not installed
-[0mFetched 212 MB in 2min 56s (1204 kB/s)
-Selecting previously unselected package perl-modules-5.28.
-(Reading database ... (Reading database ... 5%(Reading database ... 10%(Reading database ... 15%(Reading database ... 20%(Reading database ... 25%(Reading database ... 30%(Reading database ... 35%(Reading database ... 40%(Reading database ... 45%(Reading database ... 50%(Reading database ... 55%(Reading database ... 60%(Reading database ... 65%(Reading database ... 70%(Reading database ... 75%(Reading database ... 80%(Reading database ... 85%(Reading database ... 90%(Reading database ... 95%(Reading database ... 100%(Reading database ... 6674 files and directories currently installed.)
-Preparing to unpack .../0-perl-modules-5.28_5.28.1-6_all.deb ...
-Unpacking perl-modules-5.28 (5.28.1-6) ...
-Selecting previously unselected package libgdbm6:amd64.
-Preparing to unpack .../1-libgdbm6_1.18.1-4_amd64.deb ...
-Unpacking libgdbm6:amd64 (1.18.1-4) ...
-Selecting previously unselected package libgdbm-compat4:amd64.
-Preparing to unpack .../2-libgdbm-compat4_1.18.1-4_amd64.deb ...
-Unpacking libgdbm-compat4:amd64 (1.18.1-4) ...
-Selecting previously unselected package libperl5.28:amd64.
-Preparing to unpack .../3-libperl5.28_5.28.1-6_amd64.deb ...
-Unpacking libperl5.28:amd64 (5.28.1-6) ...
-Selecting previously unselected package perl.
-Preparing to unpack .../4-perl_5.28.1-6_amd64.deb ...
-Unpacking perl (5.28.1-6) ...
-Selecting previously unselected package liblocale-gettext-perl.
-Preparing to unpack .../5-liblocale-gettext-perl_1.07-3+b4_amd64.deb ...
-Unpacking liblocale-gettext-perl (1.07-3+b4) ...
-Selecting previously unselected package libssl1.1:amd64.
-Preparing to unpack .../6-libssl1.1_1.1.1c-1_amd64.deb ...
-Unpacking libssl1.1:amd64 (1.1.1c-1) ...
-Selecting previously unselected package libpython3.7-minimal:amd64.
-Preparing to unpack .../7-libpython3.7-minimal_3.7.3-2_amd64.deb ...
-Unpacking libpython3.7-minimal:amd64 (3.7.3-2) ...
-Selecting previously unselected package libexpat1:amd64.
-Preparing to unpack .../8-libexpat1_2.2.6-2_amd64.deb ...
-Unpacking libexpat1:amd64 (2.2.6-2) ...
-Selecting previously unselected package python3.7-minimal.
-Preparing to unpack .../9-python3.7-minimal_3.7.3-2_amd64.deb ...
-Unpacking python3.7-minimal (3.7.3-2) ...
-Setting up libssl1.1:amd64 (1.1.1c-1) ...
-debconf: unable to initialize frontend: Dialog
-debconf: (TERM is not set, so the dialog frontend is not usable.)
-debconf: falling back to frontend: Readline
-Setting up libpython3.7-minimal:amd64 (3.7.3-2) ...
-Setting up libexpat1:amd64 (2.2.6-2) ...
-Setting up python3.7-minimal (3.7.3-2) ...
-Selecting previously unselected package python3-minimal.
-(Reading database ... (Reading database ... 5%(Reading database ... 10%(Reading database ... 15%(Reading database ... 20%(Reading database ... 25%(Reading database ... 30%(Reading database ... 35%(Reading database ... 40%(Reading database ... 45%(Reading database ... 50%(Reading database ... 55%(Reading database ... 60%(Reading database ... 65%(Reading database ... 70%(Reading database ... 75%(Reading database ... 80%(Reading database ... 85%(Reading database ... 90%(Reading database ... 95%(Reading database ... 100%(Reading database ... 8896 files and directories currently installed.)
-Preparing to unpack .../0-python3-minimal_3.7.3-1_amd64.deb ...
-Unpacking python3-minimal (3.7.3-1) ...
-Selecting previously unselected package mime-support.
-Preparing to unpack .../1-mime-support_3.62_all.deb ...
-Unpacking mime-support (3.62) ...
-Selecting previously unselected package libmpdec2:amd64.
-Preparing to unpack .../2-libmpdec2_2.4.2-2_amd64.deb ...
-Unpacking libmpdec2:amd64 (2.4.2-2) ...
-Selecting previously unselected package readline-common.
-Preparing to unpack .../3-readline-common_7.0-5_all.deb ...
-Unpacking readline-common (7.0-5) ...
-Selecting previously unselected package libreadline7:amd64.
-Preparing to unpack .../4-libreadline7_7.0-5_amd64.deb ...
-Unpacking libreadline7:amd64 (7.0-5) ...
-Selecting previously unselected package libsqlite3-0:amd64.
-Preparing to unpack .../5-libsqlite3-0_3.27.2-3_amd64.deb ...
-Unpacking libsqlite3-0:amd64 (3.27.2-3) ...
-Selecting previously unselected package libpython3.7-stdlib:amd64.
-Preparing to unpack .../6-libpython3.7-stdlib_3.7.3-2_amd64.deb ...
-Unpacking libpython3.7-stdlib:amd64 (3.7.3-2) ...
-Selecting previously unselected package python3.7.
-Preparing to unpack .../7-python3.7_3.7.3-2_amd64.deb ...
-Unpacking python3.7 (3.7.3-2) ...
-Selecting previously unselected package libpython3-stdlib:amd64.
-Preparing to unpack .../8-libpython3-stdlib_3.7.3-1_amd64.deb ...
-Unpacking libpython3-stdlib:amd64 (3.7.3-1) ...
-Setting up python3-minimal (3.7.3-1) ...
-Selecting previously unselected package python3.
-(Reading database ... (Reading database ... 5%(Reading database ... 10%(Reading database ... 15%(Reading database ... 20%(Reading database ... 25%(Reading database ... 30%(Reading database ... 35%(Reading database ... 40%(Reading database ... 45%(Reading database ... 50%(Reading database ... 55%(Reading database ... 60%(Reading database ... 65%(Reading database ... 70%(Reading database ... 75%(Reading database ... 80%(Reading database ... 85%(Reading database ... 90%(Reading database ... 95%(Reading database ... 100%(Reading database ... 9365 files and directories currently installed.)
-Preparing to unpack .../000-python3_3.7.3-1_amd64.deb ...
-Unpacking python3 (3.7.3-1) ...
-Selecting previously unselected package netbase.
-Preparing to unpack .../001-netbase_5.6_all.deb ...
-Unpacking netbase (5.6) ...
-Selecting previously unselected package libncurses6:amd64.
-Preparing to unpack .../002-libncurses6_6.1+20181013-2_amd64.deb ...
-Unpacking libncurses6:amd64 (6.1+20181013-2) ...
-Selecting previously unselected package libprocps7:amd64.
-Preparing to unpack .../003-libprocps7_2%3a3.3.15-2_amd64.deb ...
-Unpacking libprocps7:amd64 (2:3.3.15-2) ...
-Selecting previously unselected package lsb-base.
-Preparing to unpack .../004-lsb-base_10.2019051400_all.deb ...
-Unpacking lsb-base (10.2019051400) ...
-Selecting previously unselected package procps.
-Preparing to unpack .../005-procps_2%3a3.3.15-2_amd64.deb ...
-Unpacking procps (2:3.3.15-2) ...
-Selecting previously unselected package sensible-utils.
-Preparing to unpack .../006-sensible-utils_0.0.12_all.deb ...
-Unpacking sensible-utils (0.0.12) ...
-Selecting previously unselected package bzip2.
-Preparing to unpack .../007-bzip2_1.0.6-9.1_amd64.deb ...
-Unpacking bzip2 (1.0.6-9.1) ...
-Selecting previously unselected package libapparmor1:amd64.
-Preparing to unpack .../008-libapparmor1_2.13.2-10_amd64.deb ...
-Unpacking libapparmor1:amd64 (2.13.2-10) ...
-Selecting previously unselected package libdbus-1-3:amd64.
-Preparing to unpack .../009-libdbus-1-3_1.12.16-1_amd64.deb ...
-Unpacking libdbus-1-3:amd64 (1.12.16-1) ...
-Selecting previously unselected package dbus.
-Preparing to unpack .../010-dbus_1.12.16-1_amd64.deb ...
-Unpacking dbus (1.12.16-1) ...
-Selecting previously unselected package libmagic-mgc.
-Preparing to unpack .../011-libmagic-mgc_1%3a5.35-4_amd64.deb ...
-Unpacking libmagic-mgc (1:5.35-4) ...
-Selecting previously unselected package libmagic1:amd64.
-Preparing to unpack .../012-libmagic1_1%3a5.35-4_amd64.deb ...
-Unpacking libmagic1:amd64 (1:5.35-4) ...
-Selecting previously unselected package file.
-Preparing to unpack .../013-file_1%3a5.35-4_amd64.deb ...
-Unpacking file (1:5.35-4) ...
-Selecting previously unselected package krb5-locales.
-Preparing to unpack .../014-krb5-locales_1.17-3_all.deb ...
-Unpacking krb5-locales (1.17-3) ...
-Selecting previously unselected package manpages.
-Preparing to unpack .../015-manpages_4.16-2_all.deb ...
-Unpacking manpages (4.16-2) ...
-Selecting previously unselected package ucf.
-Preparing to unpack .../016-ucf_3.0038+nmu1_all.deb ...
-Moving old data out of the way
-Unpacking ucf (3.0038+nmu1) ...
-Selecting previously unselected package xz-utils.
-Preparing to unpack .../017-xz-utils_5.2.4-1_amd64.deb ...
-Unpacking xz-utils (5.2.4-1) ...
-Selecting previously unselected package binutils-common:amd64.
-Preparing to unpack .../018-binutils-common_2.31.1-16_amd64.deb ...
-Unpacking binutils-common:amd64 (2.31.1-16) ...
-Selecting previously unselected package libbinutils:amd64.
-Preparing to unpack .../019-libbinutils_2.31.1-16_amd64.deb ...
-Unpacking libbinutils:amd64 (2.31.1-16) ...
-Selecting previously unselected package binutils-x86-64-linux-gnu.
-Preparing to unpack .../020-binutils-x86-64-linux-gnu_2.31.1-16_amd64.deb ...
-Unpacking binutils-x86-64-linux-gnu (2.31.1-16) ...
-Selecting previously unselected package binutils.
-Preparing to unpack .../021-binutils_2.31.1-16_amd64.deb ...
-Unpacking binutils (2.31.1-16) ...
-Selecting previously unselected package libtcl8.6:amd64.
-Preparing to unpack .../022-libtcl8.6_8.6.9+dfsg-2_amd64.deb ...
-Unpacking libtcl8.6:amd64 (8.6.9+dfsg-2) ...
-Selecting previously unselected package libpng16-16:amd64.
-Preparing to unpack .../023-libpng16-16_1.6.36-6_amd64.deb ...
-Unpacking libpng16-16:amd64 (1.6.36-6) ...
-Selecting previously unselected package libfreetype6:amd64.
-Preparing to unpack .../024-libfreetype6_2.9.1-3_amd64.deb ...
-Unpacking libfreetype6:amd64 (2.9.1-3) ...
-Selecting previously unselected package ttf-bitstream-vera.
-Preparing to unpack .../025-ttf-bitstream-vera_1.10-8_all.deb ...
-Unpacking ttf-bitstream-vera (1.10-8) ...
-Selecting previously unselected package fontconfig-config.
-Preparing to unpack .../026-fontconfig-config_2.13.1-2_all.deb ...
-Unpacking fontconfig-config (2.13.1-2) ...
-Selecting previously unselected package libfontconfig1:amd64.
-Preparing to unpack .../027-libfontconfig1_2.13.1-2_amd64.deb ...
-Unpacking libfontconfig1:amd64 (2.13.1-2) ...
-Selecting previously unselected package libxau6:amd64.
-Preparing to unpack .../028-libxau6_1%3a1.0.8-1+b2_amd64.deb ...
-Unpacking libxau6:amd64 (1:1.0.8-1+b2) ...
-Selecting previously unselected package libbsd0:amd64.
-Preparing to unpack .../029-libbsd0_0.9.1-2_amd64.deb ...
-Unpacking libbsd0:amd64 (0.9.1-2) ...
-Selecting previously unselected package libxdmcp6:amd64.
-Preparing to unpack .../030-libxdmcp6_1%3a1.1.2-3_amd64.deb ...
-Unpacking libxdmcp6:amd64 (1:1.1.2-3) ...
-Selecting previously unselected package libxcb1:amd64.
-Preparing to unpack .../031-libxcb1_1.13.1-2_amd64.deb ...
-Unpacking libxcb1:amd64 (1.13.1-2) ...
-Selecting previously unselected package libx11-data.
-Preparing to unpack .../032-libx11-data_2%3a1.6.7-1_all.deb ...
-Unpacking libx11-data (2:1.6.7-1) ...
-Selecting previously unselected package libx11-6:amd64.
-Preparing to unpack .../033-libx11-6_2%3a1.6.7-1_amd64.deb ...
-Unpacking libx11-6:amd64 (2:1.6.7-1) ...
-Selecting previously unselected package libxext6:amd64.
-Preparing to unpack .../034-libxext6_2%3a1.3.3-1+b2_amd64.deb ...
-Unpacking libxext6:amd64 (2:1.3.3-1+b2) ...
-Selecting previously unselected package libxrender1:amd64.
-Preparing to unpack .../035-libxrender1_1%3a0.9.10-1_amd64.deb ...
-Unpacking libxrender1:amd64 (1:0.9.10-1) ...
-Selecting previously unselected package libxft2:amd64.
-Preparing to unpack .../036-libxft2_2.3.2-2_amd64.deb ...
-Unpacking libxft2:amd64 (2.3.2-2) ...
-Selecting previously unselected package x11-common.
-Preparing to unpack .../037-x11-common_1%3a7.7+19_all.deb ...
-Unpacking x11-common (1:7.7+19) ...
-Selecting previously unselected package libxss1:amd64.
-Preparing to unpack .../038-libxss1_1%3a1.2.3-1_amd64.deb ...
-Unpacking libxss1:amd64 (1:1.2.3-1) ...
-Selecting previously unselected package libtk8.6:amd64.
-Preparing to unpack .../039-libtk8.6_8.6.9-2_amd64.deb ...
-Unpacking libtk8.6:amd64 (8.6.9-2) ...
-Selecting previously unselected package tk8.6-blt2.5.
-Preparing to unpack .../040-tk8.6-blt2.5_2.5.3+dfsg-4_amd64.deb ...
-Unpacking tk8.6-blt2.5 (2.5.3+dfsg-4) ...
-Selecting previously unselected package blt.
-Preparing to unpack .../041-blt_2.5.3+dfsg-4_amd64.deb ...
-Unpacking blt (2.5.3+dfsg-4) ...
-Selecting previously unselected package libc-dev-bin.
-Preparing to unpack .../042-libc-dev-bin_2.28-10_amd64.deb ...
-Unpacking libc-dev-bin (2.28-10) ...
-Selecting previously unselected package linux-libc-dev:amd64.
-Preparing to unpack .../043-linux-libc-dev_4.19.37-5+deb10u1_amd64.deb ...
-Unpacking linux-libc-dev:amd64 (4.19.37-5+deb10u1) ...
-Selecting previously unselected package libc6-dev:amd64.
-Preparing to unpack .../044-libc6-dev_2.28-10_amd64.deb ...
-Unpacking libc6-dev:amd64 (2.28-10) ...
-Selecting previously unselected package libisl19:amd64.
-Preparing to unpack .../045-libisl19_0.20-2_amd64.deb ...
-Unpacking libisl19:amd64 (0.20-2) ...
-Selecting previously unselected package libmpfr6:amd64.
-Preparing to unpack .../046-libmpfr6_4.0.2-1_amd64.deb ...
-Unpacking libmpfr6:amd64 (4.0.2-1) ...
-Selecting previously unselected package libmpc3:amd64.
-Preparing to unpack .../047-libmpc3_1.1.0-1_amd64.deb ...
-Unpacking libmpc3:amd64 (1.1.0-1) ...
-Selecting previously unselected package cpp-8.
-Preparing to unpack .../048-cpp-8_8.3.0-6_amd64.deb ...
-Unpacking cpp-8 (8.3.0-6) ...
-Selecting previously unselected package cpp.
-Preparing to unpack .../049-cpp_4%3a8.3.0-1_amd64.deb ...
-Unpacking cpp (4:8.3.0-1) ...
-Selecting previously unselected package libcc1-0:amd64.
-Preparing to unpack .../050-libcc1-0_8.3.0-6_amd64.deb ...
-Unpacking libcc1-0:amd64 (8.3.0-6) ...
-Selecting previously unselected package libgomp1:amd64.
-Preparing to unpack .../051-libgomp1_8.3.0-6_amd64.deb ...
-Unpacking libgomp1:amd64 (8.3.0-6) ...
-Selecting previously unselected package libitm1:amd64.
-Preparing to unpack .../052-libitm1_8.3.0-6_amd64.deb ...
-Unpacking libitm1:amd64 (8.3.0-6) ...
-Selecting previously unselected package libatomic1:amd64.
-Preparing to unpack .../053-libatomic1_8.3.0-6_amd64.deb ...
-Unpacking libatomic1:amd64 (8.3.0-6) ...
-Selecting previously unselected package libasan5:amd64.
-Preparing to unpack .../054-libasan5_8.3.0-6_amd64.deb ...
-Unpacking libasan5:amd64 (8.3.0-6) ...
-Selecting previously unselected package liblsan0:amd64.
-Preparing to unpack .../055-liblsan0_8.3.0-6_amd64.deb ...
-Unpacking liblsan0:amd64 (8.3.0-6) ...
-Selecting previously unselected package libtsan0:amd64.
-Preparing to unpack .../056-libtsan0_8.3.0-6_amd64.deb ...
-Unpacking libtsan0:amd64 (8.3.0-6) ...
-Selecting previously unselected package libubsan1:amd64.
-Preparing to unpack .../057-libubsan1_8.3.0-6_amd64.deb ...
-Unpacking libubsan1:amd64 (8.3.0-6) ...
-Selecting previously unselected package libmpx2:amd64.
-Preparing to unpack .../058-libmpx2_8.3.0-6_amd64.deb ...
-Unpacking libmpx2:amd64 (8.3.0-6) ...
-Selecting previously unselected package libquadmath0:amd64.
-Preparing to unpack .../059-libquadmath0_8.3.0-6_amd64.deb ...
-Unpacking libquadmath0:amd64 (8.3.0-6) ...
-Selecting previously unselected package libgcc-8-dev:amd64.
-Preparing to unpack .../060-libgcc-8-dev_8.3.0-6_amd64.deb ...
-Unpacking libgcc-8-dev:amd64 (8.3.0-6) ...
-Selecting previously unselected package gcc-8.
-Preparing to unpack .../061-gcc-8_8.3.0-6_amd64.deb ...
-Unpacking gcc-8 (8.3.0-6) ...
-Selecting previously unselected package gcc.
-Preparing to unpack .../062-gcc_4%3a8.3.0-1_amd64.deb ...
-Unpacking gcc (4:8.3.0-1) ...
-Selecting previously unselected package libstdc++-8-dev:amd64.
-Preparing to unpack .../063-libstdc++-8-dev_8.3.0-6_amd64.deb ...
-Unpacking libstdc++-8-dev:amd64 (8.3.0-6) ...
-Selecting previously unselected package g++-8.
-Preparing to unpack .../064-g++-8_8.3.0-6_amd64.deb ...
-Unpacking g++-8 (8.3.0-6) ...
-Selecting previously unselected package g++.
-Preparing to unpack .../065-g++_4%3a8.3.0-1_amd64.deb ...
-Unpacking g++ (4:8.3.0-1) ...
-Selecting previously unselected package make.
-Preparing to unpack .../066-make_4.2.1-1.2_amd64.deb ...
-Unpacking make (4.2.1-1.2) ...
-Selecting previously unselected package libdpkg-perl.
-Preparing to unpack .../067-libdpkg-perl_1.19.7_all.deb ...
-Unpacking libdpkg-perl (1.19.7) ...
-Selecting previously unselected package patch.
-Preparing to unpack .../068-patch_2.7.6-3_amd64.deb ...
-Unpacking patch (2.7.6-3) ...
-Selecting previously unselected package dpkg-dev.
-Preparing to unpack .../069-dpkg-dev_1.19.7_all.deb ...
-Unpacking dpkg-dev (1.19.7) ...
-Selecting previously unselected package build-essential.
-Preparing to unpack .../070-build-essential_12.6_amd64.deb ...
-Unpacking build-essential (12.6) ...
-Selecting previously unselected package openssl.
-Preparing to unpack .../071-openssl_1.1.1c-1_amd64.deb ...
-Unpacking openssl (1.1.1c-1) ...
-Selecting previously unselected package ca-certificates.
-Preparing to unpack .../072-ca-certificates_20190110_all.deb ...
-Unpacking ca-certificates (20190110) ...
-Selecting previously unselected package python3-lib2to3.
-Preparing to unpack .../073-python3-lib2to3_3.7.3-1_all.deb ...
-Unpacking python3-lib2to3 (3.7.3-1) ...
-Selecting previously unselected package python3-distutils.
-Preparing to unpack .../074-python3-distutils_3.7.3-1_all.deb ...
-Unpacking python3-distutils (3.7.3-1) ...
-Selecting previously unselected package dh-python.
-Preparing to unpack .../075-dh-python_3.20190308_all.deb ...
-Unpacking dh-python (3.20190308) ...
-Selecting previously unselected package libassuan0:amd64.
-Preparing to unpack .../076-libassuan0_2.5.2-1_amd64.deb ...
-Unpacking libassuan0:amd64 (2.5.2-1) ...
-Selecting previously unselected package gpgconf.
-Preparing to unpack .../077-gpgconf_2.2.12-1_amd64.deb ...
-Unpacking gpgconf (2.2.12-1) ...
-Selecting previously unselected package libksba8:amd64.
-Preparing to unpack .../078-libksba8_1.3.5-2_amd64.deb ...
-Unpacking libksba8:amd64 (1.3.5-2) ...
-Selecting previously unselected package libsasl2-modules-db:amd64.
-Preparing to unpack .../079-libsasl2-modules-db_2.1.27+dfsg-1_amd64.deb ...
-Unpacking libsasl2-modules-db:amd64 (2.1.27+dfsg-1) ...
-Selecting previously unselected package libsasl2-2:amd64.
-Preparing to unpack .../080-libsasl2-2_2.1.27+dfsg-1_amd64.deb ...
-Unpacking libsasl2-2:amd64 (2.1.27+dfsg-1) ...
-Selecting previously unselected package libldap-common.
-Preparing to unpack .../081-libldap-common_2.4.47+dfsg-3_all.deb ...
-Unpacking libldap-common (2.4.47+dfsg-3) ...
-Selecting previously unselected package libldap-2.4-2:amd64.
-Preparing to unpack .../082-libldap-2.4-2_2.4.47+dfsg-3_amd64.deb ...
-Unpacking libldap-2.4-2:amd64 (2.4.47+dfsg-3) ...
-Selecting previously unselected package libnpth0:amd64.
-Preparing to unpack .../083-libnpth0_1.6-1_amd64.deb ...
-Unpacking libnpth0:amd64 (1.6-1) ...
-Selecting previously unselected package dirmngr.
-Preparing to unpack .../084-dirmngr_2.2.12-1_amd64.deb ...
-Unpacking dirmngr (2.2.12-1) ...
-Selecting previously unselected package libfakeroot:amd64.
-Preparing to unpack .../085-libfakeroot_1.23-1_amd64.deb ...
-Unpacking libfakeroot:amd64 (1.23-1) ...
-Selecting previously unselected package fakeroot.
-Preparing to unpack .../086-fakeroot_1.23-1_amd64.deb ...
-Unpacking fakeroot (1.23-1) ...
-Selecting previously unselected package fonts-lyx.
-Preparing to unpack .../087-fonts-lyx_2.3.2-1_all.deb ...
-Unpacking fonts-lyx (2.3.2-1) ...
-Selecting previously unselected package libglib2.0-0:amd64.
-Preparing to unpack .../088-libglib2.0-0_2.58.3-2_amd64.deb ...
-Unpacking libglib2.0-0:amd64 (2.58.3-2) ...
-Selecting previously unselected package libgirepository-1.0-1:amd64.
-Preparing to unpack .../089-libgirepository-1.0-1_1.58.3-2_amd64.deb ...
-Unpacking libgirepository-1.0-1:amd64 (1.58.3-2) ...
-Selecting previously unselected package gir1.2-glib-2.0:amd64.
-Preparing to unpack .../090-gir1.2-glib-2.0_1.58.3-2_amd64.deb ...
-Unpacking gir1.2-glib-2.0:amd64 (1.58.3-2) ...
-Selecting previously unselected package gnupg-l10n.
-Preparing to unpack .../091-gnupg-l10n_2.2.12-1_all.deb ...
-Unpacking gnupg-l10n (2.2.12-1) ...
-Selecting previously unselected package gnupg-utils.
-Preparing to unpack .../092-gnupg-utils_2.2.12-1_amd64.deb ...
-Unpacking gnupg-utils (2.2.12-1) ...
-Selecting previously unselected package gpg.
-Preparing to unpack .../093-gpg_2.2.12-1_amd64.deb ...
-Unpacking gpg (2.2.12-1) ...
-Selecting previously unselected package pinentry-curses.
-Preparing to unpack .../094-pinentry-curses_1.1.0-2_amd64.deb ...
-Unpacking pinentry-curses (1.1.0-2) ...
-Selecting previously unselected package gpg-agent.
-Preparing to unpack .../095-gpg-agent_2.2.12-1_amd64.deb ...
-Unpacking gpg-agent (2.2.12-1) ...
-Selecting previously unselected package gpg-wks-client.
-Preparing to unpack .../096-gpg-wks-client_2.2.12-1_amd64.deb ...
-Unpacking gpg-wks-client (2.2.12-1) ...
-Selecting previously unselected package gpg-wks-server.
-Preparing to unpack .../097-gpg-wks-server_2.2.12-1_amd64.deb ...
-Unpacking gpg-wks-server (2.2.12-1) ...
-Selecting previously unselected package gpgsm.
-Preparing to unpack .../098-gpgsm_2.2.12-1_amd64.deb ...
-Unpacking gpgsm (2.2.12-1) ...
-Selecting previously unselected package gnupg.
-Preparing to unpack .../099-gnupg_2.2.12-1_all.deb ...
-Unpacking gnupg (2.2.12-1) ...
-Selecting previously unselected package javascript-common.
-Preparing to unpack .../100-javascript-common_11_all.deb ...
-Unpacking javascript-common (11) ...
-Selecting previously unselected package python3-entrypoints.
-Preparing to unpack .../101-python3-entrypoints_0.3-1_all.deb ...
-Unpacking python3-entrypoints (0.3-1) ...
-Selecting previously unselected package python3-decorator.
-Preparing to unpack .../102-python3-decorator_4.3.0-1.1_all.deb ...
-Unpacking python3-decorator (4.3.0-1.1) ...
-Selecting previously unselected package python3-ptyprocess.
-Preparing to unpack .../103-python3-ptyprocess_0.6.0-1_all.deb ...
-Unpacking python3-ptyprocess (0.6.0-1) ...
-Selecting previously unselected package python3-pexpect.
-Preparing to unpack .../104-python3-pexpect_4.6.0-1_all.deb ...
-Unpacking python3-pexpect (4.6.0-1) ...
-Selecting previously unselected package python3-pickleshare.
-Preparing to unpack .../105-python3-pickleshare_0.7.5-1_all.deb ...
-Unpacking python3-pickleshare (0.7.5-1) ...
-Selecting previously unselected package python3-pkg-resources.
-Preparing to unpack .../106-python3-pkg-resources_40.8.0-1_all.deb ...
-Unpacking python3-pkg-resources (40.8.0-1) ...
-Selecting previously unselected package python3-six.
-Preparing to unpack .../107-python3-six_1.12.0-1_all.deb ...
-Unpacking python3-six (1.12.0-1) ...
-Selecting previously unselected package python3-wcwidth.
-Preparing to unpack .../108-python3-wcwidth_0.1.7+dfsg1-3_all.deb ...
-Unpacking python3-wcwidth (0.1.7+dfsg1-3) ...
-Selecting previously unselected package python3-prompt-toolkit.
-Preparing to unpack .../109-python3-prompt-toolkit_1.0.15-1_all.deb ...
-Unpacking python3-prompt-toolkit (1.0.15-1) ...
-Selecting previously unselected package python3-pygments.
-Preparing to unpack .../110-python3-pygments_2.3.1+dfsg-1_all.deb ...
-Unpacking python3-pygments (2.3.1+dfsg-1) ...
-Selecting previously unselected package python3-simplegeneric.
-Preparing to unpack .../111-python3-simplegeneric_0.8.1-2_all.deb ...
-Unpacking python3-simplegeneric (0.8.1-2) ...
-Selecting previously unselected package python3-ipython-genutils.
-Preparing to unpack .../112-python3-ipython-genutils_0.2.0-1_all.deb ...
-Unpacking python3-ipython-genutils (0.2.0-1) ...
-Selecting previously unselected package python3-traitlets.
-Preparing to unpack .../113-python3-traitlets_4.3.2-1_all.deb ...
-Unpacking python3-traitlets (4.3.2-1) ...
-Selecting previously unselected package python3-ipython.
-Preparing to unpack .../114-python3-ipython_5.8.0-1_all.deb ...
-Unpacking python3-ipython (5.8.0-1) ...
-Selecting previously unselected package python3-dateutil.
-Preparing to unpack .../115-python3-dateutil_2.7.3-3_all.deb ...
-Unpacking python3-dateutil (2.7.3-3) ...
-Selecting previously unselected package python3-jupyter-core.
-Preparing to unpack .../116-python3-jupyter-core_4.4.0-2_all.deb ...
-Unpacking python3-jupyter-core (4.4.0-2) ...
-Selecting previously unselected package python3-tornado.
-Preparing to unpack .../117-python3-tornado_5.1.1-4_amd64.deb ...
-Unpacking python3-tornado (5.1.1-4) ...
-Selecting previously unselected package libkeyutils1:amd64.
-Preparing to unpack .../118-libkeyutils1_1.6-6_amd64.deb ...
-Unpacking libkeyutils1:amd64 (1.6-6) ...
-Selecting previously unselected package libkrb5support0:amd64.
-Preparing to unpack .../119-libkrb5support0_1.17-3_amd64.deb ...
-Unpacking libkrb5support0:amd64 (1.17-3) ...
-Selecting previously unselected package libk5crypto3:amd64.
-Preparing to unpack .../120-libk5crypto3_1.17-3_amd64.deb ...
-Unpacking libk5crypto3:amd64 (1.17-3) ...
-Selecting previously unselected package libkrb5-3:amd64.
-Preparing to unpack .../121-libkrb5-3_1.17-3_amd64.deb ...
-Unpacking libkrb5-3:amd64 (1.17-3) ...
-Selecting previously unselected package libgssapi-krb5-2:amd64.
-Preparing to unpack .../122-libgssapi-krb5-2_1.17-3_amd64.deb ...
-Unpacking libgssapi-krb5-2:amd64 (1.17-3) ...
-Selecting previously unselected package libnorm1:amd64.
-Preparing to unpack .../123-libnorm1_1.5.8+dfsg2-1_amd64.deb ...
-Unpacking libnorm1:amd64 (1.5.8+dfsg2-1) ...
-Selecting previously unselected package libpgm-5.2-0:amd64.
-Preparing to unpack .../124-libpgm-5.2-0_5.2.122~dfsg-3_amd64.deb ...
-Unpacking libpgm-5.2-0:amd64 (5.2.122~dfsg-3) ...
-Selecting previously unselected package libsodium23:amd64.
-Preparing to unpack .../125-libsodium23_1.0.17-1_amd64.deb ...
-Unpacking libsodium23:amd64 (1.0.17-1) ...
-Selecting previously unselected package libzmq5:amd64.
-Preparing to unpack .../126-libzmq5_4.3.1-4+deb10u1_amd64.deb ...
-Unpacking libzmq5:amd64 (4.3.1-4+deb10u1) ...
-Selecting previously unselected package python3-zmq.
-Preparing to unpack .../127-python3-zmq_17.1.2-2_amd64.deb ...
-Unpacking python3-zmq (17.1.2-2) ...
-Selecting previously unselected package python3-jupyter-client.
-Preparing to unpack .../128-python3-jupyter-client_5.2.3-1_all.deb ...
-Unpacking python3-jupyter-client (5.2.3-1) ...
-Selecting previously unselected package python3-testpath.
-Preparing to unpack .../129-python3-testpath_0.4.2+dfsg-1_all.deb ...
-Unpacking python3-testpath (0.4.2+dfsg-1) ...
-Selecting previously unselected package python3-webencodings.
-Preparing to unpack .../130-python3-webencodings_0.5.1-1_all.deb ...
-Unpacking python3-webencodings (0.5.1-1) ...
-Selecting previously unselected package python3-html5lib.
-Preparing to unpack .../131-python3-html5lib_1.0.1-1_all.deb ...
-Unpacking python3-html5lib (1.0.1-1) ...
-Selecting previously unselected package python3-bleach.
-Preparing to unpack .../132-python3-bleach_3.1.0-1_all.deb ...
-Unpacking python3-bleach (3.1.0-1) ...
-Selecting previously unselected package python3-defusedxml.
-Preparing to unpack .../133-python3-defusedxml_0.5.0-2_all.deb ...
-Unpacking python3-defusedxml (0.5.0-2) ...
-Selecting previously unselected package python3-markupsafe.
-Preparing to unpack .../134-python3-markupsafe_1.1.0-1_amd64.deb ...
-Unpacking python3-markupsafe (1.1.0-1) ...
-Selecting previously unselected package python3-jinja2.
-Preparing to unpack .../135-python3-jinja2_2.10-2_all.deb ...
-Unpacking python3-jinja2 (2.10-2) ...
-Selecting previously unselected package python3-mistune.
-Preparing to unpack .../136-python3-mistune_0.8.4-1_all.deb ...
-Unpacking python3-mistune (0.8.4-1) ...
-Selecting previously unselected package python3-jsonschema.
-Preparing to unpack .../137-python3-jsonschema_2.6.0-4_all.deb ...
-Unpacking python3-jsonschema (2.6.0-4) ...
-Selecting previously unselected package python3-nbformat.
-Preparing to unpack .../138-python3-nbformat_4.4.0-1_all.deb ...
-Unpacking python3-nbformat (4.4.0-1) ...
-Selecting previously unselected package python3-pandocfilters.
-Preparing to unpack .../139-python3-pandocfilters_1.4.2-1_all.deb ...
-Unpacking python3-pandocfilters (1.4.2-1) ...
-Selecting previously unselected package python3-nbconvert.
-Preparing to unpack .../140-python3-nbconvert_5.4-2_all.deb ...
-Unpacking python3-nbconvert (5.4-2) ...
-Selecting previously unselected package jupyter-nbconvert.
-Preparing to unpack .../141-jupyter-nbconvert_5.4-2_all.deb ...
-Unpacking jupyter-nbconvert (5.4-2) ...
-Selecting previously unselected package libaec0:amd64.
-Preparing to unpack .../142-libaec0_1.0.2-1_amd64.deb ...
-Unpacking libaec0:amd64 (1.0.2-1) ...
-Selecting previously unselected package libalgorithm-diff-perl.
-Preparing to unpack .../143-libalgorithm-diff-perl_1.19.03-2_all.deb ...
-Unpacking libalgorithm-diff-perl (1.19.03-2) ...
-Selecting previously unselected package libalgorithm-diff-xs-perl.
-Preparing to unpack .../144-libalgorithm-diff-xs-perl_0.04-5+b1_amd64.deb ...
-Unpacking libalgorithm-diff-xs-perl (0.04-5+b1) ...
-Selecting previously unselected package libalgorithm-merge-perl.
-Preparing to unpack .../145-libalgorithm-merge-perl_0.08-3_all.deb ...
-Unpacking libalgorithm-merge-perl (0.08-3) ...
-Selecting previously unselected package libsuitesparseconfig5:amd64.
-Preparing to unpack .../146-libsuitesparseconfig5_1%3a5.4.0+dfsg-1_amd64.deb ...
-Unpacking libsuitesparseconfig5:amd64 (1:5.4.0+dfsg-1) ...
-Selecting previously unselected package libamd2:amd64.
-Preparing to unpack .../147-libamd2_1%3a5.4.0+dfsg-1_amd64.deb ...
-Unpacking libamd2:amd64 (1:5.4.0+dfsg-1) ...
-Selecting previously unselected package libgfortran5:amd64.
-Preparing to unpack .../148-libgfortran5_8.3.0-6_amd64.deb ...
-Unpacking libgfortran5:amd64 (8.3.0-6) ...
-Selecting previously unselected package libblas3:amd64.
-Preparing to unpack .../149-libblas3_3.8.0-2_amd64.deb ...
-Unpacking libblas3:amd64 (3.8.0-2) ...
-Selecting previously unselected package libsnappy1v5:amd64.
-Preparing to unpack .../150-libsnappy1v5_1.1.7-1_amd64.deb ...
-Unpacking libsnappy1v5:amd64 (1.1.7-1) ...
-Selecting previously unselected package libblosc1.
-Preparing to unpack .../151-libblosc1_1.15.1+ds1-1_amd64.deb ...
-Unpacking libblosc1 (1.15.1+ds1-1) ...
-Selecting previously unselected package libcamd2:amd64.
-Preparing to unpack .../152-libcamd2_1%3a5.4.0+dfsg-1_amd64.deb ...
-Unpacking libcamd2:amd64 (1:5.4.0+dfsg-1) ...
-Selecting previously unselected package libccolamd2:amd64.
-Preparing to unpack .../153-libccolamd2_1%3a5.4.0+dfsg-1_amd64.deb ...
-Unpacking libccolamd2:amd64 (1:5.4.0+dfsg-1) ...
-Selecting previously unselected package libcolamd2:amd64.
-Preparing to unpack .../154-libcolamd2_1%3a5.4.0+dfsg-1_amd64.deb ...
-Unpacking libcolamd2:amd64 (1:5.4.0+dfsg-1) ...
-Selecting previously unselected package liblapack3:amd64.
-Preparing to unpack .../155-liblapack3_3.8.0-2_amd64.deb ...
-Unpacking liblapack3:amd64 (3.8.0-2) ...
-Selecting previously unselected package libmetis5:amd64.
-Preparing to unpack .../156-libmetis5_5.1.0.dfsg-5+b2_amd64.deb ...
-Unpacking libmetis5:amd64 (5.1.0.dfsg-5+b2) ...
-Selecting previously unselected package libcholmod3:amd64.
-Preparing to unpack .../157-libcholmod3_1%3a5.4.0+dfsg-1_amd64.deb ...
-Unpacking libcholmod3:amd64 (1:5.4.0+dfsg-1) ...
-Selecting previously unselected package libdsdp-5.8gf.
-Preparing to unpack .../158-libdsdp-5.8gf_5.8-9.4_amd64.deb ...
-Unpacking libdsdp-5.8gf (5.8-9.4) ...
-Selecting previously unselected package libexpat1-dev:amd64.
-Preparing to unpack .../159-libexpat1-dev_2.2.6-2_amd64.deb ...
-Unpacking libexpat1-dev:amd64 (2.2.6-2) ...
-Selecting previously unselected package libfftw3-double3:amd64.
-Preparing to unpack .../160-libfftw3-double3_3.3.8-2_amd64.deb ...
-Unpacking libfftw3-double3:amd64 (3.3.8-2) ...
-Selecting previously unselected package libfile-fcntllock-perl.
-Preparing to unpack .../161-libfile-fcntllock-perl_0.22-3+b5_amd64.deb ...
-Unpacking libfile-fcntllock-perl (0.22-3+b5) ...
-Selecting previously unselected package libglib2.0-data.
-Preparing to unpack .../162-libglib2.0-data_2.58.3-2_all.deb ...
-Unpacking libglib2.0-data (2.58.3-2) ...
-Selecting previously unselected package libltdl7:amd64.
-Preparing to unpack .../163-libltdl7_2.4.6-9_amd64.deb ...
-Unpacking libltdl7:amd64 (2.4.6-9) ...
-Selecting previously unselected package libglpk40:amd64.
-Preparing to unpack .../164-libglpk40_4.65-2_amd64.deb ...
-Unpacking libglpk40:amd64 (4.65-2) ...
-Selecting previously unselected package libgpm2:amd64.
-Preparing to unpack .../165-libgpm2_1.20.7-5_amd64.deb ...
-Unpacking libgpm2:amd64 (1.20.7-5) ...
-Selecting previously unselected package libgslcblas0:amd64.
-Preparing to unpack .../166-libgslcblas0_2.5+dfsg-6_amd64.deb ...
-Unpacking libgslcblas0:amd64 (2.5+dfsg-6) ...
-Selecting previously unselected package libgsl23:amd64.
-Preparing to unpack .../167-libgsl23_2.5+dfsg-6_amd64.deb ...
-Unpacking libgsl23:amd64 (2.5+dfsg-6) ...
-Selecting previously unselected package libsz2:amd64.
-Preparing to unpack .../168-libsz2_1.0.2-1_amd64.deb ...
-Unpacking libsz2:amd64 (1.0.2-1) ...
-Selecting previously unselected package libhdf5-103:amd64.
-Preparing to unpack .../169-libhdf5-103_1.10.4+repack-10_amd64.deb ...
-Unpacking libhdf5-103:amd64 (1.10.4+repack-10) ...
-Selecting previously unselected package libicu63:amd64.
-Preparing to unpack .../170-libicu63_63.1-6_amd64.deb ...
-Unpacking libicu63:amd64 (63.1-6) ...
-Selecting previously unselected package libimagequant0:amd64.
-Preparing to unpack .../171-libimagequant0_2.12.2-1.1_amd64.deb ...
-Unpacking libimagequant0:amd64 (2.12.2-1.1) ...
-Selecting previously unselected package libjbig0:amd64.
-Preparing to unpack .../172-libjbig0_2.1-3.1+b2_amd64.deb ...
-Unpacking libjbig0:amd64 (2.1-3.1+b2) ...
-Selecting previously unselected package libjpeg62-turbo:amd64.
-Preparing to unpack .../173-libjpeg62-turbo_1%3a1.5.2-2+b1_amd64.deb ...
-Unpacking libjpeg62-turbo:amd64 (1:1.5.2-2+b1) ...
-Selecting previously unselected package libjs-jquery.
-Preparing to unpack .../174-libjs-jquery_3.3.1~dfsg-3_all.deb ...
-Unpacking libjs-jquery (3.3.1~dfsg-3) ...
-Selecting previously unselected package libjs-jquery-ui.
-Preparing to unpack .../175-libjs-jquery-ui_1.12.1+dfsg-5_all.deb ...
-Unpacking libjs-jquery-ui (1.12.1+dfsg-5) ...
-Selecting previously unselected package liblcms2-2:amd64.
-Preparing to unpack .../176-liblcms2-2_2.9-3_amd64.deb ...
-Unpacking liblcms2-2:amd64 (2.9-3) ...
-Selecting previously unselected package liblua5.1-0:amd64.
-Preparing to unpack .../177-liblua5.1-0_5.1.5-8.1+b2_amd64.deb ...
-Unpacking liblua5.1-0:amd64 (5.1.5-8.1+b2) ...
-Selecting previously unselected package liblzo2-2:amd64.
-Preparing to unpack .../178-liblzo2-2_2.10-0.1_amd64.deb ...
-Unpacking liblzo2-2:amd64 (2.10-0.1) ...
-Selecting previously unselected package libpython3.7:amd64.
-Preparing to unpack .../179-libpython3.7_3.7.3-2_amd64.deb ...
-Unpacking libpython3.7:amd64 (3.7.3-2) ...
-Selecting previously unselected package libpython3.7-dev:amd64.
-Preparing to unpack .../180-libpython3.7-dev_3.7.3-2_amd64.deb ...
-Unpacking libpython3.7-dev:amd64 (3.7.3-2) ...
-Selecting previously unselected package libpython3-dev:amd64.
-Preparing to unpack .../181-libpython3-dev_3.7.3-1_amd64.deb ...
-Unpacking libpython3-dev:amd64 (3.7.3-1) ...
-Selecting previously unselected package libsasl2-modules:amd64.
-Preparing to unpack .../182-libsasl2-modules_2.1.27+dfsg-1_amd64.deb ...
-Unpacking libsasl2-modules:amd64 (2.1.27+dfsg-1) ...
-Selecting previously unselected package libwebp6:amd64.
-Preparing to unpack .../183-libwebp6_0.6.1-2_amd64.deb ...
-Unpacking libwebp6:amd64 (0.6.1-2) ...
-Selecting previously unselected package libtiff5:amd64.
-Preparing to unpack .../184-libtiff5_4.0.10-4_amd64.deb ...
-Unpacking libtiff5:amd64 (4.0.10-4) ...
-Selecting previously unselected package libumfpack5:amd64.
-Preparing to unpack .../185-libumfpack5_1%3a5.4.0+dfsg-1_amd64.deb ...
-Unpacking libumfpack5:amd64 (1:5.4.0+dfsg-1) ...
-Selecting previously unselected package libwebpdemux2:amd64.
-Preparing to unpack .../186-libwebpdemux2_0.6.1-2_amd64.deb ...
-Unpacking libwebpdemux2:amd64 (0.6.1-2) ...
-Selecting previously unselected package libwebpmux3:amd64.
-Preparing to unpack .../187-libwebpmux3_0.6.1-2_amd64.deb ...
-Unpacking libwebpmux3:amd64 (0.6.1-2) ...
-Selecting previously unselected package libxml2:amd64.
-Preparing to unpack .../188-libxml2_2.9.4+dfsg1-7+b3_amd64.deb ...
-Unpacking libxml2:amd64 (2.9.4+dfsg1-7+b3) ...
-Selecting previously unselected package libxslt1.1:amd64.
-Preparing to unpack .../189-libxslt1.1_1.1.32-2_amd64.deb ...
-Unpacking libxslt1.1:amd64 (1.1.32-2) ...
-Selecting previously unselected package libyaml-0-2:amd64.
-Preparing to unpack .../190-libyaml-0-2_0.2.1-1_amd64.deb ...
-Unpacking libyaml-0-2:amd64 (0.2.1-1) ...
-Selecting previously unselected package manpages-dev.
-Preparing to unpack .../191-manpages-dev_4.16-2_all.deb ...
-Unpacking manpages-dev (4.16-2) ...
-Selecting previously unselected package pandoc-data.
-Preparing to unpack .../192-pandoc-data_2.2.1-3_all.deb ...
-Unpacking pandoc-data (2.2.1-3) ...
-Selecting previously unselected package pandoc.
-Preparing to unpack .../193-pandoc_2.2.1-3+b2_amd64.deb ...
-Unpacking pandoc (2.2.1-3+b2) ...
-Selecting previously unselected package psmisc.
-Preparing to unpack .../194-psmisc_23.2-1_amd64.deb ...
-Unpacking psmisc (23.2-1) ...
-Selecting previously unselected package python-matplotlib-data.
-Preparing to unpack .../195-python-matplotlib-data_3.0.2-2_all.deb ...
-Unpacking python-matplotlib-data (3.0.2-2) ...
-Selecting previously unselected package python-pip-whl.
-Preparing to unpack .../196-python-pip-whl_18.1-5_all.deb ...
-Unpacking python-pip-whl (18.1-5) ...
-Selecting previously unselected package python-tables-data.
-Preparing to unpack .../197-python-tables-data_3.4.4-2_all.deb ...
-Unpacking python-tables-data (3.4.4-2) ...
-Selecting previously unselected package python3-asn1crypto.
-Preparing to unpack .../198-python3-asn1crypto_0.24.0-1_all.deb ...
-Unpacking python3-asn1crypto (0.24.0-1) ...
-Selecting previously unselected package python3-atomicwrites.
-Preparing to unpack .../199-python3-atomicwrites_1.1.5-2_all.deb ...
-Unpacking python3-atomicwrites (1.1.5-2) ...
-Selecting previously unselected package python3-attr.
-Preparing to unpack .../200-python3-attr_18.2.0-1_all.deb ...
-Unpacking python3-attr (18.2.0-1) ...
-Selecting previously unselected package python3-soupsieve.
-Preparing to unpack .../201-python3-soupsieve_1.8+dfsg-1_all.deb ...
-Unpacking python3-soupsieve (1.8+dfsg-1) ...
-Selecting previously unselected package python3-bs4.
-Preparing to unpack .../202-python3-bs4_4.7.1-1_all.deb ...
-Unpacking python3-bs4 (4.7.1-1) ...
-Selecting previously unselected package python3-cffi-backend.
-Preparing to unpack .../203-python3-cffi-backend_1.12.2-1_amd64.deb ...
-Unpacking python3-cffi-backend (1.12.2-1) ...
-Selecting previously unselected package python3-chardet.
-Preparing to unpack .../204-python3-chardet_3.0.4-3_all.deb ...
-Unpacking python3-chardet (3.0.4-3) ...
-Selecting previously unselected package python3-crypto.
-Preparing to unpack .../205-python3-crypto_2.6.1-9+b1_amd64.deb ...
-Unpacking python3-crypto (2.6.1-9+b1) ...
-Selecting previously unselected package python3-cryptography.
-Preparing to unpack .../206-python3-cryptography_2.6.1-3_amd64.deb ...
-Unpacking python3-cryptography (2.6.1-3) ...
-Selecting previously unselected package python3-cvxopt.
-Preparing to unpack .../207-python3-cvxopt_1.1.9+dfsg-3+b1_amd64.deb ...
-Unpacking python3-cvxopt (1.1.9+dfsg-3+b1) ...
-Selecting previously unselected package python3-cycler.
-Preparing to unpack .../208-python3-cycler_0.10.0-1_all.deb ...
-Unpacking python3-cycler (0.10.0-1) ...
-Selecting previously unselected package python3-dbus.
-Preparing to unpack .../209-python3-dbus_1.2.8-3_amd64.deb ...
-Unpacking python3-dbus (1.2.8-3) ...
-Selecting previously unselected package python3.7-dev.
-Preparing to unpack .../210-python3.7-dev_3.7.3-2_amd64.deb ...
-Unpacking python3.7-dev (3.7.3-2) ...
-Selecting previously unselected package python3-dev.
-Preparing to unpack .../211-python3-dev_3.7.3-1_amd64.deb ...
-Unpacking python3-dev (3.7.3-1) ...
-Selecting previously unselected package python3-gi.
-Preparing to unpack .../212-python3-gi_3.30.4-1_amd64.deb ...
-Unpacking python3-gi (3.30.4-1) ...
-Selecting previously unselected package python3-ipykernel.
-Preparing to unpack .../213-python3-ipykernel_4.9.0-1_all.deb ...
-Unpacking python3-ipykernel (4.9.0-1) ...
-Selecting previously unselected package python3-joblib.
-Preparing to unpack .../214-python3-joblib_0.13.0-2_all.deb ...
-Unpacking python3-joblib (0.13.0-2) ...
-Selecting previously unselected package python3-secretstorage.
-Preparing to unpack .../215-python3-secretstorage_2.3.1-2_all.deb ...
-Unpacking python3-secretstorage (2.3.1-2) ...
-Selecting previously unselected package python3-keyring.
-Preparing to unpack .../216-python3-keyring_17.1.1-1_all.deb ...
-Unpacking python3-keyring (17.1.1-1) ...
-Selecting previously unselected package python3-keyrings.alt.
-Preparing to unpack .../217-python3-keyrings.alt_3.1.1-1_all.deb ...
-Unpacking python3-keyrings.alt (3.1.1-1) ...
-Selecting previously unselected package python3-kiwisolver.
-Preparing to unpack .../218-python3-kiwisolver_1.0.1-2+b1_amd64.deb ...
-Unpacking python3-kiwisolver (1.0.1-2+b1) ...
-Selecting previously unselected package python3-lxml:amd64.
-Preparing to unpack .../219-python3-lxml_4.3.2-1_amd64.deb ...
-Unpacking python3-lxml:amd64 (4.3.2-1) ...
-Selecting previously unselected package python3-pyparsing.
-Preparing to unpack .../220-python3-pyparsing_2.2.0+dfsg1-2_all.deb ...
-Unpacking python3-pyparsing (2.2.0+dfsg1-2) ...
-Selecting previously unselected package python3-numpy.
-Preparing to unpack .../221-python3-numpy_1%3a1.16.2-1_amd64.deb ...
-Unpacking python3-numpy (1:1.16.2-1) ...
-Selecting previously unselected package python3-matplotlib.
-Preparing to unpack .../222-python3-matplotlib_3.0.2-2_amd64.deb ...
-Unpacking python3-matplotlib (3.0.2-2) ...
-Selecting previously unselected package python3-more-itertools.
-Preparing to unpack .../223-python3-more-itertools_4.2.0-1_all.deb ...
-Unpacking python3-more-itertools (4.2.0-1) ...
-Selecting previously unselected package python3-numexpr.
-Preparing to unpack .../224-python3-numexpr_2.6.9-1_amd64.deb ...
-Unpacking python3-numexpr (2.6.9-1) ...
-Selecting previously unselected package python3-olefile.
-Preparing to unpack .../225-python3-olefile_0.46-1_all.deb ...
-Unpacking python3-olefile (0.46-1) ...
-Selecting previously unselected package python3-tz.
-Preparing to unpack .../226-python3-tz_2019.1-1_all.deb ...
-Unpacking python3-tz (2019.1-1) ...
-Selecting previously unselected package python3-pandas-lib.
-Preparing to unpack .../227-python3-pandas-lib_0.23.3+dfsg-3_amd64.deb ...
-Unpacking python3-pandas-lib (0.23.3+dfsg-3) ...
-Selecting previously unselected package python3-pandas.
-Preparing to unpack .../228-python3-pandas_0.23.3+dfsg-3_all.deb ...
-Unpacking python3-pandas (0.23.3+dfsg-3) ...
-Selecting previously unselected package python3-patsy.
-Preparing to unpack .../229-python3-patsy_0.5.0+git13-g54dcf7b-1_all.deb ...
-Unpacking python3-patsy (0.5.0+git13-g54dcf7b-1) ...
-Selecting previously unselected package python3-pil:amd64.
-Preparing to unpack .../230-python3-pil_5.4.1-2_amd64.deb ...
-Unpacking python3-pil:amd64 (5.4.1-2) ...
-Selecting previously unselected package python3-pip.
-Preparing to unpack .../231-python3-pip_18.1-5_all.deb ...
-Unpacking python3-pip (18.1-5) ...
-Selecting previously unselected package python3-pluggy.
-Preparing to unpack .../232-python3-pluggy_0.8.0-1_all.deb ...
-Unpacking python3-pluggy (0.8.0-1) ...
-Selecting previously unselected package python3-psutil.
-Preparing to unpack .../233-python3-psutil_5.5.1-1_amd64.deb ...
-Unpacking python3-psutil (5.5.1-1) ...
-Selecting previously unselected package python3-py.
-Preparing to unpack .../234-python3-py_1.7.0-2_all.deb ...
-Unpacking python3-py (1.7.0-2) ...
-Selecting previously unselected package python3-pytest.
-Preparing to unpack .../235-python3-pytest_3.10.1-2_all.deb ...
-Unpacking python3-pytest (3.10.1-2) ...
-Selecting previously unselected package python3-scipy.
-Preparing to unpack .../236-python3-scipy_1.1.0-7_amd64.deb ...
-Unpacking python3-scipy (1.1.0-7) ...
-Selecting previously unselected package python3-setuptools.
-Preparing to unpack .../237-python3-setuptools_40.8.0-1_all.deb ...
-Unpacking python3-setuptools (40.8.0-1) ...
-Selecting previously unselected package python3-simplejson.
-Preparing to unpack .../238-python3-simplejson_3.16.0-1_amd64.deb ...
-Unpacking python3-simplejson (3.16.0-1) ...
-Selecting previously unselected package python3-statsmodels-lib.
-Preparing to unpack .../239-python3-statsmodels-lib_0.8.0-9_amd64.deb ...
-Unpacking python3-statsmodels-lib (0.8.0-9) ...
-Selecting previously unselected package python3-statsmodels.
-Preparing to unpack .../240-python3-statsmodels_0.8.0-9_all.deb ...
-Unpacking python3-statsmodels (0.8.0-9) ...
-Selecting previously unselected package python3-tables-lib.
-Preparing to unpack .../241-python3-tables-lib_3.4.4-2_amd64.deb ...
-Unpacking python3-tables-lib (3.4.4-2) ...
-Selecting previously unselected package python3-tables.
-Preparing to unpack .../242-python3-tables_3.4.4-2_all.deb ...
-Unpacking python3-tables (3.4.4-2) ...
-Selecting previously unselected package python3-tk:amd64.
-Preparing to unpack .../243-python3-tk_3.7.3-1_amd64.deb ...
-Unpacking python3-tk:amd64 (3.7.3-1) ...
-Selecting previously unselected package python3-wheel.
-Preparing to unpack .../244-python3-wheel_0.32.3-2_all.deb ...
-Unpacking python3-wheel (0.32.3-2) ...
-Selecting previously unselected package python3-xdg.
-Preparing to unpack .../245-python3-xdg_0.25-5_all.deb ...
-Unpacking python3-xdg (0.25-5) ...
-Selecting previously unselected package shared-mime-info.
-Preparing to unpack .../246-shared-mime-info_1.10-1_amd64.deb ...
-Unpacking shared-mime-info (1.10-1) ...
-Selecting previously unselected package xdg-user-dirs.
-Preparing to unpack .../247-xdg-user-dirs_0.17-2_amd64.deb ...
-Unpacking xdg-user-dirs (0.17-2) ...
-Setting up perl-modules-5.28 (5.28.1-6) ...
-Setting up libksba8:amd64 (1.3.5-2) ...
-Setting up javascript-common (11) ...
-Setting up liblcms2-2:amd64 (2.9-3) ...
-Setting up lsb-base (10.2019051400) ...
-Setting up libxau6:amd64 (1:1.0.8-1+b2) ...
-Setting up libkeyutils1:amd64 (1.6-6) ...
-Setting up libapparmor1:amd64 (2.13.2-10) ...
-Setting up ttf-bitstream-vera (1.10-8) ...
-Setting up libsodium23:amd64 (1.0.17-1) ...
-Setting up libgpm2:amd64 (1.20.7-5) ...
-Setting up mime-support (3.62) ...
-Setting up libgslcblas0:amd64 (2.5+dfsg-6) ...
-Setting up xdg-user-dirs (0.17-2) ...
-Setting up libmagic-mgc (1:5.35-4) ...
-Setting up psmisc (23.2-1) ...
-Setting up libyaml-0-2:amd64 (0.2.1-1) ...
-Setting up libglib2.0-0:amd64 (2.58.3-2) ...
-No schema files found: doing nothing.
-Setting up manpages (4.16-2) ...
-Setting up fonts-lyx (2.3.2-1) ...
-Setting up libprocps7:amd64 (2:3.3.15-2) ...
-Setting up libsqlite3-0:amd64 (3.27.2-3) ...
-Setting up libsasl2-modules:amd64 (2.1.27+dfsg-1) ...
-Setting up libnorm1:amd64 (1.5.8+dfsg2-1) ...
-Setting up binutils-common:amd64 (2.31.1-16) ...
-Setting up x11-common (1:7.7+19) ...
-debconf: unable to initialize frontend: Dialog
-debconf: (TERM is not set, so the dialog frontend is not usable.)
-debconf: falling back to frontend: Readline
-update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
-invoke-rc.d: could not determine current runlevel
-invoke-rc.d: policy-rc.d denied execution of start.
-Setting up libmagic1:amd64 (1:5.35-4) ...
-Setting up linux-libc-dev:amd64 (4.19.37-5+deb10u1) ...
-Setting up liblzo2-2:amd64 (2.10-0.1) ...
-Setting up libnpth0:amd64 (1.6-1) ...
-Setting up krb5-locales (1.17-3) ...
-Setting up libmetis5:amd64 (5.1.0.dfsg-5+b2) ...
-Setting up file (1:5.35-4) ...
-Setting up libassuan0:amd64 (2.5.2-1) ...
-Setting up libgomp1:amd64 (8.3.0-6) ...
-Setting up bzip2 (1.0.6-9.1) ...
-Setting up libldap-common (2.4.47+dfsg-3) ...
-Setting up libjbig0:amd64 (2.1-3.1+b2) ...
-Setting up libaec0:amd64 (1.0.2-1) ...
-Setting up libicu63:amd64 (63.1-6) ...
-Setting up libfakeroot:amd64 (1.23-1) ...
-Setting up libsnappy1v5:amd64 (1.1.7-1) ...
-Setting up libkrb5support0:amd64 (1.17-3) ...
-Setting up libsasl2-modules-db:amd64 (2.1.27+dfsg-1) ...
-Setting up fakeroot (1.23-1) ...
-update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode
-Setting up libasan5:amd64 (8.3.0-6) ...
-Setting up libglib2.0-data (2.58.3-2) ...
-Setting up libjpeg62-turbo:amd64 (1:1.5.2-2+b1) ...
-Setting up libx11-data (2:1.6.7-1) ...
-Setting up make (4.2.1-1.2) ...
-Setting up libmpfr6:amd64 (4.0.2-1) ...
-Setting up gnupg-l10n (2.2.12-1) ...
-Setting up libgsl23:amd64 (2.5+dfsg-6) ...
-Setting up libncurses6:amd64 (6.1+20181013-2) ...
-Setting up libdbus-1-3:amd64 (1.12.16-1) ...
-Setting up dbus (1.12.16-1) ...
-invoke-rc.d: could not determine current runlevel
-invoke-rc.d: policy-rc.d denied execution of start.
-Setting up xz-utils (5.2.4-1) ...
-update-alternatives: using /usr/bin/xz to provide /usr/bin/lzma (lzma) in auto mode
-Setting up libquadmath0:amd64 (8.3.0-6) ...
-Setting up libimagequant0:amd64 (2.12.2-1.1) ...
-Setting up libpng16-16:amd64 (1.6.36-6) ...
-Setting up libmpc3:amd64 (1.1.0-1) ...
-Setting up libatomic1:amd64 (8.3.0-6) ...
-Setting up patch (2.7.6-3) ...
-Setting up libtcl8.6:amd64 (8.6.9+dfsg-2) ...
-Setting up libwebp6:amd64 (0.6.1-2) ...
-Setting up libk5crypto3:amd64 (1.17-3) ...
-Setting up libltdl7:amd64 (2.4.6-9) ...
-Setting up libfftw3-double3:amd64 (3.3.8-2) ...
-Setting up libsasl2-2:amd64 (2.1.27+dfsg-1) ...
-Setting up libgfortran5:amd64 (8.3.0-6) ...
-Setting up libmpx2:amd64 (8.3.0-6) ...
-Setting up libubsan1:amd64 (8.3.0-6) ...
-Setting up libisl19:amd64 (0.20-2) ...
-Setting up sensible-utils (0.0.12) ...
-Setting up procps (2:3.3.15-2) ...
-update-alternatives: using /usr/bin/w.procps to provide /usr/bin/w (w) in auto mode
-Setting up liblua5.1-0:amd64 (5.1.5-8.1+b2) ...
-Setting up libblosc1 (1.15.1+ds1-1) ...
-Setting up libgirepository-1.0-1:amd64 (1.58.3-2) ...
-Setting up netbase (5.6) ...
-Setting up libkrb5-3:amd64 (1.17-3) ...
-Setting up libtiff5:amd64 (4.0.10-4) ...
-Setting up libmpdec2:amd64 (2.4.2-2) ...
-Setting up pandoc-data (2.2.1-3) ...
-Setting up libjs-jquery (3.3.1~dfsg-3) ...
-Setting up libbinutils:amd64 (2.31.1-16) ...
-Setting up cpp-8 (8.3.0-6) ...
-Setting up libc-dev-bin (2.28-10) ...
-Setting up python-matplotlib-data (3.0.2-2) ...
-Setting up openssl (1.1.1c-1) ...
-Setting up libwebpmux3:amd64 (0.6.1-2) ...
-Setting up libbsd0:amd64 (0.9.1-2) ...
-Setting up readline-common (7.0-5) ...
-Setting up libxml2:amd64 (2.9.4+dfsg1-7+b3) ...
-Setting up python-tables-data (3.4.4-2) ...
-Setting up libsuitesparseconfig5:amd64 (1:5.4.0+dfsg-1) ...
-Setting up libcc1-0:amd64 (8.3.0-6) ...
-Setting up liblocale-gettext-perl (1.07-3+b4) ...
-Setting up liblsan0:amd64 (8.3.0-6) ...
-Setting up libsz2:amd64 (1.0.2-1) ...
-Setting up libitm1:amd64 (8.3.0-6) ...
-Setting up libreadline7:amd64 (7.0-5) ...
-Setting up libpgm-5.2-0:amd64 (5.2.122~dfsg-3) ...
-Setting up libgdbm6:amd64 (1.18.1-4) ...
-Setting up gnupg-utils (2.2.12-1) ...
-Setting up binutils-x86-64-linux-gnu (2.31.1-16) ...
-Setting up libtsan0:amd64 (8.3.0-6) ...
-Setting up pinentry-curses (1.1.0-2) ...
-Setting up libamd2:amd64 (1:5.4.0+dfsg-1) ...
-Setting up manpages-dev (4.16-2) ...
-Setting up libxdmcp6:amd64 (1:1.1.2-3) ...
-Setting up libpython3.7-stdlib:amd64 (3.7.3-2) ...
-Setting up libxcb1:amd64 (1.13.1-2) ...
-Setting up libcolamd2:amd64 (1:5.4.0+dfsg-1) ...
-Setting up libpython3.7:amd64 (3.7.3-2) ...
-Setting up libwebpdemux2:amd64 (0.6.1-2) ...
-Setting up libldap-2.4-2:amd64 (2.4.47+dfsg-3) ...
-Setting up binutils (2.31.1-16) ...
-Setting up ca-certificates (20190110) ...
-debconf: unable to initialize frontend: Dialog
-debconf: (TERM is not set, so the dialog frontend is not usable.)
-debconf: falling back to frontend: Readline
-Updating certificates in /etc/ssl/certs...
-128 added, 0 removed; done.
-Setting up libcamd2:amd64 (1:5.4.0+dfsg-1) ...
-Setting up libblas3:amd64 (3.8.0-2) ...
-update-alternatives: using /usr/lib/x86_64-linux-gnu/blas/libblas.so.3 to provide /usr/lib/x86_64-linux-gnu/libblas.so.3 (libblas.so.3-x86_64-linux-gnu) in auto mode
-Setting up libjs-jquery-ui (1.12.1+dfsg-5) ...
-Setting up pandoc (2.2.1-3+b2) ...
-Setting up libfreetype6:amd64 (2.9.1-3) ...
-Setting up libglpk40:amd64 (4.65-2) ...
-Setting up libhdf5-103:amd64 (1.10.4+repack-10) ...
-Setting up shared-mime-info (1.10-1) ...
-Setting up libgssapi-krb5-2:amd64 (1.17-3) ...
-Setting up libgdbm-compat4:amd64 (1.18.1-4) ...
-Setting up ucf (3.0038+nmu1) ...
-debconf: unable to initialize frontend: Dialog
-debconf: (TERM is not set, so the dialog frontend is not usable.)
-debconf: falling back to frontend: Readline
-Setting up gir1.2-glib-2.0:amd64 (1.58.3-2) ...
-Setting up libgcc-8-dev:amd64 (8.3.0-6) ...
-Setting up libperl5.28:amd64 (5.28.1-6) ...
-Setting up libccolamd2:amd64 (1:5.4.0+dfsg-1) ...
-Setting up cpp (4:8.3.0-1) ...
-Setting up libxslt1.1:amd64 (1.1.32-2) ...
-Setting up gpgconf (2.2.12-1) ...
-Setting up libc6-dev:amd64 (2.28-10) ...
-Setting up libx11-6:amd64 (2:1.6.7-1) ...
-Setting up python-pip-whl (18.1-5) ...
-Setting up gpg (2.2.12-1) ...
-Setting up libpython3-stdlib:amd64 (3.7.3-1) ...
-Setting up libstdc++-8-dev:amd64 (8.3.0-6) ...
-Setting up python3.7 (3.7.3-2) ...
-Setting up liblapack3:amd64 (3.8.0-2) ...
-update-alternatives: using /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3 to provide /usr/lib/x86_64-linux-gnu/liblapack.so.3 (liblapack.so.3-x86_64-linux-gnu) in auto mode
-Setting up gcc-8 (8.3.0-6) ...
-Setting up gpg-agent (2.2.12-1) ...
-Setting up libzmq5:amd64 (4.3.1-4+deb10u1) ...
-Setting up libxrender1:amd64 (1:0.9.10-1) ...
-Setting up fontconfig-config (2.13.1-2) ...
-debconf: unable to initialize frontend: Dialog
-debconf: (TERM is not set, so the dialog frontend is not usable.)
-debconf: falling back to frontend: Readline
-Setting up gpgsm (2.2.12-1) ...
-Setting up libxext6:amd64 (2:1.3.3-1+b2) ...
-Setting up python3 (3.7.3-1) ...
-running python rtupdate hooks for python3.7...
-running python post-rtupdate hooks for python3.7...
-Setting up python3-pandocfilters (1.4.2-1) ...
-Setting up python3-xdg (0.25-5) ...
-Setting up python3-markupsafe (1.1.0-1) ...
-Setting up python3-wheel (0.32.3-2) ...
-Setting up python3-webencodings (0.5.1-1) ...
-Setting up python3-psutil (5.5.1-1) ...
-Setting up python3-tz (2019.1-1) ...
-Setting up gcc (4:8.3.0-1) ...
-Setting up python3-atomicwrites (1.1.5-2) ...
-Setting up python3-six (1.12.0-1) ...
-Setting up python3-simplejson (3.16.0-1) ...
-Setting up dirmngr (2.2.12-1) ...
-Setting up python3-pil:amd64 (5.4.1-2) ...
-Setting up python3-decorator (4.3.0-1.1) ...
-Setting up perl (5.28.1-6) ...
-Setting up python3-jinja2 (2.10-2) ...
-Setting up python3-pygments (2.3.1+dfsg-1) ...
-Setting up libexpat1-dev:amd64 (2.2.6-2) ...
-Setting up python3-wcwidth (0.1.7+dfsg1-3) ...
-Setting up python3-pyparsing (2.2.0+dfsg1-2) ...
-Setting up libdsdp-5.8gf (5.8-9.4) ...
-Setting up python3-testpath (0.4.2+dfsg-1) ...
-Setting up python3-zmq (17.1.2-2) ...
-Setting up python3-gi (3.30.4-1) ...
-Setting up python3-cycler (0.10.0-1) ...
-Setting up python3-html5lib (1.0.1-1) ...
-Setting up python3-pickleshare (0.7.5-1) ...
-Setting up libdpkg-perl (1.19.7) ...
-Setting up python3-pluggy (0.8.0-1) ...
-Setting up gpg-wks-server (2.2.12-1) ...
-Setting up g++-8 (8.3.0-6) ...
-Setting up python3-lxml:amd64 (4.3.2-1) ...
-Setting up python3-crypto (2.6.1-9+b1) ...
-Setting up python3-dateutil (2.7.3-3) ...
-Setting up libxss1:amd64 (1:1.2.3-1) ...
-Setting up libfontconfig1:amd64 (2.13.1-2) ...
-Setting up python3-simplegeneric (0.8.1-2) ...
-Setting up python3-lib2to3 (3.7.3-1) ...
-Setting up python3-mistune (0.8.4-1) ...
-Setting up python3-asn1crypto (0.24.0-1) ...
-Setting up python3-soupsieve (1.8+dfsg-1) ...
-Setting up libcholmod3:amd64 (1:5.4.0+dfsg-1) ...
-Setting up python3-cffi-backend (1.12.2-1) ...
-Setting up python3-ptyprocess (0.6.0-1) ...
-Setting up python3-pkg-resources (40.8.0-1) ...
-Setting up python3-entrypoints (0.3-1) ...
-Setting up python3-prompt-toolkit (1.0.15-1) ...
-Setting up python3-distutils (3.7.3-1) ...
-Setting up dh-python (3.20190308) ...
-Setting up python3-more-itertools (4.2.0-1) ...
-Setting up python3-attr (18.2.0-1) ...
-Setting up python3-tornado (5.1.1-4) ...
-Setting up python3-dbus (1.2.8-3) ...
-Setting up libxft2:amd64 (2.3.2-2) ...
-Setting up python3-setuptools (40.8.0-1) ...
-Setting up gpg-wks-client (2.2.12-1) ...
-Setting up python3-py (1.7.0-2) ...
-Setting up python3-joblib (0.13.0-2) ...
-Setting up libfile-fcntllock-perl (0.22-3+b5) ...
-Setting up python3-defusedxml (0.5.0-2) ...
-Setting up libalgorithm-diff-perl (1.19.03-2) ...
-Setting up python3-ipython-genutils (0.2.0-1) ...
-Setting up python3-pytest (3.10.1-2) ...
-Setting up libpython3.7-dev:amd64 (3.7.3-2) ...
-Setting up python3-olefile (0.46-1) ...
-Setting up libtk8.6:amd64 (8.6.9-2) ...
-Setting up python3.7-dev (3.7.3-2) ...
-Setting up python3-bs4 (4.7.1-1) ...
-Setting up dpkg-dev (1.19.7) ...
-Setting up python3-bleach (3.1.0-1) ...
-Setting up python3-chardet (3.0.4-3) ...
-Setting up libumfpack5:amd64 (1:5.4.0+dfsg-1) ...
-Setting up python3-jsonschema (2.6.0-4) ...
-update-alternatives: using /usr/bin/python3-jsonschema to provide /usr/bin/jsonschema (jsonschema) in auto mode
-Setting up python3-pexpect (4.6.0-1) ...
-Setting up python3-cryptography (2.6.1-3) ...
-Setting up python3-kiwisolver (1.0.1-2+b1) ...
-Setting up python3-pip (18.1-5) ...
-Setting up python3-numpy (1:1.16.2-1) ...
-Setting up g++ (4:8.3.0-1) ...
-update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode
-Setting up python3-traitlets (4.3.2-1) ...
-Setting up python3-keyrings.alt (3.1.1-1) ...
-Setting up gnupg (2.2.12-1) ...
-Setting up build-essential (12.6) ...
-Setting up libalgorithm-diff-xs-perl (0.04-5+b1) ...
-Setting up python3-statsmodels-lib (0.8.0-9) ...
-Setting up python3-jupyter-core (4.4.0-2) ...
-Setting up libalgorithm-merge-perl (0.08-3) ...
-Setting up tk8.6-blt2.5 (2.5.3+dfsg-4) ...
-Setting up python3-matplotlib (3.0.2-2) ...
-Setting up python3-scipy (1.1.0-7) ...
-Setting up libpython3-dev:amd64 (3.7.3-1) ...
-Setting up python3-cvxopt (1.1.9+dfsg-3+b1) ...
-Setting up python3-tables-lib (3.4.4-2) ...
-Setting up blt (2.5.3+dfsg-4) ...
-Setting up python3-pandas-lib (0.23.3+dfsg-3) ...
-Setting up python3-tk:amd64 (3.7.3-1) ...
-Setting up python3-nbformat (4.4.0-1) ...
-Setting up python3-patsy (0.5.0+git13-g54dcf7b-1) ...
-Setting up python3-pandas (0.23.3+dfsg-3) ...
-Setting up python3-secretstorage (2.3.1-2) ...
-Setting up python3-ipython (5.8.0-1) ...
-Setting up python3-dev (3.7.3-1) ...
-Setting up python3-numexpr (2.6.9-1) ...
-Setting up python3-statsmodels (0.8.0-9) ...
-Setting up python3-keyring (17.1.1-1) ...
-Setting up python3-jupyter-client (5.2.3-1) ...
-Setting up python3-tables (3.4.4-2) ...
-Setting up python3-ipykernel (4.9.0-1) ...
-Setting up python3-nbconvert (5.4-2) ...
-Setting up jupyter-nbconvert (5.4-2) ...
-Processing triggers for libc-bin (2.28-10) ...
-Processing triggers for ca-certificates (20190110) ...
-Updating certificates in /etc/ssl/certs...
-0 added, 0 removed; done.
-Running hooks in /etc/ca-certificates/update.d...
-done.
- ---> 9d49dddc5394
-Removing intermediate container e2a4b2e6b46b
-Successfully built 9d49dddc5394
-#+end_example
-
-Je n'ai pas précisé de nom à mon image. Je le fais maintenant.
-#+begin_src shell :results output :exports both
-docker tag 9d49dddc5394 debian_stable_jupyter_dockerfile:latest
-docker image ls
-#+end_src
-
-#+RESULTS:
-#+begin_example
-REPOSITORY TAG IMAGE ID CREATED SIZE
-debian_stable_jupyter_dockerfile latest 9d49dddc5394 4 minutes ago 960MB
-debian_stable_jupyter latest 2b001b2c02a6 About an hour ago 962MB
-simgrid-website latest 0f3727380ab6 13 days ago 1.19GB
-debian stable 40e13c3c9aab 13 days ago 114MB
-#+end_example
-
-Bon, l'environnement ainsi construit n'est pas rigoureusement
-identique à celui que j'ai construit manuellement. Je vais vérifier
-s'il me permet d'obtenir les mêmes résultats:
-
-#+begin_src shell :session *shell* :results output :exports both
-cp notebook.ipynb notebook_docker_dockerfile.ipynb
-docker run --volume=`pwd`:/tmp debian_stable_jupyter jupyter-nbconvert --to notebook --execute /tmp/notebook_docker_dockerfile.ipynb --output /tmp/notebook_docker_dockerfile.ipynb
-docker run --volume=`pwd`:/tmp debian_stable_jupyter jupyter-nbconvert --to html /tmp/notebook_docker_dockerfile.ipynb
-#+end_src
-
-#+RESULTS:
-:
-: [NbConvertApp] Converting notebook /tmp/notebook_docker_dockerfile.ipynb to notebook
-: [NbConvertApp] Executing notebook with kernel: python3
-: [NbConvertApp] Writing 41346 bytes to /tmp/notebook_docker_dockerfile.ipynb
-: [NbConvertApp] Converting notebook /tmp/notebook_docker_dockerfile.ipynb to html
-: [NbConvertApp] Writing 317721 bytes to /tmp/notebook_docker_dockerfile.html
-
-#+begin_src shell :session *shell* :results output :exports both
-ls -l
-#+end_src
-
-#+RESULTS:
-#+begin_example
-total 1412
--rw-r--r-- 1 alegrand alegrand 305302 Jul 23 09:20 notebook.html
--rw-r--r-- 1 alegrand alegrand 41019 Jul 23 09:19 notebook.ipynb
--rw-r--r-- 1 root root 317832 Jul 23 10:10 notebook_docker.html
--rw-r--r-- 1 alegrand alegrand 41473 Jul 23 10:10 notebook_docker.ipynb
--rw-r--r-- 1 root root 317843 Jul 23 11:13 notebook_docker_dockerfile.html
--rw-r--r-- 1 alegrand alegrand 41473 Jul 23 11:13 notebook_docker_dockerfile.ipynb
--rw-r--r-- 1 alegrand alegrand 305805 Jul 23 09:21 notebook_rerun.html
--rw-r--r-- 1 alegrand alegrand 41473 Jul 23 09:21 notebook_rerun.ipynb
--rw-r--r-- 1 alegrand alegrand 485 Jul 23 09:19 shuttle.csv
-#+end_example
-
-Ah, au moins, cette fois-ci, les deux derniers notebooks
-=notebook_docker_dockerfile.ipynb= et =notebook_docker.ipynb= ont la même
-taille.
-
-#+begin_src shell :session *shell* :results output :exports both
-diff notebook_docker.ipynb notebook_docker_dockerfile.ipynb # | sed 's/^/>/'
-#+end_src
-
-#+RESULTS:
-:
-: 538c538
-: < "
Time:
08:10:00
Pearson chi2:
0.236
\n",
-: ---
-: > "
Time:
09:13:51
Pearson chi2:
0.236
\n",
-: 567c567
-: < "Time: 08:10:00 Pearson chi2: 0.236\n",
-: ---
-: > "Time: 09:13:51 Pearson chi2: 0.236\n",
-
-Ouf, cette fois-ci, il n'y a plus que la date qui ait changé.
-*** Mettre son image à disposition
-Reste à publier mon image. Je me suis créé un compte sur dockerhub
-afin de pouvoir y publier des images (vous pouvez aussi vous
-authentifier via github). Une fois que vous aurez votre login et votre
-mot de passe, il vous faudra les fournir au docker de votre machine
-via cette commande:
-# https://docs.docker.com/engine/reference/commandline/push/
-
-#+begin_src shell :session *shell* :results output :exports both
-docker login # login: alegrand38 passwd: XXXXXXXXXXX
-#+end_src
-
-Il vous faudra ensuite donner à votre image docker le nom qui
-apparaîtra sur dockerhub. Je choisis ici mon login suivi de
-=moocrr_jupyter=:
-#+begin_src shell :session *shell* :results output :exports both
-docker tag debian_stable_jupyter_dockerfile alegrand38/moocrr_jupyter
-#+end_src
-
-#+RESULTS:
-
-Je peux enfin publier mon image (attention, si vous êtes derrière une
-connexion ADSL, c'est long!):
-#+begin_src shell :results output :exports both
-docker push alegrand38/moocrr_jupyter
-#+end_src
-
-#+RESULTS:
-#+begin_example
-The push refers to a repository [docker.io/alegrand38/moocrr_jupyter]
-92d1efe6875b: Pushing [=====================================> ] 638.8MB/846.4MB
-92d1efe6875b: Pushed
-
-latest: digest: sha256:310d1018e5bfb831aa429b58d9b4073e68200c644ae92de1bc5e7f24ac6e6dd3 size: 742
-#+end_example
-
-Vous pouvez remarquer que deux "images" ont été poussées: une petite
-de 200MB et une grosse de 846MB. La première correspond à l'image de
-base que nous avons utilisée et la seconde à ce qui a été
-rajouté/modifié à la suite de notre mise à jour et de l'installation
-de python et de jupyter.
-
-Vos collègues peuvent maintenant récupérer cette image sans problème
-et la réutiliser.
-** Tester que votre code s'exécute correctement ailleurs que sur votre machine.
-Je montrerais ensuite CI (sur la branche master) et comment utiliser
-ces commandes pour que l'image soit capable d'exécuter notre notebook.
-
-https://docs.gitlab.com/ee/ci/quick_start/
-
-*** Création d'un projet test et mise en place de l'intégration continue
-Je commence par créer un projet jouet sur gitlab, que je clone ensuite
-sur mon disque.
-#+begin_src shell :results output :exports both
-git clone git@gitlab.inria.fr:learninglab/mooc-rr/test_jupyter.git
-#+end_src
-
-#+RESULTS:
-
-#+begin_src shell :results output :exports both
-ls test_jupyter/
-#+end_src
-
-#+RESULTS:
-: README.md
-
-Parfait, maintenant, nous mettons à la racine de ce dépot une fichier
-=.gitlab-ci.yml= qui va partir d'une image docker et effectuer une série
-de commandes.
-
-#+begin_src shell :results output :exports both :tangle test_jupyter/.gitlab-ci.yml.old
-image: "debian:stable"
-
-before_script:
- - perl -v
- - which perl
-
-perl_addition:
- script:
- - perl -e "print(3+2);"
-
-perl_multiplication:
- script:
- - perl -e "print(3*2);"
-#+end_src
-
-#+begin_src shell :results output :exports both
-cd test_jupyter
-git add .gitlab-ci.yml
-git commit -m "Adding a gitlab-ci file"
-git push
-#+end_src
-
-#+RESULTS:
-: [master b74a444] Adding a gitlab-ci file
-: 1 file changed, 13 insertions(+)
-: create mode 100644 .gitlab-ci.yml
-
-
-On peut ensuite aller sur la page des commits:
-- https://gitlab.inria.fr/learninglab/mooc-rr/test_jupyter/commits/
-- https://gitlab.inria.fr/learninglab/mooc-rr/test_jupyter/commit/b74a444042bf081cf72b12b932494702d11d0299/pipelines?ref=master
-
-
-*** Et maintenant, Jupyter avec notre image docker!
-Copions notre notebook et ses données dans notre projet:
-
-#+begin_src shell :results output :exports both
-cd test_jupyter/
-cp ../mooc_docker/notebook.ipynb ../mooc_docker/shuttle.csv ./
-git add notebook.ipynb shuttle.csv
-git commit -m "Adding a jupyter notebook"
-git push
-#+end_src
-
-#+RESULTS:
-: [master cd67d8b] Adding a jupyter notebook
-: 2 files changed, 737 insertions(+)
-: create mode 100644 notebook.ipynb
-: create mode 100644 shuttle.csv
-
-Changeons le docker file.
-
-#+begin_src shell :results output :exports both :tangle test_jupyter/.gitlab-ci.yml.old2
-image: "debian:stable"
-
-before_script:
- - apt-get update && apt-get install -y python3 jupyter-nbconvert python3-ipykernel python3-matplotlib python3-pandas python3-numpy python3-statsmodels
- - python3 --version
- - jupyter-nbconvert --version
-
-jupyter:
- script:
- - jupyter-nbconvert --to notebook --execute notebook.ipynb --output notebook.ipynb
- - jupyter-nbconvert --to html notebook.ipynb
-#+end_src
-
-#+begin_src shell :results output :exports both
-cd test_jupyter
-git add .gitlab-ci.yml
-git commit -m "Updating gitlab-ci file for Jupyter"
-git push
-#+end_src
-
-#+RESULTS:
-: [master 0b796ae] Updating gitlab-ci file for Jupyter
-: 1 file changed, 1 insertion(+), 4 deletions(-)
-
-Problème, en faisant cela à chaque fois, c'est:
- A. Très lent (au moindre commit de correction orthographique), on
- fait télécharger des tonnes de paquets.
- B. Pas stable puisqu'on reconstruit sans rien maîtriser.
-
-Une meilleur solution:
-#+begin_src shell :results output :exports both :tangle test_jupyter/.gitlab-ci.yml
-jupyter_frozen:
- image: "alegrand38/moocrr_jupyter"
- before_script:
- - python3 --version
- - jupyter-nbconvert --version
- script:
- - jupyter-nbconvert --to notebook --execute notebook.ipynb --output notebook.ipynb
- - jupyter-nbconvert --to html notebook.ipynb
-
-jupyter_uptodate:
- image: "debian:stable"
- before_script:
- - apt-get update && apt-get install -y python3 jupyter-nbconvert python3-ipykernel python3-matplotlib python3-pandas python3-numpy python3-statsmodels
- - python3 --version
- - jupyter-nbconvert --version
- script:
- - jupyter-nbconvert --to notebook --execute notebook.ipynb --output notebook.ipynb
- - jupyter-nbconvert --to html notebook.ipynb
-#+end_src
-
-#+begin_src shell :results output :exports both
-cd test_jupyter
-git add .gitlab-ci.yml
-git commit -m "Updating gitlab-ci file for Jupyter"
-git push
-#+end_src
-
-#+RESULTS:
-: [master a84baef] Updating gitlab-ci file for Jupyter
-: 1 file changed, 4 insertions(+), 5 deletions(-)
-
-
-Première chose à faire: activer l'intégration continue:
-- https://gitlab.inria.fr/learninglab/mooc-rr/test_jupyter/edit
- (Settings/General/Permissions)
-- Passer par le container registry de gitlab ?
-
-Puis: https://gitlab.inria.fr/alegrand/test_jupyter/pipelines
-- Mais https://gitlab.inria.fr/alegrand/test_jupyter/pipelines/88234:
- stuck car pas de runner configuré.
-- https://gitlab.inria.fr/alegrand/test_jupyter/-/settings/ci_cd
- (Settings/CI-CD)
- - Shared runners are disabled for the INRIA Gitlab instance.
-
-** Améliorer le test
- Je peux alors montrer (a) comment utiliser l'environnement figé pour
- s'assurer que nos propres modifications du notebook n'ont rien cassé
- et (b) comment utiliser l'environnement qui se met à jour
- régulièrement pour s'assurer que l'évolution de l'extérieur ne remet
- pas en cause nos résultats.
-** Aller plus loin
-7. Enfin, pour s'occuper du point (B) sans passer par un docker
- build/push manuel, je montrerais comment (sur une debian, par
- exemple) améliorer le dockerfile afin d'expliciter les numéros de
- version et de figer les sources des paquets. Tout est alors
- explicite, figé, et construit sur une autre machine, ce qui ne
- garantie rien mais renforce les chances que quelqu'un d'autre arrive
- à reproduire cet environnement. Ça ouvre la voie à nix/guix qui
- permettent d'expliciter finement tout ça mais dont je maîtrise mal
- l'interaction avec docker. Mais je demanderai aux Nixiens autour de
- moi ou à Ludovic Courtes.
-
-Une fois le push effectué, une information bien plus précise que le
-dockerfile:
-
-#+begin_src shell :results output :exports both
-docker run alegrand38/moocrr_jupyter dpkg --list
-#+end_src
-
-#+RESULTS:
-#+begin_example
-Desired=Unknown/Install/Remove/Purge/Hold
-| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
-|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
-||/ Name Version Architecture Description
-+++-===========================-======================-============-===============================================================================
-ii adduser 3.118 all add and remove users and groups
-ii apt 1.8.2 amd64 commandline package manager
-ii base-files 10.3 amd64 Debian base system miscellaneous files
-ii base-passwd 3.5.46 amd64 Debian base system master password and group files
-ii bash 5.0-4 amd64 GNU Bourne Again SHell
-ii binutils 2.31.1-16 amd64 GNU assembler, linker and binary utilities
-ii binutils-common:amd64 2.31.1-16 amd64 Common files for the GNU assembler, linker and binary utilities
-ii binutils-x86-64-linux-gnu 2.31.1-16 amd64 GNU binary utilities, for x86-64-linux-gnu target
-ii blt 2.5.3+dfsg-4 amd64 graphics extension library for Tcl/Tk - run-time
-ii bsdutils 1:2.33.1-0.1 amd64 basic utilities from 4.4BSD-Lite
-ii build-essential 12.6 amd64 Informational list of build-essential packages
-ii bzip2 1.0.6-9.1 amd64 high-quality block-sorting file compressor - utilities
-ii ca-certificates 20190110 all Common CA certificates
-ii coreutils 8.30-3 amd64 GNU core utilities
-ii cpp 4:8.3.0-1 amd64 GNU C preprocessor (cpp)
-ii cpp-8 8.3.0-6 amd64 GNU C preprocessor
-ii dash 0.5.10.2-5 amd64 POSIX-compliant shell
-ii dbus 1.12.16-1 amd64 simple interprocess messaging system (daemon and utilities)
-ii debconf 1.5.71 all Debian configuration management system
-ii debian-archive-keyring 2019.1 all GnuPG archive keys of the Debian archive
-ii debianutils 4.8.6.1 amd64 Miscellaneous utilities specific to Debian
-ii dh-python 3.20190308 all Debian helper tools for packaging Python libraries and applications
-ii diffutils 1:3.7-3 amd64 File comparison utilities
-ii dirmngr 2.2.12-1 amd64 GNU privacy guard - network certificate management service
-ii dpkg 1.19.7 amd64 Debian package management system
-ii dpkg-dev 1.19.7 all Debian package development tools
-ii e2fsprogs 1.44.5-1 amd64 ext2/ext3/ext4 file system utilities
-ii fakeroot 1.23-1 amd64 tool for simulating superuser privileges
-ii fdisk 2.33.1-0.1 amd64 collection of partitioning utilities
-ii file 1:5.35-4 amd64 Recognize the type of data in a file using "magic" numbers
-ii findutils 4.6.0+git+20190209-2 amd64 utilities for finding files--find, xargs
-ii fontconfig-config 2.13.1-2 all generic font configuration library - configuration
-ii fonts-lyx 2.3.2-1 all TrueType versions of some TeX fonts used by LyX
-ii g++ 4:8.3.0-1 amd64 GNU C++ compiler
-ii g++-8 8.3.0-6 amd64 GNU C++ compiler
-ii gcc 4:8.3.0-1 amd64 GNU C compiler
-ii gcc-8 8.3.0-6 amd64 GNU C compiler
-ii gcc-8-base:amd64 8.3.0-6 amd64 GCC, the GNU Compiler Collection (base package)
-ii gir1.2-glib-2.0:amd64 1.58.3-2 amd64 Introspection data for GLib, GObject, Gio and GModule
-ii gnupg 2.2.12-1 all GNU privacy guard - a free PGP replacement
-ii gnupg-l10n 2.2.12-1 all GNU privacy guard - localization files
-ii gnupg-utils 2.2.12-1 amd64 GNU privacy guard - utility programs
-ii gpg 2.2.12-1 amd64 GNU Privacy Guard -- minimalist public key operations
-ii gpg-agent 2.2.12-1 amd64 GNU privacy guard - cryptographic agent
-ii gpg-wks-client 2.2.12-1 amd64 GNU privacy guard - Web Key Service client
-ii gpg-wks-server 2.2.12-1 amd64 GNU privacy guard - Web Key Service server
-ii gpgconf 2.2.12-1 amd64 GNU privacy guard - core configuration utilities
-ii gpgsm 2.2.12-1 amd64 GNU privacy guard - S/MIME version
-ii gpgv 2.2.12-1 amd64 GNU privacy guard - signature verification tool
-ii grep 3.3-1 amd64 GNU grep, egrep and fgrep
-ii gzip 1.9-3 amd64 GNU compression utilities
-ii hostname 3.21 amd64 utility to set/show the host name or domain name
-ii init-system-helpers 1.56+nmu1 all helper tools for all init systems
-ii iproute2 4.20.0-2 amd64 networking and traffic control tools
-ii iputils-ping 3:20180629-2 amd64 Tools to test the reachability of network hosts
-ii javascript-common 11 all Base support for JavaScript library packages
-ii jupyter-nbconvert 5.4-2 all Jupyter notebook conversion (scripts)
-ii krb5-locales 1.17-3 all internationalization support for MIT Kerberos
-ii libacl1:amd64 2.2.53-4 amd64 access control list - shared library
-ii libaec0:amd64 1.0.2-1 amd64 Adaptive Entropy Coding library
-ii libalgorithm-diff-perl 1.19.03-2 all module to find differences between files
-ii libalgorithm-diff-xs-perl 0.04-5+b1 amd64 module to find differences between files (XS accelerated)
-ii libalgorithm-merge-perl 0.08-3 all Perl module for three-way merge of textual data
-ii libamd2:amd64 1:5.4.0+dfsg-1 amd64 approximate minimum degree ordering library for sparse matrices
-ii libapparmor1:amd64 2.13.2-10 amd64 changehat AppArmor library
-ii libapt-pkg5.0:amd64 1.8.2 amd64 package management runtime library
-ii libasan5:amd64 8.3.0-6 amd64 AddressSanitizer -- a fast memory error detector
-ii libassuan0:amd64 2.5.2-1 amd64 IPC library for the GnuPG components
-ii libatomic1:amd64 8.3.0-6 amd64 support library providing __atomic built-in functions
-ii libattr1:amd64 1:2.4.48-4 amd64 extended attribute handling - shared library
-ii libaudit-common 1:2.8.4-3 all Dynamic library for security auditing - common files
-ii libaudit1:amd64 1:2.8.4-3 amd64 Dynamic library for security auditing
-ii libbinutils:amd64 2.31.1-16 amd64 GNU binary utilities (private shared library)
-ii libblas3:amd64 3.8.0-2 amd64 Basic Linear Algebra Reference implementations, shared library
-ii libblkid1:amd64 2.33.1-0.1 amd64 block device ID library
-ii libblosc1 1.15.1+ds1-1 amd64 high performance meta-compressor optimized for binary data
-ii libbsd0:amd64 0.9.1-2 amd64 utility functions from BSD systems - shared library
-ii libbz2-1.0:amd64 1.0.6-9.1 amd64 high-quality block-sorting file compressor library - runtime
-ii libc-bin 2.28-10 amd64 GNU C Library: Binaries
-ii libc-dev-bin 2.28-10 amd64 GNU C Library: Development binaries
-ii libc6:amd64 2.28-10 amd64 GNU C Library: Shared libraries
-ii libc6-dev:amd64 2.28-10 amd64 GNU C Library: Development Libraries and Header Files
-ii libcamd2:amd64 1:5.4.0+dfsg-1 amd64 symmetric approximate minimum degree library for sparse matrices
-ii libcap-ng0:amd64 0.7.9-2 amd64 An alternate POSIX capabilities library
-ii libcap2:amd64 1:2.25-2 amd64 POSIX 1003.1e capabilities (library)
-ii libcap2-bin 1:2.25-2 amd64 POSIX 1003.1e capabilities (utilities)
-ii libcc1-0:amd64 8.3.0-6 amd64 GCC cc1 plugin for GDB
-ii libccolamd2:amd64 1:5.4.0+dfsg-1 amd64 constrained column approximate library for sparse matrices
-ii libcholmod3:amd64 1:5.4.0+dfsg-1 amd64 sparse Cholesky factorization library for sparse matrices
-ii libcolamd2:amd64 1:5.4.0+dfsg-1 amd64 column approximate minimum degree ordering library for sparse matrices
-ii libcom-err2:amd64 1.44.5-1 amd64 common error description library
-ii libdb5.3:amd64 5.3.28+dfsg1-0.5 amd64 Berkeley v5.3 Database Libraries [runtime]
-ii libdbus-1-3:amd64 1.12.16-1 amd64 simple interprocess messaging system (library)
-ii libdebconfclient0:amd64 0.249 amd64 Debian Configuration Management System (C-implementation library)
-ii libdpkg-perl 1.19.7 all Dpkg perl modules
-ii libdsdp-5.8gf 5.8-9.4 amd64 Software for Semidefinite Programming
-ii libelf1:amd64 0.176-1.1 amd64 library to read and write ELF files
-ii libexpat1:amd64 2.2.6-2 amd64 XML parsing C library - runtime library
-ii libexpat1-dev:amd64 2.2.6-2 amd64 XML parsing C library - development kit
-ii libext2fs2:amd64 1.44.5-1 amd64 ext2/ext3/ext4 file system libraries
-ii libfakeroot:amd64 1.23-1 amd64 tool for simulating superuser privileges - shared libraries
-ii libfdisk1:amd64 2.33.1-0.1 amd64 fdisk partitioning library
-ii libffi6:amd64 3.2.1-9 amd64 Foreign Function Interface library runtime
-ii libfftw3-double3:amd64 3.3.8-2 amd64 Library for computing Fast Fourier Transforms - Double precision
-ii libfile-fcntllock-perl 0.22-3+b5 amd64 Perl module for file locking with fcntl(2)
-ii libfontconfig1:amd64 2.13.1-2 amd64 generic font configuration library - runtime
-ii libfreetype6:amd64 2.9.1-3 amd64 FreeType 2 font engine, shared library files
-ii libgcc-8-dev:amd64 8.3.0-6 amd64 GCC support library (development files)
-ii libgcc1:amd64 1:8.3.0-6 amd64 GCC support library
-ii libgcrypt20:amd64 1.8.4-5 amd64 LGPL Crypto library - runtime library
-ii libgdbm-compat4:amd64 1.18.1-4 amd64 GNU dbm database routines (legacy support runtime version)
-ii libgdbm6:amd64 1.18.1-4 amd64 GNU dbm database routines (runtime version)
-ii libgfortran5:amd64 8.3.0-6 amd64 Runtime library for GNU Fortran applications
-ii libgirepository-1.0-1:amd64 1.58.3-2 amd64 Library for handling GObject introspection data (runtime library)
-ii libglib2.0-0:amd64 2.58.3-2 amd64 GLib library of C routines
-ii libglib2.0-data 2.58.3-2 all Common files for GLib library
-ii libglpk40:amd64 4.65-2 amd64 linear programming kit with integer (MIP) support
-ii libgmp10:amd64 2:6.1.2+dfsg-4 amd64 Multiprecision arithmetic library
-ii libgnutls30:amd64 3.6.7-4 amd64 GNU TLS library - main runtime library
-ii libgomp1:amd64 8.3.0-6 amd64 GCC OpenMP (GOMP) support library
-ii libgpg-error0:amd64 1.35-1 amd64 GnuPG development runtime library
-ii libgpm2:amd64 1.20.7-5 amd64 General Purpose Mouse - shared library
-ii libgsl23:amd64 2.5+dfsg-6 amd64 GNU Scientific Library (GSL) -- library package
-ii libgslcblas0:amd64 2.5+dfsg-6 amd64 GNU Scientific Library (GSL) -- blas library package
-ii libgssapi-krb5-2:amd64 1.17-3 amd64 MIT Kerberos runtime libraries - krb5 GSS-API Mechanism
-ii libhdf5-103:amd64 1.10.4+repack-10 amd64 Hierarchical Data Format 5 (HDF5) - runtime files - serial version
-ii libhogweed4:amd64 3.4.1-1 amd64 low level cryptographic library (public-key cryptos)
-ii libicu63:amd64 63.1-6 amd64 International Components for Unicode
-ii libidn2-0:amd64 2.0.5-1 amd64 Internationalized domain names (IDNA2008/TR46) library
-ii libimagequant0:amd64 2.12.2-1.1 amd64 palette quantization library
-ii libisl19:amd64 0.20-2 amd64 manipulating sets and relations of integer points bounded by linear constraints
-ii libitm1:amd64 8.3.0-6 amd64 GNU Transactional Memory Library
-ii libjbig0:amd64 2.1-3.1+b2 amd64 JBIGkit libraries
-ii libjpeg62-turbo:amd64 1:1.5.2-2+b1 amd64 libjpeg-turbo JPEG runtime library
-ii libjs-jquery 3.3.1~dfsg-3 all JavaScript library for dynamic web applications
-ii libjs-jquery-ui 1.12.1+dfsg-5 all JavaScript UI library for dynamic web applications
-ii libk5crypto3:amd64 1.17-3 amd64 MIT Kerberos runtime libraries - Crypto Library
-ii libkeyutils1:amd64 1.6-6 amd64 Linux Key Management Utilities (library)
-ii libkrb5-3:amd64 1.17-3 amd64 MIT Kerberos runtime libraries
-ii libkrb5support0:amd64 1.17-3 amd64 MIT Kerberos runtime libraries - Support library
-ii libksba8:amd64 1.3.5-2 amd64 X.509 and CMS support library
-ii liblapack3:amd64 3.8.0-2 amd64 Library of linear algebra routines 3 - shared version
-ii liblcms2-2:amd64 2.9-3 amd64 Little CMS 2 color management library
-ii libldap-2.4-2:amd64 2.4.47+dfsg-3 amd64 OpenLDAP libraries
-ii libldap-common 2.4.47+dfsg-3 all OpenLDAP common files for libraries
-ii liblocale-gettext-perl 1.07-3+b4 amd64 module using libc functions for internationalization in Perl
-ii liblsan0:amd64 8.3.0-6 amd64 LeakSanitizer -- a memory leak detector (runtime)
-ii libltdl7:amd64 2.4.6-9 amd64 System independent dlopen wrapper for GNU libtool
-ii liblua5.1-0:amd64 5.1.5-8.1+b2 amd64 Shared library for the Lua interpreter version 5.1
-ii liblz4-1:amd64 1.8.3-1 amd64 Fast LZ compression algorithm library - runtime
-ii liblzma5:amd64 5.2.4-1 amd64 XZ-format compression library
-ii liblzo2-2:amd64 2.10-0.1 amd64 data compression library
-ii libmagic-mgc 1:5.35-4 amd64 File type determination library using "magic" numbers (compiled magic file)
-ii libmagic1:amd64 1:5.35-4 amd64 Recognize the type of data in a file using "magic" numbers - library
-ii libmetis5:amd64 5.1.0.dfsg-5+b2 amd64 Serial Graph Partitioning and Fill-reducing Matrix Ordering
-ii libmnl0:amd64 1.0.4-2 amd64 minimalistic Netlink communication library
-ii libmount1:amd64 2.33.1-0.1 amd64 device mounting library
-ii libmpc3:amd64 1.1.0-1 amd64 multiple precision complex floating-point library
-ii libmpdec2:amd64 2.4.2-2 amd64 library for decimal floating point arithmetic (runtime library)
-ii libmpfr6:amd64 4.0.2-1 amd64 multiple precision floating-point computation
-ii libmpx2:amd64 8.3.0-6 amd64 Intel memory protection extensions (runtime)
-ii libncurses6:amd64 6.1+20181013-2 amd64 shared libraries for terminal handling
-ii libncursesw6:amd64 6.1+20181013-2 amd64 shared libraries for terminal handling (wide character support)
-ii libnettle6:amd64 3.4.1-1 amd64 low level cryptographic library (symmetric and one-way cryptos)
-ii libnorm1:amd64 1.5.8+dfsg2-1 amd64 NACK-Oriented Reliable Multicast (NORM) library
-ii libnpth0:amd64 1.6-1 amd64 replacement for GNU Pth using system threads
-ii libp11-kit0:amd64 0.23.15-2 amd64 library for loading and coordinating access to PKCS#11 modules - runtime
-ii libpam-modules:amd64 1.3.1-5 amd64 Pluggable Authentication Modules for PAM
-ii libpam-modules-bin 1.3.1-5 amd64 Pluggable Authentication Modules for PAM - helper binaries
-ii libpam-runtime 1.3.1-5 all Runtime support for the PAM library
-ii libpam0g:amd64 1.3.1-5 amd64 Pluggable Authentication Modules library
-ii libpcre3:amd64 2:8.39-12 amd64 Old Perl 5 Compatible Regular Expression Library - runtime files
-ii libperl5.28:amd64 5.28.1-6 amd64 shared Perl library
-ii libpgm-5.2-0:amd64 5.2.122~dfsg-3 amd64 OpenPGM shared library
-ii libpng16-16:amd64 1.6.36-6 amd64 PNG library - runtime (version 1.6)
-ii libprocps7:amd64 2:3.3.15-2 amd64 library for accessing process information from /proc
-ii libpython3-dev:amd64 3.7.3-1 amd64 header files and a static library for Python (default)
-ii libpython3-stdlib:amd64 3.7.3-1 amd64 interactive high-level object-oriented language (default python3 version)
-ii libpython3.7:amd64 3.7.3-2 amd64 Shared Python runtime library (version 3.7)
-ii libpython3.7-dev:amd64 3.7.3-2 amd64 Header files and a static library for Python (v3.7)
-ii libpython3.7-minimal:amd64 3.7.3-2 amd64 Minimal subset of the Python language (version 3.7)
-ii libpython3.7-stdlib:amd64 3.7.3-2 amd64 Interactive high-level object-oriented language (standard library, version 3.7)
-ii libquadmath0:amd64 8.3.0-6 amd64 GCC Quad-Precision Math Library
-ii libreadline7:amd64 7.0-5 amd64 GNU readline and history libraries, run-time libraries
-ii libsasl2-2:amd64 2.1.27+dfsg-1 amd64 Cyrus SASL - authentication abstraction library
-ii libsasl2-modules:amd64 2.1.27+dfsg-1 amd64 Cyrus SASL - pluggable authentication modules
-ii libsasl2-modules-db:amd64 2.1.27+dfsg-1 amd64 Cyrus SASL - pluggable authentication modules (DB)
-ii libseccomp2:amd64 2.3.3-4 amd64 high level interface to Linux seccomp filter
-ii libselinux1:amd64 2.8-1+b1 amd64 SELinux runtime shared libraries
-ii libsemanage-common 2.8-2 all Common files for SELinux policy management libraries
-ii libsemanage1:amd64 2.8-2 amd64 SELinux policy management library
-ii libsepol1:amd64 2.8-1 amd64 SELinux library for manipulating binary security policies
-ii libsmartcols1:amd64 2.33.1-0.1 amd64 smart column output alignment library
-ii libsnappy1v5:amd64 1.1.7-1 amd64 fast compression/decompression library
-ii libsodium23:amd64 1.0.17-1 amd64 Network communication, cryptography and signaturing library
-ii libsqlite3-0:amd64 3.27.2-3 amd64 SQLite 3 shared library
-ii libss2:amd64 1.44.5-1 amd64 command-line interface parsing library
-ii libssl1.1:amd64 1.1.1c-1 amd64 Secure Sockets Layer toolkit - shared libraries
-ii libstdc++-8-dev:amd64 8.3.0-6 amd64 GNU Standard C++ Library v3 (development files)
-ii libstdc++6:amd64 8.3.0-6 amd64 GNU Standard C++ Library v3
-ii libsuitesparseconfig5:amd64 1:5.4.0+dfsg-1 amd64 configuration routines for all SuiteSparse modules
-ii libsystemd0:amd64 241-5 amd64 systemd utility library
-ii libsz2:amd64 1.0.2-1 amd64 Adaptive Entropy Coding library - SZIP
-ii libtasn1-6:amd64 4.13-3 amd64 Manage ASN.1 structures (runtime)
-ii libtcl8.6:amd64 8.6.9+dfsg-2 amd64 Tcl (the Tool Command Language) v8.6 - run-time library files
-ii libtiff5:amd64 4.0.10-4 amd64 Tag Image File Format (TIFF) library
-ii libtinfo6:amd64 6.1+20181013-2 amd64 shared low-level terminfo library for terminal handling
-ii libtk8.6:amd64 8.6.9-2 amd64 Tk toolkit for Tcl and X11 v8.6 - run-time files
-ii libtsan0:amd64 8.3.0-6 amd64 ThreadSanitizer -- a Valgrind-based detector of data races (runtime)
-ii libubsan1:amd64 8.3.0-6 amd64 UBSan -- undefined behaviour sanitizer (runtime)
-ii libudev1:amd64 241-5 amd64 libudev shared library
-ii libumfpack5:amd64 1:5.4.0+dfsg-1 amd64 sparse LU factorization library
-ii libunistring2:amd64 0.9.10-1 amd64 Unicode string library for C
-ii libuuid1:amd64 2.33.1-0.1 amd64 Universally Unique ID library
-ii libwebp6:amd64 0.6.1-2 amd64 Lossy compression of digital photographic images.
-ii libwebpdemux2:amd64 0.6.1-2 amd64 Lossy compression of digital photographic images.
-ii libwebpmux3:amd64 0.6.1-2 amd64 Lossy compression of digital photographic images.
-ii libx11-6:amd64 2:1.6.7-1 amd64 X11 client-side library
-ii libx11-data 2:1.6.7-1 all X11 client-side library
-ii libxau6:amd64 1:1.0.8-1+b2 amd64 X11 authorisation library
-ii libxcb1:amd64 1.13.1-2 amd64 X C Binding
-ii libxdmcp6:amd64 1:1.1.2-3 amd64 X11 Display Manager Control Protocol library
-ii libxext6:amd64 2:1.3.3-1+b2 amd64 X11 miscellaneous extension library
-ii libxft2:amd64 2.3.2-2 amd64 FreeType-based font drawing library for X
-ii libxml2:amd64 2.9.4+dfsg1-7+b3 amd64 GNOME XML library
-ii libxrender1:amd64 1:0.9.10-1 amd64 X Rendering Extension client library
-ii libxslt1.1:amd64 1.1.32-2 amd64 XSLT 1.0 processing library - runtime library
-ii libxss1:amd64 1:1.2.3-1 amd64 X11 Screen Saver extension library
-ii libxtables12:amd64 1.8.2-4 amd64 netfilter xtables library
-ii libyaml-0-2:amd64 0.2.1-1 amd64 Fast YAML 1.1 parser and emitter library
-ii libzmq5:amd64 4.3.1-4+deb10u1 amd64 lightweight messaging kernel (shared library)
-ii libzstd1:amd64 1.3.8+dfsg-3 amd64 fast lossless compression algorithm
-ii linux-libc-dev:amd64 4.19.37-5+deb10u1 amd64 Linux support headers for userspace development
-ii login 1:4.5-1.1 amd64 system login tools
-ii lsb-base 10.2019051400 all Linux Standard Base init script functionality
-ii make 4.2.1-1.2 amd64 utility for directing compilation
-ii manpages 4.16-2 all Manual pages about using a GNU/Linux system
-ii manpages-dev 4.16-2 all Manual pages about using GNU/Linux for development
-ii mawk 1.3.3-17+b3 amd64 a pattern scanning and text processing language
-ii mime-support 3.62 all MIME files 'mime.types' & 'mailcap', and support programs
-ii mount 2.33.1-0.1 amd64 tools for mounting and manipulating filesystems
-ii ncurses-base 6.1+20181013-2 all basic terminal type definitions
-ii ncurses-bin 6.1+20181013-2 amd64 terminal-related programs and man pages
-ii netbase 5.6 all Basic TCP/IP networking system
-ii openssl 1.1.1c-1 amd64 Secure Sockets Layer toolkit - cryptographic utility
-ii pandoc 2.2.1-3+b2 amd64 general markup converter
-ii pandoc-data 2.2.1-3 all general markup converter - data files
-ii passwd 1:4.5-1.1 amd64 change and administer password and group data
-ii patch 2.7.6-3 amd64 Apply a diff file to an original
-ii perl 5.28.1-6 amd64 Larry Wall's Practical Extraction and Report Language
-ii perl-base 5.28.1-6 amd64 minimal Perl system
-ii perl-modules-5.28 5.28.1-6 all Core Perl modules
-ii pinentry-curses 1.1.0-2 amd64 curses-based PIN or pass-phrase entry dialog for GnuPG
-ii procps 2:3.3.15-2 amd64 /proc file system utilities
-ii psmisc 23.2-1 amd64 utilities that use the proc file system
-ii python-matplotlib-data 3.0.2-2 all Python based plotting system (data package)
-ii python-pip-whl 18.1-5 all Python package installer
-ii python-tables-data 3.4.4-2 all hierarchical database for Python based on HDF5 - test data
-ii python3 3.7.3-1 amd64 interactive high-level object-oriented language (default python3 version)
-ii python3-asn1crypto 0.24.0-1 all Fast ASN.1 parser and serializer (Python 3)
-ii python3-atomicwrites 1.1.5-2 all Atomic file writes - Python 3.x
-ii python3-attr 18.2.0-1 all Attributes without boilerplate (Python 3)
-ii python3-bleach 3.1.0-1 all whitelist-based HTML-sanitizing library (Python 3)
-ii python3-bs4 4.7.1-1 all error-tolerant HTML parser for Python 3
-ii python3-cffi-backend 1.12.2-1 amd64 Foreign Function Interface for Python 3 calling C code - runtime
-ii python3-chardet 3.0.4-3 all universal character encoding detector for Python3
-ii python3-crypto 2.6.1-9+b1 amd64 cryptographic algorithms and protocols for Python 3
-ii python3-cryptography 2.6.1-3 amd64 Python library exposing cryptographic recipes and primitives (Python 3)
-ii python3-cvxopt 1.1.9+dfsg-3+b1 amd64 Python3 package for convex optimization
-ii python3-cycler 0.10.0-1 all composable kwarg iterator (Python 3)
-ii python3-dateutil 2.7.3-3 all powerful extensions to the standard Python 3 datetime module
-ii python3-dbus 1.2.8-3 amd64 simple interprocess messaging system (Python 3 interface)
-ii python3-decorator 4.3.0-1.1 all simplify usage of Python decorators by programmers
-ii python3-defusedxml 0.5.0-2 all XML bomb protection for Python stdlib modules (for Python 3)
-ii python3-dev 3.7.3-1 amd64 header files and a static library for Python (default)
-ii python3-distutils 3.7.3-1 all distutils package for Python 3.x
-ii python3-entrypoints 0.3-1 all Discover and load entry points from installed packages (Python 3)
-ii python3-gi 3.30.4-1 amd64 Python 3 bindings for gobject-introspection libraries
-ii python3-html5lib 1.0.1-1 all HTML parser/tokenizer based on the WHATWG HTML5 specification
-ii python3-ipykernel 4.9.0-1 all IPython kernel for Jupyter (Python 3)
-ii python3-ipython 5.8.0-1 all Enhanced interactive Python shell (Python 3 version)
-ii python3-ipython-genutils 0.2.0-1 all IPython vestigial utilities for Python 3
-ii python3-jinja2 2.10-2 all small but fast and easy to use stand-alone template engine
-ii python3-joblib 0.13.0-2 all tools to provide lightweight pipelining in Python
-ii python3-jsonschema 2.6.0-4 all An(other) implementation of JSON Schema (Draft 3 and 4) - Python 3.x
-ii python3-jupyter-client 5.2.3-1 all Jupyter protocol client APIs (Python 3)
-ii python3-jupyter-core 4.4.0-2 all Core common functionality of Jupyter projects for Python 3
-ii python3-keyring 17.1.1-1 all store and access your passwords safely - Python 3 version of the package
-ii python3-keyrings.alt 3.1.1-1 all alternate backend implementations for python3-keyring
-ii python3-kiwisolver 1.0.1-2+b1 amd64 fast implementation of the Cassowary constraint solver - Python 3.X
-ii python3-lib2to3 3.7.3-1 all Interactive high-level object-oriented language (2to3, version 3.6)
-ii python3-lxml:amd64 4.3.2-1 amd64 pythonic binding for the libxml2 and libxslt libraries
-ii python3-markupsafe 1.1.0-1 amd64 HTML/XHTML/XML string library for Python 3
-ii python3-matplotlib 3.0.2-2 amd64 Python based plotting system in a style similar to Matlab (Python 3)
-ii python3-minimal 3.7.3-1 amd64 minimal subset of the Python language (default python3 version)
-ii python3-mistune 0.8.4-1 all Markdown parser for Python 3
-ii python3-more-itertools 4.2.0-1 all library with routines for operating on iterables, beyond itertools (Python 3)
-ii python3-nbconvert 5.4-2 all Jupyter notebook conversion (Python 3)
-ii python3-nbformat 4.4.0-1 all Jupyter notebook format (Python 3)
-ii python3-numexpr 2.6.9-1 amd64 Fast numerical array expression evaluator for Python 3 and NumPy
-ii python3-numpy 1:1.16.2-1 amd64 Fast array facility to the Python 3 language
-ii python3-olefile 0.46-1 all Python module to read/write MS OLE2 files
-ii python3-pandas 0.23.3+dfsg-3 all data structures for "relational" or "labeled" data - Python 3
-ii python3-pandas-lib 0.23.3+dfsg-3 amd64 low-level implementations and bindings for pandas - Python 3
-ii python3-pandocfilters 1.4.2-1 all python3 bindings for Pandoc's filters
-ii python3-patsy 0.5.0+git13-g54dcf7b-1 all statistical models in Python using symbolic formulas
-ii python3-pexpect 4.6.0-1 all Python 3 module for automating interactive applications
-ii python3-pickleshare 0.7.5-1 all File system based database that uses Python pickles for Python 3
-ii python3-pil:amd64 5.4.1-2 amd64 Python Imaging Library (Python3)
-ii python3-pip 18.1-5 all Python package installer
-ii python3-pkg-resources 40.8.0-1 all Package Discovery and Resource Access using pkg_resources
-ii python3-pluggy 0.8.0-1 all plugin and hook calling mechanisms for Python - 3.x
-ii python3-prompt-toolkit 1.0.15-1 all library for building interactive command lines (Python 3)
-ii python3-psutil 5.5.1-1 amd64 module providing convenience functions for managing processes (Python3)
-ii python3-ptyprocess 0.6.0-1 all Run a subprocess in a pseudo terminal from Python 3
-ii python3-py 1.7.0-2 all Advanced Python development support library (Python 3)
-ii python3-pygments 2.3.1+dfsg-1 all syntax highlighting package written in Python 3
-ii python3-pyparsing 2.2.0+dfsg1-2 all alternative to creating and executing simple grammars - Python 3.x
-ii python3-pytest 3.10.1-2 all Simple, powerful testing in Python3
-ii python3-scipy 1.1.0-7 amd64 scientific tools for Python 3
-ii python3-secretstorage 2.3.1-2 all Python module for storing secrets - Python 3.x version
-ii python3-setuptools 40.8.0-1 all Python3 Distutils Enhancements
-ii python3-simplegeneric 0.8.1-2 all simple generic functions for Python3
-ii python3-simplejson 3.16.0-1 amd64 simple, fast, extensible JSON encoder/decoder for Python 3.x
-ii python3-six 1.12.0-1 all Python 2 and 3 compatibility library (Python 3 interface)
-ii python3-soupsieve 1.8+dfsg-1 all modern CSS selector implementation for BeautifulSoup (Python 3)
-ii python3-statsmodels 0.8.0-9 all Python3 module for the estimation of statistical models
-ii python3-statsmodels-lib 0.8.0-9 amd64 Python3 low-level implementations and bindings for statsmodels
-ii python3-tables 3.4.4-2 all hierarchical database for Python3 based on HDF5
-ii python3-tables-lib 3.4.4-2 amd64 hierarchical database for Python3 based on HDF5 (extension)
-ii python3-testpath 0.4.2+dfsg-1 all Utilities for Python 3 code working with files and commands
-ii python3-tk:amd64 3.7.3-1 amd64 Tkinter - Writing Tk applications with Python 3.x
-ii python3-tornado 5.1.1-4 amd64 scalable, non-blocking web server and tools - Python 3 package
-ii python3-traitlets 4.3.2-1 all Lightweight Traits-like package for Python 3
-ii python3-tz 2019.1-1 all Python3 version of the Olson timezone database
-ii python3-wcwidth 0.1.7+dfsg1-3 all determine printable width of a string on a terminal (Python 3)
-ii python3-webencodings 0.5.1-1 all Python implementation of the WHATWG Encoding standard
-ii python3-wheel 0.32.3-2 all built-package format for Python
-ii python3-xdg 0.25-5 all Python 3 library to access freedesktop.org standards
-ii python3-zmq 17.1.2-2 amd64 Python3 bindings for 0MQ library
-ii python3.7 3.7.3-2 amd64 Interactive high-level object-oriented language (version 3.7)
-ii python3.7-dev 3.7.3-2 amd64 Header files and a static library for Python (v3.7)
-ii python3.7-minimal 3.7.3-2 amd64 Minimal subset of the Python language (version 3.7)
-ii readline-common 7.0-5 all GNU readline and history libraries, common files
-ii sed 4.7-1 amd64 GNU stream editor for filtering/transforming text
-ii sensible-utils 0.0.12 all Utilities for sensible alternative selection
-ii shared-mime-info 1.10-1 amd64 FreeDesktop.org shared MIME database and spec
-ii sysvinit-utils 2.93-8 amd64 System-V-like utilities
-ii tar 1.30+dfsg-6 amd64 GNU version of the tar archiving utility
-ii tk8.6-blt2.5 2.5.3+dfsg-4 amd64 graphics extension library for Tcl/Tk - library
-ii ttf-bitstream-vera 1.10-8 all The Bitstream Vera family of free TrueType fonts
-ii tzdata 2019a-1 all time zone and daylight-saving time data
-ii ucf 3.0038+nmu1 all Update Configuration File(s): preserve user changes to config files
-ii util-linux 2.33.1-0.1 amd64 miscellaneous system utilities
-ii x11-common 1:7.7+19 all X Window System (X.Org) infrastructure
-ii xdg-user-dirs 0.17-2 amd64 tool to manage well known user directories
-ii xz-utils 5.2.4-1 amd64 XZ-format compression utilities
-ii zlib1g:amd64 1:1.2.11.dfsg-1 amd64 compression library - runtime
-#+end_example
-
-#+begin_src shell :results output :exports both
-dpkg --get-selections # dpkg --set-selections
-#+end_src
-** Time machine
-
-From https://www.debian.org/releases/:
-
-- oldoldstable: jessie (juin 2018)
-- oldstable: stretch (avril 2019)
-- stable: buster (juillet 2019)
-- testing: bullseye
-- unstable: sid
-*** oldoldstable (jessie) :noexport:
-
-#+begin_src shell :session *docker* :results output :exports both
-docker run -t -i debian:oldoldstable-slim
-#+end_src
-
-#+RESULTS:
-:
-: echo 'org_babel_sh_eoe'
-
-#+begin_src shell :session *docker* :results output :exports both
-cat /etc/apt/sources.list
-#+end_src
-
-#+RESULTS:
-:
-: deb http://snapshot.debian.org/archive/debian/20190708T033000Z oldoldstable main
-: deb http://deb.debian.org/debian oldoldstable main
-: deb http://snapshot.debian.org/archive/debian-security/20190708T033000Z oldoldstable/updates main
-: deb http://security.debian.org/debian-security oldoldstable/updates main
-
-
-#+begin_src shell :results output :exports both
-mkdir -p mooc_docker_image_oldoldstable
-#+end_src
-
-#+RESULTS:
-
-#+begin_src shell :results output :exports both :tangle mooc_docker_image_oldoldstable/Dockerfile
-FROM debian:oldoldstable
-
-LABEL maintainer="Arnaud Legrand "
-
-RUN apt-get update \
- && apt-get install -y python3 \
- jupyter-nbconvert python3-ipykernel \
- python3-matplotlib python3-pandas python3-numpy python3-statsmodels
-#+end_src
-
-#+begin_src shell :results output :exports both
-docker build -t debian_oldoldstable_jupyter_dockerfile mooc_docker_image_oldoldstable
-#+end_src
-
-#+RESULTS:
-
-#+BEGIN_EXAMPLE
-The command '/bin/sh -c apt-get update && apt-get install -y python3 jupyter-nbconvert python3-ipykernel python3-matplotlib python3-pandas python3-numpy python3-statsmodels' returned a non-zero code: 100
-#+END_EXAMPLE
-
-#+begin_src shell :session *docker* :results output :exports both
-for i in python3-ipykernel jupyter-nbconvert python3-matplotlib python3-pandas python3-numpy python3-statsmodels ; do
- echo $i;
- apt-cache show $i | grep Version ;
-done
-#+end_src
-
-#+RESULTS:
-#+begin_example
-python3-ipykernel
-E: No packages found
-jupyter-nbconvert
-E: No packages found
-python3-matplotlib
-Version: 1.4.2-3.1
-python3-pandas
-Version: 0.14.1-2
-python3-numpy
-Version: 1:1.8.2-2
-python3-statsmodels
-E: No packages found
-#+end_example
-
-https://snapshot.debian.org/binary/python3-statsmodels/
-
-#+begin_src shell :session *docker* :results output :exports both
-apt-get install wget
-wget https://snapshot.debian.org/archive/debian/20170929T215212Z/pool/main/s/statsmodels/python3-statsmodels_0.8.0-4_all.deb
-wget https://snapshot.debian.org/archive/debian-ports/20171026T191424Z/pool/main/n/nbconvert/jupyter-nbconvert_5.3.1-1_all.deb
-wget https://snapshot.debian.org/archive/debian-ports/20171026T191424Z/pool/main/n/nbconvert/python3-nbconvert_5.3.1-1_all.deb
-dpkg -i python3-statsmodels_0.8.0-4_all.deb jupyter-nbconvert_5.3.1-1_all.deb python3-nbconvert_5.3.1-1_all.deb
-apt-get -f install
-#+end_src
-
-#+begin_src shell :session *docker* :results output :exports both
-for i in python3-ipykernel jupyter-nbconvert python3-matplotlib python3-pandas python3-numpy python3-statsmodels ; do
- echo "===== $i =====";
- dpkg -s $i
-done
-#+end_src
-
-#+RESULTS:
-#+begin_example
-for i in python3-ipykernel jupyter-nbconvert python3-matplotlib python3- pandas python3-numpy python3-statsmodels ; do
-echo "===== $i =====";
-dpkg -s $i
-done
-===== python3-ipykernel =====
-dpkg-query: package 'python3-ipykernel' is not installed and no information is available
-Use dpkg --info (= dpkg-deb --info) to examine archive files,
-and dpkg --contents (= dpkg-deb --contents) to list their contents.
-===== jupyter-nbconvert =====
-dpkg-query: package 'jupyter-nbconvert' is not installed and no information is available
-Use dpkg --info (= dpkg-deb --info) to examine archive files,
-and dpkg --contents (= dpkg-deb --contents) to list their contents.
-===== python3-matplotlib =====
-Package: python3-matplotlib
-Status: install ok installed
-Priority: optional
-Section: python
-Installed-Size: 12987
-Architecture: amd64
-Source: matplotlib
-Version: 1.4.2-3.1
-= 1.4.2-3.1), python3-pyparsing (>= 1.5.6), python3-six (>= 1.4), python3-tz, libjs-jquery, libjs-jquery-ui, python3-numpy (>= 1:1.8.0), python3-numpy-abi9, python3 (<< 3.5), python3 (>= 3.4~), python3-nose, libc6 (>= 2.14), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:4.1.1), libpng12-0 (>= 1.2.13-4), libstdc++6 (>= 4.6), libtcl8.6 (>= 8.6.0), libtk8.6 (>= 8.6.0)
-Recommends: python3-pil, python3-tk
-Suggests: dvipng, gir1.2-gtk-3.0, ghostscript, inkscape, ipython3, librsvg2-common, python-matplotlib-doc, python3-cairocffi, python3-gi, python3-gi-cairo, python3-gobject, python3-pyqt4, python3-scipy, python3-sip, python3-tornado, texlive-extra-utils, texlive-latex-extra, ttf-staypuft
-Enhances: ipython3
-Description: Python based plotting system in a style similar to Matlab (Python 3)
- Matplotlib is a pure Python plotting library designed to bring
- publication quality plotting to Python with a syntax familiar to
- Matlab users. All of the plotting commands in the pylab interface can
- be accessed either via a functional interface familiar to Matlab
- users or an object oriented interface familiar to Python users.
- .
- This package contains the Python 3 version of matplotlib.
-Homepage: http://matplotlib.org/
-===== python3-pandas =====
-echo 'org_babel_sh_eoe'
-Package: python3-pandas
-Status: install ok installed
-Priority: optional
-Section: python
-Installed-Size: 8903
-#+end_example
-
-#+begin_src shell :session *docker* :results output :exports both
-apt-get install python3-numpy
+Argh! Les différences insignifiantes comme l'heure ou la date ne sont
+pas reportées par notre script mais d'autres différences apparaissent
+et elles sont assez alarmantes.
+- Les images sont différentes dans les deux cas!!! J'ai donc une
+ troisième sortie mais difficile de voir en quoi. Il faudrait les
+ décoder et les comparer comme j'ai fait avant. Puisque j'ai la
+ valeur, je peux la copier coller et le faire tout de suite:
+ #+begin_src shell :results output :exports both
+ echo "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\n" | \
+ base64 -d > moocrr_notebook/img1_debian_stable_jupyter.png
+ #+end_src
+
+ #+RESULTS:
+ [[file:moocrr_notebook/img1_debian_stable_jupyter.png][file:moocrr_notebook/img1_debian_stable_jupyter.png]]
+
+ Si je la compare à une des précédentes, les différences sont
+ visibles, c'est l'échelle des abcisses qui a changé. :(
+
+ [[file:moocrr_notebook/img1.png][file:moocrr_notebook/img1.png]]
+
+ Ce n'est donc pas bien grave (et on pourrait rajouter cette nouvelle
+ sortie à la liste des sorties acceptables) mais cette variabilité
+ complique singulièrement la mise en place d'un test sur les
+ images. Comme souvent, c'est l'utilisation des paramètres par défaut
+ qui pose problème. Nous aurions dû préciser dans notre notebook les
+ valeurs minimales et maximales à utiliser plutôt que de laisser
+ matplotlib en décider puisque cette décision évolue au fil des
+ versions.
+- Bien plus génant, le nombre d'itérations pour calculer la régression
+ logistique n'est pas le même (5 au lieu de 4) et les valeurs de
+ Log-Likelihood et de Deviance sont très différentes!
+Que s'est-il passé ? A priori, ce sont des bibliothèques python
+différentes de celles actuellement dans =jupyter/scipy-notebook= et qui
+peuvent expliquer ces différences. Quel est le "bon" résultat ? Pas
+clair, il faudra creuser.
+**** =alegrand38/moocrr_debian_snapshot_jupyter:20171209T114814Z=
+Enfin, qu'obtient-on avec une debian de 2017 ?
+#+begin_src shell :session *shell* :results output :exports both
+docker run --volume=`pwd`:/root/ alegrand38/moocrr_debian_snapshot_jupyter:20171209T114814Z \
+ sh -c "cd /root; sh notebook_test.sh"
#+end_src
#+RESULTS:
#+begin_example
-Reading package lists... Done
-Building dependency tree
-Reading state information... Done
-You might want to run 'apt-get -f install' to correct these:
-The following packages have unmet dependencies:
- jupyter-nbconvert : Depends: python3:any (>= 3.3~)
- python3-nbconvert : Depends: python3-entrypoints but it is not installable
- Depends: python3-ipython (>= 5.0.0) but it is not installable
- Depends: python3-jupyter-client but it is not installable
- Depends: python3-testpath but it is not installable
- Depends: python3-bleach but it is not going to be installed
- Depends: python3-jinja2 but it is not going to be installed
- Depends: python3-jupyter-core but it is not installable
- Depends: python3-mistune but it is not installable
- Depends: python3-nbformat but it is not installable
- Depends: python3-pandocfilters (>= 1.4) but it is not going to be installed
- Depends: python3-pygments but it is not going to be installed
- Depends: python3-traitlets but it is not installable
- Depends: python3:any (>= 3.3.2-2~)
- Recommends: pandoc but it is not going to be installed
- python3-numpy : Depends: python3 (>= 3.4~) but it is not going to be installed
- Depends: python3 (< 3.5) but it is not going to be installed
- Depends: python3.4 but it is not going to be installed
- Depends: libblas3 but it is not going to be installed or
- libblas.so.3
- Depends: libgfortran3 (>= 4.3) but it is not going to be installed
- Depends: liblapack3 but it is not going to be installed or
- liblapack.so.3
- Depends: libquadmath0 (>= 4.6) but it is not going to be installed
- python3-statsmodels : Depends: python3:any (>= 3.3.2-2~)
- Depends: python3-scipy but it is not going to be installed
- Depends: python3-statsmodels-lib (>= 0.8.0-4) but it is not installable
- Depends: python3-patsy but it is not going to be installed
- Depends: python3-pandas but it is not going to be installed
- Recommends: python3-matplotlib but it is not going to be installed
- Recommends: python3-joblib but it is not going to be installed
- Recommends: python3-cvxopt but it is not installable
-E: Unmet dependencies. Try 'apt-get -f install' with no packages (or
-specify a solution).
-#+end_example
-
-Moralité: c'est l'horreur, vaut mieux oublier de partir d'une distrib
-où les paquets n'étaient pas encore rentrés. Il faudrait itérativement
-repérer chacun des paquets, un numéro de version qui va bien et les
-récuperer sur snapshot...
-*** oldstable (stretch, V2 more controled) :noexport:
-
-#+begin_src shell :session *docker* :results output :exports both
-docker run -t -i debian:stretch-20190708-slim
-#+end_src
-
-#+RESULTS:
-: Unable to find image 'debian:stretch-20190708-slim' locally
-: stretch-20190708-slim: Pulling from library/debian
-:
-: [1A[2K0a4690c5d889: Pulling fs layer [1B[1A[2K0a4690c5d889: Downloading 228.5kB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 457.5kB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 695kB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 920.3kB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 1.15MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 1.379MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 1.617MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 1.85MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 2.079MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 2.309MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 2.538MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 2.768MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 2.997MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 3.226MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 3.456MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 3.685MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 3.919MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 4.148MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 4.373MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 4.603MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 4.832MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 5.061MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 5.291MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 5.524MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 5.754MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 5.991MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 6.221MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 6.45MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 6.675MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 6.905MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 7.134MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 7.372MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 7.601MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 7.826MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 8.06MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 8.289MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 8.518MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 8.748MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 8.973MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 9.202MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 9.432MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 9.665MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 9.891MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 10.12MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 10.35MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 10.58MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 10.82MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 11.05MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 11.27MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 11.5MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 11.73MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 11.96MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 12.19MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 12.42MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 12.65MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 12.88MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 13.11MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 13.34MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 13.57MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 13.8MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 14.03MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 14.26MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 14.49MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 14.72MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 14.95MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 15.17MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 15.4MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 15.63MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 15.86MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 16.1MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 16.33MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 16.56MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 16.79MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 17.02MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 17.25MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 17.48MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 17.71MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 17.94MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 18.17MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 18.39MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 18.62MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 18.85MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 19.08MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 19.31MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 19.54MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 19.77MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 20MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 20.22MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 20.45MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 20.68MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 20.91MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 21.14MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 21.37MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 21.6MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 21.83MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 22.06MB/22.49MB[1B[1A[2K0a4690c5d889: Downloading 22.29MB/22.49MB[1B[1A[2K0a4690c5d889: Verifying Checksum [1B[1A[2K0a4690c5d889: Download complete [1B[1A[2K0a4690c5d889: Extracting 229.4kB/22.49MB[1B[1A[2K0a4690c5d889: Extracting 2.523MB/22.49MB[1B[1A[2K0a4690c5d889: Extracting 5.505MB/22.49MB[1B[1A[2K0a4690c5d889: Extracting 8.258MB/22.49MB[1B[1A[2K0a4690c5d889: Extracting 8.946MB/22.49MB[1B[1A[2K0a4690c5d889: Extracting 11.24MB/22.49MB[1B[1A[2K0a4690c5d889: Extracting 13.53MB/22.49MB[1B[1A[2K0a4690c5d889: Extracting 14.45MB/22.49MB[1B[1A[2K0a4690c5d889: Extracting 15.83MB/22.49MB[1B[1A[2K0a4690c5d889: Extracting 17.89MB/22.49MB[1B[1A[2K0a4690c5d889: Extracting 19.73MB/22.49MB[1B[1A[2K0a4690c5d889: Extracting 20.19MB/22.49MB[1B[1A[2K0a4690c5d889: Extracting 21.33MB/22.49MB[1B[1A[2K0a4690c5d889: Extracting 21.79MB/22.49MB[1B[1A[2K0a4690c5d889: Extracting 22.49MB/22.49MB[1B[1A[2K0a4690c5d889: Pull complete [1BDigest: sha256:0c04edb9ae10feb7ac03a659dd41e16c79e04fdb2b10cf93c3cbcef1fd6cc1d5
-: Status: Downloaded newer image for debian:stretch-20190708-slim
-
-#+begin_src shell :session *docker* :results output :exports both
-cat /etc/apt/sources.list
-#+end_src
-
-#+RESULTS:
-:
-: deb http://snapshot.debian.org/archive/debian/20190708T033000Z stretch main
-: deb http://deb.debian.org/debian stretch main
-: deb http://snapshot.debian.org/archive/debian-security/20190708T033000Z stretch/updates main
-: deb http://security.debian.org/debian-security stretch/updates main
-: deb http://snapshot.debian.org/archive/debian/20190708T033000Z stretch-updates main
-: deb http://deb.debian.org/debian stretch-updates main
-
-#+begin_src shell :session *docker* :results output :exports both
-cp /etc/apt/sources.list /etc/apt/sources.list.bak
-cat /etc/apt/sources.list.bak | grep snapsho > /etc/apt/sources.list
-cat /etc/apt/sources.list
-#+end_src
-
-#+RESULTS:
-: cp /etc/apt/sources.list /etc/apt/sources.list.bak
-: cat /etc/apt/sources.list.bak | grep snapsho > /etc/apt/sources.list
-: cat /etc/apt/sources.list
-: deb http://snapshot.debian.org/archive/debian/20190708T033000Z stretch main
-: deb http://snapshot.debian.org/archive/debian-security/20190708T033000Z stretch/updates main
-: deb http://snapshot.debian.org/archive/debian/20190708T033000Z stretch-updates main
-
-
-# #+begin_src shell :results output :exports both
-# mkdir -p mooc_docker_image_oldoldstable
-# #+end_src
-
-# #+RESULTS:
-
-# #+begin_src shell :results output :exports both :tangle mooc_docker_image_oldoldstable/Dockerfile
-# FROM debian:oldoldstable
-
-# LABEL maintainer="Arnaud Legrand "
-
-# RUN apt-get update \
-# && apt-get install -y python3 \
-# jupyter-nbconvert python3-ipykernel \
-# python3-matplotlib python3-pandas python3-numpy python3-statsmodels
-# #+end_src
-
-# #+begin_src shell :results output :exports both
-# docker build -t debian_oldoldstable_jupyter_dockerfile mooc_docker_image_oldoldstable
-# #+end_src
-
-# #+RESULTS:
-
-# #+BEGIN_EXAMPLE
-# The command '/bin/sh -c apt-get update && apt-get install -y python3 jupyter-nbconvert python3-ipykernel python3-matplotlib python3-pandas python3-numpy python3-statsmodels' returned a non-zero code: 100
-# #+END_EXAMPLE
-
-#+begin_src shell :session *docker* :results output :exports both
-for i in python3-ipykernel jupyter-nbconvert python3-matplotlib python3-pandas python3-numpy python3-statsmodels ; do
- echo $i;
- apt-cache show $i | grep Version ;
-done
-#+end_src
-#+RESULTS:
-#+begin_example
-for i in python3-ipykernel jupyter-nbconvert python3-matplotlib python33-pandas python3-numpy python3-statsmodels ; do
-echo $i;
-apt-cache show $i | grep Version ;
-done
-python3-ipykernel
-E: No packages found
-jupyter-nbconvert
-E: No packages found
-python3-matplotlib
-E: No packages found
-python3-pandas
-E: No packages found
-python3-numpy
-E: No packages found
-python3-statsmodels
-E: No packages found
+[NbConvertApp] Converting notebook notebook.ipynb to notebook
+[NbConvertApp] Executing notebook with kernel: python3
+[NbConvertApp] Writing 41408 bytes to notebook.nbconvert.ipynb
+======= Comparing to correct_output/notebook_orig.ipynb =======
+50,52c50,52
+< "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Date
\n",
+ "
Count
\n",
+ "
Temperature
\n",
+ "
Pressure
\n",
+ "
Malfunction
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
4/12/81
\n",
+ "
6
\n",
+ "
66
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
11/12/81
\n",
+ "
6
\n",
+ "
70
\n",
+ "
50
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
3/22/82
\n",
+ "
6
\n",
+ "
69
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
11/11/82
\n",
+ "
6
\n",
+ "
68
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
4/04/83
\n",
+ "
6
\n",
+ "
67
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
6/18/82
\n",
+ "
6
\n",
+ "
72
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
6
\n",
+ "
8/30/83
\n",
+ "
6
\n",
+ "
73
\n",
+ "
100
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
7
\n",
+ "
11/28/83
\n",
+ "
6
\n",
+ "
70
\n",
+ "
100
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
8
\n",
+ "
2/03/84
\n",
+ "
6
\n",
+ "
57
\n",
+ "
200
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
9
\n",
+ "
4/06/84
\n",
+ "
6
\n",
+ "
63
\n",
+ "
200
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
10
\n",
+ "
8/30/84
\n",
+ "
6
\n",
+ "
70
\n",
+ "
200
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
11
\n",
+ "
10/05/84
\n",
+ "
6
\n",
+ "
78
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
12
\n",
+ "
11/08/84
\n",
+ "
6
\n",
+ "
67
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
13
\n",
+ "
1/24/85
\n",
+ "
6
\n",
+ "
53
\n",
+ "
200
\n",
+ "
2
\n",
+ "
\n",
+ "
\n",
+ "
14
\n",
+ "
4/12/85
\n",
+ "
6
\n",
+ "
67
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
15
\n",
+ "
4/29/85
\n",
+ "
6
\n",
+ "
75
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
16
\n",
+ "
6/17/85
\n",
+ "
6
\n",
+ "
70
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
17
\n",
+ "
7/2903/85
\n",
+ "
6
\n",
+ "
81
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
18
\n",
+ "
8/27/85
\n",
+ "
6
\n",
+ "
76
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
19
\n",
+ "
10/03/85
\n",
+ "
6
\n",
+ "
79
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
20
\n",
+ "
10/30/85
\n",
+ "
6
\n",
+ "
75
\n",
+ "
200
\n",
+ "
2
\n",
+ "
\n",
+ "
\n",
+ "
21
\n",
+ "
11/26/85
\n",
+ "
6
\n",
+ "
76
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
22
\n",
+ "
1/12/86
\n",
+ "
6
\n",
+ "
58
\n",
+ "
200
\n",
+ "
1
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ ""
+ ],
+ "text/plain": [
+ " Date Count Temperature Pressure Malfunction\n",
+ "0 4/12/81 6 66 50 0\n",
+ "1 11/12/81 6 70 50 1\n",
+ "2 3/22/82 6 69 50 0\n",
+ "3 11/11/82 6 68 50 0\n",
+ "4 4/04/83 6 67 50 0\n",
+ "5 6/18/82 6 72 50 0\n",
+ "6 8/30/83 6 73 100 0\n",
+ "7 11/28/83 6 70 100 0\n",
+ "8 2/03/84 6 57 200 1\n",
+ "9 4/06/84 6 63 200 1\n",
+ "10 8/30/84 6 70 200 1\n",
+ "11 10/05/84 6 78 200 0\n",
+ "12 11/08/84 6 67 200 0\n",
+ "13 1/24/85 6 53 200 2\n",
+ "14 4/12/85 6 67 200 0\n",
+ "15 4/29/85 6 75 200 0\n",
+ "16 6/17/85 6 70 200 0\n",
+ "17 7/2903/85 6 81 200 0\n",
+ "18 8/27/85 6 76 200 0\n",
+ "19 10/03/85 6 79 200 0\n",
+ "20 10/30/85 6 75 200 2\n",
+ "21 11/26/85 6 76 200 0\n",
+ "22 1/12/86 6 58 200 1"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "data = pd.read_csv(\"shuttle.csv\")\n",
+ "data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Le jeu de données nous indique la date de l'essai, le nombre de joints\n",
+ "toriques mesurés (il y en a 6 sur le lançeur principal), la\n",
+ "température (en Farenheit) et la pression (en psi), et enfin le\n",
+ "nombre de dysfonctionnements relevés. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Inspection graphique des données\n",
+ "Les vols où aucun incident n'est relevé n'apportant aucun information\n",
+ "sur l'influence de la température ou de la pression sur les\n",
+ "dysfonctionnements, nous nous concentrons sur les expériences où au\n",
+ "moins un joint a été défectueux.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "%matplotlib inline\n",
+ "pd.set_option('mode.chained_assignment',None) # this removes a useless warning from pandas\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "data[\"Frequency\"]=data.Malfunction/data.Count\n",
+ "data.plot(x=\"Temperature\",y=\"Frequency\",kind=\"scatter\",ylim=[0,1])\n",
+ "plt.grid(True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "À première vue, ce n'est pas flagrant mais bon, essayons quand même\n",
+ "d'estimer l'impact de la température $t$ sur la probabilité de\n",
+ "dysfonctionnements d'un joint. \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Estimation de l'influence de la température\n",
+ "\n",
+ "Supposons que chacun des 6 joints toriques est endommagé avec la même\n",
+ "probabilité et indépendamment des autres et que cette probabilité ne\n",
+ "dépend que de la température. Si on note $p(t)$ cette probabilité, le\n",
+ "nombre de joints $D$ dysfonctionnant lorsque l'on effectue le vol à\n",
+ "température $t$ suit une loi binomiale de paramètre $n=6$ et\n",
+ "$p=p(t)$. Pour relier $p(t)$ à $t$, on va donc effectuer une\n",
+ "régression logistique."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:6: DeprecationWarning: Calling Family(..) with a link class as argument is deprecated.\n",
+ "Use an instance of a link class instead.\n",
+ " \n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "
Generalized Linear Model Regression Results
\n",
+ "
\n",
+ "
Dep. Variable:
Frequency
No. Observations:
7
\n",
+ "
\n",
+ "
\n",
+ "
Model:
GLM
Df Residuals:
5
\n",
+ "
\n",
+ "
\n",
+ "
Model Family:
Binomial
Df Model:
1
\n",
+ "
\n",
+ "
\n",
+ "
Link Function:
logit
Scale:
1.0000
\n",
+ "
\n",
+ "
\n",
+ "
Method:
IRLS
Log-Likelihood:
-2.5250
\n",
+ "
\n",
+ "
\n",
+ "
Date:
Tue, 20 Aug 2019
Deviance:
0.22231
\n",
+ "
\n",
+ "
\n",
+ "
Time:
09:05:05
Pearson chi2:
0.236
\n",
+ "
\n",
+ "
\n",
+ "
No. Iterations:
4
\n",
+ "
\n",
+ "
\n",
+ "
Covariance Type:
nonrobust
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
coef
std err
z
P>|z|
[0.025
0.975]
\n",
+ "
\n",
+ "
\n",
+ "
Intercept
-1.3895
7.828
-0.178
0.859
-16.732
13.953
\n",
+ "
\n",
+ "
\n",
+ "
Temperature
0.0014
0.122
0.012
0.991
-0.238
0.240
\n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "\n",
+ "\"\"\"\n",
+ " Generalized Linear Model Regression Results \n",
+ "==============================================================================\n",
+ "Dep. Variable: Frequency No. Observations: 7\n",
+ "Model: GLM Df Residuals: 5\n",
+ "Model Family: Binomial Df Model: 1\n",
+ "Link Function: logit Scale: 1.0000\n",
+ "Method: IRLS Log-Likelihood: -2.5250\n",
+ "Date: Tue, 20 Aug 2019 Deviance: 0.22231\n",
+ "Time: 09:05:05 Pearson chi2: 0.236\n",
+ "No. Iterations: 4 \n",
+ "Covariance Type: nonrobust \n",
+ "===============================================================================\n",
+ " coef std err z P>|z| [0.025 0.975]\n",
+ "-------------------------------------------------------------------------------\n",
+ "Intercept -1.3895 7.828 -0.178 0.859 -16.732 13.953\n",
+ "Temperature 0.0014 0.122 0.012 0.991 -0.238 0.240\n",
+ "===============================================================================\n",
+ "\"\"\""
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import statsmodels.api as sm\n",
+ "\n",
+ "data[\"Success\"]=data.Count-data.Malfunction\n",
+ "data[\"Intercept\"]=1\n",
+ "\n",
+ "logmodel=sm.GLM(data['Frequency'], data[['Intercept','Temperature']], family=sm.families.Binomial(sm.families.links.logit)).fit()\n",
+ "\n",
+ "logmodel.summary()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "L'estimateur le plus probable du paramètre de température est 0.0014\n",
+ "et l'erreur standard de cet estimateur est de 0.122, autrement dit on\n",
+ "ne peut pas distinguer d'impact particulier et il faut prendre nos\n",
+ "estimations avec des pincettes.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Estimation de la probabilité de dysfonctionnant des joints toriques\n",
+ "La température prévue le jour du décollage est de 31°F. Essayons\n",
+ "d'estimer la probabilité de dysfonctionnement des joints toriques à\n",
+ "cette température à partir du modèle que nous venons de construire:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEKCAYAAAAcgp5RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAay0lEQVR4nO3dfZRU9Z3n8fenGwgNIoxIMgoayBzSrhsVMYDK6PYYBc2JT7tRJM6YuMMSd2Iy2T1ho+dkVjPRc3YO7hwzGSOyhnGMGR/GVdQcJqBuOs64PqABQSQ8rCHSkAQxo9DaKN393T/u7aa6upuuLqof6ufndU6frnvrd299v1Vdn7p969YtRQRmZpaumqEuwMzMBpaD3swscQ56M7PEOejNzBLnoDczS5yD3swscX0GvaQVkvZIerWX6yXpbyRtl7RB0szKl2lmZuUqZYv+HuDCw1x/ETA9/1kM3HnkZZmZWaX0GfQR8Qzwu8MMuRS4NzLPAxMkHVepAs3M7MiMqMA6JgM7C6ab8nm/Lh4oaTHZVj+jR48+48QTT6zAzQ9P7e3t1NSk+xaI+6teKfcG6fe3devWvRExqT/LVCLo1cO8Hs+rEBHLgeUA9fX1sWXLlgrc/PDU2NhIQ0PDUJcxYNxf9Uq5N0i/P0m/6u8ylXjZawJOKJieAuyuwHrNzKwCKhH0jwPX5EffnAm8ExHddtuYmdnQ6HPXjaT7gQbgWElNwE3ASICIWAasAj4LbAfeA64dqGLNzKz/+gz6iFjYx/UBfKViFZlZVTh48CBNTU0cOHBgqEvpYvz48WzevHmoyzhio0ePZsqUKYwcOfKI11WJN2PN7EOoqamJcePGMXXqVKSejskYGvv372fcuHFDXcYRiQjeeustmpqamDZt2hGvL91jkMxsQB04cICJEycOq5BPhSQmTpxYsf+WHPRmVjaH/MCp5H3roDczS5z30ZtZ1aqtreWUU07pnF65ciUTJ04cwoqGJwe9mVWturo61q9f32Xe/v37Oy+3trYyYoRjzrtuzCwpP/rRj7jiiiu4+OKLmTdvHgBLly5l1qxZnHrqqdx0002dY2+99Vbq6+s5//zzWbhwIbfddhsADQ0NvPTSSwDs3buXqVOnAtDW1saSJUs613XXXXcBh0678PnPf56TTjqJq6++muzIc1i7di1nn302p512GrNnz2b//v2cc845XV6g5s6dy4YNGwbsPvFLnZkdsW8/sYnXdu+r6DpPPv5obrr43x52TEtLCzNmzABg2rRpPProowA899xzbNiwgWOOOYY1a9awbds2XnzxRSKCSy65hGeeeYaxY8fywAMPsG7dOlpbW5k5cyZnnHHGYW/vBz/4AePHj2ft2rW8//77zJ07t/PFZN26dWzatInjjz+euXPn8uyzzzJ79mwWLFjAgw8+yKxZs9i3bx91dXUsWrSIe+65h9tvv52tW7fy/vvvc+qpp1bgXuuZg97MqlZPu24ALrjgAo455hgA1qxZw5o1azj99NMBaG5uZtu2bezfv5/LL7+cMWPGAHDJJZf0eXtr1qxhw4YNPPzwwwC88847bNu2jVGjRjF79mymTJkCwIwZM9ixYwfjx4/nuOOOY9asWQAcffTRAFxxxRV85zvfYenSpaxYsYIvfelLR3ZH9MFBb2ZHrK8t78E2duzYzssRwY033siXv/zlLmNuv/32Xg9hHDFiBO3t7QBdjmWPCL73ve8xf/78LuMbGxv5yEc+0jldW1tLa2srEdHjbYwZM4YLLriAxx57jIceeqhzN9FA8T56M0va/PnzWbFiBc3NzQDs2rWLPXv2cO655/Loo4/S0tLC/v37eeKJJzqXmTp1Ki+//DJA59Z7x7ruvPNODh48CMDWrVt59913e73tk046id27d7N27Voge6O4tbUVgEWLFvG1r32NWbNmdf73MVC8RW9mSZs3bx6bN2/mrLPOAuCoo47ivvvuY+bMmSxYsIAZM2bw8Y9/nHPOOadzmW984xtceeWV/PCHP+S8887rnL9o0SJ27NjBzJkziQgmTZrEypUre73tUaNG8eCDD/LVr36VlpYW6urqeOqppzjqqKM444wzOProo7n22kE4D2REDMnPJz/5yUjZT3/606EuYUC5v+pVqd5ee+21iqyn0vbt21fWcjfddFMsXbq0wtX0bteuXTF9+vRoa2vrdUxP9zHwUvQzb73rxsxskN17773MmTOHW2+9dVC+9tC7bszMgJtvvnnQbuuaa67hmmuuGbTb8xa9mZUtosevh7YKqOR966A3s7KMHj2at956y2E/ACI/H/3o0aMrsj7vujGzskyZMoWmpibefPPNoS6liwMHDlQsIIdSxzdMVYKD3szKMnLkyIp8+1Gl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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "%matplotlib inline\n",
+ "data_pred = pd.DataFrame({'Temperature': np.linspace(start=30, stop=90, num=121), 'Intercept': 1})\n",
+ "data_pred['Frequency'] = logmodel.predict(data_pred[['Intercept','Temperature']])\n",
+ "data_pred.plot(x=\"Temperature\",y=\"Frequency\",kind=\"line\",ylim=[0,1])\n",
+ "plt.scatter(x=data[\"Temperature\"],y=data[\"Frequency\"])\n",
+ "plt.grid(True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "hideCode": false,
+ "hidePrompt": false,
+ "scrolled": true
+ },
+ "source": [
+ "Comme on pouvait s'attendre au vu des données initiales, la\n",
+ "température n'a pas d'impact notable sur la probabilité d'échec des\n",
+ "joints toriques. Elle sera d'environ 0.2, comme dans les essais\n",
+ "précédents où nous il y a eu défaillance d'au moins un joint. Revenons\n",
+ "à l'ensemble des données initiales pour estimer la probabilité de\n",
+ "défaillance d'un joint:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.06521739130434782\n"
+ ]
+ }
+ ],
+ "source": [
+ "data = pd.read_csv(\"shuttle.csv\")\n",
+ "print(np.sum(data.Malfunction)/np.sum(data.Count))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Cette probabilité est donc d'environ $p=0.065$, sachant qu'il existe\n",
+ "un joint primaire un joint secondaire sur chacune des trois parties du\n",
+ "lançeur, la probabilité de défaillance des deux joints d'un lançeur\n",
+ "est de $p^2 \\approx 0.00425$. La probabilité de défaillance d'un des\n",
+ "lançeur est donc de $1-(1-p^2)^3 \\approx 1.2%$. Ça serait vraiment\n",
+ "pas de chance... Tout est sous contrôle, le décollage peut donc avoir\n",
+ "lieu demain comme prévu.\n",
+ "\n",
+ "Seulement, le lendemain, la navette Challenger explosera et emportera\n",
+ "avec elle ses sept membres d'équipages. L'opinion publique est\n",
+ "fortement touchée et lors de l'enquête qui suivra, la fiabilité des\n",
+ "joints toriques sera directement mise en cause. Au delà des problèmes\n",
+ "de communication interne à la NASA qui sont pour beaucoup dans ce\n",
+ "fiasco, l'analyse précédente comporte (au moins) un petit\n",
+ "problème... Saurez-vous le trouver ? Vous êtes libre de modifier cette\n",
+ "analyse et de regarder ce jeu de données sous tous les angles afin\n",
+ "d'expliquer ce qui ne va pas."
+ ]
+ }
+ ],
+ "metadata": {
+ "celltoolbar": "Hide code",
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/module4/ressources/moocrr_notebook/correct_output/notebook_orig.ipynb b/module4/ressources/moocrr_notebook/correct_output/notebook_orig.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..a2a512d10dfcf2370bcd394297e7ec5cac17d6b7
--- /dev/null
+++ b/module4/ressources/moocrr_notebook/correct_output/notebook_orig.ipynb
@@ -0,0 +1,713 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Analyse du risque de défaillance des joints toriques de la navette Challenger"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Le 27 Janvier 1986, veille du décollage de la navette *Challenger*, eu\n",
+ "lieu une télé-conférence de trois heures entre les ingénieurs de la\n",
+ "Morton Thiokol (constructeur d'un des moteurs) et de la NASA. La\n",
+ "discussion portait principalement sur les conséquences de la\n",
+ "température prévue au moment du décollage de 31°F (juste en dessous de\n",
+ "0°C) sur le succès du vol et en particulier sur la performance des\n",
+ "joints toriques utilisés dans les moteurs. En effet, aucun test\n",
+ "n'avait été effectué à cette température.\n",
+ "\n",
+ "L'étude qui suit reprend donc une partie des analyses effectuées cette\n",
+ "nuit là et dont l'objectif était d'évaluer l'influence potentielle de\n",
+ "la température et de la pression à laquelle sont soumis les joints\n",
+ "toriques sur leur probabilité de dysfonctionnement. Pour cela, nous\n",
+ "disposons des résultats des expériences réalisées par les ingénieurs\n",
+ "de la NASA durant les 6 années précédant le lancement de la navette\n",
+ "Challenger.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Chargement des données\n",
+ "Nous commençons donc par charger ces données:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Date
\n",
+ "
Count
\n",
+ "
Temperature
\n",
+ "
Pressure
\n",
+ "
Malfunction
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
4/12/81
\n",
+ "
6
\n",
+ "
66
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
11/12/81
\n",
+ "
6
\n",
+ "
70
\n",
+ "
50
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
3/22/82
\n",
+ "
6
\n",
+ "
69
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
11/11/82
\n",
+ "
6
\n",
+ "
68
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
4/04/83
\n",
+ "
6
\n",
+ "
67
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
6/18/82
\n",
+ "
6
\n",
+ "
72
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
6
\n",
+ "
8/30/83
\n",
+ "
6
\n",
+ "
73
\n",
+ "
100
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
7
\n",
+ "
11/28/83
\n",
+ "
6
\n",
+ "
70
\n",
+ "
100
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
8
\n",
+ "
2/03/84
\n",
+ "
6
\n",
+ "
57
\n",
+ "
200
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
9
\n",
+ "
4/06/84
\n",
+ "
6
\n",
+ "
63
\n",
+ "
200
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
10
\n",
+ "
8/30/84
\n",
+ "
6
\n",
+ "
70
\n",
+ "
200
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
11
\n",
+ "
10/05/84
\n",
+ "
6
\n",
+ "
78
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
12
\n",
+ "
11/08/84
\n",
+ "
6
\n",
+ "
67
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
13
\n",
+ "
1/24/85
\n",
+ "
6
\n",
+ "
53
\n",
+ "
200
\n",
+ "
2
\n",
+ "
\n",
+ "
\n",
+ "
14
\n",
+ "
4/12/85
\n",
+ "
6
\n",
+ "
67
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
15
\n",
+ "
4/29/85
\n",
+ "
6
\n",
+ "
75
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
16
\n",
+ "
6/17/85
\n",
+ "
6
\n",
+ "
70
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
17
\n",
+ "
7/2903/85
\n",
+ "
6
\n",
+ "
81
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
18
\n",
+ "
8/27/85
\n",
+ "
6
\n",
+ "
76
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
19
\n",
+ "
10/03/85
\n",
+ "
6
\n",
+ "
79
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
20
\n",
+ "
10/30/85
\n",
+ "
6
\n",
+ "
75
\n",
+ "
200
\n",
+ "
2
\n",
+ "
\n",
+ "
\n",
+ "
21
\n",
+ "
11/26/85
\n",
+ "
6
\n",
+ "
76
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
22
\n",
+ "
1/12/86
\n",
+ "
6
\n",
+ "
58
\n",
+ "
200
\n",
+ "
1
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Date Count Temperature Pressure Malfunction\n",
+ "0 4/12/81 6 66 50 0\n",
+ "1 11/12/81 6 70 50 1\n",
+ "2 3/22/82 6 69 50 0\n",
+ "3 11/11/82 6 68 50 0\n",
+ "4 4/04/83 6 67 50 0\n",
+ "5 6/18/82 6 72 50 0\n",
+ "6 8/30/83 6 73 100 0\n",
+ "7 11/28/83 6 70 100 0\n",
+ "8 2/03/84 6 57 200 1\n",
+ "9 4/06/84 6 63 200 1\n",
+ "10 8/30/84 6 70 200 1\n",
+ "11 10/05/84 6 78 200 0\n",
+ "12 11/08/84 6 67 200 0\n",
+ "13 1/24/85 6 53 200 2\n",
+ "14 4/12/85 6 67 200 0\n",
+ "15 4/29/85 6 75 200 0\n",
+ "16 6/17/85 6 70 200 0\n",
+ "17 7/2903/85 6 81 200 0\n",
+ "18 8/27/85 6 76 200 0\n",
+ "19 10/03/85 6 79 200 0\n",
+ "20 10/30/85 6 75 200 2\n",
+ "21 11/26/85 6 76 200 0\n",
+ "22 1/12/86 6 58 200 1"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "data = pd.read_csv(\"shuttle.csv\")\n",
+ "data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Le jeu de données nous indique la date de l'essai, le nombre de joints\n",
+ "toriques mesurés (il y en a 6 sur le lançeur principal), la\n",
+ "température (en Farenheit) et la pression (en psi), et enfin le\n",
+ "nombre de dysfonctionnements relevés. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Inspection graphique des données\n",
+ "Les vols où aucun incident n'est relevé n'apportant aucun information\n",
+ "sur l'influence de la température ou de la pression sur les\n",
+ "dysfonctionnements, nous nous concentrons sur les expériences où au\n",
+ "moins un joint a été défectueux.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "%matplotlib inline\n",
+ "pd.set_option('mode.chained_assignment',None) # this removes a useless warning from pandas\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "data[\"Frequency\"]=data.Malfunction/data.Count\n",
+ "data.plot(x=\"Temperature\",y=\"Frequency\",kind=\"scatter\",ylim=[0,1])\n",
+ "plt.grid(True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "À première vue, ce n'est pas flagrant mais bon, essayons quand même\n",
+ "d'estimer l'impact de la température $t$ sur la probabilité de\n",
+ "dysfonctionnements d'un joint. \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Estimation de l'influence de la température\n",
+ "\n",
+ "Supposons que chacun des 6 joints toriques est endommagé avec la même\n",
+ "probabilité et indépendamment des autres et que cette probabilité ne\n",
+ "dépend que de la température. Si on note $p(t)$ cette probabilité, le\n",
+ "nombre de joints $D$ dysfonctionnant lorsque l'on effectue le vol à\n",
+ "température $t$ suit une loi binomiale de paramètre $n=6$ et\n",
+ "$p=p(t)$. Pour relier $p(t)$ à $t$, on va donc effectuer une\n",
+ "régression logistique."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "
Generalized Linear Model Regression Results
\n",
+ "
\n",
+ "
Dep. Variable:
Frequency
No. Observations:
7
\n",
+ "
\n",
+ "
\n",
+ "
Model:
GLM
Df Residuals:
5
\n",
+ "
\n",
+ "
\n",
+ "
Model Family:
Binomial
Df Model:
1
\n",
+ "
\n",
+ "
\n",
+ "
Link Function:
logit
Scale:
1.0000
\n",
+ "
\n",
+ "
\n",
+ "
Method:
IRLS
Log-Likelihood:
-2.5250
\n",
+ "
\n",
+ "
\n",
+ "
Date:
Sat, 13 Apr 2019
Deviance:
0.22231
\n",
+ "
\n",
+ "
\n",
+ "
Time:
19:11:24
Pearson chi2:
0.236
\n",
+ "
\n",
+ "
\n",
+ "
No. Iterations:
4
Covariance Type:
nonrobust
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
coef
std err
z
P>|z|
[0.025
0.975]
\n",
+ "
\n",
+ "
\n",
+ "
Intercept
-1.3895
7.828
-0.178
0.859
-16.732
13.953
\n",
+ "
\n",
+ "
\n",
+ "
Temperature
0.0014
0.122
0.012
0.991
-0.238
0.240
\n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "\n",
+ "\"\"\"\n",
+ " Generalized Linear Model Regression Results \n",
+ "==============================================================================\n",
+ "Dep. Variable: Frequency No. Observations: 7\n",
+ "Model: GLM Df Residuals: 5\n",
+ "Model Family: Binomial Df Model: 1\n",
+ "Link Function: logit Scale: 1.0000\n",
+ "Method: IRLS Log-Likelihood: -2.5250\n",
+ "Date: Sat, 13 Apr 2019 Deviance: 0.22231\n",
+ "Time: 19:11:24 Pearson chi2: 0.236\n",
+ "No. Iterations: 4 Covariance Type: nonrobust\n",
+ "===============================================================================\n",
+ " coef std err z P>|z| [0.025 0.975]\n",
+ "-------------------------------------------------------------------------------\n",
+ "Intercept -1.3895 7.828 -0.178 0.859 -16.732 13.953\n",
+ "Temperature 0.0014 0.122 0.012 0.991 -0.238 0.240\n",
+ "===============================================================================\n",
+ "\"\"\""
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import statsmodels.api as sm\n",
+ "\n",
+ "data[\"Success\"]=data.Count-data.Malfunction\n",
+ "data[\"Intercept\"]=1\n",
+ "\n",
+ "logmodel=sm.GLM(data['Frequency'], data[['Intercept','Temperature']], family=sm.families.Binomial(sm.families.links.logit)).fit()\n",
+ "\n",
+ "logmodel.summary()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "L'estimateur le plus probable du paramètre de température est 0.0014\n",
+ "et l'erreur standard de cet estimateur est de 0.122, autrement dit on\n",
+ "ne peut pas distinguer d'impact particulier et il faut prendre nos\n",
+ "estimations avec des pincettes.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Estimation de la probabilité de dysfonctionnant des joints toriques\n",
+ "La température prévue le jour du décollage est de 31°F. Essayons\n",
+ "d'estimer la probabilité de dysfonctionnement des joints toriques à\n",
+ "cette température à partir du modèle que nous venons de construire:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEKCAYAAAAcgp5RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAGyFJREFUeJzt3X2UVPWd5/H3pxuQBhEjkhkFDWSWtHF9ABRQWZ3WqGhORLPrE2vGMRNCdmeMk83Knng2E43Rc2YHd2I26zgy6jgxiUo8iiSHCahjT2Y8PoCCILAIY4g2JEGND7Q2Snd/9497u6kuqunqpvqhfnxe5/Tpurd+de/3V7fvp27fuvUrRQRmZpaumsEuwMzM+peD3swscQ56M7PEOejNzBLnoDczS5yD3swscT0GvaR7Je2U9HI390vS/5G0VdI6SdMrX6aZmfVVOUf09wEX7Of+C4Ep+c8C4M4DL8vMzCqlx6CPiF8Av9tPk4uBH0TmWeBwSUdVqkAzMzswwyqwjAnA6wXTTfm8Xxc3lLSA7KifkSNHnnLsscdWYPVDU3t7OzU16b4FknL/Uu4buH/V7pVXXnkzIsb35jGVCHqVmFdyXIWIWAwsBqivr4/NmzdXYPVDU2NjIw0NDYNdRr9JuX8p9w3cv2on6Ve9fUwlXvaagGMKpicCOyqwXDMzq4BKBP0y4Or86pvTgHcjYp/TNmZmNjh6PHUj6QGgAThSUhNwIzAcICL+FlgOfBbYCnwAfLG/ijUzs97rMegjYl4P9wfwZxWryMyqwp49e2hqamL37t2DXUoXY8eOZdOmTYNdxgEbOXIkEydOZPjw4Qe8rEq8GWtmB6GmpibGjBnDpEmTkEpdkzE4du3axZgxYwa7jAMSEbz11ls0NTUxefLkA15eutcgmVm/2r17N+PGjRtSIZ8KSYwbN65i/y056M2szxzy/aeSz62D3swscT5Hb2ZVq7a2lhNPPLFzeunSpYwbN24QKxqaHPRmVrXq6upYu3Ztl3m7du3qvN3a2sqwYY45n7oxs6T86Ec/4rLLLuOiiy7i/PPPB2DRokXMmDGDk046iRtvvLGz7a233kp9fT3nnnsu8+bN47bbbgOgoaGB1atXA/Dmm28yadIkANra2li4cGHnsu666y5g77ALl156KccddxxXXXUV2ZXnsGrVKs444wxOPvlkZs6cya5duzjzzDO7vEDNnj2bdevW9dtz4pc6Mztg3/7pBjbueK+iyzz+6MO48aJ/v982LS0tTJ06FYDJkyfz6KOPAvDMM8+wbt06jjjiCFauXMmWLVt4/vnniQjmzp3LL37xC0aPHs2DDz7ImjVraG1tZfr06Zxyyin7Xd8999zD2LFjWbVqFR9++CGzZ8/ufDFZs2YNGzZs4Oijj2b27Nk8/fTTzJw5kyuuuIKHHnqIGTNm8N5771FXV8f8+fO57777uP3223nllVf48MMPOemkkyrwrJXmoDezqlXq1A3AeeedxxFHHAHAypUrWblyJdOmTQOgubmZLVu2sGvXLj7/+c8zatQoAObOndvj+lauXMm6det4+OGHAXj33XfZsmULI0aMYObMmUycOBGAqVOnsm3bNsaOHctRRx3FjBkzADjssMMAuOyyy/jOd77DokWLuPfee7nmmmsO7InogYPezA5YT0feA2306NGdtyOCG264ga985Std2tx+++3dXsI4bNgw2tvbAbpcyx4RfP/732fOnDld2jc2NnLIIYd0TtfW1tLa2kpElFzHqFGjOO+883jsscdYsmRJ52mi/uJz9GaWtDlz5nDvvffS3NwMwPbt29m5cydnnXUWjz76KC0tLezatYuf/vSnnY+ZNGkSL7zwAkDn0XvHsu6880727NkDwCuvvML777/f7bqPO+44duzYwapVq4DsjeLW1lYA5s+fz3XXXceMGTM6//voLz6iN7OknX/++WzatInTTz8dgEMPPZQf/vCHTJ8+nSuuuIKpU6fyiU98gjPPPLPzMddffz2XX345999/P+ecc07n/Pnz57Nt2zamT59ORDB+/HiWLl3a7bpHjBjBQw89xFe/+lVaWlqoq6vjiSee4NBDD+WUU07hsMMO44tfHIBxICNiUH4+9alPRcqeeuqpwS6hX6Xcv5T7FlG5/m3cuLEiy6m09957r0+Pu/HGG2PRokUVrqZ727dvjylTpkRbW1u3bUo9x8Dq6GXe+tSNmdkA+8EPfsCsWbO49dZbB+RrD33qxswMuOmmmwZsXVdffTVXX331gK3PR/Rm1mcRJb8e2iqgks+tg97M+mTkyJG89dZbDvt+EPl49CNHjqzI8nzqxsz6ZOLEiTQ1NfHGG28Mdild7N69u2IBOZg6vmGqEhz0ZtYnw4cP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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "%matplotlib inline\n",
+ "data_pred = pd.DataFrame({'Temperature': np.linspace(start=30, stop=90, num=121), 'Intercept': 1})\n",
+ "data_pred['Frequency'] = logmodel.predict(data_pred[['Intercept','Temperature']])\n",
+ "data_pred.plot(x=\"Temperature\",y=\"Frequency\",kind=\"line\",ylim=[0,1])\n",
+ "plt.scatter(x=data[\"Temperature\"],y=data[\"Frequency\"])\n",
+ "plt.grid(True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "hideCode": false,
+ "hidePrompt": false,
+ "scrolled": true
+ },
+ "source": [
+ "Comme on pouvait s'attendre au vu des données initiales, la\n",
+ "température n'a pas d'impact notable sur la probabilité d'échec des\n",
+ "joints toriques. Elle sera d'environ 0.2, comme dans les essais\n",
+ "précédents où nous il y a eu défaillance d'au moins un joint. Revenons\n",
+ "à l'ensemble des données initiales pour estimer la probabilité de\n",
+ "défaillance d'un joint:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.06521739130434782\n"
+ ]
+ }
+ ],
+ "source": [
+ "data = pd.read_csv(\"shuttle.csv\")\n",
+ "print(np.sum(data.Malfunction)/np.sum(data.Count))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Cette probabilité est donc d'environ $p=0.065$, sachant qu'il existe\n",
+ "un joint primaire un joint secondaire sur chacune des trois parties du\n",
+ "lançeur, la probabilité de défaillance des deux joints d'un lançeur\n",
+ "est de $p^2 \\approx 0.00425$. La probabilité de défaillance d'un des\n",
+ "lançeur est donc de $1-(1-p^2)^3 \\approx 1.2%$. Ça serait vraiment\n",
+ "pas de chance... Tout est sous contrôle, le décollage peut donc avoir\n",
+ "lieu demain comme prévu.\n",
+ "\n",
+ "Seulement, le lendemain, la navette Challenger explosera et emportera\n",
+ "avec elle ses sept membres d'équipages. L'opinion publique est\n",
+ "fortement touchée et lors de l'enquête qui suivra, la fiabilité des\n",
+ "joints toriques sera directement mise en cause. Au delà des problèmes\n",
+ "de communication interne à la NASA qui sont pour beaucoup dans ce\n",
+ "fiasco, l'analyse précédente comporte (au moins) un petit\n",
+ "problème... Saurez-vous le trouver ? Vous êtes libre de modifier cette\n",
+ "analyse et de regarder ce jeu de données sous tous les angles afin\n",
+ "d'expliquer ce qui ne va pas."
+ ]
+ }
+ ],
+ "metadata": {
+ "celltoolbar": "Hide code",
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/module4/ressources/moocrr_notebook/diff.png b/module4/ressources/moocrr_notebook/diff.png
new file mode 100644
index 0000000000000000000000000000000000000000..219d2fabfc3be7dcbc3923eb9228b6db6beff9fc
Binary files /dev/null and b/module4/ressources/moocrr_notebook/diff.png differ
diff --git a/module4/ressources/moocrr_notebook/img1.png b/module4/ressources/moocrr_notebook/img1.png
new file mode 100644
index 0000000000000000000000000000000000000000..a379fcdb0fae822b0801353b0740f1e6f57c588b
Binary files /dev/null and b/module4/ressources/moocrr_notebook/img1.png differ
diff --git a/module4/ressources/moocrr_notebook/img1_debian_stable_jupyter.png b/module4/ressources/moocrr_notebook/img1_debian_stable_jupyter.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b24bbd254caf43b5fa688dd4f0f9e1bd85edfd8
Binary files /dev/null and b/module4/ressources/moocrr_notebook/img1_debian_stable_jupyter.png differ
diff --git a/module4/ressources/moocrr_notebook/img1_nbconvert.png b/module4/ressources/moocrr_notebook/img1_nbconvert.png
new file mode 100644
index 0000000000000000000000000000000000000000..8af8f4bbff8d1c05b60b8525329464b5d6d2fb8c
Binary files /dev/null and b/module4/ressources/moocrr_notebook/img1_nbconvert.png differ
diff --git a/module4/ressources/moocrr_notebook/notebook.ipynb b/module4/ressources/moocrr_notebook/notebook.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..a2a512d10dfcf2370bcd394297e7ec5cac17d6b7
--- /dev/null
+++ b/module4/ressources/moocrr_notebook/notebook.ipynb
@@ -0,0 +1,713 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Analyse du risque de défaillance des joints toriques de la navette Challenger"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Le 27 Janvier 1986, veille du décollage de la navette *Challenger*, eu\n",
+ "lieu une télé-conférence de trois heures entre les ingénieurs de la\n",
+ "Morton Thiokol (constructeur d'un des moteurs) et de la NASA. La\n",
+ "discussion portait principalement sur les conséquences de la\n",
+ "température prévue au moment du décollage de 31°F (juste en dessous de\n",
+ "0°C) sur le succès du vol et en particulier sur la performance des\n",
+ "joints toriques utilisés dans les moteurs. En effet, aucun test\n",
+ "n'avait été effectué à cette température.\n",
+ "\n",
+ "L'étude qui suit reprend donc une partie des analyses effectuées cette\n",
+ "nuit là et dont l'objectif était d'évaluer l'influence potentielle de\n",
+ "la température et de la pression à laquelle sont soumis les joints\n",
+ "toriques sur leur probabilité de dysfonctionnement. Pour cela, nous\n",
+ "disposons des résultats des expériences réalisées par les ingénieurs\n",
+ "de la NASA durant les 6 années précédant le lancement de la navette\n",
+ "Challenger.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Chargement des données\n",
+ "Nous commençons donc par charger ces données:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Date
\n",
+ "
Count
\n",
+ "
Temperature
\n",
+ "
Pressure
\n",
+ "
Malfunction
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
4/12/81
\n",
+ "
6
\n",
+ "
66
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
11/12/81
\n",
+ "
6
\n",
+ "
70
\n",
+ "
50
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
3/22/82
\n",
+ "
6
\n",
+ "
69
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
11/11/82
\n",
+ "
6
\n",
+ "
68
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
4/04/83
\n",
+ "
6
\n",
+ "
67
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
6/18/82
\n",
+ "
6
\n",
+ "
72
\n",
+ "
50
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
6
\n",
+ "
8/30/83
\n",
+ "
6
\n",
+ "
73
\n",
+ "
100
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
7
\n",
+ "
11/28/83
\n",
+ "
6
\n",
+ "
70
\n",
+ "
100
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
8
\n",
+ "
2/03/84
\n",
+ "
6
\n",
+ "
57
\n",
+ "
200
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
9
\n",
+ "
4/06/84
\n",
+ "
6
\n",
+ "
63
\n",
+ "
200
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
10
\n",
+ "
8/30/84
\n",
+ "
6
\n",
+ "
70
\n",
+ "
200
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
11
\n",
+ "
10/05/84
\n",
+ "
6
\n",
+ "
78
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
12
\n",
+ "
11/08/84
\n",
+ "
6
\n",
+ "
67
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
13
\n",
+ "
1/24/85
\n",
+ "
6
\n",
+ "
53
\n",
+ "
200
\n",
+ "
2
\n",
+ "
\n",
+ "
\n",
+ "
14
\n",
+ "
4/12/85
\n",
+ "
6
\n",
+ "
67
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
15
\n",
+ "
4/29/85
\n",
+ "
6
\n",
+ "
75
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
16
\n",
+ "
6/17/85
\n",
+ "
6
\n",
+ "
70
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
17
\n",
+ "
7/2903/85
\n",
+ "
6
\n",
+ "
81
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
18
\n",
+ "
8/27/85
\n",
+ "
6
\n",
+ "
76
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
19
\n",
+ "
10/03/85
\n",
+ "
6
\n",
+ "
79
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
20
\n",
+ "
10/30/85
\n",
+ "
6
\n",
+ "
75
\n",
+ "
200
\n",
+ "
2
\n",
+ "
\n",
+ "
\n",
+ "
21
\n",
+ "
11/26/85
\n",
+ "
6
\n",
+ "
76
\n",
+ "
200
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
22
\n",
+ "
1/12/86
\n",
+ "
6
\n",
+ "
58
\n",
+ "
200
\n",
+ "
1
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Date Count Temperature Pressure Malfunction\n",
+ "0 4/12/81 6 66 50 0\n",
+ "1 11/12/81 6 70 50 1\n",
+ "2 3/22/82 6 69 50 0\n",
+ "3 11/11/82 6 68 50 0\n",
+ "4 4/04/83 6 67 50 0\n",
+ "5 6/18/82 6 72 50 0\n",
+ "6 8/30/83 6 73 100 0\n",
+ "7 11/28/83 6 70 100 0\n",
+ "8 2/03/84 6 57 200 1\n",
+ "9 4/06/84 6 63 200 1\n",
+ "10 8/30/84 6 70 200 1\n",
+ "11 10/05/84 6 78 200 0\n",
+ "12 11/08/84 6 67 200 0\n",
+ "13 1/24/85 6 53 200 2\n",
+ "14 4/12/85 6 67 200 0\n",
+ "15 4/29/85 6 75 200 0\n",
+ "16 6/17/85 6 70 200 0\n",
+ "17 7/2903/85 6 81 200 0\n",
+ "18 8/27/85 6 76 200 0\n",
+ "19 10/03/85 6 79 200 0\n",
+ "20 10/30/85 6 75 200 2\n",
+ "21 11/26/85 6 76 200 0\n",
+ "22 1/12/86 6 58 200 1"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "data = pd.read_csv(\"shuttle.csv\")\n",
+ "data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Le jeu de données nous indique la date de l'essai, le nombre de joints\n",
+ "toriques mesurés (il y en a 6 sur le lançeur principal), la\n",
+ "température (en Farenheit) et la pression (en psi), et enfin le\n",
+ "nombre de dysfonctionnements relevés. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Inspection graphique des données\n",
+ "Les vols où aucun incident n'est relevé n'apportant aucun information\n",
+ "sur l'influence de la température ou de la pression sur les\n",
+ "dysfonctionnements, nous nous concentrons sur les expériences où au\n",
+ "moins un joint a été défectueux.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "%matplotlib inline\n",
+ "pd.set_option('mode.chained_assignment',None) # this removes a useless warning from pandas\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "data[\"Frequency\"]=data.Malfunction/data.Count\n",
+ "data.plot(x=\"Temperature\",y=\"Frequency\",kind=\"scatter\",ylim=[0,1])\n",
+ "plt.grid(True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "À première vue, ce n'est pas flagrant mais bon, essayons quand même\n",
+ "d'estimer l'impact de la température $t$ sur la probabilité de\n",
+ "dysfonctionnements d'un joint. \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Estimation de l'influence de la température\n",
+ "\n",
+ "Supposons que chacun des 6 joints toriques est endommagé avec la même\n",
+ "probabilité et indépendamment des autres et que cette probabilité ne\n",
+ "dépend que de la température. Si on note $p(t)$ cette probabilité, le\n",
+ "nombre de joints $D$ dysfonctionnant lorsque l'on effectue le vol à\n",
+ "température $t$ suit une loi binomiale de paramètre $n=6$ et\n",
+ "$p=p(t)$. Pour relier $p(t)$ à $t$, on va donc effectuer une\n",
+ "régression logistique."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "
Generalized Linear Model Regression Results
\n",
+ "
\n",
+ "
Dep. Variable:
Frequency
No. Observations:
7
\n",
+ "
\n",
+ "
\n",
+ "
Model:
GLM
Df Residuals:
5
\n",
+ "
\n",
+ "
\n",
+ "
Model Family:
Binomial
Df Model:
1
\n",
+ "
\n",
+ "
\n",
+ "
Link Function:
logit
Scale:
1.0000
\n",
+ "
\n",
+ "
\n",
+ "
Method:
IRLS
Log-Likelihood:
-2.5250
\n",
+ "
\n",
+ "
\n",
+ "
Date:
Sat, 13 Apr 2019
Deviance:
0.22231
\n",
+ "
\n",
+ "
\n",
+ "
Time:
19:11:24
Pearson chi2:
0.236
\n",
+ "
\n",
+ "
\n",
+ "
No. Iterations:
4
Covariance Type:
nonrobust
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
coef
std err
z
P>|z|
[0.025
0.975]
\n",
+ "
\n",
+ "
\n",
+ "
Intercept
-1.3895
7.828
-0.178
0.859
-16.732
13.953
\n",
+ "
\n",
+ "
\n",
+ "
Temperature
0.0014
0.122
0.012
0.991
-0.238
0.240
\n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "\n",
+ "\"\"\"\n",
+ " Generalized Linear Model Regression Results \n",
+ "==============================================================================\n",
+ "Dep. Variable: Frequency No. Observations: 7\n",
+ "Model: GLM Df Residuals: 5\n",
+ "Model Family: Binomial Df Model: 1\n",
+ "Link Function: logit Scale: 1.0000\n",
+ "Method: IRLS Log-Likelihood: -2.5250\n",
+ "Date: Sat, 13 Apr 2019 Deviance: 0.22231\n",
+ "Time: 19:11:24 Pearson chi2: 0.236\n",
+ "No. Iterations: 4 Covariance Type: nonrobust\n",
+ "===============================================================================\n",
+ " coef std err z P>|z| [0.025 0.975]\n",
+ "-------------------------------------------------------------------------------\n",
+ "Intercept -1.3895 7.828 -0.178 0.859 -16.732 13.953\n",
+ "Temperature 0.0014 0.122 0.012 0.991 -0.238 0.240\n",
+ "===============================================================================\n",
+ "\"\"\""
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import statsmodels.api as sm\n",
+ "\n",
+ "data[\"Success\"]=data.Count-data.Malfunction\n",
+ "data[\"Intercept\"]=1\n",
+ "\n",
+ "logmodel=sm.GLM(data['Frequency'], data[['Intercept','Temperature']], family=sm.families.Binomial(sm.families.links.logit)).fit()\n",
+ "\n",
+ "logmodel.summary()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "L'estimateur le plus probable du paramètre de température est 0.0014\n",
+ "et l'erreur standard de cet estimateur est de 0.122, autrement dit on\n",
+ "ne peut pas distinguer d'impact particulier et il faut prendre nos\n",
+ "estimations avec des pincettes.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Estimation de la probabilité de dysfonctionnant des joints toriques\n",
+ "La température prévue le jour du décollage est de 31°F. Essayons\n",
+ "d'estimer la probabilité de dysfonctionnement des joints toriques à\n",
+ "cette température à partir du modèle que nous venons de construire:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEKCAYAAAAcgp5RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAGyFJREFUeJzt3X2UVPWd5/H3pxuQBhEjkhkFDWSWtHF9ABRQWZ3WqGhORLPrE2vGMRNCdmeMk83Knng2E43Rc2YHd2I26zgy6jgxiUo8iiSHCahjT2Y8PoCCILAIY4g2JEGND7Q2Snd/9497u6kuqunqpvqhfnxe5/Tpurd+de/3V7fvp27fuvUrRQRmZpaumsEuwMzM+peD3swscQ56M7PEOejNzBLnoDczS5yD3swscT0GvaR7Je2U9HI390vS/5G0VdI6SdMrX6aZmfVVOUf09wEX7Of+C4Ep+c8C4M4DL8vMzCqlx6CPiF8Av9tPk4uBH0TmWeBwSUdVqkAzMzswwyqwjAnA6wXTTfm8Xxc3lLSA7KifkSNHnnLsscdWYPVDU3t7OzU16b4FknL/Uu4buH/V7pVXXnkzIsb35jGVCHqVmFdyXIWIWAwsBqivr4/NmzdXYPVDU2NjIw0NDYNdRr9JuX8p9w3cv2on6Ve9fUwlXvaagGMKpicCOyqwXDMzq4BKBP0y4Or86pvTgHcjYp/TNmZmNjh6PHUj6QGgAThSUhNwIzAcICL+FlgOfBbYCnwAfLG/ijUzs97rMegjYl4P9wfwZxWryMyqwp49e2hqamL37t2DXUoXY8eOZdOmTYNdxgEbOXIkEydOZPjw4Qe8rEq8GWtmB6GmpibGjBnDpEmTkEpdkzE4du3axZgxYwa7jAMSEbz11ls0NTUxefLkA15eutcgmVm/2r17N+PGjRtSIZ8KSYwbN65i/y056M2szxzy/aeSz62D3swscT5Hb2ZVq7a2lhNPPLFzeunSpYwbN24QKxqaHPRmVrXq6upYu3Ztl3m7du3qvN3a2sqwYY45n7oxs6T86Ec/4rLLLuOiiy7i/PPPB2DRokXMmDGDk046iRtvvLGz7a233kp9fT3nnnsu8+bN47bbbgOgoaGB1atXA/Dmm28yadIkANra2li4cGHnsu666y5g77ALl156KccddxxXXXUV2ZXnsGrVKs444wxOPvlkZs6cya5duzjzzDO7vEDNnj2bdevW9dtz4pc6Mztg3/7pBjbueK+iyzz+6MO48aJ/v982LS0tTJ06FYDJkyfz6KOPAvDMM8+wbt06jjjiCFauXMmWLVt4/vnniQjmzp3LL37xC0aPHs2DDz7ImjVraG1tZfr06Zxyyin7Xd8999zD2LFjWbVqFR9++CGzZ8/ufDFZs2YNGzZs4Oijj2b27Nk8/fTTzJw5kyuuuIKHHnqIGTNm8N5771FXV8f8+fO57777uP3223nllVf48MMPOemkkyrwrJXmoDezqlXq1A3AeeedxxFHHAHAypUrWblyJdOmTQOgubmZLVu2sGvXLj7/+c8zatQoAObOndvj+lauXMm6det4+OGHAXj33XfZsmULI0aMYObMmUycOBGAqVOnsm3bNsaOHctRRx3FjBkzADjssMMAuOyyy/jOd77DokWLuPfee7nmmmsO7InogYPezA5YT0feA2306NGdtyOCG264ga985Std2tx+++3dXsI4bNgw2tvbAbpcyx4RfP/732fOnDld2jc2NnLIIYd0TtfW1tLa2kpElFzHqFGjOO+883jsscdYsmRJ52mi/uJz9GaWtDlz5nDvvffS3NwMwPbt29m5cydnnXUWjz76KC0tLezatYuf/vSnnY+ZNGkSL7zwAkDn0XvHsu6880727NkDwCuvvML777/f7bqPO+44duzYwapVq4DsjeLW1lYA5s+fz3XXXceMGTM6//voLz6iN7OknX/++WzatInTTz8dgEMPPZQf/vCHTJ8+nSuuuIKpU6fyiU98gjPPPLPzMddffz2XX345999/P+ecc07n/Pnz57Nt2zamT59ORDB+/HiWLl3a7bpHjBjBQw89xFe/+lVaWlqoq6vjiSee4NBDD+WUU07hsMMO44tfHIBxICNiUH4+9alPRcqeeuqpwS6hX6Xcv5T7FlG5/m3cuLEiy6m09957r0+Pu/HGG2PRokUVrqZ727dvjylTpkRbW1u3bUo9x8Dq6GXe+tSNmdkA+8EPfsCsWbO49dZbB+RrD33qxswMuOmmmwZsXVdffTVXX331gK3PR/Rm1mcRJb8e2iqgks+tg97M+mTkyJG89dZbDvt+EPl49CNHjqzI8nzqxsz6ZOLEiTQ1NfHGG28Mdild7N69u2IBOZg6vmGqEhz0ZtYnw4cP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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "%matplotlib inline\n",
+ "data_pred = pd.DataFrame({'Temperature': np.linspace(start=30, stop=90, num=121), 'Intercept': 1})\n",
+ "data_pred['Frequency'] = logmodel.predict(data_pred[['Intercept','Temperature']])\n",
+ "data_pred.plot(x=\"Temperature\",y=\"Frequency\",kind=\"line\",ylim=[0,1])\n",
+ "plt.scatter(x=data[\"Temperature\"],y=data[\"Frequency\"])\n",
+ "plt.grid(True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "hideCode": false,
+ "hidePrompt": false,
+ "scrolled": true
+ },
+ "source": [
+ "Comme on pouvait s'attendre au vu des données initiales, la\n",
+ "température n'a pas d'impact notable sur la probabilité d'échec des\n",
+ "joints toriques. Elle sera d'environ 0.2, comme dans les essais\n",
+ "précédents où nous il y a eu défaillance d'au moins un joint. Revenons\n",
+ "à l'ensemble des données initiales pour estimer la probabilité de\n",
+ "défaillance d'un joint:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.06521739130434782\n"
+ ]
+ }
+ ],
+ "source": [
+ "data = pd.read_csv(\"shuttle.csv\")\n",
+ "print(np.sum(data.Malfunction)/np.sum(data.Count))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Cette probabilité est donc d'environ $p=0.065$, sachant qu'il existe\n",
+ "un joint primaire un joint secondaire sur chacune des trois parties du\n",
+ "lançeur, la probabilité de défaillance des deux joints d'un lançeur\n",
+ "est de $p^2 \\approx 0.00425$. La probabilité de défaillance d'un des\n",
+ "lançeur est donc de $1-(1-p^2)^3 \\approx 1.2%$. Ça serait vraiment\n",
+ "pas de chance... Tout est sous contrôle, le décollage peut donc avoir\n",
+ "lieu demain comme prévu.\n",
+ "\n",
+ "Seulement, le lendemain, la navette Challenger explosera et emportera\n",
+ "avec elle ses sept membres d'équipages. L'opinion publique est\n",
+ "fortement touchée et lors de l'enquête qui suivra, la fiabilité des\n",
+ "joints toriques sera directement mise en cause. Au delà des problèmes\n",
+ "de communication interne à la NASA qui sont pour beaucoup dans ce\n",
+ "fiasco, l'analyse précédente comporte (au moins) un petit\n",
+ "problème... Saurez-vous le trouver ? Vous êtes libre de modifier cette\n",
+ "analyse et de regarder ce jeu de données sous tous les angles afin\n",
+ "d'expliquer ce qui ne va pas."
+ ]
+ }
+ ],
+ "metadata": {
+ "celltoolbar": "Hide code",
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/module4/ressources/moocrr_notebook/notebook_test.sh b/module4/ressources/moocrr_notebook/notebook_test.sh
new file mode 100644
index 0000000000000000000000000000000000000000..1d044308aaeec966049944d56cd971dbb68ba819
--- /dev/null
+++ b/module4/ressources/moocrr_notebook/notebook_test.sh
@@ -0,0 +1,35 @@
+jupyter-nbconvert --to notebook --execute notebook.ipynb --output notebook.nbconvert.ipynb
+
+compare_notebooks() {
+ OLD=$1
+ NEW=$2
+ mkdir -p `dirname sed/$1`
+ mkdir -p `dirname sed/$2`
+ echo "======= Comparing to $OLD ======="
+ sed -e "s/Date:.*Deviance:/Deviance/" -e "s/Time:.*Pearson/Pearson/" $1 > sed/$1
+ sed -e "s/Date:.*Deviance:/Deviance/" -e "s/Time:.*Pearson/Pearson/" $2 > sed/$2
+ # Test #1 (--ignore-matching-lines="image/png" )
+ diff -w --ignore-matching-lines="nbformat_minor" \
+ --ignore-matching-lines="hidePrompt" \
+ --ignore-matching-lines="scrolled" \
+ --ignore-matching-lines="No. Iterations:" \
+ --ignore-matching-lines="Covariance Type:" \
+ sed/$1 sed/$2 # | sed 's/^/>/'
+ CMP_RES=$?
+ echo "======= End of Comparison ======="
+ rm sed/$1 sed/$2
+ return $CMP_RES
+}
+
+compare_notebooks correct_output/notebook_orig.ipynb notebook.nbconvert.ipynb
+CMP1=$?
+compare_notebooks correct_output/notebook_844815ed865e.ipynb notebook.nbconvert.ipynb
+CMP2=$?
+
+if [ $CMP1 -eq "0" -o $CMP2 -eq "0" ] ; then
+ echo "Test succeeded";
+ return 0;
+else
+ echo "Test failed";
+ return 1;
+fi
diff --git a/module4/ressources/moocrr_notebook/shuttle.csv b/module4/ressources/moocrr_notebook/shuttle.csv
new file mode 100644
index 0000000000000000000000000000000000000000..9412ab30682565afb0ca3b4bcc6b0f99f632bbf2
--- /dev/null
+++ b/module4/ressources/moocrr_notebook/shuttle.csv
@@ -0,0 +1,24 @@
+Date,Count,Temperature,Pressure,Malfunction
+4/12/81,6,66,50,0
+11/12/81,6,70,50,1
+3/22/82,6,69,50,0
+11/11/82,6,68,50,0
+4/04/83,6,67,50,0
+6/18/82,6,72,50,0
+8/30/83,6,73,100,0
+11/28/83,6,70,100,0
+2/03/84,6,57,200,1
+4/06/84,6,63,200,1
+8/30/84,6,70,200,1
+10/05/84,6,78,200,0
+11/08/84,6,67,200,0
+1/24/85,6,53,200,2
+4/12/85,6,67,200,0
+4/29/85,6,75,200,0
+6/17/85,6,70,200,0
+7/2903/85,6,81,200,0
+8/27/85,6,76,200,0
+10/03/85,6,79,200,0
+10/30/85,6,75,200,2
+11/26/85,6,76,200,0
+1/12/86,6,58,200,1
diff --git a/module4/ressources/test_jupyter/.gitlab-ci.yml.basic b/module4/ressources/test_jupyter/.gitlab-ci.yml.basic
new file mode 100644
index 0000000000000000000000000000000000000000..87f1a119aa194b362e6f4a06cb29529c57a1c304
--- /dev/null
+++ b/module4/ressources/test_jupyter/.gitlab-ci.yml.basic
@@ -0,0 +1,13 @@
+image: "debian:stable"
+
+before_script:
+ - perl -v
+ - which perl
+
+perl_addition:
+ script:
+ - perl -e "print(3+2);"
+
+perl_multiplication:
+ script:
+ - perl -e "print(3*2);"
diff --git a/module4/ressources/test_jupyter/.gitlab-ci.yml.full b/module4/ressources/test_jupyter/.gitlab-ci.yml.full
new file mode 100644
index 0000000000000000000000000000000000000000..e74cca84b136872e8bc0807c1eddc98461dcfd56
--- /dev/null
+++ b/module4/ressources/test_jupyter/.gitlab-ci.yml.full
@@ -0,0 +1,24 @@
+jupyter_debian_frozen:
+ image: "alegrand38/moocrr_jupyter"
+ before_script:
+ - python3 --version
+ - jupyter-nbconvert --version
+ script:
+ - sh notebook_test.sh
+
+jupyter_scipy_uptodate:
+ image: "jupyter/scipy-notebook"
+ before_script:
+ - python3 --version
+ - jupyter-nbconvert --version
+ script:
+ - sh notebook_test.sh
+
+jupyter_debian_uptodate:
+ image: "debian:stable"
+ before_script:
+ - apt-get update && apt-get install -y python3 jupyter-nbconvert python3-ipykernel python3-matplotlib python3-pandas python3-numpy python3-statsmodels
+ - python3 --version
+ - jupyter-nbconvert --version
+ script:
+ - sh notebook_test.sh
diff --git a/module4/ressources/test_jupyter/.gitlab-ci.yml.scipy b/module4/ressources/test_jupyter/.gitlab-ci.yml.scipy
new file mode 100644
index 0000000000000000000000000000000000000000..c5bd596177ae6be0eb9906e6927f786b7c459f4f
--- /dev/null
+++ b/module4/ressources/test_jupyter/.gitlab-ci.yml.scipy
@@ -0,0 +1,9 @@
+image: "jupyter/scipy-notebook"
+
+before_script:
+ - python3 --version
+ - jupyter-nbconvert --version
+
+jupyter:
+ script:
+ - sh notebook_test.sh