From 6bf83cc55293cbd44545933204c12395a8879c27 Mon Sep 17 00:00:00 2001 From: GiggleLiu Date: Tue, 14 Jun 2022 13:16:15 -0400 Subject: [PATCH 1/7] git push luxor --- Project.toml | 1 + src/visualize.jl | 31 ++++++++++++++++++------------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/Project.toml b/Project.toml index 784a27e6..1a0c9c61 100644 --- a/Project.toml +++ b/Project.toml @@ -13,6 +13,7 @@ Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b" FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +Luxor = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" Mods = "7475f97c-0381-53b1-977b-4c60186c8d62" OMEinsum = "ebe7aa44-baf0-506c-a96f-8464559b3922" OMEinsumContractionOrders = "6f22d1fd-8eed-4bb7-9776-e7d684900715" diff --git a/src/visualize.jl b/src/visualize.jl index c960c86a..ef5e23d4 100644 --- a/src/visualize.jl +++ b/src/visualize.jl @@ -1,4 +1,4 @@ -using Compose, Viznet, Cairo +using Luxor struct Rescaler{T} xmin::T @@ -52,10 +52,6 @@ function get_rescaler(locs::AbstractVector{<:Tuple}, pad) return Rescaler(promote(xmin, xmax, ymin, ymax, pad)...) end -default_vertex_style(scale, stroke_color, fill_color) = compose(Compose.context(), Viznet.nodestyle(:default, r=0.15cm*scale), Compose.stroke(stroke_color), fill(fill_color), linewidth(0.3mm*scale)) -default_text_style(scale, color) = Viznet.textstyle(:default, fontsize(4pt*scale), fill(color)) -default_edge_style(scale, color) = Viznet.bondstyle(:default, Compose.stroke(color), linewidth(0.3mm*scale)) - """ show_graph(graph; locs=spring_layout(graph), @@ -164,33 +160,42 @@ function _viz_atoms(locs, edges, vertex_colors, edge_colors, texts, config, resc rescale = rescale * config.image_size * config.scale * 1.6 if vertex_colors !== nothing @assert length(locs) == length(vertex_colors) - vertex_styles = [default_vertex_style(rescale, config.vertex_stroke_color, color) for color in vertex_colors] else - vertex_styles = fill(default_vertex_style(rescale, config.vertex_stroke_color, config.vertex_fill_color), length(locs)) + vertex_colors = fill(config.vertex_fill_color, length(locs)) end if edge_colors !== nothing @assert length(edges) == length(edge_colors) - edge_styles = [default_edge_style(rescale, color) for color in edge_colors] else - edge_styles = fill(default_edge_style(rescale, config.edge_color), length(edges)) + edge_colors = fill(config.edge_color, length(edges)) end if texts !== nothing @assert length(locs) == length(texts) end - text_style = default_text_style(rescale, config.vertex_text_color) img1 = Viznet.canvas() do for (i, vertex) in enumerate(locs) - vertex_styles[i] >> vertex + draw_vertex(vertex...; fill_color=vertex_colors[i], stroke_color=config.vertex_stroke_color, r=0.15cm*rescale, line_width=0.3mm*rescale) if config.vertex_text_color !== "transparent" - text_style >> (vertex, texts === nothing ? "$i" : texts[i]) + draw_text(vertex..., texts === nothing ? "$i" : texts[i]; fontsize=4pt*rescale, color=config.vertex_text_color) end end for (k, (i, j)) in enumerate(edges) edge_styles[k] >> (locs[i], locs[j]) + draw_edge(locs...; color=edge_colors[k], line_width = 0.3mm*rescale) end end Compose.compose(Compose.context(), img1) end +draw_text(i, j, text; fontsize, color) +function draw_edge(i, j; color, line_width) + setline(line_width) +end +function draw_vertex(x, y; stroke_color, fill_color, line_width, r) + setcolor(fill_color) + circle(Point(x, y), r, :fill) + setline(line_width) + setcolor(stroke_color) + circle(Point(x, y), r, :stroke) +end """ Spring layout for graph plotting, returns a vector of vertex locations. @@ -293,7 +298,7 @@ Keyword arguments * `vertex_configs` is an iterator of bit strings for specifying vertex configurations, e.g. a [`ConfigEnumerator`](@ref) instance. * `edge_configs` is an iterator of bit strings for specifying edge configurations. * `texts` is a vector of strings for labeling vertices. -* `format` is the output format, which can be `Compose.SVG`, `Compose.PNG`, `Compose.PDF` et al. Check the [Compose documentation](http://giovineitalia.github.io/Compose.jl/latest/) for details. +* `format` is the output format, which can be `"svg"` or `"png"`. Check the [Luxor documentation]() for details. * `io` can be `nothing` for the direct output, or a filename to saving to a file. For direct output, you will need a VSCode editor, an Atom editor, a Pluto notebook or a Jupyter notebook to display the image. Extra keyword arguments From 3dfe5e5342593f76101e7c9f1a7746da4b405446 Mon Sep 17 00:00:00 2001 From: GiggleLiu Date: Thu, 16 Jun 2022 02:24:53 -0400 Subject: [PATCH 2/7] luxor ok --- Project.toml | 2 - notebooks/dugg.jl | 1281 ++++++++++++++++++++++++++++++++++++ notebooks/latexexample.svg | 239 +++++++ notebooks/luxor.jl | 1029 +++++++++++++++++++++++++++++ src/visualize.jl | 267 ++++---- 5 files changed, 2664 insertions(+), 154 deletions(-) create mode 100644 notebooks/dugg.jl create mode 100644 notebooks/latexexample.svg create mode 100644 notebooks/luxor.jl diff --git a/Project.toml b/Project.toml index 1a0c9c61..576b24e4 100644 --- a/Project.toml +++ b/Project.toml @@ -26,7 +26,6 @@ SIMDTypes = "94e857df-77ce-4151-89e5-788b33177be4" Serialization = "9e88b42a-f829-5b0c-bbe9-9e923198166b" StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" TropicalNumbers = "b3a74e9c-7526-4576-a4eb-79c0d4c32334" -Viznet = "52a3aca4-6234-47fd-b74a-806bdf78ede9" [compat] AbstractTrees = "0.3, 0.4" @@ -44,7 +43,6 @@ Requires = "1" SIMDTypes = "0.1" StatsBase = "0.33" TropicalNumbers = "0.4, 0.5" -Viznet = "0.3" julia = "1" [extras] diff --git a/notebooks/dugg.jl b/notebooks/dugg.jl new file mode 100644 index 00000000..ee85c737 --- /dev/null +++ b/notebooks/dugg.jl @@ -0,0 +1,1281 @@ +### A Pluto.jl notebook ### +# v0.19.8 + +using Markdown +using InteractiveUtils + +# ╔═╡ c37be80e-e9ba-11ec-30ea-43b3344b86ac +using GenericTensorNetworks + +# ╔═╡ cc58e2d2-1552-405d-9555-0e5dc31c47ab +using UnitDiskMapping, Graphs + +# ╔═╡ b6d1e7b1-b40e-4166-94f1-f8eea3a01a7b +using Luxor + +# ╔═╡ 5faa573e-c3d8-48b3-a1cd-fd86f3f5b9b6 +using MathTeXEngine + +# ╔═╡ cccc014d-b5e9-4e31-9860-af1b4f052e8e +locs = [(0, 0), (0, 1), (0, 2), (0, 3), (1,1), (1,3), (1,4), (2, 0), (2,2), (2,4), (3, 0), (3, 1), (3,2), (3,3), (4,0), (4,2), (4,4)] + +# ╔═╡ 1c4f6598-630d-4db2-b571-033682094ce8 +graph = unit_disk_graph(locs, 1.5) + +# ╔═╡ 6770c854-b595-4073-9ce9-6a9c96eafa30 +show_graph(graph; locs=[(j, -i) for (i, j) in locs], texts=fill("", length(locs))) + +# ╔═╡ 694628f3-27b3-493a-a787-dc95fcce8163 +res1 = solve(IndependentSet(graph), SingleConfigMax()) + +# ╔═╡ 48cf19bd-6485-4b7e-b6a6-b9bb90841f22 +show_graph(graph; locs=[(j, -i) for (i, j) in locs], texts=fill("", length(locs)), vertex_colors=[iszero(c) ? "white" : "red" for c in res1[].c.data]) + +# ╔═╡ bb39a1e8-8dca-493c-8c13-f022cdf6afe1 +res2 = solve(IndependentSet(graph), ConfigsMax()) + +# ╔═╡ 7d9b39df-44f1-42a4-80aa-4cbf07d9f480 +show_gallery(graph, (1,4); locs=[(j, -i) for (i, j) in locs], texts=fill("", length(locs)), vertex_configs=res2[].c.data, image_size=5) + +# ╔═╡ d2b24ea3-c6d5-4eda-b6ed-e78d61cb67f7 +res3 = solve(IndependentSet(graph), GraphPolynomial()) + +# ╔═╡ 8da609ba-17b3-4eeb-8819-afc7078eb339 +grid = map_graph(smallgraph(:petersen)).grid_graph + +# ╔═╡ 55311eab-433a-432b-a5b9-a855dd0f90e8 +locs2 = findall(!isempty, grid.content) + +# ╔═╡ a61154ab-1b4a-43b7-9c03-522b973dbb4f +show_graph(SimpleGraph(grid); locs = [(ci.I[2], ci.I[1]) for ci in locs2], texts=fill("", length(locs2)), vertex_colors=fill("black", length(locs2))) + +# ╔═╡ 0c4db665-4c1d-4754-802e-2866d69acc75 +res_petersen = solve(IndependentSet(SimpleGraph(grid)), SingleConfigMax())[] + +# ╔═╡ 65b665c6-3ec9-43ef-871c-d890dd0a4680 +show_graph(SimpleGraph(grid); locs = [(ci.I[2], ci.I[1]) for ci in locs2], texts=fill("", length(locs2)), vertex_colors=[iszero(c) ? "white" : "red" for c in res_petersen.c.data], image_size=22) + +# ╔═╡ 0459e421-f51f-4da6-a194-42653e5f2dfc +keys(Luxor.Colors.color_names) + +# ╔═╡ 810e913f-a6f9-4509-8c03-95f90fe7499e +function draw_solution(yellows, greens) + rad = 10 + centers = [Point(y*50, x*50) for (x, y) in locs] + origin(Point(minimum(getfield.(centers, :x)) + 2*rad, minimum(getfield.(centers, :y)) + 2*rad)) + # show nodes + #setcolor("white") + #for p in centers + # circle(p, rad, :fill) + #end + # show unavailable points + setcolor("red") + for i=0:4 + for j=0:4 + if (i, j) ∉ locs + # show cross + line(Point(j*50-rad, i*50-rad), Point(j*50+rad, i*50+rad), :stroke) + line(Point(j*50-rad, i*50+rad), Point(j*50+rad, i*50-rad), :stroke) + end + end + end + + setcolor("black") + for p in centers + circle(p, rad, :stroke) + end + # # show edges + setcolor("black") + # for e in edges(graph) + # a, b = Point(centers[e.src]...), Point(centers[e.dst]...) + # nints, ip1, ip2 = intersectionlinecircle(a, b, a, rad) + # a_ = ip1 + # nints, ip1, ip2 = intersectionlinecircle(a, b, b, rad) + # b_ = ip2 + # line(a_, b_, :stroke) + # end + + graph = square_lattice_graph(ones(Bool, 5, 5)) + _centers = [Point((ci.I[2]-1)*50, (ci.I[1]-1)*50) for ci in CartesianIndices((5, 5))] + for e in edges(graph) + a, b = Point(_centers[e.src]...), Point(_centers[e.dst]...) + nints, ip1, ip2 = intersectionlinecircle(a, b, a, rad) + a_ = ip1 + nints, ip1, ip2 = intersectionlinecircle(a, b, b, rad) + b_ = ip2 + line(a_, b_, :stroke) + end + # show nuts + setcolor(sethue("yellow")..., 0.2) + for (i, j) in yellows + circle(50*j, 50*i, 44, :fill) + end + setcolor(sethue("limegreen")..., 0.2) + for (i, j) in greens + circle(50*j, 50*i, 44, :fill) + end +end + +# ╔═╡ d000c7bb-424e-4e30-b366-74d2303d0333 +Luxor.get_current_color() == Luxor.Colors.color_names["limegreen"] + +# ╔═╡ 3ced1a69-2a4d-4942-a72d-5d668844d2a5 +@drawsvg draw_solution([(1,1)], [(2, 2)]) 500 250 + +# ╔═╡ 76473c61-dbc6-4493-afb2-930ad3fd98af +@drawsvg draw_solution([(1,1)], [(1, 3)]) 500 250 + +# ╔═╡ d9f3717b-8983-429d-8dbf-cd1fe505bcec +function draw_illustrate() + draw_solution([(1, 6)], []) + setcolor("black") + text(L"\sqrt{3}", 350, 50) +end + +# ╔═╡ ff14b193-5da0-447e-a17d-9568e5e86482 +@drawsvg draw_illustrate() 500 250 + +# ╔═╡ 9726e405-b308-4b33-83d2-957a2e434e06 +let +@drawsvg begin + rad = 10 + setcolor("black") + centers = [Point(y*50, x*50) for (x, y) in locs] + origin(Point(minimum(getfield.(centers, :x)) + 2*rad, minimum(getfield.(centers, :y)) + 2*rad)) + for p in centers + circle(p, rad, :fill) + end + setcolor("black") + for e in edges(graph) + a, b = Point(centers[e.src]...), Point(centers[e.dst]...) + nints, ip1, ip2 = intersectionlinecircle(a, b, a, rad) + a_ = ip1 + nints, ip1, ip2 = intersectionlinecircle(a, b, b, rad) + b_ = ip2 + line(a_, b_, :stroke) + end +end 500 250 +end + +# ╔═╡ 1b8c61b2-45e2-439d-9f66-fd9b87bffa88 +@drawsvg let +origin() +background("grey6") +fontsize(26) +fontface("cmmi10") +sethue("white") +text("e", 0, -50) +t₁ = L"e^{i\pi} + 1 = 0" +t₂ = L"e^x = \sum^\infty_{n=0} \frac{x^n}{n!} = \lim_{n\to\infty}(1+\frac{x}{n})^n" +t₃ = L"\cos(\theta)" + +text(t₁, Point(0, -100), halign=:center, valign=:baseline, angle=0) +text(t₂, Point(0, -20), halign=:center, valign=:top, angle=0) + +line(Point(0, 132), Point(50, 132), :stroke) +line(Point(0, 132), Point(50cos(π/4), 132 - 50sin(π/4)), :stroke) + +fontsize(18) +text(t₃, Point(0, 120), halign = :left, valign = :baseline, angle = -π/4, rotationfixed = false) +finish() +end + +# ╔═╡ 00000000-0000-0000-0000-000000000001 +PLUTO_PROJECT_TOML_CONTENTS = """ +[deps] +GenericTensorNetworks = "3521c873-ad32-4bb4-b63d-f4f178f42b49" +Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" +Luxor = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" +MathTeXEngine = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" +UnitDiskMapping = "1b61a8d9-79ed-4491-8266-ef37f39e1727" + +[compat] +GenericTensorNetworks = "~1.0.4" +Graphs = "~1.7.0" +Luxor = "~3.3.0" +MathTeXEngine = "~0.4.1" +UnitDiskMapping = "~0.1.1" +""" + +# ╔═╡ 00000000-0000-0000-0000-000000000002 +PLUTO_MANIFEST_TOML_CONTENTS = """ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.8.0-rc1" +manifest_format = "2.0" +project_hash = "77fed6c30d30ca45eeea5d8fafc46db756399cdb" + +[[deps.AbstractFFTs]] +deps = ["ChainRulesCore", "LinearAlgebra"] +git-tree-sha1 = "6f1d9bc1c08f9f4a8fa92e3ea3cb50153a1b40d4" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.1.0" + +[[deps.AbstractTrees]] +git-tree-sha1 = "03e0550477d86222521d254b741d470ba17ea0b5" +uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +version = "0.3.4" + +[[deps.Adapt]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "af92965fb30777147966f58acb05da51c5616b5f" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "3.3.3" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.ArnoldiMethod]] +deps = ["LinearAlgebra", "Random", "StaticArrays"] +git-tree-sha1 = "62e51b39331de8911e4a7ff6f5aaf38a5f4cc0ae" +uuid = "ec485272-7323-5ecc-a04f-4719b315124d" +version = "0.2.0" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.Automa]] +deps = ["Printf", "ScanByte", "TranscodingStreams"] +git-tree-sha1 = "d50976f217489ce799e366d9561d56a98a30d7fe" +uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b" +version = "0.8.2" + +[[deps.BFloat16s]] +deps = ["LinearAlgebra", "Printf", "Random", "Test"] +git-tree-sha1 = "a598ecb0d717092b5539dbbe890c98bac842b072" +uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" +version = "0.2.0" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.BatchedRoutines]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "441db9f0399bcfb4eeb8b891a6b03f7acc5dc731" +uuid = "a9ab73d0-e05c-5df1-8fde-d6a4645b8d8e" +version = "0.2.2" + +[[deps.BetterExp]] +git-tree-sha1 = "dd3448f3d5b2664db7eceeec5f744535ce6e759b" +uuid = "7cffe744-45fd-4178-b173-cf893948b8b7" +version = "0.1.0" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.8+0" + +[[deps.CEnum]] +git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.4.2" + +[[deps.CUDA]] +deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CompilerSupportLibraries_jll", "ExprTools", "GPUArrays", "GPUCompiler", "LLVM", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "SpecialFunctions", "TimerOutputs"] +git-tree-sha1 = "925a16b909fdae16920c1319feadecffb6695b9d" +uuid = "052768ef-5323-5732-b1bb-66c8b64840ba" +version = "3.10.1" + +[[deps.Cairo]] +deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] +git-tree-sha1 = "d0b3f8b4ad16cb0a2988c6788646a5e6a17b6b1b" +uuid = "159f3aea-2a34-519c-b102-8c37f9878175" +version = "1.0.5" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.16.1+1" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "9489214b993cd42d17f44c36e359bf6a7c919abf" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.15.0" + +[[deps.ChangesOfVariables]] +deps = ["ChainRulesCore", "LinearAlgebra", "Test"] +git-tree-sha1 = "1e315e3f4b0b7ce40feded39c73049692126cf53" +uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" +version = "0.1.3" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "0f4e115f6f34bbe43c19751c90a38b2f380637b9" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.3" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"] +git-tree-sha1 = "d08c20eef1f2cbc6e60fd3612ac4340b89fea322" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.9.9" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "417b0ed7b8b838aa6ca0a87aadf1bb9eb111ce40" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.8" + +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + +[[deps.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 = "9be8be1d8a6f44b96482c8af52238ea7987da3e3" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "3.45.0" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "0.5.2+0" + +[[deps.Compose]] +deps = ["Base64", "Colors", "DataStructures", "Dates", "IterTools", "JSON", "LinearAlgebra", "Measures", "Printf", "Random", "Requires", "Statistics", "UUIDs"] +git-tree-sha1 = "9a2695195199f4f20b94898c8a8ac72609e165a4" +uuid = "a81c6b42-2e10-5240-aca2-a61377ecd94b" +version = "0.9.3" + +[[deps.DataAPI]] +git-tree-sha1 = "fb5f5316dd3fd4c5e7c30a24d50643b73e37cd40" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.10.0" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.13" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" + +[[deps.Dierckx]] +deps = ["Dierckx_jll"] +git-tree-sha1 = "633c119fcfddf61fb4c75d77ce3ebab552a44723" +uuid = "39dd38d3-220a-591b-8e3c-4c3a8c710a94" +version = "0.5.2" + +[[deps.Dierckx_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "6596b96fe1caff3db36415eeb6e9d3b50bfe40ee" +uuid = "cd4c43a9-7502-52ba-aa6d-59fb2a88580b" +version = "0.1.0+0" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.8.6" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.EarCut_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3f3a2501fa7236e9b911e0f7a588c657e822bb6d" +uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" +version = "2.2.3+0" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bad72f730e9e91c08d9427d5e8db95478a3c323d" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.4.8+0" + +[[deps.ExprTools]] +git-tree-sha1 = "56559bbef6ca5ea0c0818fa5c90320398a6fbf8d" +uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" +version = "0.1.8" + +[[deps.FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.1" + +[[deps.FFMPEG_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "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" + +[[deps.FFTW]] +deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] +git-tree-sha1 = "505876577b5481e50d089c1c68899dfb6faebc62" +uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" +version = "1.4.6" + +[[deps.FFTW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea" +uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" +version = "3.3.10+0" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "9267e5f50b0e12fdfd5a2455534345c4cf2c7f7a" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.14.0" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.4" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.13.93+0" + +[[deps.FreeType]] +deps = ["CEnum", "FreeType2_jll"] +git-tree-sha1 = "cabd77ab6a6fdff49bfd24af2ebe76e6e018a2b4" +uuid = "b38be410-82b0-50bf-ab77-7b57e271db43" +version = "4.0.0" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.10.4+0" + +[[deps.FreeTypeAbstraction]] +deps = ["ColorVectorSpace", "Colors", "FreeType", "GeometryBasics"] +git-tree-sha1 = "b5c7fe9cea653443736d264b85466bad8c574f4a" +uuid = "663a7486-cb36-511b-a19d-713bb74d65c9" +version = "0.9.9" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.10+0" + +[[deps.GPUArrays]] +deps = ["Adapt", "LLVM", "LinearAlgebra", "Printf", "Random", "Serialization", "Statistics"] +git-tree-sha1 = "c783e8883028bf26fb05ed4022c450ef44edd875" +uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" +version = "8.3.2" + +[[deps.GPUCompiler]] +deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "TimerOutputs", "UUIDs"] +git-tree-sha1 = "d8c5999631e1dc18d767883f621639c838f8e632" +uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" +version = "0.15.2" + +[[deps.GenericTensorNetworks]] +deps = ["AbstractTrees", "CUDA", "Cairo", "Compose", "DelimitedFiles", "Distributed", "FFTW", "Graphs", "LinearAlgebra", "Mods", "OMEinsum", "OMEinsumContractionOrders", "Polynomials", "Primes", "Printf", "Random", "Requires", "SIMDTypes", "Serialization", "StatsBase", "TropicalNumbers", "Viznet"] +git-tree-sha1 = "d98bcd88f257fc8844efebf5b93a8acea72f269c" +uuid = "3521c873-ad32-4bb4-b63d-f4f178f42b49" +version = "1.0.4" + +[[deps.GeometryBasics]] +deps = ["EarCut_jll", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] +git-tree-sha1 = "83ea630384a13fc4f002b77690bc0afeb4255ac9" +uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" +version = "0.4.2" + +[[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", "PCRE_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "a32d672ac2c967f3deb8a81d828afc739c838a06" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.68.3+2" + +[[deps.Graphics]] +deps = ["Colors", "LinearAlgebra", "NaNMath"] +git-tree-sha1 = "d61890399bc535850c4bf08e4e0d3a7ad0f21cbd" +uuid = "a2bd30eb-e257-5431-a919-1863eab51364" +version = "1.1.2" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[deps.Graphs]] +deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] +git-tree-sha1 = "4888af84657011a65afc7a564918d281612f983a" +uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" +version = "1.7.0" + +[[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.Inflate]] +git-tree-sha1 = "f5fc07d4e706b84f72d54eedcc1c13d92fb0871c" +uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" +version = "0.1.2" + +[[deps.IntegerMathUtils]] +git-tree-sha1 = "f366daebdfb079fd1fe4e3d560f99a0c892e15bc" +uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" +version = "0.1.0" + +[[deps.IntelOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "d979e54b71da82f3a65b62553da4fc3d18c9004c" +uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" +version = "2018.0.3+2" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.InverseFunctions]] +deps = ["Test"] +git-tree-sha1 = "b3364212fb5d870f724876ffcd34dd8ec6d98918" +uuid = "3587e190-3f89-42d0-90ee-14403ec27112" +version = "0.1.7" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.1.1" + +[[deps.IterTools]] +git-tree-sha1 = "fa6287a4469f5e048d763df38279ee729fbd44e5" +uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" +version = "1.4.0" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLLWrappers]] +deps = ["Preferences"] +git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.4.1" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "3c837543ddb02250ef42f4738347454f95079d4e" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.3" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "b53380851c6e6664204efb2e62cd24fa5c47e4ba" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "2.1.2+0" + +[[deps.Juno]] +deps = ["Base64", "Logging", "Media", "Profile"] +git-tree-sha1 = "07cb43290a840908a771552911a6274bc6c072c7" +uuid = "e5e0dc1b-0480-54bc-9374-aad01c23163d" +version = "0.8.4" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.1+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "3.0.0+1" + +[[deps.LLVM]] +deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Printf", "Unicode"] +git-tree-sha1 = "e7e9184b0bf0158ac4e4aa9daf00041b5909bf1a" +uuid = "929cbde3-209d-540e-8aea-75f648917ca0" +version = "4.14.0" + +[[deps.LLVMExtra_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg", "TOML"] +git-tree-sha1 = "771bfe376249626d3ca12bcd58ba243d3f961576" +uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" +version = "0.0.16+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.LaTeXStrings]] +git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.0" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + +[[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.81.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", "Pkg"] +git-tree-sha1 = "42b62845d70a619f063a7da093d995ec8e15e778" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.16.1+1" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.35.0+0" + +[[deps.Librsvg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pango_jll", "Pkg", "gdk_pixbuf_jll"] +git-tree-sha1 = "25d5e6b4eb3558613ace1c67d6a871420bfca527" +uuid = "925c91fb-5dd6-59dd-8e8c-345e74382d89" +version = "2.52.4+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "3eb79b0ca5764d4799c06699573fd8f533259713" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.4.0+0" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.36.0+0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "09e4b894ce6a976c354a69041a04748180d43637" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.15" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.Luxor]] +deps = ["Base64", "Cairo", "Colors", "Dates", "FFMPEG", "FileIO", "Juno", "LaTeXStrings", "Random", "Requires", "Rsvg"] +git-tree-sha1 = "590db54191f99a5016274784480fabf92ae7a034" +uuid = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" +version = "3.3.0" + +[[deps.MKL_jll]] +deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] +git-tree-sha1 = "e595b205efd49508358f7dc670a940c790204629" +uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" +version = "2022.0.0+0" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "3d3e902b31198a27340d0bf00d6ac452866021cf" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.9" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MathTeXEngine]] +deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "Test"] +git-tree-sha1 = "5c1e3d66b3a36029de4e5ac07ab8bafd5a8041e5" +uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" +version = "0.4.1" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.0+0" + +[[deps.Measures]] +git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f" +uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" +version = "0.3.1" + +[[deps.Media]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "75a54abd10709c01f1b86b84ec225d26e840ed58" +uuid = "e89f7d12-3494-54d1-8411-f7d8b9ae1f27" +version = "0.5.0" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "bf210ce90b6c9eed32d25dbcae1ebc565df2687f" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.0.2" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.Mods]] +git-tree-sha1 = "7416683a2cc6e8c9caee75b569c993cfe34e522d" +uuid = "7475f97c-0381-53b1-977b-4c60186c8d62" +version = "1.3.2" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2022.2.1" + +[[deps.MutableArithmetics]] +deps = ["LinearAlgebra", "SparseArrays", "Test"] +git-tree-sha1 = "4e675d6e9ec02061800d6cfb695812becbd03cdf" +uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" +version = "1.0.4" + +[[deps.NaNMath]] +git-tree-sha1 = "737a5957f387b17e74d4ad2f440eb330b39a62c5" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.0" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.OMEinsum]] +deps = ["AbstractTrees", "BatchedRoutines", "CUDA", "ChainRulesCore", "Combinatorics", "LinearAlgebra", "MacroTools", "Requires", "Test", "TupleTools"] +git-tree-sha1 = "6df6ebcf525360ddb881f1d758c2ef428414b1a2" +uuid = "ebe7aa44-baf0-506c-a96f-8464559b3922" +version = "0.6.13" + +[[deps.OMEinsumContractionOrders]] +deps = ["BetterExp", "JSON", "OMEinsum", "Requires", "SparseArrays", "Suppressor"] +git-tree-sha1 = "b2771fa64c9501731b29daba91e653c6fae80937" +uuid = "6f22d1fd-8eed-4bb7-9776-e7d684900715" +version = "0.6.9" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.20+0" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+0" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ab05aa4cc89736e95915b01e7279e61b1bfe33b8" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "1.1.14+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.2+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.4.1" + +[[deps.PCRE_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "b2a7af664e098055a7529ad1a900ded962bca488" +uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc" +version = "8.44.0+0" + +[[deps.Pango_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3a121dfbba67c94a5bec9dde613c3d0cbcf3a12b" +uuid = "36c8627f-9965-5494-a995-c6b170f724f3" +version = "1.50.3+0" + +[[deps.Parsers]] +deps = ["Dates"] +git-tree-sha1 = "1285416549ccfcdf0c50d4997a94331e88d68413" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.3.1" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.40.1+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.8.0" + +[[deps.Polynomials]] +deps = ["LinearAlgebra", "MutableArithmetics", "RecipesBase"] +git-tree-sha1 = "a8d37fbaba422166e9f5354b6d8f6197e1f74fe5" +uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" +version = "3.1.3" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.3.0" + +[[deps.Primes]] +deps = ["IntegerMathUtils"] +git-tree-sha1 = "747f4261ebe38a2bc6abf0850ea8c6d9027ccd07" +uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" +version = "0.5.2" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.Profile]] +deps = ["Printf"] +uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" + +[[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.Random123]] +deps = ["Random", "RandomNumbers"] +git-tree-sha1 = "afeacaecf4ed1649555a19cb2cad3c141bbc9474" +uuid = "74087812-796a-5b5d-8853-05524746bad3" +version = "1.5.0" + +[[deps.RandomNumbers]] +deps = ["Random", "Requires"] +git-tree-sha1 = "043da614cc7e95c703498a491e2c21f58a2b8111" +uuid = "e6cf234a-135c-5ec9-84dd-332b85af5143" +version = "1.5.3" + +[[deps.RecipesBase]] +git-tree-sha1 = "6bf3f380ff52ce0832ddd3a2a7b9538ed1bcca7d" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.2.1" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "307761d71804208c0c62abdbd0ea6822aa5bbefd" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "0.2.0" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.Rsvg]] +deps = ["Cairo", "Glib_jll", "Librsvg_jll"] +git-tree-sha1 = "3d3dc66eb46568fb3a5259034bfc752a0eb0c686" +uuid = "c4c386cf-5103-5370-be45-f3a111cca3b8" +version = "1.0.0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.SIMD]] +git-tree-sha1 = "7dbc15af7ed5f751a82bf3ed37757adf76c32402" +uuid = "fdea26ae-647d-5447-a871-4b548cad5224" +version = "3.4.1" + +[[deps.SIMDTypes]] +git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" +uuid = "94e857df-77ce-4151-89e5-788b33177be4" +version = "0.1.0" + +[[deps.ScanByte]] +deps = ["Libdl", "SIMD"] +git-tree-sha1 = "c49318f1b9ca3d927ae576d323fa6f724d01ba53" +uuid = "7b38b023-a4d7-4c5e-8d43-3f3097f304eb" +version = "0.3.1" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "0b4b7f1393cff97c33891da2a0bf69c6ed241fda" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.1.0" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.SharedArrays]] +deps = ["Distributed", "Mmap", "Random", "Serialization"] +uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "b3363d7460f7d098ca0912c69b082f75625d7508" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.0.1" + +[[deps.SparseArrays]] +deps = ["LinearAlgebra", "Random"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.SpecialFunctions]] +deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "a9e798cae4867e3a41cae2dd9eb60c047f1212db" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.1.6" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "2bbd9f2e40afd197a1379aef05e0d85dba649951" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.4.7" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "2c11d7290036fe7aac9038ff312d3b3a2a5bf89e" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.4.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "8977b17906b0a1cc74ab2e3a05faa16cf08a8291" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.33.16" + +[[deps.StructArrays]] +deps = ["Adapt", "DataAPI", "StaticArrays", "Tables"] +git-tree-sha1 = "9abba8f8fb8458e9adf07c8a2377a070674a24f1" +uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" +version = "0.6.8" + +[[deps.Suppressor]] +git-tree-sha1 = "c6ed566db2fe3931292865b966d6d140b7ef32a9" +uuid = "fd094767-a336-5f1f-9728-57cf17d0bbfb" +version = "0.2.1" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.0" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"] +git-tree-sha1 = "5ce79ce186cc678bbb5c5681ca3379d1ddae11a1" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.7.0" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.TimerOutputs]] +deps = ["ExprTools", "Printf"] +git-tree-sha1 = "464d64b2510a25e6efe410e7edab14fffdc333df" +uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" +version = "0.5.20" + +[[deps.TranscodingStreams]] +deps = ["Random", "Test"] +git-tree-sha1 = "216b95ea110b5972db65aa90f88d8d89dcb8851c" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.9.6" + +[[deps.TropicalNumbers]] +git-tree-sha1 = "f3659ba817a2fdc8665e9bf032d66f1a107a56af" +uuid = "b3a74e9c-7526-4576-a4eb-79c0d4c32334" +version = "0.5.3" + +[[deps.TupleTools]] +git-tree-sha1 = "3c712976c47707ff893cf6ba4354aa14db1d8938" +uuid = "9d95972d-f1c8-5527-a6e0-b4b365fa01f6" +version = "1.3.0" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.UnitDiskMapping]] +deps = ["Graphs"] +git-tree-sha1 = "4aa41c61ed79b9e7394260613d5ad938fdf0cc48" +uuid = "1b61a8d9-79ed-4491-8266-ef37f39e1727" +version = "0.1.1" + +[[deps.Viznet]] +deps = ["Compose", "Dierckx"] +git-tree-sha1 = "7a022ae6ac8b153d47617ed8c196ce60645689f1" +uuid = "52a3aca4-6234-47fd-b74a-806bdf78ede9" +version = "0.3.3" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "58443b63fb7e465a8a7210828c91c08b92132dff" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.9.14+0" + +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.34+0" + +[[deps.Xorg_libX11_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] +git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.6.9+4" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.9+4" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.3+4" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.4+4" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.10+4" + +[[deps.Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.0+3" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.13.0+3" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.4.0+3" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.12+3" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e45044cd873ded54b6a5bac0eb5c971392cf1927" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.2+0" + +[[deps.gdk_pixbuf_jll]] +deps = ["Artifacts", "Glib_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pkg", "Xorg_libX11_jll", "libpng_jll"] +git-tree-sha1 = "c23323cd30d60941f8c68419a70905d9bdd92808" +uuid = "da03df04-f53b-5353-a52f-6a8b0620ced0" +version = "2.42.6+1" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.1+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl", "OpenBLAS_jll"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.1.0+0" + +[[deps.libfdk_aac_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.2+0" + +[[deps.libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.38+0" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+1" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.41.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+0" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "2021.5.5+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +version = "3.5.0+0" +""" + +# ╔═╡ Cell order: +# ╠═c37be80e-e9ba-11ec-30ea-43b3344b86ac +# ╠═cccc014d-b5e9-4e31-9860-af1b4f052e8e +# ╠═1c4f6598-630d-4db2-b571-033682094ce8 +# ╠═6770c854-b595-4073-9ce9-6a9c96eafa30 +# ╠═694628f3-27b3-493a-a787-dc95fcce8163 +# ╠═48cf19bd-6485-4b7e-b6a6-b9bb90841f22 +# ╠═bb39a1e8-8dca-493c-8c13-f022cdf6afe1 +# ╠═7d9b39df-44f1-42a4-80aa-4cbf07d9f480 +# ╠═d2b24ea3-c6d5-4eda-b6ed-e78d61cb67f7 +# ╠═cc58e2d2-1552-405d-9555-0e5dc31c47ab +# ╠═8da609ba-17b3-4eeb-8819-afc7078eb339 +# ╠═55311eab-433a-432b-a5b9-a855dd0f90e8 +# ╠═a61154ab-1b4a-43b7-9c03-522b973dbb4f +# ╠═0c4db665-4c1d-4754-802e-2866d69acc75 +# ╠═65b665c6-3ec9-43ef-871c-d890dd0a4680 +# ╠═b6d1e7b1-b40e-4166-94f1-f8eea3a01a7b +# ╠═0459e421-f51f-4da6-a194-42653e5f2dfc +# ╠═810e913f-a6f9-4509-8c03-95f90fe7499e +# ╠═d000c7bb-424e-4e30-b366-74d2303d0333 +# ╠═3ced1a69-2a4d-4942-a72d-5d668844d2a5 +# ╠═76473c61-dbc6-4493-afb2-930ad3fd98af +# ╠═5faa573e-c3d8-48b3-a1cd-fd86f3f5b9b6 +# ╠═d9f3717b-8983-429d-8dbf-cd1fe505bcec +# ╠═ff14b193-5da0-447e-a17d-9568e5e86482 +# ╠═9726e405-b308-4b33-83d2-957a2e434e06 +# ╠═1b8c61b2-45e2-439d-9f66-fd9b87bffa88 +# ╟─00000000-0000-0000-0000-000000000001 +# ╟─00000000-0000-0000-0000-000000000002 diff --git a/notebooks/latexexample.svg b/notebooks/latexexample.svg new file mode 100644 index 00000000..9ce5002e --- /dev/null +++ b/notebooks/latexexample.svg @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/notebooks/luxor.jl b/notebooks/luxor.jl new file mode 100644 index 00000000..47f994e0 --- /dev/null +++ b/notebooks/luxor.jl @@ -0,0 +1,1029 @@ +### A Pluto.jl notebook ### +# v0.19.8 + +using Markdown +using InteractiveUtils + +# ╔═╡ b169626f-7849-41b7-966b-f28e46ac3b1f +using Graphs + +# ╔═╡ 8479c32b-63ff-48ac-be60-be65d8b6a7f0 +using Luxor + +# ╔═╡ 1b9d8e78-76d0-48a0-81ae-64e548ed92cc +using MathTeXEngine + +# ╔═╡ 6fb1fd85-734e-44b5-8387-37763a6120f3 +function unit_disk_graph(locs::AbstractVector, unit::Real) + n = length(locs) + g = SimpleGraph(n) + for i=1:n, j=i+1:n + if sum(abs2, locs[i] .- locs[j]) < unit ^ 2 + add_edge!(g, i, j) + end + end + return g +end + + + +# ╔═╡ adf9e8a2-1867-442d-b531-0441b4e34bcc +function square_lattice_graph(mask::AbstractMatrix{Bool}) + locs = [(i, j) for i=1:size(mask, 1), j=1:size(mask, 2) if mask[i,j]] + unit_disk_graph(locs, 1.1) +end + +# ╔═╡ b8e5c1b2-495e-4efd-8873-27e62f304f84 +locs = [(0, 0), (0, 1), (0, 2), (0, 3), (1,1), (1,3), (1,4), (2, 0), (2,2), (2,4), (3, 0), (3, 1), (3,2), (3,3), (4,0), (4,2), (4,4)] + +# ╔═╡ 7df6108f-2022-41ed-a25f-935523e8efa4 +keys(Luxor.Colors.color_names) + +# ╔═╡ b44e734f-dd84-4ca8-a926-9ac771277cb5 +function cross(x, y, rad) + line(Point(x-rad, y-rad), Point(x+rad, y+rad), :stroke) + line(Point(x-rad, y+rad), Point(x+rad, y-rad), :stroke) +end + +# ╔═╡ 3de68d6e-f839-4307-a45f-3cd7c8e8671a +function draw_solution(yellows, greens; origin_shift=Point(0, 0)) + rad = 10 + centers = [Point(y*50, x*50) for (x, y) in locs] + origin(Point(minimum(getfield.(centers, :x)) + 2*rad, minimum(getfield.(centers, :y)) + 2*rad) + origin_shift) + # show nodes + #setcolor("white") + #for p in centers + # circle(p, rad, :fill) + #end + # show unavailable points + setcolor("red") + for i=0:4 + for j=0:4 + if (i, j) ∉ locs + # show cross + cross(j*50, i*50, rad) + end + end + end + + setcolor("black") + for p in centers + circle(p, rad, :stroke) + end + # # show edges + setcolor("black") + # for e in edges(graph) + # a, b = Point(centers[e.src]...), Point(centers[e.dst]...) + # nints, ip1, ip2 = intersectionlinecircle(a, b, a, rad) + # a_ = ip1 + # nints, ip1, ip2 = intersectionlinecircle(a, b, b, rad) + # b_ = ip2 + # line(a_, b_, :stroke) + # end + + graph = square_lattice_graph(ones(Bool, 5, 5)) + _centers = [Point((ci.I[2]-1)*50, (ci.I[1]-1)*50) for ci in CartesianIndices((5, 5))] + setdash("dotted") + for e in edges(graph) + a, b = Point(_centers[e.src]...), Point(_centers[e.dst]...) + nints, ip1, ip2 = intersectionlinecircle(a, b, a, rad) + a_ = ip1 + nints, ip1, ip2 = intersectionlinecircle(a, b, b, rad) + b_ = ip2 + line(a_, b_, :stroke) + end + # show nuts + setcolor(sethue("yellow")..., 0.2) + for (i, j) in yellows + circle(50*j, 50*i, 44, :fill) + end + setcolor(sethue("limegreen")..., 0.2) + for (i, j) in greens + circle(50*j, 50*i, 44, :fill) + end +end + +# ╔═╡ 85e784c8-099b-4f25-8aa5-ecf2ad503b62 +@drawsvg draw_solution([(1,1)], [(2, 2)]) 250 250 + +# ╔═╡ a2e69f42-01da-46f6-b2af-b4f71785cdb4 +@drawsvg draw_solution([(1,1)], [(1, 3)]) 250 250 + +# ╔═╡ 80bee424-ea43-4c4c-827c-68c913892921 +function draw_illustrate() + draw_solution([(1, 6)], []) + setdash("solid") + setcolor("black") + fontsize(14) + text(L"\frac{a}{\sqrt{2}} ~<~ r ~<~ a", 350, 50) # + a = Point(300, 50) + b = Point(350, 0) + nints, p1, p2 = intersectionlinecircle(a, b, a, 44) + arrow(a, p1) + text("r", (a+p1)/2-Point(10, 0)) + text("Nut", a + Point(0, 20), halign=:center) + + # nodes + rad = 10 + y1 = 2.3*50 + y2 = 3*50 + circle(Point(300, y1), rad, :stroke) + text("Available", Point(320, y1), valign=:middle) + setcolor("red") + cross(300, y2, rad) + text("Not available", Point(320, y2), valign=:middle) + setcolor("black") + + # the meter + w = 10 + x0 = 220 + y0 = 0 + y1 = y0+50 + p1, p2 = Point(x0, y0), Point(x0+w, y0) + line(p1, p2, :stroke) + p3, p4 = Point(x0, y1), Point(x0+w, y1) + line(p3, p4, :stroke) + pc1 = Point(x0+w/2, y0+18) + pc2 = Point(x0+w/2, y0+32) + arrow(pc1, (p1+p2)/2) + arrow(pc2, (p3+p4)/2) + text("a", x0+w/2, y0+25, halign=:center, valign=:middle) +end + +# ╔═╡ f03fb88b-c58e-4739-817a-3428e22ede95 +@drawsvg draw_illustrate() 500 250 + +# ╔═╡ ba078b71-c187-4531-8c9c-4b5b952dad23 +@drawsvg draw_solution([(0, 0), (0, 2), (1, 4), (2, 0), (2,2), (4, 0), (4, 2), (4,4)], []; origin_shift=Point(25, 25)) 300 300 + +# ╔═╡ a146d807-60a2-4831-a5ab-8c772c7f09ba +@drawsvg draw_solution([(0, 0), (0, 2), (2, 0), (2,2), (2,4), (4, 0), (4, 2), (4,4)], []; origin_shift=Point(25, 25)) 300 300 + +# ╔═╡ 14edd34a-865b-4f20-b2de-d0d2ce92a8dc +@drawsvg draw_solution([(0, 1), (0, 3), (2, 0), (2,2), (2,4), (4, 0), (4, 2), (4,4)], []; origin_shift=Point(25, 25)) 300 300 + +# ╔═╡ 95e9b392-a8de-4f5b-97f2-6f3b3977eb95 +@drawsvg draw_solution([(0, 0), (0, 2), (2, 0), (2,2), (2,4), (4, 0), (4, 2), (4,4)], []; origin_shift=Point(25, 25)) 300 300 + +# ╔═╡ d041159c-9867-4d3a-bb5f-6b6e03a5b7e8 +let +@drawsvg begin + rad = 10 + setcolor("black") + centers = [Point(y*50, x*50) for (x, y) in locs] + origin(Point(minimum(getfield.(centers, :x)) + 2*rad, minimum(getfield.(centers, :y)) + 2*rad)) + for p in centers + circle(p, rad, :fill) + end + setcolor("black") + for e in edges(graph) + a, b = Point(centers[e.src]...), Point(centers[e.dst]...) + nints, ip1, ip2 = intersectionlinecircle(a, b, a, rad) + a_ = ip1 + nints, ip1, ip2 = intersectionlinecircle(a, b, b, rad) + b_ = ip2 + line(a_, b_, :stroke) + end +end 500 250 +end + +# ╔═╡ 7ff02758-d69a-4857-b730-192ce0d3e41b +L"Z(G,\beta)=\sum_{s_a,s_b,s_c,s_d,s_e=0}^1e^{\beta w_a s_a} e^{\beta w_b s_b} e^{\beta w_c s_c} e^{\beta w_d s_d} e^{\beta w_e s_e} e^{-\infty s_as_b} e^{-\infty s_b s_c} e^{-\infty s_a s_c} e^{-\infty s_b s_d} e^{-\infty s_c s_d} e^{-\infty s_d s_e}" + +# ╔═╡ 00000000-0000-0000-0000-000000000001 +PLUTO_PROJECT_TOML_CONTENTS = """ +[deps] +Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" +Luxor = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" +MathTeXEngine = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" + +[compat] +Graphs = "~1.7.0" +Luxor = "~3.3.0" +MathTeXEngine = "~0.4.1" +""" + +# ╔═╡ 00000000-0000-0000-0000-000000000002 +PLUTO_MANIFEST_TOML_CONTENTS = """ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.8.0-rc1" +manifest_format = "2.0" +project_hash = "de4124d559c1a3352371c9767ea8adc505803d3f" + +[[deps.AbstractTrees]] +git-tree-sha1 = "03e0550477d86222521d254b741d470ba17ea0b5" +uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +version = "0.3.4" + +[[deps.Adapt]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "af92965fb30777147966f58acb05da51c5616b5f" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "3.3.3" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.ArnoldiMethod]] +deps = ["LinearAlgebra", "Random", "StaticArrays"] +git-tree-sha1 = "62e51b39331de8911e4a7ff6f5aaf38a5f4cc0ae" +uuid = "ec485272-7323-5ecc-a04f-4719b315124d" +version = "0.2.0" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.Automa]] +deps = ["Printf", "ScanByte", "TranscodingStreams"] +git-tree-sha1 = "d50976f217489ce799e366d9561d56a98a30d7fe" +uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b" +version = "0.8.2" + +[[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.CEnum]] +git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.4.2" + +[[deps.Cairo]] +deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] +git-tree-sha1 = "d0b3f8b4ad16cb0a2988c6788646a5e6a17b6b1b" +uuid = "159f3aea-2a34-519c-b102-8c37f9878175" +version = "1.0.5" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.16.1+1" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "9489214b993cd42d17f44c36e359bf6a7c919abf" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.15.0" + +[[deps.ChangesOfVariables]] +deps = ["ChainRulesCore", "LinearAlgebra", "Test"] +git-tree-sha1 = "1e315e3f4b0b7ce40feded39c73049692126cf53" +uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" +version = "0.1.3" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "eb7f0f8307f71fac7c606984ea5fb2817275d6e4" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.4" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"] +git-tree-sha1 = "d08c20eef1f2cbc6e60fd3612ac4340b89fea322" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.9.9" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "417b0ed7b8b838aa6ca0a87aadf1bb9eb111ce40" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.8" + +[[deps.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 = "9be8be1d8a6f44b96482c8af52238ea7987da3e3" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "3.45.0" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "0.5.2+0" + +[[deps.DataAPI]] +git-tree-sha1 = "fb5f5316dd3fd4c5e7c30a24d50643b73e37cd40" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.10.0" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.13" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.8.6" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.EarCut_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3f3a2501fa7236e9b911e0f7a588c657e822bb6d" +uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" +version = "2.2.3+0" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bad72f730e9e91c08d9427d5e8db95478a3c323d" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.4.8+0" + +[[deps.FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.1" + +[[deps.FFMPEG_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "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" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "9267e5f50b0e12fdfd5a2455534345c4cf2c7f7a" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.14.0" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.4" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.13.93+0" + +[[deps.FreeType]] +deps = ["CEnum", "FreeType2_jll"] +git-tree-sha1 = "cabd77ab6a6fdff49bfd24af2ebe76e6e018a2b4" +uuid = "b38be410-82b0-50bf-ab77-7b57e271db43" +version = "4.0.0" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.10.4+0" + +[[deps.FreeTypeAbstraction]] +deps = ["ColorVectorSpace", "Colors", "FreeType", "GeometryBasics"] +git-tree-sha1 = "b5c7fe9cea653443736d264b85466bad8c574f4a" +uuid = "663a7486-cb36-511b-a19d-713bb74d65c9" +version = "0.9.9" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.10+0" + +[[deps.GeometryBasics]] +deps = ["EarCut_jll", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] +git-tree-sha1 = "83ea630384a13fc4f002b77690bc0afeb4255ac9" +uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" +version = "0.4.2" + +[[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", "PCRE_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "a32d672ac2c967f3deb8a81d828afc739c838a06" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.68.3+2" + +[[deps.Graphics]] +deps = ["Colors", "LinearAlgebra", "NaNMath"] +git-tree-sha1 = "d61890399bc535850c4bf08e4e0d3a7ad0f21cbd" +uuid = "a2bd30eb-e257-5431-a919-1863eab51364" +version = "1.1.2" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[deps.Graphs]] +deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] +git-tree-sha1 = "4888af84657011a65afc7a564918d281612f983a" +uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" +version = "1.7.0" + +[[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.Inflate]] +git-tree-sha1 = "f5fc07d4e706b84f72d54eedcc1c13d92fb0871c" +uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" +version = "0.1.2" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.InverseFunctions]] +deps = ["Test"] +git-tree-sha1 = "b3364212fb5d870f724876ffcd34dd8ec6d98918" +uuid = "3587e190-3f89-42d0-90ee-14403ec27112" +version = "0.1.7" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.1.1" + +[[deps.IterTools]] +git-tree-sha1 = "fa6287a4469f5e048d763df38279ee729fbd44e5" +uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" +version = "1.4.0" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLLWrappers]] +deps = ["Preferences"] +git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.4.1" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "b53380851c6e6664204efb2e62cd24fa5c47e4ba" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "2.1.2+0" + +[[deps.Juno]] +deps = ["Base64", "Logging", "Media", "Profile"] +git-tree-sha1 = "07cb43290a840908a771552911a6274bc6c072c7" +uuid = "e5e0dc1b-0480-54bc-9374-aad01c23163d" +version = "0.8.4" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.1+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "3.0.0+1" + +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.1+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.0" + +[[deps.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.81.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", "Pkg"] +git-tree-sha1 = "42b62845d70a619f063a7da093d995ec8e15e778" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.16.1+1" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.35.0+0" + +[[deps.Librsvg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pango_jll", "Pkg", "gdk_pixbuf_jll"] +git-tree-sha1 = "25d5e6b4eb3558613ace1c67d6a871420bfca527" +uuid = "925c91fb-5dd6-59dd-8e8c-345e74382d89" +version = "2.52.4+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "3eb79b0ca5764d4799c06699573fd8f533259713" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.4.0+0" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.36.0+0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "09e4b894ce6a976c354a69041a04748180d43637" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.15" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.Luxor]] +deps = ["Base64", "Cairo", "Colors", "Dates", "FFMPEG", "FileIO", "Juno", "LaTeXStrings", "Random", "Requires", "Rsvg"] +git-tree-sha1 = "590db54191f99a5016274784480fabf92ae7a034" +uuid = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" +version = "3.3.0" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "3d3e902b31198a27340d0bf00d6ac452866021cf" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.9" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MathTeXEngine]] +deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "Test"] +git-tree-sha1 = "5c1e3d66b3a36029de4e5ac07ab8bafd5a8041e5" +uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" +version = "0.4.1" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.0+0" + +[[deps.Media]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "75a54abd10709c01f1b86b84ec225d26e840ed58" +uuid = "e89f7d12-3494-54d1-8411-f7d8b9ae1f27" +version = "0.5.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2022.2.1" + +[[deps.NaNMath]] +git-tree-sha1 = "737a5957f387b17e74d4ad2f440eb330b39a62c5" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.0" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.20+0" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+0" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ab05aa4cc89736e95915b01e7279e61b1bfe33b8" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "1.1.14+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.2+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.4.1" + +[[deps.PCRE_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "b2a7af664e098055a7529ad1a900ded962bca488" +uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc" +version = "8.44.0+0" + +[[deps.Pango_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3a121dfbba67c94a5bec9dde613c3d0cbcf3a12b" +uuid = "36c8627f-9965-5494-a995-c6b170f724f3" +version = "1.50.3+0" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.40.1+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.8.0" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.3.0" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.Profile]] +deps = ["Printf"] +uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" + +[[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.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "307761d71804208c0c62abdbd0ea6822aa5bbefd" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "0.2.0" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.Rsvg]] +deps = ["Cairo", "Glib_jll", "Librsvg_jll"] +git-tree-sha1 = "3d3dc66eb46568fb3a5259034bfc752a0eb0c686" +uuid = "c4c386cf-5103-5370-be45-f3a111cca3b8" +version = "1.0.0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.SIMD]] +git-tree-sha1 = "7dbc15af7ed5f751a82bf3ed37757adf76c32402" +uuid = "fdea26ae-647d-5447-a871-4b548cad5224" +version = "3.4.1" + +[[deps.ScanByte]] +deps = ["Libdl", "SIMD"] +git-tree-sha1 = "c49318f1b9ca3d927ae576d323fa6f724d01ba53" +uuid = "7b38b023-a4d7-4c5e-8d43-3f3097f304eb" +version = "0.3.1" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "0b4b7f1393cff97c33891da2a0bf69c6ed241fda" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.1.0" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.SharedArrays]] +deps = ["Distributed", "Mmap", "Random", "Serialization"] +uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SparseArrays]] +deps = ["LinearAlgebra", "Random"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.SpecialFunctions]] +deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "a9e798cae4867e3a41cae2dd9eb60c047f1212db" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.1.6" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "2bbd9f2e40afd197a1379aef05e0d85dba649951" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.4.7" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[deps.StructArrays]] +deps = ["Adapt", "DataAPI", "StaticArrays", "Tables"] +git-tree-sha1 = "9abba8f8fb8458e9adf07c8a2377a070674a24f1" +uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" +version = "0.6.8" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.0" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"] +git-tree-sha1 = "5ce79ce186cc678bbb5c5681ca3379d1ddae11a1" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.7.0" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.TranscodingStreams]] +deps = ["Random", "Test"] +git-tree-sha1 = "216b95ea110b5972db65aa90f88d8d89dcb8851c" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.9.6" + +[[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", "Pkg", "Zlib_jll"] +git-tree-sha1 = "58443b63fb7e465a8a7210828c91c08b92132dff" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.9.14+0" + +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.34+0" + +[[deps.Xorg_libX11_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] +git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.6.9+4" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.9+4" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.3+4" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.4+4" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.10+4" + +[[deps.Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.0+3" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.13.0+3" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.4.0+3" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.12+3" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e45044cd873ded54b6a5bac0eb5c971392cf1927" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.2+0" + +[[deps.gdk_pixbuf_jll]] +deps = ["Artifacts", "Glib_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pkg", "Xorg_libX11_jll", "libpng_jll"] +git-tree-sha1 = "c23323cd30d60941f8c68419a70905d9bdd92808" +uuid = "da03df04-f53b-5353-a52f-6a8b0620ced0" +version = "2.42.6+1" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.1+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl", "OpenBLAS_jll"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.1.0+0" + +[[deps.libfdk_aac_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.2+0" + +[[deps.libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.38+0" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+1" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.41.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+0" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "2021.5.5+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +version = "3.5.0+0" +""" + +# ╔═╡ Cell order: +# ╠═b169626f-7849-41b7-966b-f28e46ac3b1f +# ╠═adf9e8a2-1867-442d-b531-0441b4e34bcc +# ╠═6fb1fd85-734e-44b5-8387-37763a6120f3 +# ╠═b8e5c1b2-495e-4efd-8873-27e62f304f84 +# ╠═8479c32b-63ff-48ac-be60-be65d8b6a7f0 +# ╠═7df6108f-2022-41ed-a25f-935523e8efa4 +# ╠═b44e734f-dd84-4ca8-a926-9ac771277cb5 +# ╠═3de68d6e-f839-4307-a45f-3cd7c8e8671a +# ╠═85e784c8-099b-4f25-8aa5-ecf2ad503b62 +# ╠═a2e69f42-01da-46f6-b2af-b4f71785cdb4 +# ╠═1b9d8e78-76d0-48a0-81ae-64e548ed92cc +# ╠═80bee424-ea43-4c4c-827c-68c913892921 +# ╠═f03fb88b-c58e-4739-817a-3428e22ede95 +# ╠═ba078b71-c187-4531-8c9c-4b5b952dad23 +# ╠═a146d807-60a2-4831-a5ab-8c772c7f09ba +# ╠═14edd34a-865b-4f20-b2de-d0d2ce92a8dc +# ╠═95e9b392-a8de-4f5b-97f2-6f3b3977eb95 +# ╠═d041159c-9867-4d3a-bb5f-6b6e03a5b7e8 +# ╠═7ff02758-d69a-4857-b730-192ce0d3e41b +# ╟─00000000-0000-0000-0000-000000000001 +# ╟─00000000-0000-0000-0000-000000000002 diff --git a/src/visualize.jl b/src/visualize.jl index ef5e23d4..5242559b 100644 --- a/src/visualize.jl +++ b/src/visualize.jl @@ -1,55 +1,24 @@ using Luxor -struct Rescaler{T} - xmin::T - xmax::T - ymin::T - ymax::T - pad::T -end - -getscale(r::Rescaler) = min(1/(r.xmax-r.xmin+2*r.pad), 1/(r.ymax-r.ymin+2*r.pad)) - -function config_plotting(sites) - n = length(sites) - if n <= 1 - return (1.0, 0.5, 0.4, 1.0) - end - shortest_distance = Inf - for i=1:n - for j=i+1:n - shortest_distance = min(sqrt(sum(abs2, sites[i] .- sites[j])), shortest_distance) - end - end - - rescaler = get_rescaler(sites, 0.0) - xpad = (rescaler.xmax - rescaler.xmin) * 0.2 + shortest_distance - ypad = (rescaler.ymax - rescaler.ymin) * 0.2 + shortest_distance - pad = max(xpad, ypad) - scale = shortest_distance - return (pad=pad, scale=scale) -end - -function (r::Rescaler{T})(x; dims=(1,2)) where T - xmin, ymin, xmax, ymax, pad = r.xmin, r.ymin, r.xmax, r.ymax, r.pad - scale = getscale(r) - if dims == (1,2) - return (x[1]-xmin+pad, ymax+pad-x[2]) .* scale - elseif dims == 1 - return (x - xmin + pad) * scale - elseif dims == 2 - return (ymax + pad - x) * scale +function autoconfig(locations; pad, kwargs...) + n = length(locations) + if n >= 1 + # compute the size and the margin + xmin = minimum(x->x[1], locations) + ymin = minimum(x->x[2], locations) + xmax = maximum(x->x[1], locations) + ymax = maximum(x->x[2], locations) + xspan = xmax - xmin + yspan = ymax - ymin + offsetx = -xmin + pad + offsety = -ymin + pad else - throw(ArgumentError("dims should be (1,2), 1 or 2.")) + xspan = 0.0 + yspan = 0.0 + offsetx = 0.0 + offsety = 0.0 end -end - -function get_rescaler(locs::AbstractVector{<:Tuple}, pad) - xmin = minimum(x->x[1], locs) - ymin = minimum(x->x[2], locs) - xmax = maximum(x->x[1], locs) - ymax = maximum(x->x[2], locs) - return Rescaler(promote(xmin, xmax, ymin, ymax, pad)...) + return GraphDisplayConfig(; pad, offsetx, offsety, xspan, yspan, kwargs...) end """ @@ -58,8 +27,9 @@ end vertex_colors=["black", "black", ...], edge_colors=["black", "black", ...], texts=["1", "2", ...], - format=SVG, + format=:png, io=nothing, + pad=1.0, kwargs... ) @@ -75,89 +45,89 @@ Keyword arguments * `vertex_colors` is a vector of color strings for specifying vertex configurations, e.g. a [`ConfigEnumerator`](@ref) instance. * `edge_colors` is a vector of color strings for specifying edge configurations. * `texts` is a vector of strings for labeling vertices. -* `format` is the output format, which can be `Compose.SVG`, `Compose.PNG`, `Compose.PDF` et al. Check the [Compose documentation](http://giovineitalia.github.io/Compose.jl/latest/) for details. +* `format` is the output format, which can be `:svg`, `:png` or `:pdf`.. * `io` can be `nothing` for the direct output, or a filename to saving to a file. For direct output, you will need a VSCode editor, an Atom editor, a Pluto notebook or a Jupyter notebook to display the image. Extra keyword arguments ------------------------------- * line, vertex and text - * `scale::Float64` = 1.0 - * `pad::Float64` = 1.5 + * `pad::Float64` = 1.0 * vertex * `vertex_text_color::String` = "black" * `vertex_stroke_color` = "black" * `vertex_fill_color` = "white" * edge * `edge_color::String` = "black" -* image size in `cm` - * `image_size::Float64` = 12 Example ------------------------------ ```jldoctest -julia> using Graphs, GenericTensorNetworks, Compose +julia> using Graphs, GenericTensorNetworks -julia> show_graph(smallgraph(:petersen); format=Compose.SVG, io=tempname(), vertex_colors=rand(["blue", "red"], 10)); +julia> show_graph(smallgraph(:petersen); format=:png, io=tempname(), vertex_colors=rand(["blue", "red"], 10)); ``` """ function show_graph(locations, edges; vertex_colors=nothing, edge_colors=nothing, texts = nothing, - format=SVG, io=nothing, + format=:png, filename=nothing, + pad=1.0, kwargs...) if length(locations) == 0 - dx, dy = 12cm, 12cm - img = Compose.compose(Compose.context()) + _draw(()->nothing, 100, 100; format, filename) else - img, (dx, dy) = viz_graph(locations, edges; vertex_colors=vertex_colors, edge_colors=edge_colors, texts=texts, config=GraphDisplayConfig(; config_plotting(locations)..., kwargs...)) - end - if io === nothing - Compose.set_default_graphic_size(dx, dy) - return img - else - return format(io, dx, dy)(img) + config = autoconfig(locations; pad, kwargs...) + Dx, Dy = (config.xspan+2*config.pad)*config.unit, (config.yspan+2*config.pad)*config.unit + _draw(Dx, Dy; format, filename) do + _show_graph(map(loc->(loc[1]+config.offsetx, loc[2]+config.offsety), locations), edges, vertex_colors, edge_colors, texts, config) + end end end -function show_graph(graph::SimpleGraph; locs=spring_layout(graph), kwargs...) + +# NOTE: the final positions are in range [-5, 5] +function show_graph(graph::SimpleGraph; C=5.0, locs=map(x->x .* C, spring_layout(graph)), kwargs...) show_graph(locs, [(e.src, e.dst) for e in edges(graph)]; kwargs...) end -function fit_image(rescaler::Rescaler, image_size, imgs...) - X = rescaler.xmax - rescaler.xmin + 2*rescaler.pad - Y = rescaler.ymax - rescaler.ymin + 2*rescaler.pad - img_rescale = image_size/max(X, Y)*cm - if Y < X - return Compose.compose(Compose.context(0, 0, 1.0, X/Y), imgs...), (X*img_rescale, Y*img_rescale) +function _draw(f, Dx, Dy; format, filename) + if filename === nothing + if format == :pdf + _format = tempname()*".pdf" + else + _format = format + end else - return Compose.compose(Compose.context(0, 0, Y/X, 1.0), imgs...), (X*img_rescale, Y*img_rescale) + _format = filename end + Luxor.Drawing(Dx, Dy, _format) + Luxor.origin(0, 0) + f() + Luxor.finish() + Luxor.preview() end - -# Returns a 2-tuple of (image::Context, size) -function viz_graph(locs, edges; vertex_colors, edge_colors, texts, config) - rescaler = get_rescaler(locs, config.pad) - img = _viz_atoms(rescaler.(locs), edges, vertex_colors, edge_colors, texts, config, getscale(rescaler)) - return fit_image(rescaler, config.image_size, img) -end - Base.@kwdef struct GraphDisplayConfig # line, vertex and text - scale::Float64 = 1.0 - pad::Float64 = 1.5 + pad::Float64 = 1.0 + unit::Int = 60 # how many pixels as unit? + offsetx::Float64 = 0.0 # the zero of x axis + offsety::Float64 = 0.0 # the zero of y axis + xspan::Float64 = 1.0 + yspan::Float64 = 1.0 # vertex vertex_text_color::String = "black" vertex_stroke_color = "black" vertex_fill_color = "white" + vertex_size::Float64 = 0.15 + vertex_fontsize::Float64 = 12 + vertex_line_width::Float64 = 1 # in pt # edge edge_color::String = "black" - # image size in cm - image_size::Float64 = 12 + edge_line_width::Float64 = 1 # in pt end -function _viz_atoms(locs, edges, vertex_colors, edge_colors, texts, config, rescale) - rescale = rescale * config.image_size * config.scale * 1.6 +function _show_graph(locs, edges, vertex_colors, edge_colors, texts, config) if vertex_colors !== nothing @assert length(locs) == length(vertex_colors) else @@ -171,30 +141,37 @@ function _viz_atoms(locs, edges, vertex_colors, edge_colors, texts, config, resc if texts !== nothing @assert length(locs) == length(texts) end - img1 = Viznet.canvas() do - for (i, vertex) in enumerate(locs) - draw_vertex(vertex...; fill_color=vertex_colors[i], stroke_color=config.vertex_stroke_color, r=0.15cm*rescale, line_width=0.3mm*rescale) - if config.vertex_text_color !== "transparent" - draw_text(vertex..., texts === nothing ? "$i" : texts[i]; fontsize=4pt*rescale, color=config.vertex_text_color) - end - end - for (k, (i, j)) in enumerate(edges) - edge_styles[k] >> (locs[i], locs[j]) - draw_edge(locs...; color=edge_colors[k], line_width = 0.3mm*rescale) + for (i, vertex) in enumerate(locs) + draw_vertex(vertex...; fill_color=vertex_colors[i], stroke_color=config.vertex_stroke_color, r=config.vertex_size, line_width=config.vertex_line_width, unit=config.unit) + if config.vertex_text_color !== "transparent" + draw_text(vertex..., texts === nothing ? "$i" : texts[i]; fontsize=config.vertex_fontsize, color=config.vertex_text_color, unit=config.unit) end end - Compose.compose(Compose.context(), img1) + for (k, (i, j)) in enumerate(edges) + draw_edge(locs[i], locs[j]; color=edge_colors[k], line_width=config.edge_line_width, r=config.vertex_size, unit=config.unit) + end +end +function draw_text(x, y, text; fontsize, color, unit) + Luxor.fontsize(fontsize) + setcolor(color) + Luxor.text(text, Point(unit*x, unit*y), valign=:middle, halign=:center) end -draw_text(i, j, text; fontsize, color) -function draw_edge(i, j; color, line_width) +function draw_edge(i, j; color, line_width, r, unit) + setcolor(color) setline(line_width) + a, b = Point(i...), Point(j...) + nints, ip1, ip2 = intersectionlinecircle(a, b, a, r) + a_ = ip1 + nints, ip1, ip2 = intersectionlinecircle(a, b, b, r) + b_ = ip2 + line(a_ * unit, b_ * unit, :stroke) end -function draw_vertex(x, y; stroke_color, fill_color, line_width, r) +function draw_vertex(x, y; stroke_color, fill_color, line_width, r, unit) setcolor(fill_color) - circle(Point(x, y), r, :fill) + circle(unit*Point(x, y), unit*r, :fill) setline(line_width) setcolor(stroke_color) - circle(Point(x, y), r, :stroke) + circle(Point(unit*x, unit*y), unit*r, :stroke) end """ @@ -281,7 +258,7 @@ end vertex_configs=nothing, edge_configs=nothing, texts=["1", "2", ...], - format=SVG, + format=:png, io=nothing, kwargs...) @@ -298,79 +275,65 @@ Keyword arguments * `vertex_configs` is an iterator of bit strings for specifying vertex configurations, e.g. a [`ConfigEnumerator`](@ref) instance. * `edge_configs` is an iterator of bit strings for specifying edge configurations. * `texts` is a vector of strings for labeling vertices. -* `format` is the output format, which can be `"svg"` or `"png"`. Check the [Luxor documentation]() for details. +* `format` is the output format, which can be `:svg`, `:pdf` or `:png`. * `io` can be `nothing` for the direct output, or a filename to saving to a file. For direct output, you will need a VSCode editor, an Atom editor, a Pluto notebook or a Jupyter notebook to display the image. Extra keyword arguments ------------------------------- * line, vertex and text - * `scale::Float64` = 1.0 - * `pad::Float64` = 1.5 + * `pad::Float64` = 1.0 * vertex * `vertex_text_color::String` = "black" * `vertex_stroke_color` = "black" * `vertex_fill_color` = "white" * edge * `edge_color::String` = "black" -* image size in `cm` - * `image_size::Float64` = 12 Example ------------------------------- ```jldoctest -julia> using Graphs, GenericTensorNetworks, Compose +julia> using Graphs, GenericTensorNetworks -julia> show_gallery(smallgraph(:petersen), (2, 3); format=Compose.SVG, io=tempname(), vertex_configs=[rand(Bool, 10) for k=1:6]); +julia> show_gallery(smallgraph(:petersen), (2, 3); format=:png, io=tempname(), vertex_configs=[rand(Bool, 10) for k=1:6]); ``` """ -function show_gallery(graph::SimpleGraph, grid::Tuple{Int,Int}; locs=spring_layout(graph), kwargs...) +function show_gallery(graph::SimpleGraph, grid::Tuple{Int,Int}; C=5.0, locs=map(x->x .* C, spring_layout(graph)), kwargs...) show_gallery(locs, [(e.src, e.dst) for e in edges(graph)], grid; kwargs...) end function show_gallery(locs, edges, grid::Tuple{Int,Int}; vertex_configs=nothing, edge_configs=nothing, texts=nothing, - format=SVG, io=nothing, - image_size = 12/max(grid...), - scale=0.7, kwargs...) + format=:png, filename=nothing, + pad=1.0, + kwargs...) + config = autoconfig(locs; pad, kwargs...) m, n = grid nv, ne = length(locs), length(edges) - imgs = Compose.Context[] - display_config = GraphDisplayConfig(; config_plotting(locs)..., image_size, scale, kwargs...) - for i=1:m - for j=1:n - # set colors - k = (i-1) * n + j - vertex_colors = if vertex_configs isa Nothing - fill("white", nv) - else - k > length(vertex_configs) && break - [iszero(vertex_configs[k][i]) ? display_config.vertex_fill_color : "red" for i=1:nv] - end - edge_colors = if edge_configs isa Nothing - fill("black", ne) - else - k > length(edge_configs) && break - [iszero(edge_configs[k][i]) ? display_config.edge_color : "red" for i=1:ne] + dx = (config.xspan+2*config.pad)*config.unit + dy = (config.yspan+2*config.pad)*config.unit + Dx, Dy = dx*n, dy*m + locs = map(loc->(loc[1]+config.offsetx, loc[2]+config.offsety), locs) + _draw(Dx, Dy; format, filename) do + for i=1:m + for j=1:n + origin((j-1)*dx, (i-1)*dy) + # set colors + k = (i-1) * n + j + vertex_colors = if vertex_configs isa Nothing + fill("white", nv) + else + k > length(vertex_configs) && break + [iszero(vertex_configs[k][i]) ? config.vertex_fill_color : "red" for i=1:nv] + end + edge_colors = if edge_configs isa Nothing + fill("black", ne) + else + k > length(edge_configs) && break + [iszero(edge_configs[k][i]) ? config.edge_color : "red" for i=1:ne] + end + _show_graph(locs, edges, vertex_colors, edge_colors, texts, config) end - - img, (dx, dy) = viz_graph(locs, edges; vertex_colors, edge_colors, texts, config=display_config) - push!(imgs, img) end end - return tile_images(imgs, grid; image_size=(display_config.image_size, display_config.image_size), io, format) -end - -function tile_images(imgs, grid; image_size=(3.0, 3.0), format=SVG, io=nothing) - m, n = grid - dx, dy = (image_size[1]*n)*cm, (image_size[2]*m)*cm - img = Compose.compose(context(), - ntuple(k->(context((mod1(k,n)-1)/n, ((k-1)÷n)/m, 1.0/n, 1.0/m), imgs[k]), min(m*n, length(imgs)))...) - - if io === nothing - Compose.set_default_graphic_size(dx, dy) - return img - else - return format(io, dx, dy)(img) - end -end +end \ No newline at end of file From 91c272f44c952def1a3e8b1ef1ac9afbe51b1a7e Mon Sep 17 00:00:00 2001 From: GiggleLiu Date: Thu, 16 Jun 2022 04:35:47 -0400 Subject: [PATCH 3/7] new luxor viz --- src/GenericTensorNetworks.jl | 2 +- src/visualize.jl | 100 ++++++++++++++++++++++++++--------- test/visualize.jl | 11 ++++ 3 files changed, 86 insertions(+), 27 deletions(-) diff --git a/src/GenericTensorNetworks.jl b/src/GenericTensorNetworks.jl index 06fbcf83..b9014193 100644 --- a/src/GenericTensorNetworks.jl +++ b/src/GenericTensorNetworks.jl @@ -50,7 +50,7 @@ export solve, SizeMax, SizeMin, CountingAll, CountingMax, CountingMin, GraphPoly export save_configs, load_configs, hamming_distribution, save_sumproduct, load_sumproduct # Visualization -export show_graph, spring_layout, show_gallery +export show_graph, spring_layout, show_gallery, show_einsum project_relative_path(xs...) = normpath(joinpath(dirname(dirname(pathof(@__MODULE__))), xs...)) diff --git a/src/visualize.jl b/src/visualize.jl index 5242559b..652309f8 100644 --- a/src/visualize.jl +++ b/src/visualize.jl @@ -1,4 +1,6 @@ -using Luxor +module ShowGraph +using Luxor, Graphs +export show_graph, show_einsum, show_gallery, spring_layout function autoconfig(locations; pad, kwargs...) n = length(locations) @@ -27,6 +29,7 @@ end vertex_colors=["black", "black", ...], edge_colors=["black", "black", ...], texts=["1", "2", ...], + vertex_sizes=nothing, format=:png, io=nothing, pad=1.0, @@ -69,6 +72,8 @@ julia> show_graph(smallgraph(:petersen); format=:png, io=tempname(), vertex_colo """ function show_graph(locations, edges; vertex_colors=nothing, + vertex_sizes=nothing, + vertex_text_colors=nothing, edge_colors=nothing, texts = nothing, format=:png, filename=nothing, @@ -80,7 +85,7 @@ function show_graph(locations, edges; config = autoconfig(locations; pad, kwargs...) Dx, Dy = (config.xspan+2*config.pad)*config.unit, (config.yspan+2*config.pad)*config.unit _draw(Dx, Dy; format, filename) do - _show_graph(map(loc->(loc[1]+config.offsetx, loc[2]+config.offsety), locations), edges, vertex_colors, edge_colors, texts, config) + _show_graph(map(loc->(loc[1]+config.offsetx, loc[2]+config.offsety), locations), edges, vertex_colors, vertex_text_colors, vertex_sizes, edge_colors, texts, config) end end end @@ -100,7 +105,7 @@ function _draw(f, Dx, Dy; format, filename) else _format = filename end - Luxor.Drawing(Dx, Dy, _format) + Luxor.Drawing(round(Int,Dx), round(Int,Dy), _format) Luxor.origin(0, 0) f() Luxor.finish() @@ -127,42 +132,32 @@ Base.@kwdef struct GraphDisplayConfig edge_line_width::Float64 = 1 # in pt end -function _show_graph(locs, edges, vertex_colors, edge_colors, texts, config) - if vertex_colors !== nothing - @assert length(locs) == length(vertex_colors) - else - vertex_colors = fill(config.vertex_fill_color, length(locs)) - end - if edge_colors !== nothing - @assert length(edges) == length(edge_colors) - else - edge_colors = fill(config.edge_color, length(edges)) - end - if texts !== nothing - @assert length(locs) == length(texts) - end +function _show_graph(locs, edges, vertex_colors, vertex_text_colors, vertex_sizes, edge_colors, texts, config) for (i, vertex) in enumerate(locs) - draw_vertex(vertex...; fill_color=vertex_colors[i], stroke_color=config.vertex_stroke_color, r=config.vertex_size, line_width=config.vertex_line_width, unit=config.unit) - if config.vertex_text_color !== "transparent" - draw_text(vertex..., texts === nothing ? "$i" : texts[i]; fontsize=config.vertex_fontsize, color=config.vertex_text_color, unit=config.unit) - end + draw_vertex(vertex...; fill_color=_get(vertex_colors, i, config.vertex_fill_color), stroke_color=config.vertex_stroke_color, r=_get(vertex_sizes, i, config.vertex_size), line_width=config.vertex_line_width, unit=config.unit) + draw_text(vertex..., _get(texts, i, "$i"); fontsize=config.vertex_fontsize, color=_get(vertex_text_colors, i, config.vertex_text_color), unit=config.unit) end for (k, (i, j)) in enumerate(edges) - draw_edge(locs[i], locs[j]; color=edge_colors[k], line_width=config.edge_line_width, r=config.vertex_size, unit=config.unit) + ri = _get(vertex_sizes, i, config.vertex_size) + rj = _get(vertex_sizes, j, config.vertex_size) + draw_edge(locs[i], locs[j]; color=_get(edge_colors,k,config.edge_color), line_width=config.edge_line_width, ri, rj, unit=config.unit) end end +_get(::Nothing, i::Int, default) = default +_get(x, i::Int, default) = x[i] + function draw_text(x, y, text; fontsize, color, unit) Luxor.fontsize(fontsize) setcolor(color) Luxor.text(text, Point(unit*x, unit*y), valign=:middle, halign=:center) end -function draw_edge(i, j; color, line_width, r, unit) +function draw_edge(i, j; color, line_width, ri, rj, unit) setcolor(color) setline(line_width) a, b = Point(i...), Point(j...) - nints, ip1, ip2 = intersectionlinecircle(a, b, a, r) + nints, ip1, ip2 = intersectionlinecircle(a, b, a, ri) a_ = ip1 - nints, ip1, ip2 = intersectionlinecircle(a, b, b, r) + nints, ip1, ip2 = intersectionlinecircle(a, b, b, rj) b_ = ip2 line(a_ * unit, b_ * unit, :stroke) end @@ -303,6 +298,8 @@ end function show_gallery(locs, edges, grid::Tuple{Int,Int}; vertex_configs=nothing, edge_configs=nothing, + vertex_sizes=nothing, + vertex_text_colors=nothing, texts=nothing, format=:png, filename=nothing, pad=1.0, @@ -332,8 +329,59 @@ function show_gallery(locs, edges, grid::Tuple{Int,Int}; k > length(edge_configs) && break [iszero(edge_configs[k][i]) ? config.edge_color : "red" for i=1:ne] end - _show_graph(locs, edges, vertex_colors, edge_colors, texts, config) + _show_graph(locs, edges, vertex_colors, vertex_text_colors, vertex_sizes, edge_colors, texts, config) end end end +end + +end + +using .ShowGraph +function show_einsum(ein::AbstractEinsum; + label_size=0.15, + label_color="black", + open_label_color="red", + tensor_size=0.3, + tensor_color="black", + tensor_text_color="white", + annotate_labels=true, + annotate_tensors=false, + tensor_locs=nothing, + label_locs=nothing, # dict + C = 5.0, + kwargs... + ) + ixs = getixsv(ein) + iy = getiyv(ein) + labels = uniquelabels(ein) + m = length(labels) + n = length(ixs) + labelmap = Dict(zip(labels, 1:m)) + colors = [["transparent" for l in labels]..., fill(tensor_color, n)...] + sizes = [fill(label_size, m)..., fill(tensor_size, n)...] + texts = [[annotate_labels ? "$(labels[i])" : "" for i=1:m]..., [annotate_tensors ? "$i" : "" for i=1:n]...] + vertex_text_colors = [[l ∈ iy ? open_label_color : label_color for l in labels]..., [tensor_text_color for ix in ixs]...] + graph = SimpleGraph(m+n) + for (j, ix) in enumerate(ixs) + for l in ix + add_edge!(graph, j+m, labelmap[l]) + end + end + if label_locs === nothing && tensor_locs === nothing + locs=map(x->x .* C, spring_layout(graph)) + elseif label_locs === nothing + # infer label locs from tensor locs + label_locs = [(lst = [iloc for (iloc,ix) in zip(tensor_locs, ixs) if l ∈ ix]; reduce((x,y)->x .+ y, lst) ./ length(lst)) for l in labels] + locs = [label_locs..., tensor_locs...] + elseif tensor_locs === nothing + # infer tensor locs from label locs + tensor_locs = [length(ix) == 0 ? (C*randn(), C*randn()) : reduce((x,y)-> x .+ y, [label_locs[l] for l in ix]) ./ length(ix) for ix in ixs] + locs = [label_locs..., tensor_locs...] + else + locs = [label_locs..., tensor_locs...] + end + show_graph(locs, [(e.src, e.dst) for e in edges(graph)]; texts, vertex_colors=colors, + vertex_text_colors, + vertex_sizes=sizes, vertex_line_width=0, kwargs...) end \ No newline at end of file diff --git a/test/visualize.jl b/test/visualize.jl index f378bbbe..e1218cc3 100644 --- a/test/visualize.jl +++ b/test/visualize.jl @@ -3,7 +3,18 @@ using GenericTensorNetworks, Test, Graphs @testset "visualize" begin locations = [(1.0, 2.0), (2.0, 3.0)] @test show_graph(locations, [(1, 2)]) isa Any + @test show_graph([], []) isa Any + @test show_graph([], []; format=:pdf) isa Any + @test show_graph([], []; filename=tempname()*".svg") isa Any graph = smallgraph(:petersen) @test show_graph(graph) isa Any @test show_gallery(graph, (2,4); vertex_configs=[rand(Bool, 15) for i=1:10], edge_configs=[rand(Bool, 15) for i=1:10]) isa Any +end + +@testset "einsum" begin + graph = smallgraph(:petersen) + @test show_einsum(pb.code; C=3, annotate_tensors=true) isa Any + @test show_einsum(pb.code; C=3, tensor_locs=[(randn(), randn()) .* 2 for i=1:25]) isa Any + @test show_einsum(pb.code; label_locs=[(randn(), randn()) .* 2 for i=1:10]) isa Any + @test show_einsum(pb.code; tensor_locs=[(randn(), randn()) for i=1:25], label_locs=[(randn(), randn()) for i=1:10]) isa Any end \ No newline at end of file From 123a733e37fea570ce80e28b14413ef4d2a70603 Mon Sep 17 00:00:00 2001 From: GiggleLiu Date: Thu, 16 Jun 2022 15:51:05 -0400 Subject: [PATCH 4/7] polish docstring --- Project.toml | 5 +- notebooks/dugg.jl | 1281 ---------------------------------- notebooks/luxor.jl | 1029 --------------------------- notebooks/petersen.jl | 936 ------------------------- src/GenericTensorNetworks.jl | 2 +- src/visualize.jl | 261 +++++-- test/visualize.jl | 5 +- 7 files changed, 191 insertions(+), 3328 deletions(-) delete mode 100644 notebooks/dugg.jl delete mode 100644 notebooks/luxor.jl delete mode 100644 notebooks/petersen.jl diff --git a/Project.toml b/Project.toml index 576b24e4..3ad15cf5 100644 --- a/Project.toml +++ b/Project.toml @@ -6,8 +6,6 @@ version = "1.0.4" [deps] AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" -Cairo = "159f3aea-2a34-519c-b102-8c37f9878175" -Compose = "a81c6b42-2e10-5240-aca2-a61377ecd94b" DelimitedFiles = "8bb1440f-4735-579b-a4ab-409b98df4dab" Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b" FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" @@ -30,10 +28,9 @@ TropicalNumbers = "b3a74e9c-7526-4576-a4eb-79c0d4c32334" [compat] AbstractTrees = "0.3, 0.4" CUDA = "3" -Cairo = "1.0" -Compose = "0.9" FFTW = "1.4" Graphs = "1.7" +Luxor = "3" Mods = "1.3" OMEinsum = "0.6.1" OMEinsumContractionOrders = "0.6" diff --git a/notebooks/dugg.jl b/notebooks/dugg.jl deleted file mode 100644 index ee85c737..00000000 --- a/notebooks/dugg.jl +++ /dev/null @@ -1,1281 +0,0 @@ -### A Pluto.jl notebook ### -# v0.19.8 - -using Markdown -using InteractiveUtils - -# ╔═╡ c37be80e-e9ba-11ec-30ea-43b3344b86ac -using GenericTensorNetworks - -# ╔═╡ cc58e2d2-1552-405d-9555-0e5dc31c47ab -using UnitDiskMapping, Graphs - -# ╔═╡ b6d1e7b1-b40e-4166-94f1-f8eea3a01a7b -using Luxor - -# ╔═╡ 5faa573e-c3d8-48b3-a1cd-fd86f3f5b9b6 -using MathTeXEngine - -# ╔═╡ cccc014d-b5e9-4e31-9860-af1b4f052e8e -locs = [(0, 0), (0, 1), (0, 2), (0, 3), (1,1), (1,3), (1,4), (2, 0), (2,2), (2,4), (3, 0), (3, 1), (3,2), (3,3), (4,0), (4,2), (4,4)] - -# ╔═╡ 1c4f6598-630d-4db2-b571-033682094ce8 -graph = unit_disk_graph(locs, 1.5) - -# ╔═╡ 6770c854-b595-4073-9ce9-6a9c96eafa30 -show_graph(graph; locs=[(j, -i) for (i, j) in locs], texts=fill("", length(locs))) - -# ╔═╡ 694628f3-27b3-493a-a787-dc95fcce8163 -res1 = solve(IndependentSet(graph), SingleConfigMax()) - -# ╔═╡ 48cf19bd-6485-4b7e-b6a6-b9bb90841f22 -show_graph(graph; locs=[(j, -i) for (i, j) in locs], texts=fill("", length(locs)), vertex_colors=[iszero(c) ? "white" : "red" for c in res1[].c.data]) - -# ╔═╡ bb39a1e8-8dca-493c-8c13-f022cdf6afe1 -res2 = solve(IndependentSet(graph), ConfigsMax()) - -# ╔═╡ 7d9b39df-44f1-42a4-80aa-4cbf07d9f480 -show_gallery(graph, (1,4); locs=[(j, -i) for (i, j) in locs], texts=fill("", length(locs)), vertex_configs=res2[].c.data, image_size=5) - -# ╔═╡ d2b24ea3-c6d5-4eda-b6ed-e78d61cb67f7 -res3 = solve(IndependentSet(graph), GraphPolynomial()) - -# ╔═╡ 8da609ba-17b3-4eeb-8819-afc7078eb339 -grid = map_graph(smallgraph(:petersen)).grid_graph - -# ╔═╡ 55311eab-433a-432b-a5b9-a855dd0f90e8 -locs2 = findall(!isempty, grid.content) - -# ╔═╡ a61154ab-1b4a-43b7-9c03-522b973dbb4f -show_graph(SimpleGraph(grid); locs = [(ci.I[2], ci.I[1]) for ci in locs2], texts=fill("", length(locs2)), vertex_colors=fill("black", length(locs2))) - -# ╔═╡ 0c4db665-4c1d-4754-802e-2866d69acc75 -res_petersen = solve(IndependentSet(SimpleGraph(grid)), SingleConfigMax())[] - -# ╔═╡ 65b665c6-3ec9-43ef-871c-d890dd0a4680 -show_graph(SimpleGraph(grid); locs = [(ci.I[2], ci.I[1]) for ci in locs2], texts=fill("", length(locs2)), vertex_colors=[iszero(c) ? "white" : "red" for c in res_petersen.c.data], image_size=22) - -# ╔═╡ 0459e421-f51f-4da6-a194-42653e5f2dfc -keys(Luxor.Colors.color_names) - -# ╔═╡ 810e913f-a6f9-4509-8c03-95f90fe7499e -function draw_solution(yellows, greens) - rad = 10 - centers = [Point(y*50, x*50) for (x, y) in locs] - origin(Point(minimum(getfield.(centers, :x)) + 2*rad, minimum(getfield.(centers, :y)) + 2*rad)) - # show nodes - #setcolor("white") - #for p in centers - # circle(p, rad, :fill) - #end - # show unavailable points - setcolor("red") - for i=0:4 - for j=0:4 - if (i, j) ∉ locs - # show cross - line(Point(j*50-rad, i*50-rad), Point(j*50+rad, i*50+rad), :stroke) - line(Point(j*50-rad, i*50+rad), Point(j*50+rad, i*50-rad), :stroke) - end - end - end - - setcolor("black") - for p in centers - circle(p, rad, :stroke) - end - # # show edges - setcolor("black") - # for e in edges(graph) - # a, b = Point(centers[e.src]...), Point(centers[e.dst]...) - # nints, ip1, ip2 = intersectionlinecircle(a, b, a, rad) - # a_ = ip1 - # nints, ip1, ip2 = intersectionlinecircle(a, b, b, rad) - # b_ = ip2 - # line(a_, b_, :stroke) - # end - - graph = square_lattice_graph(ones(Bool, 5, 5)) - _centers = [Point((ci.I[2]-1)*50, (ci.I[1]-1)*50) for ci in CartesianIndices((5, 5))] - for e in edges(graph) - a, b = Point(_centers[e.src]...), Point(_centers[e.dst]...) - nints, ip1, ip2 = intersectionlinecircle(a, b, a, rad) - a_ = ip1 - nints, ip1, ip2 = intersectionlinecircle(a, b, b, rad) - b_ = ip2 - line(a_, b_, :stroke) - end - # show nuts - setcolor(sethue("yellow")..., 0.2) - for (i, j) in yellows - circle(50*j, 50*i, 44, :fill) - end - setcolor(sethue("limegreen")..., 0.2) - for (i, j) in greens - circle(50*j, 50*i, 44, :fill) - end -end - -# ╔═╡ d000c7bb-424e-4e30-b366-74d2303d0333 -Luxor.get_current_color() == Luxor.Colors.color_names["limegreen"] - -# ╔═╡ 3ced1a69-2a4d-4942-a72d-5d668844d2a5 -@drawsvg draw_solution([(1,1)], [(2, 2)]) 500 250 - -# ╔═╡ 76473c61-dbc6-4493-afb2-930ad3fd98af -@drawsvg draw_solution([(1,1)], [(1, 3)]) 500 250 - -# ╔═╡ d9f3717b-8983-429d-8dbf-cd1fe505bcec -function draw_illustrate() - draw_solution([(1, 6)], []) - setcolor("black") - text(L"\sqrt{3}", 350, 50) -end - -# ╔═╡ ff14b193-5da0-447e-a17d-9568e5e86482 -@drawsvg draw_illustrate() 500 250 - -# ╔═╡ 9726e405-b308-4b33-83d2-957a2e434e06 -let -@drawsvg begin - rad = 10 - setcolor("black") - centers = [Point(y*50, x*50) for (x, y) in locs] - origin(Point(minimum(getfield.(centers, :x)) + 2*rad, minimum(getfield.(centers, :y)) + 2*rad)) - for p in centers - circle(p, rad, :fill) - end - setcolor("black") - for e in edges(graph) - a, b = Point(centers[e.src]...), Point(centers[e.dst]...) - nints, ip1, ip2 = intersectionlinecircle(a, b, a, rad) - a_ = ip1 - nints, ip1, ip2 = intersectionlinecircle(a, b, b, rad) - b_ = ip2 - line(a_, b_, :stroke) - end -end 500 250 -end - -# ╔═╡ 1b8c61b2-45e2-439d-9f66-fd9b87bffa88 -@drawsvg let -origin() -background("grey6") -fontsize(26) -fontface("cmmi10") -sethue("white") -text("e", 0, -50) -t₁ = L"e^{i\pi} + 1 = 0" -t₂ = L"e^x = \sum^\infty_{n=0} \frac{x^n}{n!} = \lim_{n\to\infty}(1+\frac{x}{n})^n" -t₃ = L"\cos(\theta)" - -text(t₁, Point(0, -100), halign=:center, valign=:baseline, angle=0) -text(t₂, Point(0, -20), halign=:center, valign=:top, angle=0) - -line(Point(0, 132), Point(50, 132), :stroke) -line(Point(0, 132), Point(50cos(π/4), 132 - 50sin(π/4)), :stroke) - -fontsize(18) -text(t₃, Point(0, 120), halign = :left, valign = :baseline, angle = -π/4, rotationfixed = false) -finish() -end - -# ╔═╡ 00000000-0000-0000-0000-000000000001 -PLUTO_PROJECT_TOML_CONTENTS = """ -[deps] -GenericTensorNetworks = "3521c873-ad32-4bb4-b63d-f4f178f42b49" -Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" -Luxor = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" -MathTeXEngine = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" -UnitDiskMapping = "1b61a8d9-79ed-4491-8266-ef37f39e1727" - -[compat] -GenericTensorNetworks = "~1.0.4" -Graphs = "~1.7.0" -Luxor = "~3.3.0" -MathTeXEngine = "~0.4.1" -UnitDiskMapping = "~0.1.1" -""" - -# ╔═╡ 00000000-0000-0000-0000-000000000002 -PLUTO_MANIFEST_TOML_CONTENTS = """ -# This file is machine-generated - editing it directly is not advised - -julia_version = "1.8.0-rc1" -manifest_format = "2.0" -project_hash = "77fed6c30d30ca45eeea5d8fafc46db756399cdb" - -[[deps.AbstractFFTs]] -deps = ["ChainRulesCore", "LinearAlgebra"] -git-tree-sha1 = "6f1d9bc1c08f9f4a8fa92e3ea3cb50153a1b40d4" -uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" -version = "1.1.0" - -[[deps.AbstractTrees]] -git-tree-sha1 = "03e0550477d86222521d254b741d470ba17ea0b5" -uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" -version = "0.3.4" - -[[deps.Adapt]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "af92965fb30777147966f58acb05da51c5616b5f" -uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "3.3.3" - -[[deps.ArgTools]] -uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.1" - -[[deps.ArnoldiMethod]] -deps = ["LinearAlgebra", "Random", "StaticArrays"] -git-tree-sha1 = "62e51b39331de8911e4a7ff6f5aaf38a5f4cc0ae" -uuid = "ec485272-7323-5ecc-a04f-4719b315124d" -version = "0.2.0" - -[[deps.Artifacts]] -uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" - -[[deps.Automa]] -deps = ["Printf", "ScanByte", "TranscodingStreams"] -git-tree-sha1 = "d50976f217489ce799e366d9561d56a98a30d7fe" -uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b" -version = "0.8.2" - -[[deps.BFloat16s]] -deps = ["LinearAlgebra", "Printf", "Random", "Test"] -git-tree-sha1 = "a598ecb0d717092b5539dbbe890c98bac842b072" -uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" -version = "0.2.0" - -[[deps.Base64]] -uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" - -[[deps.BatchedRoutines]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "441db9f0399bcfb4eeb8b891a6b03f7acc5dc731" -uuid = "a9ab73d0-e05c-5df1-8fde-d6a4645b8d8e" -version = "0.2.2" - -[[deps.BetterExp]] -git-tree-sha1 = "dd3448f3d5b2664db7eceeec5f744535ce6e759b" -uuid = "7cffe744-45fd-4178-b173-cf893948b8b7" -version = "0.1.0" - -[[deps.Bzip2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" -uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" -version = "1.0.8+0" - -[[deps.CEnum]] -git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" -uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" -version = "0.4.2" - -[[deps.CUDA]] -deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CompilerSupportLibraries_jll", "ExprTools", "GPUArrays", "GPUCompiler", "LLVM", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "SpecialFunctions", "TimerOutputs"] -git-tree-sha1 = "925a16b909fdae16920c1319feadecffb6695b9d" -uuid = "052768ef-5323-5732-b1bb-66c8b64840ba" -version = "3.10.1" - -[[deps.Cairo]] -deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] -git-tree-sha1 = "d0b3f8b4ad16cb0a2988c6788646a5e6a17b6b1b" -uuid = "159f3aea-2a34-519c-b102-8c37f9878175" -version = "1.0.5" - -[[deps.Cairo_jll]] -deps = ["Artifacts", "Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" -uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" -version = "1.16.1+1" - -[[deps.ChainRulesCore]] -deps = ["Compat", "LinearAlgebra", "SparseArrays"] -git-tree-sha1 = "9489214b993cd42d17f44c36e359bf6a7c919abf" -uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.15.0" - -[[deps.ChangesOfVariables]] -deps = ["ChainRulesCore", "LinearAlgebra", "Test"] -git-tree-sha1 = "1e315e3f4b0b7ce40feded39c73049692126cf53" -uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" -version = "0.1.3" - -[[deps.ColorTypes]] -deps = ["FixedPointNumbers", "Random"] -git-tree-sha1 = "0f4e115f6f34bbe43c19751c90a38b2f380637b9" -uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" -version = "0.11.3" - -[[deps.ColorVectorSpace]] -deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"] -git-tree-sha1 = "d08c20eef1f2cbc6e60fd3612ac4340b89fea322" -uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" -version = "0.9.9" - -[[deps.Colors]] -deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] -git-tree-sha1 = "417b0ed7b8b838aa6ca0a87aadf1bb9eb111ce40" -uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" -version = "0.12.8" - -[[deps.Combinatorics]] -git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" -uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" -version = "1.0.2" - -[[deps.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 = "9be8be1d8a6f44b96482c8af52238ea7987da3e3" -uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "3.45.0" - -[[deps.CompilerSupportLibraries_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "0.5.2+0" - -[[deps.Compose]] -deps = ["Base64", "Colors", "DataStructures", "Dates", "IterTools", "JSON", "LinearAlgebra", "Measures", "Printf", "Random", "Requires", "Statistics", "UUIDs"] -git-tree-sha1 = "9a2695195199f4f20b94898c8a8ac72609e165a4" -uuid = "a81c6b42-2e10-5240-aca2-a61377ecd94b" -version = "0.9.3" - -[[deps.DataAPI]] -git-tree-sha1 = "fb5f5316dd3fd4c5e7c30a24d50643b73e37cd40" -uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.10.0" - -[[deps.DataStructures]] -deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0" -uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.13" - -[[deps.DataValueInterfaces]] -git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" -uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" -version = "1.0.0" - -[[deps.Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" - -[[deps.DelimitedFiles]] -deps = ["Mmap"] -uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" - -[[deps.Dierckx]] -deps = ["Dierckx_jll"] -git-tree-sha1 = "633c119fcfddf61fb4c75d77ce3ebab552a44723" -uuid = "39dd38d3-220a-591b-8e3c-4c3a8c710a94" -version = "0.5.2" - -[[deps.Dierckx_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "6596b96fe1caff3db36415eeb6e9d3b50bfe40ee" -uuid = "cd4c43a9-7502-52ba-aa6d-59fb2a88580b" -version = "0.1.0+0" - -[[deps.Distributed]] -deps = ["Random", "Serialization", "Sockets"] -uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" - -[[deps.DocStringExtensions]] -deps = ["LibGit2"] -git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b" -uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" -version = "0.8.6" - -[[deps.Downloads]] -deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] -uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.6.0" - -[[deps.EarCut_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "3f3a2501fa7236e9b911e0f7a588c657e822bb6d" -uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" -version = "2.2.3+0" - -[[deps.Expat_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "bad72f730e9e91c08d9427d5e8db95478a3c323d" -uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.4.8+0" - -[[deps.ExprTools]] -git-tree-sha1 = "56559bbef6ca5ea0c0818fa5c90320398a6fbf8d" -uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" -version = "0.1.8" - -[[deps.FFMPEG]] -deps = ["FFMPEG_jll"] -git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" -uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" -version = "0.4.1" - -[[deps.FFMPEG_jll]] -deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "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" - -[[deps.FFTW]] -deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] -git-tree-sha1 = "505876577b5481e50d089c1c68899dfb6faebc62" -uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" -version = "1.4.6" - -[[deps.FFTW_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea" -uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" -version = "3.3.10+0" - -[[deps.FileIO]] -deps = ["Pkg", "Requires", "UUIDs"] -git-tree-sha1 = "9267e5f50b0e12fdfd5a2455534345c4cf2c7f7a" -uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" -version = "1.14.0" - -[[deps.FileWatching]] -uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" - -[[deps.FixedPointNumbers]] -deps = ["Statistics"] -git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" -uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" -version = "0.8.4" - -[[deps.Fontconfig_jll]] -deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] -git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" -uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" -version = "2.13.93+0" - -[[deps.FreeType]] -deps = ["CEnum", "FreeType2_jll"] -git-tree-sha1 = "cabd77ab6a6fdff49bfd24af2ebe76e6e018a2b4" -uuid = "b38be410-82b0-50bf-ab77-7b57e271db43" -version = "4.0.0" - -[[deps.FreeType2_jll]] -deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] -git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9" -uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" -version = "2.10.4+0" - -[[deps.FreeTypeAbstraction]] -deps = ["ColorVectorSpace", "Colors", "FreeType", "GeometryBasics"] -git-tree-sha1 = "b5c7fe9cea653443736d264b85466bad8c574f4a" -uuid = "663a7486-cb36-511b-a19d-713bb74d65c9" -version = "0.9.9" - -[[deps.FriBidi_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" -uuid = "559328eb-81f9-559d-9380-de523a88c83c" -version = "1.0.10+0" - -[[deps.GPUArrays]] -deps = ["Adapt", "LLVM", "LinearAlgebra", "Printf", "Random", "Serialization", "Statistics"] -git-tree-sha1 = "c783e8883028bf26fb05ed4022c450ef44edd875" -uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" -version = "8.3.2" - -[[deps.GPUCompiler]] -deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "TimerOutputs", "UUIDs"] -git-tree-sha1 = "d8c5999631e1dc18d767883f621639c838f8e632" -uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" -version = "0.15.2" - -[[deps.GenericTensorNetworks]] -deps = ["AbstractTrees", "CUDA", "Cairo", "Compose", "DelimitedFiles", "Distributed", "FFTW", "Graphs", "LinearAlgebra", "Mods", "OMEinsum", "OMEinsumContractionOrders", "Polynomials", "Primes", "Printf", "Random", "Requires", "SIMDTypes", "Serialization", "StatsBase", "TropicalNumbers", "Viznet"] -git-tree-sha1 = "d98bcd88f257fc8844efebf5b93a8acea72f269c" -uuid = "3521c873-ad32-4bb4-b63d-f4f178f42b49" -version = "1.0.4" - -[[deps.GeometryBasics]] -deps = ["EarCut_jll", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] -git-tree-sha1 = "83ea630384a13fc4f002b77690bc0afeb4255ac9" -uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" -version = "0.4.2" - -[[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", "PCRE_jll", "Pkg", "Zlib_jll"] -git-tree-sha1 = "a32d672ac2c967f3deb8a81d828afc739c838a06" -uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.68.3+2" - -[[deps.Graphics]] -deps = ["Colors", "LinearAlgebra", "NaNMath"] -git-tree-sha1 = "d61890399bc535850c4bf08e4e0d3a7ad0f21cbd" -uuid = "a2bd30eb-e257-5431-a919-1863eab51364" -version = "1.1.2" - -[[deps.Graphite2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" -uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" -version = "1.3.14+0" - -[[deps.Graphs]] -deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] -git-tree-sha1 = "4888af84657011a65afc7a564918d281612f983a" -uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" -version = "1.7.0" - -[[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.Inflate]] -git-tree-sha1 = "f5fc07d4e706b84f72d54eedcc1c13d92fb0871c" -uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" -version = "0.1.2" - -[[deps.IntegerMathUtils]] -git-tree-sha1 = "f366daebdfb079fd1fe4e3d560f99a0c892e15bc" -uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" -version = "0.1.0" - -[[deps.IntelOpenMP_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "d979e54b71da82f3a65b62553da4fc3d18c9004c" -uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" -version = "2018.0.3+2" - -[[deps.InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" - -[[deps.InverseFunctions]] -deps = ["Test"] -git-tree-sha1 = "b3364212fb5d870f724876ffcd34dd8ec6d98918" -uuid = "3587e190-3f89-42d0-90ee-14403ec27112" -version = "0.1.7" - -[[deps.IrrationalConstants]] -git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151" -uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" -version = "0.1.1" - -[[deps.IterTools]] -git-tree-sha1 = "fa6287a4469f5e048d763df38279ee729fbd44e5" -uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" -version = "1.4.0" - -[[deps.IteratorInterfaceExtensions]] -git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" -uuid = "82899510-4779-5014-852e-03e436cf321d" -version = "1.0.0" - -[[deps.JLLWrappers]] -deps = ["Preferences"] -git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" -uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.4.1" - -[[deps.JSON]] -deps = ["Dates", "Mmap", "Parsers", "Unicode"] -git-tree-sha1 = "3c837543ddb02250ef42f4738347454f95079d4e" -uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "0.21.3" - -[[deps.JpegTurbo_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "b53380851c6e6664204efb2e62cd24fa5c47e4ba" -uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "2.1.2+0" - -[[deps.Juno]] -deps = ["Base64", "Logging", "Media", "Profile"] -git-tree-sha1 = "07cb43290a840908a771552911a6274bc6c072c7" -uuid = "e5e0dc1b-0480-54bc-9374-aad01c23163d" -version = "0.8.4" - -[[deps.LAME_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" -uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" -version = "3.100.1+0" - -[[deps.LERC_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" -uuid = "88015f11-f218-50d7-93a8-a6af411a945d" -version = "3.0.0+1" - -[[deps.LLVM]] -deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Printf", "Unicode"] -git-tree-sha1 = "e7e9184b0bf0158ac4e4aa9daf00041b5909bf1a" -uuid = "929cbde3-209d-540e-8aea-75f648917ca0" -version = "4.14.0" - -[[deps.LLVMExtra_jll]] -deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg", "TOML"] -git-tree-sha1 = "771bfe376249626d3ca12bcd58ba243d3f961576" -uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" -version = "0.0.16+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.LaTeXStrings]] -git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" -uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" -version = "1.3.0" - -[[deps.LazyArtifacts]] -deps = ["Artifacts", "Pkg"] -uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" - -[[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.81.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", "Pkg"] -git-tree-sha1 = "42b62845d70a619f063a7da093d995ec8e15e778" -uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" -version = "1.16.1+1" - -[[deps.Libmount_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" -uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" -version = "2.35.0+0" - -[[deps.Librsvg_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pango_jll", "Pkg", "gdk_pixbuf_jll"] -git-tree-sha1 = "25d5e6b4eb3558613ace1c67d6a871420bfca527" -uuid = "925c91fb-5dd6-59dd-8e8c-345e74382d89" -version = "2.52.4+0" - -[[deps.Libtiff_jll]] -deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] -git-tree-sha1 = "3eb79b0ca5764d4799c06699573fd8f533259713" -uuid = "89763e89-9b03-5906-acba-b20f662cd828" -version = "4.4.0+0" - -[[deps.Libuuid_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" -uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" -version = "2.36.0+0" - -[[deps.LinearAlgebra]] -deps = ["Libdl", "libblastrampoline_jll"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - -[[deps.LogExpFunctions]] -deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "09e4b894ce6a976c354a69041a04748180d43637" -uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.15" - -[[deps.Logging]] -uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" - -[[deps.Luxor]] -deps = ["Base64", "Cairo", "Colors", "Dates", "FFMPEG", "FileIO", "Juno", "LaTeXStrings", "Random", "Requires", "Rsvg"] -git-tree-sha1 = "590db54191f99a5016274784480fabf92ae7a034" -uuid = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" -version = "3.3.0" - -[[deps.MKL_jll]] -deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] -git-tree-sha1 = "e595b205efd49508358f7dc670a940c790204629" -uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" -version = "2022.0.0+0" - -[[deps.MacroTools]] -deps = ["Markdown", "Random"] -git-tree-sha1 = "3d3e902b31198a27340d0bf00d6ac452866021cf" -uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.9" - -[[deps.Markdown]] -deps = ["Base64"] -uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" - -[[deps.MathTeXEngine]] -deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "Test"] -git-tree-sha1 = "5c1e3d66b3a36029de4e5ac07ab8bafd5a8041e5" -uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" -version = "0.4.1" - -[[deps.MbedTLS_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.0+0" - -[[deps.Measures]] -git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f" -uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" -version = "0.3.1" - -[[deps.Media]] -deps = ["MacroTools", "Test"] -git-tree-sha1 = "75a54abd10709c01f1b86b84ec225d26e840ed58" -uuid = "e89f7d12-3494-54d1-8411-f7d8b9ae1f27" -version = "0.5.0" - -[[deps.Missings]] -deps = ["DataAPI"] -git-tree-sha1 = "bf210ce90b6c9eed32d25dbcae1ebc565df2687f" -uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" -version = "1.0.2" - -[[deps.Mmap]] -uuid = "a63ad114-7e13-5084-954f-fe012c677804" - -[[deps.Mods]] -git-tree-sha1 = "7416683a2cc6e8c9caee75b569c993cfe34e522d" -uuid = "7475f97c-0381-53b1-977b-4c60186c8d62" -version = "1.3.2" - -[[deps.MozillaCACerts_jll]] -uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.2.1" - -[[deps.MutableArithmetics]] -deps = ["LinearAlgebra", "SparseArrays", "Test"] -git-tree-sha1 = "4e675d6e9ec02061800d6cfb695812becbd03cdf" -uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" -version = "1.0.4" - -[[deps.NaNMath]] -git-tree-sha1 = "737a5957f387b17e74d4ad2f440eb330b39a62c5" -uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "1.0.0" - -[[deps.NetworkOptions]] -uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.2.0" - -[[deps.OMEinsum]] -deps = ["AbstractTrees", "BatchedRoutines", "CUDA", "ChainRulesCore", "Combinatorics", "LinearAlgebra", "MacroTools", "Requires", "Test", "TupleTools"] -git-tree-sha1 = "6df6ebcf525360ddb881f1d758c2ef428414b1a2" -uuid = "ebe7aa44-baf0-506c-a96f-8464559b3922" -version = "0.6.13" - -[[deps.OMEinsumContractionOrders]] -deps = ["BetterExp", "JSON", "OMEinsum", "Requires", "SparseArrays", "Suppressor"] -git-tree-sha1 = "b2771fa64c9501731b29daba91e653c6fae80937" -uuid = "6f22d1fd-8eed-4bb7-9776-e7d684900715" -version = "0.6.9" - -[[deps.Ogg_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" -uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" -version = "1.3.5+1" - -[[deps.OpenBLAS_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] -uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.20+0" - -[[deps.OpenLibm_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.1+0" - -[[deps.OpenSSL_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "ab05aa4cc89736e95915b01e7279e61b1bfe33b8" -uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "1.1.14+0" - -[[deps.OpenSpecFun_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" -uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" -version = "0.5.5+0" - -[[deps.Opus_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" -uuid = "91d4177d-7536-5919-b921-800302f37372" -version = "1.3.2+0" - -[[deps.OrderedCollections]] -git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c" -uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.4.1" - -[[deps.PCRE_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "b2a7af664e098055a7529ad1a900ded962bca488" -uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc" -version = "8.44.0+0" - -[[deps.Pango_jll]] -deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "3a121dfbba67c94a5bec9dde613c3d0cbcf3a12b" -uuid = "36c8627f-9965-5494-a995-c6b170f724f3" -version = "1.50.3+0" - -[[deps.Parsers]] -deps = ["Dates"] -git-tree-sha1 = "1285416549ccfcdf0c50d4997a94331e88d68413" -uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.3.1" - -[[deps.Pixman_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29" -uuid = "30392449-352a-5448-841d-b1acce4e97dc" -version = "0.40.1+0" - -[[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] -uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.8.0" - -[[deps.Polynomials]] -deps = ["LinearAlgebra", "MutableArithmetics", "RecipesBase"] -git-tree-sha1 = "a8d37fbaba422166e9f5354b6d8f6197e1f74fe5" -uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" -version = "3.1.3" - -[[deps.Preferences]] -deps = ["TOML"] -git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d" -uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.3.0" - -[[deps.Primes]] -deps = ["IntegerMathUtils"] -git-tree-sha1 = "747f4261ebe38a2bc6abf0850ea8c6d9027ccd07" -uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" -version = "0.5.2" - -[[deps.Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" - -[[deps.Profile]] -deps = ["Printf"] -uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" - -[[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.Random123]] -deps = ["Random", "RandomNumbers"] -git-tree-sha1 = "afeacaecf4ed1649555a19cb2cad3c141bbc9474" -uuid = "74087812-796a-5b5d-8853-05524746bad3" -version = "1.5.0" - -[[deps.RandomNumbers]] -deps = ["Random", "Requires"] -git-tree-sha1 = "043da614cc7e95c703498a491e2c21f58a2b8111" -uuid = "e6cf234a-135c-5ec9-84dd-332b85af5143" -version = "1.5.3" - -[[deps.RecipesBase]] -git-tree-sha1 = "6bf3f380ff52ce0832ddd3a2a7b9538ed1bcca7d" -uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" -version = "1.2.1" - -[[deps.Reexport]] -git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" -uuid = "189a3867-3050-52da-a836-e630ba90ab69" -version = "1.2.2" - -[[deps.RelocatableFolders]] -deps = ["SHA", "Scratch"] -git-tree-sha1 = "307761d71804208c0c62abdbd0ea6822aa5bbefd" -uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" -version = "0.2.0" - -[[deps.Requires]] -deps = ["UUIDs"] -git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" -uuid = "ae029012-a4dd-5104-9daa-d747884805df" -version = "1.3.0" - -[[deps.Rsvg]] -deps = ["Cairo", "Glib_jll", "Librsvg_jll"] -git-tree-sha1 = "3d3dc66eb46568fb3a5259034bfc752a0eb0c686" -uuid = "c4c386cf-5103-5370-be45-f3a111cca3b8" -version = "1.0.0" - -[[deps.SHA]] -uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" -version = "0.7.0" - -[[deps.SIMD]] -git-tree-sha1 = "7dbc15af7ed5f751a82bf3ed37757adf76c32402" -uuid = "fdea26ae-647d-5447-a871-4b548cad5224" -version = "3.4.1" - -[[deps.SIMDTypes]] -git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" -uuid = "94e857df-77ce-4151-89e5-788b33177be4" -version = "0.1.0" - -[[deps.ScanByte]] -deps = ["Libdl", "SIMD"] -git-tree-sha1 = "c49318f1b9ca3d927ae576d323fa6f724d01ba53" -uuid = "7b38b023-a4d7-4c5e-8d43-3f3097f304eb" -version = "0.3.1" - -[[deps.Scratch]] -deps = ["Dates"] -git-tree-sha1 = "0b4b7f1393cff97c33891da2a0bf69c6ed241fda" -uuid = "6c6a2e73-6563-6170-7368-637461726353" -version = "1.1.0" - -[[deps.Serialization]] -uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" - -[[deps.SharedArrays]] -deps = ["Distributed", "Mmap", "Random", "Serialization"] -uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" - -[[deps.SimpleTraits]] -deps = ["InteractiveUtils", "MacroTools"] -git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" -uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" -version = "0.9.4" - -[[deps.Sockets]] -uuid = "6462fe0b-24de-5631-8697-dd941f90decc" - -[[deps.SortingAlgorithms]] -deps = ["DataStructures"] -git-tree-sha1 = "b3363d7460f7d098ca0912c69b082f75625d7508" -uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" -version = "1.0.1" - -[[deps.SparseArrays]] -deps = ["LinearAlgebra", "Random"] -uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - -[[deps.SpecialFunctions]] -deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "a9e798cae4867e3a41cae2dd9eb60c047f1212db" -uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.1.6" - -[[deps.StaticArrays]] -deps = ["LinearAlgebra", "Random", "Statistics"] -git-tree-sha1 = "2bbd9f2e40afd197a1379aef05e0d85dba649951" -uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.4.7" - -[[deps.Statistics]] -deps = ["LinearAlgebra", "SparseArrays"] -uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - -[[deps.StatsAPI]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "2c11d7290036fe7aac9038ff312d3b3a2a5bf89e" -uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" -version = "1.4.0" - -[[deps.StatsBase]] -deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "8977b17906b0a1cc74ab2e3a05faa16cf08a8291" -uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.33.16" - -[[deps.StructArrays]] -deps = ["Adapt", "DataAPI", "StaticArrays", "Tables"] -git-tree-sha1 = "9abba8f8fb8458e9adf07c8a2377a070674a24f1" -uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" -version = "0.6.8" - -[[deps.Suppressor]] -git-tree-sha1 = "c6ed566db2fe3931292865b966d6d140b7ef32a9" -uuid = "fd094767-a336-5f1f-9728-57cf17d0bbfb" -version = "0.2.1" - -[[deps.TOML]] -deps = ["Dates"] -uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.0" - -[[deps.TableTraits]] -deps = ["IteratorInterfaceExtensions"] -git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" -uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" -version = "1.0.1" - -[[deps.Tables]] -deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"] -git-tree-sha1 = "5ce79ce186cc678bbb5c5681ca3379d1ddae11a1" -uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" -version = "1.7.0" - -[[deps.Tar]] -deps = ["ArgTools", "SHA"] -uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -version = "1.10.0" - -[[deps.TensorCore]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" -uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" -version = "0.1.1" - -[[deps.Test]] -deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[deps.TimerOutputs]] -deps = ["ExprTools", "Printf"] -git-tree-sha1 = "464d64b2510a25e6efe410e7edab14fffdc333df" -uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" -version = "0.5.20" - -[[deps.TranscodingStreams]] -deps = ["Random", "Test"] -git-tree-sha1 = "216b95ea110b5972db65aa90f88d8d89dcb8851c" -uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.9.6" - -[[deps.TropicalNumbers]] -git-tree-sha1 = "f3659ba817a2fdc8665e9bf032d66f1a107a56af" -uuid = "b3a74e9c-7526-4576-a4eb-79c0d4c32334" -version = "0.5.3" - -[[deps.TupleTools]] -git-tree-sha1 = "3c712976c47707ff893cf6ba4354aa14db1d8938" -uuid = "9d95972d-f1c8-5527-a6e0-b4b365fa01f6" -version = "1.3.0" - -[[deps.UUIDs]] -deps = ["Random", "SHA"] -uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" - -[[deps.Unicode]] -uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" - -[[deps.UnitDiskMapping]] -deps = ["Graphs"] -git-tree-sha1 = "4aa41c61ed79b9e7394260613d5ad938fdf0cc48" -uuid = "1b61a8d9-79ed-4491-8266-ef37f39e1727" -version = "0.1.1" - -[[deps.Viznet]] -deps = ["Compose", "Dierckx"] -git-tree-sha1 = "7a022ae6ac8b153d47617ed8c196ce60645689f1" -uuid = "52a3aca4-6234-47fd-b74a-806bdf78ede9" -version = "0.3.3" - -[[deps.XML2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] -git-tree-sha1 = "58443b63fb7e465a8a7210828c91c08b92132dff" -uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.9.14+0" - -[[deps.XSLT_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] -git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" -uuid = "aed1982a-8fda-507f-9586-7b0439959a61" -version = "1.1.34+0" - -[[deps.Xorg_libX11_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] -git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527" -uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" -version = "1.6.9+4" - -[[deps.Xorg_libXau_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e" -uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" -version = "1.0.9+4" - -[[deps.Xorg_libXdmcp_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4" -uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" -version = "1.1.3+4" - -[[deps.Xorg_libXext_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] -git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" -uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" -version = "1.3.4+4" - -[[deps.Xorg_libXrender_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] -git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" -uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" -version = "0.9.10+4" - -[[deps.Xorg_libpthread_stubs_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb" -uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" -version = "0.1.0+3" - -[[deps.Xorg_libxcb_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] -git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6" -uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" -version = "1.13.0+3" - -[[deps.Xorg_xtrans_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845" -uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" -version = "1.4.0+3" - -[[deps.Zlib_jll]] -deps = ["Libdl"] -uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.12+3" - -[[deps.Zstd_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "e45044cd873ded54b6a5bac0eb5c971392cf1927" -uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" -version = "1.5.2+0" - -[[deps.gdk_pixbuf_jll]] -deps = ["Artifacts", "Glib_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pkg", "Xorg_libX11_jll", "libpng_jll"] -git-tree-sha1 = "c23323cd30d60941f8c68419a70905d9bdd92808" -uuid = "da03df04-f53b-5353-a52f-6a8b0620ced0" -version = "2.42.6+1" - -[[deps.libass_jll]] -deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] -git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" -uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" -version = "0.15.1+0" - -[[deps.libblastrampoline_jll]] -deps = ["Artifacts", "Libdl", "OpenBLAS_jll"] -uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.1.0+0" - -[[deps.libfdk_aac_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" -uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" -version = "2.0.2+0" - -[[deps.libpng_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] -git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" -uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.38+0" - -[[deps.libvorbis_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] -git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" -uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" -version = "1.3.7+1" - -[[deps.nghttp2_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.41.0+1" - -[[deps.p7zip_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+0" - -[[deps.x264_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" -uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" -version = "2021.5.5+0" - -[[deps.x265_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" -uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" -version = "3.5.0+0" -""" - -# ╔═╡ Cell order: -# ╠═c37be80e-e9ba-11ec-30ea-43b3344b86ac -# ╠═cccc014d-b5e9-4e31-9860-af1b4f052e8e -# ╠═1c4f6598-630d-4db2-b571-033682094ce8 -# ╠═6770c854-b595-4073-9ce9-6a9c96eafa30 -# ╠═694628f3-27b3-493a-a787-dc95fcce8163 -# ╠═48cf19bd-6485-4b7e-b6a6-b9bb90841f22 -# ╠═bb39a1e8-8dca-493c-8c13-f022cdf6afe1 -# ╠═7d9b39df-44f1-42a4-80aa-4cbf07d9f480 -# ╠═d2b24ea3-c6d5-4eda-b6ed-e78d61cb67f7 -# ╠═cc58e2d2-1552-405d-9555-0e5dc31c47ab -# ╠═8da609ba-17b3-4eeb-8819-afc7078eb339 -# ╠═55311eab-433a-432b-a5b9-a855dd0f90e8 -# ╠═a61154ab-1b4a-43b7-9c03-522b973dbb4f -# ╠═0c4db665-4c1d-4754-802e-2866d69acc75 -# ╠═65b665c6-3ec9-43ef-871c-d890dd0a4680 -# ╠═b6d1e7b1-b40e-4166-94f1-f8eea3a01a7b -# ╠═0459e421-f51f-4da6-a194-42653e5f2dfc -# ╠═810e913f-a6f9-4509-8c03-95f90fe7499e -# ╠═d000c7bb-424e-4e30-b366-74d2303d0333 -# ╠═3ced1a69-2a4d-4942-a72d-5d668844d2a5 -# ╠═76473c61-dbc6-4493-afb2-930ad3fd98af -# ╠═5faa573e-c3d8-48b3-a1cd-fd86f3f5b9b6 -# ╠═d9f3717b-8983-429d-8dbf-cd1fe505bcec -# ╠═ff14b193-5da0-447e-a17d-9568e5e86482 -# ╠═9726e405-b308-4b33-83d2-957a2e434e06 -# ╠═1b8c61b2-45e2-439d-9f66-fd9b87bffa88 -# ╟─00000000-0000-0000-0000-000000000001 -# ╟─00000000-0000-0000-0000-000000000002 diff --git a/notebooks/luxor.jl b/notebooks/luxor.jl deleted file mode 100644 index 47f994e0..00000000 --- a/notebooks/luxor.jl +++ /dev/null @@ -1,1029 +0,0 @@ -### A Pluto.jl notebook ### -# v0.19.8 - -using Markdown -using InteractiveUtils - -# ╔═╡ b169626f-7849-41b7-966b-f28e46ac3b1f -using Graphs - -# ╔═╡ 8479c32b-63ff-48ac-be60-be65d8b6a7f0 -using Luxor - -# ╔═╡ 1b9d8e78-76d0-48a0-81ae-64e548ed92cc -using MathTeXEngine - -# ╔═╡ 6fb1fd85-734e-44b5-8387-37763a6120f3 -function unit_disk_graph(locs::AbstractVector, unit::Real) - n = length(locs) - g = SimpleGraph(n) - for i=1:n, j=i+1:n - if sum(abs2, locs[i] .- locs[j]) < unit ^ 2 - add_edge!(g, i, j) - end - end - return g -end - - - -# ╔═╡ adf9e8a2-1867-442d-b531-0441b4e34bcc -function square_lattice_graph(mask::AbstractMatrix{Bool}) - locs = [(i, j) for i=1:size(mask, 1), j=1:size(mask, 2) if mask[i,j]] - unit_disk_graph(locs, 1.1) -end - -# ╔═╡ b8e5c1b2-495e-4efd-8873-27e62f304f84 -locs = [(0, 0), (0, 1), (0, 2), (0, 3), (1,1), (1,3), (1,4), (2, 0), (2,2), (2,4), (3, 0), (3, 1), (3,2), (3,3), (4,0), (4,2), (4,4)] - -# ╔═╡ 7df6108f-2022-41ed-a25f-935523e8efa4 -keys(Luxor.Colors.color_names) - -# ╔═╡ b44e734f-dd84-4ca8-a926-9ac771277cb5 -function cross(x, y, rad) - line(Point(x-rad, y-rad), Point(x+rad, y+rad), :stroke) - line(Point(x-rad, y+rad), Point(x+rad, y-rad), :stroke) -end - -# ╔═╡ 3de68d6e-f839-4307-a45f-3cd7c8e8671a -function draw_solution(yellows, greens; origin_shift=Point(0, 0)) - rad = 10 - centers = [Point(y*50, x*50) for (x, y) in locs] - origin(Point(minimum(getfield.(centers, :x)) + 2*rad, minimum(getfield.(centers, :y)) + 2*rad) + origin_shift) - # show nodes - #setcolor("white") - #for p in centers - # circle(p, rad, :fill) - #end - # show unavailable points - setcolor("red") - for i=0:4 - for j=0:4 - if (i, j) ∉ locs - # show cross - cross(j*50, i*50, rad) - end - end - end - - setcolor("black") - for p in centers - circle(p, rad, :stroke) - end - # # show edges - setcolor("black") - # for e in edges(graph) - # a, b = Point(centers[e.src]...), Point(centers[e.dst]...) - # nints, ip1, ip2 = intersectionlinecircle(a, b, a, rad) - # a_ = ip1 - # nints, ip1, ip2 = intersectionlinecircle(a, b, b, rad) - # b_ = ip2 - # line(a_, b_, :stroke) - # end - - graph = square_lattice_graph(ones(Bool, 5, 5)) - _centers = [Point((ci.I[2]-1)*50, (ci.I[1]-1)*50) for ci in CartesianIndices((5, 5))] - setdash("dotted") - for e in edges(graph) - a, b = Point(_centers[e.src]...), Point(_centers[e.dst]...) - nints, ip1, ip2 = intersectionlinecircle(a, b, a, rad) - a_ = ip1 - nints, ip1, ip2 = intersectionlinecircle(a, b, b, rad) - b_ = ip2 - line(a_, b_, :stroke) - end - # show nuts - setcolor(sethue("yellow")..., 0.2) - for (i, j) in yellows - circle(50*j, 50*i, 44, :fill) - end - setcolor(sethue("limegreen")..., 0.2) - for (i, j) in greens - circle(50*j, 50*i, 44, :fill) - end -end - -# ╔═╡ 85e784c8-099b-4f25-8aa5-ecf2ad503b62 -@drawsvg draw_solution([(1,1)], [(2, 2)]) 250 250 - -# ╔═╡ a2e69f42-01da-46f6-b2af-b4f71785cdb4 -@drawsvg draw_solution([(1,1)], [(1, 3)]) 250 250 - -# ╔═╡ 80bee424-ea43-4c4c-827c-68c913892921 -function draw_illustrate() - draw_solution([(1, 6)], []) - setdash("solid") - setcolor("black") - fontsize(14) - text(L"\frac{a}{\sqrt{2}} ~<~ r ~<~ a", 350, 50) # - a = Point(300, 50) - b = Point(350, 0) - nints, p1, p2 = intersectionlinecircle(a, b, a, 44) - arrow(a, p1) - text("r", (a+p1)/2-Point(10, 0)) - text("Nut", a + Point(0, 20), halign=:center) - - # nodes - rad = 10 - y1 = 2.3*50 - y2 = 3*50 - circle(Point(300, y1), rad, :stroke) - text("Available", Point(320, y1), valign=:middle) - setcolor("red") - cross(300, y2, rad) - text("Not available", Point(320, y2), valign=:middle) - setcolor("black") - - # the meter - w = 10 - x0 = 220 - y0 = 0 - y1 = y0+50 - p1, p2 = Point(x0, y0), Point(x0+w, y0) - line(p1, p2, :stroke) - p3, p4 = Point(x0, y1), Point(x0+w, y1) - line(p3, p4, :stroke) - pc1 = Point(x0+w/2, y0+18) - pc2 = Point(x0+w/2, y0+32) - arrow(pc1, (p1+p2)/2) - arrow(pc2, (p3+p4)/2) - text("a", x0+w/2, y0+25, halign=:center, valign=:middle) -end - -# ╔═╡ f03fb88b-c58e-4739-817a-3428e22ede95 -@drawsvg draw_illustrate() 500 250 - -# ╔═╡ ba078b71-c187-4531-8c9c-4b5b952dad23 -@drawsvg draw_solution([(0, 0), (0, 2), (1, 4), (2, 0), (2,2), (4, 0), (4, 2), (4,4)], []; origin_shift=Point(25, 25)) 300 300 - -# ╔═╡ a146d807-60a2-4831-a5ab-8c772c7f09ba -@drawsvg draw_solution([(0, 0), (0, 2), (2, 0), (2,2), (2,4), (4, 0), (4, 2), (4,4)], []; origin_shift=Point(25, 25)) 300 300 - -# ╔═╡ 14edd34a-865b-4f20-b2de-d0d2ce92a8dc -@drawsvg draw_solution([(0, 1), (0, 3), (2, 0), (2,2), (2,4), (4, 0), (4, 2), (4,4)], []; origin_shift=Point(25, 25)) 300 300 - -# ╔═╡ 95e9b392-a8de-4f5b-97f2-6f3b3977eb95 -@drawsvg draw_solution([(0, 0), (0, 2), (2, 0), (2,2), (2,4), (4, 0), (4, 2), (4,4)], []; origin_shift=Point(25, 25)) 300 300 - -# ╔═╡ d041159c-9867-4d3a-bb5f-6b6e03a5b7e8 -let -@drawsvg begin - rad = 10 - setcolor("black") - centers = [Point(y*50, x*50) for (x, y) in locs] - origin(Point(minimum(getfield.(centers, :x)) + 2*rad, minimum(getfield.(centers, :y)) + 2*rad)) - for p in centers - circle(p, rad, :fill) - end - setcolor("black") - for e in edges(graph) - a, b = Point(centers[e.src]...), Point(centers[e.dst]...) - nints, ip1, ip2 = intersectionlinecircle(a, b, a, rad) - a_ = ip1 - nints, ip1, ip2 = intersectionlinecircle(a, b, b, rad) - b_ = ip2 - line(a_, b_, :stroke) - end -end 500 250 -end - -# ╔═╡ 7ff02758-d69a-4857-b730-192ce0d3e41b -L"Z(G,\beta)=\sum_{s_a,s_b,s_c,s_d,s_e=0}^1e^{\beta w_a s_a} e^{\beta w_b s_b} e^{\beta w_c s_c} e^{\beta w_d s_d} e^{\beta w_e s_e} e^{-\infty s_as_b} e^{-\infty s_b s_c} e^{-\infty s_a s_c} e^{-\infty s_b s_d} e^{-\infty s_c s_d} e^{-\infty s_d s_e}" - -# ╔═╡ 00000000-0000-0000-0000-000000000001 -PLUTO_PROJECT_TOML_CONTENTS = """ -[deps] -Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" -Luxor = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" -MathTeXEngine = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" - -[compat] -Graphs = "~1.7.0" -Luxor = "~3.3.0" -MathTeXEngine = "~0.4.1" -""" - -# ╔═╡ 00000000-0000-0000-0000-000000000002 -PLUTO_MANIFEST_TOML_CONTENTS = """ -# This file is machine-generated - editing it directly is not advised - -julia_version = "1.8.0-rc1" -manifest_format = "2.0" -project_hash = "de4124d559c1a3352371c9767ea8adc505803d3f" - -[[deps.AbstractTrees]] -git-tree-sha1 = "03e0550477d86222521d254b741d470ba17ea0b5" -uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" -version = "0.3.4" - -[[deps.Adapt]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "af92965fb30777147966f58acb05da51c5616b5f" -uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "3.3.3" - -[[deps.ArgTools]] -uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.1" - -[[deps.ArnoldiMethod]] -deps = ["LinearAlgebra", "Random", "StaticArrays"] -git-tree-sha1 = "62e51b39331de8911e4a7ff6f5aaf38a5f4cc0ae" -uuid = "ec485272-7323-5ecc-a04f-4719b315124d" -version = "0.2.0" - -[[deps.Artifacts]] -uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" - -[[deps.Automa]] -deps = ["Printf", "ScanByte", "TranscodingStreams"] -git-tree-sha1 = "d50976f217489ce799e366d9561d56a98a30d7fe" -uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b" -version = "0.8.2" - -[[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.CEnum]] -git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" -uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" -version = "0.4.2" - -[[deps.Cairo]] -deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] -git-tree-sha1 = "d0b3f8b4ad16cb0a2988c6788646a5e6a17b6b1b" -uuid = "159f3aea-2a34-519c-b102-8c37f9878175" -version = "1.0.5" - -[[deps.Cairo_jll]] -deps = ["Artifacts", "Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" -uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" -version = "1.16.1+1" - -[[deps.ChainRulesCore]] -deps = ["Compat", "LinearAlgebra", "SparseArrays"] -git-tree-sha1 = "9489214b993cd42d17f44c36e359bf6a7c919abf" -uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.15.0" - -[[deps.ChangesOfVariables]] -deps = ["ChainRulesCore", "LinearAlgebra", "Test"] -git-tree-sha1 = "1e315e3f4b0b7ce40feded39c73049692126cf53" -uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" -version = "0.1.3" - -[[deps.ColorTypes]] -deps = ["FixedPointNumbers", "Random"] -git-tree-sha1 = "eb7f0f8307f71fac7c606984ea5fb2817275d6e4" -uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" -version = "0.11.4" - -[[deps.ColorVectorSpace]] -deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"] -git-tree-sha1 = "d08c20eef1f2cbc6e60fd3612ac4340b89fea322" -uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" -version = "0.9.9" - -[[deps.Colors]] -deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] -git-tree-sha1 = "417b0ed7b8b838aa6ca0a87aadf1bb9eb111ce40" -uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" -version = "0.12.8" - -[[deps.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 = "9be8be1d8a6f44b96482c8af52238ea7987da3e3" -uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "3.45.0" - -[[deps.CompilerSupportLibraries_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "0.5.2+0" - -[[deps.DataAPI]] -git-tree-sha1 = "fb5f5316dd3fd4c5e7c30a24d50643b73e37cd40" -uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.10.0" - -[[deps.DataStructures]] -deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0" -uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.13" - -[[deps.DataValueInterfaces]] -git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" -uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" -version = "1.0.0" - -[[deps.Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" - -[[deps.DelimitedFiles]] -deps = ["Mmap"] -uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" - -[[deps.Distributed]] -deps = ["Random", "Serialization", "Sockets"] -uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" - -[[deps.DocStringExtensions]] -deps = ["LibGit2"] -git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b" -uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" -version = "0.8.6" - -[[deps.Downloads]] -deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] -uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.6.0" - -[[deps.EarCut_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "3f3a2501fa7236e9b911e0f7a588c657e822bb6d" -uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" -version = "2.2.3+0" - -[[deps.Expat_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "bad72f730e9e91c08d9427d5e8db95478a3c323d" -uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.4.8+0" - -[[deps.FFMPEG]] -deps = ["FFMPEG_jll"] -git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" -uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" -version = "0.4.1" - -[[deps.FFMPEG_jll]] -deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "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" - -[[deps.FileIO]] -deps = ["Pkg", "Requires", "UUIDs"] -git-tree-sha1 = "9267e5f50b0e12fdfd5a2455534345c4cf2c7f7a" -uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" -version = "1.14.0" - -[[deps.FileWatching]] -uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" - -[[deps.FixedPointNumbers]] -deps = ["Statistics"] -git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" -uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" -version = "0.8.4" - -[[deps.Fontconfig_jll]] -deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] -git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" -uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" -version = "2.13.93+0" - -[[deps.FreeType]] -deps = ["CEnum", "FreeType2_jll"] -git-tree-sha1 = "cabd77ab6a6fdff49bfd24af2ebe76e6e018a2b4" -uuid = "b38be410-82b0-50bf-ab77-7b57e271db43" -version = "4.0.0" - -[[deps.FreeType2_jll]] -deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] -git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9" -uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" -version = "2.10.4+0" - -[[deps.FreeTypeAbstraction]] -deps = ["ColorVectorSpace", "Colors", "FreeType", "GeometryBasics"] -git-tree-sha1 = "b5c7fe9cea653443736d264b85466bad8c574f4a" -uuid = "663a7486-cb36-511b-a19d-713bb74d65c9" -version = "0.9.9" - -[[deps.FriBidi_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" -uuid = "559328eb-81f9-559d-9380-de523a88c83c" -version = "1.0.10+0" - -[[deps.GeometryBasics]] -deps = ["EarCut_jll", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] -git-tree-sha1 = "83ea630384a13fc4f002b77690bc0afeb4255ac9" -uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" -version = "0.4.2" - -[[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", "PCRE_jll", "Pkg", "Zlib_jll"] -git-tree-sha1 = "a32d672ac2c967f3deb8a81d828afc739c838a06" -uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.68.3+2" - -[[deps.Graphics]] -deps = ["Colors", "LinearAlgebra", "NaNMath"] -git-tree-sha1 = "d61890399bc535850c4bf08e4e0d3a7ad0f21cbd" -uuid = "a2bd30eb-e257-5431-a919-1863eab51364" -version = "1.1.2" - -[[deps.Graphite2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" -uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" -version = "1.3.14+0" - -[[deps.Graphs]] -deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] -git-tree-sha1 = "4888af84657011a65afc7a564918d281612f983a" -uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" -version = "1.7.0" - -[[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.Inflate]] -git-tree-sha1 = "f5fc07d4e706b84f72d54eedcc1c13d92fb0871c" -uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" -version = "0.1.2" - -[[deps.InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" - -[[deps.InverseFunctions]] -deps = ["Test"] -git-tree-sha1 = "b3364212fb5d870f724876ffcd34dd8ec6d98918" -uuid = "3587e190-3f89-42d0-90ee-14403ec27112" -version = "0.1.7" - -[[deps.IrrationalConstants]] -git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151" -uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" -version = "0.1.1" - -[[deps.IterTools]] -git-tree-sha1 = "fa6287a4469f5e048d763df38279ee729fbd44e5" -uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" -version = "1.4.0" - -[[deps.IteratorInterfaceExtensions]] -git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" -uuid = "82899510-4779-5014-852e-03e436cf321d" -version = "1.0.0" - -[[deps.JLLWrappers]] -deps = ["Preferences"] -git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" -uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.4.1" - -[[deps.JpegTurbo_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "b53380851c6e6664204efb2e62cd24fa5c47e4ba" -uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "2.1.2+0" - -[[deps.Juno]] -deps = ["Base64", "Logging", "Media", "Profile"] -git-tree-sha1 = "07cb43290a840908a771552911a6274bc6c072c7" -uuid = "e5e0dc1b-0480-54bc-9374-aad01c23163d" -version = "0.8.4" - -[[deps.LAME_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" -uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" -version = "3.100.1+0" - -[[deps.LERC_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" -uuid = "88015f11-f218-50d7-93a8-a6af411a945d" -version = "3.0.0+1" - -[[deps.LZO_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6" -uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" -version = "2.10.1+0" - -[[deps.LaTeXStrings]] -git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" -uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" -version = "1.3.0" - -[[deps.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.81.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", "Pkg"] -git-tree-sha1 = "42b62845d70a619f063a7da093d995ec8e15e778" -uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" -version = "1.16.1+1" - -[[deps.Libmount_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" -uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" -version = "2.35.0+0" - -[[deps.Librsvg_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pango_jll", "Pkg", "gdk_pixbuf_jll"] -git-tree-sha1 = "25d5e6b4eb3558613ace1c67d6a871420bfca527" -uuid = "925c91fb-5dd6-59dd-8e8c-345e74382d89" -version = "2.52.4+0" - -[[deps.Libtiff_jll]] -deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] -git-tree-sha1 = "3eb79b0ca5764d4799c06699573fd8f533259713" -uuid = "89763e89-9b03-5906-acba-b20f662cd828" -version = "4.4.0+0" - -[[deps.Libuuid_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" -uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" -version = "2.36.0+0" - -[[deps.LinearAlgebra]] -deps = ["Libdl", "libblastrampoline_jll"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - -[[deps.LogExpFunctions]] -deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "09e4b894ce6a976c354a69041a04748180d43637" -uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.15" - -[[deps.Logging]] -uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" - -[[deps.Luxor]] -deps = ["Base64", "Cairo", "Colors", "Dates", "FFMPEG", "FileIO", "Juno", "LaTeXStrings", "Random", "Requires", "Rsvg"] -git-tree-sha1 = "590db54191f99a5016274784480fabf92ae7a034" -uuid = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" -version = "3.3.0" - -[[deps.MacroTools]] -deps = ["Markdown", "Random"] -git-tree-sha1 = "3d3e902b31198a27340d0bf00d6ac452866021cf" -uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.9" - -[[deps.Markdown]] -deps = ["Base64"] -uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" - -[[deps.MathTeXEngine]] -deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "Test"] -git-tree-sha1 = "5c1e3d66b3a36029de4e5ac07ab8bafd5a8041e5" -uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" -version = "0.4.1" - -[[deps.MbedTLS_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.0+0" - -[[deps.Media]] -deps = ["MacroTools", "Test"] -git-tree-sha1 = "75a54abd10709c01f1b86b84ec225d26e840ed58" -uuid = "e89f7d12-3494-54d1-8411-f7d8b9ae1f27" -version = "0.5.0" - -[[deps.Mmap]] -uuid = "a63ad114-7e13-5084-954f-fe012c677804" - -[[deps.MozillaCACerts_jll]] -uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.2.1" - -[[deps.NaNMath]] -git-tree-sha1 = "737a5957f387b17e74d4ad2f440eb330b39a62c5" -uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "1.0.0" - -[[deps.NetworkOptions]] -uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.2.0" - -[[deps.Ogg_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" -uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" -version = "1.3.5+1" - -[[deps.OpenBLAS_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] -uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.20+0" - -[[deps.OpenLibm_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.1+0" - -[[deps.OpenSSL_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "ab05aa4cc89736e95915b01e7279e61b1bfe33b8" -uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "1.1.14+0" - -[[deps.OpenSpecFun_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" -uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" -version = "0.5.5+0" - -[[deps.Opus_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" -uuid = "91d4177d-7536-5919-b921-800302f37372" -version = "1.3.2+0" - -[[deps.OrderedCollections]] -git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c" -uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.4.1" - -[[deps.PCRE_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "b2a7af664e098055a7529ad1a900ded962bca488" -uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc" -version = "8.44.0+0" - -[[deps.Pango_jll]] -deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "3a121dfbba67c94a5bec9dde613c3d0cbcf3a12b" -uuid = "36c8627f-9965-5494-a995-c6b170f724f3" -version = "1.50.3+0" - -[[deps.Pixman_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29" -uuid = "30392449-352a-5448-841d-b1acce4e97dc" -version = "0.40.1+0" - -[[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] -uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.8.0" - -[[deps.Preferences]] -deps = ["TOML"] -git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d" -uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.3.0" - -[[deps.Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" - -[[deps.Profile]] -deps = ["Printf"] -uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" - -[[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.RelocatableFolders]] -deps = ["SHA", "Scratch"] -git-tree-sha1 = "307761d71804208c0c62abdbd0ea6822aa5bbefd" -uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" -version = "0.2.0" - -[[deps.Requires]] -deps = ["UUIDs"] -git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" -uuid = "ae029012-a4dd-5104-9daa-d747884805df" -version = "1.3.0" - -[[deps.Rsvg]] -deps = ["Cairo", "Glib_jll", "Librsvg_jll"] -git-tree-sha1 = "3d3dc66eb46568fb3a5259034bfc752a0eb0c686" -uuid = "c4c386cf-5103-5370-be45-f3a111cca3b8" -version = "1.0.0" - -[[deps.SHA]] -uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" -version = "0.7.0" - -[[deps.SIMD]] -git-tree-sha1 = "7dbc15af7ed5f751a82bf3ed37757adf76c32402" -uuid = "fdea26ae-647d-5447-a871-4b548cad5224" -version = "3.4.1" - -[[deps.ScanByte]] -deps = ["Libdl", "SIMD"] -git-tree-sha1 = "c49318f1b9ca3d927ae576d323fa6f724d01ba53" -uuid = "7b38b023-a4d7-4c5e-8d43-3f3097f304eb" -version = "0.3.1" - -[[deps.Scratch]] -deps = ["Dates"] -git-tree-sha1 = "0b4b7f1393cff97c33891da2a0bf69c6ed241fda" -uuid = "6c6a2e73-6563-6170-7368-637461726353" -version = "1.1.0" - -[[deps.Serialization]] -uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" - -[[deps.SharedArrays]] -deps = ["Distributed", "Mmap", "Random", "Serialization"] -uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" - -[[deps.SimpleTraits]] -deps = ["InteractiveUtils", "MacroTools"] -git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" -uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" -version = "0.9.4" - -[[deps.Sockets]] -uuid = "6462fe0b-24de-5631-8697-dd941f90decc" - -[[deps.SparseArrays]] -deps = ["LinearAlgebra", "Random"] -uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - -[[deps.SpecialFunctions]] -deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "a9e798cae4867e3a41cae2dd9eb60c047f1212db" -uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.1.6" - -[[deps.StaticArrays]] -deps = ["LinearAlgebra", "Random", "Statistics"] -git-tree-sha1 = "2bbd9f2e40afd197a1379aef05e0d85dba649951" -uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.4.7" - -[[deps.Statistics]] -deps = ["LinearAlgebra", "SparseArrays"] -uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - -[[deps.StructArrays]] -deps = ["Adapt", "DataAPI", "StaticArrays", "Tables"] -git-tree-sha1 = "9abba8f8fb8458e9adf07c8a2377a070674a24f1" -uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" -version = "0.6.8" - -[[deps.TOML]] -deps = ["Dates"] -uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.0" - -[[deps.TableTraits]] -deps = ["IteratorInterfaceExtensions"] -git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" -uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" -version = "1.0.1" - -[[deps.Tables]] -deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"] -git-tree-sha1 = "5ce79ce186cc678bbb5c5681ca3379d1ddae11a1" -uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" -version = "1.7.0" - -[[deps.Tar]] -deps = ["ArgTools", "SHA"] -uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -version = "1.10.0" - -[[deps.TensorCore]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" -uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" -version = "0.1.1" - -[[deps.Test]] -deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[deps.TranscodingStreams]] -deps = ["Random", "Test"] -git-tree-sha1 = "216b95ea110b5972db65aa90f88d8d89dcb8851c" -uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.9.6" - -[[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", "Pkg", "Zlib_jll"] -git-tree-sha1 = "58443b63fb7e465a8a7210828c91c08b92132dff" -uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.9.14+0" - -[[deps.XSLT_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] -git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" -uuid = "aed1982a-8fda-507f-9586-7b0439959a61" -version = "1.1.34+0" - -[[deps.Xorg_libX11_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] -git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527" -uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" -version = "1.6.9+4" - -[[deps.Xorg_libXau_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e" -uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" -version = "1.0.9+4" - -[[deps.Xorg_libXdmcp_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4" -uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" -version = "1.1.3+4" - -[[deps.Xorg_libXext_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] -git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" -uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" -version = "1.3.4+4" - -[[deps.Xorg_libXrender_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] -git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" -uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" -version = "0.9.10+4" - -[[deps.Xorg_libpthread_stubs_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb" -uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" -version = "0.1.0+3" - -[[deps.Xorg_libxcb_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] -git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6" -uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" -version = "1.13.0+3" - -[[deps.Xorg_xtrans_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845" -uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" -version = "1.4.0+3" - -[[deps.Zlib_jll]] -deps = ["Libdl"] -uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.12+3" - -[[deps.Zstd_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "e45044cd873ded54b6a5bac0eb5c971392cf1927" -uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" -version = "1.5.2+0" - -[[deps.gdk_pixbuf_jll]] -deps = ["Artifacts", "Glib_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pkg", "Xorg_libX11_jll", "libpng_jll"] -git-tree-sha1 = "c23323cd30d60941f8c68419a70905d9bdd92808" -uuid = "da03df04-f53b-5353-a52f-6a8b0620ced0" -version = "2.42.6+1" - -[[deps.libass_jll]] -deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] -git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" -uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" -version = "0.15.1+0" - -[[deps.libblastrampoline_jll]] -deps = ["Artifacts", "Libdl", "OpenBLAS_jll"] -uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.1.0+0" - -[[deps.libfdk_aac_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" -uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" -version = "2.0.2+0" - -[[deps.libpng_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] -git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" -uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.38+0" - -[[deps.libvorbis_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] -git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" -uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" -version = "1.3.7+1" - -[[deps.nghttp2_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.41.0+1" - -[[deps.p7zip_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+0" - -[[deps.x264_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" -uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" -version = "2021.5.5+0" - -[[deps.x265_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" -uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" -version = "3.5.0+0" -""" - -# ╔═╡ Cell order: -# ╠═b169626f-7849-41b7-966b-f28e46ac3b1f -# ╠═adf9e8a2-1867-442d-b531-0441b4e34bcc -# ╠═6fb1fd85-734e-44b5-8387-37763a6120f3 -# ╠═b8e5c1b2-495e-4efd-8873-27e62f304f84 -# ╠═8479c32b-63ff-48ac-be60-be65d8b6a7f0 -# ╠═7df6108f-2022-41ed-a25f-935523e8efa4 -# ╠═b44e734f-dd84-4ca8-a926-9ac771277cb5 -# ╠═3de68d6e-f839-4307-a45f-3cd7c8e8671a -# ╠═85e784c8-099b-4f25-8aa5-ecf2ad503b62 -# ╠═a2e69f42-01da-46f6-b2af-b4f71785cdb4 -# ╠═1b9d8e78-76d0-48a0-81ae-64e548ed92cc -# ╠═80bee424-ea43-4c4c-827c-68c913892921 -# ╠═f03fb88b-c58e-4739-817a-3428e22ede95 -# ╠═ba078b71-c187-4531-8c9c-4b5b952dad23 -# ╠═a146d807-60a2-4831-a5ab-8c772c7f09ba -# ╠═14edd34a-865b-4f20-b2de-d0d2ce92a8dc -# ╠═95e9b392-a8de-4f5b-97f2-6f3b3977eb95 -# ╠═d041159c-9867-4d3a-bb5f-6b6e03a5b7e8 -# ╠═7ff02758-d69a-4857-b730-192ce0d3e41b -# ╟─00000000-0000-0000-0000-000000000001 -# ╟─00000000-0000-0000-0000-000000000002 diff --git a/notebooks/petersen.jl b/notebooks/petersen.jl deleted file mode 100644 index a4d6cccd..00000000 --- a/notebooks/petersen.jl +++ /dev/null @@ -1,936 +0,0 @@ -### A Pluto.jl notebook ### -# v0.19.8 - -using Markdown -using InteractiveUtils - -# This Pluto notebook uses @bind for interactivity. When running this notebook outside of Pluto, the following 'mock version' of @bind gives bound variables a default value (instead of an error). -macro bind(def, element) - quote - local iv = try Base.loaded_modules[Base.PkgId(Base.UUID("6e696c72-6542-2067-7265-42206c756150"), "AbstractPlutoDingetjes")].Bonds.initial_value catch; b -> missing; end - local el = $(esc(element)) - global $(esc(def)) = Core.applicable(Base.get, el) ? Base.get(el) : iv(el) - el - end -end - -# ╔═╡ ababcad9-415c-4a1e-97a5-322a15e98c80 -using GenericTensorNetworks, Graphs, PlutoUI - -# ╔═╡ 9d955aa6-f8dc-4a16-a883-60d3ddf61636 -graph = Graphs.smallgraph(:petersen) - -# ╔═╡ 83b69249-53cd-4f88-953d-caba7d4a4b25 -# set the vertex locations manually instead of using the default spring layout -rot15(a, b, i::Int) = cos(2i*π/5)*a + sin(2i*π/5)*b, cos(2i*π/5)*b - sin(2i*π/5)*a - -# ╔═╡ 1520b6a8-79cb-49c2-8ea8-a84bb2120158 -locations = [[rot15(0.0, 1.0, i) for i=0:4]..., [rot15(0.0, 0.5, i) for i=0:4]...] - -# ╔═╡ 3bd9bf83-2dd2-4800-bc56-dd41985a82a0 -show_graph(graph; locs=locations, scale=0.6) - -# ╔═╡ 8138f684-cdbd-4d43-aff3-f1d80ae090e1 -problem = IndependentSet(graph; optimizer=TreeSA()); - -# ╔═╡ 23744442-aeb1-4bdf-b87f-69c27853f2a7 -max_config = solve(problem, SingleConfigMax())[] - -# ╔═╡ 204d0632-32b1-416d-903d-8d253f65d44f -single_solution = max_config.c.data - -# ╔═╡ d5446d05-a80c-4d37-8549-f440b7067d6e -show_graph(graph; locs=locations, vertex_colors= - [iszero(single_solution[i]) ? "white" : "red" for i=1:nv(graph)], scale=0.6) - -# ╔═╡ 5d71602e-fd6e-4a63-9cbe-f359538bf20e -show_graph(graph; locs=locations, vertex_colors= - [iszero(x) ? "white" : "red" for x in [0, 1, 0, 0, 0, 1, 0, 0, 0, 0]], scale=0.6) - -# ╔═╡ 847bcb04-a706-4d45-92b9-8ef754520b5a -wrong_solution = [true, false, true, false, false, true, false, false, false, true] - -# ╔═╡ 5ebb1b2b-9fe7-44b5-bb0d-10889950fe56 -show_graph(graph; locs=locations, vertex_colors= - [iszero(wrong_solution[i]) ? "white" : "red" for i=1:nv(graph)], scale=0.6) - -# ╔═╡ 90f10354-a77f-43c3-9033-1e175886fc2f -poly = solve(problem, GraphPolynomial())[] - -# ╔═╡ 91fcc8db-b11b-4c1e-bec2-85507536c86b -max_configs2 = solve(problem, ConfigsMax(5))[] - -# ╔═╡ 5e952998-a7d3-44a6-bcdb-b7cd6a0b7f74 -@bind iconfig NumberField(0:4) - -# ╔═╡ 64f35113-5590-4e0d-99ff-6350083c77a1 -show_gallery(graph, (ceil(Int, length(max_configs2.coeffs[iconfig+1])/5), 5); locs=locations, vertex_configs=max_configs2.coeffs[iconfig+1], image_size=3.5, scale=0.6) - -# ╔═╡ 00000000-0000-0000-0000-000000000001 -PLUTO_PROJECT_TOML_CONTENTS = """ -[deps] -GenericTensorNetworks = "3521c873-ad32-4bb4-b63d-f4f178f42b49" -Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" -PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8" - -[compat] -GenericTensorNetworks = "~1.0.4" -Graphs = "~1.7.0" -PlutoUI = "~0.7.39" -""" - -# ╔═╡ 00000000-0000-0000-0000-000000000002 -PLUTO_MANIFEST_TOML_CONTENTS = """ -# This file is machine-generated - editing it directly is not advised - -julia_version = "1.8.0-rc1" -manifest_format = "2.0" -project_hash = "c8789670b091f5a108b4d895d278c0fc39095460" - -[[deps.AbstractFFTs]] -deps = ["ChainRulesCore", "LinearAlgebra"] -git-tree-sha1 = "6f1d9bc1c08f9f4a8fa92e3ea3cb50153a1b40d4" -uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" -version = "1.1.0" - -[[deps.AbstractPlutoDingetjes]] -deps = ["Pkg"] -git-tree-sha1 = "8eaf9f1b4921132a4cff3f36a1d9ba923b14a481" -uuid = "6e696c72-6542-2067-7265-42206c756150" -version = "1.1.4" - -[[deps.AbstractTrees]] -git-tree-sha1 = "03e0550477d86222521d254b741d470ba17ea0b5" -uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" -version = "0.3.4" - -[[deps.Adapt]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "af92965fb30777147966f58acb05da51c5616b5f" -uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "3.3.3" - -[[deps.ArgTools]] -uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.1" - -[[deps.ArnoldiMethod]] -deps = ["LinearAlgebra", "Random", "StaticArrays"] -git-tree-sha1 = "62e51b39331de8911e4a7ff6f5aaf38a5f4cc0ae" -uuid = "ec485272-7323-5ecc-a04f-4719b315124d" -version = "0.2.0" - -[[deps.Artifacts]] -uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" - -[[deps.BFloat16s]] -deps = ["LinearAlgebra", "Printf", "Random", "Test"] -git-tree-sha1 = "a598ecb0d717092b5539dbbe890c98bac842b072" -uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" -version = "0.2.0" - -[[deps.Base64]] -uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" - -[[deps.BatchedRoutines]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "441db9f0399bcfb4eeb8b891a6b03f7acc5dc731" -uuid = "a9ab73d0-e05c-5df1-8fde-d6a4645b8d8e" -version = "0.2.2" - -[[deps.BetterExp]] -git-tree-sha1 = "dd3448f3d5b2664db7eceeec5f744535ce6e759b" -uuid = "7cffe744-45fd-4178-b173-cf893948b8b7" -version = "0.1.0" - -[[deps.Bzip2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" -uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" -version = "1.0.8+0" - -[[deps.CEnum]] -git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" -uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" -version = "0.4.2" - -[[deps.CUDA]] -deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CompilerSupportLibraries_jll", "ExprTools", "GPUArrays", "GPUCompiler", "LLVM", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "SpecialFunctions", "TimerOutputs"] -git-tree-sha1 = "925a16b909fdae16920c1319feadecffb6695b9d" -uuid = "052768ef-5323-5732-b1bb-66c8b64840ba" -version = "3.10.1" - -[[deps.Cairo]] -deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] -git-tree-sha1 = "d0b3f8b4ad16cb0a2988c6788646a5e6a17b6b1b" -uuid = "159f3aea-2a34-519c-b102-8c37f9878175" -version = "1.0.5" - -[[deps.Cairo_jll]] -deps = ["Artifacts", "Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" -uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" -version = "1.16.1+1" - -[[deps.ChainRulesCore]] -deps = ["Compat", "LinearAlgebra", "SparseArrays"] -git-tree-sha1 = "9489214b993cd42d17f44c36e359bf6a7c919abf" -uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.15.0" - -[[deps.ChangesOfVariables]] -deps = ["ChainRulesCore", "LinearAlgebra", "Test"] -git-tree-sha1 = "1e315e3f4b0b7ce40feded39c73049692126cf53" -uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" -version = "0.1.3" - -[[deps.ColorTypes]] -deps = ["FixedPointNumbers", "Random"] -git-tree-sha1 = "0f4e115f6f34bbe43c19751c90a38b2f380637b9" -uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" -version = "0.11.3" - -[[deps.Colors]] -deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] -git-tree-sha1 = "417b0ed7b8b838aa6ca0a87aadf1bb9eb111ce40" -uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" -version = "0.12.8" - -[[deps.Combinatorics]] -git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" -uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" -version = "1.0.2" - -[[deps.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 = "9be8be1d8a6f44b96482c8af52238ea7987da3e3" -uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "3.45.0" - -[[deps.CompilerSupportLibraries_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "0.5.2+0" - -[[deps.Compose]] -deps = ["Base64", "Colors", "DataStructures", "Dates", "IterTools", "JSON", "LinearAlgebra", "Measures", "Printf", "Random", "Requires", "Statistics", "UUIDs"] -git-tree-sha1 = "9a2695195199f4f20b94898c8a8ac72609e165a4" -uuid = "a81c6b42-2e10-5240-aca2-a61377ecd94b" -version = "0.9.3" - -[[deps.DataAPI]] -git-tree-sha1 = "fb5f5316dd3fd4c5e7c30a24d50643b73e37cd40" -uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.10.0" - -[[deps.DataStructures]] -deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0" -uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.13" - -[[deps.Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" - -[[deps.DelimitedFiles]] -deps = ["Mmap"] -uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" - -[[deps.Dierckx]] -deps = ["Dierckx_jll"] -git-tree-sha1 = "633c119fcfddf61fb4c75d77ce3ebab552a44723" -uuid = "39dd38d3-220a-591b-8e3c-4c3a8c710a94" -version = "0.5.2" - -[[deps.Dierckx_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "6596b96fe1caff3db36415eeb6e9d3b50bfe40ee" -uuid = "cd4c43a9-7502-52ba-aa6d-59fb2a88580b" -version = "0.1.0+0" - -[[deps.Distributed]] -deps = ["Random", "Serialization", "Sockets"] -uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" - -[[deps.DocStringExtensions]] -deps = ["LibGit2"] -git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b" -uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" -version = "0.8.6" - -[[deps.Downloads]] -deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] -uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.6.0" - -[[deps.Expat_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "bad72f730e9e91c08d9427d5e8db95478a3c323d" -uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.4.8+0" - -[[deps.ExprTools]] -git-tree-sha1 = "56559bbef6ca5ea0c0818fa5c90320398a6fbf8d" -uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" -version = "0.1.8" - -[[deps.FFTW]] -deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] -git-tree-sha1 = "505876577b5481e50d089c1c68899dfb6faebc62" -uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" -version = "1.4.6" - -[[deps.FFTW_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea" -uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" -version = "3.3.10+0" - -[[deps.FileWatching]] -uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" - -[[deps.FixedPointNumbers]] -deps = ["Statistics"] -git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" -uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" -version = "0.8.4" - -[[deps.Fontconfig_jll]] -deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] -git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" -uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" -version = "2.13.93+0" - -[[deps.FreeType2_jll]] -deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] -git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9" -uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" -version = "2.10.4+0" - -[[deps.FriBidi_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" -uuid = "559328eb-81f9-559d-9380-de523a88c83c" -version = "1.0.10+0" - -[[deps.GPUArrays]] -deps = ["Adapt", "LLVM", "LinearAlgebra", "Printf", "Random", "Serialization", "Statistics"] -git-tree-sha1 = "c783e8883028bf26fb05ed4022c450ef44edd875" -uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" -version = "8.3.2" - -[[deps.GPUCompiler]] -deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "TimerOutputs", "UUIDs"] -git-tree-sha1 = "d8c5999631e1dc18d767883f621639c838f8e632" -uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" -version = "0.15.2" - -[[deps.GenericTensorNetworks]] -deps = ["AbstractTrees", "CUDA", "Cairo", "Compose", "DelimitedFiles", "Distributed", "FFTW", "Graphs", "LinearAlgebra", "Mods", "OMEinsum", "OMEinsumContractionOrders", "Polynomials", "Primes", "Printf", "Random", "Requires", "SIMDTypes", "Serialization", "StatsBase", "TropicalNumbers", "Viznet"] -git-tree-sha1 = "d98bcd88f257fc8844efebf5b93a8acea72f269c" -uuid = "3521c873-ad32-4bb4-b63d-f4f178f42b49" -version = "1.0.4" - -[[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", "PCRE_jll", "Pkg", "Zlib_jll"] -git-tree-sha1 = "a32d672ac2c967f3deb8a81d828afc739c838a06" -uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.68.3+2" - -[[deps.Graphics]] -deps = ["Colors", "LinearAlgebra", "NaNMath"] -git-tree-sha1 = "d61890399bc535850c4bf08e4e0d3a7ad0f21cbd" -uuid = "a2bd30eb-e257-5431-a919-1863eab51364" -version = "1.1.2" - -[[deps.Graphite2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" -uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" -version = "1.3.14+0" - -[[deps.Graphs]] -deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] -git-tree-sha1 = "4888af84657011a65afc7a564918d281612f983a" -uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" -version = "1.7.0" - -[[deps.HarfBuzz_jll]] -deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] -git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" -uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" -version = "2.8.1+1" - -[[deps.Hyperscript]] -deps = ["Test"] -git-tree-sha1 = "8d511d5b81240fc8e6802386302675bdf47737b9" -uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91" -version = "0.0.4" - -[[deps.HypertextLiteral]] -deps = ["Tricks"] -git-tree-sha1 = "c47c5fa4c5308f27ccaac35504858d8914e102f9" -uuid = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2" -version = "0.9.4" - -[[deps.IOCapture]] -deps = ["Logging", "Random"] -git-tree-sha1 = "f7be53659ab06ddc986428d3a9dcc95f6fa6705a" -uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" -version = "0.2.2" - -[[deps.Inflate]] -git-tree-sha1 = "f5fc07d4e706b84f72d54eedcc1c13d92fb0871c" -uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" -version = "0.1.2" - -[[deps.IntegerMathUtils]] -git-tree-sha1 = "f366daebdfb079fd1fe4e3d560f99a0c892e15bc" -uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" -version = "0.1.0" - -[[deps.IntelOpenMP_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "d979e54b71da82f3a65b62553da4fc3d18c9004c" -uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" -version = "2018.0.3+2" - -[[deps.InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" - -[[deps.InverseFunctions]] -deps = ["Test"] -git-tree-sha1 = "b3364212fb5d870f724876ffcd34dd8ec6d98918" -uuid = "3587e190-3f89-42d0-90ee-14403ec27112" -version = "0.1.7" - -[[deps.IrrationalConstants]] -git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151" -uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" -version = "0.1.1" - -[[deps.IterTools]] -git-tree-sha1 = "fa6287a4469f5e048d763df38279ee729fbd44e5" -uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" -version = "1.4.0" - -[[deps.JLLWrappers]] -deps = ["Preferences"] -git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" -uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.4.1" - -[[deps.JSON]] -deps = ["Dates", "Mmap", "Parsers", "Unicode"] -git-tree-sha1 = "3c837543ddb02250ef42f4738347454f95079d4e" -uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "0.21.3" - -[[deps.LLVM]] -deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Printf", "Unicode"] -git-tree-sha1 = "e7e9184b0bf0158ac4e4aa9daf00041b5909bf1a" -uuid = "929cbde3-209d-540e-8aea-75f648917ca0" -version = "4.14.0" - -[[deps.LLVMExtra_jll]] -deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg", "TOML"] -git-tree-sha1 = "771bfe376249626d3ca12bcd58ba243d3f961576" -uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" -version = "0.0.16+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.LazyArtifacts]] -deps = ["Artifacts", "Pkg"] -uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" - -[[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.81.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", "Pkg"] -git-tree-sha1 = "42b62845d70a619f063a7da093d995ec8e15e778" -uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" -version = "1.16.1+1" - -[[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", "libblastrampoline_jll"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - -[[deps.LogExpFunctions]] -deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "09e4b894ce6a976c354a69041a04748180d43637" -uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.15" - -[[deps.Logging]] -uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" - -[[deps.MKL_jll]] -deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] -git-tree-sha1 = "e595b205efd49508358f7dc670a940c790204629" -uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" -version = "2022.0.0+0" - -[[deps.MacroTools]] -deps = ["Markdown", "Random"] -git-tree-sha1 = "3d3e902b31198a27340d0bf00d6ac452866021cf" -uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.9" - -[[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.0+0" - -[[deps.Measures]] -git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f" -uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" -version = "0.3.1" - -[[deps.Missings]] -deps = ["DataAPI"] -git-tree-sha1 = "bf210ce90b6c9eed32d25dbcae1ebc565df2687f" -uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" -version = "1.0.2" - -[[deps.Mmap]] -uuid = "a63ad114-7e13-5084-954f-fe012c677804" - -[[deps.Mods]] -git-tree-sha1 = "7416683a2cc6e8c9caee75b569c993cfe34e522d" -uuid = "7475f97c-0381-53b1-977b-4c60186c8d62" -version = "1.3.2" - -[[deps.MozillaCACerts_jll]] -uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.2.1" - -[[deps.MutableArithmetics]] -deps = ["LinearAlgebra", "SparseArrays", "Test"] -git-tree-sha1 = "4e675d6e9ec02061800d6cfb695812becbd03cdf" -uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" -version = "1.0.4" - -[[deps.NaNMath]] -git-tree-sha1 = "737a5957f387b17e74d4ad2f440eb330b39a62c5" -uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "1.0.0" - -[[deps.NetworkOptions]] -uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.2.0" - -[[deps.OMEinsum]] -deps = ["AbstractTrees", "BatchedRoutines", "CUDA", "ChainRulesCore", "Combinatorics", "LinearAlgebra", "MacroTools", "Requires", "Test", "TupleTools"] -git-tree-sha1 = "6df6ebcf525360ddb881f1d758c2ef428414b1a2" -uuid = "ebe7aa44-baf0-506c-a96f-8464559b3922" -version = "0.6.13" - -[[deps.OMEinsumContractionOrders]] -deps = ["BetterExp", "JSON", "OMEinsum", "Requires", "SparseArrays", "Suppressor"] -git-tree-sha1 = "a356b675eb0de52c475d49bbf833f08ce49ffe9e" -uuid = "6f22d1fd-8eed-4bb7-9776-e7d684900715" -version = "0.6.8" - -[[deps.OpenBLAS_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] -uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.20+0" - -[[deps.OpenLibm_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.1+0" - -[[deps.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 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c" -uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.4.1" - -[[deps.PCRE_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "b2a7af664e098055a7529ad1a900ded962bca488" -uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc" -version = "8.44.0+0" - -[[deps.Pango_jll]] -deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "3a121dfbba67c94a5bec9dde613c3d0cbcf3a12b" -uuid = "36c8627f-9965-5494-a995-c6b170f724f3" -version = "1.50.3+0" - -[[deps.Parsers]] -deps = ["Dates"] -git-tree-sha1 = "1285416549ccfcdf0c50d4997a94331e88d68413" -uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.3.1" - -[[deps.Pixman_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29" -uuid = "30392449-352a-5448-841d-b1acce4e97dc" -version = "0.40.1+0" - -[[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] -uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.8.0" - -[[deps.PlutoUI]] -deps = ["AbstractPlutoDingetjes", "Base64", "ColorTypes", "Dates", "Hyperscript", "HypertextLiteral", "IOCapture", "InteractiveUtils", "JSON", "Logging", "Markdown", "Random", "Reexport", "UUIDs"] -git-tree-sha1 = "8d1f54886b9037091edf146b517989fc4a09efec" -uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8" -version = "0.7.39" - -[[deps.Polynomials]] -deps = ["LinearAlgebra", "MutableArithmetics", "RecipesBase"] -git-tree-sha1 = "a8d37fbaba422166e9f5354b6d8f6197e1f74fe5" -uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" -version = "3.1.3" - -[[deps.Preferences]] -deps = ["TOML"] -git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d" -uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.3.0" - -[[deps.Primes]] -deps = ["IntegerMathUtils"] -git-tree-sha1 = "747f4261ebe38a2bc6abf0850ea8c6d9027ccd07" -uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" -version = "0.5.2" - -[[deps.Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" - -[[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.Random123]] -deps = ["Random", "RandomNumbers"] -git-tree-sha1 = "afeacaecf4ed1649555a19cb2cad3c141bbc9474" -uuid = "74087812-796a-5b5d-8853-05524746bad3" -version = "1.5.0" - -[[deps.RandomNumbers]] -deps = ["Random", "Requires"] -git-tree-sha1 = "043da614cc7e95c703498a491e2c21f58a2b8111" -uuid = "e6cf234a-135c-5ec9-84dd-332b85af5143" -version = "1.5.3" - -[[deps.RecipesBase]] -git-tree-sha1 = "6bf3f380ff52ce0832ddd3a2a7b9538ed1bcca7d" -uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" -version = "1.2.1" - -[[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.SHA]] -uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" -version = "0.7.0" - -[[deps.SIMDTypes]] -git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" -uuid = "94e857df-77ce-4151-89e5-788b33177be4" -version = "0.1.0" - -[[deps.Serialization]] -uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" - -[[deps.SharedArrays]] -deps = ["Distributed", "Mmap", "Random", "Serialization"] -uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" - -[[deps.SimpleTraits]] -deps = ["InteractiveUtils", "MacroTools"] -git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" -uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" -version = "0.9.4" - -[[deps.Sockets]] -uuid = "6462fe0b-24de-5631-8697-dd941f90decc" - -[[deps.SortingAlgorithms]] -deps = ["DataStructures"] -git-tree-sha1 = "b3363d7460f7d098ca0912c69b082f75625d7508" -uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" -version = "1.0.1" - -[[deps.SparseArrays]] -deps = ["LinearAlgebra", "Random"] -uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - -[[deps.SpecialFunctions]] -deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "a9e798cae4867e3a41cae2dd9eb60c047f1212db" -uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.1.6" - -[[deps.StaticArrays]] -deps = ["LinearAlgebra", "Random", "Statistics"] -git-tree-sha1 = "2bbd9f2e40afd197a1379aef05e0d85dba649951" -uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.4.7" - -[[deps.Statistics]] -deps = ["LinearAlgebra", "SparseArrays"] -uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - -[[deps.StatsAPI]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "2c11d7290036fe7aac9038ff312d3b3a2a5bf89e" -uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" -version = "1.4.0" - -[[deps.StatsBase]] -deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "8977b17906b0a1cc74ab2e3a05faa16cf08a8291" -uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.33.16" - -[[deps.Suppressor]] -git-tree-sha1 = "c6ed566db2fe3931292865b966d6d140b7ef32a9" -uuid = "fd094767-a336-5f1f-9728-57cf17d0bbfb" -version = "0.2.1" - -[[deps.TOML]] -deps = ["Dates"] -uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.0" - -[[deps.Tar]] -deps = ["ArgTools", "SHA"] -uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -version = "1.10.0" - -[[deps.Test]] -deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[deps.TimerOutputs]] -deps = ["ExprTools", "Printf"] -git-tree-sha1 = "464d64b2510a25e6efe410e7edab14fffdc333df" -uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" -version = "0.5.20" - -[[deps.Tricks]] -git-tree-sha1 = "6bac775f2d42a611cdfcd1fb217ee719630c4175" -uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775" -version = "0.1.6" - -[[deps.TropicalNumbers]] -git-tree-sha1 = "f3659ba817a2fdc8665e9bf032d66f1a107a56af" -uuid = "b3a74e9c-7526-4576-a4eb-79c0d4c32334" -version = "0.5.3" - -[[deps.TupleTools]] -git-tree-sha1 = "3c712976c47707ff893cf6ba4354aa14db1d8938" -uuid = "9d95972d-f1c8-5527-a6e0-b4b365fa01f6" -version = "1.3.0" - -[[deps.UUIDs]] -deps = ["Random", "SHA"] -uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" - -[[deps.Unicode]] -uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" - -[[deps.Viznet]] -deps = ["Compose", "Dierckx"] -git-tree-sha1 = "7a022ae6ac8b153d47617ed8c196ce60645689f1" -uuid = "52a3aca4-6234-47fd-b74a-806bdf78ede9" -version = "0.3.3" - -[[deps.XML2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] -git-tree-sha1 = "58443b63fb7e465a8a7210828c91c08b92132dff" -uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.9.14+0" - -[[deps.XSLT_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] -git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" -uuid = "aed1982a-8fda-507f-9586-7b0439959a61" -version = "1.1.34+0" - -[[deps.Xorg_libX11_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] -git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527" -uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" -version = "1.6.9+4" - -[[deps.Xorg_libXau_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e" -uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" -version = "1.0.9+4" - -[[deps.Xorg_libXdmcp_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4" -uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" -version = "1.1.3+4" - -[[deps.Xorg_libXext_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] -git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" -uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" -version = "1.3.4+4" - -[[deps.Xorg_libXrender_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] -git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" -uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" -version = "0.9.10+4" - -[[deps.Xorg_libpthread_stubs_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb" -uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" -version = "0.1.0+3" - -[[deps.Xorg_libxcb_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] -git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6" -uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" -version = "1.13.0+3" - -[[deps.Xorg_xtrans_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845" -uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" -version = "1.4.0+3" - -[[deps.Zlib_jll]] -deps = ["Libdl"] -uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.12+3" - -[[deps.libblastrampoline_jll]] -deps = ["Artifacts", "Libdl", "OpenBLAS_jll"] -uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.1.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.41.0+1" - -[[deps.p7zip_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+0" -""" - -# ╔═╡ Cell order: -# ╠═ababcad9-415c-4a1e-97a5-322a15e98c80 -# ╠═9d955aa6-f8dc-4a16-a883-60d3ddf61636 -# ╠═83b69249-53cd-4f88-953d-caba7d4a4b25 -# ╠═1520b6a8-79cb-49c2-8ea8-a84bb2120158 -# ╠═3bd9bf83-2dd2-4800-bc56-dd41985a82a0 -# ╠═8138f684-cdbd-4d43-aff3-f1d80ae090e1 -# ╠═23744442-aeb1-4bdf-b87f-69c27853f2a7 -# ╠═204d0632-32b1-416d-903d-8d253f65d44f -# ╠═d5446d05-a80c-4d37-8549-f440b7067d6e -# ╠═5d71602e-fd6e-4a63-9cbe-f359538bf20e -# ╠═847bcb04-a706-4d45-92b9-8ef754520b5a -# ╠═5ebb1b2b-9fe7-44b5-bb0d-10889950fe56 -# ╠═90f10354-a77f-43c3-9033-1e175886fc2f -# ╠═91fcc8db-b11b-4c1e-bec2-85507536c86b -# ╟─5e952998-a7d3-44a6-bcdb-b7cd6a0b7f74 -# ╠═64f35113-5590-4e0d-99ff-6350083c77a1 -# ╟─00000000-0000-0000-0000-000000000001 -# ╟─00000000-0000-0000-0000-000000000002 diff --git a/src/GenericTensorNetworks.jl b/src/GenericTensorNetworks.jl index b9014193..2e52ec06 100644 --- a/src/GenericTensorNetworks.jl +++ b/src/GenericTensorNetworks.jl @@ -50,7 +50,7 @@ export solve, SizeMax, SizeMin, CountingAll, CountingMax, CountingMin, GraphPoly export save_configs, load_configs, hamming_distribution, save_sumproduct, load_sumproduct # Visualization -export show_graph, spring_layout, show_gallery, show_einsum +export show_graph, spring_layout!, show_gallery, show_einsum project_relative_path(xs...) = normpath(joinpath(dirname(dirname(pathof(@__MODULE__))), xs...)) diff --git a/src/visualize.jl b/src/visualize.jl index 652309f8..85e43714 100644 --- a/src/visualize.jl +++ b/src/visualize.jl @@ -1,6 +1,28 @@ module ShowGraph using Luxor, Graphs -export show_graph, show_einsum, show_gallery, spring_layout +export show_graph, show_einsum, show_gallery, spring_layout! + +const CONFIGHELP = """ +Extra keyword arguments +------------------------------- +* general + * `pad::Float64 = 1.0`, the padding space + * `unit::Float64 = 60`, the unit distance as the number of pixels + * `offsetx::Float64 = 0.0`, the origin of x axis + * `offsety::Float64 = 0.0`, the origin of y axis + * `xspan::Float64 = 1.0`, the width of the graph/image + * `yspan::Float64 = 1.0`, the height of the graph/image + * `fontsize::Float64 = 12`, the font size +* vertex + * `vertex_text_color::String = "black"`, the default text color + * `vertex_stroke_color = "black"`, the default stroke color for vertices + * `vertex_fill_color = "transparent"`, the default default fill color for vertices + * `vertex_size::Float64 = 0.15`, the default vertex size + * `vertex_line_width::Float64 = 1`, the default vertex stroke line width +* edge + * `edge_color::String = "black"`, the default edge color + * `edge_line_width::Float64 = 1`, the default line width +""" function autoconfig(locations; pad, kwargs...) n = length(locations) @@ -24,19 +46,23 @@ function autoconfig(locations; pad, kwargs...) end """ - show_graph(graph; - locs=spring_layout(graph), - vertex_colors=["black", "black", ...], - edge_colors=["black", "black", ...], - texts=["1", "2", ...], + show_graph(graph::SimpleGraph; + locs=nothing, + spring::Bool=true, + optimal_distance=1.0, + spring_mask=trues(nv(graph)), + + vertex_colors=nothing, vertex_sizes=nothing, + vertex_stroke_colors=nothing, + vertex_text_colors=nothing, + edge_colors=nothing, + texts = nothing, format=:png, - io=nothing, - pad=1.0, - kwargs... - ) + filename=nothing, + kwargs...) -Show a graph featured with vertex and edge information. +Show a graph in VSCode, Pluto or Jupyter notebook, or save it to a file. Positional arguments ----------------------------- @@ -45,34 +71,33 @@ Positional arguments Keyword arguments ----------------------------- * `locs` is a vector of tuples for specifying the vertex locations. -* `vertex_colors` is a vector of color strings for specifying vertex configurations, e.g. a [`ConfigEnumerator`](@ref) instance. -* `edge_colors` is a vector of color strings for specifying edge configurations. +* `spring` is switch to use spring method to optimize the location. +* `optimal_distance` is a optimal distance parameter for `spring` optimizer. +* `spring_mask` specfies which location is optimizable for `spring` optimizer. + +* `vertex_colors` is a vector of color strings for specifying vertex fill colors. +* `vertex_sizes` is a vector of real numbers for specifying vertex sizes. +* `vertex_stroke_colors` is a vector of color strings for specifying vertex stroke colors. +* `vertex_text_colors` is a vector of color strings for specifying vertex text colors. +* `edge_colors` is a vector of color strings for specifying edge colors. * `texts` is a vector of strings for labeling vertices. -* `format` is the output format, which can be `:svg`, `:png` or `:pdf`.. -* `io` can be `nothing` for the direct output, or a filename to saving to a file. For direct output, you will need a VSCode editor, an Atom editor, a Pluto notebook or a Jupyter notebook to display the image. +* `format` is the output format, which can be `:svg`, `:png` or `:pdf`. +* `filename` is a string as the output filename. -Extra keyword arguments -------------------------------- -* line, vertex and text - * `pad::Float64` = 1.0 -* vertex - * `vertex_text_color::String` = "black" - * `vertex_stroke_color` = "black" - * `vertex_fill_color` = "white" -* edge - * `edge_color::String` = "black" +$CONFIGHELP Example ------------------------------ ```jldoctest julia> using Graphs, GenericTensorNetworks -julia> show_graph(smallgraph(:petersen); format=:png, io=tempname(), vertex_colors=rand(["blue", "red"], 10)); +julia> show_graph(smallgraph(:petersen); format=:png, vertex_colors=rand(["blue", "red"], 10)); ``` """ function show_graph(locations, edges; vertex_colors=nothing, vertex_sizes=nothing, + vertex_stroke_colors=nothing, vertex_text_colors=nothing, edge_colors=nothing, texts = nothing, @@ -85,16 +110,39 @@ function show_graph(locations, edges; config = autoconfig(locations; pad, kwargs...) Dx, Dy = (config.xspan+2*config.pad)*config.unit, (config.yspan+2*config.pad)*config.unit _draw(Dx, Dy; format, filename) do - _show_graph(map(loc->(loc[1]+config.offsetx, loc[2]+config.offsety), locations), edges, vertex_colors, vertex_text_colors, vertex_sizes, edge_colors, texts, config) + _show_graph(map(loc->(loc[1]+config.offsetx, loc[2]+config.offsety), locations), edges, + vertex_colors, vertex_stroke_colors, vertex_text_colors, vertex_sizes, edge_colors, texts, config) end end end # NOTE: the final positions are in range [-5, 5] -function show_graph(graph::SimpleGraph; C=5.0, locs=map(x->x .* C, spring_layout(graph)), kwargs...) +function show_graph(graph::SimpleGraph; + locs=nothing, + spring::Bool=true, + optimal_distance=1.0, + spring_mask=trues(nv(graph)), + kwargs...) + locs = autolocs(graph, locs, spring, optimal_distance, spring_mask) show_graph(locs, [(e.src, e.dst) for e in edges(graph)]; kwargs...) end +function autolocs(graph, locs, spring, optimal_distance, spring_mask) + if spring + locs_x = locs === nothing ? [2*rand()-1.0 for i=1:nv(graph)] : getindex.(locs, 1) + locs_y = locs === nothing ? [2*rand()-1.0 for i=1:nv(graph)] : getindex.(locs, 2) + spring_layout!(graph; + C=optimal_distance, + locs_x, + locs_y, + mask=spring_mask # mask for which to relocate + ) + collect(zip(locs_x, locs_y)) + else + locs + end +end + function _draw(f, Dx, Dy; format, filename) if filename === nothing if format == :pdf @@ -119,28 +167,34 @@ Base.@kwdef struct GraphDisplayConfig offsety::Float64 = 0.0 # the zero of y axis xspan::Float64 = 1.0 yspan::Float64 = 1.0 + fontsize::Float64 = 12 # vertex vertex_text_color::String = "black" vertex_stroke_color = "black" - vertex_fill_color = "white" + vertex_fill_color = "transparent" vertex_size::Float64 = 0.15 - vertex_fontsize::Float64 = 12 vertex_line_width::Float64 = 1 # in pt # edge edge_color::String = "black" edge_line_width::Float64 = 1 # in pt end -function _show_graph(locs, edges, vertex_colors, vertex_text_colors, vertex_sizes, edge_colors, texts, config) - for (i, vertex) in enumerate(locs) - draw_vertex(vertex...; fill_color=_get(vertex_colors, i, config.vertex_fill_color), stroke_color=config.vertex_stroke_color, r=_get(vertex_sizes, i, config.vertex_size), line_width=config.vertex_line_width, unit=config.unit) - draw_text(vertex..., _get(texts, i, "$i"); fontsize=config.vertex_fontsize, color=_get(vertex_text_colors, i, config.vertex_text_color), unit=config.unit) - end +function _show_graph(locs, edges, vertex_colors, vertex_stroke_colors, vertex_text_colors, vertex_sizes, edge_colors, texts, config) + # edges for (k, (i, j)) in enumerate(edges) ri = _get(vertex_sizes, i, config.vertex_size) rj = _get(vertex_sizes, j, config.vertex_size) - draw_edge(locs[i], locs[j]; color=_get(edge_colors,k,config.edge_color), line_width=config.edge_line_width, ri, rj, unit=config.unit) + draw_edge(locs[i], locs[j]; color=_get(edge_colors,k,config.edge_color), + line_width=config.edge_line_width, ri, rj, unit=config.unit) + end + # vertices + for (i, vertex) in enumerate(locs) + draw_vertex(vertex...; fill_color=_get(vertex_colors, i, config.vertex_fill_color), + stroke_color=_get(vertex_stroke_colors, i, config.vertex_stroke_color), + r=_get(vertex_sizes, i, config.vertex_size), line_width=config.vertex_line_width, unit=config.unit) + draw_text(vertex..., _get(texts, i, "$i"); fontsize=config.fontsize, + color=_get(vertex_text_colors, i, config.vertex_text_color), unit=config.unit) end end _get(::Nothing, i::Int, default) = default @@ -176,12 +230,14 @@ Spring layout for graph plotting, returns a vector of vertex locations. This function is copied from [`GraphPlot.jl`](https://github.com/JuliaGraphs/GraphPlot.jl), where you can find more information about his function. """ -function spring_layout(g::AbstractGraph, +function spring_layout!(g::AbstractGraph; locs_x=2*rand(nv(g)).-1.0, - locs_y=2*rand(nv(g)).-1.0; - C=2.0, + locs_y=2*rand(nv(g)).-1.0, + C=2.0, # the optimal vertex distance MAXITER=100, - INITTEMP=2.0) + INITTEMP=2.0, + mask::AbstractVector{Bool}=trues(length(locs_x)) # mask for which to relocate + ) nvg = nv(g) adj_matrix = adjacency_matrix(g) @@ -226,6 +282,7 @@ function spring_layout(g::AbstractGraph, temp = INITTEMP / iter # Now apply them, but limit to temperature for i = 1:nvg + mask[i] || continue fx = force_x[i] fy = force_y[i] force_mag = sqrt((fx * fx) + (fy * fy)) @@ -235,29 +292,28 @@ function spring_layout(g::AbstractGraph, end end - # Scale to unit square - min_x, max_x = minimum(locs_x), maximum(locs_x) - min_y, max_y = minimum(locs_y), maximum(locs_y) - function scaler(z, a, b) - 2.0*((z - a)/(b - a)) - 1.0 - end - map!(z -> scaler(z, min_x, max_x), locs_x, locs_x) - map!(z -> scaler(z, min_y, max_y), locs_y, locs_y) - - return collect(zip(locs_x, locs_y)) + locs_x, locs_y end """ show_gallery(graph::SimpleGraph, grid::Tuple{Int,Int}; - locs=spring_layout(graph), + locs=nothing, + spring::Bool=true, + optimal_distance=1.0, + spring_mask=trues(nv(graph)), + vertex_configs=nothing, edge_configs=nothing, - texts=["1", "2", ...], + + vertex_sizes=nothing, + vertex_stroke_colors=nothing, + vertex_text_colors=nothing, + texts=nothing, format=:png, - io=nothing, + filename=nothing, kwargs...) -Show a gallery of graphs for multiple vertex configurations or edge configurations. +Show a gallery of graphs for multiple vertex configurations or edge configurations in VSCode, Pluto or Jupyter notebook, or save it to a file. Positional arguments ----------------------------- @@ -267,41 +323,48 @@ Positional arguments Keyword arguments ----------------------------- * `locs` is a vector of tuples for specifying the vertex locations. -* `vertex_configs` is an iterator of bit strings for specifying vertex configurations, e.g. a [`ConfigEnumerator`](@ref) instance. -* `edge_configs` is an iterator of bit strings for specifying edge configurations. +* `spring` is switch to use spring method to optimize the location. +* `optimal_distance` is a optimal distance parameter for `spring` optimizer. +* `spring_mask` specfies which location is optimizable for `spring` optimizer. + +* `vertex_configs` is an iterator of bit strings for specifying vertex configurations, e.g. a [`ConfigEnumerator`](@ref) instance. It will be rendered as vertex colors. +* `edge_configs` is an iterator of bit strings for specifying edge configurations. It will be rendered as edge colors. + +* `vertex_sizes` is a vector of real numbers for specifying vertex sizes. +* `vertex_stroke_colors` is a vector of color strings for specifying vertex stroke colors. +* `vertex_text_colors` is a vector of color strings for specifying vertex text colors. * `texts` is a vector of strings for labeling vertices. -* `format` is the output format, which can be `:svg`, `:pdf` or `:png`. -* `io` can be `nothing` for the direct output, or a filename to saving to a file. For direct output, you will need a VSCode editor, an Atom editor, a Pluto notebook or a Jupyter notebook to display the image. +* `format` is the output format, which can be `:svg`, `:png` or `:pdf`. +* `filename` is a string as the output filename. -Extra keyword arguments -------------------------------- -* line, vertex and text - * `pad::Float64` = 1.0 -* vertex - * `vertex_text_color::String` = "black" - * `vertex_stroke_color` = "black" - * `vertex_fill_color` = "white" -* edge - * `edge_color::String` = "black" +$CONFIGHELP Example ------------------------------- ```jldoctest julia> using Graphs, GenericTensorNetworks -julia> show_gallery(smallgraph(:petersen), (2, 3); format=:png, io=tempname(), vertex_configs=[rand(Bool, 10) for k=1:6]); +julia> show_gallery(smallgraph(:petersen), (2, 3); format=:png, vertex_configs=[rand(Bool, 10) for k=1:6]); ``` """ -function show_gallery(graph::SimpleGraph, grid::Tuple{Int,Int}; C=5.0, locs=map(x->x .* C, spring_layout(graph)), kwargs...) +function show_gallery(graph::SimpleGraph, grid::Tuple{Int,Int}; + locs=nothing, + spring::Bool=true, + optimal_distance=1.0, + spring_mask=trues(nv(graph)), + kwargs...) + locs = autolocs(graph, locs, spring, optimal_distance, spring_mask) show_gallery(locs, [(e.src, e.dst) for e in edges(graph)], grid; kwargs...) end function show_gallery(locs, edges, grid::Tuple{Int,Int}; vertex_configs=nothing, edge_configs=nothing, vertex_sizes=nothing, + vertex_stroke_colors=nothing, vertex_text_colors=nothing, texts=nothing, - format=:png, filename=nothing, + format=:png, + filename=nothing, pad=1.0, kwargs...) config = autoconfig(locs; pad, kwargs...) @@ -329,7 +392,8 @@ function show_gallery(locs, edges, grid::Tuple{Int,Int}; k > length(edge_configs) && break [iszero(edge_configs[k][i]) ? config.edge_color : "red" for i=1:ne] end - _show_graph(locs, edges, vertex_colors, vertex_text_colors, vertex_sizes, edge_colors, texts, config) + _show_graph(locs, edges, vertex_colors, vertex_stroke_colors, vertex_text_colors, + vertex_sizes, edge_colors, texts, config) end end end @@ -338,6 +402,52 @@ end end using .ShowGraph + +""" + show_einsum(ein::AbstractEinsum; + tensor_locs=nothing, + label_locs=nothing, # dict + spring::Bool=true, + optimal_distance=1.0, + + tensor_size=0.3, + tensor_color="black", + tensor_text_color="white", + annotate_tensors=false, + + label_size=0.15, + label_color="black", + open_label_color="red", + annotate_labels=true, + kwargs... + ) + +Positional arguments +----------------------------- +* `ein` is an Einsum contraction code (provided by package `OMEinsum`). + +Keyword arguments +----------------------------- +* `tensor_locs` is a vector of tuples for specifying the vertex locations. +* `label_locs` is a vector of tuples for specifying the vertex locations. +* `spring` is switch to use spring method to optimize the location. +* `optimal_distance` is a optimal distance parameter for `spring` optimizer. + +* `tensor_color` is a string to specify the color of tensor nodes. +* `tensor_size` is a real number to specify the size of tensor nodes. +* `tensor_text_color` is a color strings to specify tensor text color. +* `annotate_tensors` is a boolean switch for annotate different tensors by integers. + +* `label_size` is a real number to specify label text node size. +* `label_color` is a color strings to specify label text color. +* `open_label_color` is a color strings to specify open label text color. +* `annotate_labels` is a boolean switch for annotate different labels. + +* `format` is the output format, which can be `:svg`, `:png` or `:pdf`. +* `filename` is a string as the output filename. + +$(ShowGraph.CONFIGHELP) +""" function show_einsum(ein::AbstractEinsum; label_size=0.15, label_color="black", @@ -349,7 +459,8 @@ function show_einsum(ein::AbstractEinsum; annotate_tensors=false, tensor_locs=nothing, label_locs=nothing, # dict - C = 5.0, + spring::Bool=true, + optimal_distance=1.0, kwargs... ) ixs = getixsv(ein) @@ -369,14 +480,14 @@ function show_einsum(ein::AbstractEinsum; end end if label_locs === nothing && tensor_locs === nothing - locs=map(x->x .* C, spring_layout(graph)) + locs = ShowGraph.autolocs(graph, nothing, spring, optimal_distance, trues(nv(graph))) elseif label_locs === nothing # infer label locs from tensor locs label_locs = [(lst = [iloc for (iloc,ix) in zip(tensor_locs, ixs) if l ∈ ix]; reduce((x,y)->x .+ y, lst) ./ length(lst)) for l in labels] locs = [label_locs..., tensor_locs...] elseif tensor_locs === nothing # infer tensor locs from label locs - tensor_locs = [length(ix) == 0 ? (C*randn(), C*randn()) : reduce((x,y)-> x .+ y, [label_locs[l] for l in ix]) ./ length(ix) for ix in ixs] + tensor_locs = [length(ix) == 0 ? (optimal_distance*randn(), optimal_distance*randn()) : reduce((x,y)-> x .+ y, [label_locs[l] for l in ix]) ./ length(ix) for ix in ixs] locs = [label_locs..., tensor_locs...] else locs = [label_locs..., tensor_locs...] diff --git a/test/visualize.jl b/test/visualize.jl index e1218cc3..abfe5d76 100644 --- a/test/visualize.jl +++ b/test/visualize.jl @@ -13,8 +13,9 @@ end @testset "einsum" begin graph = smallgraph(:petersen) - @test show_einsum(pb.code; C=3, annotate_tensors=true) isa Any - @test show_einsum(pb.code; C=3, tensor_locs=[(randn(), randn()) .* 2 for i=1:25]) isa Any + pb = IndependentSet(graph) + @test show_einsum(pb.code; optimal_distance=2, annotate_tensors=true) isa Any + @test show_einsum(pb.code; tensor_locs=[(randn(), randn()) .* 2 for i=1:25]) isa Any @test show_einsum(pb.code; label_locs=[(randn(), randn()) .* 2 for i=1:10]) isa Any @test show_einsum(pb.code; tensor_locs=[(randn(), randn()) for i=1:25], label_locs=[(randn(), randn()) for i=1:10]) isa Any end \ No newline at end of file From f18f85798d3a457505077ed31202ad253b6e35b0 Mon Sep 17 00:00:00 2001 From: GiggleLiu Date: Sun, 19 Jun 2022 19:48:30 -0400 Subject: [PATCH 5/7] update backend: LuxorGraphPlot --- Project.toml | 3 +- docs/make.jl | 4 +- examples/Coloring.jl | 2 +- examples/DominatingSet.jl | 2 +- examples/IndependentSet.jl | 2 +- examples/Matching.jl | 2 +- examples/MaxCut.jl | 2 +- examples/MaximalIS.jl | 2 +- examples/PaintShop.jl | 2 +- examples/weighted.jl | 2 +- src/GenericTensorNetworks.jl | 2 +- src/visualize.jl | 498 ----------------------------------- 12 files changed, 12 insertions(+), 511 deletions(-) delete mode 100644 src/visualize.jl diff --git a/Project.toml b/Project.toml index 3ad15cf5..6b8bdd06 100644 --- a/Project.toml +++ b/Project.toml @@ -11,7 +11,7 @@ Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b" FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -Luxor = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" +LuxorGraphPlot = "1f49bdf2-22a7-4bc4-978b-948dc219fbbc" Mods = "7475f97c-0381-53b1-977b-4c60186c8d62" OMEinsum = "ebe7aa44-baf0-506c-a96f-8464559b3922" OMEinsumContractionOrders = "6f22d1fd-8eed-4bb7-9776-e7d684900715" @@ -30,7 +30,6 @@ AbstractTrees = "0.3, 0.4" CUDA = "3" FFTW = "1.4" Graphs = "1.7" -Luxor = "3" Mods = "1.3" OMEinsum = "0.6.1" OMEinsumContractionOrders = "0.6" diff --git a/docs/make.jl b/docs/make.jl index 1a8f2351..5027979e 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -1,6 +1,6 @@ using Pkg using GenericTensorNetworks -using GenericTensorNetworks: TropicalNumbers, Polynomials, Mods, OMEinsum, OMEinsumContractionOrders +using GenericTensorNetworks: TropicalNumbers, Polynomials, Mods, OMEinsum, OMEinsumContractionOrders, LuxorGraphPlot using Documenter using DocThemeIndigo using PlutoStaticHTML @@ -34,7 +34,7 @@ indigo = DocThemeIndigo.install(GenericTensorNetworks) DocMeta.setdocmeta!(GenericTensorNetworks, :DocTestSetup, :(using GenericTensorNetworks); recursive=true) makedocs(; - modules=[GenericTensorNetworks, TropicalNumbers, Mods, OMEinsum, OMEinsumContractionOrders], + modules=[GenericTensorNetworks, TropicalNumbers, Mods, OMEinsum, OMEinsumContractionOrders, LuxorGraphPlot], authors="Jinguo Liu", repo="https://github.com/QuEraComputing/GenericTensorNetworks.jl/blob/{commit}{path}#{line}", sitename="GenericTensorNetworks.jl", diff --git a/examples/Coloring.jl b/examples/Coloring.jl index 0eb104ae..77fe3c46 100644 --- a/examples/Coloring.jl +++ b/examples/Coloring.jl @@ -14,7 +14,7 @@ graph = Graphs.smallgraph(:petersen) # We can visualize this graph using the following function rot15(a, b, i::Int) = cos(2i*π/5)*a + sin(2i*π/5)*b, cos(2i*π/5)*b - sin(2i*π/5)*a -locations = [[rot15(0.0, 1.0, i) for i=0:4]..., [rot15(0.0, 0.6, i) for i=0:4]...] +locations = [[rot15(0.0, 2.0, i) for i=0:4]..., [rot15(0.0, 1.0, i) for i=0:4]...] show_graph(graph; locs=locations) diff --git a/examples/DominatingSet.jl b/examples/DominatingSet.jl index 028cc3ce..937c476c 100644 --- a/examples/DominatingSet.jl +++ b/examples/DominatingSet.jl @@ -17,7 +17,7 @@ graph = Graphs.smallgraph(:petersen) # We can visualize this graph using the following function rot15(a, b, i::Int) = cos(2i*π/5)*a + sin(2i*π/5)*b, cos(2i*π/5)*b - sin(2i*π/5)*a -locations = [[rot15(0.0, 1.0, i) for i=0:4]..., [rot15(0.0, 0.6, i) for i=0:4]...] +locations = [[rot15(0.0, 2.0, i) for i=0:4]..., [rot15(0.0, 1.0, i) for i=0:4]...] show_graph(graph; locs=locations) diff --git a/examples/IndependentSet.jl b/examples/IndependentSet.jl index 51e9c82c..efd29c6d 100644 --- a/examples/IndependentSet.jl +++ b/examples/IndependentSet.jl @@ -13,7 +13,7 @@ graph = Graphs.smallgraph(:petersen) ## set the vertex locations manually instead of using the default spring layout rot15(a, b, i::Int) = cos(2i*π/5)*a + sin(2i*π/5)*b, cos(2i*π/5)*b - sin(2i*π/5)*a -locations = [[rot15(0.0, 1.0, i) for i=0:4]..., [rot15(0.0, 0.6, i) for i=0:4]...] +locations = [[rot15(0.0, 2.0, i) for i=0:4]..., [rot15(0.0, 1.0, i) for i=0:4]...] show_graph(graph; locs=locations) diff --git a/examples/Matching.jl b/examples/Matching.jl index a1147014..02095216 100644 --- a/examples/Matching.jl +++ b/examples/Matching.jl @@ -15,7 +15,7 @@ graph = Graphs.smallgraph(:petersen) # We can visualize this graph using the following function rot15(a, b, i::Int) = cos(2i*π/5)*a + sin(2i*π/5)*b, cos(2i*π/5)*b - sin(2i*π/5)*a -locations = [[rot15(0.0, 1.0, i) for i=0:4]..., [rot15(0.0, 0.6, i) for i=0:4]...] +locations = [[rot15(0.0, 2.0, i) for i=0:4]..., [rot15(0.0, 1.0, i) for i=0:4]...] show_graph(graph; locs=locations) diff --git a/examples/MaxCut.jl b/examples/MaxCut.jl index 6cdaeb76..ed9e8e7f 100644 --- a/examples/MaxCut.jl +++ b/examples/MaxCut.jl @@ -18,7 +18,7 @@ graph = Graphs.smallgraph(:petersen) # We can visualize this graph using the following function rot15(a, b, i::Int) = cos(2i*π/5)*a + sin(2i*π/5)*b, cos(2i*π/5)*b - sin(2i*π/5)*a -locations = [[rot15(0.0, 1.0, i) for i=0:4]..., [rot15(0.0, 0.6, i) for i=0:4]...] +locations = [[rot15(0.0, 2.0, i) for i=0:4]..., [rot15(0.0, 1.0, i) for i=0:4]...] show_graph(graph; locs=locations) diff --git a/examples/MaximalIS.jl b/examples/MaximalIS.jl index 7f1711ad..20389bc6 100644 --- a/examples/MaximalIS.jl +++ b/examples/MaximalIS.jl @@ -16,7 +16,7 @@ graph = Graphs.smallgraph(:petersen) # We can visualize this graph using the following function rot15(a, b, i::Int) = cos(2i*π/5)*a + sin(2i*π/5)*b, cos(2i*π/5)*b - sin(2i*π/5)*a -locations = [[rot15(0.0, 1.0, i) for i=0:4]..., [rot15(0.0, 0.6, i) for i=0:4]...] +locations = [[rot15(0.0, 2.0, i) for i=0:4]..., [rot15(0.0, 1.0, i) for i=0:4]...] show_graph(graph; locs=locations) diff --git a/examples/PaintShop.jl b/examples/PaintShop.jl index e7b07766..4f62a1db 100644 --- a/examples/PaintShop.jl +++ b/examples/PaintShop.jl @@ -19,7 +19,7 @@ sequence = collect("iadgbeadfcchghebif") # We can visualize this paint shop problem as a graph rot(a, b, θ) = cos(θ)*a + sin(θ)*b, cos(θ)*b - sin(θ)*a -locations = [rot(0.0, 1.0, -0.25π - 1.5*π*(i-0.5)/length(sequence)) for i=1:length(sequence)] +locations = [rot(0.0, 2.0, -0.25π - 1.5*π*(i-0.5)/length(sequence)) for i=1:length(sequence)] graph = path_graph(length(sequence)) for i=1:length(sequence) diff --git a/examples/weighted.jl b/examples/weighted.jl index d936bdca..2fa9e2fd 100644 --- a/examples/weighted.jl +++ b/examples/weighted.jl @@ -17,7 +17,7 @@ max_config_weighted = solve(problem, SingleConfigMax())[] # Let us visualize the solution. rot15(a, b, i::Int) = cos(2i*π/5)*a + sin(2i*π/5)*b, cos(2i*π/5)*b - sin(2i*π/5)*a -locations = [[rot15(0.0, 1.0, i) for i=0:4]..., [rot15(0.0, 0.6, i) for i=0:4]...] +locations = [[rot15(0.0, 2.0, i) for i=0:4]..., [rot15(0.0, 1.0, i) for i=0:4]...] show_graph(graph; locs=locations, vertex_colors= [iszero(max_config_weighted.c.data[i]) ? "white" : "red" for i=1:nv(graph)]) diff --git a/src/GenericTensorNetworks.jl b/src/GenericTensorNetworks.jl index 2e52ec06..d64f4229 100644 --- a/src/GenericTensorNetworks.jl +++ b/src/GenericTensorNetworks.jl @@ -7,6 +7,7 @@ using OMEinsum using OMEinsum: timespace_complexity, getixsv using Graphs, Random using DelimitedFiles, Serialization, Printf +using LuxorGraphPlot # OMEinsum export timespace_complexity, timespacereadwrite_complexity, @ein_str, getixsv, getiyv @@ -62,7 +63,6 @@ include("graph_polynomials.jl") include("configurations.jl") include("graphs.jl") include("bounding.jl") -include("visualize.jl") include("fileio.jl") include("interfaces.jl") include("deprecate.jl") diff --git a/src/visualize.jl b/src/visualize.jl deleted file mode 100644 index 85e43714..00000000 --- a/src/visualize.jl +++ /dev/null @@ -1,498 +0,0 @@ -module ShowGraph -using Luxor, Graphs -export show_graph, show_einsum, show_gallery, spring_layout! - -const CONFIGHELP = """ -Extra keyword arguments -------------------------------- -* general - * `pad::Float64 = 1.0`, the padding space - * `unit::Float64 = 60`, the unit distance as the number of pixels - * `offsetx::Float64 = 0.0`, the origin of x axis - * `offsety::Float64 = 0.0`, the origin of y axis - * `xspan::Float64 = 1.0`, the width of the graph/image - * `yspan::Float64 = 1.0`, the height of the graph/image - * `fontsize::Float64 = 12`, the font size -* vertex - * `vertex_text_color::String = "black"`, the default text color - * `vertex_stroke_color = "black"`, the default stroke color for vertices - * `vertex_fill_color = "transparent"`, the default default fill color for vertices - * `vertex_size::Float64 = 0.15`, the default vertex size - * `vertex_line_width::Float64 = 1`, the default vertex stroke line width -* edge - * `edge_color::String = "black"`, the default edge color - * `edge_line_width::Float64 = 1`, the default line width -""" - -function autoconfig(locations; pad, kwargs...) - n = length(locations) - if n >= 1 - # compute the size and the margin - xmin = minimum(x->x[1], locations) - ymin = minimum(x->x[2], locations) - xmax = maximum(x->x[1], locations) - ymax = maximum(x->x[2], locations) - xspan = xmax - xmin - yspan = ymax - ymin - offsetx = -xmin + pad - offsety = -ymin + pad - else - xspan = 0.0 - yspan = 0.0 - offsetx = 0.0 - offsety = 0.0 - end - return GraphDisplayConfig(; pad, offsetx, offsety, xspan, yspan, kwargs...) -end - -""" - show_graph(graph::SimpleGraph; - locs=nothing, - spring::Bool=true, - optimal_distance=1.0, - spring_mask=trues(nv(graph)), - - vertex_colors=nothing, - vertex_sizes=nothing, - vertex_stroke_colors=nothing, - vertex_text_colors=nothing, - edge_colors=nothing, - texts = nothing, - format=:png, - filename=nothing, - kwargs...) - -Show a graph in VSCode, Pluto or Jupyter notebook, or save it to a file. - -Positional arguments ------------------------------ -* `graph` is a graph instance. - -Keyword arguments ------------------------------ -* `locs` is a vector of tuples for specifying the vertex locations. -* `spring` is switch to use spring method to optimize the location. -* `optimal_distance` is a optimal distance parameter for `spring` optimizer. -* `spring_mask` specfies which location is optimizable for `spring` optimizer. - -* `vertex_colors` is a vector of color strings for specifying vertex fill colors. -* `vertex_sizes` is a vector of real numbers for specifying vertex sizes. -* `vertex_stroke_colors` is a vector of color strings for specifying vertex stroke colors. -* `vertex_text_colors` is a vector of color strings for specifying vertex text colors. -* `edge_colors` is a vector of color strings for specifying edge colors. -* `texts` is a vector of strings for labeling vertices. -* `format` is the output format, which can be `:svg`, `:png` or `:pdf`. -* `filename` is a string as the output filename. - -$CONFIGHELP - -Example ------------------------------- -```jldoctest -julia> using Graphs, GenericTensorNetworks - -julia> show_graph(smallgraph(:petersen); format=:png, vertex_colors=rand(["blue", "red"], 10)); -``` -""" -function show_graph(locations, edges; - vertex_colors=nothing, - vertex_sizes=nothing, - vertex_stroke_colors=nothing, - vertex_text_colors=nothing, - edge_colors=nothing, - texts = nothing, - format=:png, filename=nothing, - pad=1.0, - kwargs...) - if length(locations) == 0 - _draw(()->nothing, 100, 100; format, filename) - else - config = autoconfig(locations; pad, kwargs...) - Dx, Dy = (config.xspan+2*config.pad)*config.unit, (config.yspan+2*config.pad)*config.unit - _draw(Dx, Dy; format, filename) do - _show_graph(map(loc->(loc[1]+config.offsetx, loc[2]+config.offsety), locations), edges, - vertex_colors, vertex_stroke_colors, vertex_text_colors, vertex_sizes, edge_colors, texts, config) - end - end -end - -# NOTE: the final positions are in range [-5, 5] -function show_graph(graph::SimpleGraph; - locs=nothing, - spring::Bool=true, - optimal_distance=1.0, - spring_mask=trues(nv(graph)), - kwargs...) - locs = autolocs(graph, locs, spring, optimal_distance, spring_mask) - show_graph(locs, [(e.src, e.dst) for e in edges(graph)]; kwargs...) -end - -function autolocs(graph, locs, spring, optimal_distance, spring_mask) - if spring - locs_x = locs === nothing ? [2*rand()-1.0 for i=1:nv(graph)] : getindex.(locs, 1) - locs_y = locs === nothing ? [2*rand()-1.0 for i=1:nv(graph)] : getindex.(locs, 2) - spring_layout!(graph; - C=optimal_distance, - locs_x, - locs_y, - mask=spring_mask # mask for which to relocate - ) - collect(zip(locs_x, locs_y)) - else - locs - end -end - -function _draw(f, Dx, Dy; format, filename) - if filename === nothing - if format == :pdf - _format = tempname()*".pdf" - else - _format = format - end - else - _format = filename - end - Luxor.Drawing(round(Int,Dx), round(Int,Dy), _format) - Luxor.origin(0, 0) - f() - Luxor.finish() - Luxor.preview() -end -Base.@kwdef struct GraphDisplayConfig - # line, vertex and text - pad::Float64 = 1.0 - unit::Int = 60 # how many pixels as unit? - offsetx::Float64 = 0.0 # the zero of x axis - offsety::Float64 = 0.0 # the zero of y axis - xspan::Float64 = 1.0 - yspan::Float64 = 1.0 - fontsize::Float64 = 12 - - # vertex - vertex_text_color::String = "black" - vertex_stroke_color = "black" - vertex_fill_color = "transparent" - vertex_size::Float64 = 0.15 - vertex_line_width::Float64 = 1 # in pt - # edge - edge_color::String = "black" - edge_line_width::Float64 = 1 # in pt -end - -function _show_graph(locs, edges, vertex_colors, vertex_stroke_colors, vertex_text_colors, vertex_sizes, edge_colors, texts, config) - # edges - for (k, (i, j)) in enumerate(edges) - ri = _get(vertex_sizes, i, config.vertex_size) - rj = _get(vertex_sizes, j, config.vertex_size) - draw_edge(locs[i], locs[j]; color=_get(edge_colors,k,config.edge_color), - line_width=config.edge_line_width, ri, rj, unit=config.unit) - end - # vertices - for (i, vertex) in enumerate(locs) - draw_vertex(vertex...; fill_color=_get(vertex_colors, i, config.vertex_fill_color), - stroke_color=_get(vertex_stroke_colors, i, config.vertex_stroke_color), - r=_get(vertex_sizes, i, config.vertex_size), line_width=config.vertex_line_width, unit=config.unit) - draw_text(vertex..., _get(texts, i, "$i"); fontsize=config.fontsize, - color=_get(vertex_text_colors, i, config.vertex_text_color), unit=config.unit) - end -end -_get(::Nothing, i::Int, default) = default -_get(x, i::Int, default) = x[i] - -function draw_text(x, y, text; fontsize, color, unit) - Luxor.fontsize(fontsize) - setcolor(color) - Luxor.text(text, Point(unit*x, unit*y), valign=:middle, halign=:center) -end -function draw_edge(i, j; color, line_width, ri, rj, unit) - setcolor(color) - setline(line_width) - a, b = Point(i...), Point(j...) - nints, ip1, ip2 = intersectionlinecircle(a, b, a, ri) - a_ = ip1 - nints, ip1, ip2 = intersectionlinecircle(a, b, b, rj) - b_ = ip2 - line(a_ * unit, b_ * unit, :stroke) -end -function draw_vertex(x, y; stroke_color, fill_color, line_width, r, unit) - setcolor(fill_color) - circle(unit*Point(x, y), unit*r, :fill) - setline(line_width) - setcolor(stroke_color) - circle(Point(unit*x, unit*y), unit*r, :stroke) -end - -""" -Spring layout for graph plotting, returns a vector of vertex locations. - -!!! note - This function is copied from [`GraphPlot.jl`](https://github.com/JuliaGraphs/GraphPlot.jl), - where you can find more information about his function. -""" -function spring_layout!(g::AbstractGraph; - locs_x=2*rand(nv(g)).-1.0, - locs_y=2*rand(nv(g)).-1.0, - C=2.0, # the optimal vertex distance - MAXITER=100, - INITTEMP=2.0, - mask::AbstractVector{Bool}=trues(length(locs_x)) # mask for which to relocate - ) - - nvg = nv(g) - adj_matrix = adjacency_matrix(g) - - # The optimal distance bewteen vertices - k = C * sqrt(4.0 / nvg) - k² = k * k - - # Store forces and apply at end of iteration all at once - force_x = zeros(nvg) - force_y = zeros(nvg) - - # Iterate MAXITER times - @inbounds for iter = 1:MAXITER - # Calculate forces - for i = 1:nvg - force_vec_x = 0.0 - force_vec_y = 0.0 - for j = 1:nvg - i == j && continue - d_x = locs_x[j] - locs_x[i] - d_y = locs_y[j] - locs_y[i] - dist² = (d_x * d_x) + (d_y * d_y) - dist = sqrt(dist²) - - if !( iszero(adj_matrix[i,j]) && iszero(adj_matrix[j,i]) ) - # Attractive + repulsive force - # F_d = dist² / k - k² / dist # original FR algorithm - F_d = dist / k - k² / dist² - else - # Just repulsive - # F_d = -k² / dist # original FR algorithm - F_d = -k² / dist² - end - force_vec_x += F_d*d_x - force_vec_y += F_d*d_y - end - force_x[i] = force_vec_x - force_y[i] = force_vec_y - end - # Cool down - temp = INITTEMP / iter - # Now apply them, but limit to temperature - for i = 1:nvg - mask[i] || continue - fx = force_x[i] - fy = force_y[i] - force_mag = sqrt((fx * fx) + (fy * fy)) - scale = min(force_mag, temp) / force_mag - locs_x[i] += force_x[i] * scale - locs_y[i] += force_y[i] * scale - end - end - - locs_x, locs_y -end - -""" - show_gallery(graph::SimpleGraph, grid::Tuple{Int,Int}; - locs=nothing, - spring::Bool=true, - optimal_distance=1.0, - spring_mask=trues(nv(graph)), - - vertex_configs=nothing, - edge_configs=nothing, - - vertex_sizes=nothing, - vertex_stroke_colors=nothing, - vertex_text_colors=nothing, - texts=nothing, - format=:png, - filename=nothing, - kwargs...) - -Show a gallery of graphs for multiple vertex configurations or edge configurations in VSCode, Pluto or Jupyter notebook, or save it to a file. - -Positional arguments ------------------------------ -* `graph` is a graph instance. -* `grid` is the grid layout of the gallery, e.g. input value `(2, 3)` means a grid layout with 2 rows and 3 columns. - -Keyword arguments ------------------------------ -* `locs` is a vector of tuples for specifying the vertex locations. -* `spring` is switch to use spring method to optimize the location. -* `optimal_distance` is a optimal distance parameter for `spring` optimizer. -* `spring_mask` specfies which location is optimizable for `spring` optimizer. - -* `vertex_configs` is an iterator of bit strings for specifying vertex configurations, e.g. a [`ConfigEnumerator`](@ref) instance. It will be rendered as vertex colors. -* `edge_configs` is an iterator of bit strings for specifying edge configurations. It will be rendered as edge colors. - -* `vertex_sizes` is a vector of real numbers for specifying vertex sizes. -* `vertex_stroke_colors` is a vector of color strings for specifying vertex stroke colors. -* `vertex_text_colors` is a vector of color strings for specifying vertex text colors. -* `texts` is a vector of strings for labeling vertices. -* `format` is the output format, which can be `:svg`, `:png` or `:pdf`. -* `filename` is a string as the output filename. - -$CONFIGHELP - -Example -------------------------------- -```jldoctest -julia> using Graphs, GenericTensorNetworks - -julia> show_gallery(smallgraph(:petersen), (2, 3); format=:png, vertex_configs=[rand(Bool, 10) for k=1:6]); -``` -""" -function show_gallery(graph::SimpleGraph, grid::Tuple{Int,Int}; - locs=nothing, - spring::Bool=true, - optimal_distance=1.0, - spring_mask=trues(nv(graph)), - kwargs...) - locs = autolocs(graph, locs, spring, optimal_distance, spring_mask) - show_gallery(locs, [(e.src, e.dst) for e in edges(graph)], grid; kwargs...) -end -function show_gallery(locs, edges, grid::Tuple{Int,Int}; - vertex_configs=nothing, - edge_configs=nothing, - vertex_sizes=nothing, - vertex_stroke_colors=nothing, - vertex_text_colors=nothing, - texts=nothing, - format=:png, - filename=nothing, - pad=1.0, - kwargs...) - config = autoconfig(locs; pad, kwargs...) - m, n = grid - nv, ne = length(locs), length(edges) - dx = (config.xspan+2*config.pad)*config.unit - dy = (config.yspan+2*config.pad)*config.unit - Dx, Dy = dx*n, dy*m - locs = map(loc->(loc[1]+config.offsetx, loc[2]+config.offsety), locs) - _draw(Dx, Dy; format, filename) do - for i=1:m - for j=1:n - origin((j-1)*dx, (i-1)*dy) - # set colors - k = (i-1) * n + j - vertex_colors = if vertex_configs isa Nothing - fill("white", nv) - else - k > length(vertex_configs) && break - [iszero(vertex_configs[k][i]) ? config.vertex_fill_color : "red" for i=1:nv] - end - edge_colors = if edge_configs isa Nothing - fill("black", ne) - else - k > length(edge_configs) && break - [iszero(edge_configs[k][i]) ? config.edge_color : "red" for i=1:ne] - end - _show_graph(locs, edges, vertex_colors, vertex_stroke_colors, vertex_text_colors, - vertex_sizes, edge_colors, texts, config) - end - end - end -end - -end - -using .ShowGraph - -""" - show_einsum(ein::AbstractEinsum; - tensor_locs=nothing, - label_locs=nothing, # dict - spring::Bool=true, - optimal_distance=1.0, - - tensor_size=0.3, - tensor_color="black", - tensor_text_color="white", - annotate_tensors=false, - - label_size=0.15, - label_color="black", - open_label_color="red", - annotate_labels=true, - kwargs... - ) - -Positional arguments ------------------------------ -* `ein` is an Einsum contraction code (provided by package `OMEinsum`). - -Keyword arguments ------------------------------ -* `tensor_locs` is a vector of tuples for specifying the vertex locations. -* `label_locs` is a vector of tuples for specifying the vertex locations. -* `spring` is switch to use spring method to optimize the location. -* `optimal_distance` is a optimal distance parameter for `spring` optimizer. - -* `tensor_color` is a string to specify the color of tensor nodes. -* `tensor_size` is a real number to specify the size of tensor nodes. -* `tensor_text_color` is a color strings to specify tensor text color. -* `annotate_tensors` is a boolean switch for annotate different tensors by integers. - -* `label_size` is a real number to specify label text node size. -* `label_color` is a color strings to specify label text color. -* `open_label_color` is a color strings to specify open label text color. -* `annotate_labels` is a boolean switch for annotate different labels. - -* `format` is the output format, which can be `:svg`, `:png` or `:pdf`. -* `filename` is a string as the output filename. - -$(ShowGraph.CONFIGHELP) -""" -function show_einsum(ein::AbstractEinsum; - label_size=0.15, - label_color="black", - open_label_color="red", - tensor_size=0.3, - tensor_color="black", - tensor_text_color="white", - annotate_labels=true, - annotate_tensors=false, - tensor_locs=nothing, - label_locs=nothing, # dict - spring::Bool=true, - optimal_distance=1.0, - kwargs... - ) - ixs = getixsv(ein) - iy = getiyv(ein) - labels = uniquelabels(ein) - m = length(labels) - n = length(ixs) - labelmap = Dict(zip(labels, 1:m)) - colors = [["transparent" for l in labels]..., fill(tensor_color, n)...] - sizes = [fill(label_size, m)..., fill(tensor_size, n)...] - texts = [[annotate_labels ? "$(labels[i])" : "" for i=1:m]..., [annotate_tensors ? "$i" : "" for i=1:n]...] - vertex_text_colors = [[l ∈ iy ? open_label_color : label_color for l in labels]..., [tensor_text_color for ix in ixs]...] - graph = SimpleGraph(m+n) - for (j, ix) in enumerate(ixs) - for l in ix - add_edge!(graph, j+m, labelmap[l]) - end - end - if label_locs === nothing && tensor_locs === nothing - locs = ShowGraph.autolocs(graph, nothing, spring, optimal_distance, trues(nv(graph))) - elseif label_locs === nothing - # infer label locs from tensor locs - label_locs = [(lst = [iloc for (iloc,ix) in zip(tensor_locs, ixs) if l ∈ ix]; reduce((x,y)->x .+ y, lst) ./ length(lst)) for l in labels] - locs = [label_locs..., tensor_locs...] - elseif tensor_locs === nothing - # infer tensor locs from label locs - tensor_locs = [length(ix) == 0 ? (optimal_distance*randn(), optimal_distance*randn()) : reduce((x,y)-> x .+ y, [label_locs[l] for l in ix]) ./ length(ix) for ix in ixs] - locs = [label_locs..., tensor_locs...] - else - locs = [label_locs..., tensor_locs...] - end - show_graph(locs, [(e.src, e.dst) for e in edges(graph)]; texts, vertex_colors=colors, - vertex_text_colors, - vertex_sizes=sizes, vertex_line_width=0, kwargs...) -end \ No newline at end of file From a572b54b006e6570aeecef1c96b0f9cb4d264175 Mon Sep 17 00:00:00 2001 From: GiggleLiu Date: Sun, 19 Jun 2022 19:52:24 -0400 Subject: [PATCH 6/7] update a docstring --- docs/src/ref.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/ref.md b/docs/src/ref.md index 466de3e2..28cf0b9e 100644 --- a/docs/src/ref.md +++ b/docs/src/ref.md @@ -131,7 +131,7 @@ MergeGreedy ```@docs show_graph show_gallery -spring_layout +spring_layout! diagonal_coupled_graph square_lattice_graph From 23dae273977dff8d4f836c5c4cda286259e15bbc Mon Sep 17 00:00:00 2001 From: GiggleLiu Date: Mon, 20 Jun 2022 02:39:00 -0400 Subject: [PATCH 7/7] update visualize --- docs/src/ref.md | 1 + src/GenericTensorNetworks.jl | 1 + src/visualize.jl | 93 ++++++++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 src/visualize.jl diff --git a/docs/src/ref.md b/docs/src/ref.md index 28cf0b9e..2b87d67a 100644 --- a/docs/src/ref.md +++ b/docs/src/ref.md @@ -131,6 +131,7 @@ MergeGreedy ```@docs show_graph show_gallery +show_einsum spring_layout! diagonal_coupled_graph diff --git a/src/GenericTensorNetworks.jl b/src/GenericTensorNetworks.jl index d64f4229..abfbbca8 100644 --- a/src/GenericTensorNetworks.jl +++ b/src/GenericTensorNetworks.jl @@ -67,6 +67,7 @@ include("fileio.jl") include("interfaces.jl") include("deprecate.jl") include("multiprocessing.jl") +include("visualize.jl") using Requires function __init__() diff --git a/src/visualize.jl b/src/visualize.jl new file mode 100644 index 00000000..70e45b2e --- /dev/null +++ b/src/visualize.jl @@ -0,0 +1,93 @@ +""" + show_einsum(ein::AbstractEinsum; + tensor_locs=nothing, + label_locs=nothing, # dict + spring::Bool=true, + optimal_distance=1.0, + + tensor_size=0.3, + tensor_color="black", + tensor_text_color="white", + annotate_tensors=false, + + label_size=0.15, + label_color="black", + open_label_color="red", + annotate_labels=true, + kwargs... + ) + +Positional arguments +----------------------------- +* `ein` is an Einsum contraction code (provided by package `OMEinsum`). + +Keyword arguments +----------------------------- +* `tensor_locs` is a vector of tuples for specifying the vertex locations. +* `label_locs` is a vector of tuples for specifying the vertex locations. +* `spring` is switch to use spring method to optimize the location. +* `optimal_distance` is a optimal distance parameter for `spring` optimizer. + +* `tensor_color` is a string to specify the color of tensor nodes. +* `tensor_size` is a real number to specify the size of tensor nodes. +* `tensor_text_color` is a color strings to specify tensor text color. +* `annotate_tensors` is a boolean switch for annotate different tensors by integers. + +* `label_size` is a real number to specify label text node size. +* `label_color` is a color strings to specify label text color. +* `open_label_color` is a color strings to specify open label text color. +* `annotate_labels` is a boolean switch for annotate different labels. + +* `format` is the output format, which can be `:svg`, `:png` or `:pdf`. +* `filename` is a string as the output filename. + +$(LuxorGraphPlot.CONFIGHELP) +""" +function show_einsum(ein::AbstractEinsum; + label_size=0.15, + label_color="black", + open_label_color="red", + tensor_size=0.3, + tensor_color="black", + tensor_text_color="white", + annotate_labels=true, + annotate_tensors=false, + tensor_locs=nothing, + label_locs=nothing, # dict + spring::Bool=true, + optimal_distance=1.0, + kwargs... + ) + ixs = getixsv(ein) + iy = getiyv(ein) + labels = uniquelabels(ein) + m = length(labels) + n = length(ixs) + labelmap = Dict(zip(labels, 1:m)) + colors = [["transparent" for l in labels]..., fill(tensor_color, n)...] + sizes = [fill(label_size, m)..., fill(tensor_size, n)...] + texts = [[annotate_labels ? "$(labels[i])" : "" for i=1:m]..., [annotate_tensors ? "$i" : "" for i=1:n]...] + vertex_text_colors = [[l ∈ iy ? open_label_color : label_color for l in labels]..., [tensor_text_color for ix in ixs]...] + graph = SimpleGraph(m+n) + for (j, ix) in enumerate(ixs) + for l in ix + add_edge!(graph, j+m, labelmap[l]) + end + end + if label_locs === nothing && tensor_locs === nothing + locs = LuxorGraphPlot.autolocs(graph, nothing, spring, optimal_distance, trues(nv(graph))) + elseif label_locs === nothing + # infer label locs from tensor locs + label_locs = [(lst = [iloc for (iloc,ix) in zip(tensor_locs, ixs) if l ∈ ix]; reduce((x,y)->x .+ y, lst) ./ length(lst)) for l in labels] + locs = [label_locs..., tensor_locs...] + elseif tensor_locs === nothing + # infer tensor locs from label locs + tensor_locs = [length(ix) == 0 ? (optimal_distance*randn(), optimal_distance*randn()) : reduce((x,y)-> x .+ y, [label_locs[l] for l in ix]) ./ length(ix) for ix in ixs] + locs = [label_locs..., tensor_locs...] + else + locs = [label_locs..., tensor_locs...] + end + show_graph(locs, [(e.src, e.dst) for e in edges(graph)]; texts, vertex_colors=colors, + vertex_text_colors, + vertex_sizes=sizes, vertex_line_width=0, kwargs...) +end \ No newline at end of file