diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 8f72f97..1c30f34 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -23,9 +23,8 @@ jobs: fail-fast: false matrix: version: - - '1.10' - - 'lts' - '1' + - 'lts' os: - ubuntu-latest #- macOS-latest @@ -49,6 +48,8 @@ jobs: - uses: julia-actions/julia-buildpkg@v1 - uses: julia-actions/julia-runtest@v1 continue-on-error: ${{ matrix.version == 'nightly' }} + env: + SKIP_AQUA_JET: ${{ matrix.version != '1' && 'true' || '' }} - uses: julia-actions/julia-processcoverage@v1 - uses: codecov/codecov-action@v3 docs: diff --git a/.gitignore b/.gitignore index 918691c..2134124 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,13 @@ *.jl.mem /Manifest.toml /docs/build/ +/docs/Manifest.toml LocalPreferences.toml .vscode/settings.json + +# Local logs / artifacts (do not commit) +/doc_build.log +/docs/doc_build.log +/instantiate_mpo_local.log +/test_mpo_local.log +/test_output*.log diff --git a/Project.toml b/Project.toml index 989dd6d..6aabea6 100644 --- a/Project.toml +++ b/Project.toml @@ -4,8 +4,6 @@ version = "0.9.19" authors = ["Simone Foderà ", "Ritter.Marc , Hiroshi Shinaoka and contributors"] [deps] -Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" -JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" MPIPreferences = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" @@ -14,10 +12,8 @@ T4ATensorCI = "14428447-6903-48c7-83df-f2cb08af9918" T4ATensorTrain = "ec6ec972-96ae-4a21-b859-3911b77e305f" [compat] -Aqua = "0.8.14" -JET = "0.11.3" -MPI = "0.20.22" -MPIPreferences = "0.1.11" +MPI = "0.20" +MPIPreferences = "0.1" Random = "1" T4ATensorCI = "0.12" T4ATensorTrain = "0.2" @@ -27,13 +23,10 @@ julia = "1.10" Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" Optim = "429524aa-4258-5aef-a3af-852621145aeb" +Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [targets] -test = ["Aqua", "Test", "Random", "Zygote", "Optim", "JET"] - -[sources] -T4ATensorCI = {path = "../T4ATensorCI.jl"} -T4ATensorTrain = {path = "../T4ATensorTrain.jl"} +test = ["Test", "Random", "Zygote", "Optim", "Pkg"] diff --git a/doc_build.log b/doc_build.log deleted file mode 100644 index f616d3a..0000000 --- a/doc_build.log +++ /dev/null @@ -1,28 +0,0 @@ -[ Info: SetupBuildDirectory: setting up build directory. -[ Info: Doctest: running doctests. -[ Info: ExpandTemplates: expanding markdown templates. -┌ Warning: Invalid negative or zero value 0.0 found at series index 12 for log10 based yscale -└ @ Plots ~/.julia/packages/Plots/ywg93/src/utils.jl:105 -┌ Warning: Invalid negative or zero value 0.0 found at series index 12 for log10 based yscale -└ @ Plots ~/.julia/packages/Plots/ywg93/src/utils.jl:105 -┌ Warning: Invalid negative or zero value 0.0 found at series index 12 for log10 based yscale -└ @ Plots ~/.julia/packages/Plots/ywg93/src/utils.jl:105 -[ Info: CrossReferences: building cross-references. -[ Info: CheckDocument: running document checks. -[ Info: Populate: populating indices. -[ Info: RenderDocument: rendering document. -[ Info: HTMLWriter: rendering HTML pages. -┌ Warning: Generated HTML over size_threshold_warn limit: documentation.md -│ Generated file size: 123.9 (KiB) -│ size_threshold_warn: 100.0 (KiB) -│ size_threshold: 200.0 (KiB) -│ HTML file: documentation/index.html -└ @ Documenter.HTMLWriter ~/.julia/packages/Documenter/xvqbW/src/html/HTMLWriter.jl:2003 -┌ Warning: For 2 @example blocks, the 'text/html' representation of the resulting -│ object is above the threshold (example_size_threshold: 8192 bytes). -│ - 2 blocks had 'image/svg+xml' fallback image representation available, using that. -│ On pages: index.md -└ @ Documenter.HTMLWriter ~/.julia/packages/Documenter/xvqbW/src/html/HTMLWriter.jl:915 -[ Info: Automatic `version="0.9.17"` for inventory from ../Project.toml -┌ Warning: Documenter could not auto-detect the building environment. Skipping deployment. -└ @ Documenter ~/.julia/packages/Documenter/xvqbW/src/deployconfig.jl:93 diff --git a/docs/Manifest.toml b/docs/Manifest.toml deleted file mode 100644 index 432fea0..0000000 --- a/docs/Manifest.toml +++ /dev/null @@ -1,1373 +0,0 @@ -# This file is machine-generated - editing it directly is not advised - -julia_version = "1.12.2" -manifest_format = "2.0" -project_hash = "0154ed0591e04757b4a739fc69e4bfcb82a55fcb" - -[[deps.ANSIColoredPrinters]] -git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c" -uuid = "a4c015fc-c6ff-483c-b24f-f7ea428134e9" -version = "0.0.1" - -[[deps.AbstractTrees]] -git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" -uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" -version = "0.4.5" - -[[deps.Adapt]] -deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "7e35fca2bdfba44d797c53dfe63a51fabf39bfc0" -uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "4.4.0" - - [deps.Adapt.extensions] - AdaptSparseArraysExt = "SparseArrays" - AdaptStaticArraysExt = "StaticArrays" - - [deps.Adapt.weakdeps] - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.AliasTables]] -deps = ["PtrArrays", "Random"] -git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" -uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" -version = "1.1.3" - -[[deps.ArgTools]] -uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.2" - -[[deps.ArrayInterface]] -deps = ["Adapt", "LinearAlgebra"] -git-tree-sha1 = "d81ae5489e13bc03567d4fbbb06c546a5e53c857" -uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.22.0" - - [deps.ArrayInterface.extensions] - 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] - 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.Base64]] -uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" -version = "1.11.0" - -[[deps.BitFlags]] -git-tree-sha1 = "0691e34b3bb8be9307330f88d1a3c3f25466c24d" -uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" -version = "0.1.9" - -[[deps.BitIntegers]] -deps = ["Random"] -git-tree-sha1 = "f98cfeaba814d9746617822032d50a31c9926604" -uuid = "c3b6d118-76ef-56ca-8cc7-ebb389d030a1" -version = "0.3.5" - -[[deps.Bzip2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1b96ea4a01afe0ea4090c5c8039690672dd13f2e" -uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" -version = "1.0.9+0" - -[[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 = "fde3bf89aead2e723284a8ff9cdf5b551ed700e8" -uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" -version = "1.18.5+0" - -[[deps.CodecZlib]] -deps = ["TranscodingStreams", "Zlib_jll"] -git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" -uuid = "944b1d66-785c-5afd-91f1-9de20f533193" -version = "0.7.8" - -[[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" - - [deps.ColorVectorSpace.extensions] - SpecialFunctionsExt = "SpecialFunctions" - - [deps.ColorVectorSpace.weakdeps] - SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" - -[[deps.Colors]] -deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] -git-tree-sha1 = "37ea44092930b1811e666c3bc38065d7d87fcc74" -uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" -version = "0.13.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.ConcurrentUtilities]] -deps = ["Serialization", "Sockets"] -git-tree-sha1 = "d9d26935a0bcffc87d2613ce14c527c99fc543fd" -uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" -version = "2.5.0" - -[[deps.Contour]] -git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" -uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" -version = "0.6.3" - -[[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.Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" -version = "1.11.0" - -[[deps.Dbus_jll]] -deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "473e9afc9cf30814eb67ffa5f2db7df82c3ad9fd" -uuid = "ee1fde0b-3d02-5ea6-8484-8dfef6360eab" -version = "1.16.2+0" - -[[deps.DelimitedFiles]] -deps = ["Mmap"] -git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" -uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" -version = "1.9.1" - -[[deps.Distributed]] -deps = ["Random", "Serialization", "Sockets"] -uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" -version = "1.11.0" - -[[deps.DocStringExtensions]] -git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c" -uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" -version = "0.9.5" - -[[deps.Documenter]] -deps = ["ANSIColoredPrinters", "AbstractTrees", "Base64", "CodecZlib", "Dates", "DocStringExtensions", "Downloads", "Git", "IOCapture", "InteractiveUtils", "JSON", "Logging", "Markdown", "MarkdownAST", "Pkg", "PrecompileTools", "REPL", "RegistryInstances", "SHA", "TOML", "Test", "Unicode"] -git-tree-sha1 = "b37458ae37d8bdb643d763451585cd8d0e5b4a9e" -uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4" -version = "1.16.1" - -[[deps.Downloads]] -deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] -uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.7.0" - -[[deps.EllipsisNotation]] -deps = ["StaticArrayInterface"] -git-tree-sha1 = "3507300d4343e8e4ad080ad24e335274c2e297a9" -uuid = "da5c29d0-fa7d-589e-88eb-ea29b0a81949" -version = "1.8.0" - -[[deps.EpollShim_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "8a4be429317c42cfae6a7fc03c31bad1970c310d" -uuid = "2702e6a9-849d-5ed8-8c21-79e8b8f9ee43" -version = "0.0.20230411+1" - -[[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.FFMPEG]] -deps = ["FFMPEG_jll"] -git-tree-sha1 = "95ecf07c2eea562b5adbd0696af6db62c0f52560" -uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" -version = "0.4.5" - -[[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 = "ccc81ba5e42497f4e76553a5545665eed577a663" -uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" -version = "8.0.0+0" - -[[deps.FileWatching]] -uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" -version = "1.11.0" - -[[deps.FixedPointNumbers]] -deps = ["Statistics"] -git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" -uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" -version = "0.8.5" - -[[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.FreeType2_jll]] -deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "2c5512e11c791d1baed2049c5652441b28fc6a31" -uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" -version = "2.13.4+0" - -[[deps.FriBidi_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "7a214fdac5ed5f59a22c2d9a885a16da1c74bbc7" -uuid = "559328eb-81f9-559d-9380-de523a88c83c" -version = "1.0.17+0" - -[[deps.GLFW_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll", "libdecor_jll", "xkbcommon_jll"] -git-tree-sha1 = "fcb0584ff34e25155876418979d4c8971243bb89" -uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" -version = "3.4.0+2" - -[[deps.GR]] -deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Preferences", "Printf", "Qt6Wayland_jll", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "p7zip_jll"] -git-tree-sha1 = "f305bdb91e1f3fcc687944c97f2ede40585b1bd5" -uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" -version = "0.73.19" - - [deps.GR.extensions] - GRIJuliaExt = "IJulia" - - [deps.GR.weakdeps] - IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" - -[[deps.GR_jll]] -deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "FreeType2_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "de439fbc02b9dc0e639e67d7c5bd5811ff3b6f06" -uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" -version = "0.73.19+1" - -[[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.Ghostscript_jll]] -deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Zlib_jll"] -git-tree-sha1 = "38044a04637976140074d0b0621c1edf0eb531fd" -uuid = "61579ee1-b43e-5ca0-a5da-69d92c66a64b" -version = "9.55.1+0" - -[[deps.Git]] -deps = ["Git_LFS_jll", "Git_jll", "JLLWrappers", "OpenSSH_jll"] -git-tree-sha1 = "824a1890086880696fc908fe12a17bcf61738bd8" -uuid = "d7ba0133-e1db-5d97-8f8c-041e4b3a1eb2" -version = "1.5.0" - -[[deps.Git_LFS_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "bb8471f313ed941f299aa53d32a94ab3bee08844" -uuid = "020c3dae-16b3-5ae5-87b3-4cb189e250b2" -version = "3.7.0+0" - -[[deps.Git_jll]] -deps = ["Artifacts", "Expat_jll", "JLLWrappers", "LibCURL_jll", "Libdl", "Libiconv_jll", "OpenSSL_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "b6a684587ebe896d9f68ae777f648205940f0f70" -uuid = "f8c6e375-362e-5223-8a59-34ff63f689eb" -version = "2.51.3+0" - -[[deps.Glib_jll]] -deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "50c11ffab2a3d50192a228c313f05b5b5dc5acb2" -uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.86.0+0" - -[[deps.Graphite2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "8a6dbda1fd736d60cc477d99f2e7a042acfa46e8" -uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" -version = "1.3.15+0" - -[[deps.Grisu]] -git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" -uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" -version = "1.0.2" - -[[deps.HTTP]] -deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] -git-tree-sha1 = "5e6fe50ae7f23d171f44e311c2960294aaa0beb5" -uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" -version = "1.10.19" - -[[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.Hwloc_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "XML2_jll", "Xorg_libpciaccess_jll"] -git-tree-sha1 = "3d468106a05408f9f7b6f161d9e7715159af247b" -uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" -version = "2.12.2+0" - -[[deps.IOCapture]] -deps = ["Logging", "Random"] -git-tree-sha1 = "0ee181ec08df7d7c911901ea38baf16f755114dc" -uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" -version = "1.0.0" - -[[deps.IfElse]] -git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" -uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" -version = "0.1.1" - -[[deps.InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" -version = "1.11.0" - -[[deps.IrrationalConstants]] -git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758" -uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" -version = "0.2.6" - -[[deps.JLFzf]] -deps = ["REPL", "Random", "fzf_jll"] -git-tree-sha1 = "82f7acdc599b65e0f8ccd270ffa1467c21cb647b" -uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" -version = "0.1.11" - -[[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 = "5b6bb73f555bc753a6153deec3717b8904f5551c" -uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "1.3.0" - - [deps.JSON.extensions] - JSONArrowExt = ["ArrowTypes"] - - [deps.JSON.weakdeps] - ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" - -[[deps.JpegTurbo_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "4255f0032eafd6451d707a51d5f0248b8a165e4d" -uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "3.1.3+0" - -[[deps.JuliaSyntaxHighlighting]] -deps = ["StyledStrings"] -uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011" -version = "1.12.0" - -[[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.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.Latexify]] -deps = ["Format", "Ghostscript_jll", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Requires"] -git-tree-sha1 = "44f93c47f9cd6c7e431f2f2091fcba8f01cd7e8f" -uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" -version = "0.16.10" - - [deps.Latexify.extensions] - DataFramesExt = "DataFrames" - SparseArraysExt = "SparseArrays" - SymEngineExt = "SymEngine" - TectonicExt = "tectonic_jll" - - [deps.Latexify.weakdeps] - DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" - tectonic_jll = "d7dd28d6-a5e6-559c-9131-7eb760cdacc5" - -[[deps.LazilyInitializedFields]] -git-tree-sha1 = "0f2da712350b020bc3957f269c9caad516383ee0" -uuid = "0e77f7df-68c5-4e49-93ce-4cd80f5598bf" -version = "1.3.0" - -[[deps.LazyArtifacts]] -deps = ["Artifacts", "Pkg"] -uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" -version = "1.11.0" - -[[deps.LibCURL]] -deps = ["LibCURL_jll", "MozillaCACerts_jll"] -uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" -version = "0.6.4" - -[[deps.LibCURL_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "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.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 = "3acf07f130a76f87c041cfb2ff7d7284ca67b072" -uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" -version = "2.41.2+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 = "2a7a12fc0a4e7fb773450d17975322aa77142106" -uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" -version = "2.41.2+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.MPI]] -deps = ["Distributed", "DocStringExtensions", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "PkgVersion", "PrecompileTools", "Requires", "Serialization", "Sockets"] -git-tree-sha1 = "a61ecf714d71064b766d481ef43c094d4c6e3c52" -uuid = "da04e1cc-30fd-572f-bb4f-1f8673147195" -version = "0.20.23" - - [deps.MPI.extensions] - AMDGPUExt = "AMDGPU" - CUDAExt = "CUDA" - - [deps.MPI.weakdeps] - AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" - CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" - -[[deps.MPICH_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "9341048b9f723f2ae2a72a5269ac2f15f80534dc" -uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" -version = "4.3.2+0" - -[[deps.MPIPreferences]] -deps = ["Libdl", "Preferences"] -git-tree-sha1 = "c105fe467859e7f6e9a852cb15cb4301126fac07" -uuid = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" -version = "0.1.11" - -[[deps.MPItrampoline_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "e214f2a20bdd64c04cd3e4ff62d3c9be7e969a59" -uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" -version = "5.5.4+0" - -[[deps.MacroTools]] -git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" -uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.16" - -[[deps.Markdown]] -deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] -uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" -version = "1.11.0" - -[[deps.MarkdownAST]] -deps = ["AbstractTrees", "Markdown"] -git-tree-sha1 = "465a70f0fc7d443a00dcdc3267a497397b8a3899" -uuid = "d0879d2d-cac2-40c8-9cee-1863dc0c7391" -version = "0.1.2" - -[[deps.MbedTLS]] -deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] -git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" -uuid = "739be429-bea8-5141-9913-cc70e7f3736d" -version = "1.1.9" - -[[deps.MbedTLS_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "ff69a2b1330bcb730b9ac1ab7dd680176f5896b8" -uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.1010+0" - -[[deps.Measures]] -git-tree-sha1 = "b513cedd20d9c914783d8ad83d08120702bf2c77" -uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" -version = "0.3.3" - -[[deps.MicrosoftMPI_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "bc95bf4149bf535c09602e3acdf950d9b4376227" -uuid = "9237b28f-5490-5468-be7b-bb81f5f5e6cf" -version = "10.1.4+3" - -[[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.MozillaCACerts_jll]] -uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2025.5.20" - -[[deps.NaNMath]] -deps = ["OpenLibm_jll"] -git-tree-sha1 = "9b8215b1ee9e78a293f99797cd31375471b2bcae" -uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "1.1.3" - -[[deps.NetworkOptions]] -uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.3.0" - -[[deps.Ogg_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "b6aa4566bb7ae78498a5e68943863fa8b5231b59" -uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" -version = "1.3.6+0" - -[[deps.OpenBLAS_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] -uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.29+0" - -[[deps.OpenLibm_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.7+0" - -[[deps.OpenMPI_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML", "Zlib_jll"] -git-tree-sha1 = "ab6596a9d8236041dcd59b5b69316f28a8753592" -uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" -version = "5.0.9+0" - -[[deps.OpenSSH_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "OpenSSL_jll", "Zlib_jll"] -git-tree-sha1 = "301412a644646fdc0ad67d0a87487466b491e53d" -uuid = "9bd350c2-7e96-507f-8002-3f2e150b4e1b" -version = "10.2.1+0" - -[[deps.OpenSSL]] -deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "NetworkOptions", "OpenSSL_jll", "Sockets"] -git-tree-sha1 = "386b47442468acfb1add94bf2d85365dea10cbab" -uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" -version = "1.6.0" - -[[deps.OpenSSL_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.5.4+0" - -[[deps.Opus_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "c392fc5dd032381919e3b22dd32d6443760ce7ea" -uuid = "91d4177d-7536-5919-b921-800302f37372" -version = "1.5.2+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.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.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.0" -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.PlotThemes]] -deps = ["PlotUtils", "Statistics"] -git-tree-sha1 = "41031ef3a1be6f5bbbf3e8073f210556daeae5ca" -uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" -version = "3.3.0" - -[[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.Plots]] -deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "PrecompileTools", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "TOML", "UUIDs", "UnicodeFun", "Unzip"] -git-tree-sha1 = "7b990898534ea9797bf9bf21bd086850e5d9f817" -uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" -version = "1.41.2" - - [deps.Plots.extensions] - FileIOExt = "FileIO" - GeometryBasicsExt = "GeometryBasics" - IJuliaExt = "IJulia" - ImageInTerminalExt = "ImageInTerminal" - UnitfulExt = "Unitful" - - [deps.Plots.weakdeps] - FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" - GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" - IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" - ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" - Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" - -[[deps.PrecompileTools]] -deps = ["Preferences"] -git-tree-sha1 = "07a921781cab75691315adc645096ed5e370cb77" -uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.3.3" - -[[deps.Preferences]] -deps = ["TOML"] -git-tree-sha1 = "0f27480397253da18fe2c12a4ba4eb9eb208bf3d" -uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.5.0" - -[[deps.Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" -version = "1.11.0" - -[[deps.PtrArrays]] -git-tree-sha1 = "1d36ef11a9aaf1e8b74dacc6a731dd1de8fd493d" -uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" -version = "1.3.0" - -[[deps.Qt6Base_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Vulkan_Loader_jll", "Xorg_libSM_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_cursor_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "libinput_jll", "xkbcommon_jll"] -git-tree-sha1 = "34f7e5d2861083ec7596af8b8c092531facf2192" -uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56" -version = "6.8.2+2" - -[[deps.Qt6Declarative_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll", "Qt6ShaderTools_jll"] -git-tree-sha1 = "da7adf145cce0d44e892626e647f9dcbe9cb3e10" -uuid = "629bc702-f1f5-5709-abd5-49b8460ea067" -version = "6.8.2+1" - -[[deps.Qt6ShaderTools_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll"] -git-tree-sha1 = "9eca9fc3fe515d619ce004c83c31ffd3f85c7ccf" -uuid = "ce943373-25bb-56aa-8eca-768745ed7b5a" -version = "6.8.2+1" - -[[deps.Qt6Wayland_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll", "Qt6Declarative_jll"] -git-tree-sha1 = "8f528b0851b5b7025032818eb5abbeb8a736f853" -uuid = "e99dba38-086e-5de3-a5b1-6e4c66e897c3" -version = "6.8.2+2" - -[[deps.QuadGK]] -deps = ["DataStructures", "LinearAlgebra"] -git-tree-sha1 = "9da16da70037ba9d701192e27befedefb91ec284" -uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" -version = "2.11.2" - - [deps.QuadGK.extensions] - QuadGKEnzymeExt = "Enzyme" - - [deps.QuadGK.weakdeps] - Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" - -[[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.RecipesBase]] -deps = ["PrecompileTools"] -git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" -uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" -version = "1.3.4" - -[[deps.RecipesPipeline]] -deps = ["Dates", "NaNMath", "PlotUtils", "PrecompileTools", "RecipesBase"] -git-tree-sha1 = "45cf9fd0ca5839d06ef333c8201714e888486342" -uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" -version = "0.6.12" - -[[deps.Reexport]] -git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" -uuid = "189a3867-3050-52da-a836-e630ba90ab69" -version = "1.2.2" - -[[deps.RegistryInstances]] -deps = ["LazilyInitializedFields", "Pkg", "TOML", "Tar"] -git-tree-sha1 = "ffd19052caf598b8653b99404058fce14828be51" -uuid = "2792f1a3-b283-48e8-9a74-f99dce5104f3" -version = "0.1.0" - -[[deps.RelocatableFolders]] -deps = ["SHA", "Scratch"] -git-tree-sha1 = "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.SHA]] -uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" -version = "0.7.0" - -[[deps.SciMLPublic]] -git-tree-sha1 = "ed647f161e8b3f2973f24979ec074e8d084f1bee" -uuid = "431bcebd-1456-4ced-9d72-93c2757fff0b" -version = "1.0.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.Showoff]] -deps = ["Dates", "Grisu"] -git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" -uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" -version = "1.0.3" - -[[deps.SimpleBufferStream]] -git-tree-sha1 = "f305871d2f381d21527c770d4788c06c097c9bc1" -uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" -version = "1.2.0" - -[[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.StableRNGs]] -deps = ["Random"] -git-tree-sha1 = "4f96c596b8c8258cc7d3b19797854d368f243ddc" -uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" -version = "1.0.4" - -[[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", "Static"] -git-tree-sha1 = "96381d50f1ce85f2663584c8e886a6ca97e60554" -uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" -version = "1.8.0" - - [deps.StaticArrayInterface.extensions] - StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" - StaticArrayInterfaceStaticArraysExt = "StaticArrays" - - [deps.StaticArrayInterface.weakdeps] - OffsetArrays = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[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 = "9d72a13a3f4dd3795a195ac5a44d7d6ff5f552ff" -uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" -version = "1.7.1" - -[[deps.StatsBase]] -deps = ["AliasTables", "DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "064b532283c97daae49e544bb9cb413c26511f8c" -uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.8" - -[[deps.StructUtils]] -deps = ["Dates", "UUIDs"] -git-tree-sha1 = "79529b493a44927dd5b13dde1c7ce957c2d049e4" -uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" -version = "2.6.0" - - [deps.StructUtils.extensions] - StructUtilsMeasurementsExt = ["Measurements"] - StructUtilsTablesExt = ["Tables"] - - [deps.StructUtils.weakdeps] - Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" - Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" - -[[deps.StyledStrings]] -uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b" -version = "1.11.0" - -[[deps.SuiteSparse_jll]] -deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] -uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.8.3+2" - -[[deps.T4AMPOContractions]] -deps = ["BitIntegers", "EllipsisNotation", "LinearAlgebra", "MPI", "QuadGK", "Random"] -path = "/Users/hiroshi/projects/JuliaUmbrella/T4AMPOContractions.jl" -uuid = "953bfbbc-cb66-4acc-a854-9589b1f489b2" -version = "0.9.17" - -[[deps.TOML]] -deps = ["Dates"] -uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.3" - -[[deps.Tar]] -deps = ["ArgTools", "SHA"] -uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -version = "1.10.0" - -[[deps.TensorCore]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" -uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" -version = "0.1.1" - -[[deps.TensorCrossInterpolation]] -deps = ["BitIntegers", "EllipsisNotation", "LinearAlgebra", "QuadGK", "Random"] -git-tree-sha1 = "7d2b129394b1f92f01f02c35deadf1f96a7e85af" -uuid = "b261b2ec-6378-4871-b32e-9173bb050604" -version = "0.9.18" - - [deps.TensorCrossInterpolation.extensions] - TCIITensorConversion = ["ITensors", "ITensorMPS"] - - [deps.TensorCrossInterpolation.weakdeps] - ITensorMPS = "0d1a4710-d33b-49a5-8f18-73bdf49b47e2" - ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5" - -[[deps.Test]] -deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" -version = "1.11.0" - -[[deps.TranscodingStreams]] -git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" -uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.11.3" - -[[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.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.Unzip]] -git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78" -uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" -version = "0.2.0" - -[[deps.Vulkan_Loader_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Wayland_jll", "Xorg_libX11_jll", "Xorg_libXrandr_jll", "xkbcommon_jll"] -git-tree-sha1 = "2f0486047a07670caad3a81a075d2e518acc5c59" -uuid = "a44049a8-05dd-5a78-86c9-5fde0876e88c" -version = "1.3.243+0" - -[[deps.Wayland_jll]] -deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll"] -git-tree-sha1 = "96478df35bbc2f3e1e791bc7a3d0eeee559e60e9" -uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" -version = "1.24.0+0" - -[[deps.XML2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "80d3930c6347cfce7ccf96bd3bafdf079d9c0390" -uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.13.9+0" - -[[deps.XZ_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "fee71455b0aaa3440dfdd54a9a36ccef829be7d4" -uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.8.1+0" - -[[deps.Xorg_libICE_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "a3ea76ee3f4facd7a64684f9af25310825ee3668" -uuid = "f67eecfb-183a-506d-b269-f58e52b52d7c" -version = "1.1.2+0" - -[[deps.Xorg_libSM_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libICE_jll"] -git-tree-sha1 = "9c7ad99c629a44f81e7799eb05ec2746abb5d588" -uuid = "c834827a-8449-5923-a945-d239c165b7dd" -version = "1.2.6+0" - -[[deps.Xorg_libX11_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] -git-tree-sha1 = "b5899b25d17bf1889d25906fb9deed5da0c15b3b" -uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" -version = "1.8.12+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_libXcursor_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] -git-tree-sha1 = "6c74ca84bbabc18c4547014765d194ff0b4dc9da" -uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" -version = "1.2.4+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 = "a4c0ee07ad36bf8bbce1c3bb52d21fb1e0b987fb" -uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" -version = "1.3.7+0" - -[[deps.Xorg_libXfixes_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] -git-tree-sha1 = "75e00946e43621e09d431d9b95818ee751e6b2ef" -uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" -version = "6.0.2+0" - -[[deps.Xorg_libXi_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] -git-tree-sha1 = "a376af5c7ae60d29825164db40787f15c80c7c54" -uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" -version = "1.8.3+0" - -[[deps.Xorg_libXinerama_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll"] -git-tree-sha1 = "a5bc75478d323358a90dc36766f3c99ba7feb024" -uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" -version = "1.1.6+0" - -[[deps.Xorg_libXrandr_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXrender_jll"] -git-tree-sha1 = "aff463c82a773cb86061bce8d53a0d976854923e" -uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" -version = "1.5.5+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_libpciaccess_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "4909eb8f1cbf6bd4b1c30dd18b2ead9019ef2fad" -uuid = "a65dc6b1-eb27-53a1-bb3e-dea574b5389e" -version = "0.18.1+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_libxkbfile_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] -git-tree-sha1 = "e3150c7400c41e207012b41659591f083f3ef795" -uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" -version = "1.1.3+0" - -[[deps.Xorg_xcb_util_cursor_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_jll", "Xorg_xcb_util_renderutil_jll"] -git-tree-sha1 = "9750dc53819eba4e9a20be42349a6d3b86c7cdf8" -uuid = "e920d4aa-a673-5f3a-b3d7-f755a4d47c43" -version = "0.1.6+0" - -[[deps.Xorg_xcb_util_image_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] -git-tree-sha1 = "f4fc02e384b74418679983a97385644b67e1263b" -uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" -version = "0.4.1+0" - -[[deps.Xorg_xcb_util_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll"] -git-tree-sha1 = "68da27247e7d8d8dafd1fcf0c3654ad6506f5f97" -uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" -version = "0.4.1+0" - -[[deps.Xorg_xcb_util_keysyms_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] -git-tree-sha1 = "44ec54b0e2acd408b0fb361e1e9244c60c9c3dd4" -uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" -version = "0.4.1+0" - -[[deps.Xorg_xcb_util_renderutil_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] -git-tree-sha1 = "5b0263b6d080716a02544c55fdff2c8d7f9a16a0" -uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" -version = "0.3.10+0" - -[[deps.Xorg_xcb_util_wm_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] -git-tree-sha1 = "f233c83cad1fa0e70b7771e0e21b061a116f2763" -uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" -version = "0.4.2+0" - -[[deps.Xorg_xkbcomp_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"] -git-tree-sha1 = "801a858fc9fb90c11ffddee1801bb06a738bda9b" -uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" -version = "1.4.7+0" - -[[deps.Xorg_xkeyboard_config_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xkbcomp_jll"] -git-tree-sha1 = "00af7ebdc563c9217ecc67776d1bbf037dbcebf4" -uuid = "33bec58e-1273-512f-9401-5d533626f822" -version = "2.44.0+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.eudev_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "c3b0e6196d50eab0c5ed34021aaa0bb463489510" -uuid = "35ca27e7-8b34-5b7f-bca9-bdc33f59eb06" -version = "3.2.14+0" - -[[deps.fzf_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "b6a34e0e0960190ac2a4363a1bd003504772d631" -uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" -version = "0.61.1+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.libdecor_jll]] -deps = ["Artifacts", "Dbus_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pango_jll", "Wayland_jll", "xkbcommon_jll"] -git-tree-sha1 = "9bf7903af251d2050b467f76bdbe57ce541f7f4f" -uuid = "1183f4f0-6f2a-5f1a-908b-139f9cdfea6f" -version = "0.2.2+0" - -[[deps.libevdev_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "56d643b57b188d30cccc25e331d416d3d358e557" -uuid = "2db6ffa8-e38f-5e21-84af-90c45d0032cc" -version = "1.13.4+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.libinput_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "eudev_jll", "libevdev_jll", "mtdev_jll"] -git-tree-sha1 = "91d05d7f4a9f67205bd6cf395e488009fe85b499" -uuid = "36db933b-70db-51c0-b978-0f229ee0e533" -version = "1.28.1+0" - -[[deps.libpng_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "5cb3c5d039f880c0b3075803c8bf45cb95ae1e91" -uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.51+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.mtdev_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "b4d631fd51f2e9cdd93724ae25b2efc198b059b1" -uuid = "009596ad-96f7-51b1-9f1b-5ce2d5e8a71e" -version = "1.1.7+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.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" - -[[deps.xkbcommon_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] -git-tree-sha1 = "fbf139bce07a534df0e699dbb5f5cc9346f95cc1" -uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" -version = "1.9.2+0" diff --git a/docs/Project.toml b/docs/Project.toml index a48f7d0..723f84e 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -4,7 +4,7 @@ ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5" LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" T4AMPOContractions = "953bfbbc-cb66-4acc-a854-9589b1f489b2" -TensorCrossInterpolation = "b261b2ec-6378-4871-b32e-9173bb050604" +T4ATensorCI = "14428447-6903-48c7-83df-f2cb08af9918" [weakdeps] ITensorMPS = "0d1a4710-d33b-49a5-8f18-73bdf49b47e2" diff --git a/docs/make.jl b/docs/make.jl index b4eb084..bd1fd95 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -13,9 +13,12 @@ makedocs(; assets=String[]), pages=[ "Home" => "index.md", - "Documentation" => "documentation.md", - "Extensions" => "extensions.md", - ] + "API Reference" => "documentation.md", + "Examples" => "extensions.md", + ], + checkdocs=:none, + linkcheck=false, + warnonly=[:cross_references] ) deploydocs(; diff --git a/docs/src/documentation.md b/docs/src/documentation.md index 99648c2..da7b368 100644 --- a/docs/src/documentation.md +++ b/docs/src/documentation.md @@ -1,63 +1,9 @@ -# Documentation +# API Reference -Documentation of all types and methods in module [T4AMPOContractions](https://github.com/tensor4all/T4AMPOContractions.jl). +Complete documentation of all exported functions and types. -## Matrix approximation +## MPO Contraction - -### Matrix cross interpolation (MCI) -```@autodocs -Modules = [T4AMPOContractions] -Pages = ["matrixci.jl"] -``` - -### Adaptive cross approximation (ACA) -```@autodocs -Modules = [T4AMPOContractions] -Pages = ["matrixaca.jl"] -``` - -### Rank-revealing LU decomposition (rrLU) -```@autodocs -Modules = [T4AMPOContractions] -Pages = ["matrixlu.jl", "matrixluci.jl"] +```@docs +contract ``` - -## Tensor trains and tensor cross Interpolation - -### Tensor train (TT) -```@autodocs -Modules = [T4AMPOContractions] -Pages = ["abstracttensortrain.jl", "tensortrain.jl", "contraction.jl"] -``` - -### Tensor cross interpolation (TCI) -Note: In most cases, it is advantageous to use [`T4AMPOContractions.TensorCI2`](@ref) instead. -```@autodocs -Modules = [T4AMPOContractions] -Pages = ["tensorci1.jl", "indexset.jl", "sweepstrategies.jl"] -``` - -### Tensor cross interpolation 2 (TCI2) -```@autodocs -Modules = [T4AMPOContractions] -Pages = ["tensorci2.jl", "globalpivotfinder.jl"] -``` - -### Integration -```@autodocs -Modules = [T4AMPOContractions] -Pages = ["integration.jl"] -``` - -## Helpers and utility methods -```@autodocs -Modules = [T4AMPOContractions] -Pages = ["cachedfunction.jl", "batcheval.jl", "util.jl", "globalsearch.jl"] -``` - -## Parallel utility -```@autodocs -Modules = [T4AMPOContractions] -Pages = ["mpi.jl"] -``` \ No newline at end of file diff --git a/docs/src/extensions.md b/docs/src/extensions.md index e69de29..3b02c98 100644 --- a/docs/src/extensions.md +++ b/docs/src/extensions.md @@ -0,0 +1,88 @@ +# Examples + +## Basic Contraction + +```julia +using T4AMPOContractions +import T4ATensorCI as TCI + +# Create two simple MPOs +A = TCI.TensorTrain{Float64,4}([...]) # Your MPO tensors +B = TCI.TensorTrain{Float64,4}([...]) + +# Contract using naive algorithm +C = contract(A, B; algorithm=:naive, tolerance=1e-12, maxbonddim=100) +``` + +## Using Different Algorithms + +```julia +# TCI-based contraction +C_tci = contract(A, B; algorithm=:TCI, tolerance=1e-10) + +# Zip-up algorithm with SVD +C_zipup = contract(A, B; algorithm=:zipup, method=:SVD, tolerance=1e-12) + +# Variational fitting (requires SiteTensorTrain) +using T4ATensorTrain +A_site = SiteTensorTrain{4}(A) +B_site = SiteTensorTrain{4}(B) +C_fit = contract(A_site, B_site; algorithm=:fit, nsweeps=4, tolerance=1e-12) +``` + +## Distributed Contraction with MPI + +```julia +using T4AMPOContractions +import T4ATensorCI as TCI + +# Initialize MPI +initializempi() + +# Create MPOs +A = TCI.TensorTrain{Float64,4}(...) +B = TCI.TensorTrain{Float64,4}(...) + +# Convert to InverseTensorTrain for distributed algorithms +using T4ATensorTrain +A_inv = InverseTensorTrain{4}(A) +B_inv = InverseTensorTrain{4}(B) + +# Distributed contraction +C = contract(A_inv, B_inv; + algorithm=:distrfit, + nsweeps=8, + tolerance=1e-12, + synchedinput=false, + synchedoutput=true +) + +# Finalize MPI +finalizempi() +``` + +## Function Application During Contraction + +The `:TCI` algorithm supports applying a function elementwise to the contraction result: + +```julia +# Apply exponential function during contraction +C = contract(A, B; algorithm=:TCI, f=exp, tolerance=1e-10) +``` + +## MPI Utilities + +For distributed algorithms, you need to initialize and finalize MPI: + +```julia +using T4AMPOContractions + +# Initialize MPI (mutes non-root processes by default) +T4AMPOContractions.initializempi() + +# ... your distributed computation ... + +# Finalize MPI +T4AMPOContractions.finalizempi() +``` + diff --git a/docs/src/implementation.md b/docs/src/implementation.md deleted file mode 100644 index e3e2d65..0000000 --- a/docs/src/implementation.md +++ /dev/null @@ -1,72 +0,0 @@ -```@meta -CurrentModule = T4AMPOContractions -``` - -# Implementation - -This document gives an overview to this implementation of the TCI algorithm. -First, we will show how the high-level components work together to produce a -TCI without going into detail; a detailed introduction of each component -follows. - -## Overall structure - -### [`crossinterpolate`](@ref) - -This function takes a target function to be approximated and constructs a TCI up to some specified tolerance using a sweeping algorithm. The steps are as follows: - -- Initialize the TCI structure ([`TensorCI1`](@ref)) using `f(firstpivot)`. -- Iterate for `iter = 1...maxiter` - - If `iter` is odd, sweep forward, else, sweep backward. During the sweep, add one pivot to each link using [`addpivot!`](@ref). - - Update `errornormalization` to the maximum sample so far. - - If `max(pivoterrors) / errornormalization < tolerance`, abort iteration. -- Return the TCI. - -## Initialization - -TODO. - -## Data to keep track of / Glossary of member variables - -TODO. - -## Sweeps - -Sweeps are done by applying [`addpivot!`](@ref) to each link $\ell = 1\ldots\mathscr{L}$ in ascending order for forward sweeps and descending order for backward sweeps. - -### [`addpivot!`](@ref) -This function adds one pivot at bond $\ell$ (in the code, we use `p` instead of $\ell$). This is done as follows: - -- If $\operatorname{rank}(ACA_\ell) \geq \min(nrows(\Pi_\ell), ncols(\Pi_\ell))$: Skip this bond and proceed with the next one, since we're already at full rank. -- Evaluate the error matrix $E \leftarrow \lvert ACA_\ell - \Pi_\ell \rvert$. -- New pivot is at the maximum error $(i, j) \leftarrow \argmax E$ -- Save the last pivot error to `pivoterrors`$_\ell \leftarrow E[i, j]$ -- If $E[i, j] < \tau_{\text{pivot}} (= 10^{-16})$, skip this $\ell$. -- Otherwise, add $(i, j)$ as a new pivot to this bond $\ell$ (see below). - -## Adding a pivot $(i, j)$ to bond $\ell$ - -### [`addpivotcol!`](@ref) and [`addpivotrow!`](@ref) - -To add a pivot, we have to add a row and a column to $T_\ell, P_\ell$ and $T_{\ell + 1}$. Afterwards, we update neighbouring $\Pi$ tensors $\Pi_{\ell-1}$ and $\Pi_{\ell+1}$ for efficiency. - -- Construct an $MCI$ ([`MatrixCI`](@ref)) object with row indices $I$, column indices $J$, columns $C$ and rows $R$, where: - - Row indices $MCI.I \leftarrow \Pi I_\ell [I_{\ell+1}]$ - - Column indices $MCI.J \leftarrow \Pi J_{\ell+1} [J_\ell]$ - - Column vectors $MCI.C \leftarrow \text{reshape}(T_\ell; D_{\ell-1}\times d_\ell, D_{\ell})$ - - Row vectors $MCI.R \leftarrow \text{reshape}(T_{\ell+1}; D_{\ell}, d_{\ell+1} \times D_{\ell+1})$ -- Add the column $j$ to the bond, like this: - - add $j$ to $ACA_\ell$ - - add $j$ to $MCI$ - - push $\Pi J_{\ell+1}[j]$ to $J_\ell$ - - Split the legs of $T_\ell \leftarrow \text{reshape}(MCI.C;D_{\ell-1}, d_\ell, D_{\ell})$ - - Update $P_\ell \leftarrow MCI.P$, where $MCI.P$ is obtained implicitly as a submatrix of $MCI.C$. - - Update columns of $\Pi_{\ell-1}$ -- Add the row $i$ to the bond, like this: - - add $i$ to $ACA_\ell$ - - add $i$ to $MCI$ - - push $\Pi I_\ell[i]$ to $I_{\ell+1}$ - - Update $T_{\ell+1} \leftarrow \text{reshape}(MCI.R; D_\ell, d_{\ell+1}, D_{\ell+1})$ - - Update $P_\ell \leftarrow MCI.P$ - - Update rows of $\Pi_{\ell+1}$. - diff --git a/docs/src/index.md b/docs/src/index.md index 3264d8f..22c7324 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -2,418 +2,66 @@ CurrentModule = T4AMPOContractions ``` -# T4AMPOContractions +# T4AMPOContractions.jl -This is the documentation for [T4AMPOContractions](https://github.com/tensor4all/T4AMPOContractions.jl). +[T4AMPOContractions.jl](https://github.com/tensor4all/T4AMPOContractions.jl) implements efficient algorithms for contracting Matrix Product Operators (MPOs) represented as tensor trains. -With the user manual and usage examples below, users should be able to use this library as a "black box" in most cases. Detailed documentation of (almost) all methods can be found in the [Documentation](@ref) section, and [Implementation](@ref) contains a detailed explanation of this implementation of TCI. +## Installation -## Interpolating functions - -The most convenient way to create a TCI is [`crossinterpolate2`](@ref). For example, consider the lorentzian in 5 dimensions, i.e. $f(\mathbf v) = 1/(1 + \mathbf v^2)$ on a mesh $\mathbf{v} \in \{1, 2, ..., 10\}^5$. -$f$ can be interpolated as follows: -```@example simple -import T4AMPOContractions as TCI -f(v) = 1/(1 + v' * v) -localdims = fill(10, 5) # There are 5 tensor indices, each with values 1...10 -tolerance = 1e-8 -tci, ranks, errors = TCI.crossinterpolate2(Float64, f, localdims; tolerance=tolerance) -println(tci) -``` -Note that the return type of `f` has to be stated explicitly; inferring it automatically is too error-prone. - -To evaluate the TCI approximation, simply call it the same way as the original function. For example, to evaluate it at $(1, 2, 3, 4, 5)^T$, use: -```@example simple -println("Original function: $(f([1, 2, 3, 4, 5]))") -println("TCI approximation: $(tci([1, 2, 3, 4, 5]))") -``` -For easy integration into tensor network algorithms, the tensor train can be converted to ITensors MPS format. If you're using julia version 1.9 or later, an extension is automatically loaded if both `T4AMPOContractions.jl` and `ITensors.jl` are present. -For older versions of julia, use the package using [TCIITensorConversion.jl](https://github.com/tensor4all/tciitensorconversion.jl). - -## Sums and Integrals - -Tensor trains are a way to efficiently obtain sums over all lattice sites, since this sum can be factorized: -```@example simple -allindices = [getindex.(Ref(i), 1:5) for i in CartesianIndices(Tuple(localdims))] -sumorig = sum(f.(allindices)) -println("Sum of original function: $sumorig") - -sumtt = sum(tci) -println("Sum of tensor train: $sumtt") -``` -For further information, see [`sum`](@ref). - -This factorized sum can be used for efficient evaluation of high-dimensional integrals. This is implemented with Gauss-Kronrod quadrature rules in [`integrate`](@ref). For example, the integral -```math -I = 10^3 \int\limits_{[-1, +1]^{10}} d^{10} \vec{x} \, - \cos\!\left(10 \textstyle\sum_{n=1}^{10} x_n^2 \right) - \exp\!\left[-10^{-3}\left(\textstyle\sum_{n=1}^{10} x_n\right)^4\right] -``` -is evaluated by the following code: -```@example simple -function f(x) - return 1e3 * cos(10 * sum(x .^ 2)) * exp(-sum(x)^4 / 1e3) -end -I = TCI.integrate(Float64, f, fill(-1.0, 10), fill(+1.0, 10); GKorder=15, tolerance=1e-8) -println("GK15 integral value: $I") -``` -The argument `GKorder` controls the Gauss-Kronrod quadrature rule used for the integration, and `tolerance` controls the tolerance in the TCI approximation, which is distinct from the tolerance in the integral. For complicated functions, it is recommended to integrate using two different GK rules and to compare the results to get a good estimate of the discretization error. - -## Properties of the TCI object - -After running the code above, `tci` is a [`TensorCI2`](@ref) object that can be interrogated for various properties. The most important ones are the rank (i.e. maximum bond dimension) and the link dimensions: -```@example simple -println("Maximum bond dimension / rank of tci: $(TCI.rank(tci))") -println("Bond dimensions along the links of tci: $(TCI.linkdims(tci))") -``` -The latter can be plotted conveniently: -```@example simple -using Plots, LaTeXStrings -bondindices = 1:length(tci)-1 -plot( - bondindices, - min.(10 .^ bondindices, 10 .^ (length(tci) .- bondindices)), - yscale=:log10, - label="full rank") -plot!(bondindices, TCI.linkdims(tci), label="TCI compression") -xlabel!(L"\ell") -ylabel!(L"D_\ell") -``` -Other methods are documented in the [Tensor cross interpolation (TCI)](@ref) section of the documentation. - -## Checking convergence - -The vectors `ranks` and `errors` contain the pivot errors reached for different maximum bond dimensions. They are intended for convergence checks. The last element of `errors` can be used to check whether the tolerance was met within the maximum number of iterations: -```@example simple -println("Error in last iteration was: $(last(errors))") -println("Is this below tolerance? $(last(errors) < tolerance)") -``` -Plotting `errors` against `ranks` shows convergence behavior. In most cases, convergence will become exponential after some initial iterations. Furthermore, `tci.pivoterrors[D]` contains the error that a truncation to bond dimension `D` would incur. Plotting both, we see tha -```@example simple -plot(ranks, errors, yscale=:log10, seriestype=:scatter) -plot!(tci.pivoterrors / tci.maxsamplevalue, yscale=:log10) -ylims!(1e-10, 2) -xlabel!(L"D_\max") -ylabel!(L"\varepsilon") -``` -Note that the errors are normalized with `tci.maxsamplevalue`, i.e. the maximum function value that was encountered during construction of the tci. This behaviour can be disabled by passing `normalizeerror=false` to [`crossinterpolate2`](@ref). - -## Optimizing the first pivot - -Sometimes, the performance of TCI is suboptimal due to an unfortunate choice of first pivot. In most cases, it is sufficient to choose a first pivot close to structure, e.g. on a maximum of the function. Simply pass the first pivot as a parameter to [`crossinterpolate2`](@ref): ```julia -firstpivot = [1, 2, 3, 4, 5] -tci, ranks, errors = TCI.crossinterpolate2( - Float64, f, localdims, [firstpivot]; tolerance=tolerance -) +using Pkg +Pkg.add("T4AMPOContractions") ``` -If this is not known (or you still have difficulties with bad convergence), the method [`optfirstpivot`](@ref) provides a simple algorithm to find a good first pivot. -```julia -firstpivot = optfirstpivot(f, localdims, [1, 2, 3, 4, 5]) -tci, ranks, errors = TCI.crossinterpolate2( - Float64, f, localdims, [firstpivot]; tolerance=tolerance -) -``` -This algorithm optimizes the given index set (in this case `[1, 2, 3, 4, 5]`) by searching for a maximum absolute value, alternating through the dimensions. If no starting point is given, `[1, 1, ...]` is used. +## Quick Start -## Combing TCI2 and global pivot search -The main algorithm for adding new pivots in TCI2 is the 2-site algorithm, which is local. -The 2-site algorithm alone may miss some regions with high interpolation error. - -The current TCI2 implementation provides the combination of the 2-site algorithm and a global search algorithm to find such regions. -This functionality is activated by default. -In the function [`crossinterpolate2`](@ref), we alternate between a 2-site-update sweep and a global pivot insertion. -After a 2-site-update sweep, we search for index sets with high interpolation errors (> the given tolerance multiplied by the parameter `tolmarginglobalsearch`) and add them to the TCI2 object, and then we continue with a 2-site-update sweep. - -The number of initial points used in one global search is controlled by the parameter `nsearchglobalpivot`. -You may consider increasing this number if the global search is not effective (check the number of pivots found and timings of the global search by setting `verbosity` to a higher value!). -The maximum number of global pivots inserted at once is controlled by the parameter `maxnglobalpivot`. - -A rare failure case is that the global search find the index sets with high interpolation errors, but the 2-site algorithm fails to add these pivots into the TCI2 object. -This will end up adding the same index sets in the next global search, leading to an endless loop. - -## Estimate true interpolation error by random global search -Since most of the TCI update algorithms are local, the true interpolation error is not known. However, the error can be estimated by global searches. This is implemented in the function [`estimatetrueerror`](@ref): - -```julia -pivoterrors = TCI.estimatetrueerror(TCI.TensorTrain(tci), f) -``` - -This function approximately estimates the error that would be reached by repeating a greedy search from a random initial point. -The result is a vector of a found indexset and the corresponding error, sorted by error. The error is the maximum absolute difference between the function and the TT approximation. - -## Caching -During constructing a TCI, the function to be interpolated can be evaluated for the same index set multiple times. -If an evaluation of the function to be interpolated is costly, i.e., takes more than 100 ns, -it may be beneficial to cache the results of function evaluations. -`CachedFunction{T}` provides this functionality. - -We can wrap your function as follows: - -```Julia -import T4AMPOContractions as TCI - -# Local dimensions of TCI -localdims = [2, 2, 2, 2] - -# Function to be interpolated. Evaluation take 2 seconds. -f(x) = (sleep(2); sum(x)) - -# Cached Function. `T` is the return type of the function. -cf = TCI.CachedFunction{Float64}(f, localdims) - -# The first evaluation takes two seconds. The result will be cached. -x = [1, 1, 1, 1] -@time cf(x) - -# Cached value is returned (Really quick!). -@time cf(x) -``` - -## Batch Evalaution -By default, in TCI2, the function to be interpolated is evaluated for a single index at a time. However, there may be a need to parallelize the code by evaluating the function across multiple index sets concurrently using several CPU cores. This type of custom optimization can be achieved through batch evaluation. - -To utilize this feature, your function must inherit from `TCI.BatchEvaluator{T}` and supports two additional types of function calls for evaluating $\mathrm{T}$ (one local index) and $\Pi$ tensors (two local indices): +The main function is [`contract`](@ref), which contracts two MPOs: ```julia -import T4AMPOContractions as TCI -import T4AMPOContractions: MultiIndex - -struct TestFunction{T} <: TCI.BatchEvaluator{T} - localdims::Vector{Int} - function TestFunction{T}(localdims) where {T} - new{T}(localdims) - end -end - -# Evaluation for a single index set -function (obj::TestFunction{T})(indexset::MultiIndex)::T where {T} - return sum(indexset) -end - +using T4AMPOContractions +import T4ATensorCI as TCI -# Evaluaiton of a T tensor with one local index -function (obj::TestFunction{T})(leftindexset::Vector{MultiIndex}, rightindexset::Vector{MultiIndex}, ::Val{1})::Array{T,3} where {T} - if length(leftindexset) * length(rightindexset) == 0 - return Array{T,3}(undef, 0, 0, 0, 0) - end +# Create two MPOs (as TensorTrain{4} objects) +A = TCI.TensorTrain{Float64,4}(...) # Your first MPO +B = TCI.TensorTrain{Float64,4}(...) # Your second MPO - nl = length(leftindexset[1]) - # This can be parallelized if you want - result = [obj(vcat(l, s1, r)) for l in leftindexset, s1 in 1:obj.localdims[nl+1], r in rightindexset] - return reshape(result, length(leftindexset), obj.localdims[nl+1], length(rightindexset)) -end - - -# Evaluaiton of a Pi tensor with two local indices -function (obj::TestFunction{T})(leftindexset::Vector{MultiIndex}, rightindexset::Vector{MultiIndex}, ::Val{2})::Array{T,4} where {T} - if length(leftindexset) * length(rightindexset) == 0 - return Array{T,4}(undef, 0, 0, 0, 0) - end - - nl = length(leftindexset[1]) - # This can be parallelized if you want - result = [obj(vcat(l, s1, s2, r)) for l in leftindexset, s1 in 1:obj.localdims[nl+1], s2 in 1:obj.localdims[nl+2], r in rightindexset] - return reshape(result, length(leftindexset), obj.localdims[nl+1:nl+2]..., length(rightindexset)) -end - -localdims = [2, 2, 2, 2, 2] -f = TestFunction{Float64}(localdims) - -# Compute T tensor -let - leftindexset = [[1, 1, 1], [2, 2, 1], [2, 1, 1]] - rightindexset = [[1, 1], [2, 2], [1, 2]] - - # The returned object has shape of (3, 2, 3) - @assert f(leftindexset, rightindexset, Val(1)) ≈ [sum(vcat(l, s1, r)) for l in leftindexset, s1 in 1:localdims[4], r in rightindexset] -end - -# Compute Pi tensor -let - leftindexset = [[1, 1], [2, 2], [2, 1]] - rightindexset = [[1, 1], [2, 2], [1, 2]] - - # The returned object has shape of (3, 2, 2, 3) - @assert f(leftindexset, rightindexset, Val(2)) ≈ [sum(vcat(l, s1, s2, r)) for l in leftindexset, s1 in 1:localdims[3], s2 in 1:localdims[4], r in rightindexset] -end +# Contract them using the naive algorithm +C = contract(A, B; algorithm=:naive, tolerance=1e-12) ``` -`CachedFunction{T}` can wrap a function inheriting from `BatchEvaluator{T}`. In such cases, `CachedFunction{T}` caches the results of batch evaluation. - -## Batch evaluation + parallelization -The batch evalution can be combined with parallelization using threads, MPI, etc. -The following sample code use `Threads` to parallelize function evaluations. -Note that the function evaluation for a single index set must be thread-safe. - -We can run the code as (with 6 threads): - -```Bash -julia --project=@. -t 6 samplecode.jl -``` +## Algorithms -```Julia -import T4AMPOContractions as TCI -import T4AMPOContractions: MultiIndex +The package provides several algorithms for MPO contraction: -struct TestFunction{T} <: TCI.BatchEvaluator{T} - localdims::Vector{Int} - function TestFunction{T}(localdims) where {T} - new{T}(localdims) - end -end +- **`:naive`**: Direct tensor contraction followed by SVD compression +- **`:TCI`**: Tensor Cross Interpolation-based contraction +- **`:zipup`**: On-the-fly factorization during contraction +- **`:fit`**: Variational fitting algorithm (requires `SiteTensorTrain` or `InverseTensorTrain`) +- **`:distrfit`**: Distributed variational fitting with MPI support -# Evaluation for a single index set (takes 1 millisec) -function (obj::TestFunction{T})(indexset::MultiIndex)::T where {T} - sleep(1e-3) - return sum(indexset) -end +## Distributed Computing - -# Batch evaluation (loop over all index sets) -function (obj::TestFunction{T})(leftindexset::Vector{Vector{Int}}, rightindexset::Vector{Vector{Int}}, ::Val{M})::Array{T,M + 2} where {T,M} - if length(leftindexset) * length(rightindexset) == 0 - return Array{T,M+2}(undef, ntuple(i->0, M+2)...) - end - - nl = length(first(leftindexset)) - - t = time_ns() - cindexset = vec(collect(Iterators.product(ntuple(i->1:obj.localdims[nl+i], M)...))) - elements = collect(Iterators.product(1:length(leftindexset), 1:length(cindexset), 1:length(rightindexset))) - result = Array{T,3}(undef, length(leftindexset), length(cindexset), length(rightindexset)) - t2 = time_ns() - - Threads.@threads for indices in elements - l, c, r = leftindexset[indices[1]], cindexset[indices[2]], rightindexset[indices[3]] - result[indices...] = obj(vcat(l, c..., r)) - end - t3 = time_ns() - println("Time: ", (t2-t)/1e9, " ", (t3-t2)/1e9) - return reshape(result, length(leftindexset), obj.localdims[nl+1:nl+M]..., length(rightindexset)) -end - - -L = 20 -localdims = fill(2, L) -f = TestFunction{Float64}(localdims) - -println("Number of threads: ", Threads.nthreads()) - -# Compute Pi tensor -nl = 10 -nr = L - nl - 2 - -# 20 left index sets, 20 right index sets -leftindexset = [[rand(1:d) for d in localdims[1:nl]] for _ in 1:20] -rightindexset = [[rand(1:d) for d in localdims[nl+3:end]] for _ in 1:20] - -f(leftindexset, rightindexset, Val(2)) - -for i in 1:4 - @time f(leftindexset, rightindexset, Val(2)) -end -``` - -If your function is thread-safe, you can parallelize your function readily using `ThreadedBatchEvaluator` as follows (the internal implementation is identical to the sample code shown above): - -```Julia -import T4AMPOContractions as TCI - -# Evaluation takes 1 millisecond, make sure the function is thread-safe. -function f(x) - sleep(1e-3) - return sum(x) -end - - -L = 20 -localdims = fill(2, L) -parf = TCI.ThreadedBatchEvaluator{Float64}(f, localdims) - -println("Number of threads: ", Threads.nthreads()) - -# Compute Pi tensor -nl = 10 -nr = L - nl - 2 - -# 20 left index sets, 20 right index sets -leftindexset = [[rand(1:d) for d in localdims[1:nl]] for _ in 1:20] -rightindexset = [[rand(1:d) for d in localdims[nl+3:end]] for _ in 1:20] - -parf(leftindexset, rightindexset, Val(2)) - -for i in 1:4 - @time parf(leftindexset, rightindexset, Val(2)) -end -``` - -You can simply pass the wrapped function `parf` to `crossinterpolate2`. - -## Global pivot finder -A each TCI2 sweep, we can find the index sets with high interpolation error and add them to the TCI2 object. -By default, we use a greedy search algorithm to find the index sets with high interpolation error. -However, this may not be effective in some cases. -In such cases, you can use a custom global pivot finder, which must inherit from `TCI.AbstractGlobalPivotFinder`. -Then, you can implement a call method for the global pivot finder with this signature: - - -Here's an example of a custom global pivot finder that randomly selects pivots: +For large-scale computations, the package supports MPI-based distributed algorithms: ```julia -import T4AMPOContractions as TCI -import T4AMPOContractions: GlobalPivotSearchInput, MultiIndex, crossinterpolate2 -import Random: AbstractRNG +using T4AMPOContractions -struct CustomGlobalPivotFinder <: TCI.AbstractGlobalPivotFinder - npivots::Int -end +# Initialize MPI +initializempi() -function (finder::CustomGlobalPivotFinder)( - input::GlobalPivotSearchInput{ValueType}, - f, - abstol::Float64; - verbosity::Int=0, - rng::AbstractRNG=Random.default_rng() -)::Vector{MultiIndex} where {ValueType} - return [[rand(1:input.localdims[p]) for p in 1:L] for _ in 1:finder.npivots] -end -``` +# Use distributed algorithm +C = contract(A, B; algorithm=:distrfit, subcomm=nothing) -Note that the `GlobalPivotSearchInput` object contains the local dimensions of the TCI2 object, the function to be interpolated, and the tolerance, and the current pivots, etc. See [`GlobalPivotSearchInput`](@ref) for more details. - -You can use this custom finder by passing it to the `optimize!` function: - -```julia -tci, ranks, errors = crossinterpolate2( - Float64, - f, - localdims, - firstpivots; - globalpivotfinder=CustomGlobalPivotFinder(10) # Use custom finder that adds 10 random pivots -) +# Finalize MPI +finalizempi() ``` -The default global pivot finder (`DefaultGlobalPivotFinder`) uses a greedy search algorithm to find index sets with high interpolation error. It has the following parameters: +## Related Packages -- `nsearch`: Number of initial points to search from (default: 5) -- `maxnglobalpivot`: Maximum number of pivots to add in each iteration (default: 5) -- `tolmarginglobalsearch`: Search for pivots where the interpolation error is larger than the tolerance multiplied by this factor (default: 10.0) +- [T4ATensorCI.jl](https://github.com/tensor4all/T4ATensorCI.jl): Core tensor train and TCI functionality +- [T4ATensorTrain.jl](https://github.com/tensor4all/T4ATensorTrain.jl): Tensor train data structures -You can customize these parameters by creating a `DefaultGlobalPivotFinder` instance: +## Documentation -```julia -finder = TCI.DefaultGlobalPivotFinder( - nsearch=10, # Search from 10 initial points - maxnglobalpivot=3, # Add at most 3 pivots per iteration - tolmarginglobalsearch=5.0 # Search for errors > 5 * tolerance -) -tci, ranks, errors = crossinterpolate2( - Float64, - f, - localdims, - firstpivots; - globalpivotfinder=finder -) -``` +- [API Reference](@ref) - Complete function and type documentation +- [Examples](@ref) - Usage examples and tutorials diff --git a/src/abstracttensortrain.jl b/src/abstracttensortrain.jl index 7d9f760..e564c9f 100644 --- a/src/abstracttensortrain.jl +++ b/src/abstracttensortrain.jl @@ -29,83 +29,6 @@ function weightedsum(tt::TCI.AbstractTensorTrain{V}, w::Vector{Vector{V}}) where return only(v) end -function _addtttensor( - A::Array{V}, B::Array{V}; - factorA=one(V), factorB=one(V), - lefttensor=false, righttensor=false -) where {V} - if ndims(A) != ndims(B) - throw(DimensionMismatch("Elementwise addition only works if both tensors have the same indices, but A and B have different numbers ($(ndims(A)) and $(ndims(B))) of indices.")) - end - nd = ndims(A) - offset1 = lefttensor ? 0 : size(A, 1) - offset3 = righttensor ? 0 : size(A, nd) - localindices = fill(Colon(), nd - 2) - C = zeros(V, offset1 + size(B, 1), size(A)[2:nd-1]..., offset3 + size(B, nd)) - C[1:size(A, 1), localindices..., 1:size(A, nd)] = factorA * A - C[offset1+1:end, localindices..., offset3+1:end] = factorB * B - return C -end - -@doc raw""" - function add( - lhs::TCI.AbstractTensorTrain{V}, rhs::TCI.AbstractTensorTrain{V}; - factorlhs=one(V), factorrhs=one(V), - tolerance::Float64=0.0, maxbonddim::Int=typemax(Int) - ) where {V} - -Addition of two tensor trains. If `C = add(A, B)`, then `C(v) ≈ A(v) + B(v)` at each index set `v`. Note that this function increases the bond dimension, i.e. ``\chi_{\text{result}} = \chi_1 + \chi_2`` if the original tensor trains had bond dimensions ``\chi_1`` and ``\chi_2``. - -Arguments: -- `lhs`, `rhs`: Tensor trains to be added. -- `factorlhs`, `factorrhs`: Factors to multiply each tensor train by before addition. -- `tolerance`, `maxbonddim`: Parameters to be used for the recompression step. - -Returns: -A new `TensorTrain` representing the function `factorlhs * lhs(v) + factorrhs * rhs(v)`. - -See also: [`+`](@ref) -""" -function add( - lhs::TCI.AbstractTensorTrain{V}, rhs::TCI.AbstractTensorTrain{V}; - factorlhs=one(V), factorrhs=one(V), - tolerance::Float64=0.0, maxbonddim::Int=typemax(Int), normalizeerror::Bool=true -) where {V} - if length(lhs) != length(rhs) - throw(DimensionMismatch("Two tensor trains with different length ($(length(lhs)) and $(length(rhs))) cannot be added elementwise.")) - end - L = length(lhs) - tt = tensortrain( - [ - _addtttensor( - lhs[ell], rhs[ell]; - factorA=((ell == L) ? factorlhs : one(V)), - factorB=((ell == L) ? factorrhs : one(V)), - lefttensor=(ell==1), - righttensor=(ell==L) - ) - for ell in 1:L - ] - ) - TCI.compress!(tt, :SVD; tolerance, maxbonddim, normalizeerror) - return tt -end - -@doc raw""" - function subtract( - lhs::TCI.AbstractTensorTrain{V}, rhs::TCI.AbstractTensorTrain{V}; - tolerance::Float64=0.0, maxbonddim::Int=typemax(Int) - ) - -Subtract two tensor trains `lhs` and `rhs`. See [`add`](@ref). -""" -function subtract( - lhs::TCI.AbstractTensorTrain{V}, rhs::TCI.AbstractTensorTrain{V}; - tolerance::Float64=0.0, maxbonddim::Int=typemax(Int), normalizeerror::Bool=true -) where {V} - return add(lhs, rhs; factorrhs=-1 * one(V), tolerance, maxbonddim, normalizeerror) -end - function checkorthogonality(tt::Vector{Array{ValueType, N}}) where {ValueType, N} ort = Vector{Symbol}(undef, length(tt)) for i in 1:length(tt) diff --git a/src/contraction.jl b/src/contraction.jl index 2e4915f..74de844 100644 --- a/src/contraction.jl +++ b/src/contraction.jl @@ -1726,7 +1726,7 @@ Arguments: - `f` is a function to be applied elementwise to the result. This option is only available with `algorithm=:TCI`. - `method` chooses the method used for the factorization in the `algorithm=:zipup` case (`:SVD` or `:LU`). - `subcomm` is an optional MPI communicator for distributed algorithms. If not provided, the default communicator is used. -- `kwargs...` are forwarded to [`crossinterpolate2`](@ref) if `algorithm=:TCI` or to [`contract_fit`](@ref) if `algorithm=:fit` or `algorithm=:distrfit`. +- `kwargs...` are forwarded to the underlying algorithm functions. """ function contract( A::TCI.TensorTrain{ValueType1,4}, diff --git a/src/tensortrains.jl b/src/tensortrains.jl index 155d20d..a57b8d2 100644 --- a/src/tensortrains.jl +++ b/src/tensortrains.jl @@ -14,6 +14,7 @@ import T4ATensorTrain: setsitetensor!, settwositetensors! import T4ATensorTrain: movecenterleft!, movecenterright!, movecenterto! import T4ATensorTrain: movecenterleft, movecenterright import T4ATensorTrain: centercanonicalize, centercanonicalize! +import T4ATensorTrain: add, subtract # Orthogonality helpers import T4ATensorTrain: isleftorthogonal, isrightorthogonal diff --git a/test/runtests.jl b/test/runtests.jl index 83055a8..f9d9ebb 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -4,8 +4,15 @@ using Test using LinearAlgebra using Random -include("test_with_aqua.jl") -include("test_with_jet.jl") +# Run Aqua and JET tests when not explicitly skipped +if !haskey(ENV, "SKIP_AQUA_JET") + using Pkg + Pkg.add("Aqua") + Pkg.add("JET") + include("test_with_aqua.jl") + include("test_with_jet.jl") +end + include("test_mpi.jl") include("test_contraction.jl") include("test_factorize.jl") \ No newline at end of file