Julia Micrograd implementation with Multi-layer perceptrons + backprop
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### A Pluto.jl notebook ### | |
# v0.19.26 | |
using Markdown | |
using InteractiveUtils | |
# ╔═╡ 9d7b2fcb-7155-4636-97f6-4401b6f561af | |
using GraphViz | |
# ╔═╡ 8d04e8a2-5a40-11ee-1678-757abfdac18b | |
Base.@kwdef mutable struct Value | |
scalar::Real = 0.0 | |
grad::Real = 0.0 | |
back::Function = (() -> Nothing) | |
children::Tuple = () | |
operation::Union{Nothing,Symbol} = nothing | |
label::Union{Nothing,Symbol} = nothing | |
end | |
# ╔═╡ 5d70a89c-7ff3-401d-99cf-85a342d4a0cd | |
begin | |
import Base | |
function Base.:+(a::Value, b::Value) | |
out = Value(scalar=a.scalar + b.scalar, children=(a,b), operation=:+) | |
out.back = function() | |
a.grad += 1.0 * out.grad | |
b.grad += 1.0 * out.grad | |
end | |
return out | |
end | |
function Base.:*(a::Value, b::Value) | |
out = Value(scalar=a.scalar * b.scalar, children=(a,b), operation=:*) | |
out.back = function() | |
a.grad += (b.scalar) * out.grad | |
b.grad += (a.scalar) * out.grad | |
end | |
return out | |
end | |
function Base.show(io::IO, v::Value) | |
println(io,"Value(scalar=$(v.scalar))") | |
end | |
# Type promotion | |
Base.:*(a::Value, b::Real) = a * Value(scalar=b) | |
Base.:*(a::Real, b::Value) = b * a | |
Base.:+(a::Value, b::Real) = a + Value(scalar=b) | |
Base.:+(a::Real, b::Value) = b + a | |
function tanh(v::Value) | |
x = v.scalar | |
t = (exp(2x) - 1) / (exp(2x) + 1) | |
out = Value(scalar=t, children=(v, ), operation=:tanh) | |
out.back = function() | |
v.grad += (1 - t^2) * out.grad | |
end | |
return out | |
end | |
function backprop(v::Value) | |
topo = [] | |
visited = Set() | |
function build_topo(root) | |
push!(visited, root) | |
for child in root.children | |
build_topo(child) | |
end | |
push!(topo, root) | |
end | |
build_topo(v) | |
v.grad = 1.0 | |
for node in reverse(topo) | |
node.back() | |
end | |
end | |
end | |
# ╔═╡ 8e6f19dd-9a2c-436e-9722-ec51f92bab4f | |
begin | |
using Distributions | |
mutable struct Neuron | |
weights::Vector{Value} | |
bias::Value | |
end | |
function Neuron(nin::Int) | |
weights = [Value(scalar=rand(Uniform(-1,1))) for _ in 1:nin] | |
bias = Value(scalar=rand(Uniform(-1,1))) | |
Neuron(weights, bias) | |
end | |
function (n::Neuron)(x::Vector) | |
# wx + b | |
act = sum(n.weights .* x) + n.bias | |
out = tanh(act) | |
return out | |
end | |
end | |
# ╔═╡ fc5c2efc-80ec-4e82-a4ea-b7cf2a5822f4 | |
begin | |
mutable struct Layer | |
neurons::Vector{Neuron} | |
end | |
Layer(nin::Int, nout::Int) = Layer([Neuron(nin) for _ in 1:nout]) | |
Base.length(l::Layer) = length(l.neurons) | |
function (l::Layer)(x::Vector) | |
outs = [n(x) for n in l.neurons] | |
if length(outs) == 1 | |
return outs[1] | |
else | |
return outs | |
end | |
end | |
end | |
# ╔═╡ bfeb3df2-6fe5-484b-a7c7-0bf9f571e02b | |
begin | |
mutable struct MLP | |
layers::Vector{Layer} | |
end | |
function MLP(nin::Int, nouts::Vector{Int}) | |
sz = vcat(nin, nouts) | |
layers = [Layer(sz[i], sz[i+1]) for i in 1:length(nouts)] | |
MLP(layers) | |
end | |
function (mlp::MLP)(x::Vector) | |
for layer in mlp.layers | |
x = layer(x) | |
end | |
return x | |
end | |
end | |
# ╔═╡ 321b3c58-3813-4ec6-985d-d6d4477ca94c | |
begin | |
x = [2.0, 3.0, -1.0] | |
n = MLP(3, [4,4,1]) | |
n(x) | |
end | |
# ╔═╡ bb0f7b4b-4852-4f7d-b388-b61b01cc3217 | |
function trace(root) | |
nodes, edges = Set(), Set() | |
function build(v) | |
if v ∉ nodes | |
push!(nodes, v) | |
for child in v.children | |
push!(edges, (child, v)) | |
build(child) | |
end | |
end | |
end | |
build(root) | |
return nodes, edges | |
end | |
# ╔═╡ 7e2d392f-d373-4e88-b81d-72ec2a8b4392 | |
function build_dot(root) | |
g = """digraph { | |
rankdir="LR" | |
""" | |
nodes, edges = trace(root) | |
for n in nodes | |
uid = hash(n) | |
g = g * """\n"$uid" [label = "$(n.label) | data $(n.scalar) | grad $(n.grad)" shape="record"]""" | |
if n.operation != nothing | |
opname = "$uid$(n.operation)" | |
g = g * """\n"$opname" [label = "$(n.operation)"]""" | |
g = g * """\n"$opname" -> "$uid" """ | |
end | |
end | |
for (n1,n2) in edges | |
g = g * """\n"$(hash(n1))" -> "$(string(hash(n2)) * string(n2.operation))" """ | |
end | |
g = g * "\n}" | |
f = tempname()*".dot" | |
write(f, g) | |
return GraphViz.load(open(f)) | |
end | |
# ╔═╡ 944fb764-b168-47ab-aee9-fab532b99ba0 | |
build_dot(n(x)) | |
# ╔═╡ 00000000-0000-0000-0000-000000000001 | |
PLUTO_PROJECT_TOML_CONTENTS = """ | |
[deps] | |
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" | |
GraphViz = "f526b714-d49f-11e8-06ff-31ed36ee7ee0" | |
[compat] | |
Distributions = "~0.25.100" | |
GraphViz = "~0.2.0" | |
""" | |
# ╔═╡ 00000000-0000-0000-0000-000000000002 | |
PLUTO_MANIFEST_TOML_CONTENTS = """ | |
# This file is machine-generated - editing it directly is not advised | |
julia_version = "1.9.1" | |
manifest_format = "2.0" | |
project_hash = "4c716d337baf7798a8f20b2acbe649fb20cd9acb" | |
[[deps.ArgTools]] | |
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" | |
version = "1.1.1" | |
[[deps.Artifacts]] | |
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" | |
[[deps.Base64]] | |
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" | |
[[deps.Bzip2_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] | |
git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" | |
uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" | |
version = "1.0.8+0" | |
[[deps.Cairo_jll]] | |
deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] | |
git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" | |
uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" | |
version = "1.16.1+1" | |
[[deps.Calculus]] | |
deps = ["LinearAlgebra"] | |
git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" | |
uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" | |
version = "0.5.1" | |
[[deps.Compat]] | |
deps = ["UUIDs"] | |
git-tree-sha1 = "e460f044ca8b99be31d35fe54fc33a5c33dd8ed7" | |
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" | |
version = "4.9.0" | |
weakdeps = ["Dates", "LinearAlgebra"] | |
[deps.Compat.extensions] | |
CompatLinearAlgebraExt = "LinearAlgebra" | |
[[deps.CompilerSupportLibraries_jll]] | |
deps = ["Artifacts", "Libdl"] | |
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" | |
version = "1.0.2+0" | |
[[deps.DataAPI]] | |
git-tree-sha1 = "8da84edb865b0b5b0100c0666a9bc9a0b71c553c" | |
uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" | |
version = "1.15.0" | |
[[deps.DataStructures]] | |
deps = ["Compat", "InteractiveUtils", "OrderedCollections"] | |
git-tree-sha1 = "3dbd312d370723b6bb43ba9d02fc36abade4518d" | |
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" | |
version = "0.18.15" | |
[[deps.Dates]] | |
deps = ["Printf"] | |
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" | |
[[deps.Distributions]] | |
deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns", "Test"] | |
git-tree-sha1 = "938fe2981db009f531b6332e31c58e9584a2f9bd" | |
uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" | |
version = "0.25.100" | |
[deps.Distributions.extensions] | |
DistributionsChainRulesCoreExt = "ChainRulesCore" | |
DistributionsDensityInterfaceExt = "DensityInterface" | |
[deps.Distributions.weakdeps] | |
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" | |
DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" | |
[[deps.DocStringExtensions]] | |
deps = ["LibGit2"] | |
git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" | |
uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" | |
version = "0.9.3" | |
[[deps.Downloads]] | |
deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] | |
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" | |
version = "1.6.0" | |
[[deps.DualNumbers]] | |
deps = ["Calculus", "NaNMath", "SpecialFunctions"] | |
git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" | |
uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" | |
version = "0.6.8" | |
[[deps.Expat_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl"] | |
git-tree-sha1 = "4558ab818dcceaab612d1bb8c19cee87eda2b83c" | |
uuid = "2e619515-83b5-522b-bb60-26c02a35a201" | |
version = "2.5.0+0" | |
[[deps.FileIO]] | |
deps = ["Pkg", "Requires", "UUIDs"] | |
git-tree-sha1 = "299dc33549f68299137e51e6d49a13b5b1da9673" | |
uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" | |
version = "1.16.1" | |
[[deps.FileWatching]] | |
uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" | |
[[deps.FillArrays]] | |
deps = ["LinearAlgebra", "Random"] | |
git-tree-sha1 = "a20eaa3ad64254c61eeb5f230d9306e937405434" | |
uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" | |
version = "1.6.1" | |
weakdeps = ["SparseArrays", "Statistics"] | |
[deps.FillArrays.extensions] | |
FillArraysSparseArraysExt = "SparseArrays" | |
FillArraysStatisticsExt = "Statistics" | |
[[deps.Fontconfig_jll]] | |
deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] | |
git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" | |
uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" | |
version = "2.13.93+0" | |
[[deps.FreeType2_jll]] | |
deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] | |
git-tree-sha1 = "d8db6a5a2fe1381c1ea4ef2cab7c69c2de7f9ea0" | |
uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" | |
version = "2.13.1+0" | |
[[deps.FriBidi_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] | |
git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" | |
uuid = "559328eb-81f9-559d-9380-de523a88c83c" | |
version = "1.0.10+0" | |
[[deps.Gettext_jll]] | |
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] | |
git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" | |
uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" | |
version = "0.21.0+0" | |
[[deps.Glib_jll]] | |
deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] | |
git-tree-sha1 = "e94c92c7bf4819685eb80186d51c43e71d4afa17" | |
uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" | |
version = "2.76.5+0" | |
[[deps.GraphViz]] | |
deps = ["FileIO", "Graphviz_jll", "Requires"] | |
git-tree-sha1 = "da5580b236c5b6bb634e96ca35dcd7eaeeac1bd1" | |
uuid = "f526b714-d49f-11e8-06ff-31ed36ee7ee0" | |
version = "0.2.0" | |
[[deps.Graphite2_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] | |
git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" | |
uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" | |
version = "1.3.14+0" | |
[[deps.Graphviz_jll]] | |
deps = ["Artifacts", "Cairo_jll", "Expat_jll", "JLLWrappers", "Libdl", "Pango_jll", "Pkg"] | |
git-tree-sha1 = "a5d45833dda71048117e8a9828bef75c03b18b1c" | |
uuid = "3c863552-8265-54e4-a6dc-903eb78fde85" | |
version = "2.50.0+1" | |
[[deps.HarfBuzz_jll]] | |
deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] | |
git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" | |
uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" | |
version = "2.8.1+1" | |
[[deps.HypergeometricFunctions]] | |
deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] | |
git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" | |
uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" | |
version = "0.3.23" | |
[[deps.InteractiveUtils]] | |
deps = ["Markdown"] | |
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" | |
[[deps.IrrationalConstants]] | |
git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" | |
uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" | |
version = "0.2.2" | |
[[deps.JLLWrappers]] | |
deps = ["Artifacts", "Preferences"] | |
git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" | |
uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" | |
version = "1.5.0" | |
[[deps.LLVMOpenMP_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] | |
git-tree-sha1 = "f689897ccbe049adb19a065c495e75f372ecd42b" | |
uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" | |
version = "15.0.4+0" | |
[[deps.LZO_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] | |
git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6" | |
uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" | |
version = "2.10.1+0" | |
[[deps.LibCURL]] | |
deps = ["LibCURL_jll", "MozillaCACerts_jll"] | |
uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" | |
version = "0.6.3" | |
[[deps.LibCURL_jll]] | |
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] | |
uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" | |
version = "7.84.0+0" | |
[[deps.LibGit2]] | |
deps = ["Base64", "NetworkOptions", "Printf", "SHA"] | |
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" | |
[[deps.LibSSH2_jll]] | |
deps = ["Artifacts", "Libdl", "MbedTLS_jll"] | |
uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" | |
version = "1.10.2+0" | |
[[deps.Libdl]] | |
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" | |
[[deps.Libffi_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] | |
git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" | |
uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" | |
version = "3.2.2+1" | |
[[deps.Libgcrypt_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"] | |
git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae" | |
uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" | |
version = "1.8.7+0" | |
[[deps.Libgpg_error_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] | |
git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9" | |
uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" | |
version = "1.42.0+0" | |
[[deps.Libiconv_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl"] | |
git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" | |
uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" | |
version = "1.17.0+0" | |
[[deps.Libmount_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] | |
git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" | |
uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" | |
version = "2.35.0+0" | |
[[deps.Libuuid_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] | |
git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" | |
uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" | |
version = "2.36.0+0" | |
[[deps.LinearAlgebra]] | |
deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] | |
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" | |
[[deps.LogExpFunctions]] | |
deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] | |
git-tree-sha1 = "7d6dd4e9212aebaeed356de34ccf262a3cd415aa" | |
uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" | |
version = "0.3.26" | |
[deps.LogExpFunctions.extensions] | |
LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" | |
LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" | |
LogExpFunctionsInverseFunctionsExt = "InverseFunctions" | |
[deps.LogExpFunctions.weakdeps] | |
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" | |
ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" | |
InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" | |
[[deps.Logging]] | |
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" | |
[[deps.Markdown]] | |
deps = ["Base64"] | |
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" | |
[[deps.MbedTLS_jll]] | |
deps = ["Artifacts", "Libdl"] | |
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" | |
version = "2.28.2+0" | |
[[deps.Missings]] | |
deps = ["DataAPI"] | |
git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272" | |
uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" | |
version = "1.1.0" | |
[[deps.MozillaCACerts_jll]] | |
uuid = "14a3606d-f60d-562e-9121-12d972cd8159" | |
version = "2022.10.11" | |
[[deps.NaNMath]] | |
deps = ["OpenLibm_jll"] | |
git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" | |
uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" | |
version = "1.0.2" | |
[[deps.NetworkOptions]] | |
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" | |
version = "1.2.0" | |
[[deps.OpenBLAS_jll]] | |
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] | |
uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" | |
version = "0.3.21+4" | |
[[deps.OpenLibm_jll]] | |
deps = ["Artifacts", "Libdl"] | |
uuid = "05823500-19ac-5b8b-9628-191a04bc5112" | |
version = "0.8.1+0" | |
[[deps.OpenSpecFun_jll]] | |
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] | |
git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" | |
uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" | |
version = "0.5.5+0" | |
[[deps.OrderedCollections]] | |
git-tree-sha1 = "2e73fe17cac3c62ad1aebe70d44c963c3cfdc3e3" | |
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" | |
version = "1.6.2" | |
[[deps.PCRE2_jll]] | |
deps = ["Artifacts", "Libdl"] | |
uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" | |
version = "10.42.0+0" | |
[[deps.PDMats]] | |
deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] | |
git-tree-sha1 = "3129380a93388e5062e946974246fe3f2e7c73e2" | |
uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" | |
version = "0.11.18" | |
[[deps.Pango_jll]] | |
deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] | |
git-tree-sha1 = "4745216e94f71cb768d58330b059c9b76f32cb66" | |
uuid = "36c8627f-9965-5494-a995-c6b170f724f3" | |
version = "1.50.14+0" | |
[[deps.Pixman_jll]] | |
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] | |
git-tree-sha1 = "64779bc4c9784fee475689a1752ef4d5747c5e87" | |
uuid = "30392449-352a-5448-841d-b1acce4e97dc" | |
version = "0.42.2+0" | |
[[deps.Pkg]] | |
deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] | |
uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" | |
version = "1.9.0" | |
[[deps.Preferences]] | |
deps = ["TOML"] | |
git-tree-sha1 = "00805cd429dcb4870060ff49ef443486c262e38e" | |
uuid = "21216c6a-2e73-6563-6e65-726566657250" | |
version = "1.4.1" | |
[[deps.Printf]] | |
deps = ["Unicode"] | |
uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" | |
[[deps.QuadGK]] | |
deps = ["DataStructures", "LinearAlgebra"] | |
git-tree-sha1 = "eeab25344bf9901146c0200a7ca64ea479f8bf5c" | |
uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" | |
version = "2.9.0" | |
[[deps.REPL]] | |
deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] | |
uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" | |
[[deps.Random]] | |
deps = ["SHA", "Serialization"] | |
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" | |
[[deps.Reexport]] | |
git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" | |
uuid = "189a3867-3050-52da-a836-e630ba90ab69" | |
version = "1.2.2" | |
[[deps.Requires]] | |
deps = ["UUIDs"] | |
git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" | |
uuid = "ae029012-a4dd-5104-9daa-d747884805df" | |
version = "1.3.0" | |
[[deps.Rmath]] | |
deps = ["Random", "Rmath_jll"] | |
git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" | |
uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" | |
version = "0.7.1" | |
[[deps.Rmath_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] | |
git-tree-sha1 = "6ed52fdd3382cf21947b15e8870ac0ddbff736da" | |
uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" | |
version = "0.4.0+0" | |
[[deps.SHA]] | |
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" | |
version = "0.7.0" | |
[[deps.Serialization]] | |
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" | |
[[deps.Sockets]] | |
uuid = "6462fe0b-24de-5631-8697-dd941f90decc" | |
[[deps.SortingAlgorithms]] | |
deps = ["DataStructures"] | |
git-tree-sha1 = "c60ec5c62180f27efea3ba2908480f8055e17cee" | |
uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" | |
version = "1.1.1" | |
[[deps.SparseArrays]] | |
deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] | |
uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" | |
[[deps.SpecialFunctions]] | |
deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] | |
git-tree-sha1 = "e2cfc4012a19088254b3950b85c3c1d8882d864d" | |
uuid = "276daf66-3868-5448-9aa4-cd146d93841b" | |
version = "2.3.1" | |
[deps.SpecialFunctions.extensions] | |
SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" | |
[deps.SpecialFunctions.weakdeps] | |
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" | |
[[deps.Statistics]] | |
deps = ["LinearAlgebra", "SparseArrays"] | |
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" | |
version = "1.9.0" | |
[[deps.StatsAPI]] | |
deps = ["LinearAlgebra"] | |
git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" | |
uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" | |
version = "1.7.0" | |
[[deps.StatsBase]] | |
deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] | |
git-tree-sha1 = "75ebe04c5bed70b91614d684259b661c9e6274a4" | |
uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" | |
version = "0.34.0" | |
[[deps.StatsFuns]] | |
deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] | |
git-tree-sha1 = "f625d686d5a88bcd2b15cd81f18f98186fdc0c9a" | |
uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" | |
version = "1.3.0" | |
[deps.StatsFuns.extensions] | |
StatsFunsChainRulesCoreExt = "ChainRulesCore" | |
StatsFunsInverseFunctionsExt = "InverseFunctions" | |
[deps.StatsFuns.weakdeps] | |
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" | |
InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" | |
[[deps.SuiteSparse]] | |
deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] | |
uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" | |
[[deps.SuiteSparse_jll]] | |
deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"] | |
uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" | |
version = "5.10.1+6" | |
[[deps.TOML]] | |
deps = ["Dates"] | |
uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" | |
version = "1.0.3" | |
[[deps.Tar]] | |
deps = ["ArgTools", "SHA"] | |
uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" | |
version = "1.10.0" | |
[[deps.Test]] | |
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] | |
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" | |
[[deps.UUIDs]] | |
deps = ["Random", "SHA"] | |
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" | |
[[deps.Unicode]] | |
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" | |
[[deps.XML2_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] | |
git-tree-sha1 = "04a51d15436a572301b5abbb9d099713327e9fc4" | |
uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" | |
version = "2.10.4+0" | |
[[deps.XSLT_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] | |
git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" | |
uuid = "aed1982a-8fda-507f-9586-7b0439959a61" | |
version = "1.1.34+0" | |
[[deps.Xorg_libX11_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] | |
git-tree-sha1 = "afead5aba5aa507ad5a3bf01f58f82c8d1403495" | |
uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" | |
version = "1.8.6+0" | |
[[deps.Xorg_libXau_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl"] | |
git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8" | |
uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" | |
version = "1.0.11+0" | |
[[deps.Xorg_libXdmcp_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl"] | |
git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7" | |
uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" | |
version = "1.1.4+0" | |
[[deps.Xorg_libXext_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] | |
git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" | |
uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" | |
version = "1.3.4+4" | |
[[deps.Xorg_libXrender_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] | |
git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" | |
uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" | |
version = "0.9.10+4" | |
[[deps.Xorg_libpthread_stubs_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl"] | |
git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9" | |
uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" | |
version = "0.1.1+0" | |
[[deps.Xorg_libxcb_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] | |
git-tree-sha1 = "b4bfde5d5b652e22b9c790ad00af08b6d042b97d" | |
uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" | |
version = "1.15.0+0" | |
[[deps.Xorg_xtrans_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl"] | |
git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77" | |
uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" | |
version = "1.5.0+0" | |
[[deps.Zlib_jll]] | |
deps = ["Libdl"] | |
uuid = "83775a58-1f1d-513f-b197-d71354ab007a" | |
version = "1.2.13+0" | |
[[deps.libblastrampoline_jll]] | |
deps = ["Artifacts", "Libdl"] | |
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" | |
version = "5.8.0+0" | |
[[deps.libpng_jll]] | |
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] | |
git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" | |
uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" | |
version = "1.6.38+0" | |
[[deps.nghttp2_jll]] | |
deps = ["Artifacts", "Libdl"] | |
uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" | |
version = "1.48.0+0" | |
[[deps.p7zip_jll]] | |
deps = ["Artifacts", "Libdl"] | |
uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" | |
version = "17.4.0+0" | |
""" | |
# ╔═╡ Cell order: | |
# ╠═8d04e8a2-5a40-11ee-1678-757abfdac18b | |
# ╠═5d70a89c-7ff3-401d-99cf-85a342d4a0cd | |
# ╠═8e6f19dd-9a2c-436e-9722-ec51f92bab4f | |
# ╠═fc5c2efc-80ec-4e82-a4ea-b7cf2a5822f4 | |
# ╠═bfeb3df2-6fe5-484b-a7c7-0bf9f571e02b | |
# ╠═321b3c58-3813-4ec6-985d-d6d4477ca94c | |
# ╠═9d7b2fcb-7155-4636-97f6-4401b6f561af | |
# ╟─bb0f7b4b-4852-4f7d-b388-b61b01cc3217 | |
# ╟─7e2d392f-d373-4e88-b81d-72ec2a8b4392 | |
# ╠═944fb764-b168-47ab-aee9-fab532b99ba0 | |
# ╟─00000000-0000-0000-0000-000000000001 | |
# ╟─00000000-0000-0000-0000-000000000002 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment