### A Pluto.jl notebook ### # v0.16.0 using Markdown using InteractiveUtils # This Pluto notebook uses @bind for interactivity. When running this notebook outside of Pluto, the following 'mock version' of @bind gives bound variables a default value (instead of an error). macro bind(def, element) quote local el = $(esc(element)) global$(esc(def)) = Core.applicable(Base.get, el) ? Base.get(el) : missing el end end # ╔═╡ b2804866-073e-11eb-3822-71c2898c5633 using LinearAlgebra # ╔═╡ 48ddec12-0791-11eb-3278-6769b0507672 md"""# Notebook 7 -- Math 2121, Fall 2021 An $n\times n$ matrix for $n=1$ is just a number $A = \left[\begin{array}{c} a \end{array}\right]$. Such a matrix is invertible if and only if $a\neq 0$. It is clear that we can "move around" in the subspace of invertible $1\times 1$ matrices within $\mathbb{R}^1$, in the sense that we can perturb the entries of $A$ slightly and still have an invertible matrix: specifically, $\left[\begin{array}{c} a + \delta \end{array}\right]$ is still invertible as long as $|\delta|$ is small. In particular, this is true whenever $|\delta| < |a|$. However, it's also clear that there are the set of invertible $1\times 1$ matrices has two *connected components*: the matrices $A = \left[\begin{array}{c} a \end{array}\right]$ with $a<0$ and those with $a>0$. If we start with $a<0$, then there is no way to gradually perturb $a$ to get a positive value without passing through $a=0$, at which point the matrix would be non-invertible. So there is no path *that stays completely within the set of invertible matrices* connecting, say $A = \left[\begin{array}{c} -1 \end{array}\right]$ and $A = \left[\begin{array}{c} 1 \end{array}\right]$. """ # ╔═╡ 472aca7e-0792-11eb-0957-639fae6da505 md"""Let's investigate how this generalizes to $2\times 2$ matrices. A $2\times 2$ matrix has four entries. Geometrically, there is no difference between the set of all $2\times 2$ matrices and the set of vectors $\mathbb{R}^4$. We have just split our four numbers into two columns rather than kept them in one. Suppose $A = \left[\begin{array}{cc} a & b \\ c & d \end{array}\right]$. This matrix is invertible if and only if the vectors $\left[\begin{array}{c} a \\ c \end{array}\right]$ and $\left[\begin{array}{c} b \\ d \end{array}\right]$ are linearly independent, that is, not scalar multiples of each other. Assume this is the case. I claim that it is still true that we can "move around" within the subset of invertible $2\times 2$ matrices, in the sense that the perturbed matrix $\left[\begin{array}{cc} a + \delta_1 & b + \delta_2 \\ c + \delta_3 & d + \delta_4 \end{array}\right]$ is still invertible for any choice of numbers $\delta_i$ that have sufficiently small absolute value. Let's justify this with a random example. """ # ╔═╡ 40b79f8e-0731-11eb-1eb4-018915642385 A = rand(-2:0.01:2, 2, 2) # ╔═╡ bd32c7e0-0730-11eb-1c71-d9a884839001 begin using PlutoUI using Plots max_epsilon = 0.9 * minimum([norm(A[1:2,1]) norm(A[1:2,2])]) def_epsilon = minimum([0.5 0.5 * max_epsilon]) epsilon_slider = @bind epsilon Slider(0:0.01:max_epsilon, default=def_epsilon, show_value=true) md"""ε = $(epsilon_slider) """ end # ╔═╡ 380be1a4-08c8-11eb-1654-837ec5ab9678 md"We need a way to visualize the matrix$A$. A simple method is to draw the vectors$\left[\begin{array}{c} a \\ c \end{array}\right]$and$\left[\begin{array}{c} b \\ d \end{array}\right]$that are the columns of$A$:" # ╔═╡ 872cf14e-0793-11eb-2909-9b4ad309de82 md"""In we increase the parameter$\varepsilon$above, then the two colored regions in this graph will grow larger. The blue circle surrounds the set of vectors$\left[\begin{array}{cc} a + \delta_1 \\ c + \delta_3 \end{array}\right]$with$\sqrt{\delta_1^2 + \delta_3^2} < \varepsilon$. The red circle surrounds the set of vectors$\left[\begin{array}{cc} b + \delta_2 \\ d + \delta_4 \end{array}\right]$with$\sqrt{\delta_2^2 + \delta_4^2} < \varepsilon$. Choose$\epsilon$to be small enough that the blue and red regions **do not overlap**. Suppose we have another$2\times 2$matrix$B$. Draw the columns of$B$as a pair of vectors in$\mathbb{R}^2$. If the endpoints of these vectors are contained in the blue and red circles, **then$B$is guaranteed to be invertible**, because its columns won't belong to the same line so will be linearly independent. """ # ╔═╡ de53a7d0-08c9-11eb-2b08-d9a5bbf5c75c md"Given$A$and$\varepsilon$, how would you figure out if the blue and red regions overlap? It's possible to give an exact formula for this, using only basic algebra and planar geometry. But this is a little complicated, as you can see if you examine the code below, which implements an overlaps method to compute the answer programatically." # ╔═╡ 1185730a-0739-11eb-3619-1b4ee5874f4a begin function tangent_points(u1, u2, eps) if u1 != 0 k = -eps^2 + u1^2 + u2^2 @assert k >= 0 a, b, c = u1^2 + u2^2, -2 * u2 * k, k^2 - k * u1^2 discr = b^2 - 4 * a * c if abs(discr) < 10e-8 discr = 0.0 end x2 = (-b + sqrt(discr)) / 2 / a x1 = -u2 / u1 * x2 + k / u1 y2 = (-b - sqrt(discr)) / 2 / a y1 = -u2 / u1 * y2 + k / u1 return x1, x2, y1, y2 else x1, x2, y1, y2= tangent_points(u2, u1, eps) return x2, x1, y2, y1 end end function angle(u1, u2) if u1 == 0 return u2 > 0 ? pi/2 : 3 * pi/2 end if u2 == 0 return u1 > 0 ? 0 : pi end a = atan(abs(u2) / abs(u1)) if u1 > 0 && u2 > 0 return a elseif u1 > 0 && u1 > 0 return 2 * pi - a elseif u1 < 0 && u2 > 0 return pi - a else return pi + a end end function in_same_relative_position(x, y, test, target) a = angle(x[1], x[2]) b = angle(y[1], y[2]) if a > b a, b = b, a end s = angle(test[1], test[2]) if b < s a, b = b, a + 2 * pi elseif s < a a, b, s = b, a + 2 * pi, s + 2 * pi end @assert a <= s <= b t = angle(target[1], target[2]) return a < t < b || a < t + 2 * pi < b end function overlaps(eps, A) for i = [1, 2] for s = [-1,1] u1, u2 = A[1, i], A[2, i] v1, v2 = s * A[1, 3 - i], s * A[2, 3- i] if -eps^2 + u1^2 + u2^2 < 0 || -eps^2 + v1^2 + v2^2 < 0 return true end x1, x2, y1, y2 = tangent_points(u1, u2, eps) p1, p2, q1, q2 = tangent_points(v1, v2, eps) if in_same_relative_position([x1; x2], [y1; y2], [u1; u2], [p1; p2]) return true end if in_same_relative_position([x1; x2], [y1; y2], [u1; u2], [q1; q2]) return true end end end return false end end # ╔═╡ fd6fa06e-0730-11eb-229e-21f0a63e8feb begin mm = 1.5 * maximum(abs.(A)) lims = (-mm, mm) rectangle(w, h, x, y) = Shape(x .+ [0,w,w,0], y .+ [0,0,h,h]) function circle(h, k, r) theta = LinRange(0, 2 * pi, 500) h .+ r*sin.(theta), k .+ r*cos.(theta) end function draw(u1, u2, epsilon, c) N = 1000 quiver!(quiver = ([u1],[u2]), [0], [0], color=[:black],) plot!(circle(u1, u2, epsilon), opacity=.2, color=c) x1, x2, y1, y2 = tangent_points(u1, u2, epsilon) x1, x2, y1, y2 = N * x1, N * x2, N * y1, N * y2 plot!(Shape([0, x1, y1], [0, x2, y2]), opacity=.05, color=c) plot!(Shape([0, -x1, -y1], [0, -x2, -y2]), opacity=.05, color=c) end p1 = scatter([0], [0], xlim = lims, ylim = lims, legend = false, label = "origin", aspect_ratio=:equal, title = "Columns of A") u1, u2 = A[1, 1], A[2, 1] v1, v2 = A[1, 2], A[2, 2] draw(u1, u2, epsilon, [:blue]) draw(v1, v2, epsilon, [:red]) plot(p1) end # ╔═╡ 11c57a80-073a-11eb-321d-578078ffcdd4 overlaps(epsilon, A) # ╔═╡ 9b8f0c96-0793-11eb-207b-cd58e584a208 md"As long as the red and blue regions do not overlap, then$B=A + \left[\begin{array}{cc} \delta_1 & \delta_2 \\ \delta_3 & \delta_4 \end{array}\right] = \left[\begin{array}{cc} a + \delta_1 & b + \delta_2 \\ c + \delta_3 & d + \delta_4 \end{array}\right]$is invertible for every choice$\delta_1,\delta_2,\delta_3,\delta_4$with$\sqrt{\delta_1^2 + \delta_3^2} < \varepsilon$and$\sqrt{\delta_2^2 + \delta_4^2} < \varepsilon$. These conditions involving square roots are satisfied as long as we have$-\frac{1}{\sqrt {2}}\varepsilon < \delta_i< \frac{1}{\sqrt 2}\varepsilon$for each$i=1,2,3,4$. This shows that we can 'move' from$A$to any matrix$B$whose columns correspond to points in the red and blue circles, while always staying inside the set of invertible$2\times 2$matrices. The following method computes an upper bound on the value of$\varepsilon$that ensures that the red and blue regions above do not overlap. I'll call this the *radius* of$A$." # ╔═╡ d481fb8a-073e-11eb-15a4-9be4957b67a3 function radius(A, reduce_scale=1.0) ans = 1.0 # start with a guess of 1.1 factor = 1.1 # factor to adjust by at each iteration iter, limit = 0, 100 # parameters to bound number of iterations while true over = overlaps(ans, A) overup = overlaps(factor * ans, A) # if current answer works and can't do better, break if ! over && (overup || iter == limit) break # if current answer works but can do better, increase value elseif ! over && ! overup ans *= factor # if current answer doesn't work, decrease value else ans /= factor end # quite if already spent too many iterations searching iter += 1 if iter > limit return 0.0 end end # perfect extra size reduction, just in case. # these formulas will make more sense after we learn about projections. u, v = A[1:2,1], A[1:2,2] n1 = norm(v - dot(u, v) / dot(u, u) * u) n2 = norm(u - dot(u, v) / dot(v, v) * v) ans = minimum([n1 n2 ans]) # optional size reduction ans = reduce_scale * ans # reduce answer to 0.0 if it's very small, to avoid roundoff errors ans = ans < 0.001 ? 0.0 : ans return ans end # ╔═╡ 30818900-073f-11eb-3f9c-f76873689dc7 radius(A) # ╔═╡ b77c6bfb-f422-4903-a52a-1c71899b10c2 overlaps(radius(A), A) # ╔═╡ 4feb3f2a-07ad-11eb-2ed0-216ffc8a5494 md"Let's create another random invertible 2-by-2 matrix$B$." # ╔═╡ fc2a847a-0740-11eb-2034-9f05722e243e begin B = rand(-2:0.01:2, 2, 2) [A, B] end # ╔═╡ 418e2d42-0786-11eb-295a-29facc97fbf8 begin bound = 1.5 * maximum([maximum(abs.(A)) maximum(abs.(B))]) r1 = radius(A, 0.5) plt_A = scatter( [0], [0], xlim=(-bound,bound), ylim=(-bound,bound), legend = false, label = "origin", aspect_ratio=:equal, title = "Columns of A", xlabel = string("radius = ", r1)) draw(A[1,1], A[2,1], r1, [:blue]) draw(A[1,2], A[2,2], r1, [:red]) r2 = radius(B, 0.6) plt_B = scatter( [0], [0], xlim=(-bound,bound), ylim=(-bound,bound), legend = false, label = "origin", aspect_ratio=:equal, title = "Columns of B", xlabel = string("radius = ", r2)) draw(B[1,1], B[2,1], r2, [:blue]) draw(B[1,2], B[2,2], r2, [:red]) plot(plt_A, plt_B, layout=(1,2)) end # ╔═╡ 681678f2-08cb-11eb-3b9c-3df9fa6aca4c md"Is it possible to traverse a path from$A$to$B$that stays completely inside the set of invertible 2-by-2 matrices? There is certainly a path from$A$to$B$inside the set of *all* 2-by-2 matrices. The simplest such path is the *line* from$A$to$B$: this is the sequence of matrices$A + t(B-A)$as$t \in \mathbb{R}$varies over the numbers in the interval$0\leq t \leq 1$." # ╔═╡ f6b0eb56-08cb-11eb-0f13-8f74518495ca md"For our matrices, give equally spaces points on this line are given by" # ╔═╡ 1f41c914-08cc-11eb-2a52-f7feb5ce49f8 [A + t * (B-A) for t=0:0.25:1] # ╔═╡ 39d3040a-08cc-11eb-3612-6da902c3eec2 md"Some questions we could ask: what does this line look like in terms of our pictures of 2-by-2 matrices as pairs of vectors in$\mathbb{R}^2$? And does this line stay in the set of *invertible* 2-by-2 matrices?" # ╔═╡ c5017644-07a8-11eb-33e9-5f665fef5bbe begin # This struct represents the line from A to B described above. # The value of A is our current position on this line. Base.@kwdef mutable struct InvertibleMatrixPath A::Array{Float64,2} = A B::Array{Float64,2} = B prev_A::Array{Array{Float64,2},1} = [] prev_r::Array{Float64,1} = [] end # Every time the step method is called, we move forward on the line to B. # The catch is that we only move the distance that is guaranteed to keep # us inside the set of invertible matrices. This means that the distance # we travel could become arbitrary small; we could get stuck on the path to B. function step!(ch::InvertibleMatrixPath) r = radius(ch.A, 0.5) push!(ch.prev_r, r) push!(ch.prev_A, ch.A) diff = ch.B - ch.A r = norm(diff) < r ? 1.0 : r / norm(diff) ch.A += diff * r end end # ╔═╡ 47fb9168-08cd-11eb-1bdc-eb832e330f3c md"Using the above struct, we can implement a method that tells us whether the line from A to B does stay inside the set of invertible 2-by-2 matrices." # ╔═╡ 8d7389d2-07a9-11eb-1355-996acad905a3 function line_stays_invertible(A, B) line = InvertibleMatrixPath(A, B, [], []) while true step!(line) if norm(line.A - B) < 10e-8 # we have reached B successfully return true end if line.prev_r[end] == 0 # we have gotten stuck on our path return false end end end # ╔═╡ 796fd045-f5a6-4bfb-9f0e-b12b9c83ef3b md"The following method returns how many steps we take before we know if our line reaches$B$." # ╔═╡ 1fbea058-3a08-48f9-aa50-691dec0a78f7 function path_length(A, B; step_fn=step!) path = InvertibleMatrixPath(A, B, [], []) step_count = 1 while true step_fn(path) if path.prev_r[end] == 0 || norm(path.A - B) < 10e-8 break end step_count += 1 end return step_count end # ╔═╡ 3ef26f56-0742-11eb-26ef-fb5c86b13ea5 md"For the matrices$A$and$B$:" # ╔═╡ df27ca0c-08cd-11eb-2db7-45151197da1d [A, B] # ╔═╡ eb62367e-07a9-11eb-09be-952eb527f1f8 line_stays_invertible(A, B) # ╔═╡ f019ae84-08cd-11eb-11ea-67eb238b9b7b md"The animation below shows the path that results from trying to follow the line from$A$to$B$while staying inside the set of invertible matrices." # ╔═╡ c57aad40-0783-11eb-3e0f-a54699def5dd function animation(A, B; step_fn=step!) bound = 1.5 * maximum([maximum(abs.(A)) maximum(abs.(B))]) path = InvertibleMatrixPath(A, B, [], []) steps = 1.25 * path_length(A, B; step_fn=step_fn) anim = @animate for j=1:steps e = radius(path.A, 0.5) plt = scatter( [0], [0], xlim=(-bound,bound), ylim=(-bound,bound), legend = false, label = "origin", aspect_ratio=:equal, title = "Traversing a path from A to B in space of 2-by-2 matrices", ylabel = line_stays_invertible(A, B) ? "outcome: line connects" : "outcome: line is obstructed", xlabel = string("radius = ", e) ) for i=1:length(path.prev_r) plot!(circle(path.prev_A[i][1,1], path.prev_A[i][2,1], path.prev_r[i]), opacity=.15, fillalpha=0.2, color=[:blue]) plot!(circle(path.prev_A[i][1,2], path.prev_A[i][2,2], path.prev_r[i]), opacity=.15, color=[:red]) end draw(path.A[1,1], path.A[2,1], e, [:blue]) draw(path.A[1,2], path.A[2,2], e, [:red]) quiver!(quiver = ([B[1,1]],[B[2,1]]), [0], [0], color = [:grey],) quiver!(quiver = ([B[1,2]],[B[2,2]]), [0], [0], color = [:grey],) step_fn(path) end every 1 gif(anim, "anim_fps15.gif", fps = 5) end # ╔═╡ b1f86522-08d3-11eb-0e0d-c18c9f382198 animation(A, B) # ╔═╡ e329735e-074b-11eb-236d-e5f04a4ffa81 md"Sometimes the line from$A$to$B$stays in the set of$2\times 2$invertible matrices, sometimes it doesn't. A region of space that contains the line segment connecting any two of its points is called *convex*. The solid sphere is convex. The solid torus (donut shape) is not convex. All regular polygons are convex regions of$\mathbb{R}^2$. Star shapes are not convex. Our experiments show that the set of invertible 2-by-2 matrices is not convex." # ╔═╡ 17923f78-e1cd-4bde-b259-07447df8bea3 md"We can actually predict exactly when the line between two invertible 2-by-2 matrices stays completely inside the set of invertible matrices. There is an easily detected case in which this can never happen." # ╔═╡ 0dfd0afc-08d0-11eb-1b68-333d24004038 md"We saw in the lecture notes that$A = \left[\begin{array}{cc} a & b \\ c & d \end{array}\right]$is invertible if and only if$ad - bc \neq 0$. Next week, we'll see that the number$ad-bc$is called the *determinant* of$A$, and is written$\det A$." # ╔═╡ b666ae90-4550-459d-88bf-27f8cbf60d2c A # ╔═╡ a29e1804-8ed1-4a43-94f7-b8b831187019 A[1, 1] * A[2, 2] - A[1, 2] * A[2, 1] # ╔═╡ 9c196c18-1a9f-482d-8c76-2b4106d6245b # computing the determinant using a built-in function det(A) # ╔═╡ f4b117ea-08d0-11eb-3bbb-192bd2462382 md"When we perturb$A$slightly, the value of$\det A$changes by a small amount. So if$\det A$starts out positive, and we perform a sequence of perturbations that remain in the set of invertible matrices, ending up at some invertible matrix$B$, then$\det B$must also be positive. Traveling along our invertible matrix path from$A$to$B$cannot change the sign of the determinant. We can only change the sign by passing through a non-invertible matrix." # ╔═╡ c6c1d7a8-a49f-4f51-af18-2a53832ed11d function find_matrices_with_determinants_of_opposite_sign(range) while true A = rand(range, 2, 2) B = rand(range, 2, 2) if det(A) * det(B) >= 0 continue end return A, B end end # ╔═╡ 0b42bc8e-42d1-49ac-a2de-70bddd3afe70 X, Y = find_matrices_with_determinants_of_opposite_sign(-10:0.1:10) # ╔═╡ 536e829b-0be7-48d8-b3ce-fb03b98e3845 [det(X), det(Y)] # ╔═╡ 142a4e5f-1d51-45d6-9385-37b96fe45c12 line_stays_invertible(X, Y) # ╔═╡ 7dd60a62-08d1-11eb-05fa-0dc606c07fd9 md"It turns out that any two 2-by-2 matrices whose determinants are both positive or both negative are connected by a path the stays completely inside the set of invertible matrices. However, the line connecting the two matrices may fail to be such a path: the subset of 2-by-2 invertible matrices with positive (or negative) determinant is also not convex. We can check this:" # ╔═╡ a2ff113c-4458-4c73-8a84-1e614829055e function find_reachable(range; samesign=false) while true A = rand(range, 2, 2) B = rand(range, 2, 2) if samesign && det(A) * det(B) < 0 continue end if line_stays_invertible(A, B) return A, B end end end # ╔═╡ 24fc4f6a-08c6-11eb-3c8c-454186761f3b function find_unreachable(range; samesign=false) while true A = rand(range, 2, 2) B = rand(range, 2, 2) if samesign && det(A) * det(B) < 0 continue end if ! line_stays_invertible(A, B) return A, B end end end # ╔═╡ 6b893fb8-08d2-11eb-0238-216af1426550 md"Here are two matrices with determinant of the same sign:" # ╔═╡ cb1084de-08d0-11eb-0ec3-c7daba1f8d83 source, target = find_unreachable(-10:0.01:10; samesign=true) # ╔═╡ 330bcc92-08d1-11eb-136a-7ff0d5615523 [det(source) det(target)] # ╔═╡ 7c18961c-08d2-11eb-15db-4fa7ee06e328 md"However, the line between them does not stay in the set of invertible matrices:" # ╔═╡ 3e7a65c6-08c6-11eb-2ba3-a30de3f58923 line_stays_invertible(source, target) # ╔═╡ 10ad04f2-e9ec-4d9a-a96b-dd4b2f6f529d path_length(source, target) # ╔═╡ 386c38e4-08c6-11eb-03d3-8f4d9e50f13e animation(source, target) # ╔═╡ f8debe6d-5669-4f78-8eb4-31ed4d77ebea md"So if we have two matrices whose determinants are both positive or both negative, how can we tell if every point on the line connecting them in the space of matrices is also invertible? The *trace* of a matrix$A$is the sum of its diagonal entries." # ╔═╡ 6bfcf870-69fc-4953-a4c1-6fdc9fe20cd4 A # ╔═╡ d90d0106-2577-4600-986f-d7bf259ca6ec A[1, 1] + A[2, 2] # ╔═╡ 7b43ea16-8cda-464b-96c3-cabe79041ee4 # computing the trace using a built-in function tr(A) # ╔═╡ 20003261-52eb-4845-9864-87dbc2d1d7ab md"Assume$A$and$B$are 2-by-2 matrices whose determinants are both positive or both negative. Let$M = AB^{-1}$. It turns out that every point on the line from$A$to$B$is invertible if and only if$\det(M)\mathrm{tr}(M) >0 \quad\text{or}\quad 4 \det(M) - \mathrm{tr}(M)^2 > 0.$" # ╔═╡ 27ef7cfd-f044-45a4-acdb-5a3c44855649 function predict_line_stays_invertible(source, target) if det(source) * det(target) <= 0 return false end M = source * target^-1 if tr(M) * det(M) > 0 return true end if 4 * det(M) - tr(M)^2 > 0 return true end return false end # ╔═╡ 8c991270-cc88-41b6-9e45-f85ebefecd21 S1, T1 = find_unreachable(-10:0.01:10) # ╔═╡ b08af805-6e0a-49d6-9789-7b1eca647d41 line_stays_invertible(S1, T1) # ╔═╡ 3169b2f9-9ac5-4dfc-8f6e-745bf1a9134d predict_line_stays_invertible(S1, T1) # ╔═╡ 38ac1249-5b50-4792-bb27-c7e87bf8a1f1 S2, T2 = find_reachable(-10:0.01:10) # ╔═╡ fa41b995-9c1d-4b18-8b4c-d75ba0d52e49 line_stays_invertible(S2, T2) # ╔═╡ 22710f6d-448f-4a34-856b-5c6610dae3d8 predict_line_stays_invertible(S2, T2) # ╔═╡ 8b623ae2-f8d2-4b39-b8d5-d1b24be4a363 md"We will be able to justify why works later in the course. For now, it's a bit of a mystery. After the midterm, we will talk about the *eigenvalues* of a matrix. It turns out that the conditions above are equivalent to requiring that$AB^{-1}$have **no real negative eigenvalues**. When$n>2$, here is a good guess for when the line connecting two invertible$n$-by-$n$matrices$A$and$B$consists entirely of invertible matrices: exactly when$\det(A)$and$\det(B)$are both positive or both negative, and$AB^{-1}\$ has no real negative eigenvalues." # ╔═╡ 00000000-0000-0000-0000-000000000001 PLUTO_PROJECT_TOML_CONTENTS = """ [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8" [compat] Plots = "~1.22.3" PlutoUI = "~0.7.14" """ # ╔═╡ 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" [[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" [[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 = "c2178cfbc0a5a552e16d097fae508f2024de61a3" uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" version = "0.59.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 = "ef49a187604f865f4708c90e3f431890724e9012" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" version = "0.59.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" [[HypertextLiteral]] git-tree-sha1 = "72053798e1be56026b81d4e2682dbe58922e5ec9" uuid = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2" version = "0.9.0" [[IOCapture]] deps = ["Logging", "Random"] git-tree-sha1 = "f7be53659ab06ddc986428d3a9dcc95f6fa6705a" uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" version = "0.2.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" [[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 = "a4b12a1bd2ebade87891ab7e36fdbce582301a92" uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" version = "0.15.6" [[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" [[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 = "a8709b968a1ea6abc2dc1967cb1db6ac9a00dfb6" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" version = "2.0.5" [[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 = "cfbd033def161db9494f86c5d18fbf874e09e514" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" version = "1.22.3" [[PlutoUI]] deps = ["Base64", "Dates", "HypertextLiteral", "IOCapture", "InteractiveUtils", "JSON", "Logging", "Markdown", "Random", "Reexport", "UUIDs"] git-tree-sha1 = "d1fb76655a95bf6ea4348d7197b22e889a4375f4" uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8" version = "0.7.14" [[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", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] git-tree-sha1 = "8cbbc098554648c84f79a463c9ff0fd277144b6c" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" version = "0.33.10" [[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: # ╟─48ddec12-0791-11eb-3278-6769b0507672 # ╠═b2804866-073e-11eb-3822-71c2898c5633 # ╟─472aca7e-0792-11eb-0957-639fae6da505 # ╠═40b79f8e-0731-11eb-1eb4-018915642385 # ╟─bd32c7e0-0730-11eb-1c71-d9a884839001 # ╟─380be1a4-08c8-11eb-1654-837ec5ab9678 # ╟─fd6fa06e-0730-11eb-229e-21f0a63e8feb # ╟─872cf14e-0793-11eb-2909-9b4ad309de82 # ╟─de53a7d0-08c9-11eb-2b08-d9a5bbf5c75c # ╟─1185730a-0739-11eb-3619-1b4ee5874f4a # ╠═11c57a80-073a-11eb-321d-578078ffcdd4 # ╟─9b8f0c96-0793-11eb-207b-cd58e584a208 # ╟─d481fb8a-073e-11eb-15a4-9be4957b67a3 # ╠═30818900-073f-11eb-3f9c-f76873689dc7 # ╠═b77c6bfb-f422-4903-a52a-1c71899b10c2 # ╟─4feb3f2a-07ad-11eb-2ed0-216ffc8a5494 # ╠═fc2a847a-0740-11eb-2034-9f05722e243e # ╟─418e2d42-0786-11eb-295a-29facc97fbf8 # ╟─681678f2-08cb-11eb-3b9c-3df9fa6aca4c # ╟─f6b0eb56-08cb-11eb-0f13-8f74518495ca # ╠═1f41c914-08cc-11eb-2a52-f7feb5ce49f8 # ╟─39d3040a-08cc-11eb-3612-6da902c3eec2 # ╟─c5017644-07a8-11eb-33e9-5f665fef5bbe # ╟─47fb9168-08cd-11eb-1bdc-eb832e330f3c # ╠═8d7389d2-07a9-11eb-1355-996acad905a3 # ╟─796fd045-f5a6-4bfb-9f0e-b12b9c83ef3b # ╟─1fbea058-3a08-48f9-aa50-691dec0a78f7 # ╟─3ef26f56-0742-11eb-26ef-fb5c86b13ea5 # ╠═df27ca0c-08cd-11eb-2db7-45151197da1d # ╠═eb62367e-07a9-11eb-09be-952eb527f1f8 # ╟─f019ae84-08cd-11eb-11ea-67eb238b9b7b # ╟─c57aad40-0783-11eb-3e0f-a54699def5dd # ╠═b1f86522-08d3-11eb-0e0d-c18c9f382198 # ╟─e329735e-074b-11eb-236d-e5f04a4ffa81 # ╟─17923f78-e1cd-4bde-b259-07447df8bea3 # ╟─0dfd0afc-08d0-11eb-1b68-333d24004038 # ╠═b666ae90-4550-459d-88bf-27f8cbf60d2c # ╠═a29e1804-8ed1-4a43-94f7-b8b831187019 # ╠═9c196c18-1a9f-482d-8c76-2b4106d6245b # ╟─f4b117ea-08d0-11eb-3bbb-192bd2462382 # ╠═c6c1d7a8-a49f-4f51-af18-2a53832ed11d # ╠═0b42bc8e-42d1-49ac-a2de-70bddd3afe70 # ╠═536e829b-0be7-48d8-b3ce-fb03b98e3845 # ╠═142a4e5f-1d51-45d6-9385-37b96fe45c12 # ╟─7dd60a62-08d1-11eb-05fa-0dc606c07fd9 # ╠═a2ff113c-4458-4c73-8a84-1e614829055e # ╠═24fc4f6a-08c6-11eb-3c8c-454186761f3b # ╟─6b893fb8-08d2-11eb-0238-216af1426550 # ╠═cb1084de-08d0-11eb-0ec3-c7daba1f8d83 # ╠═330bcc92-08d1-11eb-136a-7ff0d5615523 # ╟─7c18961c-08d2-11eb-15db-4fa7ee06e328 # ╠═3e7a65c6-08c6-11eb-2ba3-a30de3f58923 # ╠═10ad04f2-e9ec-4d9a-a96b-dd4b2f6f529d # ╠═386c38e4-08c6-11eb-03d3-8f4d9e50f13e # ╟─f8debe6d-5669-4f78-8eb4-31ed4d77ebea # ╠═6bfcf870-69fc-4953-a4c1-6fdc9fe20cd4 # ╠═d90d0106-2577-4600-986f-d7bf259ca6ec # ╠═7b43ea16-8cda-464b-96c3-cabe79041ee4 # ╟─20003261-52eb-4845-9864-87dbc2d1d7ab # ╠═27ef7cfd-f044-45a4-acdb-5a3c44855649 # ╠═8c991270-cc88-41b6-9e45-f85ebefecd21 # ╠═b08af805-6e0a-49d6-9789-7b1eca647d41 # ╠═3169b2f9-9ac5-4dfc-8f6e-745bf1a9134d # ╠═38ac1249-5b50-4792-bb27-c7e87bf8a1f1 # ╠═fa41b995-9c1d-4b18-8b4c-d75ba0d52e49 # ╠═22710f6d-448f-4a34-856b-5c6610dae3d8 # ╟─8b623ae2-f8d2-4b39-b8d5-d1b24be4a363 # ╟─00000000-0000-0000-0000-000000000001 # ╟─00000000-0000-0000-0000-000000000002