diff --git a/.gitignore b/.gitignore index d3e1ffb81..10caead05 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,10 @@ notebook/ markdown/ .vscode -*.html \ No newline at end of file +*.html + +# CondaPkg generated environments +.CondaPkg/ + +# Python cache +__pycache__/ \ No newline at end of file diff --git a/benchmarks/NeuralNetworks/CondaPkg.toml b/benchmarks/NeuralNetworks/CondaPkg.toml new file mode 100644 index 000000000..3c5367420 --- /dev/null +++ b/benchmarks/NeuralNetworks/CondaPkg.toml @@ -0,0 +1,8 @@ +[deps] +numpy = "" + +[pip.deps] +jax = ">=0.4" +jaxlib = ">=0.4" +optax = ">=0.2" +torch = ">=2.0" diff --git a/benchmarks/NeuralNetworks/Manifest.toml b/benchmarks/NeuralNetworks/Manifest.toml new file mode 100644 index 000000000..1aeb1b717 --- /dev/null +++ b/benchmarks/NeuralNetworks/Manifest.toml @@ -0,0 +1,2630 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.12.4" +manifest_format = "2.0" +project_hash = "7bb76e86a8e4ea4674ff1a555c92935e8f524eac" + +[[deps.ADTypes]] +git-tree-sha1 = "f7304359109c768cf32dc5fa2d371565bb63b68a" +uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" +version = "1.21.0" +weakdeps = ["ChainRulesCore", "ConstructionBase", "EnzymeCore"] + + [deps.ADTypes.extensions] + ADTypesChainRulesCoreExt = "ChainRulesCore" + ADTypesConstructionBaseExt = "ConstructionBase" + ADTypesEnzymeCoreExt = "EnzymeCore" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + +[[deps.AbstractTrees]] +git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" +uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +version = "0.4.5" + +[[deps.Accessors]] +deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"] +git-tree-sha1 = "2eeb2c9bef11013efc6f8f97f32ee59b146b09fb" +uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" +version = "0.1.44" + + [deps.Accessors.extensions] + AxisKeysExt = "AxisKeys" + IntervalSetsExt = "IntervalSets" + LinearAlgebraExt = "LinearAlgebra" + StaticArraysExt = "StaticArrays" + StructArraysExt = "StructArrays" + TestExt = "Test" + UnitfulExt = "Unitful" + + [deps.Accessors.weakdeps] + AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "35ea197a51ce46fcd01c4a44befce0578a1aaeca" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.5.0" +weakdeps = ["SparseArrays", "StaticArrays"] + + [deps.Adapt.extensions] + AdaptSparseArraysExt = "SparseArrays" + AdaptStaticArraysExt = "StaticArrays" + +[[deps.AdaptivePredicates]] +git-tree-sha1 = "7e651ea8d262d2d74ce75fdf47c4d63c07dba7a6" +uuid = "35492f91-a3bd-45ad-95db-fcad7dcfedb7" +version = "1.2.0" + +[[deps.AliasTables]] +deps = ["PtrArrays", "Random"] +git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" +uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" +version = "1.1.3" + +[[deps.Animations]] +deps = ["Colors"] +git-tree-sha1 = "e092fa223bf66a3c41f9c022bd074d916dc303e7" +uuid = "27a7e980-b3e6-11e9-2bcd-0b925532e340" +version = "0.4.2" + +[[deps.ArgCheck]] +git-tree-sha1 = "f9e9a66c9b7be1ad7372bbd9b062d9230c30c5ce" +uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" +version = "2.5.0" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.2" + +[[deps.ArrayInterface]] +deps = ["Adapt", "LinearAlgebra"] +git-tree-sha1 = "78b3a7a536b4b0a747a0f296ea77091ca0a9f9a3" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "7.23.0" + + [deps.ArrayInterface.extensions] + ArrayInterfaceAMDGPUExt = "AMDGPU" + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceCUDSSExt = ["CUDSS", "CUDA"] + ArrayInterfaceChainRulesCoreExt = "ChainRulesCore" + ArrayInterfaceChainRulesExt = "ChainRules" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceMetalExt = "Metal" + ArrayInterfaceReverseDiffExt = "ReverseDiff" + ArrayInterfaceSparseArraysExt = "SparseArrays" + ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" + ArrayInterfaceTrackerExt = "Tracker" + + [deps.ArrayInterface.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" + ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +version = "1.11.0" + +[[deps.Atomix]] +deps = ["UnsafeAtomics"] +git-tree-sha1 = "b8651b2eb5796a386b0398a20b519a6a6150f75c" +uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458" +version = "1.1.3" + + [deps.Atomix.extensions] + AtomixCUDAExt = "CUDA" + AtomixMetalExt = "Metal" + AtomixOpenCLExt = "OpenCL" + AtomixoneAPIExt = "oneAPI" + + [deps.Atomix.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + OpenCL = "08131aa3-fb12-5dee-8b74-c09406e224a2" + oneAPI = "8f75cd03-7ff8-4ecb-9b8f-daf728133b1b" + +[[deps.Automa]] +deps = ["PrecompileTools", "SIMD", "TranscodingStreams"] +git-tree-sha1 = "a8f503e8e1a5f583fbef15a8440c8c7e32185df2" +uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b" +version = "1.1.0" + +[[deps.AxisAlgorithms]] +deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] +git-tree-sha1 = "01b8ccb13d68535d73d2b0c23e39bd23155fb712" +uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950" +version = "1.1.0" + +[[deps.AxisArrays]] +deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"] +git-tree-sha1 = "4126b08903b777c88edf1754288144a0492c05ad" +uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" +version = "0.4.8" + +[[deps.BangBang]] +deps = ["Accessors", "ConstructionBase", "InitialValues", "LinearAlgebra"] +git-tree-sha1 = "cceb62468025be98d42a5dc581b163c20896b040" +uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" +version = "0.4.9" + + [deps.BangBang.extensions] + BangBangChainRulesCoreExt = "ChainRulesCore" + BangBangDataFramesExt = "DataFrames" + BangBangStaticArraysExt = "StaticArrays" + BangBangStructArraysExt = "StructArrays" + BangBangTablesExt = "Tables" + BangBangTypedTablesExt = "TypedTables" + + [deps.BangBang.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" + TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +version = "1.11.0" + +[[deps.BaseDirs]] +git-tree-sha1 = "bca794632b8a9bbe159d56bf9e31c422671b35e0" +uuid = "18cc8868-cbac-4acf-b575-c8ff214dc66f" +version = "1.3.2" + +[[deps.Baselet]] +git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" +uuid = "9718e550-a3fa-408a-8086-8db961cd8217" +version = "0.1.1" + +[[deps.BenchmarkTools]] +deps = ["Compat", "JSON", "Logging", "Printf", "Profile", "Statistics", "UUIDs"] +git-tree-sha1 = "7fecfb1123b8d0232218e2da0c213004ff15358d" +uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" +version = "1.6.3" + +[[deps.BitFlags]] +git-tree-sha1 = "0691e34b3bb8be9307330f88d1a3c3f25466c24d" +uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" +version = "0.1.9" + +[[deps.BitTwiddlingConvenienceFunctions]] +deps = ["Static"] +git-tree-sha1 = "f21cfd4950cb9f0587d5067e69405ad2acd27b87" +uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" +version = "0.1.6" + +[[deps.BufferedStreams]] +git-tree-sha1 = "6863c5b7fc997eadcabdbaf6c5f201dc30032643" +uuid = "e1450e63-4bb3-523b-b2a4-4ffa8c0fd77d" +version = "1.2.2" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1b96ea4a01afe0ea4090c5c8039690672dd13f2e" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.9+0" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CPUSummary]] +deps = ["CpuId", "IfElse", "PrecompileTools", "Preferences", "Static"] +git-tree-sha1 = "f3a21d7fc84ba618a779d1ed2fcca2e682865bab" +uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" +version = "0.2.7" + +[[deps.CRC32c]] +uuid = "8bf52ea8-c179-5cab-976a-9e18b702a9bc" +version = "1.11.0" + +[[deps.CRlibm]] +deps = ["CRlibm_jll"] +git-tree-sha1 = "66188d9d103b92b6cd705214242e27f5737a1e5e" +uuid = "96374032-68de-5a5b-8d9e-752f78720389" +version = "1.0.2" + +[[deps.CRlibm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e329286945d0cfc04456972ea732551869af1cfc" +uuid = "4e9b3aee-d8a1-5a3d-ad8b-7d824db253f0" +version = "1.0.1+0" + +[[deps.Cairo]] +deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] +git-tree-sha1 = "71aa551c5c33f1a4415867fe06b7844faadb0ae9" +uuid = "159f3aea-2a34-519c-b102-8c37f9878175" +version = "1.1.1" + +[[deps.CairoMakie]] +deps = ["CRC32c", "Cairo", "Cairo_jll", "Colors", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "PrecompileTools"] +git-tree-sha1 = "9bd45574379e50579a78774334f4a1f1238c0af5" +uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" +version = "0.13.10" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "a21c5464519504e41e0cbc91f0188e8ca23d7440" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.18.5+1" + +[[deps.ChainRules]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "SparseInverseSubset", "Statistics", "StructArrays", "SuiteSparse"] +git-tree-sha1 = "3c190c570fb3108c09f838607386d10c71701789" +uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2" +version = "1.73.0" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "e4c6a16e77171a5f5e25e9646617ab1c276c5607" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.26.0" +weakdeps = ["SparseArrays"] + + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" + +[[deps.CloseOpenIntervals]] +deps = ["Static", "StaticArrayInterface"] +git-tree-sha1 = "05ba0d07cd4fd8b7a39541e31a7b0254704ea581" +uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" +version = "0.1.13" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.8" + +[[deps.ColorBrewer]] +deps = ["Colors", "JSON"] +git-tree-sha1 = "07da79661b919001e6863b81fc572497daa58349" +uuid = "a2cac450-b92f-5266-8821-25eda20663c8" +version = "0.4.2" + +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] +git-tree-sha1 = "b0fd3f56fa442f81e0a47815c92245acfaaa4e34" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.31.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "67e11ee83a43eb71ddc950302c53bf33f0690dfe" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.12.1" +weakdeps = ["StyledStrings"] + + [deps.ColorTypes.extensions] + StyledStringsExt = "StyledStrings" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] +git-tree-sha1 = "8b3b6f87ce8f65a2b4f857528fd8d70086cd72b1" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.11.0" +weakdeps = ["SpecialFunctions"] + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "37ea44092930b1811e666c3bc38065d7d87fcc74" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.13.1" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools"] +git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.1" + +[[deps.CommonWorldInvalidations]] +git-tree-sha1 = "ae52d1c52048455e85a387fbee9be553ec2b68d0" +uuid = "f70d9fcc-98c5-4d4a-abd7-e4cdeebd8ca8" +version = "1.0.0" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.18.1" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.3.0+1" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" +weakdeps = ["InverseFunctions"] + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + +[[deps.ConcreteStructs]] +git-tree-sha1 = "f749037478283d372048690eb3b5f92a79432b34" +uuid = "2569d6c7-a4a2-43d3-a901-331e8e4be471" +version = "0.2.3" + +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "21d088c496ea22914fe80906eb5bce65755e5ec8" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.5.1" + +[[deps.CondaPkg]] +deps = ["JSON", "Markdown", "MicroMamba", "Pidfile", "Pkg", "Preferences", "Scratch", "TOML", "pixi_jll"] +git-tree-sha1 = "0300af904a8c8d41ff715a60a6959136d22b8572" +uuid = "992eb4ea-22a4-4c89-a5bb-47a3300528ab" +version = "0.2.34" + +[[deps.ConstructionBase]] +git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.6.0" +weakdeps = ["IntervalSets", "LinearAlgebra", "StaticArrays"] + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseLinearAlgebraExt = "LinearAlgebra" + ConstructionBaseStaticArraysExt = "StaticArrays" + +[[deps.ContextVariablesX]] +deps = ["Compat", "Logging", "UUIDs"] +git-tree-sha1 = "25cc3803f1030ab855e383129dcd3dc294e322cc" +uuid = "6add18c4-b38d-439d-96f6-d6bc489c04c5" +version = "0.1.3" + +[[deps.Contour]] +git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.6.3" + +[[deps.CpuId]] +deps = ["Markdown"] +git-tree-sha1 = "fcbb72b032692610bfbdb15018ac16a36cf2e406" +uuid = "adafc99b-e345-5852-983c-f28acb93d879" +version = "0.3.1" + +[[deps.Crayons]] +git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.1.1" + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataStructures]] +deps = ["OrderedCollections"] +git-tree-sha1 = "e357641bb3e0638d353c4b29ea0e40ea644066a6" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.19.3" + +[[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" +version = "1.11.0" + +[[deps.DefineSingletons]] +git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" +uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52" +version = "0.1.2" + +[[deps.DelaunayTriangulation]] +deps = ["AdaptivePredicates", "EnumX", "ExactPredicates", "Random"] +git-tree-sha1 = "c55f5a9fd67bdbc8e089b5a3111fe4292986a8e8" +uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" +version = "1.6.6" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.DispatchDoctor]] +deps = ["MacroTools", "Preferences"] +git-tree-sha1 = "42cd00edaac86f941815fe557c1d01e11913e07c" +uuid = "8d63f2c5-f18a-4cf2-ba9d-b3f60fc568c8" +version = "0.4.28" +weakdeps = ["ChainRulesCore", "EnzymeCore"] + + [deps.DispatchDoctor.extensions] + DispatchDoctorChainRulesCoreExt = "ChainRulesCore" + DispatchDoctorEnzymeCoreExt = "EnzymeCore" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" +version = "1.11.0" + +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "fbcc7610f6d8348428f722ecbe0e6cfe22e672c6" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.123" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.DocStringExtensions]] +git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.5" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.7.0" + +[[deps.EarCut_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e3290f2d49e661fbd94046d7e3726ffcb2d41053" +uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" +version = "2.2.4+0" + +[[deps.EnumX]] +git-tree-sha1 = "c49898e8438c828577f04b92fc9368c388ac783c" +uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" +version = "1.0.7" + +[[deps.Enzyme]] +deps = ["CEnum", "EnzymeCore", "Enzyme_jll", "GPUCompiler", "InteractiveUtils", "LLVM", "Libdl", "LinearAlgebra", "ObjectFile", "PrecompileTools", "Preferences", "Printf", "Random", "SparseArrays"] +git-tree-sha1 = "3b8ff73a9885aaea237bc262bd5fc798b5fd866f" +uuid = "7da242da-08ed-463a-9acd-ee780be4f1d9" +version = "0.13.134" + + [deps.Enzyme.extensions] + EnzymeBFloat16sExt = "BFloat16s" + EnzymeChainRulesCoreExt = "ChainRulesCore" + EnzymeGPUArraysCoreExt = "GPUArraysCore" + EnzymeLogExpFunctionsExt = "LogExpFunctions" + EnzymeSpecialFunctionsExt = "SpecialFunctions" + EnzymeStaticArraysExt = "StaticArrays" + + [deps.Enzyme.weakdeps] + ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b" + BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + LogExpFunctions = "2ab3a3ac-af41-5b50-aa03-7779005ae688" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.EnzymeCore]] +git-tree-sha1 = "990991b8aa76d17693a98e3a915ac7aa49f08d1a" +uuid = "f151be2c-9106-41f4-ab19-57ee4f262869" +version = "0.8.18" +weakdeps = ["Adapt", "ChainRulesCore"] + + [deps.EnzymeCore.extensions] + AdaptExt = "Adapt" + EnzymeCoreChainRulesCoreExt = "ChainRulesCore" + +[[deps.Enzyme_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "4c22000e08aaa862526d9a41cfb7003e4002e653" +uuid = "7cc45869-7501-5eee-bdea-0790c847d4ef" +version = "0.0.256+0" + +[[deps.ExactPredicates]] +deps = ["IntervalArithmetic", "Random", "StaticArrays"] +git-tree-sha1 = "83231673ea4d3d6008ac74dc5079e77ab2209d8f" +uuid = "429591f6-91af-11e9-00e2-59fbe8cec110" +version = "2.2.9" + +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "d36f682e590a83d63d1c7dbd287573764682d12a" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.11" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "27af30de8b5445644e8ffe3bcb0d72049c089cf1" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.7.3+0" + +[[deps.ExprTools]] +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" +uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" +version = "0.1.10" + +[[deps.ExpressionExplorer]] +git-tree-sha1 = "5f1c005ed214356bbe41d442cc1ccd416e510b7e" +uuid = "21656369-7473-754a-2065-74616d696c43" +version = "1.1.4" + +[[deps.Extents]] +git-tree-sha1 = "b309b36a9e02fe7be71270dd8c0fd873625332b4" +uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" +version = "0.1.6" + +[[deps.FFMPEG_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "eaa040768ea663ca695d442be1bc97edfe6824f2" +uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" +version = "6.1.3+0" + +[[deps.FFTA]] +deps = ["AbstractFFTs", "DocStringExtensions", "LinearAlgebra", "MuladdMacro", "Primes", "Random", "Reexport"] +git-tree-sha1 = "65e55303b72f4a567a51b174dd2c47496efeb95a" +uuid = "b86e33f2-c0db-4aa1-a6e0-ab43e668529e" +version = "0.3.1" + +[[deps.FLoops]] +deps = ["BangBang", "Compat", "FLoopsBase", "InitialValues", "JuliaVariables", "MLStyle", "Serialization", "Setfield", "Transducers"] +git-tree-sha1 = "0a2e5873e9a5f54abb06418d57a8df689336a660" +uuid = "cc61a311-1640-44b5-9fba-1b764f453329" +version = "0.2.2" + +[[deps.FLoopsBase]] +deps = ["ContextVariablesX"] +git-tree-sha1 = "656f7a6859be8673bf1f35da5670246b923964f7" +uuid = "b9860ae5-e623-471e-878b-f6a53c775ea6" +version = "0.1.1" + +[[deps.FastClosures]] +git-tree-sha1 = "acebe244d53ee1b461970f8910c235b259e772ef" +uuid = "9aa1b823-49e4-5ca5-8b0f-3971ec8bab6a" +version = "0.3.2" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "6522cfb3b8fe97bec632252263057996cbd3de20" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.18.0" +weakdeps = ["HTTP"] + + [deps.FileIO.extensions] + HTTPExt = "HTTP" + +[[deps.FilePaths]] +deps = ["FilePathsBase", "MacroTools", "Reexport", "Requires"] +git-tree-sha1 = "919d9412dbf53a2e6fe74af62a73ceed0bce0629" +uuid = "8fc22ac5-c921-52a6-82fd-178b2807b824" +version = "0.8.3" + +[[deps.FilePathsBase]] +deps = ["Compat", "Dates"] +git-tree-sha1 = "3bab2c5aa25e7840a4b065805c0cdfc01f3068d2" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.9.24" +weakdeps = ["Mmap", "Test"] + + [deps.FilePathsBase.extensions] + FilePathsBaseMmapExt = "Mmap" + FilePathsBaseTestExt = "Test" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" +version = "1.11.0" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "2f979084d1e13948a3352cf64a25df6bd3b4dca3" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.16.0" +weakdeps = ["PDMats", "SparseArrays", "StaticArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStaticArraysExt = "StaticArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.5" + +[[deps.Flux]] +deps = ["ADTypes", "Adapt", "ChainRulesCore", "Compat", "EnzymeCore", "Functors", "LinearAlgebra", "MLCore", "MLDataDevices", "MLUtils", "MacroTools", "NNlib", "OneHotArrays", "Optimisers", "Preferences", "ProgressLogging", "Random", "Reexport", "Setfield", "SparseArrays", "SpecialFunctions", "Statistics", "Zygote"] +git-tree-sha1 = "ea6715b3d7a95a07a62109df1c9ede2641a50706" +uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c" +version = "0.16.9" + + [deps.Flux.extensions] + FluxAMDGPUExt = "AMDGPU" + FluxCUDAExt = "CUDA" + FluxCUDAcuDNNExt = ["CUDA", "cuDNN"] + FluxEnzymeExt = "Enzyme" + FluxFiniteDifferencesExt = "FiniteDifferences" + FluxMPIExt = "MPI" + FluxMPINCCLExt = ["CUDA", "MPI", "NCCL"] + FluxMooncakeExt = "Mooncake" + + [deps.Flux.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000" + MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + NCCL = "3fe64909-d7a1-4096-9b7d-7a0f12cf0f6b" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] +git-tree-sha1 = "f85dac9a96a01087df6e3a749840015a0ca3817d" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.17.1+0" + +[[deps.Format]] +git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" +uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" +version = "1.3.7" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "cddeab6487248a39dae1a960fff0ac17b2a28888" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "1.3.3" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.FreeType]] +deps = ["CEnum", "FreeType2_jll"] +git-tree-sha1 = "907369da0f8e80728ab49c1c7e09327bf0d6d999" +uuid = "b38be410-82b0-50bf-ab77-7b57e271db43" +version = "4.1.1" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "70329abc09b886fd2c5d94ad2d9527639c421e3e" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.14.3+1" + +[[deps.FreeTypeAbstraction]] +deps = ["BaseDirs", "ColorVectorSpace", "Colors", "FreeType", "GeometryBasics", "Mmap"] +git-tree-sha1 = "4ebb930ef4a43817991ba35db6317a05e59abd11" +uuid = "663a7486-cb36-511b-a19d-713bb74d65c9" +version = "0.10.8" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "7a214fdac5ed5f59a22c2d9a885a16da1c74bbc7" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.17+0" + +[[deps.Functors]] +deps = ["Compat", "ConstructionBase", "LinearAlgebra", "Random"] +git-tree-sha1 = "60a0339f28a233601cb74468032b5c302d5067de" +uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" +version = "0.5.2" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" +version = "1.11.0" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "83cf05ab16a73219e5f6bd1bdfa9848fa24ac627" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.2.0" + +[[deps.GPUCompiler]] +deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "PrecompileTools", "Preferences", "Scratch", "Serialization", "TOML", "Tracy", "UUIDs"] +git-tree-sha1 = "966946d226e8b676ca6409454718accb18c34c54" +uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" +version = "1.8.2" + +[[deps.GeometryBasics]] +deps = ["EarCut_jll", "Extents", "IterTools", "LinearAlgebra", "PrecompileTools", "Random", "StaticArrays"] +git-tree-sha1 = "1f5a80f4ed9f5a4aada88fc2db456e637676414b" +uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" +version = "0.5.10" + + [deps.GeometryBasics.extensions] + GeometryBasicsGeoInterfaceExt = "GeoInterface" + + [deps.GeometryBasics.weakdeps] + GeoInterface = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" + +[[deps.GettextRuntime_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll"] +git-tree-sha1 = "45288942190db7c5f760f59c04495064eedf9340" +uuid = "b0724c58-0f36-5564-988d-3bb0596ebc4a" +version = "0.22.4+0" + +[[deps.Giflib_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6570366d757b50fabae9f4315ad74d2e40c0560a" +uuid = "59f7168a-df46-5410-90c8-f2779963d0ec" +version = "5.2.3+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "24f6def62397474a297bfcec22384101609142ed" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.86.3+0" + +[[deps.Graphics]] +deps = ["Colors", "LinearAlgebra", "NaNMath"] +git-tree-sha1 = "a641238db938fff9b2f60d08ed9030387daf428c" +uuid = "a2bd30eb-e257-5431-a919-1863eab51364" +version = "1.1.3" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8a6dbda1fd736d60cc477d99f2e7a042acfa46e8" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.15+0" + +[[deps.GridLayoutBase]] +deps = ["GeometryBasics", "InteractiveUtils", "Observables"] +git-tree-sha1 = "93d5c27c8de51687a2c70ec0716e6e76f298416f" +uuid = "3955a311-db13-416c-9275-1d80ed98e5e9" +version = "0.11.2" + +[[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", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] +git-tree-sha1 = "51059d23c8bb67911a2e6fd5130229113735fc7e" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "1.11.0" + +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] +git-tree-sha1 = "f923f9a774fcf3f5cb761bfa43aeadd689714813" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "8.5.1+0" + +[[deps.HashArrayMappedTries]] +git-tree-sha1 = "2eaa69a7cab70a52b9687c8bf950a5a93ec895ae" +uuid = "076d061b-32b6-4027-95e0-9a2c6f6d7e74" +version = "0.2.0" + +[[deps.HostCPUFeatures]] +deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Preferences", "Static"] +git-tree-sha1 = "af9ab7d1f70739a47f03be78771ebda38c3c71bf" +uuid = "3e5b6fbb-0976-4d2c-9146-d79de83f2fb0" +version = "0.1.18" + +[[deps.HypergeometricFunctions]] +deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "68c173f4f449de5b438ee67ed0c9c748dc31a2ec" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.28" + +[[deps.IRTools]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "57e9ce6cf68d0abf5cb6b3b4abf9bedf05c939c0" +uuid = "7869d1d1-7146-5819-86e3-90919afe41df" +version = "0.4.15" + +[[deps.IfElse]] +git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" +uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" +version = "0.1.1" + +[[deps.ImageAxes]] +deps = ["AxisArrays", "ImageBase", "ImageCore", "Reexport", "SimpleTraits"] +git-tree-sha1 = "e12629406c6c4442539436581041d372d69c55ba" +uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac" +version = "0.6.12" + +[[deps.ImageBase]] +deps = ["ImageCore", "Reexport"] +git-tree-sha1 = "eb49b82c172811fd2c86759fa0553a2221feb909" +uuid = "c817782e-172a-44cc-b673-b171935fbb9e" +version = "0.1.7" + +[[deps.ImageCore]] +deps = ["ColorVectorSpace", "Colors", "FixedPointNumbers", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "PrecompileTools", "Reexport"] +git-tree-sha1 = "8c193230235bbcee22c8066b0374f63b5683c2d3" +uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" +version = "0.10.5" + +[[deps.ImageIO]] +deps = ["FileIO", "IndirectArrays", "JpegTurbo", "LazyModules", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs", "WebP"] +git-tree-sha1 = "696144904b76e1ca433b886b4e7edd067d76cbf7" +uuid = "82e4d734-157c-48bb-816b-45c225c6df19" +version = "0.6.9" + +[[deps.ImageMetadata]] +deps = ["AxisArrays", "ImageAxes", "ImageBase", "ImageCore"] +git-tree-sha1 = "2a81c3897be6fbcde0802a0ebe6796d0562f63ec" +uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49" +version = "0.9.10" + +[[deps.Imath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "dcc8d0cd653e55213df9b75ebc6fe4a8d3254c65" +uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1" +version = "3.2.2+0" + +[[deps.IndirectArrays]] +git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f" +uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959" +version = "1.0.0" + +[[deps.Inflate]] +git-tree-sha1 = "d1b1b796e47d94588b3757fe84fbf65a5ec4a80d" +uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" +version = "0.1.5" + +[[deps.InitialValues]] +git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" +uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" +version = "0.3.1" + +[[deps.IntegerMathUtils]] +git-tree-sha1 = "4c1acff2dc6b6967e7e750633c50bc3b8d83e617" +uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" +version = "0.1.3" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +version = "1.11.0" + +[[deps.Interpolations]] +deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "Requires", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] +git-tree-sha1 = "88a101217d7cb38a7b481ccd50d21876e1d1b0e0" +uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" +version = "0.15.1" +weakdeps = ["Unitful"] + + [deps.Interpolations.extensions] + InterpolationsUnitfulExt = "Unitful" + +[[deps.IntervalArithmetic]] +deps = ["CRlibm", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Printf", "Random", "RoundingEmulator"] +git-tree-sha1 = "2cce1fed119ca7b6cc230c4a3b85202478af7924" +uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" +version = "1.0.3" + + [deps.IntervalArithmetic.extensions] + IntervalArithmeticArblibExt = "Arblib" + IntervalArithmeticDiffRulesExt = "DiffRules" + IntervalArithmeticForwardDiffExt = "ForwardDiff" + IntervalArithmeticIntervalSetsExt = "IntervalSets" + IntervalArithmeticLinearAlgebraExt = "LinearAlgebra" + IntervalArithmeticRecipesBaseExt = "RecipesBase" + IntervalArithmeticSparseArraysExt = "SparseArrays" + + [deps.IntervalArithmetic.weakdeps] + Arblib = "fb37089c-8514-4489-9461-98f9c8763369" + DiffRules = "b552c78f-8df3-52c6-915a-8e097449b14b" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.IntervalSets]] +git-tree-sha1 = "d966f85b3b7a8e49d034d27a189e9a4874b4391a" +uuid = "8197267c-284f-5f27-9208-e0e47529a953" +version = "0.7.13" + + [deps.IntervalSets.extensions] + IntervalSetsRandomExt = "Random" + IntervalSetsRecipesBaseExt = "RecipesBase" + IntervalSetsStatisticsExt = "Statistics" + + [deps.IntervalSets.weakdeps] + Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[deps.InverseFunctions]] +git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb" +uuid = "3587e190-3f89-42d0-90ee-14403ec27112" +version = "0.1.17" +weakdeps = ["Dates", "Test"] + + [deps.InverseFunctions.extensions] + InverseFunctionsDatesExt = "Dates" + InverseFunctionsTestExt = "Test" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.6" + +[[deps.Isoband]] +deps = ["isoband_jll"] +git-tree-sha1 = "f9b6d97355599074dc867318950adaa6f9946137" +uuid = "f1662d9f-8043-43de-a69a-05efc1cc6ff4" +version = "0.1.1" + +[[deps.IterTools]] +git-tree-sha1 = "42d5f897009e7ff2cf88db414a389e5ed1bdd023" +uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" +version = "1.10.0" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "0533e564aae234aff59ab625543145446d8b6ec2" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.7.1" + +[[deps.JSON]] +deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] +git-tree-sha1 = "b3ad4a0255688dcb895a52fafbaae3023b588a90" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "1.4.0" + + [deps.JSON.extensions] + JSONArrowExt = ["ArrowTypes"] + + [deps.JSON.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + +[[deps.JpegTurbo]] +deps = ["CEnum", "FileIO", "ImageCore", "JpegTurbo_jll", "TOML"] +git-tree-sha1 = "9496de8fb52c224a2e3f9ff403947674517317d9" +uuid = "b835a17e-a41a-41e7-81f0-2f016b05efe0" +version = "0.1.6" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "b6893345fd6658c8e475d40155789f4860ac3b21" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "3.1.4+0" + +[[deps.JuliaSyntaxHighlighting]] +deps = ["StyledStrings"] +uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011" +version = "1.12.0" + +[[deps.JuliaVariables]] +deps = ["MLStyle", "NameResolution"] +git-tree-sha1 = "49fb3cb53362ddadb4415e9b73926d6b40709e70" +uuid = "b14d175d-62b4-44ba-8fb7-3064adc8c3ec" +version = "0.2.4" + +[[deps.KernelAbstractions]] +deps = ["Adapt", "Atomix", "InteractiveUtils", "MacroTools", "PrecompileTools", "Requires", "StaticArrays", "UUIDs"] +git-tree-sha1 = "f2e76d3ced51a2a9e185abc0b97494c7273f649f" +uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" +version = "0.9.41" +weakdeps = ["EnzymeCore", "LinearAlgebra", "SparseArrays"] + + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + LinearAlgebraExt = "LinearAlgebra" + SparseArraysExt = "SparseArrays" + +[[deps.KernelDensity]] +deps = ["Distributions", "DocStringExtensions", "FFTA", "Interpolations", "StatsBase"] +git-tree-sha1 = "4260cfc991b8885bf747801fb60dd4503250e478" +uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b" +version = "0.6.11" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "059aabebaa7c82ccb853dd4a0ee9d17796f7e1bc" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.3+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "aaafe88dccbd957a8d82f7d05be9b69172e0cee3" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "4.0.1+0" + +[[deps.LLVM]] +deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Unicode"] +git-tree-sha1 = "69e4739502b7ab5176117e97e1664ed181c35036" +uuid = "929cbde3-209d-540e-8aea-75f648917ca0" +version = "9.4.6" + + [deps.LLVM.extensions] + BFloat16sExt = "BFloat16s" + + [deps.LLVM.weakdeps] + BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" + +[[deps.LLVMExtra_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "8e76807afb59ebb833e9b131ebf1a8c006510f33" +uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" +version = "0.0.38+0" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "eb62a3deb62fc6d8822c0c4bef73e4412419c5d8" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "18.1.8+0" + +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1c602b1127f4751facb671441ca72715cc95938a" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.3+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.4.0" + +[[deps.LayoutPointers]] +deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] +git-tree-sha1 = "a9eaadb366f5493a5654e843864c13d8b107548c" +uuid = "10f19ff3-798f-405d-979b-55457f8fc047" +version = "0.1.17" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" +version = "1.11.0" + +[[deps.LazyModules]] +git-tree-sha1 = "a560dd966b386ac9ae60bdd3a3d3a326062d3c3e" +uuid = "8cdb02fc-e678-4876-92c5-9defec4f444e" +version = "0.3.1" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.15.0+0" + +[[deps.LibGit2]] +deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +version = "1.11.0" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.9.0+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "OpenSSL_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.3+1" + +[[deps.LibTracyClient_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d4e20500d210247322901841d4eafc7a0c52642d" +uuid = "ad6e5548-8b26-5c9f-8ef3-ef0ad883f3a5" +version = "0.13.1+0" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +version = "1.11.0" + +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c8da7e6a91781c41a863611c7e966098d783c57a" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.4.7+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "d36c21b9e7c172a44a10484125024495e2625ac0" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.7.1+1" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "be484f5c92fad0bd8acfef35fe017900b0b73809" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.18.0+0" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "97bbca976196f2a1eb9607131cb108c69ec3f8a6" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.41.3+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "f04133fe05eff1667d2054c53d59f9122383fe05" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.7.2+0" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d0205286d9eceadc518742860bf23f703779a3d6" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.41.3+0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +version = "1.12.0" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "13ca9e2586b89836fd20cccf56e57e2b9ae7f38f" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.29" + + [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" +version = "1.11.0" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "f00544d95982ea270145636c181ceda21c4e2575" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.2.0" + +[[deps.LoopVectorization]] +deps = ["ArrayInterface", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] +git-tree-sha1 = "a9fc7883eb9b5f04f46efb9a540833d1fad974b3" +uuid = "bdcacae8-1622-11e9-2a5c-532679323890" +version = "0.12.173" +weakdeps = ["ChainRulesCore", "ForwardDiff", "NNlib", "SpecialFunctions"] + + [deps.LoopVectorization.extensions] + ForwardDiffExt = ["ChainRulesCore", "ForwardDiff"] + ForwardDiffNNlibExt = ["ForwardDiff", "NNlib"] + SpecialFunctionsExt = "SpecialFunctions" + +[[deps.Lux]] +deps = ["ADTypes", "Adapt", "ArrayInterface", "ChainRulesCore", "ConcreteStructs", "DiffResults", "DispatchDoctor", "EnzymeCore", "FastClosures", "ForwardDiff", "Functors", "GPUArraysCore", "LinearAlgebra", "LuxCore", "LuxLib", "MLDataDevices", "MacroTools", "Markdown", "NNlib", "Optimisers", "PrecompileTools", "Preferences", "Random", "ReactantCore", "Reexport", "SciMLPublic", "Setfield", "Static", "StaticArraysCore", "Statistics", "UUIDs", "WeightInitializers"] +git-tree-sha1 = "334de475ff414c8eb67f88f57f7b02d40cd8f320" +uuid = "b2108857-7c20-44ae-9111-449ecde12c47" +version = "1.31.3" + + [deps.Lux.extensions] + ComponentArraysExt = "ComponentArrays" + EnzymeExt = "Enzyme" + FluxExt = "Flux" + GPUArraysExt = "GPUArrays" + LossFunctionsExt = "LossFunctions" + MLUtilsExt = "MLUtils" + MPIExt = "MPI" + MPINCCLExt = ["CUDA", "MPI", "NCCL"] + MooncakeExt = "Mooncake" + ReactantExt = ["Enzyme", "Reactant"] + ReverseDiffExt = ["FunctionWrappers", "ReverseDiff"] + SimpleChainsExt = "SimpleChains" + TrackerExt = "Tracker" + ZygoteExt = "Zygote" + + [deps.Lux.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + ComponentArrays = "b0b7db55-cfe3-40fc-9ded-d10e2dbeff66" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" + FunctionWrappers = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e" + GPUArrays = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" + LossFunctions = "30fc2ffe-d236-52d8-8643-a9d8f7c094a7" + MLUtils = "f1d291b0-491e-4a28-83b9-f70985020b54" + MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + NCCL = "3fe64909-d7a1-4096-9b7d-7a0f12cf0f6b" + Reactant = "3c362404-f566-11ee-1572-e11a4b42c853" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SimpleChains = "de6bee2f-e2f4-4ec7-b6ed-219cc6f6e9e5" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.LuxCore]] +deps = ["DispatchDoctor", "Random", "SciMLPublic"] +git-tree-sha1 = "9455b1e829d8dacad236143869be70b7fdb826b8" +uuid = "bb33d45b-7691-41d6-9220-0943567d0623" +version = "1.5.3" + + [deps.LuxCore.extensions] + ArrayInterfaceReverseDiffExt = ["ArrayInterface", "ReverseDiff"] + ArrayInterfaceTrackerExt = ["ArrayInterface", "Tracker"] + ChainRulesCoreExt = "ChainRulesCore" + EnzymeCoreExt = "EnzymeCore" + FluxExt = "Flux" + FunctorsExt = "Functors" + MLDataDevicesExt = ["Adapt", "MLDataDevices"] + ReactantExt = "Reactant" + SetfieldExt = "Setfield" + + [deps.LuxCore.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" + Functors = "d9f16b24-f501-4c13-a1f2-28368ffc5196" + MLDataDevices = "7e8f7934-dd98-4c1a-8fe8-92b47a384d40" + Reactant = "3c362404-f566-11ee-1572-e11a4b42c853" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + Setfield = "efcf1570-3423-57d1-acb7-fd33fddbac46" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.LuxLib]] +deps = ["ArrayInterface", "CPUSummary", "ChainRulesCore", "DispatchDoctor", "EnzymeCore", "FastClosures", "Functors", "KernelAbstractions", "LinearAlgebra", "LuxCore", "MLDataDevices", "Markdown", "NNlib", "Preferences", "Random", "Reexport", "SciMLPublic", "Static", "StaticArraysCore", "Statistics", "UUIDs"] +git-tree-sha1 = "0d4e3527f0dfe4163443bc67f6c80881a45fb70a" +uuid = "82251201-b29d-42c6-8e01-566dec8acb11" +version = "1.15.5" + + [deps.LuxLib.extensions] + AppleAccelerateExt = "AppleAccelerate" + BLISBLASExt = "BLISBLAS" + CUDAExt = "CUDA" + CUDAForwardDiffExt = ["CUDA", "ForwardDiff"] + EnzymeExt = "Enzyme" + ForwardDiffExt = "ForwardDiff" + LoopVectorizationExt = ["LoopVectorization", "Polyester"] + MKLExt = "MKL" + OctavianExt = ["Octavian", "LoopVectorization"] + OneHotArraysExt = ["OneHotArrays"] + ReactantExt = ["Reactant", "ReactantCore"] + ReverseDiffExt = "ReverseDiff" + SLEEFPiratesExt = "SLEEFPirates" + TrackerAMDGPUExt = ["AMDGPU", "Tracker"] + TrackerExt = "Tracker" + cuDNNExt = ["CUDA", "cuDNN"] + + [deps.LuxLib.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + AppleAccelerate = "13e28ba4-7ad8-5781-acae-3021b1ed3924" + BLISBLAS = "6f275bd8-fec0-4d39-945b-7e95a765fa1e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + LoopVectorization = "bdcacae8-1622-11e9-2a5c-532679323890" + MKL = "33e6dc65-8f57-5167-99aa-e5a354878fb2" + Octavian = "6fd5a793-0b7e-452c-907f-f8bfe9c57db4" + OneHotArrays = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f" + Polyester = "f517fe37-dbe3-4b94-8317-1923a5111588" + Reactant = "3c362404-f566-11ee-1572-e11a4b42c853" + ReactantCore = "a3311ec8-5e00-46d5-b541-4f83e724a433" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SLEEFPirates = "476501e8-09a2-5ece-8869-fb82de89a1fa" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.MLCore]] +deps = ["DataAPI", "SimpleTraits", "Tables"] +git-tree-sha1 = "73907695f35bc7ffd9f11f6c4f2ee8c1302084be" +uuid = "c2834f40-e789-41da-a90e-33b280584a8c" +version = "1.0.0" + +[[deps.MLDataDevices]] +deps = ["Adapt", "Functors", "Preferences", "Random", "SciMLPublic"] +git-tree-sha1 = "39a69ca451c3e78b9a6a2e42ef894fdf7505e629" +uuid = "7e8f7934-dd98-4c1a-8fe8-92b47a384d40" +version = "1.17.5" + + [deps.MLDataDevices.extensions] + AMDGPUExt = "AMDGPU" + CUDAExt = "CUDA" + ChainRulesCoreExt = "ChainRulesCore" + ChainRulesExt = "ChainRules" + ComponentArraysExt = "ComponentArrays" + FillArraysExt = "FillArrays" + GPUArraysSparseArraysExt = ["GPUArrays", "SparseArrays"] + MLUtilsExt = "MLUtils" + MetalExt = ["GPUArrays", "Metal"] + OneHotArraysExt = "OneHotArrays" + OpenCLExt = ["GPUArrays", "OpenCL"] + ReactantExt = "Reactant" + RecursiveArrayToolsExt = "RecursiveArrayTools" + ReverseDiffExt = "ReverseDiff" + SparseArraysExt = "SparseArrays" + TrackerExt = "Tracker" + ZygoteExt = "Zygote" + cuDNNExt = ["CUDA", "cuDNN"] + oneAPIExt = ["GPUArrays", "oneAPI"] + + [deps.MLDataDevices.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ComponentArrays = "b0b7db55-cfe3-40fc-9ded-d10e2dbeff66" + FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" + GPUArrays = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" + MLUtils = "f1d291b0-491e-4a28-83b9-f70985020b54" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + OneHotArrays = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f" + OpenCL = "08131aa3-fb12-5dee-8b74-c09406e224a2" + Reactant = "3c362404-f566-11ee-1572-e11a4b42c853" + RecursiveArrayTools = "731186ca-8d62-57ce-b412-fbd966d074cd" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + oneAPI = "8f75cd03-7ff8-4ecb-9b8f-daf728133b1b" + +[[deps.MLStyle]] +git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8" +uuid = "d8e11817-5142-5d16-987a-aa16d5891078" +version = "0.4.17" + +[[deps.MLUtils]] +deps = ["ChainRulesCore", "Compat", "DataAPI", "DelimitedFiles", "FLoops", "MLCore", "NNlib", "Random", "ShowCases", "SimpleTraits", "Statistics", "StatsBase", "Tables", "Transducers"] +git-tree-sha1 = "a772d8d1987433538a5c226f79393324b55f7846" +uuid = "f1d291b0-491e-4a28-83b9-f70985020b54" +version = "0.4.8" + +[[deps.MacroTools]] +git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.16" + +[[deps.Makie]] +deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "Contour", "Dates", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FilePaths", "FixedPointNumbers", "Format", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageBase", "ImageIO", "InteractiveUtils", "Interpolations", "IntervalSets", "InverseFunctions", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "MakieCore", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "PNGFiles", "Packing", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "Showoff", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"] +git-tree-sha1 = "1d7d16f0e02ec063becd7a140f619b2ffe5f2b11" +uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" +version = "0.22.10" + +[[deps.MakieCore]] +deps = ["ColorTypes", "GeometryBasics", "IntervalSets", "Observables"] +git-tree-sha1 = "c3159eb1e3aa3e409edbb71f4035ed8b1fc16e23" +uuid = "20f20a25-4f0e-4fdf-b5d1-57303727442b" +version = "0.9.5" + +[[deps.ManualMemory]] +git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd" +uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667" +version = "0.1.8" + +[[deps.MappedArrays]] +git-tree-sha1 = "0ee4497a4e80dbd29c058fcee6493f5219556f40" +uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" +version = "0.4.3" + +[[deps.Markdown]] +deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +version = "1.11.0" + +[[deps.MathTeXEngine]] +deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "UnicodeFun"] +git-tree-sha1 = "7eb8cdaa6f0e8081616367c10b31b9d9b34bb02a" +uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" +version = "0.6.7" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "8785729fa736197687541f7053f6d8ab7fc44f92" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.1.10" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "ff69a2b1330bcb730b9ac1ab7dd680176f5896b8" +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.1010+0" + +[[deps.MicroCollections]] +deps = ["Accessors", "BangBang", "InitialValues"] +git-tree-sha1 = "44d32db644e84c75dab479f1bc15ee76a1a3618f" +uuid = "128add7d-3638-4c79-886c-908ea0c25c34" +version = "0.2.0" + +[[deps.MicroMamba]] +deps = ["Pkg", "Scratch", "micromamba_jll"] +git-tree-sha1 = "535656ce55266bfed0575cd051acc4f36dc869a0" +uuid = "0b3b1443-0f03-428d-bdfb-f27f9c1191ea" +version = "0.1.15" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" +version = "1.11.0" + +[[deps.MosaicViews]] +deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"] +git-tree-sha1 = "7b86a5d4d70a9f5cdf2dacb3cbe6d251d1a61dbe" +uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389" +version = "0.3.4" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2025.11.4" + +[[deps.MuladdMacro]] +git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" +uuid = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" +version = "0.2.4" + +[[deps.NNlib]] +deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Random", "ScopedValues", "Statistics"] +git-tree-sha1 = "6dc9ffc3a9931e6b988f913b49630d0fb986d0a8" +uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" +version = "0.9.33" + + [deps.NNlib.extensions] + NNlibAMDGPUExt = "AMDGPU" + NNlibCUDACUDNNExt = ["CUDA", "cuDNN"] + NNlibCUDAExt = "CUDA" + NNlibEnzymeCoreExt = "EnzymeCore" + NNlibFFTWExt = "FFTW" + NNlibForwardDiffExt = "ForwardDiff" + NNlibMetalExt = "Metal" + NNlibSpecialFunctionsExt = "SpecialFunctions" + + [deps.NNlib.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "9b8215b1ee9e78a293f99797cd31375471b2bcae" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.1.3" + +[[deps.NameResolution]] +deps = ["PrettyPrint"] +git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e" +uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391" +version = "0.1.5" + +[[deps.Netpbm]] +deps = ["FileIO", "ImageCore", "ImageMetadata"] +git-tree-sha1 = "d92b107dbb887293622df7697a2223f9f8176fcd" +uuid = "f09324ee-3d7c-5217-9330-fc30815ba969" +version = "1.1.1" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.3.0" + +[[deps.ObjectFile]] +deps = ["Reexport", "StructIO"] +git-tree-sha1 = "22faba70c22d2f03e60fbc61da99c4ebfc3eb9ba" +uuid = "d8793406-e978-5875-9003-1fc021f44a92" +version = "0.5.0" + +[[deps.Observables]] +git-tree-sha1 = "7438a59546cf62428fc9d1bc94729146d37a7225" +uuid = "510215fc-4207-5dde-b226-833fc4488ee2" +version = "0.5.5" + +[[deps.OffsetArrays]] +git-tree-sha1 = "117432e406b5c023f665fa73dc26e79ec3630151" +uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" +version = "1.17.0" +weakdeps = ["Adapt"] + + [deps.OffsetArrays.extensions] + OffsetArraysAdaptExt = "Adapt" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "b6aa4566bb7ae78498a5e68943863fa8b5231b59" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.6+0" + +[[deps.OneHotArrays]] +deps = ["Adapt", "ChainRulesCore", "Compat", "GPUArraysCore", "LinearAlgebra", "NNlib"] +git-tree-sha1 = "bfe8e84c71972f77e775f75e6d8048ad3fdbe8bc" +uuid = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f" +version = "0.2.10" + +[[deps.OpenBLASConsistentFPCSR_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "f2b3b9e52a5eb6a3434c8cca67ad2dde011194f4" +uuid = "6cdc7f73-28fd-5e50-80fb-958a8875b1af" +version = "0.3.30+0" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.29+0" + +[[deps.OpenEXR]] +deps = ["Colors", "FileIO", "OpenEXR_jll"] +git-tree-sha1 = "97db9e07fe2091882c765380ef58ec553074e9c7" +uuid = "52e1d378-f018-4a11-a4be-720524705ac7" +version = "0.3.3" + +[[deps.OpenEXR_jll]] +deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "df9b7c88c2e7a2e77146223c526bf9e236d5f450" +uuid = "18a262bb-aa17-5467-a713-aee519bc75cb" +version = "3.4.4+0" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.7+0" + +[[deps.OpenSSL]] +deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "NetworkOptions", "OpenSSL_jll", "Sockets"] +git-tree-sha1 = "1d1aaa7d449b58415f97d2839c318b70ffb525a0" +uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" +version = "1.6.1" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.5.4+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.6+0" + +[[deps.Optimisers]] +deps = ["ChainRulesCore", "ConstructionBase", "Functors", "LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "36b5d2b9dd06290cd65fcf5bdbc3a551ed133af5" +uuid = "3bd65402-5787-11e9-1adc-39752487f4e2" +version = "0.4.7" +weakdeps = ["Adapt", "EnzymeCore", "Reactant"] + + [deps.Optimisers.extensions] + OptimisersAdaptExt = ["Adapt"] + OptimisersEnzymeCoreExt = "EnzymeCore" + OptimisersReactantExt = "Reactant" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e2bb57a313a74b8104064b7efd01406c0a50d2ff" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.6.1+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.8.1" + +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.44.0+1" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "e4cff168707d441cd6bf3ff7e4832bdf34278e4a" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.37" +weakdeps = ["StatsBase"] + + [deps.PDMats.extensions] + StatsBaseExt = "StatsBase" + +[[deps.PNGFiles]] +deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"] +git-tree-sha1 = "cf181f0b1e6a18dfeb0ee8acc4a9d1672499626c" +uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883" +version = "0.4.4" + +[[deps.Packing]] +deps = ["GeometryBasics"] +git-tree-sha1 = "bc5bf2ea3d5351edf285a06b0016788a121ce92c" +uuid = "19eb6ba3-879d-56ad-ad62-d5c202156566" +version = "0.5.1" + +[[deps.PaddedViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "0fac6313486baae819364c52b4f483450a9d793f" +uuid = "5432bcbf-9aad-5242-b902-cca2824c8663" +version = "0.5.12" + +[[deps.Pango_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "0662b083e11420952f2e62e17eddae7fc07d5997" +uuid = "36c8627f-9965-5494-a995-c6b170f724f3" +version = "1.57.0+0" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "7d2f8f21da5db6a806faf7b9b292296da42b2810" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.3" + +[[deps.Pidfile]] +deps = ["FileWatching", "Test"] +git-tree-sha1 = "2d8aaf8ee10df53d0dfb9b8ee44ae7c04ced2b03" +uuid = "fa939f87-e72e-5be4-a000-7fc836dbe307" +version = "1.3.0" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "db76b1ecd5e9715f3d043cec13b2ec93ce015d53" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.44.2+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.12.1" +weakdeps = ["REPL"] + + [deps.Pkg.extensions] + REPLExt = "REPL" + +[[deps.PkgVersion]] +deps = ["Pkg"] +git-tree-sha1 = "f9501cc0430a26bc3d156ae1b5b0c1b47af4d6da" +uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688" +version = "0.3.3" + +[[deps.PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "StableRNGs", "Statistics"] +git-tree-sha1 = "26ca162858917496748aad52bb5d3be4d26a228a" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.4.4" + +[[deps.Polyester]] +deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] +git-tree-sha1 = "16bbc30b5ebea91e9ce1671adc03de2832cff552" +uuid = "f517fe37-dbe3-4b94-8317-1923a5111588" +version = "0.7.19" + +[[deps.PolyesterWeave]] +deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] +git-tree-sha1 = "645bed98cd47f72f67316fd42fc47dee771aefcd" +uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" +version = "0.2.2" + +[[deps.PolygonOps]] +git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6" +uuid = "647866c9-e3ac-4575-94e7-e3d426903924" +version = "0.1.2" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "07a921781cab75691315adc645096ed5e370cb77" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.3.3" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "8b770b60760d4451834fe79dd483e318eee709c4" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.5.2" + +[[deps.PrettyPrint]] +git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4" +uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98" +version = "0.2.0" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "624de6279ab7d94fc9f672f0068107eb6619732c" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "3.3.2" + + [deps.PrettyTables.extensions] + PrettyTablesTypstryExt = "Typstry" + + [deps.PrettyTables.weakdeps] + Typstry = "f0ed7684-a786-439e-b1e3-3b82803b501e" + +[[deps.Primes]] +deps = ["IntegerMathUtils"] +git-tree-sha1 = "25cdd1d20cd005b52fc12cb6be3f75faaf59bb9b" +uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" +version = "0.5.7" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +version = "1.11.0" + +[[deps.Profile]] +deps = ["StyledStrings"] +uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" +version = "1.11.0" + +[[deps.ProgressLogging]] +deps = ["Logging", "SHA", "UUIDs"] +git-tree-sha1 = "f0803bc1171e455a04124affa9c21bba5ac4db32" +uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" +version = "0.1.6" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "fbb92c6c56b34e1a2c4c36058f68f332bec840e7" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.11.0" + +[[deps.ProtoBuf]] +deps = ["BufferedStreams", "EnumX", "TOML"] +git-tree-sha1 = "da18083a52d9d57bbe6dadaacad39731e5f7be39" +uuid = "3349acd9-ac6a-5e09-bcdb-63829b23a429" +version = "1.3.0" + +[[deps.PtrArrays]] +git-tree-sha1 = "4fbbafbc6251b883f4d2705356f3641f3652a7fe" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.4.0" + +[[deps.PythonCall]] +deps = ["CondaPkg", "Dates", "Libdl", "MacroTools", "Markdown", "Pkg", "Serialization", "Tables", "UnsafePointers"] +git-tree-sha1 = "982f3f017f08d31202574ef6bdcf8b3466430bea" +uuid = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" +version = "0.9.31" + + [deps.PythonCall.extensions] + CategoricalArraysExt = "CategoricalArrays" + PyCallExt = "PyCall" + + [deps.PythonCall.weakdeps] + CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597" + PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" + +[[deps.QOI]] +deps = ["ColorTypes", "FileIO", "FixedPointNumbers"] +git-tree-sha1 = "472daaa816895cb7aee81658d4e7aec901fa1106" +uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65" +version = "1.0.2" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "9da16da70037ba9d701192e27befedefb91ec284" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.11.2" +weakdeps = ["Enzyme"] + + [deps.QuadGK.extensions] + QuadGKEnzymeExt = "Enzyme" + +[[deps.REPL]] +deps = ["InteractiveUtils", "JuliaSyntaxHighlighting", "Markdown", "Sockets", "StyledStrings", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" +version = "1.11.0" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +version = "1.11.0" + +[[deps.RangeArrays]] +git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5" +uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d" +version = "0.3.2" + +[[deps.Ratios]] +deps = ["Requires"] +git-tree-sha1 = "1342a47bf3260ee108163042310d26f2be5ec90b" +uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" +version = "0.4.5" +weakdeps = ["FixedPointNumbers"] + + [deps.Ratios.extensions] + RatiosFixedPointNumbersExt = "FixedPointNumbers" + +[[deps.Reactant]] +deps = ["Adapt", "CEnum", "Crayons", "Downloads", "EnumX", "Enzyme", "EnzymeCore", "Functors", "GPUArraysCore", "GPUCompiler", "HTTP", "JSON", "LLVM", "LLVMOpenMP_jll", "Libdl", "LinearAlgebra", "OrderedCollections", "PrecompileTools", "Preferences", "PrettyTables", "ProtoBuf", "Random", "ReactantCore", "Reactant_jll", "ScopedValues", "Scratch", "Serialization", "Setfield", "Sockets", "StableRNGs", "StructUtils", "StyledStrings", "UUIDs", "p7zip_jll"] +git-tree-sha1 = "94c849a5f821f107c74aa19952bd3e9de8ebd341" +uuid = "3c362404-f566-11ee-1572-e11a4b42c853" +version = "0.2.240" + + [deps.Reactant.extensions] + ReactantAbstractFFTsExt = "AbstractFFTs" + ReactantArrayInterfaceExt = "ArrayInterface" + ReactantCUDAExt = ["CUDA", "Enzyme", "GPUCompiler", "KernelAbstractions", "LLVM"] + ReactantDLFP8TypesExt = "DLFP8Types" + ReactantFFTWExt = ["FFTW", "AbstractFFTs", "LinearAlgebra"] + ReactantFillArraysExt = "FillArrays" + ReactantFloat8sExt = "Float8s" + ReactantKernelAbstractionsExt = "KernelAbstractions" + ReactantLogExpFunctionsExt = ["IrrationalConstants", "LogExpFunctions"] + ReactantMCMCDiagnosticToolsExt = ["MCMCDiagnosticTools", "Statistics"] + ReactantMPIExt = "MPI" + ReactantNNlibExt = ["NNlib", "Statistics"] + ReactantNPZExt = "NPZ" + ReactantOffsetArraysExt = "OffsetArrays" + ReactantOneHotArraysExt = "OneHotArrays" + ReactantPythonCallExt = "PythonCall" + ReactantRandom123Ext = "Random123" + ReactantSparseArraysExt = "SparseArrays" + ReactantSpecialFunctionsExt = "SpecialFunctions" + ReactantStatisticsExt = "Statistics" + ReactantStructArraysExt = "StructArrays" + ReactantYaoBlocksExt = "YaoBlocks" + ReactantZygoteExt = "Zygote" + + [deps.Reactant.weakdeps] + AbstractFFTs = "621f4979-c628-5d54-868e-fcf4e3e8185c" + ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + DLFP8Types = "f4c16678-4a16-415b-82ef-ed337c5d6c7c" + FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" + FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" + Float8s = "81dfefd7-55b0-40c6-a251-db853704e186" + IrrationalConstants = "92d709cd-6900-40b7-9082-c6be49f344b6" + KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" + LogExpFunctions = "2ab3a3ac-af41-5b50-aa03-7779005ae688" + MCMCDiagnosticTools = "be115224-59cd-429b-ad48-344e309966f0" + MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" + NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" + NPZ = "15e1cf62-19b3-5cfa-8e77-841668bca605" + OffsetArrays = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" + OneHotArrays = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f" + PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" + Random123 = "74087812-796a-5b5d-8853-05524746bad3" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + YaoBlocks = "418bc28f-b43b-5e0b-a6e7-61bbc1a2c1df" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.ReactantCore]] +deps = ["ExpressionExplorer", "MacroTools"] +git-tree-sha1 = "5b9e0fe7fb2cf3794fd96ac32bf2732aa4bb9776" +uuid = "a3311ec8-5e00-46d5-b541-4f83e724a433" +version = "0.1.19" + +[[deps.Reactant_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "9aa24ec7eb8a4d3bccb440d3a736219656f5b657" +uuid = "0192cb87-2b54-54ad-80e0-3be72ad8a3c0" +version = "0.0.358+0" + +[[deps.RealDot]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" +uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" +version = "0.1.0" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "1.0.1" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.1" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "5b3d50eb374cea306873b371d3f8d3915a018f0b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.9.0" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.5.1+0" + +[[deps.RoundingEmulator]] +git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b" +uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705" +version = "0.2.1" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.SIMD]] +deps = ["PrecompileTools"] +git-tree-sha1 = "e24dc23107d426a096d3eae6c165b921e74c18e4" +uuid = "fdea26ae-647d-5447-a871-4b548cad5224" +version = "3.7.2" + +[[deps.SIMDTypes]] +git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" +uuid = "94e857df-77ce-4151-89e5-788b33177be4" +version = "0.1.0" + +[[deps.SLEEFPirates]] +deps = ["IfElse", "Static", "VectorizationBase"] +git-tree-sha1 = "456f610ca2fbd1c14f5fcf31c6bfadc55e7d66e0" +uuid = "476501e8-09a2-5ece-8869-fb82de89a1fa" +version = "0.6.43" + +[[deps.SciMLPublic]] +git-tree-sha1 = "0ba076dbdce87ba230fff48ca9bca62e1f345c9b" +uuid = "431bcebd-1456-4ced-9d72-93c2757fff0b" +version = "1.0.1" + +[[deps.ScopedValues]] +deps = ["HashArrayMappedTries", "Logging"] +git-tree-sha1 = "ac4b837d89a58c848e85e698e2a2514e9d59d8f6" +uuid = "7e506255-f358-4e82-b7e4-beb19740aa63" +version = "1.6.0" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "9b81b8393e50b7d4e6d0a9f14e192294d3b7c109" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.3.0" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" +version = "1.11.0" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "c5391c6ace3bc430ca630251d02ea9687169ca68" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.2" + +[[deps.ShaderAbstractions]] +deps = ["ColorTypes", "FixedPointNumbers", "GeometryBasics", "LinearAlgebra", "Observables", "StaticArrays"] +git-tree-sha1 = "818554664a2e01fc3784becb2eb3a82326a604b6" +uuid = "65257c39-d410-5151-9873-9b3e5be5013e" +version = "0.5.0" + +[[deps.SharedArrays]] +deps = ["Distributed", "Mmap", "Random", "Serialization"] +uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" +version = "1.11.0" + +[[deps.ShowCases]] +git-tree-sha1 = "7f534ad62ab2bd48591bdeac81994ea8c445e4a5" +uuid = "605ecd9f-84a6-4c9e-81e2-4798472b76a3" +version = "0.1.0" + +[[deps.Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + +[[deps.SignedDistanceFields]] +deps = ["Statistics"] +git-tree-sha1 = "3949ad92e1c9d2ff0cd4a1317d5ecbba682f4b92" +uuid = "73760f76-fbc4-59ce-8f25-708e95d2df96" +version = "0.4.1" + +[[deps.SimpleBufferStream]] +git-tree-sha1 = "f305871d2f381d21527c770d4788c06c097c9bc1" +uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" +version = "1.2.0" + +[[deps.SimpleChains]] +deps = ["ArrayInterface", "CPUSummary", "ChainRulesCore", "CloseOpenIntervals", "ForwardDiff", "HostCPUFeatures", "IfElse", "LayoutPointers", "LoopVectorization", "ManualMemory", "Polyester", "Random", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "StaticArrays", "StrideArraysCore", "UnPack", "VectorizationBase", "VectorizedRNG"] +git-tree-sha1 = "bd3f17dc89fe287eea8f94dd771f9343443dc664" +uuid = "de6bee2f-e2f4-4ec7-b6ed-219cc6f6e9e5" +version = "0.4.8" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "be8eeac05ec97d379347584fa9fe2f5f76795bcb" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.5" + +[[deps.Sixel]] +deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"] +git-tree-sha1 = "0494aed9501e7fb65daba895fb7fd57cc38bc743" +uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47" +version = "0.1.5" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" +version = "1.11.0" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "64d974c2e6fdf07f8155b5b2ca2ffa9069b608d9" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.2" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.12.0" + +[[deps.SparseInverseSubset]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "52962839426b75b3021296f7df242e40ecfc0852" +uuid = "dc90abb0-5640-4711-901d-7e5b23a2fada" +version = "0.1.2" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "5acc6a41b3082920f79ca3c759acbcecf18a8d78" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.7.1" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + +[[deps.SplittablesBase]] +deps = ["Setfield", "Test"] +git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5" +uuid = "171d559e-b47b-412a-8079-5efa626c420e" +version = "0.1.15" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "4f96c596b8c8258cc7d3b19797854d368f243ddc" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.4" + +[[deps.StackViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "be1cf4eb0ac528d96f5115b4ed80c26a8d8ae621" +uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" +version = "0.1.2" + +[[deps.Static]] +deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools", "SciMLPublic"] +git-tree-sha1 = "49440414711eddc7227724ae6e570c7d5559a086" +uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" +version = "1.3.1" + +[[deps.StaticArrayInterface]] +deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "SciMLPublic", "Static"] +git-tree-sha1 = "aa1ea41b3d45ac449d10477f65e2b40e3197a0d2" +uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" +version = "1.9.0" +weakdeps = ["OffsetArrays", "StaticArrays"] + + [deps.StaticArrayInterface.extensions] + StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" + StaticArrayInterfaceStaticArraysExt = "StaticArrays" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "246a8bb2e6667f832eea063c3a56aef96429a3db" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.18" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "6ab403037779dae8c514bad259f32a447262455a" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.4" + +[[deps.Statistics]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.11.1" +weakdeps = ["SparseArrays"] + + [deps.Statistics.extensions] + SparseArraysExt = ["SparseArrays"] + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "178ed29fd5b2a2cfc3bd31c13375ae925623ff36" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.8.0" + +[[deps.StatsBase]] +deps = ["AliasTables", "DataAPI", "DataStructures", "IrrationalConstants", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "aceda6f4e598d331548e04cc6b2124a6148138e3" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.10" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "91f091a8716a6bb38417a6e6f274602a19aaa685" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.5.2" +weakdeps = ["ChainRulesCore", "InverseFunctions"] + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + +[[deps.StrideArraysCore]] +deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] +git-tree-sha1 = "83151ba8065a73f53ca2ae98bc7274d817aa30f2" +uuid = "7792a7ef-975c-4747-a70f-980b88e8d1da" +version = "0.5.8" + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "d05693d339e37d6ab134c5ab53c29fce5ee5d7d5" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.4.4" + +[[deps.StructArrays]] +deps = ["ConstructionBase", "DataAPI", "Tables"] +git-tree-sha1 = "a2c37d815bf00575332b7bd0389f771cb7987214" +uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" +version = "0.7.2" +weakdeps = ["Adapt", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "SparseArrays", "StaticArrays"] + + [deps.StructArrays.extensions] + StructArraysAdaptExt = "Adapt" + StructArraysGPUArraysCoreExt = ["GPUArraysCore", "KernelAbstractions"] + StructArraysLinearAlgebraExt = "LinearAlgebra" + StructArraysSparseArraysExt = "SparseArrays" + StructArraysStaticArraysExt = "StaticArrays" + +[[deps.StructIO]] +git-tree-sha1 = "c581be48ae1cbf83e899b14c07a807e1787512cc" +uuid = "53d494c1-5632-5724-8f4c-31dff12d585f" +version = "0.3.1" + +[[deps.StructUtils]] +deps = ["Dates", "UUIDs"] +git-tree-sha1 = "fa95b3b097bcef5845c142ea2e085f1b2591e92c" +uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" +version = "2.7.1" + + [deps.StructUtils.extensions] + StructUtilsMeasurementsExt = ["Measurements"] + StructUtilsStaticArraysCoreExt = ["StaticArraysCore"] + StructUtilsTablesExt = ["Tables"] + + [deps.StructUtils.weakdeps] + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" + +[[deps.StyledStrings]] +uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b" +version = "1.11.0" + +[[deps.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.8.3+2" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "f2c1efbc8f3a609aadf318094f8fc5204bdaf344" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.12.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" +version = "1.11.0" + +[[deps.ThreadingUtilities]] +deps = ["ManualMemory"] +git-tree-sha1 = "d969183d3d244b6c33796b5ed01ab97328f2db85" +uuid = "8290d209-cae3-49c0-8002-c8c24d57dab5" +version = "0.5.5" + +[[deps.TiffImages]] +deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "PrecompileTools", "ProgressMeter", "SIMD", "UUIDs"] +git-tree-sha1 = "08c10bc34f4e7743f530793d0985bf3c254e193d" +uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69" +version = "0.11.8" + +[[deps.Tracy]] +deps = ["ExprTools", "LibTracyClient_jll", "Libdl"] +git-tree-sha1 = "73e3ff50fd3990874c59fef0f35d10644a1487bc" +uuid = "e689c965-62c8-4b79-b2c5-8359227902fd" +version = "0.1.6" + + [deps.Tracy.extensions] + TracyProfilerExt = "TracyProfiler_jll" + + [deps.Tracy.weakdeps] + TracyProfiler_jll = "0c351ed6-8a68-550e-8b79-de6f926da83c" + +[[deps.TranscodingStreams]] +git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.11.3" + +[[deps.Transducers]] +deps = ["Accessors", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "ConstructionBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "SplittablesBase", "Tables"] +git-tree-sha1 = "4aa1fdf6c1da74661f6f5d3edfd96648321dade9" +uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" +version = "0.4.85" + + [deps.Transducers.extensions] + TransducersAdaptExt = "Adapt" + TransducersBlockArraysExt = "BlockArrays" + TransducersDataFramesExt = "DataFrames" + TransducersLazyArraysExt = "LazyArrays" + TransducersOnlineStatsBaseExt = "OnlineStatsBase" + TransducersReferenceablesExt = "Referenceables" + + [deps.Transducers.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" + OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338" + Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" + +[[deps.TriplotBase]] +git-tree-sha1 = "4d4ed7f294cda19382ff7de4c137d24d16adc89b" +uuid = "981d1d27-644d-49a2-9326-4793e63143c3" +version = "0.1.0" + +[[deps.URIs]] +git-tree-sha1 = "bef26fb046d031353ef97a82e3fdb6afe7f21b1a" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.6.1" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" +version = "1.11.0" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" +version = "1.11.0" + +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[deps.Unitful]] +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "57e1b2c9de4bd6f40ecb9de4ac1797b81970d008" +uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" +version = "1.28.0" + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + ForwardDiffExt = "ForwardDiff" + InverseFunctionsUnitfulExt = "InverseFunctions" + LatexifyExt = ["Latexify", "LaTeXStrings"] + NaNMathExt = "NaNMath" + PrintfExt = "Printf" + + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" + Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" + NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" + Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.UnsafeAtomics]] +git-tree-sha1 = "0f30765c32d66d58e41f4cb5624d4fc8a82ec13b" +uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f" +version = "0.3.1" +weakdeps = ["LLVM"] + + [deps.UnsafeAtomics.extensions] + UnsafeAtomicsLLVM = ["LLVM"] + +[[deps.UnsafePointers]] +git-tree-sha1 = "c81331b3b2e60a982be57c046ec91f599ede674a" +uuid = "e17b2a0c-0bdf-430a-bd0c-3a23cae4ff39" +version = "1.0.0" + +[[deps.VectorizationBase]] +deps = ["ArrayInterface", "CPUSummary", "HostCPUFeatures", "IfElse", "LayoutPointers", "Libdl", "LinearAlgebra", "SIMDTypes", "Static", "StaticArrayInterface"] +git-tree-sha1 = "d1d9a935a26c475ebffd54e9c7ad11627c43ea85" +uuid = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f" +version = "0.21.72" + +[[deps.VectorizedRNG]] +deps = ["Distributed", "Random", "SLEEFPirates", "UnPack", "VectorizationBase"] +git-tree-sha1 = "5ca83562ba95272d8709c6c91e31e23c3c4c9825" +uuid = "33b4df10-0173-11e9-2a0c-851a7edac40e" +version = "0.2.25" +weakdeps = ["Requires", "StaticArraysCore"] + + [deps.VectorizedRNG.extensions] + VectorizedRNGStaticArraysExt = ["StaticArraysCore"] + +[[deps.WebP]] +deps = ["CEnum", "ColorTypes", "FileIO", "FixedPointNumbers", "ImageCore", "libwebp_jll"] +git-tree-sha1 = "aa1ca3c47f119fbdae8770c29820e5e6119b83f2" +uuid = "e3aaa7dc-3e4b-44e0-be63-ffb868ccd7c1" +version = "0.1.3" + +[[deps.WeightInitializers]] +deps = ["ConcreteStructs", "GPUArraysCore", "LinearAlgebra", "Random", "SpecialFunctions", "Statistics"] +git-tree-sha1 = "d79b71da9e7be904db615bdb99187d30753822a4" +uuid = "d49dbf32-c5c2-4618-8acc-27bb2598ef2d" +version = "1.3.1" + + [deps.WeightInitializers.extensions] + AMDGPUExt = "AMDGPU" + CUDAExt = "CUDA" + ChainRulesCoreExt = "ChainRulesCore" + GPUArraysExt = "GPUArrays" + ReactantExt = "Reactant" + + [deps.WeightInitializers.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + GPUArrays = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" + Reactant = "3c362404-f566-11ee-1572-e11a4b42c853" + +[[deps.WoodburyMatrices]] +deps = ["LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "248a7031b3da79a127f14e5dc5f417e26f9f6db7" +uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" +version = "1.1.0" + +[[deps.XZ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "9cce64c0fdd1960b597ba7ecda2950b5ed957438" +uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" +version = "5.8.2+0" + +[[deps.Xorg_libX11_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] +git-tree-sha1 = "808090ede1d41644447dd5cbafced4731c56bd2f" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.8.13+0" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "aa1261ebbac3ccc8d16558ae6799524c450ed16b" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.13+0" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "52858d64353db33a56e13c341d7bf44cd0d7b309" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.6+0" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "1a4a26870bf1e5d26cd585e38038d399d7e65706" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.8+0" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "7ed9347888fac59a618302ee38216dd0379c480d" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.12+0" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXau_jll", "Xorg_libXdmcp_jll"] +git-tree-sha1 = "bfcaf7ec088eaba362093393fe11aa141fa15422" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.17.1+0" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a63799ff68005991f9d9491b6e95bd3478d783cb" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.6.0+0" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.3.1+2" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "446b23e73536f84e8037f5dce465e92275f6a308" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.7+1" + +[[deps.Zygote]] +deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "PrecompileTools", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"] +git-tree-sha1 = "a29cbf3968d36022198bcc6f23fdfd70f7caf737" +uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" +version = "0.7.10" + + [deps.Zygote.extensions] + ZygoteAtomExt = "Atom" + ZygoteColorsExt = "Colors" + ZygoteDistancesExt = "Distances" + ZygoteTrackerExt = "Tracker" + + [deps.Zygote.weakdeps] + Atom = "c52e3926-4ff0-5f6e-af25-54175e0327b1" + Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" + Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.ZygoteRules]] +deps = ["ChainRulesCore", "MacroTools"] +git-tree-sha1 = "434b3de333c75fc446aa0d19fc394edafd07ab08" +uuid = "700de1a5-db45-46bc-99cf-38207098b444" +version = "0.2.7" + +[[deps.isoband_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51b5eeb3f98367157a7a12a1fb0aa5328946c03c" +uuid = "9a68df92-36a6-505f-a73e-abb412b6bfb4" +version = "0.2.3+0" + +[[deps.libaom_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "371cc681c00a3ccc3fbc5c0fb91f58ba9bec1ecf" +uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" +version = "3.13.1+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "125eedcb0a4a0bba65b657251ce1d27c8714e9d6" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.17.4+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.15.0+0" + +[[deps.libfdk_aac_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "646634dd19587a56ee2f1199563ec056c5f228df" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.4+0" + +[[deps.libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "e015f211ebb898c8180887012b938f3851e719ac" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.55+0" + +[[deps.libsixel_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "libpng_jll"] +git-tree-sha1 = "c1733e347283df07689d71d61e14be986e49e47a" +uuid = "075b6546-f08a-558a-be8f-8157d0f608a5" +version = "1.10.5+0" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll"] +git-tree-sha1 = "11e1772e7f3cc987e9d3de991dd4f6b2602663a5" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.8+0" + +[[deps.libwebp_jll]] +deps = ["Artifacts", "Giflib_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libglvnd_jll", "Libtiff_jll", "libpng_jll"] +git-tree-sha1 = "4e4282c4d846e11dce56d74fa8040130b7a95cb3" +uuid = "c5f90fcd-3b7e-5836-afba-fc50a0988cb2" +version = "1.6.0+0" + +[[deps.micromamba_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "717df6f6892af4ee13279a73aa58474e58a88667" +uuid = "f8abcde7-e9b7-5caa-b8af-a437887ae8e4" +version = "2.3.1+0" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.64.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.7.0+0" + +[[deps.pixi_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "f349584316617063160a947a82638f7611a8ef0f" +uuid = "4d7b5844-a134-5dcd-ac86-c8f19cd51bed" +version = "0.41.3+0" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "14cc7083fc6dff3cc44f2bc435ee96d06ed79aa7" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "10164.0.1+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e7b67590c14d487e734dcb925924c5dc43ec85f3" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +version = "4.1.0+0" diff --git a/benchmarks/NeuralNetworks/Project.toml b/benchmarks/NeuralNetworks/Project.toml new file mode 100644 index 000000000..8a0bcf883 --- /dev/null +++ b/benchmarks/NeuralNetworks/Project.toml @@ -0,0 +1,30 @@ +[deps] +BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" +CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" +CondaPkg = "992eb4ea-22a4-4c89-a5bb-47a3300528ab" +Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" +Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" +Lux = "b2108857-7c20-44ae-9111-449ecde12c47" +MLDataDevices = "7e8f7934-dd98-4c1a-8fe8-92b47a384d40" +Optimisers = "3bd65402-5787-11e9-1adc-39752487f4e2" +PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" +Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +Reactant = "3c362404-f566-11ee-1572-e11a4b42c853" +SimpleChains = "de6bee2f-e2f4-4ec7-b6ed-219cc6f6e9e5" +Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[compat] +BenchmarkTools = "1" +CairoMakie = "0.12, 0.13" +CondaPkg = "0.2" +Enzyme = "0.13" +Flux = "0.16" +Lux = "1" +MLDataDevices = "1" +Optimisers = "0.4" +PythonCall = "0.9" +Reactant = "0.2" +SimpleChains = "0.4" +Statistics = "1" +Zygote = "0.6, 0.7" diff --git a/benchmarks/NeuralNetworks/benchmark_config.toml b/benchmarks/NeuralNetworks/benchmark_config.toml new file mode 100644 index 000000000..3f352d626 --- /dev/null +++ b/benchmarks/NeuralNetworks/benchmark_config.toml @@ -0,0 +1,3 @@ +# Neural network benchmarks — run on GPU runner (demeter3) +runner = ["self-hosted", "gpu", "exclusive"] +timeout = 12000 diff --git a/benchmarks/NeuralNetworks/nn_benchmark_utils.py b/benchmarks/NeuralNetworks/nn_benchmark_utils.py new file mode 100644 index 000000000..91c372571 --- /dev/null +++ b/benchmarks/NeuralNetworks/nn_benchmark_utils.py @@ -0,0 +1,288 @@ +""" +Python timing utilities and model definitions for neural network benchmarks. +All timing is done inside Python to avoid Julia-to-Python call overhead. +""" +import time +import numpy as np + +# ---- JAX ---- +import jax +import jax.numpy as jnp +from jax import random +import optax + +# ---- PyTorch ---- +import torch +import torch.nn as tnn + + +# ============================================================ +# Timing utilities +# ============================================================ + +def time_jax_inference(fn, *args, n_runs=100): + """Time a JIT-compiled JAX function, including block_until_ready.""" + for _ in range(5): + fn(*args).block_until_ready() + times = [] + for _ in range(n_runs): + start = time.perf_counter() + fn(*args).block_until_ready() + end_ = time.perf_counter() + times.append(end_ - start) + return float(np.median(times)) + + +def time_jax_train_step(train_step_fn, params, x, y, n_runs=50): + """Time a JAX training step, blocking until all outputs are ready.""" + for _ in range(3): + params, _ = train_step_fn(params, x, y) + times = [] + for _ in range(n_runs): + start = time.perf_counter() + params, loss = train_step_fn(params, x, y) + jax.tree.map(lambda t: t.block_until_ready(), params) + end_ = time.perf_counter() + times.append(end_ - start) + return float(np.median(times)) + + +def time_torch_inference(model, x, n_runs=100): + """Time a PyTorch model in eval mode.""" + model.eval() + with torch.no_grad(): + for _ in range(5): + model(x) + times = [] + for _ in range(n_runs): + start = time.perf_counter() + model(x) + end_ = time.perf_counter() + times.append(end_ - start) + return float(np.median(times)) + + +def time_torch_train_step(model, optimizer, loss_fn, x, y, n_runs=50): + """Time a full PyTorch train step (zero_grad + forward + backward + step).""" + model.train() + for _ in range(3): + optimizer.zero_grad() + out = model(x) + loss = loss_fn(out, y) + loss.backward() + optimizer.step() + times = [] + for _ in range(n_runs): + start = time.perf_counter() + optimizer.zero_grad() + out = model(x) + loss = loss_fn(out, y) + loss.backward() + optimizer.step() + end_ = time.perf_counter() + times.append(end_ - start) + return float(np.median(times)) + + +# ============================================================ +# JAX MLP helpers +# ============================================================ + +def create_jax_mlp_params(key): + """Create parameters for a 7-layer MLP (32 -> 256x6 -> 10).""" + params = [] + key, subkey = random.split(key) + params.append({"w": random.normal(subkey, (32, 256)) * 0.01, "b": jnp.zeros(256)}) + for _ in range(5): + key, subkey = random.split(key) + params.append( + {"w": random.normal(subkey, (256, 256)) * 0.01, "b": jnp.zeros(256)} + ) + key, subkey = random.split(key) + params.append({"w": random.normal(subkey, (256, 10)) * 0.01, "b": jnp.zeros(10)}) + return params + + +@jax.jit +def jax_mlp_relu_forward(params, x): + for layer in params[:-1]: + x = jax.nn.relu(x @ layer["w"] + layer["b"]) + return x @ params[-1]["w"] + params[-1]["b"] + + +@jax.jit +def jax_mlp_gelu_forward(params, x): + for layer in params[:-1]: + x = jax.nn.gelu(x @ layer["w"] + layer["b"]) + return x @ params[-1]["w"] + params[-1]["b"] + + +def make_jax_mlp_train_step(forward_fn, params): + """Create a JIT-compiled training step for a JAX MLP.""" + optimizer = optax.adam(1e-3) + opt_state = optimizer.init(params) + + def loss_fn(p, x, y): + pred = forward_fn(p, x) + return jnp.mean((pred - y) ** 2) + + @jax.jit + def train_step(params, x, y): + loss, grads = jax.value_and_grad(loss_fn)(params, x, y) + updates, _ = optimizer.update(grads, opt_state, params) + new_params = optax.apply_updates(params, updates) + return new_params, loss + + return train_step + + +# ============================================================ +# JAX LeNet helpers +# ============================================================ + +def create_jax_lenet_params(key): + params = {} + key, k1 = random.split(key) + params["conv1_w"] = random.normal(k1, (6, 1, 5, 5)) * 0.01 + params["conv1_b"] = jnp.zeros(6) + key, k2 = random.split(key) + params["conv2_w"] = random.normal(k2, (16, 6, 5, 5)) * 0.01 + params["conv2_b"] = jnp.zeros(16) + key, k3 = random.split(key) + params["fc1_w"] = random.normal(k3, (256, 120)) * 0.01 + params["fc1_b"] = jnp.zeros(120) + key, k4 = random.split(key) + params["fc2_w"] = random.normal(k4, (120, 84)) * 0.01 + params["fc2_b"] = jnp.zeros(84) + key, k5 = random.split(key) + params["fc3_w"] = random.normal(k5, (84, 10)) * 0.01 + params["fc3_b"] = jnp.zeros(10) + return params + + +@jax.jit +def jax_lenet_forward(params, x): + """LeNet-5 forward pass. x: (batch, 1, 28, 28) NCHW.""" + x = ( + jax.lax.conv(x, params["conv1_w"], (1, 1), "VALID") + + params["conv1_b"][None, :, None, None] + ) + x = jax.nn.relu(x) + x = jax.lax.reduce_window( + x, -jnp.inf, jax.lax.max, (1, 1, 2, 2), (1, 1, 2, 2), "VALID" + ) + x = ( + jax.lax.conv(x, params["conv2_w"], (1, 1), "VALID") + + params["conv2_b"][None, :, None, None] + ) + x = jax.nn.relu(x) + x = jax.lax.reduce_window( + x, -jnp.inf, jax.lax.max, (1, 1, 2, 2), (1, 1, 2, 2), "VALID" + ) + x = x.reshape(x.shape[0], -1) + x = jax.nn.relu(x @ params["fc1_w"] + params["fc1_b"]) + x = jax.nn.relu(x @ params["fc2_w"] + params["fc2_b"]) + return x @ params["fc3_w"] + params["fc3_b"] + + +def make_jax_lenet_train_step(params): + optimizer = optax.adam(1e-3) + opt_state = optimizer.init(params) + + def loss_fn(p, x, y): + pred = jax_lenet_forward(p, x) + return jnp.mean((pred - y) ** 2) + + @jax.jit + def train_step(params, x, y): + loss, grads = jax.value_and_grad(loss_fn)(params, x, y) + updates, _ = optimizer.update(grads, opt_state, params) + return optax.apply_updates(params, updates), loss + + return train_step + + +# ============================================================ +# PyTorch model definitions +# ============================================================ + +class TorchMLP(tnn.Module): + def __init__(self, activation="relu"): + super().__init__() + act_fn = tnn.ReLU() if activation == "relu" else tnn.GELU() + layers = [tnn.Linear(32, 256), act_fn] + for _ in range(5): + layers.extend([tnn.Linear(256, 256), act_fn]) + layers.append(tnn.Linear(256, 10)) + self.net = tnn.Sequential(*layers) + + def forward(self, x): + return self.net(x) + + +class TorchMLPBN(tnn.Module): + def __init__(self): + super().__init__() + layers = [tnn.Linear(32, 256), tnn.BatchNorm1d(256), tnn.ReLU()] + for _ in range(5): + layers.extend([tnn.Linear(256, 256), tnn.BatchNorm1d(256), tnn.ReLU()]) + layers.append(tnn.Linear(256, 10)) + self.net = tnn.Sequential(*layers) + + def forward(self, x): + return self.net(x) + + +class TorchLeNet(tnn.Module): + def __init__(self): + super().__init__() + self.conv1 = tnn.Conv2d(1, 6, 5) + self.conv2 = tnn.Conv2d(6, 16, 5) + self.pool = tnn.MaxPool2d(2, 2) + self.fc1 = tnn.Linear(16 * 4 * 4, 120) + self.fc2 = tnn.Linear(120, 84) + self.fc3 = tnn.Linear(84, 10) + + def forward(self, x): + x = self.pool(torch.relu(self.conv1(x))) + x = self.pool(torch.relu(self.conv2(x))) + x = x.view(x.size(0), -1) + x = torch.relu(self.fc1(x)) + x = torch.relu(self.fc2(x)) + return self.fc3(x) + + +class TorchResBlock(tnn.Module): + def __init__(self, channels): + super().__init__() + self.conv1 = tnn.Conv2d(channels, channels, 3, padding=1, bias=False) + self.bn1 = tnn.BatchNorm2d(channels) + self.conv2 = tnn.Conv2d(channels, channels, 3, padding=1, bias=False) + self.bn2 = tnn.BatchNorm2d(channels) + + def forward(self, x): + out = torch.relu(self.bn1(self.conv1(x))) + out = self.bn2(self.conv2(out)) + return torch.relu(out + x) + + +class TorchSmallResNet(tnn.Module): + def __init__(self): + super().__init__() + self.conv1 = tnn.Conv2d(3, 64, 3, padding=1, bias=False) + self.bn1 = tnn.BatchNorm2d(64) + self.block1 = TorchResBlock(64) + self.down_conv1 = tnn.Conv2d(64, 128, 3, stride=2, padding=1, bias=False) + self.down_bn1 = tnn.BatchNorm2d(128) + self.down_conv2 = tnn.Conv2d(128, 128, 3, padding=1, bias=False) + self.down_bn2 = tnn.BatchNorm2d(128) + self.pool = tnn.AdaptiveAvgPool2d(1) + self.fc = tnn.Linear(128, 10) + + def forward(self, x): + x = torch.relu(self.bn1(self.conv1(x))) + x = self.block1(x) + x = torch.relu(self.down_bn1(self.down_conv1(x))) + x = self.down_bn2(self.down_conv2(x)) + x = self.pool(x).view(x.size(0), -1) + return self.fc(x) diff --git a/benchmarks/NeuralNetworks/simple_networks.jmd b/benchmarks/NeuralNetworks/simple_networks.jmd new file mode 100644 index 000000000..a01764941 --- /dev/null +++ b/benchmarks/NeuralNetworks/simple_networks.jmd @@ -0,0 +1,769 @@ +--- +title: Simple Neural Networks +author: Avik Pal, Chris Rackauckas +--- + +This benchmark compares Julia and Python deep learning frameworks on common neural +network workloads. We compare: + +**Julia Frameworks:** +1. [Lux.jl](https://github.com/LuxDL/Lux.jl) +2. [Flux.jl](https://github.com/FluxML/Flux.jl) +3. [SimpleChains.jl](https://github.com/PumasAI/SimpleChains.jl) (via Lux.jl wrapper, CPU-optimized small networks) +4. [Reactant.jl](https://github.com/EnzymeAD/Reactant.jl) (XLA-compiled Lux models) + +**Python Frameworks (via PythonCall):** +5. [JAX](https://github.com/google/jax) +6. [PyTorch](https://github.com/pytorch/pytorch) + +!!! note + + Not all benchmarks include all frameworks. SimpleChains.jl does not support + batch normalization or convolutions with certain configurations. Python timing + is done entirely in Python to avoid Julia-to-Python call overhead. + +# Setup + +```julia +using BenchmarkTools, Random, Statistics +using Lux, Reactant, MLDataDevices +import Flux, SimpleChains +using Optimisers, Zygote, Enzyme +using CairoMakie +using PythonCall, CondaPkg + +BenchmarkTools.DEFAULT_PARAMETERS.gcsample = true +BenchmarkTools.DEFAULT_PARAMETERS.seconds = 30 + +const rng = Random.default_rng() +Random.seed!(rng, 12345) +``` + +## Python Setup + +We load all Python models and timing utilities from a companion module. + +```julia +# Add benchmark directory to Python path so we can import our utilities +sys = pyimport("sys") +sys.path.insert(0, @__DIR__) + +nn_utils = pyimport("nn_benchmark_utils") +np = pyimport("numpy") +jax = pyimport("jax") +jnp = pyimport("jax.numpy") +torch = pyimport("torch") +jax_random = pyimport("jax.random") + +# Force CPU for fair comparison +jax.config.update("jax_platform_name", "cpu") +``` + +## Julia Helper Functions + +```julia +function append_timing!(results, key, time_s) + if haskey(results, key) + results[key] = (; timings=vcat(results[key].timings, time_s)) + else + results[key] = (; timings=[time_s]) + end +end + +function to_row_major(x::AbstractMatrix) + # Julia is column-major (features x batch), Python expects row-major (batch x features) + np.array(Array(x')) +end + +function to_nchw(x::AbstractArray{T, 4}) where T + # Julia WHCN -> Python NCHW + np.array(permutedims(x, (4, 3, 1, 2))) +end +``` + +## Shared Plotting Functions + +```julia +const ASPECT_RATIO = 0.7 +const WIDTH = 1200 +const HEIGHT = round(Int, WIDTH * ASPECT_RATIO) +const STROKEWIDTH = 2.5 + +const FRAMEWORK_COLORS = Dict( + "Lux" => :royalblue, "Flux" => :orange, "SimpleChains" => :green, + "Reactant" => :purple, "JAX" => :red, "PyTorch" => :brown, + "Lux+Zygote" => :royalblue, "Flux+Zygote" => :orange, +) + +const FRAMEWORK_STYLES = Dict( + "Lux" => :solid, "Flux" => :dash, "SimpleChains" => :dot, + "Reactant" => :dashdot, "JAX" => :dashdotdot, "PyTorch" => :solid, + "Lux+Zygote" => :solid, "Flux+Zygote" => :dash, +) + +function plot_results(results, batch_sizes, name) + fig = Figure(; size=(WIDTH, HEIGHT)) + ax = Axis(fig[1, 1]; xlabel="Batch Size (log2 scale)", ylabel="Time (s) (log2 scale)", + xscale=log2, yscale=log2, xlabelsize=22, ylabelsize=22, + xticklabelsize=20, yticklabelsize=20, xtickwidth=STROKEWIDTH, + ytickwidth=STROKEWIDTH, spinewidth=STROKEWIDTH) + + handles, labels = [], String[] + for (key, val) in sort(collect(results); by=first) + timings = val.timings + any(>(0), timings) || continue + color = get(FRAMEWORK_COLORS, key, :gray) + style = get(FRAMEWORK_STYLES, key, :solid) + l = lines!(ax, batch_sizes, timings; color, linewidth=3, linestyle=style) + sc = scatter!(ax, batch_sizes, timings; color, markersize=20) + push!(handles, [l, sc]) + push!(labels, key) + end + + axislegend(ax, handles, labels; framevisible=true, framewidth=STROKEWIDTH, + labelsize=16, position=:lt, patchsize=(60.0f0, 20.0f0)) + fig[0, :] = Label(fig, "$name", fontsize=24, tellwidth=false, font=:bold) + return fig +end +``` + +# 7 Layer MLP (relu) Benchmark + +## Setup + +```julia +lux_mlp_relu = Chain( + Dense(32, 256, relu), [Dense(256, 256, relu) for _ in 1:5]..., Dense(256, 10)) +ps_lux, st_lux = Lux.setup(rng, lux_mlp_relu) + +flux_mlp_relu = Flux.Chain( + Flux.Dense(32, 256, relu), [Flux.Dense(256, 256, relu) for _ in 1:5]..., Flux.Dense(256, 10)) + +# Python models +jax_mlp_relu_params = nn_utils.create_jax_mlp_params(jax_random.PRNGKey(0)) +torch_mlp_relu = nn_utils.TorchMLP("relu") + +batch_sizes = [2, 8, 32, 128, 512, 2048] +``` + +## Inference + +```julia +st_lux_test = Lux.testmode(st_lux) +Flux.testmode!(flux_mlp_relu) + +xdev = reactant_device() +ps_ra = ps_lux |> xdev +st_ra = Lux.testmode(st_lux) |> xdev + +results = Dict{String, NamedTuple}() + +for bs in batch_sizes + x = randn(Float32, 32, bs) + + # Lux + t = @benchmark $lux_mlp_relu($x, $ps_lux, $st_lux_test) + append_timing!(results, "Lux", median(t).time / 1e9) + + # Flux + t = @benchmark $flux_mlp_relu($x) + append_timing!(results, "Flux", median(t).time / 1e9) + + # SimpleChains + sc_model = ToSimpleChainsAdaptor((32,))(lux_mlp_relu) + ps_sc, st_sc = Lux.setup(rng, sc_model) + t = @benchmark $sc_model($x, $ps_sc, $st_sc) + append_timing!(results, "SimpleChains", median(t).time / 1e9) + + # Reactant + x_ra = Reactant.ConcreteRArray(x) + compiled_fn = @compile lux_mlp_relu(x_ra, ps_ra, st_ra) + t = @benchmark $compiled_fn($x_ra, $ps_ra, $st_ra) + append_timing!(results, "Reactant", median(t).time / 1e9) + + # JAX (timed in Python) + x_py = jnp.array(to_row_major(x)) + jax_time = pyconvert(Float64, nn_utils.time_jax_inference(nn_utils.jax_mlp_relu_forward, jax_mlp_relu_params, x_py)) + append_timing!(results, "JAX", jax_time) + + # PyTorch (timed in Python) + x_torch = torch.from_numpy(to_row_major(x)) + torch_time = pyconvert(Float64, nn_utils.time_torch_inference(torch_mlp_relu, x_torch)) + append_timing!(results, "PyTorch", torch_time) + + @info "Batch $bs done" +end + +plot_results(results, batch_sizes, "Inference: 7 Layer MLP (relu)") +``` + +## Training + +```julia +train_batch_sizes = [32, 128, 512, 2048] +train_results = Dict{String, NamedTuple}() + +# JAX train step +jax_relu_train_step = nn_utils.make_jax_mlp_train_step( + nn_utils.jax_mlp_relu_forward, jax_mlp_relu_params) + +for bs in train_batch_sizes + x = randn(Float32, 32, bs) + y = randn(Float32, 10, bs) + + # Lux + Zygote + opt_state = Optimisers.setup(Adam(1.0f-3), ps_lux) + function lux_zygote_step(model, ps, st, opt_state, x, y) + (loss, st_new), back = Zygote.pullback(p -> begin + ypred, st_ = model(x, p, st) + sum(abs2, ypred .- y), st_ + end, ps) + gs = back((one(loss), nothing))[1] + opt_state_new, ps_new = Optimisers.update(opt_state, ps, gs) + ps_new, st_new, opt_state_new, loss + end + lux_zygote_step(lux_mlp_relu, ps_lux, st_lux, opt_state, x, y) + t = @benchmark $lux_zygote_step($lux_mlp_relu, $ps_lux, $st_lux, $opt_state, $x, $y) + append_timing!(train_results, "Lux+Zygote", median(t).time / 1e9) + + # Flux + Zygote + flux_opt = Flux.setup(Adam(1.0f-3), flux_mlp_relu) + Flux.trainmode!(flux_mlp_relu) + function flux_step(model, opt_state, x, y) + loss, grads = Flux.withgradient(m -> sum(abs2, m(x) .- y), model) + Flux.update!(opt_state, model, grads[1]) + loss + end + flux_step(flux_mlp_relu, flux_opt, x, y) + t = @benchmark $flux_step($flux_mlp_relu, $flux_opt, $x, $y) + append_timing!(train_results, "Flux+Zygote", median(t).time / 1e9) + + # Reactant + x_ra = Reactant.ConcreteRArray(x) + y_ra = Reactant.ConcreteRArray(y) + ts = Training.TrainState(lux_mlp_relu, ps_ra, st_ra, Adam(1.0f-3)) + function reactant_step(ts, x, y) + _, loss, _, ts_new = Training.single_train_step!(AutoEnzyme(), MSELoss(), (x, y), ts) + ts_new, loss + end + reactant_step(ts, x_ra, y_ra) + t = @benchmark $reactant_step($ts, $x_ra, $y_ra) + append_timing!(train_results, "Reactant", median(t).time / 1e9) + + # JAX + x_py = jnp.array(to_row_major(x)) + y_py = jnp.array(to_row_major(y)) + jax_time = pyconvert(Float64, nn_utils.time_jax_train_step( + jax_relu_train_step, jax_mlp_relu_params, x_py, y_py)) + append_timing!(train_results, "JAX", jax_time) + + # PyTorch + torch_model = nn_utils.TorchMLP("relu") + torch_opt = torch.optim.Adam(torch_model.parameters(); lr=1e-3) + torch_loss_fn = nn_utils.tnn.MSELoss() + x_torch = torch.from_numpy(to_row_major(x)) + y_torch = torch.from_numpy(to_row_major(y)) + torch_time = pyconvert(Float64, nn_utils.time_torch_train_step( + torch_model, torch_opt, torch_loss_fn, x_torch, y_torch)) + append_timing!(train_results, "PyTorch", torch_time) + + @info "Training batch $bs done" +end + +plot_results(train_results, train_batch_sizes, "Training Step: 7 Layer MLP (relu)") +``` + +# 7 Layer MLP (gelu) Benchmark + +## Setup + +```julia +lux_mlp_gelu = Chain( + Dense(32, 256, gelu), [Dense(256, 256, gelu) for _ in 1:5]..., Dense(256, 10)) +ps_gelu, st_gelu = Lux.setup(rng, lux_mlp_gelu) + +flux_mlp_gelu = Flux.Chain( + Flux.Dense(32, 256, gelu), [Flux.Dense(256, 256, gelu) for _ in 1:5]..., Flux.Dense(256, 10)) + +jax_mlp_gelu_params = nn_utils.create_jax_mlp_params(jax_random.PRNGKey(1)) +torch_mlp_gelu = nn_utils.TorchMLP("gelu") +``` + +## Inference + +```julia +st_gelu_test = Lux.testmode(st_gelu) +Flux.testmode!(flux_mlp_gelu) +ps_gelu_ra = ps_gelu |> xdev +st_gelu_ra = Lux.testmode(st_gelu) |> xdev + +gelu_results = Dict{String, NamedTuple}() + +for bs in batch_sizes + x = randn(Float32, 32, bs) + + t = @benchmark $lux_mlp_gelu($x, $ps_gelu, $st_gelu_test) + append_timing!(gelu_results, "Lux", median(t).time / 1e9) + + t = @benchmark $flux_mlp_gelu($x) + append_timing!(gelu_results, "Flux", median(t).time / 1e9) + + sc_model = ToSimpleChainsAdaptor((32,))(lux_mlp_gelu) + ps_sc, st_sc = Lux.setup(rng, sc_model) + t = @benchmark $sc_model($x, $ps_sc, $st_sc) + append_timing!(gelu_results, "SimpleChains", median(t).time / 1e9) + + x_ra = Reactant.ConcreteRArray(x) + compiled_fn = @compile lux_mlp_gelu(x_ra, ps_gelu_ra, st_gelu_ra) + t = @benchmark $compiled_fn($x_ra, $ps_gelu_ra, $st_gelu_ra) + append_timing!(gelu_results, "Reactant", median(t).time / 1e9) + + x_py = jnp.array(to_row_major(x)) + jax_time = pyconvert(Float64, nn_utils.time_jax_inference(nn_utils.jax_mlp_gelu_forward, jax_mlp_gelu_params, x_py)) + append_timing!(gelu_results, "JAX", jax_time) + + x_torch = torch.from_numpy(to_row_major(x)) + torch_time = pyconvert(Float64, nn_utils.time_torch_inference(torch_mlp_gelu, x_torch)) + append_timing!(gelu_results, "PyTorch", torch_time) + + @info "Batch $bs done" +end + +plot_results(gelu_results, batch_sizes, "Inference: 7 Layer MLP (gelu)") +``` + +## Training + +```julia +gelu_train_results = Dict{String, NamedTuple}() +jax_gelu_train_step = nn_utils.make_jax_mlp_train_step( + nn_utils.jax_mlp_gelu_forward, jax_mlp_gelu_params) + +for bs in train_batch_sizes + x = randn(Float32, 32, bs) + y = randn(Float32, 10, bs) + + opt_state = Optimisers.setup(Adam(1.0f-3), ps_gelu) + function lux_gelu_step(model, ps, st, opt_state, x, y) + (loss, st_new), back = Zygote.pullback(p -> begin + ypred, st_ = model(x, p, st) + sum(abs2, ypred .- y), st_ + end, ps) + gs = back((one(loss), nothing))[1] + opt_state_new, ps_new = Optimisers.update(opt_state, ps, gs) + ps_new, st_new, opt_state_new, loss + end + lux_gelu_step(lux_mlp_gelu, ps_gelu, st_gelu, opt_state, x, y) + t = @benchmark $lux_gelu_step($lux_mlp_gelu, $ps_gelu, $st_gelu, $opt_state, $x, $y) + append_timing!(gelu_train_results, "Lux+Zygote", median(t).time / 1e9) + + flux_opt = Flux.setup(Adam(1.0f-3), flux_mlp_gelu) + Flux.trainmode!(flux_mlp_gelu) + function flux_gelu_step(model, opt_state, x, y) + loss, grads = Flux.withgradient(m -> sum(abs2, m(x) .- y), model) + Flux.update!(opt_state, model, grads[1]) + loss + end + flux_gelu_step(flux_mlp_gelu, flux_opt, x, y) + t = @benchmark $flux_gelu_step($flux_mlp_gelu, $flux_opt, $x, $y) + append_timing!(gelu_train_results, "Flux+Zygote", median(t).time / 1e9) + + x_ra = Reactant.ConcreteRArray(x) + y_ra = Reactant.ConcreteRArray(y) + ts_gelu = Training.TrainState(lux_mlp_gelu, ps_gelu_ra, st_gelu_ra, Adam(1.0f-3)) + function reactant_gelu_step(ts, x, y) + _, loss, _, ts_new = Training.single_train_step!(AutoEnzyme(), MSELoss(), (x, y), ts) + ts_new, loss + end + reactant_gelu_step(ts_gelu, x_ra, y_ra) + t = @benchmark $reactant_gelu_step($ts_gelu, $x_ra, $y_ra) + append_timing!(gelu_train_results, "Reactant", median(t).time / 1e9) + + x_py = jnp.array(to_row_major(x)) + y_py = jnp.array(to_row_major(y)) + jax_time = pyconvert(Float64, nn_utils.time_jax_train_step( + jax_gelu_train_step, jax_mlp_gelu_params, x_py, y_py)) + append_timing!(gelu_train_results, "JAX", jax_time) + + torch_model = nn_utils.TorchMLP("gelu") + torch_opt = torch.optim.Adam(torch_model.parameters(); lr=1e-3) + torch_loss_fn = nn_utils.tnn.MSELoss() + x_torch = torch.from_numpy(to_row_major(x)) + y_torch = torch.from_numpy(to_row_major(y)) + torch_time = pyconvert(Float64, nn_utils.time_torch_train_step( + torch_model, torch_opt, torch_loss_fn, x_torch, y_torch)) + append_timing!(gelu_train_results, "PyTorch", torch_time) + + @info "Training batch $bs done" +end + +plot_results(gelu_train_results, train_batch_sizes, "Training Step: 7 Layer MLP (gelu)") +``` + +# 7 Layer MLP (relu) with Batch Normalization Benchmark + +## Setup + +```julia +lux_mlp_bn = Chain( + Dense(32, 256), BatchNorm(256, relu), + [Chain(Dense(256, 256), BatchNorm(256, relu)) for _ in 1:5]..., + Dense(256, 10)) +ps_bn, st_bn = Lux.setup(rng, lux_mlp_bn) + +flux_mlp_bn = Flux.Chain( + Flux.Dense(32, 256), Flux.BatchNorm(256, relu), + [Flux.Chain(Flux.Dense(256, 256), Flux.BatchNorm(256, relu)) for _ in 1:5]..., + Flux.Dense(256, 10)) + +torch_mlp_bn = nn_utils.TorchMLPBN() +``` + +## Inference + +```julia +st_bn_test = Lux.testmode(st_bn) +Flux.testmode!(flux_mlp_bn) +ps_bn_ra = ps_bn |> xdev +st_bn_ra = Lux.testmode(st_bn) |> xdev + +bn_batch_sizes = [2, 8, 32, 128, 512, 2048] +bn_results = Dict{String, NamedTuple}() + +for bs in bn_batch_sizes + x = randn(Float32, 32, bs) + + t = @benchmark $lux_mlp_bn($x, $ps_bn, $st_bn_test) + append_timing!(bn_results, "Lux", median(t).time / 1e9) + + t = @benchmark $flux_mlp_bn($x) + append_timing!(bn_results, "Flux", median(t).time / 1e9) + + x_ra = Reactant.ConcreteRArray(x) + compiled_fn = @compile lux_mlp_bn(x_ra, ps_bn_ra, st_bn_ra) + t = @benchmark $compiled_fn($x_ra, $ps_bn_ra, $st_bn_ra) + append_timing!(bn_results, "Reactant", median(t).time / 1e9) + + # PyTorch (JAX lacks a simple functional BatchNorm) + x_torch = torch.from_numpy(to_row_major(x)) + torch_time = pyconvert(Float64, nn_utils.time_torch_inference(torch_mlp_bn, x_torch)) + append_timing!(bn_results, "PyTorch", torch_time) + + @info "Batch $bs done" +end + +plot_results(bn_results, bn_batch_sizes, "Inference: 7 Layer MLP + BN (relu)") +``` + +## Training + +```julia +bn_train_results = Dict{String, NamedTuple}() + +for bs in train_batch_sizes + x = randn(Float32, 32, bs) + y = randn(Float32, 10, bs) + + opt_state = Optimisers.setup(Adam(1.0f-3), ps_bn) + function lux_bn_step(model, ps, st, opt_state, x, y) + (loss, st_new), back = Zygote.pullback(p -> begin + ypred, st_ = model(x, p, st) + sum(abs2, ypred .- y), st_ + end, ps) + gs = back((one(loss), nothing))[1] + opt_state_new, ps_new = Optimisers.update(opt_state, ps, gs) + ps_new, st_new, opt_state_new, loss + end + lux_bn_step(lux_mlp_bn, ps_bn, st_bn, opt_state, x, y) + t = @benchmark $lux_bn_step($lux_mlp_bn, $ps_bn, $st_bn, $opt_state, $x, $y) + append_timing!(bn_train_results, "Lux+Zygote", median(t).time / 1e9) + + flux_opt = Flux.setup(Adam(1.0f-3), flux_mlp_bn) + Flux.trainmode!(flux_mlp_bn) + function flux_bn_step(model, opt_state, x, y) + loss, grads = Flux.withgradient(m -> sum(abs2, m(x) .- y), model) + Flux.update!(opt_state, model, grads[1]) + loss + end + flux_bn_step(flux_mlp_bn, flux_opt, x, y) + t = @benchmark $flux_bn_step($flux_mlp_bn, $flux_opt, $x, $y) + append_timing!(bn_train_results, "Flux+Zygote", median(t).time / 1e9) + + x_ra = Reactant.ConcreteRArray(x) + y_ra = Reactant.ConcreteRArray(y) + ts_bn = Training.TrainState(lux_mlp_bn, ps_bn_ra, st_bn_ra, Adam(1.0f-3)) + function reactant_bn_step(ts, x, y) + _, loss, _, ts_new = Training.single_train_step!(AutoEnzyme(), MSELoss(), (x, y), ts) + ts_new, loss + end + reactant_bn_step(ts_bn, x_ra, y_ra) + t = @benchmark $reactant_bn_step($ts_bn, $x_ra, $y_ra) + append_timing!(bn_train_results, "Reactant", median(t).time / 1e9) + + # PyTorch + torch_bn_model = nn_utils.TorchMLPBN() + torch_opt = torch.optim.Adam(torch_bn_model.parameters(); lr=1e-3) + torch_loss_fn = nn_utils.tnn.MSELoss() + x_torch = torch.from_numpy(to_row_major(x)) + y_torch = torch.from_numpy(to_row_major(y)) + torch_time = pyconvert(Float64, nn_utils.time_torch_train_step( + torch_bn_model, torch_opt, torch_loss_fn, x_torch, y_torch)) + append_timing!(bn_train_results, "PyTorch", torch_time) + + @info "Training batch $bs done" +end + +plot_results(bn_train_results, train_batch_sizes, "Training Step: 7 Layer MLP + BN (relu)") +``` + +# LeNet 5 Benchmark + +## Setup + +```julia +lux_lenet = Chain( + Conv((5, 5), 1 => 6, relu), MaxPool((2, 2)), + Conv((5, 5), 6 => 16, relu), MaxPool((2, 2)), + FlattenLayer(), Dense(256, 120, relu), Dense(120, 84, relu), Dense(84, 10)) +ps_lenet, st_lenet = Lux.setup(rng, lux_lenet) + +flux_lenet = Flux.Chain( + Flux.Conv((5, 5), 1 => 6, relu), Flux.MaxPool((2, 2)), + Flux.Conv((5, 5), 6 => 16, relu), Flux.MaxPool((2, 2)), + Flux.flatten, Flux.Dense(256, 120, relu), Flux.Dense(120, 84, relu), Flux.Dense(84, 10)) + +torch_lenet = nn_utils.TorchLeNet() +jax_lenet_params = nn_utils.create_jax_lenet_params(jax_random.PRNGKey(2)) + +lenet_batch_sizes = [2, 8, 32, 128] +``` + +## Inference + +```julia +st_lenet_test = Lux.testmode(st_lenet) +Flux.testmode!(flux_lenet) +ps_lenet_ra = ps_lenet |> xdev +st_lenet_ra = Lux.testmode(st_lenet) |> xdev + +lenet_results = Dict{String, NamedTuple}() + +for bs in lenet_batch_sizes + x = randn(Float32, 28, 28, 1, bs) # WHCN + + t = @benchmark $lux_lenet($x, $ps_lenet, $st_lenet_test) + append_timing!(lenet_results, "Lux", median(t).time / 1e9) + + t = @benchmark $flux_lenet($x) + append_timing!(lenet_results, "Flux", median(t).time / 1e9) + + x_ra = Reactant.ConcreteRArray(x) + compiled_fn = @compile lux_lenet(x_ra, ps_lenet_ra, st_lenet_ra) + t = @benchmark $compiled_fn($x_ra, $ps_lenet_ra, $st_lenet_ra) + append_timing!(lenet_results, "Reactant", median(t).time / 1e9) + + # JAX/PyTorch use NCHW + x_py = to_nchw(x) + x_jnp = jnp.array(x_py) + jax_time = pyconvert(Float64, nn_utils.time_jax_inference(nn_utils.jax_lenet_forward, jax_lenet_params, x_jnp)) + append_timing!(lenet_results, "JAX", jax_time) + + x_torch = torch.from_numpy(x_py) + torch_time = pyconvert(Float64, nn_utils.time_torch_inference(torch_lenet, x_torch)) + append_timing!(lenet_results, "PyTorch", torch_time) + + @info "Batch $bs done" +end + +plot_results(lenet_results, lenet_batch_sizes, "Inference: LeNet 5") +``` + +## Training + +```julia +lenet_train_results = Dict{String, NamedTuple}() +lenet_train_batch_sizes = [32, 128] +jax_lenet_train_step = nn_utils.make_jax_lenet_train_step(jax_lenet_params) + +for bs in lenet_train_batch_sizes + x = randn(Float32, 28, 28, 1, bs) + y = randn(Float32, 10, bs) + + opt_state = Optimisers.setup(Adam(1.0f-3), ps_lenet) + function lux_lenet_step(model, ps, st, opt_state, x, y) + (loss, st_new), back = Zygote.pullback(p -> begin + ypred, st_ = model(x, p, st) + sum(abs2, ypred .- y), st_ + end, ps) + gs = back((one(loss), nothing))[1] + opt_state_new, ps_new = Optimisers.update(opt_state, ps, gs) + ps_new, st_new, opt_state_new, loss + end + lux_lenet_step(lux_lenet, ps_lenet, st_lenet, opt_state, x, y) + t = @benchmark $lux_lenet_step($lux_lenet, $ps_lenet, $st_lenet, $opt_state, $x, $y) + append_timing!(lenet_train_results, "Lux+Zygote", median(t).time / 1e9) + + flux_opt = Flux.setup(Adam(1.0f-3), flux_lenet) + Flux.trainmode!(flux_lenet) + function flux_lenet_step(model, opt_state, x, y) + loss, grads = Flux.withgradient(m -> sum(abs2, m(x) .- y), model) + Flux.update!(opt_state, model, grads[1]) + loss + end + flux_lenet_step(flux_lenet, flux_opt, x, y) + t = @benchmark $flux_lenet_step($flux_lenet, $flux_opt, $x, $y) + append_timing!(lenet_train_results, "Flux+Zygote", median(t).time / 1e9) + + x_ra = Reactant.ConcreteRArray(x) + y_ra = Reactant.ConcreteRArray(y) + ts_lenet = Training.TrainState(lux_lenet, ps_lenet_ra, st_lenet_ra, Adam(1.0f-3)) + function reactant_lenet_step(ts, x, y) + _, loss, _, ts_new = Training.single_train_step!(AutoEnzyme(), MSELoss(), (x, y), ts) + ts_new, loss + end + reactant_lenet_step(ts_lenet, x_ra, y_ra) + t = @benchmark $reactant_lenet_step($ts_lenet, $x_ra, $y_ra) + append_timing!(lenet_train_results, "Reactant", median(t).time / 1e9) + + x_py = to_nchw(x) + x_jnp = jnp.array(x_py) + y_py = jnp.array(to_row_major(y)) + jax_time = pyconvert(Float64, nn_utils.time_jax_train_step( + jax_lenet_train_step, jax_lenet_params, x_jnp, y_py)) + append_timing!(lenet_train_results, "JAX", jax_time) + + torch_lenet_model = nn_utils.TorchLeNet() + torch_opt = torch.optim.Adam(torch_lenet_model.parameters(); lr=1e-3) + torch_loss_fn = nn_utils.tnn.MSELoss() + x_torch = torch.from_numpy(x_py) + y_torch = torch.from_numpy(to_row_major(y)) + torch_time = pyconvert(Float64, nn_utils.time_torch_train_step( + torch_lenet_model, torch_opt, torch_loss_fn, x_torch, y_torch)) + append_timing!(lenet_train_results, "PyTorch", torch_time) + + @info "Training batch $bs done" +end + +plot_results(lenet_train_results, lenet_train_batch_sizes, "Training Step: LeNet 5") +``` + +# Small ResNet Benchmark + +## Setup + +```julia +function resnet_block(channels) + main = Chain( + Conv((3, 3), channels => channels; pad=1, use_bias=false), + BatchNorm(channels, relu), + Conv((3, 3), channels => channels; pad=1, use_bias=false), + BatchNorm(channels)) + Parallel(+, main, NoOpLayer()) +end + +lux_resnet = Chain( + Conv((3, 3), 3 => 64; pad=1, use_bias=false), BatchNorm(64, relu), + resnet_block(64), + Conv((3, 3), 64 => 128; stride=2, pad=1, use_bias=false), BatchNorm(128, relu), + Conv((3, 3), 128 => 128; pad=1, use_bias=false), BatchNorm(128), + GlobalMeanPool(), FlattenLayer(), Dense(128, 10)) +ps_resnet, st_resnet = Lux.setup(rng, lux_resnet) + +torch_resnet = nn_utils.TorchSmallResNet() + +resnet_batch_sizes = [2, 8, 32] +``` + +## Inference + +```julia +st_resnet_test = Lux.testmode(st_resnet) +ps_resnet_ra = ps_resnet |> xdev +st_resnet_ra = Lux.testmode(st_resnet) |> xdev + +resnet_results = Dict{String, NamedTuple}() + +for bs in resnet_batch_sizes + x = randn(Float32, 32, 32, 3, bs) # WHCN + + t = @benchmark $lux_resnet($x, $ps_resnet, $st_resnet_test) + append_timing!(resnet_results, "Lux", median(t).time / 1e9) + + x_ra = Reactant.ConcreteRArray(x) + compiled_fn = @compile lux_resnet(x_ra, ps_resnet_ra, st_resnet_ra) + t = @benchmark $compiled_fn($x_ra, $ps_resnet_ra, $st_resnet_ra) + append_timing!(resnet_results, "Reactant", median(t).time / 1e9) + + x_py = to_nchw(x) + x_torch = torch.from_numpy(x_py) + torch_time = pyconvert(Float64, nn_utils.time_torch_inference(torch_resnet, x_torch)) + append_timing!(resnet_results, "PyTorch", torch_time) + + @info "Batch $bs done" +end + +plot_results(resnet_results, resnet_batch_sizes, "Inference: Small ResNet") +``` + +## Training + +```julia +resnet_train_results = Dict{String, NamedTuple}() +resnet_train_batch_sizes = [8, 32] + +for bs in resnet_train_batch_sizes + x = randn(Float32, 32, 32, 3, bs) + y = randn(Float32, 10, bs) + + opt_state = Optimisers.setup(Adam(1.0f-3), ps_resnet) + function lux_resnet_step(model, ps, st, opt_state, x, y) + (loss, st_new), back = Zygote.pullback(p -> begin + ypred, st_ = model(x, p, st) + sum(abs2, ypred .- y), st_ + end, ps) + gs = back((one(loss), nothing))[1] + opt_state_new, ps_new = Optimisers.update(opt_state, ps, gs) + ps_new, st_new, opt_state_new, loss + end + lux_resnet_step(lux_resnet, ps_resnet, st_resnet, opt_state, x, y) + t = @benchmark $lux_resnet_step($lux_resnet, $ps_resnet, $st_resnet, $opt_state, $x, $y) + append_timing!(resnet_train_results, "Lux+Zygote", median(t).time / 1e9) + + x_ra = Reactant.ConcreteRArray(x) + y_ra = Reactant.ConcreteRArray(y) + ts_resnet = Training.TrainState(lux_resnet, ps_resnet_ra, st_resnet_ra, Adam(1.0f-3)) + function reactant_resnet_step(ts, x, y) + _, loss, _, ts_new = Training.single_train_step!(AutoEnzyme(), MSELoss(), (x, y), ts) + ts_new, loss + end + reactant_resnet_step(ts_resnet, x_ra, y_ra) + t = @benchmark $reactant_resnet_step($ts_resnet, $x_ra, $y_ra) + append_timing!(resnet_train_results, "Reactant", median(t).time / 1e9) + + torch_rn = nn_utils.TorchSmallResNet() + torch_opt = torch.optim.Adam(torch_rn.parameters(); lr=1e-3) + torch_loss_fn = nn_utils.tnn.MSELoss() + x_py = to_nchw(x) + x_torch = torch.from_numpy(x_py) + y_torch = torch.from_numpy(to_row_major(y)) + torch_time = pyconvert(Float64, nn_utils.time_torch_train_step( + torch_rn, torch_opt, torch_loss_fn, x_torch, y_torch)) + append_timing!(resnet_train_results, "PyTorch", torch_time) + + @info "Training batch $bs done" +end + +plot_results(resnet_train_results, resnet_train_batch_sizes, "Training Step: Small ResNet") +``` + +## Appendix + +```julia +using InteractiveUtils +InteractiveUtils.versioninfo() + +println() +println("Python versions:") +println(" JAX: ", pyconvert(String, jax.__version__)) +println(" PyTorch: ", pyconvert(String, torch.__version__)) +``` diff --git a/docs/pages.jl b/docs/pages.jl index 8bdffffc1..0871ae7b3 100644 --- a/docs/pages.jl +++ b/docs/pages.jl @@ -37,62 +37,63 @@ for folder in readdir(benchmarksdir) end -# The result is in alphabetical order, change to the wanted order - -section_titles = [ - "MultiLanguage" => "Multi-Language Wrapper Benchmarks", - "LinearSolve" => "Linear Solvers", - "IntervalNonlinearProblem" => "Interval Rootfinding", - "NonlinearProblem" => "Nonlinear Solvers", - "AutomaticDifferentiation" => "Automatic Differentiation", - "AutomaticDifferentiationSparse" => "Sparse Automatic Differentiation", - "NonStiffODE" => "Non-Stiff Ordinary Differential Equations (ODEs)", - "StiffODE" => "Stiff Ordinary Differential Equations (ODEs)", - "Bio" => "Biological Differential Equations", - "AstroChem" => "Astrochemistry Differential Equations", - "DAE" => "Differential-Algebraic Equations (DAEs)", - "NonStiffBVP" => "Non-Stiff Boundary Value Problems (BVPs)", - "StiffBVP" => "Stiff Boundary Value Problems (BVPs)", - "ModelingToolkit" => "ModelingToolkit Acausal Modeling / Symbolic-Numeric Benchmarks", - "SimpleHandwrittenPDE" => "Simple Handwritten Partial Differential Equations (PDEs) as ODEs", - "ComplicatedPDE" => "Complicated Partial Differential Equations (PDEs)", - "DynamicalODE" => "Dynamical ODEs (Hamiltonian and Second Order)", - "NBodySimulator" => "N-Body Problem Benchmarks", - "NonStiffSDE" => "Non-Stiff Stochastic Differential Equations (SDEs)", - "StiffSDE" => "Stiff Stochastic Differential Equations (SDEs)", - "NonStiffDDE" => "Non-Stiff Delay Differential Equations (DDEs)", - "StiffDDE" => "Stiff Delay Differential equations (DDEs)", - "Jumps" => "Jump Process Equations (Gillespie Benchmarks)", - "HybridJumps" => "Hybrid (Time-Dependent) Jump Processes", - "Optimization" => "Nonlinear Optimization Solver Benchmarks", - "OptimizationCUTEst" => "CUTEst Optimization Solver Benchmarks", - "GlobalOptimization" => "Global Optimization Benchmarks", - "OptimizationFrameworks" => "Optimization Framework Benchmarks", - "ParameterEstimation" => "Parameter Estimation and Inverse Problem Benchmarks", - "BayesianInference" => "Bayesian Inference and Probabilistic Inverse Problem Benchmarks", - "MethodOfLinesPDE" => "MethodOfLines.jl Partial Differential Equation (PDE) Formulations", - "PINNErrorsVsTime" => "Physics-Informed Neural Network (Neural Network PDE Solver) Cost Function Benchmarks", - "PINNOptimizers" => "Physics-Informed Neural Network (Neural Network PDE Solver) Optimizer Benchmarks", - "AdaptiveSDE" => "SDE Adaptivity Benchmarks", - "Surrogates" => "Surrogate Benchmarks", - "Symbolics" => "Symbolic Manipulation Benchmarks" -] - -renamed_index = "SciMLBenchmarks.jl: Benchmarks for Scientific Machine Learning (SciML) and Equation Solvers" => - pages[1][2] -remaining_pages = Dict{String,Any}(pages[2:end]) -ordered_pages = Any[renamed_index] - -for (folder, title) in section_titles - if haskey(remaining_pages, folder) - push!(ordered_pages, title => remaining_pages[folder]) - delete!(remaining_pages, folder) - end -end - -# Keep docs generation robust when new benchmark folders are added. -for folder in sort!(collect(keys(remaining_pages))) - push!(ordered_pages, folder => remaining_pages[folder]) -end - -pages = ordered_pages +# The result is in alphabetical order, change to the wanted order + +section_titles = [ + "MultiLanguage" => "Multi-Language Wrapper Benchmarks", + "LinearSolve" => "Linear Solvers", + "IntervalNonlinearProblem" => "Interval Rootfinding", + "NonlinearProblem" => "Nonlinear Solvers", + "AutomaticDifferentiation" => "Automatic Differentiation", + "AutomaticDifferentiationSparse" => "Sparse Automatic Differentiation", + "NonStiffODE" => "Non-Stiff Ordinary Differential Equations (ODEs)", + "StiffODE" => "Stiff Ordinary Differential Equations (ODEs)", + "Bio" => "Biological Differential Equations", + "AstroChem" => "Astrochemistry Differential Equations", + "DAE" => "Differential-Algebraic Equations (DAEs)", + "NonStiffBVP" => "Non-Stiff Boundary Value Problems (BVPs)", + "StiffBVP" => "Stiff Boundary Value Problems (BVPs)", + "ModelingToolkit" => "ModelingToolkit Acausal Modeling / Symbolic-Numeric Benchmarks", + "SimpleHandwrittenPDE" => "Simple Handwritten Partial Differential Equations (PDEs) as ODEs", + "ComplicatedPDE" => "Complicated Partial Differential Equations (PDEs)", + "DynamicalODE" => "Dynamical ODEs (Hamiltonian and Second Order)", + "NBodySimulator" => "N-Body Problem Benchmarks", + "NonStiffSDE" => "Non-Stiff Stochastic Differential Equations (SDEs)", + "StiffSDE" => "Stiff Stochastic Differential Equations (SDEs)", + "NonStiffDDE" => "Non-Stiff Delay Differential Equations (DDEs)", + "StiffDDE" => "Stiff Delay Differential equations (DDEs)", + "Jumps" => "Jump Process Equations (Gillespie Benchmarks)", + "HybridJumps" => "Hybrid (Time-Dependent) Jump Processes", + "Optimization" => "Nonlinear Optimization Solver Benchmarks", + "OptimizationCUTEst" => "CUTEst Optimization Solver Benchmarks", + "GlobalOptimization" => "Global Optimization Benchmarks", + "OptimizationFrameworks" => "Optimization Framework Benchmarks", + "ParameterEstimation" => "Parameter Estimation and Inverse Problem Benchmarks", + "BayesianInference" => "Bayesian Inference and Probabilistic Inverse Problem Benchmarks", + "MethodOfLinesPDE" => "MethodOfLines.jl Partial Differential Equation (PDE) Formulations", + "PINNErrorsVsTime" => "Physics-Informed Neural Network (Neural Network PDE Solver) Cost Function Benchmarks", + "PINNOptimizers" => "Physics-Informed Neural Network (Neural Network PDE Solver) Optimizer Benchmarks", + "NeuralNetworks" => "Neural Network Framework Benchmarks", + "AdaptiveSDE" => "SDE Adaptivity Benchmarks", + "Surrogates" => "Surrogate Benchmarks", + "Symbolics" => "Symbolic Manipulation Benchmarks" +] + +renamed_index = "SciMLBenchmarks.jl: Benchmarks for Scientific Machine Learning (SciML) and Equation Solvers" => + pages[1][2] +remaining_pages = Dict{String,Any}(pages[2:end]) +ordered_pages = Any[renamed_index] + +for (folder, title) in section_titles + if haskey(remaining_pages, folder) + push!(ordered_pages, title => remaining_pages[folder]) + delete!(remaining_pages, folder) + end +end + +# Keep docs generation robust when new benchmark folders are added. +for folder in sort!(collect(keys(remaining_pages))) + push!(ordered_pages, folder => remaining_pages[folder]) +end + +pages = ordered_pages