diff --git a/.github/workflows/runic.yml b/.github/workflows/runic.yml deleted file mode 100644 index 28f0999..0000000 --- a/.github/workflows/runic.yml +++ /dev/null @@ -1,37 +0,0 @@ ---- -name: Check -on: - push: - branches: - - 'main' - - 'release-' - tags: - - '*' - pull_request: -jobs: - runic: - name: Runic formatting - runs-on: ubuntu-latest - # Permissions needed for reviewdog/action-suggester to post comments - permissions: - contents: read - checks: write - issues: write - pull-requests: write - steps: - - uses: actions/checkout@v5 - # - uses: julia-actions/setup-julia@v2 - # with: - # version: '1.11' - # - uses: julia-actions/cache@v2 - - uses: fredrikekre/runic-action@v1 - with: - version: '1' - format_files: true - # Fail on next step instead - continue-on-error: ${{ github.event_name == 'pull_request' }} - - uses: reviewdog/action-suggester@v1 - if: github.event_name == 'pull_request' - with: - tool_name: Runic - fail_level: warning \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5d4bee7..3a046b4 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ src/test.py src/test.jl .DS_Store .vscode -docs/build/ \ No newline at end of file +docs/build/ +Manifest.toml \ No newline at end of file diff --git a/Examples/HydrogenAnion.jl b/Examples/HydrogenAnion.jl index 350f56e..78ec4c5 100644 --- a/Examples/HydrogenAnion.jl +++ b/Examples/HydrogenAnion.jl @@ -12,44 +12,19 @@ K_transformed = psys.J * K * psys.J' w_list = [[1, -1, 0], [1, 0, -1], [0, 1, -1]] w_raw = [psys.U' * w for w in w_list] +coeffs = [-1.0, -1.0, +1.0] -let - n_basis = 50 - b1 = default_b0(psys.scale) - method = :quasirandom - basis_fns = GaussianBase[] - E₀_list = Float64[] - coeffs = [-1.0, -1.0, +1.0] - - for i in 1:n_basis - bij = generate_bij(method, i, length(w_raw), b1; qmc_sampler = SobolSample()) - A = generate_A_matrix(bij, w_raw) - push!(basis_fns, Rank0Gaussian(A)) - - basis = BasisSet(basis_fns) - ops = Operator[ - KineticEnergy(K_transformed); - (CoulombPotential(c, w) for (c, w) in zip(coeffs, w_raw))... - ] - - H = build_hamiltonian_matrix(basis, ops) - S = build_overlap_matrix(basis) - vals, _ = solve_generalized_eigenproblem(H, S) - E₀_step = minimum(vals) - - push!(E₀_list, E₀_step) - println("Step $i: E₀ = $E₀_step") - - end - - E₀ = minimum(E₀_list) - Eᵗʰ = -0.527751016523 - ΔE = abs(E₀ - Eᵗʰ) - @show ΔE - - plot( - 1:n_basis, E₀_list, xlabel = "Number of Gaussians", ylabel = "E₀ [Hartree]", - lw = 2, label = "Ground state energy", title = "Hydrogen Anion Convergence" - ) - -end + +ops = Operator[ + KineticOperator(K_transformed); + (CoulombOperator(c, w) for (c, w) in zip(coeffs, w_raw))... +] + +A = solve_ECG(ops, psys, 100) + +E = -0.527751016523 +ΔE = abs(A.ground_state - E) +@info "Energy difference" ΔE + +n, E = convergence(A) +plot(n, E) diff --git a/Examples/Hydrogen_p-wave.jl b/Examples/Hydrogen_p-wave.jl index 177550c..006456f 100644 --- a/Examples/Hydrogen_p-wave.jl +++ b/Examples/Hydrogen_p-wave.jl @@ -21,15 +21,23 @@ E₀_list = Float64[] a_vec = [1.0] +ops = Operator[ + KineticOperator(K_transformed); + (CoulombOperator(c, w) for (c, w) in zip(coeffs, w_raw))... +] + +A = solve_ECG(ops, psys, 50) + for i in 1:n_basis bij = generate_bij(method, i, length(w_raw), b1; qmc_sampler = HaltonSample()) - A = generate_A_matrix(bij, w_raw) - push!(basis_fns, Rank1Gaussian(A, [a_vec])) + A = _generate_A_matrix(bij, w_raw) + # pass a plain vector for the rank-1 displacement + push!(basis_fns, Rank1Gaussian(A, a_vec)) basis = BasisSet(basis_fns) ops = Operator[ - KineticEnergy(K_transformed); - (CoulombPotential(c, w) for (c, w) in zip(coeffs, w_raw))... + KineticOperator(K_transformed); + (CoulombOperator(c, w) for (c, w) in zip(coeffs, w_raw))... ] H = build_hamiltonian_matrix(basis, ops) @@ -52,7 +60,7 @@ for i in 1:n_basis println("Step $i: E₀ = $E₀") end -E_exact = -0.125 # +E_exact = -0.125 E_min = minimum(E₀_list) @show ΔE = abs(E_min - E_exact) diff --git a/Examples/Hydrogen_s-wave.jl b/Examples/Hydrogen_s-wave.jl index 4eec94e..003ea5a 100644 --- a/Examples/Hydrogen_s-wave.jl +++ b/Examples/Hydrogen_s-wave.jl @@ -3,6 +3,8 @@ using LinearAlgebra using Plots using QuasiMonteCarlo +import FewBodyECG: _generate_A_matrix + masses = [1.0e15, 1.0] # proton, electron psys = ParticleSystem(masses) @@ -19,16 +21,18 @@ b1 = 1.5 basis_fns = GaussianBase[] E₀_list = Float64[] +ops = Operator[ + KineticOperator(K_transformed); + (CoulombOperator(c, w) for (c, w) in zip(coeffs, w_raw))... +] + + for i in 1:n_basis bij = generate_bij(method, i, length(w_raw), b1; qmc_sampler = SobolSample()) - A = generate_A_matrix(bij, w_raw) + A = _generate_A_matrix(bij, w_raw) push!(basis_fns, Rank0Gaussian(A)) basis = BasisSet(basis_fns) - ops = Operator[ - KineticEnergy(K_transformed); - (CoulombPotential(c, w) for (c, w) in zip(coeffs, w_raw))... - ] H = build_hamiltonian_matrix(basis, ops) S = build_overlap_matrix(basis) diff --git a/Examples/Positronium.jl b/Examples/Positronium.jl index daa6f93..30c4033 100644 --- a/Examples/Positronium.jl +++ b/Examples/Positronium.jl @@ -14,6 +14,13 @@ w_raw = [psys.U' * w for w in w_list] coeffs = [+1.0, -1.0, -1.0] +ops = Operator[ + KineticOperator(K_transformed); + (CoulombOperator(c, w) for (c, w) in zip(coeffs, w_raw))... +] + +A = solve_ECG(ops, psys, 100) + let n_basis = 100 b1 = default_b0(psys.scale) @@ -23,13 +30,13 @@ let for i in 1:n_basis bij = generate_bij(method, i, length(w_raw), b1; qmc_sampler = SobolSample()) - A = generate_A_matrix(bij, w_raw) + A = _generate_A_matrix(bij, w_raw) push!(basis_fns, Rank0Gaussian(A)) basis = BasisSet(basis_fns) ops = Operator[ - KineticEnergy(K_transformed); - (CoulombPotential(c, w) for (c, w) in zip(coeffs, w_raw))... + KineticOperator(K_transformed); + (CoulombOperator(c, w) for (c, w) in zip(coeffs, w_raw))... ] H = build_hamiltonian_matrix(basis, ops) @@ -39,13 +46,13 @@ let E₀ = minimum(vals) push!(E₀_list, E₀) - println("Step $i: E₀ = $E₀") + @info "Step $i" E₀ = E₀ end E₀ = minimum(E₀_list) Eᵗʰ = -0.2620050702328 ΔE = abs(E₀ - Eᵗʰ) - @show ΔE + @info "Energy difference" ΔE r = range(0.01, 14.0, length = 400) ρ_r = [rval^2 * abs2(ψ₀([rval, 0.0], c₀, basis_fns)) for rval in r] diff --git a/Manifest.toml b/Manifest.toml deleted file mode 100644 index c30d4d5..0000000 --- a/Manifest.toml +++ /dev/null @@ -1,588 +0,0 @@ -# This file is machine-generated - editing it directly is not advised - -julia_version = "1.11.6" -manifest_format = "2.0" -project_hash = "635cf368533e28beaba4d8c3c9a432477d04656c" - -[[deps.ADTypes]] -git-tree-sha1 = "60665b326b75db6517939d0e1875850bc4a54368" -uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" -version = "1.17.0" - - [deps.ADTypes.extensions] - ADTypesChainRulesCoreExt = "ChainRulesCore" - ADTypesConstructionBaseExt = "ConstructionBase" - ADTypesEnzymeCoreExt = "EnzymeCore" - - [deps.ADTypes.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" - EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" - -[[deps.Accessors]] -deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"] -git-tree-sha1 = "3b86719127f50670efe356bc11073d84b4ed7a5d" -uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" -version = "0.1.42" - - [deps.Accessors.extensions] - AxisKeysExt = "AxisKeys" - IntervalSetsExt = "IntervalSets" - LinearAlgebraExt = "LinearAlgebra" - StaticArraysExt = "StaticArrays" - StructArraysExt = "StructArrays" - TestExt = "Test" - UnitfulExt = "Unitful" - - [deps.Accessors.weakdeps] - AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" - Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" - -[[deps.Adapt]] -deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "f7817e2e585aa6d924fd714df1e2a84be7896c60" -uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "4.3.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.ArrayInterface]] -deps = ["Adapt", "LinearAlgebra"] -git-tree-sha1 = "dbd8c3bbbdbb5c2778f85f4422c39960eac65a42" -uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.20.0" - - [deps.ArrayInterface.extensions] - ArrayInterfaceBandedMatricesExt = "BandedMatrices" - ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" - ArrayInterfaceCUDAExt = "CUDA" - ArrayInterfaceCUDSSExt = "CUDSS" - 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.CommonSubexpressions]] -deps = ["MacroTools"] -git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" -uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" -version = "0.3.1" - -[[deps.Compat]] -deps = ["TOML", "UUIDs"] -git-tree-sha1 = "0037835448781bb46feb39866934e243886d756a" -uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.18.0" -weakdeps = ["Dates", "LinearAlgebra"] - - [deps.Compat.extensions] - CompatLinearAlgebraExt = "LinearAlgebra" - -[[deps.CompilerSupportLibraries_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.1.1+0" - -[[deps.CompositionsBase]] -git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" -uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" -version = "0.1.2" -weakdeps = ["InverseFunctions"] - - [deps.CompositionsBase.extensions] - CompositionsBaseInverseFunctionsExt = "InverseFunctions" - -[[deps.ConcreteStructs]] -git-tree-sha1 = "f749037478283d372048690eb3b5f92a79432b34" -uuid = "2569d6c7-a4a2-43d3-a901-331e8e4be471" -version = "0.2.3" - -[[deps.ConstructionBase]] -git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" -uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.6.0" - - [deps.ConstructionBase.extensions] - ConstructionBaseIntervalSetsExt = "IntervalSets" - ConstructionBaseLinearAlgebraExt = "LinearAlgebra" - ConstructionBaseStaticArraysExt = "StaticArrays" - - [deps.ConstructionBase.weakdeps] - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.DataAPI]] -git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" -uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.16.0" - -[[deps.DataStructures]] -deps = ["OrderedCollections"] -git-tree-sha1 = "6c72198e6a101cccdd4c9731d3985e904ba26037" -uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.19.1" - -[[deps.Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" -version = "1.11.0" - -[[deps.DelimitedFiles]] -deps = ["Mmap"] -git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" -uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" -version = "1.9.1" - -[[deps.DiffResults]] -deps = ["StaticArraysCore"] -git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" -uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" -version = "1.1.0" - -[[deps.DiffRules]] -deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] -git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" -uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" -version = "1.15.1" - -[[deps.DifferentiationInterface]] -deps = ["ADTypes", "LinearAlgebra"] -git-tree-sha1 = "16946a4d305607c3a4af54ff35d56f0e9444ed0e" -uuid = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" -version = "0.7.7" - - [deps.DifferentiationInterface.extensions] - DifferentiationInterfaceChainRulesCoreExt = "ChainRulesCore" - DifferentiationInterfaceDiffractorExt = "Diffractor" - DifferentiationInterfaceEnzymeExt = ["EnzymeCore", "Enzyme"] - DifferentiationInterfaceFastDifferentiationExt = "FastDifferentiation" - DifferentiationInterfaceFiniteDiffExt = "FiniteDiff" - DifferentiationInterfaceFiniteDifferencesExt = "FiniteDifferences" - DifferentiationInterfaceForwardDiffExt = ["ForwardDiff", "DiffResults"] - DifferentiationInterfaceGPUArraysCoreExt = "GPUArraysCore" - DifferentiationInterfaceGTPSAExt = "GTPSA" - DifferentiationInterfaceMooncakeExt = "Mooncake" - DifferentiationInterfacePolyesterForwardDiffExt = ["PolyesterForwardDiff", "ForwardDiff", "DiffResults"] - DifferentiationInterfaceReverseDiffExt = ["ReverseDiff", "DiffResults"] - DifferentiationInterfaceSparseArraysExt = "SparseArrays" - DifferentiationInterfaceSparseConnectivityTracerExt = "SparseConnectivityTracer" - DifferentiationInterfaceSparseMatrixColoringsExt = "SparseMatrixColorings" - DifferentiationInterfaceStaticArraysExt = "StaticArrays" - DifferentiationInterfaceSymbolicsExt = "Symbolics" - DifferentiationInterfaceTrackerExt = "Tracker" - DifferentiationInterfaceZygoteExt = ["Zygote", "ForwardDiff"] - - [deps.DifferentiationInterface.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - DiffResults = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" - Diffractor = "9f5e2b26-1114-432f-b630-d3fe2085c51c" - Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" - EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" - FastDifferentiation = "eb9bf01b-bf85-4b60-bf87-ee5de06c00be" - FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41" - FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000" - ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" - GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" - GTPSA = "b27dd330-f138-47c5-815b-40db9dd9b6e8" - Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" - PolyesterForwardDiff = "98d1487c-24ca-40b6-b7ab-df2af84e126b" - ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" - SparseMatrixColorings = "0a514795-09f3-496d-8182-132a7b665d35" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" - Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" - Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" - -[[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.EnumX]] -git-tree-sha1 = "bddad79635af6aec424f53ed8aad5d7555dc6f00" -uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" -version = "1.0.5" - -[[deps.FillArrays]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "6a70198746448456524cb442b8af316927ff3e1a" -uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.13.0" - - [deps.FillArrays.extensions] - FillArraysPDMatsExt = "PDMats" - FillArraysSparseArraysExt = "SparseArrays" - FillArraysStatisticsExt = "Statistics" - - [deps.FillArrays.weakdeps] - PDMats = "90014a1f-27ba-587c-ab20-58faa44d9150" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - -[[deps.FiniteDiff]] -deps = ["ArrayInterface", "LinearAlgebra", "Setfield"] -git-tree-sha1 = "31fd32af86234b6b71add76229d53129aa1b87a9" -uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" -version = "2.28.1" - - [deps.FiniteDiff.extensions] - FiniteDiffBandedMatricesExt = "BandedMatrices" - FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" - FiniteDiffSparseArraysExt = "SparseArrays" - FiniteDiffStaticArraysExt = "StaticArrays" - - [deps.FiniteDiff.weakdeps] - BandedMatrices = "aae01518-5342-5314-be14-df237901396f" - BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.ForwardDiff]] -deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "ce15956960057e9ff7f1f535400ffa14c92429a4" -uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "1.1.0" - - [deps.ForwardDiff.extensions] - ForwardDiffStaticArraysExt = "StaticArrays" - - [deps.ForwardDiff.weakdeps] - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.Future]] -deps = ["Random"] -uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" -version = "1.11.0" - -[[deps.IntegerMathUtils]] -git-tree-sha1 = "4c1acff2dc6b6967e7e750633c50bc3b8d83e617" -uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" -version = "0.1.3" - -[[deps.InverseFunctions]] -git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb" -uuid = "3587e190-3f89-42d0-90ee-14403ec27112" -version = "0.1.17" - - [deps.InverseFunctions.extensions] - InverseFunctionsDatesExt = "Dates" - InverseFunctionsTestExt = "Test" - - [deps.InverseFunctions.weakdeps] - Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" - Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[deps.IrrationalConstants]] -git-tree-sha1 = "e2222959fbc6c19554dc15174c81bf7bf3aa691c" -uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" -version = "0.2.4" - -[[deps.JLLWrappers]] -deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "0533e564aae234aff59ab625543145446d8b6ec2" -uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.7.1" - -[[deps.LatticeRules]] -deps = ["Random"] -git-tree-sha1 = "7f5b02258a3ca0221a6a9710b0a0a2e8fb4957fe" -uuid = "73f95e8e-ec14-4e6a-8b18-0d2e271c4e55" -version = "0.0.1" - -[[deps.Libdl]] -uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" -version = "1.11.0" - -[[deps.LineSearches]] -deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] -git-tree-sha1 = "4adee99b7262ad2a1a4bbbc59d993d24e55ea96f" -uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" -version = "7.4.0" - -[[deps.LinearAlgebra]] -deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -version = "1.11.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.MacroTools]] -git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" -uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.16" - -[[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.NLSolversBase]] -deps = ["ADTypes", "DifferentiationInterface", "Distributed", "FiniteDiff", "ForwardDiff"] -git-tree-sha1 = "25a6638571a902ecfb1ae2a18fc1575f86b1d4df" -uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" -version = "7.10.0" - -[[deps.NaNMath]] -deps = ["OpenLibm_jll"] -git-tree-sha1 = "9b8215b1ee9e78a293f99797cd31375471b2bcae" -uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "1.1.3" - -[[deps.OpenBLAS_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] -uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.27+1" - -[[deps.OpenLibm_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.5+0" - -[[deps.OpenSpecFun_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335" -uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" -version = "0.5.6+0" - -[[deps.Optim]] -deps = ["Compat", "EnumX", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] -git-tree-sha1 = "61942645c38dd2b5b78e2082c9b51ab315315d10" -uuid = "429524aa-4258-5aef-a3af-852621145aeb" -version = "1.13.2" - - [deps.Optim.extensions] - OptimMOIExt = "MathOptInterface" - - [deps.Optim.weakdeps] - MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" - -[[deps.OrderedCollections]] -git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" -uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.8.1" - -[[deps.Parameters]] -deps = ["OrderedCollections", "UnPack"] -git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" -uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" -version = "0.12.3" - -[[deps.PositiveFactorizations]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "17275485f373e6673f7e7f97051f703ed5b15b20" -uuid = "85a6dd25-e78a-55b7-8502-1745935b8125" -version = "0.2.4" - -[[deps.Preferences]] -deps = ["TOML"] -git-tree-sha1 = "0f27480397253da18fe2c12a4ba4eb9eb208bf3d" -uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.5.0" - -[[deps.Primes]] -deps = ["IntegerMathUtils"] -git-tree-sha1 = "25cdd1d20cd005b52fc12cb6be3f75faaf59bb9b" -uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" -version = "0.5.7" - -[[deps.Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" -version = "1.11.0" - -[[deps.PtrArrays]] -git-tree-sha1 = "1d36ef11a9aaf1e8b74dacc6a731dd1de8fd493d" -uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" -version = "1.3.0" - -[[deps.QuasiMonteCarlo]] -deps = ["Accessors", "ConcreteStructs", "LatticeRules", "LinearAlgebra", "Primes", "Random", "Requires", "Sobol", "StatsBase"] -git-tree-sha1 = "cc086f8485bce77b6187141e1413c3b55f9a4341" -uuid = "8a4e6c94-4038-4cdc-81c3-7e6ffdb2a71b" -version = "0.3.3" - - [deps.QuasiMonteCarlo.extensions] - QuasiMonteCarloDistributionsExt = "Distributions" - - [deps.QuasiMonteCarlo.weakdeps] - Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" - -[[deps.Random]] -deps = ["SHA"] -uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" -version = "1.11.0" - -[[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.Serialization]] -uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" -version = "1.11.0" - -[[deps.Setfield]] -deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] -git-tree-sha1 = "c5391c6ace3bc430ca630251d02ea9687169ca68" -uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" -version = "1.1.2" - -[[deps.Sobol]] -deps = ["DelimitedFiles", "Random"] -git-tree-sha1 = "5a74ac22a9daef23705f010f72c81d6925b19df8" -uuid = "ed01d8cd-4d21-5b2a-85b4-cc3bdc58bad4" -version = "1.5.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.11.0" - -[[deps.SpecialFunctions]] -deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "41852b8679f78c8d8961eeadc8f62cef861a52e3" -uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.5.1" - - [deps.SpecialFunctions.extensions] - SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" - - [deps.SpecialFunctions.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - -[[deps.StaticArraysCore]] -git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" -uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" -version = "1.4.3" - -[[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 = "2c962245732371acd51700dbb268af311bddd719" -uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.6" - -[[deps.SuiteSparse_jll]] -deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] -uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.7.0+0" - -[[deps.TOML]] -deps = ["Dates"] -uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.3" - -[[deps.UUIDs]] -deps = ["Random", "SHA"] -uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" -version = "1.11.0" - -[[deps.UnPack]] -git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" -uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" -version = "1.0.2" - -[[deps.Unicode]] -uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" -version = "1.11.0" - -[[deps.libblastrampoline_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.11.0+0" diff --git a/Project.toml b/Project.toml index 46732f3..85cf46a 100644 --- a/Project.toml +++ b/Project.toml @@ -4,15 +4,15 @@ authors = ["Shuhei Ohno", "Martin Mikkelsen"] version = "1.0.5" [deps] +FewBodyHamiltonians = "3a126c26-e5d7-4a95-83c3-3b69f8a11ded" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -Optim = "429524aa-4258-5aef-a3af-852621145aeb" QuasiMonteCarlo = "8a4e6c94-4038-4cdc-81c3-7e6ffdb2a71b" SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" [compat] Aqua = "0.8.13" +FewBodyHamiltonians = "0.0.2" LinearAlgebra = "1.7.3" -Optim = "1.7.8" QuasiMonteCarlo = "0.3.3" SpecialFunctions = "2.5.0" Test = "1.11.0" diff --git a/docs/Manifest.toml b/docs/Manifest.toml index 5e6505e..2e5e8bc 100644 --- a/docs/Manifest.toml +++ b/docs/Manifest.toml @@ -1,13 +1,13 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.11.5" +julia_version = "1.11.7" manifest_format = "2.0" -project_hash = "5e5650f1e315700af7ff5d51c926ac71776b4d7a" +project_hash = "7bc105c61ab9f45572602f700a9e0c9169cae73d" [[deps.ADTypes]] -git-tree-sha1 = "e2478490447631aedba0823d4d7a80b2cc8cdb32" +git-tree-sha1 = "27cecae79e5cc9935255f90c53bb831cc3c870d7" uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" -version = "1.14.0" +version = "1.18.0" [deps.ADTypes.extensions] ADTypesChainRulesCoreExt = "ChainRulesCore" @@ -79,9 +79,9 @@ version = "1.1.2" [[deps.ArrayInterface]] deps = ["Adapt", "LinearAlgebra"] -git-tree-sha1 = "9606d7832795cbef89e06a550475be300364a8aa" +git-tree-sha1 = "dbd8c3bbbdbb5c2778f85f4422c39960eac65a42" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.19.0" +version = "7.20.0" [deps.ArrayInterface.extensions] ArrayInterfaceBandedMatricesExt = "BandedMatrices" @@ -91,6 +91,7 @@ version = "7.19.0" ArrayInterfaceChainRulesCoreExt = "ChainRulesCore" ArrayInterfaceChainRulesExt = "ChainRules" ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceMetalExt = "Metal" ArrayInterfaceReverseDiffExt = "ReverseDiff" ArrayInterfaceSparseArraysExt = "SparseArrays" ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" @@ -104,6 +105,7 @@ version = "7.19.0" 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" @@ -130,9 +132,9 @@ 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 = "2ac646d71d0d24b44f3f8c84da8c9f4d70fb67df" +git-tree-sha1 = "fde3bf89aead2e723284a8ff9cdf5b551ed700e8" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" -version = "1.18.4+0" +version = "1.18.5+0" [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] @@ -142,9 +144,9 @@ version = "0.7.8" [[deps.ColorSchemes]] deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] -git-tree-sha1 = "403f2d8e209681fcbd9468a8514efff3ea08452e" +git-tree-sha1 = "b0fd3f56fa442f81e0a47815c92245acfaaa4e34" uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" -version = "3.29.0" +version = "3.31.0" [[deps.ColorTypes]] deps = ["FixedPointNumbers", "Random"] @@ -168,9 +170,9 @@ weakdeps = ["SpecialFunctions"] [[deps.Colors]] deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] -git-tree-sha1 = "64e15186f0aa277e174aa81798f7eb8598e0157e" +git-tree-sha1 = "37ea44092930b1811e666c3bc38065d7d87fcc74" uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" -version = "0.13.0" +version = "0.13.1" [[deps.CommonSubexpressions]] deps = ["MacroTools"] @@ -180,9 +182,9 @@ version = "0.3.1" [[deps.Compat]] deps = ["TOML", "UUIDs"] -git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" +git-tree-sha1 = "0037835448781bb46feb39866934e243886d756a" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.16.0" +version = "4.18.0" weakdeps = ["Dates", "LinearAlgebra"] [deps.Compat.extensions] @@ -214,9 +216,9 @@ uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" version = "2.5.0" [[deps.ConstructionBase]] -git-tree-sha1 = "76219f1ed5771adbb096743bff43fb5fdd4c1157" +git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.5.8" +version = "1.6.0" [deps.ConstructionBase.extensions] ConstructionBaseIntervalSetsExt = "IntervalSets" @@ -239,10 +241,10 @@ uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" version = "1.16.0" [[deps.DataStructures]] -deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "4e1fe97fdaed23e9dc21d4d664bea76b65fc50a0" +deps = ["OrderedCollections"] +git-tree-sha1 = "6c72198e6a101cccdd4c9731d3985e904ba26037" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.22" +version = "0.19.1" [[deps.Dates]] deps = ["Printf"] @@ -275,9 +277,9 @@ version = "1.15.1" [[deps.DifferentiationInterface]] deps = ["ADTypes", "LinearAlgebra"] -git-tree-sha1 = "c8d85ecfcbaef899308706bebdd8b00107f3fb43" +git-tree-sha1 = "16946a4d305607c3a4af54ff35d56f0e9444ed0e" uuid = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" -version = "0.6.54" +version = "0.7.7" [deps.DifferentiationInterface.extensions] DifferentiationInterfaceChainRulesCoreExt = "ChainRulesCore" @@ -329,15 +331,15 @@ uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" version = "1.11.0" [[deps.DocStringExtensions]] -git-tree-sha1 = "e7b7e6f178525d17c720ab9c081e4ef04429f860" +git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c" uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" -version = "0.9.4" +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 = "6c182d0bd94142d7cbc3ae8a1e74668f15d0dd65" +git-tree-sha1 = "47ffb8f27ffc01e2e57e7ae5365ae5ceef87b03d" uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4" -version = "1.11.4" +version = "1.14.1" [[deps.Downloads]] deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] @@ -363,27 +365,32 @@ version = "0.1.11" [[deps.Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "d55dffd9ae73ff72f1c0482454dcf2ec6c6c4a63" +git-tree-sha1 = "7bb1361afdb33c7f2b085aa49ea8fe1b0fb14e58" uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.6.5+0" +version = "2.7.1+0" [[deps.FFMPEG]] deps = ["FFMPEG_jll"] -git-tree-sha1 = "53ebe7511fa11d33bec688a9178fac4e49eeee00" +git-tree-sha1 = "83dc665d0312b41367b7263e8a4d172eac1897f4" uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" -version = "0.4.2" +version = "0.4.4" [[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 = "466d45dc38e15794ec7d5d63ec03d776a9aff36e" +git-tree-sha1 = "3a948313e7a41eb1db7a1e733e6335f17b4ab3c4" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" -version = "4.4.4+1" +version = "7.1.1+0" [[deps.FewBodyECG]] -deps = ["LinearAlgebra", "Optim", "Plots", "QuasiMonteCarlo", "SpecialFunctions"] +deps = ["FewBodyHamiltonians", "LinearAlgebra", "QuasiMonteCarlo", "SpecialFunctions"] path = ".." uuid = "083b1810-24a1-4a79-9a41-145bb2bb8ceb" -version = "1.0.4" +version = "1.0.5" + +[[deps.FewBodyHamiltonians]] +git-tree-sha1 = "3cf35661914b5eb9bce1f2a5ced704b4133ee1d4" +uuid = "3a126c26-e5d7-4a95-83c3-3b69f8a11ded" +version = "0.0.2" [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" @@ -391,9 +398,9 @@ version = "1.11.0" [[deps.FillArrays]] deps = ["LinearAlgebra"] -git-tree-sha1 = "6a70198746448456524cb442b8af316927ff3e1a" +git-tree-sha1 = "173e4d8f14230a7523ae11b9a3fa9edb3e0efd78" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.13.0" +version = "1.14.0" [deps.FillArrays.extensions] FillArraysPDMatsExt = "PDMats" @@ -407,9 +414,9 @@ version = "1.13.0" [[deps.FiniteDiff]] deps = ["ArrayInterface", "LinearAlgebra", "Setfield"] -git-tree-sha1 = "f089ab1f834470c525562030c8cfde4025d5e915" +git-tree-sha1 = "31fd32af86234b6b71add76229d53129aa1b87a9" uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" -version = "2.27.0" +version = "2.28.1" [deps.FiniteDiff.extensions] FiniteDiffBandedMatricesExt = "BandedMatrices" @@ -431,9 +438,9 @@ version = "0.8.5" [[deps.Fontconfig_jll]] deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] -git-tree-sha1 = "301b5d5d731a0654825f1f2e906990f7141a106b" +git-tree-sha1 = "f85dac9a96a01087df6e3a749840015a0ca3817d" uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" -version = "2.16.0+0" +version = "2.17.1+0" [[deps.Format]] git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" @@ -442,9 +449,9 @@ version = "1.3.7" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "910febccb28d493032495b7009dce7d7f7aee554" +git-tree-sha1 = "dc41303865a16274ecb8450c220021ce1e0cf05f" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "1.0.1" +version = "1.2.1" [deps.ForwardDiff.extensions] ForwardDiffStaticArraysExt = "StaticArrays" @@ -477,39 +484,51 @@ 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 = "7ffa4049937aeba2e5e1242274dc052b0362157a" +git-tree-sha1 = "1828eb7275491981fa5f1752a5e126e8f26f8741" uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" -version = "0.73.14" +version = "0.73.17" [[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 = "98fc192b4e4b938775ecd276ce88f539bcec358e" +git-tree-sha1 = "27299071cc29e409488ada41ec7643e0ab19091f" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" -version = "0.73.14+0" +version = "0.73.17+0" -[[deps.Gettext_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] -git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" -uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" -version = "0.21.0+0" +[[deps.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_jll", "JLLWrappers", "OpenSSH_jll"] -git-tree-sha1 = "2230a9cc32394b11a3b3aa807a382e3bbab1198c" +deps = ["Git_LFS_jll", "Git_jll", "JLLWrappers", "OpenSSH_jll"] +git-tree-sha1 = "824a1890086880696fc908fe12a17bcf61738bd8" uuid = "d7ba0133-e1db-5d97-8f8c-041e4b3a1eb2" -version = "1.4.0" +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 = "2f6d6f7e6d6de361865d4394b802c02fc944fc7c" +git-tree-sha1 = "e2aef26f7d273f1e5b1daba56837c47b49b4388f" uuid = "f8c6e375-362e-5223-8a59-34ff63f689eb" -version = "2.49.0+0" +version = "2.51.1+0" [[deps.Glib_jll]] -deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "b0036b392358c80d2d2124746c2bf3d48d457938" +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.82.4+0" +version = "2.86.0+0" [[deps.Graphite2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -524,15 +543,15 @@ 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 = "f93655dc73d7a0b4a368e3c0bce296ae035ad76e" +git-tree-sha1 = "ed5e9c58612c4e081aecdb6e1a479e18462e041e" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" -version = "1.10.16" +version = "1.10.17" [[deps.HarfBuzz_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] -git-tree-sha1 = "55c53be97790242c29031e5cd45e8ac296dadda3" +git-tree-sha1 = "f923f9a774fcf3f5cb761bfa43aeadd689714813" uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" -version = "8.5.0+0" +version = "8.5.1+0" [[deps.IOCapture]] deps = ["Logging", "Random"] @@ -573,9 +592,9 @@ version = "0.1.11" [[deps.JLLWrappers]] deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "a007feb38b422fbdab534406aeca1b86823cb4d6" +git-tree-sha1 = "0533e564aae234aff59ab625543145446d8b6ec2" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.7.0" +version = "1.7.1" [[deps.JSON]] deps = ["Dates", "Mmap", "Parsers", "Unicode"] @@ -585,15 +604,15 @@ version = "0.21.4" [[deps.JpegTurbo_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "eac1206917768cb54957c65a615460d87b455fc1" +git-tree-sha1 = "4255f0032eafd6451d707a51d5f0248b8a165e4d" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "3.1.1+0" +version = "3.1.3+0" [[deps.LAME_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "170b660facf5df5de098d866564877e119141cbd" +git-tree-sha1 = "059aabebaa7c82ccb853dd4a0ee9d17796f7e1bc" uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" -version = "3.100.2+0" +version = "3.100.3+0" [[deps.LERC_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -619,20 +638,22 @@ uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" version = "1.4.0" [[deps.Latexify]] -deps = ["Format", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Requires"] -git-tree-sha1 = "cd10d2cc78d34c0e2a3a36420ab607b611debfbb" +deps = ["Format", "Ghostscript_jll", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Requires"] +git-tree-sha1 = "44f93c47f9cd6c7e431f2f2091fcba8f01cd7e8f" uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" -version = "0.16.7" +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.LatticeRules]] deps = ["Random"] @@ -675,10 +696,10 @@ uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" version = "1.11.0" [[deps.Libffi_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "27ecae93dd25ee0909666e6835051dd684cc035e" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c8da7e6a91781c41a863611c7e966098d783c57a" uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" -version = "3.2.2+2" +version = "3.4.7+0" [[deps.Libglvnd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll"] @@ -694,9 +715,9 @@ version = "1.18.0+0" [[deps.Libmount_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "a31572773ac1b745e0343fe5e2c8ddda7a37e997" +git-tree-sha1 = "706dfd3c0dd56ca090e86884db6eda70fa7dd4af" uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" -version = "2.41.0+0" +version = "2.41.1+0" [[deps.Libtiff_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] @@ -706,15 +727,15 @@ version = "4.7.1+0" [[deps.Libuuid_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "321ccef73a96ba828cd51f2ab5b9f917fa73945a" +git-tree-sha1 = "d3c8af829abaeba27181db4acb485b18d15d89c6" uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" -version = "2.41.0+0" +version = "2.41.1+0" [[deps.LineSearches]] deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] -git-tree-sha1 = "e4c3be53733db1051cc15ecf573b1042b3a712a1" +git-tree-sha1 = "4adee99b7262ad2a1a4bbbc59d993d24e55ea96f" uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" -version = "7.3.0" +version = "7.4.0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] @@ -795,9 +816,9 @@ version = "2023.12.12" [[deps.NLSolversBase]] deps = ["ADTypes", "DifferentiationInterface", "Distributed", "FiniteDiff", "ForwardDiff"] -git-tree-sha1 = "b14c7be6046e7d48e9063a0053f95ee0fc954176" +git-tree-sha1 = "25a6638571a902ecfb1ae2a18fc1575f86b1d4df" uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" -version = "7.9.1" +version = "7.10.0" [[deps.NaNMath]] deps = ["OpenLibm_jll"] @@ -810,10 +831,10 @@ uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" version = "1.2.0" [[deps.Ogg_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "b6aa4566bb7ae78498a5e68943863fa8b5231b59" uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" -version = "1.3.5+1" +version = "1.3.6+0" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] @@ -827,9 +848,9 @@ version = "0.8.5+0" [[deps.OpenSSH_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "OpenSSL_jll", "Zlib_jll"] -git-tree-sha1 = "cb7acd5d10aff809b4d0191dfe1956c2edf35800" +git-tree-sha1 = "1f2f0911e1c02f28a390bb720f97f3349c4dcefb" uuid = "9bd350c2-7e96-507f-8002-3f2e150b4e1b" -version = "10.0.1+0" +version = "10.0.2+0" [[deps.OpenSSL]] deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] @@ -839,9 +860,9 @@ version = "1.5.0" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "9216a80ff3682833ac4b733caa8c00390620ba5d" +git-tree-sha1 = "2ae7d4ddec2e13ad3bddf5c0796f7547cf682391" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.5.0+0" +version = "3.5.2+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] @@ -851,9 +872,9 @@ version = "0.5.6+0" [[deps.Optim]] deps = ["Compat", "EnumX", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] -git-tree-sha1 = "31b3b1b8e83ef9f1d50d74f1dd5f19a37a304a1f" +git-tree-sha1 = "61942645c38dd2b5b78e2082c9b51ab315315d10" uuid = "429524aa-4258-5aef-a3af-852621145aeb" -version = "1.12.0" +version = "1.13.2" [deps.Optim.extensions] OptimMOIExt = "MathOptInterface" @@ -863,14 +884,14 @@ version = "1.12.0" [[deps.Opus_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "6703a85cb3781bd5909d48730a67205f3f31a575" +git-tree-sha1 = "c392fc5dd032381919e3b22dd32d6443760ce7ea" uuid = "91d4177d-7536-5919-b921-800302f37372" -version = "1.3.3+0" +version = "1.5.2+0" [[deps.OrderedCollections]] -git-tree-sha1 = "cc4054e898b852042d7b503313f7ad03de99c3dd" +git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.8.0" +version = "1.8.1" [[deps.PCRE2_jll]] deps = ["Artifacts", "Libdl"] @@ -879,9 +900,9 @@ version = "10.42.0+1" [[deps.Pango_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "3b31172c032a1def20c98dae3f2cdc9d10e3b561" +git-tree-sha1 = "1f7f9bbd5f7a2e5a9f7d96e51c9754454ea7f60b" uuid = "36c8627f-9965-5494-a995-c6b170f724f3" -version = "1.56.1+0" +version = "1.56.4+0" [[deps.Parameters]] deps = ["OrderedCollections", "UnPack"] @@ -924,9 +945,9 @@ version = "1.4.3" [[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", "UnitfulLatexify", "Unzip"] -git-tree-sha1 = "809ba625a00c605f8d00cd2a9ae19ce34fc24d68" +git-tree-sha1 = "bfe839e9668f0c58367fb62d8757315c0eac8777" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" -version = "1.40.13" +version = "1.40.20" [deps.Plots.extensions] FileIOExt = "FileIO" @@ -956,9 +977,9 @@ version = "1.2.1" [[deps.Preferences]] deps = ["TOML"] -git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" +git-tree-sha1 = "0f27480397253da18fe2c12a4ba4eb9eb208bf3d" uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.4.3" +version = "1.5.0" [[deps.Primes]] deps = ["IntegerMathUtils"] @@ -978,27 +999,27 @@ 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 = "492601870742dcd38f233b23c3ec629628c1d724" +git-tree-sha1 = "eb38d376097f47316fe089fc62cb7c6d85383a52" uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56" -version = "6.7.1+1" +version = "6.8.2+1" [[deps.Qt6Declarative_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll", "Qt6ShaderTools_jll"] -git-tree-sha1 = "e5dd466bf2569fe08c91a2cc29c1003f4797ac3b" +git-tree-sha1 = "da7adf145cce0d44e892626e647f9dcbe9cb3e10" uuid = "629bc702-f1f5-5709-abd5-49b8460ea067" -version = "6.7.1+2" +version = "6.8.2+1" [[deps.Qt6ShaderTools_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll"] -git-tree-sha1 = "1a180aeced866700d4bebc3120ea1451201f16bc" +git-tree-sha1 = "9eca9fc3fe515d619ce004c83c31ffd3f85c7ccf" uuid = "ce943373-25bb-56aa-8eca-768745ed7b5a" -version = "6.7.1+1" +version = "6.8.2+1" [[deps.Qt6Wayland_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll", "Qt6Declarative_jll"] -git-tree-sha1 = "729927532d48cf79f49070341e1d918a65aba6b0" +git-tree-sha1 = "e1d5e16d0f65762396f9ca4644a5f4ddab8d452b" uuid = "e99dba38-086e-5de3-a5b1-6e4c66e897c3" -version = "6.7.1+1" +version = "6.8.2+1" [[deps.QuasiMonteCarlo]] deps = ["Accessors", "ConcreteStructs", "LatticeRules", "LinearAlgebra", "Primes", "Random", "Requires", "Sobol", "StatsBase"] @@ -1063,9 +1084,9 @@ version = "0.7.0" [[deps.Scratch]] deps = ["Dates"] -git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" +git-tree-sha1 = "9b81b8393e50b7d4e6d0a9f14e192294d3b7c109" uuid = "6c6a2e73-6563-6170-7368-637461726353" -version = "1.2.1" +version = "1.3.0" [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" @@ -1100,9 +1121,9 @@ version = "1.11.0" [[deps.SortingAlgorithms]] deps = ["DataStructures"] -git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +git-tree-sha1 = "64d974c2e6fdf07f8155b5b2ca2ffa9069b608d9" uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" -version = "1.2.1" +version = "1.2.2" [[deps.SparseArrays]] deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] @@ -1144,15 +1165,15 @@ weakdeps = ["SparseArrays"] [[deps.StatsAPI]] deps = ["LinearAlgebra"] -git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +git-tree-sha1 = "9d72a13a3f4dd3795a195ac5a44d7d6ff5f552ff" uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" -version = "1.7.0" +version = "1.7.1" [[deps.StatsBase]] deps = ["AliasTables", "DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "b81c5035922cc89c2d9523afc6c54be512411466" +git-tree-sha1 = "2c962245732371acd51700dbb268af311bddd719" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.5" +version = "0.34.6" [[deps.StyledStrings]] uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b" @@ -1190,9 +1211,9 @@ uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" version = "0.11.3" [[deps.URIs]] -git-tree-sha1 = "cbbebadbcc76c5ca1cc4b4f3b0614b3e603b5000" +git-tree-sha1 = "bef26fb046d031353ef97a82e3fdb6afe7f21b1a" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" -version = "1.5.2" +version = "1.6.1" [[deps.UUIDs]] deps = ["Random", "SHA"] @@ -1216,20 +1237,22 @@ version = "0.4.1" [[deps.Unitful]] deps = ["Dates", "LinearAlgebra", "Random"] -git-tree-sha1 = "d62610ec45e4efeabf7032d67de2ffdea8344bed" +git-tree-sha1 = "6258d453843c466d84c17a58732dda5deeb8d3af" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.22.1" -weakdeps = ["ConstructionBase", "InverseFunctions"] +version = "1.24.0" +weakdeps = ["ConstructionBase", "ForwardDiff", "InverseFunctions", "Printf"] [deps.Unitful.extensions] ConstructionBaseUnitfulExt = "ConstructionBase" + ForwardDiffExt = "ForwardDiff" InverseFunctionsUnitfulExt = "InverseFunctions" + PrintfExt = "Printf" [[deps.UnitfulLatexify]] deps = ["LaTeXStrings", "Latexify", "Unitful"] -git-tree-sha1 = "975c354fcd5f7e1ddcc1f1a23e6e091d99e99bc8" +git-tree-sha1 = "af305cc62419f9bd61b6644d19170a4d258c7967" uuid = "45397f5d-5981-4c77-b2b3-fc36d6e9b728" -version = "1.6.4" +version = "1.7.0" [[deps.Unzip]] git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78" @@ -1243,22 +1266,10 @@ uuid = "a44049a8-05dd-5a78-86c9-5fde0876e88c" version = "1.3.243+0" [[deps.Wayland_jll]] -deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] -git-tree-sha1 = "85c7811eddec9e7f22615371c3cc81a504c508ee" +deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll"] +git-tree-sha1 = "96478df35bbc2f3e1e791bc7a3d0eeee559e60e9" uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" -version = "1.21.0+2" - -[[deps.Wayland_protocols_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "5db3e9d307d32baba7067b13fc7b5aa6edd4a19a" -uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" -version = "1.36.0+0" - -[[deps.XML2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "b8b243e47228b4a3877f1dd6aee0c5d56db7fcf4" -uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.13.6+1" +version = "1.24.0+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1352,39 +1363,39 @@ 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 = "04341cb870f29dcd5e39055f895c39d016e18ccd" +git-tree-sha1 = "c5bf2dad6a03dfef57ea0a170a1fe493601603f2" uuid = "e920d4aa-a673-5f3a-b3d7-f755a4d47c43" -version = "0.1.4+0" +version = "0.1.5+0" [[deps.Xorg_xcb_util_image_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] -git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] +git-tree-sha1 = "f4fc02e384b74418679983a97385644b67e1263b" uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" -version = "0.4.0+1" +version = "0.4.1+0" [[deps.Xorg_xcb_util_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] -git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll"] +git-tree-sha1 = "68da27247e7d8d8dafd1fcf0c3654ad6506f5f97" uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" -version = "0.4.0+1" +version = "0.4.1+0" [[deps.Xorg_xcb_util_keysyms_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] -git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] +git-tree-sha1 = "44ec54b0e2acd408b0fb361e1e9244c60c9c3dd4" uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" -version = "0.4.0+1" +version = "0.4.1+0" [[deps.Xorg_xcb_util_renderutil_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] -git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] +git-tree-sha1 = "5b0263b6d080716a02544c55fdff2c8d7f9a16a0" uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" -version = "0.3.9+1" +version = "0.3.10+0" [[deps.Xorg_xcb_util_wm_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] -git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] +git-tree-sha1 = "f233c83cad1fa0e70b7771e0e21b061a116f2763" uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" -version = "0.4.1+1" +version = "0.4.2+0" [[deps.Xorg_xkbcomp_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"] @@ -1416,10 +1427,10 @@ uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" version = "1.5.7+1" [[deps.eudev_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "gperf_jll"] -git-tree-sha1 = "431b678a28ebb559d224c0b6b6d01afce87c51ba" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c3b0e6196d50eab0c5ed34021aaa0bb463489510" uuid = "35ca27e7-8b34-5b7f-bca9-bdc33f59eb06" -version = "3.2.9+0" +version = "3.2.14+0" [[deps.fzf_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1427,23 +1438,17 @@ git-tree-sha1 = "b6a34e0e0960190ac2a4363a1bd003504772d631" uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" version = "0.61.1+0" -[[deps.gperf_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "3cad2cf2c8d80f1d17320652b3ea7778b30f473f" -uuid = "1a1c6b14-54f6-533d-8383-74cd7377aa70" -version = "3.3.0+0" - [[deps.libaom_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "522c1df09d05a71785765d19c9524661234738e9" +git-tree-sha1 = "4bba74fa59ab0755167ad24f98800fe5d727175b" uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" -version = "3.11.0+0" +version = "3.12.1+0" [[deps.libass_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "e17c115d55c5fbb7e52ebedb427a0dca79d4484e" +git-tree-sha1 = "125eedcb0a4a0bba65b657251ce1d27c8714e9d6" uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" -version = "0.15.2+0" +version = "0.17.4+0" [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] @@ -1457,40 +1462,40 @@ uuid = "1183f4f0-6f2a-5f1a-908b-139f9cdfea6f" version = "0.2.2+0" [[deps.libevdev_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "141fe65dc3efabb0b1d5ba74e91f6ad26f84cc22" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "56d643b57b188d30cccc25e331d416d3d358e557" uuid = "2db6ffa8-e38f-5e21-84af-90c45d0032cc" -version = "1.11.0+0" +version = "1.13.4+0" [[deps.libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "8a22cf860a7d27e4f3498a0fe0811a7957badb38" +git-tree-sha1 = "646634dd19587a56ee2f1199563ec056c5f228df" uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" -version = "2.0.3+0" +version = "2.0.4+0" [[deps.libinput_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "eudev_jll", "libevdev_jll", "mtdev_jll"] -git-tree-sha1 = "ad50e5b90f222cfe78aa3d5183a20a12de1322ce" +deps = ["Artifacts", "JLLWrappers", "Libdl", "eudev_jll", "libevdev_jll", "mtdev_jll"] +git-tree-sha1 = "91d05d7f4a9f67205bd6cf395e488009fe85b499" uuid = "36db933b-70db-51c0-b978-0f229ee0e533" -version = "1.18.0+0" +version = "1.28.1+0" [[deps.libpng_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "002748401f7b520273e2b506f61cab95d4701ccf" +git-tree-sha1 = "07b6a107d926093898e82b3b1db657ebe33134ec" uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.48+0" +version = "1.6.50+0" [[deps.libvorbis_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] -git-tree-sha1 = "490376214c4721cdaca654041f635213c6165cb3" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll"] +git-tree-sha1 = "11e1772e7f3cc987e9d3de991dd4f6b2602663a5" uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" -version = "1.3.7+2" +version = "1.3.8+0" [[deps.mtdev_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "814e154bdb7be91d78b6802843f76b6ece642f11" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "b4d631fd51f2e9cdd93724ae25b2efc198b059b1" uuid = "009596ad-96f7-51b1-9f1b-5ce2d5e8a71e" -version = "1.1.6+0" +version = "1.1.7+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] @@ -1503,19 +1508,19 @@ uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" version = "17.4.0+2" [[deps.x264_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "14cc7083fc6dff3cc44f2bc435ee96d06ed79aa7" uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" -version = "2021.5.5+0" +version = "10164.0.1+0" [[deps.x265_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e7b67590c14d487e734dcb925924c5dc43ec85f3" uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" -version = "3.5.0+0" +version = "4.1.0+0" [[deps.xkbcommon_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] -git-tree-sha1 = "c950ae0a3577aec97bfccf3381f66666bc416729" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] +git-tree-sha1 = "fbf139bce07a534df0e699dbb5f5cc9346f95cc1" uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" -version = "1.8.1+0" +version = "1.9.2+0" diff --git a/docs/Project.toml b/docs/Project.toml index 402a197..2e161fa 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -1,6 +1,7 @@ [deps] Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" FewBodyECG = "083b1810-24a1-4a79-9a41-145bb2bb8ceb" +FewBodyHamiltonians = "3a126c26-e5d7-4a95-83c3-3b69f8a11ded" Optim = "429524aa-4258-5aef-a3af-852621145aeb" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" QuasiMonteCarlo = "8a4e6c94-4038-4cdc-81c3-7e6ffdb2a71b" diff --git a/docs/src/API.md b/docs/src/API.md index da90e63..d6a7a7c 100644 --- a/docs/src/API.md +++ b/docs/src/API.md @@ -1,5 +1 @@ # API - -```@autodocs -Modules = [FewBodyECG.Utils, FewBodyECG.Sampling, FewBodyECG.Coordinates, FewBodyECG.Optimization,] -``` \ No newline at end of file diff --git a/docs/src/examples.md b/docs/src/examples.md index 3dace86..0561683 100644 --- a/docs/src/examples.md +++ b/docs/src/examples.md @@ -8,35 +8,35 @@ using LinearAlgebra using Plots using QuasiMonteCarlo -masses = [1e15, 1.0, 1.0] +masses = [1.0e15, 1.0, 1.0] psys = ParticleSystem(masses) -K = Diagonal([0.0, 1/2, 1/2]) +K = Diagonal([0.0, 1 / 2, 1 / 2]) K_transformed = psys.J * K * psys.J' -w_list = [ [1, -1, 0], [1, 0, -1], [0, 1, -1] ] +w_list = [[1, -1, 0], [1, 0, -1], [0, 1, -1]] w_raw = [psys.U' * w for w in w_list] let n_basis = 50 b1 = default_b0(psys.scale) - method = :quasirandom + method = :quasirandom basis_fns = GaussianBase[] E₀_list = Float64[] coeffs = [-1.0, -1.0, +1.0] for i in 1:n_basis - bij = generate_bij(method, i, length(w_raw), b1; qmc_sampler=SobolSample()) - A = generate_A_matrix(bij, w_raw) + bij = generate_bij(method, i, length(w_raw), b1; qmc_sampler = SobolSample()) + A = _generate_A_matrix(bij, w_raw) push!(basis_fns, Rank0Gaussian(A)) basis = BasisSet(basis_fns) ops = Operator[ - KineticEnergy(K_transformed); - (CoulombPotential(c, w) for (c, w) in zip(coeffs, w_raw))... + KineticOperator(K_transformed); + (CoulombOperator(c, w) for (c, w) in zip(coeffs, w_raw))... ] - + H = build_hamiltonian_matrix(basis, ops) S = build_overlap_matrix(basis) vals, _ = solve_generalized_eigenproblem(H, S) @@ -52,8 +52,10 @@ let ΔE = abs(E₀ - Eᵗʰ) @show ΔE - plot(1:n_basis, E₀_list, xlabel="Number of Gaussians", ylabel="E₀ [Hartree]", - lw=2, label="Ground state energy", title="Hydrogen Anion Convergence") + plot( + 1:n_basis, E₀_list, xlabel = "Number of Gaussians", ylabel = "E₀ [Hartree]", + lw = 2, label = "Ground state energy", title = "Hydrogen Anion Convergence" + ) end ``` \ No newline at end of file diff --git a/docs/src/index.md b/docs/src/index.md index b00c0a4..7dd2cad 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -28,7 +28,7 @@ using QuasiMonteCarlo masses = [1.0, 1.0, 1.0] psys = ParticleSystem(masses) -K = Diagonal([1/2, 1/2, 1/2]) +K = Diagonal([1 / 2, 1 / 2, 1 / 2]) K_transformed = psys.J * K * psys.J' w_list = [[1, -1, 0], [1, 0, -1], [0, 1, -1]] @@ -44,14 +44,14 @@ let E₀_list = Float64[] for i in 1:n_basis - bij = generate_bij(method, i, length(w_raw), b1; qmc_sampler=SobolSample()) - A = generate_A_matrix(bij, w_raw) + bij = generate_bij(method, i, length(w_raw), b1; qmc_sampler = SobolSample()) + A = _generate_A_matrix(bij, w_raw) push!(basis_fns, Rank0Gaussian(A)) basis = BasisSet(basis_fns) ops = Operator[ - KineticEnergy(K_transformed); - (CoulombPotential(c, w) for (c, w) in zip(coeffs, w_raw))... + KineticOperator(K_transformed); + (CoulombOperator(c, w) for (c, w) in zip(coeffs, w_raw))... ] H = build_hamiltonian_matrix(basis, ops) @@ -69,17 +69,21 @@ let ΔE = abs(E₀ - Eᵗʰ) @show ΔE - r = range(0.01, 14.0, length=400) + r = range(0.01, 14.0, length = 400) ρ_r = [rval^2 * abs2(ψ₀([rval, 0.0], c₀, basis_fns)) for rval in r] - - p1 = plot(r, ρ_r, xlabel="r (a.u.)", ylabel="r²|ψ₀(r)|²", - lw=2, label="r²C(r)", title="Electron-Positron Correlation Function") - - p2 = plot(1:n_basis, E₀_list, xlabel="Number of Gaussians", ylabel="E₀ [Hartree]", - lw=2, label="Ground state energy", title="Positronium Convergence") + p1 = plot( + r, ρ_r, xlabel = "r (a.u.)", ylabel = "r²|ψ₀(r)|²", + lw = 2, label = "r²C(r)", title = "Electron-Positron Correlation Function" + ) - plot(p1, p2, layout=(2, 1)) + + p2 = plot( + 1:n_basis, E₀_list, xlabel = "Number of Gaussians", ylabel = "E₀ [Hartree]", + lw = 2, label = "Ground state energy", title = "Positronium Convergence" + ) + + plot(p1, p2, layout = (2, 1)) end ``` \ No newline at end of file diff --git a/src/FewBodyECG.jl b/src/FewBodyECG.jl index 1de026e..49de1de 100644 --- a/src/FewBodyECG.jl +++ b/src/FewBodyECG.jl @@ -1,28 +1,28 @@ module FewBodyECG +using LinearAlgebra +using FewBodyHamiltonians + +export ParticleSystem, default_b0 + +export generate_bij, _generate_A_matrix + +export GaussianBase, Rank0Gaussian, Rank1Gaussian, Rank2Gaussian, BasisSet, ECG, KineticOperator, CoulombOperator + +const Operator = FewBodyHamiltonians.Operator + +export Operator + +export build_hamiltonian_matrix, build_overlap_matrix, solve_generalized_eigenproblem, solve_ECG, convergence + +export ψ₀ + include("types.jl") include("coordinates.jl") include("matrix_elements.jl") include("hamiltonian.jl") include("sampling.jl") -include("optimization.jl") include("utils.jl") -using .Types -using .Coordinates -using .MatrixElements -using .Hamiltonian -using .Sampling -using .Optimization -using .Utils - -export generate_A_matrix, generate_bij, default_b0, jacobi_transform, transform_list, transform_coordinates, inverse_transform_coordinates, ParticleSystem, Particle, GaussianBase, Rank0Gaussian, Rank1Gaussian, Rank2Gaussian, BasisSet, Operator, KineticEnergy, CoulombPotential, FewBodyHamiltonian, MatrixElementResult - -export compute_matrix_element, build_overlap_matrix, build_operator_matrix, - build_hamiltonian_matrix, solve_generalized_eigenproblem, - generate_basis, compute_ground_state_energy, optimize_ground_state_energy - -export ψ₀, plot_wavefunction, plot_density - end diff --git a/src/coordinates.jl b/src/coordinates.jl index 30acf66..cdbfa3c 100644 --- a/src/coordinates.jl +++ b/src/coordinates.jl @@ -1,12 +1,3 @@ -module Coordinates - -using LinearAlgebra -using ..Types - -export ParticleSystem, jacobi_transform, generate_A_matrix, transform_list, - shift_vectors, generate_weight_vector, transform_coordinates, inverse_transform_coordinates, default_b0 - - """ struct ParticleSystem @@ -20,7 +11,7 @@ A structure representing a system of particles with associated masses and coordi # Constructor - `ParticleSystem(masses::Vector{Float64}; scale::Union{Symbol,Nothing}=nothing)`: - Creates a new `ParticleSystem` instance. The `masses` vector must contain at least two elements. The `scale` parameter is optional and can be used to specify the scale of the system. The Jacobi and auxiliary transformation matrices (`J` and `U`) are computed internally using the `jacobi_transform` function. + Creates a new `ParticleSystem` instance. The `masses` vector must contain at least two elements. The `scale` parameter is optional and can be used to specify the scale of the system. The Jacobi and auxiliary transformation matrices (`J` and `U`) are computed internally using the `_jacobi_transform` function. """ struct ParticleSystem masses::Vector{Float64} @@ -30,32 +21,12 @@ struct ParticleSystem function ParticleSystem(masses::Vector{Float64}; scale::Union{Symbol, Nothing} = nothing) @assert length(masses) ≥ 2 "At least two masses are required for a particle system." - J, U = jacobi_transform(masses) + J, U = _jacobi_transform(masses) return new(masses, J, U, scale) end end -""" - jacobi_transform(masses::Vector{Float64})::Tuple{Matrix{Float64}, Matrix{Float64}} - -Computes the Jacobi transformation matrix `J` and its pseudoinverse `U` for a given vector of masses. - -# Arguments -- `masses::Vector{Float64}`: A vector of masses for the system. Must contain at least two masses. - -# Returns -- `Tuple{Matrix{Float64}, Matrix{Float64}}`: A tuple containing: - - `J::Matrix{Float64}`: The Jacobi transformation matrix. - - `U::Matrix{Float64}`: The pseudoinverse of the Jacobi transformation matrix. - -# Details -The Jacobi transformation is used to convert the coordinates of a system of particles into a set of relative coordinates. The transformation matrix `J` is constructed based on the masses of the particles, and its pseudoinverse `U` is computed using the `pinv` function. - -# Constraints -- The input vector `masses` must have a length of at least 2. An assertion is raised if this condition is not met. - -""" -function jacobi_transform(masses::Vector{Float64})::Tuple{Matrix{Float64}, Matrix{Float64}} +function _jacobi_transform(masses::Vector{Float64})::Tuple{Matrix{Float64}, Matrix{Float64}} N = length(masses) @assert N ≥ 2 "At least two masses are required for Jacobi transformation." J = zeros(Float64, N - 1, N) @@ -79,7 +50,6 @@ function jacobi_transform(masses::Vector{Float64})::Tuple{Matrix{Float64}, Matri return J, U end - """ default_b0(scale::Union{Symbol,Nothing}) -> Float64 @@ -100,7 +70,7 @@ function default_b0(scale::Union{Symbol, Nothing}) error("Unknown scale: $scale") end -function generate_A_matrix(bij::Vector{Float64}, w_list::Vector{Vector{Float64}})::Matrix{Float64} +function _generate_A_matrix(bij::Vector{Float64}, w_list::Vector{Vector{Float64}})::Matrix{Float64} @assert length(bij) == length(w_list) "Length of `bij` and `w_list` must be equal." dim = length(w_list[1]) A = zeros(Float64, dim, dim) @@ -112,43 +82,7 @@ function generate_A_matrix(bij::Vector{Float64}, w_list::Vector{Vector{Float64}} return A end -""" - transform_list(α::Vector{Float64})::Vector{Matrix{Float64}} - -Transforms a vector of `Float64` values into a vector of `Matrix{Float64}` objects. -Each element of the input vector `α` is wrapped into a 1x1 matrix and returned as -an element of the resulting vector. - -# Arguments -- `α::Vector{Float64}`: A vector of `Float64` values to be transformed. - -# Returns -- `Vector{Matrix{Float64}}`: A vector where each element is a 1x1 matrix containing - the corresponding value from the input vector `α`. -""" -function transform_list(α::Vector{Float64})::Vector{Matrix{Float64}} - return [reshape([α_i], 1, 1) for α_i in α] -end - -""" - shift_vectors(a::Matrix{Float64}, b::Matrix{Float64}, mat::Union{Nothing, Matrix{Float64}}=nothing) -> Float64 - -Compute a weighted sum of dot products between columns of two matrices `a` and `b`, -optionally using a weighting matrix `mat`. - -# Arguments -- `a::Matrix{Float64}`: A matrix where each column represents a vector. -- `b::Matrix{Float64}`: A matrix where each column represents a vector. Must have the same number of columns as `a`. -- `mat::Union{Nothing, Matrix{Float64}}`: An optional square weighting matrix. If `nothing` is provided, the identity matrix is used. - -# Returns -- `Float64`: The computed weighted sum of dot products. - -# Constraints -- The number of columns in `a` and `b` must be the same. -- If `mat` is provided, it must be a square matrix with dimensions equal to the number of columns in `a` and `b`. -""" -function shift_vectors(a::Matrix{Float64}, b::Matrix{Float64}, mat::Union{Nothing, Matrix{Float64}} = nothing)::Float64 +function _shift_vectors(a::Matrix{Float64}, b::Matrix{Float64}, mat::Union{Nothing, Matrix{Float64}} = nothing)::Float64 n = size(a, 2) @assert n == size(b, 2) "Matrices `a` and `b` must have the same number of columns." mat = mat === nothing ? I(n) : mat @@ -163,7 +97,7 @@ function shift_vectors(a::Matrix{Float64}, b::Matrix{Float64}, mat::Union{Nothin return sum_val end -function generate_weight_vector(dim::Int, i::Int, j::Int)::Vector{Int} +function _generate_weight_vector(dim::Int, i::Int, j::Int)::Vector{Int} @assert 1 ≤ i ≤ dim "Index `i` must be between 1 and $dim." @assert 1 ≤ j ≤ dim "Index `j` must be between 1 and $dim." w = zeros(Int, dim) @@ -172,14 +106,12 @@ function generate_weight_vector(dim::Int, i::Int, j::Int)::Vector{Int} return w end -function transform_coordinates(J::Matrix{Float64}, r::Vector{Float64})::Vector{Float64} +function _transform_coordinates(J::Matrix{Float64}, r::Vector{Float64})::Vector{Float64} @assert size(J, 2) == length(r) "Matrix `J` columns must match length of vector `r`." return J * r end -function inverse_transform_coordinates(U::Matrix{Float64}, x::Vector{Float64})::Vector{Float64} +function _inverse_transform_coordinates(U::Matrix{Float64}, x::Vector{Float64})::Vector{Float64} @assert size(U, 2) == length(x) "Matrix `U` columns must match length of vector `x`." return U * x end - -end diff --git a/src/hamiltonian.jl b/src/hamiltonian.jl index eb13eb3..b8695ac 100644 --- a/src/hamiltonian.jl +++ b/src/hamiltonian.jl @@ -1,14 +1,7 @@ -module Hamiltonian +using FewBodyHamiltonians +using QuasiMonteCarlo -using LinearAlgebra -using ..Types -using ..MatrixElements - -export build_overlap_matrix, build_operator_matrix, build_hamiltonian_matrix, solve_generalized_eigenproblem - -struct IdentityOperator <: Operator end - -function compute_overlap_element(bra::GaussianBase, ket::GaussianBase) +function _compute_overlap_element(bra::GaussianBase, ket::GaussianBase) A, B = bra.A, ket.A R = inv(A + B) return (π^length(R) / det(A + B))^(3 / 2) @@ -18,33 +11,71 @@ function build_overlap_matrix(basis::BasisSet) n = length(basis.functions) S = zeros(n, n) for i in 1:n, j in 1:i - val = compute_overlap_element(basis.functions[i], basis.functions[j]) + val = _compute_overlap_element(basis.functions[i], basis.functions[j]) S[i, j] = S[j, i] = val end return S end -function build_operator_matrix(basis::BasisSet, op::Operator) +function _build_operator_matrix(basis::BasisSet, op::FewBodyHamiltonians.Operator) n = length(basis.functions) H = zeros(n, n) for i in 1:n, j in 1:i - val = compute_matrix_element(basis.functions[i], basis.functions[j], op) + val = _compute_matrix_element(basis.functions[i], basis.functions[j], op) H[i, j] = H[j, i] = val end return H end -function build_hamiltonian_matrix(basis::BasisSet, operators::Vector{Operator}) +function build_hamiltonian_matrix(basis::BasisSet, operators::AbstractVector{<:FewBodyHamiltonians.Operator}) H = zeros(length(basis.functions), length(basis.functions)) for op in operators - H .+= build_operator_matrix(basis, op) + H .+= _build_operator_matrix(basis, op) end return H end function solve_generalized_eigenproblem(H::Matrix{Float64}, S::Matrix{Float64}) - vals, vecs = eigen(H, S) - return real(vals), real(vecs) + try + F = cholesky(S; check = true) + L = F.L + Linv = inv(L) + A = Linv * H * Linv' + vals, vecs = eigen(Symmetric(A)) + vecs_orig = Linv' * vecs + return real(vals), real(vecs_orig) + catch err + @warn "Cholesky on S failed, falling back to generalized eigen solver" exception = (err, catch_backtrace()) + vals, vecs = eigen(H, S) + return real(vals), real(vecs) + end end -end # module +function solve_ECG(operators::Vector{FewBodyHamiltonians.Operator}, system::ParticleSystem, n::Int = 50; sampler = SobolSample(), method::Symbol = :quasirandom, verbose::Bool = true) + b₁ = default_b0(system.scale) + basis_fns = GaussianBase[] + E₀ = Float64[] + coulomb_length = count(x -> x isa CoulombOperator, operators) + w_list = [op.w for op in operators if op isa CoulombOperator] + E₀_list = Float64[] + vecs_list = [] + for i in 1:n + bij = generate_bij(method, i, coulomb_length, b₁; qmc_sampler = sampler) + A = _generate_A_matrix(bij, w_list) + push!(basis_fns, Rank0Gaussian(A)) + + basis = BasisSet(basis_fns) + + H = build_hamiltonian_matrix(basis, operators) + S = build_overlap_matrix(basis) + + λs, Us = solve_generalized_eigenproblem(H, S) + E₀ = minimum(λs) + + push!(E₀_list, E₀) + push!(vecs_list, Us) + verbose && @info "Step $i" E₀ = E₀ + end + @info "Minimum found" E₀ + return SolverResults(basis_fns, n, operators, :quasirandom, sampler, b₁, E₀, E₀_list, vecs_list) +end diff --git a/src/matrix_elements.jl b/src/matrix_elements.jl index fc6c50e..b5d5689 100644 --- a/src/matrix_elements.jl +++ b/src/matrix_elements.jl @@ -1,18 +1,12 @@ -module MatrixElements - -using LinearAlgebra -using ..Types using SpecialFunctions: erf -export compute_matrix_element - """ compute_matrix_element(bra, ket, op) Compute the matrix element ⟨bra|op|ket⟩ using analytic expressions. """ -function compute_matrix_element(bra::Rank0Gaussian, ket::Rank0Gaussian, op::KineticEnergy) +function _compute_matrix_element(bra::Rank0Gaussian, ket::Rank0Gaussian, op::KineticOperator) A, B = bra.A, ket.A K = op.K R = inv(A + B) @@ -20,7 +14,7 @@ function compute_matrix_element(bra::Rank0Gaussian, ket::Rank0Gaussian, op::Kine return 6 * tr(B * K * A * R) * M0 end -function compute_matrix_element(bra::Rank0Gaussian, ket::Rank0Gaussian, op::CoulombPotential) +function _compute_matrix_element(bra::Rank0Gaussian, ket::Rank0Gaussian, op::CoulombOperator) A, B, w = bra.A, ket.A, op.w R = inv(A + B) β = 1 / (dot(w, R * w)) @@ -28,7 +22,7 @@ function compute_matrix_element(bra::Rank0Gaussian, ket::Rank0Gaussian, op::Coul return op.coefficient * 2 * sqrt(β / π) * M0 end -function compute_matrix_element(bra::Rank1Gaussian, ket::Rank1Gaussian, op::CoulombPotential) +function _compute_matrix_element(bra::Rank1Gaussian, ket::Rank1Gaussian, op::CoulombOperator) A, B, a, b, w = bra.A, ket.A, bra.a, ket.a, op.w R = inv(A + B) β = 1 / (dot(w, R * w)) @@ -38,7 +32,7 @@ function compute_matrix_element(bra::Rank1Gaussian, ket::Rank1Gaussian, op::Coul return 2 * sqrt(β / π) * M1 - sqrt(β^3 / π) / 3 * q2 * M0 end -function compute_matrix_element(bra::Rank1Gaussian, ket::Rank1Gaussian, op::KineticEnergy) +function _compute_matrix_element(bra::Rank1Gaussian, ket::Rank1Gaussian, op::KineticOperator) a = bra.a isa AbstractVector{<:AbstractVector} ? vec(bra.a[1]) : vec(bra.a) b = ket.a isa AbstractVector{<:AbstractVector} ? vec(ket.a[1]) : vec(ket.a) @@ -57,8 +51,7 @@ function compute_matrix_element(bra::Rank1Gaussian, ket::Rank1Gaussian, op::Kine return T1 + T2 + T3 - T4 - T5 end - -function compute_matrix_element(bra::Rank2Gaussian, ket::Rank2Gaussian, op::KineticEnergy) +function _compute_matrix_element(bra::Rank2Gaussian, ket::Rank2Gaussian, op::KineticOperator) A, B = bra.A, ket.A a, b, c, d = bra.a, bra.b, ket.a, ket.b K = op.K @@ -116,7 +109,7 @@ function compute_matrix_element(bra::Rank2Gaussian, ket::Rank2Gaussian, op::Kine return T1 + T2 + T3 + T4 + T5 end -function compute_matrix_element(bra::Rank2Gaussian, ket::Rank2Gaussian, op::CoulombPotential) +function _compute_matrix_element(bra::Rank2Gaussian, ket::Rank2Gaussian, op::CoulombOperator) A, B = bra.A, ket.A a, b, c, d = bra.a, bra.b, ket.a, ket.b w = op.w @@ -155,6 +148,3 @@ function compute_matrix_element(bra::Rank2Gaussian, ket::Rank2Gaussian, op::Coul return op.coefficient * (term1 + term2 + term3) end - - -end diff --git a/src/optimization.jl b/src/optimization.jl deleted file mode 100644 index 9a21659..0000000 --- a/src/optimization.jl +++ /dev/null @@ -1,30 +0,0 @@ -module Optimization - -using Optim -using ..Types -using ..Coordinates -using ..Hamiltonian - -export optimize_ground_state_energy - -""" -optimize_ground_state_energy(init_widths::Vector{Matrix{Float64}}, ops::Vector{Operator}; max_iter=100) - -Uses local optimization (Nelder-Mead) on Gaussian widths to minimize ground state energy. -""" -function optimize_ground_state_energy(init_widths::Vector{Matrix{Float64}}, ops::Vector{Operator}; max_iter::Int = 100) - vecdim = size(init_widths[1], 1) - nfuncs = length(init_widths) - flat_init = vcat([vec(A) for A in init_widths]...) - - function objective(x) - widths = [reshape(x[((i - 1) * vecdim^2 + 1):(i * vecdim^2)], vecdim, vecdim) for i in 1:nfuncs] - basis = generate_basis(widths) - return compute_ground_state_energy(basis, ops) - end - - result = optimize(objective, flat_init, NelderMead(); iterations = max_iter) - return Optim.minimum(result) -end - -end diff --git a/src/sampling.jl b/src/sampling.jl index 6c64f38..54a3f06 100644 --- a/src/sampling.jl +++ b/src/sampling.jl @@ -1,26 +1,6 @@ -module Sampling - -using ..Types -using ..Coordinates -using ..Hamiltonian -using LinearAlgebra using QuasiMonteCarlo -export generate_basis, compute_ground_state_energy, generate_bij - -""" -generate_basis(widths::Vector{Matrix{Float64}}, rank::Int=0) - -Construct a `BasisSet` from a list of correlation matrices and optional rank. -""" -function generate_basis(widths::Vector{Matrix{Float64}}, rank::Int = 0) - if rank == 0 - funcs = [Rank0Gaussian(A) for A in widths] - else - error("Only Rank0Gaussian implemented in generate_basis") - end - return BasisSet(funcs) -end +export generate_bij """ generate_bij(method::Symbol, i::Int, n_terms::Int, b1::Float64) -> Vector{Float64} @@ -36,17 +16,3 @@ function generate_bij(method::Symbol, i::Int, n_terms::Int, b1::Float64; qmc_sam error("Unsupported sampling method: $method") end end - -""" -compute_ground_state_energy(basis::BasisSet, ops::Vector{Operator}) - -Construct the Hamiltonian and overlap matrices and return the lowest eigenvalue. -""" -function compute_ground_state_energy(basis::BasisSet, ops::Vector{Operator}) - H = build_hamiltonian_matrix(basis, ops) - S = build_overlap_matrix(basis) - vals, _ = solve_generalized_eigenproblem(H, S) - return minimum(vals) -end - -end diff --git a/src/types.jl b/src/types.jl index c080692..31fc39f 100644 --- a/src/types.jl +++ b/src/types.jl @@ -1,60 +1,36 @@ -module Types - -export Particle, - GaussianBase, Rank0Gaussian, Rank1Gaussian, Rank2Gaussian, - BasisSet, - Operator, KineticEnergy, CoulombPotential, - FewBodyHamiltonian, MatrixElementResult +using FewBodyHamiltonians abstract type GaussianBase end -struct Particle - mass::Float64 - charge::Float64 - label::Symbol -end - struct Rank0Gaussian <: GaussianBase - A::Matrix{Float64} # Correlation matrix + A::Matrix{Float64} end struct Rank1Gaussian <: GaussianBase - A::Matrix{Float64} # Correlation matrix - a::Vector{Vector{Float64}} # Polarization vectors + A::Matrix{Float64} + a::Vector{Float64} end struct Rank2Gaussian <: GaussianBase A::Matrix{Float64} - a::Vector{Vector{Float64}} # First polarization vector set - b::Vector{Vector{Float64}} # Second polarization vector set + a::Vector{Float64} + b::Vector{Float64} end struct BasisSet functions::Vector{GaussianBase} end -abstract type Operator end - -struct KineticEnergy <: Operator - K::Matrix{Float64} # required for ⟨T⟩ +struct KineticOperator <: FewBodyHamiltonians.KineticTerm + K::Matrix{Float64} end -struct CoulombPotential <: Operator +struct CoulombOperator <: FewBodyHamiltonians.PotentialTerm coefficient::Float64 w::Vector{Float64} end - -struct FewBodyHamiltonian +struct ECG basis::BasisSet operators::Vector{Operator} end - -struct MatrixElementResult - bra::GaussianBase - ket::GaussianBase - operator::Operator - value::Float64 -end - -end # module diff --git a/src/utils.jl b/src/utils.jl index 02e2f60..5ff23cd 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -1,7 +1,3 @@ -module Utils - -export ψ₀, plot_wavefunction, plot_density - """ ψ₀(r::Vector{Float64}, c₀::Vector{Float64}, basis_fns::Vector{<:GaussianBase}) @@ -11,30 +7,18 @@ function ψ₀(r::Vector{Float64}, c₀::Vector{Float64}, basis_fns::Vector) return sum(c₀[i] * exp(-r' * basis_fns[i].A * r) for i in eachindex(basis_fns)) end -""" - plot_wavefunction(c₀, basis_fns; axis=1, range=(-4.0, 4.0), N=400) - -Plots a 1D slice of the wavefunction ψ₀(x, 0) or ψ₀(0, y). -""" -function plot_wavefunction(c₀, basis_fns; axis = 1, range = (-4.0, 4.0), N = 400) - xs = range(range[1], range[2], length = N) - ψ_vals = [ψ₀(axis == 1 ? [x, 0.0] : [0.0, x], c₀, basis_fns) for x in xs] - return plot( - xs, real(ψ_vals), xlabel = axis == 1 ? "x" : "y", ylabel = "ψ₀", - lw = 2, title = "Ground-state Wavefunction", legend = false - ) -end - -""" - plot_density(c₀, basis_fns; range=(-4.0, 4.0), N=200) - -Plots the 2D probability density |ψ₀(x, y)|² in Jacobi space. -""" -function plot_density(c₀, basis_fns; range = (-4.0, 4.0), N = 200) - xs = range(range[1], range[2], length = N) - ys = range(range[1], range[2], length = N) - ψ² = [abs2(ψ₀([x, y], c₀, basis_fns)) for y in ys, x in xs] - return heatmap(xs, ys, ψ², xlabel = "x", ylabel = "y", title = "|ψ₀(x, y)|²", aspect_ratio = 1) +struct SolverResults + basis_functions::Vector{GaussianBase} + n_basis::Int + operators::Vector{FewBodyHamiltonians.Operator} + method::Symbol + sampler::QuasiMonteCarlo.DeterministicSamplingAlgorithm + length_scale::Float64 + ground_state::Float64 + energies::Vector{Float64} + eigenvectors::Vector{Matrix{Float64}} end +function convergence(sr::SolverResults) + return 1:sr.n_basis, sr.energies end diff --git a/test/runtests.jl b/test/runtests.jl index de5a474..3bea91f 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -7,5 +7,7 @@ using FewBodyECG include("Aqua.jl") include("test_sampling.jl") include("test_coordinates.jl") + include("test_matrix_elements.jl") + include("test_hamiltonian.jl") end diff --git a/test/test_coordinates.jl b/test/test_coordinates.jl index 89f1dab..e2a8173 100644 --- a/test/test_coordinates.jl +++ b/test/test_coordinates.jl @@ -1,11 +1,13 @@ using Test -using FewBodyECG.Coordinates +using FewBodyECG +using LinearAlgebra +import FewBodyECG: _jacobi_transform, _generate_A_matrix, _shift_vectors, _transform_coordinates, _inverse_transform_coordinates @testset "Coordinates Module Tests" begin - @testset "jacobi_transform" begin + @testset "_jacobi_transform" begin # Test with simple equal masses masses = [1.0, 1.0, 1.0] - J, U = jacobi_transform(masses) + J, U = _jacobi_transform(masses) @test size(J) == (2, 3) @test size(U) == (3, 2) @@ -13,7 +15,7 @@ using FewBodyECG.Coordinates # Test with different masses masses = [1.0, 2.0, 3.0] - J, U = jacobi_transform(masses) + J, U = _jacobi_transform(masses) @test size(J) == (2, 3) @test size(U) == (3, 2) @@ -21,14 +23,14 @@ using FewBodyECG.Coordinates # Test with exactly two masses masses = [1.0, 2.0] - J, U = jacobi_transform(masses) + J, U = _jacobi_transform(masses) @test size(J) == (1, 2) @test size(U) == (2, 1) @test J * U ≈ [1.0] atol = 1.0e-10 # Test error for fewer than two masses - @test_throws AssertionError jacobi_transform([1.0]) + @test_throws AssertionError _jacobi_transform([1.0]) end @testset "ParticleSystem Constructor" begin @@ -57,58 +59,58 @@ using FewBodyECG.Coordinates @test_throws ErrorException default_b0(:unknown) end - @testset "generate_A_matrix" begin + @testset "_generate_A_matrix" begin bij = [1.0, 2.0] w_list = [[1.0, -1.0, 0.0], [0.0, 1.0, -1.0]] - A = generate_A_matrix(bij, w_list) + A = _generate_A_matrix(bij, w_list) @test size(A) == (3, 3) @test A[1, 1] ≈ 1.0 atol = 1.0e-10 @test A[2, 2] ≈ 1.0 + 0.25 atol = 1.0e-10 # Test error for mismatched lengths - @test_throws AssertionError generate_A_matrix([1.0], w_list) - @test_throws AssertionError generate_A_matrix(bij, [[1.0, -1.0, 0.0], [0.0, 1.0]]) + @test_throws AssertionError _generate_A_matrix([1.0], w_list) + @test_throws AssertionError _generate_A_matrix(bij, [[1.0, -1.0, 0.0], [0.0, 1.0]]) end - @testset "shift_vectors" begin + @testset "_shift_vectors" begin a = [1.0 2.0; 3.0 4.0] b = [5.0 6.0; 7.0 8.0] # Test with default identity matrix - result = shift_vectors(a, b) + result = _shift_vectors(a, b) expected = dot([1.0, 3.0], [5.0, 7.0]) + dot([2.0, 4.0], [6.0, 8.0]) @test result ≈ expected atol = 1.0e-10 # Test with custom weighting matrix mat = [2.0 1.0; 1.0 3.0] - result = shift_vectors(a, b, mat) + result = _shift_vectors(a, b, mat) expected = 2 * dot([1.0, 3.0], [5.0, 7.0]) + dot([1.0, 3.0], [6.0, 8.0]) + dot([2.0, 4.0], [5.0, 7.0]) + 3 * dot([2.0, 4.0], [6.0, 8.0]) @test result ≈ expected atol = 1.0e-10 # Test error for mismatched dimensions - @test_throws AssertionError shift_vectors(a, b, [1.0 2.0]) + @test_throws AssertionError _shift_vectors(a, b, [1.0 2.0]) end - @testset "transform_coordinates / inverse_transform_coordinates" begin + @testset "_transform_coordinates / _inverse_transform_coordinates" begin masses = [1.0, 2.0, 3.0] - J, U = jacobi_transform(masses) + J, U = _jacobi_transform(masses) r = [1.0, 2.0, 3.0] - x = transform_coordinates(J, r) + x = _transform_coordinates(J, r) @test size(x) == (2,) - r_back = inverse_transform_coordinates(U, x) + r_back = _inverse_transform_coordinates(U, x) @test size(r_back) == (3,) # Instead of round-trip r → x → r_back, test projection recovery - x_back = transform_coordinates(J, r_back) + x_back = _transform_coordinates(J, r_back) @test x_back ≈ x atol = 1.0e-10 # Error case - @test_throws AssertionError transform_coordinates(J, [1.0, 2.0]) - @test_throws AssertionError inverse_transform_coordinates(U, [1.0]) + @test_throws AssertionError _transform_coordinates(J, [1.0, 2.0]) + @test_throws AssertionError _inverse_transform_coordinates(U, [1.0]) end end diff --git a/test/test_hamiltonian.jl b/test/test_hamiltonian.jl new file mode 100644 index 0000000..50a3225 --- /dev/null +++ b/test/test_hamiltonian.jl @@ -0,0 +1,142 @@ +using Test +using LinearAlgebra + +using FewBodyECG +import FewBodyECG: _compute_overlap_element, _build_operator_matrix, _compute_matrix_element + +@testset "Hamiltonian / overlap helpers" begin + + @testset "compute_overlap_element for Rank0Gaussian" begin + A = [1.0 0.2; 0.2 1.5] + B = [0.9 0.1; 0.1 1.2] + + bra = Rank0Gaussian(A) + ket = Rank0Gaussian(B) + + val = _compute_overlap_element(bra, ket) + + R = inv(A + B) + n = length(R) + expected = (π^n / det(A + B))^(3 / 2) + + @test isapprox(val, expected; atol = 1.0e-10) + end + + +end + +spd(M) = 0.5 * (M + M') + (size(M, 1) == 1 ? 1.0e-12 : 0.0)I + + +@testset "_compute_overlap_element basic properties" begin + A = [1.0;;] + B = [1.0;;] + bra = Rank0Gaussian(A) + ket = Rank0Gaussian(B) + val = _compute_overlap_element(bra, ket) + @test isapprox(val, (π / 2)^(3 / 2); atol = 1.0e-12) + + @test isapprox( + _compute_overlap_element(Rank0Gaussian(A), Rank0Gaussian(B)), + _compute_overlap_element(Rank0Gaussian(B), Rank0Gaussian(A)); + atol = 1.0e-12 + ) + + A2 = [1.0 0.2; 0.2 1.5] + B2 = [0.9 0.1; 0.1 1.2] + val2 = _compute_overlap_element(Rank0Gaussian(A2), Rank0Gaussian(B2)) + @test val2 > 0 +end + +@testset "build_overlap_matrix structure & values" begin + A = spd([1.0 0.2; 0.2 1.5]) + B = spd([0.9 0.1; 0.1 1.2]) + C = spd([1.3 0.0; 0.0 0.8]) + g1 = Rank0Gaussian(A) + g2 = Rank0Gaussian(B) + g3 = Rank0Gaussian(C) + basis = BasisSet([g1, g2, g3]) + + S = build_overlap_matrix(basis) + + @test size(S) == (3, 3) + # Symmetry + @test S ≈ S' + @test isapprox(S[1, 1], _compute_overlap_element(g1, g1); atol = 1.0e-12) + @test isapprox(S[2, 2], _compute_overlap_element(g2, g2); atol = 1.0e-12) + @test isapprox(S[3, 3], _compute_overlap_element(g3, g3); atol = 1.0e-12) + @test isapprox(S[1, 2], _compute_overlap_element(g1, g2); atol = 1.0e-12) + @test isapprox(S[2, 3], _compute_overlap_element(g2, g3); atol = 1.0e-12) + @test isapprox(S[1, 3], _compute_overlap_element(g1, g3); atol = 1.0e-12) +end + +@testset "_build_operator_matrix matches pairwise _compute_matrix_element" begin + A = spd([1.0 0.2; 0.2 1.5]) + B = spd([0.9 0.1; 0.1 1.2]) + C = spd([1.3 0.0; 0.0 0.8]) + g = [Rank0Gaussian(A), Rank0Gaussian(B), Rank0Gaussian(C)] + basis = BasisSet(g) + + K = [2.0 0.1; 0.1 2.0] + kop = KineticOperator(K) + Hk = _build_operator_matrix(basis, kop) + + @test size(Hk) == (3, 3) + @test Hk ≈ Hk' + for i in 1:3, j in 1:3 + @test isapprox(Hk[i, j], _compute_matrix_element(g[i], g[j], kop); atol = 1.0e-10) + end + + w = [1.0, -1.0] + cop = CoulombOperator(1.5, w) + Hc = _build_operator_matrix(basis, cop) + + @test size(Hc) == (3, 3) + @test Hc ≈ Hc' + for i in 1:3, j in 1:3 + @test isapprox(Hc[i, j], _compute_matrix_element(g[i], g[j], cop); atol = 1.0e-10) + end +end + +@testset "build_hamiltonian_matrix sums operator matrices" begin + A = spd([1.0 0.2; 0.2 1.5]) + B = spd([0.9 0.1; 0.1 1.2]) + C = spd([1.3 0.0; 0.0 0.8]) + g = [Rank0Gaussian(A), Rank0Gaussian(B), Rank0Gaussian(C)] + basis = BasisSet(g) + + kop = KineticOperator([2.0 0.0; 0.0 2.0]) + cop = CoulombOperator(0.75, [1.0, -1.0]) + + Hk = _build_operator_matrix(basis, kop) + Hc = _build_operator_matrix(basis, cop) + + H = build_hamiltonian_matrix(basis, [kop, cop]) + + @test size(H) == (3, 3) + @test H ≈ H' + @test H ≈ Hk .+ Hc atol = 1.0e-10 + + H_only = build_hamiltonian_matrix(basis, [kop]) + @test H_only ≈ Hk atol = 1.0e-12 +end + + +@testset "solve_generalized_eigenproblem" begin + S = [2.0 0.5; 0.5 1.5] + H = [1.0 0.2; 0.2 0.8] + + vals, vecs = FewBodyECG.solve_generalized_eigenproblem(H, S) + @test length(vals) == 2 + @test size(vecs) == (2, 2) + @test all(isreal, vals) + @test all(isreal, vecs) + + S_bad = [0.0 0.0; 0.0 0.0] + H_bad = [1.0 0.0; 0.0 1.0] + vals_bad, vecs_bad = FewBodyECG.solve_generalized_eigenproblem(H_bad, S_bad) + @test length(vals_bad) == 2 + @test size(vecs_bad) == (2, 2) + @test all(isreal, vals_bad) + @test all(isreal, vecs_bad) +end diff --git a/test/test_matrix_elements.jl b/test/test_matrix_elements.jl new file mode 100644 index 0000000..1db5897 --- /dev/null +++ b/test/test_matrix_elements.jl @@ -0,0 +1,219 @@ +using Test +using FewBodyECG +using LinearAlgebra + +import FewBodyECG: _compute_matrix_element + +@testset "compute_matrix_element for Rank0Gaussian and KineticOperator" begin + A = [1.0 0.2; 0.2 1.5] + B = [0.9 0.1; 0.1 1.2] + K = rand(2, 2) + + bra = Rank0Gaussian(A) + ket = Rank0Gaussian(B) + op = KineticOperator(K) + + result = _compute_matrix_element(bra, ket, op) + + R = inv(A + B) + M0 = (π^length(R) / det(A + B))^(3 / 2) + expected = 6 * tr(B * K * A * R) * M0 + + @test isapprox(result, expected; atol = 1.0e-10) +end +@testset "compute_matrix_element for Rank0Gaussian and CoulombOperator" begin + A = [1.0 0.2; 0.2 1.5] + B = [0.9 0.1; 0.1 1.2] + w = [1.0, -1.0] + coefficient = 1.5 + + bra = Rank0Gaussian(A) + ket = Rank0Gaussian(B) + op = CoulombOperator(coefficient, w) + + result = _compute_matrix_element(bra, ket, op) + + R = inv(A + B) + β = 1 / (dot(w, R * w)) + M0 = (π^length(R) / det(A + B))^(3 / 2) + expected = coefficient * 2 * sqrt(β / π) * M0 + + @test isapprox(result, expected; atol = 1.0e-10) +end + +@testset "compute_matrix_element for Rank1Gaussian and CoulombOperator" begin + A = [1.0 0.2; 0.2 1.5] + B = [0.9 0.1; 0.1 1.2] + a = [0.5, -0.4] + b = [-0.2, 0.7] + w = [1.0, -1.0] + coefficient = 1.0 + + bra = Rank1Gaussian(A, a) + ket = Rank1Gaussian(B, b) + op = CoulombOperator(coefficient, w) + + result = _compute_matrix_element(bra, ket, op) + + R = inv(A + B) + β = 1 / (dot(w, R * w)) + M0 = (π^length(R) / det(A + B))^(3 / 2) + M1 = 0.5 * dot(b, R * a) * M0 + q2 = 0.25 * dot(a .+ b, R * (w * w') * (a .+ b)) + expected = 2 * sqrt(β / π) * M1 - sqrt(β^3 / π) / 3 * q2 * M0 + + @test isapprox(result, expected; atol = 1.0e-10) +end + +@testset "compute_matrix_element for Rank1Gaussian and KineticOperator" begin + A = [1.0 0.2; 0.2 1.5] + B = [0.9 0.1; 0.1 1.2] + a = [0.4, -0.6] + b = [-0.3, 0.8] + K = [2.0 0.0; 0.0 2.0] + + bra = Rank1Gaussian(A, a) + ket = Rank1Gaussian(B, b) + op = KineticOperator(K) + + result = _compute_matrix_element(bra, ket, op) + + R = inv(A + B) + M0 = (π^length(R) / det(A + B))^(3 / 2) + M1 = 0.5 * dot(b, R * a) * M0 + + T1 = 6 * tr(B * K * A * R) * M1 + T2 = dot(b, a) * M0 + T3 = dot(a, R * B * A * R * b) * M0 + T4 = dot(b, R * B * a) * M0 + T5 = dot(a, R * A * b) * M0 + + expected = T1 + T2 + T3 - T4 - T5 + + @test isapprox(result, expected; atol = 1.0e-10) +end + +@testset "compute_matrix_element for Rank2Gaussian and KineticOperator" begin + A = [1.0 0.2; 0.2 1.5] + B = [0.9 0.1; 0.1 1.2] + a = [0.5, -0.4] + b = [-0.2, 0.7] + c = [0.3, 0.6] + d = [-0.1, -0.8] + K = [2.0 0.1; 0.1 2.0] + + bra = Rank2Gaussian(A, a, b) + ket = Rank2Gaussian(B, c, d) + op = KineticOperator(K) + + result = _compute_matrix_element(bra, ket, op) + + R = inv(A + B) + M0 = (π^length(R) / det(A + B))^(3 / 2) + + M2 = 0.25 * ( + dot(a, R * b) * dot(c, R * d) + + dot(a, R * c) * dot(b, R * d) + + dot(a, R * d) * dot(b, R * c) + ) * M0 + + T1 = 6 * tr(B * K * A * R) * M2 + + T2 = 0.5 * ( + dot(a, K * c) * dot(b, R * d) + + dot(a, K * d) * dot(b, R * c) + + dot(b, K * c) * dot(a, R * d) + + dot(b, K * d) * dot(a, R * c) + ) * M0 + + T3 = 0.5 * ( + dot(a, R * B * K * A * R * b) * dot(c, R * d) + + dot(a, R * B * K * A * R * c) * dot(b, R * d) + + dot(a, R * B * K * A * R * d) * dot(b, R * c) + + dot(b, R * B * K * A * R * a) * dot(c, R * d) + + dot(b, R * B * K * A * R * c) * dot(a, R * d) + + dot(b, R * B * K * A * R * d) * dot(a, R * c) + + dot(c, R * B * K * A * R * a) * dot(b, R * d) + + dot(c, R * B * K * A * R * b) * dot(a, R * d) + + dot(c, R * B * K * A * R * d) * dot(a, R * b) + + dot(d, R * B * K * A * R * a) * dot(b, R * c) + + dot(d, R * B * K * A * R * b) * dot(a, R * c) + + dot(d, R * B * K * A * R * c) * dot(a, R * b) + ) * M0 + + T4 = -0.5 * ( + dot(a, R * B * K * b) * dot(c, R * d) + + dot(b, R * B * K * a) * dot(c, R * d) + + dot(c, R * B * K * a) * dot(b, R * d) + + dot(c, R * B * K * b) * dot(a, R * d) + + dot(d, R * B * K * a) * dot(b, R * c) + + dot(d, R * B * K * b) * dot(a, R * c) + ) * M0 + + T5 = -0.5 * ( + dot(c, K * A * a) * dot(b, R * d) + + dot(c, K * A * b) * dot(a, R * d) + + dot(c, K * A * d) * dot(a, R * b) + + dot(d, K * A * a) * dot(b, R * c) + + dot(d, K * A * b) * dot(a, R * c) + + dot(d, K * A * c) * dot(a, R * b) + ) * M0 + + expected = T1 + T2 + T3 + T4 + T5 + + @test isapprox(result, expected; atol = 1.0e-10) +end + +@testset "compute_matrix_element for Rank2Gaussian and CoulombOperator" begin + A = [1.0 0.2; 0.2 1.5] + B = [0.9 0.1; 0.1 1.2] + a = [0.6, -0.5] + b = [-0.3, 0.9] + c = [0.2, 0.4] + d = [-0.2, -0.7] + w = [1.0, -1.0] + coefficient = 2.0 + + bra = Rank2Gaussian(A, a, b) + ket = Rank2Gaussian(B, c, d) + op = CoulombOperator(coefficient, w) + + result = _compute_matrix_element(bra, ket, op) + + R = inv(A + B) + M0 = (π^length(R) / det(A + B))^(3 / 2) + + β = 1 / dot(w, R * w) + q = 0.5 * dot(w, R * (a + b + c + d)) + + M2 = 0.25 * ( + dot(a, R * b) * dot(c, R * d) + + dot(a, R * c) * dot(b, R * d) + + dot(a, R * d) * dot(b, R * c) + ) * M0 + + term1 = 2 * sqrt(β / π) * M2 + + q2_1 = dot(a, R * (w * w') * b) * dot(c, R * d) + q2_2 = dot(a, R * (w * w') * c) * dot(b, R * d) + q2_3 = dot(a, R * (w * w') * d) * dot(b, R * c) + q2_4 = dot(b, R * (w * w') * c) * dot(a, R * d) + q2_5 = dot(b, R * (w * w') * d) * dot(a, R * c) + q2_6 = dot(c, R * (w * w') * d) * dot(a, R * b) + + q4_1 = dot(a, R * (w * w') * b) * dot(c, R * (w * w') * d) + q4_2 = dot(a, R * (w * w') * c) * dot(b, R * (w * w') * d) + q4_3 = dot(a, R * (w * w') * d) * dot(b, R * (w * w') * c) + + term2 = -2 * sqrt(β / π) * β / 3 * 0.25 * ( + q2_1 + q2_2 + q2_3 + q2_4 + q2_5 + q2_6 + ) * M0 + + term3 = 2 * sqrt(β / π) * β^2 / 10 * 0.5 * ( + q4_1 + q4_2 + q4_3 + ) * M0 + + expected = coefficient * (term1 + term2 + term3) + + @test isapprox(result, expected; atol = 1.0e-10) +end diff --git a/test/test_sampling.jl b/test/test_sampling.jl index fa9c07c..f8c4041 100644 --- a/test/test_sampling.jl +++ b/test/test_sampling.jl @@ -1,5 +1,5 @@ using Test -using FewBodyECG.Sampling +using FewBodyECG @testset "Sampling Module Tests" begin @@ -8,21 +8,17 @@ using FewBodyECG.Sampling n_terms = 5 i = 2 - # Test quasirandom method bij_quasi = generate_bij(:quasirandom, i, n_terms, b1) @test length(bij_quasi) == n_terms @test all(0 .<= bij_quasi .<= b1) - # Compare with direct QuasiMonteCarlo.sample using QuasiMonteCarlo expected_quasi = QuasiMonteCarlo.sample(i + 1, n_terms, HaltonSample())[:, end] * b1 @test isapprox(bij_quasi, expected_quasi; atol = 1.0e-12) - # Test random method bij_rand = generate_bij(:random, i, n_terms, b1) @test length(bij_rand) == n_terms @test all(0 .<= bij_rand .<= b1) - # Test unsupported method throws error @test_throws ErrorException generate_bij(:foo, i, n_terms, b1) end