### A Pluto.jl notebook ### # v0.16.4 using Markdown using InteractiveUtils # ╔═╡ ad7f3a08-1944-11eb-2b34-47d5aa1beafd using LinearAlgebra # ╔═╡ 31cc8274-1946-11eb-163b-ab4879c3ee82 using Plots # ╔═╡ 041168ac-1d35-11eb-188a-7d03056df793 md"""# Notebook 11 -- Math 2121, Fall 2021 This notebook is about the algorithmic problem of computing eigenvalues and eigenvectors for (large) square matrices. First: why is this a problem? If we know the eigenvalues $\lambda$ of a square matrix $A$, then we can construct a basis for every nonzero eigenspace $\mathrm{Nul}(A - \lambda I)$ using our algorithm based on row reduction. However, this is potentially time consuming if we have to row reduce many large matrices $A -\lambda I$. A bigger problem is figuring out the eigenvalues. The eigenvalues of an $n\times n$ matrix $A$ are the solutions to the polynomial equation $\det(A - xI) = 0$. When $n=2$, we can solve this equation using the quadratic formula. However, **there is no analogue of the quadratic formula for polynomials of degree 5 or higher.** So when $n\geq 5$ there is no formula to describe the exact solutions to $\det(A-xI)=0$. Even approximating these solutions is not easy if $n$ is large. """ # ╔═╡ 2495a042-1d36-11eb-0713-a760c9bef7de md"There is a simple iterative algorithm to compute one eigenvalue of an $n\times n$ matrix $A$, along with its eigenvector. This algorithm usually works if $A$ has $n$ distinct eigenvalues. Here is the idea. Assume $A$ has real eigenvalues $\lambda_1, \lambda_2, \dots ,\lambda_n$. Assume these eigenvalues satisfy $|\lambda_1| > |\lambda_2| \geq \dots \geq |\lambda_n| \geq 0$. Let $v_1,v_2,\dots,v_n \in \mathbb{R}^n$ be the associated eigenvectors. These are linearly independent, so form a basis for $\mathbb{R}^n$. Now choose any vector $w = \left[\begin{array}{c} w_1 \\ w_2 \\ \vdots \\ w_n\end{array} \right] \in \mathbb{R}^n$. The *length* of $w$ is $\| w\| = \sqrt{ w_1^2 + w_2 ^2 + \dots +w_n^2}$ We can write this vector as a linear combination $w = c_1 v_1 + c_2 v_2 + \dots + c_n v_n$ for $c_1,c_2,\dots,c_n \in \mathbb{R}$. Consider $A^Nw = c_1 \lambda_1^N v_1 + c_2 \lambda_2^N v_2 + \dots + c_n \lambda_n^N v_n$ When $N$ is very large, we have $(\lambda_i/ \lambda_1)^N \approx 0$ for $i=2,3,\dots,n$ so $\tfrac{1}{\lambda_1^N} A^Nw = c_1 v_1 + c_2 (\lambda_2/ \lambda_1)^N v_2 + \dots + c_n (\lambda_n/ \lambda_1)^N v_n \approx c_1 v_1.$ Thus for $N \gg 0$ we have $A^Nw \approx c_1 \lambda_1^N v_1$ which means $\|A^Nw \| \approx |c_1| |\lambda_1|^N \|v_1\|$. Therefore if $N$ is large enough then $u := \tfrac{1}{\| A^N w\|} A^N w \approx \pm \tfrac{1}{\|v_1\|} v_1$ If we compute this vector, then $Au \approx \lambda_1 u$ and $u^T Au \approx \lambda_1$ since $\|u\|=1$. In this way we can compute the largest eigenvalue $\lambda_1$ of $A$, along with one of its eigenvectors $u$. " # ╔═╡ 559c0696-194b-11eb-182f-65374ebed7ff function discover_eigenvalue_iterative_method(A, tol=1e-12; limit=10000) # implements iterative algorithm to find largest eigenvalue # random starting vector w = rand(size(A)[1], 1) for i=1:limit x = A * w lambda = dot(x, w) # this computes w^T A w # stop iteration if we have already found an eigenvalue within tolerance if norm(x - lambda * w) < tol break end w = x / norm(x) end lambda = dot(A * w, w) return lambda, w end # ╔═╡ 05e9a5d8-1944-11eb-3a56-05de521ffe26 function random_matrix(n) # create a random diagonalizable matrix with real eigenvalues eigs = rand(-10:1:10, 1, n) A = zeros(n, n) for i=1:n A[i,i] = eigs[i] end while true B = rand(-1:0.01:1, n, n) if det(B) != 0 return B * A * B^-1 end end end # ╔═╡ 782f2241-acd2-4103-b8f6-ef1bce0bbab7 function good_random_matrix(n) # create a random diagonalizable matrix without two eigenvalues of opposite sign while true eigs = rand(-40:1:40, 1, n) if length(unique(abs.(eigs))) == length(unique(eigs)) A = zeros(n, n) for i=1:n A[i,i] = eigs[i] end while true B = rand(-1:0.01:1, n, n) if det(B) != 0 return B * A * B^-1 end end end end end # ╔═╡ afe24581-65ac-4ae9-b70e-61550860fc35 function bad_random_matrix(n) # create a random diagonalizable matrix with real eigenvalues of opposite sign while true eigs = rand(-10:1:10, 1, n) if length(unique(abs.(eigs))) < length(unique(eigs)) A = zeros(n, n) for i=1:n A[i,i] = eigs[i] end while true B = rand(-1:0.01:1, n, n) if det(B) != 0 return B * A * B^-1 end end end end end # ╔═╡ dac3ce44-1d3a-11eb-092c-1df4e3414f73 Q = good_random_matrix(20) # ╔═╡ e2dfa36e-1d3a-11eb-104d-21707f1e62f3 lambda, u = discover_eigenvalue_iterative_method(Q) # ╔═╡ 8b7f12a4-1d3b-11eb-0188-51fb48cbc315 Q * u, lambda * u # ╔═╡ 72da8b34-1d3e-11eb-3039-b5c2ef5e6734 md"The following code generates some pictures of the convergence process of the iterative eigenvalue algorithm applied to $2\times 2$ matrices." # ╔═╡ 210aeb74-1946-11eb-3f62-a35e2de6c4b6 function plot_vector(v, scaling, color; opacity=0.25) v = v / norm(v) * (0.5 + 0.5 * (1 - (1 - scaling)^2)) quiver!(quiver = ([v[1]],[v[2]]), [0], [0], color=color, opacity=opacity) end # ╔═╡ 8af3f788-1946-11eb-3be7-31f70ef26acb function animate_eigenvector_search(A, steps=25) v = rand(2, 1) w = rand(2, 1) p = scatter([0], [0], xlim=(-1,1), ylim=(-1,1), legend=false, aspect_ratio=:equal, title="Iterative method of finding eigenvalues") eig = eigen(A) if (A[1,1] - A[2,2])^2 + 4 * A[1,2] * A[2,1] >= 0 plot_vector(eig.vectors[:,1], 1.0, :grey; opacity=1.0) plot_vector(-eig.vectors[:,1], 1.0, :grey; opacity=1.0) plot_vector(eig.vectors[:,2], 1.0, :grey; opacity=1.0) plot_vector(-eig.vectors[:,2], 1.0, :grey; opacity=1.0) end anim = @animate for i=0:2 * steps + 1 # find first eigenvector v if i <= steps plot_vector(v, i / steps, :blue) v = A * v v = v / norm(v) # replace A by A - lambda I elseif i == steps + 1 eigenvalue_v = (A * v)[1] / v[1] A = A - I * eigenvalue_v # first second eigevector w else plot_vector(w, (i - steps - 1) / steps, :orange) w = A * w w = w / norm(w) end end every 1 gif(anim, fps = 10) end # ╔═╡ 368f892c-2e5e-4b99-b377-d80ccf7d2dc4 A = good_random_matrix(2) # ╔═╡ 765e2f52-1949-11eb-31cf-d3d341176af9 animate_eigenvector_search(A, 50) # ╔═╡ c8238eb4-1d8f-11eb-2b93-1b5a68d04ce7 md"The blue vectors are the iterations of our eigenvalue algorithm applied to $A$. The picture shows earlier iterations are shorter vector than later ones. Once the algorithm converges to an eigenvector $u$ with eigenvalue $\lambda$, we can apply iterative algorithm a second time to $A- \lambda I$. The iterations of this algorithm are the orange vectors. If the second algorithm converges to an eigenvector $v$ with eigenvalue $\mu$, then we can have diagonalized $A = PDP^{-1}$ where $P = \left[\begin{array}{cc} u & v \end{array}\right]$ and $D = \left[\begin{array}{cc} \lambda & 0 \\ 0 & \mu \end{array}\right]$. " # ╔═╡ 82ccdbb0-bf54-473f-b44e-54f010852fc3 # ╔═╡ 47f946be-1d3c-11eb-045e-b5d5678ca3bd md"This algorithm works well most of the time, as we see in these example computations. One situation where the iterative algorithm fails, even when $A$ has all real eigenvalues, is if the two largest eigenvalues of $A$ in absolute value satisfy $|\lambda_1| = |\lambda_2| $ and $\lambda_1 + \lambda_2 = 0$ " # ╔═╡ 21335d1c-1d3c-11eb-1dc8-2949c2308a04 B = bad_random_matrix(2) # ╔═╡ eaf30ac6-1d3c-11eb-0de6-11cb3af96780 lambdaB, uB = discover_eigenvalue_iterative_method(B) # ╔═╡ 0017301c-1d3d-11eb-0bf9-3951a5e7aad6 B * uB, lambdaB * uB # ╔═╡ 1c7525cb-fe0a-4858-8c88-214fd622fbcc md"We see in the animation for this matrix below that the blue and orange vectors do not converge to the grey arrows (which are the actual eigenvectors up to rescaling)." # ╔═╡ a2d72e08-35a2-459e-ac18-37205a12d631 animate_eigenvector_search(B, 50) # ╔═╡ 25231f10-1d3d-11eb-0e2f-21b7ca4f33cf md"We can get around this issue with the following idea. The eigenvalues of $A^2$ are the squares $\lambda^2$ of the eigenvalues $\lambda$ of $A$. So if $A$ has two eigenvalues $\lambda$ and $-\lambda$, then $A^2$ will have only the eigenvalue $\lambda^2$. To avoid the issue of eigenvalues adding to zero, we first apply the iterative algorithm to $A^2$. If the positive square root of the result eigenvalue is $\lambda$, then we apply the iterative algorithm again to $A + \lambda I $ or $A - \lambda I$. These matrices will have eigenvalues $0$ and $\pm 2\lambda$ rather than $-\lambda$ and $\lambda$." # ╔═╡ 92ec0ee6-1a07-11eb-1a3f-1be61bcc16f4 function discover_eigenvalue(A, tol=1e-12; limit=10000) mu_squared, _ = discover_eigenvalue_iterative_method(A^2, tol; limit=limit) mu = abs(mu_squared)^0.5 # decide which square root to return if rank(A - mu * I) < size(A)[1] nu, u = discover_eigenvalue_iterative_method(A + mu * I, tol; limit=limit) return nu - mu, u else nu, u = discover_eigenvalue_iterative_method(A - mu * I, tol; limit=limit) return nu + mu, u end end # ╔═╡ f162d29e-194b-11eb-18ef-9dd66f5b4cf3 lambda_B, u_B = discover_eigenvalue(B) # ╔═╡ 3e096da6-1d3e-11eb-3c20-d5e0a63e9fb2 B * u_B, lambda_B * u_B # ╔═╡ 5fc5f6c8-1d90-11eb-3f8e-5109c7f99f0c function very_bad_matrix() while true A = 4 * (rand(2, 2) .- 0.5) a, b, c, d = A[1,1], A[1,2], A[2,1], A[2,2] if (a - d)^2 + 4 * b * c < 0 return A end end end # ╔═╡ b08c1f02-1d90-11eb-1315-f15cdf804e7c md"For some matrices $C$, the iterative algorithm will fail to converge to any eigenvectors and we won't be able to discover an eigenvalue. The failure here is related to the matrix $C$ having *complex eigenvalues*, which we'll discuss next time. Here is what the iterative algorithm looks like applied to such matrices:" # ╔═╡ 8facdb48-1d90-11eb-3920-279a6832015b C = very_bad_matrix() # ╔═╡ 9c456280-1d90-11eb-2e3d-7d2a39cafd7d animate_eigenvector_search(C, 50) # ╔═╡ fed830a0-1d3e-11eb-32a6-cf6b73b745dd md"We will ignore this situation to simplify this demonstration. We can use the iterative algorithm as a building block in a larger algorithm to find all the eigenvalues along with bases for all the nonzero eigenspaces." # ╔═╡ d3baf884-198c-11eb-369b-f3c344380e7f begin function find_leading(A, row=1, tolerance=1e-12) (m, n) = size(A) for col=1:n if abs(A[row, col]) > tolerance return col end end return 0 end function find_nonzeros_in_column(A, row_start, col, tol=1e-12) (m, n) = size(A) return [i for i=row_start:m if abs(A[i,col]) > tol] end function columns(A) (m, n) = size(A) return n end function rowop_replace(A, source_row, target_row, scalar_factor) @assert source_row != target_row for j=1:columns(A) A[target_row,j] += A[source_row,j] * scalar_factor end return A end function rowop_scale(A, target_row, scalar_factor) @assert scalar_factor != 0 for j=1:columns(A) A[target_row,j] *= scalar_factor end A end function rowop_swap(A, s, t) for j=1:columns(A) A[t,j], A[s,j] = A[s,j], A[t,j] end A end function pivot_positions(A, tol=1e-12) rref = RREF(A, tol) return [ (i, find_leading(rref, i)) for i=1:size(A)[1] if find_leading(rref, i) > 0 ], rref end function RREF(A, tol=1e-12) A = float(copy(A)) (m, n) = size(A) row = 1 for col=1:n nonzeros = find_nonzeros_in_column(A, row, col, tol) if length(nonzeros) == 0 continue end i = nonzeros[1] for j=nonzeros[2:end] if abs(A[i, col]) < abs(A[j, col]) i = j end end if abs(A[i, col] - 1) < tol A[i, col] = 1 else A = rowop_scale(A, i, 1 / A[i, col]) end for j=nonzeros if i != j A = rowop_replace(A, i, j, -A[j, col]) end end if i != row A = rowop_swap(A, row, i) end row += 1 end for row=m:-1:1 l = find_leading(A, row, tol) if l > 0 for k=1:row - 1 if abs(A[k,l]) > tol rowop_replace(A, row, k, -A[k,l]) end end end end # round entries to give nicer output; could omit this step for row=1:m for col=1:n if abs(A[row,col] - round(A[row,col])) < tol A[row,col] = round(A[row,col]) end end end return A end end # ╔═╡ 846e7356-198d-11eb-3a58-25b11bbd0b7d function column_space_basis(A, tol=1e-6) # function we'll need to compute basis of column space of a matrix pivots, _ = pivot_positions(A, tol) ans = zeros(size(A)[1], 0) for (i, j) = pivots ans = hcat(ans, A[1:end, j]) end ans end # ╔═╡ 30ab9824-198e-11eb-17a7-fb75b29306c9 function null_space_basis(A, tol=1e-6) # function we'll need to compute basis of null space of a matrix n = size(A)[2] pivots, rref = pivot_positions(A, tol) free = [j for j=1:n if ! any(j == pivot[2] for pivot=pivots)] ans = zeros(n, length(free)) for k = 1:length(free) ans[free[k], k] = 1 for (i, j) = pivots ans[j, k] = -rref[i, free[k]] end end ans end # ╔═╡ 8c25ebe0-19b2-11eb-2415-4198c6d4a277 V = [ 1 1 2 2; 2 2 4 4; 1 2 1 3 ] # ╔═╡ 0d74d6ec-1d33-11eb-207d-f9390dd88e00 column_space_basis(V) # ╔═╡ 13353806-1d33-11eb-3022-97f23ec433f1 null_space_basis(V) # ╔═╡ 49ac6090-1d91-11eb-3946-3f71115eb438 md"Here is the algorithm to find all eigenvalues of an $n\times n$ (diagonalizable) matrix $A$: * First find eigenvalue with largest absolute value $\lambda$. * Compute basis $u_1,u_2,\dots, u_m$ of eigenspace $\mathrm{Nul}(A-\lambda I)$. * Find $v_1,v_2,\dots,v_{n-m}$ such that $u_1,u_2,\dots,u_m,v_1,v_2,\dots,v_{n-m}$ is a basis for $\mathbb{R}^n$. Let $\mathcal{K} : \mathbb{R}^n \to \mathbb{R}^{n-m}$ be linear transformation with $\mathcal{K}(u_i) = 0\quad\text{and}\quad\mathcal{K}(v_i) = e_i.$ Let $\mathcal{L} : \mathbb{R}^{n-m} \to \mathbb{R}^{n}$ be linear transformation with $\mathcal{L}(e_i) = Av_i$. * Compute $(n-m)\times (n-m)$ matrix $B$ that is the standard matrix of $\mathcal{K} \circ \mathcal{L}$. * Now, recursively, compute basis of $\mathbb{R}^{n-m}$ consisting of eigenvectors $w$ for $B$. Suppose $0 \neq w \in \mathbb{R}^{n-m}$ has $B w = \mathcal{K}(\mathcal{L}(u)) = \mu w$. This means that there is some vector $u \in \mathbb{R}\text{-span}\{u_1,u_2,\dots,u_m\}= \mathrm{Nul}(A-\lambda I)$ such that $\mathcal{L}(w) = A\left[\begin{array}{cccc} v_1 & v_2 & \dots & v_{n-m} \end{array}\right] w = u + \mu\left[\begin{array}{cccc} v_1 & v_2 & \dots & v_{n-m} \end{array}\right] w$ since $\mathcal{K}(u) = 0$ and $\mathcal{K}(\left[\begin{array}{cccc} v_1 & v_2 & \dots & v_{n-m} \end{array}\right] w) = w$. The matrices $A$ and $A-\lambda I$ commute and $(A-\lambda I)u = 0$ so $A(A-\lambda I)\left[\begin{array}{cccc} v_1 & v_2 & \dots & v_{n-m} \end{array}\right] w = \mu(A-\lambda I)\left[\begin{array}{cccc} v_1 & v_2 & \dots & v_{n-m} \end{array}\right] w$ Since $w$ is nonzero, the vector $\left[\begin{array}{cccc} v_1 & v_2 & \dots & v_{n-m} \end{array}\right] w$ is a nonzero element of $\mathbb{R}\text{-span}\{v_1,v_2,\dots,v_{n-m}\}.$ No such vector is also in the null space of $A-\lambda I$. We conclude that $\lambda\neq \mu$ and that $\tag{*} (A - \lambda I) \left[\begin{array}{cccc} v_1 & v_2 & \dots & v_{n-m} \end{array}\right] w$ is an eigenvector for $A$ with eigenvalue $\mu$. In fact: * As $w$ ranges over a basis for $\mathbb{R}^{n-m}$ of eigenvectors for $B$, the vectors of the form (*) are linearly independent eigenvectors for $A$, and combining these vectors with $u_1,u_2,\dots,u_m$ gives a basis for $\mathbb{R}^n$ of eigenvectors for $A$. " # ╔═╡ 808ce900-198f-11eb-2e9b-0d3798291fb4 function discover_all_eigenvalues(A, tol=1e-12) # returns list `eigenvalues` and matrix `eigenvectors` if possible to compute # the list is the sequence of eigenvalues of A with multiplicity # the columns of the matrix are the corresponding eigenvectors n = size(A)[1] # if dim Nul A == n then A is zero matrix if size(null_space_basis(A))[2] == n eigenvalues = [0 for i=1:n] eigenvectors = rand(n, n) return eigenvalues, eigenvectors else # find largest eigenvalue, and basis for corresponding eigenspace lambda, v = discover_eigenvalue(A, tol) eigenvectors = null_space_basis(A - lambda * I, sqrt(tol)) m = size(eigenvectors)[2] eigenvalues = [lambda for i=1:m] # compute basis u_1, u_2, ..., u_m, v_1, v_2, ..., v_{n-m} basis = column_space_basis(hcat(eigenvectors, I)) # compute matrix B B = (basis^-1)[m + 1:end, 1:end] * A * basis[1:end, m + 1:end] # recursively construct eigenvalues and eigenvectors for B values, vectors = discover_all_eigenvalues(B, tol) for i=1:n - m mu = values[i] w = basis[1:end, m + 1:end] * vectors[1:end, i] next_eigenvector = A * w - lambda * w # optional: rescale eigenvector. may give more accurate result next_eigenvector = next_eigenvector / norm(next_eigenvector) # add next eigenvalue and eigenvector to return values append!(eigenvalues, values[i]) eigenvectors = hcat(eigenvectors, next_eigenvector) end return eigenvalues, eigenvectors end end # ╔═╡ b9cbdde8-1d93-11eb-07f1-fd604082833f md"This relatively simple algorithm works fairly well for random matrices with all real eigenvalues. Such a matrix will be diagonalizable with high probability." # ╔═╡ e6e524da-19a1-11eb-2f74-279fef380116 M = random_matrix(20) # ╔═╡ 76c3267e-19a2-11eb-388f-816d23f2d196 D, P = discover_all_eigenvalues(M) # ╔═╡ f72ebb6c-1d93-11eb-0c7f-a76d932a1f8d # P * Diagonal(D) * P^-1, M # ╔═╡ 8214233e-19a2-11eb-07e7-5f18d687e363 norm(P * Diagonal(D) - M * P) # norm computes sqrt(sum of squares of all entries) # ╔═╡ 0ad1193a-1d94-11eb-0f54-0909269a227e md"Of course, more advanced algorithms to do the same computations are already implemented in the Julia package LinearAlgebra and these are more robust, faster, and more accurate." # ╔═╡ cfcf1146-19a3-11eb-3072-fd8842c7a8bd a = eigen(M) # ╔═╡ b8424dfe-1a0c-11eb-0323-1372fe1fedf1 norm(a.vectors * Diagonal(a.values) * a.vectors^-1 - M) # ╔═╡ 00000000-0000-0000-0000-000000000001 PLUTO_PROJECT_TOML_CONTENTS = """ [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" [compat] Plots = "~1.23.1" """ # ╔═╡ 00000000-0000-0000-0000-000000000002 PLUTO_MANIFEST_TOML_CONTENTS = """ # This file is machine-generated - editing it directly is not advised [[Adapt]] deps = ["LinearAlgebra"] git-tree-sha1 = "84918055d15b3114ede17ac6a7182f68870c16f7" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" version = "3.3.1" [[ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" [[Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" [[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 = "f2202b55d816427cd385a9a4f3ffb226bee80f99" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" version = "1.16.1+0" [[ChainRulesCore]] deps = ["Compat", "LinearAlgebra", "SparseArrays"] git-tree-sha1 = "0541d306de71e267c1a724f84d44bbc981f287b4" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" version = "1.10.2" [[ColorSchemes]] deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random"] git-tree-sha1 = "a851fec56cb73cfdf43762999ec72eff5b86882a" uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" version = "3.15.0" [[ColorTypes]] deps = ["FixedPointNumbers", "Random"] git-tree-sha1 = "024fe24d83e4a5bf5fc80501a314ce0d1aa35597" uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" version = "0.11.0" [[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 = "31d0151f5716b655421d9d75b7fa74cc4e744df2" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" version = "3.39.0" [[CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" [[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 = "7d9d316f04214f7efdbb6398d545446e246eff02" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" version = "0.18.10" [[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 = "dba1e8614e98949abfa60480b13653813d8f0157" uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" version = "3.3.5+0" [[GR]] deps = ["Base64", "DelimitedFiles", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Printf", "Random", "Serialization", "Sockets", "Test", "UUIDs"] git-tree-sha1 = "d189c6d2004f63fd3c91748c458b09f26de0efaa" uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" version = "0.61.0" [[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 = "cafe0823979a5c9bff86224b3b8de29ea5a44b2e" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" version = "0.61.0+0" [[GeometryBasics]] deps = ["EarCut_jll", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] git-tree-sha1 = "58bcdf5ebc057b085e58d95c138725628dd7453c" uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" version = "0.4.1" [[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 = "7bf67e9a481712b3dbe9cb3dac852dc4b1162e02" uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" version = "2.68.3+0" [[Graphite2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" version = "1.3.14+0" [[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 = "14eece7a3308b4d8be910e265c724a6ba51a9798" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" version = "0.9.16" [[HarfBuzz_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] git-tree-sha1 = "8a954fed8ac097d5be04921d595f741115c1b2ad" uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" version = "2.8.1+0" [[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" [[InverseFunctions]] deps = ["Test"] git-tree-sha1 = "f0c6489b12d28fb4c2103073ec7452f3423bd308" uuid = "3587e190-3f89-42d0-90ee-14403ec27112" version = "0.1.1" [[IrrationalConstants]] git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151" uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" version = "0.1.1" [[IterTools]] git-tree-sha1 = "05110a2ab1fc5f932622ffea2a003221f4782c18" uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" version = "1.3.0" [[IteratorInterfaceExtensions]] git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" uuid = "82899510-4779-5014-852e-03e436cf321d" version = "1.0.0" [[JLLWrappers]] deps = ["Preferences"] git-tree-sha1 = "642a199af8b68253517b80bd3bfd17eb4e84df6e" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" version = "1.3.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 = "c7f1c695e06c01b95a67f0cd1d34994f3e7db104" uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" version = "1.2.1" [[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 = "761a393aeccd6aa92ec3515e428c26bf99575b3b" uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" version = "3.2.2+0" [[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", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] git-tree-sha1 = "6193c3815f13ba1b78a51ce391db8be016ae9214" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" version = "0.3.4" [[Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" [[MacroTools]] deps = ["Markdown", "Random"] git-tree-sha1 = "5a5bc6bf062f0f95e62d0fe0a2d99699fed82dd9" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" version = "0.5.8" [[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 = "bfe47e760d60b82b66b61d2d44128b62e3a369fb" uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" version = "0.3.5" [[NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" [[Ogg_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "7937eda4681660b4d6aeeecc2f7e1c81c8ee4e2f" uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" version = "1.3.5+0" [[OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "15003dcb7d8db3c6c857fda14891a539a8f2705a" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" version = "1.1.10+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 = "f19e978f81eca5fd7620650d7dbea58f825802ee" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" version = "2.1.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 = "b084324b4af5a438cd63619fd006614b3b20b87b" uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" version = "1.0.15" [[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"] git-tree-sha1 = "25007065fa36f272661a0e1968761858cc880755" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" version = "1.23.1" [[Preferences]] deps = ["TOML"] git-tree-sha1 = "00cfd92944ca9c760982747e9a1d0d5d86ab1e5a" uuid = "21216c6a-2e73-6563-6e65-726566657250" version = "1.2.2" [[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" [[RecipesBase]] git-tree-sha1 = "44a75aa7a527910ee3d1751d1f0e4148698add9e" uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" version = "1.1.2" [[RecipesPipeline]] deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase"] git-tree-sha1 = "7ad0dfa8d03b7bcf8c597f59f5292801730c55b8" uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" version = "0.4.1" [[Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" uuid = "189a3867-3050-52da-a836-e630ba90ab69" version = "1.2.2" [[Requires]] deps = ["UUIDs"] git-tree-sha1 = "4036a3bd08ac7e968e27c203d45f5fff15020621" uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.1.3" [[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" [[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 = "3c76dde64d03699e074ac02eb2e8ba8254d428da" uuid = "90137ffa-7385-5640-81b9-e52037218182" version = "1.2.13" [[Statistics]] deps = ["LinearAlgebra", "SparseArrays"] uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" [[StatsAPI]] git-tree-sha1 = "1958272568dc176a1d881acb797beb909c785510" uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" version = "1.0.0" [[StatsBase]] deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] git-tree-sha1 = "eb35dcc66558b2dda84079b9a1be17557d32091a" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" version = "0.33.12" [[StructArrays]] deps = ["Adapt", "DataAPI", "StaticArrays", "Tables"] git-tree-sha1 = "2ce41e0d042c60ecd131e9fb7154a3bfadbf50d3" uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" version = "0.6.3" [[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 = "fed34d0e71b91734bf0a7e10eb1bb05296ddbcd0" uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" version = "1.6.0" [[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" [[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", "Wayland_jll"] git-tree-sha1 = "2839f1c1296940218e35df0bbb220f2a79686670" uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" version = "1.18.0+4" [[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 = "c45f4e40e7aafe9d086379e5578947ec8b95a8fb" uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" version = "1.3.7+0" [[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: # ╟─041168ac-1d35-11eb-188a-7d03056df793 # ╠═ad7f3a08-1944-11eb-2b34-47d5aa1beafd # ╠═31cc8274-1946-11eb-163b-ab4879c3ee82 # ╟─2495a042-1d36-11eb-0713-a760c9bef7de # ╠═559c0696-194b-11eb-182f-65374ebed7ff # ╠═05e9a5d8-1944-11eb-3a56-05de521ffe26 # ╠═782f2241-acd2-4103-b8f6-ef1bce0bbab7 # ╠═afe24581-65ac-4ae9-b70e-61550860fc35 # ╠═dac3ce44-1d3a-11eb-092c-1df4e3414f73 # ╠═e2dfa36e-1d3a-11eb-104d-21707f1e62f3 # ╠═8b7f12a4-1d3b-11eb-0188-51fb48cbc315 # ╟─72da8b34-1d3e-11eb-3039-b5c2ef5e6734 # ╠═210aeb74-1946-11eb-3f62-a35e2de6c4b6 # ╠═8af3f788-1946-11eb-3be7-31f70ef26acb # ╠═368f892c-2e5e-4b99-b377-d80ccf7d2dc4 # ╠═765e2f52-1949-11eb-31cf-d3d341176af9 # ╟─c8238eb4-1d8f-11eb-2b93-1b5a68d04ce7 # ╟─82ccdbb0-bf54-473f-b44e-54f010852fc3 # ╟─47f946be-1d3c-11eb-045e-b5d5678ca3bd # ╠═21335d1c-1d3c-11eb-1dc8-2949c2308a04 # ╠═eaf30ac6-1d3c-11eb-0de6-11cb3af96780 # ╠═0017301c-1d3d-11eb-0bf9-3951a5e7aad6 # ╟─1c7525cb-fe0a-4858-8c88-214fd622fbcc # ╠═a2d72e08-35a2-459e-ac18-37205a12d631 # ╟─25231f10-1d3d-11eb-0e2f-21b7ca4f33cf # ╠═92ec0ee6-1a07-11eb-1a3f-1be61bcc16f4 # ╠═f162d29e-194b-11eb-18ef-9dd66f5b4cf3 # ╠═3e096da6-1d3e-11eb-3c20-d5e0a63e9fb2 # ╠═5fc5f6c8-1d90-11eb-3f8e-5109c7f99f0c # ╟─b08c1f02-1d90-11eb-1315-f15cdf804e7c # ╠═8facdb48-1d90-11eb-3920-279a6832015b # ╠═9c456280-1d90-11eb-2e3d-7d2a39cafd7d # ╟─fed830a0-1d3e-11eb-32a6-cf6b73b745dd # ╟─d3baf884-198c-11eb-369b-f3c344380e7f # ╠═846e7356-198d-11eb-3a58-25b11bbd0b7d # ╠═30ab9824-198e-11eb-17a7-fb75b29306c9 # ╠═8c25ebe0-19b2-11eb-2415-4198c6d4a277 # ╠═0d74d6ec-1d33-11eb-207d-f9390dd88e00 # ╠═13353806-1d33-11eb-3022-97f23ec433f1 # ╟─49ac6090-1d91-11eb-3946-3f71115eb438 # ╠═808ce900-198f-11eb-2e9b-0d3798291fb4 # ╟─b9cbdde8-1d93-11eb-07f1-fd604082833f # ╠═e6e524da-19a1-11eb-2f74-279fef380116 # ╠═76c3267e-19a2-11eb-388f-816d23f2d196 # ╠═f72ebb6c-1d93-11eb-0c7f-a76d932a1f8d # ╠═8214233e-19a2-11eb-07e7-5f18d687e363 # ╟─0ad1193a-1d94-11eb-0f54-0909269a227e # ╠═cfcf1146-19a3-11eb-3072-fd8842c7a8bd # ╠═b8424dfe-1a0c-11eb-0323-1372fe1fedf1 # ╟─00000000-0000-0000-0000-000000000001 # ╟─00000000-0000-0000-0000-000000000002