### A Pluto.jl notebook ###
# v0.20.5
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)
#! format: off
return 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
#! format: on
end
# ╔═╡ 7e7c9e34-164b-11f0-0f8c-1307e665d759
using HTTP, JSON, PlutoUI, Markdown, DataFrames
# ╔═╡ 11580113-c30e-45ab-a2ac-a73369f4d7ca
TableOfContents()
# ╔═╡ 0af83608-2c8b-4ef4-bee7-6a0ec4fc7cb1
md" # Ostrea Cultura"
# ╔═╡ ef22a5e4-9aab-4649-8a25-da40a211b191
md" *A Misinformation Remediation Company*"
# ╔═╡ 86b197ec-84f7-4fc1-9abf-e4244e853ce7
begin
# Take long text to chunks
function chunk_text(text::String, chunk_size::Int=280)
chunks = String[]
current_chunk = ""
for sentence in split(text, r"(?<=[.!?])\s+") # Split text by whitespace
if length(current_chunk) + length(sentence) + 1 > chunk_size
push!(chunks, current_chunk)
current_chunk = sentence
else
current_chunk *= (isempty(current_chunk) ? "" : " ") * sentence
end
end
# Push the last chunk if it's not empty
if current_chunk != ""
push!(chunks, current_chunk)
end
return [chunk for chunk in chunks if chunk != ""]
end
function score_to_background(score)
# 0 = blue, 1 = red; interpolate HSL
hue = round(Int, 240 * (1 - score)) # 240 (blue) → 0 (red)
return "hsl($hue, 100%, 50%)"
end
function text_color_for_bg(score)
# If background is dark (low L), use light text
return score > 0.5 ? "white" : "black"
end
function score_to_color(score)
if score ≤ 0.55
# Interpolate from blue (#0000FF) to gray (#888888)
t = score / 0.55
r = round(Int, (1 - t) * 0 + t * 136)
g = round(Int, (1 - t) * 0 + t * 136)
b = round(Int, (1 - t) * 255 + t * 136)
else
# Interpolate from gray (#888888) to red (#FF0000)
t = (score - 0.55) / 0.55
r = round(Int, (1 - t) * 136 + t * 255)
g = round(Int, (1 - t) * 136 + t * 0)
b = round(Int, (1 - t) * 136 + t * 0)
end
return "rgb($r,$g,$b)"
end
function dataframe_to_html(df::DataFrame)
html_rows = String[]
colnames = names(df)
# Header
push!(html_rows, "" * join(["| $(col) | " for col in colnames]) * "
")
# Data rows
for row in eachrow(df)
row_html = "
"
for col in colnames
val = row[col]
if col == :text && :score in colnames
bg = score_to_background(row[:score])
fg = text_color_for_bg(row[:score])
row_html *= "| $(val) | "
else
row_html *= "$(val) | "
end
end
row_html *= "
"
push!(html_rows, row_html)
end
# Full HTML with style
table_html = """
"""
return HTML(table_html)
end
function scored_text_paragraph(df::DataFrame; score_threshold::Float64 = 0.55)
fragments = String[]
urls = String[]
url_counter = 1
for row in eachrow(df)
color = score_to_color(row[:score])
text = row[:text]
claimUrl = row[:claimUrl]
if row[:score] > score_threshold
push!(urls, row[:claimUrl])
push!(fragments, """$text ($url_counter)""")
url_counter += 1
else
push!(fragments, """$text""")
end
end
paragraph_html = "" * join(fragments, " ") * "
"
if length(urls) > 0
urls_html = ""
for url in urls
urls_html *= "- $url
"
end
urls_html *= "
"
return HTML(paragraph_html * urls_html)
else
return HTML(paragraph_html)
end
end
function search_fastfacts(claim::String; model::String = "factchecks", top_k::Int = 5)
base_url = "https://stefanjwojcik-misinfo-detection-app.hf.space/fastfactsearch"
query = HTTP.escapeuri(claim)
url = "$base_url?claim=$query&model=$model&top_k=$top_k"
response = HTTP.get(url)
if response.status == 200
return JSON.parse(String(response.body))
else
error("Failed to fetch results: $(response.status)")
end
end
# Iterated fastfact
function iteratedfastfact(df::DataFrame)
# Create a new DataFrame to store the results
results_df = DataFrame()
# Iterate over each row in the DataFrame
for i in 1:nrow(df)
text = df[i, :text]
result = select(DataFrame(search_fastfacts(text; top_k=1)),
[:score, :policy, :text, :claimUrl])
result.text .= text
# Append the result to the results DataFrame
results_df = vcat(results_df, result)
end
return results_df
end
nothing
end
# ╔═╡ 6ba2a2b7-cf88-4d68-ab4c-e221369edd03
Resource("https://upload.wikimedia.org/wikipedia/commons/1/1c/Oyster_%28PSF%29.png", :width => 400)
# ╔═╡ 2187bada-f259-43ef-93ca-f4fd47b5b6e2
md" ### About"
# ╔═╡ c09aa132-47d9-45d3-be58-4e1b8b5aef48
md"""
Ostrea Cultura provides misinformation detection and moderation services.We work with Trust and Safety teams to customize and deploy transparent, interpretable, and policy-aligned misinformation classification for large unstructured data. We work in industries ranging from social media and online gaming to web hosting, online marketplaces, and customer relations. Ostrea Cultura is the brainchild of scientist entrepreneur Jason Radford and Birdwatch co-creator Stefan Wojick.
"""
# ╔═╡ 71036f43-59e1-487d-9f8f-f6c370250d9f
md"""
##### Reach out for:
- the most up-to-date models
- deployment in your environment
- new models for your content
- new and emerging misinformation
"""
# ╔═╡ 67787025-355f-40ba-bf55-6305e253634d
md" ### Claim Semantic Search"
# ╔═╡ 7169689a-9d31-4ac1-bdd7-3771c515e1b3
md"""
!!! tip "What is Semantic Search?"
Semantic search is a method of finding content that focuses on the meaning behind the content rather than just matching exact words. It uses techniques from natural language processing (NLP) and machine learning to find specific misinformation based on the context, intent, and relationship between concepts. No more low-recall keywords. No more black box machine learning classifiers. No untrustworthy LLMs.
"""
# ╔═╡ e3d65456-0646-44db-abad-193d778149ec
md"#### Search for Fact-checked Claims"
# ╔═╡ 785238ae-08b3-4221-85ba-97f4fc7d01e3
md" Enter your search claim in the box below and click 'submit' "
# ╔═╡ c2afdd06-9918-4445-889e-1e45a68c0cd9
@bind claimtext confirm(TextField((90, 3), placeholder = "Ivermectin is a cure for covid", default="Ivermectin is a cure for covid"))
# ╔═╡ 7ba4e521-51ba-4670-a1cf-396c555fcd5a
md"Number of Matches"
# ╔═╡ 28653105-c9cc-4ee1-9df8-a54644172a4c
@bind nclaims Slider(0:20, default=5, show_value=true)
# ╔═╡ 2ec6801c-707c-41ee-9415-e489ee52e3b5
md"### RESULTS"
# ╔═╡ eb78b6f9-ead9-4dbc-8a0b-befb141523d0
begin
function processdat(claimtext::String, top_k::Int)
df =DataFrame(search_fastfacts(claimtext; top_k=nclaims))
df.score = round.(df.score, digits=3)
df.policy .= "Platform Health"
df = select(df, [:score, :policy, :text, :claimUrl])
end
df = processdat(claimtext, nclaims)
#df = select(DataFrame(search_fastfacts(claimtext; top_k=nclaims)),
# [:score, :policy, :text])
nothing
end
# ╔═╡ 475c45c1-8b0c-41fc-ab7e-dac5e2294e9c
dataframe_to_html(df)
# ╔═╡ 3b52bf06-c1cd-441b-aab3-06ffb0d39208
md"""
### Fact-checking Long Text
"""
# ╔═╡ 7bca1473-95a2-443b-9689-cc40fa51727f
md"""
Put in a long piece of text, such as a speech or video transcription.
"""
# ╔═╡ f1cea517-2f40-4cc0-a621-6f3bb1056e44
@bind longtext confirm(TextField((90, 12), default="Misinformation that forced vaccination could be used to 'depopulate' the earth circulated in 2011 by misquoting Bill Gates. There is misinformation implying that vaccines (particularly the mRNA vaccine) could alter DNA in the nucleus.
Retrovirus can be single-stranded RNA (just as SARS-CoV-2 vaccine is single-stranded RNA) which enters the cell nucleus and uses reverse transcriptase to make DNA from the RNA in the cell nucleus. A retrovirus has mechanisms to be imported into the nucleus, but other mRNA lack these mechanisms. "))
# ╔═╡ be418613-b934-4a3c-8728-efe76e208db2
md" #### Fact-checked Text
Blue = factful;
Red = questionable
"
# ╔═╡ 59013658-1462-4b6e-b490-27664ac9e1a4
begin
iterdf = DataFrame(text = chunk_text(longtext, 80))
newdf = iteratedfastfact(iterdf)
scored_text_paragraph(newdf; score_threshold=.55)
end
# ╔═╡ 00000000-0000-0000-0000-000000000001
PLUTO_PROJECT_TOML_CONTENTS = """
[deps]
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3"
JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a"
PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
[compat]
DataFrames = "~1.7.0"
HTTP = "~1.10.16"
JSON = "~0.21.4"
PlutoUI = "~0.7.62"
"""
# ╔═╡ 00000000-0000-0000-0000-000000000002
PLUTO_MANIFEST_TOML_CONTENTS = """
# This file is machine-generated - editing it directly is not advised
julia_version = "1.10.4"
manifest_format = "2.0"
project_hash = "b80c4f230dbd1518aee36e59b6feda67bcd738fe"
[[deps.AbstractPlutoDingetjes]]
deps = ["Pkg"]
git-tree-sha1 = "6e1d2a35f2f90a4bc7c2ed98079b2ba09c35b83a"
uuid = "6e696c72-6542-2067-7265-42206c756150"
version = "1.3.2"
[[deps.ArgTools]]
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
version = "1.1.1"
[[deps.Artifacts]]
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
[[deps.Base64]]
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
[[deps.BitFlags]]
git-tree-sha1 = "0691e34b3bb8be9307330f88d1a3c3f25466c24d"
uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35"
version = "0.1.9"
[[deps.CodecZlib]]
deps = ["TranscodingStreams", "Zlib_jll"]
git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9"
uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
version = "0.7.8"
[[deps.ColorTypes]]
deps = ["FixedPointNumbers", "Random"]
git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d"
uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
version = "0.11.5"
[[deps.Compat]]
deps = ["TOML", "UUIDs"]
git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215"
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
version = "4.16.0"
weakdeps = ["Dates", "LinearAlgebra"]
[deps.Compat.extensions]
CompatLinearAlgebraExt = "LinearAlgebra"
[[deps.CompilerSupportLibraries_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
version = "1.1.1+0"
[[deps.ConcurrentUtilities]]
deps = ["Serialization", "Sockets"]
git-tree-sha1 = "d9d26935a0bcffc87d2613ce14c527c99fc543fd"
uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb"
version = "2.5.0"
[[deps.Crayons]]
git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15"
uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f"
version = "4.1.1"
[[deps.DataAPI]]
git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe"
uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
version = "1.16.0"
[[deps.DataFrames]]
deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"]
git-tree-sha1 = "fb61b4812c49343d7ef0b533ba982c46021938a6"
uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
version = "1.7.0"
[[deps.DataStructures]]
deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
git-tree-sha1 = "4e1fe97fdaed23e9dc21d4d664bea76b65fc50a0"
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
version = "0.18.22"
[[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.Downloads]]
deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
version = "1.6.0"
[[deps.ExceptionUnwrapping]]
deps = ["Test"]
git-tree-sha1 = "d36f682e590a83d63d1c7dbd287573764682d12a"
uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4"
version = "0.1.11"
[[deps.FileWatching]]
uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
[[deps.FixedPointNumbers]]
deps = ["Statistics"]
git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172"
uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93"
version = "0.8.5"
[[deps.Future]]
deps = ["Random"]
uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820"
[[deps.HTTP]]
deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"]
git-tree-sha1 = "f93655dc73d7a0b4a368e3c0bce296ae035ad76e"
uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
version = "1.10.16"
[[deps.Hyperscript]]
deps = ["Test"]
git-tree-sha1 = "179267cfa5e712760cd43dcae385d7ea90cc25a4"
uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91"
version = "0.0.5"
[[deps.HypertextLiteral]]
deps = ["Tricks"]
git-tree-sha1 = "7134810b1afce04bbc1045ca1985fbe81ce17653"
uuid = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2"
version = "0.9.5"
[[deps.IOCapture]]
deps = ["Logging", "Random"]
git-tree-sha1 = "b6d6bfdd7ce25b0f9b2f6b3dd56b2673a66c8770"
uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89"
version = "0.2.5"
[[deps.InlineStrings]]
git-tree-sha1 = "6a9fde685a7ac1eb3495f8e812c5a7c3711c2d5e"
uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48"
version = "1.4.3"
[deps.InlineStrings.extensions]
ArrowTypesExt = "ArrowTypes"
ParsersExt = "Parsers"
[deps.InlineStrings.weakdeps]
ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd"
Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
[[deps.InteractiveUtils]]
deps = ["Markdown"]
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
[[deps.InvertedIndices]]
git-tree-sha1 = "6da3c4316095de0f5ee2ebd875df8721e7e0bdbe"
uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f"
version = "1.3.1"
[[deps.IteratorInterfaceExtensions]]
git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856"
uuid = "82899510-4779-5014-852e-03e436cf321d"
version = "1.0.0"
[[deps.JLLWrappers]]
deps = ["Artifacts", "Preferences"]
git-tree-sha1 = "a007feb38b422fbdab534406aeca1b86823cb4d6"
uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
version = "1.7.0"
[[deps.JSON]]
deps = ["Dates", "Mmap", "Parsers", "Unicode"]
git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a"
uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
version = "0.21.4"
[[deps.LaTeXStrings]]
git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c"
uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
version = "1.4.0"
[[deps.LibCURL]]
deps = ["LibCURL_jll", "MozillaCACerts_jll"]
uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
version = "0.6.4"
[[deps.LibCURL_jll]]
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
version = "8.4.0+0"
[[deps.LibGit2]]
deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"]
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
[[deps.LibGit2_jll]]
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"]
uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5"
version = "1.6.4+0"
[[deps.LibSSH2_jll]]
deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
version = "1.11.0+1"
[[deps.Libdl]]
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
[[deps.LinearAlgebra]]
deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"]
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
[[deps.Logging]]
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
[[deps.LoggingExtras]]
deps = ["Dates", "Logging"]
git-tree-sha1 = "f02b56007b064fbfddb4c9cd60161b6dd0f40df3"
uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36"
version = "1.1.0"
[[deps.MIMEs]]
git-tree-sha1 = "c64d943587f7187e751162b3b84445bbbd79f691"
uuid = "6c6e2e6c-3030-632d-7369-2d6c69616d65"
version = "1.1.0"
[[deps.Markdown]]
deps = ["Base64"]
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
[[deps.MbedTLS]]
deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"]
git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf"
uuid = "739be429-bea8-5141-9913-cc70e7f3736d"
version = "1.1.9"
[[deps.MbedTLS_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
version = "2.28.2+1"
[[deps.Missings]]
deps = ["DataAPI"]
git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d"
uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
version = "1.2.0"
[[deps.Mmap]]
uuid = "a63ad114-7e13-5084-954f-fe012c677804"
[[deps.MozillaCACerts_jll]]
uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
version = "2023.1.10"
[[deps.NetworkOptions]]
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
version = "1.2.0"
[[deps.OpenBLAS_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
version = "0.3.23+4"
[[deps.OpenSSL]]
deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"]
git-tree-sha1 = "38cb508d080d21dc1128f7fb04f20387ed4c0af4"
uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c"
version = "1.4.3"
[[deps.OpenSSL_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl"]
git-tree-sha1 = "a9697f1d06cc3eb3fb3ad49cc67f2cfabaac31ea"
uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
version = "3.0.16+0"
[[deps.OrderedCollections]]
git-tree-sha1 = "cc4054e898b852042d7b503313f7ad03de99c3dd"
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
version = "1.8.0"
[[deps.Parsers]]
deps = ["Dates", "PrecompileTools", "UUIDs"]
git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821"
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
version = "2.8.1"
[[deps.Pkg]]
deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
version = "1.10.0"
[[deps.PlutoUI]]
deps = ["AbstractPlutoDingetjes", "Base64", "ColorTypes", "Dates", "FixedPointNumbers", "Hyperscript", "HypertextLiteral", "IOCapture", "InteractiveUtils", "JSON", "Logging", "MIMEs", "Markdown", "Random", "Reexport", "URIs", "UUIDs"]
git-tree-sha1 = "d3de2694b52a01ce61a036f18ea9c0f61c4a9230"
uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
version = "0.7.62"
[[deps.PooledArrays]]
deps = ["DataAPI", "Future"]
git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3"
uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720"
version = "1.4.3"
[[deps.PrecompileTools]]
deps = ["Preferences"]
git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f"
uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
version = "1.2.1"
[[deps.Preferences]]
deps = ["TOML"]
git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6"
uuid = "21216c6a-2e73-6563-6e65-726566657250"
version = "1.4.3"
[[deps.PrettyTables]]
deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"]
git-tree-sha1 = "1101cd475833706e4d0e7b122218257178f48f34"
uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d"
version = "2.4.0"
[[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"]
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
[[deps.Reexport]]
git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
uuid = "189a3867-3050-52da-a836-e630ba90ab69"
version = "1.2.2"
[[deps.SHA]]
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
version = "0.7.0"
[[deps.SentinelArrays]]
deps = ["Dates", "Random"]
git-tree-sha1 = "712fb0231ee6f9120e005ccd56297abbc053e7e0"
uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c"
version = "1.4.8"
[[deps.Serialization]]
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
[[deps.SimpleBufferStream]]
git-tree-sha1 = "f305871d2f381d21527c770d4788c06c097c9bc1"
uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7"
version = "1.2.0"
[[deps.Sockets]]
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
[[deps.SortingAlgorithms]]
deps = ["DataStructures"]
git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085"
uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
version = "1.2.1"
[[deps.SparseArrays]]
deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"]
uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
version = "1.10.0"
[[deps.Statistics]]
deps = ["LinearAlgebra", "SparseArrays"]
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
version = "1.10.0"
[[deps.StringManipulation]]
deps = ["PrecompileTools"]
git-tree-sha1 = "725421ae8e530ec29bcbdddbe91ff8053421d023"
uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e"
version = "0.4.1"
[[deps.SuiteSparse_jll]]
deps = ["Artifacts", "Libdl", "libblastrampoline_jll"]
uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c"
version = "7.2.1+1"
[[deps.TOML]]
deps = ["Dates"]
uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
version = "1.0.3"
[[deps.TableTraits]]
deps = ["IteratorInterfaceExtensions"]
git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39"
uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c"
version = "1.0.1"
[[deps.Tables]]
deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"]
git-tree-sha1 = "598cd7c1f68d1e205689b1c2fe65a9f85846f297"
uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
version = "1.12.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.TranscodingStreams]]
git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742"
uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa"
version = "0.11.3"
[[deps.Tricks]]
git-tree-sha1 = "6cae795a5a9313bbb4f60683f7263318fc7d1505"
uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775"
version = "0.1.10"
[[deps.URIs]]
git-tree-sha1 = "cbbebadbcc76c5ca1cc4b4f3b0614b3e603b5000"
uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"
version = "1.5.2"
[[deps.UUIDs]]
deps = ["Random", "SHA"]
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
[[deps.Unicode]]
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
[[deps.Zlib_jll]]
deps = ["Libdl"]
uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
version = "1.2.13+1"
[[deps.libblastrampoline_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
version = "5.8.0+1"
[[deps.nghttp2_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
version = "1.52.0+1"
[[deps.p7zip_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"
version = "17.4.0+2"
"""
# ╔═╡ Cell order:
# ╟─7e7c9e34-164b-11f0-0f8c-1307e665d759
# ╟─11580113-c30e-45ab-a2ac-a73369f4d7ca
# ╟─0af83608-2c8b-4ef4-bee7-6a0ec4fc7cb1
# ╟─ef22a5e4-9aab-4649-8a25-da40a211b191
# ╟─86b197ec-84f7-4fc1-9abf-e4244e853ce7
# ╟─6ba2a2b7-cf88-4d68-ab4c-e221369edd03
# ╟─2187bada-f259-43ef-93ca-f4fd47b5b6e2
# ╟─c09aa132-47d9-45d3-be58-4e1b8b5aef48
# ╟─71036f43-59e1-487d-9f8f-f6c370250d9f
# ╟─67787025-355f-40ba-bf55-6305e253634d
# ╟─7169689a-9d31-4ac1-bdd7-3771c515e1b3
# ╟─e3d65456-0646-44db-abad-193d778149ec
# ╟─785238ae-08b3-4221-85ba-97f4fc7d01e3
# ╟─c2afdd06-9918-4445-889e-1e45a68c0cd9
# ╟─7ba4e521-51ba-4670-a1cf-396c555fcd5a
# ╟─28653105-c9cc-4ee1-9df8-a54644172a4c
# ╟─2ec6801c-707c-41ee-9415-e489ee52e3b5
# ╟─eb78b6f9-ead9-4dbc-8a0b-befb141523d0
# ╟─475c45c1-8b0c-41fc-ab7e-dac5e2294e9c
# ╟─3b52bf06-c1cd-441b-aab3-06ffb0d39208
# ╟─7bca1473-95a2-443b-9689-cc40fa51727f
# ╟─f1cea517-2f40-4cc0-a621-6f3bb1056e44
# ╟─be418613-b934-4a3c-8728-efe76e208db2
# ╟─59013658-1462-4b6e-b490-27664ac9e1a4
# ╟─00000000-0000-0000-0000-000000000001
# ╟─00000000-0000-0000-0000-000000000002