Commit b5fef2cb authored by François Févotte's avatar François Févotte

Ex 3-3 : Correction de bugs dans les outils de reproductibilité

parent 3cb0e302
......@@ -5,7 +5,7 @@ module Tools
function run_julia(args...)
cd(@__DIR__)
julia = Base.julia_cmd()[1]
run(`$julia --color=yes --startup-file=no --project $args`)
@time run(`$julia --color=yes --startup-file=no --project $args`)
nothing
end
......@@ -17,9 +17,14 @@ function weave()
cd(@__DIR__)
opts = String[]
isfile("Exercice.so") && push!(opts, "-JExercice.so")
if isfile("Exercice.so")
@info "Using custom system image: Exercice.so"
push!(opts, "-JExercice.so")
end
run_julia(opts..., "make.jl")
run_julia(opts..., "weave.jl")
end
end
nothing
......@@ -8,9 +8,9 @@ Pkg.activate(@__DIR__)
Pkg.instantiate()
using PackageCompiler
@time create_sysimage(Symbol.(keys(Pkg.project().dependencies));
sysimage_path=Pkg.project().name * ".so",
precompile_execution_file=joinpath(@__DIR__, "make.jl"))
create_sysimage(Symbol.(keys(Pkg.project().dependencies));
sysimage_path=Pkg.project().name * ".so",
precompile_execution_file=joinpath(@__DIR__, "weave.jl"))
# Local Variables:
# mode: julia
......
......@@ -946,9 +946,9 @@ Missing data: 2012-09-29 - 2012-10-20 (21 days)
<p>Une visualisation de l&#39;ensemble des données semble montrer une augmentation tendancielle de la concentration en CO2, à laquelle se superpose une oscillation à plus haute fréquence.</p>
<div id="77369a40-747c-4818-997c-823ab5935693" style="width:576px;height:384px;"></div>
<div id="0931e72e-7523-4f49-a546-0816262b88e6" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('77369a40-747c-4818-997c-823ab5935693');
PLOT = document.getElementById('0931e72e-7523-4f49-a546-0816262b88e6');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -7423,9 +7423,9 @@ Missing data: 2012-09-29 - 2012-10-20 &#40;21 days&#41;
<p>Un zoom sur les dernières années laisse penser que le cycle court se produit sur une période annuelle, avec un minimum local atteint chaque année autour du mois d&#39;octobre.</p>
<div id="b1b87124-caea-443a-a309-af267979fc5f" style="width:576px;height:384px;"></div>
<div id="6318c333-3da2-4565-838d-9419d232035b" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('b1b87124-caea-443a-a309-af267979fc5f');
PLOT = document.getElementById('6318c333-3da2-4565-838d-9419d232035b');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -8003,9 +8003,9 @@ Missing data: 2012-09-29 - 2012-10-20 &#40;21 days&#41;
<p>En zoomant sur les données interpolées autour de l&#39;une des périodes de données manquantes, on observe bien le résultat attendu : une interpolation linéaire journalière lorsque les données sont disponibles, mais aucune interpolation lorsque les données sont manquantes.</p>
<div id="721b56d2-967a-4d06-89a8-0ad58d5e5f6c" style="width:576px;height:384px;"></div>
<div id="4576d633-4b0f-4730-b957-0c9fec2ae945" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('721b56d2-967a-4d06-89a8-0ad58d5e5f6c');
PLOT = document.getElementById('4576d633-4b0f-4730-b957-0c9fec2ae945');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -8291,9 +8291,9 @@ Missing data: 2012-09-29 - 2012-10-20 &#40;21 days&#41;
<p>Sur ces années complètes, la composante <code>day</code> de la date devrait être équirépartie entre 0 et 365, ce qui est globalement le cas. Les données manquantes n&#39;ont donc pas d&#39;impact significatif de ce point de vue là.</p>
<div id="81c8d63b-b2cb-44e8-95db-0c1c93218680" style="width:576px;height:384px;"></div>
<div id="d9fe71d7-2577-46b1-8b94-84132faacb6a" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('81c8d63b-b2cb-44e8-95db-0c1c93218680');
PLOT = document.getElementById('d9fe71d7-2577-46b1-8b94-84132faacb6a');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -8840,9 +8840,9 @@ Missing data: 2012-09-29 - 2012-10-20 &#40;21 days&#41;
<p>Examinons par exemple l&#39;effet de ce traitement sur les données interpolées de l&#39;année 1982. On voit, sur la figure du haut, les mesures brutes ainsi que la tendance locale &#40;affine&#41;. Sur la figure du bas, la composante périodique locale vérifie bien les contraintes demandées, avec ses valeurs nulles aux bords.</p>
<div id="21cd3557-d0d2-4699-a99b-b690baeec269" style="width:576px;height:384px;"></div>
<div id="c84526ce-6bf0-44c1-8f34-f06d50884815" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('21cd3557-d0d2-4699-a99b-b690baeec269');
PLOT = document.getElementById('c84526ce-6bf0-44c1-8f34-f06d50884815');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -11356,9 +11356,9 @@ Missing data: 2012-09-29 - 2012-10-20 &#40;21 days&#41;
<p>Et nous traçons l&#39;ensemble des composantes oscillantes locales aux côtés de cette moyenne.</p>
<div id="96bdfb6d-d341-4521-8615-c070e3b07c86" style="width:576px;height:384px;"></div>
<div id="cbb2c659-d933-4109-b0cd-7cfdf2f8490f" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('96bdfb6d-d341-4521-8615-c070e3b07c86');
PLOT = document.getElementById('cbb2c659-d933-4109-b0cd-7cfdf2f8490f');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -54763,9 +54763,9 @@ Missing data: 2012-09-29 - 2012-10-20 &#40;21 days&#41;
<p>Même s&#39;il reste des oscillations locales, nous constatons tout de même que la composante tendancielle est devenue suffisamment lisse pour récupérer une forme de monotonie.</p>
<div id="8d83041b-d791-4cac-94e0-056dc3903729" style="width:576px;height:384px;"></div>
<div id="67774a95-e6ad-4752-aa0d-4004b98b3c62" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('8d83041b-d791-4cac-94e0-056dc3903729');
PLOT = document.getElementById('67774a95-e6ad-4752-aa0d-4004b98b3c62');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -135398,9 +135398,9 @@ date_num ^ 2 9.10059e-8 2.66606e-9 34.135 &lt;1e-37 8.56585e-8
<p>Par ailleurs, s&#39;il est clair que la tendance est à l&#39;augmentation, on voit toutefois que l&#39;incertitude sur les paramètres n&#39;est pas complètement négligeable. L&#39;incertitude sur <span class="math">$\beta$</span> est en particulier de nature à engendrer une perte de prédictibilité du modèle en temps long.</p>
<div id="0104ecfb-4911-4f85-ae08-682b0cae2a5d" style="width:576px;height:384px;"></div>
<div id="2486ee38-4b2c-4ef1-bb96-56f4075db159" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('0104ecfb-4911-4f85-ae08-682b0cae2a5d');
PLOT = document.getElementById('2486ee38-4b2c-4ef1-bb96-56f4075db159');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -262586,9 +262586,9 @@ date_num ^ 2 9.10059e-8 2.66606e-9 34.135 &lt;1e-37 8.56585e-8
<p>On voit que la forme annuelle semble bien reproduite sur les 5 premières années, pour lesquelles il est possible de comparer les prédictions avec les mesures réelles. En revanche, la tendance ne colle que sur les deux premières années d&#39;extrapolation ; on observe un décalage significatif et croissant ensuite.</p>
<div id="483cf462-2f2f-43e8-8460-b93c6b24a85e" style="width:576px;height:384px;"></div>
<div id="a56ab5c9-608e-410e-b3bc-b262e357bf34" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('483cf462-2f2f-43e8-8460-b93c6b24a85e');
PLOT = document.getElementById('a56ab5c9-608e-410e-b3bc-b262e357bf34');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -265115,9 +265115,9 @@ date_num ^ 2 -8.3699e-16 1.52956e-16 -5.47208 &lt;1e-7 -1.13678e-15 -
<p>En reprenant l&#39;analyse précédente, ce nouveau modèle donne les prédictions suivantes, qui collent quasi-parfaitement aux mesures dans la période de test :</p>
<div id="f7ef88ea-a4c3-44f1-8d76-c2fc958453f5" style="width:576px;height:384px;"></div>
<div id="78878861-a121-4ee7-ae11-8387919e8c74" style="width:576px;height:384px;"></div>
<script>
PLOT = document.getElementById('f7ef88ea-a4c3-44f1-8d76-c2fc958453f5');
PLOT = document.getElementById('78878861-a121-4ee7-ae11-8387919e8c74');
Plotly.plot(PLOT, [
{
"xaxis": "x1",
......@@ -96,7 +96,7 @@ Pkg.status()
## Chargement des dépendances
```julia; echo=false; results="hidden"
@info "* Loading dependencies"
@info "* Loading dependencies (this might take a while...)"
```
Tant que nous y sommes, profitons en pour charger dès maintenant les paquets
......
......@@ -711,15 +711,23 @@ h3:before {
</ol>
<h2>Environnement</h2>
<p>L&#39;ensemble des briques logicielles sur lesquelles s&#39;appuie notre analyse constitue un &quot;environnement&quot;, décrit de manière succincte dans le fichier <a href="Project.toml"><code>Project.toml</code></a> et plus détaillée dans le fichier <a href="Manifest.toml"><code>Manifest.toml</code></a>. Les paquets logiciels compris dans cet environnement peuvent être installés en tapant les deux commandes suivantes dans la console Julia :</p>
<pre><code>julia&gt; include&#40;raw&quot;C:\Users\francois\Desktop\mooc-rr\module3\exo3\utils.jl&quot;&#41;
<pre><code>julia&gt; include&#40;raw&quot;C:\Users\francois\Desktop\mooc-rr\module3\exo3\Tools.jl&quot;&#41;
julia&gt; Exercice.setup&#40;&#41;
Activating environment at &#96;C:\Users\francois\Desktop\mooc-rr\module3\exo3\Project.toml&#96;
julia&gt; Tools.setup&#40;&#41;
Activating environment at &#96;.../Project.toml&#96;
&#91; Info: Installing required packages
...</code></pre>
Cloning default registries into &#96;~/.julia&#96;
Cloning registry from &quot;https://github.com/JuliaRegistries/General.git&quot;
Added registry &#96;General&#96; to &#96;~/.julia/registries/General&#96;
Installed Missings ───────────────────── v0.4.3
Installed DataAPI ────────────────────── v1.1.0
...
&#91; Info: Precompiling dependencies &#40;this might take a while&#41;
Precompiling project...
363.818213 seconds &#40;65 allocations: 2.656 KiB&#41;</code></pre>
<p><strong>Notes :</strong></p>
<ul>
<li><p>Dans la commande <code>include&#40;raw&#40;&quot;...utils.jl&quot;&#41;&#41;</code>, n&#39;oubliez pas d&#39;adapter le chemin du fichier <code>utils.jl</code>. Si vous êtes en train de visualiser ce document avec un navigateur web, vous pouvez probablement récupérer le chemin correspondant dans la barre d&#39;URL et la copier-coller. Notez que dans la console Julia sous windows, on &quot;colle&quot; avec un clic droit de la souris.</p>
<li><p>Dans la commande <code>include&#40;raw&#40;&quot;...Tools.jl&quot;&#41;&#41;</code>, n&#39;oubliez pas d&#39;adapter le chemin du fichier <a href="Tools.jl"><code>Tools.jl</code></a>. Si vous êtes en train de visualiser ce document avec un navigateur web, vous pouvez par exemple récupérer ce chemin dans le lien ci-dessus à l&#39;aide d&#39;un simple &quot;clic-droit &gt; copier l&#39;adresse du lien&quot; &#40;n&#39;oubliez pas d&#39;enlever le préfixe &quot;<code>file://</code>&quot; si vous faites cela &#33;&#41;.</p>
</li>
<li><p>Cette étape nécessite une connexion Internet afin de télécharger les paquets requis. Elle peut durer quelques minutes.</p>
</li>
......@@ -730,9 +738,9 @@ julia&gt; Exercice.setup&#40;&#41;
<p>Le document computationnel de l&#39;étude est constitué par le fichier <a href="exercice.jmd"><code>exercice.jmd</code></a>, qui entremêle commentaires &#40;en langage Markdown&#41; et code &#40;en langage Julia&#41;.</p>
<p>Ce document computationnel peut être rendu au format HTML, pour générer la sortie <a href="exercice.html"><code>exercice.html</code></a>, dans laquelle le code julia a été exécuté et les résultats produits sont visualisés. Tout ceci est pris en charge par le paquet Julia <a href="https://github.com/JunoLab/Weave.jl">Weave</a>, qui fournit un service similaire à <a href="https://yihui.org/knitr/">knitr</a> pour le langage R ou <a href="http://mpastell.com/pweave">Pweave</a> pour Python.</p>
<p>Pour &#40;re-&#41;générer ce document HTML, les commandes suivantes doivent être entrées dans la console Julia :</p>
<pre><code>julia&gt; include&#40;raw&quot;C:\Users\francois\Desktop\mooc-rr\module3\exo3\utils.jl&quot;&#41;
<pre><code>julia&gt; include&#40;raw&quot;C:\Users\francois\Desktop\mooc-rr\module3\exo3\Tools.jl&quot;&#41;
julia&gt; Exercice.weave&#40;&#41;
julia&gt; Tools.weave&#40;&#41;
Activating environment at &#96;.../Project.toml&#96;
&#91; Info: Writing to file exercice.jl
&#91; Info: Weaving chunk 1 from line 39
......@@ -741,12 +749,12 @@ julia&gt; Exercice.weave&#40;&#41;
&#91; Info: Weaving chunk 3 from line 73
...
&#91; Info: Report weaved to exercice.html
96.114542 seconds &#40;253.72 M allocations: 12.975 GiB, 4.71&#37; gc time&#41;</code></pre>
96.114542 seconds &#40;65 allocations: 2.656 KiB&#41;</code></pre>
<p><strong>Notes :</strong></p>
<ul>
<li><p>Il est inutile de ré-exécuter la ligne <code>include&#40;...&#41;</code> si vous utilisez la même console que dans les étapes précédentes.</p>
</li>
<li><p>Cette étape peut durer quelques minutes ; nous verrons dans la prochaine partie comment accélérer ce processus si vous prévoyez de réaliser et tester des modifications dans le document computationnel.</p>
<li><p>Cette étape peut durer une minute ou deux ; nous verrons dans la prochaine partie comment accélérer ce processus si vous prévoyez de réaliser et tester des modifications dans le document computationnel.</p>
</li>
<li><p>Vous pouvez garder votre console ouverte pour la ré-utiliser ultérieurement si nécessaire.</p>
</li>
......@@ -754,12 +762,18 @@ julia&gt; Exercice.weave&#40;&#41;
<h1>&#40;Optionnellement&#41; compilation des paquets de l&#39;environnement</h1>
<p>Vous pouvez tester dès maintenant vos idées en apportant des modifications au fichier <code>exercice.jmd</code> et en re-générant son rendu HTML selon les instructions de la partie précédente.</p>
<p>Nous voyons dans cette partie comment améliorer la productivité de ce genre de tests en compilant les paquets Julia utilisés dans l&#39;étude pour rendre leur utilisation plus performante.</p>
<pre><code>julia&gt; include&#40;raw&quot;C:\Users\francois\Desktop\mooc-rr\module3\exo3\utils.jl&quot;&#41;
<pre><code>julia&gt; include&#40;raw&quot;C:\Users\francois\Desktop\mooc-rr\module3\exo3\Tools.jl&quot;&#41;
julia&gt; Exercice.compile&#40;&#41;
...</code></pre>
<p>A partir de maintenant, le processus de génération du rendu HTML devrait être accéléré de manière substantielle, pour ne prendre que quelques secondes :</p>
<pre><code>julia&gt; Exercice.weave&#40;&#41;
julia&gt; Tools.compile&#40;&#41;
Activating environment at &#96;~/mooc/mooc-rr/module3/exo3/Project.toml&#96;
Activating environment at &#96;~/mooc/mooc-rr/module3/exo3/Project.toml&#96;
&#91; Info: Writing to file exercice.jl
...
&#91; Info: PackageCompiler: creating system image object file, this might take a while...
410.437941 seconds &#40;65 allocations: 2.641 KiB&#41;</code></pre>
<p>Prévoyez d&#39;aller boire un café : cette étape peut durer une bonne dizaine de minutes. A la fin, cette phase de compilation devrait avoir généré un nouveau fichier <code>Exercice.so</code> dans le répertoire de l&#39;étude. A partir de maintenant, le processus de génération du rendu HTML devrait être accéléré de manière substantielle, pour ne prendre que quelques secondes :</p>
<pre><code>julia&gt; Tools.weave&#40;&#41;
&#91; Info: Using custom system image: Exercice.so
Activating environment at &#96;.../Project.toml&#96;
&#91; Info: Writing to file exercice.jl
&#91; Info: Weaving chunk 1 from line 39
......@@ -768,7 +782,7 @@ julia&gt; Exercice.compile&#40;&#41;
&#91; Info: Weaving chunk 3 from line 73
...
&#91; Info: Report weaved to exercice.html
7.262408 seconds &#40;23.57 M allocations: 1.465 GiB, 12.50&#37; gc time&#41;</code></pre>
7.262408 seconds &#40;65 allocations: 2.656 KiB&#41;</code></pre>
<!-- Local Variables: -->
......
......@@ -68,20 +68,29 @@ environnement peuvent être installés en tapant les deux commandes suivantes da
la console Julia :
```
julia> include(raw"C:\Users\francois\Desktop\mooc-rr\module3\exo3\utils.jl")
julia> include(raw"C:\Users\francois\Desktop\mooc-rr\module3\exo3\Tools.jl")
julia> Exercice.setup()
Activating environment at `C:\Users\francois\Desktop\mooc-rr\module3\exo3\Project.toml`
julia> Tools.setup()
Activating environment at `.../Project.toml`
[ Info: Installing required packages
Cloning default registries into `~/.julia`
Cloning registry from "https://github.com/JuliaRegistries/General.git"
Added registry `General` to `~/.julia/registries/General`
Installed Missings ───────────────────── v0.4.3
Installed DataAPI ────────────────────── v1.1.0
...
[ Info: Precompiling dependencies (this might take a while)
Precompiling project...
363.818213 seconds (65 allocations: 2.656 KiB)
```
**Notes :**
- Dans la commande `include(raw("...utils.jl"))`, n'oubliez pas d'adapter le
chemin du fichier `utils.jl`. Si vous êtes en train de visualiser ce document
avec un navigateur web, vous pouvez probablement récupérer le chemin
correspondant dans la barre d'URL et la copier-coller. Notez que dans la
console Julia sous windows, on "colle" avec un clic droit de la souris.
- Dans la commande `include(raw("...Tools.jl"))`, n'oubliez pas d'adapter le
chemin du fichier [`Tools.jl`](Tools.jl). Si vous êtes en train de visualiser
ce document avec un navigateur web, vous pouvez par exemple récupérer ce
chemin dans le lien ci-dessus à l'aide d'un simple "clic-droit > copier
l'adresse du lien" (n'oubliez pas d'enlever le préfixe "`file://`" si vous
faites cela !).
- Cette étape nécessite une connexion Internet afin de télécharger les paquets
requis. Elle peut durer quelques minutes.
......@@ -107,9 +116,9 @@ Pour (re-)générer ce document HTML, les commandes suivantes doivent être entr
dans la console Julia :
```
julia> include(raw"C:\Users\francois\Desktop\mooc-rr\module3\exo3\utils.jl")
julia> include(raw"C:\Users\francois\Desktop\mooc-rr\module3\exo3\Tools.jl")
julia> Exercice.weave()
julia> Tools.weave()
Activating environment at `.../Project.toml`
[ Info: Writing to file exercice.jl
[ Info: Weaving chunk 1 from line 39
......@@ -118,14 +127,14 @@ julia> Exercice.weave()
[ Info: Weaving chunk 3 from line 73
...
[ Info: Report weaved to exercice.html
96.114542 seconds (253.72 M allocations: 12.975 GiB, 4.71% gc time)
96.114542 seconds (65 allocations: 2.656 KiB)
```
**Notes :**
- Il est inutile de ré-exécuter la ligne `include(...)` si vous utilisez la même
console que dans les étapes précédentes.
- Cette étape peut durer quelques minutes ; nous verrons dans la prochaine
- Cette étape peut durer une minute ou deux ; nous verrons dans la prochaine
partie comment accélérer ce processus si vous prévoyez de réaliser et tester
des modifications dans le document computationnel.
......@@ -145,19 +154,26 @@ utilisation plus performante.
```
julia> include(raw"C:\Users\francois\Desktop\mooc-rr\module3\exo3\utils.jl")
julia> include(raw"C:\Users\francois\Desktop\mooc-rr\module3\exo3\Tools.jl")
julia> Exercice.compile()
julia> Tools.compile()
Activating environment at `~/mooc/mooc-rr/module3/exo3/Project.toml`
Activating environment at `~/mooc/mooc-rr/module3/exo3/Project.toml`
[ Info: Writing to file exercice.jl
...
[ Info: PackageCompiler: creating system image object file, this might take a while...
410.437941 seconds (65 allocations: 2.641 KiB)
```
Cette phase de compilation devrait avoir généré un nouveau fichier `Exercice.so`
dans le répertoire de l'étude. A partir de maintenant, le processus de
génération du rendu HTML devrait être accéléré de manière substantielle, pour ne
prendre que quelques secondes :
Prévoyez d'aller boire un café : cette étape peut durer une bonne dizaine de
minutes. A la fin, cette phase de compilation devrait avoir généré un nouveau
fichier `Exercice.so` dans le répertoire de l'étude. A partir de maintenant, le
processus de génération du rendu HTML devrait être accéléré de manière
substantielle, pour ne prendre que quelques secondes :
```
julia> Exercice.weave()
julia> Tools.weave()
[ Info: Using custom system image: Exercice.so
Activating environment at `.../Project.toml`
[ Info: Writing to file exercice.jl
[ Info: Weaving chunk 1 from line 39
......@@ -166,9 +182,10 @@ julia> Exercice.weave()
[ Info: Weaving chunk 3 from line 73
...
[ Info: Report weaved to exercice.html
7.262408 seconds (23.57 M allocations: 1.465 GiB, 12.50% gc time)
7.262408 seconds (65 allocations: 2.656 KiB)
```
<!-- Local Variables: --> <!-- mode: markdown --> <!-- ispell-local-dictionary:
"french" --> <!-- End: -->
<!-- Local Variables: -->
<!-- mode: markdown -->
<!-- ispell-local-dictionary: "french" -->
<!-- End: -->
......@@ -8,6 +8,10 @@ Pkg.activate(@__DIR__)
@info "Installing required packages"
Pkg.instantiate()
Pkg.instantiate()
@info "Precompiling dependencies (this might take a while)"
Pkg.precompile()
# Local Variables:
# mode: julia
......
......@@ -11,11 +11,9 @@ Pkg.activate(@__DIR__)
Pkg.instantiate()
using Weave
let srcfile = joinpath(@__DIR__, "exercice.jmd")
tangle(srcfile)
Weave.weave() = @time weave(srcfile)
weave()
end
srcfile = joinpath(@__DIR__, "exercice.jmd")
tangle(srcfile)
weave(srcfile)
# Local Variables:
# mode: julia
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment