diff --git a/Manifest.toml b/Manifest.toml index ebf07d9..2851481 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -31,13 +31,12 @@ version = "4.1.1" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" [[deps.AlgebraicArrays]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "989594685ea5be936b6000b06d465696163be525" +deps = ["DimensionalData", "LinearAlgebra", "Revise", "Unitful"] +git-tree-sha1 = "a911b09b1640eac9d06b1a6eb8083a0fbc2e7cdc" repo-rev = "main" repo-url = "https://github.com/ggebbie/AlgebraicArrays.jl" uuid = "8af735f6-f3e5-4048-bdaa-40a2355e9eea" -version = "1.0.6-DEV" -weakdeps = ["DimensionalData", "Unitful"] +version = "1.0.8-DEV" [deps.AlgebraicArrays.extensions] AlgebraicArraysDimensionalDataExt = ["DimensionalData"] @@ -49,9 +48,9 @@ version = "1.1.2" [[deps.ArrayInterface]] deps = ["Adapt", "LinearAlgebra"] -git-tree-sha1 = "d60a1922358aa203019b7857a2c8c37329b8736c" +git-tree-sha1 = "d5140b60b87473df18cf4fe66382b7c3596df047" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.17.0" +version = "7.17.1" [deps.ArrayInterface.extensions] ArrayInterfaceBandedMatricesExt = "BandedMatrices" @@ -152,19 +151,21 @@ version = "1.11.0" [[deps.DimensionalData]] deps = ["Adapt", "ArrayInterface", "ConstructionBase", "DataAPI", "Dates", "Extents", "Interfaces", "IntervalSets", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "PrecompileTools", "Random", "RecipesBase", "SparseArrays", "Statistics", "TableTraits", "Tables"] -git-tree-sha1 = "2f4be699daeadd58a884f1e1e0205054dfcf31cd" +git-tree-sha1 = "8f1f16a220d5a40a8a61f085533eeac78472999c" uuid = "0703355e-b756-11e9-17c0-8b28908087d0" -version = "0.29.0" +version = "0.29.3" [deps.DimensionalData.extensions] DimensionalDataAlgebraOfGraphicsExt = "AlgebraOfGraphics" DimensionalDataCategoricalArraysExt = "CategoricalArrays" + DimensionalDataDiskArraysExt = "DiskArrays" DimensionalDataMakie = "Makie" DimensionalDataStatsBase = "StatsBase" [deps.DimensionalData.weakdeps] AlgebraOfGraphics = "cbdf2221-f076-402e-a563-3d30da359d67" CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597" + DiskArrays = "3c3547ce-8d99-4f5e-a174-61eb10b00ae3" Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" @@ -281,9 +282,9 @@ version = "1.6.1" [[deps.JuliaInterpreter]] deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"] -git-tree-sha1 = "2984284a8abcfcc4784d95a9e2ea4e352dd8ede7" +git-tree-sha1 = "10da5154188682e5c0726823c2b5125957ec3778" uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a" -version = "0.9.36" +version = "0.9.38" [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] @@ -346,9 +347,9 @@ version = "1.11.0" [[deps.LoweredCodeUtils]] deps = ["JuliaInterpreter"] -git-tree-sha1 = "260dc274c1bc2cb839e758588c63d9c8b5e639d1" +git-tree-sha1 = "688d6d9e098109051ae33d126fcfc88c4ce4a021" uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b" -version = "3.0.5" +version = "3.1.0" [[deps.MKL_jll]] deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] @@ -417,9 +418,9 @@ uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" version = "0.5.5+0" [[deps.OrderedCollections]] -git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +git-tree-sha1 = "12f1439c4f986bb868acda6ea33ebc78e19b95ad" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.6.3" +version = "1.7.0" [[deps.Pkg]] deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] @@ -431,10 +432,10 @@ weakdeps = ["REPL"] REPLExt = "REPL" [[deps.Polynomials]] -deps = ["LinearAlgebra", "RecipesBase", "Requires", "Setfield", "SparseArrays"] -git-tree-sha1 = "1a9cfb2dc2c2f1bd63f1906d72af39a79b49b736" +deps = ["LinearAlgebra", "OrderedCollections", "RecipesBase", "Requires", "Setfield", "SparseArrays"] +git-tree-sha1 = "adc25dbd4d13f148f3256b6d4743fe7e63a71c4a" uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" -version = "4.0.11" +version = "4.0.12" [deps.Polynomials.extensions] PolynomialsChainRulesCoreExt = "ChainRulesCore" @@ -494,9 +495,9 @@ version = "1.3.0" [[deps.Revise]] deps = ["CodeTracking", "Distributed", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "REPL", "Requires", "UUIDs", "Unicode"] -git-tree-sha1 = "7f4228017b83c66bd6aa4fddeb170ce487e53bc7" +git-tree-sha1 = "470f48c9c4ea2170fd4d0f8eb5118327aada22f5" uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" -version = "3.6.2" +version = "3.6.4" [[deps.SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" @@ -602,9 +603,9 @@ version = "1.11.0" [[deps.Unitful]] deps = ["Dates", "LinearAlgebra", "Random"] -git-tree-sha1 = "d95fe458f26209c66a187b1114df96fd70839efd" +git-tree-sha1 = "01915bfcd62be15329c9a07235447a89d588327c" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.21.0" +version = "1.21.1" [deps.Unitful.extensions] ConstructionBaseUnitfulExt = "ConstructionBase" diff --git a/notebooks/Manifest.toml b/notebooks/Manifest.toml deleted file mode 100644 index fb4c8e4..0000000 --- a/notebooks/Manifest.toml +++ /dev/null @@ -1,1385 +0,0 @@ -# This file is machine-generated - editing it directly is not advised - -julia_version = "1.9.1" -manifest_format = "2.0" -project_hash = "7d3b968c2d593ccb03d9678d43bed6d9bbd719ea" - -[[deps.AbstractFFTs]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "16b6dbc4cf7caee4e1e75c49485ec67b667098a0" -uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" -version = "1.3.1" - - [deps.AbstractFFTs.extensions] - AbstractFFTsChainRulesCoreExt = "ChainRulesCore" - - [deps.AbstractFFTs.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - -[[deps.AbstractPlutoDingetjes]] -deps = ["Pkg"] -git-tree-sha1 = "8eaf9f1b4921132a4cff3f36a1d9ba923b14a481" -uuid = "6e696c72-6542-2067-7265-42206c756150" -version = "1.1.4" - -[[deps.Adapt]] -deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24" -uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "3.6.2" - - [deps.Adapt.extensions] - AdaptStaticArraysExt = "StaticArrays" - - [deps.Adapt.weakdeps] - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.ArgTools]] -uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.1" - -[[deps.ArrayInterfaceCore]] -deps = ["LinearAlgebra", "SnoopPrecompile", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "e5f08b5689b1aad068e01751889f2f615c7db36d" -uuid = "30b0a656-2188-435a-8636-2ec0e6a096e2" -version = "0.1.29" - -[[deps.Artifacts]] -uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" - -[[deps.AssetRegistry]] -deps = ["Distributed", "JSON", "Pidfile", "SHA", "Test"] -git-tree-sha1 = "b25e88db7944f98789130d7b503276bc34bc098e" -uuid = "bf4720bc-e11a-5d0c-854e-bdca1663c893" -version = "0.1.0" - -[[deps.BLUEs]] -deps = ["DimensionalData", "LinearAlgebra", "Measurements", "Revise", "SparseArrays", "Statistics", "ToeplitzMatrices", "Unitful", "UnitfulLinearAlgebra"] -path = ".." -uuid = "b3a7f272-e305-45d1-bcf3-14d22bb67726" -version = "0.1.5-alpha" - -[[deps.Base64]] -uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" - -[[deps.BitFlags]] -git-tree-sha1 = "43b1a4a8f797c1cddadf60499a8a077d4af2cd2d" -uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" -version = "0.1.7" - -[[deps.Blink]] -deps = ["Base64", "Distributed", "HTTP", "JSExpr", "JSON", "Lazy", "Logging", "MacroTools", "Mustache", "Mux", "Pkg", "Reexport", "Sockets", "WebIO"] -git-tree-sha1 = "b1c61fd7e757c7e5ca6521ef41df8d929f41e3af" -uuid = "ad839575-38b3-5650-b840-f874b8c74a25" -version = "0.12.8" - -[[deps.Bzip2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" -uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" -version = "1.0.8+0" - -[[deps.Cairo_jll]] -deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" -uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" -version = "1.16.1+1" - -[[deps.Calculus]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" -uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" -version = "0.5.1" - -[[deps.CodeTracking]] -deps = ["InteractiveUtils", "UUIDs"] -git-tree-sha1 = "d730914ef30a06732bdd9f763f6cc32e92ffbff1" -uuid = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2" -version = "1.3.1" - -[[deps.CodecZlib]] -deps = ["TranscodingStreams", "Zlib_jll"] -git-tree-sha1 = "9c209fb7536406834aa938fb149964b985de6c83" -uuid = "944b1d66-785c-5afd-91f1-9de20f533193" -version = "0.7.1" - -[[deps.ColorSchemes]] -deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] -git-tree-sha1 = "be6ab11021cd29f0344d5c4357b163af05a48cba" -uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" -version = "3.21.0" - -[[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 = "600cc5508d66b78aae350f7accdb58763ac18589" -uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" -version = "0.9.10" - -[[deps.Colors]] -deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] -git-tree-sha1 = "fc08e5930ee9a4e03f84bfb5211cb54e7769758a" -uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" -version = "0.12.10" - -[[deps.Compat]] -deps = ["UUIDs"] -git-tree-sha1 = "4e88377ae7ebeaf29a047aa1ee40826e0b708a5d" -uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.7.0" -weakdeps = ["Dates", "LinearAlgebra"] - - [deps.Compat.extensions] - CompatLinearAlgebraExt = "LinearAlgebra" - -[[deps.CompilerSupportLibraries_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.0.2+0" - -[[deps.ConcurrentUtilities]] -deps = ["Serialization", "Sockets"] -git-tree-sha1 = "96d823b94ba8d187a6d8f0826e731195a74b90e9" -uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" -version = "2.2.0" - -[[deps.Configurations]] -deps = ["ExproniconLite", "OrderedCollections", "TOML"] -git-tree-sha1 = "62a7c76dbad02fdfdaa53608104edf760938c4ca" -uuid = "5218b696-f38b-4ac9-8b61-a12ec717816d" -version = "0.17.4" - -[[deps.ConstructionBase]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "738fec4d684a9a6ee9598a8bfee305b26831f28c" -uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.5.2" - - [deps.ConstructionBase.extensions] - ConstructionBaseIntervalSetsExt = "IntervalSets" - ConstructionBaseStaticArraysExt = "StaticArrays" - - [deps.ConstructionBase.weakdeps] - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.Contour]] -git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781" -uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" -version = "0.6.2" - -[[deps.DSP]] -deps = ["Compat", "FFTW", "IterTools", "LinearAlgebra", "Polynomials", "Random", "Reexport", "SpecialFunctions", "Statistics"] -git-tree-sha1 = "da8b06f89fce9996443010ef92572b193f8dca1f" -uuid = "717857b8-e6f2-59f4-9121-6e50c889abd2" -version = "0.7.8" - -[[deps.DataAPI]] -git-tree-sha1 = "8da84edb865b0b5b0100c0666a9bc9a0b71c553c" -uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.15.0" - -[[deps.DataStructures]] -deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "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"] -git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" -uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" -version = "1.9.1" - -[[deps.DimensionalData]] -deps = ["Adapt", "ArrayInterfaceCore", "ConstructionBase", "Dates", "Extents", "IntervalSets", "IteratorInterfaceExtensions", "LinearAlgebra", "Random", "RecipesBase", "SnoopPrecompile", "SparseArrays", "Statistics", "TableTraits", "Tables"] -git-tree-sha1 = "dda58a378971eabba69c526ca159ee9ca6715f4f" -uuid = "0703355e-b756-11e9-17c0-8b28908087d0" -version = "0.24.12" - -[[deps.Distributed]] -deps = ["Random", "Serialization", "Sockets"] -uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" - -[[deps.DocStringExtensions]] -deps = ["LibGit2"] -git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" -uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" -version = "0.9.3" - -[[deps.Downloads]] -deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] -uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.6.0" - -[[deps.ExceptionUnwrapping]] -deps = ["Test"] -git-tree-sha1 = "e90caa41f5a86296e014e148ee061bd6c3edec96" -uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" -version = "0.1.9" - -[[deps.Expat_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "4558ab818dcceaab612d1bb8c19cee87eda2b83c" -uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.5.0+0" - -[[deps.ExproniconLite]] -deps = ["Pkg", "TOML"] -git-tree-sha1 = "c2eb763acf6e13e75595e0737a07a0bec0ce2147" -uuid = "55351af7-c7e9-48d6-89ff-24e801d99491" -version = "0.7.11" - -[[deps.Extents]] -git-tree-sha1 = "5e1e4c53fa39afe63a7d356e30452249365fba99" -uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" -version = "0.1.1" - -[[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", "PCRE2_jll", "Pkg", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] -git-tree-sha1 = "74faea50c1d007c85837327f6775bea60b5492dd" -uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" -version = "4.4.2+2" - -[[deps.FFTW]] -deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] -git-tree-sha1 = "b4fbdd20c889804969571cc589900803edda16b7" -uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" -version = "1.7.1" - -[[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.Formatting]] -deps = ["Printf"] -git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8" -uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" -version = "0.4.2" - -[[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.FunctionalCollections]] -deps = ["Test"] -git-tree-sha1 = "04cb9cfaa6ba5311973994fe3496ddec19b6292a" -uuid = "de31a74c-ac4f-5751-b3fd-e18cd04993ca" -version = "0.5.0" - -[[deps.FuzzyCompletions]] -deps = ["REPL"] -git-tree-sha1 = "e16dd964b4dfaebcded16b2af32f05e235b354be" -uuid = "fb4132e2-a121-4a70-b8a1-d5b831dcdcc2" -version = "0.5.1" - -[[deps.GLFW_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] -git-tree-sha1 = "d972031d28c8c8d9d7b41a536ad7bb0c2579caca" -uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" -version = "3.3.8+0" - -[[deps.GR]] -deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "UUIDs", "p7zip_jll"] -git-tree-sha1 = "8b8a2fd4536ece6e554168c21860b6820a8a83db" -uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" -version = "0.72.7" - -[[deps.GR_jll]] -deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt5Base_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "19fad9cd9ae44847fe842558a744748084a722d1" -uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" -version = "0.72.7+0" - -[[deps.Gettext_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] -git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" -uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" -version = "0.21.0+0" - -[[deps.Glib_jll]] -deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Pkg", "Zlib_jll"] -git-tree-sha1 = "d3b3624125c1474292d0d8ed0f65554ac37ddb23" -uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.74.0+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.Grisu]] -git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" -uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" -version = "1.0.2" - -[[deps.HTTP]] -deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] -git-tree-sha1 = "2613d054b0e18a3dea99ca1594e9a3960e025da4" -uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" -version = "1.9.7" - -[[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.Hiccup]] -deps = ["MacroTools", "Test"] -git-tree-sha1 = "6187bb2d5fcbb2007c39e7ac53308b0d371124bd" -uuid = "9fb69e20-1954-56bb-a84f-559cc56a8ff7" -version = "0.2.2" - -[[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 = "d75853a0bdbfb1ac815478bacd89cd27b550ace6" -uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" -version = "0.2.3" - -[[deps.IntelOpenMP_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "0cb9352ef2e01574eeebdb102948a58740dcaf83" -uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" -version = "2023.1.0+0" - -[[deps.InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" - -[[deps.IntervalSets]] -deps = ["Dates", "Random", "Statistics"] -git-tree-sha1 = "16c0cc91853084cb5f58a78bd209513900206ce6" -uuid = "8197267c-284f-5f27-9208-e0e47529a953" -version = "0.7.4" - -[[deps.IrrationalConstants]] -git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" -uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" -version = "0.2.2" - -[[deps.IterTools]] -git-tree-sha1 = "4ced6667f9974fc5c5943fa5e2ef1ca43ea9e450" -uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" -version = "1.8.0" - -[[deps.IteratorInterfaceExtensions]] -git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" -uuid = "82899510-4779-5014-852e-03e436cf321d" -version = "1.0.0" - -[[deps.JLFzf]] -deps = ["Pipe", "REPL", "Random", "fzf_jll"] -git-tree-sha1 = "f377670cda23b6b7c1c0b3893e37451c5c1a2185" -uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" -version = "0.1.5" - -[[deps.JLLWrappers]] -deps = ["Preferences"] -git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" -uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.4.1" - -[[deps.JSExpr]] -deps = ["JSON", "MacroTools", "Observables", "WebIO"] -git-tree-sha1 = "b413a73785b98474d8af24fd4c8a975e31df3658" -uuid = "97c1335a-c9c5-57fe-bc5d-ec35cebe8660" -version = "0.5.4" - -[[deps.JSON]] -deps = ["Dates", "Mmap", "Parsers", "Unicode"] -git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" -uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "0.21.4" - -[[deps.JpegTurbo_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "6f2675ef130a300a112286de91973805fcc5ffbc" -uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "2.1.91+0" - -[[deps.JuliaInterpreter]] -deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"] -git-tree-sha1 = "6a125e6a4cb391e0b9adbd1afa9e771c2179f8ef" -uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a" -version = "0.9.23" - -[[deps.Kaleido_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "43032da5832754f58d14a91ffbe86d5f176acda9" -uuid = "f7e6163d-2fa5-5f23-b69c-1db539e41963" -version = "0.2.1+0" - -[[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.LLVMOpenMP_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "f689897ccbe049adb19a065c495e75f372ecd42b" -uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" -version = "15.0.4+0" - -[[deps.LZO_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6" -uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" -version = "2.10.1+0" - -[[deps.LaTeXStrings]] -git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" -uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" -version = "1.3.0" - -[[deps.Latexify]] -deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Printf", "Requires"] -git-tree-sha1 = "f428ae552340899a935973270b8d98e5a31c49fe" -uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" -version = "0.16.1" - - [deps.Latexify.extensions] - DataFramesExt = "DataFrames" - SymEngineExt = "SymEngine" - - [deps.Latexify.weakdeps] - DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" - SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" - -[[deps.LazilyInitializedFields]] -git-tree-sha1 = "410fe4739a4b092f2ffe36fcb0dcc3ab12648ce1" -uuid = "0e77f7df-68c5-4e49-93ce-4cd80f5598bf" -version = "1.2.1" - -[[deps.Lazy]] -deps = ["MacroTools"] -git-tree-sha1 = "1370f8202dac30758f3c345f9909b97f53d87d3f" -uuid = "50d2b5c4-7a5e-59d5-8109-a42b560f39c0" -version = "0.15.1" - -[[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.84.0+0" - -[[deps.LibGit2]] -deps = ["Base64", "NetworkOptions", "Printf", "SHA"] -uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" - -[[deps.LibSSH2_jll]] -deps = ["Artifacts", "Libdl", "MbedTLS_jll"] -uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.10.2+0" - -[[deps.Libdl]] -uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" - -[[deps.Libffi_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" -uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" -version = "3.2.2+1" - -[[deps.Libgcrypt_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"] -git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae" -uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" -version = "1.8.7+0" - -[[deps.Libglvnd_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] -git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733" -uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" -version = "1.6.0+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 = "c7cb1f5d892775ba13767a87c7ada0b980ea0a71" -uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" -version = "1.16.1+2" - -[[deps.Libmount_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" -uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" -version = "2.35.0+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", "OpenBLAS_jll", "libblastrampoline_jll"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - -[[deps.LogExpFunctions]] -deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "c3ce8e7420b3a6e071e0fe4745f5d4300e37b13f" -uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.24" - - [deps.LogExpFunctions.extensions] - LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" - LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" - LogExpFunctionsInverseFunctionsExt = "InverseFunctions" - - [deps.LogExpFunctions.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" - InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" - -[[deps.Logging]] -uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" - -[[deps.LoggingExtras]] -deps = ["Dates", "Logging"] -git-tree-sha1 = "cedb76b37bc5a6c702ade66be44f831fa23c681e" -uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" -version = "1.0.0" - -[[deps.LoweredCodeUtils]] -deps = ["JuliaInterpreter"] -git-tree-sha1 = "60168780555f3e663c536500aa790b6368adc02a" -uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b" -version = "2.3.0" - -[[deps.MIMEs]] -git-tree-sha1 = "65f28ad4b594aebe22157d6fac869786a255b7eb" -uuid = "6c6e2e6c-3030-632d-7369-2d6c69616d65" -version = "0.1.4" - -[[deps.MKL_jll]] -deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] -git-tree-sha1 = "154d7aaa82d24db6d8f7e4ffcfe596f40bff214b" -uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" -version = "2023.1.0+0" - -[[deps.MacroTools]] -deps = ["Markdown", "Random"] -git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2" -uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.10" - -[[deps.Markdown]] -deps = ["Base64"] -uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" - -[[deps.MbedTLS]] -deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "Random", "Sockets"] -git-tree-sha1 = "03a9b9718f5682ecb107ac9f7308991db4ce395b" -uuid = "739be429-bea8-5141-9913-cc70e7f3736d" -version = "1.1.7" - -[[deps.MbedTLS_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.2+0" - -[[deps.Measurements]] -deps = ["Calculus", "LinearAlgebra", "Printf", "RecipesBase", "Requires"] -git-tree-sha1 = "51d946d38d62709d6a2d37ea9bcc30c80c686801" -uuid = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" -version = "2.9.0" - -[[deps.Measures]] -git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" -uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" -version = "0.3.2" - -[[deps.Missings]] -deps = ["DataAPI"] -git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272" -uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" -version = "1.1.0" - -[[deps.Mmap]] -uuid = "a63ad114-7e13-5084-954f-fe012c677804" - -[[deps.MozillaCACerts_jll]] -uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.10.11" - -[[deps.MsgPack]] -deps = ["Serialization"] -git-tree-sha1 = "fc8c15ca848b902015bd4a745d350f02cf791c2a" -uuid = "99f44e22-a591-53d1-9472-aa23ef4bd671" -version = "1.2.0" - -[[deps.Mustache]] -deps = ["Printf", "Tables"] -git-tree-sha1 = "821e918c170ead5298ff84bffee41dd28929a681" -uuid = "ffc61752-8dc7-55ee-8c37-f3e9cdd09e70" -version = "1.0.17" - -[[deps.Mux]] -deps = ["AssetRegistry", "Base64", "HTTP", "Hiccup", "MbedTLS", "Pkg", "Sockets"] -git-tree-sha1 = "0bdaa479939d2a1f85e2f93e38fbccfcb73175a5" -uuid = "a975b10e-0019-58db-a62f-e48ff68538c9" -version = "1.0.1" - -[[deps.NaNMath]] -deps = ["OpenLibm_jll"] -git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" -uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "1.0.2" - -[[deps.NetworkOptions]] -uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.2.0" - -[[deps.Observables]] -git-tree-sha1 = "6862738f9796b3edc1c09d0890afce4eca9e7e93" -uuid = "510215fc-4207-5dde-b226-833fc4488ee2" -version = "0.5.4" - -[[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.21+4" - -[[deps.OpenLibm_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.1+0" - -[[deps.OpenSSL]] -deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] -git-tree-sha1 = "51901a49222b09e3743c65b8847687ae5fc78eb2" -uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" -version = "1.4.1" - -[[deps.OpenSSL_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1aa4b74f80b01c6bc2b89992b861b5f210e665b5" -uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "1.1.21+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 = "d321bf2de576bf25ec4d3e4360faca399afca282" -uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.6.0" - -[[deps.PCRE2_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" -version = "10.42.0+0" - -[[deps.Parameters]] -deps = ["OrderedCollections", "UnPack"] -git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" -uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" -version = "0.12.3" - -[[deps.Parsers]] -deps = ["Dates", "PrecompileTools", "UUIDs"] -git-tree-sha1 = "4b2e829ee66d4218e0cef22c0a64ee37cf258c29" -uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.7.1" - -[[deps.Pidfile]] -deps = ["FileWatching", "Test"] -git-tree-sha1 = "2d8aaf8ee10df53d0dfb9b8ee44ae7c04ced2b03" -uuid = "fa939f87-e72e-5be4-a000-7fc836dbe307" -version = "1.3.0" - -[[deps.Pipe]] -git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d" -uuid = "b98c9c47-44ae-5843-9183-064241ee97a0" -version = "1.3.0" - -[[deps.Pixman_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] -git-tree-sha1 = "64779bc4c9784fee475689a1752ef4d5747c5e87" -uuid = "30392449-352a-5448-841d-b1acce4e97dc" -version = "0.42.2+0" - -[[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] -uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.9.0" - -[[deps.PlotThemes]] -deps = ["PlotUtils", "Statistics"] -git-tree-sha1 = "1f03a2d339f42dca4a4da149c7e15e9b896ad899" -uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" -version = "3.1.0" - -[[deps.PlotUtils]] -deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "Statistics"] -git-tree-sha1 = "f92e1315dadf8c46561fb9396e525f7200cdc227" -uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" -version = "1.3.5" - -[[deps.PlotlyBase]] -deps = ["ColorSchemes", "Dates", "DelimitedFiles", "DocStringExtensions", "JSON", "LaTeXStrings", "Logging", "Parameters", "Pkg", "REPL", "Requires", "Statistics", "UUIDs"] -git-tree-sha1 = "56baf69781fc5e61607c3e46227ab17f7040ffa2" -uuid = "a03496cd-edff-5a9b-9e67-9cda94a718b5" -version = "0.8.19" - -[[deps.PlotlyJS]] -deps = ["Base64", "Blink", "DelimitedFiles", "JSExpr", "JSON", "Kaleido_jll", "Markdown", "Pkg", "PlotlyBase", "REPL", "Reexport", "Requires", "WebIO"] -git-tree-sha1 = "7452869933cd5af22f59557390674e8679ab2338" -uuid = "f0f68f2c-4968-5e81-91da-67840de0976a" -version = "0.18.10" - -[[deps.Plots]] -deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "PrecompileTools", "Preferences", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun", "UnitfulLatexify", "Unzip"] -git-tree-sha1 = "75ca67b2c6512ad2d0c767a7cfc55e75075f8bbc" -uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" -version = "1.38.16" - - [deps.Plots.extensions] - FileIOExt = "FileIO" - GeometryBasicsExt = "GeometryBasics" - IJuliaExt = "IJulia" - ImageInTerminalExt = "ImageInTerminal" - UnitfulExt = "Unitful" - - [deps.Plots.weakdeps] - FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" - GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" - IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" - ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" - Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" - -[[deps.Pluto]] -deps = ["Base64", "Configurations", "Dates", "Distributed", "FileWatching", "FuzzyCompletions", "HTTP", "HypertextLiteral", "InteractiveUtils", "Logging", "LoggingExtras", "MIMEs", "Markdown", "MsgPack", "Pkg", "PrecompileSignatures", "PrecompileTools", "REPL", "RegistryInstances", "RelocatableFolders", "Sockets", "TOML", "Tables", "URIs", "UUIDs"] -git-tree-sha1 = "c4c4dac5c1332ab510e145eea59382847c51a6fb" -uuid = "c3e4b0f8-55cb-11ea-2926-15256bba5781" -version = "0.19.26" - -[[deps.PlutoUI]] -deps = ["AbstractPlutoDingetjes", "Base64", "ColorTypes", "Dates", "FixedPointNumbers", "Hyperscript", "HypertextLiteral", "IOCapture", "InteractiveUtils", "JSON", "Logging", "MIMEs", "Markdown", "Random", "Reexport", "URIs", "UUIDs"] -git-tree-sha1 = "b478a748be27bd2f2c73a7690da219d0844db305" -uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8" -version = "0.7.51" - -[[deps.Polynomials]] -deps = ["LinearAlgebra", "RecipesBase"] -git-tree-sha1 = "3aa2bb4982e575acd7583f01531f241af077b163" -uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" -version = "3.2.13" - - [deps.Polynomials.extensions] - PolynomialsChainRulesCoreExt = "ChainRulesCore" - PolynomialsMakieCoreExt = "MakieCore" - PolynomialsMutableArithmeticsExt = "MutableArithmetics" - - [deps.Polynomials.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b" - MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" - -[[deps.PrecompileSignatures]] -git-tree-sha1 = "18ef344185f25ee9d51d80e179f8dad33dc48eb1" -uuid = "91cefc8d-f054-46dc-8f8c-26e11d7c5411" -version = "3.0.3" - -[[deps.PrecompileTools]] -deps = ["Preferences"] -git-tree-sha1 = "9673d39decc5feece56ef3940e5dafba15ba0f81" -uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.1.2" - -[[deps.Preferences]] -deps = ["TOML"] -git-tree-sha1 = "7eb1686b4f04b82f96ed7a4ea5890a4f0c7a09f1" -uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.4.0" - -[[deps.Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" - -[[deps.Qt5Base_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"] -git-tree-sha1 = "0c03844e2231e12fda4d0086fd7cbe4098ee8dc5" -uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1" -version = "5.15.3+2" - -[[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.RecipesBase]] -deps = ["PrecompileTools"] -git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" -uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" -version = "1.3.4" - -[[deps.RecipesPipeline]] -deps = ["Dates", "NaNMath", "PlotUtils", "PrecompileTools", "RecipesBase"] -git-tree-sha1 = "45cf9fd0ca5839d06ef333c8201714e888486342" -uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" -version = "0.6.12" - -[[deps.Reexport]] -git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" -uuid = "189a3867-3050-52da-a836-e630ba90ab69" -version = "1.2.2" - -[[deps.RegistryInstances]] -deps = ["LazilyInitializedFields", "Pkg", "TOML", "Tar"] -git-tree-sha1 = "ffd19052caf598b8653b99404058fce14828be51" -uuid = "2792f1a3-b283-48e8-9a74-f99dce5104f3" -version = "0.1.0" - -[[deps.RelocatableFolders]] -deps = ["SHA", "Scratch"] -git-tree-sha1 = "90bc7a7c96410424509e4263e277e43250c05691" -uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" -version = "1.0.0" - -[[deps.Requires]] -deps = ["UUIDs"] -git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" -uuid = "ae029012-a4dd-5104-9daa-d747884805df" -version = "1.3.0" - -[[deps.Revise]] -deps = ["CodeTracking", "Distributed", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "Pkg", "REPL", "Requires", "UUIDs", "Unicode"] -git-tree-sha1 = "1e597b93700fa4045d7189afa7c004e0584ea548" -uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" -version = "3.5.3" - -[[deps.SHA]] -uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" -version = "0.7.0" - -[[deps.Scratch]] -deps = ["Dates"] -git-tree-sha1 = "30449ee12237627992a99d5e30ae63e4d78cd24a" -uuid = "6c6a2e73-6563-6170-7368-637461726353" -version = "1.2.0" - -[[deps.Serialization]] -uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" - -[[deps.Showoff]] -deps = ["Dates", "Grisu"] -git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" -uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" -version = "1.0.3" - -[[deps.SimpleBufferStream]] -git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" -uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" -version = "1.1.0" - -[[deps.SnoopPrecompile]] -deps = ["Preferences"] -git-tree-sha1 = "e760a70afdcd461cf01a575947738d359234665c" -uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c" -version = "1.0.3" - -[[deps.Sockets]] -uuid = "6462fe0b-24de-5631-8697-dd941f90decc" - -[[deps.SortingAlgorithms]] -deps = ["DataStructures"] -git-tree-sha1 = "c60ec5c62180f27efea3ba2908480f8055e17cee" -uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" -version = "1.1.1" - -[[deps.SparseArrays]] -deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] -uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - -[[deps.SpecialFunctions]] -deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "7beb031cf8145577fbccacd94b8a8f4ce78428d3" -uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.3.0" - - [deps.SpecialFunctions.extensions] - SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" - - [deps.SpecialFunctions.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - -[[deps.Statistics]] -deps = ["LinearAlgebra", "SparseArrays"] -uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -version = "1.9.0" - -[[deps.StatsAPI]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "45a7769a04a3cf80da1c1c7c60caf932e6f4c9f7" -uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" -version = "1.6.0" - -[[deps.StatsBase]] -deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "75ebe04c5bed70b91614d684259b661c9e6274a4" -uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.0" - -[[deps.SuiteSparse]] -deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] -uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" - -[[deps.SuiteSparse_jll]] -deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"] -uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "5.10.1+6" - -[[deps.TOML]] -deps = ["Dates"] -uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.3" - -[[deps.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 = "1544b926975372da01227b382066ab70e574a3ec" -uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" -version = "1.10.1" - -[[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.ToeplitzMatrices]] -deps = ["AbstractFFTs", "DSP", "LinearAlgebra", "StatsBase"] -git-tree-sha1 = "326388c0c53565fb21eecafb6176b1cc5d225d34" -uuid = "c751599d-da0a-543b-9d20-d0a503d91d24" -version = "0.8.1" - -[[deps.TranscodingStreams]] -deps = ["Random", "Test"] -git-tree-sha1 = "9a6ae7ed916312b41236fcef7e0af564ef934769" -uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.9.13" - -[[deps.Tricks]] -git-tree-sha1 = "aadb748be58b492045b4f56166b5188aa63ce549" -uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775" -version = "0.1.7" - -[[deps.URIs]] -git-tree-sha1 = "074f993b0ca030848b897beff716d93aca60f06a" -uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" -version = "1.4.2" - -[[deps.UUIDs]] -deps = ["Random", "SHA"] -uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" - -[[deps.UnPack]] -git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" -uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" -version = "1.0.2" - -[[deps.Unicode]] -uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" - -[[deps.UnicodeFun]] -deps = ["REPL"] -git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" -uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" -version = "0.4.1" - -[[deps.Unitful]] -deps = ["ConstructionBase", "Dates", "LinearAlgebra", "Random"] -git-tree-sha1 = "ba4aa36b2d5c98d6ed1f149da916b3ba46527b2b" -uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.14.0" - - [deps.Unitful.extensions] - InverseFunctionsUnitfulExt = "InverseFunctions" - - [deps.Unitful.weakdeps] - InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" - -[[deps.UnitfulLatexify]] -deps = ["LaTeXStrings", "Latexify", "Unitful"] -git-tree-sha1 = "e2d817cc500e960fdbafcf988ac8436ba3208bfd" -uuid = "45397f5d-5981-4c77-b2b3-fc36d6e9b728" -version = "1.6.3" - -[[deps.UnitfulLinearAlgebra]] -deps = ["DimensionalData", "LinearAlgebra", "Revise", "SparseArrays", "Statistics", "Unitful"] -git-tree-sha1 = "46a88b3bff4d2fd872346c3bd669c9b00146b942" -repo-rev = "main" -repo-url = "https://github.com/ggebbie/UnitfulLinearAlgebra.jl" -uuid = "c14bd059-d406-4571-8f61-9bd20e53c30b" -version = "0.2.16-alpha" - -[[deps.Unzip]] -git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78" -uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" -version = "0.2.0" - -[[deps.Wayland_jll]] -deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] -git-tree-sha1 = "ed8d92d9774b077c53e1da50fd81a36af3744c1c" -uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" -version = "1.21.0+0" - -[[deps.Wayland_protocols_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "4528479aa01ee1b3b4cd0e6faef0e04cf16466da" -uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" -version = "1.25.0+0" - -[[deps.WebIO]] -deps = ["AssetRegistry", "Base64", "Distributed", "FunctionalCollections", "JSON", "Logging", "Observables", "Pkg", "Random", "Requires", "Sockets", "UUIDs", "WebSockets", "Widgets"] -git-tree-sha1 = "0eef0765186f7452e52236fa42ca8c9b3c11c6e3" -uuid = "0f1e0344-ec1d-5b48-a673-e5cf874b6c29" -version = "0.8.21" - -[[deps.WebSockets]] -deps = ["Base64", "Dates", "HTTP", "Logging", "Sockets"] -git-tree-sha1 = "4162e95e05e79922e44b9952ccbc262832e4ad07" -uuid = "104b5d7c-a370-577a-8038-80a2059c5097" -version = "1.6.0" - -[[deps.Widgets]] -deps = ["Colors", "Dates", "Observables", "OrderedCollections"] -git-tree-sha1 = "fcdae142c1cfc7d89de2d11e08721d0f2f86c98a" -uuid = "cc8bc4a8-27d6-5769-a93b-9d913e69aa62" -version = "0.6.6" - -[[deps.XML2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] -git-tree-sha1 = "93c41695bc1c08c46c5899f4fe06d6ead504bb73" -uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.10.3+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_libXcursor_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] -git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" -uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" -version = "1.2.0+4" - -[[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_libXfixes_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] -git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" -uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" -version = "5.0.3+4" - -[[deps.Xorg_libXi_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] -git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" -uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" -version = "1.7.10+4" - -[[deps.Xorg_libXinerama_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] -git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" -uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" -version = "1.1.4+4" - -[[deps.Xorg_libXrandr_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] -git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" -uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" -version = "1.5.2+4" - -[[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_libxkbfile_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] -git-tree-sha1 = "926af861744212db0eb001d9e40b5d16292080b2" -uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" -version = "1.1.0+4" - -[[deps.Xorg_xcb_util_image_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] -git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" -uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" -version = "0.4.0+1" - -[[deps.Xorg_xcb_util_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] -git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" -uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" -version = "0.4.0+1" - -[[deps.Xorg_xcb_util_keysyms_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] -git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" -uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" -version = "0.4.0+1" - -[[deps.Xorg_xcb_util_renderutil_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] -git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" -uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" -version = "0.3.9+1" - -[[deps.Xorg_xcb_util_wm_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] -git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" -uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" -version = "0.4.1+1" - -[[deps.Xorg_xkbcomp_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxkbfile_jll"] -git-tree-sha1 = "4bcbf660f6c2e714f87e960a171b119d06ee163b" -uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" -version = "1.4.2+4" - -[[deps.Xorg_xkeyboard_config_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xkbcomp_jll"] -git-tree-sha1 = "5c8424f8a67c3f2209646d4425f3d415fee5931d" -uuid = "33bec58e-1273-512f-9401-5d533626f822" -version = "2.27.0+4" - -[[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.13+0" - -[[deps.Zstd_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "49ce682769cd5de6c72dcf1b94ed7790cd08974c" -uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" -version = "1.5.5+0" - -[[deps.fzf_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "868e669ccb12ba16eaf50cb2957ee2ff61261c56" -uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" -version = "0.29.0+0" - -[[deps.libaom_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "3a2ea60308f0996d26f1e5354e10c24e9ef905d4" -uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" -version = "3.4.0+0" - -[[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"] -uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.8.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.48.0+0" - -[[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" - -[[deps.xkbcommon_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] -git-tree-sha1 = "9ebfc140cc56e8c2156a15ceac2f0302e327ac0a" -uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" -version = "1.4.1+0" diff --git a/notebooks/Project.toml b/notebooks/Project.toml deleted file mode 100644 index 3e3086d..0000000 --- a/notebooks/Project.toml +++ /dev/null @@ -1,16 +0,0 @@ -[deps] -BLUEs = "b3a7f272-e305-45d1-bcf3-14d22bb67726" -InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240" -LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" -PlotlyJS = "f0f68f2c-4968-5e81-91da-67840de0976a" -Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" -Pluto = "c3e4b0f8-55cb-11ea-2926-15256bba5781" -PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8" -Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" -SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" -Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" -ToeplitzMatrices = "c751599d-da0a-543b-9d20-d0a503d91d24" -Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" -UnitfulLinearAlgebra = "c14bd059-d406-4571-8f61-9bd20e53c30b" diff --git a/notebooks/notebook.jl b/notebooks/notebook.jl deleted file mode 100644 index e944a45..0000000 --- a/notebooks/notebook.jl +++ /dev/null @@ -1,448 +0,0 @@ -### A Pluto.jl notebook ### -# v0.19.26 - -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 - -# ╔═╡ 1ccfc590-90f7-11ed-1e7c-dfaec0816597 -begin - ENV["UNITFUL_FANCY_EXPONENTS"] = true - import Pkg; Pkg.activate(".") - using BLUEs - using Test - using LinearAlgebra - using Statistics - using Unitful - using UnitfulLinearAlgebra - using Measurements - using ToeplitzMatrices - using SparseArrays - using Plots - using Random - using InteractiveUtils - using PlutoUI - using Pluto - plotlyjs() - #gr() -end - - -# ╔═╡ 1aa4af78-f0ee-4d5a-916b-c6e0decdd300 -md""" -# Examples from runtests -""" - -# ╔═╡ 970a7544-c5f2-4f2e-ba52-316f67554482 - const permil = u"permille"; const K = u"K"; const K² = u"K^2"; m = u"m"; s = u"s"; - -# ╔═╡ f862f30e-ea14-41a1-93ee-63d92380cd8d -md""" -## Example 1: Error propagation - -Generate an array of Gaussian distributed numbers $\mathbf{a}$, with uncertainty between 0 and 1. - -Generate a matrix $\mathbf{E}$ that will propagate our error -""" - -# ╔═╡ 7dd4252c-f2d0-4839-9052-981b86e83804 -let - begin - Random.seed!(1234) - @show a = randn(5) .± rand(5) - E = randn(5,5) - println("E = ") - display(E) - println() - - @show aerr = Measurements.uncertainty.(a); - @show x = Estimate(Measurements.value.(a), - Diagonal(aerr.^2)) - println() - - @show E*a - @show E*x - println() - - @show Measurements.value.(E*a) ≈ (E*x).v - @show Measurements.uncertainty.(E*a) ≈ (E*x).σ - - #one advantage of Measurements is that it has built-in Plots.jl functionality - plot(E*a, xlabel ="Index", ylabel ="value", label = "Ea") - #but we can reproduce the same behavior easily - plot!((E*x).v; yerror = (E*x).σ, label = "Ex") - - end -end - - -# ╔═╡ 6b9668b2-dcdc-4ac9-b29c-feeb155ec42f -md""" -## Example 2: mixed signals, dimensionless matrix - -Solve $\mathbf{y = Ex}$ where $\mathbf{y}$ is our measurement with uncertainty/weighting $\mathbf{C_nn}$ and $\mathbf{E}$ is some dimensionless matrix. - -Populates an OverdeterminedProblem object and solves according to textbook solution 1.208/1.209 and Hessian solution (see documentation for equations) - -Note: each of these methodologies can take in prior ($\mathbf{C_{xx}}^{-1}$ and $\mathbf{x_0}$) information (but doesn't for this example) -""" - -# ╔═╡ 98024f12-fc38-40e3-a4a4-c7678940f5ee -let - begin - Random.seed!(1234) - N = 2; - M = 2; - @show σₓ = rand() - println() - E = UnitfulMatrix(randn(M,N),fill(m,M),fill(m,N),exact=true) - println("E = ") - display(E) - println() - - Cnn⁻¹ = Diagonal(fill(σₓ^-1,M),unitrange(E).^-1,unitrange(E)) - println("Cnn⁻¹ = ") - display(Cnn⁻¹) - println() - - @show x = UnitfulMatrix(randn(N)m) - @show y = E*x - println() - - @show problem = OverdeterminedProblem(y,E,Cnn⁻¹) - println() - @time @show x̃ = solve(problem,alg=:hessian) - @time @show x̃ = solve(problem,alg=:textbook) # Unitful error - - println() - @show x ≈ x̃.v - @show cost(x̃,problem) < 1e-5 # no noise in obs - @show x ≈ pinv(problem) * y # inefficient way to solve problem - - - l = @layout [ - a{0.5w} b{0.5w} - ] - println(diag(Cnn⁻¹)) - p1 = scatter(vec(y), yerror = sqrt.(1 ./ diag(Cnn⁻¹)), label = "y", xlabel = "Index", ylabel = "y", title = "Obs. and Recon. Obs") - scatter!(vec((E*x̃).v); yerror = (E*x̃).σ, label = "Ex̃") - p2 = scatter(vec(x); label = "xₜₕₑₒ", xlabel = "Index", ylabel = "x", title = "True Par. and Est. Par.") - scatter!(vec(x̃.v);yerror = x̃.σ, label = "x̃") - plot(p1, p2, layout = l) - end -end - - -# ╔═╡ a820781d-2e6a-4b4d-a1cb-f824c293de57 -md""" -## Example 3: trend analysis, left-uniform matrix - -For a temporal array $\mathbf{t}$ that ranges from 0:9 [s], generate an array of "observations", in [m] with a random slope [m/s] and y-intercept [m]. Add some randomly distributed noise. -Then, construct the model matrix $\mathbf{E}$, of the following form - -$\mathbf{E} = \begin{bmatrix} -1 && t_1 [s]\\ -1 && t_2 [s]\\ -\vdots && \vdots \\ -1 && t_N [s]\\ -\end{bmatrix}$ -""" - -# ╔═╡ f3ddcd82-b84c-4504-bbd5-309ec62a10c3 -let - begin - Random.seed!(1234) - numobs = 10 # number of obs - @show t = collect(0:1:numobs-1)s - - @show a = randn()m # intercept - @show b = randn()m/s # slope - - @show y = a .+ b.*t .+ randn(numobs)m - - E = UnitfulMatrix(hcat(ones(numobs),ustrip.(t)),fill(m,numobs),[m,m/s],exact=true) - println() - display(E) - println() - Cnn⁻¹ = Diagonal(fill(1.0,numobs),fill(m^-1,numobs),fill(m,numobs),exact=true) - display(Cnn⁻¹) - - problem = OverdeterminedProblem(UnitfulMatrix(y),E,Cnn⁻¹) - @show x̃ = solve(problem,alg=:textbook) - x̃1 = solve(problem,alg=:hessian) #solutions will be identical - @show cost(x̃,problem) < 3numobs; # rough guide, could get unlucky and not pass - scatter(t, y; yerror = sqrt.(1 ./ diag(Cnn⁻¹)), xlabel = "time", ylabel = "distance", label = "y(t)") - plot!(t, vec((E*x̃).v), ribbon = (E*x̃).σ, label = "ỹ(t)") - - end -end - - -# ╔═╡ 1be54490-8984-42da-b26c-f3eb39b507f4 -md""" -## Example 4: left-uniform problem with prior info -If we have one observation of $\delta^{18}\mathrm{O}_{\text{calcite}} = (-1.9 \pm 0.2)‰$, and we want to obtain values of $\delta^{18}\mathrm{O}_{\text{water}}, T$ from it, we can use the following relation - -$$\delta^{18}\mathrm{O}_{\text{calcite}} = -0.24 [\text{‰/K}] T + \delta^{18}\mathrm{O}_{\text{water}}$$ - -(above equation is rough estimate, and assumes we've already subtracted off the calcite-water $\delta^{18}\mathrm{O}$ offset) - -As this is an underdetermined problem, we will define some first guess $\mathbf{x_0} = (1‰, 4K)$ with some tapering value $\mathbf{\gamma} = (1 ‰^{-2}, 1K^{-2})$ and solve for $\mathbf{\tilde{x}}$ -""" - -# ╔═╡ d56d533f-e2ae-4528-897e-cdc726616db1 -γδ_slider = @bind γδ Slider(0.1permil^-2:0.1permil^-2:10permil^-2,show_value=true,default=1permil^-2) - -# ╔═╡ 51eb9f4a-8c8d-4488-a499-9ff9555ac992 -γT_slider = @bind γT Slider(0.1K^-2:0.1K^-2:10K^-2,show_value=true,default=1K^-2) - -# ╔═╡ 6338513d-6adf-4ba1-8d78-cce3d2178f51 -begin - let - y = [-1.9permil] - σₙ = 0.2permil - - a = -0.24permil*K^-1 - #γδ = 1.0permil^-2 # to keep units correct, have two γ (tapering) variables - #γT = 1.0K^-2 - E = UnitfulMatrix(ustrip.([1 a]),[permil],[permil,K],exact=true) # problem with exact E and error propagation - x₀ = [-1.0permil, 4.0K] - - # "overdetermined, problem 1.4" - Cxx⁻¹ = Diagonal(ustrip.([γδ,γT]),[permil^-1,K^-1],[permil,K],exact=true) - Cnn⁻¹ = Diagonal([σₙ.^-2],[permil^-1],[permil]) - oproblem = OverdeterminedProblem(UnitfulMatrix(y),E,Cnn⁻¹,Cxx⁻¹,UnitfulMatrix(x₀)) - - # "underdetermined, problem 2.1" - Cnn = Diagonal([σₙ.^2],[permil],[permil^-1]) - Cxx = Diagonal(ustrip.([γδ,γT].^-1),[permil,K],[permil^-1,K^-1],exact=true) - uproblem = UnderdeterminedProblem(UnitfulMatrix(y),E,Cnn,Cxx,UnitfulMatrix(x₀)) - - @time x̃1 = solve(oproblem) - @test cost(x̃1,oproblem) < 1 # rough guide, coul - - @time x̃2 = solve(uproblem) - @test cost(x̃2,uproblem) < 1 # rough guide, could ge - # same answer both ways? - @test cost(x̃2,uproblem) ≈ cost(x̃1,oproblem) - - l = @layout [ - a{1.0w} - b{0.5w} c{0.5w} - ] - p1 = scatter(["y"], y; yerror = σₙ, legend = false, ylabel = "δ¹⁸O") - scatter!(["Ex̃₁"], vec((E*x̃1).v), yerror = (E*x̃1).σ) - scatter!(["Ex̃₂"], vec((E*x̃2).v), yerror = (E*x̃2).σ) - scatter!(["Exₒ"], vec(E*UnitfulMatrix(x₀))) - - p2 = scatter(["x̃1"], [vec(x̃1.v)[1]], yerror = [x̃1.σ[1]], legend = false, ylims = (-1.5, -0.3)) - scatter!(["x̃2"], [vec(x̃2.v)[1]], yerror = x̃2.σ[1]) - scatter!(["x₀"],[x₀[1]]) - - p3 = scatter(["x̃1"], [vec(x̃1.v)[2]], yerror = x̃1.σ[2], legend = false, ylims = (2, 6)) - scatter!(["x̃2"], [vec(x̃2.v)[2]], yerror = x̃2.σ[2]) - scatter!(["x₀"], [x₀[2]]) - plot(p1,p2,p3, layout = l) -end -end - - -# ╔═╡ 17b6c57a-0b3e-4aa2-bffd-df97bbd5a1c8 -md""" -## Example 5: Polynomial fitting, problem 2.3 -For a function - -$$y(t) [\text{g/kg}] = a [\text{g/kg}] + b [\text{g/(kg day)}] t + c [\text{g/(kg day}^2)] t^2 + d[\text{g/(kg day}^3)]t^3$$ - -Assume we can make measurements of some quantity with $\sigma = 0.1$ g/kg. We will make 50 observations, making this an overdetermined system, and we will solve it using a prior $\mathbf{x_0} = \vec{0}$ - -We will define a tapering matrix -$\mathbf{C_xx} = \begin{bmatrix} -0.1 && 0 \text{day}^{-1} && 0 \text{day}^{-2} && 0 \text{day}^{-3}\\ -0 \text{day}^{-1} && 0.01 \text{day}^{-2} && 0 \text{day}^{-3} && 0 \text{day}^{-4} \\ -0 \text{day}^{-2}&& 0 \text{day}^{-3}&& 0.001 \text{day}^{-4} && 0 \text{day}^{-5} \\ -0 \text{day}^{-3}&& 0\text{day}^{-4} && 0 \text{day}^{-5}&& 0.0001 \text{day}^{-6}\\ -\end{bmatrix} [\text{g}^2 \text{kg}^{-2}]$ - -We will generate an observational vector $\mathbf{x}$ from the Cholesky decomposition of the $\mathbf{C_xx}$ matrix -$$\mathbf{x} = \mathbf{Cxx}^{T/2} \mathbf{r}$$ -where $\mathbf{r}$ is a vector of normally distributed values, meaning that $\mathbf{x}$ will have the covariance of $\mathbf{C_xx}$ - -By using the M slider, which controls the number of points, we can see that the more points we have, the closer $\tilde{x}$ gets to $x_{\text{true}}$ - -Note that in the M = 1:11 range, $\tilde{x} > x_0, x_{\text{true}}$ for the third (or $c$ constant in the polynomial value) -""" - -# ╔═╡ 7c39ff4c-8ceb-4af8-9189-0ead81d6388a -M_slider = @bind M Slider(2:1:100,show_value=true,default=10) - -# ╔═╡ 838d2317-455a-4502-97cb-9a5d68eba1a2 -let - begin - Random.seed!(1234) - g = u"g" - kg = u"kg" - d = u"d" - #M = 50 - t = (1:M)d - - E = UnitfulMatrix(ustrip.(hcat(t.^0, t, t.^2, t.^3)),fill(g/kg,M),[g/kg,g/kg/d,g/kg/d^2,g/kg/d^3],exact=true) - - σₙ = 0.1g/kg - Cₙₙ = Diagonal(fill(ustrip(σₙ^2),M),fill(g/kg,M),fill(kg/g,M),exact=true) - display(Cₙₙ) - #Cₙₙ¹² = cholesky(Cₙₙ) - Cₙₙ⁻¹ = Diagonal(fill(ustrip(σₙ^-2),M),fill(kg/g,M),fill(g/kg,M),exact=true) - #Cₙₙ⁻¹² = cholesky(Cₙₙ⁻¹) - - γ = [1.0e1kg^2/g^2, 1.0e2kg^2*d^2/g^2, 1.0e3kg^2*d^4/g^2, 1.0e4kg^2*d^6/g^2] - - Cxx⁻¹ = Diagonal(ustrip.(γ),[kg/g,kg*d/g,kg*d^2/g,kg*d^3/g],[g/kg,g/kg/d,g/kg/d^2,g/kg/d^3],exact=true) - Cxx = inv(Cxx⁻¹) - display(Cxx) - @show Cxx¹² = cholesky(Cxx) - - N = size(Cxx⁻¹,1) - @show x₀ = zeros(N).*unitdomain(Cxx⁻¹) - x = Cxx¹².L*randn(N) - @show y = E*x - oproblem = OverdeterminedProblem(y,E,Cₙₙ⁻¹,Cxx⁻¹,UnitfulMatrix(x₀)) - - # not perfect data fit b.c. of prior info - x̃ = solve(oproblem,alg=:hessian) - @show x̃ = solve(oproblem,alg=:textbook) - @show cost(x̃,oproblem) - @show cost(x̃,oproblem) < 3M - l = @layout[ - a{1.0w} - b{0.25w} c{0.25w} d{0.25w} e{0.25w} - f{0.25w} - ] - p1 = scatter(t, vec(y); yerror = sqrt.(diag(Cₙₙ)), label = "y", xlabel = "time", ylabel = "y") - scatter!(t, vec((E*x̃).v); yerror = (E*x̃).σ, label = "Ex̃") - p2 = scatter(["true", "x̃", "x₀"], [vec(x)[1], vec(x̃.v)[1], x₀[1]], ylabel = "", legend = false) - p3 = scatter(["true", "x̃", "x₀"], [vec(x)[2], vec(x̃.v)[2], x₀[2]], ylabel = "", legend = false) - p4 = scatter(["true", "x̃", "x₀"], [vec(x)[3], vec(x̃.v)[3], x₀[3]], ylabel = "", legend = false) - p5 = scatter(["true", "x̃", "x₀"], [vec(x)[4], vec(x̃.v)[4], x₀[4]], ylabel = "", legend = false) - plot(p1,p2,p3, p4, p5, layout = l) - end -end - - -# ╔═╡ c2ebefbb-2d78-40de-809e-8207caa9cc6d -md""" -## Example 6: Overdetermined problem for mean with autocovariance, problem 4.1 -""" - -# ╔═╡ 9fea9058-0220-41e3-9254-c42b13dee248 -md""" -## Example 7: Objective mapping, problem 4.3 -""" - -# ╔═╡ 8fafebcd-7df4-4ff1-905c-4a14c71a5290 -let - begin - yr = u"yr"; cm = u"cm" - τ = range(0.0yr,5.0yr,step=0.1yr) - ρ = exp.(-τ.^2/(1yr)^2) - n = length(ρ) - Cxx = UnitfulMatrix(SymmetricToeplitz(ρ),fill(cm,n),fill(cm^-1,n),exact=true) + Diagonal(fill(1e-6,n), fill(cm,n),fill(cm^-1,n),exact=true) - - display(Cxx) - - M = 11 - σₙ = 0.1cm - Cnn = Diagonal(fill(ustrip(σₙ),M),fill(cm,M),fill(cm^-1,M),exact=true) - - Enm = sparse(1:M,1:5:n,fill(1.0,M)) - E = UnitfulMatrix(Enm,fill(cm,M),fill(cm,n),exact=true) - - Cxx¹² = cholesky(Cxx) - x₀ = zeros(n)cm - x = Cxx¹².L*randn(n) - @show y = E*x - - uproblem = UnderdeterminedProblem(y,E,Cnn,Cxx,UnitfulMatrix(x₀)) - - x̃ = solve(uproblem) - # @show x̃ = solve(uproblem) # show method missing - @test cost(x̃,uproblem) < 3M - t = range(0.0yr, 5.0yr, length = length(y)) - p1 = scatter(t, vec(y), yerror = σₙ, label = "y", xlabel = "time", ylabel = "sea level") - scatter!(t, vec((E*x̃).v), yerror = (E*x̃).σ, label = "ỹ") - plot!(τ, vec(x̃.v), ribbon = x̃.σ, label = "x̃") - end -end - - -# ╔═╡ 293a74b4-f862-45e6-a27e-8dda5d9264f9 -md""" -## Example 8: overdetermined named tuple E, y -For some system - -$\mathbf{y_1} = \mathbf{E_1x}$ -$\mathbf{y_2} = \mathbf{E_2x}$ -solve for x -""" - -# ╔═╡ cbc01f32-76bb-478c-be4e-969542ef32e0 -let - begin - N = 2 - M = 1 - σₓ = rand() - # exact = false to work - E1 = UnitfulMatrix(randn(M,N),fill(m,M),fill(m,N),exact=true) - E2 = UnitfulMatrix(randn(M,N),fill(m,M),fill(m,N),exact=true) - E = (one=E1,two=E2) - - Cnn⁻¹1 = Diagonal(fill(σₓ^-1,M),unitrange(E1).^-1,unitrange(E1),exact=true) - - Cnn⁻¹ = (one=Cnn⁻¹1, two =Cnn⁻¹1) - x = UnitfulMatrix(randn(N)m) - - # create perfect data - @show y = E*x - - problem = OverdeterminedProblem(y,E,Cnn⁻¹) - - #x̃ = solve(y,E,Cnn⁻¹) - x̃ = solve(problem,alg=:hessian) - - @show x ≈ x̃.v # no noise in obs - @show cost(x̃,problem) #< 1e-5 # no noise in obs - end -end - - -# ╔═╡ Cell order: -# ╟─1aa4af78-f0ee-4d5a-916b-c6e0decdd300 -# ╠═1ccfc590-90f7-11ed-1e7c-dfaec0816597 -# ╟─970a7544-c5f2-4f2e-ba52-316f67554482 -# ╟─f862f30e-ea14-41a1-93ee-63d92380cd8d -# ╠═7dd4252c-f2d0-4839-9052-981b86e83804 -# ╟─6b9668b2-dcdc-4ac9-b29c-feeb155ec42f -# ╠═98024f12-fc38-40e3-a4a4-c7678940f5ee -# ╟─a820781d-2e6a-4b4d-a1cb-f824c293de57 -# ╠═f3ddcd82-b84c-4504-bbd5-309ec62a10c3 -# ╠═1be54490-8984-42da-b26c-f3eb39b507f4 -# ╠═d56d533f-e2ae-4528-897e-cdc726616db1 -# ╠═51eb9f4a-8c8d-4488-a499-9ff9555ac992 -# ╠═6338513d-6adf-4ba1-8d78-cce3d2178f51 -# ╟─17b6c57a-0b3e-4aa2-bffd-df97bbd5a1c8 -# ╠═7c39ff4c-8ceb-4af8-9189-0ead81d6388a -# ╠═838d2317-455a-4502-97cb-9a5d68eba1a2 -# ╠═c2ebefbb-2d78-40de-809e-8207caa9cc6d -# ╠═9fea9058-0220-41e3-9254-c42b13dee248 -# ╠═8fafebcd-7df4-4ff1-905c-4a14c71a5290 -# ╟─293a74b4-f862-45e6-a27e-8dda5d9264f9 -# ╠═cbc01f32-76bb-478c-be4e-969542ef32e0 diff --git a/notebooks/syntheticLIA.jl b/notebooks/syntheticLIA.jl deleted file mode 100644 index 17b27e4..0000000 --- a/notebooks/syntheticLIA.jl +++ /dev/null @@ -1,347 +0,0 @@ -### A Pluto.jl notebook ### -# v0.19.26 - -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 - -# ╔═╡ 31029ab4-e82b-11ed-0571-2fbfeebb813b -#activate package one level up from /notebooks -import Pkg; Pkg.activate(abspath(joinpath(pwd(), ".."))) - -# ╔═╡ c2d82ba9-624a-46f6-a53d-97e3f00db657 -begin - using Revise - using BLUEs, Unitful, DimensionalData, ToeplitzMatrices, Plots, UnitfulLinearAlgebra, LinearAlgebra, SparseArrays, Statistics, Measurements - using DimensionalData:@dim - using InteractiveUtils, PlutoUI - plotlyjs() -end - - -# ╔═╡ c2b6940f-6eb3-4aa9-9b3f-58f02d8270cb -begin - include("../test/test_functions.jl") - const permil = u"permille"; const K = u"K"; const K² = u"K^2"; m = u"m"; s = u"s";yr = u"yr"; °C = u"°C" - ENV["UNITFUL_FANCY_EXPONENTS"] = true - - #define our dimensions - @dim YearCE "years Common Era" - @dim SurfaceRegion "surface location" - @dim InteriorLocation "interior location" - @dim StateVar "state variable" -end - - -# ╔═╡ a29f7c8e-b86f-4ae2-ac0c-b549b9b54da2 -md""" -# Synthetic LIA -This notebook demonstrates how to solve a toy problem version of the OPT2k problem, in three different cases -- **one sediment core (recording temperature)** affected by **temperature at two different surface regions** each exhibiting a 'Common Era-esque' temperature pattern (warm during the MCA, cool during the LIA, warming after) of different magnitudes. One region will be 'N.Atl.' and will have a slightly earlier MCA and LIA, the other region will be 'Antarctica' and will have a slightly later MCA and LIA. -- **two sediment cores (recording temperature)** affected by the **temperature at two surface regions** -- **two sediment cores (recording d18Oc)** affected by the **temperature and d18Ow at two surface regions** (assume warm + fresh during MCA, cool + salty during LIA) -""" - -# ╔═╡ 780e8541-b757-4f28-bccf-eda77481e2d1 -md""" -# One core, two regions, no lagged circulation -For this example, 60% of the water at the sediment core site will be sourced from N.Atl., and 40% will be sourced from Antarctica. -""" - -# ╔═╡ 803e0cf4-3ad5-4e0c-8b91-d74aeb61bd5e -begin - NATL = "NATL" - ANT = "ANT" - surfaceregions = [:NATL, :ANT] - years = collect((1000:50:2000)yr) - n = length(surfaceregions) - locs = [:loc1] - M = DimArray([0.6 0.4], (InteriorLocation(locs), SurfaceRegion(surfaceregions))) -end - -# ╔═╡ 2f44ad50-7cb7-43e0-9d4b-e2e1af919e70 -md""" -We'll use objective mapping to generate two time series (one for Antarctica, one for the North Atlantic) that fits some points selected to give us a MCA-LIA transition signal with a defined autocovariance function. - -We'll propagate these two signals to the sediment core site and then add some noise. -""" - -# ╔═╡ cff90ba8-9abc-43fc-befd-c33ce85f36b7 -begin - #generate data for the pattern described above - obstimes_NATL = [1000yr, 1300yr, 1600yr, 1800yr, 2000yr] #earlier - obstimes_ANT = [1000yr, 1400yr, 1700yr,1900yr,2000yr] #later - obs_NATL = UnitfulMatrix(uconvert.(K, [1.5; 1.7; 1.; 1.5; 1.8]°C)) #warmer, greater magnitude signal - obs_ANT = UnitfulMatrix(uconvert.(K, [0.5; 0.6; 0.4; 0.5; 0.6]°C)) #colder, smaller signal magnitude - σ_obs = 0.1K - - #use objective mapping to generate a signal with covariance defined by the following function (decays ~200yrs) - ρ(t) = exp.(-(years.-first(t)).^2/(200yr)^2) - x_NATL = synthetic_timeseries(obs_NATL, obstimes_NATL, σ_obs, years, ρ(obstimes_NATL), K) - x_ANT = synthetic_timeseries(obs_ANT, obstimes_ANT, σ_obs, years, ρ(obstimes_ANT), K) - #x: TRUE surface conditions - x = DimArray(transpose(hcat(x_NATL.v, x_ANT.v)K), (SurfaceRegion(surfaceregions), Ti(years))) -end - -# ╔═╡ d7c9ed1b-2557-4439-abbb-d7534a7917fa -begin - y = M*x #TRUE surface conditions propagated to depth - x₀ = copy(x) .* 0 .+ y[end] #first guess - mean of y - flipped_mult(a,b) = b*a #impulseresponse needs it to be defined so x is the first arg. - #generate E, the matrix that maps between vectorized x and the output of M*x - E = impulseresponse(flipped_mult, x₀, M) - - #sprinkle in a little noise, but just a little! we only have one core, after all - y_contam = y .+ DimArray(randn(size(y))K ./ 50, y.dims) - plot(years, vec(y[At(:loc1), :]), label = "yₜᵣᵤₑ") - plot!(years, vec(y_contam[At(:loc1), :]), ylabel = "Temperature", title = "Timeseries at Core Site", label = "y", xlabel = "Time") - #plot(ustrip.(years), ustrip.(vec(y[At(:loc1), :])), label = "yₜᵣᵤₑ") - #plot!(ustrip.(years), ustrip.(vec(y_contam[At(:loc1), :])), ylabel = "Temperature [K]", title = "Timeseries at Core Site", label = "y", xlabel = "Time [years]") -end - -# ╔═╡ f54a5e6c-6ded-4ae5-8213-834975c38db7 -md""" -Then define a noise covariance matrix and a first guess covariance matrix. Both will be diagonal with some defined constant variance. -""" - -# ╔═╡ b8e76a08-c431-494d-bd82-1e5034b1bddf -md""" -# Two cores, two regions, no lagged circulation -Repeat the above process, but now we have two sites, one with the same relationship to ANT and NATL as above, and one that is 70% NATL, 30% ANT. -""" - -# ╔═╡ 6fd318f0-e747-4f51-994c-45a331810740 -md""" -# Plot the solutions of these tests -The one core case is very underdetermined, and changing our confidence in our observations does very little to change the result. - -The two core case is less underdetermined, and by toggling the σₙ slider, we can show that when our confidence in our data is greater (σₙ small), we introduce more noise into our reconstruction, but our solution approaches the truth. Vice versa, when our confidence in our data is less (σₙ big), we reconstruct a smoother solution, but it's biased from the truth. -""" - -# ╔═╡ 02c5d686-6600-47fc-ba7b-6b5dec5bd701 -begin - σₓ = 5 - nslider = @bind σₙ Slider(0.001:0.05:3, show_value = true, default = 0.1) -end - -# ╔═╡ fe12f17f-f461-40c1-b0cd-26641f318e51 -begin - #generate noise covariance and first guess covariance (tapering) matrices - Cnn = Diagonal(fill(σₙ^2, length(y)), fill(K, length(y)), fill(K^-1, length(y))) - Cxx = Diagonal(fill(σₓ^2, length(x)), fill(K, length(x)), fill(K^-1, length(x))) - #solve problem - problem = UnderdeterminedProblem(UnitfulMatrix(vec(y_contam)), E, Cnn, Cxx, x₀) - x̃ = solve(problem) - #make first guess into dimensional estimate so we can use same plotting syntax - x₀DE = DimEstimate(vec(x₀), Cxx, dims(x₀)) - #we will plot this solution with the next solution -end - -# ╔═╡ 6b4a307b-0cc4-4e8f-8aa7-bcba8ac07265 -begin - locs2 = [:loc1, :loc2] - M2 = DimArray([0.6 0.4; 0.3 0.7], (InteriorLocation(locs2), SurfaceRegion(surfaceregions))) - y2 = M2*x - y2_contam = y2 .+ DimArray(randn(size(y2))K ./ 10, y2.dims) - x₀2 = copy(x) .* 0 .+ y2[end] #first guess - mean of y - E2 = impulseresponse(flipped_mult,x₀2, M2) - Cnn2 = Diagonal(fill(σₙ.^2,length(y2)),vec(unit.(y2)),vec(unit.(y2)).^-1) - Cxx2 = Diagonal(fill(σₓ.^2,length(x₀2)),vec(unit.(x₀2)),vec(unit.(x₀2)).^-1) - problem2 = UnderdeterminedProblem(UnitfulMatrix(vec(y2_contam)),E2,Cnn2,Cxx2,x₀2) - x̃2 = solve(problem2) - y2DE = DimEstimate(vec(y2), Cnn2, dims(y2)) -end - -# ╔═╡ 41ea9b57-3901-4581-b9b4-e2f9afb16ce7 -#xslider = @bind σₓ Slider(0.0001:0.1:5, show_value = true, default = 0.1) - -# ╔═╡ 1dfba472-cd25-4641-888f-51d6368fa7b1 -begin - @show datacost(x̃, problem) - @show controlcost(x̃, problem) - @show datacost(x̃2, problem2) - @show controlcost(x̃2, problem2) -end - -# ╔═╡ 77b2f73b-5c96-49f0-9c93-9846c6579759 -begin - darkcolors = NamedTuple{Tuple(surfaceregions)}([:orange, :lightskyblue]) - lightcolors = NamedTuple{Tuple(surfaceregions)}([:lightgoldenrod1, :cyan]) -end - -# ╔═╡ 73ece91f-7309-43e1-8832-ecfcfe32a5bf -begin - l = @layout [a b] - lw = 5 - p = scatter(ustrip.(years), ustrip.(vec(y)), yerror = ustrip.(sqrt.(diag(Cnn))), label = "y", linewidth = 3, color = :black) - for region in surfaceregions - plot!(ustrip.(years), ustrip.(vec(Measurements.value.(x̃.x[At(region), :]))), ribbon = ustrip.(vec(Measurements.uncertainty.(x̃.x[At(region), :]))), label = "x̃:" * eval(region), linewidth = lw, color = darkcolors[region]) - #plot!(years, vec(Measurements.value.(x₀DE.x[At(region), :])), ribbon = vec(Measurements.uncertainty.(x₀DE.x[At(region), :])), label = "x₀:" * eval(region)) - end - #true values - plot!(ustrip.(years), ustrip.(vec(x_NATL.v)), label = "xₙₐₜₗ", legend = :outertopright, linewidth = lw, color = lightcolors[:NATL]) - plot!(ustrip.(years), ustrip.(vec(x_ANT.v)), label = "xₐₙₜ", linewidth = lw, color = lightcolors[:ANT]) - - p2 = plot() - for loc in locs2 - scatter!(ustrip.(years), ustrip.(vec(Measurements.value.(y2DE.x[At(loc), :]))), yerror = ustrip.(vec(Measurements.uncertainty.(y2DE.x[At(loc), :]))), label = "", linewidth = 3, color = :black) - end - for region in surfaceregions - plot!(ustrip.(years), ustrip.(vec(Measurements.value.(x̃2.x[At(region), :]))), ribbon = ustrip.(vec(Measurements.uncertainty.(x̃2.x[At(region), :]))), label = "", linewidth = lw, color = darkcolors[region]) - #plot!(years, vec(Measurements.value.(x₀DE.x[At(region), :])), ribbon = vec(Measurements.uncertainty.(x₀DE.x[At(region), :])), label = "x₀:" * eval(region)) - end - #true values - plot!(ustrip.(years), ustrip.(vec(x_NATL.v)), label = "", legend = :outertopright, linewidth = lw, color = lightcolors[:NATL]) - plot!(ustrip.(years), ustrip.(vec(x_ANT.v)), label = "", linewidth = lw, color = lightcolors[:ANT]) - - plot(p, p2, layout = l) -end - -# ╔═╡ 535bde0c-dd75-42f2-bcc8-e3830699a7de -md""" -# Two state variables -Now, repeat the above test, but with two state variables. Assume both oceans increase in d18O (get saliter) and then decrease in d18O (get fresher) -""" - -# ╔═╡ a76301d4-2831-4902-8b5f-2148451d5eef -begin - statevars = [:θ, :d18O] - x1 = x - #obstimes = [1000yr, 1300yr, 1600yr, 1800yr, 2000yr] - #obs_NATL = UnitfulMatrix(uconvert.(K, [1.5; 1.7; 1.; 1.5; 1.8]°C)) - #obs_ANT = UnitfulMatrix(uconvert.(K, [0.5; 0.6; 0.4; 0.5; 0.6]°C)) - obs_NATL2 = UnitfulMatrix([-0.1; -0.15; -0.05; -0.1; -0.2]permil) - obs_ANT2 = UnitfulMatrix([0.5; 0.45; 0.55; 0.5; 0.3]permil) - σ_obs2 = 0.05permil - #ρ = exp.(-(years.-first(obstimes)).^2/(200yr)^2) #starts at 1, decreases to 0.36 - x_NATL2 = synthetic_timeseries(obs_NATL2, obstimes_NATL, σ_obs2, years, ρ(obstimes_NATL), permil) - x_ANT2 = synthetic_timeseries(obs_ANT2, obstimes_ANT, σ_obs2, years, ρ(obstimes_ANT), permil) - x2 = DimArray(transpose(hcat(x_NATL2.v, x_ANT2.v)permil), (SurfaceRegion(surfaceregions), Ti(years))) - end - - -# ╔═╡ 168ce97e-9e70-46d5-963b-1429b627c224 -begin - α = -0.2(permil/K) - β = 3.5permil - offset = 0.27permil -end - -# ╔═╡ 7913c5e7-4232-44c7-bc1b-85e8395ec848 -begin - x3 = DimArray(cat(hcat(x_NATL.v, x_ANT.v)K .- 273.15K, hcat(x_NATL2.v, x_ANT2.v)permil, dims = 3), (Ti(years),SurfaceRegion(surfaceregions), StateVar(statevars))) - propagate(x, M, α) = α * ((x[:, :, At(:θ)]) * transpose(M)) .+ x[:, :, At(:d18O)] * transpose(M) - y3 = propagate(x3, M2, α) .+ β .- offset - #y3test = α * (M2 * x1 .- 273.15K) .+ β .+ M2 * x2 .- offset #same as above - x₀3 = DimArray(cat((vec(x3[At(2000yr), :, At(:θ)]) .* ones((2, length(years))))', (vec(x3[At(2000yr), : , At(:d18O)]) .* ones((2, length(years))))', dims =3), (Ti(years),SurfaceRegion(surfaceregions), StateVar(statevars))) -end - -# ╔═╡ fb7988aa-b5a4-4fe0-b44e-86d291117eaf -begin - l5 = @layout [a b] - y3_contam = y3 + DimArray(randn(size(y3))permil ./ 10, y3.dims) - p5 = Vector{Any}(undef, 2) - for (i, l) in enumerate(locs2) - p5[i] = plot(ustrip.(vec(y3[:, At(l)])), label = i == 1 ? "yₜᵣᵤₑ" : "") - plot!(ustrip.(vec(y3_contam[:, At(l)])), label = i == 1 ? "y, contaminated" : "", ylabel = "d18Oc", title = "Location " * string( - i), legend = :outertopright) - end - plot(p5..., layout = l5) -end - -# ╔═╡ cefdf603-64b7-4588-bf54-cb043a4616c9 -begin - E3 = impulseresponse(propagate, x₀3, M2, α) - #demonstrate that this is equivalent - #display(E3 * UnitfulMatrix(vec(x₀3))) - #display(vec(propagate(x₀3, M2, α))) -end - -# ╔═╡ b474cdc2-f007-42b0-970d-692d5ba45776 -@bind σₙ3 Slider(0.001:0.05:1, show_value = true, default = 0.1) - -# ╔═╡ 3049a85e-fb0e-4808-99bf-1118b34eae92 -begin - #σₙ3 = 0.07 - σₓ3_T = 1 - σₓ3_d = 0.1 - L = length(x3[:, :, At(:θ)]) - cxx_diagonal = vcat(fill(σₓ3_T, L), fill(σₓ3_d, L)) - Cnn3 = Diagonal(fill(σₙ3^2, length(y3)), unit.(vec(y3)), unit.(vec(y3_contam)).^-1) - Cxx3 = Diagonal(cxx_diagonal, unit.(vec(x3)), unit.(vec(x3)).^-1) - problem3 = UnderdeterminedProblem(UnitfulMatrix(vec(y3) .- β .+ offset), E3, Cnn3, Cxx3, x₀3) - x̃3 = solve(problem3) -end - -# ╔═╡ b265984e-320a-45c1-9c25-da5044a43ffe -begin - l3 = @layout [a b;c d] - - selectdims = [[:, At(:NATL), At(:θ)], [:, At(:NATL), At(:d18O)], [:, At(:ANT), At(:θ)], [:, At(:ANT), At(:d18O)]] - titles = ["NATL:θ", "NATL:d18O", "ANT:θ", "ANT:d18O"] - p3 = Vector{Any}(undef, 4) - for (i, s) in enumerate(selectdims) - p3[i] = plot(Measurements.measurement.(vec(ustrip.(x̃3.x[s...]))), label = i == 1 ? "x̃" : "", ylabel = "Temperature [K]") - plot!(ustrip.(vec(x3[s...])), label = i == 1 ? "xₜᵣᵤₑ" : "") - plot!(ustrip.(vec(x₀3[s...])), label = i == 1 ? "x₀" : "", title = titles[i], legend = :outertopright) - end - plot(p3..., layout = l3) -end - -# ╔═╡ ce96eddb-cbef-4a94-82ca-a5a67ea7107a -begin - ỹ3 = propagate(x̃3.x, M2, α) .+ β .- offset - l4 = @layout [a b] - p4 = Vector{Any}(undef, 2) - titles4 = ["Location 1", "Location 2"] - for (i, l) in enumerate(locs2) - p4[i] = plot(vec(ỹ3[:, At(l)]), label = i == 1 ? "ỹ" : "") - plot!(vec(y3[:, At(l)]), label = i == 1 ? "yₜᵣᵤₑ" : "", title = titles4[i]) - plot!(vec(y3_contam[:, At(l)]), label = i == 1 ? "y, contam." : "", title = titles4[i], legend = :outertopright) - - #p4[i] = plot(Measurements.measurement.(ustrip.(vec(ỹ3[:, At(l)]))), label = i == 1 ? "ỹ" : "") - #plot!(ustrip.(vec(y3[:, At(l)])), label = i == 1 ? "yₜᵣᵤₑ" : "", title = titles4[i]) - #plot!(ustrip.(vec(y3_contam[:, At(l)])), label = i == 1 ? "y, contam." : "", title = titles4[i], legend = :outertopright) - end - plot(p4..., layout = l4) -end - -# ╔═╡ Cell order: -# ╠═31029ab4-e82b-11ed-0571-2fbfeebb813b -# ╠═c2d82ba9-624a-46f6-a53d-97e3f00db657 -# ╟─a29f7c8e-b86f-4ae2-ac0c-b549b9b54da2 -# ╠═c2b6940f-6eb3-4aa9-9b3f-58f02d8270cb -# ╟─780e8541-b757-4f28-bccf-eda77481e2d1 -# ╠═803e0cf4-3ad5-4e0c-8b91-d74aeb61bd5e -# ╟─2f44ad50-7cb7-43e0-9d4b-e2e1af919e70 -# ╠═cff90ba8-9abc-43fc-befd-c33ce85f36b7 -# ╠═d7c9ed1b-2557-4439-abbb-d7534a7917fa -# ╟─f54a5e6c-6ded-4ae5-8213-834975c38db7 -# ╠═fe12f17f-f461-40c1-b0cd-26641f318e51 -# ╠═b8e76a08-c431-494d-bd82-1e5034b1bddf -# ╠═6b4a307b-0cc4-4e8f-8aa7-bcba8ac07265 -# ╟─6fd318f0-e747-4f51-994c-45a331810740 -# ╠═02c5d686-6600-47fc-ba7b-6b5dec5bd701 -# ╟─41ea9b57-3901-4581-b9b4-e2f9afb16ce7 -# ╠═1dfba472-cd25-4641-888f-51d6368fa7b1 -# ╠═73ece91f-7309-43e1-8832-ecfcfe32a5bf -# ╟─77b2f73b-5c96-49f0-9c93-9846c6579759 -# ╟─535bde0c-dd75-42f2-bcc8-e3830699a7de -# ╠═a76301d4-2831-4902-8b5f-2148451d5eef -# ╠═7913c5e7-4232-44c7-bc1b-85e8395ec848 -# ╠═fb7988aa-b5a4-4fe0-b44e-86d291117eaf -# ╠═168ce97e-9e70-46d5-963b-1429b627c224 -# ╠═cefdf603-64b7-4588-bf54-cb043a4616c9 -# ╠═3049a85e-fb0e-4808-99bf-1118b34eae92 -# ╠═b474cdc2-f007-42b0-970d-692d5ba45776 -# ╠═b265984e-320a-45c1-9c25-da5044a43ffe -# ╠═ce96eddb-cbef-4a94-82ca-a5a67ea7107a diff --git a/test/test_dimensional_data.jl b/test/test_dimensional_data.jl index 85332c3..ef69ae5 100644 --- a/test/test_dimensional_data.jl +++ b/test/test_dimensional_data.jl @@ -3,6 +3,13 @@ MatrixDimArray = MatrixArray{T, M, N, R} where {M, T, N, R<:AbstractDimArray{T, M}} VectorDimArray = VectorArray{T, N, A} where {T, N, A <: DimensionalData.AbstractDimArray} + if use_units + @testset "objective mapping with DimensionalData and AlgebraicArrays" begin + include("test_objective_mapping_AlgebraicArrays.jl") + end + end + + @testset "uniform state vectors" begin # fixed parameters diff --git a/test/test_estimate.jl b/test/test_estimate.jl index a1aaebd..3127fd9 100644 --- a/test/test_estimate.jl +++ b/test/test_estimate.jl @@ -261,51 +261,10 @@ end end -@testset "objective mapping, problem 4.3" begin - - M = 11 - if use_units - yr = u"yr"; cm = u"cm" - τ = range(0.0yr,5.0yr,step=0.1yr) - ρ = exp.(-τ.^2/(1yr)^2) - n = length(ρ) - Px = UnitfulMatrix(SymmetricToeplitz(ρ),fill(cm,n),fill(cm^-1,n),exact=true) + - Diagonal(fill(1e-6,n),fill(cm,n),fill(cm^-1,n)) - σy = 0.1cm - Py = Diagonal(fill(ustrip(σy),M),fill(cm,M),fill(cm^-1,M)) - Enm = sparse(1:M,1:5:n,fill(1.0,M)) - E = UnitfulMatrix(Enm,fill(cm,M),fill(cm,n)) - x₀ = zeros(n)cm - else - τ = range(0.0,5.0,step=0.1) - ρ = exp.(-τ.^2/(1)^2) - n = length(ρ) - Px = SymmetricToeplitz(ρ) + Diagonal(fill(1e-6,n)) - σy = 0.1 - Py = Diagonal(fill(σy,M)) - E = sparse(1:M,1:5:n,fill(1.0,M)) - x₀ = zeros(n) - end - - Px¹² = cholesky(Px) - x = Px¹².L*randn(n) - y = E*x - x0 = Estimate(x₀, Px) - y_estimate = Estimate(y, Py) - x1 = combine(x0, y_estimate, E) # a BLUE - - uproblem = UnderdeterminedProblem(y,E,Py,Px,x₀) - x̃ = solve(uproblem) - @test cost(x̃,uproblem) < 5M - +@testset "problem 4.3, objective mapping without AlgebraicArrays" begin if use_units - @test isapprox(ustrip.(x1.v), ustrip.(x̃.v)) - @test isapprox(ustrip.(x1.σ), ustrip.(x̃.σ)) - else - @test isapprox(x1.v, x̃.v) - @test isapprox(x1.σ, x̃.σ) + include("test_objective_mapping_BLUEs.jl") end - end # additional problem: 5.1 model of exponential decay diff --git a/test/test_objective_mapping_AlgebraicArrays.jl b/test/test_objective_mapping_AlgebraicArrays.jl new file mode 100644 index 0000000..9ae6709 --- /dev/null +++ b/test/test_objective_mapping_AlgebraicArrays.jl @@ -0,0 +1,120 @@ +Nx = 20 # 50 # number of gridpoint in first (zonal) direction +Ny = 10 # 40 # number of gridpoints in second (meridional) direction +Nobs = 20 # number of observations +@dim Obs "observations" + +cm = u"cm" # for SSH (mapped variable) +# turn correlation matrix into autocovariance matrix: requires variance info +σx = 50.0cm # created a difficult-to-find error if this is an integer (!!) +σy = 1cm # how much observational noise? +km = u"km" # for the grid size +Lx = 300km +Ly = 100km +ΔX = 1000km # domain size in zonal direction +ΔY = 500km +robs = [(ΔX*rand(),ΔY*rand()) for i in 1:Nobs ] # uniformly sampled +SSH_obs = Obs(robs) +rxobs = first.(robs) #[robs[oo][1] for oo in eachindex(robs)] +ryobs = last.(robs) # [robs[oo][2] for oo in eachindex(robs)] +# make grid axis number 1 +rx = range(0km,ΔX,length=Nx) # zonal distance +ry = range(0km,ΔY,length=Ny) # grid axis number 2: meridional distance +Grid = (X(rx),Y(ry)) +# diagonal elements of first-guess uncertainty matrix +# nonzero for stability of Cholesky decomposition +Rρ_diag = fill(1e-6, Grid, :VectorArray) + +# diagonal `MatrixArray` to precondition matrix for stability +Rρ = Diagonal(Rρ_diag) + +# first two loops for the grid location referenced in the columns of Rρ +for (icol,rxcol) in enumerate(first(Grid)) + for (jcol,rycol) in enumerate(last(Grid)) + # second two loops for the grid location referenced in the rows of Rρ + for (irow,rxrow) in enumerate(first(Grid)) + for (jrow,ryrow) in enumerate(last(Grid)) + Rρ[icol,jcol][irow,jrow] += exp( -((rxcol-rxrow)/Lx)^2 - + ((rycol - ryrow)/Ly)^2) + #+ 1.0e-6 * (icol == irow) * (jcol == jrow) + end + end + end +end + +# `cholesky` not yet implemented in AlgebraicArrays +# here's a workaround +Rρ12 = AlgebraicArray(cholesky(Matrix(Rρ)).U, Grid, Grid) # cholesky + +""" +function interpolate_bilinearly(x::VectorArray, location::Tuple) + +Given gridded information `x`, predict an observation at `location` + +function interpolate_bilinearly(x::VectorArray, locations::DimensionalData.Dimension) + +Given gridded information `x`, predict many observations at `locations` + +function interpolate_bilinearly(P::MatrixArray, locations::DimensionalData.Dimension) + +Given many gridded fields in the columns of `P`, predict many observations at `locations` +""" +function interpolate_bilinearly(x::VectorArray, location::Tuple) + + xdist = val(first(dims(x))) .- first(location) + ydist = val(last(dims(x))) .- last(location) + largeval = 1e6km + xhi,ihi = findmin(x -> x > 0km ? x : largeval,xdist) # find minimum positive distance + δx,ilo = findmin(x -> x ≤ 0km ? abs(x) : largeval,xdist) # find minimum negative distance + + yhi,jhi = findmin(y -> y > 0km ? y : largeval,ydist) # find minimum positive distance + δy,jlo = findmin(y -> y ≤ 0km ? abs(y) : largeval,ydist) # find minimum negative distance + Δx = δx + xhi # grid spacing + Δy = δy + yhi # grid spacing : y + denom = Δx * Δy + + obs = zero(eltype(x)) + obs += x[ilo, jlo] * ((Δx - δx)*(Δy - δy))/denom + obs += x[ilo, jhi] * ((Δx - δx)*(δy))/denom + obs += x[ihi, jlo] * ((δx)*(Δy - δy))/denom + obs += x[ihi, jhi] * (δx*δy)/denom + return obs +end + +function interpolate_bilinearly(x::VectorArray, locations::DimensionalData.Dimension) + y = zeros(eltype(x), locations, :VectorArray) + for (i, o) in enumerate(locations) + y[i] += interpolate_bilinearly(x, o) + end + return y +end +# boilerplate function to extend from `VectorArray`s to `MatrixArray`s +function interpolate_bilinearly(P::MatrixArray, locations::DimensionalData.Dimension) + T = typeof(parent(interpolate_bilinearly(first(P), locations))) + Pyx = Array{T}(undef,size(P)) + for i in eachindex(P) + Pyx[i] = parent(interpolate_bilinearly(P[i], locations)) + end + return MatrixArray(DimArray(Pyx, domaindims(P))) +end + +# check that each observation is one when truth is one (bilinear interpolation is a true average) +@test all(isapprox.(interpolate_bilinearly( ones(Grid, :VectorArray), SSH_obs), 1.0)) + +# solve with `combine`; it expects a function with just one argument +predict_obs(x0) = interpolate_bilinearly(x0, SSH_obs) + +xtrue = σx*transpose(Rρ12)*randn(Grid, :VectorArray) +ytrue = interpolate_bilinearly(xtrue, SSH_obs) # perfect observations + +#use `BLUEs.jl` to package as an `Estimate` +x0vals = zeros(eltype(xtrue), Grid, :VectorArray) # first guess +x0 = Estimate(x0vals, σx^2 * Rρ) + +# standard error on the grid +yerr = fill(σy, SSH_obs, :VectorArray) +n = σy * randn(SSH_obs, :VectorArray) +ycontaminated = ytrue + n +y = Estimate(ycontaminated, yerr) # bundle observations and uncertainty +x̃ = combine(x0, y, predict_obs) +@test maximum(x̃.σ[:]) ≤ σx +@test minimum(x̃.σ[:]) ≥ 0.0 * σx diff --git a/test/test_objective_mapping_BLUEs.jl b/test/test_objective_mapping_BLUEs.jl new file mode 100644 index 0000000..127dd83 --- /dev/null +++ b/test/test_objective_mapping_BLUEs.jl @@ -0,0 +1,78 @@ +km = u"km" # for the grid size +cm = u"cm" # for SSH (mapped variable) +Nx = 20 # 50 # number of gridpoint in first (zonal) direction +ΔX = 1000km # domain size in zonal direction +Ny = 10 # 40 # number of gridpoints in second (meridional) direction +ΔY = 500km +# make grid axis number 1 +rx = range(0km,ΔX,length=Nx) # zonal distance +ry = range(0km,ΔY,length=Ny) # grid axis number 2: meridional distance + +# turn the 2D grid into a 1D bookkeeping system +r = [(rx[i],ry[j]) for j in eachindex(ry) for i in eachindex(rx)] # a vector that gives x location as first element, y location as second element +# set lengthscales +Lx = 300km; Ly = 100km; +Rρ = [exp( -((r[i][1]-r[j][1])/Lx)^2 - ((r[i][2] - r[j][2])/Ly)^2) for j in eachindex(r), i in eachindex(r)] # doesn't take advantage of symmetry + +# turn correlation matrix into autocovariance matrix: requires variance info +σ² = (50cm)^2 + +# Here I need to produce some "synthetic" data +# these are the extra steps +Rρ_posdef = Rρ + 1e-6I +Rρ12 = cholesky(Rρ_posdef) # cholesky +xtrue = √σ²*Rρ12.L*randn(Nx*Ny) + +Nobs = 20 # number of observations +robs = [(ΔX*rand(),ΔY*rand()) for i in 1:Nobs ] # uniformly sampled +# make E matrix for these observations, use bilinear interpolation +# get bilinear interpolation coefficients +E = zeros(Nobs,Nx*Ny) +for oo in eachindex(robs) + + # bilinear interpolation: put into a function + ydist = [ry[ii] .- robs[oo][2] for ii in eachindex(ry)] # y distance between observation and y grid points + xdist = [rx[ii] .- robs[oo][1] for ii in eachindex(rx)] # x distance between observation and x grid points + + xhi,ihi = findmin(x -> x > 0km ? x : 1e6km,xdist) # find minimum positive distance + δx,ilo = findmin(x -> x ≤ 0km ? abs(x) : 1e6km,xdist) # find minimum negative distance + + yhi,jhi = findmin(y -> y > 0km ? y : 1e6km,ydist) # find minimum positive distance + δy,jlo = findmin(y -> y ≤ 0km ? abs(y) : 1e6km,ydist) # find minimum negative distance + Δx = δx + xhi # grid spacing + Δy = δy + yhi # grid spacing : y + + coeffs = zeros(Nx,Ny) + denom = Δx * Δy + coeffs[ilo,jlo] = ((Δx - δx)*(Δy - δy))/denom + coeffs[ilo,jhi] = ((Δx - δx)*(δy))/denom + coeffs[ihi,jlo] = ((δx)*(Δy - δy))/denom + coeffs[ihi,jhi] = (δx*δy)/denom + E[oo,:] = vec(coeffs) +end +# check that each row sums to one +@test all(isapprox.(sum(E,dims=2),1.0)) + +# how much observational noise +σₙ = 1cm + +# get the noise covariance +Cnn = Diagonal(fill(σₙ^2,Nobs)) + +# Sample the true field +yvals = E*xtrue + σₙ*randn(Nobs) +y = Estimate(yvals,Cnn) + +## Now we have synthetic observations +# Let's see if the true solution can be backed out from the sparse obs. +Cxx = σ²*Rρ_posdef + +#use `BLUEs.jl` to package as an `Estimate` +x0vals = zeros(eltype(xtrue),length(xtrue)) # first guess +x0 = Estimate(x0vals, Cxx) +x̃ = combine(x0, y, E) + +σcheck = √σ² +@test maximum(x̃.σ[:]) ≤ σcheck +@test minimum(x̃.σ[:]) ≥ 0.0 * σcheck +