diff --git a/Manifest.toml b/Manifest.toml index 14d4bc87..55db52b0 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -4,6 +4,11 @@ julia_version = "1.8.5" manifest_format = "2.0" project_hash = "fbf69595a65087194326489e6a6a6f3da6dc4ad8" +[[deps.ADTypes]] +git-tree-sha1 = "e58c18d2312749847a74f5be80bb0fa53da102bd" +uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" +version = "0.1.5" + [[deps.ANSIColoredPrinters]] git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c" uuid = "a4c015fc-c6ff-483c-b24f-f7ea428134e9" @@ -16,10 +21,10 @@ uuid = "ae81ac8f-d209-56e5-92de-9978fef736f9" version = "0.1.3+0" [[deps.AbstractAlgebra]] -deps = ["GroupsCore", "InteractiveUtils", "LinearAlgebra", "MacroTools", "Random", "RandomExtensions", "SparseArrays", "Test"] -git-tree-sha1 = "3ee5c58774f4487a5bf2bb05e39d91ff5022b4cc" +deps = ["GroupsCore", "InteractiveUtils", "LinearAlgebra", "MacroTools", "Preferences", "Random", "RandomExtensions", "SparseArrays", "Test"] +git-tree-sha1 = "1bd8a536c949eb3de9b58042d57790ded6b70fa6" uuid = "c3fe647b-3220-5bb0-a1ea-a7954cac585d" -version = "0.29.4" +version = "0.30.9" [[deps.AbstractDifferentiation]] deps = ["ChainRulesCore", "ExprTools", "LinearAlgebra", "Requires"] @@ -29,9 +34,9 @@ version = "0.5.2" [[deps.AbstractFFTs]] deps = ["ChainRulesCore", "LinearAlgebra"] -git-tree-sha1 = "16b6dbc4cf7caee4e1e75c49485ec67b667098a0" +git-tree-sha1 = "8bc0aaec0ca548eb6cf5f0d7d16351650c1ee956" uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" -version = "1.3.1" +version = "1.3.2" [[deps.AbstractTrees]] git-tree-sha1 = "faa260e4cb5aba097a73fab382dd4b5819d8ec8c" @@ -40,9 +45,9 @@ version = "0.4.4" [[deps.Adapt]] deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "cc37d689f599e8df4f464b2fa3870ff7db7492ef" +git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "3.6.1" +version = "3.6.2" [[deps.Animations]] deps = ["Colors"] @@ -66,10 +71,10 @@ uuid = "ec485272-7323-5ecc-a04f-4719b315124d" version = "0.2.0" [[deps.ArrayInterface]] -deps = ["Adapt", "LinearAlgebra", "Requires", "SnoopPrecompile", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "38911c7737e123b28182d89027f4216cfc8a9da7" +deps = ["Adapt", "LinearAlgebra", "Requires", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "f83ec24f76d4c8f525099b2ac475fc098138ec31" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.4.3" +version = "7.4.11" [[deps.Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" @@ -132,10 +137,10 @@ uuid = "159f3aea-2a34-519c-b102-8c37f9878175" version = "1.0.5" [[deps.CairoMakie]] -deps = ["Base64", "Cairo", "Colors", "FFTW", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "SHA", "SnoopPrecompile"] -git-tree-sha1 = "2aba202861fd2b7603beb80496b6566491229855" +deps = ["Base64", "Cairo", "Colors", "FFTW", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "PrecompileTools", "SHA"] +git-tree-sha1 = "bfc7d54b3c514f8015055e6ad0d5997da64d99fc" uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" -version = "0.10.4" +version = "0.10.6" [[deps.Cairo_jll]] deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] @@ -151,15 +156,15 @@ version = "0.5.1" [[deps.ChainRules]] deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "Statistics", "StructArrays"] -git-tree-sha1 = "8bae903893aeeb429cf732cf1888490b93ecf265" +git-tree-sha1 = "61549d9b52c88df34d21bd306dba1d43bb039c87" uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2" -version = "1.49.0" +version = "1.51.0" [[deps.ChainRulesCore]] deps = ["Compat", "LinearAlgebra", "SparseArrays"] -git-tree-sha1 = "c6d890a52d2c4d55d326439580c3b8d0875a77d9" +git-tree-sha1 = "e30f2f4e20f7f186dc36529910beaedc60cfa644" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.15.7" +version = "1.16.0" [[deps.ChangesOfVariables]] deps = ["LinearAlgebra", "Test"] @@ -221,9 +226,9 @@ uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" version = "1.0.2" [[deps.CommonSolve]] -git-tree-sha1 = "9441451ee712d1aec22edad62db1a9af3dc8d852" +git-tree-sha1 = "0eee5eb66b1cf62cd6ad1b460238e60e4b09400c" uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" -version = "0.2.3" +version = "0.2.4" [[deps.CommonSubexpressions]] deps = ["MacroTools", "Test"] @@ -233,9 +238,9 @@ version = "0.3.0" [[deps.Compat]] deps = ["Dates", "LinearAlgebra", "UUIDs"] -git-tree-sha1 = "7a60c856b9fa189eb34f5f8a6f6b5529b7942957" +git-tree-sha1 = "4e88377ae7ebeaf29a047aa1ee40826e0b708a5d" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.6.1" +version = "4.7.0" [[deps.CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] @@ -249,15 +254,15 @@ version = "0.1.3" [[deps.ConcurrentUtilities]] deps = ["Serialization", "Sockets"] -git-tree-sha1 = "b306df2650947e9eb100ec125ff8c65ca2053d30" +git-tree-sha1 = "96d823b94ba8d187a6d8f0826e731195a74b90e9" uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" -version = "2.1.1" +version = "2.2.0" [[deps.Conda]] deps = ["Downloads", "JSON", "VersionParsing"] -git-tree-sha1 = "e32a90da027ca45d84678b826fffd3110bb3fc90" +git-tree-sha1 = "915ebe6f0e7302693bdd8eac985797dba1d25662" uuid = "8f4d0f93-b110-5947-807f-2305c1781a2d" -version = "1.8.0" +version = "1.9.0" [[deps.CondaPkg]] deps = ["JSON3", "Markdown", "MicroMamba", "Pidfile", "Pkg", "TOML"] @@ -278,9 +283,9 @@ version = "0.6.2" [[deps.CovarianceEstimation]] deps = ["LinearAlgebra", "Statistics", "StatsBase"] -git-tree-sha1 = "3c8de95b4e932d76ec8960e12d681eba580e9674" +git-tree-sha1 = "6711ad240bb8861dda376bad332d3f89e2ac5f30" uuid = "587fd27a-f159-11e8-2dae-1979310e6154" -version = "0.2.8" +version = "0.2.9" [[deps.DSP]] deps = ["Compat", "FFTW", "IterTools", "LinearAlgebra", "Polynomials", "Random", "Reexport", "SpecialFunctions", "Statistics"] @@ -289,9 +294,9 @@ uuid = "717857b8-e6f2-59f4-9121-6e50c889abd2" version = "0.7.8" [[deps.DataAPI]] -git-tree-sha1 = "e8119c1a33d267e16108be441a287a6981ba1630" +git-tree-sha1 = "8da84edb865b0b5b0100c0666a9bc9a0b71c553c" uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.14.0" +version = "1.15.0" [[deps.DataStructures]] deps = ["Compat", "InteractiveUtils", "OrderedCollections"] @@ -332,19 +337,19 @@ version = "1.1.0" [[deps.DiffRules]] deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] -git-tree-sha1 = "a4ad7ef19d2cdc2eff57abbbe68032b1cd0bd8f8" +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" -version = "1.13.0" +version = "1.15.1" [[deps.Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" [[deps.Distributions]] -deps = ["ChainRulesCore", "DensityInterface", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns", "Test"] -git-tree-sha1 = "c2614fa3aafe03d1a44b8e16508d9be718b8095a" +deps = ["ChainRulesCore", "DensityInterface", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns", "Test"] +git-tree-sha1 = "db40d3aff76ea6a3619fdd15a8c78299221a2394" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.89" +version = "0.25.97" [[deps.DocStringExtensions]] deps = ["LibGit2"] @@ -360,9 +365,9 @@ version = "0.27.24" [[deps.DomainSets]] deps = ["CompositeTypes", "IntervalSets", "LinearAlgebra", "Random", "StaticArrays", "Statistics"] -git-tree-sha1 = "698124109da77b6914f64edd696be8dccf90229e" +git-tree-sha1 = "51b4b84d33ec5e0955b55ff4b748b99ce2c3faa9" uuid = "5b8099bc-c8ec-5219-889f-1d9e522a28bf" -version = "0.6.6" +version = "0.6.7" [[deps.Downloads]] deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] @@ -398,11 +403,17 @@ git-tree-sha1 = "bdb1942cd4c45e3c678fd11569d5cccd80976237" uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" version = "1.0.4" +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "e90caa41f5a86296e014e148ee061bd6c3edec96" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.9" + [[deps.Expat_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "bad72f730e9e91c08d9427d5e8db95478a3c323d" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "4558ab818dcceaab612d1bb8c19cee87eda2b83c" uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.4.8+0" +version = "2.5.0+0" [[deps.ExponentialAction]] deps = ["AbstractDifferentiation", "ChainRulesCore", "Compat", "LinearAlgebra", "SparseArrays"] @@ -434,9 +445,9 @@ version = "4.4.2+2" [[deps.FFTW]] deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] -git-tree-sha1 = "f9818144ce7c8c41edf5c4c179c684d92aa4d9fe" +git-tree-sha1 = "b4fbdd20c889804969571cc589900803edda16b7" uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" -version = "1.6.0" +version = "1.7.1" [[deps.FFTW_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -455,15 +466,15 @@ uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" [[deps.FillArrays]] deps = ["LinearAlgebra", "Random", "SparseArrays", "Statistics"] -git-tree-sha1 = "fc86b4fd3eff76c3ce4f5e96e2fdfa6282722885" +git-tree-sha1 = "0b3b52afd0f87b0a3f5ada0466352d125c9db458" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.0.0" +version = "1.2.1" [[deps.FiniteDiff]] deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays", "StaticArrays"] -git-tree-sha1 = "6604e18a0220650dbbea7854938768f15955dd8e" +git-tree-sha1 = "c6e4a1fbe73b31a3dea94b1da449503b8830c306" uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" -version = "2.20.0" +version = "2.21.1" [[deps.FixedPointNumbers]] deps = ["Statistics"] @@ -536,15 +547,15 @@ version = "3.3.8+0" [[deps.GPUArrays]] deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"] -git-tree-sha1 = "9ade6983c3dbbd492cf5729f865fe030d1541463" +git-tree-sha1 = "2e57b4a4f9cc15e85a24d603256fe08e527f48d1" uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" -version = "8.6.6" +version = "8.8.1" [[deps.GPUArraysCore]] deps = ["Adapt"] -git-tree-sha1 = "1cd7f0af1aa58abc02ea1d872953a97359cb87fa" +git-tree-sha1 = "2d6ca471a6c7b536127afccfa7564b5b39227fe0" uuid = "46192b85-c4d5-4398-a991-12ede77f4527" -version = "0.1.4" +version = "0.1.5" [[deps.GR]] deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "UUIDs", "p7zip_jll"] @@ -560,9 +571,9 @@ version = "0.72.7+0" [[deps.GeoInterface]] deps = ["Extents"] -git-tree-sha1 = "0eb6de0b312688f852f347171aba888658e29f20" +git-tree-sha1 = "bb198ff907228523f3dee1070ceee63b9359b6ab" uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" -version = "1.3.0" +version = "1.3.1" [[deps.GeometryBasics]] deps = ["EarCut_jll", "GeoInterface", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] @@ -613,9 +624,9 @@ version = "1.0.2" [[deps.Groebner]] deps = ["AbstractAlgebra", "Combinatorics", "Logging", "MultivariatePolynomials", "Primes", "Random", "SnoopPrecompile"] -git-tree-sha1 = "b6c3e9e1eb8dcc6fd9bc68fe08dcc7ab22710de6" +git-tree-sha1 = "c8b55b624a83f60bcd6574cc999ad148d0a47dd6" uuid = "0b43b601-686d-58a3-8a1c-6623616c7cd4" -version = "0.3.4" +version = "0.3.6" [[deps.GroupsCore]] deps = ["Markdown", "Random"] @@ -625,9 +636,9 @@ version = "0.4.0" [[deps.HDF5]] deps = ["Compat", "HDF5_jll", "Libdl", "Mmap", "Random", "Requires", "UUIDs"] -git-tree-sha1 = "3dab31542b3da9f25a6a1d11159d4af8fdce7d67" +git-tree-sha1 = "c73fdc3d9da7700691848b78c61841274076932a" uuid = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" -version = "0.16.14" +version = "0.16.15" [[deps.HDF5_jll]] deps = ["Artifacts", "JLLWrappers", "LibCURL_jll", "Libdl", "OpenSSL_jll", "Pkg", "Zlib_jll"] @@ -636,10 +647,10 @@ uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" version = "1.12.2+2" [[deps.HTTP]] -deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] -git-tree-sha1 = "69182f9a2d6add3736b7a06ab6416aafdeec2196" +deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] +git-tree-sha1 = "2613d054b0e18a3dea99ca1594e9a3960e025da4" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" -version = "1.8.0" +version = "1.9.7" [[deps.HarfBuzz_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] @@ -655,27 +666,27 @@ version = "0.4.15" [[deps.HypergeometricFunctions]] deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] -git-tree-sha1 = "432b5b03176f8182bd6841fbfc42c718506a2d5f" +git-tree-sha1 = "0ec02c648befc2f94156eaef13b0f38106212f3f" uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" -version = "0.3.15" +version = "0.3.17" [[deps.IJulia]] deps = ["Base64", "Conda", "Dates", "InteractiveUtils", "JSON", "Libdl", "Logging", "Markdown", "MbedTLS", "Pkg", "Printf", "REPL", "Random", "SoftGlobalScope", "Test", "UUIDs", "ZMQ"] -git-tree-sha1 = "59e19713542dd9dd02f31d59edbada69530d6a14" +git-tree-sha1 = "47ac8cc196b81001a711f4b2c12c97372338f00c" uuid = "7073ff75-c697-5162-941a-fcdaad2a7d2a" -version = "1.24.0" +version = "1.24.2" [[deps.IOCapture]] deps = ["Logging", "Random"] -git-tree-sha1 = "f7be53659ab06ddc986428d3a9dcc95f6fa6705a" +git-tree-sha1 = "d75853a0bdbfb1ac815478bacd89cd27b550ace6" uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" -version = "0.2.2" +version = "0.2.3" [[deps.IRTools]] deps = ["InteractiveUtils", "MacroTools", "Test"] -git-tree-sha1 = "0ade27f0c49cebd8db2523c4eeccf779407cf12c" +git-tree-sha1 = "eac00994ce3229a464c2847e956d77a2c64ad3a5" uuid = "7869d1d1-7146-5819-86e3-90919afe41df" -version = "0.4.9" +version = "0.4.10" [[deps.IfElse]] git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" @@ -729,9 +740,9 @@ uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" version = "0.1.3" [[deps.IntegerMathUtils]] -git-tree-sha1 = "f366daebdfb079fd1fe4e3d560f99a0c892e15bc" +git-tree-sha1 = "70f65ced5129d36dbf200b07c51ea8a955294660" uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" -version = "0.1.0" +version = "0.1.1" [[deps.IntelOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -762,16 +773,16 @@ uuid = "3587e190-3f89-42d0-90ee-14403ec27112" version = "0.1.9" [[deps.Ipopt]] -deps = ["Ipopt_jll", "LinearAlgebra", "MathOptInterface", "OpenBLAS32_jll", "SnoopPrecompile"] -git-tree-sha1 = "392d19287155a54d0053360a90dd1b43037a8ef2" +deps = ["Ipopt_jll", "LinearAlgebra", "MathOptInterface", "OpenBLAS32_jll", "PrecompileTools"] +git-tree-sha1 = "fdb3430a3b7b909bcb5abf9439d61450f49e3e2c" uuid = "b6b21f68-93f8-5de0-b562-5493be1d77c9" -version = "1.2.1" +version = "1.4.1" [[deps.Ipopt_jll]] -deps = ["ASL_jll", "Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "MUMPS_seq_jll", "OpenBLAS32_jll", "Pkg", "libblastrampoline_jll"] -git-tree-sha1 = "97c0e9fa36e93448fe214fea5366fac1ba3d1bfa" +deps = ["ASL_jll", "Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "MUMPS_seq_jll", "OpenBLAS32_jll", "Pkg"] +git-tree-sha1 = "e3e202237d93f18856b6ff1016166b0f172a49a8" uuid = "9cc047cb-c261-5740-88fc-0cf96f7bdcc7" -version = "300.1400.1000+0" +version = "300.1400.400+0" [[deps.IrrationalConstants]] git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" @@ -785,9 +796,9 @@ uuid = "f1662d9f-8043-43de-a69a-05efc1cc6ff4" version = "0.1.1" [[deps.IterTools]] -git-tree-sha1 = "fa6287a4469f5e048d763df38279ee729fbd44e5" +git-tree-sha1 = "4ced6667f9974fc5c5943fa5e2ef1ca43ea9e450" uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" -version = "1.4.0" +version = "1.8.0" [[deps.IteratorInterfaceExtensions]] git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" @@ -819,10 +830,10 @@ uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" version = "0.21.4" [[deps.JSON3]] -deps = ["Dates", "Mmap", "Parsers", "SnoopPrecompile", "StructTypes", "UUIDs"] -git-tree-sha1 = "84b10656a41ef564c39d2d477d7236966d2b5683" +deps = ["Dates", "Mmap", "Parsers", "PrecompileTools", "StructTypes", "UUIDs"] +git-tree-sha1 = "5b62d93f2582b09e469b3099d839c2d2ebf5066d" uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" -version = "1.12.0" +version = "1.13.1" [[deps.JpegTurbo]] deps = ["CEnum", "FileIO", "ImageCore", "JpegTurbo_jll", "TOML"] @@ -850,9 +861,9 @@ version = "0.6.7" [[deps.Kronecker]] deps = ["LinearAlgebra", "NamedDims", "SparseArrays", "StatsBase"] -git-tree-sha1 = "78d9909daf659c901ae6c7b9de7861ba45a743f4" +git-tree-sha1 = "bd47e8074c6bd478abf7efa6d504f6c1c38a487c" uuid = "2c470bb0-bcc8-11e8-3dad-c9649493f05e" -version = "0.5.3" +version = "0.5.4" [[deps.LAME_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -868,15 +879,21 @@ version = "3.0.0+1" [[deps.LLVM]] deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Printf", "Unicode"] -git-tree-sha1 = "a8960cae30b42b66dd41808beb76490519f6f9e2" +git-tree-sha1 = "7d5788011dd273788146d40eb5b1fbdc199d0296" uuid = "929cbde3-209d-540e-8aea-75f648917ca0" -version = "5.0.0" +version = "6.0.1" [[deps.LLVMExtra_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "09b7505cc0b1cee87e5d4a26eea61d2e1b0dcd35" +git-tree-sha1 = "1222116d7313cdefecf3d45a2bc1a89c4e7c9217" uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" -version = "0.0.21+0" +version = "0.0.22+0" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "f689897ccbe049adb19a065c495e75f372ecd42b" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "15.0.4+0" [[deps.LZO_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -997,21 +1014,21 @@ uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" [[deps.LinearMaps]] deps = ["ChainRulesCore", "LinearAlgebra", "SparseArrays", "Statistics"] -git-tree-sha1 = "4af48c3585177561e9f0d24eb9619ad3abf77cc7" +git-tree-sha1 = "62f9b2762cc107667b137af621e951f52e020a0f" uuid = "7a12625a-238d-50fd-b39a-03d52299707e" -version = "3.10.0" +version = "3.10.2" [[deps.LiveServer]] deps = ["HTTP", "MIMEs", "Pkg", "Sockets"] -git-tree-sha1 = "b0db05c042a7c54bb858f9846a4ca39ac15f8c44" +git-tree-sha1 = "494010f12dd98fa0d558cb7679b7c21d3a0a430a" uuid = "16fef848-5104-11e9-1b77-fb7a48bbb589" -version = "1.1.1" +version = "1.2.0" [[deps.LogExpFunctions]] deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "0a1b7c2863e44523180fdb3146534e265a91870b" +git-tree-sha1 = "c3ce8e7420b3a6e071e0fe4745f5d4300e37b13f" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.23" +version = "0.3.24" [[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" @@ -1041,15 +1058,15 @@ version = "0.1.4" [[deps.MKL_jll]] deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] -git-tree-sha1 = "2ce8695e1e699b68702c03402672a69f54b8aca9" +git-tree-sha1 = "154d7aaa82d24db6d8f7e4ffcfe596f40bff214b" uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" -version = "2022.2.0+0" +version = "2023.1.0+0" [[deps.MUMPS_seq_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "METIS_jll", "OpenBLAS32_jll", "Pkg", "libblastrampoline_jll"] -git-tree-sha1 = "f429d6bbe9ad015a2477077c9e89b978b8c26558" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "METIS_jll", "OpenBLAS32_jll", "Pkg"] +git-tree-sha1 = "29de2841fa5aefe615dea179fcde48bb87b58f57" uuid = "d7ed1dd3-d0ae-5e8e-bfb4-87a502085b8d" -version = "500.500.101+0" +version = "5.4.1+0" [[deps.MacroTools]] deps = ["Markdown", "Random"] @@ -1058,10 +1075,10 @@ uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" version = "0.5.10" [[deps.Makie]] -deps = ["Animations", "Base64", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "Contour", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG", "FileIO", "FixedPointNumbers", "Formatting", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageIO", "InteractiveUtils", "IntervalSets", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MakieCore", "Markdown", "Match", "MathTeXEngine", "MiniQhull", "Observables", "OffsetArrays", "Packing", "PlotUtils", "PolygonOps", "Printf", "Random", "RelocatableFolders", "Setfield", "Showoff", "SignedDistanceFields", "SnoopPrecompile", "SparseArrays", "StableHashTraits", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun"] -git-tree-sha1 = "74657542dc85c3b72b8a5a9392d57713d8b7a999" +deps = ["Animations", "Base64", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "Contour", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG", "FileIO", "FixedPointNumbers", "Formatting", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageIO", "InteractiveUtils", "IntervalSets", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "MakieCore", "Markdown", "Match", "MathTeXEngine", "MiniQhull", "Observables", "OffsetArrays", "Packing", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Setfield", "Showoff", "SignedDistanceFields", "SparseArrays", "StableHashTraits", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun"] +git-tree-sha1 = "a6695a632992a2e19ae1a1d0c9bee0e137e2f3cb" uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" -version = "0.19.4" +version = "0.19.6" [[deps.MakieCore]] deps = ["Observables"] @@ -1070,27 +1087,27 @@ uuid = "20f20a25-4f0e-4fdf-b5d1-57303727442b" version = "0.6.3" [[deps.ManifoldDiff]] -deps = ["LinearAlgebra", "ManifoldsBase", "Markdown", "Requires"] -git-tree-sha1 = "b34672ebeea5350e984fb1dc5bb62c63362e50c0" +deps = ["LinearAlgebra", "ManifoldsBase", "Markdown", "Random", "Requires"] +git-tree-sha1 = "349141981abc7fc53f3b547b4be4be270d35ef0c" uuid = "af67fdf4-a580-4b9f-bbec-742ef357defd" -version = "0.3.1" +version = "0.3.4" [[deps.Manifolds]] -deps = ["Colors", "Distributions", "Einsum", "Graphs", "HybridArrays", "Kronecker", "LinearAlgebra", "ManifoldDiff", "ManifoldsBase", "Markdown", "MatrixEquations", "Quaternions", "Random", "RecipesBase", "RecursiveArrayTools", "Requires", "SimpleWeightedGraphs", "SpecialFunctions", "StaticArrays", "Statistics", "StatsBase"] -git-tree-sha1 = "f9757cc3482ea2fd3a2ff264716e057414c7df85" +deps = ["Distributions", "Einsum", "Graphs", "HybridArrays", "Kronecker", "LinearAlgebra", "ManifoldDiff", "ManifoldsBase", "Markdown", "MatrixEquations", "Quaternions", "Random", "RecursiveArrayTools", "Requires", "SimpleWeightedGraphs", "SpecialFunctions", "StaticArrays", "Statistics", "StatsBase"] +git-tree-sha1 = "1a131c6810b91ac48aa944c4fef97147018f3f63" uuid = "1cead3c2-87b3-11e9-0ccd-23c62b72b94e" -version = "0.8.59" +version = "0.8.72" [[deps.ManifoldsBase]] deps = ["LinearAlgebra", "Markdown", "Random"] -git-tree-sha1 = "efdf83d766c61aa26d5a8e210324e71448d9f147" +git-tree-sha1 = "6ba91cf9dad7f3980b707a583dcccef932f74316" uuid = "3362f125-f0bb-47a3-aa74-596ffd7ef2fb" -version = "0.14.5" +version = "0.14.6" [[deps.MappedArrays]] -git-tree-sha1 = "e8b359ef06ec72e8c030463fe02efe5527ee5142" +git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e" uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" -version = "0.4.1" +version = "0.4.2" [[deps.Markdown]] deps = ["Base64"] @@ -1103,9 +1120,9 @@ version = "1.2.0" [[deps.MathOptInterface]] deps = ["BenchmarkTools", "CodecBzip2", "CodecZlib", "DataStructures", "ForwardDiff", "JSON", "LinearAlgebra", "MutableArithmetics", "NaNMath", "OrderedCollections", "PrecompileTools", "Printf", "SparseArrays", "SpecialFunctions", "Test", "Unicode"] -git-tree-sha1 = "8e054675d393ce5866dcdd6a071075e25e21a39c" +git-tree-sha1 = "5c5cd501ae1d76d3ccd7c7e6b4325a15dde7f31c" uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" -version = "1.15.1" +version = "1.18.0" [[deps.MathTeXEngine]] deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "Test", "UnicodeFun"] @@ -1115,9 +1132,9 @@ version = "0.5.6" [[deps.MatrixEquations]] deps = ["LinearAlgebra", "LinearMaps"] -git-tree-sha1 = "15838905f0d1eb5d450b12986e64861a82fd6e03" +git-tree-sha1 = "dc2a12b326751cd40785c9310b9965c5ad5dcc95" uuid = "99c1a7ee-ab34-5fd5-8076-27c950a045f4" -version = "2.2.9" +version = "2.2.10" [[deps.MbedTLS]] deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "Random", "Sockets"] @@ -1198,7 +1215,7 @@ version = "0.2.50" [[deps.NamedTrajectories]] deps = ["CairoMakie", "DataStructures", "Documenter", "JLD2", "LaTeXStrings", "Latexify", "Reexport", "Revise", "Unidecode"] -git-tree-sha1 = "9320c72ea6cd9fedb263000277e128f4e5618ea6" +git-tree-sha1 = "f3967113b26ca5898525b2824c2f535610de047e" repo-rev = "main" repo-url = "https://github.com/aarontrowbridge/NamedTrajectories.jl.git" uuid = "538bc3a1-5ab9-4fc3-b776-35ca1e893e08" @@ -1261,15 +1278,15 @@ version = "0.8.1+0" [[deps.OpenSSL]] deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] -git-tree-sha1 = "7fb975217aea8f1bb360cf1dde70bad2530622d2" +git-tree-sha1 = "51901a49222b09e3743c65b8847687ae5fc78eb2" uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" -version = "1.4.0" +version = "1.4.1" [[deps.OpenSSL_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9ff31d101d987eb9d66bd8b176ac7c277beccd09" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1aa4b74f80b01c6bc2b89992b861b5f210e665b5" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "1.1.20+0" +version = "1.1.21+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] @@ -1301,9 +1318,9 @@ version = "0.11.17" [[deps.PGFPlotsX]] deps = ["ArgCheck", "Dates", "DefaultApplication", "DocStringExtensions", "MacroTools", "OrderedCollections", "Parameters", "Requires", "Tables"] -git-tree-sha1 = "e98a6743775e107062be357560977c06850a79be" +git-tree-sha1 = "3e7a0345b9f37da2cd770a5d47bb5cb6e62c7a81" uuid = "8314cec4-20b6-5062-9cdb-752b83310925" -version = "1.5.3" +version = "1.6.0" [[deps.PNGFiles]] deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"] @@ -1336,10 +1353,10 @@ uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" version = "0.12.3" [[deps.Parsers]] -deps = ["Dates", "SnoopPrecompile"] -git-tree-sha1 = "478ac6c952fddd4399e71d4779797c538d0ff2bf" +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "4b2e829ee66d4218e0cef22c0a64ee37cf258c29" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.5.8" +version = "2.7.1" [[deps.Pidfile]] deps = ["FileWatching", "Test"] @@ -1353,10 +1370,10 @@ uuid = "b98c9c47-44ae-5843-9183-064241ee97a0" version = "1.3.0" [[deps.Pixman_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "64779bc4c9784fee475689a1752ef4d5747c5e87" uuid = "30392449-352a-5448-841d-b1acce4e97dc" -version = "0.40.1+0" +version = "0.42.2+0" [[deps.Pkg]] deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] @@ -1383,9 +1400,9 @@ version = "1.3.5" [[deps.Plots]] deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "PrecompileTools", "Preferences", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun", "UnitfulLatexify", "Unzip"] -git-tree-sha1 = "ceb1ec8d4fbeb02f8817004837d924583707951b" +git-tree-sha1 = "75ca67b2c6512ad2d0c767a7cfc55e75075f8bbc" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" -version = "1.38.15" +version = "1.38.16" [[deps.PolygonOps]] git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6" @@ -1406,9 +1423,9 @@ version = "0.4.12" [[deps.PrecompileTools]] deps = ["Preferences"] -git-tree-sha1 = "d0984cc886c48e5a165705ce65236dc2ec467b91" +git-tree-sha1 = "9673d39decc5feece56ef3940e5dafba15ba0f81" uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.1.0" +version = "1.1.2" [[deps.Preferences]] deps = ["TOML"] @@ -1461,10 +1478,10 @@ uuid = "460c41e3-6112-5d7f-b78c-b6823adb3f2d" version = "1.0.0+1" [[deps.Qhull_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "238dd7e2cc577281976b9681702174850f8d4cbc" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "be2449911f4d6cfddacdf7efc895eceda3eee5c1" uuid = "784f63db-0788-585a-bace-daefebcd302b" -version = "8.0.1001+0" +version = "8.0.1003+0" [[deps.Qt5Base_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"] @@ -1505,9 +1522,9 @@ version = "0.3.2" [[deps.Ratios]] deps = ["Requires"] -git-tree-sha1 = "6d7bb727e76147ba18eed998700998e17b8e4911" +git-tree-sha1 = "1342a47bf3260ee108163042310d26f2be5ec90b" uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" -version = "0.4.4" +version = "0.4.5" [[deps.RealDot]] deps = ["LinearAlgebra"] @@ -1529,9 +1546,9 @@ version = "0.6.12" [[deps.RecursiveArrayTools]] deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "IteratorInterfaceExtensions", "LinearAlgebra", "RecipesBase", "Requires", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"] -git-tree-sha1 = "68078e9fa9130a6a768815c48002d0921a232c11" +git-tree-sha1 = "02ef02926f30d53b94be443bfaea010c47f6b556" uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" -version = "2.38.4" +version = "2.38.5" [[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" @@ -1552,9 +1569,9 @@ version = "1.3.0" [[deps.Revise]] deps = ["CodeTracking", "Distributed", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "Pkg", "REPL", "Requires", "UUIDs", "Unicode"] -git-tree-sha1 = "feafdc70b2e6684314e188d95fe66d116de834a7" +git-tree-sha1 = "1e597b93700fa4045d7189afa7c004e0584ea548" uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" -version = "3.5.2" +version = "3.5.3" [[deps.Rmath]] deps = ["Random", "Rmath_jll"] @@ -1570,19 +1587,19 @@ version = "0.4.0+0" [[deps.RuntimeGeneratedFunctions]] deps = ["ExprTools", "SHA", "Serialization"] -git-tree-sha1 = "f139e81a81e6c29c40f1971c9e5309b09c03f2c3" +git-tree-sha1 = "0b9b18d6236e9ab2b092defaacdffd929d572642" uuid = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47" -version = "0.5.6" +version = "0.5.9" [[deps.SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" version = "0.7.0" [[deps.SIMD]] -deps = ["SnoopPrecompile"] -git-tree-sha1 = "8b20084a97b004588125caebf418d8cab9e393d1" +deps = ["PrecompileTools"] +git-tree-sha1 = "0e270732477b9e551d884e6b07e23bb2ec947790" uuid = "fdea26ae-647d-5447-a871-4b548cad5224" -version = "3.4.4" +version = "3.4.5" [[deps.ScanByte]] deps = ["Libdl", "SIMD"] @@ -1591,16 +1608,16 @@ uuid = "7b38b023-a4d7-4c5e-8d43-3f3097f304eb" version = "0.3.3" [[deps.SciMLBase]] -deps = ["ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "Preferences", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "SnoopPrecompile", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables", "TruncatedStacktraces"] -git-tree-sha1 = "392d3e28b05984496af37100ded94dc46fa6c8de" +deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "PrecompileTools", "Preferences", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables", "TruncatedStacktraces"] +git-tree-sha1 = "a22a12db91f6a921e28a7ae39a9546eed93fd92e" uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" -version = "1.91.7" +version = "1.93.0" [[deps.SciMLOperators]] deps = ["ArrayInterface", "DocStringExtensions", "Lazy", "LinearAlgebra", "Setfield", "SparseArrays", "StaticArraysCore", "Tricks"] -git-tree-sha1 = "e61e48ef909375203092a6e83508c8416df55a83" +git-tree-sha1 = "668ed6b2265d1adb36b7239501e9369025bd6c78" uuid = "c0aeaf25-5076-4817-a8d5-81caf7dfa961" -version = "0.2.0" +version = "0.3.2" [[deps.Scratch]] deps = ["Dates"] @@ -1685,9 +1702,9 @@ version = "1.1.0" [[deps.SortingAlgorithms]] deps = ["DataStructures"] -git-tree-sha1 = "a4ada03f999bd01b3a25dcaa30b2d929fe537e00" +git-tree-sha1 = "c60ec5c62180f27efea3ba2908480f8055e17cee" uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" -version = "1.1.0" +version = "1.1.1" [[deps.SparseArrays]] deps = ["LinearAlgebra", "Random"] @@ -1695,9 +1712,9 @@ uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[deps.SpecialFunctions]] deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "ef28127915f4229c971eb43f3fc075dd3fe91880" +git-tree-sha1 = "7beb031cf8145577fbccacd94b8a8f4ce78428d3" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.2.0" +version = "2.3.0" [[deps.StableHashTraits]] deps = ["CRC32c", "Compat", "Dates", "SHA", "Tables", "TupleTools", "UUIDs"] @@ -1713,9 +1730,9 @@ version = "0.1.1" [[deps.StaticArrays]] deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] -git-tree-sha1 = "c262c8e978048c2b095be1672c9bee55b4619521" +git-tree-sha1 = "832afbae2a45b4ae7e831f86965469a24d1d8a83" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.5.24" +version = "1.5.26" [[deps.StaticArraysCore]] git-tree-sha1 = "6b7ba252635a5eff6a0b0664a41ee140a1c9e72a" @@ -1734,9 +1751,9 @@ version = "1.6.0" [[deps.StatsBase]] deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "d1bf48bfcc554a3761a133fe3a9bb01488e06916" +git-tree-sha1 = "75ebe04c5bed70b91614d684259b661c9e6274a4" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.33.21" +version = "0.34.0" [[deps.StatsFuns]] deps = ["ChainRulesCore", "HypergeometricFunctions", "InverseFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] @@ -1774,9 +1791,9 @@ version = "1.0.5" [[deps.Symbolics]] deps = ["ArrayInterface", "ConstructionBase", "DataStructures", "DiffRules", "Distributions", "DocStringExtensions", "DomainSets", "Groebner", "IfElse", "LaTeXStrings", "LambertW", "Latexify", "Libdl", "LinearAlgebra", "MacroTools", "Markdown", "NaNMath", "RecipesBase", "Reexport", "Requires", "RuntimeGeneratedFunctions", "SciMLBase", "Setfield", "SparseArrays", "SpecialFunctions", "StaticArrays", "SymbolicUtils", "TreeViews"] -git-tree-sha1 = "e23ec62c083ca8f15a4b7174331b3b8d1c511e47" +git-tree-sha1 = "c4e5688a9a5a2f4088cd1a779b0742be31cbe9aa" uuid = "0c5d862f-8b57-4792-8d23-62f2024744c7" -version = "5.3.1" +version = "5.5.0" [[deps.TOML]] deps = ["Dates"] @@ -2108,10 +2125,10 @@ uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" version = "1.5.5+0" [[deps.Zygote]] -deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "Random", "Requires", "SnoopPrecompile", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"] -git-tree-sha1 = "987ae5554ca90e837594a0f30325eeb5e7303d1e" +deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "PrecompileTools", "Random", "Requires", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"] +git-tree-sha1 = "5be3ddb88fc992a7d8ea96c3f10a49a7e98ebc7b" uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" -version = "0.6.60" +version = "0.6.62" [[deps.ZygoteRules]] deps = ["ChainRulesCore", "MacroTools"] diff --git a/examples/qram/pi_gate.ipynb b/examples/qram/pi_gate.ipynb index 0f8689dd..2cf7918f 100644 --- a/examples/qram/pi_gate.ipynb +++ b/examples/qram/pi_gate.ipynb @@ -18,23 +18,23 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Loading data dict from data/limited_drives_T_100_dt_1.0_dda_0.0001_a_0.12566370614359174_max_iter_100_00000.jld2:\n", + "Loading data dict from data/limited_drives_T_100_dt_1.0_dda_0.002_a_0.02_max_iter_500_00002.jld2:\n", "\n", - " duration = 72.61324981519805\n", - " final_fidelity = 0.9922185163356951\n" + " duration = 26.80948914618727\n", + " final_fidelity = 0.9550975523905912\n" ] }, { "data": { "text/plain": [ - "NamedTrajectory{Float64}([1.0 1.0 … 0.007575094597536527 0.0066429378333538545; 0.0 0.0 … 0.0 0.0; … ; 1.8981443306253186e-6 3.7667442303727987e-6 … 1.107924470744334e-10 -5.112400723147125e-21; 0.7334671698504867 0.7334671698504867 … 0.7334671698504867 0.7334671698504867], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 … 0.0, 0.0, 0.05541568848816433, 0.0, 0.0, -0.0034719494553613253, -0.000302106228627415, 6.171191907215001e-21, -5.112400723147125e-21, 0.7334671698504867], 100, :Δt, 519, (Ũ⃗ = 512, a = 2, da = 2, dda = 2, Δt = 1, states = 516, controls = 3), (a = ([-0.12566370614359174, -0.12566370614359174], [0.12566370614359174, 0.12566370614359174]), dda = ([-0.0001, -0.0001], [0.0001, 0.0001]), Δt = ([0.5], [1.2])), (Ũ⃗ = [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 … 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], a = [0.0, 0.0]), (a = [0.0, 0.0],), (Ũ⃗ = [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0 … 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],), (Ũ⃗ = 1:512, a = 513:514, da = 515:516, dda = 517:518, Δt = 519:519, states = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10 … 507, 508, 509, 510, 511, 512, 513, 514, 515, 516], controls = [517, 518, 519]), (:Ũ⃗, :a, :da, :dda, :Δt), (:Ũ⃗, :a, :da), (:dda, :Δt))" + "NamedTrajectory{Float64}([1.0 1.0 … 0.08078165468060403 0.07882587664153458; 0.0 0.0 … 0.0 0.0; … ; 0.00047588630074294944 0.00076657588428622 … 1.7132035748174996e-7 1.1444956860524965e-19; 0.27080292066855877 0.27080292066855877 … 0.27080292066855877 0.27080292066855877], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 … 0.0, 0.0, 0.09915545055176467, 0.0, 0.0, -0.008633865997297213, -0.0031638252315717543, 1.1444956860524965e-19, 1.1444956860524965e-19, 0.27080292066855877], 100, :Δt, 519, (Ũ⃗ = 512, a = 2, da = 2, dda = 2, Δt = 1, states = 516, controls = 3), (a = ([-0.02, -0.02], [0.02, 0.02]), dda = ([-0.002, -0.002], [0.002, 0.002]), Δt = ([0.1], [1.2])), (Ũ⃗ = [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 … 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], a = [0.0, 0.0]), (a = [0.0, 0.0],), (Ũ⃗ = [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0 … 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],), (Ũ⃗ = 1:512, a = 513:514, da = 515:516, dda = 517:518, Δt = 519:519, states = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10 … 507, 508, 509, 510, 511, 512, 513, 514, 515, 516], controls = [517, 518, 519]), (:Ũ⃗, :a, :da, :dda, :Δt), (:Ũ⃗, :a, :da), (:dda, :Δt))" ] }, "metadata": {}, @@ -42,40 +42,22 @@ } ], "source": [ - "data_path = \"data/T_100_dt_1.0_dda_0.0001_a_0.12566370614359174_max_iter_100_00000.jld2\"\n", + "data_path = \"data/limited_drives_T_100_dt_1.0_dda_0.002_a_0.02_max_iter_500_00002.jld2\"\n", "data = load_problem(data_path; return_data=true)\n", "traj = data[\"trajectory\"]" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "100-element Vector{Float64}:\n", - " 0.0\n", - " 0.7334671698504867\n", - " 1.4669343397009733\n", - " 2.20040150955146\n", - " 2.9338686794019466\n", - " 3.6673358492524333\n", - " 4.40080301910292\n", - " 5.134270188953407\n", - " 5.867737358803893\n", - " 6.60120452865438\n", - " ⋮\n", - " 66.74551245639417\n", - " 67.47897962624465\n", - " 68.21244679609514\n", - " 68.94591396594562\n", - " 69.6793811357961\n", - " 70.41284830564659\n", - " 71.14631547549708\n", - " 71.87978264534756\n", - " 72.61324981519805" + "2×100 Matrix{Float64}:\n", + " 0.0 0.00233826 0.0045334 0.00658378 … 0.00453315 0.00233811 0.0\n", + " 0.0 -0.000790894 -0.00154689 -0.00224667 0.00167523 0.000856786 0.0" ] }, "metadata": {}, @@ -83,18 +65,18 @@ } ], "source": [ - "pulse = traj.a\n", - "ts = times(traj)" + "ts = times(traj)\n", + "pulse = traj.a" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "# save pulse and times\n", - "pulse_path = \"data/pulse.hdf5\"\n", + "pulse_path = \"data/pulse_2_drive_shorter_time.hdf5\"\n", "pulse_file = h5open(pulse_path, \"w\")\n", "pulse_file[\"pulse\"] = pulse\n", "pulse_file[\"ts\"] = ts\n", @@ -103,15 +85,21 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "2×100 Matrix{Float64}:\n", - " 0.0 0.00254727 0.00505691 … 0.00505566 0.00254656 0.0\n", - " 0.0 -0.000218839 -0.000436656 0.000442186 0.000221585 0.0" + "8×100 Matrix{Float64}:\n", + " 0.0 3.94116e-5 3.67995e-5 … 0.00379268 0.00191292 0.0\n", + " 0.0 -0.00172882 -0.00339493 -0.00183975 -0.000952879 0.0\n", + " 0.0 0.000255824 0.000559932 0.000507485 0.000229223 0.0\n", + " 0.0 5.76738e-5 0.000119058 -0.000104015 -5.0021e-5 0.0\n", + " 0.0 -0.000697201 -0.001356 0.00152926 0.000782295 0.0\n", + " 0.0 0.000126126 0.000269827 … -2.13574e-5 -2.33794e-5 0.0\n", + " 0.0 0.00110387 0.00218492 0.00216998 0.00110303 0.0\n", + " 0.0 0.000466185 0.000899852 -0.000223202 -0.000123923 0.0" ] }, "metadata": {}, @@ -120,7 +108,7 @@ ], "source": [ "# load pulse and times\n", - "pulse_path = \"data/pulse.hdf5\"\n", + "pulse_path = \"data/pulse_full.hdf5\"\n", "pulse_file = h5open(pulse_path, \"r\")\n", "pulse_file[\"pulse\"][:,:]" ] diff --git a/examples/transmon/data/pi_gate/T_100_dt_0.1_Q_200.0_R_0.01_dda_bound_0.05_00000.jld2 b/examples/transmon/data/pi_gate/T_100_dt_0.1_Q_200.0_R_0.01_dda_bound_0.05_00000.jld2 new file mode 100644 index 00000000..5ba2f984 Binary files /dev/null and b/examples/transmon/data/pi_gate/T_100_dt_0.1_Q_200.0_R_0.01_dda_bound_0.05_00000.jld2 differ diff --git a/examples/transmon/data/pi_gate/T_400_dt_0.1_Q_200.0_R_0.01_dda_bound_0.05_00002.jld2 b/examples/transmon/data/pi_gate/T_400_dt_0.1_Q_200.0_R_0.01_dda_bound_0.05_00002.jld2 new file mode 100644 index 00000000..c1f629c9 Binary files /dev/null and b/examples/transmon/data/pi_gate/T_400_dt_0.1_Q_200.0_R_0.01_dda_bound_0.05_00002.jld2 differ diff --git a/examples/transmon/pi_gate.jl b/examples/transmon/pi_gate.jl index 5df7a2b0..380789ac 100644 --- a/examples/transmon/pi_gate.jl +++ b/examples/transmon/pi_gate.jl @@ -20,8 +20,8 @@ system = QuantumSystem( H_drives ) -T = 400 -Δt = 0.1 +T = 100 +Δt = 0.4 Q = 200. R = 0.01 R_L1 = 1.0 @@ -36,7 +36,10 @@ max_iter = 500 time = T * Δt +free_time = false + prob = UnitarySmoothPulseProblem(system, U_goal, T, Δt; + free_time=free_time, a_bounds=a_bounds, dda_bound=dda_bound, max_iter=max_iter, @@ -47,7 +50,9 @@ prob = UnitarySmoothPulseProblem(system, U_goal, T, Δt; solve!(prob) -println("fidelity = ", unitary_fidelity(prob.trajectory[end].Ũ⃗, prob.trajectory.goal.Ũ⃗)) +Ũ⃗_final = unitary_rollout(prob.trajectory.initial.Ũ⃗, prob.trajectory.a, prob.trajectory.timestep, system)[:, end] + +println("fidelity = ", unitary_fidelity(Ũ⃗_final, prob.trajectory.goal.Ũ⃗)) plot_dir = joinpath(@__DIR__, "plots/pi_gate/") diff --git a/images/diagram.svg b/images/diagram.svg index 44fd34c2..ef9f2cbb 100644 --- a/images/diagram.svg +++ b/images/diagram.svg @@ -1 +1 @@ -testtestsrcsrcexamplesexamplesdocsdocstransmontransmonthree_qubit_swapthree_qubit_swapsingle_qubitsingle_qubitscriptsscriptsqramqramnotebooksnotebookscavitycavitydata/pi_gatedata/pi_gateresultsresultsnewresultsnewresultsresultsresultsdatadatadatadatamintimemintimebinomial_codebinomial_codeintegrat...integrat...integrat...constrai...constrai...constrai...Manifest...Manifest...Manifest...figures_...figures_...figures_...analysis...analysis...analysis...figures_...figures_...figures_...figures_...figures_...figures_...pi_gate....pi_gate....pi_gate....data_exp...data_exp...data_exp...continuo...continuo...continuo...binomial...binomial...binomial....gitignore.ipynb.jl.tomleach dot sized by file size \ No newline at end of file +testtestsrcsrcexamplesexamplesdocsdocstransmontransmonthree_qubit_swapthree_qubit_swapsingle_qubitsingle_qubitscriptsscriptsqramqramnotebooksnotebookscavitycavitydata/pi_gatedata/pi_gateresultsresultsnewresultsnewresultsresultsresultsdatadatadatadatamintimemintimebinomial_codebinomial_codeproblem_...problem_...problem_...integrat...integrat...integrat...constrai...constrai...constrai...objectiv...objectiv...objectiv...Manifest...Manifest...Manifest...figures_...figures_...figures_...analysis...analysis...analysis...figures_...figures_...figures_...figures_...figures_...figures_...pi_gate....pi_gate....pi_gate....data_exp...data_exp...data_exp...continuo...continuo...continuo...binomial...binomial...binomial....gitignore.ipynb.jl.tomleach dot sized by file size \ No newline at end of file diff --git a/src/dynamics.jl b/src/dynamics.jl index 67313a99..e043b65c 100644 --- a/src/dynamics.jl +++ b/src/dynamics.jl @@ -40,12 +40,22 @@ function QuantumDynamics( println(" constructing knot point dynamics functions...") end - @assert all([ - !isnothing(state(integrator)) && - !isnothing(controls(integrator)) && - !isnothing(timestep(integrator)) - for integrator ∈ integrators - ]) + free_time = traj.timestep isa Symbol + + if free_time + @assert all([ + !isnothing(state(integrator)) && + !isnothing(controls(integrator)) && + !isnothing(timestep(integrator)) + for integrator ∈ integrators + ]) + else + @assert all([ + !isnothing(state(integrator)) && + !isnothing(controls(integrator)) + for integrator ∈ integrators + ]) + end for integrator ∈ integrators if integrator isa QuantumIntegrator && controls(integrator) isa Tuple @@ -91,10 +101,16 @@ function QuantumDynamics( ∂[integrator_comps, 1:2traj.dim] = ∂P(zₜ, zₜ₊₁) else - x_comps, u_comps, Δt_comps = comps(integrator, traj) - - ∂xₜf, ∂xₜ₊₁f, ∂uₜf, ∂Δtₜf = - Integrators.jacobian(integrator, zₜ, zₜ₊₁, traj) + if free_time + x_comps, u_comps, Δt_comps = comps(integrator, traj) + ∂xₜf, ∂xₜ₊₁f, ∂uₜf, ∂Δtₜf = + Integrators.jacobian(integrator, zₜ, zₜ₊₁, traj) + ∂[integrator_comps, Δt_comps] = ∂Δtₜf + else + x_comps, u_comps = comps(integrator, traj) + ∂xₜf, ∂xₜ₊₁f, ∂uₜf = + Integrators.jacobian(integrator, zₜ, zₜ₊₁, traj) + end ∂[integrator_comps, x_comps] = ∂xₜf ∂[integrator_comps, x_comps .+ traj.dim] = ∂xₜ₊₁f @@ -107,20 +123,26 @@ function QuantumDynamics( ∂[integrator_comps, u_comps] = ∂uₜf end - ∂[integrator_comps, Δt_comps] = ∂Δtₜf end elseif integrator isa DerivativeIntegrator - x_comps, dx_comps, Δt_comps = comps(integrator, traj) - - ∂xₜf, ∂xₜ₊₁f, ∂dxₜf, ∂Δtₜf = - Integrators.jacobian(integrator, zₜ, zₜ₊₁, traj) + if free_time + x_comps, dx_comps, Δt_comps = comps(integrator, traj) + ∂xₜf, ∂xₜ₊₁f, ∂dxₜf, ∂Δtₜf = + Integrators.jacobian(integrator, zₜ, zₜ₊₁, traj) + else + x_comps, dx_comps = comps(integrator, traj) + ∂xₜf, ∂xₜ₊₁f, ∂dxₜf = + Integrators.jacobian(integrator, zₜ, zₜ₊₁, traj) + end ∂[integrator_comps, x_comps] = ∂xₜf ∂[integrator_comps, x_comps .+ traj.dim] = ∂xₜ₊₁f ∂[integrator_comps, dx_comps] = ∂dxₜf - ∂[integrator_comps, Δt_comps] = ∂Δtₜf + if free_time + ∂[integrator_comps, Δt_comps] = ∂Δtₜf + end else error("integrator type not supported: $(typeof(integrator))") end @@ -147,10 +169,16 @@ function QuantumDynamics( μ∂²[1:2traj.dim, 1:2traj.dim] = sparse(μ∂²P(zₜ, zₜ₊₁, μₜ[integrator_comps])) else - x_comps, u_comps, Δt_comps = comps(integrator, traj) - μ∂uₜ∂xₜf, μ∂²uₜf, μ∂Δtₜ∂xₜf, μ∂Δtₜ∂uₜf, μ∂²Δtₜf, μ∂xₜ₊₁∂uₜf, μ∂xₜ₊₁∂Δtₜf = - hessian_of_the_lagrangian(integrator, zₜ, zₜ₊₁, μₜ[integrator_comps], traj) + if free_time + x_comps, u_comps, Δt_comps = comps(integrator, traj) + μ∂uₜ∂xₜf, μ∂²uₜf, μ∂Δtₜ∂xₜf, μ∂Δtₜ∂uₜf, μ∂²Δtₜf, μ∂xₜ₊₁∂uₜf, μ∂xₜ₊₁∂Δtₜf = + hessian_of_the_lagrangian(integrator, zₜ, zₜ₊₁, μₜ[integrator_comps], traj) + else + x_comps, u_comps = comps(integrator, traj) + μ∂uₜ∂xₜf, μ∂²uₜf, μ∂xₜ₊₁∂uₜf = + hessian_of_the_lagrangian(integrator, zₜ, zₜ₊₁, μₜ[integrator_comps], traj) + end if u_comps isa Tuple for (uᵢ_comps, μ∂uₜᵢ∂xₜf) ∈ zip(u_comps, μ∂uₜ∂xₜf) @@ -159,8 +187,10 @@ function QuantumDynamics( for (uᵢ_comps, μ∂²uₜᵢf) ∈ zip(u_comps, μ∂²uₜf) μ∂²[uᵢ_comps, uᵢ_comps] += μ∂²uₜᵢf end - for (uᵢ_comps, μ∂Δtₜ∂uₜᵢf) ∈ zip(u_comps, μ∂Δtₜ∂uₜf) - μ∂²[uᵢ_comps, Δt_comps] += μ∂Δtₜ∂uₜᵢf + if free_time + for (uᵢ_comps, μ∂Δtₜ∂uₜᵢf) ∈ zip(u_comps, μ∂Δtₜ∂uₜf) + μ∂²[uᵢ_comps, Δt_comps] += μ∂Δtₜ∂uₜᵢf + end end for (uᵢ_comps, μ∂xₜ₊₁∂uₜᵢf) ∈ zip(u_comps, μ∂xₜ₊₁∂uₜf) μ∂²[uᵢ_comps, x_comps .+ traj.dim] += μ∂xₜ₊₁∂uₜᵢf @@ -168,23 +198,26 @@ function QuantumDynamics( else μ∂²[x_comps, u_comps] += μ∂uₜ∂xₜf μ∂²[u_comps, u_comps] += μ∂²uₜf - μ∂²[u_comps, Δt_comps] += μ∂Δtₜ∂uₜf + if free_time + μ∂²[u_comps, Δt_comps] += μ∂Δtₜ∂uₜf + end μ∂²[u_comps, x_comps .+ traj.dim] += μ∂xₜ₊₁∂uₜf end - - μ∂²[x_comps, Δt_comps] += μ∂Δtₜ∂xₜf - μ∂²[Δt_comps, x_comps .+ traj.dim] += μ∂xₜ₊₁∂Δtₜf - μ∂²[Δt_comps, Δt_comps] .+= μ∂²Δtₜf + if free_time + μ∂²[x_comps, Δt_comps] += μ∂Δtₜ∂xₜf + μ∂²[Δt_comps, x_comps .+ traj.dim] += μ∂xₜ₊₁∂Δtₜf + μ∂²[Δt_comps, Δt_comps] .+= μ∂²Δtₜf + end end elseif integrator isa DerivativeIntegrator + if free_time + x_comps, dx_comps, Δt_comps = comps(integrator, traj) - x_comps, dx_comps, Δt_comps = comps(integrator, traj) - - μ∂dxₜ∂Δtₜf = -μₜ[integrator_comps] - - μ∂²[dx_comps, Δt_comps] += μ∂dxₜ∂Δtₜf + μ∂dxₜ∂Δtₜf = -μₜ[integrator_comps] + μ∂²[dx_comps, Δt_comps] += μ∂dxₜ∂Δtₜf + end end end diff --git a/src/integrators.jl b/src/integrators.jl index 352bcfbf..388ff3b0 100644 --- a/src/integrators.jl +++ b/src/integrators.jl @@ -158,8 +158,12 @@ function comps(P::AbstractIntegrator, traj::NamedTrajectory) else control_comps = traj.components[u] end - timestep_comp = traj.components[timestep(P)] - return state_comps, control_comps, timestep_comp + if traj.timestep isa Float64 + return state_comps, control_comps + else + timestep_comp = traj.components[traj.timestep] + return state_comps, control_comps, timestep_comp + end end dim(integrator::AbstractIntegrator) = integrator.dim @@ -168,22 +172,19 @@ dim(integrators::AbstractVector{<:AbstractIntegrator}) = sum(dim, integrators) struct DerivativeIntegrator <: AbstractIntegrator variable::Symbol derivative::Symbol - timestep::Symbol dim::Int end function DerivativeIntegrator( variable::Symbol, derivative::Symbol, - timestep::Symbol, traj::NamedTrajectory ) - return DerivativeIntegrator(variable, derivative, timestep, traj.dims[variable]) + return DerivativeIntegrator(variable, derivative, traj.dims[variable]) end state(integrator::DerivativeIntegrator) = integrator.variable controls(integrator::DerivativeIntegrator) = integrator.derivative -timestep(integrator::DerivativeIntegrator) = integrator.timestep @views function (D::DerivativeIntegrator)( zₜ::AbstractVector, @@ -193,8 +194,11 @@ timestep(integrator::DerivativeIntegrator) = integrator.timestep xₜ = zₜ[traj.components[D.variable]] xₜ₊₁ = zₜ₊₁[traj.components[D.variable]] dxₜ = zₜ[traj.components[D.derivative]] - Δtₜ = zₜ[traj.components[D.timestep]][1] - + if traj.timestep isa Symbol + Δtₜ = zₜ[traj.components[traj.timestep]][1] + else + Δtₜ = traj.timestep + end return xₜ₊₁ - xₜ - Δtₜ * dxₜ end @@ -205,13 +209,15 @@ end traj::NamedTrajectory ) dxₜ = zₜ[traj.components[D.derivative]] - Δtₜ = zₜ[traj.components[D.timestep]][1] - + if traj.timestep isa Symbol + Δtₜ = zₜ[traj.components[traj.timestep]][1] + else + Δtₜ = traj.timestep + end ∂xₜD = sparse(-1.0I(D.dim)) ∂xₜ₊₁D = sparse(1.0I(D.dim)) ∂dxₜD = sparse(-Δtₜ * I(D.dim)) ∂ΔtₜD = -dxₜ - return ∂xₜD, ∂xₜ₊₁D, ∂dxₜD, ∂ΔtₜD end @@ -245,7 +251,6 @@ struct UnitaryPadeIntegrator{R} <: QuantumPadeIntegrator H_drives_real_anticomm_H_drives_imag::Matrix{Matrix{R}} unitary_symb::Union{Symbol,Nothing} drive_symb::Union{Symbol,Tuple{Vararg{Symbol}},Nothing} - timestep_symb::Union{Symbol,Nothing} n_drives::Int N::Int dim::Int @@ -255,11 +260,10 @@ struct UnitaryPadeIntegrator{R} <: QuantumPadeIntegrator """ UnitaryPadeIntegrator( sys::QuantumSystem{R}, - unitary_symb::Union{Symbol,Nothing}=nothing, - drive_symb::Union{Symbol,Tuple{Vararg{Symbol}},Nothing}=nothing, - timestep_symb::Union{Symbol,Nothing}=nothing; + unitary_symb::Symbol, + drive_symb::Union{Symbol,Tuple{Vararg{Symbol}}}; order::Int=4, - autodiff::Bool=false + autodiff::Bool=order != 4 ) where R <: Real Construct a `UnitaryPadeIntegrator` for the quantum system `sys`. @@ -271,33 +275,34 @@ struct UnitaryPadeIntegrator{R} <: QuantumPadeIntegrator P = UnitaryPadeIntegrator(sys) ``` - ## for a single drive `a` and timestep `Δt`: + ## for a single drive `a`: ```julia - P = UnitaryPadeIntegrator(sys, :Ũ⃗, :a, :Δt) + P = UnitaryPadeIntegrator(sys, :Ũ⃗, :a) ``` - ## for two drives `α` and `γ`, timestep `Δt`, order `4`, and autodiffed: + ## for two drives `α` and `γ`, order `4`, and autodiffed: ```julia - P = UnitaryPadeIntegrator(sys, :Ũ⃗, (:α, :γ), :Δt; order=4, autodiff=true) + P = UnitaryPadeIntegrator(sys, :Ũ⃗, (:α, :γ); order=4, autodiff=true) ``` # Arguments - `sys::QuantumSystem{R}`: the quantum system - `unitary_symb::Union{Symbol,Nothing}=nothing`: the symbol for the unitary - `drive_symb::Union{Symbol,Tuple{Vararg{Symbol}},Nothing}=nothing`: the symbol(s) for the drives - - `timestep_symb::Union{Symbol,Nothing}=nothing`: the symbol for the timestep - `order::Int=4`: the order of the Pade approximation. Must be in `[4, 6, 8, 10]`. If order is not `4` and `autodiff` is `false`, then the integrator will use the hand-coded fourth order derivatives. - - `autodiff::Bool=false`: whether to use automatic differentiation to compute the jacobian and hessian of the lagrangian + - `autodiff::Bool=order != 4`: whether to use automatic differentiation to compute the jacobian and hessian of the lagrangian + """ function UnitaryPadeIntegrator( sys::QuantumSystem{R}, unitary_symb::Union{Symbol,Nothing}=nothing, drive_symb::Union{Symbol,Tuple{Vararg{Symbol}},Nothing}=nothing, - timestep_symb::Union{Symbol,Nothing}=nothing; order::Int=4, autodiff::Bool=false ) where R <: Real @assert order ∈ [4, 6, 8, 10] "order must be in [4, 6, 8, 10]" + @assert !isnothing(unitary_symb) "must specify unitary symbol" + @assert !isnothing(drive_symb) "must specify drive symbol" n_drives = length(sys.H_drives_real) N = size(sys.H_drift_real, 1) @@ -358,7 +363,6 @@ struct UnitaryPadeIntegrator{R} <: QuantumPadeIntegrator fetch(H_drives_real_anticomm_H_drives_imag), unitary_symb, drive_symb, - timestep_symb, n_drives, N, dim, @@ -370,7 +374,6 @@ end state(P::UnitaryPadeIntegrator) = P.unitary_symb controls(P::UnitaryPadeIntegrator) = P.drive_symb -timestep(P::UnitaryPadeIntegrator) = P.timestep_symb struct QuantumStatePadeIntegrator{R} <: QuantumPadeIntegrator G_drift::Union{Nothing, Matrix{R}} @@ -391,7 +394,6 @@ struct QuantumStatePadeIntegrator{R} <: QuantumPadeIntegrator H_drives_real_anticomm_H_drives_imag::Matrix{Matrix{R}} state_symb::Union{Symbol,Nothing} drive_symb::Union{Symbol,Tuple{Vararg{Symbol}},Nothing} - timestep_symb::Union{Symbol,Nothing} n_drives::Int N::Int dim::Int @@ -412,38 +414,33 @@ struct QuantumStatePadeIntegrator{R} <: QuantumPadeIntegrator # Examples - ## a bare integrator - ```julia - P = QuantumstatePadeIntegrator(sys) - ``` - - ## for a single drive `a` and timestep `Δt`: + ## for a single drive `a`: ```julia - P = QuantumstatePadeIntegrator(sys, :ψ̃, :a, :Δt) + P = QuantumstatePadeIntegrator(sys, :ψ̃, :a) ``` - ## for two drives `α` and `γ`, timestep `Δt`, order `8`, and autodiffed: + ## for two drives `α` and `γ`, order `8`, and autodiffed: ```julia - P = QuantumstatePadeIntegrator(sys, :ψ̃, (:α, :γ), :Δt; order=8, autodiff=true) + P = QuantumstatePadeIntegrator(sys, :ψ̃, (:α, :γ); order=8, autodiff=true) ``` # Arguments - `sys::QuantumSystem{R}`: the quantum system - - `state_symb::Union{Symbol,Nothing}=nothing`: the symbol for the quantum state - - `drive_symb::Union{Symbol,Tuple{Vararg{Symbol}},Nothing}=nothing`: the symbol(s) for the drives - - `timestep_symb::Union{Symbol,Nothing}=nothing`: the symbol for the timestep + - `state_symb::Symbol`: the symbol for the quantum state + - `drive_symb::Union{Symbol,Tuple{Vararg{Symbol}}}`: the symbol(s) for the drives - `order::Int=4`: the order of the Pade approximation. Must be in `[4, 6, 8, 10]`. If order is not `4` and `autodiff` is `false`, then the integrator will use the hand-coded fourth order derivatives. - `autodiff::Bool=false`: whether to use automatic differentiation to compute the jacobian and hessian of the lagrangian """ function QuantumStatePadeIntegrator( sys::QuantumSystem{R}, state_symb::Union{Symbol,Nothing}=nothing, - drive_symb::Union{Symbol,Tuple{Vararg{Symbol}},Nothing}=nothing, - timestep_symb::Union{Symbol,Nothing}=nothing; + drive_symb::Union{Symbol,Tuple{Vararg{Symbol}},Nothing}=nothing; order::Int=4, - autodiff::Bool=false + autodiff::Bool=order != 4 ) where R <: Real @assert order ∈ [4, 6, 8, 10] "order must be in [4, 6, 8, 10]" + @assert !isnothing(state_symb) "state_symb must be specified" + @assert !isnothing(drive_symb) "drive_symb must be specified" n_drives = length(sys.H_drives_real) N = size(sys.H_drift_real, 1) @@ -499,7 +496,6 @@ struct QuantumStatePadeIntegrator{R} <: QuantumPadeIntegrator fetch(H_drives_real_anticomm_H_drives_imag), state_symb, drive_symb, - timestep_symb, n_drives, N, dim, @@ -511,9 +507,6 @@ end state(P::QuantumStatePadeIntegrator) = P.state_symb controls(P::QuantumStatePadeIntegrator) = P.drive_symb -timestep(P::QuantumStatePadeIntegrator) = P.timestep_symb - - @inline function squared_operator( a::AbstractVector{<:Real}, @@ -649,6 +642,7 @@ end return δŨ⃗ end + function nth_order_pade( P::UnitaryPadeIntegrator{R}, Ũ⃗ₜ₊₁::AbstractVector, @@ -674,12 +668,16 @@ end ) where R <: Real Ũ⃗ₜ₊₁ = zₜ₊₁[traj.components[P.unitary_symb]] Ũ⃗ₜ = zₜ[traj.components[P.unitary_symb]] + if traj.timestep isa Symbol + Δtₜ = zₜ[traj.components[traj.timestep]][1] + else + Δtₜ = traj.timestep + end if P.drive_symb isa Tuple aₜ = vcat([zₜ[traj.components[s]] for s in P.drive_symb]...) else aₜ = zₜ[traj.components[P.drive_symb]] end - Δtₜ = zₜ[traj.components[P.timestep_symb]][1] if P.order == 4 return fourth_order_pade(P, Ũ⃗ₜ₊₁, Ũ⃗ₜ, aₜ, Δtₜ) else @@ -734,7 +732,11 @@ end else aₜ = zₜ[traj.components[P.drive_symb]] end - Δtₜ = zₜ[traj.components[P.timestep_symb]][1] + if traj.timestep isa Symbol + Δtₜ = zₜ[traj.components[traj.timestep]][1] + else + Δtₜ = traj.timestep + end if P.order == 4 return fourth_order_pade(P, ψ̃ₜ₊₁, ψ̃ₜ, aₜ, Δtₜ) else @@ -812,7 +814,7 @@ function ∂aₜ( Ũ⃗ₜ₊₁::AbstractVector{T}, Ũ⃗ₜ::AbstractVector{T}, aₜ::AbstractVector{T}, - Δtₜ::T, + Δtₜ::Real, drive_indices=1:P.n_drives ) where {R <: Real, T <: Real} n_drives = length(aₜ) @@ -834,7 +836,7 @@ function ∂aₜ( ψ̃ₜ₊₁::AbstractVector{T}, ψ̃ₜ::AbstractVector{T}, aₜ::AbstractVector{T}, - Δtₜ::T, + Δtₜ::Real, drive_indices=1:P.n_drives ) where {R <: Real, T <: Real} n_drives = length(aₜ) @@ -973,9 +975,16 @@ end zₜ₊₁::AbstractVector, traj::NamedTrajectory ) + free_time = traj.timestep isa Symbol + Ũ⃗ₜ₊₁ = zₜ₊₁[traj.components[P.unitary_symb]] Ũ⃗ₜ = zₜ[traj.components[P.unitary_symb]] - Δtₜ = zₜ[traj.components[P.timestep_symb]][1] + + if free_time + Δtₜ = zₜ[traj.components[traj.timestep]][1] + else + Δtₜ = traj.timestep + end if P.drive_symb isa Tuple aₜs = Tuple(zₜ[traj.components[s]] for s ∈ P.drive_symb) @@ -990,6 +999,9 @@ end end end ∂aₜP = tuple(∂aₜPs...) + if free_time + ∂ΔtₜP = ∂Δtₜ(P, Ũ⃗ₜ₊₁, Ũ⃗ₜ, vcat(aₜs...), Δtₜ) + end ∂ΔtₜP = ∂Δtₜ(P, Ũ⃗ₜ₊₁, Ũ⃗ₜ, vcat(aₜs...), Δtₜ) BR = B_real(P, vcat(aₜs...), Δtₜ) BI = B_imag(P, vcat(aₜs...), Δtₜ) @@ -998,7 +1010,9 @@ end else aₜ = zₜ[traj.components[P.drive_symb]] ∂aₜP = ∂aₜ(P, Ũ⃗ₜ₊₁, Ũ⃗ₜ, aₜ, Δtₜ) - ∂ΔtₜP = ∂Δtₜ(P, Ũ⃗ₜ₊₁, Ũ⃗ₜ, aₜ, Δtₜ) + if free_time + ∂ΔtₜP = ∂Δtₜ(P, Ũ⃗ₜ₊₁, Ũ⃗ₜ, aₜ, Δtₜ) + end BR = B_real(P, aₜ, Δtₜ) BI = B_imag(P, aₜ, Δtₜ) FR = F_real(P, aₜ, Δtₜ) @@ -1011,7 +1025,11 @@ end ∂Ũ⃗ₜP = -F̂ ∂Ũ⃗ₜ₊₁P = B̂ - return ∂Ũ⃗ₜP, ∂Ũ⃗ₜ₊₁P, ∂aₜP, ∂ΔtₜP + if free_time + return ∂Ũ⃗ₜP, ∂Ũ⃗ₜ₊₁P, ∂aₜP, ∂ΔtₜP + else + return ∂Ũ⃗ₜP, ∂Ũ⃗ₜ₊₁P, ∂aₜP + end end @views function jacobian( @@ -1020,9 +1038,16 @@ end zₜ₊₁::AbstractVector, traj::NamedTrajectory ) + free_time = !isnothing(P.timestep_symb) + ψ̃ₜ₊₁ = zₜ₊₁[traj.components[P.state_symb]] ψ̃ₜ = zₜ[traj.components[P.state_symb]] - Δtₜ = zₜ[traj.components[P.timestep_symb]][1] + + if free_time + Δtₜ = zₜ[traj.components[traj.timestep]][1] + else + Δtₜ = traj.timestep + end if P.drive_symb isa Tuple aₜs = Tuple(zₜ[traj.components[s]] for s ∈ P.drive_symb) @@ -1037,7 +1062,9 @@ end end end ∂aₜP = tuple(∂aₜPs...) - ∂ΔtₜP = ∂Δtₜ(P, ψ̃ₜ₊₁, ψ̃ₜ, vcat(aₜs...), Δtₜ) + if free_time + ∂ΔtₜP = ∂Δtₜ(P, ψ̃ₜ₊₁, ψ̃ₜ, vcat(aₜs...), Δtₜ) + end BR = B_real(P, vcat(aₜs...), Δtₜ) BI = B_imag(P, vcat(aₜs...), Δtₜ) FR = F_real(P, vcat(aₜs...), Δtₜ) @@ -1045,7 +1072,9 @@ end else aₜ = zₜ[traj.components[P.drive_symb]] ∂aₜP = ∂aₜ(P, ψ̃ₜ₊₁, ψ̃ₜ, aₜ, Δtₜ) - ∂ΔtₜP = ∂Δtₜ(P, ψ̃ₜ₊₁, ψ̃ₜ, aₜ, Δtₜ) + if free_time + ∂ΔtₜP = ∂Δtₜ(P, ψ̃ₜ₊₁, ψ̃ₜ, aₜ, Δtₜ) + end BR = B_real(P, aₜ, Δtₜ) BI = B_imag(P, aₜ, Δtₜ) FR = F_real(P, aₜ, Δtₜ) @@ -1058,7 +1087,11 @@ end ∂ψ̃ₜP = -F ∂ψ̃ₜ₊₁P = B - return ∂ψ̃ₜP, ∂ψ̃ₜ₊₁P, ∂aₜP, ∂ΔtₜP + if free_time + return ∂ψ̃ₜP, ∂ψ̃ₜ₊₁P, ∂aₜP, ∂ΔtₜP + else + return ∂ψ̃ₜP, ∂ψ̃ₜ₊₁P, ∂aₜP + end end @@ -1070,7 +1103,7 @@ end function μ∂aₜ∂Ũ⃗ₜ( P::UnitaryPadeIntegrator, aₜ::AbstractVector{T}, - Δtₜ::T, + Δtₜ::Real, μₜ::AbstractVector{T}, drive_indices=1:P.n_drives ) where T <: Real @@ -1088,7 +1121,7 @@ end function μ∂Ũ⃗ₜ₊₁∂aₜ( P::UnitaryPadeIntegrator, aₜ::AbstractVector{T}, - Δtₜ::T, + Δtₜ::Real, μₜ::AbstractVector{T}, drive_indices=1:P.n_drives ) where T <: Real @@ -1106,7 +1139,7 @@ end function μ∂aₜ∂ψ̃ₜ( P::QuantumStatePadeIntegrator, aₜ::AbstractVector{T}, - Δtₜ::T, + Δtₜ::Real, μₜ::AbstractVector{T}, drive_indices=1:P.n_drives ) where T <: Real @@ -1124,7 +1157,7 @@ end function μ∂ψ̃ₜ₊₁∂aₜ( P::QuantumStatePadeIntegrator, aₜ::AbstractVector{T}, - Δtₜ::T, + Δtₜ::Real, μₜ::AbstractVector{T}, drive_indices=1:P.n_drives ) where T <: Real @@ -1143,7 +1176,7 @@ function μ∂²aₜ( P::UnitaryPadeIntegrator, Ũ⃗ₜ₊₁::AbstractVector{T}, Ũ⃗ₜ::AbstractVector{T}, - Δtₜ::T, + Δtₜ::Real, μₜ::AbstractVector{T}, drive_indices=1:P.n_drives ) where T <: Real @@ -1179,7 +1212,7 @@ function μ∂²aₜ( P::QuantumStatePadeIntegrator, ψ̃ₜ₊₁::AbstractVector{T}, ψ̃ₜ::AbstractVector{T}, - Δtₜ::T, + Δtₜ::Real, μₜ::AbstractVector{T}, drive_indices=1:P.n_drives ) where T <: Real @@ -1448,17 +1481,25 @@ end μₜ::AbstractVector, traj::NamedTrajectory ) + free_time = traj.timestep isa Symbol + Ũ⃗ₜ₊₁ = zₜ₊₁[traj.components[P.unitary_symb]] Ũ⃗ₜ = zₜ[traj.components[P.unitary_symb]] - Δtₜ = zₜ[traj.components[P.timestep_symb]][1] + if free_time + Δtₜ = zₜ[traj.components[traj.timestep]][1] + else + Δtₜ = traj.timestep + end if P.drive_symb isa Tuple aₜ = Tuple(zₜ[traj.components[s]] for s ∈ P.drive_symb) μ∂aₜᵢ∂Ũ⃗ₜPs = [] μ∂²aₜᵢPs = [] - μ∂Δtₜ∂aₜᵢPs = [] + if free_time + μ∂Δtₜ∂aₜᵢPs = [] + end μ∂Ũ⃗ₜ₊₁∂aₜᵢPs = [] H_drive_mark = 0 @@ -1474,8 +1515,10 @@ end μ∂²aₜᵢP = μ∂²aₜ(P, Ũ⃗ₜ₊₁, Ũ⃗ₜ, Δtₜ, μₜ, drive_indices) push!(μ∂²aₜᵢPs, μ∂²aₜᵢP) - μ∂Δtₜ∂aₜᵢP = μ∂Δtₜ∂aₜ(P, Ũ⃗ₜ₊₁, Ũ⃗ₜ, aₜᵢ, Δtₜ, μₜ, drive_indices) - push!(μ∂Δtₜ∂aₜᵢPs, μ∂Δtₜ∂aₜᵢP) + if free_time + μ∂Δtₜ∂aₜᵢP = μ∂Δtₜ∂aₜ(P, Ũ⃗ₜ₊₁, Ũ⃗ₜ, aₜᵢ, Δtₜ, μₜ, drive_indices) + push!(μ∂Δtₜ∂aₜᵢPs, μ∂Δtₜ∂aₜᵢP) + end μ∂Ũ⃗ₜ₊₁∂aₜᵢP = μ∂Ũ⃗ₜ₊₁∂aₜ(P, aₜᵢ, Δtₜ, μₜ, drive_indices) push!(μ∂Ũ⃗ₜ₊₁∂aₜᵢPs, μ∂Ũ⃗ₜ₊₁∂aₜᵢP) @@ -1485,7 +1528,9 @@ end μ∂aₜ∂Ũ⃗ₜP = tuple(μ∂aₜᵢ∂Ũ⃗ₜPs...) μ∂²aₜP = tuple(μ∂²aₜᵢPs...) - μ∂Δtₜ∂aₜP = tuple(μ∂Δtₜ∂aₜᵢPs...) + if free_time + μ∂Δtₜ∂aₜP = tuple(μ∂Δtₜ∂aₜᵢPs...) + end μ∂Ũ⃗ₜ₊₁∂aₜP = tuple(μ∂Ũ⃗ₜ₊₁∂aₜᵢPs...) else @@ -1493,7 +1538,9 @@ end μ∂aₜ∂Ũ⃗ₜP = μ∂aₜ∂Ũ⃗ₜ(P, aₜ, Δtₜ, μₜ) μ∂²aₜP = μ∂²aₜ(P, Ũ⃗ₜ₊₁, Ũ⃗ₜ, Δtₜ, μₜ) - μ∂Δtₜ∂aₜP = μ∂Δtₜ∂aₜ(P, Ũ⃗ₜ₊₁, Ũ⃗ₜ, aₜ, Δtₜ, μₜ) + if free_time + μ∂Δtₜ∂aₜP = μ∂Δtₜ∂aₜ(P, Ũ⃗ₜ₊₁, Ũ⃗ₜ, aₜ, Δtₜ, μₜ) + end μ∂Ũ⃗ₜ₊₁∂aₜP = μ∂Ũ⃗ₜ₊₁∂aₜ(P, aₜ, Δtₜ, μₜ) end @@ -1501,19 +1548,26 @@ end aₜ = vcat(aₜ...) end - μ∂Δtₜ∂Ũ⃗ₜP = μ∂Δtₜ∂Ũ⃗ₜ(P, aₜ, Δtₜ, μₜ) - μ∂²ΔtₜP = μ∂²Δtₜ(P, Ũ⃗ₜ₊₁, Ũ⃗ₜ, aₜ, μₜ) - μ∂Ũ⃗ₜ₊₁∂ΔtₜP = μ∂Ũ⃗ₜ₊₁∂Δtₜ(P, aₜ, Δtₜ, μₜ) - - return ( - μ∂aₜ∂Ũ⃗ₜP, - μ∂²aₜP, - μ∂Δtₜ∂Ũ⃗ₜP, - μ∂Δtₜ∂aₜP, - μ∂²ΔtₜP, - μ∂Ũ⃗ₜ₊₁∂aₜP, - μ∂Ũ⃗ₜ₊₁∂ΔtₜP - ) + if free_time + μ∂Δtₜ∂Ũ⃗ₜP = μ∂Δtₜ∂Ũ⃗ₜ(P, aₜ, Δtₜ, μₜ) + μ∂²ΔtₜP = μ∂²Δtₜ(P, Ũ⃗ₜ₊₁, Ũ⃗ₜ, aₜ, μₜ) + μ∂Ũ⃗ₜ₊₁∂ΔtₜP = μ∂Ũ⃗ₜ₊₁∂Δtₜ(P, aₜ, Δtₜ, μₜ) + return ( + μ∂aₜ∂Ũ⃗ₜP, + μ∂²aₜP, + μ∂Δtₜ∂Ũ⃗ₜP, + μ∂Δtₜ∂aₜP, + μ∂²ΔtₜP, + μ∂Ũ⃗ₜ₊₁∂aₜP, + μ∂Ũ⃗ₜ₊₁∂ΔtₜP + ) + else + return ( + μ∂aₜ∂Ũ⃗ₜP, + μ∂²aₜP, + μ∂Ũ⃗ₜ₊₁∂aₜP + ) + end end @views function hessian_of_the_lagrangian( @@ -1523,17 +1577,23 @@ end μₜ::AbstractVector, traj::NamedTrajectory ) + free_time = traj.timestep isa Symbol + ψ̃ₜ₊₁ = zₜ₊₁[traj.components[P.state_symb]] ψ̃ₜ = zₜ[traj.components[P.state_symb]] - Δtₜ = zₜ[traj.components[P.timestep_symb]][1] + if free_time + Δtₜ = zₜ[traj.components[traj.timestep]][1] + end if P.drive_symb isa Tuple aₜ = Tuple(zₜ[traj.components[s]] for s ∈ P.drive_symb) μ∂aₜᵢ∂ψ̃ₜPs = [] μ∂²aₜᵢPs = [] - μ∂Δtₜ∂aₜᵢPs = [] + if free_time + μ∂Δtₜ∂aₜᵢPs = [] + end μ∂ψ̃ₜ₊₁∂aₜᵢPs = [] H_drive_mark = 0 @@ -1549,8 +1609,10 @@ end μ∂²aₜᵢP = μ∂²aₜ(P, ψ̃ₜ₊₁, ψ̃ₜ, Δtₜ, μₜ, drive_indices) push!(μ∂²aₜᵢPs, μ∂²aₜᵢP) - μ∂Δtₜ∂aₜᵢP = μ∂Δtₜ∂aₜ(P, ψ̃ₜ₊₁, ψ̃ₜ, aₜᵢ, Δtₜ, μₜ, drive_indices) - push!(μ∂Δtₜ∂aₜᵢPs, μ∂Δtₜ∂aₜᵢP) + if free_time + μ∂Δtₜ∂aₜᵢP = μ∂Δtₜ∂aₜ(P, ψ̃ₜ₊₁, ψ̃ₜ, aₜᵢ, Δtₜ, μₜ, drive_indices) + push!(μ∂Δtₜ∂aₜᵢPs, μ∂Δtₜ∂aₜᵢP) + end μ∂ψ̃ₜ₊₁∂aₜᵢP = μ∂ψ̃ₜ₊₁∂aₜ(P, aₜᵢ, Δtₜ, μₜ, drive_indices) push!(μ∂ψ̃ₜ₊₁∂aₜᵢPs, μ∂ψ̃ₜ₊₁∂aₜᵢP) @@ -1560,7 +1622,9 @@ end μ∂aₜ∂ψ̃ₜP = tuple(μ∂aₜᵢ∂ψ̃ₜPs...) μ∂²aₜP = tuple(μ∂²aₜᵢPs...) - μ∂Δtₜ∂aₜP = tuple(μ∂Δtₜ∂aₜᵢPs...) + if free_time + μ∂Δtₜ∂aₜP = tuple(μ∂Δtₜ∂aₜᵢPs...) + end μ∂ψ̃ₜ₊₁∂aₜP = tuple(μ∂ψ̃ₜ₊₁∂aₜᵢPs...) else @@ -1568,7 +1632,9 @@ end μ∂aₜ∂ψ̃ₜP = μ∂aₜ∂ψ̃ₜ(P, aₜ, Δtₜ, μₜ) μ∂²aₜP = μ∂²aₜ(P, ψ̃ₜ₊₁, ψ̃ₜ, Δtₜ, μₜ) - μ∂Δtₜ∂aₜP = μ∂Δtₜ∂aₜ(P, ψ̃ₜ₊₁, ψ̃ₜ, aₜ, Δtₜ, μₜ) + if free_time + μ∂Δtₜ∂aₜP = μ∂Δtₜ∂aₜ(P, ψ̃ₜ₊₁, ψ̃ₜ, aₜ, Δtₜ, μₜ) + end μ∂ψ̃ₜ₊₁∂aₜP = μ∂ψ̃ₜ₊₁∂aₜ(P, aₜ, Δtₜ, μₜ) end @@ -1576,19 +1642,27 @@ end aₜ = vcat(aₜ...) end - μ∂Δtₜ∂ψ̃ₜP = μ∂Δtₜ∂ψ̃ₜ(P, aₜ, Δtₜ, μₜ) - μ∂²ΔtₜP = μ∂²Δtₜ(P, ψ̃ₜ₊₁, ψ̃ₜ, aₜ, μₜ) - μ∂ψ̃ₜ₊₁∂ΔtₜP = μ∂ψ̃ₜ₊₁∂Δtₜ(P, aₜ, Δtₜ, μₜ) - - return ( - μ∂aₜ∂ψ̃ₜP, - μ∂²aₜP, - μ∂Δtₜ∂ψ̃ₜP, - μ∂Δtₜ∂aₜP, - μ∂²ΔtₜP, - μ∂ψ̃ₜ₊₁∂aₜP, - μ∂ψ̃ₜ₊₁∂ΔtₜP - ) + if free_time + μ∂Δtₜ∂ψ̃ₜP = μ∂Δtₜ∂ψ̃ₜ(P, aₜ, Δtₜ, μₜ) + μ∂²ΔtₜP = μ∂²Δtₜ(P, ψ̃ₜ₊₁, ψ̃ₜ, aₜ, μₜ) + μ∂ψ̃ₜ₊₁∂ΔtₜP = μ∂ψ̃ₜ₊₁∂Δtₜ(P, aₜ, Δtₜ, μₜ) + + return ( + μ∂aₜ∂ψ̃ₜP, + μ∂²aₜP, + μ∂Δtₜ∂ψ̃ₜP, + μ∂Δtₜ∂aₜP, + μ∂²ΔtₜP, + μ∂ψ̃ₜ₊₁∂aₜP, + μ∂ψ̃ₜ₊₁∂ΔtₜP + ) + else + return ( + μ∂aₜ∂ψ̃ₜP, + μ∂²aₜP, + μ∂ψ̃ₜ₊₁∂aₜP + ) + end end diff --git a/src/problem_templates.jl b/src/problem_templates.jl index cb700ded..14e9a976 100644 --- a/src/problem_templates.jl +++ b/src/problem_templates.jl @@ -30,6 +30,7 @@ function UnitarySmoothPulseProblem( U_goal::AbstractMatrix{<:Number}, T::Int, Δt::Float64; + free_time=true, init_trajectory::Union{NamedTrajectory, Nothing}=nothing, a_bound::Float64=Inf, a_bounds::Vector{Float64}=fill(a_bound, length(system.G_drives)), @@ -49,52 +50,57 @@ function UnitarySmoothPulseProblem( ipopt_options::Options=Options(), constraints::Vector{<:AbstractConstraint}=AbstractConstraint[], timesteps_all_equal::Bool=true, - verbose=false, + verbose::Bool=false, + U_init::Union{AbstractMatrix{<:Number},Nothing}=nothing, ) U_goal = Matrix{ComplexF64}(U_goal) + if isnothing(U_init) + Ũ⃗_init = operator_to_iso_vec(1.0I(size(U_goal, 1))) + else + Ũ⃗_init = operator_to_iso_vec(U_init) + end + n_drives = length(system.G_drives) if !isnothing(init_trajectory) traj = init_trajectory else - Δt = fill(Δt, 1, T) + if free_time + Δt = fill(Δt, 1, T) + end if isnothing(a_guess) # TODO: add warning in case U_goal is not unitary - Ũ⃗ = unitary_geodesic(U_goal, T) a_dists = [Uniform(-a_bounds[i], a_bounds[i]) for i = 1:n_drives] a = hcat([ zeros(n_drives), vcat([rand(a_dists[i], 1, T - 2) for i = 1:n_drives]...), zeros(n_drives) ]...) + try + Ũ⃗ = unitary_geodesic(U_goal, T) + catch e + @warn "Could not find geodesic. Rolling out unitary from random intial controls." + Ũ⃗ = unitary_rollout(Ũ⃗_init, a, Δt, system) + end da = randn(n_drives, T) * drive_derivative_σ dda = randn(n_drives, T) * drive_derivative_σ else - Ũ⃗ = unitary_rollout(a_guess, Δt, system) - Δt = vec(Δt) + Ũ⃗ = unitary_rollout(Ũ⃗_init, a_guess, Δt, system) a = a_guess da = derivative(a, Δt) dda = derivative(da, Δt) end - components = ( - Ũ⃗ = Ũ⃗, - a = a, - da = da, - dda = dda, - Δt = Δt, - ) - - bounds = ( - a = a_bounds, - dda = dda_bounds, - Δt = (Δt_min, Δt_max), - ) + if isnothing(U_init) + Ũ⃗_init = operator_to_iso_vec(1.0I(size(U_goal, 1))) + else + Ũ⃗_init = operator_to_iso_vec(U_init) + end initial = ( - Ũ⃗ = operator_to_iso_vec(1.0I(size(U_goal, 1))), + Ũ⃗ = Ũ⃗_init, a = zeros(n_drives), ) @@ -106,15 +112,53 @@ function UnitarySmoothPulseProblem( Ũ⃗ = operator_to_iso_vec(U_goal), ) - traj = NamedTrajectory( - components; - controls=(:dda, :Δt), - timestep=:Δt, - bounds=bounds, - initial=initial, - final=final, - goal=goal - ) + if free_time + components = ( + Ũ⃗ = Ũ⃗, + a = a, + da = da, + dda = dda, + Δt = Δt, + ) + + bounds = ( + a = a_bounds, + dda = dda_bounds, + Δt = (Δt_min, Δt_max), + ) + + traj = NamedTrajectory( + components; + controls=(:dda, :Δt), + timestep=:Δt, + bounds=bounds, + initial=initial, + final=final, + goal=goal + ) + else + components = ( + Ũ⃗ = Ũ⃗, + a = a, + da = da, + dda = dda, + ) + + bounds = ( + a = a_bounds, + dda = dda_bounds, + ) + + traj = NamedTrajectory( + components; + controls=(:dda,), + timestep=Δt, + bounds=bounds, + initial=initial, + final=final, + goal=goal + ) + end end J = QuantumUnitaryObjective(:Ũ⃗, traj, Q) @@ -122,14 +166,24 @@ function UnitarySmoothPulseProblem( J += QuadraticRegularizer(:da, traj, R_da) J += QuadraticRegularizer(:dda, traj, R_dda) - integrators = [ - UnitaryPadeIntegrator(system, :Ũ⃗, :a, :Δt), - DerivativeIntegrator(:a, :da, :Δt, traj), - DerivativeIntegrator(:da, :dda, :Δt, traj), - ] + if free_time + integrators = [ + UnitaryPadeIntegrator(system, :Ũ⃗, :a, :Δt), + DerivativeIntegrator(:a, :da, :Δt, traj), + DerivativeIntegrator(:da, :dda, :Δt, traj), + ] + else + integrators = [ + UnitaryPadeIntegrator(system, :Ũ⃗, :a), + DerivativeIntegrator(:a, :da, traj), + DerivativeIntegrator(:da, :dda, traj), + ] + end - if timesteps_all_equal - push!(constraints, TimeStepsAllEqualConstraint(:Δt, traj)) + if free_time + if timesteps_all_equal + push!(constraints, TimeStepsAllEqualConstraint(:Δt, traj)) + end end return QuantumControlProblem( @@ -226,6 +280,7 @@ function QuantumStateSmoothPulseProblem( ψ_goal::Union{AbstractVector{<:Number}, Vector{<:AbstractVector{<:Number}}}, T::Int, Δt::Float64; + free_time=true, init_trajectory::Union{NamedTrajectory, Nothing}=nothing, a_bound::Float64=Inf, a_bounds::Vector{Float64}=fill(a_bound, length(system.G_drives)), @@ -272,7 +327,9 @@ function QuantumStateSmoothPulseProblem( if !isnothing(init_trajectory) traj = init_trajectory else - Δt = fill(Δt, T) + if free_time + Δt = fill(Δt, T) + end if isnothing(a_guess) ψ̃s = NamedTuple([ @@ -297,21 +354,6 @@ function QuantumStateSmoothPulseProblem( dda = derivative(da, Δt) end - control_components = ( - a = a, - da = da, - dda = dda, - Δt = Δt, - ) - - components = merge(ψ̃s, control_components) - - bounds = ( - a = a_bounds, - dda = dda_bounds, - Δt = (Δt_min, Δt_max), - ) - ψ̃_initial = NamedTuple([ Symbol("ψ̃$i") => ψ̃_init for (i, ψ̃_init) in enumerate(ψ̃_inits) @@ -332,15 +374,56 @@ function QuantumStateSmoothPulseProblem( for (i, ψ̃_goal) in enumerate(ψ̃_goals) ]) - traj = NamedTrajectory( - components; - controls=(:dda, :Δt), - timestep=:Δt, - bounds=bounds, - initial=initial, - final=final, - goal=goal - ) + if free_time + + control_components = ( + a = a, + da = da, + dda = dda, + Δt = Δt, + ) + + components = merge(ψ̃s, control_components) + + bounds = ( + a = a_bounds, + dda = dda_bounds, + Δt = (Δt_min, Δt_max), + ) + + traj = NamedTrajectory( + components; + controls=(:dda, :Δt), + timestep=:Δt, + bounds=bounds, + initial=initial, + final=final, + goal=goal + ) + else + control_components = ( + a = a, + da = da, + dda = dda, + ) + + components = merge(ψ̃s, control_components) + + bounds = ( + a = a_bounds, + dda = dda_bounds, + ) + + traj = NamedTrajectory( + components; + controls=(:dda,), + timestep=Δt, + bounds=bounds, + initial=initial, + final=final, + goal=goal + ) + end end J = QuadraticRegularizer(:a, traj, R_a) @@ -365,19 +448,35 @@ function QuantumStateSmoothPulseProblem( append!(constraints, L1_slack_constraints) - ψ̃_integrators = [ - QuantumStatePadeIntegrator(system, Symbol("ψ̃$i"), :a, :Δt) - for i = 1:length(ψ_inits) - ] + if free_time - integrators = [ - ψ̃_integrators..., - DerivativeIntegrator(:a, :da, :Δt, traj), - DerivativeIntegrator(:da, :dda, :Δt, traj) - ] + ψ̃_integrators = [ + QuantumStatePadeIntegrator(system, Symbol("ψ̃$i"), :a, :Δt) + for i = 1:length(ψ_inits) + ] - if timesteps_all_equal - push!(constraints, TimeStepsAllEqualConstraint(:Δt, traj)) + integrators = [ + ψ̃_integrators..., + DerivativeIntegrator(:a, :da, :Δt, traj), + DerivativeIntegrator(:da, :dda, :Δt, traj) + ] + else + ψ̃_integrators = [ + QuantumStatePadeIntegrator(system, Symbol("ψ̃$i"), :a) + for i = 1:length(ψ_inits) + ] + + integrators = [ + ψ̃_integrators..., + DerivativeIntegrator(:a, :da, traj), + DerivativeIntegrator(:da, :dda, traj) + ] + end + + if free_time + if timesteps_all_equal + push!(constraints, TimeStepsAllEqualConstraint(:Δt, traj)) + end end return QuantumControlProblem( diff --git a/src/rollouts.jl b/src/rollouts.jl index 32aa50e0..a8f92ba9 100644 --- a/src/rollouts.jl +++ b/src/rollouts.jl @@ -17,13 +17,15 @@ using LinearAlgebra function rollout( ψ̃₁::AbstractVector{<:Number}, controls::AbstractMatrix{Float64}, - Δt::Union{AbstractVector{Float64}, AbstractMatrix{Float64}}, + Δt::Union{AbstractVector{Float64}, AbstractMatrix{Float64}, Float64}, system::QuantumSystem; integrator=Integrators.fourth_order_pade ) if Δt isa AbstractMatrix @assert size(Δt, 1) == 1 Δt = vec(Δt) + elseif Δt isa Float64 + Δt = fill(Δt, size(controls, 2)) end T = size(controls, 2) @@ -55,13 +57,15 @@ end function unitary_rollout( Ũ⃗₁::AbstractVector{<:Real}, controls::AbstractMatrix{Float64}, - Δt::Union{AbstractVector{Float64}, AbstractMatrix{Float64}}, + Δt::Union{AbstractVector{Float64}, AbstractMatrix{Float64}, Float64}, system::QuantumSystem; integrator=Integrators.fourth_order_pade ) if Δt isa AbstractMatrix @assert size(Δt, 1) == 1 Δt = vec(Δt) + elseif Δt isa Float64 + Δt = fill(Δt, size(controls, 2)) end T = size(controls, 2) @@ -89,7 +93,7 @@ end function unitary_rollout( controls::AbstractMatrix{Float64}, - Δt::Union{AbstractVector{Float64}, AbstractMatrix{Float64}}, + Δt::Union{AbstractVector{Float64}, AbstractMatrix{Float64}, Float64}, system::QuantumSystem; integrator=Integrators.fourth_order_pade )