From 1bd7291b8ab4f10886b2a1704f8703e24d1d126d Mon Sep 17 00:00:00 2001 From: menvdamm <80266975+menvdamm@users.noreply.github.com> Date: Fri, 31 Dec 2021 12:48:46 +0100 Subject: [PATCH 01/11] initial README --- .DS_Store | Bin 0 -> 6148 bytes .Rhistory | 0 README.md | 13 +++---------- 3 files changed, 3 insertions(+), 10 deletions(-) create mode 100644 .DS_Store create mode 100644 .Rhistory diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..6dc77c1d45ee011012115c8a73f84cb16c9aa343 GIT binary patch literal 6148 zcmeHK%}N6?5dP9G*s7pMFTy@S!8h2}_E1m}`vTgoh`Kh?AJ2RD9ef3!&y#+WgtFPL zcoUHsNWNq;Gs%2ek_`YeSm!6eA%G5xV5`fjL1bLYmb8LqmuMu$xUjQnVW;d%K$XAG zfb3m@92PSyYx~#dSntz`OXL9em}7|*7Fg4M#lCf#9-ffL-sYp`y@NB1af%TxFu^Fc zZr#SXb4riz{Z_#}MblhMCN9ZKgI?w7@Km>#VAKkvML+7d5+AMyuMf ztD+1j1IoY_19C1>I(r_qRtA&-WnjaAoDV6BU>30S=#CCn?g>ClsCL4(`}HTLq9A4g zOOMo0jCUn^R}-EXCcGSscjtH(>`RZ{9mdVfIALZJUMMC!JWT4$VKR?eD+9_v%s|_B z59R(JegFQCowTP6Civ9>V8njXdewBeQt~HD* literal 0 HcmV?d00001 diff --git a/.Rhistory b/.Rhistory new file mode 100644 index 00000000..e69de29b diff --git a/README.md b/README.md index e2ced9a6..49fa6a4e 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,7 @@ -# STMO-ZOO +# RNAfolder -Welcome to the STMO zoo! This is your final assignment for the course Selected Topics in Mathematical Optimization. Your goal is to implement an optimization method in Julia and contribute this to this repository. To pass, you have to: +Menno Van Damme -- fork this repo and create a pull request; -- add a module to `src` with **at least one function** -- add at least one unit test to the folder `test`; -- document all your functions and add a page to the documentation page; -- make a notebook in [Pluto](https://github.com/fonsp/Pluto.jl) and add it to `notebooks`; -- perform a small code review of two other students. - -Depending on the project you choose some of these individual assignments might be really minimalistic, with other parts larger. For example, if you want to develop an application, say solving the graph coloring problem with Tabu Search, you might have only a single function in the source code (e.g., generating an instance) but have a fairly large notebook with a tutorial. On the other hand, if you work on a method, e.g., implementing Bee Colony Optimization, you might have many functions in the source code, while your notebook is only a demonstration on the test functions. +RNAfolder is a Julia tool to predict the secondary structure of RNA sequences using dynamic programming. [![Build Status](https://travis-ci.org/MichielStock/STMOZOO.svg?branch=master)](https://travis-ci.org/MichielStock/STMOZOO)[![Coverage Status](https://coveralls.io/repos/github/MichielStock/STMOZOO/badge.svg?branch=master)](https://coveralls.io/github/MichielStock/STMOZOO?branch=master) \ No newline at end of file From b0f5c0e719adbed84b7bd2b63397d1dc349cc10f Mon Sep 17 00:00:00 2001 From: menvdamm <80266975+menvdamm@users.noreply.github.com> Date: Fri, 31 Dec 2021 12:51:29 +0100 Subject: [PATCH 02/11] Create RNAfolder.jl --- notebook/RNAfolder.jl | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 notebook/RNAfolder.jl diff --git a/notebook/RNAfolder.jl b/notebook/RNAfolder.jl new file mode 100644 index 00000000..f98562ca --- /dev/null +++ b/notebook/RNAfolder.jl @@ -0,0 +1,11 @@ +### A Pluto.jl notebook ### +# v0.17.1 + +using Markdown +using InteractiveUtils + +# ╔═╡ 4b3e86ea-6973-11ec-014f-9f2708ba86cf + + +# ╔═╡ Cell order: +# ╠═4b3e86ea-6973-11ec-014f-9f2708ba86cf From f57d99e91bfcc6d1363f73817ab268c2e5a2f340 Mon Sep 17 00:00:00 2001 From: menvdamm <80266975+menvdamm@users.noreply.github.com> Date: Mon, 3 Jan 2022 16:51:07 +0100 Subject: [PATCH 03/11] Update RNAfolder.jl --- notebook/RNAfolder.jl | 79 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 1 deletion(-) diff --git a/notebook/RNAfolder.jl b/notebook/RNAfolder.jl index f98562ca..ba8638b3 100644 --- a/notebook/RNAfolder.jl +++ b/notebook/RNAfolder.jl @@ -5,7 +5,84 @@ using Markdown using InteractiveUtils # ╔═╡ 4b3e86ea-6973-11ec-014f-9f2708ba86cf +md""" +# RNAfolder +*STMO* + +**Menno Van Damme** + +This pluto notebook contains the code for a simple RNA secondary structure prediction tool and some illustrated examples on how to use it. + +""" + +# ╔═╡ 6482fcd3-23de-49bb-ae0a-b7db42305890 +RNA = "GGGAAAUCC" + +# ╔═╡ b266622e-db86-4690-8328-d17e1b5a6db0 +function basepair(i, j, RNA) + bp = 0 + ni = RNA[i] + nj = RNA[j] + if ni == 'A' + if nj == 'U' + bp = true + else + bp = false + end + elseif ni == 'U' + if nj == 'A' || nj == 'G' # U-G basepairs are also possible + bp = true + else + bp = false + end + elseif ni == 'G' + if nj == 'C' || nj == 'U' # U-G basepairs are also possible + bp = true + else + bp = false + end + elseif ni == 'C' + if nj == 'U' + bp = true + else + bp = false + end + end + return bp +end + +# ╔═╡ 7a9b23c1-30cd-4516-bc47-259302d944fc +basepair(1, 2, RNA) + +# ╔═╡ a624100b-59e7-483e-affd-d0b5391dd475 +basepair(1, 3, RNA) + +# ╔═╡ dc573955-b679-4fdc-aeba-7001ea8f7a4c +function calculate_S(RNA) + n = length(RNA) + S = zeros(n,n) + for i in 1:n + for j in i+1:n + if basepair(i, j, RNA) + bp = S[i+1,j-1] + 1 + S[i,j] = max(bp, S[i+1,j], S[i,j-1]) # add bifurcation + else + S[i,j] = max(S[i+1,j], S[i,j-1]) + end + end + end + return S +end + +# ╔═╡ 0a20eddd-24f7-43c6-a0f3-6c1c138fb90a +S = calculate_S(RNA) # ╔═╡ Cell order: -# ╠═4b3e86ea-6973-11ec-014f-9f2708ba86cf +# ╟─4b3e86ea-6973-11ec-014f-9f2708ba86cf +# ╠═6482fcd3-23de-49bb-ae0a-b7db42305890 +# ╠═b266622e-db86-4690-8328-d17e1b5a6db0 +# ╠═7a9b23c1-30cd-4516-bc47-259302d944fc +# ╠═a624100b-59e7-483e-affd-d0b5391dd475 +# ╠═dc573955-b679-4fdc-aeba-7001ea8f7a4c +# ╠═0a20eddd-24f7-43c6-a0f3-6c1c138fb90a From ed292ae728bdb8c32177bb302d690bff761df8cd Mon Sep 17 00:00:00 2001 From: menvdamm <80266975+menvdamm@users.noreply.github.com> Date: Tue, 4 Jan 2022 11:48:53 +0100 Subject: [PATCH 04/11] Update RNAfolder.jl --- notebook/RNAfolder.jl | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/notebook/RNAfolder.jl b/notebook/RNAfolder.jl index ba8638b3..458e0598 100644 --- a/notebook/RNAfolder.jl +++ b/notebook/RNAfolder.jl @@ -19,6 +19,9 @@ This pluto notebook contains the code for a simple RNA secondary structure predi # ╔═╡ 6482fcd3-23de-49bb-ae0a-b7db42305890 RNA = "GGGAAAUCC" +# ╔═╡ 3ea557f6-a3bd-4d73-99ef-10fc69024fca +n = length(RNA) + # ╔═╡ b266622e-db86-4690-8328-d17e1b5a6db0 function basepair(i, j, RNA) bp = 0 @@ -52,8 +55,14 @@ function basepair(i, j, RNA) return bp end +# ╔═╡ a5a82275-729e-487e-86c7-4323cdabd392 +RNA[1], RNA[9] + # ╔═╡ 7a9b23c1-30cd-4516-bc47-259302d944fc -basepair(1, 2, RNA) +basepair(1, 9, RNA) + +# ╔═╡ 7cb6998f-eb0a-42da-bfd1-bc7370955b70 +RNA[1], RNA[3] # ╔═╡ a624100b-59e7-483e-affd-d0b5391dd475 basepair(1, 3, RNA) @@ -81,8 +90,11 @@ S = calculate_S(RNA) # ╔═╡ Cell order: # ╟─4b3e86ea-6973-11ec-014f-9f2708ba86cf # ╠═6482fcd3-23de-49bb-ae0a-b7db42305890 +# ╠═3ea557f6-a3bd-4d73-99ef-10fc69024fca # ╠═b266622e-db86-4690-8328-d17e1b5a6db0 +# ╠═a5a82275-729e-487e-86c7-4323cdabd392 # ╠═7a9b23c1-30cd-4516-bc47-259302d944fc +# ╠═7cb6998f-eb0a-42da-bfd1-bc7370955b70 # ╠═a624100b-59e7-483e-affd-d0b5391dd475 # ╠═dc573955-b679-4fdc-aeba-7001ea8f7a4c # ╠═0a20eddd-24f7-43c6-a0f3-6c1c138fb90a From 1a949a7e14b9c9cca5a3abef1888012df43444de Mon Sep 17 00:00:00 2001 From: menvdamm <80266975+menvdamm@users.noreply.github.com> Date: Thu, 27 Jan 2022 13:19:42 +0100 Subject: [PATCH 05/11] Implemented Nussinov's algorithm + visualization --- .DS_Store | Bin 6148 -> 6148 bytes notebook/RNAfolder.jl | 1191 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 1156 insertions(+), 35 deletions(-) diff --git a/.DS_Store b/.DS_Store index 6dc77c1d45ee011012115c8a73f84cb16c9aa343..eb6b37f750faa6fab43e4af1eb7d676804f386fc 100644 GIT binary patch delta 281 zcmZoMXfc=|#>B!ku~2NHo+2an#(>?7i&&T#xhL~5-KbA0FD^*R$xmWnU^tmnkds+l zVqkEck%^gwm5rT)gNuWUmn$|nBfmVjB(bEl*eS6n8pI1oEXhcMvP1IobKva6q_E7? z@^}Fe=lr~q#LT?ZBCzJnlvJRSnDETJl>Bn1{L;LXVz4>EVGtP(4o(ivcmav(Y9n(~ z9R))Z^I9E+YD*&n9R(9(v)Wot4slgOThD~t%Bt#`+PaxQ*8%|}BZOw)hte==*5(UL ieoUL$Iruq%9^d?t`8)Guei26wpn4{dn#~a+YnTC^B}|F{ delta 67 zcmZoMXfc=|#>B)qu~2NHo+2aH#(>?7j9im>SZ-`S%WB26vEe1tW_AvK4xp0Ff*jwO VC-aLqaxee^BLf4=<_M8B%m8yk5WN5Z diff --git a/notebook/RNAfolder.jl b/notebook/RNAfolder.jl index 458e0598..a3e11f8a 100644 --- a/notebook/RNAfolder.jl +++ b/notebook/RNAfolder.jl @@ -4,6 +4,12 @@ using Markdown using InteractiveUtils +# ╔═╡ 5d8b9926-98ed-4714-a63b-6174f8d067b1 +using Plots, Graphs, GraphPlot + +# ╔═╡ b5ed3265-3276-41b8-be2d-e9b8f03fe3f0 +using GraphRecipes + # ╔═╡ 4b3e86ea-6973-11ec-014f-9f2708ba86cf md""" # RNAfolder @@ -19,38 +25,21 @@ This pluto notebook contains the code for a simple RNA secondary structure predi # ╔═╡ 6482fcd3-23de-49bb-ae0a-b7db42305890 RNA = "GGGAAAUCC" +# ╔═╡ 41274813-c783-4338-ba6c-2dd0ffd691a9 +#RNA = "GGGCAGUUACGGACCCAGAUUCAGAGAGACACACAGGGUUUAAUCC" + # ╔═╡ 3ea557f6-a3bd-4d73-99ef-10fc69024fca n = length(RNA) -# ╔═╡ b266622e-db86-4690-8328-d17e1b5a6db0 +# ╔═╡ e5650185-a6bc-488c-a02b-3c1363c52b8c function basepair(i, j, RNA) - bp = 0 - ni = RNA[i] - nj = RNA[j] - if ni == 'A' - if nj == 'U' - bp = true - else - bp = false - end - elseif ni == 'U' - if nj == 'A' || nj == 'G' # U-G basepairs are also possible - bp = true - else - bp = false - end - elseif ni == 'G' - if nj == 'C' || nj == 'U' # U-G basepairs are also possible - bp = true - else - bp = false - end - elseif ni == 'C' - if nj == 'U' - bp = true - else - bp = false - end + pair = string(RNA[i], RNA[j]) + # all possible pairs (GU is also possible in RNA): + pairs = ["AU", "UA", "GC", "CG", "UG", "GU"] + if pair in pairs + bp = true + else + bp = false end return bp end @@ -68,17 +57,85 @@ RNA[1], RNA[3] basepair(1, 3, RNA) # ╔═╡ dc573955-b679-4fdc-aeba-7001ea8f7a4c +function calculate_S_first(RNA) + n = length(RNA) + S = zeros(n,n) + Events = [] + # recursion happens from smaller to larger distancs between i and j, + # from the diagonal towards the upper right corner in the matrix + for d in 1:n-1 + for i in 1:n-d + j = i + d + # i and j basepair + if basepair(i, j, RNA) # and i <= j-4 + bp_score = S[i+1,j-1] + 1 + else + bp_score = 0 + end + # i unpaired + iup_score = S[i+1,j] + # j unpaired + jup_score = S[i,j-1] + # bifurcation between i and j + K = [k for k in i+1:j-1] + if !isempty(K) + bf_score = maximum([S[i,k] + S[k+1,j] for k in K]) + else + bf_score = 0 + end + # the actual score is the maximum of these scores + S[i,j] = max(bp_score, + iup_score, + jup_score, + bf_score) + if bp_score == S[i,j] + push!(Events, "bp") + end + if iup_score == S[i,j] + push!(Events, "iup") + end + if jup_score == S[i,j] + push!(Events, "jup") + end + if bf_score == S[i,j] + push!(Events, "bf") + end + end + end + return S, Events +end + +# ╔═╡ 2d83c447-1d33-496a-8a39-75d1cb9b2de1 function calculate_S(RNA) n = length(RNA) S = zeros(n,n) - for i in 1:n - for j in i+1:n - if basepair(i, j, RNA) - bp = S[i+1,j-1] + 1 - S[i,j] = max(bp, S[i+1,j], S[i,j-1]) # add bifurcation + # recursion happens from smaller to larger distancs between i and j, + # from the diagonal towards the upper right corner in the matrix + for d in 4:n-1 # at least 3 other nucleotides between a bp + for i in 1:n-d + j = i + d + # j doesn't basepair + nobp_score = S[i,j-1] + # j basepairs with i + if basepair(i,j,RNA) + bpi_score = S[i+1,j-1] + 1 else - S[i,j] = max(S[i+1,j], S[i,j-1]) + bpi_score = 0 end + # j basepairs with k in the range [i+1:j-4] + bpk = [] + for k in i+1:j-4 # at least 3 other nucleotides between a bp + if basepair(k,j,RNA) + push!(bpk, S[i,k-1] + S[k+1,j-1] + 1) + end + end + if !isempty(bpk) + bpk_score = maximum(bpk) + else + bpk_score = 0 + end + # the actual score is the maximum of these scores + S[i,j] = max(nobp_score, bpi_score, bpk_score) end end return S @@ -87,14 +144,1078 @@ end # ╔═╡ 0a20eddd-24f7-43c6-a0f3-6c1c138fb90a S = calculate_S(RNA) +# ╔═╡ 463d18c3-e155-4b73-896f-2bbcdb71bbd2 +function traceback(RNA, S, i, j; pairs = []) + if i < j + if S[i,j] == S[i,j-1] + traceback(RNA, S, i, j-1, pairs = pairs) + elseif S[i,j] == S[i+1,j-1] + 1 + push!(pairs, (i,j)) + traceback(RNA, S, i+1, j-1, pairs = pairs) + else + for k in i+1:j-4 + if S[i,j] == S[i,k-1] + S[k+1,j-1] + 1 + push!(pairs, (k,j)) + traceback(RNA, S, i, k-1, pairs = pairs) + traceback(RNA, S, k+1, j-1, pairs = pairs) + break + end + end + end + end + return pairs +end + +# ╔═╡ 43f97b8d-cd9c-4b8f-8821-68542488e49d +pairs = traceback(RNA, S, 1, n) + +# ╔═╡ b156a4c7-6ed9-4a4d-b3c9-d3c06fbc1faf +function dotbracket(RNA, pairs) + n = length(RNA) + db = collect('.' ^ n) + for (i,j) in pairs + db[i] = '(' + db[j] = ')' + end + db = join(db) + return db +end + +# ╔═╡ 0d5440c3-23f8-4718-b68e-852c7600cf5b +db = dotbracket(RNA, pairs) + +# ╔═╡ 94a55c72-0261-44d5-ab0a-a853efa30a66 +function plotstructure(RNA, pairs) + n = length(RNA) + edges = [(i,i+1) for i in 1:n-1] + append!(edges, pairs) + G = SimpleGraph(Edge.(edges)) + myblue = "#304da5" + mygreen = "#2a9d8f" + myyellow = "#e9c46a" + myred = "#e76f51" + colors = [mygreen, myblue, myyellow, myred] + members = replace(collect(RNA), 'A' => 1, 'U' => 2, 'G' => 3, 'C' => 4) + nodecolors = colors[members] + gplot(G, layout = spring_layout, nodelabel = collect(RNA), nodefillc = nodecolors) +end + +# ╔═╡ 44a62f32-c07f-4458-ac6e-ca989e60137d +plotstructure(RNA, pairs) + +# ╔═╡ b3e65e30-be3b-4ae5-af26-2329eb882577 +function plotstructure2(RNA, pairs) + n = length(RNA) + edges = [(i,i+1) for i in 1:n-1] + append!(edges, pairs) + G = SimpleGraph(Edge.(edges)) + myblue = "#304da5" + mygreen = "#2a9d8f" + myyellow = "#e9c46a" + myred = "#e76f51" + colors = [mygreen, myblue, myyellow, myred] + members = replace(collect(RNA), 'A' => 1, 'U' => 2, 'G' => 3, 'C' => 4) + nodecolors = colors[members] + graphplot(G, + curves = false, + names = collect(RNA), + nodecolor = nodecolors, + nodeshape = :circle, + linealpha = 0.3, + linewidth = 5, + markersize = 0.25, + fontsize = 8, + method = :stress) +end + +# ╔═╡ 6fbe81e6-326c-466c-a7af-3d9e4afffde8 +plotstructure2(RNA, pairs) + +# ╔═╡ 00000000-0000-0000-0000-000000000001 +PLUTO_PROJECT_TOML_CONTENTS = """ +[deps] +GraphPlot = "a2cc645c-3eea-5389-862e-a155d0052231" +GraphRecipes = "bd48cda9-67a9-57be-86fa-5b3c104eda73" +Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" + +[compat] +GraphPlot = "~0.5.0" +GraphRecipes = "~0.5.9" +Graphs = "~1.5.1" +Plots = "~1.25.6" +""" + +# ╔═╡ 00000000-0000-0000-0000-000000000002 +PLUTO_MANIFEST_TOML_CONTENTS = """ +# This file is machine-generated - editing it directly is not advised + +[[AbstractTrees]] +git-tree-sha1 = "03e0550477d86222521d254b741d470ba17ea0b5" +uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +version = "0.3.4" + +[[Adapt]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "af92965fb30777147966f58acb05da51c5616b5f" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "3.3.3" + +[[ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" + +[[ArnoldiMethod]] +deps = ["LinearAlgebra", "Random", "StaticArrays"] +git-tree-sha1 = "f87e559f87a45bece9c9ed97458d3afe98b1ebb9" +uuid = "ec485272-7323-5ecc-a04f-4719b315124d" +version = "0.1.0" + +[[Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[AxisAlgorithms]] +deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] +git-tree-sha1 = "66771c8d21c8ff5e3a93379480a2307ac36863f7" +uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950" +version = "1.0.1" + +[[Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.8+0" + +[[Cairo_jll]] +deps = ["Artifacts", "Bzip2_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" + +[[ChainRulesCore]] +deps = ["Compat", "LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "54fc4400de6e5c3e27be6047da2ef6ba355511f8" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.11.6" + +[[ChangesOfVariables]] +deps = ["ChainRulesCore", "LinearAlgebra", "Test"] +git-tree-sha1 = "bf98fa45a0a4cee295de98d4c1462be26345b9a1" +uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" +version = "0.1.2" + +[[ColorSchemes]] +deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random"] +git-tree-sha1 = "6b6f04f93710c71550ec7e16b650c1b9a612d0b6" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.16.0" + +[[ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "32a2b8af383f11cbb65803883837a149d10dfe8a" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.10.12" + +[[Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "417b0ed7b8b838aa6ca0a87aadf1bb9eb111ce40" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.8" + +[[Compat]] +deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "SHA", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"] +git-tree-sha1 = "44c37b4636bc54afac5c574d2d02b625349d6582" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "3.41.0" + +[[CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" + +[[Compose]] +deps = ["Base64", "Colors", "DataStructures", "Dates", "IterTools", "JSON", "LinearAlgebra", "Measures", "Printf", "Random", "Requires", "Statistics", "UUIDs"] +git-tree-sha1 = "9a2695195199f4f20b94898c8a8ac72609e165a4" +uuid = "a81c6b42-2e10-5240-aca2-a61377ecd94b" +version = "0.9.3" + +[[Contour]] +deps = ["StaticArrays"] +git-tree-sha1 = "9f02045d934dc030edad45944ea80dbd1f0ebea7" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.5.7" + +[[DataAPI]] +git-tree-sha1 = "cc70b17275652eb47bc9e5f81635981f13cea5c8" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.9.0" + +[[DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "3daef5523dd2e769dad2365274f760ff5f282c7d" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.11" + +[[DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[DelimitedFiles]] +deps = ["Mmap"] +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" + +[[Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.8.6" + +[[Downloads]] +deps = ["ArgTools", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" + +[[EarCut_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3f3a2501fa7236e9b911e0f7a588c657e822bb6d" +uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" +version = "2.2.3+0" + +[[Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "b3bfd02e98aedfa5cf885665493c5598c350cd2f" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.2.10+0" + +[[FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.1" + +[[FFMPEG_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "Pkg", "Zlib_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "d8a578692e3077ac998b50c0217dfd67f21d1e5f" +uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" +version = "4.4.0+0" + +[[FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.4" + +[[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" + +[[Formatting]] +deps = ["Printf"] +git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8" +uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" +version = "0.4.2" + +[[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" + +[[FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.10+0" + +[[GLFW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] +git-tree-sha1 = "0c603255764a1fa0b61752d2bec14cfbd18f7fe8" +uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" +version = "3.3.5+1" + +[[GR]] +deps = ["Base64", "DelimitedFiles", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Printf", "Random", "RelocatableFolders", "Serialization", "Sockets", "Test", "UUIDs"] +git-tree-sha1 = "4a740db447aae0fbeb3ee730de1afbb14ac798a1" +uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" +version = "0.63.1" + +[[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 = "aa22e1ee9e722f1da183eb33370df4c1aeb6c2cd" +uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" +version = "0.63.1+0" + +[[GeometryBasics]] +deps = ["EarCut_jll", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] +git-tree-sha1 = "58bcdf5ebc057b085e58d95c138725628dd7453c" +uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" +version = "0.4.1" + +[[GeometryTypes]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "StaticArrays"] +git-tree-sha1 = "d796f7be0383b5416cd403420ce0af083b0f9b28" +uuid = "4d00f742-c7ba-57c2-abde-4428a4b178cb" +version = "0.8.5" + +[[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" + +[[Glib_jll]] +deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "a32d672ac2c967f3deb8a81d828afc739c838a06" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.68.3+2" + +[[GraphPlot]] +deps = ["ArnoldiMethod", "ColorTypes", "Colors", "Compose", "DelimitedFiles", "Graphs", "LinearAlgebra", "Random", "SparseArrays"] +git-tree-sha1 = "5e51d9d9134ebcfc556b82428521fe92f709e512" +uuid = "a2cc645c-3eea-5389-862e-a155d0052231" +version = "0.5.0" + +[[GraphRecipes]] +deps = ["AbstractTrees", "GeometryTypes", "Graphs", "InteractiveUtils", "Interpolations", "LinearAlgebra", "NaNMath", "NetworkLayout", "PlotUtils", "RecipesBase", "SparseArrays", "Statistics"] +git-tree-sha1 = "1735085e3a8dd0e14020bdcbf8da9893a5508a3f" +uuid = "bd48cda9-67a9-57be-86fa-5b3c104eda73" +version = "0.5.9" + +[[Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[Graphs]] +deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] +git-tree-sha1 = "d727758173afef0af878b29ac364a0eca299fc6b" +uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" +version = "1.5.1" + +[[Grisu]] +git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" +uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" +version = "1.0.2" + +[[HTTP]] +deps = ["Base64", "Dates", "IniFile", "Logging", "MbedTLS", "NetworkOptions", "Sockets", "URIs"] +git-tree-sha1 = "0fa77022fe4b511826b39c894c90daf5fce3334a" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "0.9.17" + +[[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" + +[[Inflate]] +git-tree-sha1 = "f5fc07d4e706b84f72d54eedcc1c13d92fb0871c" +uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" +version = "0.1.2" + +[[IniFile]] +deps = ["Test"] +git-tree-sha1 = "098e4d2c533924c921f9f9847274f2ad89e018b8" +uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f" +version = "0.5.0" + +[[InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[Interpolations]] +deps = ["AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "Requires", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] +git-tree-sha1 = "b15fc0a95c564ca2e0a7ae12c1f095ca848ceb31" +uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" +version = "0.13.5" + +[[InverseFunctions]] +deps = ["Test"] +git-tree-sha1 = "a7254c0acd8e62f1ac75ad24d5db43f5f19f3c65" +uuid = "3587e190-3f89-42d0-90ee-14403ec27112" +version = "0.1.2" + +[[IrrationalConstants]] +git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.1.1" + +[[IterTools]] +git-tree-sha1 = "fa6287a4469f5e048d763df38279ee729fbd44e5" +uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" +version = "1.4.0" + +[[IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[JLLWrappers]] +deps = ["Preferences"] +git-tree-sha1 = "22df5b96feef82434b07327e2d3c770a9b21e023" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.4.0" + +[[JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "8076680b162ada2a031f707ac7b4953e30667a37" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.2" + +[[JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "d735490ac75c5cb9f1b00d8b5509c11984dc6943" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "2.1.0+0" + +[[LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.1+0" + +[[LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.1+0" + +[[LaTeXStrings]] +git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.0" + +[[Latexify]] +deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "Printf", "Requires"] +git-tree-sha1 = "a8f4f279b6fa3c3c4f1adadd78a621b13a506bce" +uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" +version = "0.15.9" + +[[LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" + +[[LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" + +[[LibGit2]] +deps = ["Base64", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" + +[[Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.2.2+1" + +[[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" + +[[Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "7739f837d6447403596a75d19ed01fd08d6f56bf" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.3.0+3" + +[[Libgpg_error_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.42.0+0" + +[[Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "42b62845d70a619f063a7da093d995ec8e15e778" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.16.1+1" + +[[Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.35.0+0" + +[[Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "340e257aada13f95f98ee352d316c3bed37c8ab9" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.3.0+0" + +[[Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.36.0+0" + +[[LinearAlgebra]] +deps = ["Libdl"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[LogExpFunctions]] +deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "e5718a00af0ab9756305a0392832c8952c7426c1" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.6" + +[[Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "3d3e902b31198a27340d0bf00d6ac452866021cf" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.9" + +[[Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "Random", "Sockets"] +git-tree-sha1 = "1c38e51c3d08ef2278062ebceade0e46cefc96fe" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.0.3" + +[[MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" + +[[Measures]] +git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f" +uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" +version = "0.3.1" + +[[Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "bf210ce90b6c9eed32d25dbcae1ebc565df2687f" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.0.2" + +[[Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" + +[[NaNMath]] +git-tree-sha1 = "f755f36b19a5116bb580de457cda0c140153f283" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "0.3.6" + +[[NetworkLayout]] +deps = ["GeometryBasics", "LinearAlgebra", "Random", "Requires", "SparseArrays"] +git-tree-sha1 = "cac8fc7ba64b699c678094fa630f49b80618f625" +uuid = "46757867-2c16-5918-afeb-47bfcb05e46a" +version = "0.4.4" + +[[NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" + +[[OffsetArrays]] +deps = ["Adapt"] +git-tree-sha1 = "043017e0bdeff61cfbb7afeb558ab29536bbb5ed" +uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" +version = "1.10.8" + +[[Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + +[[OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "648107615c15d4e09f7eca16307bc821c1f718d8" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "1.1.13+0" + +[[Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.2+0" + +[[OrderedCollections]] +git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.4.1" + +[[PCRE_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "b2a7af664e098055a7529ad1a900ded962bca488" +uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc" +version = "8.44.0+0" + +[[Parsers]] +deps = ["Dates"] +git-tree-sha1 = "92f91ba9e5941fc781fecf5494ac1da87bdac775" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.2.0" + +[[Pixman_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.40.1+0" + +[[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" + +[[PlotThemes]] +deps = ["PlotUtils", "Requires", "Statistics"] +git-tree-sha1 = "a3a964ce9dc7898193536002a6dd892b1b5a6f1d" +uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" +version = "2.0.1" + +[[PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "Statistics"] +git-tree-sha1 = "6f1b25e8ea06279b5689263cc538f51331d7ca17" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.1.3" + +[[Plots]] +deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "GeometryBasics", "JSON", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun", "Unzip"] +git-tree-sha1 = "db7393a80d0e5bef70f2b518990835541917a544" +uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +version = "1.25.6" + +[[Preferences]] +deps = ["TOML"] +git-tree-sha1 = "2cf929d64681236a2e074ffafb8d568733d2e6af" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.2.3" + +[[Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[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 = "ad368663a5e20dbb8d6dc2fddeefe4dae0781ae8" +uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1" +version = "5.15.3+0" + +[[REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[Random]] +deps = ["Serialization"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[Ratios]] +deps = ["Requires"] +git-tree-sha1 = "01d341f502250e81f6fec0afe662aa861392a3aa" +uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" +version = "0.4.2" + +[[RecipesBase]] +git-tree-sha1 = "6bf3f380ff52ce0832ddd3a2a7b9538ed1bcca7d" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.2.1" + +[[RecipesPipeline]] +deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase"] +git-tree-sha1 = "37c1631cb3cc36a535105e6d5557864c82cd8c2b" +uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" +version = "0.5.0" + +[[Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "cdbd3b1338c72ce29d9584fdbe9e9b70eeb5adca" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "0.1.3" + +[[Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" + +[[Scratch]] +deps = ["Dates"] +git-tree-sha1 = "0b4b7f1393cff97c33891da2a0bf69c6ed241fda" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.1.0" + +[[Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[SharedArrays]] +deps = ["Distributed", "Mmap", "Random", "Serialization"] +uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" + +[[Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + +[[SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "b3363d7460f7d098ca0912c69b082f75625d7508" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.0.1" + +[[SparseArrays]] +deps = ["LinearAlgebra", "Random"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[StaticArrays]] +deps = ["LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "2884859916598f974858ff01df7dfc6c708dd895" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.3.3" + +[[Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[StatsAPI]] +git-tree-sha1 = "d88665adc9bcf45903013af0982e2fd05ae3d0a6" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.2.0" + +[[StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "51383f2d367eb3b444c961d485c565e4c0cf4ba0" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.33.14" + +[[StructArrays]] +deps = ["Adapt", "DataAPI", "StaticArrays", "Tables"] +git-tree-sha1 = "d21f2c564b21a202f4677c0fba5b5ee431058544" +uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" +version = "0.6.4" + +[[TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" + +[[TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "TableTraits", "Test"] +git-tree-sha1 = "bb1064c9a84c52e277f1096cf41434b675cd368b" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.6.1" + +[[Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" + +[[Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[URIs]] +git-tree-sha1 = "97bbe755a53fe859669cd907f2d96aee8d2c1355" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.3.0" + +[[UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[Unzip]] +git-tree-sha1 = "34db80951901073501137bdbc3d5a8e7bbd06670" +uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" +version = "0.1.2" + +[[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" + +[[Wayland_protocols_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "66d72dc6fcc86352f01676e8f0f698562e60510f" +uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" +version = "1.23.0+0" + +[[WoodburyMatrices]] +deps = ["LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "de67fa59e33ad156a590055375a30b23c40299d3" +uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" +version = "0.5.5" + +[[XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "1acf5bdf07aa0907e0a37d3718bb88d4b687b74a" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.9.12+0" + +[[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" + +[[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" + +[[Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.9+4" + +[[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" + +[[Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.3+4" + +[[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" + +[[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" + +[[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" + +[[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" + +[[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" + +[[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" + +[[Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.0+3" + +[[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" + +[[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" + +[[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" + +[[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" + +[[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" + +[[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" + +[[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" + +[[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" + +[[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" + +[[Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.4.0+3" + +[[Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" + +[[Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "cc4bf3fdde8b7e3e9fa0351bdeedba1cf3b7f6e6" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.0+0" + +[[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" + +[[libfdk_aac_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.2+0" + +[[libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.38+0" + +[[libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+1" + +[[nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" + +[[p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" + +[[x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "2021.5.5+0" + +[[x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +version = "3.5.0+0" + +[[xkbcommon_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] +git-tree-sha1 = "ece2350174195bb31de1a63bea3a41ae1aa593b6" +uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" +version = "0.9.1+5" +""" + # ╔═╡ Cell order: # ╟─4b3e86ea-6973-11ec-014f-9f2708ba86cf # ╠═6482fcd3-23de-49bb-ae0a-b7db42305890 +# ╠═41274813-c783-4338-ba6c-2dd0ffd691a9 # ╠═3ea557f6-a3bd-4d73-99ef-10fc69024fca -# ╠═b266622e-db86-4690-8328-d17e1b5a6db0 +# ╠═e5650185-a6bc-488c-a02b-3c1363c52b8c # ╠═a5a82275-729e-487e-86c7-4323cdabd392 # ╠═7a9b23c1-30cd-4516-bc47-259302d944fc # ╠═7cb6998f-eb0a-42da-bfd1-bc7370955b70 # ╠═a624100b-59e7-483e-affd-d0b5391dd475 # ╠═dc573955-b679-4fdc-aeba-7001ea8f7a4c +# ╠═2d83c447-1d33-496a-8a39-75d1cb9b2de1 # ╠═0a20eddd-24f7-43c6-a0f3-6c1c138fb90a +# ╠═463d18c3-e155-4b73-896f-2bbcdb71bbd2 +# ╠═43f97b8d-cd9c-4b8f-8821-68542488e49d +# ╠═b156a4c7-6ed9-4a4d-b3c9-d3c06fbc1faf +# ╠═0d5440c3-23f8-4718-b68e-852c7600cf5b +# ╠═5d8b9926-98ed-4714-a63b-6174f8d067b1 +# ╠═94a55c72-0261-44d5-ab0a-a853efa30a66 +# ╠═44a62f32-c07f-4458-ac6e-ca989e60137d +# ╠═b5ed3265-3276-41b8-be2d-e9b8f03fe3f0 +# ╠═b3e65e30-be3b-4ae5-af26-2329eb882577 +# ╠═6fbe81e6-326c-466c-a7af-3d9e4afffde8 +# ╟─00000000-0000-0000-0000-000000000001 +# ╟─00000000-0000-0000-0000-000000000002 From e865c2114b8c767c1757bfd6d2e43760e7c8244a Mon Sep 17 00:00:00 2001 From: menvdamm <80266975+menvdamm@users.noreply.github.com> Date: Thu, 27 Jan 2022 18:57:37 +0100 Subject: [PATCH 06/11] Added UI & better visualisation --- notebook/RNAfolder.jl | 590 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 515 insertions(+), 75 deletions(-) diff --git a/notebook/RNAfolder.jl b/notebook/RNAfolder.jl index a3e11f8a..08441d4a 100644 --- a/notebook/RNAfolder.jl +++ b/notebook/RNAfolder.jl @@ -4,11 +4,21 @@ using Markdown using InteractiveUtils -# ╔═╡ 5d8b9926-98ed-4714-a63b-6174f8d067b1 -using Plots, Graphs, GraphPlot +# 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 -# ╔═╡ b5ed3265-3276-41b8-be2d-e9b8f03fe3f0 -using GraphRecipes +# ╔═╡ 12967f8b-1933-4376-b9c4-5092b41b935a +using PlutoUI + +# ╔═╡ dba46e66-8704-42de-938c-d576a1336398 +using Plots, Graphs, GraphMakie, CairoMakie, NetworkLayout # ╔═╡ 4b3e86ea-6973-11ec-014f-9f2708ba86cf md""" @@ -22,11 +32,27 @@ This pluto notebook contains the code for a simple RNA secondary structure predi """ -# ╔═╡ 6482fcd3-23de-49bb-ae0a-b7db42305890 -RNA = "GGGAAAUCC" +# ╔═╡ 59108cf2-d8a5-4c16-b373-bb6a23d13735 +begin + choices = ["Choose an example sequence:", "Input your own sequence:"] + @bind choice Radio(choices, default = choices[1]) +end -# ╔═╡ 41274813-c783-4338-ba6c-2dd0ffd691a9 -#RNA = "GGGCAGUUACGGACCCAGAUUCAGAGAGACACACAGGGUUUAAUCC" +# ╔═╡ ed0a3dc5-99d3-4628-ad5c-7d13e699b353 +begin + RNAs = ["GGGAAUAUUAUAUCC" => "Example 1 (15 nucleotides)", + "GGGCACUUGACUCGAGCAGACCGUAGCGAUAGCGCGAGAUUUGCCGGACUACCAC" => "Example 2 (55 nucleotides)", "GCTCGTGCGTCGATGAACAACGCAGCTAGCTGCGAGAATTAATGTGAATTGCAGGACACATTGATCATCGACACTTCGAACGCACTTGCGGCCCCGGGTTCCTCCCGGGGCTACGCCTGTCTGAGCGTCGCTTGAAAAAAAAAAAAAAAAAAAAAA" => "Human 5.8S rRNA (156 nucleotides)", +"ATGGACTCCAACACTGTGTCAAGCTTTCAGGTAGACTGCTTTCTTTGGCATGTCCGCAAACGATTTGCAGACCAAGAACTGGGTGATGCCCCATTCCTTGACCGGCTTCGCCGAGACCAGAAGTCCCTAAGAGGAAGAGGCAGCACTCTTGGTCTGGACATCGAGACAGCTACTCGTGCGGGAAAGCAAATAGTGGAGCGGATTCTGGGGGAAGAATCTGATGAAGCACTTAAAATGAATATTGCTTCTGTACCGACTTCACGCTACCTAACTGACATGACTCTTGAAGAAATGTCAAGAGACTGGTTCATGCTCATGCCCAAGCAGAAAGTAGCAGGTTCTCTCTGCATCAAAATGGACCAGGCAATAATGGATAAAACCATCATACTGAAAGCAAATTTCAGTGTGATTTTTGATCGGCTGGAAACCCTAATATTACTTAGAGCTTTCACAGAAGAAGGAGCAATTGTGGGAGAAATCTCACCATTACCTTCTCTTCCAGGACATACTGATGAGGATGTCAAAATTGCAATTGGGGTCCTCATCGGAGGGCTTGAATGGAATGATAACACAGTTCGAGTCTCTGAAACTCTACAGAGATTCACTTGGAGAAGCAGTAATGAGGATGGGAGACCTTCACTCCCTTCAAAACAGAAACGGAAAATGGCGAGAACAATTGAGTCAGAAGTTCGAGGAAATAAGATGGCTGATTGAGGAAATGCGACATAGATTGAAGACCACAGAGAACAGCTTCGAACAAATAACGTTTATGCAAGCTTTACAACTATTGCTTGAAGTGGAGCAAGAGATAAGAACCTTCTCGTTTCAGCTTATTTAA" => "Influenza A NS protein gene (838 nucleotides)"] + + if choice == choices[1] + @bind rna Radio(RNAs, default = RNAs[1][1]) + elseif choice == choices[2] + @bind rna TextField() + end +end + +# ╔═╡ 3c7f1384-33ac-4b2d-9a63-4bf412bfa685 +RNA = replace(uppercase(rna), 'T' => 'U') # ╔═╡ 3ea557f6-a3bd-4d73-99ef-10fc69024fca n = length(RNA) @@ -44,18 +70,6 @@ function basepair(i, j, RNA) return bp end -# ╔═╡ a5a82275-729e-487e-86c7-4323cdabd392 -RNA[1], RNA[9] - -# ╔═╡ 7a9b23c1-30cd-4516-bc47-259302d944fc -basepair(1, 9, RNA) - -# ╔═╡ 7cb6998f-eb0a-42da-bfd1-bc7370955b70 -RNA[1], RNA[3] - -# ╔═╡ a624100b-59e7-483e-affd-d0b5391dd475 -basepair(1, 3, RNA) - # ╔═╡ dc573955-b679-4fdc-aeba-7001ea8f7a4c function calculate_S_first(RNA) n = length(RNA) @@ -184,8 +198,14 @@ end # ╔═╡ 0d5440c3-23f8-4718-b68e-852c7600cf5b db = dotbracket(RNA, pairs) -# ╔═╡ 94a55c72-0261-44d5-ab0a-a853efa30a66 -function plotstructure(RNA, pairs) +# ╔═╡ 2c5e005a-7b42-4ae8-8865-585faa7b46de +"http://nibiru.tbi.univie.ac.at/forna/forna.html?id=url/name&sequence=$RNA&structure=$db" + +# ╔═╡ b5ed3265-3276-41b8-be2d-e9b8f03fe3f0 +#using GraphRecipes + +# ╔═╡ b3e65e30-be3b-4ae5-af26-2329eb882577 +function plotstructure2(RNA, pairs) n = length(RNA) edges = [(i,i+1) for i in 1:n-1] append!(edges, pairs) @@ -197,14 +217,23 @@ function plotstructure(RNA, pairs) colors = [mygreen, myblue, myyellow, myred] members = replace(collect(RNA), 'A' => 1, 'U' => 2, 'G' => 3, 'C' => 4) nodecolors = colors[members] - gplot(G, layout = spring_layout, nodelabel = collect(RNA), nodefillc = nodecolors) + graphplot(G, + curves = false, + names = collect(RNA), + nodecolor = nodecolors, + nodeshape = :circle, + linealpha = 0.3, + linewidth = 4, + markersize = 0.25, + fontsize = 6, + method = :stress) end -# ╔═╡ 44a62f32-c07f-4458-ac6e-ca989e60137d -plotstructure(RNA, pairs) +# ╔═╡ 6fbe81e6-326c-466c-a7af-3d9e4afffde8 +#plotstructure2(RNA, pairs) -# ╔═╡ b3e65e30-be3b-4ae5-af26-2329eb882577 -function plotstructure2(RNA, pairs) +# ╔═╡ 2e8fb274-0658-43f8-bfa0-40f2f1daf6f3 +function plotstructure3(RNA, pairs) n = length(RNA) edges = [(i,i+1) for i in 1:n-1] append!(edges, pairs) @@ -216,40 +245,70 @@ function plotstructure2(RNA, pairs) colors = [mygreen, myblue, myyellow, myred] members = replace(collect(RNA), 'A' => 1, 'U' => 2, 'G' => 3, 'C' => 4) nodecolors = colors[members] - graphplot(G, - curves = false, - names = collect(RNA), - nodecolor = nodecolors, - nodeshape = :circle, - linealpha = 0.3, - linewidth = 5, - markersize = 0.25, - fontsize = 8, - method = :stress) + edgecolors = [] + for edge in sort(edges) + if edge in pairs + push!(edgecolors, :red) + else + push!(edgecolors, :black) + end + end + nuc = [string(i) for i in RNA] + f, ax, p = graphplot(G, + layout = Stress(), + node_size = 20, + node_color = nodecolors, + edge_color = edgecolors, + edge_width = 3, + nlabels = nuc, + nlabels_align = (:center,:center), + ) + hidedecorations!(ax); hidespines!(ax) + ax.aspect = DataAspect() + return f end -# ╔═╡ 6fbe81e6-326c-466c-a7af-3d9e4afffde8 -plotstructure2(RNA, pairs) +# ╔═╡ 5e397f0a-7bdd-4db9-9acf-5781951897f6 +plotstructure3(RNA, pairs) + +# ╔═╡ c6b5f210-80d1-465c-b128-89917263e202 + # ╔═╡ 00000000-0000-0000-0000-000000000001 PLUTO_PROJECT_TOML_CONTENTS = """ [deps] -GraphPlot = "a2cc645c-3eea-5389-862e-a155d0052231" -GraphRecipes = "bd48cda9-67a9-57be-86fa-5b3c104eda73" +CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" +GraphMakie = "1ecd5474-83a3-4783-bb4f-06765db800d2" Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" +NetworkLayout = "46757867-2c16-5918-afeb-47bfcb05e46a" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8" [compat] -GraphPlot = "~0.5.0" -GraphRecipes = "~0.5.9" +CairoMakie = "~0.6.6" +GraphMakie = "~0.3.1" Graphs = "~1.5.1" +NetworkLayout = "~0.4.4" Plots = "~1.25.6" +PlutoUI = "~0.7.23" """ # ╔═╡ 00000000-0000-0000-0000-000000000002 PLUTO_MANIFEST_TOML_CONTENTS = """ # This file is machine-generated - editing it directly is not advised +[[AbstractFFTs]] +deps = ["ChainRulesCore", "LinearAlgebra"] +git-tree-sha1 = "6f1d9bc1c08f9f4a8fa92e3ea3cb50153a1b40d4" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.1.0" + +[[AbstractPlutoDingetjes]] +deps = ["Pkg"] +git-tree-sha1 = "8eaf9f1b4921132a4cff3f36a1d9ba923b14a481" +uuid = "6e696c72-6542-2067-7265-42206c756150" +version = "1.1.4" + [[AbstractTrees]] git-tree-sha1 = "03e0550477d86222521d254b741d470ba17ea0b5" uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" @@ -261,6 +320,12 @@ git-tree-sha1 = "af92965fb30777147966f58acb05da51c5616b5f" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" version = "3.3.3" +[[Animations]] +deps = ["Colors"] +git-tree-sha1 = "e81c509d2c8e49592413bfb0bb3b08150056c79d" +uuid = "27a7e980-b3e6-11e9-2bcd-0b925532e340" +version = "0.4.1" + [[ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" @@ -270,9 +335,21 @@ git-tree-sha1 = "f87e559f87a45bece9c9ed97458d3afe98b1ebb9" uuid = "ec485272-7323-5ecc-a04f-4719b315124d" version = "0.1.0" +[[ArrayInterface]] +deps = ["Compat", "IfElse", "LinearAlgebra", "Requires", "SparseArrays", "Static"] +git-tree-sha1 = "ffc6588e17bcfcaa79dfa5b4f417025e755f83fc" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "4.0.1" + [[Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +[[Automa]] +deps = ["Printf", "ScanByte", "TranscodingStreams"] +git-tree-sha1 = "d50976f217489ce799e366d9561d56a98a30d7fe" +uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b" +version = "0.8.2" + [[AxisAlgorithms]] deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] git-tree-sha1 = "66771c8d21c8ff5e3a93379480a2307ac36863f7" @@ -288,6 +365,23 @@ git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" version = "1.0.8+0" +[[CEnum]] +git-tree-sha1 = "215a9aa4a1f23fbd05b92769fdd62559488d70e9" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.4.1" + +[[Cairo]] +deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] +git-tree-sha1 = "d0b3f8b4ad16cb0a2988c6788646a5e6a17b6b1b" +uuid = "159f3aea-2a34-519c-b102-8c37f9878175" +version = "1.0.5" + +[[CairoMakie]] +deps = ["Base64", "Cairo", "Colors", "FFTW", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "SHA", "StaticArrays"] +git-tree-sha1 = "774ff1cce3ae930af3948c120c15eeb96c886c33" +uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" +version = "0.6.6" + [[Cairo_jll]] deps = ["Artifacts", "Bzip2_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" @@ -306,6 +400,12 @@ git-tree-sha1 = "bf98fa45a0a4cee295de98d4c1462be26345b9a1" uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" version = "0.1.2" +[[ColorBrewer]] +deps = ["Colors", "JSON", "Test"] +git-tree-sha1 = "61c5334f33d91e570e1d0c3eb5465835242582c4" +uuid = "a2cac450-b92f-5266-8821-25eda20663c8" +version = "0.4.0" + [[ColorSchemes]] deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random"] git-tree-sha1 = "6b6f04f93710c71550ec7e16b650c1b9a612d0b6" @@ -318,6 +418,12 @@ git-tree-sha1 = "32a2b8af383f11cbb65803883837a149d10dfe8a" uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" version = "0.10.12" +[[ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"] +git-tree-sha1 = "3f1f500312161f1ae067abe07d13b40f78f32e07" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.9.8" + [[Colors]] deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] git-tree-sha1 = "417b0ed7b8b838aa6ca0a87aadf1bb9eb111ce40" @@ -334,12 +440,6 @@ version = "3.41.0" deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -[[Compose]] -deps = ["Base64", "Colors", "DataStructures", "Dates", "IterTools", "JSON", "LinearAlgebra", "Measures", "Printf", "Random", "Requires", "Statistics", "UUIDs"] -git-tree-sha1 = "9a2695195199f4f20b94898c8a8ac72609e165a4" -uuid = "a81c6b42-2e10-5240-aca2-a61377ecd94b" -version = "0.9.3" - [[Contour]] deps = ["StaticArrays"] git-tree-sha1 = "9f02045d934dc030edad45944ea80dbd1f0ebea7" @@ -370,10 +470,22 @@ uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" deps = ["Mmap"] uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +[[DensityInterface]] +deps = ["InverseFunctions", "Test"] +git-tree-sha1 = "80c3e8639e3353e5d2912fb3a1916b8455e2494b" +uuid = "b429d917-457f-4dbc-8f4c-0cc954292b1d" +version = "0.4.0" + [[Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" +[[Distributions]] +deps = ["ChainRulesCore", "DensityInterface", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns", "Test"] +git-tree-sha1 = "5863b0b10512ed4add2b5ec07e335dc6121065a5" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.41" + [[DocStringExtensions]] deps = ["LibGit2"] git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b" @@ -390,6 +502,12 @@ git-tree-sha1 = "3f3a2501fa7236e9b911e0f7a588c657e822bb6d" uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" version = "2.2.3+0" +[[EllipsisNotation]] +deps = ["ArrayInterface"] +git-tree-sha1 = "d7ab55febfd0907b285fbf8dc0c73c0825d9d6aa" +uuid = "da5c29d0-fa7d-589e-88eb-ea29b0a81949" +version = "1.3.0" + [[Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "b3bfd02e98aedfa5cf885665493c5598c350cd2f" @@ -408,6 +526,30 @@ git-tree-sha1 = "d8a578692e3077ac998b50c0217dfd67f21d1e5f" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" version = "4.4.0+0" +[[FFTW]] +deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] +git-tree-sha1 = "463cb335fa22c4ebacfd1faba5fde14edb80d96c" +uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" +version = "1.4.5" + +[[FFTW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea" +uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" +version = "3.3.10+0" + +[[FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "67551df041955cc6ee2ed098718c8fcd7fc7aebe" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.12.0" + +[[FillArrays]] +deps = ["LinearAlgebra", "Random", "SparseArrays", "Statistics"] +git-tree-sha1 = "8756f9935b7ccc9064c6eef0bff0ad643df733a3" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "0.12.7" + [[FixedPointNumbers]] deps = ["Statistics"] git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" @@ -426,12 +568,24 @@ git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8" uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" version = "0.4.2" +[[FreeType]] +deps = ["CEnum", "FreeType2_jll"] +git-tree-sha1 = "cabd77ab6a6fdff49bfd24af2ebe76e6e018a2b4" +uuid = "b38be410-82b0-50bf-ab77-7b57e271db43" +version = "4.0.0" + [[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" +[[FreeTypeAbstraction]] +deps = ["ColorVectorSpace", "Colors", "FreeType", "GeometryBasics", "StaticArrays"] +git-tree-sha1 = "770050893e7bc8a34915b4b9298604a3236de834" +uuid = "663a7486-cb36-511b-a19d-713bb74d65c9" +version = "0.9.5" + [[FriBidi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" @@ -462,12 +616,6 @@ git-tree-sha1 = "58bcdf5ebc057b085e58d95c138725628dd7453c" uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" version = "0.4.1" -[[GeometryTypes]] -deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "StaticArrays"] -git-tree-sha1 = "d796f7be0383b5416cd403420ce0af083b0f9b28" -uuid = "4d00f742-c7ba-57c2-abde-4428a4b178cb" -version = "0.8.5" - [[Gettext_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" @@ -480,17 +628,17 @@ git-tree-sha1 = "a32d672ac2c967f3deb8a81d828afc739c838a06" uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" version = "2.68.3+2" -[[GraphPlot]] -deps = ["ArnoldiMethod", "ColorTypes", "Colors", "Compose", "DelimitedFiles", "Graphs", "LinearAlgebra", "Random", "SparseArrays"] -git-tree-sha1 = "5e51d9d9134ebcfc556b82428521fe92f709e512" -uuid = "a2cc645c-3eea-5389-862e-a155d0052231" -version = "0.5.0" +[[GraphMakie]] +deps = ["GeometryBasics", "Graphs", "LinearAlgebra", "Makie", "NetworkLayout", "StaticArrays"] +git-tree-sha1 = "8fc75ea16d1836cbcfb94227605afd49d5f3facf" +uuid = "1ecd5474-83a3-4783-bb4f-06765db800d2" +version = "0.3.1" -[[GraphRecipes]] -deps = ["AbstractTrees", "GeometryTypes", "Graphs", "InteractiveUtils", "Interpolations", "LinearAlgebra", "NaNMath", "NetworkLayout", "PlotUtils", "RecipesBase", "SparseArrays", "Statistics"] -git-tree-sha1 = "1735085e3a8dd0e14020bdcbf8da9893a5508a3f" -uuid = "bd48cda9-67a9-57be-86fa-5b3c104eda73" -version = "0.5.9" +[[Graphics]] +deps = ["Colors", "LinearAlgebra", "NaNMath"] +git-tree-sha1 = "1c5a84319923bea76fa145d49e93aa4394c73fc2" +uuid = "a2bd30eb-e257-5431-a919-1863eab51364" +version = "1.1.1" [[Graphite2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -504,6 +652,12 @@ git-tree-sha1 = "d727758173afef0af878b29ac364a0eca299fc6b" uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" version = "1.5.1" +[[GridLayoutBase]] +deps = ["GeometryBasics", "InteractiveUtils", "Observables"] +git-tree-sha1 = "70938436e2720e6cb8a7f2ca9f1bbdbf40d7f5d0" +uuid = "3955a311-db13-416c-9275-1d80ed98e5e9" +version = "0.6.4" + [[Grisu]] git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" @@ -521,6 +675,51 @@ git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" version = "2.8.1+1" +[[Hyperscript]] +deps = ["Test"] +git-tree-sha1 = "8d511d5b81240fc8e6802386302675bdf47737b9" +uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91" +version = "0.0.4" + +[[HypertextLiteral]] +git-tree-sha1 = "2b078b5a615c6c0396c77810d92ee8c6f470d238" +uuid = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2" +version = "0.9.3" + +[[IOCapture]] +deps = ["Logging", "Random"] +git-tree-sha1 = "f7be53659ab06ddc986428d3a9dcc95f6fa6705a" +uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" +version = "0.2.2" + +[[IfElse]] +git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" +uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" +version = "0.1.1" + +[[ImageCore]] +deps = ["AbstractFFTs", "ColorVectorSpace", "Colors", "FixedPointNumbers", "Graphics", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "Reexport"] +git-tree-sha1 = "9a5c62f231e5bba35695a20988fc7cd6de7eeb5a" +uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" +version = "0.9.3" + +[[ImageIO]] +deps = ["FileIO", "Netpbm", "OpenEXR", "PNGFiles", "TiffImages", "UUIDs"] +git-tree-sha1 = "a2951c93684551467265e0e32b577914f69532be" +uuid = "82e4d734-157c-48bb-816b-45c225c6df19" +version = "0.5.9" + +[[Imath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "87f7662e03a649cffa2e05bf19c303e168732d3e" +uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1" +version = "3.1.2+0" + +[[IndirectArrays]] +git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f" +uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959" +version = "1.0.0" + [[Inflate]] git-tree-sha1 = "f5fc07d4e706b84f72d54eedcc1c13d92fb0871c" uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" @@ -532,6 +731,12 @@ git-tree-sha1 = "098e4d2c533924c921f9f9847274f2ad89e018b8" uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f" version = "0.5.0" +[[IntelOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "d979e54b71da82f3a65b62553da4fc3d18c9004c" +uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" +version = "2018.0.3+2" + [[InteractiveUtils]] deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" @@ -542,6 +747,12 @@ git-tree-sha1 = "b15fc0a95c564ca2e0a7ae12c1f095ca848ceb31" uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" version = "0.13.5" +[[IntervalSets]] +deps = ["Dates", "EllipsisNotation", "Statistics"] +git-tree-sha1 = "3cc368af3f110a767ac786560045dceddfc16758" +uuid = "8197267c-284f-5f27-9208-e0e47529a953" +version = "0.5.3" + [[InverseFunctions]] deps = ["Test"] git-tree-sha1 = "a7254c0acd8e62f1ac75ad24d5db43f5f19f3c65" @@ -553,6 +764,12 @@ git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151" uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" version = "0.1.1" +[[Isoband]] +deps = ["isoband_jll"] +git-tree-sha1 = "f9b6d97355599074dc867318950adaa6f9946137" +uuid = "f1662d9f-8043-43de-a69a-05efc1cc6ff4" +version = "0.1.1" + [[IterTools]] git-tree-sha1 = "fa6287a4469f5e048d763df38279ee729fbd44e5" uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" @@ -581,6 +798,12 @@ git-tree-sha1 = "d735490ac75c5cb9f1b00d8b5509c11984dc6943" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" version = "2.1.0+0" +[[KernelDensity]] +deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"] +git-tree-sha1 = "591e8dc09ad18386189610acafb970032c519707" +uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b" +version = "0.6.3" + [[LAME_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" @@ -604,6 +827,10 @@ git-tree-sha1 = "a8f4f279b6fa3c3c4f1adadd78a621b13a506bce" uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" version = "0.15.9" +[[LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + [[LibCURL]] deps = ["LibCURL_jll", "MozillaCACerts_jll"] uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" @@ -684,16 +911,50 @@ version = "0.3.6" [[Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" +[[MKL_jll]] +deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] +git-tree-sha1 = "5455aef09b40e5020e1520f551fa3135040d4ed0" +uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" +version = "2021.1.1+2" + [[MacroTools]] deps = ["Markdown", "Random"] git-tree-sha1 = "3d3e902b31198a27340d0bf00d6ac452866021cf" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" version = "0.5.9" +[[Makie]] +deps = ["Animations", "Base64", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "Contour", "Distributions", "DocStringExtensions", "FFMPEG", "FileIO", "FixedPointNumbers", "Formatting", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageIO", "IntervalSets", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MakieCore", "Markdown", "Match", "MathTeXEngine", "Observables", "Packing", "PlotUtils", "PolygonOps", "Printf", "Random", "RelocatableFolders", "Serialization", "Showoff", "SignedDistanceFields", "SparseArrays", "StaticArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "UnicodeFun"] +git-tree-sha1 = "56b0b7772676c499430dc8eb15cfab120c05a150" +uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" +version = "0.15.3" + +[[MakieCore]] +deps = ["Observables"] +git-tree-sha1 = "7bcc8323fb37523a6a51ade2234eee27a11114c8" +uuid = "20f20a25-4f0e-4fdf-b5d1-57303727442b" +version = "0.1.3" + +[[MappedArrays]] +git-tree-sha1 = "e8b359ef06ec72e8c030463fe02efe5527ee5142" +uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" +version = "0.4.1" + [[Markdown]] deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +[[Match]] +git-tree-sha1 = "1d9bc5c1a6e7ee24effb93f175c9342f9154d97f" +uuid = "7eb4fadd-790c-5f42-8a69-bfa0b872bfbf" +version = "1.2.0" + +[[MathTeXEngine]] +deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "Test"] +git-tree-sha1 = "70e733037bbf02d691e78f95171a1fa08cdc6332" +uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" +version = "0.2.1" + [[MbedTLS]] deps = ["Dates", "MbedTLS_jll", "Random", "Sockets"] git-tree-sha1 = "1c38e51c3d08ef2278062ebceade0e46cefc96fe" @@ -718,6 +979,12 @@ version = "1.0.2" [[Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" +[[MosaicViews]] +deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"] +git-tree-sha1 = "b34e3bc3ca7c94914418637cb10cc4d1d80d877d" +uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389" +version = "0.3.3" + [[MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" @@ -726,6 +993,12 @@ git-tree-sha1 = "f755f36b19a5116bb580de457cda0c140153f283" uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" version = "0.3.6" +[[Netpbm]] +deps = ["FileIO", "ImageCore"] +git-tree-sha1 = "18efc06f6ec36a8b801b23f076e3c6ac7c3bf153" +uuid = "f09324ee-3d7c-5217-9330-fc30815ba969" +version = "1.0.2" + [[NetworkLayout]] deps = ["GeometryBasics", "LinearAlgebra", "Random", "Requires", "SparseArrays"] git-tree-sha1 = "cac8fc7ba64b699c678094fa630f49b80618f625" @@ -735,6 +1008,11 @@ version = "0.4.4" [[NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +[[Observables]] +git-tree-sha1 = "fe29afdef3d0c4a8286128d4e45cc50621b1e43d" +uuid = "510215fc-4207-5dde-b226-833fc4488ee2" +version = "0.4.0" + [[OffsetArrays]] deps = ["Adapt"] git-tree-sha1 = "043017e0bdeff61cfbb7afeb558ab29536bbb5ed" @@ -747,12 +1025,34 @@ git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" version = "1.3.5+1" +[[OpenEXR]] +deps = ["Colors", "FileIO", "OpenEXR_jll"] +git-tree-sha1 = "327f53360fdb54df7ecd01e96ef1983536d1e633" +uuid = "52e1d378-f018-4a11-a4be-720524705ac7" +version = "0.3.2" + +[[OpenEXR_jll]] +deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "923319661e9a22712f24596ce81c54fc0366f304" +uuid = "18a262bb-aa17-5467-a713-aee519bc75cb" +version = "3.1.1+0" + +[[OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" + [[OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "648107615c15d4e09f7eca16307bc821c1f718d8" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" version = "1.1.13+0" +[[OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + [[Opus_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" @@ -770,6 +1070,36 @@ git-tree-sha1 = "b2a7af664e098055a7529ad1a900ded962bca488" uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc" version = "8.44.0+0" +[[PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "ee26b350276c51697c9c2d88a072b339f9f03d73" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.5" + +[[PNGFiles]] +deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"] +git-tree-sha1 = "6d105d40e30b635cfed9d52ec29cf456e27d38f8" +uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883" +version = "0.3.12" + +[[Packing]] +deps = ["GeometryBasics"] +git-tree-sha1 = "1155f6f937fa2b94104162f01fa400e192e4272f" +uuid = "19eb6ba3-879d-56ad-ad62-d5c202156566" +version = "0.4.2" + +[[PaddedViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "03a7a85b76381a3d04c7a1656039197e70eda03d" +uuid = "5432bcbf-9aad-5242-b902-cca2824c8663" +version = "0.5.11" + +[[Pango_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "9bc1871464b12ed19297fbc56c4fb4ba84988b0d" +uuid = "36c8627f-9965-5494-a995-c6b170f724f3" +version = "1.47.0+0" + [[Parsers]] deps = ["Dates"] git-tree-sha1 = "92f91ba9e5941fc781fecf5494ac1da87bdac775" @@ -786,6 +1116,12 @@ version = "0.40.1+0" deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +[[PkgVersion]] +deps = ["Pkg"] +git-tree-sha1 = "a7a7e1a88853564e551e4eba8650f8c38df79b37" +uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688" +version = "0.1.1" + [[PlotThemes]] deps = ["PlotUtils", "Requires", "Statistics"] git-tree-sha1 = "a3a964ce9dc7898193536002a6dd892b1b5a6f1d" @@ -804,6 +1140,17 @@ git-tree-sha1 = "db7393a80d0e5bef70f2b518990835541917a544" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" version = "1.25.6" +[[PlutoUI]] +deps = ["AbstractPlutoDingetjes", "Base64", "Dates", "Hyperscript", "HypertextLiteral", "IOCapture", "InteractiveUtils", "JSON", "Logging", "Markdown", "Random", "Reexport", "UUIDs"] +git-tree-sha1 = "5152abbdab6488d5eec6a01029ca6697dff4ec8f" +uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8" +version = "0.7.23" + +[[PolygonOps]] +git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6" +uuid = "647866c9-e3ac-4575-94e7-e3d426903924" +version = "0.1.2" + [[Preferences]] deps = ["TOML"] git-tree-sha1 = "2cf929d64681236a2e074ffafb8d568733d2e6af" @@ -814,12 +1161,24 @@ version = "1.2.3" deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +[[ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "afadeba63d90ff223a6a48d2009434ecee2ec9e8" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.7.1" + [[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 = "ad368663a5e20dbb8d6dc2fddeefe4dae0781ae8" uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1" version = "5.15.3+0" +[[QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "78aadffb3efd2155af139781b8a8df1ef279ea39" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.4.2" + [[REPL]] deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" @@ -862,9 +1221,32 @@ git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.3.0" +[[Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "bf3188feca147ce108c76ad82c2792c57abe7b1f" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.7.0" + +[[Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "68db32dff12bb6127bac73c209881191bf0efbb7" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.3.0+0" + [[SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +[[SIMD]] +git-tree-sha1 = "39e3df417a0dd0c4e1f89891a281f82f5373ea3b" +uuid = "fdea26ae-647d-5447-a871-4b548cad5224" +version = "3.4.0" + +[[ScanByte]] +deps = ["Libdl", "SIMD"] +git-tree-sha1 = "9cc2955f2a254b18be655a4ee70bc4031b2b189e" +uuid = "7b38b023-a4d7-4c5e-8d43-3f3097f304eb" +version = "0.3.0" + [[Scratch]] deps = ["Dates"] git-tree-sha1 = "0b4b7f1393cff97c33891da2a0bf69c6ed241fda" @@ -884,6 +1266,12 @@ git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" version = "1.0.3" +[[SignedDistanceFields]] +deps = ["Random", "Statistics", "Test"] +git-tree-sha1 = "d263a08ec505853a5ff1c1ebde2070419e3f28e9" +uuid = "73760f76-fbc4-59ce-8f25-708e95d2df96" +version = "0.4.0" + [[SimpleTraits]] deps = ["InteractiveUtils", "MacroTools"] git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" @@ -903,6 +1291,24 @@ version = "1.0.1" deps = ["LinearAlgebra", "Random"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +[[SpecialFunctions]] +deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "e08890d19787ec25029113e88c34ec20cac1c91e" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.0.0" + +[[StackViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "46e589465204cd0c08b4bd97385e4fa79a0c770c" +uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" +version = "0.1.1" + +[[Static]] +deps = ["IfElse"] +git-tree-sha1 = "b4912cd034cdf968e06ca5f943bb54b17b97793a" +uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" +version = "0.5.1" + [[StaticArrays]] deps = ["LinearAlgebra", "Random", "Statistics"] git-tree-sha1 = "2884859916598f974858ff01df7dfc6c708dd895" @@ -924,12 +1330,22 @@ git-tree-sha1 = "51383f2d367eb3b444c961d485c565e4c0cf4ba0" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" version = "0.33.14" +[[StatsFuns]] +deps = ["ChainRulesCore", "InverseFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "f35e1879a71cca95f4826a14cdbf0b9e253ed918" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "0.9.15" + [[StructArrays]] deps = ["Adapt", "DataAPI", "StaticArrays", "Tables"] git-tree-sha1 = "d21f2c564b21a202f4677c0fba5b5ee431058544" uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" version = "0.6.4" +[[SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + [[TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" @@ -950,10 +1366,28 @@ version = "1.6.1" deps = ["ArgTools", "SHA"] uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +[[TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + [[Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +[[TiffImages]] +deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "OffsetArrays", "PkgVersion", "ProgressMeter", "UUIDs"] +git-tree-sha1 = "991d34bbff0d9125d93ba15887d6594e8e84b305" +uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69" +version = "0.5.3" + +[[TranscodingStreams]] +deps = ["Random", "Test"] +git-tree-sha1 = "216b95ea110b5972db65aa90f88d8d89dcb8851c" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.9.6" + [[URIs]] git-tree-sha1 = "97bbe755a53fe859669cd907f2d96aee8d2c1355" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" @@ -1143,6 +1577,12 @@ git-tree-sha1 = "cc4bf3fdde8b7e3e9fa0351bdeedba1cf3b7f6e6" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" version = "1.5.0+0" +[[isoband_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "a1ac99674715995a536bbce674b068ec1b7d893d" +uuid = "9a68df92-36a6-505f-a73e-abb412b6bfb4" +version = "0.2.2+0" + [[libass_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" @@ -1196,14 +1636,12 @@ version = "0.9.1+5" # ╔═╡ Cell order: # ╟─4b3e86ea-6973-11ec-014f-9f2708ba86cf -# ╠═6482fcd3-23de-49bb-ae0a-b7db42305890 -# ╠═41274813-c783-4338-ba6c-2dd0ffd691a9 +# ╠═12967f8b-1933-4376-b9c4-5092b41b935a +# ╟─59108cf2-d8a5-4c16-b373-bb6a23d13735 +# ╟─ed0a3dc5-99d3-4628-ad5c-7d13e699b353 +# ╟─3c7f1384-33ac-4b2d-9a63-4bf412bfa685 # ╠═3ea557f6-a3bd-4d73-99ef-10fc69024fca # ╠═e5650185-a6bc-488c-a02b-3c1363c52b8c -# ╠═a5a82275-729e-487e-86c7-4323cdabd392 -# ╠═7a9b23c1-30cd-4516-bc47-259302d944fc -# ╠═7cb6998f-eb0a-42da-bfd1-bc7370955b70 -# ╠═a624100b-59e7-483e-affd-d0b5391dd475 # ╠═dc573955-b679-4fdc-aeba-7001ea8f7a4c # ╠═2d83c447-1d33-496a-8a39-75d1cb9b2de1 # ╠═0a20eddd-24f7-43c6-a0f3-6c1c138fb90a @@ -1211,11 +1649,13 @@ version = "0.9.1+5" # ╠═43f97b8d-cd9c-4b8f-8821-68542488e49d # ╠═b156a4c7-6ed9-4a4d-b3c9-d3c06fbc1faf # ╠═0d5440c3-23f8-4718-b68e-852c7600cf5b -# ╠═5d8b9926-98ed-4714-a63b-6174f8d067b1 -# ╠═94a55c72-0261-44d5-ab0a-a853efa30a66 -# ╠═44a62f32-c07f-4458-ac6e-ca989e60137d +# ╠═2c5e005a-7b42-4ae8-8865-585faa7b46de # ╠═b5ed3265-3276-41b8-be2d-e9b8f03fe3f0 -# ╠═b3e65e30-be3b-4ae5-af26-2329eb882577 +# ╟─b3e65e30-be3b-4ae5-af26-2329eb882577 # ╠═6fbe81e6-326c-466c-a7af-3d9e4afffde8 +# ╠═dba46e66-8704-42de-938c-d576a1336398 +# ╠═2e8fb274-0658-43f8-bfa0-40f2f1daf6f3 +# ╠═5e397f0a-7bdd-4db9-9acf-5781951897f6 +# ╠═c6b5f210-80d1-465c-b128-89917263e202 # ╟─00000000-0000-0000-0000-000000000001 # ╟─00000000-0000-0000-0000-000000000002 From be9ad871e0f6befe40d909e2136124d3ea2bad54 Mon Sep 17 00:00:00 2001 From: menvdamm <80266975+menvdamm@users.noreply.github.com> Date: Sun, 30 Jan 2022 17:13:44 +0100 Subject: [PATCH 07/11] Fixed traceback & figure sizing --- notebook/RNAfolder.jl | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/notebook/RNAfolder.jl b/notebook/RNAfolder.jl index 08441d4a..4f30a753 100644 --- a/notebook/RNAfolder.jl +++ b/notebook/RNAfolder.jl @@ -120,7 +120,7 @@ function calculate_S_first(RNA) end # ╔═╡ 2d83c447-1d33-496a-8a39-75d1cb9b2de1 -function calculate_S(RNA) +function Nussinov(RNA) n = length(RNA) S = zeros(n,n) # recursion happens from smaller to larger distancs between i and j, @@ -156,19 +156,19 @@ function calculate_S(RNA) end # ╔═╡ 0a20eddd-24f7-43c6-a0f3-6c1c138fb90a -S = calculate_S(RNA) +S = Nussinov(RNA) # ╔═╡ 463d18c3-e155-4b73-896f-2bbcdb71bbd2 function traceback(RNA, S, i, j; pairs = []) if i < j - if S[i,j] == S[i,j-1] + if S[i,j] == S[i,j-1] traceback(RNA, S, i, j-1, pairs = pairs) - elseif S[i,j] == S[i+1,j-1] + 1 + elseif S[i,j] == S[i+1,j-1] + 1 && basepair(i, j, RNA) push!(pairs, (i,j)) traceback(RNA, S, i+1, j-1, pairs = pairs) else for k in i+1:j-4 - if S[i,j] == S[i,k-1] + S[k+1,j-1] + 1 + if S[i,j] == S[i,k-1] + S[k+1,j-1] + 1 && basepair(k, j, RNA) push!(pairs, (k,j)) traceback(RNA, S, i, k-1, pairs = pairs) traceback(RNA, S, k+1, j-1, pairs = pairs) @@ -254,14 +254,17 @@ function plotstructure3(RNA, pairs) end end nuc = [string(i) for i in RNA] + nodesize = 1000/n + edgewidth = nodesize/3 f, ax, p = graphplot(G, layout = Stress(), - node_size = 20, + node_size = nodesize, node_color = nodecolors, edge_color = edgecolors, - edge_width = 3, + edge_width = edgewidth, nlabels = nuc, nlabels_align = (:center,:center), + nlabels_textsize = nodesize, ) hidedecorations!(ax); hidespines!(ax) ax.aspect = DataAspect() @@ -271,9 +274,6 @@ end # ╔═╡ 5e397f0a-7bdd-4db9-9acf-5781951897f6 plotstructure3(RNA, pairs) -# ╔═╡ c6b5f210-80d1-465c-b128-89917263e202 - - # ╔═╡ 00000000-0000-0000-0000-000000000001 PLUTO_PROJECT_TOML_CONTENTS = """ [deps] @@ -1642,20 +1642,19 @@ version = "0.9.1+5" # ╟─3c7f1384-33ac-4b2d-9a63-4bf412bfa685 # ╠═3ea557f6-a3bd-4d73-99ef-10fc69024fca # ╠═e5650185-a6bc-488c-a02b-3c1363c52b8c -# ╠═dc573955-b679-4fdc-aeba-7001ea8f7a4c +# ╟─dc573955-b679-4fdc-aeba-7001ea8f7a4c # ╠═2d83c447-1d33-496a-8a39-75d1cb9b2de1 # ╠═0a20eddd-24f7-43c6-a0f3-6c1c138fb90a # ╠═463d18c3-e155-4b73-896f-2bbcdb71bbd2 # ╠═43f97b8d-cd9c-4b8f-8821-68542488e49d # ╠═b156a4c7-6ed9-4a4d-b3c9-d3c06fbc1faf # ╠═0d5440c3-23f8-4718-b68e-852c7600cf5b -# ╠═2c5e005a-7b42-4ae8-8865-585faa7b46de +# ╟─2c5e005a-7b42-4ae8-8865-585faa7b46de # ╠═b5ed3265-3276-41b8-be2d-e9b8f03fe3f0 # ╟─b3e65e30-be3b-4ae5-af26-2329eb882577 # ╠═6fbe81e6-326c-466c-a7af-3d9e4afffde8 # ╠═dba46e66-8704-42de-938c-d576a1336398 # ╠═2e8fb274-0658-43f8-bfa0-40f2f1daf6f3 # ╠═5e397f0a-7bdd-4db9-9acf-5781951897f6 -# ╠═c6b5f210-80d1-465c-b128-89917263e202 # ╟─00000000-0000-0000-0000-000000000001 # ╟─00000000-0000-0000-0000-000000000002 From 7519e389c8f7808991ed7400aec4526eec416fd1 Mon Sep 17 00:00:00 2001 From: menvdamm <80266975+menvdamm@users.noreply.github.com> Date: Sun, 30 Jan 2022 21:55:25 +0100 Subject: [PATCH 08/11] Added explanation --- notebook/RNAfolder.jl | 215 ++++++++++++++++++++++-------------------- 1 file changed, 113 insertions(+), 102 deletions(-) diff --git a/notebook/RNAfolder.jl b/notebook/RNAfolder.jl index 4f30a753..f77c221a 100644 --- a/notebook/RNAfolder.jl +++ b/notebook/RNAfolder.jl @@ -14,11 +14,8 @@ macro bind(def, element) end end -# ╔═╡ 12967f8b-1933-4376-b9c4-5092b41b935a -using PlutoUI - # ╔═╡ dba46e66-8704-42de-938c-d576a1336398 -using Plots, Graphs, GraphMakie, CairoMakie, NetworkLayout +using PlutoUI, Plots, Graphs, GraphMakie, CairoMakie, NetworkLayout # ╔═╡ 4b3e86ea-6973-11ec-014f-9f2708ba86cf md""" @@ -28,7 +25,13 @@ md""" **Menno Van Damme** -This pluto notebook contains the code for a simple RNA secondary structure prediction tool and some illustrated examples on how to use it. +This pluto notebook contains the code for a simple RNA secondary structure prediction tool. + +This tool uses an algorithm called Nussinov's algorithm. This is a basepair maximization algorithm, it predicts the optimal structure by trying to maximize the amount of paired nucleotides in the sequence. This was one of the first ever algorithms to be used in RNA folding but sadly this algorithm is often to simple to get realistic results. + +Other algorithms like energy minimization algorithms try to achieve the same thing but does this by taking base pairing energies, the stacking of certain types of basepairs and the size of different structures into account and by calculating the total minimum free energy of the folded RNA. However, implementeing these is a lot more complicated and out of the scope of a project like this. + +You can either choose an example sequence or input you own (DNA sequences are also allowed). """ @@ -54,10 +57,41 @@ end # ╔═╡ 3c7f1384-33ac-4b2d-9a63-4bf412bfa685 RNA = replace(uppercase(rna), 'T' => 'U') -# ╔═╡ 3ea557f6-a3bd-4d73-99ef-10fc69024fca -n = length(RNA) +# ╔═╡ 42921538-4ff4-4902-aefa-d958f41d1404 +md""" + +Below you can see the dotbracket strucure of the RNA. This is a representation of the secondary structure by using dots and brackets. Each character represents a nuceleotide in the sequence. Opening and closing brackets indicate two nucleotides that basepair. Dots represent unpaired nucleotides. Since guanine (G) and uracil (U) can also pair in RNA, GU pairs are allowed. + +""" + +# ╔═╡ fd14341c-f195-4b86-9f9c-379477eed4af +md""" + +Here is the visualization of the secondary structure: + +""" + +# ╔═╡ ca99ac1a-e4da-41fe-8ab6-834e2b7134b7 +md""" + +Sadly there are no RNA visualization packages for Julia so I've had to use graph visualization libraries, these aren't ideal for this task so the structure might not look entirely correct. If you want a better view of the structure you can copy the following link. It will take you to a ViennaRNA webpage especially designed for displaying secondary RNA structures based on the sequence and dotbracket structure embedded in the link. + +""" + +# ╔═╡ 2fbe430d-ab80-406e-aa87-c377d6ed30c2 +md""" + +## Functions + +""" # ╔═╡ e5650185-a6bc-488c-a02b-3c1363c52b8c +""" + basepair(i, j, RNA) + +Returns a the logical value true if 2 nucleotides can basepair, else false. + +""" function basepair(i, j, RNA) pair = string(RNA[i], RNA[j]) # all possible pairs (GU is also possible in RNA): @@ -70,56 +104,29 @@ function basepair(i, j, RNA) return bp end -# ╔═╡ dc573955-b679-4fdc-aeba-7001ea8f7a4c -function calculate_S_first(RNA) - n = length(RNA) - S = zeros(n,n) - Events = [] - # recursion happens from smaller to larger distancs between i and j, - # from the diagonal towards the upper right corner in the matrix - for d in 1:n-1 - for i in 1:n-d - j = i + d - # i and j basepair - if basepair(i, j, RNA) # and i <= j-4 - bp_score = S[i+1,j-1] + 1 - else - bp_score = 0 - end - # i unpaired - iup_score = S[i+1,j] - # j unpaired - jup_score = S[i,j-1] - # bifurcation between i and j - K = [k for k in i+1:j-1] - if !isempty(K) - bf_score = maximum([S[i,k] + S[k+1,j] for k in K]) - else - bf_score = 0 - end - # the actual score is the maximum of these scores - S[i,j] = max(bp_score, - iup_score, - jup_score, - bf_score) - if bp_score == S[i,j] - push!(Events, "bp") - end - if iup_score == S[i,j] - push!(Events, "iup") - end - if jup_score == S[i,j] - push!(Events, "jup") - end - if bf_score == S[i,j] - push!(Events, "bf") - end - end - end - return S, Events -end +# ╔═╡ 35ab76cf-16d5-432a-a185-960c69829b27 +md""" + +Nussinov's algorithm tries to maximize the amount of paired bases in the structure. It does this using the following formula: + +$$S(i,j) = \max_{i\leq k 1, 'U' => 2, 'G' => 3, 'C' => 4) - nodecolors = colors[members] - graphplot(G, - curves = false, - names = collect(RNA), - nodecolor = nodecolors, - nodeshape = :circle, - linealpha = 0.3, - linewidth = 4, - markersize = 0.25, - fontsize = 6, - method = :stress) end -# ╔═╡ 6fbe81e6-326c-466c-a7af-3d9e4afffde8 -#plotstructure2(RNA, pairs) - # ╔═╡ 2e8fb274-0658-43f8-bfa0-40f2f1daf6f3 -function plotstructure3(RNA, pairs) +""" + plotstructure(RNA, pairs) + +Plots the secondary structure of the RNA, given a list of pairs. + +""" +function plotstructure(RNA, pairs) n = length(RNA) edges = [(i,i+1) for i in 1:n-1] append!(edges, pairs) G = SimpleGraph(Edge.(edges)) - myblue = "#304da5" - mygreen = "#2a9d8f" - myyellow = "#e9c46a" - myred = "#e76f51" colors = [mygreen, myblue, myyellow, myred] members = replace(collect(RNA), 'A' => 1, 'U' => 2, 'G' => 3, 'C' => 4) nodecolors = colors[members] @@ -271,8 +280,8 @@ function plotstructure3(RNA, pairs) return f end -# ╔═╡ 5e397f0a-7bdd-4db9-9acf-5781951897f6 -plotstructure3(RNA, pairs) +# ╔═╡ 06983a7b-efca-4167-be5d-a158a4e0858d +plotstructure(RNA, pairs) # ╔═╡ 00000000-0000-0000-0000-000000000001 PLUTO_PROJECT_TOML_CONTENTS = """ @@ -1636,25 +1645,27 @@ version = "0.9.1+5" # ╔═╡ Cell order: # ╟─4b3e86ea-6973-11ec-014f-9f2708ba86cf -# ╠═12967f8b-1933-4376-b9c4-5092b41b935a # ╟─59108cf2-d8a5-4c16-b373-bb6a23d13735 # ╟─ed0a3dc5-99d3-4628-ad5c-7d13e699b353 # ╟─3c7f1384-33ac-4b2d-9a63-4bf412bfa685 -# ╠═3ea557f6-a3bd-4d73-99ef-10fc69024fca +# ╟─42921538-4ff4-4902-aefa-d958f41d1404 +# ╟─f66956d6-6d0d-42d1-b210-4bdf23ccd0b8 +# ╟─fd14341c-f195-4b86-9f9c-379477eed4af +# ╟─06983a7b-efca-4167-be5d-a158a4e0858d +# ╟─ca99ac1a-e4da-41fe-8ab6-834e2b7134b7 +# ╟─e25d53b9-0096-4b6c-85cb-fcae261fabcb +# ╟─2fbe430d-ab80-406e-aa87-c377d6ed30c2 +# ╠═dba46e66-8704-42de-938c-d576a1336398 # ╠═e5650185-a6bc-488c-a02b-3c1363c52b8c -# ╟─dc573955-b679-4fdc-aeba-7001ea8f7a4c +# ╟─35ab76cf-16d5-432a-a185-960c69829b27 # ╠═2d83c447-1d33-496a-8a39-75d1cb9b2de1 # ╠═0a20eddd-24f7-43c6-a0f3-6c1c138fb90a +# ╟─a455cfa0-ee29-4a4e-8b26-cf91c36985ec # ╠═463d18c3-e155-4b73-896f-2bbcdb71bbd2 # ╠═43f97b8d-cd9c-4b8f-8821-68542488e49d # ╠═b156a4c7-6ed9-4a4d-b3c9-d3c06fbc1faf -# ╠═0d5440c3-23f8-4718-b68e-852c7600cf5b -# ╟─2c5e005a-7b42-4ae8-8865-585faa7b46de -# ╠═b5ed3265-3276-41b8-be2d-e9b8f03fe3f0 -# ╟─b3e65e30-be3b-4ae5-af26-2329eb882577 -# ╠═6fbe81e6-326c-466c-a7af-3d9e4afffde8 -# ╠═dba46e66-8704-42de-938c-d576a1336398 +# ╠═c86cc53d-4675-4cd1-af75-ec4a717fd7fa # ╠═2e8fb274-0658-43f8-bfa0-40f2f1daf6f3 -# ╠═5e397f0a-7bdd-4db9-9acf-5781951897f6 +# ╠═f4e866fc-8e18-4917-b515-9cc00175a7a4 # ╟─00000000-0000-0000-0000-000000000001 # ╟─00000000-0000-0000-0000-000000000002 From c57235313d0b91d3877b0fec4688820ecc8a725d Mon Sep 17 00:00:00 2001 From: menvdamm <80266975+menvdamm@users.noreply.github.com> Date: Mon, 31 Jan 2022 14:18:52 +0100 Subject: [PATCH 09/11] Restructured & fixed mistakes --- notebook/RNAfolder.jl | 92 +++++++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 38 deletions(-) diff --git a/notebook/RNAfolder.jl b/notebook/RNAfolder.jl index f77c221a..8a8cda36 100644 --- a/notebook/RNAfolder.jl +++ b/notebook/RNAfolder.jl @@ -27,9 +27,45 @@ md""" This pluto notebook contains the code for a simple RNA secondary structure prediction tool. -This tool uses an algorithm called Nussinov's algorithm. This is a basepair maximization algorithm, it predicts the optimal structure by trying to maximize the amount of paired nucleotides in the sequence. This was one of the first ever algorithms to be used in RNA folding but sadly this algorithm is often to simple to get realistic results. +## Nussinov's Algorithm -Other algorithms like energy minimization algorithms try to achieve the same thing but does this by taking base pairing energies, the stacking of certain types of basepairs and the size of different structures into account and by calculating the total minimum free energy of the folded RNA. However, implementeing these is a lot more complicated and out of the scope of a project like this. +This tool uses an algorithm called Nussinov's algorithm. This is a basepair maximization algorithm, it predicts the optimal structure by trying to maximize the amount of paired nucleotides in an RNA sequence. This was one of the first ever algorithms to be used in RNA folding but sadly this algorithm is often to simple to get realistic results. + +Other algorithms like energy minimization algorithms try to achieve the same thing but do this by taking base pairing energies, the energies of stacking of certain types of basepairs and the sizes of different structures into account and by calculating the total minimum free energy of the folded RNA. However, implementeing these is a lot more complicated and out of the scope of a project like this. + +Nussinov's algorithm tries to maximize the amount of paired bases in the structure. It does this using the following formula: + +$$S(i,j) = \max_{i\leq k 'U') +# ╔═╡ 45b4e0ec-5581-4a28-b6c1-c95b8e6a42bb +RNA + # ╔═╡ 42921538-4ff4-4902-aefa-d958f41d1404 md""" @@ -89,7 +128,7 @@ md""" """ basepair(i, j, RNA) -Returns a the logical value true if 2 nucleotides can basepair, else false. +Returns a the logical true if 2 nucleotides can basepair, else false. """ function basepair(i, j, RNA) @@ -97,29 +136,12 @@ function basepair(i, j, RNA) # all possible pairs (GU is also possible in RNA): pairs = ["AU", "UA", "GC", "CG", "UG", "GU"] if pair in pairs - bp = true - else - bp = false + return true + else + return false end - return bp end -# ╔═╡ 35ab76cf-16d5-432a-a185-960c69829b27 -md""" - -Nussinov's algorithm tries to maximize the amount of paired bases in the structure. It does this using the following formula: - -$$S(i,j) = \max_{i\leq k Date: Mon, 31 Jan 2022 15:10:09 +0100 Subject: [PATCH 10/11] Update RNAfolder.jl --- notebook/RNAfolder.jl | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/notebook/RNAfolder.jl b/notebook/RNAfolder.jl index 8a8cda36..ccc810a9 100644 --- a/notebook/RNAfolder.jl +++ b/notebook/RNAfolder.jl @@ -19,6 +19,7 @@ using PlutoUI, Plots, Graphs, GraphMakie, CairoMakie, NetworkLayout # ╔═╡ 4b3e86ea-6973-11ec-014f-9f2708ba86cf md""" + # RNAfolder *STMO* @@ -49,6 +50,9 @@ Below you can see the implementation for this algorithm. """ +# ╔═╡ d3ee4413-c691-4fba-9f91-f24985fb8a88 +md""" The Nussinov matrix for the example RNA looks like this: """ + # ╔═╡ a455cfa0-ee29-4a4e-8b26-cf91c36985ec md""" @@ -57,6 +61,9 @@ To retrieve the basepairs which form the optimally scoring secondary structure w Since the rules of the Nussinov algorithm are simple there are most of the time many roads that lead to the same optimal score for a structure and thus many optimal ways to fold the RNA. This is because score for pairing $$j$$ with $$i$$ might give you the same score as pairing $$j$$ with $$k \; (\neq i)$$ or even the same as leaving $$j$$ unpaired. """ +# ╔═╡ aea52dd9-7bcc-4873-9332-36b95592b27b +md""" If we backtrack from $$(i=1,j=n)$$ we get all the pairs in the sequence: """ + # ╔═╡ 31aeff3d-5083-4c26-a556-847fbe76f9d6 md""" @@ -99,7 +106,7 @@ RNA # ╔═╡ 42921538-4ff4-4902-aefa-d958f41d1404 md""" -Below you can see the dotbracket strucure of the RNA. This is a representation of the secondary structure by using dots and brackets. Each character represents a nuceleotide in the sequence. Opening and closing brackets indicate two nucleotides that basepair. Dots represent unpaired nucleotides. Since guanine (G) and uracil (U) can also pair in RNA, GU pairs are allowed. +Below you can see the dotbracket strucure of the RNA. This is a representation of the secondary structure by using dots and brackets. Each character represents a nucleotide in the sequence. Opening and closing brackets indicate two nucleotides that basepair. Dots represent unpaired nucleotides. Since guanine (G) and uracil (U) can also pair in RNA, GU pairs are allowed. """ @@ -120,7 +127,7 @@ Sadly there are no RNA visualization packages for Julia so I've had to use graph # ╔═╡ 2fbe430d-ab80-406e-aa87-c377d6ed30c2 md""" -## Functions +## Appendix """ @@ -191,7 +198,7 @@ S = Nussinov(RNA) """ traceback(RNA, S, i, j; pairs = []) -Performs a backtracking trhrough the Nussinov dynamic programming matrix starting from position (i,j). Outputs a list of tuples with all the pairs in the sequence. +Performs a backtracking through the Nussinov dynamic programming matrix starting from position (i,j). Outputs a list of tuples with all the pairs in the sequence. """ function traceback(RNA, S, i, j; pairs = []) @@ -1658,12 +1665,14 @@ version = "0.9.1+5" """ # ╔═╡ Cell order: -# ╠═4b3e86ea-6973-11ec-014f-9f2708ba86cf +# ╟─4b3e86ea-6973-11ec-014f-9f2708ba86cf # ╠═2d83c447-1d33-496a-8a39-75d1cb9b2de1 # ╠═45b4e0ec-5581-4a28-b6c1-c95b8e6a42bb +# ╟─d3ee4413-c691-4fba-9f91-f24985fb8a88 # ╠═0a20eddd-24f7-43c6-a0f3-6c1c138fb90a # ╟─a455cfa0-ee29-4a4e-8b26-cf91c36985ec # ╠═463d18c3-e155-4b73-896f-2bbcdb71bbd2 +# ╟─aea52dd9-7bcc-4873-9332-36b95592b27b # ╠═43f97b8d-cd9c-4b8f-8821-68542488e49d # ╟─31aeff3d-5083-4c26-a556-847fbe76f9d6 # ╟─b2084e43-7914-495f-b93e-cf56a87be3c7 @@ -1673,7 +1682,7 @@ version = "0.9.1+5" # ╟─42921538-4ff4-4902-aefa-d958f41d1404 # ╟─f66956d6-6d0d-42d1-b210-4bdf23ccd0b8 # ╟─fd14341c-f195-4b86-9f9c-379477eed4af -# ╟─06983a7b-efca-4167-be5d-a158a4e0858d +# ╠═06983a7b-efca-4167-be5d-a158a4e0858d # ╟─ca99ac1a-e4da-41fe-8ab6-834e2b7134b7 # ╟─e25d53b9-0096-4b6c-85cb-fcae261fabcb # ╟─2fbe430d-ab80-406e-aa87-c377d6ed30c2 From 0dcdcb2c063242259e391bc4f9a72b57ce441ea1 Mon Sep 17 00:00:00 2001 From: menvdamm <80266975+menvdamm@users.noreply.github.com> Date: Tue, 1 Feb 2022 20:49:33 +0100 Subject: [PATCH 11/11] Unit tests --- .DS_Store | Bin 6148 -> 6148 bytes notebook/RNAfolder.jl | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.DS_Store b/.DS_Store index eb6b37f750faa6fab43e4af1eb7d676804f386fc..6bbe1d35595ef3acb87d164d21fe74b66912b608 100644 GIT binary patch delta 52 zcmV-40L%Y`FoZC$?*swLlkfz93>kZSG%+|VAT2U8IFow?9RZq?nFSvKo0Fgf6tm3* KIRdi>2>lP<77;uE delta 51 zcmV-30L=e{FoZC$?*swKlkfz93mAKQGB-6WATcyIlY9jo0hyDU1s?&Llb{3?v(5!M J0<#7P{twWN5e)zU diff --git a/notebook/RNAfolder.jl b/notebook/RNAfolder.jl index ccc810a9..510e0250 100644 --- a/notebook/RNAfolder.jl +++ b/notebook/RNAfolder.jl @@ -15,7 +15,7 @@ macro bind(def, element) end # ╔═╡ dba46e66-8704-42de-938c-d576a1336398 -using PlutoUI, Plots, Graphs, GraphMakie, CairoMakie, NetworkLayout +using PlutoUI, Plots, Graphs, GraphMakie, CairoMakie, NetworkLayout, Test # ╔═╡ 4b3e86ea-6973-11ec-014f-9f2708ba86cf md""" @@ -30,7 +30,7 @@ This pluto notebook contains the code for a simple RNA secondary structure predi ## Nussinov's Algorithm -This tool uses an algorithm called Nussinov's algorithm. This is a basepair maximization algorithm, it predicts the optimal structure by trying to maximize the amount of paired nucleotides in an RNA sequence. This was one of the first ever algorithms to be used in RNA folding but sadly this algorithm is often to simple to get realistic results. +The tool uses an algorithm called Nussinov's algorithm. This is a basepair maximization algorithm, it predicts the optimal structure by trying to maximize the amount of paired nucleotides in an RNA sequence. This was one of the first ever algorithms to be used in RNA folding but sadly this algorithm is often too simple to get realistic results. Other algorithms like energy minimization algorithms try to achieve the same thing but do this by taking base pairing energies, the energies of stacking of certain types of basepairs and the sizes of different structures into account and by calculating the total minimum free energy of the folded RNA. However, implementeing these is a lot more complicated and out of the scope of a project like this. @@ -304,6 +304,31 @@ end # ╔═╡ 06983a7b-efca-4167-be5d-a158a4e0858d plotstructure(RNA, pairs) +# ╔═╡ 94691ccf-b1ef-4cc3-8eed-72dd543001f5 +md""" Unit tests are in the hidden chunk below: """ + +# ╔═╡ 32755c53-eefc-4d40-bf60-a8b21a545c6d +@testset "RNAfolder" begin + + @testset "Nussinov" begin + + @test Nussinov("AGCU") isa Array + @test Nussinov("AAA") == zeros(3,3) + @test Nussinov("AGCU") == zeros(4,4) + @test Nussinov("AAAAU")[1,5] == 1.0 + + end + + @testset "Traceback" begin + + @test traceback("AAA", Nussinov("AAA"), 1, 3) isa Array + @test isempty(traceback("AAA", Nussinov("AAA"), 1, 3)) + @test traceback("AAAAU", Nussinov("AAAAU"), 1, 5) == [(1,5)] + + end + +end + # ╔═╡ 00000000-0000-0000-0000-000000000001 PLUTO_PROJECT_TOML_CONTENTS = """ [deps] @@ -313,6 +338,7 @@ Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" NetworkLayout = "46757867-2c16-5918-afeb-47bfcb05e46a" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8" +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [compat] CairoMakie = "~0.6.6" @@ -1692,5 +1718,7 @@ version = "0.9.1+5" # ╠═c86cc53d-4675-4cd1-af75-ec4a717fd7fa # ╠═2e8fb274-0658-43f8-bfa0-40f2f1daf6f3 # ╠═f4e866fc-8e18-4917-b515-9cc00175a7a4 +# ╟─94691ccf-b1ef-4cc3-8eed-72dd543001f5 +# ╟─32755c53-eefc-4d40-bf60-a8b21a545c6d # ╟─00000000-0000-0000-0000-000000000001 # ╟─00000000-0000-0000-0000-000000000002