2045 lines
60 KiB
Julia
2045 lines
60 KiB
Julia
### A Pluto.jl notebook ###
|
||
# v0.19.19
|
||
|
||
#> [frontmatter]
|
||
#> title = " TP1 - Reinforcement learning "
|
||
#> date = "2022-12-14"
|
||
#> tags = ["RL"]
|
||
|
||
using Markdown
|
||
using InteractiveUtils
|
||
|
||
# This Pluto notebook uses @bind for interactivity. When running this notebook outside of Pluto, the following 'mock version' of @bind gives bound variables a default value (instead of an error).
|
||
macro bind(def, element)
|
||
quote
|
||
local iv = try Base.loaded_modules[Base.PkgId(Base.UUID("6e696c72-6542-2067-7265-42206c756150"), "AbstractPlutoDingetjes")].Bonds.initial_value catch; b -> missing; end
|
||
local el = $(esc(element))
|
||
global $(esc(def)) = Core.applicable(Base.get, el) ? Base.get(el) : iv(el)
|
||
el
|
||
end
|
||
end
|
||
|
||
# ╔═╡ 26fdd17e-f03a-4835-93be-85303fe526d8
|
||
begin
|
||
using Plots # pour le tracé de figures
|
||
using PlutoUI # pour les objets Pluto
|
||
using LinearAlgebra # pour les matrices identité
|
||
using SparseArrays # pour les matrices creuses
|
||
using LaTeXStrings # pour les strings en LaTeX (pour les plots)
|
||
import Random
|
||
TableOfContents(depth=4)
|
||
end
|
||
|
||
# ╔═╡ 56ac3473-24f4-42d7-84e1-cfce6a70d8d5
|
||
html"""
|
||
<style>
|
||
pluto-output, img {
|
||
display: block;
|
||
margin: auto;
|
||
}
|
||
.sliders {
|
||
position: fixed;
|
||
left: 2rem;
|
||
top: 40%;
|
||
z-index: 1000;
|
||
}
|
||
</style>
|
||
"""
|
||
|
||
# ╔═╡ ccf4d63e-7ace-11ed-2123-d9dbb62bd308
|
||
html"""
|
||
<center>
|
||
<strong style="font-size: 2rem;">
|
||
TP1 - Reinforcement learning <br/>
|
||
Laurent Fainsin <br/>
|
||
2021 - 2022
|
||
</strong>
|
||
</center>
|
||
"""
|
||
|
||
# ╔═╡ 9f2879c1-c22b-4067-ad20-4e4c56cc8d00
|
||
begin
|
||
REWARD_MOVE_slider = @bind REWARD_MOVE Slider(-0.1:0.01:0, default=-0.04, show_value=true)
|
||
REWARD_GOAL_slider = @bind REWARD_GOAL Slider(0:1:10, default=1, show_value=true)
|
||
REWARD_DEATH_slider = @bind REWARD_DEATH Slider(-10:1:0, default=-2, show_value=true)
|
||
DISCOUNT_FACTOR_slider = @bind DISCOUNT_FACTOR Slider(0.9:0.01:0.99, default=0.9, show_value=true)
|
||
|
||
div = html"""<div class="sliders">"""
|
||
div_end = html"""</div>"""
|
||
|
||
md"""
|
||
$(div)
|
||
|
||
Hyper-paramètres:
|
||
|
||
REWARD\_MOVE: $(REWARD_MOVE_slider)
|
||
|
||
REWARD\_GOAL: $(REWARD_GOAL_slider)
|
||
|
||
REWARD\_DEATH: $(REWARD_DEATH_slider)
|
||
|
||
DISCOUNT\_FACTOR: $(DISCOUNT_FACTOR_slider)
|
||
|
||
$(div_end)
|
||
"""
|
||
end
|
||
|
||
# ╔═╡ 0a30a68a-068e-41fb-92c4-000869ba7dff
|
||
RANDOM_SEED = 420
|
||
|
||
# ╔═╡ 07b57746-fba0-49aa-ba17-6dcb0bbe44e5
|
||
MAX_ITERATIONS = 350
|
||
|
||
# ╔═╡ 92d6874b-651c-4551-840e-ad5d1e934aeb
|
||
MOVEMENTS = [
|
||
0.7 0.1 0.1 0.1
|
||
0.1 0.7 0.1 0.1
|
||
0.1 0.1 0.7 0.1
|
||
0.1 0.1 0.1 0.7
|
||
]
|
||
|
||
# ╔═╡ fe44d7f2-155e-42f2-83c3-dd18aadb3810
|
||
md"""
|
||
On définit notre environnement comme une grille 3x4:
|
||
"""
|
||
|
||
# ╔═╡ 28b769a6-dd3c-43ab-bae0-646d8ebc35d6
|
||
begin
|
||
ARROW_SYMBOLS = ["←", "↑", "↓", "→"]
|
||
DEATH_SYMBOL = "☠"
|
||
SUCCESS_SYMBOL = "✓"
|
||
WALL_SYMBOL = "■"
|
||
EMPTY_SYMBOL = "□"
|
||
|
||
[
|
||
EMPTY_SYMBOL EMPTY_SYMBOL EMPTY_SYMBOL SUCCESS_SYMBOL
|
||
EMPTY_SYMBOL WALL_SYMBOL EMPTY_SYMBOL DEATH_SYMBOL
|
||
EMPTY_SYMBOL EMPTY_SYMBOL EMPTY_SYMBOL EMPTY_SYMBOL
|
||
]
|
||
end
|
||
|
||
# ╔═╡ 3881603c-619b-4976-ac4c-2c7e7f3a6ec7
|
||
md"""
|
||
On peut définir nos rewards tels que:
|
||
"""
|
||
|
||
# ╔═╡ fb797a9b-6a0a-4a77-a9b6-6804f98639bb
|
||
begin
|
||
REWARDS = [
|
||
REWARD_MOVE, REWARD_MOVE, REWARD_MOVE, REWARD_GOAL,
|
||
REWARD_MOVE, REWARD_MOVE, REWARD_DEATH,
|
||
REWARD_MOVE, REWARD_MOVE, REWARD_MOVE, REWARD_MOVE,
|
||
]
|
||
|
||
local REWARDS_display = copy(REWARDS)
|
||
insert!(REWARDS_display, 6, 0)
|
||
REWARDS_display = permutedims(reshape(REWARDS_display, 4, 3))
|
||
REWARDS_display = sparse(REWARDS_display)
|
||
end
|
||
|
||
# ╔═╡ 1e3abda8-6645-48ba-874d-28e1011fc3e3
|
||
md"""
|
||
# Performance Prediction
|
||
"""
|
||
|
||
# ╔═╡ beb410a8-03e2-4f18-8ccd-941cc926ee12
|
||
md"""
|
||
## Question 1
|
||
|
||
> Assume the random policy, that is, the policy that takes every possible action with probability 1/4. Compute its value function by solving \
|
||
> $V = (I − \gamma P )^{-1} R$. \
|
||
> Since there are 11 possible states in the problem, the vectors ``R`` and ``V`` have have length 11, and the matrix ``P`` has dimension 11x11. There are two absorbing states, i.e., they are visited once, and their respective reward (+1 or -1) is only accrued once. To model this, you can simply put all 0’s in all the elements of the respective two lines.
|
||
"""
|
||
|
||
# ╔═╡ 133f291f-6f21-4441-86f7-ba190a7d6b1f
|
||
md"""
|
||
On définit une politique aléatoire (à la main):
|
||
"""
|
||
|
||
# ╔═╡ e14f9977-d2fd-4d05-84d6-614008dc0c4a
|
||
[
|
||
ARROW_SYMBOLS[2] ARROW_SYMBOLS[1] ARROW_SYMBOLS[1] SUCCESS_SYMBOL
|
||
ARROW_SYMBOLS[1] WALL_SYMBOL ARROW_SYMBOLS[1] DEATH_SYMBOL
|
||
ARROW_SYMBOLS[1] ARROW_SYMBOLS[3] ARROW_SYMBOLS[2] ARROW_SYMBOLS[1]
|
||
]
|
||
|
||
# ╔═╡ 486c93ab-9cb9-4df4-b702-bbe12a961647
|
||
md"""
|
||
Via nos probabilités de mouvements on peut alors constituer ``P``:
|
||
"""
|
||
|
||
# ╔═╡ ab2d705d-fc00-43b2-bb6d-2a3d4ba9dab1
|
||
begin
|
||
P = [
|
||
[
|
||
0.8, 0.1, 0.0, 0.0,
|
||
0.1, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.7, 0.2, 0.1, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.7, 0.1, 0.1,
|
||
0.0, 0.1, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.1, 0.0, 0.0, 0.0,
|
||
0.8, 0.0, 0.0,
|
||
0.1, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.1, 0.0,
|
||
0.0, 0.7, 0.1,
|
||
0.0, 0.0, 0.1, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.1, 0.0, 0.0,
|
||
0.8, 0.1, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.1, 0.8, 0.1, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.7, 0.0,
|
||
0.0, 0.1, 0.1, 0.1,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.1,
|
||
0.0, 0.0, 0.7, 0.2,
|
||
],
|
||
]
|
||
|
||
P = sparse(reduce(hcat, P)')
|
||
end
|
||
|
||
# ╔═╡ b7ae89c9-3c1b-4f5c-af5b-164d95ccca41
|
||
md"""
|
||
On peut alors calculer ``V``:
|
||
"""
|
||
|
||
# ╔═╡ 03c17428-5ab9-42e7-bf79-92eb846f11cb
|
||
begin
|
||
V = Matrix(I(length(REWARDS)) - DISCOUNT_FACTOR * P) \ REWARDS
|
||
|
||
local V_display = copy(V)
|
||
insert!(V_display, 6, 0)
|
||
V_display = permutedims(reshape(V_display, 4, 3))
|
||
V_display = sparse(V_display)
|
||
end
|
||
|
||
# ╔═╡ c65d0dbc-ecd7-4320-9b3a-a1b9c0545f9a
|
||
md"""
|
||
### Bonus
|
||
On contrôle que ``V`` vérifie l'équation de Bellman en calculant une itération de l'équation de Bellman:
|
||
|
||
$V_{\text{next}} = R + \gamma P V$
|
||
|
||
et en observant que ``V`` est un point fixe:
|
||
|
||
$V_{\text{next}} = V$
|
||
|
||
On calcule alors ``V_\text{next}``:
|
||
"""
|
||
|
||
# ╔═╡ ad547684-bcbe-44f4-9fc1-f327d2db4584
|
||
begin
|
||
V_next = REWARDS + Matrix(DISCOUNT_FACTOR * P) * V
|
||
|
||
local V_display = copy(V_next)
|
||
insert!(V_display, 6, 0)
|
||
V_display = permutedims(reshape(V_display, 4, 3))
|
||
V_display = sparse(V_display)
|
||
end
|
||
|
||
# ╔═╡ d3703ab8-912c-417d-acd9-29590ec1134b
|
||
if isapprox(V_next, V)
|
||
Markdown.MD(Markdown.Admonition("correct", "V est un point fixe", [md"L'équation de Bellman est vérifiée"]));
|
||
else
|
||
Markdown.MD(Markdown.Admonition("danger", "V n'est pas un point fixe", [md"L'équation de Bellman n'est vérifiée"]));
|
||
end
|
||
|
||
# ╔═╡ 1319b304-5126-4825-8076-e113e4dd3635
|
||
md"""
|
||
## Question 2
|
||
|
||
> Evaluate now the policy using Iterative Policy Evaluation (lecture 2, 2nd part, slides 11/35), and verify that the algorithm converges to the result obtained in 1. To stop iterating, you can take as a criterion that the difference between two iterations must be smaller than some small ``\delta``. Due to the contraction principle, the initial vector can be arbitrary.
|
||
"""
|
||
|
||
# ╔═╡ 3ea3f177-c576-4b9e-a54b-c427e29a8491
|
||
md"""
|
||
On initialise ``V_\text{random} \in [0, 1]^{11}`` aléatoirement.
|
||
|
||
On souhaite vérifier que ``V_\text{random}`` converge vers ``V`` par l'évaluation itérative de la politique ``P``.
|
||
"""
|
||
|
||
# ╔═╡ e94fe8a6-274b-4121-b1fc-063d3710c2f7
|
||
begin
|
||
Random.seed!(RANDOM_SEED)
|
||
V_random = rand(length(REWARDS))
|
||
local diffs = Vector{Float64}()
|
||
for _ in 1:MAX_ITERATIONS
|
||
local V_old = V_random
|
||
V_random = REWARDS + Matrix(DISCOUNT_FACTOR * P) * V_random
|
||
append!(diffs, norm(V_random - V_old))
|
||
if isapprox(V_random, V_old)
|
||
break
|
||
end
|
||
end
|
||
|
||
plot(
|
||
diffs,
|
||
labels = "",
|
||
xlabel = L"n",
|
||
ylabel = L"|| V_{n+1} - V_n ||^2",
|
||
yticks=[10.0^-x for x in 0:10],
|
||
linewidth=2,
|
||
yaxis=:log,
|
||
title="Iterative Policy Evaluation convergence",
|
||
)
|
||
end
|
||
|
||
# ╔═╡ 80090d5f-d56c-4844-a04f-444ed49e5f34
|
||
if isapprox(V_random, V, rtol=1e-5)
|
||
Markdown.MD(Markdown.Admonition("correct", "L'évaluation itérative des politiques est vérifiée", [md"``V_\text{random}`` converge vers ``V``"]));
|
||
else
|
||
Markdown.MD(Markdown.Admonition("danger", "L'évaluation itérative des politiques n'est pas vérifiée", [md"``V_\text{random}`` ne converge pas vers ``V``"]));
|
||
end
|
||
|
||
# ╔═╡ 98362798-aae4-4540-9e98-cc7371802552
|
||
md"""
|
||
## Question 3
|
||
|
||
> To verify that the Bellman operator is a contraction, take two initial vectors, and calculate the max of their differences. Then, apply the iterative policy evaluation to these 2 vectors as done in the previous item, and plot the maximum of their differences as you keep iterating. Observe what happens with the difference as you iterate, and explain it.
|
||
"""
|
||
|
||
# ╔═╡ 30874daf-7b0e-4335-9a50-d19389cf1620
|
||
md"""
|
||
On initialise ``V_{r1}, V_{r2} \in [0, 1]^{11}`` aléatoirement.
|
||
|
||
On souhaite vérifier que ``V_{r1}`` converge vers ``V_{r2}`` (et aussi vers ``V``) par l'évaluation itérative de la politique ``P``.
|
||
"""
|
||
|
||
# ╔═╡ c005a3f8-765c-4a50-90ef-73a5a72eee01
|
||
begin
|
||
Random.seed!(RANDOM_SEED)
|
||
V_random1 = rand(length(REWARDS))
|
||
V_random2 = rand(length(REWARDS))
|
||
local diffs = Vector{Float64}()
|
||
for _ in 1:MAX_ITERATIONS
|
||
V_random1 = REWARDS + Matrix(DISCOUNT_FACTOR * P) * V_random1
|
||
V_random2 = REWARDS + Matrix(DISCOUNT_FACTOR * P) * V_random2
|
||
append!(diffs, norm(V_random1 - V_random2))
|
||
if isapprox(V_random1, V_random2)
|
||
break
|
||
end
|
||
end
|
||
|
||
plot(
|
||
diffs,
|
||
labels = "",
|
||
xlabel = L"n",
|
||
ylabel = L"|| V_{r1} - V_{r2} ||^2",
|
||
yticks=[10.0^-x for x in 0:10],
|
||
linewidth=2,
|
||
yaxis=:log,
|
||
title="Bellman's operator contraction",
|
||
)
|
||
end
|
||
|
||
# ╔═╡ 1b43e9e5-d7d2-4b5e-a2b2-3a8b8eda6d62
|
||
if isapprox(V_random1, V_random2, rtol=0.01)
|
||
Markdown.MD(Markdown.Admonition("correct", "On vérifie que l'opérateur de Bellman est une contraction", [md"``V_{r1}`` converge vers ``V_{r2}``"]));
|
||
else
|
||
Markdown.MD(Markdown.Admonition("danger", "On ne vérifie pas que l'opérateur de Bellman est une contraction", [md"``V_{r1}`` ne converge pas vers ``V_{r2}``"]));
|
||
end
|
||
|
||
# ╔═╡ add0221b-e352-4559-a722-c45a64f573f9
|
||
md"""
|
||
# Optimization
|
||
"""
|
||
|
||
# ╔═╡ 84e07dce-bf6d-4ac1-bfa4-65414fe1d787
|
||
md"""
|
||
## Question 1
|
||
|
||
> Write down the Bellman equation that characterizes the optimal policy.
|
||
"""
|
||
|
||
# ╔═╡ df13fa05-14de-409b-a0b1-5bba5eff432e
|
||
md"""
|
||
Bellman Optimality Equation for ``V_\star`` and ``\pi_\star``:
|
||
|
||
$V_\star(s) = \max_{a \in A} \left( r(s,a) + \gamma \sum_{s' \in S} p(s' | s, a) V_\star(s') \right)$
|
||
|
||
$\pi_\star(s) \in \mathop{\mathrm{argmax}}_{a \in A} \left( r(s,a) + \gamma \sum_{s' \in S} p(s' | s, a) V_\star(s') \right)$
|
||
"""
|
||
|
||
# ╔═╡ ac490e4a-ce20-4288-a04f-c224df5ade1a
|
||
md"""
|
||
## Question 2
|
||
|
||
> Solve numerically the optimal value function by Value Iteration Algorithm (lecture 2, 2nd part, slides 15/35). Verify that the solution you obtain satisfies the Bellman equation.
|
||
"""
|
||
|
||
# ╔═╡ 33890f22-d3f6-4bcf-870d-756f7ff250a9
|
||
md"""
|
||
``P_g`` la politique du déplacement toujours à gauche:
|
||
"""
|
||
|
||
# ╔═╡ cf9fb8a8-6c93-4c43-9f01-5f198f0cf4aa
|
||
begin
|
||
P_g = [
|
||
[
|
||
0.8, 0.1, 0.0, 0.0,
|
||
0.1, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.7, 0.2, 0.1, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.7, 0.1, 0.1,
|
||
0.0, 0.1, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.1, 0.0, 0.0, 0.0,
|
||
0.8, 0.0, 0.0,
|
||
0.1, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.1, 0.0,
|
||
0.0, 0.7, 0.1,
|
||
0.0, 0.0, 0.1, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.1, 0.0, 0.0,
|
||
0.8, 0.1, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.7, 0.2, 0.1, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.1, 0.0,
|
||
0.0, 0.7, 0.1, 0.1,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.1,
|
||
0.0, 0.0, 0.7, 0.2,
|
||
],
|
||
]
|
||
|
||
P_g = sparse(reduce(hcat, P_g)')
|
||
end
|
||
|
||
# ╔═╡ dc87b85f-c87c-4302-9124-194bd799f1fd
|
||
md"""
|
||
``P_h`` la politique du déplacement toujours en haut:
|
||
"""
|
||
|
||
# ╔═╡ b2595dec-aa5b-462b-b0f8-3555c1231b2f
|
||
begin
|
||
P_h = [
|
||
[
|
||
0.8, 0.1, 0.0, 0.0,
|
||
0.1, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.1, 0.8, 0.1, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.1, 0.7, 0.1,
|
||
0.0, 0.1, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.7, 0.0, 0.0, 0.0,
|
||
0.2, 0.0, 0.0,
|
||
0.1, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.7, 0.0,
|
||
0.0, 0.1, 0.1,
|
||
0.0, 0.0, 0.1, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.7, 0.0, 0.0,
|
||
0.2, 0.1, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.1, 0.8, 0.1, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.7, 0.0,
|
||
0.0, 0.1, 0.1, 0.1,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.7,
|
||
0.0, 0.0, 0.1, 0.2,
|
||
],
|
||
]
|
||
|
||
P_h = sparse(reduce(hcat, P_h)')
|
||
end
|
||
|
||
# ╔═╡ 70edf811-adb0-4ae8-941a-b298d85a6e0e
|
||
md"""
|
||
``P_b`` la politique du déplacement toujours en bas:
|
||
"""
|
||
|
||
# ╔═╡ 875673f1-08c9-4713-bbc2-85b0a7a0cb0a
|
||
begin
|
||
P_b = [
|
||
[
|
||
0.2, 0.1, 0.0, 0.0,
|
||
0.7, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.1, 0.8, 0.1, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.1, 0.1, 0.1,
|
||
0.0, 0.7, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.1, 0.0, 0.0, 0.0,
|
||
0.2, 0.0, 0.0,
|
||
0.7, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.1, 0.0,
|
||
0.0, 0.1, 0.1,
|
||
0.0, 0.0, 0.7, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.1, 0.0, 0.0,
|
||
0.8, 0.1, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.1, 0.8, 0.1, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.1, 0.0,
|
||
0.0, 0.1, 0.7, 0.1,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.1,
|
||
0.0, 0.0, 0.1, 0.8,
|
||
],
|
||
]
|
||
|
||
P_b = sparse(reduce(hcat, P_b)')
|
||
end
|
||
|
||
# ╔═╡ 2deaac7c-ad14-43b0-9cd5-9f0ec12d324c
|
||
md"""
|
||
``P_d`` la politique du déplacement toujours à droite:
|
||
"""
|
||
|
||
# ╔═╡ b5c93b6f-933c-41b4-8399-44cc0fa07fab
|
||
begin
|
||
P_d = [
|
||
[
|
||
0.2, 0.7, 0.0, 0.0,
|
||
0.1, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.1, 0.2, 0.7, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.1, 0.1, 0.7,
|
||
0.0, 0.1, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.1, 0.0, 0.0, 0.0,
|
||
0.8, 0.0, 0.0,
|
||
0.1, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.1, 0.0,
|
||
0.0, 0.1, 0.7,
|
||
0.0, 0.0, 0.1, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.1, 0.0, 0.0,
|
||
0.2, 0.7, 0.0, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.0,
|
||
0.1, 0.2, 0.7, 0.0,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.1, 0.0,
|
||
0.0, 0.1, 0.1, 0.7,
|
||
],
|
||
[
|
||
0.0, 0.0, 0.0, 0.0,
|
||
0.0, 0.0, 0.1,
|
||
0.0, 0.0, 0.1, 0.8,
|
||
],
|
||
]
|
||
|
||
P_d = sparse(reduce(hcat, P_d)')
|
||
end
|
||
|
||
# ╔═╡ 8015bdbb-82dd-48da-905d-a25e5c864298
|
||
md"""
|
||
Pour trouver la politique optimal, on peut procéder de la façon suivante:
|
||
|
||
Initialiser ``V_\star`` (random). \
|
||
Tant qu'on a pas convergé (ou atteint `MAX_ITERATIONS`):
|
||
- Calculer pour chaque direction (gauche, haut, bas, droite) le vecteur correspondant à la fonction valeur de la politique associée à la direction.
|
||
- Sélectionner notre nouvel `V_optimal` comme le maximum par ligne de nos vecteurs issus des fonctions valeur (des quatre directions).
|
||
- Vérifier la convergeance par comparaison avec l'itération précédente.
|
||
|
||
Par application de cet algorithme on obtient alors ``V_\star``:
|
||
"""
|
||
|
||
# ╔═╡ 3d7d0b11-5b99-4b1f-ab06-3366678eece8
|
||
begin
|
||
Random.seed!(RANDOM_SEED)
|
||
V_optimal = rand(length(REWARDS))
|
||
pi = zeros(length(REWARDS))
|
||
|
||
for _ in 1:MAX_ITERATIONS
|
||
local V_g = REWARDS + Matrix(DISCOUNT_FACTOR * P_g) * V_optimal
|
||
local V_h = REWARDS + Matrix(DISCOUNT_FACTOR * P_h) * V_optimal
|
||
local V_b = REWARDS + Matrix(DISCOUNT_FACTOR * P_b) * V_optimal
|
||
local V_d = REWARDS + Matrix(DISCOUNT_FACTOR * P_d) * V_optimal
|
||
|
||
local V_new = maximum.(eachrow([V_g V_h V_b V_d]))
|
||
|
||
if isapprox(V_new, V_optimal)
|
||
pi = argmax.(eachrow([V_g V_h V_b V_d]))
|
||
break
|
||
else
|
||
V_optimal = V_new
|
||
end
|
||
end
|
||
|
||
local V_display = copy(V_optimal)
|
||
insert!(V_display, 6, 0)
|
||
V_display = permutedims(reshape(V_display, 4, 3))
|
||
V_display = sparse(V_display)
|
||
end
|
||
|
||
# ╔═╡ 664bb753-ccce-4c7a-8b11-76261a3b80d2
|
||
md"""
|
||
## Question 3
|
||
|
||
> Explain how you can infer the optimal action in every state from the optimal value function ``V_\star(s)``. Represent in a 2D matrix the optimal policy.
|
||
"""
|
||
|
||
# ╔═╡ df01ea55-b289-4c13-8a6b-780ce068e44c
|
||
md"""
|
||
La politique optimale se trouve en sélectionnant la direction la plus favorable dans chaque état:
|
||
"""
|
||
|
||
# ╔═╡ d7ff1cb5-d2b4-4597-bcef-0f74f2e7e0db
|
||
begin
|
||
pi_symbols = [ARROW_SYMBOLS[i] for i in pi]
|
||
insert!(pi_symbols, 6, WALL_SYMBOL)
|
||
pi_symbols[4] = SUCCESS_SYMBOL
|
||
pi_symbols[8] = DEATH_SYMBOL
|
||
permutedims(reshape(pi_symbols, 4, 3))
|
||
end
|
||
|
||
# ╔═╡ 40b7e793-d869-4b68-83a1-6bd7d20a3941
|
||
md"""
|
||
## Question 4
|
||
|
||
> Compare the performances obtained with the random policy and the optimal one, how can you conclude that the optimal policy performs better ?
|
||
"""
|
||
|
||
# ╔═╡ dce3978b-1334-426e-80cc-9cfe63989909
|
||
md"""
|
||
À partir ``\pi^\star`` on peut aussi trouver ``P^\star`` la matrice de notre politique optimale:
|
||
"""
|
||
|
||
# ╔═╡ 7aae25dc-38cf-40d5-a7da-44d13d397194
|
||
begin
|
||
P_star = sparse(zeros(11, 11))
|
||
for i in 1:11
|
||
if pi[i] == 1
|
||
P_star[i, :] = P_g[i, :]
|
||
elseif pi[i] == 2
|
||
P_star[i, :] = P_h[i, :]
|
||
elseif pi[i] == 3
|
||
P_star[i, :] = P_b[i, :]
|
||
else
|
||
P_star[i, :] = P_d[i, :]
|
||
end
|
||
end
|
||
P_star
|
||
end
|
||
|
||
# ╔═╡ b075f5fc-85ac-45a0-8e27-605d3dac0e97
|
||
begin
|
||
Random.seed!(RANDOM_SEED)
|
||
V_Prandom = rand(length(REWARDS))
|
||
V_Poptimal = rand(length(REWARDS))
|
||
|
||
ratio = Vector{Float64}()
|
||
convergence_random = Vector{Float64}()
|
||
convergence_optimal = Vector{Float64}()
|
||
|
||
for _ in 1:MAX_ITERATIONS
|
||
V_Prandom = REWARDS + Matrix(DISCOUNT_FACTOR * P) * V_Prandom
|
||
V_Poptimal = REWARDS + Matrix(DISCOUNT_FACTOR * P_star) * V_Poptimal
|
||
|
||
append!(convergence_optimal, norm(V_Poptimal-V_optimal))
|
||
append!(convergence_random, norm(V_Prandom-V))
|
||
append!(ratio, norm(V_Poptimal./V_Prandom))
|
||
end
|
||
end
|
||
|
||
# ╔═╡ 1fe62967-a9ea-4f6a-817e-666a900c8f92
|
||
plot(
|
||
[convergence_optimal, convergence_random],
|
||
labels = ["Optimal" "Random"],
|
||
xlabel = L"n",
|
||
ylabel = L"|| V^\star - \ \ V^r ||^2",
|
||
yticks=[10.0^-x for x in 0:20],
|
||
linewidth=2,
|
||
yaxis=:log,
|
||
title="Optimal vs Random: Convergence",
|
||
)
|
||
|
||
# ╔═╡ f31ce9b6-8399-4263-bad7-20c859116fa9
|
||
begin
|
||
plot(
|
||
ratio,
|
||
labels = "",
|
||
xlabel = L"n",
|
||
ylabel = L"|| V^\star / \ \ V^r ||^2",
|
||
linewidth=2,
|
||
title="Optimal vs Random: Ratio",
|
||
ylims=[0, Inf]
|
||
)
|
||
end
|
||
|
||
# ╔═╡ 05373383-0c51-49f2-8a62-b06a6225d659
|
||
md"""
|
||
## Question 5
|
||
|
||
> **Policy Iteration I**: We are now going to calculate the optimal policy using Policy Iteration (lecture 2, 2nd part, slides 23/35 and 24/35). You can start with the random policy for which you calculated its performance in the **Performance Prediction** section. Carry out a one-step improvement (or greedy step) on the random policy. Represent in a 2D matrix the policy you obtain. How can we verify that it is a better policy than the random one?
|
||
"""
|
||
|
||
# ╔═╡ 81572e40-4cde-4a13-84aa-5c5d6a9dbde3
|
||
md"""
|
||
0. Initialization: choose a policy ``\pi_0``
|
||
On reprend ici notre politique aléatoire ``P^{\pi_0}`` de la [question 1 partie 1](#beb410a8-03e2-4f18-8ccd-941cc926ee12):
|
||
"""
|
||
|
||
# ╔═╡ 4b264154-944d-498b-a998-a4b07f77918e
|
||
begin
|
||
P_pi_0 = P
|
||
P_pi_0
|
||
end
|
||
|
||
# ╔═╡ a68a3d33-f4df-456e-af13-9b39e14dbc13
|
||
md"""
|
||
2. Policy Evaluation: Compute iteratively ``V_{\pi_k} = (I − \gamma P^{\pi_k} )^{-1} R^{\pi_k}``
|
||
(on calcule uniquement ``V_{\pi_0}`` dans cette question)
|
||
"""
|
||
|
||
# ╔═╡ c3a6ab2c-7a3e-458f-a108-e6e81aa3def1
|
||
begin
|
||
V_pi_0 = Matrix(I(length(REWARDS)) - DISCOUNT_FACTOR * P_pi_0) \ REWARDS
|
||
|
||
local V_display = copy(V_pi_0)
|
||
insert!(V_display, 6, 0)
|
||
V_display = permutedims(reshape(V_display, 4, 3))
|
||
V_display = sparse(V_display)
|
||
end
|
||
|
||
# ╔═╡ ea457cd9-0db5-433f-9d57-1e875a160990
|
||
md"""
|
||
3. Policy improvement: Compute ``\pi_{k+1} = \text{greedy}(V_{\pi_k})``
|
||
|
||
(On calcule donc ici uniquement ``\pi_1`` )
|
||
"""
|
||
|
||
# ╔═╡ 3d62d11d-383c-4060-b697-be0c0155ce95
|
||
begin
|
||
local V_g = REWARDS + Matrix(DISCOUNT_FACTOR * P_g) * V_pi_0
|
||
local V_h = REWARDS + Matrix(DISCOUNT_FACTOR * P_h) * V_pi_0
|
||
local V_b = REWARDS + Matrix(DISCOUNT_FACTOR * P_b) * V_pi_0
|
||
local V_d = REWARDS + Matrix(DISCOUNT_FACTOR * P_d) * V_pi_0
|
||
|
||
local pi_1 = argmax.(eachrow([V_g V_h V_b V_d]))
|
||
|
||
P_pi_1 = sparse(zeros(11, 11))
|
||
for i in 1:11
|
||
if pi_1[i] == 1
|
||
P_pi_1[i, :] = P_g[i, :]
|
||
elseif pi_1[i] == 2
|
||
P_pi_1[i, :] = P_h[i, :]
|
||
elseif pi_1[i] == 3
|
||
P_pi_1[i, :] = P_b[i, :]
|
||
else
|
||
P_pi_1[i, :] = P_d[i, :]
|
||
end
|
||
end
|
||
P_pi_1
|
||
end
|
||
|
||
# ╔═╡ 245f3394-d5e3-4d2c-96a6-ce5ea0bc7d84
|
||
md"""
|
||
Stop if ``V_{\pi_{k+1}} = V_{\pi_k}``, else repeat
|
||
|
||
(Ici on s'arrête comme le dit l'énoncé pour k=1)
|
||
"""
|
||
|
||
# ╔═╡ 4f597447-f321-4a8f-adf0-3fd655ab203c
|
||
begin
|
||
diff_star_pi_0 = sum(abs.(P_star - P_pi_0))
|
||
diff_star_pi_1 = sum(abs.(P_star - P_pi_1))
|
||
|
||
md"""
|
||
On peut vérifier que ``\pi_1`` est meilleur que ``\pi_0`` en calculant:
|
||
|
||
``||\pi_\star - \pi_1||_\text{F} = `` $(diff_star_pi_1)
|
||
|
||
``||\pi_\star - \pi_0||_\text{F} = `` $(diff_star_pi_0)
|
||
"""
|
||
end
|
||
|
||
# ╔═╡ d599c370-6cb5-4bc3-a333-d41e207c39dc
|
||
if diff_star_pi_1 <= diff_star_pi_0
|
||
Markdown.MD(Markdown.Admonition("correct", "On a une meilleur politique après une itération", [md"``||\pi_\star - \pi_1||_\text{F} \leq ||\pi_\star - \pi_0||_\text{F}``"]));
|
||
else
|
||
Markdown.MD(Markdown.Admonition("danger", "On n'a pas une meilleur politique après une itération", [md"``||\pi_\star - \pi_1||_\text{F} \nleq ||\pi_\star - \pi_0||_\text{F}``"]));
|
||
end
|
||
|
||
# ╔═╡ 4e8e49b2-60ea-4dc6-906b-d459c7983b34
|
||
md"""
|
||
## Question 6
|
||
|
||
> **Policy Iteration II**: Continue iterating the Prediction and the greedy steps until convergence to the optimal policy.
|
||
"""
|
||
|
||
# ╔═╡ 362a3786-f85d-44b9-b369-ecbf4e5194e9
|
||
begin
|
||
P_pi_k = P_pi_0
|
||
local diffs = Vector{Float64}()
|
||
|
||
for k in 1:MAX_ITERATIONS
|
||
V_pi_k = Matrix(I(length(REWARDS)) - DISCOUNT_FACTOR * P_pi_k) \ REWARDS
|
||
|
||
local V_g = REWARDS + Matrix(DISCOUNT_FACTOR * P_g) * V_pi_k
|
||
local V_h = REWARDS + Matrix(DISCOUNT_FACTOR * P_h) * V_pi_k
|
||
local V_b = REWARDS + Matrix(DISCOUNT_FACTOR * P_b) * V_pi_k
|
||
local V_d = REWARDS + Matrix(DISCOUNT_FACTOR * P_d) * V_pi_k
|
||
|
||
local pi_k = argmax.(eachrow([V_g V_h V_b V_d]))
|
||
|
||
P_pi_k = sparse(zeros(11, 11))
|
||
for i in 1:11
|
||
if pi_k[i] == 1
|
||
P_pi_k[i, :] = P_g[i, :]
|
||
elseif pi_k[i] == 2
|
||
P_pi_k[i, :] = P_h[i, :]
|
||
elseif pi_k[i] == 3
|
||
P_pi_k[i, :] = P_b[i, :]
|
||
else
|
||
P_pi_k[i, :] = P_d[i, :]
|
||
end
|
||
end
|
||
|
||
append!(diffs, sum(abs.(P_star - P_pi_k)))
|
||
|
||
if isapprox(P_star, P_pi_k)
|
||
break
|
||
end
|
||
|
||
end
|
||
|
||
local p = plot(
|
||
diffs,
|
||
labels = "",
|
||
xlabel = L"k",
|
||
ylabel = L"||\pi_\star - \pi_k||_F",
|
||
linewidth=2,
|
||
title="Policy Iteration convergence",
|
||
)
|
||
xticks!(round(Int,xlims(p)[1]):round(Int,xlims(p)[2]))
|
||
end
|
||
|
||
# ╔═╡ a1eaf48e-f92f-4554-942e-f6303ebaa084
|
||
md"""
|
||
## Question 7
|
||
|
||
> Investigate the structure of the optimal policy for different values of ``\gamma``, and explain the results. You might use Value Iteration or Policy Iteration.
|
||
"""
|
||
|
||
# ╔═╡ 8d5b2cc2-2e21-47df-b821-189de5d357a3
|
||
begin
|
||
local gammas = 0.9:0.001:0.99
|
||
local iterations = zeros(length(gammas))
|
||
|
||
for (i, gamma) in enumerate(gammas)
|
||
|
||
P_pi_k = P_pi_0
|
||
k = 0
|
||
|
||
while true
|
||
V_pi_k = Matrix(I(length(REWARDS)) - gamma * P_pi_k) \ REWARDS
|
||
|
||
local V_g = REWARDS + Matrix(gamma * P_g) * V_pi_k
|
||
local V_h = REWARDS + Matrix(gamma * P_h) * V_pi_k
|
||
local V_b = REWARDS + Matrix(gamma * P_b) * V_pi_k
|
||
local V_d = REWARDS + Matrix(gamma * P_d) * V_pi_k
|
||
|
||
local pi_k = argmax.(eachrow([V_g V_h V_b V_d]))
|
||
|
||
P_pi_k = sparse(zeros(11, 11))
|
||
for i in 1:11
|
||
if pi_k[i] == 1
|
||
P_pi_k[i, :] = P_g[i, :]
|
||
elseif pi_k[i] == 2
|
||
P_pi_k[i, :] = P_h[i, :]
|
||
elseif pi_k[i] == 3
|
||
P_pi_k[i, :] = P_b[i, :]
|
||
else
|
||
P_pi_k[i, :] = P_d[i, :]
|
||
end
|
||
end
|
||
|
||
k += 1
|
||
|
||
if isapprox(P_star, P_pi_k) || k >= MAX_ITERATIONS
|
||
break
|
||
end
|
||
end
|
||
|
||
iterations[i] = k
|
||
end
|
||
|
||
local p = plot(
|
||
gammas,
|
||
iterations,
|
||
labels = "",
|
||
xlabel = L"\gamma",
|
||
ylabel = L"k",
|
||
linetype=:steppre,
|
||
linewidth=2,
|
||
title=md"Policy Iteration convergence according to ``\gamma``",
|
||
)
|
||
yticks!(round.(Int, yticks(p)[1][1]))
|
||
end
|
||
|
||
# ╔═╡ 0c6fd7ed-5180-41bd-9958-29cc9f3ce73b
|
||
md"""
|
||
On observe qu'il y a convergence de la politique généralement en dessous de 5 itérations. Cependant pour certaines combinaisons d'hyperparamètres on remarque qu'il n'y a pas convergence.
|
||
"""
|
||
|
||
# ╔═╡ 00000000-0000-0000-0000-000000000001
|
||
PLUTO_PROJECT_TOML_CONTENTS = """
|
||
[deps]
|
||
LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
|
||
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
|
||
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
|
||
PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
|
||
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
||
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
|
||
|
||
[compat]
|
||
LaTeXStrings = "~1.3.0"
|
||
Plots = "~1.37.2"
|
||
PlutoUI = "~0.7.49"
|
||
"""
|
||
|
||
# ╔═╡ 00000000-0000-0000-0000-000000000002
|
||
PLUTO_MANIFEST_TOML_CONTENTS = """
|
||
# This file is machine-generated - editing it directly is not advised
|
||
|
||
julia_version = "1.8.3"
|
||
manifest_format = "2.0"
|
||
project_hash = "47a8851f02d2eac3bb1f131a8f7b67579ac0e433"
|
||
|
||
[[deps.AbstractPlutoDingetjes]]
|
||
deps = ["Pkg"]
|
||
git-tree-sha1 = "8eaf9f1b4921132a4cff3f36a1d9ba923b14a481"
|
||
uuid = "6e696c72-6542-2067-7265-42206c756150"
|
||
version = "1.1.4"
|
||
|
||
[[deps.ArgTools]]
|
||
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
|
||
version = "1.1.1"
|
||
|
||
[[deps.Artifacts]]
|
||
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
|
||
|
||
[[deps.Base64]]
|
||
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
|
||
|
||
[[deps.Bzip2_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2"
|
||
uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0"
|
||
version = "1.0.8+0"
|
||
|
||
[[deps.Cairo_jll]]
|
||
deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"]
|
||
git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2"
|
||
uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a"
|
||
version = "1.16.1+1"
|
||
|
||
[[deps.ChainRulesCore]]
|
||
deps = ["Compat", "LinearAlgebra", "SparseArrays"]
|
||
git-tree-sha1 = "e7ff6cadf743c098e08fca25c91103ee4303c9bb"
|
||
uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
|
||
version = "1.15.6"
|
||
|
||
[[deps.ChangesOfVariables]]
|
||
deps = ["ChainRulesCore", "LinearAlgebra", "Test"]
|
||
git-tree-sha1 = "38f7a08f19d8810338d4f5085211c7dfa5d5bdd8"
|
||
uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0"
|
||
version = "0.1.4"
|
||
|
||
[[deps.ColorSchemes]]
|
||
deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "Random", "SnoopPrecompile"]
|
||
git-tree-sha1 = "aa3edc8f8dea6cbfa176ee12f7c2fc82f0608ed3"
|
||
uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
|
||
version = "3.20.0"
|
||
|
||
[[deps.ColorTypes]]
|
||
deps = ["FixedPointNumbers", "Random"]
|
||
git-tree-sha1 = "eb7f0f8307f71fac7c606984ea5fb2817275d6e4"
|
||
uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
|
||
version = "0.11.4"
|
||
|
||
[[deps.ColorVectorSpace]]
|
||
deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"]
|
||
git-tree-sha1 = "d08c20eef1f2cbc6e60fd3612ac4340b89fea322"
|
||
uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4"
|
||
version = "0.9.9"
|
||
|
||
[[deps.Colors]]
|
||
deps = ["ColorTypes", "FixedPointNumbers", "Reexport"]
|
||
git-tree-sha1 = "73e9c4144410f6b11f2f818488728d3afd60943c"
|
||
uuid = "5ae59095-9a9b-59fe-a467-6f913c188581"
|
||
version = "0.12.9"
|
||
|
||
[[deps.Compat]]
|
||
deps = ["Dates", "LinearAlgebra", "UUIDs"]
|
||
git-tree-sha1 = "00a2cccc7f098ff3b66806862d275ca3db9e6e5a"
|
||
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
|
||
version = "4.5.0"
|
||
|
||
[[deps.CompilerSupportLibraries_jll]]
|
||
deps = ["Artifacts", "Libdl"]
|
||
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
|
||
version = "0.5.2+0"
|
||
|
||
[[deps.Contour]]
|
||
git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781"
|
||
uuid = "d38c429a-6771-53c6-b99e-75d170b6e991"
|
||
version = "0.6.2"
|
||
|
||
[[deps.DataAPI]]
|
||
git-tree-sha1 = "e08915633fcb3ea83bf9d6126292e5bc5c739922"
|
||
uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
|
||
version = "1.13.0"
|
||
|
||
[[deps.DataStructures]]
|
||
deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
|
||
git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0"
|
||
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
|
||
version = "0.18.13"
|
||
|
||
[[deps.Dates]]
|
||
deps = ["Printf"]
|
||
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
|
||
|
||
[[deps.DelimitedFiles]]
|
||
deps = ["Mmap"]
|
||
uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"
|
||
|
||
[[deps.DocStringExtensions]]
|
||
deps = ["LibGit2"]
|
||
git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d"
|
||
uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
|
||
version = "0.9.3"
|
||
|
||
[[deps.Downloads]]
|
||
deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
|
||
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
|
||
version = "1.6.0"
|
||
|
||
[[deps.Expat_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "bad72f730e9e91c08d9427d5e8db95478a3c323d"
|
||
uuid = "2e619515-83b5-522b-bb60-26c02a35a201"
|
||
version = "2.4.8+0"
|
||
|
||
[[deps.FFMPEG]]
|
||
deps = ["FFMPEG_jll"]
|
||
git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8"
|
||
uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a"
|
||
version = "0.4.1"
|
||
|
||
[[deps.FFMPEG_jll]]
|
||
deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Pkg", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"]
|
||
git-tree-sha1 = "74faea50c1d007c85837327f6775bea60b5492dd"
|
||
uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5"
|
||
version = "4.4.2+2"
|
||
|
||
[[deps.FileWatching]]
|
||
uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
|
||
|
||
[[deps.FixedPointNumbers]]
|
||
deps = ["Statistics"]
|
||
git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc"
|
||
uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93"
|
||
version = "0.8.4"
|
||
|
||
[[deps.Fontconfig_jll]]
|
||
deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"]
|
||
git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03"
|
||
uuid = "a3f928ae-7b40-5064-980b-68af3947d34b"
|
||
version = "2.13.93+0"
|
||
|
||
[[deps.Formatting]]
|
||
deps = ["Printf"]
|
||
git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8"
|
||
uuid = "59287772-0a20-5a39-b81b-1366585eb4c0"
|
||
version = "0.4.2"
|
||
|
||
[[deps.FreeType2_jll]]
|
||
deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
|
||
git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9"
|
||
uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7"
|
||
version = "2.10.4+0"
|
||
|
||
[[deps.FriBidi_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91"
|
||
uuid = "559328eb-81f9-559d-9380-de523a88c83c"
|
||
version = "1.0.10+0"
|
||
|
||
[[deps.GLFW_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"]
|
||
git-tree-sha1 = "d972031d28c8c8d9d7b41a536ad7bb0c2579caca"
|
||
uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89"
|
||
version = "3.3.8+0"
|
||
|
||
[[deps.GR]]
|
||
deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "UUIDs", "p7zip_jll"]
|
||
git-tree-sha1 = "051072ff2accc6e0e87b708ddee39b18aa04a0bc"
|
||
uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71"
|
||
version = "0.71.1"
|
||
|
||
[[deps.GR_jll]]
|
||
deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Pkg", "Qt5Base_jll", "Zlib_jll", "libpng_jll"]
|
||
git-tree-sha1 = "501a4bf76fd679e7fcd678725d5072177392e756"
|
||
uuid = "d2c73de3-f751-5644-a686-071e5b155ba9"
|
||
version = "0.71.1+0"
|
||
|
||
[[deps.Gettext_jll]]
|
||
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"]
|
||
git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046"
|
||
uuid = "78b55507-aeef-58d4-861c-77aaff3498b1"
|
||
version = "0.21.0+0"
|
||
|
||
[[deps.Glib_jll]]
|
||
deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Pkg", "Zlib_jll"]
|
||
git-tree-sha1 = "d3b3624125c1474292d0d8ed0f65554ac37ddb23"
|
||
uuid = "7746bdde-850d-59dc-9ae8-88ece973131d"
|
||
version = "2.74.0+2"
|
||
|
||
[[deps.Graphite2_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011"
|
||
uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472"
|
||
version = "1.3.14+0"
|
||
|
||
[[deps.Grisu]]
|
||
git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2"
|
||
uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe"
|
||
version = "1.0.2"
|
||
|
||
[[deps.HTTP]]
|
||
deps = ["Base64", "Dates", "IniFile", "Logging", "MbedTLS", "NetworkOptions", "Sockets", "URIs"]
|
||
git-tree-sha1 = "0fa77022fe4b511826b39c894c90daf5fce3334a"
|
||
uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
|
||
version = "0.9.17"
|
||
|
||
[[deps.HarfBuzz_jll]]
|
||
deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"]
|
||
git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3"
|
||
uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566"
|
||
version = "2.8.1+1"
|
||
|
||
[[deps.Hyperscript]]
|
||
deps = ["Test"]
|
||
git-tree-sha1 = "8d511d5b81240fc8e6802386302675bdf47737b9"
|
||
uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91"
|
||
version = "0.0.4"
|
||
|
||
[[deps.HypertextLiteral]]
|
||
deps = ["Tricks"]
|
||
git-tree-sha1 = "c47c5fa4c5308f27ccaac35504858d8914e102f9"
|
||
uuid = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2"
|
||
version = "0.9.4"
|
||
|
||
[[deps.IOCapture]]
|
||
deps = ["Logging", "Random"]
|
||
git-tree-sha1 = "f7be53659ab06ddc986428d3a9dcc95f6fa6705a"
|
||
uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89"
|
||
version = "0.2.2"
|
||
|
||
[[deps.IniFile]]
|
||
git-tree-sha1 = "f550e6e32074c939295eb5ea6de31849ac2c9625"
|
||
uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f"
|
||
version = "0.5.1"
|
||
|
||
[[deps.InteractiveUtils]]
|
||
deps = ["Markdown"]
|
||
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
|
||
|
||
[[deps.InverseFunctions]]
|
||
deps = ["Test"]
|
||
git-tree-sha1 = "49510dfcb407e572524ba94aeae2fced1f3feb0f"
|
||
uuid = "3587e190-3f89-42d0-90ee-14403ec27112"
|
||
version = "0.1.8"
|
||
|
||
[[deps.IrrationalConstants]]
|
||
git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151"
|
||
uuid = "92d709cd-6900-40b7-9082-c6be49f344b6"
|
||
version = "0.1.1"
|
||
|
||
[[deps.JLFzf]]
|
||
deps = ["Pipe", "REPL", "Random", "fzf_jll"]
|
||
git-tree-sha1 = "f377670cda23b6b7c1c0b3893e37451c5c1a2185"
|
||
uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c"
|
||
version = "0.1.5"
|
||
|
||
[[deps.JLLWrappers]]
|
||
deps = ["Preferences"]
|
||
git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1"
|
||
uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
|
||
version = "1.4.1"
|
||
|
||
[[deps.JSON]]
|
||
deps = ["Dates", "Mmap", "Parsers", "Unicode"]
|
||
git-tree-sha1 = "3c837543ddb02250ef42f4738347454f95079d4e"
|
||
uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
|
||
version = "0.21.3"
|
||
|
||
[[deps.JpegTurbo_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "b53380851c6e6664204efb2e62cd24fa5c47e4ba"
|
||
uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8"
|
||
version = "2.1.2+0"
|
||
|
||
[[deps.LAME_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c"
|
||
uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d"
|
||
version = "3.100.1+0"
|
||
|
||
[[deps.LERC_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434"
|
||
uuid = "88015f11-f218-50d7-93a8-a6af411a945d"
|
||
version = "3.0.0+1"
|
||
|
||
[[deps.LZO_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6"
|
||
uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac"
|
||
version = "2.10.1+0"
|
||
|
||
[[deps.LaTeXStrings]]
|
||
git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996"
|
||
uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
|
||
version = "1.3.0"
|
||
|
||
[[deps.Latexify]]
|
||
deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Printf", "Requires"]
|
||
git-tree-sha1 = "ab9aa169d2160129beb241cb2750ca499b4e90e9"
|
||
uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316"
|
||
version = "0.15.17"
|
||
|
||
[[deps.LibCURL]]
|
||
deps = ["LibCURL_jll", "MozillaCACerts_jll"]
|
||
uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
|
||
version = "0.6.3"
|
||
|
||
[[deps.LibCURL_jll]]
|
||
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
|
||
uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
|
||
version = "7.84.0+0"
|
||
|
||
[[deps.LibGit2]]
|
||
deps = ["Base64", "NetworkOptions", "Printf", "SHA"]
|
||
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
|
||
|
||
[[deps.LibSSH2_jll]]
|
||
deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
|
||
uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
|
||
version = "1.10.2+0"
|
||
|
||
[[deps.Libdl]]
|
||
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
|
||
|
||
[[deps.Libffi_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290"
|
||
uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490"
|
||
version = "3.2.2+1"
|
||
|
||
[[deps.Libgcrypt_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"]
|
||
git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae"
|
||
uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4"
|
||
version = "1.8.7+0"
|
||
|
||
[[deps.Libglvnd_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"]
|
||
git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733"
|
||
uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29"
|
||
version = "1.6.0+0"
|
||
|
||
[[deps.Libgpg_error_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9"
|
||
uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8"
|
||
version = "1.42.0+0"
|
||
|
||
[[deps.Libiconv_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "c7cb1f5d892775ba13767a87c7ada0b980ea0a71"
|
||
uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531"
|
||
version = "1.16.1+2"
|
||
|
||
[[deps.Libmount_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73"
|
||
uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9"
|
||
version = "2.35.0+0"
|
||
|
||
[[deps.Libtiff_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"]
|
||
git-tree-sha1 = "3eb79b0ca5764d4799c06699573fd8f533259713"
|
||
uuid = "89763e89-9b03-5906-acba-b20f662cd828"
|
||
version = "4.4.0+0"
|
||
|
||
[[deps.Libuuid_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066"
|
||
uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700"
|
||
version = "2.36.0+0"
|
||
|
||
[[deps.LinearAlgebra]]
|
||
deps = ["Libdl", "libblastrampoline_jll"]
|
||
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
|
||
|
||
[[deps.LogExpFunctions]]
|
||
deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"]
|
||
git-tree-sha1 = "946607f84feb96220f480e0422d3484c49c00239"
|
||
uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
|
||
version = "0.3.19"
|
||
|
||
[[deps.Logging]]
|
||
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
|
||
|
||
[[deps.MIMEs]]
|
||
git-tree-sha1 = "65f28ad4b594aebe22157d6fac869786a255b7eb"
|
||
uuid = "6c6e2e6c-3030-632d-7369-2d6c69616d65"
|
||
version = "0.1.4"
|
||
|
||
[[deps.MacroTools]]
|
||
deps = ["Markdown", "Random"]
|
||
git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2"
|
||
uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
|
||
version = "0.5.10"
|
||
|
||
[[deps.Markdown]]
|
||
deps = ["Base64"]
|
||
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
|
||
|
||
[[deps.MbedTLS]]
|
||
deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "Random", "Sockets"]
|
||
git-tree-sha1 = "03a9b9718f5682ecb107ac9f7308991db4ce395b"
|
||
uuid = "739be429-bea8-5141-9913-cc70e7f3736d"
|
||
version = "1.1.7"
|
||
|
||
[[deps.MbedTLS_jll]]
|
||
deps = ["Artifacts", "Libdl"]
|
||
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
|
||
version = "2.28.0+0"
|
||
|
||
[[deps.Measures]]
|
||
git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102"
|
||
uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e"
|
||
version = "0.3.2"
|
||
|
||
[[deps.Missings]]
|
||
deps = ["DataAPI"]
|
||
git-tree-sha1 = "bf210ce90b6c9eed32d25dbcae1ebc565df2687f"
|
||
uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
|
||
version = "1.0.2"
|
||
|
||
[[deps.Mmap]]
|
||
uuid = "a63ad114-7e13-5084-954f-fe012c677804"
|
||
|
||
[[deps.MozillaCACerts_jll]]
|
||
uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
|
||
version = "2022.2.1"
|
||
|
||
[[deps.NaNMath]]
|
||
deps = ["OpenLibm_jll"]
|
||
git-tree-sha1 = "a7c3d1da1189a1c2fe843a3bfa04d18d20eb3211"
|
||
uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
|
||
version = "1.0.1"
|
||
|
||
[[deps.NetworkOptions]]
|
||
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
|
||
version = "1.2.0"
|
||
|
||
[[deps.Ogg_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f"
|
||
uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051"
|
||
version = "1.3.5+1"
|
||
|
||
[[deps.OpenBLAS_jll]]
|
||
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
|
||
uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
|
||
version = "0.3.20+0"
|
||
|
||
[[deps.OpenLibm_jll]]
|
||
deps = ["Artifacts", "Libdl"]
|
||
uuid = "05823500-19ac-5b8b-9628-191a04bc5112"
|
||
version = "0.8.1+0"
|
||
|
||
[[deps.OpenSSL_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "f6e9dba33f9f2c44e08a020b0caf6903be540004"
|
||
uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
|
||
version = "1.1.19+0"
|
||
|
||
[[deps.OpenSpecFun_jll]]
|
||
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1"
|
||
uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
|
||
version = "0.5.5+0"
|
||
|
||
[[deps.Opus_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720"
|
||
uuid = "91d4177d-7536-5919-b921-800302f37372"
|
||
version = "1.3.2+0"
|
||
|
||
[[deps.OrderedCollections]]
|
||
git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c"
|
||
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
|
||
version = "1.4.1"
|
||
|
||
[[deps.PCRE2_jll]]
|
||
deps = ["Artifacts", "Libdl"]
|
||
uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15"
|
||
version = "10.40.0+0"
|
||
|
||
[[deps.Parsers]]
|
||
deps = ["Dates", "SnoopPrecompile"]
|
||
git-tree-sha1 = "b64719e8b4504983c7fca6cc9db3ebc8acc2a4d6"
|
||
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
|
||
version = "2.5.1"
|
||
|
||
[[deps.Pipe]]
|
||
git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d"
|
||
uuid = "b98c9c47-44ae-5843-9183-064241ee97a0"
|
||
version = "1.3.0"
|
||
|
||
[[deps.Pixman_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29"
|
||
uuid = "30392449-352a-5448-841d-b1acce4e97dc"
|
||
version = "0.40.1+0"
|
||
|
||
[[deps.Pkg]]
|
||
deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
|
||
uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
|
||
version = "1.8.0"
|
||
|
||
[[deps.PlotThemes]]
|
||
deps = ["PlotUtils", "Statistics"]
|
||
git-tree-sha1 = "1f03a2d339f42dca4a4da149c7e15e9b896ad899"
|
||
uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a"
|
||
version = "3.1.0"
|
||
|
||
[[deps.PlotUtils]]
|
||
deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "SnoopPrecompile", "Statistics"]
|
||
git-tree-sha1 = "5b7690dd212e026bbab1860016a6601cb077ab66"
|
||
uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043"
|
||
version = "1.3.2"
|
||
|
||
[[deps.Plots]]
|
||
deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "Preferences", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SnoopPrecompile", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun", "Unzip"]
|
||
git-tree-sha1 = "dadd6e31706ec493192a70a7090d369771a9a22a"
|
||
uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
|
||
version = "1.37.2"
|
||
|
||
[[deps.PlutoUI]]
|
||
deps = ["AbstractPlutoDingetjes", "Base64", "ColorTypes", "Dates", "FixedPointNumbers", "Hyperscript", "HypertextLiteral", "IOCapture", "InteractiveUtils", "JSON", "Logging", "MIMEs", "Markdown", "Random", "Reexport", "URIs", "UUIDs"]
|
||
git-tree-sha1 = "eadad7b14cf046de6eb41f13c9275e5aa2711ab6"
|
||
uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
|
||
version = "0.7.49"
|
||
|
||
[[deps.Preferences]]
|
||
deps = ["TOML"]
|
||
git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d"
|
||
uuid = "21216c6a-2e73-6563-6e65-726566657250"
|
||
version = "1.3.0"
|
||
|
||
[[deps.Printf]]
|
||
deps = ["Unicode"]
|
||
uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
|
||
|
||
[[deps.Qt5Base_jll]]
|
||
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"]
|
||
git-tree-sha1 = "0c03844e2231e12fda4d0086fd7cbe4098ee8dc5"
|
||
uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1"
|
||
version = "5.15.3+2"
|
||
|
||
[[deps.REPL]]
|
||
deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
|
||
uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
|
||
|
||
[[deps.Random]]
|
||
deps = ["SHA", "Serialization"]
|
||
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
||
|
||
[[deps.RecipesBase]]
|
||
deps = ["SnoopPrecompile"]
|
||
git-tree-sha1 = "18c35ed630d7229c5584b945641a73ca83fb5213"
|
||
uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
|
||
version = "1.3.2"
|
||
|
||
[[deps.RecipesPipeline]]
|
||
deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase", "SnoopPrecompile"]
|
||
git-tree-sha1 = "e974477be88cb5e3040009f3767611bc6357846f"
|
||
uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c"
|
||
version = "0.6.11"
|
||
|
||
[[deps.Reexport]]
|
||
git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
|
||
uuid = "189a3867-3050-52da-a836-e630ba90ab69"
|
||
version = "1.2.2"
|
||
|
||
[[deps.RelocatableFolders]]
|
||
deps = ["SHA", "Scratch"]
|
||
git-tree-sha1 = "90bc7a7c96410424509e4263e277e43250c05691"
|
||
uuid = "05181044-ff0b-4ac5-8273-598c1e38db00"
|
||
version = "1.0.0"
|
||
|
||
[[deps.Requires]]
|
||
deps = ["UUIDs"]
|
||
git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7"
|
||
uuid = "ae029012-a4dd-5104-9daa-d747884805df"
|
||
version = "1.3.0"
|
||
|
||
[[deps.SHA]]
|
||
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
|
||
version = "0.7.0"
|
||
|
||
[[deps.Scratch]]
|
||
deps = ["Dates"]
|
||
git-tree-sha1 = "f94f779c94e58bf9ea243e77a37e16d9de9126bd"
|
||
uuid = "6c6a2e73-6563-6170-7368-637461726353"
|
||
version = "1.1.1"
|
||
|
||
[[deps.Serialization]]
|
||
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
|
||
|
||
[[deps.Showoff]]
|
||
deps = ["Dates", "Grisu"]
|
||
git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de"
|
||
uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f"
|
||
version = "1.0.3"
|
||
|
||
[[deps.SnoopPrecompile]]
|
||
git-tree-sha1 = "f604441450a3c0569830946e5b33b78c928e1a85"
|
||
uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c"
|
||
version = "1.0.1"
|
||
|
||
[[deps.Sockets]]
|
||
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
|
||
|
||
[[deps.SortingAlgorithms]]
|
||
deps = ["DataStructures"]
|
||
git-tree-sha1 = "a4ada03f999bd01b3a25dcaa30b2d929fe537e00"
|
||
uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
|
||
version = "1.1.0"
|
||
|
||
[[deps.SparseArrays]]
|
||
deps = ["LinearAlgebra", "Random"]
|
||
uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
|
||
|
||
[[deps.SpecialFunctions]]
|
||
deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"]
|
||
git-tree-sha1 = "d75bda01f8c31ebb72df80a46c88b25d1c79c56d"
|
||
uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
|
||
version = "2.1.7"
|
||
|
||
[[deps.Statistics]]
|
||
deps = ["LinearAlgebra", "SparseArrays"]
|
||
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
|
||
|
||
[[deps.StatsAPI]]
|
||
deps = ["LinearAlgebra"]
|
||
git-tree-sha1 = "f9af7f195fb13589dd2e2d57fdb401717d2eb1f6"
|
||
uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0"
|
||
version = "1.5.0"
|
||
|
||
[[deps.StatsBase]]
|
||
deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"]
|
||
git-tree-sha1 = "d1bf48bfcc554a3761a133fe3a9bb01488e06916"
|
||
uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
|
||
version = "0.33.21"
|
||
|
||
[[deps.TOML]]
|
||
deps = ["Dates"]
|
||
uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
|
||
version = "1.0.0"
|
||
|
||
[[deps.Tar]]
|
||
deps = ["ArgTools", "SHA"]
|
||
uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"
|
||
version = "1.10.1"
|
||
|
||
[[deps.TensorCore]]
|
||
deps = ["LinearAlgebra"]
|
||
git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6"
|
||
uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50"
|
||
version = "0.1.1"
|
||
|
||
[[deps.Test]]
|
||
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
|
||
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
|
||
|
||
[[deps.Tricks]]
|
||
git-tree-sha1 = "6bac775f2d42a611cdfcd1fb217ee719630c4175"
|
||
uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775"
|
||
version = "0.1.6"
|
||
|
||
[[deps.URIs]]
|
||
git-tree-sha1 = "ac00576f90d8a259f2c9d823e91d1de3fd44d348"
|
||
uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"
|
||
version = "1.4.1"
|
||
|
||
[[deps.UUIDs]]
|
||
deps = ["Random", "SHA"]
|
||
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
|
||
|
||
[[deps.Unicode]]
|
||
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
|
||
|
||
[[deps.UnicodeFun]]
|
||
deps = ["REPL"]
|
||
git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf"
|
||
uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1"
|
||
version = "0.4.1"
|
||
|
||
[[deps.Unzip]]
|
||
git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78"
|
||
uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d"
|
||
version = "0.2.0"
|
||
|
||
[[deps.Wayland_jll]]
|
||
deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"]
|
||
git-tree-sha1 = "3e61f0b86f90dacb0bc0e73a0c5a83f6a8636e23"
|
||
uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89"
|
||
version = "1.19.0+0"
|
||
|
||
[[deps.Wayland_protocols_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "4528479aa01ee1b3b4cd0e6faef0e04cf16466da"
|
||
uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91"
|
||
version = "1.25.0+0"
|
||
|
||
[[deps.XML2_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"]
|
||
git-tree-sha1 = "58443b63fb7e465a8a7210828c91c08b92132dff"
|
||
uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a"
|
||
version = "2.9.14+0"
|
||
|
||
[[deps.XSLT_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"]
|
||
git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a"
|
||
uuid = "aed1982a-8fda-507f-9586-7b0439959a61"
|
||
version = "1.1.34+0"
|
||
|
||
[[deps.Xorg_libX11_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"]
|
||
git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527"
|
||
uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc"
|
||
version = "1.6.9+4"
|
||
|
||
[[deps.Xorg_libXau_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e"
|
||
uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec"
|
||
version = "1.0.9+4"
|
||
|
||
[[deps.Xorg_libXcursor_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"]
|
||
git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd"
|
||
uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724"
|
||
version = "1.2.0+4"
|
||
|
||
[[deps.Xorg_libXdmcp_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4"
|
||
uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05"
|
||
version = "1.1.3+4"
|
||
|
||
[[deps.Xorg_libXext_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
|
||
git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3"
|
||
uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3"
|
||
version = "1.3.4+4"
|
||
|
||
[[deps.Xorg_libXfixes_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
|
||
git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4"
|
||
uuid = "d091e8ba-531a-589c-9de9-94069b037ed8"
|
||
version = "5.0.3+4"
|
||
|
||
[[deps.Xorg_libXi_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"]
|
||
git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246"
|
||
uuid = "a51aa0fd-4e3c-5386-b890-e753decda492"
|
||
version = "1.7.10+4"
|
||
|
||
[[deps.Xorg_libXinerama_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"]
|
||
git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123"
|
||
uuid = "d1454406-59df-5ea1-beac-c340f2130bc3"
|
||
version = "1.1.4+4"
|
||
|
||
[[deps.Xorg_libXrandr_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"]
|
||
git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631"
|
||
uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484"
|
||
version = "1.5.2+4"
|
||
|
||
[[deps.Xorg_libXrender_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
|
||
git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96"
|
||
uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa"
|
||
version = "0.9.10+4"
|
||
|
||
[[deps.Xorg_libpthread_stubs_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb"
|
||
uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74"
|
||
version = "0.1.0+3"
|
||
|
||
[[deps.Xorg_libxcb_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"]
|
||
git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6"
|
||
uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b"
|
||
version = "1.13.0+3"
|
||
|
||
[[deps.Xorg_libxkbfile_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
|
||
git-tree-sha1 = "926af861744212db0eb001d9e40b5d16292080b2"
|
||
uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a"
|
||
version = "1.1.0+4"
|
||
|
||
[[deps.Xorg_xcb_util_image_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
|
||
git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97"
|
||
uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b"
|
||
version = "0.4.0+1"
|
||
|
||
[[deps.Xorg_xcb_util_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"]
|
||
git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1"
|
||
uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5"
|
||
version = "0.4.0+1"
|
||
|
||
[[deps.Xorg_xcb_util_keysyms_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
|
||
git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00"
|
||
uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7"
|
||
version = "0.4.0+1"
|
||
|
||
[[deps.Xorg_xcb_util_renderutil_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
|
||
git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e"
|
||
uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e"
|
||
version = "0.3.9+1"
|
||
|
||
[[deps.Xorg_xcb_util_wm_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
|
||
git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67"
|
||
uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361"
|
||
version = "0.4.1+1"
|
||
|
||
[[deps.Xorg_xkbcomp_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxkbfile_jll"]
|
||
git-tree-sha1 = "4bcbf660f6c2e714f87e960a171b119d06ee163b"
|
||
uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4"
|
||
version = "1.4.2+4"
|
||
|
||
[[deps.Xorg_xkeyboard_config_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xkbcomp_jll"]
|
||
git-tree-sha1 = "5c8424f8a67c3f2209646d4425f3d415fee5931d"
|
||
uuid = "33bec58e-1273-512f-9401-5d533626f822"
|
||
version = "2.27.0+4"
|
||
|
||
[[deps.Xorg_xtrans_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845"
|
||
uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10"
|
||
version = "1.4.0+3"
|
||
|
||
[[deps.Zlib_jll]]
|
||
deps = ["Libdl"]
|
||
uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
|
||
version = "1.2.12+3"
|
||
|
||
[[deps.Zstd_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "e45044cd873ded54b6a5bac0eb5c971392cf1927"
|
||
uuid = "3161d3a3-bdf6-5164-811a-617609db77b4"
|
||
version = "1.5.2+0"
|
||
|
||
[[deps.fzf_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "868e669ccb12ba16eaf50cb2957ee2ff61261c56"
|
||
uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09"
|
||
version = "0.29.0+0"
|
||
|
||
[[deps.libaom_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "3a2ea60308f0996d26f1e5354e10c24e9ef905d4"
|
||
uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b"
|
||
version = "3.4.0+0"
|
||
|
||
[[deps.libass_jll]]
|
||
deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
|
||
git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47"
|
||
uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0"
|
||
version = "0.15.1+0"
|
||
|
||
[[deps.libblastrampoline_jll]]
|
||
deps = ["Artifacts", "Libdl", "OpenBLAS_jll"]
|
||
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
|
||
version = "5.1.1+0"
|
||
|
||
[[deps.libfdk_aac_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55"
|
||
uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280"
|
||
version = "2.0.2+0"
|
||
|
||
[[deps.libpng_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
|
||
git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c"
|
||
uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f"
|
||
version = "1.6.38+0"
|
||
|
||
[[deps.libvorbis_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"]
|
||
git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c"
|
||
uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a"
|
||
version = "1.3.7+1"
|
||
|
||
[[deps.nghttp2_jll]]
|
||
deps = ["Artifacts", "Libdl"]
|
||
uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
|
||
version = "1.48.0+0"
|
||
|
||
[[deps.p7zip_jll]]
|
||
deps = ["Artifacts", "Libdl"]
|
||
uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"
|
||
version = "17.4.0+0"
|
||
|
||
[[deps.x264_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2"
|
||
uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a"
|
||
version = "2021.5.5+0"
|
||
|
||
[[deps.x265_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
|
||
git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9"
|
||
uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76"
|
||
version = "3.5.0+0"
|
||
|
||
[[deps.xkbcommon_jll]]
|
||
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"]
|
||
git-tree-sha1 = "9ebfc140cc56e8c2156a15ceac2f0302e327ac0a"
|
||
uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd"
|
||
version = "1.4.1+0"
|
||
"""
|
||
|
||
# ╔═╡ Cell order:
|
||
# ╠═26fdd17e-f03a-4835-93be-85303fe526d8
|
||
# ╟─56ac3473-24f4-42d7-84e1-cfce6a70d8d5
|
||
# ╟─ccf4d63e-7ace-11ed-2123-d9dbb62bd308
|
||
# ╟─9f2879c1-c22b-4067-ad20-4e4c56cc8d00
|
||
# ╟─0a30a68a-068e-41fb-92c4-000869ba7dff
|
||
# ╟─07b57746-fba0-49aa-ba17-6dcb0bbe44e5
|
||
# ╟─92d6874b-651c-4551-840e-ad5d1e934aeb
|
||
# ╟─fe44d7f2-155e-42f2-83c3-dd18aadb3810
|
||
# ╟─28b769a6-dd3c-43ab-bae0-646d8ebc35d6
|
||
# ╟─3881603c-619b-4976-ac4c-2c7e7f3a6ec7
|
||
# ╟─fb797a9b-6a0a-4a77-a9b6-6804f98639bb
|
||
# ╟─1e3abda8-6645-48ba-874d-28e1011fc3e3
|
||
# ╟─beb410a8-03e2-4f18-8ccd-941cc926ee12
|
||
# ╟─133f291f-6f21-4441-86f7-ba190a7d6b1f
|
||
# ╟─e14f9977-d2fd-4d05-84d6-614008dc0c4a
|
||
# ╟─486c93ab-9cb9-4df4-b702-bbe12a961647
|
||
# ╟─ab2d705d-fc00-43b2-bb6d-2a3d4ba9dab1
|
||
# ╟─b7ae89c9-3c1b-4f5c-af5b-164d95ccca41
|
||
# ╟─03c17428-5ab9-42e7-bf79-92eb846f11cb
|
||
# ╟─c65d0dbc-ecd7-4320-9b3a-a1b9c0545f9a
|
||
# ╟─ad547684-bcbe-44f4-9fc1-f327d2db4584
|
||
# ╠═d3703ab8-912c-417d-acd9-29590ec1134b
|
||
# ╟─1319b304-5126-4825-8076-e113e4dd3635
|
||
# ╟─3ea3f177-c576-4b9e-a54b-c427e29a8491
|
||
# ╠═e94fe8a6-274b-4121-b1fc-063d3710c2f7
|
||
# ╟─80090d5f-d56c-4844-a04f-444ed49e5f34
|
||
# ╟─98362798-aae4-4540-9e98-cc7371802552
|
||
# ╟─30874daf-7b0e-4335-9a50-d19389cf1620
|
||
# ╟─c005a3f8-765c-4a50-90ef-73a5a72eee01
|
||
# ╟─1b43e9e5-d7d2-4b5e-a2b2-3a8b8eda6d62
|
||
# ╟─add0221b-e352-4559-a722-c45a64f573f9
|
||
# ╟─84e07dce-bf6d-4ac1-bfa4-65414fe1d787
|
||
# ╟─df13fa05-14de-409b-a0b1-5bba5eff432e
|
||
# ╟─ac490e4a-ce20-4288-a04f-c224df5ade1a
|
||
# ╟─33890f22-d3f6-4bcf-870d-756f7ff250a9
|
||
# ╟─cf9fb8a8-6c93-4c43-9f01-5f198f0cf4aa
|
||
# ╟─dc87b85f-c87c-4302-9124-194bd799f1fd
|
||
# ╟─b2595dec-aa5b-462b-b0f8-3555c1231b2f
|
||
# ╟─70edf811-adb0-4ae8-941a-b298d85a6e0e
|
||
# ╟─875673f1-08c9-4713-bbc2-85b0a7a0cb0a
|
||
# ╟─2deaac7c-ad14-43b0-9cd5-9f0ec12d324c
|
||
# ╟─b5c93b6f-933c-41b4-8399-44cc0fa07fab
|
||
# ╟─8015bdbb-82dd-48da-905d-a25e5c864298
|
||
# ╟─3d7d0b11-5b99-4b1f-ab06-3366678eece8
|
||
# ╟─664bb753-ccce-4c7a-8b11-76261a3b80d2
|
||
# ╟─df01ea55-b289-4c13-8a6b-780ce068e44c
|
||
# ╟─d7ff1cb5-d2b4-4597-bcef-0f74f2e7e0db
|
||
# ╟─40b7e793-d869-4b68-83a1-6bd7d20a3941
|
||
# ╟─dce3978b-1334-426e-80cc-9cfe63989909
|
||
# ╟─7aae25dc-38cf-40d5-a7da-44d13d397194
|
||
# ╟─b075f5fc-85ac-45a0-8e27-605d3dac0e97
|
||
# ╟─1fe62967-a9ea-4f6a-817e-666a900c8f92
|
||
# ╟─f31ce9b6-8399-4263-bad7-20c859116fa9
|
||
# ╟─05373383-0c51-49f2-8a62-b06a6225d659
|
||
# ╟─81572e40-4cde-4a13-84aa-5c5d6a9dbde3
|
||
# ╟─4b264154-944d-498b-a998-a4b07f77918e
|
||
# ╟─a68a3d33-f4df-456e-af13-9b39e14dbc13
|
||
# ╟─c3a6ab2c-7a3e-458f-a108-e6e81aa3def1
|
||
# ╟─ea457cd9-0db5-433f-9d57-1e875a160990
|
||
# ╟─3d62d11d-383c-4060-b697-be0c0155ce95
|
||
# ╟─245f3394-d5e3-4d2c-96a6-ce5ea0bc7d84
|
||
# ╟─4f597447-f321-4a8f-adf0-3fd655ab203c
|
||
# ╟─d599c370-6cb5-4bc3-a333-d41e207c39dc
|
||
# ╟─4e8e49b2-60ea-4dc6-906b-d459c7983b34
|
||
# ╟─362a3786-f85d-44b9-b369-ecbf4e5194e9
|
||
# ╟─a1eaf48e-f92f-4554-942e-f6303ebaa084
|
||
# ╟─8d5b2cc2-2e21-47df-b821-189de5d357a3
|
||
# ╟─0c6fd7ed-5180-41bd-9958-29cc9f3ce73b
|
||
# ╟─00000000-0000-0000-0000-000000000001
|
||
# ╟─00000000-0000-0000-0000-000000000002
|