From 570ff2be20d97e17023a228d2e73c60a242644ab Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Fri, 22 Nov 2024 12:37:14 +0000 Subject: [PATCH] build based on 66d346e --- dev/.documenter-siteinfo.json | 2 +- .../classic2d/1.hard-hexagon/index.html | 86 +- .../classic2d/1.hard-hexagon/main.ipynb | 6 +- dev/examples/index.html | 2 +- dev/examples/quantum1d/1.ising-cft/index.html | 369 +- dev/examples/quantum1d/1.ising-cft/main.ipynb | 13 +- dev/examples/quantum1d/2.haldane/index.html | 232 +- dev/examples/quantum1d/2.haldane/main.ipynb | 6 +- .../quantum1d/3.ising-dqpt/index.html | 43 +- .../quantum1d/3.ising-dqpt/main.ipynb | 6 +- .../quantum1d/4.xxz-heisenberg/index.html | 3732 +++++++++-------- .../quantum1d/4.xxz-heisenberg/main.ipynb | 6 +- .../quantum1d/5.haldane-spt/index.html | 1560 +++---- .../quantum1d/5.haldane-spt/main.ipynb | 6 +- dev/examples/quantum1d/6.hubbard/index.html | 863 ++++ dev/examples/quantum1d/6.hubbard/main.ipynb | 381 ++ dev/index.html | 171 +- dev/lib/lib/index.html | 36 +- dev/man/algorithms/index.html | 4 +- dev/man/environments/index.html | 2 +- dev/man/intro/index.html | 10 +- dev/man/lattices/index.html | 2 +- dev/man/operators/index.html | 2 +- dev/man/parallelism/index.html | 2 +- dev/man/states/index.html | 2 +- dev/objects.inv | Bin 2195 -> 2218 bytes dev/search_index.js | 2 +- 27 files changed, 4507 insertions(+), 3039 deletions(-) create mode 100644 dev/examples/quantum1d/6.hubbard/index.html create mode 100644 dev/examples/quantum1d/6.hubbard/main.ipynb diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 3e8d66d9..2fe60cb6 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.11.1","generation_timestamp":"2024-11-19T01:09:36","documenter_version":"1.8.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.11.1","generation_timestamp":"2024-11-22T12:37:07","documenter_version":"1.8.0"}} \ No newline at end of file diff --git a/dev/examples/classic2d/1.hard-hexagon/index.html b/dev/examples/classic2d/1.hard-hexagon/index.html index 61597879..2f620575 100644 --- a/dev/examples/classic2d/1.hard-hexagon/index.html +++ b/dev/examples/classic2d/1.hard-hexagon/index.html @@ -16,7 +16,7 @@ F = real(expectation_value(ψ, mpo)) S = real(first(entropy(ψ))) ξ = correlation_length(ψ) -println("F = $F\tS = $S\tξ = $ξ")
F = 0.8839037051703855	S = 1.2807829621905824	ξ = 13.849682582044379
+println("F = $F\tS = $S\tξ = $ξ")
F = 0.8839037051703854	S = 1.280782962182927	ξ = 13.849682581380039
 

The scaling hypothesis

The dominant eigenvector is of course only an approximation. The finite bond dimension enforces a finite correlation length, which effectively introduces a length scale in the system. This can be exploited to formulate a scaling hypothesis, which in turn allows to extract the central charge.

First we need to know the entropy and correlation length at a bunch of different bond dimensions. Our approach will be to re-use the previous approximated dominant eigenvector, and then expanding its bond dimension and re-running VUMPS. According to the scaling hypothesis we should have $S \propto \frac{c}{6} log(ξ)$. Therefore we should find $c$ using

function scaling_simulations(ψ₀, mpo, Ds; verbosity=0, tol=1e-6,
                              alg_eigsolve=MPSKit.Defaults.alg_eigsolve(; ishermitian=false))
     entropies = similar(Ds, Float64)
@@ -41,60 +41,60 @@
 Ss, ξs = scaling_simulations(ψ₀, mpo, bond_dimensions)
 
 f = fit(log.(ξs), 6 * Ss, 1)
-c = f.coeffs[2]
0.8025328581510137
p = plot(; xlabel="logarithmic correlation length", ylabel="entanglement entropy")
+c = f.coeffs[2]
0.8025415355662212
p = plot(; xlabel="logarithmic correlation length", ylabel="entanglement entropy")
 p = plot(log.(ξs), Ss; seriestype=:scatter, label=nothing)
 plot!(p, ξ -> f(ξ) / 6; label="fit")
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

This page was generated using Literate.jl.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

This page was generated using Literate.jl.

diff --git a/dev/examples/classic2d/1.hard-hexagon/main.ipynb b/dev/examples/classic2d/1.hard-hexagon/main.ipynb index 4ec91655..516a5cd2 100644 --- a/dev/examples/classic2d/1.hard-hexagon/main.ipynb +++ b/dev/examples/classic2d/1.hard-hexagon/main.ipynb @@ -145,11 +145,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.10.4" + "version": "1.11.1" }, "kernelspec": { - "name": "julia-1.10", - "display_name": "Julia 1.10.4", + "name": "julia-1.11", + "display_name": "Julia 1.11.1", "language": "julia" } }, diff --git a/dev/examples/index.html b/dev/examples/index.html index 7010a810..bf3a573c 100644 --- a/dev/examples/index.html +++ b/dev/examples/index.html @@ -1,2 +1,2 @@ -Examples · MPSKit.jl
+Examples · MPSKit.jl diff --git a/dev/examples/quantum1d/1.ising-cft/index.html b/dev/examples/quantum1d/1.ising-cft/index.html index 8c544ad6..47fc2a12 100644 --- a/dev/examples/quantum1d/1.ising-cft/index.html +++ b/dev/examples/quantum1d/1.ising-cft/index.html @@ -9,68 +9,67 @@ xlabel="#eigenvalue") - + - + - + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Krylov dimension

Note that we have specified a large Krylov dimension as degenerate eigenvalues are notoriously difficult for iterative methods.

Extracting momentum

Given a state, it is possible to assign a momentum label through the use of the translation operator. This operator can be defined in MPO language either diagramatically as

translation operator MPO

or in the code as:

id = complex(isomorphism(ℂ^2, ℂ^2))
 @tensor O[-1 -2; -3 -4] := id[-1, -3] * id[-2, -4]
@@ -111,104 +110,104 @@
      legend=false)
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Finite bond dimension

If we limit the maximum bond dimension of the MPS, we get an approximate solution, but we can reach higher system sizes.

L_mps = 20
 H_mps = periodic_boundary_conditions(transverse_field_ising(), L_mps)
 D = 64
-ψ, envs, δ = find_groundstate(FiniteMPS(L_mps, ℂ^2, ℂ^D), H_mps, DMRG());
[ Info: DMRG init:	obj = -1.966338498022e+01	err = 7.5670e-02
-[ Info: DMRG   1:	obj = -2.549098905759e+01	err = 8.6530961506e-03	time = 1.82 sec
-[ Info: DMRG   2:	obj = -2.549098968632e+01	err = 1.1511101281e-06	time = 0.74 sec
-[ Info: DMRG   3:	obj = -2.549098968636e+01	err = 1.4968031880e-07	time = 0.49 sec
-[ Info: DMRG   4:	obj = -2.549098968636e+01	err = 1.8734069152e-08	time = 0.60 sec
-[ Info: DMRG   5:	obj = -2.549098968636e+01	err = 8.9111826045e-09	time = 0.26 sec
-[ Info: DMRG   6:	obj = -2.549098968636e+01	err = 3.8873081213e-09	time = 0.25 sec
-[ Info: DMRG   7:	obj = -2.549098968636e+01	err = 2.0316417664e-09	time = 0.24 sec
-[ Info: DMRG   8:	obj = -2.549098968636e+01	err = 1.8443462781e-09	time = 0.23 sec
-[ Info: DMRG   9:	obj = -2.549098968636e+01	err = 1.7187968043e-09	time = 0.23 sec
-[ Info: DMRG  10:	obj = -2.549098968636e+01	err = 1.5834770903e-09	time = 0.23 sec
-[ Info: DMRG  11:	obj = -2.549098968636e+01	err = 1.4351188777e-09	time = 0.22 sec
-[ Info: DMRG  12:	obj = -2.549098968636e+01	err = 1.2823791724e-09	time = 0.22 sec
-[ Info: DMRG  13:	obj = -2.549098968636e+01	err = 1.1334733960e-09	time = 0.20 sec
-[ Info: DMRG  14:	obj = -2.549098968636e+01	err = 9.9399967768e-10	time = 0.20 sec
-[ Info: DMRG  15:	obj = -2.549098968636e+01	err = 8.6696262772e-10	time = 0.21 sec
-[ Info: DMRG  16:	obj = -2.549098968636e+01	err = 7.5346457934e-10	time = 0.20 sec
-[ Info: DMRG  17:	obj = -2.549098968636e+01	err = 6.5338501074e-10	time = 0.21 sec
-[ Info: DMRG  18:	obj = -2.549098968636e+01	err = 5.6588625932e-10	time = 0.19 sec
-[ Info: DMRG  19:	obj = -2.549098968636e+01	err = 4.8984473052e-10	time = 0.20 sec
-[ Info: DMRG  20:	obj = -2.549098968636e+01	err = 4.2398410528e-10	time = 0.20 sec
-[ Info: DMRG  21:	obj = -2.549098968636e+01	err = 3.6701567807e-10	time = 0.19 sec
-[ Info: DMRG  22:	obj = -2.549098968636e+01	err = 3.1784022120e-10	time = 0.18 sec
-[ Info: DMRG  23:	obj = -2.549098968636e+01	err = 2.7538139800e-10	time = 0.18 sec
-[ Info: DMRG  24:	obj = -2.549098968636e+01	err = 2.3871144511e-10	time = 0.18 sec
-[ Info: DMRG  25:	obj = -2.549098968636e+01	err = 2.0703135803e-10	time = 0.18 sec
-[ Info: DMRG  26:	obj = -2.549098968636e+01	err = 1.7964855233e-10	time = 0.23 sec
-[ Info: DMRG  27:	obj = -2.549098968636e+01	err = 1.5596026719e-10	time = 0.28 sec
-[ Info: DMRG  28:	obj = -2.549098968636e+01	err = 1.3537572002e-10	time = 0.17 sec
-[ Info: DMRG  29:	obj = -2.549098968636e+01	err = 1.1764928748e-10	time = 0.17 sec
-[ Info: DMRG  30:	obj = -2.549098968636e+01	err = 1.0228478965e-10	time = 0.17 sec
-[ Info: DMRG conv 31:	obj = -2.549098968636e+01	err = 8.8960401357e-11	time = 9.24 sec
+ψ, envs, δ = find_groundstate(FiniteMPS(L_mps, ℂ^2, ℂ^D), H_mps, DMRG());
[ Info: DMRG init:	obj = -1.986175369583e+01	err = 7.3962e-02
+[ Info: DMRG   1:	obj = -2.549098908186e+01	err = 9.7854336373e-03	time = 2.85 sec
+[ Info: DMRG   2:	obj = -2.549098968632e+01	err = 1.1440955438e-06	time = 0.65 sec
+[ Info: DMRG   3:	obj = -2.549098968636e+01	err = 1.1899350273e-07	time = 0.61 sec
+[ Info: DMRG   4:	obj = -2.549098968636e+01	err = 1.3300005913e-08	time = 0.34 sec
+[ Info: DMRG   5:	obj = -2.549098968636e+01	err = 5.5087464909e-09	time = 0.31 sec
+[ Info: DMRG   6:	obj = -2.549098968636e+01	err = 3.2413738015e-09	time = 0.30 sec
+[ Info: DMRG   7:	obj = -2.549098968636e+01	err = 2.4243792973e-09	time = 0.31 sec
+[ Info: DMRG   8:	obj = -2.549098968636e+01	err = 2.1231366707e-09	time = 0.56 sec
+[ Info: DMRG   9:	obj = -2.549098968636e+01	err = 1.9891538232e-09	time = 0.44 sec
+[ Info: DMRG  10:	obj = -2.549098968636e+01	err = 1.8864377638e-09	time = 0.32 sec
+[ Info: DMRG  11:	obj = -2.549098968636e+01	err = 1.7682141746e-09	time = 0.33 sec
+[ Info: DMRG  12:	obj = -2.549098968636e+01	err = 1.6262519428e-09	time = 0.30 sec
+[ Info: DMRG  13:	obj = -2.549098968636e+01	err = 1.4678381585e-09	time = 0.30 sec
+[ Info: DMRG  14:	obj = -2.549098968636e+01	err = 1.3037732764e-09	time = 0.30 sec
+[ Info: DMRG  15:	obj = -2.549098968636e+01	err = 1.1436368174e-09	time = 0.30 sec
+[ Info: DMRG  16:	obj = -2.549098968636e+01	err = 9.9399752806e-10	time = 0.30 sec
+[ Info: DMRG  17:	obj = -2.549098968636e+01	err = 8.5842868469e-10	time = 0.29 sec
+[ Info: DMRG  18:	obj = -2.549098968636e+01	err = 7.3821724717e-10	time = 0.29 sec
+[ Info: DMRG  19:	obj = -2.549098968636e+01	err = 6.3317095217e-10	time = 0.29 sec
+[ Info: DMRG  20:	obj = -2.549098968636e+01	err = 5.4224930858e-10	time = 0.47 sec
+[ Info: DMRG  21:	obj = -2.549098968636e+01	err = 4.6407320953e-10	time = 0.30 sec
+[ Info: DMRG  22:	obj = -2.549098968636e+01	err = 3.9709950959e-10	time = 0.28 sec
+[ Info: DMRG  23:	obj = -2.549098968636e+01	err = 3.3985399711e-10	time = 0.29 sec
+[ Info: DMRG  24:	obj = -2.549098968636e+01	err = 2.9097790850e-10	time = 0.28 sec
+[ Info: DMRG  25:	obj = -2.549098968636e+01	err = 2.4926442816e-10	time = 0.28 sec
+[ Info: DMRG  26:	obj = -2.549098968636e+01	err = 2.1365944710e-10	time = 0.28 sec
+[ Info: DMRG  27:	obj = -2.549098968636e+01	err = 1.8325685774e-10	time = 0.29 sec
+[ Info: DMRG  28:	obj = -2.549098968636e+01	err = 1.5728170079e-10	time = 0.27 sec
+[ Info: DMRG  29:	obj = -2.549098968636e+01	err = 1.3507433129e-10	time = 0.27 sec
+[ Info: DMRG  30:	obj = -2.549098968636e+01	err = 1.1601025066e-10	time = 0.32 sec
+[ Info: DMRG conv 31:	obj = -2.549098968636e+01	err = 9.9471043716e-11	time = 13.06 sec
 

Excitations on top of the groundstate can be found through the use of the quasiparticle ansatz. This returns quasiparticle states, which can be converted to regular FiniteMPS objects.

E_ex, qps = excitations(H, QuasiparticleAnsatz(), ψ, envs; num=16)
 states_mps = vcat(ψ, map(qp -> convert(FiniteMPS, qp), qps))
 E_mps = map(x -> expectation_value(x, H_mps), states_mps)
@@ -232,65 +231,65 @@ 

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -

This page was generated using Literate.jl.

+

This page was generated using Literate.jl.

diff --git a/dev/examples/quantum1d/1.ising-cft/main.ipynb b/dev/examples/quantum1d/1.ising-cft/main.ipynb index 05439cf3..79848cfe 100644 --- a/dev/examples/quantum1d/1.ising-cft/main.ipynb +++ b/dev/examples/quantum1d/1.ising-cft/main.ipynb @@ -69,9 +69,10 @@ { "cell_type": "markdown", "source": [ - "!!! note \"Krylov dimension\"\n", - " Note that we have specified a large Krylov dimension as degenerate eigenvalues are\n", - " notoriously difficult for iterative methods." + "> **Krylov dimension**\n", + ">\n", + "> Note that we have specified a large Krylov dimension as degenerate eigenvalues are\n", + "> notoriously difficult for iterative methods." ], "metadata": {} }, @@ -231,11 +232,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.10.4" + "version": "1.11.1" }, "kernelspec": { - "name": "julia-1.10", - "display_name": "Julia 1.10.4", + "name": "julia-1.11", + "display_name": "Julia 1.11.1", "language": "julia" } }, diff --git a/dev/examples/quantum1d/2.haldane/index.html b/dev/examples/quantum1d/2.haldane/index.html index de4e5e9f..1c18108e 100644 --- a/dev/examples/quantum1d/2.haldane/index.html +++ b/dev/examples/quantum1d/2.haldane/index.html @@ -7,7 +7,7 @@ E₀ = real(expectation_value(ψ, H)) En_1, st_1 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector=SU2Irrep(1)) En_2, st_2 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector=SU2Irrep(2)) -ΔE_finite = real(En_2[1] - En_1[1])

0.7989253589480485

We can go even further and doublecheck the claim that $S = 1$ is an edge excitation, by plotting the energy density.

p_density = plot(; xaxis="position", yaxis="energy density")
+ΔE_finite = real(En_2[1] - En_1[1])
0.7989253589480483

We can go even further and doublecheck the claim that $S = 1$ is an edge excitation, by plotting the energy density.

p_density = plot(; xaxis="position", yaxis="energy density")
 excited_1 = convert(FiniteMPS, st_1[1])
 excited_2 = convert(FiniteMPS, st_2[1])
 SS = -S_exchange(ComplexF64, SU2Irrep; spin=1)
@@ -19,51 +19,51 @@
 plot!(p_density, e₂; label="S = 2")
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Finally, we can obtain a value for the Haldane gap by extrapolating our results for different system sizes.

Ls = 12:4:30
 ΔEs = map(Ls) do L
     @info "computing L = $L"
@@ -75,58 +75,58 @@
 end
 
 f = fit(Ls .^ (-2), ΔEs, 1)
-ΔE_extrapolated = f.coeffs[1]
0.45173401585827344
p_size_extrapolation = plot(; xaxis="L^(-2)", yaxis="ΔE", xlims=(0, 0.015))
+ΔE_extrapolated = f.coeffs[1]
0.45173401585837447
p_size_extrapolation = plot(; xaxis="L^(-2)", yaxis="ΔE", xlims=(0, 0.015))
 plot!(p_size_extrapolation, Ls .^ (-2), ΔEs; seriestype=:scatter, label="numerical")
 plot!(p_size_extrapolation, x -> f(x); label="fit")
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Thermodynamic limit

A much nicer way of obtaining the Haldane gap is by working directly in the thermodynamic limit. As was already hinted at by the edge modes, this model is in a non-trivial SPT phase. Thus, care must be taken when selecting the symmetry sectors. The groundstate has half-integer edge modes, thus the virtual spaces must also all carry half-integer charges.

In contrast with the finite size case, we now should specify a momentum label to the excitations. This way, it is possible to scan the dispersion relation over the entire momentum space.

virtual_space_inf = Rep[SU₂](1 // 2 => 16, 3 // 2 => 16, 5 // 2 => 8, 7 // 2 => 4)
 ψ₀_inf = InfiniteMPS([physical_space], [virtual_space_inf])
 ψ_inf, envs_inf, delta_inf = find_groundstate(ψ₀_inf, H; verbosity=0)
@@ -136,80 +136,80 @@ 

┌ Warning: resorting to η -└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139 +└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139 ┌ Warning: resorting to η -└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139 +└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139 ┌ Warning: resorting to η -└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139 +└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139 ┌ Warning: resorting to η -└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139 +└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139 ┌ Warning: resorting to η -└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139 +└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139 ┌ Warning: resorting to η -└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139 +└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139 ┌ Warning: resorting to η -└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139 +└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139 ┌ Warning: resorting to η -└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139 +└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139 [ Info: Found excitations for momentum = 1.8849555921538759 [ Info: Found excitations for momentum = 1.6755160819145563 +[ Info: Found excitations for momentum = 2.0943951023931953 [ Info: Found excitations for momentum = 0.0 [ Info: Found excitations for momentum = 0.20943951023931953 -[ Info: Found excitations for momentum = 2.0943951023931953 [ Info: Found excitations for momentum = 1.4660765716752369 [ Info: Found excitations for momentum = 2.722713633111154 -[ Info: Found excitations for momentum = 2.5132741228718345 [ Info: Found excitations for momentum = 0.41887902047863906 [ Info: Found excitations for momentum = 2.303834612632515 -[ Info: Found excitations for momentum = 2.9321531433504737 [ Info: Found excitations for momentum = 1.2566370614359172 +[ Info: Found excitations for momentum = 2.5132741228718345 +[ Info: Found excitations for momentum = 2.9321531433504737 [ Info: Found excitations for momentum = 0.6283185307179586 -[ Info: Found excitations for momentum = 1.0471975511965976 [ Info: Found excitations for momentum = 3.141592653589793 +[ Info: Found excitations for momentum = 1.0471975511965976 [ Info: Found excitations for momentum = 0.8377580409572781 -minimum @k = 3.141592653589793: ΔE = 0.4104792470940668 +minimum @k = 3.141592653589793: ΔE = 0.4104792658835073

plot(kspace, real.(Es); xaxis="momentum", yaxis="ΔE", label="S = 1")
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - -

This page was generated using Literate.jl.

+ + + + + + + + + + + + + + + + + + + + + + + + + +

This page was generated using Literate.jl.

diff --git a/dev/examples/quantum1d/2.haldane/main.ipynb b/dev/examples/quantum1d/2.haldane/main.ipynb index 82b16f86..a16385dd 100644 --- a/dev/examples/quantum1d/2.haldane/main.ipynb +++ b/dev/examples/quantum1d/2.haldane/main.ipynb @@ -179,11 +179,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.10.4" + "version": "1.11.1" }, "kernelspec": { - "name": "julia-1.10", - "display_name": "Julia 1.10.4", + "name": "julia-1.11", + "display_name": "Julia 1.11.1", "language": "julia" } }, diff --git a/dev/examples/quantum1d/3.ising-dqpt/index.html b/dev/examples/quantum1d/3.ising-dqpt/index.html index 8babda74..207594a0 100644 --- a/dev/examples/quantum1d/3.ising-dqpt/index.html +++ b/dev/examples/quantum1d/3.ising-dqpt/index.html @@ -3,13 +3,14 @@ L = 20 ψ₀ = FiniteMPS(rand, ComplexF64, L, ℂ^2, ℂ^10) -ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG());
[ Info: DMRG init:	obj = +9.833992820341e+00	err = 1.5162e-01
-[ Info: DMRG   1:	obj = -2.040021714792e+01	err = 1.0482607701e-02	time = 0.07 sec
-[ Info: DMRG   2:	obj = -2.040021715176e+01	err = 2.9301055999e-07	time = 0.02 sec
-[ Info: DMRG   3:	obj = -2.040021783353e+01	err = 2.1923563339e-05	time = 0.14 sec
-[ Info: DMRG   4:	obj = -2.040021786702e+01	err = 1.8539117704e-06	time = 0.21 sec
-[ Info: DMRG   5:	obj = -2.040021786703e+01	err = 7.8191209682e-08	time = 0.04 sec
-[ Info: DMRG conv 6:	obj = -2.040021786703e+01	err = 6.4920277294e-11	time = 0.49 sec
+ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG());
[ Info: DMRG init:	obj = +9.799964091770e+00	err = 1.5223e-01
+[ Info: DMRG   1:	obj = -2.040021714743e+01	err = 2.4038839149e-02	time = 0.09 sec
+[ Info: DMRG   2:	obj = -2.040021715170e+01	err = 6.0313575856e-07	time = 0.07 sec
+[ Info: DMRG   3:	obj = -2.040021773534e+01	err = 1.6799456960e-05	time = 0.14 sec
+[ Info: DMRG   4:	obj = -2.040021786694e+01	err = 1.9058246307e-06	time = 0.09 sec
+[ Info: DMRG   5:	obj = -2.040021786703e+01	err = 1.1474711603e-06	time = 0.05 sec
+[ Info: DMRG   6:	obj = -2.040021786703e+01	err = 4.3837579221e-10	time = 0.02 sec
+[ Info: DMRG conv 7:	obj = -2.040021786703e+01	err = 1.9834477158e-11	time = 0.50 sec
 

Finite MPS quenching

We can define a helper function that measures the loschmith echo

echo(ψ₀::FiniteMPS, ψₜ::FiniteMPS) = -2 * log(abs(dot(ψ₀, ψₜ))) / length(ψ₀)
 @assert isapprox(echo(ψ₀, ψ₀), 0, atol=1e-10)

We will initially use a two-site TDVP scheme to dynamically increase the bond dimension while time evolving, and later on switch to a faster one-site scheme. A single timestep can be done using

H₁ = transverse_field_ising(; g=-2.0)
 ψₜ = deepcopy(ψ₀)
@@ -32,14 +33,24 @@
 
     return times, echos
 end
finite_sim (generic function with 1 method)

Infinite MPS quenching

Similarly we could start with an initial infinite state and find the pre-quench groundstate:

ψ₀ = InfiniteMPS([ℂ^2], [ℂ^10])
-ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS());
[ Info: VUMPS init:	obj = +5.083504996507e-01	err = 3.8682e-01
-[ Info: VUMPS   1:	obj = -1.060586960116e+00	err = 4.7773289906e-02	time = 1.51 sec
-[ Info: VUMPS   2:	obj = -1.063544400328e+00	err = 8.6203478863e-05	time = 0.01 sec
-[ Info: VUMPS   3:	obj = -1.063544409973e+00	err = 2.6470717828e-07	time = 0.01 sec
-[ Info: VUMPS   4:	obj = -1.063544409973e+00	err = 8.9760940163e-09	time = 0.00 sec
-[ Info: VUMPS   5:	obj = -1.063544409973e+00	err = 4.1698951454e-10	time = 0.00 sec
-[ Info: VUMPS conv 6:	obj = -1.063544409973e+00	err = 3.7060383050e-11	time = 1.53 sec
-

The dot product of two infinite matrix product states scales as $\alpha ^N$ where $α$ is the dominant eigenvalue of the transfer matrix. It is this $α$ that is returned when calling

dot(ψ₀, ψ₀)
0.9999999999999964 - 7.217459182439675e-17im

so the loschmidth echo takes on the pleasant form

echo(ψ₀::InfiniteMPS, ψₜ::InfiniteMPS) = -2 * log(abs(dot(ψ₀, ψₜ)))
+ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS());
[ Info: VUMPS init:	obj = +5.000419382862e-01	err = 3.8507e-01
+[ Info: VUMPS   1:	obj = -1.062780898337e+00	err = 2.4151374798e-02	time = 1.31 sec
+┌ Warning: ignoring imaginary component -3.817802691569172e-6 from total weight 2.4343214394239743: operator might not be hermitian?
+│   α = 1.7081089443203243 - 3.817802691569172e-6im
+│   β₁ = 0.14004438155194618
+│   β₂ = 1.7287776826281838
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -4.33258309393697e-6 from total weight 3.290563788912538: operator might not be hermitian?
+│   α = 2.784222669687663 - 4.33258309393697e-6im
+│   β₁ = 0.13141322180957496
+│   β₂ = 1.7488981501547187
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+[ Info: VUMPS   2:	obj = -1.063544409753e+00	err = 1.4337063091e-05	time = 0.08 sec
+[ Info: VUMPS   3:	obj = -1.063544409973e+00	err = 1.7048015038e-07	time = 0.01 sec
+[ Info: VUMPS   4:	obj = -1.063544409973e+00	err = 1.7183182449e-08	time = 0.01 sec
+[ Info: VUMPS   5:	obj = -1.063544409973e+00	err = 5.8865202016e-10	time = 0.01 sec
+[ Info: VUMPS conv 6:	obj = -1.063544409973e+00	err = 6.8020365686e-11	time = 1.42 sec
+

The dot product of two infinite matrix product states scales as $\alpha ^N$ where $α$ is the dominant eigenvalue of the transfer matrix. It is this $α$ that is returned when calling

dot(ψ₀, ψ₀)
1.0000000000000018 - 7.06078012856404e-16im

so the loschmidth echo takes on the pleasant form

echo(ψ₀::InfiniteMPS, ψₜ::InfiniteMPS) = -2 * log(abs(dot(ψ₀, ψₜ)))
 @assert isapprox(echo(ψ₀, ψ₀), 0, atol=1e-10)

This time we cannot use a two-site scheme to grow the bond dimension, as this isn't implemented (yet). Instead, we have to make use of the changebonds machinery. Multiple algorithms are available, but we will only focus on OptimalEpand(). Growing the bond dimension by $5$ can be done by calling:

ψₜ = deepcopy(ψ₀)
 ψₜ, envs = changebonds(ψₜ, H₁, OptimalExpand(; trscheme=truncdim(5)));

a single timestep is easy

dt = 0.01
 ψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP(), envs);

With performance in mind we should once again try to re-use these "envs" cache objects. The final code is

function infinite_sim(dt=0.05, finaltime=5.0)
@@ -61,4 +72,4 @@
     end
 
     return times, echos
-end
infinite_sim (generic function with 3 methods)


This page was generated using Literate.jl.

+end
infinite_sim (generic function with 3 methods)


This page was generated using Literate.jl.

diff --git a/dev/examples/quantum1d/3.ising-dqpt/main.ipynb b/dev/examples/quantum1d/3.ising-dqpt/main.ipynb index 0d5eb734..2f706e57 100644 --- a/dev/examples/quantum1d/3.ising-dqpt/main.ipynb +++ b/dev/examples/quantum1d/3.ising-dqpt/main.ipynb @@ -282,11 +282,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.10.4" + "version": "1.11.1" }, "kernelspec": { - "name": "julia-1.10", - "display_name": "Julia 1.10.4", + "name": "julia-1.11", + "display_name": "Julia 1.11.1", "language": "julia" } }, diff --git a/dev/examples/quantum1d/4.xxz-heisenberg/index.html b/dev/examples/quantum1d/4.xxz-heisenberg/index.html index f626e193..220ebb5e 100644 --- a/dev/examples/quantum1d/4.xxz-heisenberg/index.html +++ b/dev/examples/quantum1d/4.xxz-heisenberg/index.html @@ -1,1785 +1,2041 @@ The XXZ model · MPSKit.jl

The XXZ model

In this file we will give step by step instructions on how to analyze the spin 1/2 XXZ model. The necessary packages to follow this tutorial are:

using MPSKit, MPSKitModels, TensorKit, Plots

Failure

First we should define the hamiltonian we want to work with. Then we specify an initial guess, which we then further optimize. Working directly in the thermodynamic limit, this is achieved as follows:

H = heisenberg_XXX(; spin=1 // 2);

We then need an intial state, which we shall later optimize. In this example we work directly in the thermodynamic limit.

random_data = TensorMap(rand, ComplexF64, ℂ^20 * ℂ^2, ℂ^20);
-state = InfiniteMPS([random_data]);

The groundstate can then be found by calling find_groundstate.

groundstate, cache, delta = find_groundstate(state, H, VUMPS());
[ Info: VUMPS init:	obj = +2.499974103828e-01	err = 4.7612e-03
-[ Info: VUMPS   1:	obj = -1.619489094120e-01	err = 3.8111216818e-01	time = 0.09 sec
-[ Info: VUMPS   2:	obj = -1.182665508511e-01	err = 4.0364154268e-01	time = 0.03 sec
-┌ Warning: ignoring imaginary component 1.232882527538344e-6 from total weight 1.9914657594448284: operator might not be hermitian?
-│   α = 0.25049121255958223 + 1.232882527538344e-6im
-│   β₁ = 1.3726963690475595
-│   β₂ = 1.4208781446252607
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 1.8392420257293263e-6 from total weight 1.9696900832784099: operator might not be hermitian?
-│   α = 0.13613443595890026 + 1.8392420257293263e-6im
-│   β₁ = 1.4208781446252607
-│   β₂ = 1.3572957443513758
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 1.0830449709096218e-6 from total weight 1.913217098985634: operator might not be hermitian?
-│   α = 0.30490943522699615 + 1.0830449709096218e-6im
-│   β₁ = 1.3572957443513758
-│   β₂ = 1.3134603787419823
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.3349880196560776e-6 from total weight 1.8091684366416438: operator might not be hermitian?
-│   α = 0.15356513905659896 - 1.3349880196560776e-6im
-│   β₁ = 1.2453864803058963
-│   β₂ = 1.3032730699574846
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1612816465528253e-6 from total weight 1.8643524554082331: operator might not be hermitian?
-│   α = 0.06307341568508065 - 1.1612816465528253e-6im
-│   β₁ = 1.3146485309683946
-│   β₂ = 1.3204283631616742
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.5596982755562358e-6 from total weight 1.8141643749302523: operator might not be hermitian?
-│   α = 0.08072855112812488 - 1.5596982755562358e-6im
-│   β₁ = 1.3204283631616742
-│   β₂ = 1.2414282975889408
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.417172544438891e-6 from total weight 1.828785206932206: operator might not be hermitian?
-│   α = 0.1285519752447895 - 1.417172544438891e-6im
-│   β₁ = 1.2414282975889408
-│   β₂ = 1.3367069629122716
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.289301417652794e-6 from total weight 1.885408518558631: operator might not be hermitian?
-│   α = 0.08120850910419936 - 1.289301417652794e-6im
-│   β₁ = 1.3367069629122716
-│   β₂ = 1.3271717881279397
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.6249186336921018e-6 from total weight 1.8407680177572983: operator might not be hermitian?
-│   α = 0.1289941860896659 - 1.6249186336921018e-6im
-│   β₁ = 1.3271717881279397
-│   β₂ = 1.2690163276915885
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0035504485646218e-6 from total weight 1.7396456869769024: operator might not be hermitian?
-│   α = 0.19480800880290103 - 1.0035504485646218e-6im
-│   β₁ = 1.2043364223883024
-│   β₂ = 1.2401575454882836
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.451556656376779e-6 from total weight 1.7493717573021048: operator might not be hermitian?
-│   α = 0.05705041450756472 - 1.451556656376779e-6im
-│   β₁ = 1.2401575454882836
-│   β₂ = 1.232499922035348
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.40004089359963e-6 from total weight 1.7309638146775101: operator might not be hermitian?
-│   α = 0.15157604727739213 - 1.40004089359963e-6im
-│   β₁ = 1.232499922035348
-│   β₂ = 1.2059039645824123
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.15482454825927e-6 from total weight 1.918824053662481: operator might not be hermitian?
-│   α = 0.5324714992933328 - 1.15482454825927e-6im
-│   β₁ = 1.370524157251734
-│   β₂ = 1.2328922847281172
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.5003680336328484e-6 from total weight 1.7004217179907795: operator might not be hermitian?
-│   α = 0.08096111237620557 - 1.5003680336328484e-6im
-│   β₁ = 1.2328922847281172
-│   β₂ = 1.1682704873243839
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 1.8850326343952672e-6 from total weight 1.7755134739648675: operator might not be hermitian?
-│   α = 0.21745063050632352 + 1.8850326343952672e-6im
-│   β₁ = 1.2496335036506379
-│   β₂ = 1.2424087194130087
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 1.6318123482791241e-6 from total weight 1.6984384594060646: operator might not be hermitian?
-│   α = 0.242203135278063 + 1.6318123482791241e-6im
-│   β₁ = 1.2424087194130087
-│   β₂ = 1.1324537145397988
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.3524781333182643e-6 from total weight 1.5660948460042454: operator might not be hermitian?
-│   α = 0.20666413466810546 - 2.3524781333182643e-6im
-│   β₁ = 1.0954146707412835
-│   β₂ = 1.1000044096466957
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.5085042947292635e-6 from total weight 1.544753413057564: operator might not be hermitian?
-│   α = 0.18456051333561468 - 2.5085042947292635e-6im
-│   β₁ = 1.1000044096466957
-│   β₂ = 1.0687332795519278
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.3454185131416283e-6 from total weight 1.5301327186155422: operator might not be hermitian?
-│   α = 0.20034798781882637 - 2.3454185131416283e-6im
-│   β₁ = 1.0687332795519278
-│   β₂ = 1.0765574752549987
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.179886915059214e-6 from total weight 1.5137298893013147: operator might not be hermitian?
-│   α = 0.19578629989152452 - 1.179886915059214e-6im
-│   β₁ = 1.0765574752549987
-│   β₂ = 1.0459779658339594
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -8.970966421210924e-7 from total weight 1.5259294767522584: operator might not be hermitian?
-│   α = 0.15682426449605152 - 8.970966421210924e-7im
-│   β₁ = 1.0459779658339594
-│   β₂ = 1.0999077293463033
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.153581410850285e-6 from total weight 1.5895749085881306: operator might not be hermitian?
-│   α = 0.17753069938549312 - 1.153581410850285e-6im
-│   β₁ = 1.0999077293463033
-│   β₂ = 1.1337699183306944
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.015247489363443e-7 from total weight 1.564145191103578: operator might not be hermitian?
-│   α = 0.1101277597941326 - 9.015247489363443e-7im
-│   β₁ = 1.1337699183306944
-│   β₂ = 1.0719084978032278
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.5952526306768633e-6 from total weight 1.5301971849916518: operator might not be hermitian?
-│   α = 0.22488518188133266 - 1.5952526306768633e-6im
-│   β₁ = 1.0719084978032278
-│   β₂ = 1.0686169810840824
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.5466909599401446e-6 from total weight 1.5491771112150903: operator might not be hermitian?
-│   α = 0.3489354106585746 - 1.5466909599401446e-6im
-│   β₁ = 1.0686169810840824
-│   β₂ = 1.0659510067717062
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.445115051708031e-7 from total weight 1.5680129741020914: operator might not be hermitian?
-│   α = 0.17418265114627196 - 9.445115051708031e-7im
-│   β₁ = 1.1169232430393412
-│   β₂ = 1.0866496952328888
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.5724137275956174e-6 from total weight 1.5312701489526515: operator might not be hermitian?
-│   α = 0.16742280266428738 - 1.5724137275956174e-6im
-│   β₁ = 1.0866496952328888
-│   β₂ = 1.0658096988061743
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.166518523731258e-6 from total weight 1.5187736631710762: operator might not be hermitian?
-│   α = 0.1398329444117618 - 1.166518523731258e-6im
-│   β₁ = 1.0658096988061743
-│   β₂ = 1.0729258471714427
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-[ Info: VUMPS   3:	obj = -1.493203861348e-01	err = 3.6296059201e-01	time = 0.03 sec
-[ Info: VUMPS   4:	obj = -7.520251536244e-03	err = 3.9887360051e-01	time = 0.03 sec
-┌ Warning: ignoring imaginary component 1.099900984910876e-6 from total weight 1.552718086186024: operator might not be hermitian?
-│   α = -0.4505116196691295 + 1.099900984910876e-6im
-│   β₁ = 1.0412366100283246
-│   β₂ = 1.0600938909586262
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-[ Info: VUMPS   5:	obj = -2.352760184979e-01	err = 3.6013144030e-01	time = 0.02 sec
-[ Info: VUMPS   6:	obj = -5.963750087299e-02	err = 3.9393533227e-01	time = 0.03 sec
-┌ Warning: ignoring imaginary component -1.176743669343422e-6 from total weight 1.918106632926099: operator might not be hermitian?
-│   α = 0.0783735962187843 - 1.176743669343422e-6im
-│   β₁ = 1.396721847865214
-│   β₂ = 1.3123104489355517
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0609971544759539e-6 from total weight 1.9196120278732995: operator might not be hermitian?
-│   α = -0.021605437831401036 - 1.0609971544759539e-6im
-│   β₁ = 1.3123104489355517
-│   β₂ = 1.400815772407421
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0518092979673599e-6 from total weight 1.7924480070709155: operator might not be hermitian?
-│   α = 0.04549748143559522 - 1.0518092979673599e-6im
-│   β₁ = 1.2767035144224377
-│   β₂ = 1.2573098160341405
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1231990716814577e-6 from total weight 1.6627984335729582: operator might not be hermitian?
-│   α = 0.12980004518430788 - 1.1231990716814577e-6im
-│   β₁ = 1.1464302734823937
-│   β₂ = 1.197392252774611
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0130783653500286e-6 from total weight 1.6889379781104494: operator might not be hermitian?
-│   α = 0.20140031806791586 - 1.0130783653500286e-6im
-│   β₁ = 1.197392252774611
-│   β₂ = 1.1739681421487853
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.379141249210576e-7 from total weight 1.5376281653096207: operator might not be hermitian?
-│   α = 0.14438442595398784 - 9.379141249210576e-7im
-│   β₁ = 1.1580977518851725
-│   β₂ = 1.0011309152019015
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -8.680933230274801e-7 from total weight 1.5537236737888407: operator might not be hermitian?
-│   α = 0.10991283382656072 - 8.680933230274801e-7im
-│   β₁ = 1.0657973418412914
-│   β₂ = 1.1251899615511112
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.723500291637655e-7 from total weight 1.5771422136428674: operator might not be hermitian?
-│   α = 0.13579571306157712 - 9.723500291637655e-7im
-│   β₁ = 1.1166899055108623
-│   β₂ = 1.1054142849165727
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.882280200112364e-7 from total weight 1.5180688894033822: operator might not be hermitian?
-│   α = 0.09617375331040615 - 9.882280200112364e-7im
-│   β₁ = 1.1054142849165727
-│   β₂ = 1.036022693211888
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.2660510717039247e-6 from total weight 1.5255263117407745: operator might not be hermitian?
-│   α = 0.13347806049420893 - 1.2660510717039247e-6im
-│   β₁ = 1.1218762152784267
-│   β₂ = 1.0250892121035442
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.4643177038906052e-6 from total weight 1.4187342638925065: operator might not be hermitian?
-│   α = 0.18563671478887794 - 1.4643177038906052e-6im
-│   β₁ = 1.0250892121035442
-│   β₂ = 0.9630877576274115
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.62525376541068e-7 from total weight 1.3877247027879926: operator might not be hermitian?
-│   α = 0.170733761111782 - 9.62525376541068e-7im
-│   β₁ = 0.9630877576274115
-│   β₂ = 0.9844246058748866
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1086373975024988e-6 from total weight 1.4385164585733765: operator might not be hermitian?
-│   α = 0.19199302226379647 - 1.1086373975024988e-6im
-│   β₁ = 0.9844246058748866
-│   β₂ = 1.0312014722329228
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-[ Info: VUMPS   7:	obj = +4.285328274012e-02	err = 3.6201107616e-01	time = 0.03 sec
-┌ Warning: ignoring imaginary component 1.1099933890403035e-6 from total weight 1.9792036477866468: operator might not be hermitian?
-│   α = -0.7379921644658364 + 1.1099933890403035e-6im
-│   β₁ = 1.2986523358230453
-│   β₂ = 1.2985055853784824
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-[ Info: VUMPS   8:	obj = -1.708578079666e-01	err = 3.8515380883e-01	time = 0.03 sec
-[ Info: VUMPS   9:	obj = -1.934207351169e-01	err = 3.7546998968e-01	time = 0.03 sec
-[ Info: VUMPS  10:	obj = -2.569456433937e-01	err = 3.6560214073e-01	time = 0.03 sec
-[ Info: VUMPS  11:	obj = -1.937666328823e-01	err = 4.0884590460e-01	time = 0.05 sec
-┌ Warning: ignoring imaginary component -1.0504283959426874e-6 from total weight 1.8402833625820303: operator might not be hermitian?
-│   α = 0.5324141657601801 - 1.0504283959426874e-6im
-│   β₁ = 1.2352702512807454
-│   β₂ = 1.2559002416568827
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.088935510642694e-6 from total weight 1.8602705570479414: operator might not be hermitian?
-│   α = 0.47903104132176993 - 1.088935510642694e-6im
-│   β₁ = 1.2559002416568827
-│   β₂ = 1.2860211467447324
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0003895707412502e-6 from total weight 1.6188876040636193: operator might not be hermitian?
-│   α = 0.5767932246498841 - 1.0003895707412502e-6im
-│   β₁ = 1.0414996723115992
-│   β₂ = 1.0969890989260855
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.857157344875245e-7 from total weight 1.6680151278695234: operator might not be hermitian?
-│   α = 0.5264739458256111 - 9.857157344875245e-7im
-│   β₁ = 1.0969890989260855
-│   β₂ = 1.1409270651556818
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-[ Info: VUMPS  12:	obj = -1.670459895402e-01	err = 3.7929964992e-01	time = 0.04 sec
-[ Info: VUMPS  13:	obj = -2.026670357121e-01	err = 3.7248798904e-01	time = 0.05 sec
-[ Info: VUMPS  14:	obj = +1.315709746715e-01	err = 3.6396753361e-01	time = 0.04 sec
-[ Info: VUMPS  15:	obj = -1.737796153998e-01	err = 3.6226202233e-01	time = 0.03 sec
-[ Info: VUMPS  16:	obj = -3.914396312413e-01	err = 2.5762054887e-01	time = 0.04 sec
-[ Info: VUMPS  17:	obj = +1.208065704588e-01	err = 3.5537355326e-01	time = 0.03 sec
-[ Info: VUMPS  18:	obj = -1.246491545662e-01	err = 3.7428714333e-01	time = 0.02 sec
-[ Info: VUMPS  19:	obj = -1.617135365501e-01	err = 3.8121272586e-01	time = 0.03 sec
-┌ Warning: ignoring imaginary component -1.041242800836964e-6 from total weight 1.8878543444675502: operator might not be hermitian?
-│   α = 0.24524795174378963 - 1.041242800836964e-6im
-│   β₁ = 1.3188603653095323
-│   β₂ = 1.3283278228302693
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0352301777257628e-6 from total weight 1.8447819372771954: operator might not be hermitian?
-│   α = 0.29785804984406666 - 1.0352301777257628e-6im
-│   β₁ = 1.3044579500429994
-│   β₂ = 1.2699962341738795
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1274336656243167e-6 from total weight 1.8643349432068144: operator might not be hermitian?
-│   α = 0.26211325930649076 - 1.1274336656243167e-6im
-│   β₁ = 1.3154591302446648
-│   β₂ = 1.2948392550476535
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0171041124086566e-6 from total weight 1.8385424526104095: operator might not be hermitian?
-│   α = 0.3313614251455128 - 1.0171041124086566e-6im
-│   β₁ = 1.2948392550476535
-│   β₂ = 1.2624695083695439
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0145686801365378e-6 from total weight 1.6609386863915652: operator might not be hermitian?
-│   α = 0.3399359484890182 - 1.0145686801365378e-6im
-│   β₁ = 1.1697513903269574
-│   β₂ = 1.129089259405177
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0450914485968243e-6 from total weight 1.682026293949647: operator might not be hermitian?
-│   α = 0.37087157882485045 - 1.0450914485968243e-6im
-│   β₁ = 1.129089259405177
-│   β₂ = 1.1903042341572698
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.77252247251828e-7 from total weight 1.6307158080421404: operator might not be hermitian?
-│   α = 0.30514175950114303 - 9.77252247251828e-7im
-│   β₁ = 1.170971147142692
-│   β₂ = 1.093137285872845
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.588569277281175e-7 from total weight 1.5967583693052758: operator might not be hermitian?
-│   α = 0.4226488627462033 - 9.588569277281175e-7im
-│   β₁ = 1.093137285872845
-│   β₂ = 1.0844612040084307
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.498961915273274e-7 from total weight 1.5966428260209404: operator might not be hermitian?
-│   α = 0.31406158682358515 - 9.498961915273274e-7im
-│   β₁ = 1.0844612040084307
-│   β₂ = 1.1289718909546287
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0087007574714063e-6 from total weight 1.6253906087657857: operator might not be hermitian?
-│   α = 0.3345859512478334 - 1.0087007574714063e-6im
-│   β₁ = 1.1289718909546287
-│   β₂ = 1.1204326582730915
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.978973924268386e-7 from total weight 1.6313955926302608: operator might not be hermitian?
-│   α = 0.4474495516150536 - 9.978973924268386e-7im
-│   β₁ = 1.0999799038430782
-│   β₂ = 1.1186083718412372
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0079336151200269e-6 from total weight 1.67215352955067: operator might not be hermitian?
-│   α = 0.312017547799734 - 1.0079336151200269e-6im
-│   β₁ = 1.1253351445900006
-│   β₂ = 1.1968138069906242
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.20250589822938e-7 from total weight 1.6321224428598387: operator might not be hermitian?
-│   α = 0.3570833150407308 - 9.20250589822938e-7im
-│   β₁ = 1.1659628844081862
-│   β₂ = 1.0848252056382104
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -8.891854269034438e-7 from total weight 1.6083595644935376: operator might not be hermitian?
-│   α = 0.4565536948967533 - 8.891854269034438e-7im
-│   β₁ = 1.062492024298748
-│   β₂ = 1.1178058465917602
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.623679356196568e-7 from total weight 1.5934469936613749: operator might not be hermitian?
-│   α = 0.3469746904762515 - 9.623679356196568e-7im
-│   β₁ = 1.1178058465917602
-│   β₂ = 1.0812918084872996
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.1030968346964e-7 from total weight 1.581381778373773: operator might not be hermitian?
-│   α = 0.3535414584487759 - 9.1030968346964e-7im
-│   β₁ = 1.129565920198637
-│   β₂ = 1.0487409585095295
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -8.763328321077096e-7 from total weight 1.5501726728818914: operator might not be hermitian?
-│   α = 0.45956101925780013 - 8.763328321077096e-7im
-│   β₁ = 1.0487409585095295
-│   β₂ = 1.044979132457804
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -8.833465855047871e-7 from total weight 1.5559369862983596: operator might not be hermitian?
-│   α = 0.5001231946818558 - 8.833465855047871e-7im
-│   β₁ = 1.044979132457804
-│   β₂ = 1.0386699707796463
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -8.554302556584847e-7 from total weight 1.5370431882570572: operator might not be hermitian?
-│   α = 0.46749317820375846 - 8.554302556584847e-7im
-│   β₁ = 1.0386699707796463
-│   β₂ = 1.0320448549846297
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.88558524744193e-7 from total weight 1.5286768622038271: operator might not be hermitian?
-│   α = 0.5720411114281577 - 9.88558524744193e-7im
-│   β₁ = 0.8498777407927486
-│   β₂ = 1.1346055444855774
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -8.424114983484471e-7 from total weight 1.4710741589707619: operator might not be hermitian?
-│   α = 0.3078083239511698 - 8.424114983484471e-7im
-│   β₁ = 1.0049864061890914
-│   β₂ = 1.029230557393401
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.443609546022635e-7 from total weight 1.574485981114362: operator might not be hermitian?
-│   α = 0.4466223362445244 - 9.443609546022635e-7im
-│   β₁ = 1.029230557393401
-│   β₂ = 1.1046352580014436
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0307124263374962e-6 from total weight 1.5620138044688787: operator might not be hermitian?
-│   α = 0.38039651012084363 - 1.0307124263374962e-6im
-│   β₁ = 1.1046352580014436
-│   β₂ = 1.0368059448220026
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-[ Info: VUMPS  20:	obj = -3.585234798191e-01	err = 2.9715384480e-01	time = 0.03 sec
-[ Info: VUMPS  21:	obj = -3.120924943693e-01	err = 3.4539465791e-01	time = 0.03 sec
-┌ Warning: ignoring imaginary component -1.101222477394026e-6 from total weight 1.9131196119976634: operator might not be hermitian?
-│   α = 0.7136486975992984 - 1.101222477394026e-6im
-│   β₁ = 1.2660334860270381
-│   β₂ = 1.2441428368486989
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0797377457440194e-6 from total weight 1.9473290871548898: operator might not be hermitian?
-│   α = 0.8370940070708139 - 1.0797377457440194e-6im
-│   β₁ = 1.2441428368486989
-│   β₂ = 1.2423658070482022
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1093458114272425e-6 from total weight 1.9377361994168134: operator might not be hermitian?
-│   α = 0.6001201014097328 - 1.1093458114272425e-6im
-│   β₁ = 1.2423658070482022
-│   β₂ = 1.3605898147092412
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.158222881363774e-6 from total weight 2.048460541734995: operator might not be hermitian?
-│   α = 0.7464363437066065 - 1.158222881363774e-6im
-│   β₁ = 1.3605898147092412
-│   β₂ = 1.3370933893888164
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1498694335951992e-6 from total weight 2.0094403493801196: operator might not be hermitian?
-│   α = 0.9629348644353627 - 1.1498694335951992e-6im
-│   β₁ = 1.3370933893888164
-│   β₂ = 1.1501253117044037
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1337398630566209e-6 from total weight 1.9506150403467022: operator might not be hermitian?
-│   α = 0.8164721214339367 - 1.1337398630566209e-6im
-│   β₁ = 1.1501253117044037
-│   β₂ = 1.3473990047211317
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.101966695791004e-6 from total weight 1.929959391373378: operator might not be hermitian?
-│   α = 0.6582940676182938 - 1.101966695791004e-6im
-│   β₁ = 1.2482279939252525
-│   β₂ = 1.3165557519789983
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0940951352973044e-6 from total weight 1.963168395071584: operator might not be hermitian?
-│   α = 0.814866900127403 - 1.0940951352973044e-6im
-│   β₁ = 1.3165557519789983
-│   β₂ = 1.2069395322113334
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1378380324576776e-6 from total weight 1.9351476008024464: operator might not be hermitian?
-│   α = 0.8471641801606176 - 1.1378380324576776e-6im
-│   β₁ = 1.2069395322113334
-│   β₂ = 1.253158431455674
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0654026989347087e-6 from total weight 1.880722856816104: operator might not be hermitian?
-│   α = 0.7241790762545013 - 1.0654026989347087e-6im
-│   β₁ = 1.253158431455674
-│   β₂ = 1.2009484066087621
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1162494796936387e-6 from total weight 1.9063231994678866: operator might not be hermitian?
-│   α = 0.8720535139516081 - 1.1162494796936387e-6im
-│   β₁ = 1.2009484066087621
-│   β₂ = 1.1963752481127155
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1902125000226582e-6 from total weight 1.8748641135008903: operator might not be hermitian?
-│   α = 0.8055412360382196 - 1.1902125000226582e-6im
-│   β₁ = 1.1963752481127155
-│   β₂ = 1.1978752133829795
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0841214859360487e-6 from total weight 1.8981428651365628: operator might not be hermitian?
-│   α = 0.8135546415885357 - 1.0841214859360487e-6im
-│   β₁ = 1.1978752133829795
-│   β₂ = 1.2272612414559885
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.137700440641265e-6 from total weight 1.9390242214140843: operator might not be hermitian?
-│   α = 0.7186830060683032 - 1.137700440641265e-6im
-│   β₁ = 1.2272612414559885
-│   β₂ = 1.3180058851301593
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.157718810059112e-6 from total weight 1.9480246088532358: operator might not be hermitian?
-│   α = 0.6778961778107517 - 1.157718810059112e-6im
-│   β₁ = 1.3180058851301593
-│   β₂ = 1.2641665774605424
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1765322366977249e-6 from total weight 2.00275903149103: operator might not be hermitian?
-│   α = 0.8416337896623912 - 1.1765322366977249e-6im
-│   β₁ = 1.2641665774605424
-│   β₂ = 1.305595330394424
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.2027726534122318e-6 from total weight 1.9444398761248778: operator might not be hermitian?
-│   α = 0.8138147830995662 - 1.2027726534122318e-6im
-│   β₁ = 1.2660269736586829
-│   β₂ = 1.2311489075819897
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.2050119907701384e-6 from total weight 1.9173639342920723: operator might not be hermitian?
-│   α = 0.8412593948765817 - 1.2050119907701384e-6im
-│   β₁ = 1.2311489075819897
-│   β₂ = 1.2053379005134133
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1237154133049952e-6 from total weight 1.858065549589884: operator might not be hermitian?
-│   α = 0.7127616925842981 - 1.1237154133049952e-6im
-│   β₁ = 1.2053379005134133
-│   β₂ = 1.2212857576103058
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0578611750605704e-6 from total weight 1.8430342285871433: operator might not be hermitian?
-│   α = 0.5901892385132163 - 1.0578611750605704e-6im
-│   β₁ = 1.2212857576103058
-│   β₂ = 1.2477631701345007
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1640514067205732e-6 from total weight 1.8795569802053598: operator might not be hermitian?
-│   α = 0.6449467131008518 - 1.1640514067205732e-6im
-│   β₁ = 1.2477631701345007
-│   β₂ = 1.248945655484515
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.2872909221240542e-6 from total weight 1.9420488977458514: operator might not be hermitian?
-│   α = 0.964724061840767 - 1.2872909221240542e-6im
-│   β₁ = 1.248945655484515
-│   β₂ = 1.1318110069203366
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.251536440805695e-6 from total weight 1.8346592558570003: operator might not be hermitian?
-│   α = 0.8659320524649449 - 1.251536440805695e-6im
-│   β₁ = 0.8814763377039885
-│   β₂ = 1.3561473856782706
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.2494786537451535e-6 from total weight 2.185013956688451: operator might not be hermitian?
-│   α = 1.2293936691157223 - 1.2494786537451535e-6im
-│   β₁ = 1.3561473856782706
-│   β₂ = 1.193206380127903
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0433588381823095e-6 from total weight 1.814963244016936: operator might not be hermitian?
-│   α = 0.7522114642910884 - 1.0433588381823095e-6im
-│   β₁ = 1.193206380127903
-│   β₂ = 1.1421593691523593
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.139217794356162e-6 from total weight 1.8612629247385752: operator might not be hermitian?
-│   α = 0.821228848948878 - 1.139217794356162e-6im
-│   β₁ = 1.1421593691523593
-│   β₂ = 1.2187513397394416
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1087975631965744e-6 from total weight 1.896227193132863: operator might not be hermitian?
-│   α = 0.8991678077171779 - 1.1087975631965744e-6im
-│   β₁ = 1.2187513397394416
-│   β₂ = 1.1409732658672187
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.174809510080116e-6 from total weight 1.9088015545409995: operator might not be hermitian?
-│   α = 0.8914717660485393 - 1.174809510080116e-6im
-│   β₁ = 1.1409732658672187
-│   β₂ = 1.2437770988128656
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.2381195570107528e-6 from total weight 1.9520801898475855: operator might not be hermitian?
-│   α = 0.8614585119019178 - 1.2381195570107528e-6im
-│   β₁ = 1.2437770988128656
-│   β₂ = 1.2335010451289605
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.2026763513330735e-6 from total weight 1.90755838099703: operator might not be hermitian?
-│   α = 0.7016999126767994 - 1.2026763513330735e-6im
-│   β₁ = 1.2335010451289605
-│   β₂ = 1.2747044289268388
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.2071538935155834e-6 from total weight 1.9339188108541947: operator might not be hermitian?
-│   α = 0.7949219841909692 - 1.2071538935155834e-6im
-│   β₁ = 1.2747044289268388
-│   β₂ = 1.2178955722468325
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1606930974371321e-6 from total weight 1.9370658765510747: operator might not be hermitian?
-│   α = 0.954874437495209 - 1.1606930974371321e-6im
-│   β₁ = 1.2178955722468325
-│   β₂ = 1.164976134440961
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1268602565549582e-6 from total weight 1.9552759499022778: operator might not be hermitian?
-│   α = 0.9492389130337321 - 1.1268602565549582e-6im
-│   β₁ = 1.2467519043765316
-│   β₂ = 1.1694696298668963
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.215592051885539e-6 from total weight 1.9488322122427535: operator might not be hermitian?
-│   α = 1.0153114208108338 - 1.215592051885539e-6im
-│   β₁ = 0.6714846852867788
-│   β₂ = 1.5219060508684197
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.080734107393455e-6 from total weight 1.8464847663385096: operator might not be hermitian?
-│   α = 1.1037814510079955 - 1.080734107393455e-6im
-│   β₁ = 1.0312175766294405
-│   β₂ = 1.061961774443977
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0426542516421555e-6 from total weight 1.7225192253666461: operator might not be hermitian?
-│   α = 0.9480463615620647 - 1.0426542516421555e-6im
-│   β₁ = 1.061961774443977
-│   β₂ = 0.9698029530298176
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1328282575884252e-6 from total weight 1.7697990256796783: operator might not be hermitian?
-│   α = 0.9658622062727309 - 1.1328282575884252e-6im
-│   β₁ = 0.9698029530298176
-│   β₂ = 1.1219541087246274
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0988690484076136e-6 from total weight 1.828016257969221: operator might not be hermitian?
-│   α = 0.786906278336358 - 1.0988690484076136e-6im
-│   β₁ = 1.1219541087246274
-│   β₂ = 1.2098102853048218
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.142796129886825e-6 from total weight 1.8111805841289295: operator might not be hermitian?
-│   α = 0.8638002477368484 - 1.142796129886825e-6im
-│   β₁ = 1.2098102853048218
-│   β₂ = 1.034689960280242
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.2517390058849887e-6 from total weight 1.830580564744666: operator might not be hermitian?
-│   α = 1.036150575189292 - 1.2517390058849887e-6im
-│   β₁ = 1.034689960280242
-│   β₂ = 1.0985599099045549
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0559897735233637e-6 from total weight 1.8024078749168828: operator might not be hermitian?
-│   α = 0.7896107548575517 - 1.0559897735233637e-6im
-│   β₁ = 1.0985599099045549
-│   β₂ = 1.1909471557231506
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0776481447613215e-6 from total weight 1.8447630176465906: operator might not be hermitian?
-│   α = 0.9113608822751792 - 1.0776481447613215e-6im
-│   β₁ = 1.1909471557231506
-│   β₂ = 1.0743448263052873
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.238077302180042e-6 from total weight 1.8340076359601551: operator might not be hermitian?
-│   α = 0.9175707442976321 - 1.238077302180042e-6im
-│   β₁ = 1.0743448263052873
-│   β₂ = 1.1693721102193158
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1686657275609275e-6 from total weight 1.7304630009406143: operator might not be hermitian?
-│   α = 0.7354440288129548 - 1.1686657275609275e-6im
-│   β₁ = 1.1693721102193158
-│   β₂ = 1.042205903815376
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.2205737424525465e-6 from total weight 1.723630094975153: operator might not be hermitian?
-│   α = 0.9056843148222427 - 1.2205737424525465e-6im
-│   β₁ = 1.042205903815376
-│   β₂ = 1.031718702088852
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.298260888585312e-6 from total weight 1.7345462402147205: operator might not be hermitian?
-│   α = 0.9727698926351831 - 1.298260888585312e-6im
-│   β₁ = 1.031718702088852
-│   β₂ = 0.9989624193051336
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.2475635252917616e-6 from total weight 1.6978560223990682: operator might not be hermitian?
-│   α = 0.9109309235783065 - 1.2475635252917616e-6im
-│   β₁ = 0.9989624193051336
-│   β₂ = 1.027129013357152
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0884506282324291e-6 from total weight 1.6753320770282918: operator might not be hermitian?
-│   α = 0.7441182182543868 - 1.0884506282324291e-6im
-│   β₁ = 1.027129013357152
-│   β₂ = 1.094546314918024
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1834045275764538e-6 from total weight 1.7015965086066662: operator might not be hermitian?
-│   α = 0.6866167659032616 - 1.1834045275764538e-6im
-│   β₁ = 1.094546314918024
-│   β₂ = 1.107229181055537
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0706567381644355e-6 from total weight 1.763274261244367: operator might not be hermitian?
-│   α = 0.8172553309406643 - 1.0706567381644355e-6im
-│   β₁ = 1.107229181055537
-│   β₂ = 1.1023943872470834
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1632508603934277e-6 from total weight 1.7221080521650705: operator might not be hermitian?
-│   α = 0.7673869852185097 - 1.1632508603934277e-6im
-│   β₁ = 1.1023943872470834
-│   β₂ = 1.0777290815477676
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1637710088698017e-6 from total weight 1.818889017221316: operator might not be hermitian?
-│   α = 1.0293670834582107 - 1.1637710088698017e-6im
-│   β₁ = 1.0777290815477676
-│   β₂ = 1.0427179346524702
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.040114223001612e-6 from total weight 1.8324550004613034: operator might not be hermitian?
-│   α = 1.0263900372755859 - 1.040114223001612e-6im
-│   β₁ = 1.0427179346524702
-│   β₂ = 1.103247084224591
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.449414066532713e-7 from total weight 1.695246006634505: operator might not be hermitian?
-│   α = 0.824717824769762 - 9.449414066532713e-7im
-│   β₁ = 1.0938490967740706
-│   β₂ = 0.998595857192951
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0747455515061621e-6 from total weight 1.722904239881022: operator might not be hermitian?
-│   α = 0.9353834131012809 - 1.0747455515061621e-6im
-│   β₁ = 0.998595857192951
-│   β₂ = 1.0470258852057677
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.223270898086798e-6 from total weight 1.708305544302349: operator might not be hermitian?
-│   α = 0.7933798680425387 - 1.223270898086798e-6im
-│   β₁ = 1.0470258852057677
-│   β₂ = 1.092059070465756
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.104362944544246e-6 from total weight 1.7859815831529486: operator might not be hermitian?
-│   α = 0.9186213194288729 - 1.104362944544246e-6im
-│   β₁ = 1.092059070465756
-│   β₂ = 1.0739050579378602
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0767294944188932e-6 from total weight 1.7517929358227784: operator might not be hermitian?
-│   α = 0.9119793947642264 - 1.0767294944188932e-6im
-│   β₁ = 1.0739050579378602
-│   β₂ = 1.0410571550392351
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.2038780349871332e-6 from total weight 1.7380900252716378: operator might not be hermitian?
-│   α = 1.0340693653604522 - 1.2038780349871332e-6im
-│   β₁ = 1.0410571550392351
-│   β₂ = 0.9315886879476152
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.288718792540576e-6 from total weight 1.7687358205143435: operator might not be hermitian?
-│   α = 1.1554699297722864 - 1.288718792540576e-6im
-│   β₁ = 0.9315886879476152
-│   β₂ = 0.9620073599765004
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.2196683122703278e-6 from total weight 1.7308801621854317: operator might not be hermitian?
-│   α = 1.0622505270312332 - 1.2196683122703278e-6im
-│   β₁ = 0.7539467763585763
-│   β₂ = 1.1397956887468725
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0853791424913356e-6 from total weight 1.6726926339879533: operator might not be hermitian?
-│   α = 0.8492362545918903 - 1.0853791424913356e-6im
-│   β₁ = 1.0284647484926124
-│   β₂ = 1.0094348383086176
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0729252470451783e-6 from total weight 1.7382624570595517: operator might not be hermitian?
-│   α = 0.9193105456968573 - 1.0729252470451783e-6im
-│   β₁ = 1.0094348383086176
-│   β₂ = 1.0758558441542996
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1420121823618734e-6 from total weight 1.7502520683145022: operator might not be hermitian?
-│   α = 0.9100055220804504 - 1.1420121823618734e-6im
-│   β₁ = 1.0758558441542996
-│   β₂ = 1.03817457829597
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.127696722245941e-6 from total weight 1.7299611891318882: operator might not be hermitian?
-│   α = 0.8541163993667705 - 1.127696722245941e-6im
-│   β₁ = 1.03817457829597
-│   β₂ = 1.0887811704902288
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1769815078735424e-6 from total weight 1.7594363401548583: operator might not be hermitian?
-│   α = 0.9492140654268791 - 1.1769815078735424e-6im
-│   β₁ = 1.0887811704902288
-│   β₂ = 1.0045717773448748
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1666054236525447e-6 from total weight 1.6736956846097075: operator might not be hermitian?
-│   α = 0.9196172145004238 - 1.1666054236525447e-6im
-│   β₁ = 1.0045717773448748
-│   β₂ = 0.9728293620344927
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-[ Info: VUMPS  22:	obj = -3.599926637146e-01	err = 3.1198099426e-01	time = 0.04 sec
-[ Info: VUMPS  23:	obj = -2.006675577417e-01	err = 3.8157333729e-01	time = 0.03 sec
-[ Info: VUMPS  24:	obj = -6.387493077780e-02	err = 3.9989829765e-01	time = 0.03 sec
-[ Info: VUMPS  25:	obj = -8.834566879714e-02	err = 3.7005632685e-01	time = 0.07 sec
-[ Info: VUMPS  26:	obj = -2.975734118485e-01	err = 3.4878293297e-01	time = 0.02 sec
-[ Info: VUMPS  27:	obj = -9.464425124186e-02	err = 3.5775080203e-01	time = 0.02 sec
-[ Info: VUMPS  28:	obj = -2.792871530928e-01	err = 3.5210943205e-01	time = 0.02 sec
-[ Info: VUMPS  29:	obj = -2.977067791771e-01	err = 3.4012052565e-01	time = 0.02 sec
-[ Info: VUMPS  30:	obj = -1.953218137614e-01	err = 4.1754928294e-01	time = 0.02 sec
-[ Info: VUMPS  31:	obj = -3.156920626111e-01	err = 3.3106032255e-01	time = 0.02 sec
-[ Info: VUMPS  32:	obj = -2.764432600413e-01	err = 3.3477318298e-01	time = 0.02 sec
-[ Info: VUMPS  33:	obj = -1.793989121500e-01	err = 3.7982002408e-01	time = 0.02 sec
-[ Info: VUMPS  34:	obj = -1.823377028659e-01	err = 4.0147712268e-01	time = 0.02 sec
-[ Info: VUMPS  35:	obj = -7.808398436717e-02	err = 3.5721592731e-01	time = 0.03 sec
-[ Info: VUMPS  36:	obj = +1.550446898034e-02	err = 3.7023278218e-01	time = 0.02 sec
-[ Info: VUMPS  37:	obj = -6.567548208365e-02	err = 3.9599026194e-01	time = 0.02 sec
-[ Info: VUMPS  38:	obj = -7.134198967732e-02	err = 3.9828655621e-01	time = 0.02 sec
-[ Info: VUMPS  39:	obj = +1.245450991997e-01	err = 3.6040147377e-01	time = 0.02 sec
-[ Info: VUMPS  40:	obj = -2.272805702370e-01	err = 3.7688254284e-01	time = 0.02 sec
-[ Info: VUMPS  41:	obj = -2.711012098569e-01	err = 3.5608653488e-01	time = 0.02 sec
-[ Info: VUMPS  42:	obj = -3.251122775684e-01	err = 3.1561344370e-01	time = 0.02 sec
-[ Info: VUMPS  43:	obj = -3.314209855315e-01	err = 3.3621472798e-01	time = 0.02 sec
-[ Info: VUMPS  44:	obj = -3.742005924137e-01	err = 2.9033969399e-01	time = 0.02 sec
-[ Info: VUMPS  45:	obj = -3.065837675909e-01	err = 3.3609748111e-01	time = 0.03 sec
-[ Info: VUMPS  46:	obj = -3.497171858968e-01	err = 2.9115179008e-01	time = 0.02 sec
-[ Info: VUMPS  47:	obj = -9.910732501111e-02	err = 3.6751035382e-01	time = 0.03 sec
-[ Info: VUMPS  48:	obj = -2.644925372437e-01	err = 3.5562378905e-01	time = 0.02 sec
-[ Info: VUMPS  49:	obj = -2.513896040191e-01	err = 3.5870302716e-01	time = 0.02 sec
-[ Info: VUMPS  50:	obj = -2.529548935577e-02	err = 3.8290361105e-01	time = 0.03 sec
-[ Info: VUMPS  51:	obj = +1.088249666345e-02	err = 3.6750640959e-01	time = 0.05 sec
-┌ Warning: ignoring imaginary component -1.0906260352510147e-6 from total weight 1.8497205242237273: operator might not be hermitian?
-│   α = -0.5443504782080575 - 1.0906260352510147e-6im
-│   β₁ = 1.2463426992339768
-│   β₂ = 1.253705886830773
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.0323387949501966e-6 from total weight 1.8248219407307344: operator might not be hermitian?
-│   α = -0.3488515008443419 - 1.0323387949501966e-6im
-│   β₁ = 1.3036579841910374
-│   β₂ = 1.2283133175150507
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.800749042193635e-7 from total weight 1.7392639240954022: operator might not be hermitian?
-│   α = -0.15134665486679957 - 9.800749042193635e-7im
-│   β₁ = 1.29843941540924
-│   β₂ = 1.1472524884397144
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.218140629447397e-7 from total weight 1.6660225128067838: operator might not be hermitian?
-│   α = -0.5406890303579995 - 9.218140629447397e-7im
-│   β₁ = 1.1472524884397144
-│   β₂ = 1.0803231523010095
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.389119079057651e-7 from total weight 1.6560892268929581: operator might not be hermitian?
-│   α = -0.36913134770841677 - 9.389119079057651e-7im
-│   β₁ = 1.0803231523010095
-│   β₂ = 1.1996980712543517
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-[ Info: VUMPS  52:	obj = -1.835786047074e-01	err = 3.7058718254e-01	time = 0.02 sec
-[ Info: VUMPS  53:	obj = -2.872446357917e-01	err = 3.4652966395e-01	time = 0.02 sec
-[ Info: VUMPS  54:	obj = -2.501331960767e-01	err = 3.6074360899e-01	time = 0.02 sec
-[ Info: VUMPS  55:	obj = -3.045540307815e-01	err = 3.6027238193e-01	time = 0.02 sec
-[ Info: VUMPS  56:	obj = -3.786209442746e-01	err = 2.7551150472e-01	time = 0.02 sec
-[ Info: VUMPS  57:	obj = -1.885356465151e-01	err = 3.5617449268e-01	time = 0.02 sec
-[ Info: VUMPS  58:	obj = -8.242178567440e-02	err = 4.2485729708e-01	time = 0.02 sec
-[ Info: VUMPS  59:	obj = +6.854256210998e-02	err = 3.8280553717e-01	time = 0.02 sec
-[ Info: VUMPS  60:	obj = -1.334345522323e-01	err = 3.7199065525e-01	time = 0.02 sec
-[ Info: VUMPS  61:	obj = -1.468728192806e-01	err = 3.7782674888e-01	time = 0.02 sec
-[ Info: VUMPS  62:	obj = -3.248275691559e-01	err = 3.1910607395e-01	time = 0.02 sec
-[ Info: VUMPS  63:	obj = -9.756232234052e-02	err = 3.6802847968e-01	time = 0.02 sec
-[ Info: VUMPS  64:	obj = -3.541788730283e-02	err = 3.6654318560e-01	time = 0.02 sec
-[ Info: VUMPS  65:	obj = -2.884534040748e-02	err = 3.8836376222e-01	time = 0.03 sec
-[ Info: VUMPS  66:	obj = -2.543638757662e-02	err = 3.7289138253e-01	time = 0.03 sec
-[ Info: VUMPS  67:	obj = +3.761430149410e-02	err = 3.9523804597e-01	time = 0.02 sec
-[ Info: VUMPS  68:	obj = -8.502353960949e-02	err = 4.2605791567e-01	time = 0.02 sec
-[ Info: VUMPS  69:	obj = +6.764248834569e-02	err = 3.3807684183e-01	time = 0.02 sec
-[ Info: VUMPS  70:	obj = +3.620382339073e-04	err = 4.0191660644e-01	time = 0.02 sec
-[ Info: VUMPS  71:	obj = -1.419203348175e-01	err = 3.9688127648e-01	time = 0.02 sec
-[ Info: VUMPS  72:	obj = +2.227275498360e-02	err = 3.7840095594e-01	time = 0.02 sec
-[ Info: VUMPS  73:	obj = -1.463126078271e-01	err = 4.1112786067e-01	time = 0.02 sec
-[ Info: VUMPS  74:	obj = -2.645357516128e-02	err = 3.7830090977e-01	time = 0.03 sec
-[ Info: VUMPS  75:	obj = -9.873560177855e-02	err = 4.0908071214e-01	time = 0.03 sec
-[ Info: VUMPS  76:	obj = -1.080109565552e-01	err = 3.8462901759e-01	time = 0.02 sec
-[ Info: VUMPS  77:	obj = -2.177950900439e-01	err = 3.4865826566e-01	time = 0.02 sec
-[ Info: VUMPS  78:	obj = -2.145295046946e-01	err = 3.8179742518e-01	time = 0.04 sec
-[ Info: VUMPS  79:	obj = -3.033777396122e-01	err = 3.3881849617e-01	time = 0.02 sec
-[ Info: VUMPS  80:	obj = -1.018654078294e-01	err = 3.5728148275e-01	time = 0.03 sec
-[ Info: VUMPS  81:	obj = -2.776735220330e-01	err = 3.3584583232e-01	time = 0.02 sec
-[ Info: VUMPS  82:	obj = -1.158347284088e-01	err = 3.6885043774e-01	time = 0.02 sec
-[ Info: VUMPS  83:	obj = -2.625401602298e-01	err = 3.7176511141e-01	time = 0.02 sec
-[ Info: VUMPS  84:	obj = -1.074949158082e-01	err = 4.0177799241e-01	time = 0.03 sec
-[ Info: VUMPS  85:	obj = -1.127766228428e-01	err = 4.0149881595e-01	time = 0.02 sec
-[ Info: VUMPS  86:	obj = -2.808293730657e-01	err = 3.6168038744e-01	time = 0.02 sec
-[ Info: VUMPS  87:	obj = -3.046853439863e-01	err = 3.3655658880e-01	time = 0.02 sec
-[ Info: VUMPS  88:	obj = -3.318734618762e-01	err = 3.1566007228e-01	time = 0.02 sec
-[ Info: VUMPS  89:	obj = -3.535869257430e-01	err = 3.0873844043e-01	time = 0.02 sec
-[ Info: VUMPS  90:	obj = -3.747958764617e-01	err = 2.8288563034e-01	time = 0.02 sec
-[ Info: VUMPS  91:	obj = +5.635703695733e-02	err = 3.7877695869e-01	time = 0.02 sec
-[ Info: VUMPS  92:	obj = -2.546798027174e-01	err = 3.7343940301e-01	time = 0.02 sec
-[ Info: VUMPS  93:	obj = -3.208056853929e-01	err = 3.3146175420e-01	time = 0.02 sec
-[ Info: VUMPS  94:	obj = -1.076573438228e-01	err = 3.8291173087e-01	time = 0.02 sec
-[ Info: VUMPS  95:	obj = +5.846672351870e-03	err = 3.8592643456e-01	time = 0.02 sec
-[ Info: VUMPS  96:	obj = +3.595683066276e-02	err = 3.7085826416e-01	time = 0.02 sec
-[ Info: VUMPS  97:	obj = -3.938910516171e-02	err = 3.5611514050e-01	time = 0.02 sec
-[ Info: VUMPS  98:	obj = -2.612602243834e-01	err = 3.5599606870e-01	time = 0.03 sec
-[ Info: VUMPS  99:	obj = -3.593251292915e-01	err = 3.0075205445e-01	time = 0.03 sec
-[ Info: VUMPS 100:	obj = -2.840490132623e-01	err = 3.5596476789e-01	time = 0.04 sec
-[ Info: VUMPS 101:	obj = -3.149203096197e-01	err = 3.4612410353e-01	time = 0.03 sec
-[ Info: VUMPS 102:	obj = -1.771004727151e-01	err = 3.7690482781e-01	time = 0.03 sec
-[ Info: VUMPS 103:	obj = -1.261057797685e-01	err = 3.2951815491e-01	time = 0.03 sec
-[ Info: VUMPS 104:	obj = -1.686543661324e-01	err = 3.7094564016e-01	time = 0.04 sec
-[ Info: VUMPS 105:	obj = -3.423027109471e-01	err = 3.2742213114e-01	time = 0.02 sec
-[ Info: VUMPS 106:	obj = -1.878214833070e-01	err = 3.9431530329e-01	time = 0.02 sec
-[ Info: VUMPS 107:	obj = -3.351840994830e-01	err = 3.2292784491e-01	time = 0.02 sec
-[ Info: VUMPS 108:	obj = +3.684045487139e-02	err = 4.0052347039e-01	time = 0.02 sec
-[ Info: VUMPS 109:	obj = -1.413589558971e-01	err = 4.0048426658e-01	time = 0.02 sec
-[ Info: VUMPS 110:	obj = -1.296478941821e-01	err = 3.8353753071e-01	time = 0.02 sec
-[ Info: VUMPS 111:	obj = -2.903612348667e-01	err = 3.4702087325e-01	time = 0.02 sec
-[ Info: VUMPS 112:	obj = -2.889212283943e-01	err = 3.4180326230e-01	time = 0.02 sec
-[ Info: VUMPS 113:	obj = -3.522496143264e-01	err = 3.1360801538e-01	time = 0.02 sec
-[ Info: VUMPS 114:	obj = -2.150329065915e-01	err = 3.6902468730e-01	time = 0.03 sec
-[ Info: VUMPS 115:	obj = -2.703393524794e-01	err = 3.5095708774e-01	time = 0.02 sec
-[ Info: VUMPS 116:	obj = -3.750896311434e-01	err = 2.7607472783e-01	time = 0.02 sec
-[ Info: VUMPS 117:	obj = -4.374578698028e-01	err = 8.7068984647e-02	time = 0.02 sec
-[ Info: VUMPS 118:	obj = -2.068327025250e-01	err = 3.9598606710e-01	time = 0.03 sec
-[ Info: VUMPS 119:	obj = +2.035115814900e-02	err = 3.8850017121e-01	time = 0.03 sec
-[ Info: VUMPS 120:	obj = -9.325059606146e-02	err = 3.9888549509e-01	time = 0.02 sec
-[ Info: VUMPS 121:	obj = -3.316950708480e-01	err = 3.2060866594e-01	time = 0.02 sec
-[ Info: VUMPS 122:	obj = -3.655769344173e-01	err = 3.0447070338e-01	time = 0.02 sec
-[ Info: VUMPS 123:	obj = -2.884718529955e-01	err = 3.4662993339e-01	time = 0.03 sec
-[ Info: VUMPS 124:	obj = +1.006818501243e-01	err = 2.5844667684e-01	time = 0.03 sec
-[ Info: VUMPS 125:	obj = -5.352193069862e-02	err = 3.9024450676e-01	time = 0.02 sec
-[ Info: VUMPS 126:	obj = -2.373506245892e-01	err = 3.6512643964e-01	time = 0.02 sec
-[ Info: VUMPS 127:	obj = -2.159468619452e-01	err = 3.7636947224e-01	time = 0.02 sec
-[ Info: VUMPS 128:	obj = -2.882613511865e-01	err = 3.5104424909e-01	time = 0.06 sec
-[ Info: VUMPS 129:	obj = -5.404755897444e-02	err = 4.0673697459e-01	time = 0.02 sec
-[ Info: VUMPS 130:	obj = -1.110570289732e-02	err = 3.7300276680e-01	time = 0.02 sec
-[ Info: VUMPS 131:	obj = -3.055714454115e-01	err = 3.2593658317e-01	time = 0.02 sec
-[ Info: VUMPS 132:	obj = -4.138799853856e-01	err = 2.1596634660e-01	time = 0.03 sec
-[ Info: VUMPS 133:	obj = -4.103726278341e-01	err = 2.2971553475e-01	time = 0.03 sec
-[ Info: VUMPS 134:	obj = -2.062283378317e-01	err = 3.9155621302e-01	time = 0.10 sec
-[ Info: VUMPS 135:	obj = -1.408095517660e-01	err = 3.7133013921e-01	time = 0.03 sec
-[ Info: VUMPS 136:	obj = -2.733008995045e-01	err = 3.4869660555e-01	time = 0.03 sec
-[ Info: VUMPS 137:	obj = -2.413146142661e-01	err = 3.6032029037e-01	time = 0.04 sec
-[ Info: VUMPS 138:	obj = -2.345521401692e-01	err = 3.9156410210e-01	time = 0.04 sec
-[ Info: VUMPS 139:	obj = -1.812659212104e-01	err = 3.7512375931e-01	time = 0.02 sec
-[ Info: VUMPS 140:	obj = +5.504445469520e-02	err = 4.0833291366e-01	time = 0.02 sec
-[ Info: VUMPS 141:	obj = +7.819335042351e-02	err = 3.6246986033e-01	time = 0.02 sec
-[ Info: VUMPS 142:	obj = -8.837833565961e-02	err = 4.0255886671e-01	time = 0.02 sec
-[ Info: VUMPS 143:	obj = -1.439796807770e-01	err = 3.7798874866e-01	time = 0.02 sec
-[ Info: VUMPS 144:	obj = -9.845791091371e-02	err = 3.7883789962e-01	time = 0.03 sec
-[ Info: VUMPS 145:	obj = -2.002438639637e-01	err = 3.6794432629e-01	time = 0.03 sec
-[ Info: VUMPS 146:	obj = -2.925115290248e-01	err = 3.4496990483e-01	time = 0.02 sec
-[ Info: VUMPS 147:	obj = -2.567134823031e-01	err = 3.7682994795e-01	time = 0.03 sec
-[ Info: VUMPS 148:	obj = -5.450623211295e-02	err = 4.0354166337e-01	time = 0.03 sec
-[ Info: VUMPS 149:	obj = -2.289380848022e-01	err = 3.8659563460e-01	time = 0.03 sec
-[ Info: VUMPS 150:	obj = -5.474894900934e-02	err = 3.7384998711e-01	time = 0.03 sec
-[ Info: VUMPS 151:	obj = -9.637261902165e-02	err = 3.9586432122e-01	time = 0.03 sec
-[ Info: VUMPS 152:	obj = -2.454647681151e-01	err = 3.8403024140e-01	time = 0.03 sec
-[ Info: VUMPS 153:	obj = -2.533922365600e-01	err = 3.7678126243e-01	time = 0.05 sec
-[ Info: VUMPS 154:	obj = -2.827263113773e-01	err = 3.5212474060e-01	time = 0.02 sec
-[ Info: VUMPS 155:	obj = -1.560655750127e-01	err = 3.9202883901e-01	time = 0.03 sec
-[ Info: VUMPS 156:	obj = -3.816792402053e-02	err = 3.8546044810e-01	time = 0.02 sec
-[ Info: VUMPS 157:	obj = -1.990621578324e-01	err = 3.6387099519e-01	time = 0.02 sec
-[ Info: VUMPS 158:	obj = -2.456905842106e-01	err = 3.6718246410e-01	time = 0.02 sec
-[ Info: VUMPS 159:	obj = -1.569727394566e-01	err = 3.8622969012e-01	time = 0.02 sec
-[ Info: VUMPS 160:	obj = -3.806952311736e-01	err = 2.7009992090e-01	time = 0.03 sec
-[ Info: VUMPS 161:	obj = -4.023014127533e-01	err = 2.4044971021e-01	time = 0.03 sec
-[ Info: VUMPS 162:	obj = -8.174864155685e-02	err = 3.9868997751e-01	time = 0.02 sec
-[ Info: VUMPS 163:	obj = -1.083133089400e-01	err = 3.9577054120e-01	time = 0.02 sec
-[ Info: VUMPS 164:	obj = -4.117310247478e-02	err = 3.8288605079e-01	time = 0.02 sec
-[ Info: VUMPS 165:	obj = +5.658238277328e-02	err = 3.4545767577e-01	time = 0.02 sec
-[ Info: VUMPS 166:	obj = -1.562684251828e-01	err = 3.7668846749e-01	time = 0.02 sec
-[ Info: VUMPS 167:	obj = -3.579967475307e-01	err = 2.9316630928e-01	time = 0.02 sec
-[ Info: VUMPS 168:	obj = -3.566777325589e-01	err = 3.1340244360e-01	time = 0.03 sec
-[ Info: VUMPS 169:	obj = -3.060527240289e-01	err = 3.5098667027e-01	time = 0.02 sec
-[ Info: VUMPS 170:	obj = -3.374604547737e-01	err = 3.1443790743e-01	time = 0.03 sec
-[ Info: VUMPS 171:	obj = -4.177203257232e-01	err = 1.9939123710e-01	time = 0.03 sec
-[ Info: VUMPS 172:	obj = +5.125705660122e-03	err = 3.8405215483e-01	time = 0.02 sec
-[ Info: VUMPS 173:	obj = -5.400499230366e-02	err = 4.1385947701e-01	time = 0.02 sec
-[ Info: VUMPS 174:	obj = -1.621295573254e-01	err = 3.6125259721e-01	time = 0.02 sec
-[ Info: VUMPS 175:	obj = -3.121116840774e-01	err = 3.3512185832e-01	time = 0.02 sec
-[ Info: VUMPS 176:	obj = -3.849842725262e-01	err = 2.6782930861e-01	time = 0.02 sec
-[ Info: VUMPS 177:	obj = +3.110563155614e-02	err = 3.7713634288e-01	time = 0.03 sec
-[ Info: VUMPS 178:	obj = +3.669039323676e-02	err = 3.8251904836e-01	time = 0.04 sec
-[ Info: VUMPS 179:	obj = -3.840454731001e-02	err = 3.7474626597e-01	time = 0.02 sec
-[ Info: VUMPS 180:	obj = -2.524487813554e-01	err = 3.7049523698e-01	time = 0.02 sec
-[ Info: VUMPS 181:	obj = -3.788502123588e-01	err = 2.8387660361e-01	time = 0.02 sec
-[ Info: VUMPS 182:	obj = -4.082044238062e-01	err = 2.2067247971e-01	time = 0.03 sec
-[ Info: VUMPS 183:	obj = -4.055634848980e-01	err = 2.3176961720e-01	time = 0.04 sec
-[ Info: VUMPS 184:	obj = -1.976537578552e-01	err = 3.4371096572e-01	time = 0.04 sec
-[ Info: VUMPS 185:	obj = -1.764473240992e-01	err = 3.6115673867e-01	time = 0.02 sec
-[ Info: VUMPS 186:	obj = -3.885951111015e-01	err = 2.5363772934e-01	time = 0.02 sec
-[ Info: VUMPS 187:	obj = -4.005815988144e-01	err = 2.3602724468e-01	time = 0.02 sec
-[ Info: VUMPS 188:	obj = -1.118521194665e-01	err = 3.8155191888e-01	time = 0.03 sec
-[ Info: VUMPS 189:	obj = -2.674536940230e-01	err = 3.2599437468e-01	time = 0.02 sec
-[ Info: VUMPS 190:	obj = -2.881123357546e-01	err = 3.4671988495e-01	time = 0.02 sec
-[ Info: VUMPS 191:	obj = -1.784544486614e-01	err = 3.7274285855e-01	time = 0.02 sec
-[ Info: VUMPS 192:	obj = -1.619856307685e-01	err = 3.7835778084e-01	time = 0.02 sec
-[ Info: VUMPS 193:	obj = -1.663182199638e-01	err = 3.6917729523e-01	time = 0.02 sec
-[ Info: VUMPS 194:	obj = -1.794534817670e-02	err = 3.8707259520e-01	time = 0.02 sec
-[ Info: VUMPS 195:	obj = +1.703845824273e-02	err = 3.7640930619e-01	time = 0.02 sec
-[ Info: VUMPS 196:	obj = -1.947209060524e-01	err = 3.5645896038e-01	time = 0.02 sec
-[ Info: VUMPS 197:	obj = -3.340877624423e-01	err = 3.2661456636e-01	time = 0.02 sec
-[ Info: VUMPS 198:	obj = -3.589457517989e-01	err = 3.1047756734e-01	time = 0.02 sec
-[ Info: VUMPS 199:	obj = -2.290122658012e-01	err = 3.6664407689e-01	time = 0.02 sec
-┌ Warning: VUMPS cancel 200:	obj = -3.484120636346e-01	err = 3.0496744526e-01	time = 5.17 sec
-└ @ MPSKit ~/Projects/Julia/MPSKit.jl/src/algorithms/groundstate/vumps.jl:67
-

As you can see, VUMPS struggles to converge. On it's own, that is already quite curious. Maybe we can do better using another algorithm, such as gradient descent.

groundstate, cache, delta = find_groundstate(state, H, GradientGrassmann(; maxiter=20));
[ Info: CG: initializing with f = 0.249997410383, ‖∇f‖ = 3.3669e-03
-[ Info: CG: iter    1: f = -0.044704853193, ‖∇f‖ = 5.9152e-01, α = 7.29e+03, β = 0.00e+00, nfg = 5
-[ Info: CG: iter    2: f = -0.058658885672, ‖∇f‖ = 6.1600e-01, α = 1.63e+00, β = 6.59e+03, nfg = 8
-[ Info: CG: iter    3: f = -0.060627038309, ‖∇f‖ = 6.4371e-01, α = 1.17e-03, β = 1.95e+01, nfg = 12
-[ Info: CG: iter    4: f = -0.181007718316, ‖∇f‖ = 6.8201e-01, α = 9.81e-01, β = 1.78e-03, nfg = 6
-[ Info: CG: iter    5: f = -0.311679137866, ‖∇f‖ = 4.9353e-01, α = 7.38e-01, β = 3.68e-01, nfg = 3
-[ Info: CG: iter    6: f = -0.369436221250, ‖∇f‖ = 3.9007e-01, α = 7.04e-01, β = 2.28e-01, nfg = 2
-[ Info: CG: iter    7: f = -0.408163517301, ‖∇f‖ = 2.1812e-01, α = 5.24e-01, β = 2.14e-01, nfg = 2
-[ Info: CG: iter    8: f = -0.417643389806, ‖∇f‖ = 1.6464e-01, α = 3.03e-01, β = 3.14e-01, nfg = 2
-[ Info: CG: iter    9: f = -0.421957811162, ‖∇f‖ = 1.4205e-01, α = 1.89e-01, β = 4.76e-01, nfg = 2
-[ Info: CG: iter   10: f = -0.425880699478, ‖∇f‖ = 1.3122e-01, α = 2.18e-01, β = 4.93e-01, nfg = 2
-[ Info: CG: iter   11: f = -0.429137411499, ‖∇f‖ = 1.2451e-01, α = 2.10e-01, β = 4.95e-01, nfg = 2
-[ Info: CG: iter   12: f = -0.431913122251, ‖∇f‖ = 1.1664e-01, α = 1.78e-01, β = 6.26e-01, nfg = 2
-[ Info: CG: iter   13: f = -0.435009198881, ‖∇f‖ = 1.0914e-01, α = 2.57e-01, β = 5.20e-01, nfg = 2
-[ Info: CG: iter   14: f = -0.437794275447, ‖∇f‖ = 8.3054e-02, α = 3.18e-01, β = 3.59e-01, nfg = 2
-[ Info: CG: iter   15: f = -0.439321637163, ‖∇f‖ = 6.5852e-02, α = 2.84e-01, β = 3.80e-01, nfg = 2
-[ Info: CG: iter   16: f = -0.440230609086, ‖∇f‖ = 5.3475e-02, α = 2.54e-01, β = 4.32e-01, nfg = 2
-[ Info: CG: iter   17: f = -0.440915387974, ‖∇f‖ = 4.3318e-02, α = 3.21e-01, β = 3.60e-01, nfg = 2
-[ Info: CG: iter   18: f = -0.441349404831, ‖∇f‖ = 3.5587e-02, α = 2.76e-01, β = 3.95e-01, nfg = 2
-[ Info: CG: iter   19: f = -0.441562044343, ‖∇f‖ = 3.2287e-02, α = 1.49e-01, β = 6.79e-01, nfg = 2
-┌ Warning: CG: not converged to requested tol: f = -0.441808873450, ‖∇f‖ = 2.9902e-02
-└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:103
+state = InfiniteMPS([random_data]);

The groundstate can then be found by calling find_groundstate.

groundstate, cache, delta = find_groundstate(state, H, VUMPS());
[ Info: VUMPS init:	obj = +2.499971249561e-01	err = 4.8102e-03
+[ Info: VUMPS   1:	obj = -1.047871149491e-01	err = 3.6332884520e-01	time = 0.08 sec
+[ Info: VUMPS   2:	obj = -2.424105097429e-01	err = 3.6011566451e-01	time = 0.02 sec
+┌ Warning: ignoring imaginary component 1.475763903743127e-6 from total weight 2.0662736930482595: operator might not be hermitian?
+│   α = 0.8739699649778873 + 1.475763903743127e-6im
+│   β₁ = 1.345735500203679
+│   β₂ = 1.3017908581601034
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.1833380872891541e-6 from total weight 2.0507172924982444: operator might not be hermitian?
+│   α = 0.7372884749735164 + 1.1833380872891541e-6im
+│   β₁ = 1.3017908581601034
+│   β₂ = 1.4025646794468833
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.2416644342636007e-6 from total weight 2.031220380535854: operator might not be hermitian?
+│   α = 0.7386571067649788 + 1.2416644342636007e-6im
+│   β₁ = 1.4025646794468833
+│   β₂ = 1.2700607201611787
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.3004780743588323e-6 from total weight 1.9679978250135914: operator might not be hermitian?
+│   α = 0.7393243960693548 + 1.3004780743588323e-6im
+│   β₁ = 1.2700607201611787
+│   β₂ = 1.3089540265940922
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.6458907476889217e-6 from total weight 2.0349614523247865: operator might not be hermitian?
+│   α = 0.7249377970347587 + 1.6458907476889217e-6im
+│   β₁ = 1.3089540265940922
+│   β₂ = 1.3791927563392283
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.368995952526035e-6 from total weight 2.054876147824496: operator might not be hermitian?
+│   α = 0.7217714242687149 + 1.368995952526035e-6im
+│   β₁ = 1.3791927563392283
+│   β₂ = 1.3414131857361027
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.2494864182130416e-6 from total weight 2.0096836188378915: operator might not be hermitian?
+│   α = 0.807454611112027 + 1.2494864182130416e-6im
+│   β₁ = 1.2894881464660273
+│   β₂ = 1.313036792683791
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.1639985493788058e-6 from total weight 2.0933444093691493: operator might not be hermitian?
+│   α = 0.8461206485955095 + 1.1639985493788058e-6im
+│   β₁ = 1.313036792683791
+│   β₂ = 1.3935942900696372
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.141568236568552e-6 from total weight 2.0729883136407588: operator might not be hermitian?
+│   α = 0.5431648307956423 + 1.141568236568552e-6im
+│   β₁ = 1.3935942900696372
+│   β₂ = 1.435321382047205
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.6521519737508483e-6 from total weight 2.060744558293663: operator might not be hermitian?
+│   α = 0.5404024011086792 + 1.6521519737508483e-6im
+│   β₁ = 1.435321382047205
+│   β₂ = 1.376403251103502
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.6923960462905674e-6 from total weight 1.9964796296703375: operator might not be hermitian?
+│   α = 0.6219891554004395 + 1.6923960462905674e-6im
+│   β₁ = 1.376403251103502
+│   β₂ = 1.3055935403492547
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.5709160999938243e-6 from total weight 2.0472728905311404: operator might not be hermitian?
+│   α = 0.8795272048710723 + 1.5709160999938243e-6im
+│   β₁ = 1.3055935403492547
+│   β₂ = 1.3088864318921027
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.3793371174981167e-6 from total weight 2.008276861479189: operator might not be hermitian?
+│   α = 0.7608179355505824 + 1.3793371174981167e-6im
+│   β₁ = 1.3088864318921027
+│   β₂ = 1.3195257972863235
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.6662444934072845e-6 from total weight 1.9904775101744567: operator might not be hermitian?
+│   α = 0.6960250799777928 + 1.6662444934072845e-6im
+│   β₁ = 1.3195257972863235
+│   β₂ = 1.3177258731789887
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.8182383051540407e-6 from total weight 1.9900059862237078: operator might not be hermitian?
+│   α = 0.7703642977709004 + 1.8182383051540407e-6im
+│   β₁ = 1.3177258731789887
+│   β₂ = 1.2768168220529936
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.3705999932014934e-6 from total weight 1.9641339239991362: operator might not be hermitian?
+│   α = 0.6373205365232443 + 1.3705999932014934e-6im
+│   β₁ = 1.2768168220529936
+│   β₂ = 1.3495863840638673
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.2716514099669375e-6 from total weight 2.021948581163632: operator might not be hermitian?
+│   α = 0.6621740011024483 + 1.2716514099669375e-6im
+│   β₁ = 1.3495863840638673
+│   β₂ = 1.3521901674991565
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.748967636133747e-6 from total weight 2.007126065968527: operator might not be hermitian?
+│   α = 0.7855947486826597 + 1.748967636133747e-6im
+│   β₁ = 1.3521901674991565
+│   β₂ = 1.2581644115329562
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.8063431283139864e-6 from total weight 1.9589927438694472: operator might not be hermitian?
+│   α = 0.8791231530779282 + 1.8063431283139864e-6im
+│   β₁ = 1.2581644115329562
+│   β₂ = 1.2172992096457365
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.5885285506861413e-6 from total weight 1.9829497440587416: operator might not be hermitian?
+│   α = 0.9043769872180605 + 1.5885285506861413e-6im
+│   β₁ = 1.2172992096457365
+│   β₂ = 1.2776441549376552
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.5188320461479582e-6 from total weight 1.9588640484991768: operator might not be hermitian?
+│   α = 0.6899280363007593 + 1.5188320461479582e-6im
+│   β₁ = 1.2776441549376552
+│   β₂ = 1.3148281555321597
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.8580505688672172e-6 from total weight 2.008682608503421: operator might not be hermitian?
+│   α = 0.6913519715595543 + 1.8580505688672172e-6im
+│   β₁ = 1.3148281555321597
+│   β₂ = 1.3520596120516548
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.956068479325515e-6 from total weight 1.9935567596530768: operator might not be hermitian?
+│   α = 0.6475058176538288 + 1.956068479325515e-6im
+│   β₁ = 1.3520596120516548
+│   β₂ = 1.314130729995241
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.9744130875937183e-6 from total weight 2.0021703956141623: operator might not be hermitian?
+│   α = 0.782921176999384 + 1.9744130875937183e-6im
+│   β₁ = 1.314130729995241
+│   β₂ = 1.2918131243171154
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.6117145099628014e-6 from total weight 2.0198779920499415: operator might not be hermitian?
+│   α = 0.7898358256992374 + 1.6117145099628014e-6im
+│   β₁ = 1.2918131243171154
+│   β₂ = 1.3368939086738196
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.3593759494220231e-6 from total weight 2.019513392870969: operator might not be hermitian?
+│   α = 0.7955165842907529 + 1.3593759494220231e-6im
+│   β₁ = 1.3368939086738196
+│   β₂ = 1.2877509017867448
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.0936758011396291e-6 from total weight 1.962446160174074: operator might not be hermitian?
+│   α = 0.7681454973098479 + 1.0936758011396291e-6im
+│   β₁ = 1.0473109475340552
+│   β₂ = 1.4711516596594305
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.4140393918386784e-6 from total weight 2.3305892057232325: operator might not be hermitian?
+│   α = 1.2725888691538776 + 1.4140393918386784e-6im
+│   β₁ = 1.4711516596594305
+│   β₂ = 1.2836963855283718
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.2363655292799668e-6 from total weight 1.9215446561532274: operator might not be hermitian?
+│   α = 0.7043198883856858 + 1.2363655292799668e-6im
+│   β₁ = 1.2836963855283718
+│   β₂ = 1.2443435820525077
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.3621234929601933e-6 from total weight 2.031241267058665: operator might not be hermitian?
+│   α = 0.8491909978696255 + 1.3621234929601933e-6im
+│   β₁ = 1.2443435820525077
+│   β₂ = 1.362506801429688
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.5702297864253478e-6 from total weight 2.0046033526873535: operator might not be hermitian?
+│   α = 0.6551477286897311 + 1.5702297864253478e-6im
+│   β₁ = 1.362506801429688
+│   β₂ = 1.3163552982585813
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.5972965097966335e-6 from total weight 1.9982889168855587: operator might not be hermitian?
+│   α = 0.6762387934135368 + 1.5972965097966335e-6im
+│   β₁ = 1.3163552982585813
+│   β₂ = 1.3427838315880456
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.5781264739826717e-6 from total weight 2.0091768575110542: operator might not be hermitian?
+│   α = 0.797943851228216 + 1.5781264739826717e-6im
+│   β₁ = 1.3427838315880456
+│   β₂ = 1.2637281498282438
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.500389786990644e-6 from total weight 1.9365460830408492: operator might not be hermitian?
+│   α = 0.8370715044470002 + 1.500389786990644e-6im
+│   β₁ = 1.2637281498282438
+│   β₂ = 1.2052025520687897
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.6848371347591429e-6 from total weight 1.9701367571309558: operator might not be hermitian?
+│   α = 0.9381977580271958 + 1.6848371347591429e-6im
+│   β₁ = 1.2052025520687897
+│   β₂ = 1.2444720234361477
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.301224902904019e-6 from total weight 2.032783165297502: operator might not be hermitian?
+│   α = 1.0018865864506536 + 1.301224902904019e-6im
+│   β₁ = 1.3560745448480025
+│   β₂ = 1.135558230044051
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.4331223396387566e-6 from total weight 1.891875931072235: operator might not be hermitian?
+│   α = 0.9245962509023617 + 1.4331223396387566e-6im
+│   β₁ = 1.135558230044051
+│   β₂ = 1.1978413156862229
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.2020958610227395e-6 from total weight 1.8535112515440146: operator might not be hermitian?
+│   α = 0.7599300178221852 + 1.2020958610227395e-6im
+│   β₁ = 1.1978413156862229
+│   β₂ = 1.1929738094554658
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.2029225218155096e-6 from total weight 1.8361265730664569: operator might not be hermitian?
+│   α = 0.8126705814608668 + 1.2029225218155096e-6im
+│   β₁ = 1.1929738094554658
+│   β₂ = 1.1347866796454273
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.72781939736244e-6 from total weight 1.8379544196724218: operator might not be hermitian?
+│   α = 0.7746976579831134 + 1.72781939736244e-6im
+│   β₁ = 1.1347866796454273
+│   β₂ = 1.220728954029185
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.3164896480177823e-6 from total weight 1.8641899207308146: operator might not be hermitian?
+│   α = 0.753715042628617 + 1.3164896480177823e-6im
+│   β₁ = 1.220728954029185
+│   β₂ = 1.1903522654503504
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.1951999317263984e-6 from total weight 1.8262076303378614: operator might not be hermitian?
+│   α = 0.7790016654288074 + 1.1951999317263984e-6im
+│   β₁ = 1.1903522654503504
+│   β₂ = 1.1450992090204066
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.329043586510703e-6 from total weight 1.8656619514160093: operator might not be hermitian?
+│   α = 0.8930858144233594 + 1.329043586510703e-6im
+│   β₁ = 1.1450992090204066
+│   β₂ = 1.1712557562446508
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.137416697809951e-6 from total weight 1.9324138401886977: operator might not be hermitian?
+│   α = 0.8059601405207465 + 1.137416697809951e-6im
+│   β₁ = 1.1712557562446508
+│   β₂ = 1.3087442282994357
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.2041512158535161e-6 from total weight 1.8635788832563664: operator might not be hermitian?
+│   α = 0.624787036120966 + 1.2041512158535161e-6im
+│   β₁ = 1.3087442282994357
+│   β₂ = 1.170365737069267
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.6380061677104263e-6 from total weight 1.79911763127121: operator might not be hermitian?
+│   α = 0.8545636636861133 + 1.6380061677104263e-6im
+│   β₁ = 1.170365737069267
+│   β₂ = 1.0662031876476101
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.2228514773388825e-6 from total weight 1.8124365450754356: operator might not be hermitian?
+│   α = 0.9939764795428676 + 1.2228514773388825e-6im
+│   β₁ = 1.0662031876476101
+│   β₂ = 1.0771015507783512
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.3577038761106164e-6 from total weight 1.7818490802101545: operator might not be hermitian?
+│   α = 0.8828101046503334 + 1.3577038761106164e-6im
+│   β₁ = 1.0771015507783512
+│   β₂ = 1.1115235998763446
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.573225774296333e-6 from total weight 1.7952965109074976: operator might not be hermitian?
+│   α = 0.8037556413672008 + 1.573225774296333e-6im
+│   β₁ = 1.1115235998763446
+│   β₂ = 1.1582666868914475
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.9993628590166297e-6 from total weight 1.7966684663477028: operator might not be hermitian?
+│   α = 0.7833344237000951 + 1.9993628590166297e-6im
+│   β₁ = 1.1582666868914475
+│   β₂ = 1.1281945934315403
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.4402545049987947e-6 from total weight 1.7911396609775052: operator might not be hermitian?
+│   α = 0.8380019083518554 + 1.4402545049987947e-6im
+│   β₁ = 1.1281945934315403
+│   β₂ = 1.110455332768963
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.2109032088564176e-6 from total weight 1.7813199833273619: operator might not be hermitian?
+│   α = 0.7777249070445168 + 1.2109032088564176e-6im
+│   β₁ = 1.110455332768963
+│   β₂ = 1.1554799028488103
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.36909457887531e-6 from total weight 1.7554473671236752: operator might not be hermitian?
+│   α = 0.7782114591736479 + 1.36909457887531e-6im
+│   β₁ = 1.1554799028488103
+│   β₂ = 1.0681051341805705
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.6953973636414654e-6 from total weight 1.8478627263512848: operator might not be hermitian?
+│   α = 1.0786054983876303 + 1.6953973636414654e-6im
+│   β₁ = 1.0681051341805705
+│   β₂ = 1.0537353826367444
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.757283796120085e-6 from total weight 1.8111473736314618: operator might not be hermitian?
+│   α = 0.9110031771776171 + 1.757283796120085e-6im
+│   β₁ = 1.0537353826367444
+│   β₂ = 1.1575706300527562
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.6318890057095276e-6 from total weight 1.8203681556361564: operator might not be hermitian?
+│   α = 0.9124447934701678 + 1.6318890057095276e-6im
+│   β₁ = 1.1575706300527562
+│   β₂ = 1.0682766296048822
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.8390788291272608e-6 from total weight 1.742392537575849: operator might not be hermitian?
+│   α = 0.8617339094018543 + 1.8390788291272608e-6im
+│   β₁ = 1.0682766296048822
+│   β₂ = 1.0733738710363945
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.6564830520246487e-6 from total weight 1.7426059463027106: operator might not be hermitian?
+│   α = 0.7671804483853782 + 1.6564830520246487e-6im
+│   β₁ = 1.0733738710363945
+│   β₂ = 1.138410372703261
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.852045748698336e-6 from total weight 1.8175974775984134: operator might not be hermitian?
+│   α = 0.7528916040098729 + 1.852045748698336e-6im
+│   β₁ = 1.138410372703261
+│   β₂ = 1.2003485520888286
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.6617520472352737e-6 from total weight 1.8926943344910268: operator might not be hermitian?
+│   α = 0.8539520758169454 + 1.6617520472352737e-6im
+│   β₁ = 1.2003485520888286
+│   β₂ = 1.1883690712560016
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.3522051637501753e-6 from total weight 1.8705455442967294: operator might not be hermitian?
+│   α = 0.9282228149268801 + 1.3522051637501753e-6im
+│   β₁ = 1.1883690712560016
+│   β₂ = 1.1068522889789256
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.0122348380516705e-6 from total weight 1.7670985003089827: operator might not be hermitian?
+│   α = 0.930628231856587 + 1.0122348380516705e-6im
+│   β₁ = 1.1068522889789256
+│   β₂ = 1.0156014052012858
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.3856631444933258e-6 from total weight 1.825912721996031: operator might not be hermitian?
+│   α = 1.0815656907671525 + 1.3856631444933258e-6im
+│   β₁ = 1.0156014052012858
+│   β₂ = 1.0642963453162757
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+[ Info: VUMPS   3:	obj = -2.945462988948e-01	err = 3.4609424308e-01	time = 0.03 sec
+┌ Warning: ignoring imaginary component -1.392483040988518e-6 from total weight 1.8955122145817562: operator might not be hermitian?
+│   α = 1.101941371687926 - 1.392483040988518e-6im
+│   β₁ = 1.0798020846906913
+│   β₂ = 1.1012353185794865
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.0753622344539249e-6 from total weight 1.8648990216541668: operator might not be hermitian?
+│   α = 0.8383791538157135 - 1.0753622344539249e-6im
+│   β₁ = 1.1012353185794865
+│   β₂ = 1.2498998073949357
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.2549910538232206e-6 from total weight 2.1121408373175985: operator might not be hermitian?
+│   α = 1.3409655729255554 - 1.2549910538232206e-6im
+│   β₁ = 1.2136080492246442
+│   β₂ = 1.0909196816212923
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.4022760645906324e-6 from total weight 1.7304296250907174: operator might not be hermitian?
+│   α = 0.8127621709548318 - 1.4022760645906324e-6im
+│   β₁ = 1.0909196816212923
+│   β₂ = 1.0694384456833976
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.4313764805165552e-6 from total weight 1.8794569157231034: operator might not be hermitian?
+│   α = 1.0784242798463932 - 1.4313764805165552e-6im
+│   β₁ = 1.0694384456833976
+│   β₂ = 1.1070956515086754
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.1180232882476715e-6 from total weight 1.8844800254598146: operator might not be hermitian?
+│   α = 1.216318455706141 - 1.1180232882476715e-6im
+│   β₁ = 1.0649907248461274
+│   β₂ = 0.9683125201380608
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+[ Info: VUMPS   4:	obj = -2.319707042439e-01	err = 3.6024027466e-01	time = 0.02 sec
+┌ Warning: ignoring imaginary component -1.0204260968149637e-6 from total weight 1.7960622649204319: operator might not be hermitian?
+│   α = 0.8465484658404078 - 1.0204260968149637e-6im
+│   β₁ = 1.0893153937710733
+│   β₂ = 1.1500379677848442
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -9.980297221391307e-7 from total weight 1.724221091947597: operator might not be hermitian?
+│   α = 0.6903523472065521 - 9.980297221391307e-7im
+│   β₁ = 1.1477237120574055
+│   β₂ = 1.0858555573387934
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+[ Info: VUMPS   5:	obj = -3.341745290133e-01	err = 3.3118494023e-01	time = 0.08 sec
+[ Info: VUMPS   6:	obj = -3.494924855347e-01	err = 2.8628386188e-01	time = 0.03 sec
+┌ Warning: ignoring imaginary component -1.2137926916363064e-6 from total weight 1.8486757461171281: operator might not be hermitian?
+│   α = 0.771117205144365 - 1.2137926916363064e-6im
+│   β₁ = 1.1911622391957852
+│   β₂ = 1.1849526531151673
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.8052469317100112e-6 from total weight 1.8549819756331998: operator might not be hermitian?
+│   α = 0.8368904023840432 - 1.8052469317100112e-6im
+│   β₁ = 1.1849526531151673
+│   β₂ = 1.1560535429613934
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.0673666736130414e-6 from total weight 1.879996592383449: operator might not be hermitian?
+│   α = 0.882809938116432 - 2.0673666736130414e-6im
+│   β₁ = 1.1560535429613934
+│   β₂ = 1.1910390448420975
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.194385859464673e-6 from total weight 1.7942145377417382: operator might not be hermitian?
+│   α = 0.8003805303951113 - 2.194385859464673e-6im
+│   β₁ = 1.1910390448420975
+│   β₂ = 1.0770435495675412
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.3709987418962797e-6 from total weight 1.8718062529591089: operator might not be hermitian?
+│   α = 0.956423888603269 - 2.3709987418962797e-6im
+│   β₁ = 1.0770435495675412
+│   β₂ = 1.19536152951948
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.3673814470905746e-6 from total weight 1.8555379367315137: operator might not be hermitian?
+│   α = 0.8933821221410543 - 2.3673814470905746e-6im
+│   β₁ = 1.19536152951948
+│   β₂ = 1.102724005464574
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.334346772072532e-6 from total weight 1.888065121940592: operator might not be hermitian?
+│   α = 0.9721742902891686 - 2.334346772072532e-6im
+│   β₁ = 1.102724005464574
+│   β₂ = 1.1847644583443624
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.177633131844603e-6 from total weight 1.9390501291320332: operator might not be hermitian?
+│   α = 1.014147105401859 - 2.177633131844603e-6im
+│   β₁ = 1.1847644583443624
+│   β₂ = 1.152282183378374
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.9774983512077515e-6 from total weight 1.8305152178308537: operator might not be hermitian?
+│   α = 0.7177922188043688 - 1.9774983512077515e-6im
+│   β₁ = 1.152282183378374
+│   β₂ = 1.2279275480251655
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.9651366731853956e-6 from total weight 1.8439158098506916: operator might not be hermitian?
+│   α = 0.6857331180630781 - 1.9651366731853956e-6im
+│   β₁ = 1.2279275480251655
+│   β₂ = 1.1924720296115392
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.0190197140557142e-6 from total weight 1.8592053567515292: operator might not be hermitian?
+│   α = 0.7838374650404871 - 2.0190197140557142e-6im
+│   β₁ = 1.1924720296115392
+│   β₂ = 1.1917440352536046
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.105103661853916e-6 from total weight 1.8407455207629144: operator might not be hermitian?
+│   α = 0.840354593043139 - 2.105103661853916e-6im
+│   β₁ = 1.1917440352536046
+│   β₂ = 1.1233407250665566
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.06494826259819e-6 from total weight 1.841267305393983: operator might not be hermitian?
+│   α = 0.8882808636031334 - 2.06494826259819e-6im
+│   β₁ = 1.1233407250665566
+│   β₂ = 1.15729339956295
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.2230019045606925e-6 from total weight 1.8228821941757196: operator might not be hermitian?
+│   α = 0.7940779018084841 - 2.2230019045606925e-6im
+│   β₁ = 1.15729339956295
+│   β₂ = 1.1631903399811268
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.145042114523512e-6 from total weight 1.8171564444253046: operator might not be hermitian?
+│   α = 0.8544521983500817 - 2.145042114523512e-6im
+│   β₁ = 1.1631903399811268
+│   β₂ = 1.104063955222304
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.6467638147572156e-6 from total weight 1.8097942535063836: operator might not be hermitian?
+│   α = 0.8187040301882722 - 1.6467638147572156e-6im
+│   β₁ = 1.104063955222304
+│   β₂ = 1.177336712140745
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.5244830939625462e-6 from total weight 1.8186387999784603: operator might not be hermitian?
+│   α = 0.6481570111134087 - 1.5244830939625462e-6im
+│   β₁ = 1.177336712140745
+│   β₂ = 1.2252419516058546
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.9022438640223151e-6 from total weight 1.845672069956571: operator might not be hermitian?
+│   α = 0.8341584370695838 - 1.9022438640223151e-6im
+│   β₁ = 1.2252419516058546
+│   β₂ = 1.0997578150233172
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.097853804325367e-6 from total weight 1.859100484948138: operator might not be hermitian?
+│   α = 0.9829316071898353 - 2.097853804325367e-6im
+│   β₁ = 1.0997578150233172
+│   β₂ = 1.1316504835912666
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.218477325925325e-6 from total weight 1.824760097059155: operator might not be hermitian?
+│   α = 0.7981966528552535 - 2.218477325925325e-6im
+│   β₁ = 1.1316504835912666
+│   β₂ = 1.1882755144211035
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.107775001676873e-6 from total weight 1.7948760632162533: operator might not be hermitian?
+│   α = 0.715662975666142 - 2.107775001676873e-6im
+│   β₁ = 1.1882755144211035
+│   β₂ = 1.1390381422016462
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.8943371334406364e-6 from total weight 1.7786107483977287: operator might not be hermitian?
+│   α = 0.7939679645380324 - 1.8943371334406364e-6im
+│   β₁ = 1.1390381422016462
+│   β₂ = 1.111603875582258
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.940765476975831e-6 from total weight 1.8050001473989414: operator might not be hermitian?
+│   α = 0.8874112102188971 - 1.940765476975831e-6im
+│   β₁ = 1.111603875582258
+│   β₂ = 1.111244212527008
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.199444159377284e-6 from total weight 1.759110189883705: operator might not be hermitian?
+│   α = 0.8304008173000483 - 2.199444159377284e-6im
+│   β₁ = 1.111244212527008
+│   β₂ = 1.081683614972737
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.404082553034842e-6 from total weight 1.7701574894902945: operator might not be hermitian?
+│   α = 0.8176565476152748 - 2.404082553034842e-6im
+│   β₁ = 1.081683614972737
+│   β₂ = 1.1379173365557727
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.1608698665687154e-6 from total weight 1.777911385657947: operator might not be hermitian?
+│   α = 0.702221919442864 - 2.1608698665687154e-6im
+│   β₁ = 1.1379173365557727
+│   β₂ = 1.1717497199774738
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.0444276374407405e-6 from total weight 1.8530092878500277: operator might not be hermitian?
+│   α = 0.9004041535488609 - 2.0444276374407405e-6im
+│   β₁ = 1.1717497199774738
+│   β₂ = 1.1179974842811402
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.2029817202846858e-6 from total weight 1.8209273687022072: operator might not be hermitian?
+│   α = 0.8967101105620928 - 2.2029817202846858e-6im
+│   β₁ = 0.8788405586960297
+│   β₂ = 1.3188353695933623
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.216417890362702e-6 from total weight 2.1106092940068626: operator might not be hermitian?
+│   α = 1.2231888468396814 - 2.216417890362702e-6im
+│   β₁ = 1.3188353695933623
+│   β₂ = 1.104153025997658
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.3737135441750934e-6 from total weight 1.7108761064821731: operator might not be hermitian?
+│   α = 0.7689084483760471 - 2.3737135441750934e-6im
+│   β₁ = 1.104153025997658
+│   β₂ = 1.056751127239579
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.2950472934567256e-6 from total weight 1.805845919611404: operator might not be hermitian?
+│   α = 0.9011490916083735 - 2.2950472934567256e-6im
+│   β₁ = 1.056751127239579
+│   β₂ = 1.1542473110833626
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.9165190242613137e-6 from total weight 1.7806954185448687: operator might not be hermitian?
+│   α = 0.6766133971213509 - 1.9165190242613137e-6im
+│   β₁ = 1.1542473110833626
+│   β₂ = 1.175067499897663
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.7371752475472957e-6 from total weight 1.7997772548877546: operator might not be hermitian?
+│   α = 0.682777908206393 - 1.7371752475472957e-6im
+│   β₁ = 1.175067499897663
+│   β₂ = 1.1799274833471092
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.9827521738555176e-6 from total weight 1.826349907461843: operator might not be hermitian?
+│   α = 0.8580873616013737 - 1.9827521738555176e-6im
+│   β₁ = 1.1799274833471092
+│   β₂ = 1.0986406138424443
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.91092151146776e-6 from total weight 1.7435181739830286: operator might not be hermitian?
+│   α = 0.7394903063302251 - 1.91092151146776e-6im
+│   β₁ = 1.0986406138424443
+│   β₂ = 1.134018743877274
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.9595898916001386e-6 from total weight 1.8251022615462704: operator might not be hermitian?
+│   α = 0.9164809096157032 - 1.9595898916001386e-6im
+│   β₁ = 1.134018743877274
+│   β₂ = 1.0977533857576816
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.05986185874453e-6 from total weight 1.8186394706547202: operator might not be hermitian?
+│   α = 0.9455626165039587 - 2.05986185874453e-6im
+│   β₁ = 1.0977533857576816
+│   β₂ = 1.0992262581228545
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.9751055681822144e-6 from total weight 1.8210053523773804: operator might not be hermitian?
+│   α = 0.9358713510025474 - 1.9751055681822144e-6im
+│   β₁ = 1.0992262581228545
+│   β₂ = 1.1099130331737983
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.982306293563628e-6 from total weight 1.7917057681901003: operator might not be hermitian?
+│   α = 0.9121882545888488 - 1.982306293563628e-6im
+│   β₁ = 1.1099130331737983
+│   β₂ = 1.0706144061905936
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.196445485691187e-6 from total weight 1.7744014664512398: operator might not be hermitian?
+│   α = 0.874804800955041 - 2.196445485691187e-6im
+│   β₁ = 0.5978282520080367
+│   β₂ = 1.4233125115260221
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.180456329423097e-6 from total weight 2.1061953707531647: operator might not be hermitian?
+│   α = 1.1540327503490424 - 2.180456329423097e-6im
+│   β₁ = 1.4233125115260221
+│   β₂ = 1.0384839167905384
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.151285085509602e-6 from total weight 1.804623532007284: operator might not be hermitian?
+│   α = 0.8516682302055673 - 2.151285085509602e-6im
+│   β₁ = 1.0384839167905384
+│   β₂ = 1.2053540859414364
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.9497181986960488e-6 from total weight 1.8272748413277866: operator might not be hermitian?
+│   α = 0.7717001680448697 - 1.9497181986960488e-6im
+│   β₁ = 1.2053540859414364
+│   β₂ = 1.1360166037032604
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.9811992536446915e-6 from total weight 1.8330648060187416: operator might not be hermitian?
+│   α = 0.9324764918655245 - 1.9811992536446915e-6im
+│   β₁ = 1.1360166037032604
+│   β₂ = 1.0954818352164835
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.444192831056429e-6 from total weight 1.680031417900311: operator might not be hermitian?
+│   α = 0.8412545867799889 - 1.444192831056429e-6im
+│   β₁ = 1.0396167334930557
+│   β₂ = 1.0168546271679657
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.012070060116583e-6 from total weight 1.6996488398921563: operator might not be hermitian?
+│   α = 0.9563600153628701 - 2.012070060116583e-6im
+│   β₁ = 1.0168546271679657
+│   β₂ = 0.969633109565124
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.2284985421137937e-6 from total weight 1.625611124450328: operator might not be hermitian?
+│   α = 0.9076143355875635 - 2.2284985421137937e-6im
+│   β₁ = 0.969633109565124
+│   β₂ = 0.9373683260078226
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.3787217767051727e-6 from total weight 1.6320977987504197: operator might not be hermitian?
+│   α = 0.9151559473878687 - 2.3787217767051727e-6im
+│   β₁ = 0.9373683260078226
+│   β₂ = 0.9734338385520672
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.4459831018432132e-6 from total weight 1.7171504373726327: operator might not be hermitian?
+│   α = 1.0490080777046167 - 2.4459831018432132e-6im
+│   β₁ = 0.9734338385520672
+│   β₂ = 0.949006975440799
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.502042695789325e-6 from total weight 1.7461038387840222: operator might not be hermitian?
+│   α = 1.063200920663453 - 2.502042695789325e-6im
+│   β₁ = 0.949006975440799
+│   β₂ = 1.0088945329791073
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.2991596320565827e-6 from total weight 1.7649566358660225: operator might not be hermitian?
+│   α = 1.0323010887631134 - 2.2991596320565827e-6im
+│   β₁ = 1.0088945329791073
+│   β₂ = 1.0156565413295877
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.3680517285112196e-6 from total weight 1.6911743091363975: operator might not be hermitian?
+│   α = 0.822688208588965 - 2.3680517285112196e-6im
+│   β₁ = 1.0156565413295877
+│   β₂ = 1.0731712097239952
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.3240639867236346e-6 from total weight 1.7008433430515881: operator might not be hermitian?
+│   α = 0.9047109560948917 - 2.3240639867236346e-6im
+│   β₁ = 1.0731712097239952
+│   β₂ = 0.96055698328569
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.4438641293214602e-6 from total weight 1.6863390242825544: operator might not be hermitian?
+│   α = 1.0018650093118424 - 2.4438641293214602e-6im
+│   β₁ = 0.96055698328569
+│   β₂ = 0.9577766387785523
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.2852982025176743e-6 from total weight 1.6664847188204572: operator might not be hermitian?
+│   α = 0.9481338905918142 - 2.2852982025176743e-6im
+│   β₁ = 0.9577766387785523
+│   β₂ = 0.980243517590483
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.6503217592163675e-6 from total weight 1.6570209299072616: operator might not be hermitian?
+│   α = 0.9553022495142013 - 2.6503217592163675e-6im
+│   β₁ = 0.980243517590483
+│   β₂ = 0.9339371608618243
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.4977568402820283e-6 from total weight 1.6146874716863424: operator might not be hermitian?
+│   α = 0.9937470670638898 - 2.4977568402820283e-6im
+│   β₁ = 0.9339371608618243
+│   β₂ = 0.8645483083540594
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.7911041787048443e-6 from total weight 1.6526314248172924: operator might not be hermitian?
+│   α = 0.9942222833655865 - 1.7911041787048443e-6im
+│   β₁ = 0.8645483083540594
+│   β₂ = 0.997631645484384
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.0910619358400764e-6 from total weight 1.628256128074027: operator might not be hermitian?
+│   α = 0.7468594858110634 - 1.0910619358400764e-6im
+│   β₁ = 0.997631645484384
+│   β₂ = 1.047926537020409
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.4086345025538481e-6 from total weight 1.7208828389475097: operator might not be hermitian?
+│   α = 1.0230379305064004 - 1.4086345025538481e-6im
+│   β₁ = 1.047926537020409
+│   β₂ = 0.9037041059637005
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.5801647672217256e-6 from total weight 1.6935875767437443: operator might not be hermitian?
+│   α = 1.0573393121341177 - 1.5801647672217256e-6im
+│   β₁ = 0.9037041059637005
+│   β₂ = 0.966225309117056
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.8503500605684953e-6 from total weight 1.687885653739837: operator might not be hermitian?
+│   α = 0.9077058420558016 - 1.8503500605684953e-6im
+│   β₁ = 0.966225309117056
+│   β₂ = 1.0447184962547331
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.7245869534127795e-6 from total weight 1.630010231135931: operator might not be hermitian?
+│   α = 0.8428816315538215 - 1.7245869534127795e-6im
+│   β₁ = 1.0447184962547331
+│   β₂ = 0.9246876079937777
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.669866318011401e-6 from total weight 1.5672706436085126: operator might not be hermitian?
+│   α = 0.7835317567308676 - 1.669866318011401e-6im
+│   β₁ = 0.9246876079937777
+│   β₂ = 0.9936639694238888
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.7442226515947817e-6 from total weight 1.6505309294564066: operator might not be hermitian?
+│   α = 0.8815928759787162 - 1.7442226515947817e-6im
+│   β₁ = 0.9936639694238888
+│   β₂ = 0.9796316991510248
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.5551504819709405e-6 from total weight 1.6065777130754422: operator might not be hermitian?
+│   α = 0.7930473224308218 - 1.5551504819709405e-6im
+│   β₁ = 0.9796316991510248
+│   β₂ = 0.9962377359606892
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.5768281077382929e-6 from total weight 1.6432036667533771: operator might not be hermitian?
+│   α = 0.8513104308677694 - 1.5768281077382929e-6im
+│   β₁ = 0.9962377359606892
+│   β₂ = 0.9914127365395857
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.7341376412037535e-6 from total weight 1.6510721319879114: operator might not be hermitian?
+│   α = 0.9480572889512263 - 1.7341376412037535e-6im
+│   β₁ = 0.9914127365395857
+│   β₂ = 0.9188728680931008
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.0380127565208794e-6 from total weight 1.6657878517427898: operator might not be hermitian?
+│   α = 1.0551087967110504 - 2.0380127565208794e-6im
+│   β₁ = 0.9188728680931008
+│   β₂ = 0.9040283438006927
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.9689745632016017e-6 from total weight 1.6316000751641972: operator might not be hermitian?
+│   α = 1.0068062496864232 - 1.9689745632016017e-6im
+│   β₁ = 0.9040283438006927
+│   β₂ = 0.9116977209959855
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.7641602776535814e-6 from total weight 1.643619185973048: operator might not be hermitian?
+│   α = 0.9832497995595976 - 1.7641602776535814e-6im
+│   β₁ = 0.9116977209959855
+│   β₂ = 0.9505320224444467
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.8717770270057499e-6 from total weight 1.6186044448934445: operator might not be hermitian?
+│   α = 0.933889625841253 - 1.8717770270057499e-6im
+│   β₁ = 0.7782860350350426
+│   β₂ = 1.0686446385215385
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.9087480197105267e-6 from total weight 1.872223188302107: operator might not be hermitian?
+│   α = 1.1855968939468708 - 1.9087480197105267e-6im
+│   β₁ = 1.0686446385215385
+│   β₂ = 0.9785593024621279
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.9402894978638036e-6 from total weight 1.565662888890479: operator might not be hermitian?
+│   α = 0.8073816698233107 - 1.9402894978638036e-6im
+│   β₁ = 0.9785593024621279
+│   β₂ = 0.9175275540512514
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.911761391519551e-6 from total weight 1.69861571249875: operator might not be hermitian?
+│   α = 0.9952744384587691 - 1.911761391519551e-6im
+│   β₁ = 0.9175275540512514
+│   β₂ = 1.0260932308768491
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.8291039981729873e-6 from total weight 1.6498451539412835: operator might not be hermitian?
+│   α = 0.858745751697278 - 1.8291039981729873e-6im
+│   β₁ = 1.0260932308768491
+│   β₂ = 0.9652344002732076
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.1171286886112473e-6 from total weight 1.6049927885630448: operator might not be hermitian?
+│   α = 0.9039923380658194 - 2.1171286886112473e-6im
+│   β₁ = 0.9652344002732076
+│   β₂ = 0.9094626196729643
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.7631975034633485e-6 from total weight 1.6635044587627164: operator might not be hermitian?
+│   α = 1.0268033716558147 - 1.7631975034633485e-6im
+│   β₁ = 0.9094626196729643
+│   β₂ = 0.9411693066043798
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.7538638426399522e-6 from total weight 1.598357955260205: operator might not be hermitian?
+│   α = 0.8395676881149241 - 1.7538638426399522e-6im
+│   β₁ = 0.9411693066043798
+│   β₂ = 0.9818729991804948
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.466572661972844e-6 from total weight 1.6275090983582583: operator might not be hermitian?
+│   α = 0.8477297716903176 - 1.466572661972844e-6im
+│   β₁ = 0.9818729991804948
+│   β₂ = 0.9828863173871848
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.2983254894863294e-6 from total weight 1.6025938022231123: operator might not be hermitian?
+│   α = 0.8238345469560299 - 1.2983254894863294e-6im
+│   β₁ = 0.9828863173871848
+│   β₂ = 0.961008855972232
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.753803488737521e-6 from total weight 1.6853450238186074: operator might not be hermitian?
+│   α = 1.0058728121272003 - 1.753803488737521e-6im
+│   β₁ = 0.961008855972232
+│   β₂ = 0.9513515196147673
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.8713013819338098e-6 from total weight 1.6457558464254889: operator might not be hermitian?
+│   α = 0.953253090989849 - 1.8713013819338098e-6im
+│   β₁ = 0.9513515196147673
+│   β₂ = 0.945912858927897
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.1940684603594107e-6 from total weight 1.6685947310681075: operator might not be hermitian?
+│   α = 1.0035877974418752 - 2.1940684603594107e-6im
+│   β₁ = 0.5519727146275405
+│   β₂ = 1.2134026667499564
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -2.0196296084545873e-6 from total weight 1.9239962959657293: operator might not be hermitian?
+│   α = 1.2417813732350762 - 2.0196296084545873e-6im
+│   β₁ = 1.2134026667499564
+│   β₂ = 0.8290927187572397
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.8201529821404439e-6 from total weight 1.6421902342159629: operator might not be hermitian?
+│   α = 1.1015110960833447 - 1.8201529821404439e-6im
+│   β₁ = 0.8290927187572397
+│   β₂ = 0.8922260555823076
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.8864060040545833e-6 from total weight 1.6289668855724284: operator might not be hermitian?
+│   α = 1.054375019166633 - 1.8864060040545833e-6im
+│   β₁ = 0.8922260555823076
+│   β₂ = 0.8635734473600828
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+[ Info: VUMPS   7:	obj = -2.477828349789e-01	err = 3.6861869835e-01	time = 0.04 sec
+┌ Warning: ignoring imaginary component 9.797819969445398e-7 from total weight 1.7826507126092328: operator might not be hermitian?
+│   α = 0.37266497932262266 + 9.797819969445398e-7im
+│   β₁ = 1.2529923849189937
+│   β₂ = 1.2120125658122227
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.0083546393710799e-6 from total weight 1.5121046107716045: operator might not be hermitian?
+│   α = 0.42712182311279506 + 1.0083546393710799e-6im
+│   β₁ = 1.0452302250562036
+│   β₂ = 1.0057440423713626
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 8.626484624303654e-7 from total weight 1.5025688882814423: operator might not be hermitian?
+│   α = 0.3906593447423297 + 8.626484624303654e-7im
+│   β₁ = 0.8502359245275253
+│   β₂ = 1.175668921524637
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+[ Info: VUMPS   8:	obj = +3.021742828810e-02	err = 3.8513237752e-01	time = 0.02 sec
+[ Info: VUMPS   9:	obj = -8.745011232470e-02	err = 3.9063780450e-01	time = 0.02 sec
+[ Info: VUMPS  10:	obj = -1.499513490072e-01	err = 3.7840293472e-01	time = 0.06 sec
+[ Info: VUMPS  11:	obj = -2.958681759723e-01	err = 3.3123568953e-01	time = 0.03 sec
+[ Info: VUMPS  12:	obj = -7.976662855182e-03	err = 3.9656031279e-01	time = 0.03 sec
+[ Info: VUMPS  13:	obj = -5.967400377513e-02	err = 3.9708070211e-01	time = 0.03 sec
+[ Info: VUMPS  14:	obj = -1.005858342981e-01	err = 3.6761593768e-01	time = 0.02 sec
+┌ Warning: ignoring imaginary component 1.1228371103039203e-6 from total weight 1.925618999181602: operator might not be hermitian?
+│   α = 0.3165350873163584 + 1.1228371103039203e-6im
+│   β₁ = 1.326599888107445
+│   β₂ = 1.359392071986163
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.0111171559745724e-6 from total weight 1.7301725734241629: operator might not be hermitian?
+│   α = 0.3705094109208439 + 1.0111171559745724e-6im
+│   β₁ = 1.2507643011136502
+│   β₂ = 1.136577570299071
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.0452915227276982e-6 from total weight 1.7398003898725583: operator might not be hermitian?
+│   α = 0.32520104482655454 + 1.0452915227276982e-6im
+│   β₁ = 1.136577570299071
+│   β₂ = 1.276456463705829
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.043670650770212e-6 from total weight 1.741533774893118: operator might not be hermitian?
+│   α = 0.230415239863528 + 1.043670650770212e-6im
+│   β₁ = 1.225976649377648
+│   β₂ = 1.2152489298541975
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 9.49492928604273e-7 from total weight 1.7203306219892969: operator might not be hermitian?
+│   α = 0.28756839381882887 + 9.49492928604273e-7im
+│   β₁ = 1.2152489298541975
+│   β₂ = 1.1832209879468272
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.0232852264632775e-6 from total weight 1.686947657369024: operator might not be hermitian?
+│   α = 0.22818200575305508 + 1.0232852264632775e-6im
+│   β₁ = 1.16015510353531
+│   β₂ = 1.2032312773084308
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 9.778034893506704e-7 from total weight 1.7441005741153381: operator might not be hermitian?
+│   α = 0.3359468737393356 + 9.778034893506704e-7im
+│   β₁ = 1.2032312773084308
+│   β₂ = 1.2170706651464347
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 9.625125309067895e-7 from total weight 1.6930493324860827: operator might not be hermitian?
+│   α = 0.15689474930621 + 9.625125309067895e-7im
+│   β₁ = 1.2170706651464347
+│   β₂ = 1.1664214829600834
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.0255041846228552e-6 from total weight 1.6163568378358877: operator might not be hermitian?
+│   α = 0.15946995305765732 + 1.0255041846228552e-6im
+│   β₁ = 1.1664214829600834
+│   β₂ = 1.1075376677019915
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 9.450003205895008e-7 from total weight 1.63310722976173: operator might not be hermitian?
+│   α = 0.4164024184737056 + 9.450003205895008e-7im
+│   β₁ = 1.1188595855688177
+│   β₂ = 1.1143614662977006
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.080879533445732e-6 from total weight 1.614688674276658: operator might not be hermitian?
+│   α = 0.30429877958921225 + 1.080879533445732e-6im
+│   β₁ = 1.1143614662977006
+│   β₂ = 1.1281933743855694
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.0988263242361906e-6 from total weight 1.6115083028404351: operator might not be hermitian?
+│   α = 0.2897351912699093 + 1.0988263242361906e-6im
+│   β₁ = 1.1281933743855694
+│   β₂ = 1.113639187104487
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.003436960373555e-6 from total weight 1.6172105156629197: operator might not be hermitian?
+│   α = 0.14272259326333872 + 1.003436960373555e-6im
+│   β₁ = 1.113639187104487
+│   β₂ = 1.1639621446967956
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.0252943553334948e-6 from total weight 1.6211799504508382: operator might not be hermitian?
+│   α = 0.1247595589372499 + 1.0252943553334948e-6im
+│   β₁ = 1.1829896553891046
+│   β₂ = 1.10145129689827
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 9.687233263298844e-7 from total weight 1.5808042072341244: operator might not be hermitian?
+│   α = 0.1804895992486852 + 9.687233263298844e-7im
+│   β₁ = 1.10145129689827
+│   β₂ = 1.1194509755823783
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 9.67778768440515e-7 from total weight 1.564685677695013: operator might not be hermitian?
+│   α = 0.27799810530818225 + 9.67778768440515e-7im
+│   β₁ = 0.9536269829322506
+│   β₂ = 1.2089474351069032
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+[ Info: VUMPS  15:	obj = -1.268018919710e-01	err = 3.9770372558e-01	time = 0.03 sec
+[ Info: VUMPS  16:	obj = -2.089366409470e-01	err = 3.5604649696e-01	time = 0.06 sec
+┌ Warning: ignoring imaginary component -1.4642964467764807e-6 from total weight 2.394006887776447: operator might not be hermitian?
+│   α = 0.8242382100564384 - 1.4642964467764807e-6im
+│   β₁ = 1.655282987088156
+│   β₂ = 1.520506029076635
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.3983965608810323e-6 from total weight 2.298232529409139: operator might not be hermitian?
+│   α = 0.9982576460523188 - 1.3983965608810323e-6im
+│   β₁ = 1.520506029076635
+│   β₂ = 1.4047832028010792
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.2414856767097027e-6 from total weight 2.2348174847568463: operator might not be hermitian?
+│   α = 0.980492672115643 - 1.2414856767097027e-6im
+│   β₁ = 1.4047832028010792
+│   β₂ = 1.4351402242390265
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.4617492379419977e-6 from total weight 2.20291267013881: operator might not be hermitian?
+│   α = 0.9485389110548547 - 1.4617492379419977e-6im
+│   β₁ = 1.4765975180930613
+│   β₂ = 1.3314495619557836
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.3979009563739458e-6 from total weight 2.1101472430666828: operator might not be hermitian?
+│   α = 1.0471134224194303 - 1.3979009563739458e-6im
+│   β₁ = 1.3314495619557836
+│   β₂ = 1.2583786918002022
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.2539214374338373e-6 from total weight 2.036435547475786: operator might not be hermitian?
+│   α = 0.9129612687076675 - 1.2539214374338373e-6im
+│   β₁ = 1.2583786918002022
+│   β₂ = 1.3153153724047817
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+[ Info: VUMPS  17:	obj = -2.048644413129e-01	err = 3.6617686541e-01	time = 0.03 sec
+[ Info: VUMPS  18:	obj = -2.799693370510e-01	err = 3.3255889569e-01	time = 0.03 sec
+[ Info: VUMPS  19:	obj = -1.753528829672e-01	err = 3.8615523295e-01	time = 0.03 sec
+[ Info: VUMPS  20:	obj = +6.627601983914e-02	err = 3.7292664656e-01	time = 0.06 sec
+[ Info: VUMPS  21:	obj = -2.320790738208e-01	err = 3.6756828615e-01	time = 0.03 sec
+[ Info: VUMPS  22:	obj = +9.275292947159e-03	err = 4.0192510807e-01	time = 0.02 sec
+[ Info: VUMPS  23:	obj = -7.298797837172e-02	err = 3.7988627737e-01	time = 0.02 sec
+[ Info: VUMPS  24:	obj = -1.854126547483e-01	err = 3.6419418325e-01	time = 0.05 sec
+[ Info: VUMPS  25:	obj = -3.671777760261e-01	err = 3.0812532655e-01	time = 0.03 sec
+[ Info: VUMPS  26:	obj = -6.058668310156e-02	err = 3.8116081944e-01	time = 0.03 sec
+[ Info: VUMPS  27:	obj = -2.015499701872e-03	err = 4.0317162622e-01	time = 0.02 sec
+[ Info: VUMPS  28:	obj = -1.933169651612e-01	err = 3.8584662029e-01	time = 0.05 sec
+┌ Warning: ignoring imaginary component -1.1661211199304189e-6 from total weight 1.9830955524856506: operator might not be hermitian?
+│   α = 0.7062017103994722 - 1.1661211199304189e-6im
+│   β₁ = 1.2975553722381348
+│   β₂ = 1.322987970652728
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.1145563612105502e-6 from total weight 1.9381249814965889: operator might not be hermitian?
+│   α = 0.5691588295585481 - 1.1145563612105502e-6im
+│   β₁ = 1.322987970652728
+│   β₂ = 1.2969539313883243
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.2189929755176618e-6 from total weight 2.056544867261239: operator might not be hermitian?
+│   α = 0.5470064500394781 - 1.2189929755176618e-6im
+│   β₁ = 1.4301041013320408
+│   β₂ = 1.3729395449274322
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.1440933743427778e-6 from total weight 2.0445152640029147: operator might not be hermitian?
+│   α = 0.6236570359401358 - 1.1440933743427778e-6im
+│   β₁ = 1.350665796986038
+│   β₂ = 1.4024252105242667
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.248874490177021e-6 from total weight 2.031575324892375: operator might not be hermitian?
+│   α = 0.5290086048223288 - 1.248874490177021e-6im
+│   β₁ = 1.4024252105242667
+│   β₂ = 1.371368559366846
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.1024766432207733e-6 from total weight 2.0089343008618497: operator might not be hermitian?
+│   α = 0.7138216358572168 - 1.1024766432207733e-6im
+│   β₁ = 1.371368559366846
+│   β₂ = 1.282818760285451
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.1510270212095053e-6 from total weight 1.9537611011393712: operator might not be hermitian?
+│   α = 0.6076833782060458 - 1.1510270212095053e-6im
+│   β₁ = 1.282818760285451
+│   β₂ = 1.342489992676217
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.224997782992704e-6 from total weight 1.9645654639590098: operator might not be hermitian?
+│   α = 0.5951035704552179 - 1.224997782992704e-6im
+│   β₁ = 1.342489992676217
+│   β₂ = 1.305024835845909
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.1876444488932714e-6 from total weight 2.0169775219024793: operator might not be hermitian?
+│   α = 0.7688953944030071 - 1.1876444488932714e-6im
+│   β₁ = 1.305024835845909
+│   β₂ = 1.331881516558308
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.1840660663932356e-6 from total weight 1.984838719137105: operator might not be hermitian?
+│   α = 0.785780036375005 - 1.1840660663932356e-6im
+│   β₁ = 1.331881516558308
+│   β₂ = 1.2442773409771872
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.077349919163459e-6 from total weight 1.8902174931287379: operator might not be hermitian?
+│   α = 0.7502244171904665 - 1.077349919163459e-6im
+│   β₁ = 1.2442773409771872
+│   β₂ = 1.2090737752141907
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.0988026773565973e-6 from total weight 1.9119512889411112: operator might not be hermitian?
+│   α = 0.6200929725096753 - 1.0988026773565973e-6im
+│   β₁ = 1.2354323373196032
+│   β₂ = 1.3208896156119578
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.2560645931206094e-6 from total weight 1.7909478939100432: operator might not be hermitian?
+│   α = 0.7333732110449686 - 1.2560645931206094e-6im
+│   β₁ = 1.1135982474665187
+│   β₂ = 1.1956408471026458
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.1138326366866638e-6 from total weight 1.7427923996019516: operator might not be hermitian?
+│   α = 0.6189073977995818 - 1.1138326366866638e-6im
+│   β₁ = 1.1956408471026458
+│   β₂ = 1.1066715618455663
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -9.82501486145211e-7 from total weight 1.737355447292098: operator might not be hermitian?
+│   α = 0.7353320014976531 - 9.82501486145211e-7im
+│   β₁ = 1.0893509501287795
+│   β₂ = 1.136224143935316
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.2054549464787095e-6 from total weight 1.765964675748259: operator might not be hermitian?
+│   α = 0.5948599677205233 - 1.2054549464787095e-6im
+│   β₁ = 1.136224143935316
+│   β₂ = 1.2139882822874353
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.1910613334550207e-6 from total weight 1.7457281622540435: operator might not be hermitian?
+│   α = 0.5876265067570648 - 1.1910613334550207e-6im
+│   β₁ = 1.2139882822874353
+│   β₂ = 1.1083746458263801
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.1145402977093266e-6 from total weight 1.8228236011903869: operator might not be hermitian?
+│   α = 0.7583728039666247 - 1.1145402977093266e-6im
+│   β₁ = 1.1812863090759282
+│   β₂ = 1.1628066164453221
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.0244123553188045e-6 from total weight 1.827416176813848: operator might not be hermitian?
+│   α = 0.7209367429139465 - 1.0244123553188045e-6im
+│   β₁ = 1.1628066164453221
+│   β₂ = 1.2114375216029523
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.0686049562343147e-6 from total weight 1.8521257122682948: operator might not be hermitian?
+│   α = 0.9046242484510791 - 1.0686049562343147e-6im
+│   β₁ = 1.1441752673029573
+│   β₂ = 1.1414410106749817
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.02064543803463e-6 from total weight 1.8303026002338043: operator might not be hermitian?
+│   α = 0.8018410455211272 - 1.02064543803463e-6im
+│   β₁ = 1.1414410106749817
+│   β₂ = 1.1849772003243124
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.1415911429371942e-6 from total weight 1.8503026810057916: operator might not be hermitian?
+│   α = 0.7878644256718402 - 1.1415911429371942e-6im
+│   β₁ = 1.1849772003243124
+│   β₂ = 1.1826743815641958
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.1470443615248238e-6 from total weight 1.8849501176514116: operator might not be hermitian?
+│   α = 0.8619538770355701 - 1.1470443615248238e-6im
+│   β₁ = 1.1826743815641958
+│   β₂ = 1.1880041107200983
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.0568060722793843e-6 from total weight 1.7864879735856112: operator might not be hermitian?
+│   α = 0.7350531632675616 - 1.0568060722793843e-6im
+│   β₁ = 1.1880041107200983
+│   β₂ = 1.1135000493252825
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -9.602859024383792e-7 from total weight 1.7025702297398062: operator might not be hermitian?
+│   α = 0.6791999518194767 - 9.602859024383792e-7im
+│   β₁ = 1.1135000493252825
+│   β₂ = 1.0943264836402107
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.0558620769408888e-6 from total weight 1.7596527593571747: operator might not be hermitian?
+│   α = 0.7769001371869034 - 1.0558620769408888e-6im
+│   β₁ = 1.1619115114008967
+│   β₂ = 1.0690021749394427
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.0354194948727913e-6 from total weight 1.7038410836176745: operator might not be hermitian?
+│   α = 0.7165984827525741 - 1.0354194948727913e-6im
+│   β₁ = 1.0690021749394427
+│   β₂ = 1.116599929569149
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.091324247760525e-6 from total weight 1.7342773510387077: operator might not be hermitian?
+│   α = 0.8026570431688571 - 1.091324247760525e-6im
+│   β₁ = 1.0720399440829314
+│   β₂ = 1.1019028812317075
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component -1.1757481594952546e-6 from total weight 1.7331994241999757: operator might not be hermitian?
+│   α = 0.866234625976551 - 1.1757481594952546e-6im
+│   β₁ = 1.1019028812317075
+│   β₂ = 1.0195233480103687
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+[ Info: VUMPS  29:	obj = -1.409357861027e-01	err = 3.5767477119e-01	time = 0.03 sec
+[ Info: VUMPS  30:	obj = -2.045532833861e-01	err = 3.6013137514e-01	time = 0.02 sec
+[ Info: VUMPS  31:	obj = -3.677340068350e-01	err = 2.9848315584e-01	time = 0.02 sec
+[ Info: VUMPS  32:	obj = -3.332844888666e-01	err = 3.3334001697e-01	time = 0.06 sec
+[ Info: VUMPS  33:	obj = -2.919507908127e-01	err = 3.5475313994e-01	time = 0.03 sec
+[ Info: VUMPS  34:	obj = -2.808449276253e-02	err = 3.6950599342e-01	time = 0.08 sec
+[ Info: VUMPS  35:	obj = -9.830142151296e-02	err = 3.7023131749e-01	time = 0.06 sec
+[ Info: VUMPS  36:	obj = -2.504433745603e-01	err = 3.5111294760e-01	time = 0.02 sec
+[ Info: VUMPS  37:	obj = -3.194192131126e-01	err = 3.2385721415e-01	time = 0.02 sec
+[ Info: VUMPS  38:	obj = +8.884748290821e-02	err = 3.9871163038e-01	time = 0.07 sec
+[ Info: VUMPS  39:	obj = -1.989518543281e-01	err = 3.6796439117e-01	time = 0.02 sec
+[ Info: VUMPS  40:	obj = -2.568596388181e-01	err = 3.5396377788e-01	time = 0.02 sec
+[ Info: VUMPS  41:	obj = -1.742517027774e-01	err = 3.7560253512e-01	time = 0.03 sec
+[ Info: VUMPS  42:	obj = -2.181842216501e-01	err = 3.7550074763e-01	time = 0.02 sec
+[ Info: VUMPS  43:	obj = -6.227109008840e-02	err = 4.1909295201e-01	time = 0.05 sec
+[ Info: VUMPS  44:	obj = -7.668274105361e-02	err = 4.0844645003e-01	time = 0.03 sec
+[ Info: VUMPS  45:	obj = -1.835375816162e-01	err = 3.4820396366e-01	time = 0.02 sec
+[ Info: VUMPS  46:	obj = -6.357716783443e-02	err = 3.7708810363e-01	time = 0.02 sec
+[ Info: VUMPS  47:	obj = +1.388559492933e-04 -5.781399664562e-15im	err = 3.6961508021e-01	time = 0.05 sec
+[ Info: VUMPS  48:	obj = -1.404104902042e-01	err = 3.9016059615e-01	time = 0.02 sec
+[ Info: VUMPS  49:	obj = -2.106708660955e-01	err = 3.6760368335e-01	time = 0.02 sec
+[ Info: VUMPS  50:	obj = +1.735796736157e-01	err = 3.5521706372e-01	time = 0.02 sec
+[ Info: VUMPS  51:	obj = -5.367170688984e-02	err = 3.9109124649e-01	time = 0.06 sec
+[ Info: VUMPS  52:	obj = -2.298653965104e-01	err = 3.3926679477e-01	time = 0.02 sec
+[ Info: VUMPS  53:	obj = -3.165325039869e-01	err = 3.3133971575e-01	time = 0.02 sec
+[ Info: VUMPS  54:	obj = -2.950197697207e-01	err = 3.4876181076e-01	time = 0.03 sec
+[ Info: VUMPS  55:	obj = -2.374027247452e-01	err = 3.7519899465e-01	time = 0.06 sec
+[ Info: VUMPS  56:	obj = -1.619819474039e-02	err = 3.7718729795e-01	time = 0.02 sec
+[ Info: VUMPS  57:	obj = -1.705343092043e-01	err = 3.8558807493e-01	time = 0.02 sec
+[ Info: VUMPS  58:	obj = -3.730847939935e-01	err = 2.8129746259e-01	time = 0.02 sec
+[ Info: VUMPS  59:	obj = -2.151394001240e-01	err = 4.1030105789e-01	time = 0.06 sec
+[ Info: VUMPS  60:	obj = -1.561041094602e-01	err = 3.9671982762e-01	time = 0.02 sec
+[ Info: VUMPS  61:	obj = -9.599837934985e-02	err = 3.8528434214e-01	time = 0.02 sec
+[ Info: VUMPS  62:	obj = -2.825562036813e-01	err = 3.3900898933e-01	time = 0.02 sec
+[ Info: VUMPS  63:	obj = -1.332286499835e-02	err = 3.8572490466e-01	time = 0.06 sec
+[ Info: VUMPS  64:	obj = -1.912868202818e-02	err = 3.9649310912e-01	time = 0.02 sec
+[ Info: VUMPS  65:	obj = -3.005244814032e-02	err = 4.1809852519e-01	time = 0.02 sec
+[ Info: VUMPS  66:	obj = -1.895637479899e-01	err = 3.5881009323e-01	time = 0.05 sec
+[ Info: VUMPS  67:	obj = -2.664858728631e-01	err = 3.6123422433e-01	time = 0.03 sec
+[ Info: VUMPS  68:	obj = -2.080458300379e-01	err = 3.8597810940e-01	time = 0.03 sec
+[ Info: VUMPS  69:	obj = -3.878141128139e-01	err = 2.6683063405e-01	time = 0.02 sec
+[ Info: VUMPS  70:	obj = -4.330198106833e-01	err = 1.1995217484e-01	time = 0.08 sec
+[ Info: VUMPS  71:	obj = -7.298278720525e-02	err = 3.8622717637e-01	time = 0.03 sec
+[ Info: VUMPS  72:	obj = -2.945720162791e-01	err = 3.5422369206e-01	time = 0.02 sec
+[ Info: VUMPS  73:	obj = -3.416537322445e-01	err = 3.1228535420e-01	time = 0.02 sec
+[ Info: VUMPS  74:	obj = -3.331595948832e-01	err = 3.4179032729e-01	time = 0.06 sec
+[ Info: VUMPS  75:	obj = -1.222292014205e-01	err = 4.0978910412e-01	time = 0.03 sec
+[ Info: VUMPS  76:	obj = -6.382262951270e-02	err = 3.8950144913e-01	time = 0.04 sec
+[ Info: VUMPS  77:	obj = -2.249182124905e-01	err = 3.6705315029e-01	time = 0.06 sec
+[ Info: VUMPS  78:	obj = -3.169211687090e-01	err = 3.1190417293e-01	time = 0.03 sec
+[ Info: VUMPS  79:	obj = -3.795013187369e-01	err = 2.8575855105e-01	time = 0.04 sec
+[ Info: VUMPS  80:	obj = -3.541737574468e-01	err = 3.1274076174e-01	time = 0.03 sec
+[ Info: VUMPS  81:	obj = -1.482341913801e-01	err = 3.9486023268e-01	time = 0.06 sec
+[ Info: VUMPS  82:	obj = -2.431823642066e-01	err = 3.5485354611e-01	time = 0.03 sec
+[ Info: VUMPS  83:	obj = -1.426154410251e-01	err = 3.9431885582e-01	time = 0.02 sec
+[ Info: VUMPS  84:	obj = -1.879354265828e-01	err = 3.7761650164e-01	time = 0.06 sec
+[ Info: VUMPS  85:	obj = -3.883275844777e-02	err = 3.3484189710e-01	time = 0.03 sec
+[ Info: VUMPS  86:	obj = -2.541785323711e-01	err = 3.6013211771e-01	time = 0.02 sec
+[ Info: VUMPS  87:	obj = -3.516595702805e-01	err = 3.0264434875e-01	time = 0.03 sec
+[ Info: VUMPS  88:	obj = -2.234563948608e-01	err = 3.6699482034e-01	time = 0.05 sec
+[ Info: VUMPS  89:	obj = +2.492258044917e-02	err = 3.8778077237e-01	time = 0.02 sec
+[ Info: VUMPS  90:	obj = -3.286041797336e-01	err = 3.2736069863e-01	time = 0.02 sec
+[ Info: VUMPS  91:	obj = -2.158862857429e-01	err = 3.7995863438e-01	time = 0.03 sec
+[ Info: VUMPS  92:	obj = -2.675801195049e-01	err = 3.6561496937e-01	time = 0.06 sec
+[ Info: VUMPS  93:	obj = +5.624309743865e-03	err = 4.2867100082e-01	time = 0.03 sec
+[ Info: VUMPS  94:	obj = -1.759420429917e-01	err = 3.9349409438e-01	time = 0.02 sec
+[ Info: VUMPS  95:	obj = -3.361200941070e-01	err = 2.9968812876e-01	time = 0.02 sec
+[ Info: VUMPS  96:	obj = -2.210577853944e-03	err = 3.9551380217e-01	time = 0.06 sec
+[ Info: VUMPS  97:	obj = -2.235056018794e-02	err = 3.9877664313e-01	time = 0.02 sec
+[ Info: VUMPS  98:	obj = +1.266964324347e-01	err = 3.5087282451e-01	time = 0.02 sec
+[ Info: VUMPS  99:	obj = -1.649834446522e-01	err = 3.7313907507e-01	time = 0.02 sec
+[ Info: VUMPS 100:	obj = -2.810724087197e-01	err = 3.4803141841e-01	time = 0.06 sec
+[ Info: VUMPS 101:	obj = -3.934095054094e-01	err = 2.5788371653e-01	time = 0.03 sec
+[ Info: VUMPS 102:	obj = -2.769141978863e-02	err = 4.2113724750e-01	time = 0.03 sec
+[ Info: VUMPS 103:	obj = -1.428941704956e-01	err = 3.7175159384e-01	time = 0.05 sec
+[ Info: VUMPS 104:	obj = -2.825079318885e-01	err = 3.4365263618e-01	time = 0.02 sec
+[ Info: VUMPS 105:	obj = -3.895828699840e-01	err = 2.5772008058e-01	time = 0.03 sec
+[ Info: VUMPS 106:	obj = -3.789769542971e-01	err = 2.7647068815e-01	time = 0.03 sec
+[ Info: VUMPS 107:	obj = -4.131370544119e-01	err = 2.0771775492e-01	time = 0.06 sec
+[ Info: VUMPS 108:	obj = +1.891808047741e-02	err = 4.0211631708e-01	time = 0.03 sec
+[ Info: VUMPS 109:	obj = -3.126203477249e-01	err = 3.3581501662e-01	time = 0.03 sec
+[ Info: VUMPS 110:	obj = -3.891256643994e-01	err = 2.6587912557e-01	time = 0.07 sec
+[ Info: VUMPS 111:	obj = -3.350222584524e-01	err = 3.2878659423e-01	time = 0.03 sec
+[ Info: VUMPS 112:	obj = -3.383500923964e-01	err = 3.0810425001e-01	time = 0.03 sec
+[ Info: VUMPS 113:	obj = -2.921012433328e-01	err = 3.5940858624e-01	time = 0.03 sec
+[ Info: VUMPS 114:	obj = -3.304195736343e-01	err = 3.2278577971e-01	time = 0.06 sec
+[ Info: VUMPS 115:	obj = -1.435645156425e-01	err = 4.0512614823e-01	time = 0.03 sec
+[ Info: VUMPS 116:	obj = -1.679237781365e-01	err = 3.6250880408e-01	time = 0.02 sec
+[ Info: VUMPS 117:	obj = -1.408768635481e-01	err = 3.6326347756e-01	time = 0.05 sec
+[ Info: VUMPS 118:	obj = -1.939462004720e-02	err = 4.0498337302e-01	time = 0.03 sec
+[ Info: VUMPS 119:	obj = -2.352201460179e-01	err = 3.6574114214e-01	time = 0.02 sec
+[ Info: VUMPS 120:	obj = -2.295422994168e-02	err = 3.6188803296e-01	time = 0.03 sec
+[ Info: VUMPS 121:	obj = -6.989486583808e-02	err = 3.7006193288e-01	time = 0.05 sec
+[ Info: VUMPS 122:	obj = -3.493531583983e-02	err = 3.8804888357e-01	time = 0.03 sec
+[ Info: VUMPS 123:	obj = +7.790731640126e-04	err = 3.8138863176e-01	time = 0.02 sec
+[ Info: VUMPS 124:	obj = -1.919530149789e-01	err = 3.6070095280e-01	time = 0.03 sec
+[ Info: VUMPS 125:	obj = -3.218424809114e-01	err = 3.3338267984e-01	time = 0.05 sec
+[ Info: VUMPS 126:	obj = -3.667333159463e-01	err = 2.8821000587e-01	time = 0.02 sec
+[ Info: VUMPS 127:	obj = -2.130648461950e-01	err = 3.7595362973e-01	time = 0.03 sec
+[ Info: VUMPS 128:	obj = -1.030371749297e-01	err = 4.2417993413e-01	time = 0.03 sec
+[ Info: VUMPS 129:	obj = -1.830830998421e-01	err = 3.7685385391e-01	time = 0.05 sec
+[ Info: VUMPS 130:	obj = -7.071567794803e-02	err = 3.9744980880e-01	time = 0.02 sec
+[ Info: VUMPS 131:	obj = -4.769518696950e-02	err = 3.8112218583e-01	time = 0.02 sec
+[ Info: VUMPS 132:	obj = -2.991402416948e-01	err = 3.3370573847e-01	time = 0.02 sec
+[ Info: VUMPS 133:	obj = -2.746313335444e-01	err = 3.5097484163e-01	time = 0.06 sec
+[ Info: VUMPS 134:	obj = -3.276842746897e-01	err = 3.1708681372e-01	time = 0.02 sec
+[ Info: VUMPS 135:	obj = -2.049761563157e-01	err = 3.7370273426e-01	time = 0.02 sec
+[ Info: VUMPS 136:	obj = -3.833983237486e-01	err = 2.6114682914e-01	time = 0.02 sec
+[ Info: VUMPS 137:	obj = -6.177005685578e-02	err = 3.8019469489e-01	time = 0.06 sec
+[ Info: VUMPS 138:	obj = -1.316570790104e-01	err = 3.8729233886e-01	time = 0.02 sec
+[ Info: VUMPS 139:	obj = -2.366225337929e-01	err = 3.6759309875e-01	time = 0.03 sec
+[ Info: VUMPS 140:	obj = +8.913339361766e-02	err = 3.7167547836e-01	time = 0.08 sec
+[ Info: VUMPS 141:	obj = -7.481699300835e-02	err = 3.8011320937e-01	time = 0.04 sec
+[ Info: VUMPS 142:	obj = -2.554895657661e-01	err = 3.5626764832e-01	time = 0.03 sec
+[ Info: VUMPS 143:	obj = -2.752729453871e-01	err = 3.5827930411e-01	time = 0.03 sec
+[ Info: VUMPS 144:	obj = -1.078710456452e-01	err = 3.7452629595e-01	time = 0.06 sec
+[ Info: VUMPS 145:	obj = -1.834468230261e-01	err = 3.9202973168e-01	time = 0.03 sec
+[ Info: VUMPS 146:	obj = -2.880934140139e-01	err = 3.4460619232e-01	time = 0.04 sec
+[ Info: VUMPS 147:	obj = -2.585829024830e-01	err = 3.4906000653e-01	time = 0.03 sec
+[ Info: VUMPS 148:	obj = -7.446540858731e-02	err = 4.2725017960e-01	time = 0.06 sec
+[ Info: VUMPS 149:	obj = +1.223133246756e-02	err = 4.2025804351e-01	time = 0.02 sec
+[ Info: VUMPS 150:	obj = -7.807677131111e-02	err = 4.0384260646e-01	time = 0.02 sec
+[ Info: VUMPS 151:	obj = -1.510082807256e-01	err = 4.1367387477e-01	time = 0.03 sec
+[ Info: VUMPS 152:	obj = -1.077844357575e-01	err = 3.8783544296e-01	time = 0.05 sec
+[ Info: VUMPS 153:	obj = -2.687661583404e-01	err = 3.5954953023e-01	time = 0.02 sec
+[ Info: VUMPS 154:	obj = -2.216118903419e-01	err = 3.6631386313e-01	time = 0.03 sec
+[ Info: VUMPS 155:	obj = -3.346454865703e-03	err = 3.7228195751e-01	time = 0.03 sec
+[ Info: VUMPS 156:	obj = -2.182777019563e-01	err = 3.7120325813e-01	time = 0.06 sec
+[ Info: VUMPS 157:	obj = -2.260481514080e-01	err = 3.7084200121e-01	time = 0.03 sec
+[ Info: VUMPS 158:	obj = -3.753639631248e-01	err = 2.8129702848e-01	time = 0.02 sec
+[ Info: VUMPS 159:	obj = +1.493818093509e-01	err = 3.5990583300e-01	time = 0.06 sec
+[ Info: VUMPS 160:	obj = -7.335279560891e-02	err = 3.8634405938e-01	time = 0.02 sec
+[ Info: VUMPS 161:	obj = -1.712788073268e-01	err = 3.8098418215e-01	time = 0.03 sec
+[ Info: VUMPS 162:	obj = -2.775045952826e-02	err = 3.6432182146e-01	time = 0.03 sec
+[ Info: VUMPS 163:	obj = -2.974540518908e-01	err = 3.2120804570e-01	time = 0.06 sec
+[ Info: VUMPS 164:	obj = -4.054076797989e-01	err = 2.3514693235e-01	time = 0.04 sec
+[ Info: VUMPS 165:	obj = -7.519182934781e-02	err = 4.0110456979e-01	time = 0.03 sec
+[ Info: VUMPS 166:	obj = -1.784723524117e-01	err = 3.8591296831e-01	time = 0.02 sec
+[ Info: VUMPS 167:	obj = -1.116507302906e-01	err = 3.7195004686e-01	time = 0.06 sec
+[ Info: VUMPS 168:	obj = -3.122365679686e-01	err = 3.3350953764e-01	time = 0.02 sec
+[ Info: VUMPS 169:	obj = -3.560972462991e-01	err = 2.8786350505e-01	time = 0.03 sec
+[ Info: VUMPS 170:	obj = -2.497036138206e-01	err = 3.7652961352e-01	time = 0.03 sec
+[ Info: VUMPS 171:	obj = -1.204935017155e-01	err = 3.7477170313e-01	time = 0.06 sec
+[ Info: VUMPS 172:	obj = -3.140736291711e-01	err = 3.3651541095e-01	time = 0.02 sec
+[ Info: VUMPS 173:	obj = -3.777537348031e-01	err = 2.8281048666e-01	time = 0.03 sec
+[ Info: VUMPS 174:	obj = -4.081318507282e-01	err = 2.2729687790e-01	time = 0.06 sec
+[ Info: VUMPS 175:	obj = +8.272685287566e-03	err = 4.2559224619e-01	time = 0.03 sec
+[ Info: VUMPS 176:	obj = -1.393268322253e-01	err = 3.9579900440e-01	time = 0.03 sec
+[ Info: VUMPS 177:	obj = -9.734245038937e-02	err = 3.5396586975e-01	time = 0.03 sec
+[ Info: VUMPS 178:	obj = -2.821477914715e-01	err = 3.5794786333e-01	time = 0.06 sec
+[ Info: VUMPS 179:	obj = -4.040896409723e-01	err = 2.2336565394e-01	time = 0.03 sec
+[ Info: VUMPS 180:	obj = +8.386756242174e-03	err = 4.0133165398e-01	time = 0.02 sec
+[ Info: VUMPS 181:	obj = -1.390628324690e-01	err = 3.5859390916e-01	time = 0.05 sec
+[ Info: VUMPS 182:	obj = -1.281482713515e-01	err = 3.6674107529e-01	time = 0.02 sec
+[ Info: VUMPS 183:	obj = -9.466660283788e-02	err = 4.0504716786e-01	time = 0.03 sec
+[ Info: VUMPS 184:	obj = -1.755981307732e-01	err = 3.8378790855e-01	time = 0.02 sec
+[ Info: VUMPS 185:	obj = -9.036868885930e-02	err = 3.6141032024e-01	time = 0.05 sec
+[ Info: VUMPS 186:	obj = -3.703625904624e-01	err = 2.8654729147e-01	time = 0.02 sec
+[ Info: VUMPS 187:	obj = -3.162732937988e-01	err = 3.4485685016e-01	time = 0.03 sec
+[ Info: VUMPS 188:	obj = -1.112394896513e-01	err = 3.9807795128e-01	time = 0.03 sec
+[ Info: VUMPS 189:	obj = +1.824853010192e-03	err = 3.9447516200e-01	time = 0.06 sec
+[ Info: VUMPS 190:	obj = -2.140867094456e-01	err = 3.7898558231e-01	time = 0.02 sec
+[ Info: VUMPS 191:	obj = +4.894440406361e-02	err = 3.9055437558e-01	time = 0.02 sec
+[ Info: VUMPS 192:	obj = -3.751396808486e-02	err = 3.8799740635e-01	time = 0.02 sec
+[ Info: VUMPS 193:	obj = -1.682962360358e-01	err = 3.7336809188e-01	time = 0.05 sec
+[ Info: VUMPS 194:	obj = -1.748904771170e-01	err = 3.3383969111e-01	time = 0.02 sec
+[ Info: VUMPS 195:	obj = -2.023258032592e-01	err = 3.5779592817e-01	time = 0.02 sec
+[ Info: VUMPS 196:	obj = -2.562842975568e-01	err = 3.5451811621e-01	time = 0.03 sec
+[ Info: VUMPS 197:	obj = -1.198772391755e-01	err = 3.8884771754e-01	time = 0.06 sec
+[ Info: VUMPS 198:	obj = -1.194696203501e-01	err = 3.6306124333e-01	time = 0.03 sec
+[ Info: VUMPS 199:	obj = -3.165670058206e-01	err = 3.4580209634e-01	time = 0.03 sec
+┌ Warning: VUMPS cancel 200:	obj = -3.605645351808e-01	err = 3.2889262642e-01	time = 6.93 sec
+└ @ MPSKit ~/Projects/MPSKit.jl/src/algorithms/groundstate/vumps.jl:67
+

As you can see, VUMPS struggles to converge. On it's own, that is already quite curious. Maybe we can do better using another algorithm, such as gradient descent.

groundstate, cache, delta = find_groundstate(state, H, GradientGrassmann(; maxiter=20));
[ Info: CG: initializing with f = 0.249997124956, ‖∇f‖ = 3.4016e-03
+[ Info: CG: iter    1: f = -0.025384109228, ‖∇f‖ = 6.9269e-01, α = 8.72e+05, β = 0.00e+00, nfg = 18
+[ Info: CG: iter    2: f = -0.034734780784, ‖∇f‖ = 6.7957e-01, α = 3.41e-02, β = 2.69e+04, nfg = 19
+[ Info: CG: iter    3: f = -0.035137291778, ‖∇f‖ = 6.6715e-01, α = 5.70e-03, β = 4.46e-01, nfg = 3
+┌ Warning: resorting to η
+└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139
+[ Info: CG: iter    4: f = -0.230959138308, ‖∇f‖ = 6.9544e-01, α = 1.02e+00, β = -2.32e-04, nfg = 5
+[ Info: CG: iter    5: f = -0.344516007182, ‖∇f‖ = 5.3414e-01, α = 7.93e-01, β = 3.06e-01, nfg = 3
+[ Info: CG: iter    6: f = -0.394577435495, ‖∇f‖ = 4.0969e-01, α = 7.63e-01, β = 1.75e-01, nfg = 2
+[ Info: CG: iter    7: f = -0.423605152054, ‖∇f‖ = 2.3260e-01, α = 5.92e-01, β = 1.59e-01, nfg = 2
+[ Info: CG: iter    8: f = -0.433877622086, ‖∇f‖ = 1.0355e-01, α = 4.39e-01, β = 1.19e-01, nfg = 2
+[ Info: CG: iter    9: f = -0.436274421836, ‖∇f‖ = 7.4845e-02, α = 3.14e-01, β = 2.45e-01, nfg = 2
+[ Info: CG: iter   10: f = -0.437275612812, ‖∇f‖ = 6.7115e-02, α = 1.56e-01, β = 6.92e-01, nfg = 2
+[ Info: CG: iter   11: f = -0.438430268284, ‖∇f‖ = 6.7977e-02, α = 3.09e-01, β = 4.96e-01, nfg = 2
+[ Info: CG: iter   12: f = -0.439719125881, ‖∇f‖ = 5.3438e-02, α = 4.32e-01, β = 3.51e-01, nfg = 2
+[ Info: CG: iter   13: f = -0.440296278919, ‖∇f‖ = 4.4785e-02, α = 2.16e-01, β = 5.24e-01, nfg = 2
+[ Info: CG: iter   14: f = -0.440794890531, ‖∇f‖ = 3.8641e-02, α = 2.22e-01, β = 6.23e-01, nfg = 2
+[ Info: CG: iter   15: f = -0.441206155655, ‖∇f‖ = 3.7357e-02, α = 3.41e-01, β = 3.86e-01, nfg = 2
+[ Info: CG: iter   16: f = -0.441529728743, ‖∇f‖ = 3.0799e-02, α = 2.78e-01, β = 4.26e-01, nfg = 2
+[ Info: CG: iter   17: f = -0.441770475509, ‖∇f‖ = 2.7481e-02, α = 2.52e-01, β = 5.75e-01, nfg = 2
+[ Info: CG: iter   18: f = -0.441987084171, ‖∇f‖ = 2.5934e-02, α = 3.26e-01, β = 4.60e-01, nfg = 2
+[ Info: CG: iter   19: f = -0.442146991122, ‖∇f‖ = 2.3586e-02, α = 2.69e-01, β = 5.43e-01, nfg = 2
+┌ Warning: CG: not converged to requested tol: f = -0.442291713427, ‖∇f‖ = 2.0461e-02
+└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:103
 

Convergence is quite slow and even fails after sufficiently many iterations. To understand why, we can look at the transfer matrix spectrum.

transferplot(groundstate, groundstate)
- + - + - + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

We can clearly see multiple eigenvalues close to the unit circle. Our state is close to being non-injective, and represents the sum of multiple injective states. This is numerically very problematic, but also indicates that we used an incorrect ansatz to approximate the groundstate. We should retry with a larger unit cell.

Success

Let's initialize a different initial state, this time with a 2-site unit cell:

A = TensorMap(rand, ComplexF64, ℂ^20 * ℂ^2, ℂ^20);
 B = TensorMap(rand, ComplexF64, ℂ^20 * ℂ^2, ℂ^20);
 state = InfiniteMPS([A, B]);

In MPSKit, we require that the periodicity of the hamiltonian equals that of the state it is applied to. This is not a big obstacle, you can simply repeat the original hamiltonian. Alternatively, the hamiltonian can be constructed directly on a two-site unitcell by making use of MPSKitModels.jl's @mpoham.

# H2 = repeat(H, 2); -- copies the one-site version
 H2 = heisenberg_XXX(ComplexF64, Trivial, InfiniteChain(2); spin=1 // 2)
 groundstate, cache, delta = find_groundstate(state, H2,
-                                             VUMPS(; maxiter=100, tol=1e-12));
[ Info: VUMPS init:	obj = +4.989263659981e-01	err = 7.2657e-02
-[ Info: VUMPS   1:	obj = -3.327977953900e-01	err = 3.6721157182e-01	time = 0.04 sec
-[ Info: VUMPS   2:	obj = -8.613582314697e-01	err = 1.3817395701e-01	time = 0.03 sec
-[ Info: VUMPS   3:	obj = -8.854094286633e-01	err = 1.2636996941e-02	time = 0.03 sec
-[ Info: VUMPS   4:	obj = -8.860034868896e-01	err = 4.8894227850e-03	time = 0.04 sec
-[ Info: VUMPS   5:	obj = -8.861408641612e-01	err = 3.6101081699e-03	time = 0.03 sec
-[ Info: VUMPS   6:	obj = -8.861956019962e-01	err = 2.3873340370e-03	time = 0.03 sec
-[ Info: VUMPS   7:	obj = -8.862171468896e-01	err = 2.3946876976e-03	time = 0.08 sec
-[ Info: VUMPS   8:	obj = -8.862275876134e-01	err = 2.0620267318e-03	time = 0.03 sec
-[ Info: VUMPS   9:	obj = -8.862319848598e-01	err = 2.3656536837e-03	time = 0.03 sec
-[ Info: VUMPS  10:	obj = -8.862342347151e-01	err = 2.3171962616e-03	time = 0.03 sec
-[ Info: VUMPS  11:	obj = -8.862351816575e-01	err = 2.5035157089e-03	time = 0.03 sec
-[ Info: VUMPS  12:	obj = -8.862358518698e-01	err = 2.3743584569e-03	time = 0.03 sec
-[ Info: VUMPS  13:	obj = -8.862358277380e-01	err = 2.6661781012e-03	time = 0.03 sec
-[ Info: VUMPS  14:	obj = -8.862361321088e-01	err = 2.5349398073e-03	time = 0.03 sec
-[ Info: VUMPS  15:	obj = -8.862362398790e-01	err = 2.5961328460e-03	time = 0.03 sec
-[ Info: VUMPS  16:	obj = -8.862364361640e-01	err = 2.4630430503e-03	time = 0.03 sec
-[ Info: VUMPS  17:	obj = -8.862363204823e-01	err = 2.6657013311e-03	time = 0.03 sec
-[ Info: VUMPS  18:	obj = -8.862366543525e-01	err = 2.4033859380e-03	time = 0.03 sec
-[ Info: VUMPS  19:	obj = -8.862368027756e-01	err = 2.4751545251e-03	time = 0.03 sec
-[ Info: VUMPS  20:	obj = -8.862370949666e-01	err = 2.2173189980e-03	time = 0.05 sec
-[ Info: VUMPS  21:	obj = -8.862372454594e-01	err = 2.3525966932e-03	time = 0.05 sec
-[ Info: VUMPS  22:	obj = -8.862376422218e-01	err = 1.9729740148e-03	time = 0.04 sec
-[ Info: VUMPS  23:	obj = -8.862378512527e-01	err = 2.1069315226e-03	time = 0.07 sec
-[ Info: VUMPS  24:	obj = -8.862381943532e-01	err = 1.7728171465e-03	time = 0.04 sec
-[ Info: VUMPS  25:	obj = -8.862384261527e-01	err = 1.8605694862e-03	time = 0.03 sec
-[ Info: VUMPS  26:	obj = -8.862386821954e-01	err = 1.6005785804e-03	time = 0.04 sec
-[ Info: VUMPS  27:	obj = -8.862388952173e-01	err = 1.6219782649e-03	time = 0.03 sec
-[ Info: VUMPS  28:	obj = -8.862390777872e-01	err = 1.4098536096e-03	time = 0.05 sec
-[ Info: VUMPS  29:	obj = -8.862392504199e-01	err = 1.3742836059e-03	time = 0.05 sec
-[ Info: VUMPS  30:	obj = -8.862393918124e-01	err = 1.1981526208e-03	time = 0.05 sec
-[ Info: VUMPS  31:	obj = -8.862395189366e-01	err = 1.1227495232e-03	time = 0.05 sec
-[ Info: VUMPS  32:	obj = -8.862396317750e-01	err = 9.6790961802e-04	time = 0.05 sec
-[ Info: VUMPS  33:	obj = -8.862397273358e-01	err = 8.7235460197e-04	time = 0.04 sec
-[ Info: VUMPS  34:	obj = -8.862398137238e-01	err = 7.3864358738e-04	time = 0.03 sec
-[ Info: VUMPS  35:	obj = -8.862398845201e-01	err = 6.4279120671e-04	time = 0.03 sec
-[ Info: VUMPS  36:	obj = -8.862399481195e-01	err = 5.3518713271e-04	time = 0.04 sec
-[ Info: VUMPS  37:	obj = -8.862400017558e-01	err = 4.5437031592e-04	time = 0.04 sec
-[ Info: VUMPS  38:	obj = -8.862400510754e-01	err = 3.7529927192e-04	time = 0.04 sec
-[ Info: VUMPS  39:	obj = -8.862400961622e-01	err = 3.1709478672e-04	time = 0.04 sec
-[ Info: VUMPS  40:	obj = -8.862401404447e-01	err = 2.6516037727e-04	time = 0.05 sec
-[ Info: VUMPS  41:	obj = -8.862401848458e-01	err = 2.3115404187e-04	time = 0.04 sec
-[ Info: VUMPS  42:	obj = -8.862402315158e-01	err = 2.0263944361e-04	time = 0.04 sec
-[ Info: VUMPS  43:	obj = -8.862402813257e-01	err = 1.8985412367e-04	time = 0.04 sec
-[ Info: VUMPS  44:	obj = -8.862403357012e-01	err = 1.7867891600e-04	time = 0.04 sec
-[ Info: VUMPS  45:	obj = -8.862403952507e-01	err = 1.7958231642e-04	time = 0.04 sec
-[ Info: VUMPS  46:	obj = -8.862404608464e-01	err = 1.7788607349e-04	time = 0.06 sec
-[ Info: VUMPS  47:	obj = -8.862405326781e-01	err = 1.8395392822e-04	time = 0.06 sec
-[ Info: VUMPS  48:	obj = -8.862406109377e-01	err = 1.8586675040e-04	time = 0.06 sec
-[ Info: VUMPS  49:	obj = -8.862406951285e-01	err = 1.9086368515e-04	time = 0.06 sec
-[ Info: VUMPS  50:	obj = -8.862407845139e-01	err = 1.9239669989e-04	time = 0.06 sec
-[ Info: VUMPS  51:	obj = -8.862408776839e-01	err = 1.9330600812e-04	time = 0.04 sec
-[ Info: VUMPS  52:	obj = -8.862409729223e-01	err = 1.9221903809e-04	time = 0.04 sec
-[ Info: VUMPS  53:	obj = -8.862410680644e-01	err = 1.8904918253e-04	time = 0.06 sec
-[ Info: VUMPS  54:	obj = -8.862411608804e-01	err = 1.8372886328e-04	time = 0.07 sec
-[ Info: VUMPS  55:	obj = -8.862412491530e-01	err = 1.7627491752e-04	time = 0.04 sec
-[ Info: VUMPS  56:	obj = -8.862413310135e-01	err = 1.6700719117e-04	time = 0.06 sec
-[ Info: VUMPS  57:	obj = -8.862414050343e-01	err = 1.5632121418e-04	time = 0.06 sec
-[ Info: VUMPS  58:	obj = -8.862414703832e-01	err = 1.4463100169e-04	time = 0.06 sec
-[ Info: VUMPS  59:	obj = -8.862415267819e-01	err = 1.3240541746e-04	time = 0.04 sec
-[ Info: VUMPS  60:	obj = -8.862415744605e-01	err = 1.2003094122e-04	time = 0.04 sec
-[ Info: VUMPS  61:	obj = -8.862416140187e-01	err = 1.0787541315e-04	time = 0.04 sec
-[ Info: VUMPS  62:	obj = -8.862416463016e-01	err = 9.6199569445e-05	time = 0.04 sec
-[ Info: VUMPS  63:	obj = -8.862416722680e-01	err = 8.5213478564e-05	time = 0.04 sec
-[ Info: VUMPS  64:	obj = -8.862416928959e-01	err = 7.5037966909e-05	time = 0.04 sec
-[ Info: VUMPS  65:	obj = -8.862417091097e-01	err = 6.5748007888e-05	time = 0.04 sec
-[ Info: VUMPS  66:	obj = -8.862417217414e-01	err = 5.7359888977e-05	time = 0.04 sec
-[ Info: VUMPS  67:	obj = -8.862417315096e-01	err = 4.9862390372e-05	time = 0.08 sec
-[ Info: VUMPS  68:	obj = -8.862417390182e-01	err = 4.3212839861e-05	time = 0.04 sec
-[ Info: VUMPS  69:	obj = -8.862417447618e-01	err = 3.7357188222e-05	time = 0.04 sec
-[ Info: VUMPS  70:	obj = -8.862417491385e-01	err = 3.2228700378e-05	time = 0.04 sec
-[ Info: VUMPS  71:	obj = -8.862417524639e-01	err = 2.7759484498e-05	time = 0.04 sec
-[ Info: VUMPS  72:	obj = -8.862417549849e-01	err = 2.3879497160e-05	time = 0.04 sec
-[ Info: VUMPS  73:	obj = -8.862417568933e-01	err = 2.0522797005e-05	time = 0.04 sec
-[ Info: VUMPS  74:	obj = -8.862417583366e-01	err = 1.7626192855e-05	time = 0.04 sec
-[ Info: VUMPS  75:	obj = -8.862417594276e-01	err = 1.5132458948e-05	time = 0.04 sec
-[ Info: VUMPS  76:	obj = -8.862417602523e-01	err = 1.2989135774e-05	time = 0.06 sec
-[ Info: VUMPS  77:	obj = -8.862417608759e-01	err = 1.1149763921e-05	time = 0.04 sec
-[ Info: VUMPS  78:	obj = -8.862417613476e-01	err = 9.5726959771e-06	time = 0.04 sec
-[ Info: VUMPS  79:	obj = -8.862417617047e-01	err = 8.2216567005e-06	time = 0.05 sec
-[ Info: VUMPS  80:	obj = -8.862417619753e-01	err = 7.0647166216e-06	time = 0.05 sec
-[ Info: VUMPS  81:	obj = -8.862417621806e-01	err = 6.0742789761e-06	time = 0.04 sec
-[ Info: VUMPS  82:	obj = -8.862417623365e-01	err = 5.2264003503e-06	time = 0.04 sec
-[ Info: VUMPS  83:	obj = -8.862417624550e-01	err = 4.5004618841e-06	time = 0.04 sec
-[ Info: VUMPS  84:	obj = -8.862417625453e-01	err = 3.8786795482e-06	time = 0.04 sec
-[ Info: VUMPS  85:	obj = -8.862417626141e-01	err = 3.3458775562e-06	time = 0.04 sec
-[ Info: VUMPS  86:	obj = -8.862417626666e-01	err = 2.8890331408e-06	time = 0.06 sec
-[ Info: VUMPS  87:	obj = -8.862417627068e-01	err = 2.4970540348e-06	time = 0.04 sec
-[ Info: VUMPS  88:	obj = -8.862417627375e-01	err = 2.1604343906e-06	time = 0.06 sec
-[ Info: VUMPS  89:	obj = -8.862417627610e-01	err = 1.8711402154e-06	time = 0.05 sec
-[ Info: VUMPS  90:	obj = -8.862417627790e-01	err = 1.6222006325e-06	time = 0.04 sec
-[ Info: VUMPS  91:	obj = -8.862417627929e-01	err = 1.4077789981e-06	time = 0.04 sec
-[ Info: VUMPS  92:	obj = -8.862417628035e-01	err = 1.2229350105e-06	time = 0.04 sec
-[ Info: VUMPS  93:	obj = -8.862417628117e-01	err = 1.0633924828e-06	time = 0.04 sec
-[ Info: VUMPS  94:	obj = -8.862417628180e-01	err = 9.2553335577e-07	time = 0.06 sec
-[ Info: VUMPS  95:	obj = -8.862417628229e-01	err = 8.0725584351e-07	time = 0.04 sec
-[ Info: VUMPS  96:	obj = -8.862417628266e-01	err = 7.0473150657e-07	time = 0.04 sec
-[ Info: VUMPS  97:	obj = -8.862417628295e-01	err = 6.1568056415e-07	time = 0.04 sec
-[ Info: VUMPS  98:	obj = -8.862417628318e-01	err = 5.3828819844e-07	time = 0.04 sec
-[ Info: VUMPS  99:	obj = -8.862417628335e-01	err = 4.7093780362e-07	time = 0.05 sec
-┌ Warning: VUMPS cancel 100:	obj = -8.862417628348e-01	err = 4.1227746817e-07	time = 4.34 sec
-└ @ MPSKit ~/Projects/Julia/MPSKit.jl/src/algorithms/groundstate/vumps.jl:67
+                                             VUMPS(; maxiter=100, tol=1e-12));
[ Info: VUMPS init:	obj = +4.994034626541e-01	err = 5.1147e-02
+[ Info: VUMPS   1:	obj = -6.262869203043e-02	err = 3.8580046779e-01	time = 0.11 sec
+[ Info: VUMPS   2:	obj = -8.607141221574e-01	err = 1.2356188469e-01	time = 0.02 sec
+[ Info: VUMPS   3:	obj = -8.851326788898e-01	err = 1.3843868842e-02	time = 0.02 sec
+[ Info: VUMPS   4:	obj = -8.859081586783e-01	err = 6.1401047820e-03	time = 0.03 sec
+[ Info: VUMPS   5:	obj = -8.861065721524e-01	err = 4.0177146467e-03	time = 0.03 sec
+[ Info: VUMPS   6:	obj = -8.861785252458e-01	err = 2.7819071955e-03	time = 0.05 sec
+[ Info: VUMPS   7:	obj = -8.862090474504e-01	err = 2.0054538265e-03	time = 0.09 sec
+[ Info: VUMPS   8:	obj = -8.862231227796e-01	err = 1.4866506538e-03	time = 0.03 sec
+[ Info: VUMPS   9:	obj = -8.862299174133e-01	err = 1.0781153418e-03	time = 0.03 sec
+[ Info: VUMPS  10:	obj = -8.862332526284e-01	err = 8.0176561905e-04	time = 0.04 sec
+[ Info: VUMPS  11:	obj = -8.862349227193e-01	err = 5.9244791851e-04	time = 0.07 sec
+[ Info: VUMPS  12:	obj = -8.862357635094e-01	err = 4.4166081769e-04	time = 0.04 sec
+[ Info: VUMPS  13:	obj = -8.862361924426e-01	err = 3.4628140735e-04	time = 0.04 sec
+[ Info: VUMPS  14:	obj = -8.862364148218e-01	err = 2.7392973609e-04	time = 0.07 sec
+[ Info: VUMPS  15:	obj = -8.862365333782e-01	err = 2.3548153669e-04	time = 0.04 sec
+[ Info: VUMPS  16:	obj = -8.862366003882e-01	err = 2.0924520967e-04	time = 0.07 sec
+[ Info: VUMPS  17:	obj = -8.862366415980e-01	err = 1.9635595936e-04	time = 0.04 sec
+[ Info: VUMPS  18:	obj = -8.862366705874e-01	err = 1.9049012489e-04	time = 0.07 sec
+[ Info: VUMPS  19:	obj = -8.862366940299e-01	err = 1.8899241029e-04	time = 0.04 sec
+[ Info: VUMPS  20:	obj = -8.862367155996e-01	err = 1.9097122153e-04	time = 0.07 sec
+[ Info: VUMPS  21:	obj = -8.862367373638e-01	err = 1.9481944475e-04	time = 0.05 sec
+[ Info: VUMPS  22:	obj = -8.862367604209e-01	err = 2.0067663970e-04	time = 0.09 sec
+[ Info: VUMPS  23:	obj = -8.862367858969e-01	err = 2.0818860599e-04	time = 0.04 sec
+[ Info: VUMPS  24:	obj = -8.862368141807e-01	err = 2.1736488170e-04	time = 0.07 sec
+[ Info: VUMPS  25:	obj = -8.862368464497e-01	err = 2.2859478788e-04	time = 0.04 sec
+[ Info: VUMPS  26:	obj = -8.862368828456e-01	err = 2.4175658730e-04	time = 0.07 sec
+[ Info: VUMPS  27:	obj = -8.862369249947e-01	err = 2.5762627945e-04	time = 0.04 sec
+[ Info: VUMPS  28:	obj = -8.862369728770e-01	err = 2.7619128372e-04	time = 0.07 sec
+[ Info: VUMPS  29:	obj = -8.862370289739e-01	err = 2.9841300959e-04	time = 0.05 sec
+[ Info: VUMPS  30:	obj = -8.862370930650e-01	err = 3.2477737551e-04	time = 0.07 sec
+[ Info: VUMPS  31:	obj = -8.862371692951e-01	err = 3.5590713379e-04	time = 0.04 sec
+[ Info: VUMPS  32:	obj = -8.862372570904e-01	err = 3.9353059847e-04	time = 0.07 sec
+[ Info: VUMPS  33:	obj = -8.862373640071e-01	err = 4.3603005725e-04	time = 0.04 sec
+[ Info: VUMPS  34:	obj = -8.862374883321e-01	err = 4.8815487884e-04	time = 0.07 sec
+[ Info: VUMPS  35:	obj = -8.862376445282e-01	err = 5.3937202139e-04	time = 0.04 sec
+[ Info: VUMPS  36:	obj = -8.862378254047e-01	err = 6.0151343771e-04	time = 0.04 sec
+[ Info: VUMPS  37:	obj = -8.862380560924e-01	err = 6.3791369135e-04	time = 0.07 sec
+[ Info: VUMPS  38:	obj = -8.862383068811e-01	err = 6.7996919433e-04	time = 0.04 sec
+[ Info: VUMPS  39:	obj = -8.862386058811e-01	err = 6.4634261288e-04	time = 0.08 sec
+[ Info: VUMPS  40:	obj = -8.862388802875e-01	err = 6.2080152793e-04	time = 0.04 sec
+[ Info: VUMPS  41:	obj = -8.862391460561e-01	err = 5.0675637451e-04	time = 0.08 sec
+[ Info: VUMPS  42:	obj = -8.862393416168e-01	err = 4.2985263716e-04	time = 0.04 sec
+[ Info: VUMPS  43:	obj = -8.862394885298e-01	err = 3.1911525906e-04	time = 0.08 sec
+[ Info: VUMPS  44:	obj = -8.862395827629e-01	err = 2.5276803245e-04	time = 0.04 sec
+[ Info: VUMPS  45:	obj = -8.862396443908e-01	err = 1.8512521569e-04	time = 0.08 sec
+[ Info: VUMPS  46:	obj = -8.862396829362e-01	err = 1.4700821652e-04	time = 0.04 sec
+[ Info: VUMPS  47:	obj = -8.862397077973e-01	err = 1.1022783530e-04	time = 0.07 sec
+[ Info: VUMPS  48:	obj = -8.862397240917e-01	err = 9.2219279764e-05	time = 0.04 sec
+[ Info: VUMPS  49:	obj = -8.862397352818e-01	err = 7.1892346813e-05	time = 0.07 sec
+[ Info: VUMPS  50:	obj = -8.862397433166e-01	err = 6.5073723507e-05	time = 0.04 sec
+[ Info: VUMPS  51:	obj = -8.862397493970e-01	err = 5.5282518065e-05	time = 0.08 sec
+[ Info: VUMPS  52:	obj = -8.862397542161e-01	err = 5.1456531474e-05	time = 0.04 sec
+[ Info: VUMPS  53:	obj = -8.862397581953e-01	err = 4.6714202684e-05	time = 0.08 sec
+[ Info: VUMPS  54:	obj = -8.862397615871e-01	err = 4.3942466103e-05	time = 0.04 sec
+[ Info: VUMPS  55:	obj = -8.862397645493e-01	err = 4.1177713870e-05	time = 0.07 sec
+[ Info: VUMPS  56:	obj = -8.862397671820e-01	err = 3.9114982243e-05	time = 0.04 sec
+[ Info: VUMPS  57:	obj = -8.862397695517e-01	err = 3.7186097920e-05	time = 0.07 sec
+[ Info: VUMPS  58:	obj = -8.862397717040e-01	err = 3.5553409941e-05	time = 0.04 sec
+[ Info: VUMPS  59:	obj = -8.862397736718e-01	err = 3.4038601553e-05	time = 0.08 sec
+[ Info: VUMPS  60:	obj = -8.862397754798e-01	err = 3.2679861075e-05	time = 0.04 sec
+[ Info: VUMPS  61:	obj = -8.862397771471e-01	err = 3.1412139117e-05	time = 0.07 sec
+[ Info: VUMPS  62:	obj = -8.862397786894e-01	err = 3.0244528404e-05	time = 0.04 sec
+[ Info: VUMPS  63:	obj = -8.862397801195e-01	err = 2.9148581648e-05	time = 0.07 sec
+[ Info: VUMPS  64:	obj = -8.862397814483e-01	err = 2.8125831750e-05	time = 0.04 sec
+[ Info: VUMPS  65:	obj = -8.862397826855e-01	err = 2.7161607890e-05	time = 0.07 sec
+[ Info: VUMPS  66:	obj = -8.862397838391e-01	err = 2.6254981486e-05	time = 0.04 sec
+[ Info: VUMPS  67:	obj = -8.862397849165e-01	err = 2.5397377333e-05	time = 0.07 sec
+[ Info: VUMPS  68:	obj = -8.862397859242e-01	err = 2.4587152172e-05	time = 0.04 sec
+[ Info: VUMPS  69:	obj = -8.862397868680e-01	err = 2.3818718802e-05	time = 0.07 sec
+[ Info: VUMPS  70:	obj = -8.862397877531e-01	err = 2.3090202212e-05	time = 0.04 sec
+[ Info: VUMPS  71:	obj = -8.862397885843e-01	err = 2.2397708419e-05	time = 0.07 sec
+[ Info: VUMPS  72:	obj = -8.862397893656e-01	err = 2.1739356071e-05	time = 0.04 sec
+[ Info: VUMPS  73:	obj = -8.862397901011e-01	err = 2.1112310644e-05	time = 0.07 sec
+[ Info: VUMPS  74:	obj = -8.862397907941e-01	err = 2.0514795921e-05	time = 0.04 sec
+[ Info: VUMPS  75:	obj = -8.862397914478e-01	err = 1.9944644746e-05	time = 0.07 sec
+[ Info: VUMPS  76:	obj = -8.862397920651e-01	err = 1.9400238943e-05	time = 0.04 sec
+[ Info: VUMPS  77:	obj = -8.862397926487e-01	err = 1.8879869617e-05	time = 0.07 sec
+[ Info: VUMPS  78:	obj = -8.862397932009e-01	err = 1.8382107216e-05	time = 0.04 sec
+[ Info: VUMPS  79:	obj = -8.862397937239e-01	err = 1.7905544693e-05	time = 0.07 sec
+[ Info: VUMPS  80:	obj = -8.862397942198e-01	err = 1.7448935744e-05	time = 0.04 sec
+[ Info: VUMPS  81:	obj = -8.862397946902e-01	err = 1.7011113669e-05	time = 0.07 sec
+[ Info: VUMPS  82:	obj = -8.862397951371e-01	err = 1.6590972981e-05	time = 0.04 sec
+[ Info: VUMPS  83:	obj = -8.862397955618e-01	err = 1.6187537766e-05	time = 0.07 sec
+[ Info: VUMPS  84:	obj = -8.862397959658e-01	err = 1.5799851792e-05	time = 0.04 sec
+[ Info: VUMPS  85:	obj = -8.862397963505e-01	err = 1.5427072391e-05	time = 0.07 sec
+[ Info: VUMPS  86:	obj = -8.862397967170e-01	err = 1.5068369727e-05	time = 0.06 sec
+[ Info: VUMPS  87:	obj = -8.862397970664e-01	err = 1.4723011390e-05	time = 0.09 sec
+[ Info: VUMPS  88:	obj = -8.862397973998e-01	err = 1.4390277758e-05	time = 0.04 sec
+[ Info: VUMPS  89:	obj = -8.862397977181e-01	err = 1.4069534998e-05	time = 0.07 sec
+[ Info: VUMPS  90:	obj = -8.862397980223e-01	err = 1.3760148626e-05	time = 0.04 sec
+[ Info: VUMPS  91:	obj = -8.862397983131e-01	err = 1.3461564491e-05	time = 0.07 sec
+[ Info: VUMPS  92:	obj = -8.862397985912e-01	err = 1.3173227645e-05	time = 0.04 sec
+[ Info: VUMPS  93:	obj = -8.862397988575e-01	err = 1.2894656269e-05	time = 0.07 sec
+[ Info: VUMPS  94:	obj = -8.862397991125e-01	err = 1.2625358983e-05	time = 0.04 sec
+[ Info: VUMPS  95:	obj = -8.862397993569e-01	err = 1.2364911249e-05	time = 0.07 sec
+[ Info: VUMPS  96:	obj = -8.862397995913e-01	err = 1.2112879975e-05	time = 0.04 sec
+[ Info: VUMPS  97:	obj = -8.862397998161e-01	err = 1.1868886466e-05	time = 0.07 sec
+[ Info: VUMPS  98:	obj = -8.862398000318e-01	err = 1.1632550359e-05	time = 0.04 sec
+[ Info: VUMPS  99:	obj = -8.862398002390e-01	err = 1.1403537234e-05	time = 0.07 sec
+┌ Warning: VUMPS cancel 100:	obj = -8.862398004381e-01	err = 1.1181508752e-05	time = 5.61 sec
+└ @ MPSKit ~/Projects/MPSKit.jl/src/algorithms/groundstate/vumps.jl:67
 

We get convergence, but it takes an enormous amount of iterations. The reason behind this becomes more obvious at higher bond dimensions:

groundstate, cache, delta = find_groundstate(state, H2,
                                              IDMRG2(; trscheme=truncdim(50), maxiter=20,
                                                     tol=1e-12))
 entanglementplot(groundstate)
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

We see that some eigenvalues clearly belong to a group, and are almost degenerate. This implies 2 things:

  • there is superfluous information, if those eigenvalues are the same anyway
  • poor convergence if we cut off within such a subspace

It are precisely those problems that we can solve by using symmetries.

Symmetries

The XXZ Heisenberg hamiltonian is SU(2) symmetric and we can exploit this to greatly speed up the simulation.

It is cumbersome to construct symmetric hamiltonians, but luckily su(2) symmetric XXZ is already implemented:

H2 = heisenberg_XXX(ComplexF64, SU2Irrep, InfiniteChain(2); spin=1 // 2);

Our initial state should also be SU(2) symmetric. It now becomes apparent why we have to use a two-site periodic state. The physical space carries a half-integer charge and the first tensor maps the first virtual_space ⊗ the physical_space to the second virtual_space. Half-integer virtual charges will therefore map only to integer charges, and vice versa. The staggering thus happens on the virtual level.

An alternative constructor for the initial state is

P = Rep[SU₂](1 // 2 => 1)
 V1 = Rep[SU₂](1 // 2 => 10, 3 // 2 => 5, 5 // 2 => 2)
 V2 = Rep[SU₂](0 => 15, 1 => 10, 2 => 5)
 state = InfiniteMPS([P, P], [V1, V2]);
┌ Warning: Constructing an MPS from tensors that are not full rank
-└ @ MPSKit ~/Projects/Julia/MPSKit.jl/src/states/infinitemps.jl:149
+└ @ MPSKit ~/Projects/MPSKit.jl/src/states/infinitemps.jl:149
 

Even though the bond dimension is higher than in the example without symmetry, convergence is reached much faster:

println(dim(V1))
 println(dim(V2))
 groundstate, cache, delta = find_groundstate(state, H2,
                                              VUMPS(; maxiter=400, tol=1e-12));
52
 70
-[ Info: VUMPS init:	obj = +2.529209601096e-02	err = 3.8506e-01
-[ Info: VUMPS   1:	obj = -8.700668137574e-01	err = 1.2760693513e-01	time = 0.09 sec
-┌ Warning: ignoring imaginary component -9.671389572637824e-7 from total weight 1.071431546174058: operator might not be hermitian?
-│   α = 0.5076925045006396 - 9.671389572637824e-7im
-│   β₁ = 0.38537381617811456
-│   β₂ = 0.8612205877788699
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1081642497353856e-6 from total weight 1.9191569889382531: operator might not be hermitian?
-│   α = 1.2769155360134903 - 1.1081642497353856e-6im
-│   β₁ = 0.8612205877788699
-│   β₂ = 1.1449669695072051
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.1190854093148994e-6 from total weight 3.730590304906558: operator might not be hermitian?
-│   α = 2.794800756698454 - 2.1190854093148994e-6im
-│   β₁ = 1.664432597674601
-│   β₂ = 1.8264875803613458
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.3849446146892266e-6 from total weight 4.097529275374596: operator might not be hermitian?
-│   α = 3.177829412143231 - 2.3849446146892266e-6im
-│   β₁ = 1.7562777461027703
-│   β₂ = 1.8991142325852197
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -9.864978109262819e-7 from total weight 1.1361682375672237: operator might not be hermitian?
-│   α = 0.6796442852991254 - 9.864978109262819e-7im
-│   β₁ = 0.36574221428184467
-│   β₂ = 0.8337832705254361
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.2560459516609994e-6 from total weight 2.0188159922504125: operator might not be hermitian?
-│   α = 1.475196807523427 - 1.2560459516609994e-6im
-│   β₁ = 0.8337832705254361
-│   β₂ = 1.09736860144121
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.287798814792349e-6 from total weight 3.131391735738219: operator might not be hermitian?
-│   α = 2.3816372787502273 - 2.287798814792349e-6im
-│   β₁ = 1.398562278073576
-│   β₂ = 1.4756156781022765
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.627322084186091e-6 from total weight 3.4851002789188974: operator might not be hermitian?
-│   α = 2.7576707367226887 - 2.627322084186091e-6im
-│   β₁ = 1.4756156781022765
-│   β₂ = 1.537444123367018
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.7586626591682636e-6 from total weight 3.988678975499865: operator might not be hermitian?
-│   α = 3.369986079025038 - 2.7586626591682636e-6im
-│   β₁ = 1.537444123367018
-│   β₂ = 1.479533495494006
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.576279468168019e-6 from total weight 4.408138403225203: operator might not be hermitian?
-│   α = 3.756862474916753 - 2.576279468168019e-6im
-│   β₁ = 1.479533495494006
-│   β₂ = 1.7687987907774767
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.0838745975609863e-6 from total weight 3.6721874341141185: operator might not be hermitian?
-│   α = 2.9242549058641267 - 2.0838745975609863e-6im
-│   β₁ = 1.4510488349306505
-│   β₂ = 1.6817107585543003
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -3.2011468193795557e-6 from total weight 3.928995034765234: operator might not be hermitian?
-│   α = 3.2218982183839864 - 3.2011468193795557e-6im
-│   β₁ = 1.6817107585543003
-│   β₂ = 1.4927232758071491
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.6483490946991716e-6 from total weight 3.8342135775491344: operator might not be hermitian?
-│   α = 3.147392732501323 - 2.6483490946991716e-6im
-│   β₁ = 1.4927232758071491
-│   β₂ = 1.6021516680753263
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -8.008456815874523e-7 from total weight 1.068648760572627: operator might not be hermitian?
-│   α = 0.49256503829854587 - 8.008456815874523e-7im
-│   β₁ = 0.3861387753335071
-│   β₂ = 0.8661909158509234
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.1445368569925613e-6 from total weight 1.9110645467027934: operator might not be hermitian?
-│   α = 1.2679109876128705 - 1.1445368569925613e-6im
-│   β₁ = 0.8661909158509234
-│   β₂ = 1.1376654721186439
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -1.8545564228642994e-6 from total weight 3.293944443070549: operator might not be hermitian?
-│   α = 2.4420621357903936 - 1.8545564228642994e-6im
-│   β₁ = 1.4944926110182144
-│   β₂ = 1.6287708109438626
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.3486831544836106e-6 from total weight 3.712645223079187: operator might not be hermitian?
-│   α = 2.775675517357043 - 2.3486831544836106e-6im
-│   β₁ = 1.6287708109438626
-│   β₂ = 1.851071478957302
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.5715279290162985e-6 from total weight 4.138742304007041: operator might not be hermitian?
-│   α = 3.244964908413238 - 2.5715279290162985e-6im
-│   β₁ = 1.851071478957302
-│   β₂ = 1.7812706088431347
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.704545960600588e-6 from total weight 4.638773087532732: operator might not be hermitian?
-│   α = 3.888714950195714 - 2.704545960600588e-6im
-│   β₁ = 1.7812706088431347
-│   β₂ = 1.7953235952904407
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -2.3470771421838996e-6 from total weight 4.105392145218653: operator might not be hermitian?
-│   α = 3.336496533127281 - 2.3470771421838996e-6im
-│   β₁ = 1.7117357192414597
-│   β₂ = 1.670926802083221
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component -8.845749970285409e-7 from total weight 1.5036342874312476: operator might not be hermitian?
-│   α = 1.170551214174138 - 8.845749970285409e-7im
-│   β₁ = 0.38496445782055083
-│   β₂ = 0.8617008132458002
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-[ Info: VUMPS   2:	obj = -8.856910840126e-01	err = 7.8578408649e-03	time = 0.08 sec
-┌ Warning: ignoring imaginary component 2.7018785862182825e-7 from total weight 0.44194776924492263: operator might not be hermitian?
-│   α = -0.07978677254444026 + 2.7018785862182825e-7im
-│   β₁ = 0.02857112167935202
-│   β₂ = 0.43374600018146076
-└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170
-[ Info: VUMPS   3:	obj = -8.861118311158e-01	err = 4.0509339869e-03	time = 0.05 sec
-[ Info: VUMPS   4:	obj = -8.862216799517e-01	err = 2.1307990266e-03	time = 0.06 sec
-[ Info: VUMPS   5:	obj = -8.862597578596e-01	err = 1.2064832500e-03	time = 0.07 sec
-[ Info: VUMPS   6:	obj = -8.862749304464e-01	err = 8.5365973329e-04	time = 0.09 sec
-[ Info: VUMPS   7:	obj = -8.862815509334e-01	err = 6.3063221768e-04	time = 0.09 sec
-[ Info: VUMPS   8:	obj = -8.862847899699e-01	err = 4.7867144673e-04	time = 0.10 sec
-[ Info: VUMPS   9:	obj = -8.862863646071e-01	err = 3.8612691378e-04	time = 0.13 sec
-[ Info: VUMPS  10:	obj = -8.862871410116e-01	err = 3.0291821377e-04	time = 0.11 sec
-[ Info: VUMPS  11:	obj = -8.862875242967e-01	err = 2.3195751791e-04	time = 0.13 sec
-[ Info: VUMPS  12:	obj = -8.862877135929e-01	err = 1.7414560667e-04	time = 0.16 sec
-[ Info: VUMPS  13:	obj = -8.862878071048e-01	err = 1.2883734924e-04	time = 0.21 sec
-[ Info: VUMPS  14:	obj = -8.862878532530e-01	err = 9.4253044026e-05	time = 0.10 sec
-[ Info: VUMPS  15:	obj = -8.862878759981e-01	err = 6.8384197821e-05	time = 0.10 sec
-[ Info: VUMPS  16:	obj = -8.862878872034e-01	err = 4.9321469248e-05	time = 0.12 sec
-[ Info: VUMPS  17:	obj = -8.862878927221e-01	err = 3.5421334288e-05	time = 0.16 sec
-[ Info: VUMPS  18:	obj = -8.862878954405e-01	err = 2.5359982562e-05	time = 0.14 sec
-[ Info: VUMPS  19:	obj = -8.862878967805e-01	err = 1.8115338221e-05	time = 0.17 sec
-[ Info: VUMPS  20:	obj = -8.862878974415e-01	err = 1.2918474214e-05	time = 0.16 sec
-[ Info: VUMPS  21:	obj = -8.862878977679e-01	err = 9.2003371054e-06	time = 0.17 sec
-[ Info: VUMPS  22:	obj = -8.862878979292e-01	err = 6.5462638559e-06	time = 0.26 sec
-[ Info: VUMPS  23:	obj = -8.862878980090e-01	err = 4.6539903266e-06	time = 0.11 sec
-[ Info: VUMPS  24:	obj = -8.862878980486e-01	err = 3.3063133163e-06	time = 0.14 sec
-[ Info: VUMPS  25:	obj = -8.862878980681e-01	err = 2.3475142715e-06	time = 0.12 sec
-[ Info: VUMPS  26:	obj = -8.862878980779e-01	err = 1.6659191513e-06	time = 0.16 sec
-[ Info: VUMPS  27:	obj = -8.862878980827e-01	err = 1.1816853804e-06	time = 0.13 sec
-[ Info: VUMPS  28:	obj = -8.862878980851e-01	err = 8.3791026298e-07	time = 0.14 sec
-[ Info: VUMPS  29:	obj = -8.862878980863e-01	err = 5.9388578145e-07	time = 0.13 sec
-[ Info: VUMPS  30:	obj = -8.862878980869e-01	err = 4.2078193645e-07	time = 0.13 sec
-[ Info: VUMPS  31:	obj = -8.862878980871e-01	err = 2.9801452450e-07	time = 0.20 sec
-[ Info: VUMPS  32:	obj = -8.862878980873e-01	err = 2.1104589939e-07	time = 0.14 sec
-[ Info: VUMPS  33:	obj = -8.862878980874e-01	err = 1.4939769241e-07	time = 0.10 sec
-[ Info: VUMPS  34:	obj = -8.862878980874e-01	err = 1.0573206754e-07	time = 0.11 sec
-[ Info: VUMPS  35:	obj = -8.862878980874e-01	err = 7.4808317980e-08	time = 0.12 sec
-[ Info: VUMPS  36:	obj = -8.862878980874e-01	err = 5.2917998892e-08	time = 0.10 sec
-[ Info: VUMPS  37:	obj = -8.862878980874e-01	err = 3.7429304204e-08	time = 0.12 sec
-[ Info: VUMPS  38:	obj = -8.862878980874e-01	err = 2.6464141713e-08	time = 0.13 sec
-[ Info: VUMPS  39:	obj = -8.862878980874e-01	err = 1.8734153006e-08	time = 0.11 sec
-[ Info: VUMPS  40:	obj = -8.862878980874e-01	err = 1.3233756785e-08	time = 0.10 sec
-[ Info: VUMPS  41:	obj = -8.862878980874e-01	err = 9.3267037924e-09	time = 0.09 sec
-[ Info: VUMPS  42:	obj = -8.862878980874e-01	err = 6.6095283192e-09	time = 0.18 sec
-[ Info: VUMPS  43:	obj = -8.862878980874e-01	err = 4.6673057032e-09	time = 0.08 sec
-[ Info: VUMPS  44:	obj = -8.862878980874e-01	err = 3.2968234716e-09	time = 0.07 sec
-[ Info: VUMPS  45:	obj = -8.862878980874e-01	err = 2.3386800405e-09	time = 0.07 sec
-[ Info: VUMPS  46:	obj = -8.862878980874e-01	err = 1.6622890895e-09	time = 0.07 sec
-[ Info: VUMPS  47:	obj = -8.862878980874e-01	err = 1.1730161705e-09	time = 0.09 sec
-[ Info: VUMPS  48:	obj = -8.862878980874e-01	err = 8.2342105674e-10	time = 0.10 sec
-[ Info: VUMPS  49:	obj = -8.862878980874e-01	err = 5.8767379287e-10	time = 0.10 sec
-[ Info: VUMPS  50:	obj = -8.862878980874e-01	err = 4.3377628724e-10	time = 0.08 sec
-[ Info: VUMPS  51:	obj = -8.862878980874e-01	err = 2.9148815706e-10	time = 0.06 sec
-[ Info: VUMPS  52:	obj = -8.862878980874e-01	err = 2.3530568367e-10	time = 0.08 sec
-[ Info: VUMPS  53:	obj = -8.862878980874e-01	err = 1.9738411426e-10	time = 0.08 sec
-[ Info: VUMPS  54:	obj = -8.862878980874e-01	err = 1.6903098032e-10	time = 0.06 sec
-[ Info: VUMPS  55:	obj = -8.862878980874e-01	err = 1.0479313324e-10	time = 0.07 sec
-[ Info: VUMPS  56:	obj = -8.862878980874e-01	err = 1.1793027010e-10	time = 0.05 sec
-[ Info: VUMPS  57:	obj = -8.862878980874e-01	err = 8.7877060091e-11	time = 0.05 sec
-[ Info: VUMPS  58:	obj = -8.862878980874e-01	err = 7.7838852527e-11	time = 0.05 sec
-[ Info: VUMPS  59:	obj = -8.862878980874e-01	err = 7.7808315661e-11	time = 0.04 sec
-[ Info: VUMPS  60:	obj = -8.862878980874e-01	err = 5.9890246741e-11	time = 0.05 sec
-[ Info: VUMPS  61:	obj = -8.862878980874e-01	err = 5.9599058037e-11	time = 0.03 sec
-[ Info: VUMPS  62:	obj = -8.862878980874e-01	err = 8.2169329602e-11	time = 0.06 sec
-[ Info: VUMPS  63:	obj = -8.862878980874e-01	err = 1.9584055882e-10	time = 0.18 sec
-[ Info: VUMPS  64:	obj = -8.862878980874e-01	err = 1.3190704587e-10	time = 0.08 sec
-[ Info: VUMPS  65:	obj = -8.862878980874e-01	err = 9.4587810726e-11	time = 0.05 sec
-[ Info: VUMPS  66:	obj = -8.862878980874e-01	err = 7.6642342387e-11	time = 0.06 sec
-[ Info: VUMPS  67:	obj = -8.862878980874e-01	err = 7.6453977892e-11	time = 0.03 sec
-[ Info: VUMPS  68:	obj = -8.862878980874e-01	err = 1.6135931629e-10	time = 0.03 sec
-[ Info: VUMPS  69:	obj = -8.862878980874e-01	err = 4.8613631788e-11	time = 0.04 sec
-[ Info: VUMPS  70:	obj = -8.862878980874e-01	err = 4.8715755949e-11	time = 0.03 sec
-[ Info: VUMPS  71:	obj = -8.862878980874e-01	err = 4.9417123546e-11	time = 0.03 sec
-[ Info: VUMPS  72:	obj = -8.862878980874e-01	err = 4.8238297283e-11	time = 0.03 sec
-[ Info: VUMPS  73:	obj = -8.862878980874e-01	err = 4.9499679981e-11	time = 0.03 sec
-[ Info: VUMPS  74:	obj = -8.862878980874e-01	err = 5.0219935378e-11	time = 0.03 sec
-[ Info: VUMPS  75:	obj = -8.862878980874e-01	err = 4.8350451541e-11	time = 0.03 sec
-[ Info: VUMPS  76:	obj = -8.862878980874e-01	err = 4.8479938582e-11	time = 0.03 sec
-[ Info: VUMPS  77:	obj = -8.862878980874e-01	err = 4.8492803216e-11	time = 0.03 sec
-[ Info: VUMPS  78:	obj = -8.862878980874e-01	err = 4.8444269610e-11	time = 0.03 sec
-[ Info: VUMPS  79:	obj = -8.862878980874e-01	err = 5.2381270902e-11	time = 0.03 sec
-[ Info: VUMPS  80:	obj = -8.862878980874e-01	err = 4.8563550538e-11	time = 0.03 sec
-[ Info: VUMPS  81:	obj = -8.862878980874e-01	err = 5.0827468520e-11	time = 0.03 sec
-[ Info: VUMPS  82:	obj = -8.862878980874e-01	err = 1.1400600324e-10	time = 0.06 sec
-[ Info: VUMPS  83:	obj = -8.862878980874e-01	err = 1.9067343860e-10	time = 0.05 sec
-[ Info: VUMPS  84:	obj = -8.862878980874e-01	err = 1.6689382966e-10	time = 0.05 sec
-[ Info: VUMPS  85:	obj = -8.862878980874e-01	err = 9.3634468049e-11	time = 0.07 sec
-[ Info: VUMPS  86:	obj = -8.862878980874e-01	err = 5.4612311876e-11	time = 0.04 sec
-[ Info: VUMPS  87:	obj = -8.862878980874e-01	err = 5.9920739880e-11	time = 0.03 sec
-[ Info: VUMPS  88:	obj = -8.862878980874e-01	err = 5.5300426287e-11	time = 0.03 sec
-[ Info: VUMPS  89:	obj = -8.862878980874e-01	err = 5.4697291743e-11	time = 0.04 sec
-[ Info: VUMPS  90:	obj = -8.862878980874e-01	err = 9.0893602359e-11	time = 0.06 sec
-[ Info: VUMPS  91:	obj = -8.862878980874e-01	err = 9.1263591308e-11	time = 0.07 sec
-[ Info: VUMPS  92:	obj = -8.862878980874e-01	err = 8.4998690637e-11	time = 0.06 sec
-[ Info: VUMPS  93:	obj = -8.862878980874e-01	err = 1.1553836703e-10	time = 0.07 sec
-[ Info: VUMPS  94:	obj = -8.862878980874e-01	err = 9.6747893284e-11	time = 0.07 sec
-[ Info: VUMPS  95:	obj = -8.862878980874e-01	err = 1.1376915191e-10	time = 0.05 sec
-[ Info: VUMPS  96:	obj = -8.862878980874e-01	err = 8.4905437150e-11	time = 0.05 sec
-[ Info: VUMPS  97:	obj = -8.862878980874e-01	err = 1.3602624799e-10	time = 0.05 sec
-[ Info: VUMPS  98:	obj = -8.862878980874e-01	err = 3.8537544337e-11	time = 0.05 sec
-[ Info: VUMPS  99:	obj = -8.862878980874e-01	err = 3.8926546453e-11	time = 0.03 sec
-[ Info: VUMPS 100:	obj = -8.862878980874e-01	err = 3.9274493760e-11	time = 0.03 sec
-[ Info: VUMPS 101:	obj = -8.862878980874e-01	err = 3.8635555369e-11	time = 0.03 sec
-[ Info: VUMPS 102:	obj = -8.862878980874e-01	err = 3.8807575779e-11	time = 0.03 sec
-[ Info: VUMPS 103:	obj = -8.862878980874e-01	err = 3.8568495332e-11	time = 0.03 sec
-[ Info: VUMPS 104:	obj = -8.862878980874e-01	err = 3.8509242746e-11	time = 0.03 sec
-[ Info: VUMPS 105:	obj = -8.862878980874e-01	err = 3.8135791403e-11	time = 0.03 sec
-[ Info: VUMPS 106:	obj = -8.862878980874e-01	err = 3.8362355119e-11	time = 0.03 sec
-[ Info: VUMPS 107:	obj = -8.862878980874e-01	err = 3.9744912662e-11	time = 0.03 sec
-[ Info: VUMPS 108:	obj = -8.862878980874e-01	err = 3.8554727985e-11	time = 0.03 sec
-[ Info: VUMPS 109:	obj = -8.862878980874e-01	err = 3.8695253586e-11	time = 0.03 sec
-[ Info: VUMPS 110:	obj = -8.862878980874e-01	err = 3.8520588629e-11	time = 0.03 sec
-[ Info: VUMPS 111:	obj = -8.862878980874e-01	err = 3.8541288460e-11	time = 0.03 sec
-[ Info: VUMPS 112:	obj = -8.862878980874e-01	err = 3.8249357381e-11	time = 0.03 sec
-[ Info: VUMPS 113:	obj = -8.862878980874e-01	err = 3.8284823677e-11	time = 0.03 sec
-[ Info: VUMPS 114:	obj = -8.862878980874e-01	err = 4.0318445321e-11	time = 0.03 sec
-[ Info: VUMPS 115:	obj = -8.862878980874e-01	err = 3.8438479352e-11	time = 0.22 sec
-[ Info: VUMPS 116:	obj = -8.862878980874e-01	err = 3.8957255842e-11	time = 0.03 sec
-[ Info: VUMPS 117:	obj = -8.862878980874e-01	err = 3.8351906108e-11	time = 0.03 sec
-[ Info: VUMPS 118:	obj = -8.862878980874e-01	err = 8.1169575478e-11	time = 0.05 sec
-[ Info: VUMPS 119:	obj = -8.862878980874e-01	err = 1.4558819323e-10	time = 0.03 sec
-[ Info: VUMPS 120:	obj = -8.862878980874e-01	err = 7.2695848580e-11	time = 0.03 sec
-[ Info: VUMPS 121:	obj = -8.862878980874e-01	err = 6.3820080934e-11	time = 0.04 sec
-[ Info: VUMPS 122:	obj = -8.862878980874e-01	err = 6.4468448875e-11	time = 0.03 sec
-[ Info: VUMPS 123:	obj = -8.862878980874e-01	err = 3.5386680828e-10	time = 0.05 sec
-[ Info: VUMPS 124:	obj = -8.862878980874e-01	err = 1.0528805822e-10	time = 0.09 sec
-[ Info: VUMPS 125:	obj = -8.862878980874e-01	err = 1.0096381963e-10	time = 0.07 sec
-[ Info: VUMPS 126:	obj = -8.862878980874e-01	err = 8.0559599886e-11	time = 0.04 sec
-[ Info: VUMPS 127:	obj = -8.862878980874e-01	err = 1.0983328944e-10	time = 0.05 sec
-[ Info: VUMPS 128:	obj = -8.862878980874e-01	err = 9.6899927046e-11	time = 0.06 sec
-[ Info: VUMPS 129:	obj = -8.862878980874e-01	err = 9.1928629389e-11	time = 0.04 sec
-[ Info: VUMPS 130:	obj = -8.862878980874e-01	err = 4.9719194648e-11	time = 0.04 sec
-[ Info: VUMPS 131:	obj = -8.862878980874e-01	err = 4.2945823596e-11	time = 0.03 sec
-[ Info: VUMPS 132:	obj = -8.862878980874e-01	err = 5.4051247432e-10	time = 0.06 sec
-[ Info: VUMPS 133:	obj = -8.862878980874e-01	err = 1.4364385018e-10	time = 0.07 sec
-[ Info: VUMPS 134:	obj = -8.862878980874e-01	err = 8.8389549749e-11	time = 0.04 sec
-[ Info: VUMPS 135:	obj = -8.862878980874e-01	err = 8.7770612654e-11	time = 0.05 sec
-[ Info: VUMPS 136:	obj = -8.862878980874e-01	err = 1.0755372350e-10	time = 0.07 sec
-[ Info: VUMPS 137:	obj = -8.862878980874e-01	err = 9.1157795643e-11	time = 0.07 sec
-[ Info: VUMPS 138:	obj = -8.862878980874e-01	err = 1.2395993089e-10	time = 0.04 sec
-[ Info: VUMPS 139:	obj = -8.862878980874e-01	err = 5.8947156696e-11	time = 0.03 sec
-[ Info: VUMPS 140:	obj = -8.862878980874e-01	err = 8.3233578587e-10	time = 0.05 sec
-[ Info: VUMPS 141:	obj = -8.862878980874e-01	err = 1.1778486865e-10	time = 0.09 sec
-[ Info: VUMPS 142:	obj = -8.862878980874e-01	err = 7.4548842297e-11	time = 0.04 sec
-[ Info: VUMPS 143:	obj = -8.862878980874e-01	err = 7.7244247108e-11	time = 0.04 sec
-[ Info: VUMPS 144:	obj = -8.862878980874e-01	err = 7.7255861317e-11	time = 0.03 sec
-[ Info: VUMPS 145:	obj = -8.862878980874e-01	err = 7.7791688138e-11	time = 0.03 sec
-[ Info: VUMPS 146:	obj = -8.862878980874e-01	err = 1.8573962248e-10	time = 0.04 sec
-[ Info: VUMPS 147:	obj = -8.862878980874e-01	err = 7.3035341919e-11	time = 0.04 sec
-[ Info: VUMPS 148:	obj = -8.862878980874e-01	err = 1.0634890052e-10	time = 0.04 sec
-[ Info: VUMPS 149:	obj = -8.862878980874e-01	err = 4.7521976517e-11	time = 0.04 sec
-[ Info: VUMPS 150:	obj = -8.862878980874e-01	err = 4.8276089374e-11	time = 0.03 sec
-[ Info: VUMPS 151:	obj = -8.862878980874e-01	err = 4.7024688428e-11	time = 0.17 sec
-[ Info: VUMPS 152:	obj = -8.862878980874e-01	err = 4.3748964822e-10	time = 0.04 sec
-[ Info: VUMPS 153:	obj = -8.862878980874e-01	err = 9.2704143948e-11	time = 0.06 sec
-[ Info: VUMPS 154:	obj = -8.862878980874e-01	err = 1.3725345226e-10	time = 0.05 sec
-[ Info: VUMPS 155:	obj = -8.862878980874e-01	err = 7.8221525663e-11	time = 0.05 sec
-[ Info: VUMPS 156:	obj = -8.862878980874e-01	err = 1.5274244678e-10	time = 0.03 sec
-[ Info: VUMPS 157:	obj = -8.862878980874e-01	err = 5.2021209796e-11	time = 0.04 sec
-[ Info: VUMPS 158:	obj = -8.862878980874e-01	err = 6.4744543971e-11	time = 0.03 sec
-[ Info: VUMPS 159:	obj = -8.862878980874e-01	err = 9.3681465642e-11	time = 0.06 sec
-[ Info: VUMPS 160:	obj = -8.862878980874e-01	err = 7.0751354204e-11	time = 0.04 sec
-[ Info: VUMPS 161:	obj = -8.862878980874e-01	err = 1.1351374411e-10	time = 0.04 sec
-[ Info: VUMPS 162:	obj = -8.862878980874e-01	err = 8.1558260001e-11	time = 0.05 sec
-[ Info: VUMPS 163:	obj = -8.862878980874e-01	err = 1.1864028950e-10	time = 0.03 sec
-[ Info: VUMPS 164:	obj = -8.862878980874e-01	err = 4.4746986769e-11	time = 0.03 sec
-[ Info: VUMPS 165:	obj = -8.862878980874e-01	err = 4.3438831097e-11	time = 0.03 sec
-[ Info: VUMPS 166:	obj = -8.862878980874e-01	err = 4.1460085149e-11	time = 0.03 sec
-[ Info: VUMPS 167:	obj = -8.862878980874e-01	err = 4.4618208376e-11	time = 0.03 sec
-[ Info: VUMPS 168:	obj = -8.862878980874e-01	err = 4.2337696098e-11	time = 0.03 sec
-[ Info: VUMPS 169:	obj = -8.862878980874e-01	err = 4.1978118014e-11	time = 0.03 sec
-[ Info: VUMPS 170:	obj = -8.862878980874e-01	err = 4.2214168317e-11	time = 0.03 sec
-[ Info: VUMPS 171:	obj = -8.862878980874e-01	err = 4.1785244916e-11	time = 0.03 sec
-[ Info: VUMPS 172:	obj = -8.862878980874e-01	err = 4.2141386221e-11	time = 0.04 sec
-[ Info: VUMPS 173:	obj = -8.862878980874e-01	err = 4.1732296021e-11	time = 0.03 sec
-[ Info: VUMPS 174:	obj = -8.862878980874e-01	err = 4.2256117546e-11	time = 0.04 sec
-[ Info: VUMPS 175:	obj = -8.862878980874e-01	err = 4.1618346731e-11	time = 0.04 sec
-[ Info: VUMPS 176:	obj = -8.862878980874e-01	err = 4.2266344901e-11	time = 0.04 sec
-[ Info: VUMPS 177:	obj = -8.862878980874e-01	err = 9.8734315013e-11	time = 0.07 sec
-[ Info: VUMPS 178:	obj = -8.862878980874e-01	err = 7.4589677259e-11	time = 0.07 sec
-[ Info: VUMPS 179:	obj = -8.862878980874e-01	err = 7.9375086697e-11	time = 0.03 sec
-[ Info: VUMPS 180:	obj = -8.862878980874e-01	err = 1.7247929023e-10	time = 0.07 sec
-[ Info: VUMPS 181:	obj = -8.862878980874e-01	err = 8.6039641730e-11	time = 0.08 sec
-[ Info: VUMPS 182:	obj = -8.862878980874e-01	err = 1.1202139192e-10	time = 0.05 sec
-[ Info: VUMPS 183:	obj = -8.862878980874e-01	err = 8.0254748319e-11	time = 0.04 sec
-[ Info: VUMPS 184:	obj = -8.862878980874e-01	err = 8.0049698591e-11	time = 0.03 sec
-[ Info: VUMPS 185:	obj = -8.862878980874e-01	err = 8.0748438983e-11	time = 0.03 sec
-[ Info: VUMPS 186:	obj = -8.862878980874e-01	err = 1.7758301363e-10	time = 0.04 sec
-[ Info: VUMPS 187:	obj = -8.862878980874e-01	err = 7.9041173850e-11	time = 0.05 sec
-[ Info: VUMPS 188:	obj = -8.862878980874e-01	err = 4.2753988414e-10	time = 0.06 sec
-[ Info: VUMPS 189:	obj = -8.862878980874e-01	err = 1.4598945632e-10	time = 0.10 sec
-[ Info: VUMPS 190:	obj = -8.862878980874e-01	err = 1.7166605554e-10	time = 0.07 sec
-[ Info: VUMPS 191:	obj = -8.862878980874e-01	err = 1.2776212768e-10	time = 0.23 sec
-[ Info: VUMPS 192:	obj = -8.862878980874e-01	err = 8.7435361404e-11	time = 0.06 sec
-[ Info: VUMPS 193:	obj = -8.862878980874e-01	err = 1.6452219360e-10	time = 0.04 sec
-[ Info: VUMPS 194:	obj = -8.862878980874e-01	err = 4.9424927706e-11	time = 0.04 sec
-[ Info: VUMPS 195:	obj = -8.862878980874e-01	err = 1.6118096258e-10	time = 0.04 sec
-[ Info: VUMPS 196:	obj = -8.862878980874e-01	err = 1.3946342996e-10	time = 0.05 sec
-[ Info: VUMPS 197:	obj = -8.862878980874e-01	err = 1.1171007390e-10	time = 0.05 sec
-[ Info: VUMPS 198:	obj = -8.862878980874e-01	err = 1.2122617840e-10	time = 0.05 sec
-[ Info: VUMPS 199:	obj = -8.862878980874e-01	err = 9.6244952949e-11	time = 0.05 sec
-[ Info: VUMPS 200:	obj = -8.862878980874e-01	err = 8.0799742424e-11	time = 0.06 sec
-[ Info: VUMPS 201:	obj = -8.862878980874e-01	err = 5.1118445166e-11	time = 0.04 sec
-[ Info: VUMPS 202:	obj = -8.862878980874e-01	err = 5.1326558160e-11	time = 0.03 sec
-[ Info: VUMPS 203:	obj = -8.862878980874e-01	err = 5.0993858963e-11	time = 0.03 sec
-[ Info: VUMPS 204:	obj = -8.862878980874e-01	err = 5.1037654449e-11	time = 0.03 sec
-[ Info: VUMPS 205:	obj = -8.862878980874e-01	err = 5.3455271604e-11	time = 0.03 sec
-[ Info: VUMPS 206:	obj = -8.862878980874e-01	err = 3.8366163414e-10	time = 0.06 sec
-[ Info: VUMPS 207:	obj = -8.862878980874e-01	err = 1.4898391762e-10	time = 0.10 sec
-[ Info: VUMPS 208:	obj = -8.862878980874e-01	err = 1.0419203578e-10	time = 0.06 sec
-[ Info: VUMPS 209:	obj = -8.862878980874e-01	err = 1.3088789757e-10	time = 0.06 sec
-[ Info: VUMPS 210:	obj = -8.862878980874e-01	err = 7.8891392613e-11	time = 0.07 sec
-[ Info: VUMPS 211:	obj = -8.862878980874e-01	err = 1.0527138595e-10	time = 0.06 sec
-[ Info: VUMPS 212:	obj = -8.862878980874e-01	err = 1.6479041684e-10	time = 0.05 sec
-[ Info: VUMPS 213:	obj = -8.862878980874e-01	err = 8.2540083159e-11	time = 0.06 sec
-[ Info: VUMPS 214:	obj = -8.862878980874e-01	err = 9.7164188376e-11	time = 0.04 sec
-[ Info: VUMPS 215:	obj = -8.862878980874e-01	err = 1.3187308825e-10	time = 0.05 sec
-[ Info: VUMPS 216:	obj = -8.862878980874e-01	err = 1.3425752903e-10	time = 0.06 sec
-[ Info: VUMPS 217:	obj = -8.862878980874e-01	err = 9.7020802238e-11	time = 0.05 sec
-[ Info: VUMPS 218:	obj = -8.862878980874e-01	err = 1.3853989912e-10	time = 0.05 sec
-[ Info: VUMPS 219:	obj = -8.862878980874e-01	err = 7.8371664837e-11	time = 0.05 sec
-[ Info: VUMPS 220:	obj = -8.862878980874e-01	err = 9.2483636476e-11	time = 0.18 sec
-[ Info: VUMPS 221:	obj = -8.862878980874e-01	err = 1.6661668775e-10	time = 0.03 sec
-[ Info: VUMPS 222:	obj = -8.862878980874e-01	err = 5.5364490079e-11	time = 0.03 sec
-[ Info: VUMPS 223:	obj = -8.862878980874e-01	err = 5.5793836675e-11	time = 0.02 sec
-[ Info: VUMPS 224:	obj = -8.862878980874e-01	err = 5.9912710624e-11	time = 0.03 sec
-[ Info: VUMPS 225:	obj = -8.862878980874e-01	err = 5.5433095161e-11	time = 0.03 sec
-[ Info: VUMPS 226:	obj = -8.862878980874e-01	err = 5.5259932758e-11	time = 0.03 sec
-[ Info: VUMPS 227:	obj = -8.862878980874e-01	err = 5.5334515585e-11	time = 0.03 sec
-[ Info: VUMPS 228:	obj = -8.862878980874e-01	err = 5.5367265928e-11	time = 0.03 sec
-[ Info: VUMPS 229:	obj = -8.862878980874e-01	err = 5.5669228209e-11	time = 0.03 sec
-[ Info: VUMPS 230:	obj = -8.862878980874e-01	err = 1.2870203660e-10	time = 0.06 sec
-[ Info: VUMPS 231:	obj = -8.862878980874e-01	err = 9.5902953804e-11	time = 0.05 sec
-[ Info: VUMPS 232:	obj = -8.862878980874e-01	err = 8.2657443795e-11	time = 0.04 sec
-[ Info: VUMPS 233:	obj = -8.862878980874e-01	err = 1.1202671025e-10	time = 0.03 sec
-[ Info: VUMPS 234:	obj = -8.862878980874e-01	err = 9.9921378101e-11	time = 0.03 sec
-[ Info: VUMPS 235:	obj = -8.862878980874e-01	err = 5.2966240423e-11	time = 0.03 sec
-[ Info: VUMPS 236:	obj = -8.862878980874e-01	err = 5.3006366140e-11	time = 0.03 sec
-[ Info: VUMPS 237:	obj = -8.862878980874e-01	err = 5.4969988490e-11	time = 0.03 sec
-[ Info: VUMPS 238:	obj = -8.862878980874e-01	err = 5.3036937147e-11	time = 0.03 sec
-[ Info: VUMPS 239:	obj = -8.862878980874e-01	err = 5.2974854628e-11	time = 0.03 sec
-[ Info: VUMPS 240:	obj = -8.862878980874e-01	err = 5.3066412887e-11	time = 0.03 sec
-[ Info: VUMPS 241:	obj = -8.862878980874e-01	err = 5.2897434286e-11	time = 0.03 sec
-[ Info: VUMPS 242:	obj = -8.862878980874e-01	err = 5.2813844342e-11	time = 0.03 sec
-[ Info: VUMPS 243:	obj = -8.862878980874e-01	err = 5.2817999691e-11	time = 0.03 sec
-[ Info: VUMPS 244:	obj = -8.862878980874e-01	err = 5.4379547470e-11	time = 0.03 sec
-[ Info: VUMPS 245:	obj = -8.862878980874e-01	err = 5.2951047463e-11	time = 0.03 sec
-[ Info: VUMPS 246:	obj = -8.862878980874e-01	err = 5.2946313572e-11	time = 0.03 sec
-[ Info: VUMPS 247:	obj = -8.862878980874e-01	err = 5.2826255725e-11	time = 0.03 sec
-[ Info: VUMPS 248:	obj = -8.862878980874e-01	err = 5.2832477486e-11	time = 0.03 sec
-[ Info: VUMPS 249:	obj = -8.862878980874e-01	err = 5.2853933154e-11	time = 0.03 sec
-[ Info: VUMPS 250:	obj = -8.862878980874e-01	err = 5.2941505326e-11	time = 0.03 sec
-[ Info: VUMPS 251:	obj = -8.862878980874e-01	err = 5.3204273831e-11	time = 0.03 sec
-[ Info: VUMPS 252:	obj = -8.862878980874e-01	err = 7.1352315398e-11	time = 0.05 sec
-[ Info: VUMPS 253:	obj = -8.862878980874e-01	err = 7.2069779014e-11	time = 0.03 sec
-[ Info: VUMPS 254:	obj = -8.862878980874e-01	err = 7.1435783262e-11	time = 0.03 sec
-[ Info: VUMPS 255:	obj = -8.862878980874e-01	err = 2.6540427189e-10	time = 0.05 sec
-[ Info: VUMPS 256:	obj = -8.862878980874e-01	err = 1.2459100212e-10	time = 0.08 sec
-[ Info: VUMPS 257:	obj = -8.862878980874e-01	err = 7.9535019000e-11	time = 0.05 sec
-[ Info: VUMPS 258:	obj = -8.862878980874e-01	err = 9.5195176352e-11	time = 0.05 sec
-[ Info: VUMPS 259:	obj = -8.862878980874e-01	err = 9.2004952435e-11	time = 0.05 sec
-[ Info: VUMPS 260:	obj = -8.862878980874e-01	err = 9.2983561462e-11	time = 0.04 sec
-[ Info: VUMPS 261:	obj = -8.862878980874e-01	err = 8.3117224581e-11	time = 0.05 sec
-[ Info: VUMPS 262:	obj = -8.862878980874e-01	err = 1.5819106604e-10	time = 0.04 sec
-[ Info: VUMPS 263:	obj = -8.862878980874e-01	err = 8.4087291620e-11	time = 0.04 sec
-[ Info: VUMPS 264:	obj = -8.862878980874e-01	err = 1.0037148070e-10	time = 0.04 sec
-[ Info: VUMPS 265:	obj = -8.862878980874e-01	err = 1.0422725516e-10	time = 0.06 sec
-[ Info: VUMPS 266:	obj = -8.862878980874e-01	err = 1.1122581785e-10	time = 0.04 sec
-[ Info: VUMPS 267:	obj = -8.862878980874e-01	err = 5.5430916499e-11	time = 0.04 sec
-[ Info: VUMPS 268:	obj = -8.862878980874e-01	err = 5.8977721798e-11	time = 0.03 sec
-[ Info: VUMPS 269:	obj = -8.862878980874e-01	err = 5.5407226961e-11	time = 0.03 sec
-[ Info: VUMPS 270:	obj = -8.862878980874e-01	err = 5.5421359078e-11	time = 0.21 sec
-[ Info: VUMPS 271:	obj = -8.862878980874e-01	err = 5.5461650973e-11	time = 0.03 sec
-[ Info: VUMPS 272:	obj = -8.862878980874e-01	err = 5.5516068411e-11	time = 0.03 sec
-[ Info: VUMPS 273:	obj = -8.862878980874e-01	err = 5.5301390961e-11	time = 0.03 sec
-[ Info: VUMPS 274:	obj = -8.862878980874e-01	err = 5.5628679726e-11	time = 0.03 sec
-[ Info: VUMPS 275:	obj = -8.862878980874e-01	err = 5.7142294401e-11	time = 0.03 sec
-[ Info: VUMPS 276:	obj = -8.862878980874e-01	err = 9.1958955056e-11	time = 0.05 sec
-[ Info: VUMPS 277:	obj = -8.862878980874e-01	err = 1.6568749384e-10	time = 0.04 sec
-[ Info: VUMPS 278:	obj = -8.862878980874e-01	err = 6.6761715141e-11	time = 0.04 sec
-[ Info: VUMPS 279:	obj = -8.862878980874e-01	err = 7.0094294787e-11	time = 0.03 sec
-[ Info: VUMPS 280:	obj = -8.862878980874e-01	err = 6.5066113456e-11	time = 0.03 sec
-[ Info: VUMPS 281:	obj = -8.862878980874e-01	err = 6.5187520477e-11	time = 0.03 sec
-[ Info: VUMPS 282:	obj = -8.862878980874e-01	err = 6.5033651663e-11	time = 0.03 sec
-[ Info: VUMPS 283:	obj = -8.862878980874e-01	err = 6.4922953860e-11	time = 0.03 sec
-[ Info: VUMPS 284:	obj = -8.862878980874e-01	err = 6.7560788576e-11	time = 0.03 sec
-[ Info: VUMPS 285:	obj = -8.862878980874e-01	err = 6.5202786842e-11	time = 0.03 sec
-[ Info: VUMPS 286:	obj = -8.862878980874e-01	err = 6.4740890521e-11	time = 0.03 sec
-[ Info: VUMPS 287:	obj = -8.862878980874e-01	err = 6.4684719121e-11	time = 0.03 sec
-[ Info: VUMPS 288:	obj = -8.862878980874e-01	err = 6.8395714074e-11	time = 0.03 sec
-[ Info: VUMPS 289:	obj = -8.862878980874e-01	err = 6.5175379613e-11	time = 0.03 sec
-[ Info: VUMPS 290:	obj = -8.862878980874e-01	err = 6.5151302835e-11	time = 0.03 sec
-[ Info: VUMPS 291:	obj = -8.862878980874e-01	err = 8.9918749464e-10	time = 0.04 sec
-[ Info: VUMPS 292:	obj = -8.862878980874e-01	err = 1.3012580604e-10	time = 0.07 sec
-[ Info: VUMPS 293:	obj = -8.862878980874e-01	err = 1.3272650327e-10	time = 0.06 sec
-[ Info: VUMPS 294:	obj = -8.862878980874e-01	err = 1.1097892363e-10	time = 0.05 sec
-[ Info: VUMPS 295:	obj = -8.862878980874e-01	err = 1.1846768600e-10	time = 0.05 sec
-[ Info: VUMPS 296:	obj = -8.862878980874e-01	err = 9.8873851293e-11	time = 0.06 sec
-[ Info: VUMPS 297:	obj = -8.862878980874e-01	err = 8.6754908504e-11	time = 0.05 sec
-[ Info: VUMPS 298:	obj = -8.862878980874e-01	err = 1.8386713998e-10	time = 0.04 sec
-[ Info: VUMPS 299:	obj = -8.862878980874e-01	err = 4.9214682549e-11	time = 0.04 sec
-[ Info: VUMPS 300:	obj = -8.862878980874e-01	err = 5.1220666282e-11	time = 0.03 sec
-[ Info: VUMPS 301:	obj = -8.862878980874e-01	err = 4.9294368720e-11	time = 0.03 sec
-[ Info: VUMPS 302:	obj = -8.862878980874e-01	err = 4.9394454081e-11	time = 0.04 sec
-[ Info: VUMPS 303:	obj = -8.862878980874e-01	err = 5.0050931411e-11	time = 0.04 sec
-[ Info: VUMPS 304:	obj = -8.862878980874e-01	err = 4.9485290287e-11	time = 0.04 sec
-[ Info: VUMPS 305:	obj = -8.862878980874e-01	err = 4.9485117322e-11	time = 0.05 sec
-[ Info: VUMPS 306:	obj = -8.862878980874e-01	err = 4.9400562584e-11	time = 0.04 sec
-[ Info: VUMPS 307:	obj = -8.862878980874e-01	err = 8.0370473935e-11	time = 0.08 sec
-[ Info: VUMPS 308:	obj = -8.862878980874e-01	err = 1.0500194811e-10	time = 0.08 sec
-[ Info: VUMPS 309:	obj = -8.862878980874e-01	err = 7.8444943070e-11	time = 0.07 sec
-[ Info: VUMPS 310:	obj = -8.862878980874e-01	err = 8.9319276364e-11	time = 0.06 sec
-[ Info: VUMPS 311:	obj = -8.862878980874e-01	err = 5.9033763479e-11	time = 0.05 sec
-[ Info: VUMPS 312:	obj = -8.862878980874e-01	err = 8.0174422677e-11	time = 0.07 sec
-[ Info: VUMPS 313:	obj = -8.862878980874e-01	err = 8.0105274577e-11	time = 0.04 sec
-[ Info: VUMPS 314:	obj = -8.862878980874e-01	err = 7.9879071897e-11	time = 0.04 sec
-[ Info: VUMPS 315:	obj = -8.862878980874e-01	err = 6.7914930086e-11	time = 0.06 sec
-[ Info: VUMPS 316:	obj = -8.862878980874e-01	err = 6.7644805100e-11	time = 0.04 sec
-[ Info: VUMPS 317:	obj = -8.862878980874e-01	err = 6.7801565679e-11	time = 0.04 sec
-[ Info: VUMPS 318:	obj = -8.862878980874e-01	err = 6.8325197783e-11	time = 0.21 sec
-[ Info: VUMPS 319:	obj = -8.862878980874e-01	err = 6.7826120749e-11	time = 0.03 sec
-[ Info: VUMPS 320:	obj = -8.862878980874e-01	err = 7.2621205313e-11	time = 0.03 sec
-[ Info: VUMPS 321:	obj = -8.862878980874e-01	err = 3.8210726894e-10	time = 0.05 sec
-[ Info: VUMPS 322:	obj = -8.862878980874e-01	err = 1.0235740670e-10	time = 0.09 sec
-[ Info: VUMPS 323:	obj = -8.862878980874e-01	err = 9.6428191884e-11	time = 0.07 sec
-[ Info: VUMPS 324:	obj = -8.862878980874e-01	err = 1.0034202926e-10	time = 0.07 sec
-[ Info: VUMPS 325:	obj = -8.862878980874e-01	err = 7.0797901542e-11	time = 0.05 sec
-[ Info: VUMPS 326:	obj = -8.862878980874e-01	err = 2.3373034775e-10	time = 0.06 sec
-[ Info: VUMPS 327:	obj = -8.862878980874e-01	err = 9.8970620406e-11	time = 0.10 sec
-[ Info: VUMPS 328:	obj = -8.862878980874e-01	err = 1.3577761530e-10	time = 0.08 sec
-[ Info: VUMPS 329:	obj = -8.862878980874e-01	err = 1.0567516615e-10	time = 0.08 sec
-[ Info: VUMPS 330:	obj = -8.862878980874e-01	err = 7.2032452782e-11	time = 0.07 sec
-[ Info: VUMPS 331:	obj = -8.862878980874e-01	err = 5.2541282385e-11	time = 0.05 sec
-[ Info: VUMPS 332:	obj = -8.862878980874e-01	err = 5.2821022372e-11	time = 0.04 sec
-[ Info: VUMPS 333:	obj = -8.862878980874e-01	err = 5.4626716043e-11	time = 0.04 sec
-[ Info: VUMPS 334:	obj = -8.862878980874e-01	err = 2.7830125061e-10	time = 0.05 sec
-[ Info: VUMPS 335:	obj = -8.862878980874e-01	err = 9.9239900298e-11	time = 0.08 sec
-[ Info: VUMPS 336:	obj = -8.862878980874e-01	err = 1.0349176036e-10	time = 0.06 sec
-[ Info: VUMPS 337:	obj = -8.862878980874e-01	err = 1.0452650046e-10	time = 0.06 sec
-[ Info: VUMPS 338:	obj = -8.862878980874e-01	err = 1.4555221521e-10	time = 0.07 sec
-[ Info: VUMPS 339:	obj = -8.862878980874e-01	err = 1.2059414831e-10	time = 0.07 sec
-[ Info: VUMPS 340:	obj = -8.862878980874e-01	err = 1.4914061305e-10	time = 0.07 sec
-[ Info: VUMPS 341:	obj = -8.862878980874e-01	err = 1.2389694233e-10	time = 0.07 sec
-[ Info: VUMPS 342:	obj = -8.862878980874e-01	err = 1.1053522260e-10	time = 0.07 sec
-[ Info: VUMPS 343:	obj = -8.862878980874e-01	err = 1.0533349208e-10	time = 0.06 sec
-[ Info: VUMPS 344:	obj = -8.862878980874e-01	err = 5.5087727545e-11	time = 0.05 sec
-[ Info: VUMPS 345:	obj = -8.862878980874e-01	err = 4.7044124461e-10	time = 0.07 sec
-[ Info: VUMPS 346:	obj = -8.862878980874e-01	err = 7.7993212022e-11	time = 0.11 sec
-[ Info: VUMPS 347:	obj = -8.862878980874e-01	err = 9.9188349166e-11	time = 0.19 sec
-[ Info: VUMPS 348:	obj = -8.862878980874e-01	err = 9.0546548017e-11	time = 0.06 sec
-[ Info: VUMPS 349:	obj = -8.862878980874e-01	err = 1.1229111874e-10	time = 0.04 sec
-[ Info: VUMPS 350:	obj = -8.862878980874e-01	err = 9.4673378845e-11	time = 0.06 sec
-[ Info: VUMPS 351:	obj = -8.862878980874e-01	err = 1.0171542217e-10	time = 0.04 sec
-[ Info: VUMPS 352:	obj = -8.862878980874e-01	err = 1.4319624203e-10	time = 0.04 sec
-[ Info: VUMPS 353:	obj = -8.862878980874e-01	err = 4.4804644943e-11	time = 0.04 sec
-[ Info: VUMPS 354:	obj = -8.862878980874e-01	err = 4.5253009904e-11	time = 0.03 sec
-[ Info: VUMPS 355:	obj = -8.862878980874e-01	err = 4.8526941357e-11	time = 0.03 sec
-[ Info: VUMPS 356:	obj = -8.862878980874e-01	err = 4.5267178026e-11	time = 0.03 sec
-[ Info: VUMPS 357:	obj = -8.862878980874e-01	err = 5.3269395139e-11	time = 0.03 sec
-[ Info: VUMPS 358:	obj = -8.862878980874e-01	err = 6.9373720406e-11	time = 0.06 sec
-[ Info: VUMPS 359:	obj = -8.862878980874e-01	err = 1.6373642528e-10	time = 0.05 sec
-[ Info: VUMPS 360:	obj = -8.862878980874e-01	err = 4.8545728886e-11	time = 0.04 sec
-[ Info: VUMPS 361:	obj = -8.862878980874e-01	err = 4.8166216362e-11	time = 0.03 sec
-[ Info: VUMPS 362:	obj = -8.862878980874e-01	err = 4.8091531818e-11	time = 0.03 sec
-[ Info: VUMPS 363:	obj = -8.862878980874e-01	err = 8.5244170558e-11	time = 0.06 sec
-[ Info: VUMPS 364:	obj = -8.862878980874e-01	err = 1.0011641995e-10	time = 0.05 sec
-[ Info: VUMPS 365:	obj = -8.862878980874e-01	err = 1.0253292457e-10	time = 0.05 sec
-[ Info: VUMPS 366:	obj = -8.862878980874e-01	err = 1.1336554420e-10	time = 0.05 sec
-[ Info: VUMPS 367:	obj = -8.862878980874e-01	err = 7.8522322860e-11	time = 0.05 sec
-[ Info: VUMPS 368:	obj = -8.862878980874e-01	err = 2.1253946297e-10	time = 0.04 sec
-[ Info: VUMPS 369:	obj = -8.862878980874e-01	err = 6.1130038172e-11	time = 0.04 sec
-[ Info: VUMPS 370:	obj = -8.862878980874e-01	err = 6.1383942312e-11	time = 0.03 sec
-[ Info: VUMPS 371:	obj = -8.862878980874e-01	err = 6.1510474358e-11	time = 0.03 sec
-[ Info: VUMPS 372:	obj = -8.862878980874e-01	err = 6.1809499146e-11	time = 0.03 sec
-[ Info: VUMPS 373:	obj = -8.862878980874e-01	err = 6.1698467469e-11	time = 0.03 sec
-[ Info: VUMPS 374:	obj = -8.862878980874e-01	err = 6.2385550089e-11	time = 0.03 sec
-[ Info: VUMPS 375:	obj = -8.862878980874e-01	err = 2.3629545490e-10	time = 0.05 sec
-[ Info: VUMPS 376:	obj = -8.862878980874e-01	err = 1.0499986243e-10	time = 0.08 sec
-[ Info: VUMPS 377:	obj = -8.862878980874e-01	err = 7.2603816424e-11	time = 0.06 sec
-[ Info: VUMPS 378:	obj = -8.862878980874e-01	err = 7.2618849446e-11	time = 0.04 sec
-[ Info: VUMPS 379:	obj = -8.862878980874e-01	err = 7.7260293051e-11	time = 0.03 sec
-[ Info: VUMPS 380:	obj = -8.862878980874e-01	err = 1.2108909054e-10	time = 0.07 sec
-[ Info: VUMPS 381:	obj = -8.862878980874e-01	err = 1.0656096009e-10	time = 0.08 sec
-[ Info: VUMPS 382:	obj = -8.862878980874e-01	err = 7.6401106319e-11	time = 0.05 sec
-[ Info: VUMPS 383:	obj = -8.862878980874e-01	err = 1.3364758610e-10	time = 0.05 sec
-[ Info: VUMPS 384:	obj = -8.862878980874e-01	err = 6.9742993842e-11	time = 0.05 sec
-[ Info: VUMPS 385:	obj = -8.862878980874e-01	err = 1.7345659259e-10	time = 0.05 sec
-[ Info: VUMPS 386:	obj = -8.862878980874e-01	err = 7.7533324291e-11	time = 0.04 sec
-[ Info: VUMPS 387:	obj = -8.862878980874e-01	err = 1.4396981605e-10	time = 0.06 sec
-[ Info: VUMPS 388:	obj = -8.862878980874e-01	err = 1.5404124820e-10	time = 0.05 sec
-[ Info: VUMPS 389:	obj = -8.862878980874e-01	err = 8.9440098189e-11	time = 0.07 sec
-[ Info: VUMPS 390:	obj = -8.862878980874e-01	err = 5.7181420413e-11	time = 0.04 sec
-[ Info: VUMPS 391:	obj = -8.862878980874e-01	err = 5.9548328290e-10	time = 0.21 sec
-[ Info: VUMPS 392:	obj = -8.862878980874e-01	err = 1.5282754945e-10	time = 0.07 sec
-[ Info: VUMPS 393:	obj = -8.862878980874e-01	err = 1.5131412340e-10	time = 0.05 sec
-[ Info: VUMPS 394:	obj = -8.862878980874e-01	err = 1.4049801953e-10	time = 0.04 sec
-[ Info: VUMPS 395:	obj = -8.862878980874e-01	err = 6.3217689116e-11	time = 0.04 sec
-[ Info: VUMPS 396:	obj = -8.862878980874e-01	err = 6.3150855078e-11	time = 0.03 sec
-[ Info: VUMPS 397:	obj = -8.862878980874e-01	err = 6.3381605325e-11	time = 0.03 sec
-[ Info: VUMPS 398:	obj = -8.862878980874e-01	err = 6.3282895468e-11	time = 0.03 sec
-[ Info: VUMPS 399:	obj = -8.862878980874e-01	err = 6.3281276721e-11	time = 0.03 sec
-┌ Warning: VUMPS cancel 400:	obj = -8.862878980874e-01	err = 6.3702904878e-11	time = 23.07 sec
-└ @ MPSKit ~/Projects/Julia/MPSKit.jl/src/algorithms/groundstate/vumps.jl:67
-

This page was generated using Literate.jl.

+[ Info: VUMPS init: obj = +4.207308597914e-02 err = 3.8417e-01 +[ Info: VUMPS 1: obj = -8.770246689397e-01 err = 8.9387480236e-02 time = 0.09 sec +[ Info: VUMPS 2: obj = -8.854224662459e-01 err = 1.2035494481e-02 time = 0.08 sec +[ Info: VUMPS 3: obj = -8.860742922774e-01 err = 4.4294789545e-03 time = 0.08 sec +[ Info: VUMPS 4: obj = -8.862108801823e-01 err = 1.9061849051e-03 time = 0.09 sec +[ Info: VUMPS 5: obj = -8.862567332668e-01 err = 1.1244944387e-03 time = 0.11 sec +[ Info: VUMPS 6: obj = -8.862739286226e-01 err = 8.4129140580e-04 time = 0.12 sec +[ Info: VUMPS 7: obj = -8.862812942419e-01 err = 6.3937860306e-04 time = 0.23 sec +[ Info: VUMPS 8: obj = -8.862846581258e-01 err = 5.2763554024e-04 time = 0.12 sec +[ Info: VUMPS 9: obj = -8.862862830189e-01 err = 4.2102561366e-04 time = 0.12 sec +[ Info: VUMPS 10: obj = -8.862870857559e-01 err = 3.3035934875e-04 time = 0.13 sec +[ Info: VUMPS 11: obj = -8.862874886043e-01 err = 2.5432646892e-04 time = 0.13 sec +[ Info: VUMPS 12: obj = -8.862876919660e-01 err = 1.9202079806e-04 time = 0.21 sec +[ Info: VUMPS 13: obj = -8.862877946054e-01 err = 1.4279990039e-04 time = 0.19 sec +[ Info: VUMPS 14: obj = -8.862878462682e-01 err = 1.0491846055e-04 time = 0.14 sec +[ Info: VUMPS 15: obj = -8.862878721892e-01 err = 7.6390575113e-05 time = 0.20 sec +[ Info: VUMPS 16: obj = -8.862878851596e-01 err = 5.5250778998e-05 time = 0.14 sec +[ Info: VUMPS 17: obj = -8.862878916381e-01 err = 3.9767417638e-05 time = 0.15 sec +[ Info: VUMPS 18: obj = -8.862878948705e-01 err = 2.8521655196e-05 time = 0.20 sec +[ Info: VUMPS 19: obj = -8.862878964826e-01 err = 2.0403457752e-05 time = 0.15 sec +[ Info: VUMPS 20: obj = -8.862878972865e-01 err = 1.4568719674e-05 time = 0.15 sec +[ Info: VUMPS 21: obj = -8.862878976876e-01 err = 1.0388173825e-05 time = 0.19 sec +[ Info: VUMPS 22: obj = -8.862878978877e-01 err = 7.3993990730e-06 time = 0.15 sec +[ Info: VUMPS 23: obj = -8.862878979876e-01 err = 5.2663271673e-06 time = 0.20 sec +[ Info: VUMPS 24: obj = -8.862878980375e-01 err = 3.7457858907e-06 time = 0.15 sec +[ Info: VUMPS 25: obj = -8.862878980625e-01 err = 2.6630244108e-06 time = 0.19 sec +[ Info: VUMPS 26: obj = -8.862878980749e-01 err = 1.8924316652e-06 time = 0.15 sec +[ Info: VUMPS 27: obj = -8.862878980812e-01 err = 1.3443459346e-06 time = 0.19 sec +[ Info: VUMPS 28: obj = -8.862878980843e-01 err = 9.5471634701e-07 time = 0.15 sec +[ Info: VUMPS 29: obj = -8.862878980859e-01 err = 6.7781844497e-07 time = 0.19 sec +[ Info: VUMPS 30: obj = -8.862878980866e-01 err = 4.8112158398e-07 time = 0.15 sec +[ Info: VUMPS 31: obj = -8.862878980870e-01 err = 3.4143706519e-07 time = 0.19 sec +[ Info: VUMPS 32: obj = -8.862878980872e-01 err = 2.4224840418e-07 time = 0.15 sec +[ Info: VUMPS 33: obj = -8.862878980873e-01 err = 1.7186139672e-07 time = 0.18 sec +[ Info: VUMPS 34: obj = -8.862878980874e-01 err = 1.2190374782e-07 time = 0.14 sec +[ Info: VUMPS 35: obj = -8.862878980874e-01 err = 8.6464933933e-08 time = 0.17 sec +[ Info: VUMPS 36: obj = -8.862878980874e-01 err = 6.1286598356e-08 time = 0.12 sec +[ Info: VUMPS 37: obj = -8.862878980874e-01 err = 4.3458741190e-08 time = 0.17 sec +[ Info: VUMPS 38: obj = -8.862878980874e-01 err = 3.0804670453e-08 time = 0.12 sec +[ Info: VUMPS 39: obj = -8.862878980874e-01 err = 2.1850363058e-08 time = 0.16 sec +[ Info: VUMPS 40: obj = -8.862878980874e-01 err = 1.5482006174e-08 time = 0.11 sec +[ Info: VUMPS 41: obj = -8.862878980874e-01 err = 1.0955627446e-08 time = 0.11 sec +[ Info: VUMPS 42: obj = -8.862878980874e-01 err = 7.7609982125e-09 time = 0.16 sec +[ Info: VUMPS 43: obj = -8.862878980874e-01 err = 5.4975161355e-09 time = 0.10 sec +[ Info: VUMPS 44: obj = -8.862878980874e-01 err = 3.8884417026e-09 time = 0.14 sec +[ Info: VUMPS 45: obj = -8.862878980874e-01 err = 2.7526126601e-09 time = 0.10 sec +[ Info: VUMPS 46: obj = -8.862878980874e-01 err = 1.9592691434e-09 time = 0.10 sec +[ Info: VUMPS 47: obj = -8.862878980874e-01 err = 1.3970406578e-09 time = 0.14 sec +[ Info: VUMPS 48: obj = -8.862878980874e-01 err = 9.8889708684e-10 time = 0.09 sec +[ Info: VUMPS 49: obj = -8.862878980874e-01 err = 6.9459808321e-10 time = 0.09 sec +[ Info: VUMPS 50: obj = -8.862878980874e-01 err = 5.0367864464e-10 time = 0.14 sec +[ Info: VUMPS 51: obj = -8.862878980874e-01 err = 3.6463958695e-10 time = 0.09 sec +[ Info: VUMPS 52: obj = -8.862878980874e-01 err = 2.6828514578e-10 time = 0.08 sec +[ Info: VUMPS 53: obj = -8.862878980874e-01 err = 1.9666569024e-10 time = 0.12 sec +[ Info: VUMPS 54: obj = -8.862878980874e-01 err = 1.7318181994e-10 time = 0.07 sec +[ Info: VUMPS 55: obj = -8.862878980874e-01 err = 1.1881164874e-10 time = 0.07 sec +[ Info: VUMPS 56: obj = -8.862878980874e-01 err = 1.5646264432e-10 time = 0.07 sec +[ Info: VUMPS 57: obj = -8.862878980874e-01 err = 9.6907766503e-11 time = 0.10 sec +[ Info: VUMPS 58: obj = -8.862878980874e-01 err = 7.7365993612e-11 time = 0.06 sec +[ Info: VUMPS 59: obj = -8.862878980874e-01 err = 1.2792482228e-10 time = 0.05 sec +[ Info: VUMPS 60: obj = -8.862878980874e-01 err = 4.5325752050e-11 time = 0.05 sec +[ Info: VUMPS 61: obj = -8.862878980874e-01 err = 4.5779636260e-11 time = 0.09 sec +[ Info: VUMPS 62: obj = -8.862878980874e-01 err = 4.5269457493e-11 time = 0.04 sec +[ Info: VUMPS 63: obj = -8.862878980874e-01 err = 7.0408420460e-11 time = 0.06 sec +[ Info: VUMPS 64: obj = -8.862878980874e-01 err = 1.0027819938e-10 time = 0.07 sec +[ Info: VUMPS 65: obj = -8.862878980874e-01 err = 1.8123837296e-10 time = 0.05 sec +[ Info: VUMPS 66: obj = -8.862878980874e-01 err = 1.1028483287e-10 time = 0.11 sec +[ Info: VUMPS 67: obj = -8.862878980874e-01 err = 1.9542191849e-10 time = 0.07 sec +[ Info: VUMPS 68: obj = -8.862878980874e-01 err = 1.3266968631e-10 time = 0.09 sec +[ Info: VUMPS 69: obj = -8.862878980874e-01 err = 1.5648232544e-10 time = 0.10 sec +[ Info: VUMPS 70: obj = -8.862878980874e-01 err = 1.6333828323e-10 time = 0.07 sec +[ Info: VUMPS 71: obj = -8.862878980874e-01 err = 1.3636380966e-10 time = 0.07 sec +[ Info: VUMPS 72: obj = -8.862878980874e-01 err = 1.8799364680e-10 time = 0.07 sec +[ Info: VUMPS 73: obj = -8.862878980874e-01 err = 1.4472792724e-10 time = 0.11 sec +[ Info: VUMPS 74: obj = -8.862878980874e-01 err = 1.1889880597e-10 time = 0.08 sec +[ Info: VUMPS 75: obj = -8.862878980874e-01 err = 7.8177559574e-11 time = 0.07 sec +[ Info: VUMPS 76: obj = -8.862878980874e-01 err = 1.2096744970e-10 time = 0.09 sec +[ Info: VUMPS 77: obj = -8.862878980874e-01 err = 4.4508066303e-11 time = 0.05 sec +[ Info: VUMPS 78: obj = -8.862878980874e-01 err = 4.5031266470e-11 time = 0.04 sec +[ Info: VUMPS 79: obj = -8.862878980874e-01 err = 4.5991825775e-11 time = 0.04 sec +[ Info: VUMPS 80: obj = -8.862878980874e-01 err = 4.4021673623e-11 time = 0.04 sec +[ Info: VUMPS 81: obj = -8.862878980874e-01 err = 4.7747796467e-11 time = 0.09 sec +[ Info: VUMPS 82: obj = -8.862878980874e-01 err = 1.1679442420e-10 time = 0.06 sec +[ Info: VUMPS 83: obj = -8.862878980874e-01 err = 7.6452116242e-11 time = 0.05 sec +[ Info: VUMPS 84: obj = -8.862878980874e-01 err = 7.6436900611e-11 time = 0.04 sec +[ Info: VUMPS 85: obj = -8.862878980874e-01 err = 7.7080848736e-11 time = 0.04 sec +[ Info: VUMPS 86: obj = -8.862878980874e-01 err = 1.3910926209e-10 time = 0.09 sec +[ Info: VUMPS 87: obj = -8.862878980874e-01 err = 8.5011084551e-11 time = 0.05 sec +[ Info: VUMPS 88: obj = -8.862878980874e-01 err = 1.2377629438e-10 time = 0.06 sec +[ Info: VUMPS 89: obj = -8.862878980874e-01 err = 1.1509132562e-10 time = 0.05 sec +[ Info: VUMPS 90: obj = -8.862878980874e-01 err = 3.6280763476e-11 time = 0.10 sec +[ Info: VUMPS 91: obj = -8.862878980874e-01 err = 3.6759581497e-11 time = 0.04 sec +[ Info: VUMPS 92: obj = -8.862878980874e-01 err = 4.1936246167e-11 time = 0.04 sec +[ Info: VUMPS 93: obj = -8.862878980874e-01 err = 3.6586232570e-11 time = 0.04 sec +[ Info: VUMPS 94: obj = -8.862878980874e-01 err = 3.6323263078e-11 time = 0.04 sec +[ Info: VUMPS 95: obj = -8.862878980874e-01 err = 3.9734901103e-11 time = 0.04 sec +[ Info: VUMPS 96: obj = -8.862878980874e-01 err = 7.4695673156e-11 time = 0.10 sec +[ Info: VUMPS 97: obj = -8.862878980874e-01 err = 7.4601743849e-11 time = 0.04 sec +[ Info: VUMPS 98: obj = -8.862878980874e-01 err = 7.3737980701e-11 time = 0.04 sec +[ Info: VUMPS 99: obj = -8.862878980874e-01 err = 7.3617435190e-11 time = 0.04 sec +[ Info: VUMPS 100: obj = -8.862878980874e-01 err = 1.4117716258e-10 time = 0.09 sec +[ Info: VUMPS 101: obj = -8.862878980874e-01 err = 1.0140172092e-10 time = 0.07 sec +[ Info: VUMPS 102: obj = -8.862878980874e-01 err = 9.0099910339e-11 time = 0.05 sec +[ Info: VUMPS 103: obj = -8.862878980874e-01 err = 9.5223763299e-11 time = 0.05 sec +[ Info: VUMPS 104: obj = -8.862878980874e-01 err = 9.8372998640e-11 time = 0.05 sec +[ Info: VUMPS 105: obj = -8.862878980874e-01 err = 7.9944348222e-11 time = 0.09 sec +[ Info: VUMPS 106: obj = -8.862878980874e-01 err = 1.1796835106e-10 time = 0.05 sec +[ Info: VUMPS 107: obj = -8.862878980874e-01 err = 2.5584999237e-11 time = 0.05 sec +[ Info: VUMPS 108: obj = -8.862878980874e-01 err = 2.5755393013e-11 time = 0.04 sec +[ Info: VUMPS 109: obj = -8.862878980874e-01 err = 2.5654408608e-11 time = 0.09 sec +[ Info: VUMPS 110: obj = -8.862878980874e-01 err = 2.8969243219e-11 time = 0.04 sec +[ Info: VUMPS 111: obj = -8.862878980874e-01 err = 2.5648857275e-11 time = 0.04 sec +[ Info: VUMPS 112: obj = -8.862878980874e-01 err = 2.6085432445e-11 time = 0.04 sec +[ Info: VUMPS 113: obj = -8.862878980874e-01 err = 2.5711795068e-11 time = 0.04 sec +[ Info: VUMPS 114: obj = -8.862878980874e-01 err = 3.1841855751e-11 time = 0.09 sec +[ Info: VUMPS 115: obj = -8.862878980874e-01 err = 2.6088486457e-11 time = 0.04 sec +[ Info: VUMPS 116: obj = -8.862878980874e-01 err = 2.5759528213e-11 time = 0.04 sec +[ Info: VUMPS 117: obj = -8.862878980874e-01 err = 2.5550720189e-11 time = 0.04 sec +[ Info: VUMPS 118: obj = -8.862878980874e-01 err = 2.5802019915e-11 time = 0.04 sec +[ Info: VUMPS 119: obj = -8.862878980874e-01 err = 2.5672788136e-11 time = 0.04 sec +[ Info: VUMPS 120: obj = -8.862878980874e-01 err = 2.6669410249e-11 time = 0.08 sec +[ Info: VUMPS 121: obj = -8.862878980874e-01 err = 2.5760097393e-11 time = 0.04 sec +[ Info: VUMPS 122: obj = -8.862878980874e-01 err = 3.1549960796e-11 time = 0.04 sec +[ Info: VUMPS 123: obj = -8.862878980874e-01 err = 3.1008997814e-11 time = 0.04 sec +[ Info: VUMPS 124: obj = -8.862878980874e-01 err = 3.1957370730e-11 time = 0.08 sec +[ Info: VUMPS 125: obj = -8.862878980874e-01 err = 1.0149285465e-10 time = 0.07 sec +[ Info: VUMPS 126: obj = -8.862878980874e-01 err = 1.0055628069e-10 time = 0.06 sec +[ Info: VUMPS 127: obj = -8.862878980874e-01 err = 2.5279001435e-10 time = 0.05 sec +[ Info: VUMPS 128: obj = -8.862878980874e-01 err = 1.0462278313e-10 time = 0.13 sec +[ Info: VUMPS 129: obj = -8.862878980874e-01 err = 6.5624092038e-11 time = 0.05 sec +[ Info: VUMPS 130: obj = -8.862878980874e-01 err = 1.3309340506e-10 time = 0.06 sec +[ Info: VUMPS 131: obj = -8.862878980874e-01 err = 7.2784603802e-11 time = 0.05 sec +[ Info: VUMPS 132: obj = -8.862878980874e-01 err = 7.2178376983e-11 time = 0.09 sec +[ Info: VUMPS 133: obj = -8.862878980874e-01 err = 9.2518414406e-11 time = 0.05 sec +[ Info: VUMPS 134: obj = -8.862878980874e-01 err = 1.4506025355e-10 time = 0.05 sec +[ Info: VUMPS 135: obj = -8.862878980874e-01 err = 3.7219458775e-10 time = 0.06 sec +[ Info: VUMPS 136: obj = -8.862878980874e-01 err = 1.3286196929e-10 time = 0.14 sec +[ Info: VUMPS 137: obj = -8.862878980874e-01 err = 7.4787469080e-11 time = 0.06 sec +[ Info: VUMPS 138: obj = -8.862878980874e-01 err = 1.4426681861e-10 time = 0.05 sec +[ Info: VUMPS 139: obj = -8.862878980874e-01 err = 6.7558225447e-11 time = 0.05 sec +[ Info: VUMPS 140: obj = -8.862878980874e-01 err = 7.3084667829e-11 time = 0.04 sec +[ Info: VUMPS 141: obj = -8.862878980874e-01 err = 8.0793055079e-11 time = 0.11 sec +[ Info: VUMPS 142: obj = -8.862878980874e-01 err = 8.0831600216e-11 time = 0.04 sec +[ Info: VUMPS 143: obj = -8.862878980874e-01 err = 1.7136182241e-10 time = 0.05 sec +[ Info: VUMPS 144: obj = -8.862878980874e-01 err = 9.1343736608e-11 time = 0.06 sec +[ Info: VUMPS 145: obj = -8.862878980874e-01 err = 8.0089047570e-11 time = 0.09 sec +[ Info: VUMPS 146: obj = -8.862878980874e-01 err = 1.2911200272e-10 time = 0.05 sec +[ Info: VUMPS 147: obj = -8.862878980874e-01 err = 3.2779317163e-11 time = 0.05 sec +[ Info: VUMPS 148: obj = -8.862878980874e-01 err = 3.1270641488e-11 time = 0.04 sec +[ Info: VUMPS 149: obj = -8.862878980874e-01 err = 3.1527595715e-11 time = 0.04 sec +[ Info: VUMPS 150: obj = -8.862878980874e-01 err = 3.1023821946e-11 time = 0.08 sec +[ Info: VUMPS 151: obj = -8.862878980874e-01 err = 3.0958513933e-11 time = 0.04 sec +[ Info: VUMPS 152: obj = -8.862878980874e-01 err = 3.1072862070e-11 time = 0.04 sec +[ Info: VUMPS 153: obj = -8.862878980874e-01 err = 3.5383015513e-11 time = 0.04 sec +[ Info: VUMPS 154: obj = -8.862878980874e-01 err = 9.8524530302e-11 time = 0.07 sec +[ Info: VUMPS 155: obj = -8.862878980874e-01 err = 2.5977122435e-10 time = 0.10 sec +[ Info: VUMPS 156: obj = -8.862878980874e-01 err = 1.0280150178e-10 time = 0.08 sec +[ Info: VUMPS 157: obj = -8.862878980874e-01 err = 8.5396875631e-11 time = 0.06 sec +[ Info: VUMPS 158: obj = -8.862878980874e-01 err = 1.4028825209e-10 time = 0.05 sec +[ Info: VUMPS 159: obj = -8.862878980874e-01 err = 6.5407958603e-11 time = 0.09 sec +[ Info: VUMPS 160: obj = -8.862878980874e-01 err = 8.6364408976e-11 time = 0.05 sec +[ Info: VUMPS 161: obj = -8.862878980874e-01 err = 1.2150351995e-10 time = 0.05 sec +[ Info: VUMPS 162: obj = -8.862878980874e-01 err = 2.4842761534e-11 time = 0.05 sec +[ Info: VUMPS 163: obj = -8.862878980874e-01 err = 2.5748890253e-11 time = 0.09 sec +[ Info: VUMPS 164: obj = -8.862878980874e-01 err = 3.7022391153e-11 time = 0.04 sec +[ Info: VUMPS 165: obj = -8.862878980874e-01 err = 2.5404069966e-11 time = 0.04 sec +[ Info: VUMPS 166: obj = -8.862878980874e-01 err = 2.4702363948e-11 time = 0.04 sec +[ Info: VUMPS 167: obj = -8.862878980874e-01 err = 2.4860774600e-11 time = 0.04 sec +[ Info: VUMPS 168: obj = -8.862878980874e-01 err = 3.2324495346e-11 time = 0.04 sec +[ Info: VUMPS 169: obj = -8.862878980874e-01 err = 2.4719353428e-11 time = 0.09 sec +[ Info: VUMPS 170: obj = -8.862878980874e-01 err = 2.5745806649e-11 time = 0.04 sec +[ Info: VUMPS 171: obj = -8.862878980874e-01 err = 3.2930196760e-11 time = 0.04 sec +[ Info: VUMPS 172: obj = -8.862878980874e-01 err = 2.5085034713e-11 time = 0.04 sec +[ Info: VUMPS 173: obj = -8.862878980874e-01 err = 2.5520036513e-11 time = 0.04 sec +[ Info: VUMPS 174: obj = -8.862878980874e-01 err = 2.5135503465e-11 time = 0.08 sec +[ Info: VUMPS 175: obj = -8.862878980874e-01 err = 2.8503905090e-11 time = 0.04 sec +[ Info: VUMPS 176: obj = -8.862878980874e-01 err = 2.5538540554e-11 time = 0.04 sec +[ Info: VUMPS 177: obj = -8.862878980874e-01 err = 2.4691024801e-11 time = 0.04 sec +[ Info: VUMPS 178: obj = -8.862878980874e-01 err = 2.5248726569e-11 time = 0.08 sec +[ Info: VUMPS 179: obj = -8.862878980874e-01 err = 2.4760967560e-11 time = 0.04 sec +[ Info: VUMPS 180: obj = -8.862878980874e-01 err = 2.4969607389e-11 time = 0.04 sec +[ Info: VUMPS 181: obj = -8.862878980874e-01 err = 2.5195199024e-11 time = 0.04 sec +[ Info: VUMPS 182: obj = -8.862878980874e-01 err = 2.4838502094e-11 time = 0.04 sec +[ Info: VUMPS 183: obj = -8.862878980874e-01 err = 2.6113063075e-11 time = 0.08 sec +[ Info: VUMPS 184: obj = -8.862878980874e-01 err = 2.9908520201e-11 time = 0.04 sec +[ Info: VUMPS 185: obj = -8.862878980874e-01 err = 1.0991210900e-09 time = 0.05 sec +[ Info: VUMPS 186: obj = -8.862878980874e-01 err = 1.3487615412e-10 time = 0.10 sec +[ Info: VUMPS 187: obj = -8.862878980874e-01 err = 9.3069733146e-11 time = 0.11 sec +[ Info: VUMPS 188: obj = -8.862878980874e-01 err = 5.9219170076e-11 time = 0.05 sec +[ Info: VUMPS 189: obj = -8.862878980874e-01 err = 1.2416000800e-10 time = 0.05 sec +[ Info: VUMPS 190: obj = -8.862878980874e-01 err = 1.3881531446e-10 time = 0.07 sec +[ Info: VUMPS 191: obj = -8.862878980874e-01 err = 1.2937777179e-10 time = 0.12 sec +[ Info: VUMPS 192: obj = -8.862878980874e-01 err = 1.7091864452e-10 time = 0.07 sec +[ Info: VUMPS 193: obj = -8.862878980874e-01 err = 1.3809278028e-10 time = 0.07 sec +[ Info: VUMPS 194: obj = -8.862878980874e-01 err = 1.3718743400e-10 time = 0.07 sec +[ Info: VUMPS 195: obj = -8.862878980874e-01 err = 1.2999331067e-10 time = 0.12 sec +[ Info: VUMPS 196: obj = -8.862878980874e-01 err = 1.0286658958e-10 time = 0.06 sec +[ Info: VUMPS 197: obj = -8.862878980874e-01 err = 8.5927628448e-11 time = 0.06 sec +[ Info: VUMPS 198: obj = -8.862878980874e-01 err = 9.8964650709e-11 time = 0.11 sec +[ Info: VUMPS 199: obj = -8.862878980874e-01 err = 1.1996588094e-10 time = 0.05 sec +[ Info: VUMPS 200: obj = -8.862878980874e-01 err = 5.6341554935e-11 time = 0.04 sec +[ Info: VUMPS 201: obj = -8.862878980874e-01 err = 7.9000713006e-10 time = 0.06 sec +[ Info: VUMPS 202: obj = -8.862878980874e-01 err = 1.5435808912e-10 time = 0.14 sec +[ Info: VUMPS 203: obj = -8.862878980874e-01 err = 9.5848753583e-11 time = 0.08 sec +[ Info: VUMPS 204: obj = -8.862878980874e-01 err = 1.0637816317e-10 time = 0.07 sec +[ Info: VUMPS 205: obj = -8.862878980874e-01 err = 8.1143149644e-11 time = 0.06 sec +[ Info: VUMPS 206: obj = -8.862878980874e-01 err = 1.0842849551e-10 time = 0.09 sec +[ Info: VUMPS 207: obj = -8.862878980874e-01 err = 5.5594973835e-11 time = 0.05 sec +[ Info: VUMPS 208: obj = -8.862878980874e-01 err = 5.5599308569e-11 time = 0.04 sec +[ Info: VUMPS 209: obj = -8.862878980874e-01 err = 4.5664641092e-10 time = 0.05 sec +[ Info: VUMPS 210: obj = -8.862878980874e-01 err = 1.0815766206e-10 time = 0.13 sec +[ Info: VUMPS 211: obj = -8.862878980874e-01 err = 9.2896882921e-11 time = 0.07 sec +[ Info: VUMPS 212: obj = -8.862878980874e-01 err = 8.3630387677e-11 time = 0.05 sec +[ Info: VUMPS 213: obj = -8.862878980874e-01 err = 8.9177443058e-11 time = 0.07 sec +[ Info: VUMPS 214: obj = -8.862878980874e-01 err = 8.4590201305e-11 time = 0.11 sec +[ Info: VUMPS 215: obj = -8.862878980874e-01 err = 1.2973719725e-10 time = 0.07 sec +[ Info: VUMPS 216: obj = -8.862878980874e-01 err = 8.7532935985e-11 time = 0.07 sec +[ Info: VUMPS 217: obj = -8.862878980874e-01 err = 1.0094432065e-10 time = 0.05 sec +[ Info: VUMPS 218: obj = -8.862878980874e-01 err = 7.2901490544e-11 time = 0.10 sec +[ Info: VUMPS 219: obj = -8.862878980874e-01 err = 7.3030080658e-11 time = 0.04 sec +[ Info: VUMPS 220: obj = -8.862878980874e-01 err = 7.2814253578e-11 time = 0.04 sec +[ Info: VUMPS 221: obj = -8.862878980874e-01 err = 7.2721737007e-11 time = 0.04 sec +[ Info: VUMPS 222: obj = -8.862878980874e-01 err = 7.2575908766e-11 time = 0.04 sec +[ Info: VUMPS 223: obj = -8.862878980874e-01 err = 1.0886060787e-10 time = 0.09 sec +[ Info: VUMPS 224: obj = -8.862878980874e-01 err = 9.8891539544e-11 time = 0.05 sec +[ Info: VUMPS 225: obj = -8.862878980874e-01 err = 1.0482184140e-10 time = 0.05 sec +[ Info: VUMPS 226: obj = -8.862878980874e-01 err = 1.9012146089e-11 time = 0.04 sec +[ Info: VUMPS 227: obj = -8.862878980874e-01 err = 1.9322391656e-11 time = 0.04 sec +[ Info: VUMPS 228: obj = -8.862878980874e-01 err = 3.0618708554e-11 time = 0.08 sec +[ Info: VUMPS 229: obj = -8.862878980874e-01 err = 7.3510645058e-11 time = 0.06 sec +[ Info: VUMPS 230: obj = -8.862878980874e-01 err = 3.8581370951e-10 time = 0.05 sec +[ Info: VUMPS 231: obj = -8.862878980874e-01 err = 1.3190179067e-10 time = 0.09 sec +[ Info: VUMPS 232: obj = -8.862878980874e-01 err = 9.8345519722e-11 time = 0.11 sec +[ Info: VUMPS 233: obj = -8.862878980874e-01 err = 9.8692106436e-11 time = 0.06 sec +[ Info: VUMPS 234: obj = -8.862878980874e-01 err = 5.0517584685e-11 time = 0.05 sec +[ Info: VUMPS 235: obj = -8.862878980874e-01 err = 5.2479684150e-11 time = 0.04 sec +[ Info: VUMPS 236: obj = -8.862878980874e-01 err = 1.0842073163e-10 time = 0.11 sec +[ Info: VUMPS 237: obj = -8.862878980874e-01 err = 9.0981410086e-11 time = 0.06 sec +[ Info: VUMPS 238: obj = -8.862878980874e-01 err = 1.2392458729e-10 time = 0.05 sec +[ Info: VUMPS 239: obj = -8.862878980874e-01 err = 1.4216588231e-10 time = 0.06 sec +[ Info: VUMPS 240: obj = -8.862878980874e-01 err = 1.0202004549e-10 time = 0.12 sec +[ Info: VUMPS 241: obj = -8.862878980874e-01 err = 9.2663307948e-11 time = 0.07 sec +[ Info: VUMPS 242: obj = -8.862878980874e-01 err = 7.1213927824e-11 time = 0.06 sec +[ Info: VUMPS 243: obj = -8.862878980874e-01 err = 7.0990626515e-11 time = 0.06 sec +[ Info: VUMPS 244: obj = -8.862878980874e-01 err = 7.1367091900e-11 time = 0.04 sec +[ Info: VUMPS 245: obj = -8.862878980874e-01 err = 1.8669503143e-10 time = 0.09 sec +[ Info: VUMPS 246: obj = -8.862878980874e-01 err = 1.5282765127e-10 time = 0.08 sec +[ Info: VUMPS 247: obj = -8.862878980874e-01 err = 9.6415117857e-11 time = 0.07 sec +[ Info: VUMPS 248: obj = -8.862878980874e-01 err = 1.4058659748e-10 time = 0.11 sec +[ Info: VUMPS 249: obj = -8.862878980874e-01 err = 9.7187257969e-11 time = 0.07 sec +[ Info: VUMPS 250: obj = -8.862878980874e-01 err = 9.7759239537e-11 time = 0.05 sec +[ Info: VUMPS 251: obj = -8.862878980874e-01 err = 7.9875821567e-11 time = 0.07 sec +[ Info: VUMPS 252: obj = -8.862878980874e-01 err = 8.0093896508e-11 time = 0.08 sec +[ Info: VUMPS 253: obj = -8.862878980874e-01 err = 8.0057483179e-11 time = 0.04 sec +[ Info: VUMPS 254: obj = -8.862878980874e-01 err = 8.0011136205e-11 time = 0.04 sec +[ Info: VUMPS 255: obj = -8.862878980874e-01 err = 1.7883745718e-10 time = 0.05 sec +[ Info: VUMPS 256: obj = -8.862878980874e-01 err = 2.8363520443e-10 time = 0.06 sec +[ Info: VUMPS 257: obj = -8.862878980874e-01 err = 1.4712790190e-10 time = 0.12 sec +[ Info: VUMPS 258: obj = -8.862878980874e-01 err = 8.0262189893e-11 time = 0.05 sec +[ Info: VUMPS 259: obj = -8.862878980874e-01 err = 1.3607892547e-10 time = 0.05 sec +[ Info: VUMPS 260: obj = -8.862878980874e-01 err = 3.5585465386e-11 time = 0.09 sec +[ Info: VUMPS 261: obj = -8.862878980874e-01 err = 3.5886789540e-11 time = 0.04 sec +[ Info: VUMPS 262: obj = -8.862878980874e-01 err = 3.5821881811e-11 time = 0.04 sec +[ Info: VUMPS 263: obj = -8.862878980874e-01 err = 3.5295520311e-11 time = 0.04 sec +[ Info: VUMPS 264: obj = -8.862878980874e-01 err = 3.5725163978e-11 time = 0.04 sec +[ Info: VUMPS 265: obj = -8.862878980874e-01 err = 3.5743028152e-11 time = 0.09 sec +[ Info: VUMPS 266: obj = -8.862878980874e-01 err = 3.5399343199e-11 time = 0.04 sec +[ Info: VUMPS 267: obj = -8.862878980874e-01 err = 3.5477332519e-11 time = 0.04 sec +[ Info: VUMPS 268: obj = -8.862878980874e-01 err = 3.5528256597e-11 time = 0.04 sec +[ Info: VUMPS 269: obj = -8.862878980874e-01 err = 3.5192330992e-11 time = 0.04 sec +[ Info: VUMPS 270: obj = -8.862878980874e-01 err = 3.5801828668e-11 time = 0.04 sec +[ Info: VUMPS 271: obj = -8.862878980874e-01 err = 3.4963884022e-11 time = 0.08 sec +[ Info: VUMPS 272: obj = -8.862878980874e-01 err = 3.5992081275e-11 time = 0.04 sec +[ Info: VUMPS 273: obj = -8.862878980874e-01 err = 3.5473635188e-11 time = 0.04 sec +[ Info: VUMPS 274: obj = -8.862878980874e-01 err = 3.5704579427e-11 time = 0.04 sec +[ Info: VUMPS 275: obj = -8.862878980874e-01 err = 3.5442668182e-11 time = 0.04 sec +[ Info: VUMPS 276: obj = -8.862878980874e-01 err = 3.5482076714e-11 time = 0.08 sec +[ Info: VUMPS 277: obj = -8.862878980874e-01 err = 3.9356745202e-11 time = 0.04 sec +[ Info: VUMPS 278: obj = -8.862878980874e-01 err = 4.0210942413e-11 time = 0.04 sec +[ Info: VUMPS 279: obj = -8.862878980874e-01 err = 3.5167580179e-11 time = 0.04 sec +[ Info: VUMPS 280: obj = -8.862878980874e-01 err = 3.6493383635e-11 time = 0.04 sec +[ Info: VUMPS 281: obj = -8.862878980874e-01 err = 3.5805399155e-11 time = 0.08 sec +[ Info: VUMPS 282: obj = -8.862878980874e-01 err = 3.5166101177e-11 time = 0.04 sec +[ Info: VUMPS 283: obj = -8.862878980874e-01 err = 3.7246847607e-11 time = 0.04 sec +[ Info: VUMPS 284: obj = -8.862878980874e-01 err = 4.0568537077e-11 time = 0.04 sec +[ Info: VUMPS 285: obj = -8.862878980874e-01 err = 3.5491580364e-11 time = 0.04 sec +[ Info: VUMPS 286: obj = -8.862878980874e-01 err = 3.5099655639e-11 time = 0.08 sec +[ Info: VUMPS 287: obj = -8.862878980874e-01 err = 3.5165898259e-11 time = 0.04 sec +[ Info: VUMPS 288: obj = -8.862878980874e-01 err = 3.5582900108e-11 time = 0.04 sec +[ Info: VUMPS 289: obj = -8.862878980874e-01 err = 3.5267676837e-11 time = 0.04 sec +[ Info: VUMPS 290: obj = -8.862878980874e-01 err = 3.5547016549e-11 time = 0.08 sec +[ Info: VUMPS 291: obj = -8.862878980874e-01 err = 3.5194773385e-11 time = 0.04 sec +[ Info: VUMPS 292: obj = -8.862878980874e-01 err = 3.8861800688e-11 time = 0.04 sec +[ Info: VUMPS 293: obj = -8.862878980874e-01 err = 1.7694618399e-10 time = 0.06 sec +[ Info: VUMPS 294: obj = -8.862878980874e-01 err = 9.6879691257e-11 time = 0.08 sec +[ Info: VUMPS 295: obj = -8.862878980874e-01 err = 1.9734638828e-10 time = 0.09 sec +[ Info: VUMPS 296: obj = -8.862878980874e-01 err = 9.5735210562e-11 time = 0.07 sec +[ Info: VUMPS 297: obj = -8.862878980874e-01 err = 9.8202831809e-11 time = 0.06 sec +[ Info: VUMPS 298: obj = -8.862878980874e-01 err = 1.0619064963e-10 time = 0.05 sec +[ Info: VUMPS 299: obj = -8.862878980874e-01 err = 6.3326732099e-11 time = 0.09 sec +[ Info: VUMPS 300: obj = -8.862878980874e-01 err = 6.3186774093e-11 time = 0.04 sec +[ Info: VUMPS 301: obj = -8.862878980874e-01 err = 6.3238257167e-11 time = 0.04 sec +[ Info: VUMPS 302: obj = -8.862878980874e-01 err = 7.8177257008e-11 time = 0.06 sec +[ Info: VUMPS 303: obj = -8.862878980874e-01 err = 7.8085760822e-11 time = 0.08 sec +[ Info: VUMPS 304: obj = -8.862878980874e-01 err = 7.3527317393e-11 time = 0.04 sec +[ Info: VUMPS 305: obj = -8.862878980874e-01 err = 9.9416857299e-11 time = 0.04 sec +[ Info: VUMPS 306: obj = -8.862878980874e-01 err = 5.4494619202e-11 time = 0.05 sec +[ Info: VUMPS 307: obj = -8.862878980874e-01 err = 5.7062728379e-11 time = 0.04 sec +[ Info: VUMPS 308: obj = -8.862878980874e-01 err = 5.4603016721e-11 time = 0.08 sec +[ Info: VUMPS 309: obj = -8.862878980874e-01 err = 5.4567688376e-11 time = 0.04 sec +[ Info: VUMPS 310: obj = -8.862878980874e-01 err = 5.7938510837e-11 time = 0.04 sec +[ Info: VUMPS 311: obj = -8.862878980874e-01 err = 2.0622949240e-10 time = 0.06 sec +[ Info: VUMPS 312: obj = -8.862878980874e-01 err = 1.3121811134e-10 time = 0.08 sec +[ Info: VUMPS 313: obj = -8.862878980874e-01 err = 9.1235627109e-11 time = 0.10 sec +[ Info: VUMPS 314: obj = -8.862878980874e-01 err = 8.4669915126e-11 time = 0.06 sec +[ Info: VUMPS 315: obj = -8.862878980874e-01 err = 2.3252823264e-10 time = 0.05 sec +[ Info: VUMPS 316: obj = -8.862878980874e-01 err = 1.1096003071e-10 time = 0.13 sec +[ Info: VUMPS 317: obj = -8.862878980874e-01 err = 1.0920664731e-10 time = 0.06 sec +[ Info: VUMPS 318: obj = -8.862878980874e-01 err = 8.8285347864e-11 time = 0.06 sec +[ Info: VUMPS 319: obj = -8.862878980874e-01 err = 2.0864332560e-10 time = 0.06 sec +[ Info: VUMPS 320: obj = -8.862878980874e-01 err = 1.3027532605e-10 time = 0.13 sec +[ Info: VUMPS 321: obj = -8.862878980874e-01 err = 9.1835678484e-11 time = 0.06 sec +[ Info: VUMPS 322: obj = -8.862878980874e-01 err = 1.0506692631e-10 time = 0.07 sec +[ Info: VUMPS 323: obj = -8.862878980874e-01 err = 6.5764134932e-11 time = 0.05 sec +[ Info: VUMPS 324: obj = -8.862878980874e-01 err = 8.5615212507e-11 time = 0.10 sec +[ Info: VUMPS 325: obj = -8.862878980874e-01 err = 1.5884913185e-10 time = 0.05 sec +[ Info: VUMPS 326: obj = -8.862878980874e-01 err = 7.5397480867e-11 time = 0.05 sec +[ Info: VUMPS 327: obj = -8.862878980874e-01 err = 1.3672488066e-10 time = 0.06 sec +[ Info: VUMPS 328: obj = -8.862878980874e-01 err = 1.2905960387e-10 time = 0.11 sec +[ Info: VUMPS 329: obj = -8.862878980874e-01 err = 1.1137546210e-10 time = 0.07 sec +[ Info: VUMPS 330: obj = -8.862878980874e-01 err = 7.6064748012e-11 time = 0.05 sec +[ Info: VUMPS 331: obj = -8.862878980874e-01 err = 8.2230706651e-11 time = 0.06 sec +[ Info: VUMPS 332: obj = -8.862878980874e-01 err = 1.5547070838e-10 time = 0.09 sec +[ Info: VUMPS 333: obj = -8.862878980874e-01 err = 8.4530602671e-11 time = 0.05 sec +[ Info: VUMPS 334: obj = -8.862878980874e-01 err = 2.7703069729e-10 time = 0.05 sec +[ Info: VUMPS 335: obj = -8.862878980874e-01 err = 1.2843108098e-10 time = 0.07 sec +[ Info: VUMPS 336: obj = -8.862878980874e-01 err = 7.7139997032e-11 time = 0.09 sec +[ Info: VUMPS 337: obj = -8.862878980874e-01 err = 1.5230480609e-10 time = 0.05 sec +[ Info: VUMPS 338: obj = -8.862878980874e-01 err = 1.4349332630e-10 time = 0.05 sec +[ Info: VUMPS 339: obj = -8.862878980874e-01 err = 1.8791131229e-10 time = 0.07 sec +[ Info: VUMPS 340: obj = -8.862878980874e-01 err = 5.6705763103e-11 time = 0.11 sec +[ Info: VUMPS 341: obj = -8.862878980874e-01 err = 5.6628206369e-11 time = 0.04 sec +[ Info: VUMPS 342: obj = -8.862878980874e-01 err = 5.7700869354e-11 time = 0.04 sec +[ Info: VUMPS 343: obj = -8.862878980874e-01 err = 9.5014822831e-11 time = 0.07 sec +[ Info: VUMPS 344: obj = -8.862878980874e-01 err = 9.9584310546e-11 time = 0.09 sec +[ Info: VUMPS 345: obj = -8.862878980874e-01 err = 1.0944426167e-10 time = 0.04 sec +[ Info: VUMPS 346: obj = -8.862878980874e-01 err = 4.1610580123e-11 time = 0.04 sec +[ Info: VUMPS 347: obj = -8.862878980874e-01 err = 2.9414073597e-11 time = 0.04 sec +[ Info: VUMPS 348: obj = -8.862878980874e-01 err = 2.9723554637e-11 time = 0.04 sec +[ Info: VUMPS 349: obj = -8.862878980874e-01 err = 2.9370382842e-11 time = 0.08 sec +[ Info: VUMPS 350: obj = -8.862878980874e-01 err = 2.9069190284e-11 time = 0.04 sec +[ Info: VUMPS 351: obj = -8.862878980874e-01 err = 2.9200689531e-11 time = 0.04 sec +[ Info: VUMPS 352: obj = -8.862878980874e-01 err = 1.0829490368e-10 time = 0.06 sec +[ Info: VUMPS 353: obj = -8.862878980874e-01 err = 1.0018375647e-10 time = 0.11 sec +[ Info: VUMPS 354: obj = -8.862878980874e-01 err = 1.5362554440e-10 time = 0.06 sec +[ Info: VUMPS 355: obj = -8.862878980874e-01 err = 9.4013179693e-11 time = 0.07 sec +[ Info: VUMPS 356: obj = -8.862878980874e-01 err = 8.5844015408e-11 time = 0.06 sec +[ Info: VUMPS 357: obj = -8.862878980874e-01 err = 1.1938734236e-10 time = 0.09 sec +[ Info: VUMPS 358: obj = -8.862878980874e-01 err = 5.4442781639e-11 time = 0.04 sec +[ Info: VUMPS 359: obj = -8.862878980874e-01 err = 5.6747362650e-11 time = 0.04 sec +[ Info: VUMPS 360: obj = -8.862878980874e-01 err = 1.1602629725e-10 time = 0.07 sec +[ Info: VUMPS 361: obj = -8.862878980874e-01 err = 1.2693714656e-10 time = 0.06 sec +[ Info: VUMPS 362: obj = -8.862878980874e-01 err = 1.3334525033e-10 time = 0.11 sec +[ Info: VUMPS 363: obj = -8.862878980874e-01 err = 9.4883693020e-11 time = 0.07 sec +[ Info: VUMPS 364: obj = -8.862878980874e-01 err = 8.9430760837e-11 time = 0.07 sec +[ Info: VUMPS 365: obj = -8.862878980874e-01 err = 1.0615371329e-10 time = 0.11 sec +[ Info: VUMPS 366: obj = -8.862878980874e-01 err = 1.1358908029e-10 time = 0.04 sec +[ Info: VUMPS 367: obj = -8.862878980874e-01 err = 1.2828241179e-10 time = 0.05 sec +[ Info: VUMPS 368: obj = -8.862878980874e-01 err = 7.5500082303e-11 time = 0.05 sec +[ Info: VUMPS 369: obj = -8.862878980874e-01 err = 1.7133532560e-10 time = 0.05 sec +[ Info: VUMPS 370: obj = -8.862878980874e-01 err = 6.2722200745e-11 time = 0.09 sec +[ Info: VUMPS 371: obj = -8.862878980874e-01 err = 6.2778165324e-11 time = 0.04 sec +[ Info: VUMPS 372: obj = -8.862878980874e-01 err = 6.4224600150e-10 time = 0.06 sec +[ Info: VUMPS 373: obj = -8.862878980874e-01 err = 1.4567170198e-10 time = 0.09 sec +[ Info: VUMPS 374: obj = -8.862878980874e-01 err = 1.0380674404e-10 time = 0.11 sec +[ Info: VUMPS 375: obj = -8.862878980874e-01 err = 1.0822040195e-10 time = 0.07 sec +[ Info: VUMPS 376: obj = -8.862878980874e-01 err = 1.0520173008e-10 time = 0.06 sec +[ Info: VUMPS 377: obj = -8.862878980874e-01 err = 6.7365662418e-11 time = 0.10 sec +[ Info: VUMPS 378: obj = -8.862878980874e-01 err = 6.7760750536e-11 time = 0.04 sec +[ Info: VUMPS 379: obj = -8.862878980874e-01 err = 6.7722699479e-11 time = 0.04 sec +[ Info: VUMPS 380: obj = -8.862878980874e-01 err = 6.7250908434e-11 time = 0.04 sec +[ Info: VUMPS 381: obj = -8.862878980874e-01 err = 1.4694592798e-10 time = 0.06 sec +[ Info: VUMPS 382: obj = -8.862878980874e-01 err = 8.9730375422e-11 time = 0.11 sec +[ Info: VUMPS 383: obj = -8.862878980874e-01 err = 1.6221755374e-10 time = 0.06 sec +[ Info: VUMPS 384: obj = -8.862878980874e-01 err = 1.2999407274e-10 time = 0.08 sec +[ Info: VUMPS 385: obj = -8.862878980874e-01 err = 8.5732018525e-11 time = 0.06 sec +[ Info: VUMPS 386: obj = -8.862878980874e-01 err = 1.6277251600e-10 time = 0.09 sec +[ Info: VUMPS 387: obj = -8.862878980874e-01 err = 7.1550742938e-11 time = 0.04 sec +[ Info: VUMPS 388: obj = -8.862878980874e-01 err = 7.4376591685e-11 time = 0.06 sec +[ Info: VUMPS 389: obj = -8.862878980874e-01 err = 7.4713904887e-11 time = 0.04 sec +[ Info: VUMPS 390: obj = -8.862878980874e-01 err = 7.4436898750e-11 time = 0.08 sec +[ Info: VUMPS 391: obj = -8.862878980874e-01 err = 7.5772899650e-11 time = 0.04 sec +[ Info: VUMPS 392: obj = -8.862878980874e-01 err = 7.4943197420e-11 time = 0.04 sec +[ Info: VUMPS 393: obj = -8.862878980874e-01 err = 7.4400646683e-11 time = 0.04 sec +[ Info: VUMPS 394: obj = -8.862878980874e-01 err = 7.5613615370e-11 time = 0.04 sec +[ Info: VUMPS 395: obj = -8.862878980874e-01 err = 1.0859523215e-10 time = 0.11 sec +[ Info: VUMPS 396: obj = -8.862878980874e-01 err = 9.0566692582e-11 time = 0.05 sec +[ Info: VUMPS 397: obj = -8.862878980874e-01 err = 4.3667065720e-11 time = 0.05 sec +[ Info: VUMPS 398: obj = -8.862878980874e-01 err = 4.3513888787e-11 time = 0.04 sec +[ Info: VUMPS 399: obj = -8.862878980874e-01 err = 4.4283893567e-11 time = 0.04 sec +┌ Warning: VUMPS cancel 400: obj = -8.862878980874e-01 err = 4.3759074890e-11 time = 28.78 sec +└ @ MPSKit ~/Projects/MPSKit.jl/src/algorithms/groundstate/vumps.jl:67 +

This page was generated using Literate.jl.

diff --git a/dev/examples/quantum1d/4.xxz-heisenberg/main.ipynb b/dev/examples/quantum1d/4.xxz-heisenberg/main.ipynb index 568b74c7..bbb1fca7 100644 --- a/dev/examples/quantum1d/4.xxz-heisenberg/main.ipynb +++ b/dev/examples/quantum1d/4.xxz-heisenberg/main.ipynb @@ -270,11 +270,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.10.4" + "version": "1.11.1" }, "kernelspec": { - "name": "julia-1.10", - "display_name": "Julia 1.10.4", + "name": "julia-1.11", + "display_name": "Julia 1.11.1", "language": "julia" } }, diff --git a/dev/examples/quantum1d/5.haldane-spt/index.html b/dev/examples/quantum1d/5.haldane-spt/index.html index 8201567f..03d219a5 100644 --- a/dev/examples/quantum1d/5.haldane-spt/index.html +++ b/dev/examples/quantum1d/5.haldane-spt/index.html @@ -33,834 +33,840 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Nevertheless, using the symmetry, this can be remedied rather easily, by imposing the groundstate to belong to a single class, and comparing the results. We can readily obtain 3 different criteria for determining the SPT phase of the groundstate.

Firstly, we can compare variational energies for states of similar bond dimensions. As we expect the state of the wrong SPT phase to have to expend some of its expressiveness in correcting the SPT, it should have a harder time reaching lower energies.

Secondly, when inspecting the spectrum of the transfer matrix, we should see that the wrong SPT phase has a dominant value that is not in the trivial sector, which leads to a non-injective MPS.

Finally, the entanglement spectrum of the wrong SPT phase will show degeneracies of all singular values, which can again be attributed to an attempt to mimick the spectrum of the right SPT phase.

V_plus = SU2Space(0 => 10, 1 => 5, 2 => 3)
 ψ_plus = InfiniteMPS(ℋ, V_plus)
 ψ_plus, = find_groundstate(ψ_plus, H, VUMPS(; maxiter=100))
-E_plus = expectation_value(ψ_plus, H)
-1.4014193313393015 + 1.1927762270867084e-16im
V_minus = SU2Space(1 // 2 => 10, 3 // 2 => 5, 5 // 2 => 3)
+E_plus = expectation_value(ψ_plus, H)
-1.4014193313392995 - 4.940181871031602e-18im
V_minus = SU2Space(1 // 2 => 10, 3 // 2 => 5, 5 // 2 => 3)
 ψ_minus = InfiniteMPS(ℋ, V_minus)
 ψ_minus, = find_groundstate(ψ_minus, H, VUMPS(; maxiter=100))
-E_minus = expectation_value(ψ_minus, H)
-1.401483973963085 - 5.4843197089221895e-17im
transferp_plus = transferplot(ψ_plus; sectors=SU2Irrep[0, 1, 2], title="ψ_plus",
+E_minus = expectation_value(ψ_minus, H)
-1.4014839739630824 - 6.245004513516506e-17im
transferp_plus = transferplot(ψ_plus; sectors=SU2Irrep[0, 1, 2], title="ψ_plus",
                               legend=:outertop)
 transferp_minus = transferplot(ψ_minus; sectors=SU2Irrep[0, 1, 2], title="ψ_minus",
                                legend=:outertop)
 plot(transferp_plus, transferp_minus; layout=(1, 2), size=(800, 400))
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
entanglementp_plus = entanglementplot(ψ_plus; title="ψ_plus", legend=:outertop)
 entanglementp_minus = entanglementplot(ψ_minus; title="ψ_minus", legend=:outertop)
 plot(entanglementp_plus, entanglementp_minus; layout=(1, 2), size=(800, 400))
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

As we can see, the groundstate can be found in the non-trivial SPT phase, $\ket{\psi_-}$. We can obtain an intuitive understanding of $\ket{\psi_+}$ by considering the following diagram. If we denote the MPS tensors that make up the groundstate as $A_-$, we can construct a state in the trivial SPT phase that approximates the groundstate as follows:

spt-tensors.svg

In other words, we can factorize a purely virtual isomorphism of $S = 1/2$ in order to obtain the groundstate. This then also explains the degeneracies in the entanglement spectrum as well as in the transfer matrix spectrum. Finally, we can further confirm this intuition by looking at the entanglement entropy of the groundstate. As we can see, the entanglement entropy of the state in the wrong SPT phase is exactly $log(2)$ higher than the one in the right SPT phase, which is exactly what we would expect from the diagram above.

S_minus = sum(real, entropy(ψ_minus))
 S_plus = sum(real, entropy(ψ_plus))
 println("S_minus + log(2) = $(S_minus + log(2))")
-println("S_plus = $S_plus")
S_minus + log(2) = 1.5486227235401464
-S_plus = 1.5450323530570809
-

This page was generated using Literate.jl.

+println("S_plus = $S_plus")
S_minus + log(2) = 1.548622723539237
+S_plus = 1.5450323530571275
+

This page was generated using Literate.jl.

diff --git a/dev/examples/quantum1d/5.haldane-spt/main.ipynb b/dev/examples/quantum1d/5.haldane-spt/main.ipynb index b8bbbeb1..b192041b 100644 --- a/dev/examples/quantum1d/5.haldane-spt/main.ipynb +++ b/dev/examples/quantum1d/5.haldane-spt/main.ipynb @@ -198,11 +198,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.10.4" + "version": "1.11.1" }, "kernelspec": { - "name": "julia-1.10", - "display_name": "Julia 1.10.4", + "name": "julia-1.11", + "display_name": "Julia 1.11.1", "language": "julia" } }, diff --git a/dev/examples/quantum1d/6.hubbard/index.html b/dev/examples/quantum1d/6.hubbard/index.html new file mode 100644 index 00000000..7ca3766e --- /dev/null +++ b/dev/examples/quantum1d/6.hubbard/index.html @@ -0,0 +1,863 @@ + +Hubbard chain at half filling · MPSKit.jl

using Markdown

Hubbard chain at half filling

The Hubbard model is a model of interacting fermions on a lattice, which is often used as a somewhat realistic model for electrons in a solid. The Hamiltonian consists of two terms that describe competing forces of each electron: a kinetic term that allows electrons to hop between neighboring sites, and a potential term reflecting on-site interactions between electrons. Often, a third term is included which serves as a chemical potential to control the number of electrons in the system.

\[H = -t \sum_{\langle i, j \rangle, \sigma} c^{\dagger}_{i,\sigma} c_{j,\sigma} + U \sum_i n_{i,\uparrow} n_{i,\downarrow} - \mu \sum_{i,\sigma} n_{i,\sigma}\]

At half-filling, the system exhibits particle-hole symmetry, which can be made explicit by rewriting the Hamiltonian slightly. First, we fix the overall energy scale by setting t = 1, and then shift the total energy by adding a constant U / 4, as well as shifting the chemical potential to N U / 2. This results in the following Hamiltonian:

\[H = - \sum_{\langle i, j \rangle, \sigma} c^{\dagger}_{i,\sigma} c_{j,\sigma} + U / 4 \sum_i (1 - 2 n_{i,\uparrow}) (1 - 2 n_{i,\downarrow}) - \mu \sum_{i,\sigma} n_{i,\sigma}\]

Finally, setting \mu = 0 and defining u = U / 4 we obtain the Hubbard model at half-filling.

\[H = - \sum_{\langle i, j \rangle, \sigma} c^{\dagger}_{i,\sigma} c_{j,\sigma} + u \sum_i (1 - 2 n_{i,\uparrow}) (1 - 2 n_{i,\downarrow})\]

using TensorKit
+using MPSKit
+using MPSKitModels
+using SpecialFunctions: besselj0, besselj1
+using QuadGK: quadgk
+using Plots
+using Interpolations
+using Optim
+
+const t = 1.0
+const mu = 0.0
+const U = 3.0
3.0

For this case, the groundstate energy has an analytic solution, which can be used to benchmark the numerical results. It follows from Eq. (6.82) in .

\[e(u) = - u - 4 \int_0^{\infty} \frac{d\omega}{\omega} \frac{J_0(\omega) J_1(\omega)}{1 + \exp(2u \omega)}\]

We can easily verify this by comparing the numerical results to the analytic solution.

function hubbard_energy(u; rtol=1e-12)
+    integrandum(ω) = besselj0(ω) * besselj1(ω) / (1 + exp(2u * ω)) / ω
+    int, err = quadgk(integrandum, 0, Inf; rtol=rtol)
+    return -u - 4 * int
+end
+
+function compute_groundstate(psi, H;
+                             svalue=1e-3,
+                             expansionfactor=(1 / 5),
+                             expansioniter=20)
+    verbosity = 1
+    psi, = find_groundstate(psi, H; tol=svalue * 10, verbosity)
+    for _ in 1:expansioniter
+        D = maximum(x -> dim(left_virtualspace(psi, x)), 1:length(psi))
+        D′ = max(2, round(Int, D * expansionfactor))
+        trscheme = truncbelow(svalue / 10) & truncdim(D′)
+        psi′, = changebonds(psi, H, OptimalExpand(; trscheme=trscheme))
+        all(left_virtualspace.(Ref(psi), 1:length(psi)) .==
+            left_virtualspace.(Ref(psi′), 1:length(psi))) && break
+        psi, = find_groundstate(psi′, H, VUMPS(; tol=svalue / 5, verbosity))
+    end
+
+    # convergence steps
+    psi, = changebonds(psi, H, SvdCut(; trscheme=truncbelow(svalue)))
+    psi, = find_groundstate(psi, H,
+                            VUMPS(; tol=svalue, verbosity) &
+                            GradientGrassmann(; tol=svalue / 100, verbosity))
+
+    return psi
+end
+
+H = hubbard_model(InfiniteChain(2); U, t, mu=U / 2)
+psi = InfiniteMPS(H.data.pspaces, H.data.pspaces)
+psi = compute_groundstate(psi, H)
+E = real(expectation_value(psi, H)) / 2
+@info """
+Groundstate energy:
+    * numerical: $E
+    * analytic: $(hubbard_energy(U / 4) - U / 4)
+"""
┌ Warning: ignoring imaginary component 7.807755346263268e-6 from total weight 1.519432279920462: operator might not be hermitian?
+│   α = 0.408644890723205 + 7.807755346263268e-6im
+│   β₁ = 0.9383819653579948
+│   β₂ = 1.1229973702462615
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 8.405210114706407e-6 from total weight 2.1738960127263907: operator might not be hermitian?
+│   α = 0.27297674897930924 + 8.405210114706407e-6im
+│   β₁ = 1.1229973702462615
+│   β₂ = 1.8412453598077907
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.0370915492496913e-5 from total weight 2.827735337332976: operator might not be hermitian?
+│   α = 1.1648009191635844 + 1.0370915492496913e-5im
+│   β₁ = 1.8412453598077907
+│   β₂ = 1.8025375118415796
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 9.968737032850505e-6 from total weight 2.317491673659234: operator might not be hermitian?
+│   α = 0.7920195374082283 + 9.968737032850505e-6im
+│   β₁ = 1.8025375118415796
+│   β₂ = 1.2224284143245874
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 7.730765716737475e-6 from total weight 1.931808439300787: operator might not be hermitian?
+│   α = 0.4590455194221491 + 7.730765716737475e-6im
+│   β₁ = 1.2224284143245874
+│   β₂ = 1.4236677382887843
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 9.461798323513737e-6 from total weight 1.885442422423453: operator might not be hermitian?
+│   α = 0.7494644422442023 + 9.461798323513737e-6im
+│   β₁ = 1.4236677382887843
+│   β₂ = 0.9830393425248946
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.4794589075523001e-5 from total weight 1.7036029158608066: operator might not be hermitian?
+│   α = 0.8543239115625937 + 1.4794589075523001e-5im
+│   β₁ = 0.9830393425248946
+│   β₂ = 1.0981926970669473
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.4779092975814034e-5 from total weight 1.801371752899485: operator might not be hermitian?
+│   α = 0.49812454899961545 + 1.4779092975814034e-5im
+│   β₁ = 1.0981926970669473
+│   β₂ = 1.3382021243887245
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.5082805806504451e-5 from total weight 2.3893902682891692: operator might not be hermitian?
+│   α = 1.2559157134638745 + 1.5082805806504451e-5im
+│   β₁ = 1.3382021243887245
+│   β₂ = 1.5300577273173481
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.4763764194347662e-5 from total weight 2.1971628324934835: operator might not be hermitian?
+│   α = 0.5374925927117064 + 1.4763764194347662e-5im
+│   β₁ = 1.5300577273173481
+│   β₂ = 1.482413429556458
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.6812044682155275e-5 from total weight 2.518373809924349: operator might not be hermitian?
+│   α = 1.6677501130681405 + 1.6812044682155275e-5im
+│   β₁ = 1.482413429556458
+│   β₂ = 1.1675900952226779
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.1656237645502748e-5 from total weight 1.836376541200128: operator might not be hermitian?
+│   α = 0.8424638093750539 + 1.1656237645502748e-5im
+│   β₁ = 1.1675900952226779
+│   β₂ = 1.1398538943063923
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.017848068659774e-5 from total weight 1.5505038790334096: operator might not be hermitian?
+│   α = 0.5675363971143528 + 1.017848068659774e-5im
+│   β₁ = 1.1398538943063923
+│   β₂ = 0.8847021060103001
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 8.048645567207413e-6 from total weight 1.50620841149816: operator might not be hermitian?
+│   α = 0.7404925865623019 + 8.048645567207413e-6im
+│   β₁ = 0.8847021060103001
+│   β₂ = 0.9683164212540453
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.2039057236130912e-5 from total weight 1.6744528808996058: operator might not be hermitian?
+│   α = 0.9406358537567846 + 1.2039057236130912e-5im
+│   β₁ = 0.9683164212540453
+│   β₂ = 0.9906361335854118
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.416432382847499e-5 from total weight 1.8325177435853954: operator might not be hermitian?
+│   α = 1.5919932470890588 + 1.416432382847499e-5im
+│   β₁ = 0.646450554019812
+│   β₂ = 0.6370089974129052
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.4532453500901155e-5 from total weight 1.6446897126802875: operator might not be hermitian?
+│   α = 1.2841210428311594 + 1.4532453500901155e-5im
+│   β₁ = 0.6370089974129052
+│   β₂ = 0.8063851036312584
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.3416927348061658e-5 from total weight 1.521631679409698: operator might not be hermitian?
+│   α = 1.1434117013792926 + 1.3416927348061658e-5im
+│   β₁ = 0.8063851036312584
+│   β₂ = 0.5980933985538383
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.2158232090938442e-5 from total weight 1.5502040087386693: operator might not be hermitian?
+│   α = 1.2769345460168038 + 1.2158232090938442e-5im
+│   β₁ = 0.5980933985538383
+│   β₂ = 0.6440923228519313
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.0742972417238095e-5 from total weight 1.1117183071326222: operator might not be hermitian?
+│   α = 0.7297689321905663 + 1.0742972417238095e-5im
+│   β₁ = 0.6440923228519313
+│   β₂ = 0.5371219410441697
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.2433513098084048e-5 from total weight 1.9525016713436172: operator might not be hermitian?
+│   α = 1.8430983693388352 + 1.2433513098084048e-5im
+│   β₁ = 0.5371219410441697
+│   β₂ = 0.35602134463329077
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 6.78403706365714e-6 from total weight 1.66019539364691: operator might not be hermitian?
+│   α = 1.6215725537902703 + 6.78403706365714e-6im
+│   β₁ = 0.35602134463329077
+│   β₂ = 2.4874957371557414e-21
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 4.420632150038684e-6 from total weight 1.5700523001952702: operator might not be hermitian?
+│   α = 0.5239626218600479 + 4.420632150038684e-6im
+│   β₁ = 0.8717165441447274
+│   β₂ = 1.1960926648411632
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 3.601080797851694e-6 from total weight 2.0345126979997414: operator might not be hermitian?
+│   α = 0.426288757350352 + 3.601080797851694e-6im
+│   β₁ = 1.1960926648411632
+│   β₂ = 1.589616982414027
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 4.19976496114291e-6 from total weight 2.0484867724942677: operator might not be hermitian?
+│   α = 0.5775202889239899 + 4.19976496114291e-6im
+│   β₁ = 1.589616982414027
+│   β₂ = 1.1558054430432567
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 3.640311513675165e-6 from total weight 1.6360531190605416: operator might not be hermitian?
+│   α = 0.07558256739995857 + 3.640311513675165e-6im
+│   β₁ = 1.1558054430432567
+│   β₂ = 1.155452665283735
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 2.5033396548745923e-6 from total weight 1.871835891862734: operator might not be hermitian?
+│   α = 0.0559770634887897 + 2.5033396548745923e-6im
+│   β₁ = 1.155452665283735
+│   β₂ = 1.4715859854969997
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 2.6430412059241792e-6 from total weight 1.9064423191724782: operator might not be hermitian?
+│   α = 0.22488899189261616 + 2.6430412059241792e-6im
+│   β₁ = 1.4715859854969997
+│   β₂ = 1.1909584144457346
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 3.0997451073364046e-6 from total weight 1.6098273943138954: operator might not be hermitian?
+│   α = -0.18729098151608492 + 3.0997451073364046e-6im
+│   β₁ = 1.1909584144457346
+│   β₂ = 1.0668103780792073
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 3.8430909460249185e-6 from total weight 1.4501419373064255: operator might not be hermitian?
+│   α = -0.1756932876023117 + 3.8430909460249185e-6im
+│   β₁ = 1.0668103780792073
+│   β₂ = 0.9664156063692543
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 4.737672034002549e-6 from total weight 1.6650488951358715: operator might not be hermitian?
+│   α = 0.3642826605632644 + 4.737672034002549e-6im
+│   β₁ = 0.9664156063692543
+│   β₂ = 1.3060347783078508
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 4.0463279378337436e-6 from total weight 1.809699994321244: operator might not be hermitian?
+│   α = 0.4792707902891812 + 4.0463279378337436e-6im
+│   β₁ = 1.3060347783078508
+│   β₂ = 1.1574051740232911
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 5.543573193336759e-6 from total weight 1.4866339796856036: operator might not be hermitian?
+│   α = -0.07750469979704211 + 5.543573193336759e-6im
+│   β₁ = 1.1574051740232911
+│   β₂ = 0.9297778628138067
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 4.437985246134174e-6 from total weight 1.2526483933898018: operator might not be hermitian?
+│   α = 0.14550455114158256 + 4.437985246134174e-6im
+│   β₁ = 0.9297778628138067
+│   β₂ = 0.826722171506748
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 3.479709569688405e-6 from total weight 1.2697888613350266: operator might not be hermitian?
+│   α = 0.5191679357429178 + 3.479709569688405e-6im
+│   β₁ = 0.826722171506748
+│   β₂ = 0.8120091489595418
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 4.309653650808043e-6 from total weight 1.1619455195047197: operator might not be hermitian?
+│   α = -0.03585372914963633 + 4.309653650808043e-6im
+│   β₁ = 0.8120091489595418
+│   β₂ = 0.8303451345016631
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 3.3876945127499225e-6 from total weight 1.5863366135243355: operator might not be hermitian?
+│   α = 0.10179881851551338 + 3.3876945127499225e-6im
+│   β₁ = 0.8303451345016631
+│   β₂ = 1.3478233599231915
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 2.4515236037372934e-6 from total weight 1.6563602496932375: operator might not be hermitian?
+│   α = 0.2942178379823914 + 2.4515236037372934e-6im
+│   β₁ = 1.3478233599231915
+│   β₂ = 0.9166991496757051
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 4.820295013530096e-6 from total weight 1.380724305754562: operator might not be hermitian?
+│   α = 0.05175251300778737 + 4.820295013530096e-6im
+│   β₁ = 0.9166991496757051
+│   β₂ = 1.0312050983482381
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 4.880373024380991e-6 from total weight 1.4083502233166574: operator might not be hermitian?
+│   α = 0.4869437492653818 + 4.880373024380991e-6im
+│   β₁ = 1.0312050983482381
+│   β₂ = 0.8264092095833846
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 2.4708468538414685e-6 from total weight 1.3679952162146665: operator might not be hermitian?
+│   α = 0.3365703089542389 + 2.4708468538414685e-6im
+│   β₁ = 0.8264092095833846
+│   β₂ = 1.0369084612569812
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 4.845211715443637e-6 from total weight 1.9535857899234355: operator might not be hermitian?
+│   α = 1.648360457701184 + 4.845211715443637e-6im
+│   β₁ = 0.697422390792335
+│   β₂ = 0.782947794476709
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 2.3929177318110506e-6 from total weight 1.6460071714797488: operator might not be hermitian?
+│   α = 1.0014749966958667 + 2.3929177318110506e-6im
+│   β₁ = 0.782947794476709
+│   β₂ = 1.0456482155457962
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 3.4887348726309053e-6 from total weight 2.297126647611539: operator might not be hermitian?
+│   α = 1.9544737849469627 + 3.4887348726309053e-6im
+│   β₁ = 1.0456482155457962
+│   β₂ = 0.602862230062428
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 3.893633891298431e-6 from total weight 1.51990288741988: operator might not be hermitian?
+│   α = 1.286400942835462 + 3.893633891298431e-6im
+│   β₁ = 0.602862230062428
+│   β₂ = 0.5402171165451158
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 4.977927394594905e-6 from total weight 1.3906451753871552: operator might not be hermitian?
+│   α = 1.2402536191060138 + 4.977927394594905e-6im
+│   β₁ = 0.5402171165451158
+│   β₂ = 0.3222272972435882
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 5.626639152545021e-6 from total weight 1.5689756337692407: operator might not be hermitian?
+│   α = 1.4337246333918294 + 5.626639152545021e-6im
+│   β₁ = 0.3222272972435882
+│   β₂ = 0.5498070423762209
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 2.929774392332547e-6 from total weight 1.435283449174042: operator might not be hermitian?
+│   α = 1.3258019443408067 + 2.929774392332547e-6im
+│   β₁ = 0.5498070423762209
+│   β₂ = 1.8809234760612477e-21
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+[ Info: CG: converged after 74 iterations: f = -3.630108220530, ‖∇f‖ = 8.8587e-06
+┌ Info: Groundstate energy:
+│     * numerical: -1.8150541102648536
+└     * analytic: -2.190038374277775
+

Symmetries

The Hubbard model has a rich symmetry structure, which can be exploited to speed up simulations. Apart from the fermionic parity, the model also has a $U(1)$ particle number symmetry, along with a $SU(2)$ spin symmetry. Explicitly imposing these symmetries on the tensors can greatly reduce the computational cost of the simulation.

Naively imposing these symmetries however, is not compatible with our desire to work at half-filling. By construction, imposing symmetries restricts the optimization procedure to a single symmetry sector, which is the trivial sector. In order to work at half-filling, we need to effectively inject one particle per site. In MPSKit, this is achieved by the add_physical_charge function, which shifts the physical spaces of the tensors to the desired charge sector.

H_u1_su2 = hubbard_model(ComplexF64, U1Irrep, SU2Irrep, InfiniteChain(2); U, t, mu=U / 2);
+charges = fill(FermionParity(1) ⊠ U1Irrep(1) ⊠ SU2Irrep(0), 2);
+H_u1_su2 = MPSKit.add_physical_charge(H_u1_su2, dual.(charges));
+
+pspaces = H_u1_su2.data.pspaces
+vspaces = [oneunit(eltype(pspaces)), first(pspaces)]
+psi = InfiniteMPS(pspaces, vspaces)
+psi = compute_groundstate(psi, H_u1_su2; svalue=1e-3, expansionfactor=1 / 3,
+                          expansioniter=20)
+E = real(expectation_value(psi, H_u1_su2)) / 2
+@info """
+Groundstate energy:
+    * numerical: $E
+    * analytic: $(hubbard_energy(U / 4) - U / 4)
+"""
[ Info: CG: converged after 51 iterations: f = -4.379995918984, ‖∇f‖ = 9.4208e-06
+┌ Info: Groundstate energy:
+│     * numerical: -2.189997959491911
+└     * analytic: -2.190038374277775
+

Excitations

Because of the integrability, it is known that the Hubbard model has a rich excitation spectrum. The elementary excitations are known as spinons and holons, which are domain walls in the spin and charge sectors, respectively. The fact that the spin and charge sectors are separate is a phenomenon known as spin-charge separation.

The domain walls can be constructed by noticing that there are two equivalent groundstates, which differ by a translation over a single site. In other words, the groundstates are $\psi_{AB}` and$\psi_{BA}$, where$A$and$B`` are the two sites. These excitations can be constructed as follows:

alg = QuasiparticleAnsatz(; tol=1e-3)
+momenta = range(-π, π; length=33)
+psi_AB = psi
+envs_AB = environments(psi_AB, H_u1_su2);
+psi_BA = circshift(psi, 1)
+envs_BA = environments(psi_BA, H_u1_su2);
+
+spinon_charge = FermionParity(0) ⊠ U1Irrep(0) ⊠ SU2Irrep(1 // 2)
+E_spinon, ϕ_spinon = excitations(H_u1_su2, alg, momenta,
+                                 psi_AB, envs_AB, psi_BA, envs_BA;
+                                 sector=spinon_charge, num=1);
+
+holon_charge = FermionParity(1) ⊠ U1Irrep(1) ⊠ SU2Irrep(0)
+E_holon, ϕ_holon = excitations(H_u1_su2, alg, momenta,
+                               psi_AB, envs_AB, psi_BA, envs_BA;
+                               sector=holon_charge, num=1);
[ Info: Found excitations for momentum = 1.5707963267948966
+[ Info: Found excitations for momentum = -1.5707963267948966
+[ Info: Found excitations for momentum = -2.945243112740431
+[ Info: Found excitations for momentum = -3.141592653589793
+[ Info: Found excitations for momentum = -0.19634954084936207
+[ Info: Found excitations for momentum = 3.141592653589793
+[ Info: Found excitations for momentum = 2.748893571891069
+[ Info: Found excitations for momentum = -0.39269908169872414
+[ Info: Found excitations for momentum = -2.748893571891069
+[ Info: Found excitations for momentum = 2.945243112740431
+[ Info: Found excitations for momentum = -2.552544031041707
+[ Info: Found excitations for momentum = 1.9634954084936207
+[ Info: Found excitations for momentum = 0.0
+[ Info: Found excitations for momentum = 0.19634954084936207
+[ Info: Found excitations for momentum = 2.552544031041707
+[ Info: Found excitations for momentum = -1.7671458676442586
+[ Info: Found excitations for momentum = -1.3744467859455345
+[ Info: Found excitations for momentum = 0.39269908169872414
+[ Info: Found excitations for momentum = -2.356194490192345
+[ Info: Found excitations for momentum = 0.5890486225480862
+[ Info: Found excitations for momentum = -0.5890486225480862
+[ Info: Found excitations for momentum = 1.7671458676442586
+[ Info: Found excitations for momentum = 0.7853981633974483
+[ Info: Found excitations for momentum = -0.9817477042468103
+[ Info: Found excitations for momentum = 2.356194490192345
+[ Info: Found excitations for momentum = 1.3744467859455345
+[ Info: Found excitations for momentum = -0.7853981633974483
+[ Info: Found excitations for momentum = -1.9634954084936207
+[ Info: Found excitations for momentum = -1.1780972450961724
+[ Info: Found excitations for momentum = 0.9817477042468103
+[ Info: Found excitations for momentum = 2.1598449493429825
+[ Info: Found excitations for momentum = -2.1598449493429825
+[ Info: Found excitations for momentum = 1.1780972450961724
+[ Info: Found excitations for momentum = 0.0
+[ Info: Found excitations for momentum = -3.141592653589793
+[ Info: Found excitations for momentum = 3.141592653589793
+[ Info: Found excitations for momentum = -1.3744467859455345
+[ Info: Found excitations for momentum = 1.3744467859455345
+[ Info: Found excitations for momentum = 2.1598449493429825
+[ Info: Found excitations for momentum = -1.7671458676442586
+[ Info: Found excitations for momentum = 1.7671458676442586
+[ Info: Found excitations for momentum = -1.5707963267948966
+[ Info: Found excitations for momentum = 1.5707963267948966
+[ Info: Found excitations for momentum = 1.1780972450961724
+[ Info: Found excitations for momentum = -0.39269908169872414
+[ Info: Found excitations for momentum = 0.7853981633974483
+[ Info: Found excitations for momentum = -2.1598449493429825
+[ Info: Found excitations for momentum = -2.552544031041707
+[ Info: Found excitations for momentum = 1.9634954084936207
+[ Info: Found excitations for momentum = 0.9817477042468103
+[ Info: Found excitations for momentum = -1.1780972450961724
+[ Info: Found excitations for momentum = -0.9817477042468103
+[ Info: Found excitations for momentum = 2.748893571891069
+[ Info: Found excitations for momentum = -2.748893571891069
+[ Info: Found excitations for momentum = -1.9634954084936207
+[ Info: Found excitations for momentum = 2.552544031041707
+[ Info: Found excitations for momentum = 0.5890486225480862
+[ Info: Found excitations for momentum = -2.356194490192345
+[ Info: Found excitations for momentum = -0.7853981633974483
+[ Info: Found excitations for momentum = -2.945243112740431
+[ Info: Found excitations for momentum = 2.945243112740431
+[ Info: Found excitations for momentum = -0.5890486225480862
+[ Info: Found excitations for momentum = -0.19634954084936207
+[ Info: Found excitations for momentum = 0.19634954084936207
+[ Info: Found excitations for momentum = 0.39269908169872414
+[ Info: Found excitations for momentum = 2.356194490192345
+

Again, we can compare the numerical results to the analytic solution. Here, the formulae for the excitation energies are expressed in terms of dressed momenta:

function spinon_momentum(Λ, u; rtol=1e-12)
+    integrandum(ω) = besselj0(ω) * sin(ω * Λ) / ω / cosh(ω * u)
+    return π / 2 - quadgk(integrandum, 0, Inf; rtol=rtol)[1]
+end
+function spinon_energy(Λ, u; rtol=1e-12)
+    integrandum(ω) = besselj1(ω) * cos(ω * Λ) / ω / cosh(ω * u)
+    return 2 * quadgk(integrandum, 0, Inf; rtol=rtol)[1]
+end
+
+function holon_momentum(k, u; rtol=1e-12)
+    integrandum(ω) = besselj0(ω) * sin(ω * sin(k)) / ω / (1 + exp(2u * abs(ω)))
+    return π / 2 - k - 2 * quadgk(integrandum, 0, Inf; rtol=rtol)[1]
+end
+function holon_energy(k, u; rtol=1e-12)
+    integrandum(ω) = besselj1(ω) * cos(ω * sin(k)) * exp(-ω * u) / ω / cosh(ω * u)
+    return 2 * cos(k) + 2u + 2 * quadgk(integrandum, 0, Inf; rtol=rtol)[1]
+end
+
+Λs = range(-10, 10; length=51)
+P_spinon_analytic = rem2pi.(spinon_momentum.(Λs, U / 4), RoundNearest)
+E_spinon_analytic = spinon_energy.(Λs, U / 4)
+I_spinon = sortperm(P_spinon_analytic)
+P_spinon_analytic = P_spinon_analytic[I_spinon]
+E_spinon_analytic = E_spinon_analytic[I_spinon]
+P_spinon_analytic = [reverse(-P_spinon_analytic); P_spinon_analytic]
+E_spinon_analytic = [reverse(E_spinon_analytic); E_spinon_analytic];
+
+ks = range(0, 2π; length=51)
+P_holon_analytic = rem2pi.(holon_momentum.(ks, U / 4), RoundNearest)
+E_holon_analytic = holon_energy.(ks, U / 4)
+I_holon = sortperm(P_holon_analytic)
+P_holon_analytic = P_holon_analytic[I_holon]
+E_holon_analytic = E_holon_analytic[I_holon];
+
+p = let p_excitations = plot(; xaxis="momentum", yaxis="energy")
+    scatter!(p_excitations, momenta, real(E_spinon); label="spinon")
+    plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label="spinon (analytic)")
+
+    scatter!(p_excitations, momenta, real(E_holon); label="holon")
+    plot!(p_excitations, P_holon_analytic, E_holon_analytic; label="holon (analytic)")
+
+    p_excitations
+end
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

The plot shows some discrepancies between the numerical and analytic results. First and foremost, we must realize that in the thermodynamic limit, the momentum of a domain wall is actually not well-defined. Concretely, only the difference in momentum between the two groundstates is well-defined, as we can always shift the momentum by multiplying one of the groundstates by a phase. Here, we can fix this shift by realizing that our choice of shifting the groundstates by a single site, differs from the formula by a factor $\pi/2$.

momenta_shifted = rem2pi.(momenta .- π / 2, RoundNearest)
+p = let p_excitations = plot(; xaxis="momentum", yaxis="energy", xlims=(-π, π))
+    scatter!(p_excitations, momenta_shifted, real(E_spinon); label="spinon")
+    plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label="spinon (analytic)")
+
+    scatter!(p_excitations, momenta_shifted, real(E_holon); label="holon")
+    plot!(p_excitations, P_holon_analytic, E_holon_analytic; label="holon (analytic)")
+
+    p_excitations
+end
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

The second discrepancy is that while the spinon dispersion is well-reproduced, the holon dispersion is not. This is due to the fact that the excitation ansatz captures the lowest-energy excitation, and not the elementary single-particle excitation. To make this explicit, we can consider the scattering states comprising of a holon and two spinons. If these are truly scattering states, the energy of the scattering state should be the sum of the energies of the individual excitations, and the momentum is the sum of the momenta. Thus, we can find the lowest-energy scattering states by minimizing the energy over the combination of momenta for the constituent elementary excitations.

holon_dispersion_itp = linear_interpolation(P_holon_analytic, E_holon_analytic;
+                                            extrapolation_bc=Line())
+spinon_dispersion_itp = linear_interpolation(P_spinon_analytic, E_spinon_analytic;
+                                             extrapolation_bc=Line())
+function scattering_energy(p1, p2, p3)
+    p1, p2, p3 = rem2pi.((p1, p2, p3), RoundNearest)
+    return holon_dispersion_itp(p1) + spinon_dispersion_itp(p2) + spinon_dispersion_itp(p3)
+end;
+
+E_scattering_min = map(momenta_shifted) do p
+    e = Inf
+    for i in 1:10 # repeat for stability
+        res = optimize((rand(2) .* (2π) .- π)) do (p₁, p₂)
+            p₃ = p - p₁ - p₂
+            return scattering_energy(p₁, p₂, p₃)
+        end
+
+        e = min(Optim.minimum(res), e)
+    end
+    return e
+end
+E_scattering_max = map(momenta_shifted) do p
+    e = -Inf
+    for i in 1:10 # repeat for stability
+        res = optimize((rand(Float64, 2) .* (2π) .- π)) do (p₁, p₂)
+            p₃ = p - p₁ - p₂
+            return -scattering_energy(p₁, p₂, p₃)
+        end
+
+        e = max(-Optim.minimum(res), e)
+    end
+    return e
+end;
+
+p = let p_excitations = plot(; xaxis="momentum", yaxis="energy", xlims=(-π, π),
+                             ylims=(-0.1, 5))
+    scatter!(p_excitations, momenta_shifted, real(E_spinon); label="spinon")
+    plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label="spinon (analytic)")
+
+    scatter!(p_excitations, momenta_shifted, real(E_holon); label="holon")
+    plot!(p_excitations, P_holon_analytic, E_holon_analytic; label="holon (analytic)")
+
+    I = sortperm(momenta_shifted)
+    plot!(p_excitations, momenta_shifted[I], E_scattering_min[I]; label="scattering states",
+          fillrange=E_scattering_max[I], fillalpha=0.3, fillstyle=:x)
+
+    p_excitations
+end
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

This page was generated using Literate.jl.

diff --git a/dev/examples/quantum1d/6.hubbard/main.ipynb b/dev/examples/quantum1d/6.hubbard/main.ipynb new file mode 100644 index 00000000..d8d77054 --- /dev/null +++ b/dev/examples/quantum1d/6.hubbard/main.ipynb @@ -0,0 +1,381 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "using Markdown" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Hubbard chain at half filling\n", + "\n", + "The Hubbard model is a model of interacting fermions on a lattice, which is often used as a somewhat realistic model for electrons in a solid.\n", + "The Hamiltonian consists of two terms that describe competing forces of each electron:\n", + "a kinetic term that allows electrons to hop between neighboring sites, and a potential term reflecting on-site interactions between electrons.\n", + "Often, a third term is included which serves as a chemical potential to control the number of electrons in the system.\n", + "\n", + "$$\n", + "H = -t \\sum_{\\langle i, j \\rangle, \\sigma} c^{\\dagger}_{i,\\sigma} c_{j,\\sigma} + U \\sum_i n_{i,\\uparrow} n_{i,\\downarrow} - \\mu \\sum_{i,\\sigma} n_{i,\\sigma}\n", + "$$\n", + "\n", + "At half-filling, the system exhibits particle-hole symmetry, which can be made explicit by rewriting the Hamiltonian slightly.\n", + "First, we fix the overall energy scale by setting `t = 1`, and then shift the total energy by adding a constant `U / 4`, as well as shifting the chemical potential to `N U / 2`.\n", + "This results in the following Hamiltonian:\n", + "\n", + "$$\n", + "H = - \\sum_{\\langle i, j \\rangle, \\sigma} c^{\\dagger}_{i,\\sigma} c_{j,\\sigma} + U / 4 \\sum_i (1 - 2 n_{i,\\uparrow}) (1 - 2 n_{i,\\downarrow}) - \\mu \\sum_{i,\\sigma} n_{i,\\sigma}\n", + "$$\n", + "\n", + "Finally, setting `\\mu = 0` and defining `u = U / 4` we obtain the Hubbard model at half-filling.\n", + "\n", + "$$\n", + "H = - \\sum_{\\langle i, j \\rangle, \\sigma} c^{\\dagger}_{i,\\sigma} c_{j,\\sigma} + u \\sum_i (1 - 2 n_{i,\\uparrow}) (1 - 2 n_{i,\\downarrow})\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "using TensorKit\n", + "using MPSKit\n", + "using MPSKitModels\n", + "using SpecialFunctions: besselj0, besselj1\n", + "using QuadGK: quadgk\n", + "using Plots\n", + "using Interpolations\n", + "using Optim\n", + "\n", + "const t = 1.0\n", + "const mu = 0.0\n", + "const U = 3.0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For this case, the groundstate energy has an analytic solution, which can be used to benchmark the numerical results.\n", + "It follows from Eq. (6.82) in []().\n", + "\n", + "$$\n", + "e(u) = - u - 4 \\int_0^{\\infty} \\frac{d\\omega}{\\omega} \\frac{J_0(\\omega) J_1(\\omega)}{1 + \\exp(2u \\omega)}\n", + "$$\n", + "\n", + "We can easily verify this by comparing the numerical results to the analytic solution." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "function hubbard_energy(u; rtol=1e-12)\n", + " integrandum(ω) = besselj0(ω) * besselj1(ω) / (1 + exp(2u * ω)) / ω\n", + " int, err = quadgk(integrandum, 0, Inf; rtol=rtol)\n", + " return -u - 4 * int\n", + "end\n", + "\n", + "function compute_groundstate(psi, H;\n", + " svalue=1e-3,\n", + " expansionfactor=(1 / 5),\n", + " expansioniter=20)\n", + " verbosity = 1\n", + " psi, = find_groundstate(psi, H; tol=svalue * 10, verbosity)\n", + " for _ in 1:expansioniter\n", + " D = maximum(x -> dim(left_virtualspace(psi, x)), 1:length(psi))\n", + " D′ = max(2, round(Int, D * expansionfactor))\n", + " trscheme = truncbelow(svalue / 10) & truncdim(D′)\n", + " psi′, = changebonds(psi, H, OptimalExpand(; trscheme=trscheme))\n", + " all(left_virtualspace.(Ref(psi), 1:length(psi)) .==\n", + " left_virtualspace.(Ref(psi′), 1:length(psi))) && break\n", + " psi, = find_groundstate(psi′, H, VUMPS(; tol=svalue / 5, verbosity))\n", + " end\n", + "\n", + " # convergence steps\n", + " psi, = changebonds(psi, H, SvdCut(; trscheme=truncbelow(svalue)))\n", + " psi, = find_groundstate(psi, H,\n", + " VUMPS(; tol=svalue, verbosity) &\n", + " GradientGrassmann(; tol=svalue / 100, verbosity))\n", + "\n", + " return psi\n", + "end\n", + "\n", + "H = hubbard_model(InfiniteChain(2); U, t, mu=U / 2)\n", + "psi = InfiniteMPS(H.data.pspaces, H.data.pspaces)\n", + "psi = compute_groundstate(psi, H)\n", + "E = real(expectation_value(psi, H)) / 2\n", + "@info \"\"\"\n", + "Groundstate energy:\n", + " * numerical: $E\n", + " * analytic: $(hubbard_energy(U / 4) - U / 4)\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Symmetries\n", + "\n", + "The Hubbard model has a rich symmetry structure, which can be exploited to speed up simulations.\n", + "Apart from the fermionic parity, the model also has a $U(1)$ particle number symmetry, along with a $SU(2)$ spin symmetry.\n", + "Explicitly imposing these symmetries on the tensors can greatly reduce the computational cost of the simulation.\n", + "\n", + "Naively imposing these symmetries however, is not compatible with our desire to work at half-filling.\n", + "By construction, imposing symmetries restricts the optimization procedure to a single symmetry sector, which is the trivial sector.\n", + "In order to work at half-filling, we need to effectively inject one particle per site.\n", + "In MPSKit, this is achieved by the `add_physical_charge` function, which shifts the physical spaces of the tensors to the desired charge sector." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "H_u1_su2 = hubbard_model(ComplexF64, U1Irrep, SU2Irrep, InfiniteChain(2); U, t, mu=U / 2);\n", + "charges = fill(FermionParity(1) ⊠ U1Irrep(1) ⊠ SU2Irrep(0), 2);\n", + "H_u1_su2 = MPSKit.add_physical_charge(H_u1_su2, dual.(charges));\n", + "\n", + "pspaces = H_u1_su2.data.pspaces\n", + "vspaces = [oneunit(eltype(pspaces)), first(pspaces)]\n", + "psi = InfiniteMPS(pspaces, vspaces)\n", + "psi = compute_groundstate(psi, H_u1_su2; svalue=1e-3, expansionfactor=1 / 3,\n", + " expansioniter=20)\n", + "E = real(expectation_value(psi, H_u1_su2)) / 2\n", + "@info \"\"\"\n", + "Groundstate energy:\n", + " * numerical: $E\n", + " * analytic: $(hubbard_energy(U / 4) - U / 4)\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Excitations\n", + "\n", + "Because of the integrability, it is known that the Hubbard model has a rich excitation spectrum.\n", + "The elementary excitations are known as spinons and holons, which are domain walls in the spin and charge sectors, respectively.\n", + "The fact that the spin and charge sectors are separate is a phenomenon known as spin-charge separation.\n", + "\n", + "The domain walls can be constructed by noticing that there are two equivalent groundstates, which differ by a translation over a single site.\n", + "In other words, the groundstates are $\\psi_{AB}` and $\\psi_{BA}$, where $A$ and $B$ are the two sites.\n", + "These excitations can be constructed as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "alg = QuasiparticleAnsatz(; tol=1e-3)\n", + "momenta = range(-π, π; length=33)\n", + "psi_AB = psi\n", + "envs_AB = environments(psi_AB, H_u1_su2);\n", + "psi_BA = circshift(psi, 1)\n", + "envs_BA = environments(psi_BA, H_u1_su2);\n", + "\n", + "spinon_charge = FermionParity(0) ⊠ U1Irrep(0) ⊠ SU2Irrep(1 // 2)\n", + "E_spinon, ϕ_spinon = excitations(H_u1_su2, alg, momenta,\n", + " psi_AB, envs_AB, psi_BA, envs_BA;\n", + " sector=spinon_charge, num=1);\n", + "\n", + "holon_charge = FermionParity(1) ⊠ U1Irrep(1) ⊠ SU2Irrep(0)\n", + "E_holon, ϕ_holon = excitations(H_u1_su2, alg, momenta,\n", + " psi_AB, envs_AB, psi_BA, envs_BA;\n", + " sector=holon_charge, num=1);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again, we can compare the numerical results to the analytic solution.\n", + "Here, the formulae for the excitation energies are expressed in terms of dressed momenta:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "function spinon_momentum(Λ, u; rtol=1e-12)\n", + " integrandum(ω) = besselj0(ω) * sin(ω * Λ) / ω / cosh(ω * u)\n", + " return π / 2 - quadgk(integrandum, 0, Inf; rtol=rtol)[1]\n", + "end\n", + "function spinon_energy(Λ, u; rtol=1e-12)\n", + " integrandum(ω) = besselj1(ω) * cos(ω * Λ) / ω / cosh(ω * u)\n", + " return 2 * quadgk(integrandum, 0, Inf; rtol=rtol)[1]\n", + "end\n", + "\n", + "function holon_momentum(k, u; rtol=1e-12)\n", + " integrandum(ω) = besselj0(ω) * sin(ω * sin(k)) / ω / (1 + exp(2u * abs(ω)))\n", + " return π / 2 - k - 2 * quadgk(integrandum, 0, Inf; rtol=rtol)[1]\n", + "end\n", + "function holon_energy(k, u; rtol=1e-12)\n", + " integrandum(ω) = besselj1(ω) * cos(ω * sin(k)) * exp(-ω * u) / ω / cosh(ω * u)\n", + " return 2 * cos(k) + 2u + 2 * quadgk(integrandum, 0, Inf; rtol=rtol)[1]\n", + "end\n", + "\n", + "Λs = range(-10, 10; length=51)\n", + "P_spinon_analytic = rem2pi.(spinon_momentum.(Λs, U / 4), RoundNearest)\n", + "E_spinon_analytic = spinon_energy.(Λs, U / 4)\n", + "I_spinon = sortperm(P_spinon_analytic)\n", + "P_spinon_analytic = P_spinon_analytic[I_spinon]\n", + "E_spinon_analytic = E_spinon_analytic[I_spinon]\n", + "P_spinon_analytic = [reverse(-P_spinon_analytic); P_spinon_analytic]\n", + "E_spinon_analytic = [reverse(E_spinon_analytic); E_spinon_analytic];\n", + "\n", + "ks = range(0, 2π; length=51)\n", + "P_holon_analytic = rem2pi.(holon_momentum.(ks, U / 4), RoundNearest)\n", + "E_holon_analytic = holon_energy.(ks, U / 4)\n", + "I_holon = sortperm(P_holon_analytic)\n", + "P_holon_analytic = P_holon_analytic[I_holon]\n", + "E_holon_analytic = E_holon_analytic[I_holon];\n", + "\n", + "p = let p_excitations = plot(; xaxis=\"momentum\", yaxis=\"energy\")\n", + " scatter!(p_excitations, momenta, real(E_spinon); label=\"spinon\")\n", + " plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label=\"spinon (analytic)\")\n", + "\n", + " scatter!(p_excitations, momenta, real(E_holon); label=\"holon\")\n", + " plot!(p_excitations, P_holon_analytic, E_holon_analytic; label=\"holon (analytic)\")\n", + "\n", + " p_excitations\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The plot shows some discrepancies between the numerical and analytic results.\n", + "First and foremost, we must realize that in the thermodynamic limit, the momentum of a domain wall is actually not well-defined.\n", + "Concretely, only the difference in momentum between the two groundstates is well-defined, as we can always shift the momentum by multiplying one of the groundstates by a phase.\n", + "Here, we can fix this shift by realizing that our choice of shifting the groundstates by a single site, differs from the formula by a factor $\\pi/2$." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "momenta_shifted = rem2pi.(momenta .- π / 2, RoundNearest)\n", + "p = let p_excitations = plot(; xaxis=\"momentum\", yaxis=\"energy\", xlims=(-π, π))\n", + " scatter!(p_excitations, momenta_shifted, real(E_spinon); label=\"spinon\")\n", + " plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label=\"spinon (analytic)\")\n", + "\n", + " scatter!(p_excitations, momenta_shifted, real(E_holon); label=\"holon\")\n", + " plot!(p_excitations, P_holon_analytic, E_holon_analytic; label=\"holon (analytic)\")\n", + "\n", + " p_excitations\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The second discrepancy is that while the spinon dispersion is well-reproduced, the holon dispersion is not.\n", + "This is due to the fact that the excitation ansatz captures the lowest-energy excitation, and not the elementary single-particle excitation.\n", + "To make this explicit, we can consider the scattering states comprising of a holon and two spinons.\n", + "If these are truly scattering states, the energy of the scattering state should be the sum of the energies of the individual excitations, and the momentum is the sum of the momenta.\n", + "Thus, we can find the lowest-energy scattering states by minimizing the energy over the combination of momenta for the constituent elementary excitations." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "holon_dispersion_itp = linear_interpolation(P_holon_analytic, E_holon_analytic;\n", + " extrapolation_bc=Line())\n", + "spinon_dispersion_itp = linear_interpolation(P_spinon_analytic, E_spinon_analytic;\n", + " extrapolation_bc=Line())\n", + "function scattering_energy(p1, p2, p3)\n", + " p1, p2, p3 = rem2pi.((p1, p2, p3), RoundNearest)\n", + " return holon_dispersion_itp(p1) + spinon_dispersion_itp(p2) + spinon_dispersion_itp(p3)\n", + "end;\n", + "\n", + "E_scattering_min = map(momenta_shifted) do p\n", + " e = Inf\n", + " for i in 1:10 # repeat for stability\n", + " res = optimize((rand(2) .* (2π) .- π)) do (p₁, p₂)\n", + " p₃ = p - p₁ - p₂\n", + " return scattering_energy(p₁, p₂, p₃)\n", + " end\n", + "\n", + " e = min(Optim.minimum(res), e)\n", + " end\n", + " return e\n", + "end\n", + "E_scattering_max = map(momenta_shifted) do p\n", + " e = -Inf\n", + " for i in 1:10 # repeat for stability\n", + " res = optimize((rand(Float64, 2) .* (2π) .- π)) do (p₁, p₂)\n", + " p₃ = p - p₁ - p₂\n", + " return -scattering_energy(p₁, p₂, p₃)\n", + " end\n", + "\n", + " e = max(-Optim.minimum(res), e)\n", + " end\n", + " return e\n", + "end;\n", + "\n", + "p = let p_excitations = plot(; xaxis=\"momentum\", yaxis=\"energy\", xlims=(-π, π),\n", + " ylims=(-0.1, 5))\n", + " scatter!(p_excitations, momenta_shifted, real(E_spinon); label=\"spinon\")\n", + " plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label=\"spinon (analytic)\")\n", + "\n", + " scatter!(p_excitations, momenta_shifted, real(E_holon); label=\"holon\")\n", + " plot!(p_excitations, P_holon_analytic, E_holon_analytic; label=\"holon (analytic)\")\n", + "\n", + " I = sortperm(momenta_shifted)\n", + " plot!(p_excitations, momenta_shifted[I], E_scattering_min[I]; label=\"scattering states\",\n", + " fillrange=E_scattering_max[I], fillalpha=0.3, fillstyle=:x)\n", + "\n", + " p_excitations\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.11.1", + "language": "julia", + "name": "julia-1.11" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.11.1" + } + }, + "nbformat": 4, + "nbformat_minor": 3 +} diff --git a/dev/index.html b/dev/index.html index 2a739121..5ebf8cd9 100644 --- a/dev/index.html +++ b/dev/index.html @@ -37,23 +37,23 @@ └── AL[1]: TensorMap((ℂ^1 ⊗ ℂ^2) ← ℂ^2)

These objects can then be used to compute observables and expectation values. For example, the expectation value of the identity operator at the third site, which is equal to the norm of the MPS, can be computed as:

N1 = LinearAlgebra.norm(mps)
 N2 = expectation_value(mps, 3 => id(physicalspace(mps, 3)))
 println("‖mps‖ = $N1")
-println("<mps|𝕀₃|mps> = $N2")
‖mps‖ = 2.23606797749979
-<mps|𝕀₃|mps> = 5.0 + 0.0im

Finally, the MPS can be optimized in order to determine groundstates of given Hamiltonians. Using the pre-defined models in MPSKitModels, we can construct the groundstate for the transverse field Ising model:

H = transverse_field_ising(; J=1.0, g=0.5)
+println("<mps|𝕀₃|mps> = $N2")
‖mps‖ = 2.2360679774997894
+<mps|𝕀₃|mps> = 5.000000000000001 + 0.0im

Finally, the MPS can be optimized in order to determine groundstates of given Hamiltonians. Using the pre-defined models in MPSKitModels, we can construct the groundstate for the transverse field Ising model:

H = transverse_field_ising(; J=1.0, g=0.5)
 find_groundstate!(mps, H, DMRG(; maxiter=10))
 E0 = expectation_value(mps, H)
-println("<mps|H|mps> = $(sum(real(E0)) / length(mps))")
[ Info: DMRG init:	obj = -2.083437027390e+00	err = 5.5750e-01
-[ Info: DMRG   1:	obj = -9.765499738896e+00	err = 5.0649174825e-02	time = 0.50 sec
-[ Info: DMRG   2:	obj = -9.765503466377e+00	err = 4.2830402585e-04	time = 0.32 sec
-[ Info: DMRG   3:	obj = -9.765503469790e+00	err = 7.0054848195e-06	time = 0.01 sec
-[ Info: DMRG   4:	obj = -9.765503472284e+00	err = 7.3696924927e-06	time = 0.02 sec
-[ Info: DMRG   5:	obj = -9.765503474179e+00	err = 7.0217720369e-06	time = 0.02 sec
-[ Info: DMRG   6:	obj = -9.765503475272e+00	err = 5.7128237462e-06	time = 0.02 sec
-[ Info: DMRG   7:	obj = -9.765503475768e+00	err = 3.9779125495e-06	time = 0.01 sec
-[ Info: DMRG   8:	obj = -9.765503475960e+00	err = 2.5068709847e-06	time = 0.01 sec
-[ Info: DMRG   9:	obj = -9.765503476030e+00	err = 1.4948588666e-06	time = 0.01 sec
-┌ Warning: DMRG cancel 10:	obj = -9.765503476053e+00	err = 8.6591634543e-07	time = 0.94 sec
+println("<mps|H|mps> = $(sum(real(E0)) / length(mps))")
[ Info: DMRG init:	obj = -2.733816237983e+00	err = 4.8070e-01
+[ Info: DMRG   1:	obj = -9.765501602864e+00	err = 2.4968668312e-02	time = 0.50 sec
+[ Info: DMRG   2:	obj = -9.765503468882e+00	err = 1.0879268589e-04	time = 0.32 sec
+[ Info: DMRG   3:	obj = -9.765503492654e+00	err = 7.5131230665e-06	time = 0.02 sec
+[ Info: DMRG   4:	obj = -9.765503493140e+00	err = 3.3658030475e-06	time = 0.01 sec
+[ Info: DMRG   5:	obj = -9.765503493261e+00	err = 1.5349083930e-06	time = 0.01 sec
+[ Info: DMRG   6:	obj = -9.765503493294e+00	err = 8.4153324601e-07	time = 0.01 sec
+[ Info: DMRG   7:	obj = -9.765503493304e+00	err = 5.0942677133e-07	time = 0.01 sec
+[ Info: DMRG   8:	obj = -9.765503493307e+00	err = 3.1298953463e-07	time = 0.01 sec
+[ Info: DMRG   9:	obj = -9.765503493308e+00	err = 1.9413796258e-07	time = 0.01 sec
+┌ Warning: DMRG cancel 10:	obj = -9.765503493309e+00	err = 1.2114747492e-07	time = 0.94 sec
 └ @ MPSKit ~/work/MPSKit.jl/MPSKit.jl/src/algorithms/groundstate/dmrg.jl:54
-<mps|H|mps> = -0.976550347605331

Infinite Matrix Product States

Similarly, an infinite MPS can be constructed by specifying the tensors for the unit cell, characterised by the spaces (dimensions) thereof.

d = 2 # physical dimension
+<mps|H|mps> = -0.9765503493308904

Infinite Matrix Product States

Similarly, an infinite MPS can be constructed by specifying the tensors for the unit cell, characterised by the spaces (dimensions) thereof.

d = 2 # physical dimension
 D = 5 # virtual dimension
 mps = InfiniteMPS(d, D) # random MPS
single site InfiniteMPS:
 │   ⋮
@@ -73,101 +73,52 @@
 

These objects can then be used to compute observables and expectation values. For example, the norm of the MPS, which is equal to the expectation value of the identity operator can be computed by:

N1 = norm(mps)
 N2 = expectation_value(mps, 1 => id(physicalspace(mps, 1)))
 println("‖mps‖ = $N1")
-println("<mps|𝕀₁|mps> = $N2")
‖mps‖ = 1.0000000000000002
-<mps|𝕀₁|mps> = 1.0000000000000004 + 0.0im
Normalization of infinite MPS

Because infinite MPS cannot sensibly be normalized to anything but $1$, the norm of an infinite MPS is always set to be $1$ at construction. If this were not the case, any observable computed from the MPS would either blow up to infinity or vanish to zero.

Finally, the MPS can be optimized in order to determine groundstates of given Hamiltonians. Using the pre-defined models in MPSKitModels, we can construct the groundstate for the transverse field Ising model:

H = transverse_field_ising(; J=1.0, g=0.5)
+println("<mps|𝕀₁|mps> = $N2")
‖mps‖ = 0.9999999999999999
+<mps|𝕀₁|mps> = 0.9999999999999996 + 0.0im
Normalization of infinite MPS

Because infinite MPS cannot sensibly be normalized to anything but $1$, the norm of an infinite MPS is always set to be $1$ at construction. If this were not the case, any observable computed from the MPS would either blow up to infinity or vanish to zero.

Finally, the MPS can be optimized in order to determine groundstates of given Hamiltonians. Using the pre-defined models in MPSKitModels, we can construct the groundstate for the transverse field Ising model:

H = transverse_field_ising(; J=1.0, g=0.5)
 mps, = find_groundstate(mps, H, VUMPS(; maxiter=10))
 E0 = expectation_value(mps, H)
-println("<mps|H|mps> = $(sum(real(E0)) / length(mps))")
[ Info: VUMPS init:	obj = -5.181474077699e-01	err = 4.6731e-01
-[ Info: VUMPS   1:	obj = -1.063040238151e+00	err = 2.1744047423e-02	time = 0.00 sec
-┌ Warning: ignoring imaginary component 1.8056744473735065e-6 from total weight 2.1570137753700456: operator might not be hermitian?
-│   α = 1.8501393748700075 + 1.8056744473735065e-6im
-│   β₁ = 0.09265935533399691
-│   β₂ = 1.1050370874127173
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 4.256266268737319e-6 from total weight 2.4427266618558328: operator might not be hermitian?
-│   α = 1.8558022112749242 + 4.256266268737319e-6im
-│   β₁ = 1.1050370874127173
-│   β₂ = 1.1409665782102232
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 5.151449161577837e-6 from total weight 3.7096068323868736: operator might not be hermitian?
-│   α = 3.0294899216373894 + 5.151449161577837e-6im
-│   β₁ = 1.1409665782102232
-│   β₂ = 1.8115101249978083
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 7.352259235149372e-6 from total weight 4.93532261769312: operator might not be hermitian?
-│   α = 4.121391944750827 + 7.352259235149372e-6im
-│   β₁ = 1.8115101249978083
-│   β₂ = 2.022367139129944
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 9.11628826125166e-6 from total weight 4.999756705034466: operator might not be hermitian?
-│   α = 4.055389822846883 + 9.11628826125166e-6im
-│   β₁ = 2.022367139129944
-│   β₂ = 2.11220539928561
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 1.1743327790976477e-5 from total weight 5.782464953691945: operator might not be hermitian?
-│   α = 4.8402932613499114 + 1.1743327790976477e-5im
-│   β₁ = 2.11220539928561
-│   β₂ = 2.3552177045651312
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 1.3537416337028318e-5 from total weight 6.005718105960271: operator might not be hermitian?
-│   α = 4.878052519645104 + 1.3537416337028318e-5im
-│   β₁ = 2.3552177045651312
-│   β₂ = 2.593492461481767
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 1.2706832813704633e-5 from total weight 6.067671176408643: operator might not be hermitian?
-│   α = 5.069044831704548 + 1.2706832813704633e-5im
-│   β₁ = 2.593492461481767
-│   β₂ = 2.0964767709816
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 1.1433712370716165e-5 from total weight 5.04047452680127: operator might not be hermitian?
-│   α = 4.181856810889952 + 1.1433712370716165e-5im
-│   β₁ = 2.0964767709816
-│   β₂ = 1.8770301588279403
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 2.3433538796947817e-6 from total weight 3.030014050305159: operator might not be hermitian?
-│   α = 2.8294453023010235 + 2.3433538796947817e-6im
-│   β₁ = 0.08170533682433949
-│   β₂ = 1.0809942942783166
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 5.246547293728983e-6 from total weight 3.268173849837615: operator might not be hermitian?
-│   α = 2.8884618652322955 + 5.246547293728983e-6im
-│   β₁ = 1.0809942942783166
-│   β₂ = 1.0812953812771893
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 7.32759455832066e-6 from total weight 4.330549370516921: operator might not be hermitian?
-│   α = 3.8870346315939788 + 7.32759455832066e-6im
-│   β₁ = 1.0812953812771893
-│   β₂ = 1.5733467264555785
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 1.0841571626341029e-5 from total weight 5.0228712346766695: operator might not be hermitian?
-│   α = 4.462044424026542 + 1.0841571626341029e-5im
-│   β₁ = 1.5733467264555785
-│   β₂ = 1.6864089291716728
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 1.1512390659607075e-5 from total weight 5.085124664343902: operator might not be hermitian?
-│   α = 4.546245701605134 + 1.1512390659607075e-5im
-│   β₁ = 1.6864089291716728
-│   β₂ = 1.531720534573146
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 1.530405156698056e-5 from total weight 4.5748342166406735: operator might not be hermitian?
-│   α = 4.069671964411379 + 1.530405156698056e-5im
-│   β₁ = 1.531720534573146
-│   β₂ = 1.4215169417080675
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 1.4306485092790977e-5 from total weight 4.913271658513786: operator might not be hermitian?
-│   α = 4.365658395332932 + 1.4306485092790977e-5im
-│   β₁ = 1.4215169417080675
-│   β₂ = 1.7494441259572022
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-┌ Warning: ignoring imaginary component 1.4817101695055457e-5 from total weight 4.692973731281466: operator might not be hermitian?
-│   α = 4.234115367740591 + 1.4817101695055457e-5im
-│   β₁ = 1.7494441259572022
-│   β₂ = 1.017700714893695
-└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
-[ Info: VUMPS   2:	obj = -1.063544409730e+00	err = 1.4876722342e-05	time = 0.07 sec
-[ Info: VUMPS   3:	obj = -1.063544409973e+00	err = 7.5692126412e-07	time = 0.00 sec
-[ Info: VUMPS   4:	obj = -1.063544409973e+00	err = 5.8890174813e-08	time = 0.00 sec
-[ Info: VUMPS   5:	obj = -1.063544409973e+00	err = 6.2527261188e-09	time = 0.00 sec
-[ Info: VUMPS   6:	obj = -1.063544409973e+00	err = 6.6813910904e-10	time = 0.00 sec
-[ Info: VUMPS conv 7:	obj = -1.063544409973e+00	err = 7.5306266495e-11	time = 0.09 sec
-<mps|H|mps> = -1.0635444099732512

Additional Resources

For more detailed information on the functionality and capabilities of MPSKit, refer to the Manual section, or have a look at the Examples page.

Keep in mind that the documentation is still a work in progress, and that some features may not be fully documented yet. If you encounter any issues or have questions, please check the library's issue tracker on the GitHub repository and open a new issue.

Publications using MPSKit

Below you can find a list of publications that have made use of MPSKit. If you have used this package and wish to have your publication added to this list, please open a pull request or an issue on the GitHub repository.

  • R. Belyansky et al., “High-Energy Collision of Quarks and Hadrons in the Schwinger Model: From Tensor Networks to Circuit QED,” 2023, doi: 10.48550/ARXIV.2307.02522.
  • L. Devos, L. Vanderstraeten, and F. Verstraete, “Haldane gap in the SU(3) [3 0 0] Heisenberg chain,” Phys. Rev. B, vol. 106, no. 15, p. 155103, Oct. 2022, doi: 10.1103/PhysRevB.106.155103.
  • J. C. Halimeh, M. V. Damme, T. V. Zache, D. Banerjee, and P. Hauke, “Achieving the quantum field theory limit in far-from-equilibrium quantum link models,” Quantum, vol. 6, p. 878, Dec. 2022, doi: 10.22331/q-2022-12-19-878.
  • J. C. Halimeh, D. Trapin, M. Van Damme, and M. Heyl, “Local measures of dynamical quantum phase transitions,” Phys. Rev. B, vol. 104, no. 7, p. 075130, Aug. 2021, doi: 10.1103/PhysRevB.104.075130.
  • M. Hauru, M. Van Damme, and J. Haegeman, “Riemannian optimization of isometric tensor networks,” SciPost Physics, vol. 10, no. 2, p. 040, Feb. 2021, doi: 10.21468/SciPostPhys.10.2.040.
  • M. Van Damme, R. Vanhove, J. Haegeman, F. Verstraete, and L. Vanderstraeten, “Efficient matrix product state methods for extracting spectral information on rings and cylinders,” Phys. Rev. B, vol. 104, no. 11, p. 115142, Sep. 2021, doi: 10.1103/PhysRevB.104.115142.
  • M. Van Damme, T. V. Zache, D. Banerjee, P. Hauke, and J. C. Halimeh, “Dynamical quantum phase transitions in spin-$S$ $\text{U}(1)$ quantum link models,” Phys. Rev. B, vol. 106, no. 24, p. 245110, Dec. 2022, doi: 10.1103/PhysRevB.106.245110.
  • E. L. Weerda and M. Rizzi, “Fractional quantum Hall states with variational Projected Entangled-Pair States: a study of the bosonic Harper-Hofstadter model,” 2023, doi: 10.48550/ARXIV.2309.12811.
  • C. Yu and J.-W. Lee, “Closing of the Haldane gap in a spin-1 XXZ chain,” J. Korean Phys. Soc., vol. 79, no. 9, pp. 841–845, Nov. 2021, doi: 10.1007/s40042-021-00283-z.
  • Y. Zhang, A. Hulsch, H.-C. Zhang, W. Tang, L. Wang, and H.-H. Tu, “Universal Scaling of Klein Bottle Entropy near Conformal Critical Points,” Phys. Rev. Lett., vol. 130, no. 15, p. 151602, Apr. 2023, doi: 10.1103/PhysRevLett.130.151602.
  • Gertian Roose, Laurens Vanderstraeten, Jutho Haegeman, and Nick Bultinck. Anomalous domain wall condensation in a modified ising chain. Phys. Rev. B, 99: 195132, May 2019. 10.1103/​PhysRevB.99.195132.

https:/​/​doi.org/​10.1103/​PhysRevB.99.195132

  • Roose, G., Bultinck, N., Vanderstraeten, L. et al. Lattice regularisation and entanglement structure of the Gross-Neveu model. J. High Energ. Phys. 2021, 207 (2021). https://doi.org/10.1007/JHEP07(2021)207
  • Roose, G., Haegeman, J., Van Acoleyen, K. et al. The chiral Gross-Neveu model on the lattice via a Landau-forbidden phase transition. J. High Energ. Phys. 2022, 19 (2022). https://doi.org/10.1007/JHEP06(2022)019
+println("<mps|H|mps> = $(sum(real(E0)) / length(mps))")
[ Info: VUMPS init:	obj = -5.021876093998e-01	err = 4.5075e-01
+[ Info: VUMPS   1:	obj = -1.038920289822e+00	err = 1.0636274549e-01	time = 0.00 sec
+┌ Warning: ignoring imaginary component 1.1738374042363775e-6 from total weight 1.0888813436641487: operator might not be hermitian?
+│   α = -0.10529135664495481 + 1.1738374042363775e-6im
+│   β₁ = 0.6939250475606353
+│   β₂ = 0.8324928463129875
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.7400000109531188e-6 from total weight 2.6230979783673254: operator might not be hermitian?
+│   α = 2.1015354940385427 + 1.7400000109531188e-6im
+│   β₁ = 0.8324928463129875
+│   β₂ = 1.330844556004044
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.786125635887259e-6 from total weight 3.2318109568483693: operator might not be hermitian?
+│   α = 2.3415739860724325 + 1.786125635887259e-6im
+│   β₁ = 1.330844556004044
+│   β₂ = 1.7861931856059805
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.31521591536371e-6 from total weight 1.3576410523133957: operator might not be hermitian?
+│   α = 0.9220754287035805 + 1.31521591536371e-6im
+│   β₁ = 0.6571534675491175
+│   β₂ = 0.7490763985029655
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 1.9047184168022313e-6 from total weight 3.382197752602955: operator might not be hermitian?
+│   α = 3.01972789143682 + 1.9047184168022313e-6im
+│   β₁ = 0.7490763985029655
+│   β₂ = 1.3264198613535667
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 2.2681652829537047e-6 from total weight 3.5912447010893533: operator might not be hermitian?
+│   α = 3.0329402312390186 + 2.2681652829537047e-6im
+│   β₁ = 1.3264198613535667
+│   β₂ = 1.3924519410865892
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+┌ Warning: ignoring imaginary component 2.370950433157326e-6 from total weight 4.325466307153559: operator might not be hermitian?
+│   α = 3.859949253623568 + 2.370950433157326e-6im
+│   β₁ = 1.3924519410865892
+│   β₂ = 1.368038057047419
+└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170
+[ Info: VUMPS   2:	obj = -1.063542783231e+00	err = 1.0474740843e-03	time = 0.08 sec
+[ Info: VUMPS   3:	obj = -1.063544409917e+00	err = 6.5701602717e-06	time = 0.00 sec
+[ Info: VUMPS   4:	obj = -1.063544409973e+00	err = 7.1750093965e-07	time = 0.00 sec
+[ Info: VUMPS   5:	obj = -1.063544409973e+00	err = 6.0977966998e-08	time = 0.00 sec
+[ Info: VUMPS   6:	obj = -1.063544409973e+00	err = 6.0533436026e-09	time = 0.00 sec
+[ Info: VUMPS   7:	obj = -1.063544409973e+00	err = 6.4589017660e-10	time = 0.00 sec
+[ Info: VUMPS conv 8:	obj = -1.063544409973e+00	err = 7.6260743024e-11	time = 0.10 sec
+<mps|H|mps> = -1.063544409973251

Additional Resources

For more detailed information on the functionality and capabilities of MPSKit, refer to the Manual section, or have a look at the Examples page.

Keep in mind that the documentation is still a work in progress, and that some features may not be fully documented yet. If you encounter any issues or have questions, please check the library's issue tracker on the GitHub repository and open a new issue.

Publications using MPSKit

Below you can find a list of publications that have made use of MPSKit. If you have used this package and wish to have your publication added to this list, please open a pull request or an issue on the GitHub repository.

  • R. Belyansky et al., “High-Energy Collision of Quarks and Hadrons in the Schwinger Model: From Tensor Networks to Circuit QED,” 2023, doi: 10.48550/ARXIV.2307.02522.
  • L. Devos, L. Vanderstraeten, and F. Verstraete, “Haldane gap in the SU(3) [3 0 0] Heisenberg chain,” Phys. Rev. B, vol. 106, no. 15, p. 155103, Oct. 2022, doi: 10.1103/PhysRevB.106.155103.
  • J. C. Halimeh, M. V. Damme, T. V. Zache, D. Banerjee, and P. Hauke, “Achieving the quantum field theory limit in far-from-equilibrium quantum link models,” Quantum, vol. 6, p. 878, Dec. 2022, doi: 10.22331/q-2022-12-19-878.
  • J. C. Halimeh, D. Trapin, M. Van Damme, and M. Heyl, “Local measures of dynamical quantum phase transitions,” Phys. Rev. B, vol. 104, no. 7, p. 075130, Aug. 2021, doi: 10.1103/PhysRevB.104.075130.
  • M. Hauru, M. Van Damme, and J. Haegeman, “Riemannian optimization of isometric tensor networks,” SciPost Physics, vol. 10, no. 2, p. 040, Feb. 2021, doi: 10.21468/SciPostPhys.10.2.040.
  • M. Van Damme, R. Vanhove, J. Haegeman, F. Verstraete, and L. Vanderstraeten, “Efficient matrix product state methods for extracting spectral information on rings and cylinders,” Phys. Rev. B, vol. 104, no. 11, p. 115142, Sep. 2021, doi: 10.1103/PhysRevB.104.115142.
  • M. Van Damme, T. V. Zache, D. Banerjee, P. Hauke, and J. C. Halimeh, “Dynamical quantum phase transitions in spin-$S$ $\text{U}(1)$ quantum link models,” Phys. Rev. B, vol. 106, no. 24, p. 245110, Dec. 2022, doi: 10.1103/PhysRevB.106.245110.
  • E. L. Weerda and M. Rizzi, “Fractional quantum Hall states with variational Projected Entangled-Pair States: a study of the bosonic Harper-Hofstadter model,” 2023, doi: 10.48550/ARXIV.2309.12811.
  • C. Yu and J.-W. Lee, “Closing of the Haldane gap in a spin-1 XXZ chain,” J. Korean Phys. Soc., vol. 79, no. 9, pp. 841–845, Nov. 2021, doi: 10.1007/s40042-021-00283-z.
  • Y. Zhang, A. Hulsch, H.-C. Zhang, W. Tang, L. Wang, and H.-H. Tu, “Universal Scaling of Klein Bottle Entropy near Conformal Critical Points,” Phys. Rev. Lett., vol. 130, no. 15, p. 151602, Apr. 2023, doi: 10.1103/PhysRevLett.130.151602.
  • Gertian Roose, Laurens Vanderstraeten, Jutho Haegeman, and Nick Bultinck. Anomalous domain wall condensation in a modified ising chain. Phys. Rev. B, 99: 195132, May 2019. 10.1103/​PhysRevB.99.195132.

https:/​/​doi.org/​10.1103/​PhysRevB.99.195132

  • Roose, G., Bultinck, N., Vanderstraeten, L. et al. Lattice regularisation and entanglement structure of the Gross-Neveu model. J. High Energ. Phys. 2021, 207 (2021). https://doi.org/10.1007/JHEP07(2021)207
  • Roose, G., Haegeman, J., Van Acoleyen, K. et al. The chiral Gross-Neveu model on the lattice via a Landau-forbidden phase transition. J. High Energ. Phys. 2022, 19 (2022). https://doi.org/10.1007/JHEP06(2022)019
diff --git a/dev/lib/lib/index.html b/dev/lib/lib/index.html index 21003db2..e0424ae4 100644 --- a/dev/lib/lib/index.html +++ b/dev/lib/lib/index.html @@ -5,44 +5,44 @@ FiniteMPS([f, eltype], N::Int, physicalspace::Union{S,CompositeSpace{S}}, maxvirtualspaces::Union{S,Vector{S}}; normalize=true, left=oneunit(S), right=oneunit(S)) where {S<:ElementarySpace} -FiniteMPS(As::Vector{<:GenericMPSTensor}; normalize=false, overwrite=false)

Construct an MPS via a specification of physical and virtual spaces, or from a list of tensors As. All cases reduce to the latter.

Arguments

  • As::Vector{<:GenericMPSTensor}: vector of site tensors

  • f::Function=rand: initializer function for tensor data

  • eltype::Type{<:Number}=ComplexF64: scalar type of tensors

  • physicalspaces::Vector{<:Union{S, CompositeSpace{S}}: list of physical spaces

  • N::Int: number of sites

  • physicalspace::Union{S,CompositeSpace{S}}: local physical space

  • virtualspaces::Vector{<:Union{S, CompositeSpace{S}}: list of virtual spaces

  • maxvirtualspace::S: maximum virtual space

Keywords

  • normalize: normalize the constructed state
  • overwrite=false: overwrite the given input tensors
  • left=oneunit(S): left-most virtual space
  • right=oneunit(S): right-most virtual space
source
MPSKit.InfiniteMPSType
InfiniteMPS{A<:GenericMPSTensor,B<:MPSBondTensor} <: AbtractMPS

Type that represents an infinite Matrix Product State.

Fields

  • AL – left-gauged MPS tensors
  • AR – right-gauged MPS tensors
  • AC – center-gauged MPS tensors
  • CR – gauge tensors

Notes

By convention, we have that:

  • AL[i] * CR[i] = AC[i] = CR[i-1] * AR[i]
  • AL[i]' * AL[i] = 1
  • AR[i] * AR[i]' = 1

Constructors

InfiniteMPS([f, eltype], physicalspaces::Vector{<:Union{S, CompositeSpace{S}},
+FiniteMPS(As::Vector{<:GenericMPSTensor}; normalize=false, overwrite=false)

Construct an MPS via a specification of physical and virtual spaces, or from a list of tensors As. All cases reduce to the latter.

Arguments

  • As::Vector{<:GenericMPSTensor}: vector of site tensors

  • f::Function=rand: initializer function for tensor data

  • eltype::Type{<:Number}=ComplexF64: scalar type of tensors

  • physicalspaces::Vector{<:Union{S, CompositeSpace{S}}: list of physical spaces

  • N::Int: number of sites

  • physicalspace::Union{S,CompositeSpace{S}}: local physical space

  • virtualspaces::Vector{<:Union{S, CompositeSpace{S}}: list of virtual spaces

  • maxvirtualspace::S: maximum virtual space

Keywords

  • normalize: normalize the constructed state
  • overwrite=false: overwrite the given input tensors
  • left=oneunit(S): left-most virtual space
  • right=oneunit(S): right-most virtual space
source
MPSKit.InfiniteMPSType
InfiniteMPS{A<:GenericMPSTensor,B<:MPSBondTensor} <: AbtractMPS

Type that represents an infinite Matrix Product State.

Fields

  • AL – left-gauged MPS tensors
  • AR – right-gauged MPS tensors
  • AC – center-gauged MPS tensors
  • CR – gauge tensors

Notes

By convention, we have that:

  • AL[i] * CR[i] = AC[i] = CR[i-1] * AR[i]
  • AL[i]' * AL[i] = 1
  • AR[i] * AR[i]' = 1

Constructors

InfiniteMPS([f, eltype], physicalspaces::Vector{<:Union{S, CompositeSpace{S}},
             virtualspaces::Vector{<:Union{S, CompositeSpace{S}};
             kwargs...) where {S<:ElementarySpace}
 InfiniteMPS(As::AbstractVector{<:GenericMPSTensor}; kwargs...)
 InfiniteMPS(ALs::AbstractVector{<:GenericMPSTensor}, C₀::MPSBondTensor;
-            kwargs...)

Construct an MPS via a specification of physical and virtual spaces, or from a list of tensors As, or a list of left-gauged tensors ALs.

Arguments

  • As::AbstractVector{<:GenericMPSTensor}: vector of site tensors

  • ALs::AbstractVector{<:GenericMPSTensor}: vector of left-gauged site tensors

  • C₀::MPSBondTensor: initial gauge tensor

  • f::Function=rand: initializer function for tensor data

  • eltype::Type{<:Number}=ComplexF64: scalar type of tensors

  • physicalspaces::AbstractVector{<:Union{S, CompositeSpace{S}}: list of physical spaces

  • virtualspaces::AbstractVector{<:Union{S, CompositeSpace{S}}: list of virtual spaces

Keywords

  • tol: gauge fixing tolerance
  • maxiter: gauge fixing maximum iterations
source
MPSKit.WindowMPSType
WindowMPS{A<:GenericMPSTensor,B<:MPSBondTensor} <: AbstractFiniteMPS

Type that represents a finite Matrix Product State embedded in an infinte Matrix Product State.

Fields

  • left_gs::InfiniteMPS – left infinite environment
  • window::FiniteMPS – finite window Matrix Product State
  • right_gs::InfiniteMPS – right infinite environment

Constructors

WindowMPS(left_gs::InfiniteMPS, window_state::FiniteMPS, [right_gs::InfiniteMPS])
+            kwargs...)

Construct an MPS via a specification of physical and virtual spaces, or from a list of tensors As, or a list of left-gauged tensors ALs.

Arguments

  • As::AbstractVector{<:GenericMPSTensor}: vector of site tensors

  • ALs::AbstractVector{<:GenericMPSTensor}: vector of left-gauged site tensors

  • C₀::MPSBondTensor: initial gauge tensor

  • f::Function=rand: initializer function for tensor data

  • eltype::Type{<:Number}=ComplexF64: scalar type of tensors

  • physicalspaces::AbstractVector{<:Union{S, CompositeSpace{S}}: list of physical spaces

  • virtualspaces::AbstractVector{<:Union{S, CompositeSpace{S}}: list of virtual spaces

Keywords

  • tol: gauge fixing tolerance
  • maxiter: gauge fixing maximum iterations
source
MPSKit.WindowMPSType
WindowMPS{A<:GenericMPSTensor,B<:MPSBondTensor} <: AbstractFiniteMPS

Type that represents a finite Matrix Product State embedded in an infinte Matrix Product State.

Fields

  • left_gs::InfiniteMPS – left infinite environment
  • window::FiniteMPS – finite window Matrix Product State
  • right_gs::InfiniteMPS – right infinite environment

Constructors

WindowMPS(left_gs::InfiniteMPS, window_state::FiniteMPS, [right_gs::InfiniteMPS])
 WindowMPS(left_gs::InfiniteMPS, window_tensors::AbstractVector, [right_gs::InfiniteMPS])
 WindowMPS([f, eltype], physicalspaces::Vector{<:Union{S, CompositeSpace{S}},
           virtualspaces::Vector{<:Union{S, CompositeSpace{S}}, left_gs::InfiniteMPS,
           [right_gs::InfiniteMPS])
 WindowMPS([f, eltype], physicalspaces::Vector{<:Union{S,CompositeSpace{S}}},
-          maxvirtualspace::S, left_gs::InfiniteMPS, [right_gs::InfiniteMPS])

Construct a WindowMPS via a specification of left and right infinite environment, and either a window state or a vector of tensors to construct the window. Alternatively, it is possible to supply the same arguments as for the constructor of FiniteMPS, followed by a left (and right) environment to construct the WindowMPS in one step.

Note

By default, the right environment is chosen to be equal to the left, however no copy is made. In this case, changing the left state will also affect the right state.

WindowMPS(state::InfiniteMPS, L::Int)

Construct a WindowMPS from an InfiniteMPS, by promoting a region of length L to a FiniteMPS.

source
MPSKit.MPSMultilineType
const MPSMultiline = Multiline{<:InfiniteMPS}

Type that represents multiple lines of InfiniteMPS objects.

Constructors

MPSMultiline(mpss::AbstractVector{<:InfiniteMPS})
+          maxvirtualspace::S, left_gs::InfiniteMPS, [right_gs::InfiniteMPS])

Construct a WindowMPS via a specification of left and right infinite environment, and either a window state or a vector of tensors to construct the window. Alternatively, it is possible to supply the same arguments as for the constructor of FiniteMPS, followed by a left (and right) environment to construct the WindowMPS in one step.

Note

By default, the right environment is chosen to be equal to the left, however no copy is made. In this case, changing the left state will also affect the right state.

WindowMPS(state::InfiniteMPS, L::Int)

Construct a WindowMPS from an InfiniteMPS, by promoting a region of length L to a FiniteMPS.

source
MPSKit.MPSMultilineType
const MPSMultiline = Multiline{<:InfiniteMPS}

Type that represents multiple lines of InfiniteMPS objects.

Constructors

MPSMultiline(mpss::AbstractVector{<:InfiniteMPS})
 MPSMultiline([f, eltype], physicalspaces::Matrix{<:Union{S, CompositeSpace{S}},
              virtualspaces::Matrix{<:Union{S, CompositeSpace{S}}) where
              {S<:ElementarySpace}
 MPSMultiline(As::AbstractMatrix{<:GenericMPSTensor}; kwargs...)
 MPSMultiline(ALs::AbstractMatrix{<:GenericMPSTensor}, 
-             C₀::AbstractVector{<:MPSBondTensor}; kwargs...)

See also: Multiline

source

Operators

MPSKit.FiniteMPOType
FiniteMPO(Os::Vector{<:MPOTensor}) -> FiniteMPO
-FiniteMPO(O::AbstractTensorMap{S,N,N}) where {S,N} -> FiniteMPO

Matrix Product Operator (MPO) acting on a finite tensor product space with a linear order.

source
MPSKit.SparseMPOType
struct SparseMPO{S,T<:MPOTensor,E<:Number}

Sparse MPO, used to represent both time evolution MPOs and hamiltonians.

source
MPSKit.MPOHamiltonianType
MPOHamiltonian(lattice::AbstractArray{<:VectorSpace}, local_operators...)
+             C₀::AbstractVector{<:MPSBondTensor}; kwargs...)

See also: Multiline

source

Operators

MPSKit.FiniteMPOType
FiniteMPO(Os::Vector{<:MPOTensor}) -> FiniteMPO
+FiniteMPO(O::AbstractTensorMap{S,N,N}) where {S,N} -> FiniteMPO

Matrix Product Operator (MPO) acting on a finite tensor product space with a linear order.

source
MPSKit.SparseMPOType
struct SparseMPO{S,T<:MPOTensor,E<:Number}

Sparse MPO, used to represent both time evolution MPOs and hamiltonians.

source
MPSKit.MPOHamiltonianType
MPOHamiltonian(lattice::AbstractArray{<:VectorSpace}, local_operators...)
 MPOHamiltonian(lattice::AbstractArray{<:VectorSpace})
 MPOHamiltonian(x::AbstractArray{<:Any,3})

MPO representation of a hamiltonian. This is a specific form of a SparseMPO, where all the sites are represented by an upper triangular block matrix of the following form:

\[\begin{pmatrix} 1 C D 0 A B 0 0 1 \end{pmatrix}\]

where A, B, C, and D are MPOTensors, or (sparse) blocks thereof.

Examples

For example, constructing a nearest-neighbour Hamiltonian would look like this:

lattice = fill(ℂ^2, 10)
-H = MPOHamiltonian(lattice, (i, i+1) => O for i in 1:length(lattice)-1)

See also instantiate_operator, which is responsable for instantiating the local operators in a form that is compatible with this constructor.

source

Environments

MPSKit.FinEnvType
FinEnv keeps track of the environments for FiniteMPS / WindowMPS
+H = MPOHamiltonian(lattice, (i, i+1) => O for i in 1:length(lattice)-1)

See also instantiate_operator, which is responsable for instantiating the local operators in a form that is compatible with this constructor.

source

Environments

MPSKit.FinEnvType
FinEnv keeps track of the environments for FiniteMPS / WindowMPS
 It automatically checks if the queried environment is still correctly cached and if not - recalculates
 
 if above is set to nothing, above === below.
 
-opp can be a vector of nothing, in which case it'll just be the overlap
source
Missing docstring.

Missing docstring for MPSKit.IDMRGEnvs. Check Documenter's build log for details.

Generic actions

MPSKit.∂CFunction
Zero-site derivative (the C matrix to the right of pos)
source
Missing docstring.

Missing docstring for ∂∂C. Check Documenter's build log for details.

Missing docstring.

Missing docstring for ∂AC. Check Documenter's build log for details.

Missing docstring.

Missing docstring for ∂∂AC. Check Documenter's build log for details.

Missing docstring.

Missing docstring for ∂∂AC2. Check Documenter's build log for details.

Missing docstring.

Missing docstring for c_proj. Check Documenter's build log for details.

Missing docstring.

Missing docstring for ac_proj. Check Documenter's build log for details.

Missing docstring.

Missing docstring for ac2_proj. Check Documenter's build log for details.

MPSKit.transfer_leftFunction
transfer_left(v, A, Ā)

apply a transfer matrix to the left.

 ┌─A─
+opp can be a vector of nothing, in which case it'll just be the overlap
source
Missing docstring.

Missing docstring for MPSKit.IDMRGEnvs. Check Documenter's build log for details.

Generic actions

MPSKit.∂CFunction
Zero-site derivative (the C matrix to the right of pos)
source
Missing docstring.

Missing docstring for ∂∂C. Check Documenter's build log for details.

Missing docstring.

Missing docstring for ∂AC. Check Documenter's build log for details.

Missing docstring.

Missing docstring for ∂∂AC. Check Documenter's build log for details.

Missing docstring.

Missing docstring for ∂∂AC2. Check Documenter's build log for details.

Missing docstring.

Missing docstring for c_proj. Check Documenter's build log for details.

Missing docstring.

Missing docstring for ac_proj. Check Documenter's build log for details.

Missing docstring.

Missing docstring for ac2_proj. Check Documenter's build log for details.

MPSKit.transfer_leftFunction
transfer_left(v, A, Ā)

apply a transfer matrix to the left.

 ┌─A─
 -v │
- └─Ā─
source

Algorithms

MPSKit.find_groundstateFunction
find_groundstate(ψ, H, [environments]; kwargs...)
-find_groundstate(ψ, H, algorithm, environments)

Compute the groundstate for Hamiltonian H with initial guess ψ. If not specified, an optimization algorithm will be attempted based on the supplied keywords.

Arguments

  • ψ::AbstractMPS: initial guess
  • H::AbstractMPO: operator for which to find the groundstate
  • [environments]: MPS environment manager
  • algorithm: optimization algorithm

Keywords

  • tol::Float64: tolerance for convergence criterium
  • maxiter::Int: maximum amount of iterations
  • verbosity::Int: display progress information
source
MPSKit.timestepFunction
timestep(ψ₀, H, t, dt, [alg], [envs]; kwargs...)
-timestep!(ψ₀, H, t, dt, [alg], [envs]; kwargs...)

Time-step the state ψ₀ with Hamiltonian H over a given time step dt at time t, solving the Schroedinger equation: $i ∂ψ/∂t = H ψ$.

Arguments

  • ψ₀::AbstractMPS: initial state
  • H::AbstractMPO: operator that generates the time evolution (can be time-dependent).
  • t::Number: starting time of time-step
  • dt::Number: time-step magnitude
  • [alg]: algorithm to use for the time evolution. Defaults to TDVP.
  • [envs]: MPS environment manager
source
Missing docstring.

Missing docstring for dynamicaldmrg. Check Documenter's build log for details.

MPSKit.excitationsFunction
excitations(H, algorithm::QuasiparticleAnsatz, ψ::FiniteQP, [left_environments],
+─Ā─┘
source

Algorithms

MPSKit.find_groundstateFunction
find_groundstate(ψ, H, [environments]; kwargs...)
+find_groundstate(ψ, H, algorithm, environments)

Compute the groundstate for Hamiltonian H with initial guess ψ. If not specified, an optimization algorithm will be attempted based on the supplied keywords.

Arguments

  • ψ::AbstractMPS: initial guess
  • H::AbstractMPO: operator for which to find the groundstate
  • [environments]: MPS environment manager
  • algorithm: optimization algorithm

Keywords

  • tol::Float64: tolerance for convergence criterium
  • maxiter::Int: maximum amount of iterations
  • verbosity::Int: display progress information
source
MPSKit.timestepFunction
timestep(ψ₀, H, t, dt, [alg], [envs]; kwargs...)
+timestep!(ψ₀, H, t, dt, [alg], [envs]; kwargs...)

Time-step the state ψ₀ with Hamiltonian H over a given time step dt at time t, solving the Schroedinger equation: $i ∂ψ/∂t = H ψ$.

Arguments

  • ψ₀::AbstractMPS: initial state
  • H::AbstractMPO: operator that generates the time evolution (can be time-dependent).
  • t::Number: starting time of time-step
  • dt::Number: time-step magnitude
  • [alg]: algorithm to use for the time evolution. Defaults to TDVP.
  • [envs]: MPS environment manager
source
Missing docstring.

Missing docstring for dynamicaldmrg. Check Documenter's build log for details.

MPSKit.excitationsFunction
excitations(H, algorithm::QuasiparticleAnsatz, ψ::FiniteQP, [left_environments],
             [right_environments]; num=1)
 excitations(H, algorithm::QuasiparticleAnsatz, ψ::InfiniteQP, [left_environments],
             [right_environments]; num=1, solver=Defaults.solver)
@@ -51,11 +51,11 @@
 excitations(H, algorithm::ChepigaAnsatz, ψ::FiniteMPS, [envs];
             num=1, pos=length(ψ)÷2)
 excitations(H, algorithm::ChepigaAnsatz2, ψ::FiniteMPS, [envs];
-            num=1, pos=length(ψ)÷2)

Compute the first excited states and their energy gap above a groundstate.

Arguments

  • H::AbstractMPO: operator for which to find the excitations
  • algorithm: optimization algorithm
  • ψ::QP: initial quasiparticle guess
  • ψs::NTuple{N, <:FiniteMPS}: N first excited states
  • [left_environments]: left groundstate environment
  • [right_environments]: right groundstate environment

Keywords

  • num::Int: number of excited states to compute
  • solver: algorithm for the linear solver of the quasiparticle environments
  • init: initial excited state guess
  • pos: position of perturbation
source
MPSKit.approximateFunction
approximate(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)
-approximate!(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)

Compute an approximation to the application of an operator O to the state ψ in the form of an MPS ψ₀.

Arguments

  • ψ₀::AbstractMPS: initial guess of the approximated state
  • (O::AbstractMPO, ψ::AbstractMPS): operator O and state ψ to be approximated
  • algorithm: approximation algorithm. See below for a list of available algorithms.
  • [environments]: MPS environment manager

Keywords

  • tol::Float64: tolerance for convergence criterium
  • maxiter::Int: maximum amount of iterations
  • verbosity::Int: display progress information

Algorithms

  • DMRG: Alternating least square method for maximizing the fidelity with a single-site scheme.

  • DMRG2: Alternating least square method for maximizing the fidelity with a two-site scheme.

  • IDMRG1: Variant of DMRG for maximizing fidelity density in the thermodynamic limit.

  • IDMRG2: Variant of DMRG2 for maximizing fidelity density in the thermodynamic limit.

  • VOMPS: Tangent space method for truncating uniform MPS.

source

Groundstate algorithms

MPSKit.VUMPSType
VUMPS{F} <: Algorithm

Variational optimization algorithm for uniform matrix product states, as introduced in https://arxiv.org/abs/1701.07035.

Fields

  • tol::Float64: tolerance for convergence criterium

  • maxiter::Int: maximum amount of iterations

  • finalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, H, envs) -> ψ, envs

  • verbosity::Int: display progress information

  • alg_gauge=Defaults.alg_gauge(): algorithm for gauging

  • alg_eigsolve=Defaults.alg_eigsolve(): algorithm for eigensolvers

  • alg_environments=Defaults.alg_environments(): algorithm for updating environments

source
MPSKit.IDMRG1Type
IDMRG1{A} <: Algorithm

Single site infinite DMRG algorithm for finding groundstates.

Fields

  • tol::Float64: tolerance for convergence criterium
  • tol_gauge::Float64: tolerance for gauging algorithm
  • eigalg::A: eigensolver algorithm
  • maxiter::Int: maximum number of outer iterations
  • verbosity::Int: display progress information
source
MPSKit.IDMRG2Type
IDMRG2{A} <: Algorithm

2-site infinite DMRG algorithm for finding groundstates.

Fields

  • tol::Float64: tolerance for convergence criterium
  • tol_gauge::Float64: tolerance for gauging algorithm
  • eigalg::A: eigensolver algorithm
  • maxiter::Int: maximum number of outer iterations
  • verbosity::Int: display progress information
  • trscheme::TruncationScheme: truncation algorithm for [tsvd]TensorKit.tsvd
source
MPSKit.DMRGType
DMRG{A,F} <: Algorithm

Single site DMRG algorithm for finding groundstates.

Fields

  • tol::Float64: tolerance for convergence criterium
  • eigalg::A: eigensolver algorithm or a NamedTuple with the eigensolver settings
  • maxiter::Int: maximum number of outer iterations
  • verbosity::Int: display progress information
  • finalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, H, envs) -> ψ, envs
source
MPSKit.DMRG2Type
DMRG2{A,F} <: Algorithm

2-site DMRG algorithm for finding groundstates.

Fields

  • tol::Float64: tolerance for convergence criterium
  • eigalg::A: eigensolver algorithm or a NamedTuple with the eigensolver settings
  • maxiter::Int: maximum number of outer iterations
  • verbosity::Int: display progress information
  • finalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, H, envs) -> ψ, envs
  • trscheme: truncation algorithm for [tsvd]TensorKit.tsvd
source
MPSKit.GradientGrassmannType
GradientGrassmann <: Algorithm

Variational gradient-based optimization algorithm that keeps the MPS in left-canonical form, as points on a Grassmann manifold. The optimization is then a Riemannian gradient descent with a preconditioner to induce the metric from the Hilbert space inner product.

Fields

  • method::OptimKit.OptimizationAlgorithm: algorithm to perform the gradient search
  • finalize!::Function: user-supplied function which is applied after each iteration, with signature finalize!(x::GrassmannMPS.ManifoldPoint, f, g, numiter) -> x, f, g

Constructors

GradientGrassmann(; kwargs...)

Keywords

  • method=ConjugateGradient: instance of optimization algorithm, or type of optimization algorithm to construct
  • finalize!: finalizer algorithm
  • tol::Float64: tolerance for convergence criterium
  • maxiter::Int: maximum amount of iterations
  • verbosity::Int: level of information display
source

Time evolution algorithms

MPSKit.TDVPType
TDVP{A} <: Algorithm

Single site TDVP algorithm for time evolution.

Fields

  • integrator::A: integration algorithm (defaults to Lanczos exponentiation)
  • tolgauge::Float64: tolerance for gauging algorithm
  • gaugemaxiter::Int: maximum amount of gauging iterations
  • finalize::F: user-supplied function which is applied after each timestep, with signature finalize(t, Ψ, H, envs) -> Ψ, envs
source
MPSKit.TDVP2Type
TDVP2{A} <: Algorithm

2-site TDVP algorithm for time evolution.

Fields

  • integrator::A: integrator algorithm (defaults to Lanczos exponentiation)
  • tolgauge::Float64: tolerance for gauging algorithm
  • gaugemaxiter::Int: maximum amount of gauging iterations
  • trscheme: truncation algorithm for [tsvd]TensorKit.tsvd
  • finalize::F: user-supplied function which is applied after each timestep, with signature finalize(t, Ψ, H, envs) -> Ψ, envs
source
Missing docstring.

Missing docstring for TaylorCluster. Check Documenter's build log for details.

Missing docstring.

Missing docstring for WII. Check Documenter's build log for details.

Leading boundary algorithms

Missing docstring.

Missing docstring for VUMPS. Check Documenter's build log for details.

MPSKit.VOMPSType
VOMPS{F} <: Algorithm

Power method algorithm for infinite MPS. SciPost:4.1.004

Fields

  • tol::Float64: tolerance for convergence criterium

  • maxiter::Int: maximum amount of iterations

  • finalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, toapprox, envs) -> ψ, envs

  • verbosity::Int: display progress information

  • alg_gauge=Defaults.alg_gauge(): algorithm for gauging

  • alg_environments=Defaults.alg_environments(): algorithm for updating environments

source
Missing docstring.

Missing docstring for GradientGrassmann. Check Documenter's build log for details.

Bond change algorithms

MPSKit.OptimalExpandType
struct OptimalExpand <: Algorithm end

An algorithm that expands the given mps using the algorithm given in the VUMPS paper, by selecting the dominant contributions of a two-site updated MPS tensor, orthogonal to the original ψ.

Fields

  • trscheme::TruncationScheme = truncdim(1) : The truncation scheme to use.
source
MPSKit.RandExpandType
struct RandExpand <: Algorithm end

An algorithm that expands the bond dimension by adding random unitary vectors that are orthogonal to the existing state. This is achieved by performing a truncated SVD on a random two-site MPS tensor, which is made orthogonal to the existing state.

Fields

  • trscheme::TruncationScheme = truncdim(1) : The truncation scheme to use.
source
MPSKit.VUMPSSvdCutType
struct VUMPSSvdCut <: Algorithm end

An algorithm that uses an IDMRG2 step to change the bond dimension of a state.

Fields

  • tol_gauge::Real = Defaults.tolgauge : The tolerance for the gauge.
  • tol::Real = Defaults.tol : The tolerance for the Galerkin truncation.
  • tol_eigenval::Real = Defaults.tol : The tolerance for the eigenvalue solver.
  • trscheme::TruncationScheme = notrunc() : The truncation scheme to use.
source
MPSKit.SvdCutType
struct SvdCut <: Algorithm end

An algorithm that uses truncated SVD to change the bond dimension of a ψ.

Fields

  • trscheme::TruncationScheme = notrunc() : The truncation scheme to use.
source

Excitations

MPSKit.QuasiparticleAnsatzType
QuasiparticleAnsatz <: Algorithm

Optimization algorithm for quasiparticle excitations on top of MPS groundstates, as introduced in this paper.

Fields

  • alg::A = Defaults.eigsolver: algorithm to use for the eigenvalue problem

Constructors

QuasiparticleAnsatz()
+            num=1, pos=length(ψ)÷2)

Compute the first excited states and their energy gap above a groundstate.

Arguments

  • H::AbstractMPO: operator for which to find the excitations
  • algorithm: optimization algorithm
  • ψ::QP: initial quasiparticle guess
  • ψs::NTuple{N, <:FiniteMPS}: N first excited states
  • [left_environments]: left groundstate environment
  • [right_environments]: right groundstate environment

Keywords

  • num::Int: number of excited states to compute
  • solver: algorithm for the linear solver of the quasiparticle environments
  • init: initial excited state guess
  • pos: position of perturbation
source
MPSKit.approximateFunction
approximate(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)
+approximate!(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)

Compute an approximation to the application of an operator O to the state ψ in the form of an MPS ψ₀.

Arguments

  • ψ₀::AbstractMPS: initial guess of the approximated state
  • (O::AbstractMPO, ψ::AbstractMPS): operator O and state ψ to be approximated
  • algorithm: approximation algorithm. See below for a list of available algorithms.
  • [environments]: MPS environment manager

Keywords

  • tol::Float64: tolerance for convergence criterium
  • maxiter::Int: maximum amount of iterations
  • verbosity::Int: display progress information

Algorithms

  • DMRG: Alternating least square method for maximizing the fidelity with a single-site scheme.

  • DMRG2: Alternating least square method for maximizing the fidelity with a two-site scheme.

  • IDMRG1: Variant of DMRG for maximizing fidelity density in the thermodynamic limit.

  • IDMRG2: Variant of DMRG2 for maximizing fidelity density in the thermodynamic limit.

  • VOMPS: Tangent space method for truncating uniform MPS.

source

Groundstate algorithms

MPSKit.VUMPSType
VUMPS{F} <: Algorithm

Variational optimization algorithm for uniform matrix product states, as introduced in https://arxiv.org/abs/1701.07035.

Fields

  • tol::Float64: tolerance for convergence criterium

  • maxiter::Int: maximum amount of iterations

  • finalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, H, envs) -> ψ, envs

  • verbosity::Int: display progress information

  • alg_gauge=Defaults.alg_gauge(): algorithm for gauging

  • alg_eigsolve=Defaults.alg_eigsolve(): algorithm for eigensolvers

  • alg_environments=Defaults.alg_environments(): algorithm for updating environments

source
MPSKit.IDMRG1Type
IDMRG1{A} <: Algorithm

Single site infinite DMRG algorithm for finding groundstates.

Fields

  • tol::Float64: tolerance for convergence criterium
  • tol_gauge::Float64: tolerance for gauging algorithm
  • eigalg::A: eigensolver algorithm
  • maxiter::Int: maximum number of outer iterations
  • verbosity::Int: display progress information
source
MPSKit.IDMRG2Type
IDMRG2{A} <: Algorithm

2-site infinite DMRG algorithm for finding groundstates.

Fields

  • tol::Float64: tolerance for convergence criterium
  • tol_gauge::Float64: tolerance for gauging algorithm
  • eigalg::A: eigensolver algorithm
  • maxiter::Int: maximum number of outer iterations
  • verbosity::Int: display progress information
  • trscheme::TruncationScheme: truncation algorithm for [tsvd]TensorKit.tsvd
source
MPSKit.DMRGType
DMRG{A,F} <: Algorithm

Single site DMRG algorithm for finding groundstates.

Fields

  • tol::Float64: tolerance for convergence criterium
  • eigalg::A: eigensolver algorithm or a NamedTuple with the eigensolver settings
  • maxiter::Int: maximum number of outer iterations
  • verbosity::Int: display progress information
  • finalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, H, envs) -> ψ, envs
source
MPSKit.DMRG2Type
DMRG2{A,F} <: Algorithm

2-site DMRG algorithm for finding groundstates.

Fields

  • tol::Float64: tolerance for convergence criterium
  • eigalg::A: eigensolver algorithm or a NamedTuple with the eigensolver settings
  • maxiter::Int: maximum number of outer iterations
  • verbosity::Int: display progress information
  • finalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, H, envs) -> ψ, envs
  • trscheme: truncation algorithm for [tsvd]TensorKit.tsvd
source
MPSKit.GradientGrassmannType
GradientGrassmann <: Algorithm

Variational gradient-based optimization algorithm that keeps the MPS in left-canonical form, as points on a Grassmann manifold. The optimization is then a Riemannian gradient descent with a preconditioner to induce the metric from the Hilbert space inner product.

Fields

  • method::OptimKit.OptimizationAlgorithm: algorithm to perform the gradient search
  • finalize!::Function: user-supplied function which is applied after each iteration, with signature finalize!(x::GrassmannMPS.ManifoldPoint, f, g, numiter) -> x, f, g

Constructors

GradientGrassmann(; kwargs...)

Keywords

  • method=ConjugateGradient: instance of optimization algorithm, or type of optimization algorithm to construct
  • finalize!: finalizer algorithm
  • tol::Float64: tolerance for convergence criterium
  • maxiter::Int: maximum amount of iterations
  • verbosity::Int: level of information display
source

Time evolution algorithms

MPSKit.TDVPType
TDVP{A} <: Algorithm

Single site TDVP algorithm for time evolution.

Fields

  • integrator::A: integration algorithm (defaults to Lanczos exponentiation)
  • tolgauge::Float64: tolerance for gauging algorithm
  • gaugemaxiter::Int: maximum amount of gauging iterations
  • finalize::F: user-supplied function which is applied after each timestep, with signature finalize(t, Ψ, H, envs) -> Ψ, envs
source
MPSKit.TDVP2Type
TDVP2{A} <: Algorithm

2-site TDVP algorithm for time evolution.

Fields

  • integrator::A: integrator algorithm (defaults to Lanczos exponentiation)
  • tolgauge::Float64: tolerance for gauging algorithm
  • gaugemaxiter::Int: maximum amount of gauging iterations
  • trscheme: truncation algorithm for [tsvd]TensorKit.tsvd
  • finalize::F: user-supplied function which is applied after each timestep, with signature finalize(t, Ψ, H, envs) -> Ψ, envs
source
Missing docstring.

Missing docstring for TaylorCluster. Check Documenter's build log for details.

Missing docstring.

Missing docstring for WII. Check Documenter's build log for details.

Leading boundary algorithms

Missing docstring.

Missing docstring for VUMPS. Check Documenter's build log for details.

MPSKit.VOMPSType
VOMPS{F} <: Algorithm

Power method algorithm for infinite MPS. SciPost:4.1.004

Fields

  • tol::Float64: tolerance for convergence criterium

  • maxiter::Int: maximum amount of iterations

  • finalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, toapprox, envs) -> ψ, envs

  • verbosity::Int: display progress information

  • alg_gauge=Defaults.alg_gauge(): algorithm for gauging

  • alg_environments=Defaults.alg_environments(): algorithm for updating environments

source
Missing docstring.

Missing docstring for GradientGrassmann. Check Documenter's build log for details.

Bond change algorithms

MPSKit.OptimalExpandType
struct OptimalExpand <: Algorithm end

An algorithm that expands the given mps using the algorithm given in the VUMPS paper, by selecting the dominant contributions of a two-site updated MPS tensor, orthogonal to the original ψ.

Fields

  • trscheme::TruncationScheme = truncdim(1) : The truncation scheme to use.
source
MPSKit.RandExpandType
struct RandExpand <: Algorithm end

An algorithm that expands the bond dimension by adding random unitary vectors that are orthogonal to the existing state. This is achieved by performing a truncated SVD on a random two-site MPS tensor, which is made orthogonal to the existing state.

Fields

  • trscheme::TruncationScheme = truncdim(1) : The truncation scheme to use.
source
MPSKit.VUMPSSvdCutType
struct VUMPSSvdCut <: Algorithm end

An algorithm that uses an IDMRG2 step to change the bond dimension of a state.

Fields

  • tol_gauge::Real = Defaults.tolgauge : The tolerance for the gauge.
  • tol::Real = Defaults.tol : The tolerance for the Galerkin truncation.
  • tol_eigenval::Real = Defaults.tol : The tolerance for the eigenvalue solver.
  • trscheme::TruncationScheme = notrunc() : The truncation scheme to use.
source
MPSKit.SvdCutType
struct SvdCut <: Algorithm end

An algorithm that uses truncated SVD to change the bond dimension of a ψ.

Fields

  • trscheme::TruncationScheme = notrunc() : The truncation scheme to use.
source

Excitations

MPSKit.QuasiparticleAnsatzType
QuasiparticleAnsatz <: Algorithm

Optimization algorithm for quasiparticle excitations on top of MPS groundstates, as introduced in this paper.

Fields

  • alg::A = Defaults.eigsolver: algorithm to use for the eigenvalue problem

Constructors

QuasiparticleAnsatz()
 QuasiparticleAnsatz(; kwargs...)
-QuasiparticleAnsatz(alg)

Create a QuasiparticleAnsatz algorithm with the given algorithm, or by passing the keyword arguments to Arnoldi.

source
MPSKit.FiniteExcitedType
FiniteExcited{A} <: Algorithm

Variational optimization algorithm for excitations of finite Matrix Product States by minimizing the energy of $H - λᵢ |ψᵢ><ψᵢ|$.

Fields

  • gsalg::A: optimization algorithm.
  • weight::Float64: energy penalty for previous states.
source

Utility

MPSKit.left_virtualspaceFunction
left_virtualspace(ψ::AbstractMPS, i::Int)

Return the left virtual space of the bond tensor to the right of site i. This is equivalent to the left virtual space of the left-gauged site tensor at site i + 1.

source
MPSKit.right_virtualspaceFunction
right_virtualspace(ψ::AbstractMPS, i::Int)

Return the right virtual space of the bond tensor to the right of site i. This is equivalent to the right virtual space of the right-gauged site tensor at site i.

source
MPSKit.physicalspaceFunction
physicalspace(ψ::AbstractMPS, i::Int)

Return the physical space of the site tensor at site i.

source
MPSKit.add_util_legFunction
add_util_leg(tensor::AbstractTensorMap{S,N1,N2}) where {S,N1,N2}
-    -> AbstractTensorMap{S,N1+1,N2+1}

Add trivial one-dimensional utility spaces with trivial sector to the left and right of a given tensor map, i.e. as the first space of the codomain and the last space of the domain.

source
MPSKit.expectation_valueFunction
expectation_value(ψ, O, [environments])
+QuasiparticleAnsatz(alg)

Create a QuasiparticleAnsatz algorithm with the given algorithm, or by passing the keyword arguments to Arnoldi.

source
MPSKit.FiniteExcitedType
FiniteExcited{A} <: Algorithm

Variational optimization algorithm for excitations of finite Matrix Product States by minimizing the energy of $H - λᵢ |ψᵢ><ψᵢ|$.

Fields

  • gsalg::A: optimization algorithm.
  • weight::Float64: energy penalty for previous states.
source

Utility

MPSKit.left_virtualspaceFunction
left_virtualspace(ψ::AbstractMPS, i::Int)

Return the left virtual space of the bond tensor to the right of site i. This is equivalent to the left virtual space of the left-gauged site tensor at site i + 1.

source
MPSKit.right_virtualspaceFunction
right_virtualspace(ψ::AbstractMPS, i::Int)

Return the right virtual space of the bond tensor to the right of site i. This is equivalent to the right virtual space of the right-gauged site tensor at site i.

source
MPSKit.physicalspaceFunction
physicalspace(ψ::AbstractMPS, i::Int)

Return the physical space of the site tensor at site i.

source
MPSKit.add_util_legFunction
add_util_leg(tensor::AbstractTensorMap{S,N1,N2}) where {S,N1,N2}
+    -> AbstractTensorMap{S,N1+1,N2+1}

Add trivial one-dimensional utility spaces with trivial sector to the left and right of a given tensor map, i.e. as the first space of the codomain and the last space of the domain.

source
MPSKit.expectation_valueFunction
expectation_value(ψ, O, [environments])
 expectation_value(ψ, inds => O)

Compute the expectation value of an operator O on a state ψ. Optionally, it is possible to make the computations more efficient by also passing in previously calculated environments.

In general, the operator O may consist of an arbitrary MPO O <: AbstractMPO that acts on all sites, or a local operator O = inds => operator acting on a subset of sites. In the latter case, inds is a tuple of indices that specify the sites on which the operator acts, while the operator is either a AbstractTensorMap or a FiniteMPO.

Arguments

  • ψ::AbstractMPS : the state on which to compute the expectation value
  • O::Union{AbstractMPO,Pair} : the operator to compute the expectation value of. This can either be an AbstractMPO, or a pair of indices and local operator..
  • environments::Cache : the environments to use for the calculation. If not given, they will be calculated.

Examples

julia> ψ = FiniteMPS(ones, Float64, 4, ℂ^2, ℂ^3);
 
 julia> S_x = TensorMap(Float64[0 1; 1 0], ℂ^2, ℂ^2);
@@ -67,5 +67,5 @@
 1.0
 
 julia> round(expectation_value(ψ, MPOHamiltonian(S_x)))
-4.0
source
MPSKit.varianceFunction
variance(state, hamiltonian, [envs=environments(state, hamiltonian)])

Compute the variance of the energy of the state with respect to the hamiltonian.

source
MPSKit.entanglement_spectrumFunction
entanglement_spectrum(ψ, [site::Int=0]) -> SectorDict{sectortype(ψ),Vector{<:Real}}

Compute the entanglement spectrum at a given site, i.e. the singular values of the gauge matrix to the right of a given site. This is a dictionary mapping the charge to the singular values.

source
MPSKit.entropyFunction
entropy(state, [site::Int])

Calculate the Von Neumann entanglement entropy of a given MPS. If an integer site is given, the entropy is across the entanglement cut to the right of site site. Otherwise, a vector of entropies is returned, one for each site.

source
MPSKit.transfer_spectrumFunction
transfer_spectrum(above::InfiniteMPS; below=above, tol=Defaults.tol, num_vals=20,
-                       sector=first(sectors(oneunit(left_virtualspace(above, 1)))))

Calculate the partial spectrum of the left mixed transfer matrix corresponding to the overlap of a given above state and a below state. The sector keyword argument can be used to specify a non-trivial total charge for the transfer matrix eigenvectors. Specifically, an auxiliary space ℂ[typeof(sector)](sector => 1)' will be added to the domain of each eigenvector. The tol and num_vals keyword arguments are passed to KrylovKit.eigolve

source
MPSKit.correlation_lengthFunction
correlation_length(above::InfiniteMPS; kwargs...)

Compute the correlation length of a given InfiniteMPS based on the next-to-leading eigenvalue of the transfer matrix. The kwargs are passed to transfer_spectrum, and can for example be used to target the correlation length in a specific sector.

source
MPSKit.entanglementplotFunction
entanglementplot(state; site=0[, kwargs...])

Plot the entanglement spectrum of a given InfiniteMPS.

Arguments

  • site::Int=0: mps index for multisite unit cells. Spectrum is computed for the bond between site and site + 1.
  • expand_symmetry::Logical=false: add quantum dimension degeneracies.
  • sortby=maximum: the method of sorting the sectors.
  • sector_margin=1//10: the amount of whitespace between sectors.
  • sector_formatter=string: how to convert sectors to strings.
  • kwargs...: other kwargs are passed on to the plotting backend.
source
MPSKit.transferplotFunction
transferplot(above, below[, sectors[, transferkwargs[, kwargs]]])

Plot the partial transfer matrix spectrum of two InfiniteMPS's.

Arguments

  • above::InfiniteMPS: above mps for transfer_spectrum.
  • below::InfiniteMPS: below mps for transfer_spectrum.
  • sectors=[]: vector of sectors for which to compute the spectrum.
  • transferkwargs: kwargs for call to transfer_spectrum.
  • kwargs: other kwargs are passed on to the plotting backend.
  • thetaorigin=0: origin of the angle range.
  • sector_formatter=string: how to convert sectors to strings.
source
+4.0source
MPSKit.varianceFunction
variance(state, hamiltonian, [envs=environments(state, hamiltonian)])

Compute the variance of the energy of the state with respect to the hamiltonian.

source
MPSKit.entanglement_spectrumFunction
entanglement_spectrum(ψ, [site::Int=0]) -> SectorDict{sectortype(ψ),Vector{<:Real}}

Compute the entanglement spectrum at a given site, i.e. the singular values of the gauge matrix to the right of a given site. This is a dictionary mapping the charge to the singular values.

source
MPSKit.entropyFunction
entropy(state, [site::Int])

Calculate the Von Neumann entanglement entropy of a given MPS. If an integer site is given, the entropy is across the entanglement cut to the right of site site. Otherwise, a vector of entropies is returned, one for each site.

source
MPSKit.transfer_spectrumFunction
transfer_spectrum(above::InfiniteMPS; below=above, tol=Defaults.tol, num_vals=20,
+                       sector=first(sectors(oneunit(left_virtualspace(above, 1)))))

Calculate the partial spectrum of the left mixed transfer matrix corresponding to the overlap of a given above state and a below state. The sector keyword argument can be used to specify a non-trivial total charge for the transfer matrix eigenvectors. Specifically, an auxiliary space ℂ[typeof(sector)](sector => 1)' will be added to the domain of each eigenvector. The tol and num_vals keyword arguments are passed to KrylovKit.eigolve

source
MPSKit.correlation_lengthFunction
correlation_length(above::InfiniteMPS; kwargs...)

Compute the correlation length of a given InfiniteMPS based on the next-to-leading eigenvalue of the transfer matrix. The kwargs are passed to transfer_spectrum, and can for example be used to target the correlation length in a specific sector.

source
MPSKit.entanglementplotFunction
entanglementplot(state; site=0[, kwargs...])

Plot the entanglement spectrum of a given InfiniteMPS.

Arguments

  • site::Int=0: mps index for multisite unit cells. Spectrum is computed for the bond between site and site + 1.
  • expand_symmetry::Logical=false: add quantum dimension degeneracies.
  • sortby=maximum: the method of sorting the sectors.
  • sector_margin=1//10: the amount of whitespace between sectors.
  • sector_formatter=string: how to convert sectors to strings.
  • kwargs...: other kwargs are passed on to the plotting backend.
source
MPSKit.transferplotFunction
transferplot(above, below[, sectors[, transferkwargs[, kwargs]]])

Plot the partial transfer matrix spectrum of two InfiniteMPS's.

Arguments

  • above::InfiniteMPS: above mps for transfer_spectrum.
  • below::InfiniteMPS: below mps for transfer_spectrum.
  • sectors=[]: vector of sectors for which to compute the spectrum.
  • transferkwargs: kwargs for call to transfer_spectrum.
  • kwargs: other kwargs are passed on to the plotting backend.
  • thetaorigin=0: origin of the angle range.
  • sector_formatter=string: how to convert sectors to strings.
source
diff --git a/dev/man/algorithms/index.html b/dev/man/algorithms/index.html index ad645107..e375ca24 100644 --- a/dev/man/algorithms/index.html +++ b/dev/man/algorithms/index.html @@ -79,7 +79,7 @@ # output true

The algorithm is described in more detail in the following paper:

  • Chepiga, N., & Mila, F. (2017). Excitation spectrum and density matrix renormalization group iterations. Physical Review B, 96(5), 054425.

changebonds

Many of the previously mentioned algorithms do not possess a way to dynamically change to bond dimension. This is often a problem, as the optimal bond dimension is often not a priori known, or needs to increase because of entanglement growth throughout the course of a simulation. changebonds exposes a way to change the bond dimension of a given state.

There are several different algorithms implemented, each having their own advantages and disadvantages:

  • SvdCut: The simplest method for changing the bonddimension is found by simply locally truncating the state using an SVD decomposition. This yields a (locally) optimal truncation, but clearly cannot be used to increase the bond dimension. Note that a globally optimal truncation can be obtained by using the SvdCut algorithm in combination with approximate. Since the output of this method might have a truncated bonddimension, the new state might not be identical to the input state. The truncation is controlled through trscheme, which dictates how the singular values of the original state are truncated.
  • OptimalExpand: This algorithm is based on the idea of expanding the bond dimension by investigating the two-site derivative, and adding the most important blocks which are orthogonal to the current state. From the point of view of a local two-site update, this procedure is optimal, but it requires to evaluate a two-site derivative, which can be costly when the physical space is large. The state will remain unchanged, but a one-site scheme will now be able to push the optimization further. The subspace used for expansion can be truncated through trscheme, which dictates how many singular values will be added.

  • RandExpand: This algorithm similarly adds blocks orthogonal to the current state, but does not attempt to select the most important ones, and rather just selects them at random. The advantage here is that this is much cheaper than the optimal expand, and if the bond dimension is grown slow enough, this still obtains a very good expansion scheme. Again, The state will remain unchanged and a one-site scheme will now be able to push the optimization further. The subspace used for expansion can be truncated through trscheme, which dictates how many singular values will be added.

  • VUMPSSvdCut: This algorithm is based on the VUMPS algorithm, and consists of performing a two-site update, and then truncating the state back down. Because of the two-site update, this can again become expensive, but the algorithm has the option of both expanding as well as truncating the bond dimension. Here, trscheme controls the truncation of the full state after the two-site update.

leading boundary

For statmech partition functions we want to find the approximate leading boundary MPS. Again this can be done with VUMPS:

th = nonsym_ising_mpo()
+changebonds(ψ::AbstractMPS, alg) -> ψ′

Change the bond dimension of ψ using the algorithm alg, and return the new ψ and the new envs.

See also: SvdCut, RandExpand, VUMPSSvdCut, OptimalExpand

source

There are several different algorithms implemented, each having their own advantages and disadvantages:

  • SvdCut: The simplest method for changing the bonddimension is found by simply locally truncating the state using an SVD decomposition. This yields a (locally) optimal truncation, but clearly cannot be used to increase the bond dimension. Note that a globally optimal truncation can be obtained by using the SvdCut algorithm in combination with approximate. Since the output of this method might have a truncated bonddimension, the new state might not be identical to the input state. The truncation is controlled through trscheme, which dictates how the singular values of the original state are truncated.
  • OptimalExpand: This algorithm is based on the idea of expanding the bond dimension by investigating the two-site derivative, and adding the most important blocks which are orthogonal to the current state. From the point of view of a local two-site update, this procedure is optimal, but it requires to evaluate a two-site derivative, which can be costly when the physical space is large. The state will remain unchanged, but a one-site scheme will now be able to push the optimization further. The subspace used for expansion can be truncated through trscheme, which dictates how many singular values will be added.

  • RandExpand: This algorithm similarly adds blocks orthogonal to the current state, but does not attempt to select the most important ones, and rather just selects them at random. The advantage here is that this is much cheaper than the optimal expand, and if the bond dimension is grown slow enough, this still obtains a very good expansion scheme. Again, The state will remain unchanged and a one-site scheme will now be able to push the optimization further. The subspace used for expansion can be truncated through trscheme, which dictates how many singular values will be added.

  • VUMPSSvdCut: This algorithm is based on the VUMPS algorithm, and consists of performing a two-site update, and then truncating the state back down. Because of the two-site update, this can again become expensive, but the algorithm has the option of both expanding as well as truncating the bond dimension. Here, trscheme controls the truncation of the full state after the two-site update.

leading boundary

For statmech partition functions we want to find the approximate leading boundary MPS. Again this can be done with VUMPS:

th = nonsym_ising_mpo()
 ts = InfiniteMPS([ℂ^2],[ℂ^20]);
 (ts,envs,_) = leading_boundary(ts,th,VUMPS(maxiter=400,verbosity=false));

if the mpo satisfies certain properties (positive and hermitian), it may also be possible to use GradientGrassmann.

approximate

Often, it is useful to approximate a given MPS by another, typically by one of a different bond dimension. This is achieved by approximating an application of an MPO to the initial state, by a new state.

MPSKit.approximateFunction
approximate(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)
-approximate!(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)

Compute an approximation to the application of an operator O to the state ψ in the form of an MPS ψ₀.

Arguments

  • ψ₀::AbstractMPS: initial guess of the approximated state
  • (O::AbstractMPO, ψ::AbstractMPS): operator O and state ψ to be approximated
  • algorithm: approximation algorithm. See below for a list of available algorithms.
  • [environments]: MPS environment manager

Keywords

  • tol::Float64: tolerance for convergence criterium
  • maxiter::Int: maximum amount of iterations
  • verbosity::Int: display progress information

Algorithms

  • DMRG: Alternating least square method for maximizing the fidelity with a single-site scheme.

  • DMRG2: Alternating least square method for maximizing the fidelity with a two-site scheme.

  • IDMRG1: Variant of DMRG for maximizing fidelity density in the thermodynamic limit.

  • IDMRG2: Variant of DMRG2 for maximizing fidelity density in the thermodynamic limit.

  • VOMPS: Tangent space method for truncating uniform MPS.

source

Varia

What follows is a medley of lesser known (or used) algorithms and don't entirely fit under one of the above categories.

Dynamical DMRG

Dynamical DMRG has been described in other papers and is a way to find the propagator. The basic idea is that to calculate $G(z) = < V | (H-z)^{-1} | V >$ , one can variationally find $(H-z) |W > = | V >$ and then the propagator simply equals $G(z) = < V | W >$.

fidelity susceptibility

The fidelity susceptibility measures how much the groundstate changes when tuning a parameter in your hamiltonian. Divergences occur at phase transitions, making it a valuable measure when no order parameter is known.

fidelity_susceptibility(groundstate,H_0,perturbing_Hams::AbstractVector)

periodic boundary conditions

You can impose periodic boundary conditions on the hamiltonian itself, while still using a normal OBC finite matrix product states. This is straightforward to implement but competitive with more advanced PBC MPS algorithms.

exact diagonalization

As a side effect, our code support exact diagonalization. The idea is to construct a finite matrix product state with maximal bond dimension, and then optimize the middle site. Because we never truncated the bond dimension, this single site effectively parametrizes the entire hilbert space.

exact_diagonalization(periodic_boundary_conditions(su2_xxx_ham(spin=1),10),which=:SR) # find the groundstate on 10 sites
+approximate!(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)

Compute an approximation to the application of an operator O to the state ψ in the form of an MPS ψ₀.

Arguments

  • ψ₀::AbstractMPS: initial guess of the approximated state
  • (O::AbstractMPO, ψ::AbstractMPS): operator O and state ψ to be approximated
  • algorithm: approximation algorithm. See below for a list of available algorithms.
  • [environments]: MPS environment manager

Keywords

  • tol::Float64: tolerance for convergence criterium
  • maxiter::Int: maximum amount of iterations
  • verbosity::Int: display progress information

Algorithms

  • DMRG: Alternating least square method for maximizing the fidelity with a single-site scheme.

  • DMRG2: Alternating least square method for maximizing the fidelity with a two-site scheme.

  • IDMRG1: Variant of DMRG for maximizing fidelity density in the thermodynamic limit.

  • IDMRG2: Variant of DMRG2 for maximizing fidelity density in the thermodynamic limit.

  • VOMPS: Tangent space method for truncating uniform MPS.

source

Varia

What follows is a medley of lesser known (or used) algorithms and don't entirely fit under one of the above categories.

Dynamical DMRG

Dynamical DMRG has been described in other papers and is a way to find the propagator. The basic idea is that to calculate $G(z) = < V | (H-z)^{-1} | V >$ , one can variationally find $(H-z) |W > = | V >$ and then the propagator simply equals $G(z) = < V | W >$.

fidelity susceptibility

The fidelity susceptibility measures how much the groundstate changes when tuning a parameter in your hamiltonian. Divergences occur at phase transitions, making it a valuable measure when no order parameter is known.

fidelity_susceptibility(groundstate,H_0,perturbing_Hams::AbstractVector)

periodic boundary conditions

You can impose periodic boundary conditions on the hamiltonian itself, while still using a normal OBC finite matrix product states. This is straightforward to implement but competitive with more advanced PBC MPS algorithms.

exact diagonalization

As a side effect, our code support exact diagonalization. The idea is to construct a finite matrix product state with maximal bond dimension, and then optimize the middle site. Because we never truncated the bond dimension, this single site effectively parametrizes the entire hilbert space.

exact_diagonalization(periodic_boundary_conditions(su2_xxx_ham(spin=1),10),which=:SR) # find the groundstate on 10 sites
diff --git a/dev/man/environments/index.html b/dev/man/environments/index.html index 4e73a012..bb991f8e 100644 --- a/dev/man/environments/index.html +++ b/dev/man/environments/index.html @@ -5,4 +5,4 @@ cache = environments(state,operator)

There are also some notable differences. Infinite environments typically require solving linear problems or eigenvalue problems iteratively with finite precision. To find out what precision we used we can type:

(cache.tol,cache.maxiter)

To recalculate with a different precision :

cache.tol=1e-8;
 recalculate!(cache,state)

Unlike their finite counterparts, recalculating is not done automatically. To get the environment for a different state one has to recalculate explicitly!

different_state = InfiniteMPS([ℂ^2],[ℂ^10]);
 recalculate!(cache,different_state)
-leftenv(cache,3,different_state)
+leftenv(cache,3,different_state) diff --git a/dev/man/intro/index.html b/dev/man/intro/index.html index b07d379f..1b0c3081 100644 --- a/dev/man/intro/index.html +++ b/dev/man/intro/index.html @@ -19,14 +19,14 @@ t3 = TensorMap(rand, Float64, V2 ⊗ V2, V2)
TensorMap((Rep[ℤ₂](0=>1, 1=>1) ⊗ Rep[ℤ₂](0=>1, 1=>1)) ← Rep[ℤ₂](0=>1, 1=>1)):
 * Data for sector (Irrep[ℤ₂](0), Irrep[ℤ₂](0)) ← (Irrep[ℤ₂](0),):
 [:, :, 1] =
- 0.11951498844265152
+ 0.06199204630272592
 * Data for sector (Irrep[ℤ₂](1), Irrep[ℤ₂](1)) ← (Irrep[ℤ₂](0),):
 [:, :, 1] =
- 0.7466321326418391
+ 0.9828637349183718
 * Data for sector (Irrep[ℤ₂](1), Irrep[ℤ₂](0)) ← (Irrep[ℤ₂](1),):
 [:, :, 1] =
- 0.24382339360184158
+ 0.8550766998425945
 * Data for sector (Irrep[ℤ₂](0), Irrep[ℤ₂](1)) ← (Irrep[ℤ₂](1),):
 [:, :, 1] =
- 0.06747360333712948
-

For more information, check out the TensorKit documentation!

Conventions

The general definition of an MPS tensor is as follows:

convention MPSTensor

These tensors are allowed to have an arbitrary number of physical legs, and both FiniteMPS as well as InfiniteMPS will be able to handle the resulting objects. This allows for example for the definition of boundary tensors in PEPS code, which have two physical legs.

Similarly, the definition of a bond tensor, appearing in between two MPS tensors, is as follows:

convention BondTensor

Finally, the definition of a MPO tensor, which is used to represent statistical mechanics problems as well as quantum hamiltonians, is represented as:

convention MPOTensor

While this results at first glance in the not very intuitive ordering of spaces as $V_l \otimes P \leftarrow P \otimes V_r$, this is actually the most natural ordering for keeping the algorithms planar. In particular, this is relevant for dealing with fermionic systems, where additional crossings would lead to sign problems.

+ 0.396232636154325 +

For more information, check out the TensorKit documentation!

Conventions

The general definition of an MPS tensor is as follows:

convention MPSTensor

These tensors are allowed to have an arbitrary number of physical legs, and both FiniteMPS as well as InfiniteMPS will be able to handle the resulting objects. This allows for example for the definition of boundary tensors in PEPS code, which have two physical legs.

Similarly, the definition of a bond tensor, appearing in between two MPS tensors, is as follows:

convention BondTensor

Finally, the definition of a MPO tensor, which is used to represent statistical mechanics problems as well as quantum hamiltonians, is represented as:

convention MPOTensor

While this results at first glance in the not very intuitive ordering of spaces as $V_l \otimes P \leftarrow P \otimes V_r$, this is actually the most natural ordering for keeping the algorithms planar. In particular, this is relevant for dealing with fermionic systems, where additional crossings would lead to sign problems.

diff --git a/dev/man/lattices/index.html b/dev/man/lattices/index.html index 2149fa8f..666bcfca 100644 --- a/dev/man/lattices/index.html +++ b/dev/man/lattices/index.html @@ -1,2 +1,2 @@ -Lattices · MPSKit.jl

Lattices

Warning

This section is still under construction. Coming soon!

+Lattices · MPSKit.jl

Lattices

Warning

This section is still under construction. Coming soon!

diff --git a/dev/man/operators/index.html b/dev/man/operators/index.html index eee2504a..b1927892 100644 --- a/dev/man/operators/index.html +++ b/dev/man/operators/index.html @@ -1352,4 +1352,4 @@ [:, :, 2, 1] = 0.0 + 0.0im 1.0 + 0.0im -]])

MPSKit will then automatically attach the correct boundary vectors to the Hamiltonian whenever this is required.

Note

While the above example can be constructed from building blocks that are strictly local operators, i.e. TensorMaps with a single ingoing and outgoing index. This is not always the case, especially when symmetries are involved. In those cases, the elements of the matrix $W$ have additional virtual legs that are contracted between different sites. As such, indexing an MPOHamiltonian object will result in a TensorMap with four legs.

Working with MPOHamiltonian objects

Warning

This part is still a work in progress

Because of the discussion above, the MPOHamiltonian object is in fact just a FiniteMPO, with some additional structure. This means that similar operations and properties are available, such as the virtual spaces, or the individual tensors. However, the block structure of the operator means that now the virtual spaces are not just a single space, but a collection (direct sum) of spaces, one for each row/column.

<!– TODO: add examples virtualspace once blocktensors are in place –>

DenseMPO

This operator is used for statistical physics problems. It is simply a periodic array of mpo tensors.

Can be created using

DenseMPO(t::AbstractArray{T,1}) where T<:MPOTensor

SparseMPO

SparseMPO is similar to a DenseMPO, in that it again represents an mpo tensor, periodically repeated. However this type keeps track of all internal zero blocks, allowing for a more efficient representation of certain operators (such as time evolution operators and quantum hamiltonians). You can convert a sparse mpo to a densempo, but the converse does not hold.

Indexing a SparseMPO returns a SparseMPOSlice object, which has 3 fields

MPSKit.SparseMPOSliceType
SparseMPOSlice{S,T,E} <: AbstractArray{T,2}

A view of a sparse MPO at a single position.

Fields

  • Os::AbstractMatrix{Union{T,E}}: matrix of operators.
  • domspaces::AbstractVector{S}: list of left virtual spaces.
  • imspaces::AbstractVector{S}: list of right virtual spaces.
  • pspace::S: physical space.
source

When indexing a SparseMPOSlice at index [j, k] (or equivalently SparseMPO[i][j, k]), the code looks up the corresponding field in Os[j, k]. Either that element is a tensormap, in which case it gets returned. If it equals zero(E), then we return a tensormap

domspaces[j] * pspace ← pspace * imspaces[k]

with norm zero. If the element is a nonzero number, then implicitly we have the identity operator there (multiplied by that element).

The idea here is that you don't have to worry about the underlying structure, you can just index into a sparsempo as if it is a vector of matrices. Behind the scenes we then optimize certain contractions by using the sparsity structure.

SparseMPO are always assumed to be periodic in the first index (position). In this way, we can both represent periodic infinite mpos and place dependent finite mpos.

+]])

MPSKit will then automatically attach the correct boundary vectors to the Hamiltonian whenever this is required.

Note

While the above example can be constructed from building blocks that are strictly local operators, i.e. TensorMaps with a single ingoing and outgoing index. This is not always the case, especially when symmetries are involved. In those cases, the elements of the matrix $W$ have additional virtual legs that are contracted between different sites. As such, indexing an MPOHamiltonian object will result in a TensorMap with four legs.

Working with MPOHamiltonian objects

Warning

This part is still a work in progress

Because of the discussion above, the MPOHamiltonian object is in fact just a FiniteMPO, with some additional structure. This means that similar operations and properties are available, such as the virtual spaces, or the individual tensors. However, the block structure of the operator means that now the virtual spaces are not just a single space, but a collection (direct sum) of spaces, one for each row/column.

<!– TODO: add examples virtualspace once blocktensors are in place –>

DenseMPO

This operator is used for statistical physics problems. It is simply a periodic array of mpo tensors.

Can be created using

DenseMPO(t::AbstractArray{T,1}) where T<:MPOTensor

SparseMPO

SparseMPO is similar to a DenseMPO, in that it again represents an mpo tensor, periodically repeated. However this type keeps track of all internal zero blocks, allowing for a more efficient representation of certain operators (such as time evolution operators and quantum hamiltonians). You can convert a sparse mpo to a densempo, but the converse does not hold.

Indexing a SparseMPO returns a SparseMPOSlice object, which has 3 fields

MPSKit.SparseMPOSliceType
SparseMPOSlice{S,T,E} <: AbstractArray{T,2}

A view of a sparse MPO at a single position.

Fields

  • Os::AbstractMatrix{Union{T,E}}: matrix of operators.
  • domspaces::AbstractVector{S}: list of left virtual spaces.
  • imspaces::AbstractVector{S}: list of right virtual spaces.
  • pspace::S: physical space.
source

When indexing a SparseMPOSlice at index [j, k] (or equivalently SparseMPO[i][j, k]), the code looks up the corresponding field in Os[j, k]. Either that element is a tensormap, in which case it gets returned. If it equals zero(E), then we return a tensormap

domspaces[j] * pspace ← pspace * imspaces[k]

with norm zero. If the element is a nonzero number, then implicitly we have the identity operator there (multiplied by that element).

The idea here is that you don't have to worry about the underlying structure, you can just index into a sparsempo as if it is a vector of matrices. Behind the scenes we then optimize certain contractions by using the sparsity structure.

SparseMPO are always assumed to be periodic in the first index (position). In this way, we can both represent periodic infinite mpos and place dependent finite mpos.

diff --git a/dev/man/parallelism/index.html b/dev/man/parallelism/index.html index d23404cc..87d3ca4c 100644 --- a/dev/man/parallelism/index.html +++ b/dev/man/parallelism/index.html @@ -37,4 +37,4 @@ ┌ Warning: blasthreads_per_jlthread > cputhreads_per_jlthread. You should decrease the number of MKL threads, i.e. BLAS.set_num_threads(4). └ @ ThreadPinning ~/.julia/packages/ThreadPinning/qV2Cd/src/threadinfo.jl:256 -[ Info: jlthreads < cputhreads. Perhaps increase number of Julia threads to 16?

MPSKit multithreading

Within MPSKit, when Julia is started with multiple threads, by default the Threads.@spawn machinery will be used to parallelize the code as much as possible. In particular, there are three main places where this is happening, which can be disabled separately through a preference-based system.

  1. During the process of some algorithms (e.g. VUMPS), local updates can take place at each site in parallel. This can be controlled by the parallelize_sites preference.

  2. During the calculation of the environments, when the MPO is block-sparse, it is possible to parallelize over these blocks. This can be enabled or disabled by the parallelize_transfers preference. (Note that left- and right environments will always be computed in parallel)

  3. During the calculation of the derivatives, when the MPO is block-sparse, it is possible to parallelize over these blocks. This can be enabled or disabled by the parallelize_derivatives preference.

For convenience, these preferences can be set via MPSKit.Defaults.set_parallelization, which takes as input pairs of preferences and booleans. For example, to disable all parallelization, one can call

Defaults.set_parallelization("sites" => false, "transfers" => false, "derivatives" => false)
Warning

These settings are statically set at compile-time, and for changes to take effect the Julia session must be restarted.

TensorKit multithreading

Finally, when dealing with tensors that have some internal symmetry, it is also possible to parallelize over the symmetry sectors. This is handled by TensorKit, and more information can be found in its documentation (Soon TM).

Memory management

Because of the way julia threads work, it is possible that the total memory usage of your program becomes rather high. This seems to be because of the fact that MPSKit spawns several tasks (in a nested way), which each allocate and deallocate quite a bit of memory in a tight loop. This seems to lead to a situation where the garbage collector is not able to keep up, and can even fail to clear the garbage before an OutOfMemory error occurs. In this case, often the best thing to do is disable the multithreading of MPSKit, specifically for the derivatives, as this seems to be the most memory intensive part. This is something that is under investigation, and hopefully will be fixed in the future.

+[ Info: jlthreads < cputhreads. Perhaps increase number of Julia threads to 16?

MPSKit multithreading

Within MPSKit, when Julia is started with multiple threads, by default the Threads.@spawn machinery will be used to parallelize the code as much as possible. In particular, there are three main places where this is happening, which can be disabled separately through a preference-based system.

  1. During the process of some algorithms (e.g. VUMPS), local updates can take place at each site in parallel. This can be controlled by the parallelize_sites preference.

  2. During the calculation of the environments, when the MPO is block-sparse, it is possible to parallelize over these blocks. This can be enabled or disabled by the parallelize_transfers preference. (Note that left- and right environments will always be computed in parallel)

  3. During the calculation of the derivatives, when the MPO is block-sparse, it is possible to parallelize over these blocks. This can be enabled or disabled by the parallelize_derivatives preference.

For convenience, these preferences can be set via MPSKit.Defaults.set_parallelization, which takes as input pairs of preferences and booleans. For example, to disable all parallelization, one can call

Defaults.set_parallelization("sites" => false, "transfers" => false, "derivatives" => false)
Warning

These settings are statically set at compile-time, and for changes to take effect the Julia session must be restarted.

TensorKit multithreading

Finally, when dealing with tensors that have some internal symmetry, it is also possible to parallelize over the symmetry sectors. This is handled by TensorKit, and more information can be found in its documentation (Soon TM).

Memory management

Because of the way julia threads work, it is possible that the total memory usage of your program becomes rather high. This seems to be because of the fact that MPSKit spawns several tasks (in a nested way), which each allocate and deallocate quite a bit of memory in a tight loop. This seems to lead to a situation where the garbage collector is not able to keep up, and can even fail to clear the garbage before an OutOfMemory error occurs. In this case, often the best thing to do is disable the multithreading of MPSKit, specifically for the derivatives, as this seems to be the most memory intensive part. This is something that is under investigation, and hopefully will be fixed in the future.

diff --git a/dev/man/states/index.html b/dev/man/states/index.html index 76c25dd1..5dd653c5 100644 --- a/dev/man/states/index.html +++ b/dev/man/states/index.html @@ -25,4 +25,4 @@ state.AR[row,collumn] state.CR[row,collumn]

Behind the scenes, we have a type called Multiline, defined as:

struct Multiline{T}
     data::PeriodicArray{T,1}
-end

MPSMultiline/MPOMultiline are then defined as ```julia const MPSMultiline = Multiline{<:InfiniteMPS} const MPOMultiline = Multiline{<:DenseMPO}

+end

MPSMultiline/MPOMultiline are then defined as ```julia const MPSMultiline = Multiline{<:InfiniteMPS} const MPOMultiline = Multiline{<:DenseMPO}

diff --git a/dev/objects.inv b/dev/objects.inv index 2bc1f70bac1fec70e6b5308359427d924cf6ead3..33956b756eba65f7d867c925fcef29eeb5fa28f3 100644 GIT binary patch delta 2114 zcmV-I2)*}{5vmc8e}7GL+cprr^H*S!dd8g&tVn4)X-;+J&$b?`k(+jU(Lf|bAq7DO z1YOC;p87lcOS%97euxx7y9bYD>g^-2*nPVTGZE1p%2o6}N<)OF2;HO!4H6rnX7P zr2b}t&a2PHh>AxhQ;|@iI%du9Cg`&9mod$VB%D*u^5oF6@fA3sfnx%FDmWvCfD@%y z*!6~cK0!a*PXXPLB;)Xi9UesW4Z5_S0?yVG_-Uf-BVc4}N#s6=Xp*kBL`GX6h*M#} zoUAEtk%pY)Ie!ah(PVn2(b&Q#ufISKTZ(Sr8M?6)Ng7e^n0Z75J;M6AAVL+%G@8uL zEV3pn4P%l88wPw#?Qve@A<+tG3^HeCPcBLKCO2@J%5AD5HSunO25L8paYWNSJks? zcb;H{g9nySOdnHTXajt=xc9k8TcFAUfkkjliWt_?wY0fu-n1yzoP}mxIWElF?-t9S zm};8=wuwXriArSfKt-O)j!mr^=1sKi(5D`UcDF^_4lIp=D<(jG@a18qw}@J~4pgO4 zJL&IRl7G~H78kHP+Is@EZk30&r8o~^mEgneK1<}80<8d@S$6S-ZlQxSn1VFURK zBGP(6lc0(uuo{9vTMF%&p0jEA#G+9Ptu<=3P74vO;0TY~LUQSS8Kfqu&pVixJ|P^R z&fa_(9ogFJ8g?>!H+yq3`z}J&Gjuxp3T%U43V)I_NO%xiPVu>b)O+#;TgwKOHqPsJ zL`k;83zU2dd(cM-Yvn%f?W+PvjrywSFBW--t0V3DVvRLtDsee2h;BM;_kz> zZ|4xaWDR~wH#kg%>L!$qN{vA22027fB&)PPfjZey*L9sGzyJORHl@WIy<_ES|>&sHGs) zJD(?5)v{WWb-7a#G*PE?lIllA^8BjgD3GHF?x4nl0Khs(O!YH=U>XZlTj-qAT=;Z4 zJ)XS|1i3q%n%uQd(CPFmu+sq|;b`}QB!4W#oF#{KWkl0a6Cgui#EI?(mFaR9vQom|x>JEH~+?TFm(K?=e?6zz*EP`t)sD%8}I?-WhgqOu3iwjy4 zQ0tY|45YgNHwE1ah$GH>`VF(`JAYVM!k+Z;K@)`ayJGLOP#Zxr54$o(CRO5mFjcOl zZc0pGH&f*!kuWEC4~Ung8CRW+$ATYpLczyhdlRjblZ0_N=NFYu9K4!uX~tq=TcTIP z?>m{z+IVsdGYoT)Fp4t{HeMWZLLkB~x{JNf!elNf3q(qMgapeiw{ zR)FdiK&^*`D?{YjREab!Wyd%3pTxC<0E99EOM|Jpuj02Y93ENx!Ib*E2{o9f;t@#t zkG;{qx;v0#{X|`+aL%5z?0-RX0}?xKUT-xHRt7ZJ{q^Yw|eu{#RJHff|58G&ut52ErL8_Vp@mo3;H`CKvQ&6QzhZ^qH$VX zU9mm)`k=m>JGep6{eO@GNgnKo4sI2j^8=K*;f`nYRad7G(o5^psK&yqD9nK`hE~1N zxq1Y$$3m;5ecWt;-@7b0U*~3ChLnQg3w`46)jp%>Amc3h9jNlE-LXC=bZW z)T&ZD|LctxMt_mJjg8FE`wXO;aOnDph{h_CNx%{0jd4!j2jWJJZX5R%D#wvZNz3LL z&Pv2;JL1LqP@gLhcGwwq!9njh46g5fhjAak^`i~|TfWV2za7s>z(<$j?n&Rz}VwwHFmc!W3pf zfCGXa$;UnI@60br0|eg`L3$gV#)MX~ z`KVf)p_QVFe$83NG|jAZrU`uPiWjRhw6_1PpiHSETB@FG^?zW7?#qu>gYZ}?rguqC zrG7F)=hbJcM8y+RQY2L9o?7$S3|%(9S=E#%!a3zEOS+nkM_`18924kE&Ka=)oM_F$ zzBS7A8T!?I3h16BDTgK2bwu?9UAj*JXWJS4HKp7VAhN9@>JUUUk((V+(GCD&DXcIj zTgqFYAtzbJ!hc0Ho1YnJ?8Ikp|A8KM6y3lYx^WPRj3_UWc|-&~g8DTlLg&dmnk~+p zWDQs-#v~0M8Q?K}z*(M!G}Ua&%-1$($G-qms-d=8@GoO{tapl%D8o+~{`uGQb@{yy z+VmlyT5VKHKV`^hm)`@heW-E7j2#H55Y3L-v_Ad(41Y31#5jD^<`otMbwGmO^}wl1 ze}Wbc9#}##eUdyk3ixhy?=z9nK$Qjpjo_N(G3=$U>2lM)X_ap|3+=u#oZG$Mt=7LV z-BttHrX;eGsE`cSha{m|F`9Yp^ZsnVe}<4_85LWqVs~6BGO2nmt!c+f(Y8mP2RzcZ z3vGL#P=5-pm;nC5mtCr80ky~ipbDinYuvXuZP=L?a5_5Z!kYLBGwdkNLf9oZVRuNS z-qDO5v#BqS9T2L4%2RKph`@|+fb10^?W|xxPz4e=62d@Exv|WEZyGjn(x@eENN%&0 zxrjF4!sEJ-o#tFt(tyVIWN-58iG`SZ_zV_TbEMK~rs0KrwaTk%+UXnn{uO|p;UXYGog{BVxSHB>?be?V22 z-@x?a?0cMmS`1RX^JRopZL39DmwT;%6HQ7d(k$i4%gb5`fl7$r4w?iY0N4kKsaf*} zrqw{ThRHdDg-_@6+&hNSZ3SX9>iKKkp!idL8d*RJ4M@a&9E7DK?lR|8rEopA7m=IjBOa)tB5M^tNvMr zA?(h+tdEKssK}xQ(+K((dcaqd=v)od9e9Y!hh@d0bv*mfUD;}A1lLqh1^H)qqKD83 zFDHkbT+kY!TCc2zDANU$W7MsHIDg`Npx>~EzJrY=?Af>vnjmc66??~xS_!5BIF(hh zsS;5ViTK-M!EL1dNZHXTRACdFx~TYq7!4Zp*p1nN+3T5u({ktYG)I4N_ z&DDdh$f()@s&@dj9yYEmkmpc^q(vz@zJ=ct*9rm<$_Q)?#`2+x-_|JQk(2L?xi1@W zgQXNt05a_MM*mt~q8#fd>VGnYGxls~51JdG*l7cQt8s8NXkbtart09lmGJ5%z35f1 z6TRy6q0k*<1CvJkt!}(n=OHlaYiIbXN1Zn4RK4l3QKwbGeF<64SgSSuno|+(dV`TS z{p#5ZTvUMs=j|)V;r{$QDmVn{{3n{pT=nV~h}A-<5^7lO|Jr(O&41SB@661{S@+hi z8*{~kc=m-46wt<1ry(bM)#>f*2k%EA6v+`|_H(^)r+aG-U)>S_*J!9;qw(Cu z7sr5|(8=ZE#Y?gftLrHn4$M6@I2wr z&l3?%Wh9$`6Mw)PgPOVN!;OO8RvzKZP%1@>witXRV!fO2V&l}85`-IL#!b*^G{=SO zTitQFPhk2<4gfm!C)Jc=H1BHsmNA_G3<&82(R6pPKZ{H?dV~019U(=LvGthxEC~PV zE_Yni#>3nr)VzxDpSJabkNb_tOTtQ~Qy5}J6$Ixb+9Z847ffQ3f9hV 1)\nvirtual_space = SU2Space(0 => 12, 1 => 12, 2 => 5, 3 => 3)\nψ₀ = FiniteMPS(rand, ComplexF64, L, physical_space, virtual_space)\nψ, envs, delta = find_groundstate(ψ₀, H, DMRG(; verbosity=0))\nE₀ = real(expectation_value(ψ, H))\nEn_1, st_1 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector=SU2Irrep(1))\nEn_2, st_2 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector=SU2Irrep(2))\nΔE_finite = real(En_2[1] - En_1[1])","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"0.7989253589480485","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"We can go even further and doublecheck the claim that S = 1 is an edge excitation, by plotting the energy density.","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"p_density = plot(; xaxis=\"position\", yaxis=\"energy density\")\nexcited_1 = convert(FiniteMPS, st_1[1])\nexcited_2 = convert(FiniteMPS, st_2[1])\nSS = -S_exchange(ComplexF64, SU2Irrep; spin=1)\ne₀ = [real(expectation_value(ψ, (i, i + 1) => SS)) for i in 1:(L - 1)]\ne₁ = [real(expectation_value(excited_1, (i, i + 1) => SS)) for i in 1:(L - 1)]\ne₂ = [real(expectation_value(excited_2, (i, i + 1) => SS)) for i in 1:(L - 1)]\nplot!(p_density, e₀; label=\"S = 0\")\nplot!(p_density, e₁; label=\"S = 1\")\nplot!(p_density, e₂; label=\"S = 2\")","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"Finally, we can obtain a value for the Haldane gap by extrapolating our results for different system sizes.","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"Ls = 12:4:30\nΔEs = map(Ls) do L\n @info \"computing L = $L\"\n ψ₀ = FiniteMPS(rand, ComplexF64, L, physical_space, virtual_space)\n ψ, envs, delta = find_groundstate(ψ₀, H, DMRG(; verbosity=0))\n En_1, st_1 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector=SU2Irrep(1))\n En_2, st_2 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector=SU2Irrep(2))\n return real(En_2[1] - En_1[1])\nend\n\nf = fit(Ls .^ (-2), ΔEs, 1)\nΔE_extrapolated = f.coeffs[1]","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"0.45173401585827344","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"p_size_extrapolation = plot(; xaxis=\"L^(-2)\", yaxis=\"ΔE\", xlims=(0, 0.015))\nplot!(p_size_extrapolation, Ls .^ (-2), ΔEs; seriestype=:scatter, label=\"numerical\")\nplot!(p_size_extrapolation, x -> f(x); label=\"fit\")","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/2.haldane/#Thermodynamic-limit","page":"The Haldane gap","title":"Thermodynamic limit","text":"","category":"section"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"A much nicer way of obtaining the Haldane gap is by working directly in the thermodynamic limit. As was already hinted at by the edge modes, this model is in a non-trivial SPT phase. Thus, care must be taken when selecting the symmetry sectors. The groundstate has half-integer edge modes, thus the virtual spaces must also all carry half-integer charges.","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"In contrast with the finite size case, we now should specify a momentum label to the excitations. This way, it is possible to scan the dispersion relation over the entire momentum space.","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"virtual_space_inf = Rep[SU₂](1 // 2 => 16, 3 // 2 => 16, 5 // 2 => 8, 7 // 2 => 4)\nψ₀_inf = InfiniteMPS([physical_space], [virtual_space_inf])\nψ_inf, envs_inf, delta_inf = find_groundstate(ψ₀_inf, H; verbosity=0)\n\nkspace = range(0, π, 16)\nEs, _ = excitations(H, QuasiparticleAnsatz(), kspace, ψ_inf, envs_inf; sector=SU2Irrep(1))\n\nΔE, idx = findmin(real.(Es))\nprintln(\"minimum @k = $(kspace[idx]):\\t ΔE = $(ΔE)\")","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"┌ Warning: resorting to η\n└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139\n┌ Warning: resorting to η\n└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139\n┌ Warning: resorting to η\n└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139\n┌ Warning: resorting to η\n└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139\n┌ Warning: resorting to η\n└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139\n┌ Warning: resorting to η\n└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139\n┌ Warning: resorting to η\n└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139\n┌ Warning: resorting to η\n└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:139\n[ Info: Found excitations for momentum = 1.8849555921538759\n[ Info: Found excitations for momentum = 1.6755160819145563\n[ Info: Found excitations for momentum = 0.0\n[ Info: Found excitations for momentum = 0.20943951023931953\n[ Info: Found excitations for momentum = 2.0943951023931953\n[ Info: Found excitations for momentum = 1.4660765716752369\n[ Info: Found excitations for momentum = 2.722713633111154\n[ Info: Found excitations for momentum = 2.5132741228718345\n[ Info: Found excitations for momentum = 0.41887902047863906\n[ Info: Found excitations for momentum = 2.303834612632515\n[ Info: Found excitations for momentum = 2.9321531433504737\n[ Info: Found excitations for momentum = 1.2566370614359172\n[ Info: Found excitations for momentum = 0.6283185307179586\n[ Info: Found excitations for momentum = 1.0471975511965976\n[ Info: Found excitations for momentum = 3.141592653589793\n[ Info: Found excitations for momentum = 0.8377580409572781\nminimum @k = 3.141592653589793:\t ΔE = 0.4104792470940668\n","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"plot(kspace, real.(Es); xaxis=\"momentum\", yaxis=\"ΔE\", label=\"S = 1\")","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"This page was generated using Literate.jl.","category":"page"},{"location":"lib/lib/#Library-documentation","page":"Library","title":"Library documentation","text":"","category":"section"},{"location":"lib/lib/#lib_states","page":"Library","title":"States","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"FiniteMPS\nInfiniteMPS\nWindowMPS\nMPSMultiline","category":"page"},{"location":"lib/lib/#MPSKit.FiniteMPS","page":"Library","title":"MPSKit.FiniteMPS","text":"FiniteMPS{A<:GenericMPSTensor,B<:MPSBondTensor} <: AbstractFiniteMPS\n\nType that represents a finite Matrix Product State.\n\nFields\n\nALs – left-gauged MPS tensors\nARs – right-gauged MPS tensors\nACs – center-gauged MPS tensors\nCLs – gauge tensors\n\nWhere each is entry can be a tensor or missing.\n\nNotes\n\nBy convention, we have that:\n\nAL[i] * CL[i+1] = AC[i] = CL[i] * AR[i]\nAL[i]' * AL[i] = 1\nAR[i] * AR[i]' = 1\n\n\n\nConstructors\n\nFiniteMPS([f, eltype], physicalspaces::Vector{<:Union{S,CompositeSpace{S}}},\n maxvirtualspaces::Union{S,Vector{S}};\n normalize=true, left=oneunit(S), right=oneunit(S)) where {S<:ElementarySpace}\nFiniteMPS([f, eltype], N::Int, physicalspace::Union{S,CompositeSpace{S}},\n maxvirtualspaces::Union{S,Vector{S}};\n normalize=true, left=oneunit(S), right=oneunit(S)) where {S<:ElementarySpace}\nFiniteMPS(As::Vector{<:GenericMPSTensor}; normalize=false, overwrite=false)\n\nConstruct an MPS via a specification of physical and virtual spaces, or from a list of tensors As. All cases reduce to the latter.\n\nArguments\n\nAs::Vector{<:GenericMPSTensor}: vector of site tensors\nf::Function=rand: initializer function for tensor data\neltype::Type{<:Number}=ComplexF64: scalar type of tensors\nphysicalspaces::Vector{<:Union{S, CompositeSpace{S}}: list of physical spaces\nN::Int: number of sites\nphysicalspace::Union{S,CompositeSpace{S}}: local physical space\nvirtualspaces::Vector{<:Union{S, CompositeSpace{S}}: list of virtual spaces\nmaxvirtualspace::S: maximum virtual space\n\nKeywords\n\nnormalize: normalize the constructed state\noverwrite=false: overwrite the given input tensors\nleft=oneunit(S): left-most virtual space\nright=oneunit(S): right-most virtual space\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.InfiniteMPS","page":"Library","title":"MPSKit.InfiniteMPS","text":"InfiniteMPS{A<:GenericMPSTensor,B<:MPSBondTensor} <: AbtractMPS\n\nType that represents an infinite Matrix Product State.\n\nFields\n\nAL – left-gauged MPS tensors\nAR – right-gauged MPS tensors\nAC – center-gauged MPS tensors\nCR – gauge tensors\n\nNotes\n\nBy convention, we have that:\n\nAL[i] * CR[i] = AC[i] = CR[i-1] * AR[i]\nAL[i]' * AL[i] = 1\nAR[i] * AR[i]' = 1\n\n\n\nConstructors\n\nInfiniteMPS([f, eltype], physicalspaces::Vector{<:Union{S, CompositeSpace{S}},\n virtualspaces::Vector{<:Union{S, CompositeSpace{S}};\n kwargs...) where {S<:ElementarySpace}\nInfiniteMPS(As::AbstractVector{<:GenericMPSTensor}; kwargs...)\nInfiniteMPS(ALs::AbstractVector{<:GenericMPSTensor}, C₀::MPSBondTensor;\n kwargs...)\n\nConstruct an MPS via a specification of physical and virtual spaces, or from a list of tensors As, or a list of left-gauged tensors ALs.\n\nArguments\n\nAs::AbstractVector{<:GenericMPSTensor}: vector of site tensors\nALs::AbstractVector{<:GenericMPSTensor}: vector of left-gauged site tensors\nC₀::MPSBondTensor: initial gauge tensor\nf::Function=rand: initializer function for tensor data\neltype::Type{<:Number}=ComplexF64: scalar type of tensors\nphysicalspaces::AbstractVector{<:Union{S, CompositeSpace{S}}: list of physical spaces\nvirtualspaces::AbstractVector{<:Union{S, CompositeSpace{S}}: list of virtual spaces\n\nKeywords\n\ntol: gauge fixing tolerance\nmaxiter: gauge fixing maximum iterations\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.WindowMPS","page":"Library","title":"MPSKit.WindowMPS","text":"WindowMPS{A<:GenericMPSTensor,B<:MPSBondTensor} <: AbstractFiniteMPS\n\nType that represents a finite Matrix Product State embedded in an infinte Matrix Product State.\n\nFields\n\nleft_gs::InfiniteMPS – left infinite environment\nwindow::FiniteMPS – finite window Matrix Product State\nright_gs::InfiniteMPS – right infinite environment\n\n\n\nConstructors\n\nWindowMPS(left_gs::InfiniteMPS, window_state::FiniteMPS, [right_gs::InfiniteMPS])\nWindowMPS(left_gs::InfiniteMPS, window_tensors::AbstractVector, [right_gs::InfiniteMPS])\nWindowMPS([f, eltype], physicalspaces::Vector{<:Union{S, CompositeSpace{S}},\n virtualspaces::Vector{<:Union{S, CompositeSpace{S}}, left_gs::InfiniteMPS,\n [right_gs::InfiniteMPS])\nWindowMPS([f, eltype], physicalspaces::Vector{<:Union{S,CompositeSpace{S}}},\n maxvirtualspace::S, left_gs::InfiniteMPS, [right_gs::InfiniteMPS])\n\nConstruct a WindowMPS via a specification of left and right infinite environment, and either a window state or a vector of tensors to construct the window. Alternatively, it is possible to supply the same arguments as for the constructor of FiniteMPS, followed by a left (and right) environment to construct the WindowMPS in one step.\n\nnote: Note\nBy default, the right environment is chosen to be equal to the left, however no copy is made. In this case, changing the left state will also affect the right state.WindowMPS(state::InfiniteMPS, L::Int)\n\nConstruct a WindowMPS from an InfiniteMPS, by promoting a region of length L to a FiniteMPS.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.MPSMultiline","page":"Library","title":"MPSKit.MPSMultiline","text":"const MPSMultiline = Multiline{<:InfiniteMPS}\n\nType that represents multiple lines of InfiniteMPS objects.\n\nConstructors\n\nMPSMultiline(mpss::AbstractVector{<:InfiniteMPS})\nMPSMultiline([f, eltype], physicalspaces::Matrix{<:Union{S, CompositeSpace{S}},\n virtualspaces::Matrix{<:Union{S, CompositeSpace{S}}) where\n {S<:ElementarySpace}\nMPSMultiline(As::AbstractMatrix{<:GenericMPSTensor}; kwargs...)\nMPSMultiline(ALs::AbstractMatrix{<:GenericMPSTensor}, \n C₀::AbstractVector{<:MPSBondTensor}; kwargs...)\n\nSee also: Multiline\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#Operators","page":"Library","title":"Operators","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"FiniteMPO\nSparseMPO\nDenseMPO\nMPOHamiltonian","category":"page"},{"location":"lib/lib/#MPSKit.FiniteMPO","page":"Library","title":"MPSKit.FiniteMPO","text":"FiniteMPO(Os::Vector{<:MPOTensor}) -> FiniteMPO\nFiniteMPO(O::AbstractTensorMap{S,N,N}) where {S,N} -> FiniteMPO\n\nMatrix Product Operator (MPO) acting on a finite tensor product space with a linear order.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.SparseMPO","page":"Library","title":"MPSKit.SparseMPO","text":"struct SparseMPO{S,T<:MPOTensor,E<:Number}\n\nSparse MPO, used to represent both time evolution MPOs and hamiltonians.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.DenseMPO","page":"Library","title":"MPSKit.DenseMPO","text":"Represents a dense periodic mpo\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.MPOHamiltonian","page":"Library","title":"MPSKit.MPOHamiltonian","text":"MPOHamiltonian(lattice::AbstractArray{<:VectorSpace}, local_operators...)\nMPOHamiltonian(lattice::AbstractArray{<:VectorSpace})\nMPOHamiltonian(x::AbstractArray{<:Any,3})\n\nMPO representation of a hamiltonian. This is a specific form of a SparseMPO, where all the sites are represented by an upper triangular block matrix of the following form:\n\nbeginpmatrix\n1 C D\n0 A B\n0 0 1\nendpmatrix\n\nwhere A, B, C, and D are MPOTensors, or (sparse) blocks thereof.\n\nExamples\n\nFor example, constructing a nearest-neighbour Hamiltonian would look like this:\n\nlattice = fill(ℂ^2, 10)\nH = MPOHamiltonian(lattice, (i, i+1) => O for i in 1:length(lattice)-1)\n\nSee also instantiate_operator, which is responsable for instantiating the local operators in a form that is compatible with this constructor.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#Environments","page":"Library","title":"Environments","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"MPSKit.AbstractInfEnv\nMPSKit.PerMPOInfEnv\nMPSKit.MPOHamInfEnv\nMPSKit.FinEnv\nMPSKit.IDMRGEnvs","category":"page"},{"location":"lib/lib/#MPSKit.AbstractInfEnv","page":"Library","title":"MPSKit.AbstractInfEnv","text":"Abstract environment for an infinite state\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.PerMPOInfEnv","page":"Library","title":"MPSKit.PerMPOInfEnv","text":"This object manages the periodic mpo environments for an MPSMultiline\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.MPOHamInfEnv","page":"Library","title":"MPSKit.MPOHamInfEnv","text":"This object manages the hamiltonian environments for an InfiniteMPS\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.FinEnv","page":"Library","title":"MPSKit.FinEnv","text":"FinEnv keeps track of the environments for FiniteMPS / WindowMPS\nIt automatically checks if the queried environment is still correctly cached and if not - recalculates\n\nif above is set to nothing, above === below.\n\nopp can be a vector of nothing, in which case it'll just be the overlap\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#Generic-actions","page":"Library","title":"Generic actions","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"∂C\n∂∂C\n∂AC\n∂∂AC\n∂AC2\n∂∂AC2\n\nc_proj\nac_proj\nac2_proj\n\ntransfer_left\ntransfer_right","category":"page"},{"location":"lib/lib/#MPSKit.∂C","page":"Library","title":"MPSKit.∂C","text":"Zero-site derivative (the C matrix to the right of pos)\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.∂AC2","page":"Library","title":"MPSKit.∂AC2","text":"Two-site derivative\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.transfer_left","page":"Library","title":"MPSKit.transfer_left","text":"transfer_left(v, A, Ā)\n\napply a transfer matrix to the left.\n\n ┌─A─\n-v │\n └─Ā─\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.transfer_right","page":"Library","title":"MPSKit.transfer_right","text":"transfer_right(v, A, Ā)\n\napply a transfer matrix to the right.\n\n─A─┐\n │ v-\n─Ā─┘\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#Algorithms","page":"Library","title":"Algorithms","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"find_groundstate\ntimestep\nleading_boundary\ndynamicaldmrg\nchangebonds\nexcitations\napproximate","category":"page"},{"location":"lib/lib/#MPSKit.find_groundstate","page":"Library","title":"MPSKit.find_groundstate","text":"find_groundstate(ψ, H, [environments]; kwargs...)\nfind_groundstate(ψ, H, algorithm, environments)\n\nCompute the groundstate for Hamiltonian H with initial guess ψ. If not specified, an optimization algorithm will be attempted based on the supplied keywords.\n\nArguments\n\nψ::AbstractMPS: initial guess\nH::AbstractMPO: operator for which to find the groundstate\n[environments]: MPS environment manager\nalgorithm: optimization algorithm\n\nKeywords\n\ntol::Float64: tolerance for convergence criterium\nmaxiter::Int: maximum amount of iterations\nverbosity::Int: display progress information\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.timestep","page":"Library","title":"MPSKit.timestep","text":"timestep(ψ₀, H, t, dt, [alg], [envs]; kwargs...)\ntimestep!(ψ₀, H, t, dt, [alg], [envs]; kwargs...)\n\nTime-step the state ψ₀ with Hamiltonian H over a given time step dt at time t, solving the Schroedinger equation: i ψt = H ψ.\n\nArguments\n\nψ₀::AbstractMPS: initial state\nH::AbstractMPO: operator that generates the time evolution (can be time-dependent).\nt::Number: starting time of time-step\ndt::Number: time-step magnitude\n[alg]: algorithm to use for the time evolution. Defaults to TDVP.\n[envs]: MPS environment manager\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.leading_boundary","page":"Library","title":"MPSKit.leading_boundary","text":"leading_boundary(ψ, opp, alg, envs=environments(ψ, opp))\n\nApproximate the leading eigenvector for opp.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.changebonds","page":"Library","title":"MPSKit.changebonds","text":"changebonds(ψ::AbstractMPS, H, alg, envs) -> ψ′, envs′\nchangebonds(ψ::AbstractMPS, alg) -> ψ′\n\nChange the bond dimension of ψ using the algorithm alg, and return the new ψ and the new envs.\n\nSee also: SvdCut, RandExpand, VUMPSSvdCut, OptimalExpand\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.excitations","page":"Library","title":"MPSKit.excitations","text":"excitations(H, algorithm::QuasiparticleAnsatz, ψ::FiniteQP, [left_environments],\n [right_environments]; num=1)\nexcitations(H, algorithm::QuasiparticleAnsatz, ψ::InfiniteQP, [left_environments],\n [right_environments]; num=1, solver=Defaults.solver)\nexcitations(H, algorithm::FiniteExcited, ψs::NTuple{<:Any, <:FiniteMPS};\n num=1, init=copy(first(ψs)))\nexcitations(H, algorithm::ChepigaAnsatz, ψ::FiniteMPS, [envs];\n num=1, pos=length(ψ)÷2)\nexcitations(H, algorithm::ChepigaAnsatz2, ψ::FiniteMPS, [envs];\n num=1, pos=length(ψ)÷2)\n\nCompute the first excited states and their energy gap above a groundstate.\n\nArguments\n\nH::AbstractMPO: operator for which to find the excitations\nalgorithm: optimization algorithm\nψ::QP: initial quasiparticle guess\nψs::NTuple{N, <:FiniteMPS}: N first excited states\n[left_environments]: left groundstate environment\n[right_environments]: right groundstate environment\n\nKeywords\n\nnum::Int: number of excited states to compute\nsolver: algorithm for the linear solver of the quasiparticle environments\ninit: initial excited state guess\npos: position of perturbation\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.approximate","page":"Library","title":"MPSKit.approximate","text":"approximate(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)\napproximate!(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)\n\nCompute an approximation to the application of an operator O to the state ψ in the form of an MPS ψ₀.\n\nArguments\n\nψ₀::AbstractMPS: initial guess of the approximated state\n(O::AbstractMPO, ψ::AbstractMPS): operator O and state ψ to be approximated\nalgorithm: approximation algorithm. See below for a list of available algorithms.\n[environments]: MPS environment manager\n\nKeywords\n\ntol::Float64: tolerance for convergence criterium\nmaxiter::Int: maximum amount of iterations\nverbosity::Int: display progress information\n\nAlgorithms\n\nDMRG: Alternating least square method for maximizing the fidelity with a single-site scheme.\nDMRG2: Alternating least square method for maximizing the fidelity with a two-site scheme.\nIDMRG1: Variant of DMRG for maximizing fidelity density in the thermodynamic limit.\nIDMRG2: Variant of DMRG2 for maximizing fidelity density in the thermodynamic limit.\nVOMPS: Tangent space method for truncating uniform MPS.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#lib_gs_alg","page":"Library","title":"Groundstate algorithms","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"VUMPS\nIDMRG1\nIDMRG2\nDMRG\nDMRG2\nGradientGrassmann","category":"page"},{"location":"lib/lib/#MPSKit.VUMPS","page":"Library","title":"MPSKit.VUMPS","text":"VUMPS{F} <: Algorithm\n\nVariational optimization algorithm for uniform matrix product states, as introduced in https://arxiv.org/abs/1701.07035.\n\nFields\n\ntol::Float64: tolerance for convergence criterium\nmaxiter::Int: maximum amount of iterations\nfinalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, H, envs) -> ψ, envs\nverbosity::Int: display progress information\nalg_gauge=Defaults.alg_gauge(): algorithm for gauging\nalg_eigsolve=Defaults.alg_eigsolve(): algorithm for eigensolvers\nalg_environments=Defaults.alg_environments(): algorithm for updating environments\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.IDMRG1","page":"Library","title":"MPSKit.IDMRG1","text":"IDMRG1{A} <: Algorithm\n\nSingle site infinite DMRG algorithm for finding groundstates.\n\nFields\n\ntol::Float64: tolerance for convergence criterium\ntol_gauge::Float64: tolerance for gauging algorithm\neigalg::A: eigensolver algorithm\nmaxiter::Int: maximum number of outer iterations\nverbosity::Int: display progress information\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.IDMRG2","page":"Library","title":"MPSKit.IDMRG2","text":"IDMRG2{A} <: Algorithm\n\n2-site infinite DMRG algorithm for finding groundstates.\n\nFields\n\ntol::Float64: tolerance for convergence criterium\ntol_gauge::Float64: tolerance for gauging algorithm\neigalg::A: eigensolver algorithm\nmaxiter::Int: maximum number of outer iterations\nverbosity::Int: display progress information\ntrscheme::TruncationScheme: truncation algorithm for [tsvd]TensorKit.tsvd\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.DMRG","page":"Library","title":"MPSKit.DMRG","text":"DMRG{A,F} <: Algorithm\n\nSingle site DMRG algorithm for finding groundstates.\n\nFields\n\ntol::Float64: tolerance for convergence criterium\neigalg::A: eigensolver algorithm or a NamedTuple with the eigensolver settings\nmaxiter::Int: maximum number of outer iterations\nverbosity::Int: display progress information\nfinalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, H, envs) -> ψ, envs\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.DMRG2","page":"Library","title":"MPSKit.DMRG2","text":"DMRG2{A,F} <: Algorithm\n\n2-site DMRG algorithm for finding groundstates.\n\nFields\n\ntol::Float64: tolerance for convergence criterium\neigalg::A: eigensolver algorithm or a NamedTuple with the eigensolver settings\nmaxiter::Int: maximum number of outer iterations\nverbosity::Int: display progress information\nfinalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, H, envs) -> ψ, envs\ntrscheme: truncation algorithm for [tsvd]TensorKit.tsvd\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.GradientGrassmann","page":"Library","title":"MPSKit.GradientGrassmann","text":"GradientGrassmann <: Algorithm\n\nVariational gradient-based optimization algorithm that keeps the MPS in left-canonical form, as points on a Grassmann manifold. The optimization is then a Riemannian gradient descent with a preconditioner to induce the metric from the Hilbert space inner product.\n\nFields\n\nmethod::OptimKit.OptimizationAlgorithm: algorithm to perform the gradient search\nfinalize!::Function: user-supplied function which is applied after each iteration, with signature finalize!(x::GrassmannMPS.ManifoldPoint, f, g, numiter) -> x, f, g\n\n\n\nConstructors\n\nGradientGrassmann(; kwargs...)\n\nKeywords\n\nmethod=ConjugateGradient: instance of optimization algorithm, or type of optimization algorithm to construct\nfinalize!: finalizer algorithm\ntol::Float64: tolerance for convergence criterium\nmaxiter::Int: maximum amount of iterations\nverbosity::Int: level of information display\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#lib_time_alg","page":"Library","title":"Time evolution algorithms","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"TDVP\nTDVP2\nTaylorCluster\nWII","category":"page"},{"location":"lib/lib/#MPSKit.TDVP","page":"Library","title":"MPSKit.TDVP","text":"TDVP{A} <: Algorithm\n\nSingle site TDVP algorithm for time evolution.\n\nFields\n\nintegrator::A: integration algorithm (defaults to Lanczos exponentiation)\ntolgauge::Float64: tolerance for gauging algorithm\ngaugemaxiter::Int: maximum amount of gauging iterations\nfinalize::F: user-supplied function which is applied after each timestep, with signature finalize(t, Ψ, H, envs) -> Ψ, envs\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.TDVP2","page":"Library","title":"MPSKit.TDVP2","text":"TDVP2{A} <: Algorithm\n\n2-site TDVP algorithm for time evolution.\n\nFields\n\nintegrator::A: integrator algorithm (defaults to Lanczos exponentiation)\ntolgauge::Float64: tolerance for gauging algorithm\ngaugemaxiter::Int: maximum amount of gauging iterations\ntrscheme: truncation algorithm for [tsvd]TensorKit.tsvd\nfinalize::F: user-supplied function which is applied after each timestep, with signature finalize(t, Ψ, H, envs) -> Ψ, envs\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#lib_bound_alg","page":"Library","title":"Leading boundary algorithms","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"VUMPS\nVOMPS\nGradientGrassmann","category":"page"},{"location":"lib/lib/#MPSKit.VOMPS","page":"Library","title":"MPSKit.VOMPS","text":"VOMPS{F} <: Algorithm\n\nPower method algorithm for infinite MPS. SciPost:4.1.004\n\nFields\n\ntol::Float64: tolerance for convergence criterium\nmaxiter::Int: maximum amount of iterations\nfinalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, toapprox, envs) -> ψ, envs\nverbosity::Int: display progress information\nalg_gauge=Defaults.alg_gauge(): algorithm for gauging\nalg_environments=Defaults.alg_environments(): algorithm for updating environments\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#lib_bc_alg","page":"Library","title":"Bond change algorithms","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"OptimalExpand\nRandExpand\nVUMPSSvdCut\nSvdCut","category":"page"},{"location":"lib/lib/#MPSKit.OptimalExpand","page":"Library","title":"MPSKit.OptimalExpand","text":"struct OptimalExpand <: Algorithm end\n\nAn algorithm that expands the given mps using the algorithm given in the VUMPS paper, by selecting the dominant contributions of a two-site updated MPS tensor, orthogonal to the original ψ.\n\nFields\n\ntrscheme::TruncationScheme = truncdim(1) : The truncation scheme to use.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.RandExpand","page":"Library","title":"MPSKit.RandExpand","text":"struct RandExpand <: Algorithm end\n\nAn algorithm that expands the bond dimension by adding random unitary vectors that are orthogonal to the existing state. This is achieved by performing a truncated SVD on a random two-site MPS tensor, which is made orthogonal to the existing state.\n\nFields\n\ntrscheme::TruncationScheme = truncdim(1) : The truncation scheme to use.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.VUMPSSvdCut","page":"Library","title":"MPSKit.VUMPSSvdCut","text":"struct VUMPSSvdCut <: Algorithm end\n\nAn algorithm that uses an IDMRG2 step to change the bond dimension of a state.\n\nFields\n\ntol_gauge::Real = Defaults.tolgauge : The tolerance for the gauge.\ntol::Real = Defaults.tol : The tolerance for the Galerkin truncation.\ntol_eigenval::Real = Defaults.tol : The tolerance for the eigenvalue solver.\ntrscheme::TruncationScheme = notrunc() : The truncation scheme to use.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.SvdCut","page":"Library","title":"MPSKit.SvdCut","text":"struct SvdCut <: Algorithm end\n\nAn algorithm that uses truncated SVD to change the bond dimension of a ψ.\n\nFields\n\ntrscheme::TruncationScheme = notrunc() : The truncation scheme to use.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#lib_ex_alg","page":"Library","title":"Excitations","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"QuasiparticleAnsatz\nFiniteExcited","category":"page"},{"location":"lib/lib/#MPSKit.QuasiparticleAnsatz","page":"Library","title":"MPSKit.QuasiparticleAnsatz","text":"QuasiparticleAnsatz <: Algorithm\n\nOptimization algorithm for quasiparticle excitations on top of MPS groundstates, as introduced in this paper.\n\nFields\n\nalg::A = Defaults.eigsolver: algorithm to use for the eigenvalue problem\n\nConstructors\n\nQuasiparticleAnsatz()\nQuasiparticleAnsatz(; kwargs...)\nQuasiparticleAnsatz(alg)\n\nCreate a QuasiparticleAnsatz algorithm with the given algorithm, or by passing the keyword arguments to Arnoldi.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.FiniteExcited","page":"Library","title":"MPSKit.FiniteExcited","text":"FiniteExcited{A} <: Algorithm\n\nVariational optimization algorithm for excitations of finite Matrix Product States by minimizing the energy of H - λᵢ ψᵢψᵢ.\n\nFields\n\ngsalg::A: optimization algorithm.\nweight::Float64: energy penalty for previous states.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#Utility","page":"Library","title":"Utility","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"left_virtualspace\nright_virtualspace\nphysicalspace\nadd_util_leg\nexpectation_value\nvariance\nentanglement_spectrum\nentropy\ntransfer_spectrum\ncorrelation_length\nentanglementplot\ntransferplot","category":"page"},{"location":"lib/lib/#MPSKit.left_virtualspace","page":"Library","title":"MPSKit.left_virtualspace","text":"left_virtualspace(ψ::AbstractMPS, i::Int)\n\nReturn the left virtual space of the bond tensor to the right of site i. This is equivalent to the left virtual space of the left-gauged site tensor at site i + 1.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.right_virtualspace","page":"Library","title":"MPSKit.right_virtualspace","text":"right_virtualspace(ψ::AbstractMPS, i::Int)\n\nReturn the right virtual space of the bond tensor to the right of site i. This is equivalent to the right virtual space of the right-gauged site tensor at site i.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.physicalspace","page":"Library","title":"MPSKit.physicalspace","text":"physicalspace(ψ::AbstractMPS, i::Int)\n\nReturn the physical space of the site tensor at site i.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.add_util_leg","page":"Library","title":"MPSKit.add_util_leg","text":"add_util_leg(tensor::AbstractTensorMap{S,N1,N2}) where {S,N1,N2}\n -> AbstractTensorMap{S,N1+1,N2+1}\n\nAdd trivial one-dimensional utility spaces with trivial sector to the left and right of a given tensor map, i.e. as the first space of the codomain and the last space of the domain.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.expectation_value","page":"Library","title":"MPSKit.expectation_value","text":"expectation_value(ψ, O, [environments])\nexpectation_value(ψ, inds => O)\n\nCompute the expectation value of an operator O on a state ψ. Optionally, it is possible to make the computations more efficient by also passing in previously calculated environments.\n\nIn general, the operator O may consist of an arbitrary MPO O <: AbstractMPO that acts on all sites, or a local operator O = inds => operator acting on a subset of sites. In the latter case, inds is a tuple of indices that specify the sites on which the operator acts, while the operator is either a AbstractTensorMap or a FiniteMPO.\n\nArguments\n\nψ::AbstractMPS : the state on which to compute the expectation value\nO::Union{AbstractMPO,Pair} : the operator to compute the expectation value of. This can either be an AbstractMPO, or a pair of indices and local operator..\nenvironments::Cache : the environments to use for the calculation. If not given, they will be calculated.\n\nExamples\n\njulia> ψ = FiniteMPS(ones, Float64, 4, ℂ^2, ℂ^3);\n\njulia> S_x = TensorMap(Float64[0 1; 1 0], ℂ^2, ℂ^2);\n\njulia> round(expectation_value(ψ, 2 => S_x))\n1.0\n\njulia> round(expectation_value(ψ, (2, 3) => S_x ⊗ S_x))\n1.0\n\njulia> round(expectation_value(ψ, MPOHamiltonian(S_x)))\n4.0\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.variance","page":"Library","title":"MPSKit.variance","text":"variance(state, hamiltonian, [envs=environments(state, hamiltonian)])\n\nCompute the variance of the energy of the state with respect to the hamiltonian.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.entanglement_spectrum","page":"Library","title":"MPSKit.entanglement_spectrum","text":"entanglement_spectrum(ψ, [site::Int=0]) -> SectorDict{sectortype(ψ),Vector{<:Real}}\n\nCompute the entanglement spectrum at a given site, i.e. the singular values of the gauge matrix to the right of a given site. This is a dictionary mapping the charge to the singular values.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.entropy","page":"Library","title":"MPSKit.entropy","text":"entropy(state, [site::Int])\n\nCalculate the Von Neumann entanglement entropy of a given MPS. If an integer site is given, the entropy is across the entanglement cut to the right of site site. Otherwise, a vector of entropies is returned, one for each site.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.transfer_spectrum","page":"Library","title":"MPSKit.transfer_spectrum","text":"transfer_spectrum(above::InfiniteMPS; below=above, tol=Defaults.tol, num_vals=20,\n sector=first(sectors(oneunit(left_virtualspace(above, 1)))))\n\nCalculate the partial spectrum of the left mixed transfer matrix corresponding to the overlap of a given above state and a below state. The sector keyword argument can be used to specify a non-trivial total charge for the transfer matrix eigenvectors. Specifically, an auxiliary space ℂ[typeof(sector)](sector => 1)' will be added to the domain of each eigenvector. The tol and num_vals keyword arguments are passed to KrylovKit.eigolve\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.correlation_length","page":"Library","title":"MPSKit.correlation_length","text":"correlation_length(above::InfiniteMPS; kwargs...)\n\nCompute the correlation length of a given InfiniteMPS based on the next-to-leading eigenvalue of the transfer matrix. The kwargs are passed to transfer_spectrum, and can for example be used to target the correlation length in a specific sector. \n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.entanglementplot","page":"Library","title":"MPSKit.entanglementplot","text":"entanglementplot(state; site=0[, kwargs...])\n\nPlot the entanglement spectrum of a given InfiniteMPS. \n\nArguments\n\nsite::Int=0: mps index for multisite unit cells. Spectrum is computed for the bond between site and site + 1.\nexpand_symmetry::Logical=false: add quantum dimension degeneracies.\nsortby=maximum: the method of sorting the sectors.\nsector_margin=1//10: the amount of whitespace between sectors.\nsector_formatter=string: how to convert sectors to strings.\nkwargs...: other kwargs are passed on to the plotting backend.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.transferplot","page":"Library","title":"MPSKit.transferplot","text":"transferplot(above, below[, sectors[, transferkwargs[, kwargs]]])\n\nPlot the partial transfer matrix spectrum of two InfiniteMPS's.\n\nArguments\n\nabove::InfiniteMPS: above mps for transfer_spectrum.\nbelow::InfiniteMPS: below mps for transfer_spectrum.\nsectors=[]: vector of sectors for which to compute the spectrum.\ntransferkwargs: kwargs for call to transfer_spectrum.\nkwargs: other kwargs are passed on to the plotting backend.\nthetaorigin=0: origin of the angle range.\nsector_formatter=string: how to convert sectors to strings.\n\n\n\n\n\n","category":"function"},{"location":"man/lattices/#lattices","page":"Lattices","title":"Lattices","text":"","category":"section"},{"location":"man/lattices/","page":"Lattices","title":"Lattices","text":"warning: Warning\nThis section is still under construction. Coming soon!","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"EditURL = \"../../../../../examples/quantum1d/3.ising-dqpt/main.jl\"","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/#DQPT-in-the-Ising-model(@id-demo_dqpt)","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"","category":"section"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"In this tutorial we will try to reproduce the results from this paper. The needed packages are","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"using MPSKit, MPSKitModels, TensorKit","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"Dynamical quantum phase transitions (DQPT in short) are signatures of equilibrium phase transitions in a dynamical quantity - the loschmidth echo. This quantity is given by L(t) = frac-2N ln( psi(t) psi(0) ) where N is the system size. One typically starts from a groundstate and then quenches the hamiltonian to a different point. Non analycities in the loschmidth echo are called 'dynamical quantum phase transitions'.","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"In the mentioned paper they work with","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"H(g) = - sum^N-1_i=1 sigma^z_i sigma^z_i+1 + g sum_i=1^N sigma^x_i","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"and show that divergences occur when quenching across the critical point (g₀ → g₁) for t^*_n = t^*(n+frac12) with t^* = pie(g_1k^*), cos(k^*) = (1+g_0 g_1) (g_0 + g_1), e(gk) = sqrt(g-cos k)^2 + sin^2 k.","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"The outline of the tutorial is as follows. We will pick g₀ = 05, g₁ = 20, and perform the time evolution at different system sizes and compare with the thermodynamic limit. For those g we expect non-analicities to occur at t_n 235 (n + 12).","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"First we construct the hamiltonian in mpo form, and obtain the pre-quenched groundstate:","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"H₀ = transverse_field_ising(; g=-0.5)\n\nL = 20\nψ₀ = FiniteMPS(rand, ComplexF64, L, ℂ^2, ℂ^10)\nψ₀, _ = find_groundstate(ψ₀, H₀, DMRG());","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"[ Info: DMRG init:\tobj = +9.833992820341e+00\terr = 1.5162e-01\n[ Info: DMRG 1:\tobj = -2.040021714792e+01\terr = 1.0482607701e-02\ttime = 0.07 sec\n[ Info: DMRG 2:\tobj = -2.040021715176e+01\terr = 2.9301055999e-07\ttime = 0.02 sec\n[ Info: DMRG 3:\tobj = -2.040021783353e+01\terr = 2.1923563339e-05\ttime = 0.14 sec\n[ Info: DMRG 4:\tobj = -2.040021786702e+01\terr = 1.8539117704e-06\ttime = 0.21 sec\n[ Info: DMRG 5:\tobj = -2.040021786703e+01\terr = 7.8191209682e-08\ttime = 0.04 sec\n[ Info: DMRG conv 6:\tobj = -2.040021786703e+01\terr = 6.4920277294e-11\ttime = 0.49 sec\n","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/#Finite-MPS-quenching","page":"DQPT in the Ising model(@id demo_dqpt)","title":"Finite MPS quenching","text":"","category":"section"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"We can define a helper function that measures the loschmith echo","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"echo(ψ₀::FiniteMPS, ψₜ::FiniteMPS) = -2 * log(abs(dot(ψ₀, ψₜ))) / length(ψ₀)\n@assert isapprox(echo(ψ₀, ψ₀), 0, atol=1e-10)","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"We will initially use a two-site TDVP scheme to dynamically increase the bond dimension while time evolving, and later on switch to a faster one-site scheme. A single timestep can be done using","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"H₁ = transverse_field_ising(; g=-2.0)\nψₜ = deepcopy(ψ₀)\ndt = 0.01\nψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP2(; trscheme=truncdim(20)));","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"\"envs\" is a kind of cache object that keeps track of all environments in ψ. It is often advantageous to re-use the environment, so that mpskit doesn't need to recalculate everything.","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"Putting it all together, we get","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"function finite_sim(L; dt=0.05, finaltime=5.0)\n ψ₀ = FiniteMPS(rand, ComplexF64, L, ℂ^2, ℂ^10)\n ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG())\n\n ψₜ = deepcopy(ψ₀)\n envs = environments(ψₜ, H₁)\n\n echos = [echo(ψₜ, ψ₀)]\n times = collect(0:dt:finaltime)\n\n for t in times[2:end]\n alg = t > 3 * dt ? TDVP() : TDVP2(; trscheme=truncdim(50))\n ψₜ, envs = timestep(ψₜ, H₁, 0, dt, alg, envs)\n push!(echos, echo(ψₜ, ψ₀))\n end\n\n return times, echos\nend","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"finite_sim (generic function with 1 method)","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"(Image: )","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/#Infinite-MPS-quenching","page":"DQPT in the Ising model(@id demo_dqpt)","title":"Infinite MPS quenching","text":"","category":"section"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"Similarly we could start with an initial infinite state and find the pre-quench groundstate:","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"ψ₀ = InfiniteMPS([ℂ^2], [ℂ^10])\nψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS());","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"[ Info: VUMPS init:\tobj = +5.083504996507e-01\terr = 3.8682e-01\n[ Info: VUMPS 1:\tobj = -1.060586960116e+00\terr = 4.7773289906e-02\ttime = 1.51 sec\n[ Info: VUMPS 2:\tobj = -1.063544400328e+00\terr = 8.6203478863e-05\ttime = 0.01 sec\n[ Info: VUMPS 3:\tobj = -1.063544409973e+00\terr = 2.6470717828e-07\ttime = 0.01 sec\n[ Info: VUMPS 4:\tobj = -1.063544409973e+00\terr = 8.9760940163e-09\ttime = 0.00 sec\n[ Info: VUMPS 5:\tobj = -1.063544409973e+00\terr = 4.1698951454e-10\ttime = 0.00 sec\n[ Info: VUMPS conv 6:\tobj = -1.063544409973e+00\terr = 3.7060383050e-11\ttime = 1.53 sec\n","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"The dot product of two infinite matrix product states scales as alpha ^N where α is the dominant eigenvalue of the transfer matrix. It is this α that is returned when calling","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"dot(ψ₀, ψ₀)","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"0.9999999999999964 - 7.217459182439675e-17im","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"so the loschmidth echo takes on the pleasant form","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"echo(ψ₀::InfiniteMPS, ψₜ::InfiniteMPS) = -2 * log(abs(dot(ψ₀, ψₜ)))\n@assert isapprox(echo(ψ₀, ψ₀), 0, atol=1e-10)","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"This time we cannot use a two-site scheme to grow the bond dimension, as this isn't implemented (yet). Instead, we have to make use of the changebonds machinery. Multiple algorithms are available, but we will only focus on OptimalEpand(). Growing the bond dimension by 5 can be done by calling:","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"ψₜ = deepcopy(ψ₀)\nψₜ, envs = changebonds(ψₜ, H₁, OptimalExpand(; trscheme=truncdim(5)));","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"a single timestep is easy","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"dt = 0.01\nψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP(), envs);","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"With performance in mind we should once again try to re-use these \"envs\" cache objects. The final code is","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"function infinite_sim(dt=0.05, finaltime=5.0)\n ψ₀ = InfiniteMPS([ℂ^2], [ℂ^10])\n ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS())\n\n ψₜ = deepcopy(ψ₀)\n envs = environments(ψₜ, H₁)\n\n echos = [echo(ψₜ, ψ₀)]\n times = collect(0:dt:finaltime)\n\n for t in times[2:end]\n if t < 50dt # if t is sufficiently small, we increase the bond dimension\n ψₜ, envs = changebonds(ψₜ, H₁, OptimalExpand(; trscheme=truncdim(1)), envs)\n end\n (ψₜ, envs) = timestep(ψₜ, H₁, 0, dt, TDVP(), envs)\n push!(echos, echo(ψₜ, ψ₀))\n end\n\n return times, echos\nend","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"infinite_sim (generic function with 3 methods)","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"(Image: )","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"This page was generated using Literate.jl.","category":"page"},{"location":"man/parallelism/#Parallelism-in-julia","page":"Parallelism in julia","title":"Parallelism in julia","text":"","category":"section"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"Julia has great parallelism infrastructure, but there is a caveat that is relevant for all algorithms implemented in MPSKit. The Julia threads do not play nicely together with the BLAS threads, which are the threads used for many of the linear algebra routines, and in particular for gemm (general matrix-matrix multiplication). As this is a core routine in MPSKit, this has a significant impact on the overall performance.","category":"page"},{"location":"man/parallelism/#Julia-threads-vs-BLAS-threads","page":"Parallelism in julia","title":"Julia threads vs BLAS threads","text":"","category":"section"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"A lot of the confusion stems from the fact that the BLAS threading behaviour is not consistent between different vendors. Additionally, performance behaviour is severely dependent on hardware, the specifics of the problem, and the availability of other resources such as total memory, or memory bandwith. This means that there is no one size fits all solution, and that you will have to experiment with the settings to get optimal performance. Nevertheless, there are some general guidelines that can be followed, which seem to at least work well in most cases.","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"The number of threads that are set by BLAS.set_num_threads(), in the case of OpenBLAS (the default vendor), is equal to the total number of BLAS threads that is kept in a pool, which is then shared by all Julia threads. This means that if you have 4 julia threads and 4 BLAS threads, then all julia threads will share the same 4 BLAS threads. On the other hand, using BLAS.set_num_threads(1), OpenBLAS will now utilize the julia threads to run the BLAS jobs. Thus, for OpenBLAS, very often setting the number of BLAS threads to 1 is the best option, which will then maximally utilize the julia threading infrastructure of MPSKit.","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"In the case of MKL.jl, which often outperforms OpenBLAS, the situation is a bit different. Here, the number of BLAS threads corresponds to the number of threads that are spawned by each julia thread. Thus, if you have 4 julia threads and 4 BLAS threads, then each julia thread will spawn 4 BLAS threads, for a total of 16 BLAS threads. As such, it might become necessary to adapt the settings to avoid oversubscription of the cores.","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"A careful analysis of the different cases and benefits can be inspected by making use of ThreadPinning.jl's tool threadinfo(; blas=true, info=true). In particular, the following might demonstrate the difference between OpenBLAS and MKL:","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"julia> Threads.nthreads()\n4\n\njulia> using ThreadPinning; threadinfo(; blas=true, hints=true)\n\nSystem: 8 cores (2-way SMT), 1 sockets, 1 NUMA domains\n\n| 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 | \n\n# = Julia thread, # = HT, # = Julia thread on HT, | = Socket seperator\n\nJulia threads: 4\n├ Occupied CPU-threads: 4\n└ Mapping (Thread => CPUID): 1 => 8, 2 => 5, 3 => 9, 4 => 2,\n\nBLAS: libopenblas64_.so\n└ openblas_get_num_threads: 8\n\n[ Info: jlthreads != 1 && blasthreads < cputhreads. You should either set BLAS.set_num_threads(1) (recommended!) or at least BLAS.set_num_threads(16).\n[ Info: jlthreads < cputhreads. Perhaps increase number of Julia threads to 16?\njulia> using MKL; threadinfo(; blas=true, hints=true)\n\nSystem: 8 cores (2-way SMT), 1 sockets, 1 NUMA domains\n\n| 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 | \n\n# = Julia thread, # = HT, # = Julia thread on HT, | = Socket seperator\n\nJulia threads: 4\n├ Occupied CPU-threads: 4\n└ Mapping (Thread => CPUID): 1 => 11, 2 => 12, 3 => 1, 4 => 2,\n\nBLAS: libmkl_rt.so\n├ mkl_get_num_threads: 8\n└ mkl_get_dynamic: true\n\n┌ Warning: blasthreads_per_jlthread > cputhreads_per_jlthread. You should decrease the number of MKL threads, i.e. BLAS.set_num_threads(4).\n└ @ ThreadPinning ~/.julia/packages/ThreadPinning/qV2Cd/src/threadinfo.jl:256\n[ Info: jlthreads < cputhreads. Perhaps increase number of Julia threads to 16?","category":"page"},{"location":"man/parallelism/#MPSKit-multithreading","page":"Parallelism in julia","title":"MPSKit multithreading","text":"","category":"section"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"Within MPSKit, when Julia is started with multiple threads, by default the Threads.@spawn machinery will be used to parallelize the code as much as possible. In particular, there are three main places where this is happening, which can be disabled separately through a preference-based system.","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"During the process of some algorithms (e.g. VUMPS), local updates can take place at each site in parallel. This can be controlled by the parallelize_sites preference.\nDuring the calculation of the environments, when the MPO is block-sparse, it is possible to parallelize over these blocks. This can be enabled or disabled by the parallelize_transfers preference. (Note that left- and right environments will always be computed in parallel)\nDuring the calculation of the derivatives, when the MPO is block-sparse, it is possible to parallelize over these blocks. This can be enabled or disabled by the parallelize_derivatives preference.","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"For convenience, these preferences can be set via MPSKit.Defaults.set_parallelization, which takes as input pairs of preferences and booleans. For example, to disable all parallelization, one can call","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"Defaults.set_parallelization(\"sites\" => false, \"transfers\" => false, \"derivatives\" => false)","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"warning: Warning\nThese settings are statically set at compile-time, and for changes to take effect the Julia session must be restarted.","category":"page"},{"location":"man/parallelism/#TensorKit-multithreading","page":"Parallelism in julia","title":"TensorKit multithreading","text":"","category":"section"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"Finally, when dealing with tensors that have some internal symmetry, it is also possible to parallelize over the symmetry sectors. This is handled by TensorKit, and more information can be found in its documentation (Soon TM).","category":"page"},{"location":"man/parallelism/#Memory-management","page":"Parallelism in julia","title":"Memory management","text":"","category":"section"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"Because of the way julia threads work, it is possible that the total memory usage of your program becomes rather high. This seems to be because of the fact that MPSKit spawns several tasks (in a nested way), which each allocate and deallocate quite a bit of memory in a tight loop. This seems to lead to a situation where the garbage collector is not able to keep up, and can even fail to clear the garbage before an OutOfMemory error occurs. In this case, often the best thing to do is disable the multithreading of MPSKit, specifically for the derivatives, as this seems to be the most memory intensive part. This is something that is under investigation, and hopefully will be fixed in the future.","category":"page"},{"location":"man/environments/#um_environments","page":"Environments","title":"Environments","text":"","category":"section"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"In many tensor network algorithms we encounter partially contracted tensor networks. In dmrg for example, one needs to know the sum of all the hamiltonian contributions left and right of the site that we want to optimize. If you then optimize the neighboring site to the right, you only need to add one new contribution to the previous sum of hamiltonian contributions.","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"This kind of information is stored in the environment objects (at the moment called \"Cache\" in our code, but the name is subject to change). The goal is that the user should preferably never have to deal with the caches, but being aware of the inner workings may allow you to write more efficient code. That is why they are nonetheless included in the manual.","category":"page"},{"location":"man/environments/#Finite-Environments","page":"Environments","title":"Finite Environments","text":"","category":"section"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"When you create a state and a hamiltonian:","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"state = FiniteMPS(rand,ComplexF64,20,ℂ^2,ℂ^10);\noperator = nonsym_ising_ham();","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"an environment object can be created by calling","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"cache = environments(state,operator)","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"The partially contracted mpohamiltonian left of site i can then be queried using:","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"leftenv(cache,i,state)","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"This may take some time, but a subsequent call to","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"leftenv(cache,i-1,state)","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"Should pretty much be free. Behind the scenes the cache stored all tensors it used to calculate leftenv (state.AL[1 .. i]) and when queried again, it checks if the tensors it previously used are identical (using ===). If so, it can simply return the previously stored results. If not, it will recalculate again. If you update a tensor in-place, the caches cannot know using === that the actual tensors have changed. If you do this, you have to call poison!(state,i).","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"As an optional argument, many algorithms allow you to pass in an environment object, and they also return an updated one. Therefore, for time evolution code, it is more efficient to give it the updated caches every time step, instead of letting it recalculate.","category":"page"},{"location":"man/environments/#Infinite-Environments","page":"Environments","title":"Infinite Environments","text":"","category":"section"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"Infinite Environments are very similar :","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"state = InfiniteMPS([ℂ^2],[ℂ^10]);\noperator = nonsym_ising_ham();\ncache = environments(state,operator)","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"There are also some notable differences. Infinite environments typically require solving linear problems or eigenvalue problems iteratively with finite precision. To find out what precision we used we can type:","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"(cache.tol,cache.maxiter)","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"To recalculate with a different precision :","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"cache.tol=1e-8;\nrecalculate!(cache,state)","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"Unlike their finite counterparts, recalculating is not done automatically. To get the environment for a different state one has to recalculate explicitly!","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"different_state = InfiniteMPS([ℂ^2],[ℂ^10]);\nrecalculate!(cache,different_state)\nleftenv(cache,3,different_state)","category":"page"},{"location":"examples/#Examples","page":"Examples","title":"Examples","text":"","category":"section"},{"location":"examples/#Quantum-(11)d","page":"Examples","title":"Quantum (1+1)d","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"Pages = map(file -> joinpath(\"quantum1d\", file, \"index.md\"), readdir(\"quantum1d\"))\nDepth = 1","category":"page"},{"location":"examples/#Classical-(20)d","page":"Examples","title":"Classical (2+0)d","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"Pages = map(file -> joinpath(\"classic2d\", file, \"index.md\"), readdir(\"classic2d\"))\nDepth = 1","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"EditURL = \"../../../../../examples/classic2d/1.hard-hexagon/main.jl\"","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/#demo_hardhexagon","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"","category":"section"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"(Image: logo)","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"Tensor networks are a natural way to do statistical mechanics on a lattice. As an example of this we will extract the central charge of the hard hexagon model. This model is known to have central charge 0.8, and has very peculiar non-local (anyonic) symmetries. Because TensorKit supports anyonic symmetries, so does MPSKit. To follow the tutorial you need the following packages.","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"using MPSKit, MPSKitModels, TensorKit, Plots, Polynomials","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"The hard hexagon model is a 2-dimensional lattice model of a gas, where particles are allowed to be on the vertices of a triangular lattice, but no two particles may be adjacent. This can be encoded in a transfer matrix with a local MPO tensor using anyonic symmetries, and the resulting MPO has been implemented in MPSKitModels.","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"In order to use these anyonic symmetries, we need to generalise the notion of the bond dimension and define how it interacts with the symmetry. Thus, we implement away of converting integers to symmetric spaces of the given dimension, which provides a crude guess for how the final MPS would distribute its Schmidt spectrum.","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"mpo = hard_hexagon()\nP = space(mpo.opp[1], 2)\nfunction virtual_space(D::Integer)\n _D = round(Int, D / sum(dim, values(FibonacciAnyon)))\n return Vect[FibonacciAnyon](sector => _D for sector in (:I, :τ))\nend\n\n@assert isapprox(dim(virtual_space(100)), 100; atol=3)","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/#The-leading-boundary","page":"The Hard Hexagon model","title":"The leading boundary","text":"","category":"section"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"One way to study statistical mechanics in infinite systems with tensor networks is by approximating the dominant eigenvector of the transfer matrix by an MPS. This dominant eigenvector contains a lot of hidden information. For example, the free energy can be extracted by computing the expectation value of the mpo. Additionally, we can compute the entanglement entropy as well as the correlation length of the state:","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"D = 10\nV = virtual_space(D)\nψ₀ = InfiniteMPS([P], [V])\nψ, envs, = leading_boundary(ψ₀, mpo,\n VUMPS(; verbosity=0,\n alg_eigsolve=MPSKit.Defaults.alg_eigsolve(;\n ishermitian=false))) # use non-hermitian eigensolver\nF = real(expectation_value(ψ, mpo))\nS = real(first(entropy(ψ)))\nξ = correlation_length(ψ)\nprintln(\"F = $F\\tS = $S\\tξ = $ξ\")","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"F = 0.8839037051703855\tS = 1.2807829621905824\tξ = 13.849682582044379\n","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/#The-scaling-hypothesis","page":"The Hard Hexagon model","title":"The scaling hypothesis","text":"","category":"section"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"The dominant eigenvector is of course only an approximation. The finite bond dimension enforces a finite correlation length, which effectively introduces a length scale in the system. This can be exploited to formulate a scaling hypothesis, which in turn allows to extract the central charge.","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"First we need to know the entropy and correlation length at a bunch of different bond dimensions. Our approach will be to re-use the previous approximated dominant eigenvector, and then expanding its bond dimension and re-running VUMPS. According to the scaling hypothesis we should have S propto fracc6 log(ξ). Therefore we should find c using","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"function scaling_simulations(ψ₀, mpo, Ds; verbosity=0, tol=1e-6,\n alg_eigsolve=MPSKit.Defaults.alg_eigsolve(; ishermitian=false))\n entropies = similar(Ds, Float64)\n correlations = similar(Ds, Float64)\n alg = VUMPS(; verbosity, tol, alg_eigsolve)\n\n ψ, envs, = leading_boundary(ψ₀, mpo, alg)\n entropies[1] = real(entropy(ψ)[1])\n correlations[1] = correlation_length(ψ)\n\n for (i, d) in enumerate(diff(Ds))\n ψ, envs = changebonds(ψ, mpo, OptimalExpand(; trscheme=truncdim(d)), envs)\n ψ, envs, = leading_boundary(ψ, mpo, alg, envs)\n entropies[i + 1] = real(entropy(ψ)[1])\n correlations[i + 1] = correlation_length(ψ)\n end\n return entropies, correlations\nend\n\nbond_dimensions = 10:5:25\nψ₀ = InfiniteMPS([P], [virtual_space(bond_dimensions[1])])\nSs, ξs = scaling_simulations(ψ₀, mpo, bond_dimensions)\n\nf = fit(log.(ξs), 6 * Ss, 1)\nc = f.coeffs[2]","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"0.8025328581510137","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"p = plot(; xlabel=\"logarithmic correlation length\", ylabel=\"entanglement entropy\")\np = plot(log.(ξs), Ss; seriestype=:scatter, label=nothing)\nplot!(p, ξ -> f(ξ) / 6; label=\"fit\")","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"This page was generated using Literate.jl.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"EditURL = \"../../../../../examples/quantum1d/5.haldane-spt/main.jl\"","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/#spin1heisenberg","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"","category":"section"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"The quantum Heisenberg model is a model often used in the study of critical points and phase transitions of magnetic systems, in which the spins are treated quantum mechanically. It models magnetic interactions between neighbouring spins through the so-called Heisenberg interaction term, which causes the spins to either align (J 0) or anti-align (J 0), thus modeling a (anti-) ferromagnetic system. Here, we will focus on the case of S = 1, with anti-ferromagnetic interactions.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"H = -J sum_langle i j rangle vecS_i cdot vecS_j","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"Importantly, the Hamiltonian of the isotropic model is invariant under SU(2) rotations, which can be exploited to increase efficiency, as well as interpretability of the MPS simulations. To see this, we can make use of the following derivation for the interaction term:","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"(vecS_i + vecS_j)^2 = vecS_i^2 + 2 vecS_i cdot vecS_j + vecS_j^2\nimplies vecS_i cdot vecS_j = frac12 left( (vecS_i + vecS_j)^2 - vecS_i^2 - vecS_j^2 right)","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"Here, we recognize the quadratic Casimir element vecS^2, which commutes with the elements of SU(2). Consequently, the Hamiltonian also commutes with all elements of SU(2).","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"using TensorKit\nusing MPSKit\nusing Plots\n\ncasimir(s::SU2Irrep) = s.j * (s.j + 1)\n\nfunction heisenberg_hamiltonian(; J=-1.0)\n s = SU2Irrep(1)\n ℋ = SU2Space(1 => 1)\n SS = TensorMap(zeros, ComplexF64, ℋ ⊗ ℋ ← ℋ ⊗ ℋ)\n for (S, data) in blocks(SS)\n data .= -0.5J * (casimir(S) - casimir(s) - casimir(s))\n end\n return MPOHamiltonian(SS)\nend\nH = heisenberg_hamiltonian();","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/#Symmetry-Protected-Topological-Order","page":"Spin 1 Heisenberg model","title":"Symmetry-Protected Topological Order","text":"","category":"section"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"The representations of SU(2) possess additional structure, known as a mathbbZ_2-grading. This means, that they can be partitioned in integer (+) and half-integer (-) spins, and the fusion rules will respect this grading. In other words, the following table holds:","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"s_1 s_2 s_1 otimes s_2\n+ + +\n+ - -\n- + -\n- - +","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"This has important consequences for the MPS representation of an SU(2)-symmetric state. If the physical spin consists of only integer representations, this means that the left and right virtual spaces of the MPS tensor belong to the same grading, i.e. are either both integer, or both half-integer. Thus, naively constructing a MPS tensor which contains spins from both classes, will necessarily be the direct sum of the two, which yields a non-injective MPS.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"ketpsi = ketpsi_+ oplus ketpsi_-","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"Because of this direct sum, many of the usual MPS algorithms will fail, as they typically cannot deal with non-injective MPS. The resulting MPS will have multiple values of the transfer matrix spectrum that have a magnitude close to 1, which is a clear sign of a non-injective MPS.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"ℋ = SU2Space(1 => 1)\nV_wrong = SU2Space(0 => 8, 1 // 2 => 8, 1 => 3, 3 // 2 => 3)\nψ = InfiniteMPS(ℋ, V_wrong)\nψ, environments, δ = find_groundstate(ψ, H, VUMPS(; maxiter=10))\nsectors = SU2Irrep[0, 1 // 2, 1, 3 // 2]\ntransferplot(ψ; sectors, title=\"Transfer matrix spectrum\", legend=:outertop)","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"Nevertheless, using the symmetry, this can be remedied rather easily, by imposing the groundstate to belong to a single class, and comparing the results. We can readily obtain 3 different criteria for determining the SPT phase of the groundstate.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"Firstly, we can compare variational energies for states of similar bond dimensions. As we expect the state of the wrong SPT phase to have to expend some of its expressiveness in correcting the SPT, it should have a harder time reaching lower energies.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"Secondly, when inspecting the spectrum of the transfer matrix, we should see that the wrong SPT phase has a dominant value that is not in the trivial sector, which leads to a non-injective MPS.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"Finally, the entanglement spectrum of the wrong SPT phase will show degeneracies of all singular values, which can again be attributed to an attempt to mimick the spectrum of the right SPT phase.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"V_plus = SU2Space(0 => 10, 1 => 5, 2 => 3)\nψ_plus = InfiniteMPS(ℋ, V_plus)\nψ_plus, = find_groundstate(ψ_plus, H, VUMPS(; maxiter=100))\nE_plus = expectation_value(ψ_plus, H)","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"-1.4014193313393015 + 1.1927762270867084e-16im","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"V_minus = SU2Space(1 // 2 => 10, 3 // 2 => 5, 5 // 2 => 3)\nψ_minus = InfiniteMPS(ℋ, V_minus)\nψ_minus, = find_groundstate(ψ_minus, H, VUMPS(; maxiter=100))\nE_minus = expectation_value(ψ_minus, H)","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"-1.401483973963085 - 5.4843197089221895e-17im","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"transferp_plus = transferplot(ψ_plus; sectors=SU2Irrep[0, 1, 2], title=\"ψ_plus\",\n legend=:outertop)\ntransferp_minus = transferplot(ψ_minus; sectors=SU2Irrep[0, 1, 2], title=\"ψ_minus\",\n legend=:outertop)\nplot(transferp_plus, transferp_minus; layout=(1, 2), size=(800, 400))","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"entanglementp_plus = entanglementplot(ψ_plus; title=\"ψ_plus\", legend=:outertop)\nentanglementp_minus = entanglementplot(ψ_minus; title=\"ψ_minus\", legend=:outertop)\nplot(entanglementp_plus, entanglementp_minus; layout=(1, 2), size=(800, 400))","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"As we can see, the groundstate can be found in the non-trivial SPT phase, ketpsi_-. We can obtain an intuitive understanding of ketpsi_+ by considering the following diagram. If we denote the MPS tensors that make up the groundstate as A_-, we can construct a state in the trivial SPT phase that approximates the groundstate as follows:","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"(Image: spt-tensors.svg)","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"In other words, we can factorize a purely virtual isomorphism of S = 12 in order to obtain the groundstate. This then also explains the degeneracies in the entanglement spectrum as well as in the transfer matrix spectrum. Finally, we can further confirm this intuition by looking at the entanglement entropy of the groundstate. As we can see, the entanglement entropy of the state in the wrong SPT phase is exactly log(2) higher than the one in the right SPT phase, which is exactly what we would expect from the diagram above.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"S_minus = sum(real, entropy(ψ_minus))\nS_plus = sum(real, entropy(ψ_plus))\nprintln(\"S_minus + log(2) = $(S_minus + log(2))\")\nprintln(\"S_plus = $S_plus\")","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"S_minus + log(2) = 1.5486227235401464\nS_plus = 1.5450323530570809\n","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"This page was generated using Literate.jl.","category":"page"},{"location":"man/states/#um_states","page":"States","title":"States","text":"","category":"section"},{"location":"man/states/#FiniteMPS","page":"States","title":"FiniteMPS","text":"","category":"section"},{"location":"man/states/","page":"States","title":"States","text":"A FiniteMPS is - at its core - a chain of mps tensors.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"(Image: )","category":"page"},{"location":"man/states/#Usage","page":"States","title":"Usage","text":"","category":"section"},{"location":"man/states/","page":"States","title":"States","text":"A FiniteMPS can be created by passing in a vector of tensormaps:","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"data = fill(TensorMap(rand,ComplexF64,ℂ^1*ℂ^2,ℂ^1),10);\nFiniteMPS(data);","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"Or alternatively by","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"len = 10;\nmax_bond_dimension = ℂ^10;\nphysical_space = ℂ^2;\nFiniteMPS(rand,ComplexF64,len,physical_space,max_bond_dimension);","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"You can take dot products, renormalize!, expectation values,....","category":"page"},{"location":"man/states/#Gauging","page":"States","title":"Gauging","text":"","category":"section"},{"location":"man/states/","page":"States","title":"States","text":"There is residual gauge freedom in such a finite mps :","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"(Image: )","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"which is often exploited in mps algorithms. The gauging logic is handled behind the scenes, if you call","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"state.AL[3]","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"then the state will be gauged such that the third tensor is a left isometry (similarly for state.AR).","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"state.AC[3]","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"gauges the state in such a way that all tensors to the left are left isometries, and to the right will be right isometries.As a result you should have","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"norm(state) == norm(state.AC[3])","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"lastly there is also the CR field, with the following property:","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"@tensor a[-1 -2;-3] := state.AL[3][-1 -2;1]*state.CR[3][1;-3]\n@tensor b[-1 -2;-3] := state.CR[2][-1;1]*state.AR[3][1 -2;-3]\na ≈ state.AC[3];\nb ≈ state.AC[3];","category":"page"},{"location":"man/states/#Implementation-details","page":"States","title":"Implementation details","text":"","category":"section"},{"location":"man/states/","page":"States","title":"States","text":"Behind the scenes, a finite mps has 4 fields","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"ALs::Vector{Union{Missing,A}}\nARs::Vector{Union{Missing,A}}\nACs::Vector{Union{Missing,A}}\nCLs::Vector{Union{Missing,B}}","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"calling state.AC returns an \"orthoview\" instance, which is a very simple dummy object. When you call get/setindex on an orthoview, it will move the gauge for the underlying state, and return the result. The idea behind this construction is that one never has to worry about how the state is gauged, as this gets handled automagically.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"The following bit of code shows the logic in action:","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"state = FiniteMPS(10,ℂ^2,ℂ^10); # a random initial state\n@show ismissing.(state.ALs) # all AL fields are already calculated\n@show ismissing.(state.ARs) # all AR fields are missing\n\n#if we now query state.AC[2], it should calculate and store all AR fields left of position 2\nstate.AC[2];\n@show ismissing.(state.ARs)","category":"page"},{"location":"man/states/#InfiniteMPS","page":"States","title":"InfiniteMPS","text":"","category":"section"},{"location":"man/states/","page":"States","title":"States","text":"An infinite mps can be thought of as a finite mps, where the set of tensors is repeated periodically.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"It can be created by passing in a vector of tensormaps:","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"data = fill(TensorMap(rand,ComplexF64,ℂ^10*ℂ^2,ℂ^10),2);\nInfiniteMPS(data);","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"The above code would create an infinite mps with an A-B structure (a 2 site unit cell).","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"much like a finite mps, we can again query the fields state.AL, state.AR, state.AC and state.CR. The implementation is much easier, as they are now just plain fields in the struct","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"AL::PeriodicArray{A,1}\nAR::PeriodicArray{A,1}\nCR::PeriodicArray{B,1}\nAC::PeriodicArray{A,1}","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"The periodic array is an array-like type where all indices are repeated periodically.","category":"page"},{"location":"man/states/#WindowMPS","page":"States","title":"WindowMPS","text":"","category":"section"},{"location":"man/states/","page":"States","title":"States","text":"WindowMPS is a bit of a mix between an infinite mps and a finite mps. It represents a window of mutable tensors embedded in an infinite mps.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"It can be created using:","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"mpco = WindowMPS(left_infinite_mps,window_of_tensors,right_infinite_mps)","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"Algorithms will then act on this window of tensors, while leaving the left and right infinite mps's invariant.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"Behind the scenes it uses the same orthoview logic as finitemps.","category":"page"},{"location":"man/states/#Multiline","page":"States","title":"Multiline","text":"","category":"section"},{"location":"man/states/","page":"States","title":"States","text":"Statistical physics partition functions can be represented by an infinite tensor network which then needs to be contracted. This is done by finding approximate fixpoint infinite matrix product states. However, there is no good reason why a single mps should suffice and indeed we find in practice that this can require a nontrivial unit cell in both dimensions.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"In other words, the fixpoints can be well described by a set of matrix product states.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"Such a set can be created by","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"data = fill(TensorMap(rand,ComplexF64,ℂ^10*ℂ^2,ℂ^10),2,2);\nMPSMultiline(data);","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"MPSMultiline is also used extensively in as of yet unreleased peps code.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"You can access properties by calling","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"state.AL[row,collumn]\nstate.AC[row,collumn]\nstate.AR[row,collumn]\nstate.CR[row,collumn]","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"Behind the scenes, we have a type called Multiline, defined as:","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"struct Multiline{T}\n data::PeriodicArray{T,1}\nend","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"MPSMultiline/MPOMultiline are then defined as ```julia const MPSMultiline = Multiline{<:InfiniteMPS} const MPOMultiline = Multiline{<:DenseMPO}","category":"page"},{"location":"man/intro/#Prerequisites","page":"Prerequisites","title":"Prerequisites","text":"","category":"section"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"The following sections describe the prerequisites for using MPSKit. If you are already familiar with the concepts of MPSKit and TensorKit, you can skip to the Overview section.","category":"page"},{"location":"man/intro/#TensorKit","page":"Prerequisites","title":"TensorKit","text":"","category":"section"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"using TensorKit","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"MPSKit uses the tensors defined in TensorKit.jl as its underlying data structure. This is what allows the library to be generic with respect to the symmetry of the tensors. The main difference with regular multi-dimensional arrays is the notion of a partition of the dimensions in incoming and outgoing, which are respectively called domain and codomain. In other words, a TensorMap can be interpreted as a linear map from its domain to its codomain. Additionally, as generic symmetries are supported, in general the structure of the indices are not just integers, but are given by spaces.","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"The general syntax for creating a tensor is one of the following equivalent forms:","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"TensorMap(initializer, scalartype, codomain, domain)\nTensorMap(initializer, scalartype, codomain ← domain) # ← is the `\\leftarrow` operator","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"For example, the following creates a random tensor with three legs, each of which has dimension two, however with different partitions.","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"V1 = ℂ^2 # ℂ is the `\\bbC` operator, equivalent to ComplexSpace(10)\nt1 = Tensor(rand, Float64, V1 ⊗ V1 ⊗ V1) # all spaces in codomain\nt2 = TensorMap(rand, Float64, V1, V1 ⊗ V1) # one space in codomain, two in domain\n\ntry\n t1 + t2 # incompatible partition\ncatch err\n println(err)\nend\n\ntry\n t1 + permute(t2, (1, 2, 3), ()) # incompatible arrows\ncatch err\n println(err)\nend","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"These abstract objects can represent not only plain arrays but also symmetric tensors. The following creates a symmetric tensor with ℤ₂ symmetry, again with three legs of dimension two. However, now the dimension two is now split over even and odd sectors of ℤ₂.","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"V2 = Z2Space(0 => 1, 1 => 1)\nt3 = TensorMap(rand, Float64, V2 ⊗ V2, V2)","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"For more information, check out the TensorKit documentation!","category":"page"},{"location":"man/intro/#Conventions","page":"Prerequisites","title":"Conventions","text":"","category":"section"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"The general definition of an MPS tensor is as follows:","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"(Image: convention MPSTensor)","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"These tensors are allowed to have an arbitrary number of physical legs, and both FiniteMPS as well as InfiniteMPS will be able to handle the resulting objects. This allows for example for the definition of boundary tensors in PEPS code, which have two physical legs.","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"Similarly, the definition of a bond tensor, appearing in between two MPS tensors, is as follows:","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"(Image: convention BondTensor)","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"Finally, the definition of a MPO tensor, which is used to represent statistical mechanics problems as well as quantum hamiltonians, is represented as:","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"(Image: convention MPOTensor)","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"While this results at first glance in the not very intuitive ordering of spaces as V_l otimes P leftarrow P otimes V_r, this is actually the most natural ordering for keeping the algorithms planar. In particular, this is relevant for dealing with fermionic systems, where additional crossings would lead to sign problems.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"EditURL = \"../../../../../examples/quantum1d/4.xxz-heisenberg/main.jl\"","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/#The-XXZ-model","page":"The XXZ model","title":"The XXZ model","text":"","category":"section"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"In this file we will give step by step instructions on how to analyze the spin 1/2 XXZ model. The necessary packages to follow this tutorial are:","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"using MPSKit, MPSKitModels, TensorKit, Plots","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/#Failure","page":"The XXZ model","title":"Failure","text":"","category":"section"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"First we should define the hamiltonian we want to work with. Then we specify an initial guess, which we then further optimize. Working directly in the thermodynamic limit, this is achieved as follows:","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"H = heisenberg_XXX(; spin=1 // 2);","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"We then need an intial state, which we shall later optimize. In this example we work directly in the thermodynamic limit.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"random_data = TensorMap(rand, ComplexF64, ℂ^20 * ℂ^2, ℂ^20);\nstate = InfiniteMPS([random_data]);","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"The groundstate can then be found by calling find_groundstate.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"groundstate, cache, delta = find_groundstate(state, H, VUMPS());","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"[ Info: VUMPS init:\tobj = +2.499974103828e-01\terr = 4.7612e-03\n[ Info: VUMPS 1:\tobj = -1.619489094120e-01\terr = 3.8111216818e-01\ttime = 0.09 sec\n[ Info: VUMPS 2:\tobj = -1.182665508511e-01\terr = 4.0364154268e-01\ttime = 0.03 sec\n┌ Warning: ignoring imaginary component 1.232882527538344e-6 from total weight 1.9914657594448284: operator might not be hermitian?\n│ α = 0.25049121255958223 + 1.232882527538344e-6im\n│ β₁ = 1.3726963690475595\n│ β₂ = 1.4208781446252607\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.8392420257293263e-6 from total weight 1.9696900832784099: operator might not be hermitian?\n│ α = 0.13613443595890026 + 1.8392420257293263e-6im\n│ β₁ = 1.4208781446252607\n│ β₂ = 1.3572957443513758\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.0830449709096218e-6 from total weight 1.913217098985634: operator might not be hermitian?\n│ α = 0.30490943522699615 + 1.0830449709096218e-6im\n│ β₁ = 1.3572957443513758\n│ β₂ = 1.3134603787419823\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.3349880196560776e-6 from total weight 1.8091684366416438: operator might not be hermitian?\n│ α = 0.15356513905659896 - 1.3349880196560776e-6im\n│ β₁ = 1.2453864803058963\n│ β₂ = 1.3032730699574846\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1612816465528253e-6 from total weight 1.8643524554082331: operator might not be hermitian?\n│ α = 0.06307341568508065 - 1.1612816465528253e-6im\n│ β₁ = 1.3146485309683946\n│ β₂ = 1.3204283631616742\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.5596982755562358e-6 from total weight 1.8141643749302523: operator might not be hermitian?\n│ α = 0.08072855112812488 - 1.5596982755562358e-6im\n│ β₁ = 1.3204283631616742\n│ β₂ = 1.2414282975889408\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.417172544438891e-6 from total weight 1.828785206932206: operator might not be hermitian?\n│ α = 0.1285519752447895 - 1.417172544438891e-6im\n│ β₁ = 1.2414282975889408\n│ β₂ = 1.3367069629122716\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.289301417652794e-6 from total weight 1.885408518558631: operator might not be hermitian?\n│ α = 0.08120850910419936 - 1.289301417652794e-6im\n│ β₁ = 1.3367069629122716\n│ β₂ = 1.3271717881279397\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.6249186336921018e-6 from total weight 1.8407680177572983: operator might not be hermitian?\n│ α = 0.1289941860896659 - 1.6249186336921018e-6im\n│ β₁ = 1.3271717881279397\n│ β₂ = 1.2690163276915885\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0035504485646218e-6 from total weight 1.7396456869769024: operator might not be hermitian?\n│ α = 0.19480800880290103 - 1.0035504485646218e-6im\n│ β₁ = 1.2043364223883024\n│ β₂ = 1.2401575454882836\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.451556656376779e-6 from total weight 1.7493717573021048: operator might not be hermitian?\n│ α = 0.05705041450756472 - 1.451556656376779e-6im\n│ β₁ = 1.2401575454882836\n│ β₂ = 1.232499922035348\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.40004089359963e-6 from total weight 1.7309638146775101: operator might not be hermitian?\n│ α = 0.15157604727739213 - 1.40004089359963e-6im\n│ β₁ = 1.232499922035348\n│ β₂ = 1.2059039645824123\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.15482454825927e-6 from total weight 1.918824053662481: operator might not be hermitian?\n│ α = 0.5324714992933328 - 1.15482454825927e-6im\n│ β₁ = 1.370524157251734\n│ β₂ = 1.2328922847281172\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.5003680336328484e-6 from total weight 1.7004217179907795: operator might not be hermitian?\n│ α = 0.08096111237620557 - 1.5003680336328484e-6im\n│ β₁ = 1.2328922847281172\n│ β₂ = 1.1682704873243839\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.8850326343952672e-6 from total weight 1.7755134739648675: operator might not be hermitian?\n│ α = 0.21745063050632352 + 1.8850326343952672e-6im\n│ β₁ = 1.2496335036506379\n│ β₂ = 1.2424087194130087\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.6318123482791241e-6 from total weight 1.6984384594060646: operator might not be hermitian?\n│ α = 0.242203135278063 + 1.6318123482791241e-6im\n│ β₁ = 1.2424087194130087\n│ β₂ = 1.1324537145397988\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.3524781333182643e-6 from total weight 1.5660948460042454: operator might not be hermitian?\n│ α = 0.20666413466810546 - 2.3524781333182643e-6im\n│ β₁ = 1.0954146707412835\n│ β₂ = 1.1000044096466957\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.5085042947292635e-6 from total weight 1.544753413057564: operator might not be hermitian?\n│ α = 0.18456051333561468 - 2.5085042947292635e-6im\n│ β₁ = 1.1000044096466957\n│ β₂ = 1.0687332795519278\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.3454185131416283e-6 from total weight 1.5301327186155422: operator might not be hermitian?\n│ α = 0.20034798781882637 - 2.3454185131416283e-6im\n│ β₁ = 1.0687332795519278\n│ β₂ = 1.0765574752549987\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.179886915059214e-6 from total weight 1.5137298893013147: operator might not be hermitian?\n│ α = 0.19578629989152452 - 1.179886915059214e-6im\n│ β₁ = 1.0765574752549987\n│ β₂ = 1.0459779658339594\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -8.970966421210924e-7 from total weight 1.5259294767522584: operator might not be hermitian?\n│ α = 0.15682426449605152 - 8.970966421210924e-7im\n│ β₁ = 1.0459779658339594\n│ β₂ = 1.0999077293463033\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.153581410850285e-6 from total weight 1.5895749085881306: operator might not be hermitian?\n│ α = 0.17753069938549312 - 1.153581410850285e-6im\n│ β₁ = 1.0999077293463033\n│ β₂ = 1.1337699183306944\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.015247489363443e-7 from total weight 1.564145191103578: operator might not be hermitian?\n│ α = 0.1101277597941326 - 9.015247489363443e-7im\n│ β₁ = 1.1337699183306944\n│ β₂ = 1.0719084978032278\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.5952526306768633e-6 from total weight 1.5301971849916518: operator might not be hermitian?\n│ α = 0.22488518188133266 - 1.5952526306768633e-6im\n│ β₁ = 1.0719084978032278\n│ β₂ = 1.0686169810840824\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.5466909599401446e-6 from total weight 1.5491771112150903: operator might not be hermitian?\n│ α = 0.3489354106585746 - 1.5466909599401446e-6im\n│ β₁ = 1.0686169810840824\n│ β₂ = 1.0659510067717062\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.445115051708031e-7 from total weight 1.5680129741020914: operator might not be hermitian?\n│ α = 0.17418265114627196 - 9.445115051708031e-7im\n│ β₁ = 1.1169232430393412\n│ β₂ = 1.0866496952328888\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.5724137275956174e-6 from total weight 1.5312701489526515: operator might not be hermitian?\n│ α = 0.16742280266428738 - 1.5724137275956174e-6im\n│ β₁ = 1.0866496952328888\n│ β₂ = 1.0658096988061743\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.166518523731258e-6 from total weight 1.5187736631710762: operator might not be hermitian?\n│ α = 0.1398329444117618 - 1.166518523731258e-6im\n│ β₁ = 1.0658096988061743\n│ β₂ = 1.0729258471714427\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 3:\tobj = -1.493203861348e-01\terr = 3.6296059201e-01\ttime = 0.03 sec\n[ Info: VUMPS 4:\tobj = -7.520251536244e-03\terr = 3.9887360051e-01\ttime = 0.03 sec\n┌ Warning: ignoring imaginary component 1.099900984910876e-6 from total weight 1.552718086186024: operator might not be hermitian?\n│ α = -0.4505116196691295 + 1.099900984910876e-6im\n│ β₁ = 1.0412366100283246\n│ β₂ = 1.0600938909586262\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 5:\tobj = -2.352760184979e-01\terr = 3.6013144030e-01\ttime = 0.02 sec\n[ Info: VUMPS 6:\tobj = -5.963750087299e-02\terr = 3.9393533227e-01\ttime = 0.03 sec\n┌ Warning: ignoring imaginary component -1.176743669343422e-6 from total weight 1.918106632926099: operator might not be hermitian?\n│ α = 0.0783735962187843 - 1.176743669343422e-6im\n│ β₁ = 1.396721847865214\n│ β₂ = 1.3123104489355517\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0609971544759539e-6 from total weight 1.9196120278732995: operator might not be hermitian?\n│ α = -0.021605437831401036 - 1.0609971544759539e-6im\n│ β₁ = 1.3123104489355517\n│ β₂ = 1.400815772407421\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0518092979673599e-6 from total weight 1.7924480070709155: operator might not be hermitian?\n│ α = 0.04549748143559522 - 1.0518092979673599e-6im\n│ β₁ = 1.2767035144224377\n│ β₂ = 1.2573098160341405\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1231990716814577e-6 from total weight 1.6627984335729582: operator might not be hermitian?\n│ α = 0.12980004518430788 - 1.1231990716814577e-6im\n│ β₁ = 1.1464302734823937\n│ β₂ = 1.197392252774611\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0130783653500286e-6 from total weight 1.6889379781104494: operator might not be hermitian?\n│ α = 0.20140031806791586 - 1.0130783653500286e-6im\n│ β₁ = 1.197392252774611\n│ β₂ = 1.1739681421487853\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.379141249210576e-7 from total weight 1.5376281653096207: operator might not be hermitian?\n│ α = 0.14438442595398784 - 9.379141249210576e-7im\n│ β₁ = 1.1580977518851725\n│ β₂ = 1.0011309152019015\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -8.680933230274801e-7 from total weight 1.5537236737888407: operator might not be hermitian?\n│ α = 0.10991283382656072 - 8.680933230274801e-7im\n│ β₁ = 1.0657973418412914\n│ β₂ = 1.1251899615511112\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.723500291637655e-7 from total weight 1.5771422136428674: operator might not be hermitian?\n│ α = 0.13579571306157712 - 9.723500291637655e-7im\n│ β₁ = 1.1166899055108623\n│ β₂ = 1.1054142849165727\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.882280200112364e-7 from total weight 1.5180688894033822: operator might not be hermitian?\n│ α = 0.09617375331040615 - 9.882280200112364e-7im\n│ β₁ = 1.1054142849165727\n│ β₂ = 1.036022693211888\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2660510717039247e-6 from total weight 1.5255263117407745: operator might not be hermitian?\n│ α = 0.13347806049420893 - 1.2660510717039247e-6im\n│ β₁ = 1.1218762152784267\n│ β₂ = 1.0250892121035442\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.4643177038906052e-6 from total weight 1.4187342638925065: operator might not be hermitian?\n│ α = 0.18563671478887794 - 1.4643177038906052e-6im\n│ β₁ = 1.0250892121035442\n│ β₂ = 0.9630877576274115\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.62525376541068e-7 from total weight 1.3877247027879926: operator might not be hermitian?\n│ α = 0.170733761111782 - 9.62525376541068e-7im\n│ β₁ = 0.9630877576274115\n│ β₂ = 0.9844246058748866\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1086373975024988e-6 from total weight 1.4385164585733765: operator might not be hermitian?\n│ α = 0.19199302226379647 - 1.1086373975024988e-6im\n│ β₁ = 0.9844246058748866\n│ β₂ = 1.0312014722329228\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 7:\tobj = +4.285328274012e-02\terr = 3.6201107616e-01\ttime = 0.03 sec\n┌ Warning: ignoring imaginary component 1.1099933890403035e-6 from total weight 1.9792036477866468: operator might not be hermitian?\n│ α = -0.7379921644658364 + 1.1099933890403035e-6im\n│ β₁ = 1.2986523358230453\n│ β₂ = 1.2985055853784824\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 8:\tobj = -1.708578079666e-01\terr = 3.8515380883e-01\ttime = 0.03 sec\n[ Info: VUMPS 9:\tobj = -1.934207351169e-01\terr = 3.7546998968e-01\ttime = 0.03 sec\n[ Info: VUMPS 10:\tobj = -2.569456433937e-01\terr = 3.6560214073e-01\ttime = 0.03 sec\n[ Info: VUMPS 11:\tobj = -1.937666328823e-01\terr = 4.0884590460e-01\ttime = 0.05 sec\n┌ Warning: ignoring imaginary component -1.0504283959426874e-6 from total weight 1.8402833625820303: operator might not be hermitian?\n│ α = 0.5324141657601801 - 1.0504283959426874e-6im\n│ β₁ = 1.2352702512807454\n│ β₂ = 1.2559002416568827\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.088935510642694e-6 from total weight 1.8602705570479414: operator might not be hermitian?\n│ α = 0.47903104132176993 - 1.088935510642694e-6im\n│ β₁ = 1.2559002416568827\n│ β₂ = 1.2860211467447324\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0003895707412502e-6 from total weight 1.6188876040636193: operator might not be hermitian?\n│ α = 0.5767932246498841 - 1.0003895707412502e-6im\n│ β₁ = 1.0414996723115992\n│ β₂ = 1.0969890989260855\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.857157344875245e-7 from total weight 1.6680151278695234: operator might not be hermitian?\n│ α = 0.5264739458256111 - 9.857157344875245e-7im\n│ β₁ = 1.0969890989260855\n│ β₂ = 1.1409270651556818\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 12:\tobj = -1.670459895402e-01\terr = 3.7929964992e-01\ttime = 0.04 sec\n[ Info: VUMPS 13:\tobj = -2.026670357121e-01\terr = 3.7248798904e-01\ttime = 0.05 sec\n[ Info: VUMPS 14:\tobj = +1.315709746715e-01\terr = 3.6396753361e-01\ttime = 0.04 sec\n[ Info: VUMPS 15:\tobj = -1.737796153998e-01\terr = 3.6226202233e-01\ttime = 0.03 sec\n[ Info: VUMPS 16:\tobj = -3.914396312413e-01\terr = 2.5762054887e-01\ttime = 0.04 sec\n[ Info: VUMPS 17:\tobj = +1.208065704588e-01\terr = 3.5537355326e-01\ttime = 0.03 sec\n[ Info: VUMPS 18:\tobj = -1.246491545662e-01\terr = 3.7428714333e-01\ttime = 0.02 sec\n[ Info: VUMPS 19:\tobj = -1.617135365501e-01\terr = 3.8121272586e-01\ttime = 0.03 sec\n┌ Warning: ignoring imaginary component -1.041242800836964e-6 from total weight 1.8878543444675502: operator might not be hermitian?\n│ α = 0.24524795174378963 - 1.041242800836964e-6im\n│ β₁ = 1.3188603653095323\n│ β₂ = 1.3283278228302693\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0352301777257628e-6 from total weight 1.8447819372771954: operator might not be hermitian?\n│ α = 0.29785804984406666 - 1.0352301777257628e-6im\n│ β₁ = 1.3044579500429994\n│ β₂ = 1.2699962341738795\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1274336656243167e-6 from total weight 1.8643349432068144: operator might not be hermitian?\n│ α = 0.26211325930649076 - 1.1274336656243167e-6im\n│ β₁ = 1.3154591302446648\n│ β₂ = 1.2948392550476535\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0171041124086566e-6 from total weight 1.8385424526104095: operator might not be hermitian?\n│ α = 0.3313614251455128 - 1.0171041124086566e-6im\n│ β₁ = 1.2948392550476535\n│ β₂ = 1.2624695083695439\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0145686801365378e-6 from total weight 1.6609386863915652: operator might not be hermitian?\n│ α = 0.3399359484890182 - 1.0145686801365378e-6im\n│ β₁ = 1.1697513903269574\n│ β₂ = 1.129089259405177\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0450914485968243e-6 from total weight 1.682026293949647: operator might not be hermitian?\n│ α = 0.37087157882485045 - 1.0450914485968243e-6im\n│ β₁ = 1.129089259405177\n│ β₂ = 1.1903042341572698\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.77252247251828e-7 from total weight 1.6307158080421404: operator might not be hermitian?\n│ α = 0.30514175950114303 - 9.77252247251828e-7im\n│ β₁ = 1.170971147142692\n│ β₂ = 1.093137285872845\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.588569277281175e-7 from total weight 1.5967583693052758: operator might not be hermitian?\n│ α = 0.4226488627462033 - 9.588569277281175e-7im\n│ β₁ = 1.093137285872845\n│ β₂ = 1.0844612040084307\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.498961915273274e-7 from total weight 1.5966428260209404: operator might not be hermitian?\n│ α = 0.31406158682358515 - 9.498961915273274e-7im\n│ β₁ = 1.0844612040084307\n│ β₂ = 1.1289718909546287\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0087007574714063e-6 from total weight 1.6253906087657857: operator might not be hermitian?\n│ α = 0.3345859512478334 - 1.0087007574714063e-6im\n│ β₁ = 1.1289718909546287\n│ β₂ = 1.1204326582730915\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.978973924268386e-7 from total weight 1.6313955926302608: operator might not be hermitian?\n│ α = 0.4474495516150536 - 9.978973924268386e-7im\n│ β₁ = 1.0999799038430782\n│ β₂ = 1.1186083718412372\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0079336151200269e-6 from total weight 1.67215352955067: operator might not be hermitian?\n│ α = 0.312017547799734 - 1.0079336151200269e-6im\n│ β₁ = 1.1253351445900006\n│ β₂ = 1.1968138069906242\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.20250589822938e-7 from total weight 1.6321224428598387: operator might not be hermitian?\n│ α = 0.3570833150407308 - 9.20250589822938e-7im\n│ β₁ = 1.1659628844081862\n│ β₂ = 1.0848252056382104\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -8.891854269034438e-7 from total weight 1.6083595644935376: operator might not be hermitian?\n│ α = 0.4565536948967533 - 8.891854269034438e-7im\n│ β₁ = 1.062492024298748\n│ β₂ = 1.1178058465917602\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.623679356196568e-7 from total weight 1.5934469936613749: operator might not be hermitian?\n│ α = 0.3469746904762515 - 9.623679356196568e-7im\n│ β₁ = 1.1178058465917602\n│ β₂ = 1.0812918084872996\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.1030968346964e-7 from total weight 1.581381778373773: operator might not be hermitian?\n│ α = 0.3535414584487759 - 9.1030968346964e-7im\n│ β₁ = 1.129565920198637\n│ β₂ = 1.0487409585095295\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -8.763328321077096e-7 from total weight 1.5501726728818914: operator might not be hermitian?\n│ α = 0.45956101925780013 - 8.763328321077096e-7im\n│ β₁ = 1.0487409585095295\n│ β₂ = 1.044979132457804\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -8.833465855047871e-7 from total weight 1.5559369862983596: operator might not be hermitian?\n│ α = 0.5001231946818558 - 8.833465855047871e-7im\n│ β₁ = 1.044979132457804\n│ β₂ = 1.0386699707796463\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -8.554302556584847e-7 from total weight 1.5370431882570572: operator might not be hermitian?\n│ α = 0.46749317820375846 - 8.554302556584847e-7im\n│ β₁ = 1.0386699707796463\n│ β₂ = 1.0320448549846297\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.88558524744193e-7 from total weight 1.5286768622038271: operator might not be hermitian?\n│ α = 0.5720411114281577 - 9.88558524744193e-7im\n│ β₁ = 0.8498777407927486\n│ β₂ = 1.1346055444855774\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -8.424114983484471e-7 from total weight 1.4710741589707619: operator might not be hermitian?\n│ α = 0.3078083239511698 - 8.424114983484471e-7im\n│ β₁ = 1.0049864061890914\n│ β₂ = 1.029230557393401\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.443609546022635e-7 from total weight 1.574485981114362: operator might not be hermitian?\n│ α = 0.4466223362445244 - 9.443609546022635e-7im\n│ β₁ = 1.029230557393401\n│ β₂ = 1.1046352580014436\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0307124263374962e-6 from total weight 1.5620138044688787: operator might not be hermitian?\n│ α = 0.38039651012084363 - 1.0307124263374962e-6im\n│ β₁ = 1.1046352580014436\n│ β₂ = 1.0368059448220026\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 20:\tobj = -3.585234798191e-01\terr = 2.9715384480e-01\ttime = 0.03 sec\n[ Info: VUMPS 21:\tobj = -3.120924943693e-01\terr = 3.4539465791e-01\ttime = 0.03 sec\n┌ Warning: ignoring imaginary component -1.101222477394026e-6 from total weight 1.9131196119976634: operator might not be hermitian?\n│ α = 0.7136486975992984 - 1.101222477394026e-6im\n│ β₁ = 1.2660334860270381\n│ β₂ = 1.2441428368486989\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0797377457440194e-6 from total weight 1.9473290871548898: operator might not be hermitian?\n│ α = 0.8370940070708139 - 1.0797377457440194e-6im\n│ β₁ = 1.2441428368486989\n│ β₂ = 1.2423658070482022\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1093458114272425e-6 from total weight 1.9377361994168134: operator might not be hermitian?\n│ α = 0.6001201014097328 - 1.1093458114272425e-6im\n│ β₁ = 1.2423658070482022\n│ β₂ = 1.3605898147092412\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.158222881363774e-6 from total weight 2.048460541734995: operator might not be hermitian?\n│ α = 0.7464363437066065 - 1.158222881363774e-6im\n│ β₁ = 1.3605898147092412\n│ β₂ = 1.3370933893888164\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1498694335951992e-6 from total weight 2.0094403493801196: operator might not be hermitian?\n│ α = 0.9629348644353627 - 1.1498694335951992e-6im\n│ β₁ = 1.3370933893888164\n│ β₂ = 1.1501253117044037\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1337398630566209e-6 from total weight 1.9506150403467022: operator might not be hermitian?\n│ α = 0.8164721214339367 - 1.1337398630566209e-6im\n│ β₁ = 1.1501253117044037\n│ β₂ = 1.3473990047211317\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.101966695791004e-6 from total weight 1.929959391373378: operator might not be hermitian?\n│ α = 0.6582940676182938 - 1.101966695791004e-6im\n│ β₁ = 1.2482279939252525\n│ β₂ = 1.3165557519789983\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0940951352973044e-6 from total weight 1.963168395071584: operator might not be hermitian?\n│ α = 0.814866900127403 - 1.0940951352973044e-6im\n│ β₁ = 1.3165557519789983\n│ β₂ = 1.2069395322113334\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1378380324576776e-6 from total weight 1.9351476008024464: operator might not be hermitian?\n│ α = 0.8471641801606176 - 1.1378380324576776e-6im\n│ β₁ = 1.2069395322113334\n│ β₂ = 1.253158431455674\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0654026989347087e-6 from total weight 1.880722856816104: operator might not be hermitian?\n│ α = 0.7241790762545013 - 1.0654026989347087e-6im\n│ β₁ = 1.253158431455674\n│ β₂ = 1.2009484066087621\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1162494796936387e-6 from total weight 1.9063231994678866: operator might not be hermitian?\n│ α = 0.8720535139516081 - 1.1162494796936387e-6im\n│ β₁ = 1.2009484066087621\n│ β₂ = 1.1963752481127155\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1902125000226582e-6 from total weight 1.8748641135008903: operator might not be hermitian?\n│ α = 0.8055412360382196 - 1.1902125000226582e-6im\n│ β₁ = 1.1963752481127155\n│ β₂ = 1.1978752133829795\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0841214859360487e-6 from total weight 1.8981428651365628: operator might not be hermitian?\n│ α = 0.8135546415885357 - 1.0841214859360487e-6im\n│ β₁ = 1.1978752133829795\n│ β₂ = 1.2272612414559885\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.137700440641265e-6 from total weight 1.9390242214140843: operator might not be hermitian?\n│ α = 0.7186830060683032 - 1.137700440641265e-6im\n│ β₁ = 1.2272612414559885\n│ β₂ = 1.3180058851301593\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.157718810059112e-6 from total weight 1.9480246088532358: operator might not be hermitian?\n│ α = 0.6778961778107517 - 1.157718810059112e-6im\n│ β₁ = 1.3180058851301593\n│ β₂ = 1.2641665774605424\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1765322366977249e-6 from total weight 2.00275903149103: operator might not be hermitian?\n│ α = 0.8416337896623912 - 1.1765322366977249e-6im\n│ β₁ = 1.2641665774605424\n│ β₂ = 1.305595330394424\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2027726534122318e-6 from total weight 1.9444398761248778: operator might not be hermitian?\n│ α = 0.8138147830995662 - 1.2027726534122318e-6im\n│ β₁ = 1.2660269736586829\n│ β₂ = 1.2311489075819897\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2050119907701384e-6 from total weight 1.9173639342920723: operator might not be hermitian?\n│ α = 0.8412593948765817 - 1.2050119907701384e-6im\n│ β₁ = 1.2311489075819897\n│ β₂ = 1.2053379005134133\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1237154133049952e-6 from total weight 1.858065549589884: operator might not be hermitian?\n│ α = 0.7127616925842981 - 1.1237154133049952e-6im\n│ β₁ = 1.2053379005134133\n│ β₂ = 1.2212857576103058\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0578611750605704e-6 from total weight 1.8430342285871433: operator might not be hermitian?\n│ α = 0.5901892385132163 - 1.0578611750605704e-6im\n│ β₁ = 1.2212857576103058\n│ β₂ = 1.2477631701345007\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1640514067205732e-6 from total weight 1.8795569802053598: operator might not be hermitian?\n│ α = 0.6449467131008518 - 1.1640514067205732e-6im\n│ β₁ = 1.2477631701345007\n│ β₂ = 1.248945655484515\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2872909221240542e-6 from total weight 1.9420488977458514: operator might not be hermitian?\n│ α = 0.964724061840767 - 1.2872909221240542e-6im\n│ β₁ = 1.248945655484515\n│ β₂ = 1.1318110069203366\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.251536440805695e-6 from total weight 1.8346592558570003: operator might not be hermitian?\n│ α = 0.8659320524649449 - 1.251536440805695e-6im\n│ β₁ = 0.8814763377039885\n│ β₂ = 1.3561473856782706\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2494786537451535e-6 from total weight 2.185013956688451: operator might not be hermitian?\n│ α = 1.2293936691157223 - 1.2494786537451535e-6im\n│ β₁ = 1.3561473856782706\n│ β₂ = 1.193206380127903\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0433588381823095e-6 from total weight 1.814963244016936: operator might not be hermitian?\n│ α = 0.7522114642910884 - 1.0433588381823095e-6im\n│ β₁ = 1.193206380127903\n│ β₂ = 1.1421593691523593\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.139217794356162e-6 from total weight 1.8612629247385752: operator might not be hermitian?\n│ α = 0.821228848948878 - 1.139217794356162e-6im\n│ β₁ = 1.1421593691523593\n│ β₂ = 1.2187513397394416\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1087975631965744e-6 from total weight 1.896227193132863: operator might not be hermitian?\n│ α = 0.8991678077171779 - 1.1087975631965744e-6im\n│ β₁ = 1.2187513397394416\n│ β₂ = 1.1409732658672187\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.174809510080116e-6 from total weight 1.9088015545409995: operator might not be hermitian?\n│ α = 0.8914717660485393 - 1.174809510080116e-6im\n│ β₁ = 1.1409732658672187\n│ β₂ = 1.2437770988128656\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2381195570107528e-6 from total weight 1.9520801898475855: operator might not be hermitian?\n│ α = 0.8614585119019178 - 1.2381195570107528e-6im\n│ β₁ = 1.2437770988128656\n│ β₂ = 1.2335010451289605\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2026763513330735e-6 from total weight 1.90755838099703: operator might not be hermitian?\n│ α = 0.7016999126767994 - 1.2026763513330735e-6im\n│ β₁ = 1.2335010451289605\n│ β₂ = 1.2747044289268388\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2071538935155834e-6 from total weight 1.9339188108541947: operator might not be hermitian?\n│ α = 0.7949219841909692 - 1.2071538935155834e-6im\n│ β₁ = 1.2747044289268388\n│ β₂ = 1.2178955722468325\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1606930974371321e-6 from total weight 1.9370658765510747: operator might not be hermitian?\n│ α = 0.954874437495209 - 1.1606930974371321e-6im\n│ β₁ = 1.2178955722468325\n│ β₂ = 1.164976134440961\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1268602565549582e-6 from total weight 1.9552759499022778: operator might not be hermitian?\n│ α = 0.9492389130337321 - 1.1268602565549582e-6im\n│ β₁ = 1.2467519043765316\n│ β₂ = 1.1694696298668963\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.215592051885539e-6 from total weight 1.9488322122427535: operator might not be hermitian?\n│ α = 1.0153114208108338 - 1.215592051885539e-6im\n│ β₁ = 0.6714846852867788\n│ β₂ = 1.5219060508684197\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.080734107393455e-6 from total weight 1.8464847663385096: operator might not be hermitian?\n│ α = 1.1037814510079955 - 1.080734107393455e-6im\n│ β₁ = 1.0312175766294405\n│ β₂ = 1.061961774443977\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0426542516421555e-6 from total weight 1.7225192253666461: operator might not be hermitian?\n│ α = 0.9480463615620647 - 1.0426542516421555e-6im\n│ β₁ = 1.061961774443977\n│ β₂ = 0.9698029530298176\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1328282575884252e-6 from total weight 1.7697990256796783: operator might not be hermitian?\n│ α = 0.9658622062727309 - 1.1328282575884252e-6im\n│ β₁ = 0.9698029530298176\n│ β₂ = 1.1219541087246274\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0988690484076136e-6 from total weight 1.828016257969221: operator might not be hermitian?\n│ α = 0.786906278336358 - 1.0988690484076136e-6im\n│ β₁ = 1.1219541087246274\n│ β₂ = 1.2098102853048218\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.142796129886825e-6 from total weight 1.8111805841289295: operator might not be hermitian?\n│ α = 0.8638002477368484 - 1.142796129886825e-6im\n│ β₁ = 1.2098102853048218\n│ β₂ = 1.034689960280242\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2517390058849887e-6 from total weight 1.830580564744666: operator might not be hermitian?\n│ α = 1.036150575189292 - 1.2517390058849887e-6im\n│ β₁ = 1.034689960280242\n│ β₂ = 1.0985599099045549\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0559897735233637e-6 from total weight 1.8024078749168828: operator might not be hermitian?\n│ α = 0.7896107548575517 - 1.0559897735233637e-6im\n│ β₁ = 1.0985599099045549\n│ β₂ = 1.1909471557231506\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0776481447613215e-6 from total weight 1.8447630176465906: operator might not be hermitian?\n│ α = 0.9113608822751792 - 1.0776481447613215e-6im\n│ β₁ = 1.1909471557231506\n│ β₂ = 1.0743448263052873\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.238077302180042e-6 from total weight 1.8340076359601551: operator might not be hermitian?\n│ α = 0.9175707442976321 - 1.238077302180042e-6im\n│ β₁ = 1.0743448263052873\n│ β₂ = 1.1693721102193158\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1686657275609275e-6 from total weight 1.7304630009406143: operator might not be hermitian?\n│ α = 0.7354440288129548 - 1.1686657275609275e-6im\n│ β₁ = 1.1693721102193158\n│ β₂ = 1.042205903815376\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2205737424525465e-6 from total weight 1.723630094975153: operator might not be hermitian?\n│ α = 0.9056843148222427 - 1.2205737424525465e-6im\n│ β₁ = 1.042205903815376\n│ β₂ = 1.031718702088852\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.298260888585312e-6 from total weight 1.7345462402147205: operator might not be hermitian?\n│ α = 0.9727698926351831 - 1.298260888585312e-6im\n│ β₁ = 1.031718702088852\n│ β₂ = 0.9989624193051336\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2475635252917616e-6 from total weight 1.6978560223990682: operator might not be hermitian?\n│ α = 0.9109309235783065 - 1.2475635252917616e-6im\n│ β₁ = 0.9989624193051336\n│ β₂ = 1.027129013357152\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0884506282324291e-6 from total weight 1.6753320770282918: operator might not be hermitian?\n│ α = 0.7441182182543868 - 1.0884506282324291e-6im\n│ β₁ = 1.027129013357152\n│ β₂ = 1.094546314918024\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1834045275764538e-6 from total weight 1.7015965086066662: operator might not be hermitian?\n│ α = 0.6866167659032616 - 1.1834045275764538e-6im\n│ β₁ = 1.094546314918024\n│ β₂ = 1.107229181055537\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0706567381644355e-6 from total weight 1.763274261244367: operator might not be hermitian?\n│ α = 0.8172553309406643 - 1.0706567381644355e-6im\n│ β₁ = 1.107229181055537\n│ β₂ = 1.1023943872470834\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1632508603934277e-6 from total weight 1.7221080521650705: operator might not be hermitian?\n│ α = 0.7673869852185097 - 1.1632508603934277e-6im\n│ β₁ = 1.1023943872470834\n│ β₂ = 1.0777290815477676\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1637710088698017e-6 from total weight 1.818889017221316: operator might not be hermitian?\n│ α = 1.0293670834582107 - 1.1637710088698017e-6im\n│ β₁ = 1.0777290815477676\n│ β₂ = 1.0427179346524702\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.040114223001612e-6 from total weight 1.8324550004613034: operator might not be hermitian?\n│ α = 1.0263900372755859 - 1.040114223001612e-6im\n│ β₁ = 1.0427179346524702\n│ β₂ = 1.103247084224591\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.449414066532713e-7 from total weight 1.695246006634505: operator might not be hermitian?\n│ α = 0.824717824769762 - 9.449414066532713e-7im\n│ β₁ = 1.0938490967740706\n│ β₂ = 0.998595857192951\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0747455515061621e-6 from total weight 1.722904239881022: operator might not be hermitian?\n│ α = 0.9353834131012809 - 1.0747455515061621e-6im\n│ β₁ = 0.998595857192951\n│ β₂ = 1.0470258852057677\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.223270898086798e-6 from total weight 1.708305544302349: operator might not be hermitian?\n│ α = 0.7933798680425387 - 1.223270898086798e-6im\n│ β₁ = 1.0470258852057677\n│ β₂ = 1.092059070465756\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.104362944544246e-6 from total weight 1.7859815831529486: operator might not be hermitian?\n│ α = 0.9186213194288729 - 1.104362944544246e-6im\n│ β₁ = 1.092059070465756\n│ β₂ = 1.0739050579378602\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0767294944188932e-6 from total weight 1.7517929358227784: operator might not be hermitian?\n│ α = 0.9119793947642264 - 1.0767294944188932e-6im\n│ β₁ = 1.0739050579378602\n│ β₂ = 1.0410571550392351\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2038780349871332e-6 from total weight 1.7380900252716378: operator might not be hermitian?\n│ α = 1.0340693653604522 - 1.2038780349871332e-6im\n│ β₁ = 1.0410571550392351\n│ β₂ = 0.9315886879476152\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.288718792540576e-6 from total weight 1.7687358205143435: operator might not be hermitian?\n│ α = 1.1554699297722864 - 1.288718792540576e-6im\n│ β₁ = 0.9315886879476152\n│ β₂ = 0.9620073599765004\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2196683122703278e-6 from total weight 1.7308801621854317: operator might not be hermitian?\n│ α = 1.0622505270312332 - 1.2196683122703278e-6im\n│ β₁ = 0.7539467763585763\n│ β₂ = 1.1397956887468725\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0853791424913356e-6 from total weight 1.6726926339879533: operator might not be hermitian?\n│ α = 0.8492362545918903 - 1.0853791424913356e-6im\n│ β₁ = 1.0284647484926124\n│ β₂ = 1.0094348383086176\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0729252470451783e-6 from total weight 1.7382624570595517: operator might not be hermitian?\n│ α = 0.9193105456968573 - 1.0729252470451783e-6im\n│ β₁ = 1.0094348383086176\n│ β₂ = 1.0758558441542996\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1420121823618734e-6 from total weight 1.7502520683145022: operator might not be hermitian?\n│ α = 0.9100055220804504 - 1.1420121823618734e-6im\n│ β₁ = 1.0758558441542996\n│ β₂ = 1.03817457829597\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.127696722245941e-6 from total weight 1.7299611891318882: operator might not be hermitian?\n│ α = 0.8541163993667705 - 1.127696722245941e-6im\n│ β₁ = 1.03817457829597\n│ β₂ = 1.0887811704902288\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1769815078735424e-6 from total weight 1.7594363401548583: operator might not be hermitian?\n│ α = 0.9492140654268791 - 1.1769815078735424e-6im\n│ β₁ = 1.0887811704902288\n│ β₂ = 1.0045717773448748\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1666054236525447e-6 from total weight 1.6736956846097075: operator might not be hermitian?\n│ α = 0.9196172145004238 - 1.1666054236525447e-6im\n│ β₁ = 1.0045717773448748\n│ β₂ = 0.9728293620344927\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 22:\tobj = -3.599926637146e-01\terr = 3.1198099426e-01\ttime = 0.04 sec\n[ Info: VUMPS 23:\tobj = -2.006675577417e-01\terr = 3.8157333729e-01\ttime = 0.03 sec\n[ Info: VUMPS 24:\tobj = -6.387493077780e-02\terr = 3.9989829765e-01\ttime = 0.03 sec\n[ Info: VUMPS 25:\tobj = -8.834566879714e-02\terr = 3.7005632685e-01\ttime = 0.07 sec\n[ Info: VUMPS 26:\tobj = -2.975734118485e-01\terr = 3.4878293297e-01\ttime = 0.02 sec\n[ Info: VUMPS 27:\tobj = -9.464425124186e-02\terr = 3.5775080203e-01\ttime = 0.02 sec\n[ Info: VUMPS 28:\tobj = -2.792871530928e-01\terr = 3.5210943205e-01\ttime = 0.02 sec\n[ Info: VUMPS 29:\tobj = -2.977067791771e-01\terr = 3.4012052565e-01\ttime = 0.02 sec\n[ Info: VUMPS 30:\tobj = -1.953218137614e-01\terr = 4.1754928294e-01\ttime = 0.02 sec\n[ Info: VUMPS 31:\tobj = -3.156920626111e-01\terr = 3.3106032255e-01\ttime = 0.02 sec\n[ Info: VUMPS 32:\tobj = -2.764432600413e-01\terr = 3.3477318298e-01\ttime = 0.02 sec\n[ Info: VUMPS 33:\tobj = -1.793989121500e-01\terr = 3.7982002408e-01\ttime = 0.02 sec\n[ Info: VUMPS 34:\tobj = -1.823377028659e-01\terr = 4.0147712268e-01\ttime = 0.02 sec\n[ Info: VUMPS 35:\tobj = -7.808398436717e-02\terr = 3.5721592731e-01\ttime = 0.03 sec\n[ Info: VUMPS 36:\tobj = +1.550446898034e-02\terr = 3.7023278218e-01\ttime = 0.02 sec\n[ Info: VUMPS 37:\tobj = -6.567548208365e-02\terr = 3.9599026194e-01\ttime = 0.02 sec\n[ Info: VUMPS 38:\tobj = -7.134198967732e-02\terr = 3.9828655621e-01\ttime = 0.02 sec\n[ Info: VUMPS 39:\tobj = +1.245450991997e-01\terr = 3.6040147377e-01\ttime = 0.02 sec\n[ Info: VUMPS 40:\tobj = -2.272805702370e-01\terr = 3.7688254284e-01\ttime = 0.02 sec\n[ Info: VUMPS 41:\tobj = -2.711012098569e-01\terr = 3.5608653488e-01\ttime = 0.02 sec\n[ Info: VUMPS 42:\tobj = -3.251122775684e-01\terr = 3.1561344370e-01\ttime = 0.02 sec\n[ Info: VUMPS 43:\tobj = -3.314209855315e-01\terr = 3.3621472798e-01\ttime = 0.02 sec\n[ Info: VUMPS 44:\tobj = -3.742005924137e-01\terr = 2.9033969399e-01\ttime = 0.02 sec\n[ Info: VUMPS 45:\tobj = -3.065837675909e-01\terr = 3.3609748111e-01\ttime = 0.03 sec\n[ Info: VUMPS 46:\tobj = -3.497171858968e-01\terr = 2.9115179008e-01\ttime = 0.02 sec\n[ Info: VUMPS 47:\tobj = -9.910732501111e-02\terr = 3.6751035382e-01\ttime = 0.03 sec\n[ Info: VUMPS 48:\tobj = -2.644925372437e-01\terr = 3.5562378905e-01\ttime = 0.02 sec\n[ Info: VUMPS 49:\tobj = -2.513896040191e-01\terr = 3.5870302716e-01\ttime = 0.02 sec\n[ Info: VUMPS 50:\tobj = -2.529548935577e-02\terr = 3.8290361105e-01\ttime = 0.03 sec\n[ Info: VUMPS 51:\tobj = +1.088249666345e-02\terr = 3.6750640959e-01\ttime = 0.05 sec\n┌ Warning: ignoring imaginary component -1.0906260352510147e-6 from total weight 1.8497205242237273: operator might not be hermitian?\n│ α = -0.5443504782080575 - 1.0906260352510147e-6im\n│ β₁ = 1.2463426992339768\n│ β₂ = 1.253705886830773\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0323387949501966e-6 from total weight 1.8248219407307344: operator might not be hermitian?\n│ α = -0.3488515008443419 - 1.0323387949501966e-6im\n│ β₁ = 1.3036579841910374\n│ β₂ = 1.2283133175150507\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.800749042193635e-7 from total weight 1.7392639240954022: operator might not be hermitian?\n│ α = -0.15134665486679957 - 9.800749042193635e-7im\n│ β₁ = 1.29843941540924\n│ β₂ = 1.1472524884397144\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.218140629447397e-7 from total weight 1.6660225128067838: operator might not be hermitian?\n│ α = -0.5406890303579995 - 9.218140629447397e-7im\n│ β₁ = 1.1472524884397144\n│ β₂ = 1.0803231523010095\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.389119079057651e-7 from total weight 1.6560892268929581: operator might not be hermitian?\n│ α = -0.36913134770841677 - 9.389119079057651e-7im\n│ β₁ = 1.0803231523010095\n│ β₂ = 1.1996980712543517\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 52:\tobj = -1.835786047074e-01\terr = 3.7058718254e-01\ttime = 0.02 sec\n[ Info: VUMPS 53:\tobj = -2.872446357917e-01\terr = 3.4652966395e-01\ttime = 0.02 sec\n[ Info: VUMPS 54:\tobj = -2.501331960767e-01\terr = 3.6074360899e-01\ttime = 0.02 sec\n[ Info: VUMPS 55:\tobj = -3.045540307815e-01\terr = 3.6027238193e-01\ttime = 0.02 sec\n[ Info: VUMPS 56:\tobj = -3.786209442746e-01\terr = 2.7551150472e-01\ttime = 0.02 sec\n[ Info: VUMPS 57:\tobj = -1.885356465151e-01\terr = 3.5617449268e-01\ttime = 0.02 sec\n[ Info: VUMPS 58:\tobj = -8.242178567440e-02\terr = 4.2485729708e-01\ttime = 0.02 sec\n[ Info: VUMPS 59:\tobj = +6.854256210998e-02\terr = 3.8280553717e-01\ttime = 0.02 sec\n[ Info: VUMPS 60:\tobj = -1.334345522323e-01\terr = 3.7199065525e-01\ttime = 0.02 sec\n[ Info: VUMPS 61:\tobj = -1.468728192806e-01\terr = 3.7782674888e-01\ttime = 0.02 sec\n[ Info: VUMPS 62:\tobj = -3.248275691559e-01\terr = 3.1910607395e-01\ttime = 0.02 sec\n[ Info: VUMPS 63:\tobj = -9.756232234052e-02\terr = 3.6802847968e-01\ttime = 0.02 sec\n[ Info: VUMPS 64:\tobj = -3.541788730283e-02\terr = 3.6654318560e-01\ttime = 0.02 sec\n[ Info: VUMPS 65:\tobj = -2.884534040748e-02\terr = 3.8836376222e-01\ttime = 0.03 sec\n[ Info: VUMPS 66:\tobj = -2.543638757662e-02\terr = 3.7289138253e-01\ttime = 0.03 sec\n[ Info: VUMPS 67:\tobj = +3.761430149410e-02\terr = 3.9523804597e-01\ttime = 0.02 sec\n[ Info: VUMPS 68:\tobj = -8.502353960949e-02\terr = 4.2605791567e-01\ttime = 0.02 sec\n[ Info: VUMPS 69:\tobj = +6.764248834569e-02\terr = 3.3807684183e-01\ttime = 0.02 sec\n[ Info: VUMPS 70:\tobj = +3.620382339073e-04\terr = 4.0191660644e-01\ttime = 0.02 sec\n[ Info: VUMPS 71:\tobj = -1.419203348175e-01\terr = 3.9688127648e-01\ttime = 0.02 sec\n[ Info: VUMPS 72:\tobj = +2.227275498360e-02\terr = 3.7840095594e-01\ttime = 0.02 sec\n[ Info: VUMPS 73:\tobj = -1.463126078271e-01\terr = 4.1112786067e-01\ttime = 0.02 sec\n[ Info: VUMPS 74:\tobj = -2.645357516128e-02\terr = 3.7830090977e-01\ttime = 0.03 sec\n[ Info: VUMPS 75:\tobj = -9.873560177855e-02\terr = 4.0908071214e-01\ttime = 0.03 sec\n[ Info: VUMPS 76:\tobj = -1.080109565552e-01\terr = 3.8462901759e-01\ttime = 0.02 sec\n[ Info: VUMPS 77:\tobj = -2.177950900439e-01\terr = 3.4865826566e-01\ttime = 0.02 sec\n[ Info: VUMPS 78:\tobj = -2.145295046946e-01\terr = 3.8179742518e-01\ttime = 0.04 sec\n[ Info: VUMPS 79:\tobj = -3.033777396122e-01\terr = 3.3881849617e-01\ttime = 0.02 sec\n[ Info: VUMPS 80:\tobj = -1.018654078294e-01\terr = 3.5728148275e-01\ttime = 0.03 sec\n[ Info: VUMPS 81:\tobj = -2.776735220330e-01\terr = 3.3584583232e-01\ttime = 0.02 sec\n[ Info: VUMPS 82:\tobj = -1.158347284088e-01\terr = 3.6885043774e-01\ttime = 0.02 sec\n[ Info: VUMPS 83:\tobj = -2.625401602298e-01\terr = 3.7176511141e-01\ttime = 0.02 sec\n[ Info: VUMPS 84:\tobj = -1.074949158082e-01\terr = 4.0177799241e-01\ttime = 0.03 sec\n[ Info: VUMPS 85:\tobj = -1.127766228428e-01\terr = 4.0149881595e-01\ttime = 0.02 sec\n[ Info: VUMPS 86:\tobj = -2.808293730657e-01\terr = 3.6168038744e-01\ttime = 0.02 sec\n[ Info: VUMPS 87:\tobj = -3.046853439863e-01\terr = 3.3655658880e-01\ttime = 0.02 sec\n[ Info: VUMPS 88:\tobj = -3.318734618762e-01\terr = 3.1566007228e-01\ttime = 0.02 sec\n[ Info: VUMPS 89:\tobj = -3.535869257430e-01\terr = 3.0873844043e-01\ttime = 0.02 sec\n[ Info: VUMPS 90:\tobj = -3.747958764617e-01\terr = 2.8288563034e-01\ttime = 0.02 sec\n[ Info: VUMPS 91:\tobj = +5.635703695733e-02\terr = 3.7877695869e-01\ttime = 0.02 sec\n[ Info: VUMPS 92:\tobj = -2.546798027174e-01\terr = 3.7343940301e-01\ttime = 0.02 sec\n[ Info: VUMPS 93:\tobj = -3.208056853929e-01\terr = 3.3146175420e-01\ttime = 0.02 sec\n[ Info: VUMPS 94:\tobj = -1.076573438228e-01\terr = 3.8291173087e-01\ttime = 0.02 sec\n[ Info: VUMPS 95:\tobj = +5.846672351870e-03\terr = 3.8592643456e-01\ttime = 0.02 sec\n[ Info: VUMPS 96:\tobj = +3.595683066276e-02\terr = 3.7085826416e-01\ttime = 0.02 sec\n[ Info: VUMPS 97:\tobj = -3.938910516171e-02\terr = 3.5611514050e-01\ttime = 0.02 sec\n[ Info: VUMPS 98:\tobj = -2.612602243834e-01\terr = 3.5599606870e-01\ttime = 0.03 sec\n[ Info: VUMPS 99:\tobj = -3.593251292915e-01\terr = 3.0075205445e-01\ttime = 0.03 sec\n[ Info: VUMPS 100:\tobj = -2.840490132623e-01\terr = 3.5596476789e-01\ttime = 0.04 sec\n[ Info: VUMPS 101:\tobj = -3.149203096197e-01\terr = 3.4612410353e-01\ttime = 0.03 sec\n[ Info: VUMPS 102:\tobj = -1.771004727151e-01\terr = 3.7690482781e-01\ttime = 0.03 sec\n[ Info: VUMPS 103:\tobj = -1.261057797685e-01\terr = 3.2951815491e-01\ttime = 0.03 sec\n[ Info: VUMPS 104:\tobj = -1.686543661324e-01\terr = 3.7094564016e-01\ttime = 0.04 sec\n[ Info: VUMPS 105:\tobj = -3.423027109471e-01\terr = 3.2742213114e-01\ttime = 0.02 sec\n[ Info: VUMPS 106:\tobj = -1.878214833070e-01\terr = 3.9431530329e-01\ttime = 0.02 sec\n[ Info: VUMPS 107:\tobj = -3.351840994830e-01\terr = 3.2292784491e-01\ttime = 0.02 sec\n[ Info: VUMPS 108:\tobj = +3.684045487139e-02\terr = 4.0052347039e-01\ttime = 0.02 sec\n[ Info: VUMPS 109:\tobj = -1.413589558971e-01\terr = 4.0048426658e-01\ttime = 0.02 sec\n[ Info: VUMPS 110:\tobj = -1.296478941821e-01\terr = 3.8353753071e-01\ttime = 0.02 sec\n[ Info: VUMPS 111:\tobj = -2.903612348667e-01\terr = 3.4702087325e-01\ttime = 0.02 sec\n[ Info: VUMPS 112:\tobj = -2.889212283943e-01\terr = 3.4180326230e-01\ttime = 0.02 sec\n[ Info: VUMPS 113:\tobj = -3.522496143264e-01\terr = 3.1360801538e-01\ttime = 0.02 sec\n[ Info: VUMPS 114:\tobj = -2.150329065915e-01\terr = 3.6902468730e-01\ttime = 0.03 sec\n[ Info: VUMPS 115:\tobj = -2.703393524794e-01\terr = 3.5095708774e-01\ttime = 0.02 sec\n[ Info: VUMPS 116:\tobj = -3.750896311434e-01\terr = 2.7607472783e-01\ttime = 0.02 sec\n[ Info: VUMPS 117:\tobj = -4.374578698028e-01\terr = 8.7068984647e-02\ttime = 0.02 sec\n[ Info: VUMPS 118:\tobj = -2.068327025250e-01\terr = 3.9598606710e-01\ttime = 0.03 sec\n[ Info: VUMPS 119:\tobj = +2.035115814900e-02\terr = 3.8850017121e-01\ttime = 0.03 sec\n[ Info: VUMPS 120:\tobj = -9.325059606146e-02\terr = 3.9888549509e-01\ttime = 0.02 sec\n[ Info: VUMPS 121:\tobj = -3.316950708480e-01\terr = 3.2060866594e-01\ttime = 0.02 sec\n[ Info: VUMPS 122:\tobj = -3.655769344173e-01\terr = 3.0447070338e-01\ttime = 0.02 sec\n[ Info: VUMPS 123:\tobj = -2.884718529955e-01\terr = 3.4662993339e-01\ttime = 0.03 sec\n[ Info: VUMPS 124:\tobj = +1.006818501243e-01\terr = 2.5844667684e-01\ttime = 0.03 sec\n[ Info: VUMPS 125:\tobj = -5.352193069862e-02\terr = 3.9024450676e-01\ttime = 0.02 sec\n[ Info: VUMPS 126:\tobj = -2.373506245892e-01\terr = 3.6512643964e-01\ttime = 0.02 sec\n[ Info: VUMPS 127:\tobj = -2.159468619452e-01\terr = 3.7636947224e-01\ttime = 0.02 sec\n[ Info: VUMPS 128:\tobj = -2.882613511865e-01\terr = 3.5104424909e-01\ttime = 0.06 sec\n[ Info: VUMPS 129:\tobj = -5.404755897444e-02\terr = 4.0673697459e-01\ttime = 0.02 sec\n[ Info: VUMPS 130:\tobj = -1.110570289732e-02\terr = 3.7300276680e-01\ttime = 0.02 sec\n[ Info: VUMPS 131:\tobj = -3.055714454115e-01\terr = 3.2593658317e-01\ttime = 0.02 sec\n[ Info: VUMPS 132:\tobj = -4.138799853856e-01\terr = 2.1596634660e-01\ttime = 0.03 sec\n[ Info: VUMPS 133:\tobj = -4.103726278341e-01\terr = 2.2971553475e-01\ttime = 0.03 sec\n[ Info: VUMPS 134:\tobj = -2.062283378317e-01\terr = 3.9155621302e-01\ttime = 0.10 sec\n[ Info: VUMPS 135:\tobj = -1.408095517660e-01\terr = 3.7133013921e-01\ttime = 0.03 sec\n[ Info: VUMPS 136:\tobj = -2.733008995045e-01\terr = 3.4869660555e-01\ttime = 0.03 sec\n[ Info: VUMPS 137:\tobj = -2.413146142661e-01\terr = 3.6032029037e-01\ttime = 0.04 sec\n[ Info: VUMPS 138:\tobj = -2.345521401692e-01\terr = 3.9156410210e-01\ttime = 0.04 sec\n[ Info: VUMPS 139:\tobj = -1.812659212104e-01\terr = 3.7512375931e-01\ttime = 0.02 sec\n[ Info: VUMPS 140:\tobj = +5.504445469520e-02\terr = 4.0833291366e-01\ttime = 0.02 sec\n[ Info: VUMPS 141:\tobj = +7.819335042351e-02\terr = 3.6246986033e-01\ttime = 0.02 sec\n[ Info: VUMPS 142:\tobj = -8.837833565961e-02\terr = 4.0255886671e-01\ttime = 0.02 sec\n[ Info: VUMPS 143:\tobj = -1.439796807770e-01\terr = 3.7798874866e-01\ttime = 0.02 sec\n[ Info: VUMPS 144:\tobj = -9.845791091371e-02\terr = 3.7883789962e-01\ttime = 0.03 sec\n[ Info: VUMPS 145:\tobj = -2.002438639637e-01\terr = 3.6794432629e-01\ttime = 0.03 sec\n[ Info: VUMPS 146:\tobj = -2.925115290248e-01\terr = 3.4496990483e-01\ttime = 0.02 sec\n[ Info: VUMPS 147:\tobj = -2.567134823031e-01\terr = 3.7682994795e-01\ttime = 0.03 sec\n[ Info: VUMPS 148:\tobj = -5.450623211295e-02\terr = 4.0354166337e-01\ttime = 0.03 sec\n[ Info: VUMPS 149:\tobj = -2.289380848022e-01\terr = 3.8659563460e-01\ttime = 0.03 sec\n[ Info: VUMPS 150:\tobj = -5.474894900934e-02\terr = 3.7384998711e-01\ttime = 0.03 sec\n[ Info: VUMPS 151:\tobj = -9.637261902165e-02\terr = 3.9586432122e-01\ttime = 0.03 sec\n[ Info: VUMPS 152:\tobj = -2.454647681151e-01\terr = 3.8403024140e-01\ttime = 0.03 sec\n[ Info: VUMPS 153:\tobj = -2.533922365600e-01\terr = 3.7678126243e-01\ttime = 0.05 sec\n[ Info: VUMPS 154:\tobj = -2.827263113773e-01\terr = 3.5212474060e-01\ttime = 0.02 sec\n[ Info: VUMPS 155:\tobj = -1.560655750127e-01\terr = 3.9202883901e-01\ttime = 0.03 sec\n[ Info: VUMPS 156:\tobj = -3.816792402053e-02\terr = 3.8546044810e-01\ttime = 0.02 sec\n[ Info: VUMPS 157:\tobj = -1.990621578324e-01\terr = 3.6387099519e-01\ttime = 0.02 sec\n[ Info: VUMPS 158:\tobj = -2.456905842106e-01\terr = 3.6718246410e-01\ttime = 0.02 sec\n[ Info: VUMPS 159:\tobj = -1.569727394566e-01\terr = 3.8622969012e-01\ttime = 0.02 sec\n[ Info: VUMPS 160:\tobj = -3.806952311736e-01\terr = 2.7009992090e-01\ttime = 0.03 sec\n[ Info: VUMPS 161:\tobj = -4.023014127533e-01\terr = 2.4044971021e-01\ttime = 0.03 sec\n[ Info: VUMPS 162:\tobj = -8.174864155685e-02\terr = 3.9868997751e-01\ttime = 0.02 sec\n[ Info: VUMPS 163:\tobj = -1.083133089400e-01\terr = 3.9577054120e-01\ttime = 0.02 sec\n[ Info: VUMPS 164:\tobj = -4.117310247478e-02\terr = 3.8288605079e-01\ttime = 0.02 sec\n[ Info: VUMPS 165:\tobj = +5.658238277328e-02\terr = 3.4545767577e-01\ttime = 0.02 sec\n[ Info: VUMPS 166:\tobj = -1.562684251828e-01\terr = 3.7668846749e-01\ttime = 0.02 sec\n[ Info: VUMPS 167:\tobj = -3.579967475307e-01\terr = 2.9316630928e-01\ttime = 0.02 sec\n[ Info: VUMPS 168:\tobj = -3.566777325589e-01\terr = 3.1340244360e-01\ttime = 0.03 sec\n[ Info: VUMPS 169:\tobj = -3.060527240289e-01\terr = 3.5098667027e-01\ttime = 0.02 sec\n[ Info: VUMPS 170:\tobj = -3.374604547737e-01\terr = 3.1443790743e-01\ttime = 0.03 sec\n[ Info: VUMPS 171:\tobj = -4.177203257232e-01\terr = 1.9939123710e-01\ttime = 0.03 sec\n[ Info: VUMPS 172:\tobj = +5.125705660122e-03\terr = 3.8405215483e-01\ttime = 0.02 sec\n[ Info: VUMPS 173:\tobj = -5.400499230366e-02\terr = 4.1385947701e-01\ttime = 0.02 sec\n[ Info: VUMPS 174:\tobj = -1.621295573254e-01\terr = 3.6125259721e-01\ttime = 0.02 sec\n[ Info: VUMPS 175:\tobj = -3.121116840774e-01\terr = 3.3512185832e-01\ttime = 0.02 sec\n[ Info: VUMPS 176:\tobj = -3.849842725262e-01\terr = 2.6782930861e-01\ttime = 0.02 sec\n[ Info: VUMPS 177:\tobj = +3.110563155614e-02\terr = 3.7713634288e-01\ttime = 0.03 sec\n[ Info: VUMPS 178:\tobj = +3.669039323676e-02\terr = 3.8251904836e-01\ttime = 0.04 sec\n[ Info: VUMPS 179:\tobj = -3.840454731001e-02\terr = 3.7474626597e-01\ttime = 0.02 sec\n[ Info: VUMPS 180:\tobj = -2.524487813554e-01\terr = 3.7049523698e-01\ttime = 0.02 sec\n[ Info: VUMPS 181:\tobj = -3.788502123588e-01\terr = 2.8387660361e-01\ttime = 0.02 sec\n[ Info: VUMPS 182:\tobj = -4.082044238062e-01\terr = 2.2067247971e-01\ttime = 0.03 sec\n[ Info: VUMPS 183:\tobj = -4.055634848980e-01\terr = 2.3176961720e-01\ttime = 0.04 sec\n[ Info: VUMPS 184:\tobj = -1.976537578552e-01\terr = 3.4371096572e-01\ttime = 0.04 sec\n[ Info: VUMPS 185:\tobj = -1.764473240992e-01\terr = 3.6115673867e-01\ttime = 0.02 sec\n[ Info: VUMPS 186:\tobj = -3.885951111015e-01\terr = 2.5363772934e-01\ttime = 0.02 sec\n[ Info: VUMPS 187:\tobj = -4.005815988144e-01\terr = 2.3602724468e-01\ttime = 0.02 sec\n[ Info: VUMPS 188:\tobj = -1.118521194665e-01\terr = 3.8155191888e-01\ttime = 0.03 sec\n[ Info: VUMPS 189:\tobj = -2.674536940230e-01\terr = 3.2599437468e-01\ttime = 0.02 sec\n[ Info: VUMPS 190:\tobj = -2.881123357546e-01\terr = 3.4671988495e-01\ttime = 0.02 sec\n[ Info: VUMPS 191:\tobj = -1.784544486614e-01\terr = 3.7274285855e-01\ttime = 0.02 sec\n[ Info: VUMPS 192:\tobj = -1.619856307685e-01\terr = 3.7835778084e-01\ttime = 0.02 sec\n[ Info: VUMPS 193:\tobj = -1.663182199638e-01\terr = 3.6917729523e-01\ttime = 0.02 sec\n[ Info: VUMPS 194:\tobj = -1.794534817670e-02\terr = 3.8707259520e-01\ttime = 0.02 sec\n[ Info: VUMPS 195:\tobj = +1.703845824273e-02\terr = 3.7640930619e-01\ttime = 0.02 sec\n[ Info: VUMPS 196:\tobj = -1.947209060524e-01\terr = 3.5645896038e-01\ttime = 0.02 sec\n[ Info: VUMPS 197:\tobj = -3.340877624423e-01\terr = 3.2661456636e-01\ttime = 0.02 sec\n[ Info: VUMPS 198:\tobj = -3.589457517989e-01\terr = 3.1047756734e-01\ttime = 0.02 sec\n[ Info: VUMPS 199:\tobj = -2.290122658012e-01\terr = 3.6664407689e-01\ttime = 0.02 sec\n┌ Warning: VUMPS cancel 200:\tobj = -3.484120636346e-01\terr = 3.0496744526e-01\ttime = 5.17 sec\n└ @ MPSKit ~/Projects/Julia/MPSKit.jl/src/algorithms/groundstate/vumps.jl:67\n","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"As you can see, VUMPS struggles to converge. On it's own, that is already quite curious. Maybe we can do better using another algorithm, such as gradient descent.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"groundstate, cache, delta = find_groundstate(state, H, GradientGrassmann(; maxiter=20));","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"[ Info: CG: initializing with f = 0.249997410383, ‖∇f‖ = 3.3669e-03\n[ Info: CG: iter 1: f = -0.044704853193, ‖∇f‖ = 5.9152e-01, α = 7.29e+03, β = 0.00e+00, nfg = 5\n[ Info: CG: iter 2: f = -0.058658885672, ‖∇f‖ = 6.1600e-01, α = 1.63e+00, β = 6.59e+03, nfg = 8\n[ Info: CG: iter 3: f = -0.060627038309, ‖∇f‖ = 6.4371e-01, α = 1.17e-03, β = 1.95e+01, nfg = 12\n[ Info: CG: iter 4: f = -0.181007718316, ‖∇f‖ = 6.8201e-01, α = 9.81e-01, β = 1.78e-03, nfg = 6\n[ Info: CG: iter 5: f = -0.311679137866, ‖∇f‖ = 4.9353e-01, α = 7.38e-01, β = 3.68e-01, nfg = 3\n[ Info: CG: iter 6: f = -0.369436221250, ‖∇f‖ = 3.9007e-01, α = 7.04e-01, β = 2.28e-01, nfg = 2\n[ Info: CG: iter 7: f = -0.408163517301, ‖∇f‖ = 2.1812e-01, α = 5.24e-01, β = 2.14e-01, nfg = 2\n[ Info: CG: iter 8: f = -0.417643389806, ‖∇f‖ = 1.6464e-01, α = 3.03e-01, β = 3.14e-01, nfg = 2\n[ Info: CG: iter 9: f = -0.421957811162, ‖∇f‖ = 1.4205e-01, α = 1.89e-01, β = 4.76e-01, nfg = 2\n[ Info: CG: iter 10: f = -0.425880699478, ‖∇f‖ = 1.3122e-01, α = 2.18e-01, β = 4.93e-01, nfg = 2\n[ Info: CG: iter 11: f = -0.429137411499, ‖∇f‖ = 1.2451e-01, α = 2.10e-01, β = 4.95e-01, nfg = 2\n[ Info: CG: iter 12: f = -0.431913122251, ‖∇f‖ = 1.1664e-01, α = 1.78e-01, β = 6.26e-01, nfg = 2\n[ Info: CG: iter 13: f = -0.435009198881, ‖∇f‖ = 1.0914e-01, α = 2.57e-01, β = 5.20e-01, nfg = 2\n[ Info: CG: iter 14: f = -0.437794275447, ‖∇f‖ = 8.3054e-02, α = 3.18e-01, β = 3.59e-01, nfg = 2\n[ Info: CG: iter 15: f = -0.439321637163, ‖∇f‖ = 6.5852e-02, α = 2.84e-01, β = 3.80e-01, nfg = 2\n[ Info: CG: iter 16: f = -0.440230609086, ‖∇f‖ = 5.3475e-02, α = 2.54e-01, β = 4.32e-01, nfg = 2\n[ Info: CG: iter 17: f = -0.440915387974, ‖∇f‖ = 4.3318e-02, α = 3.21e-01, β = 3.60e-01, nfg = 2\n[ Info: CG: iter 18: f = -0.441349404831, ‖∇f‖ = 3.5587e-02, α = 2.76e-01, β = 3.95e-01, nfg = 2\n[ Info: CG: iter 19: f = -0.441562044343, ‖∇f‖ = 3.2287e-02, α = 1.49e-01, β = 6.79e-01, nfg = 2\n┌ Warning: CG: not converged to requested tol: f = -0.441808873450, ‖∇f‖ = 2.9902e-02\n└ @ OptimKit ~/Projects/Julia/OptimKit.jl/src/cg.jl:103\n","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"Convergence is quite slow and even fails after sufficiently many iterations. To understand why, we can look at the transfer matrix spectrum.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"transferplot(groundstate, groundstate)","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"We can clearly see multiple eigenvalues close to the unit circle. Our state is close to being non-injective, and represents the sum of multiple injective states. This is numerically very problematic, but also indicates that we used an incorrect ansatz to approximate the groundstate. We should retry with a larger unit cell.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/#Success","page":"The XXZ model","title":"Success","text":"","category":"section"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"Let's initialize a different initial state, this time with a 2-site unit cell:","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"A = TensorMap(rand, ComplexF64, ℂ^20 * ℂ^2, ℂ^20);\nB = TensorMap(rand, ComplexF64, ℂ^20 * ℂ^2, ℂ^20);\nstate = InfiniteMPS([A, B]);","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"In MPSKit, we require that the periodicity of the hamiltonian equals that of the state it is applied to. This is not a big obstacle, you can simply repeat the original hamiltonian. Alternatively, the hamiltonian can be constructed directly on a two-site unitcell by making use of MPSKitModels.jl's @mpoham.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"# H2 = repeat(H, 2); -- copies the one-site version\nH2 = heisenberg_XXX(ComplexF64, Trivial, InfiniteChain(2); spin=1 // 2)\ngroundstate, cache, delta = find_groundstate(state, H2,\n VUMPS(; maxiter=100, tol=1e-12));","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"[ Info: VUMPS init:\tobj = +4.989263659981e-01\terr = 7.2657e-02\n[ Info: VUMPS 1:\tobj = -3.327977953900e-01\terr = 3.6721157182e-01\ttime = 0.04 sec\n[ Info: VUMPS 2:\tobj = -8.613582314697e-01\terr = 1.3817395701e-01\ttime = 0.03 sec\n[ Info: VUMPS 3:\tobj = -8.854094286633e-01\terr = 1.2636996941e-02\ttime = 0.03 sec\n[ Info: VUMPS 4:\tobj = -8.860034868896e-01\terr = 4.8894227850e-03\ttime = 0.04 sec\n[ Info: VUMPS 5:\tobj = -8.861408641612e-01\terr = 3.6101081699e-03\ttime = 0.03 sec\n[ Info: VUMPS 6:\tobj = -8.861956019962e-01\terr = 2.3873340370e-03\ttime = 0.03 sec\n[ Info: VUMPS 7:\tobj = -8.862171468896e-01\terr = 2.3946876976e-03\ttime = 0.08 sec\n[ Info: VUMPS 8:\tobj = -8.862275876134e-01\terr = 2.0620267318e-03\ttime = 0.03 sec\n[ Info: VUMPS 9:\tobj = -8.862319848598e-01\terr = 2.3656536837e-03\ttime = 0.03 sec\n[ Info: VUMPS 10:\tobj = -8.862342347151e-01\terr = 2.3171962616e-03\ttime = 0.03 sec\n[ Info: VUMPS 11:\tobj = -8.862351816575e-01\terr = 2.5035157089e-03\ttime = 0.03 sec\n[ Info: VUMPS 12:\tobj = -8.862358518698e-01\terr = 2.3743584569e-03\ttime = 0.03 sec\n[ Info: VUMPS 13:\tobj = -8.862358277380e-01\terr = 2.6661781012e-03\ttime = 0.03 sec\n[ Info: VUMPS 14:\tobj = -8.862361321088e-01\terr = 2.5349398073e-03\ttime = 0.03 sec\n[ Info: VUMPS 15:\tobj = -8.862362398790e-01\terr = 2.5961328460e-03\ttime = 0.03 sec\n[ Info: VUMPS 16:\tobj = -8.862364361640e-01\terr = 2.4630430503e-03\ttime = 0.03 sec\n[ Info: VUMPS 17:\tobj = -8.862363204823e-01\terr = 2.6657013311e-03\ttime = 0.03 sec\n[ Info: VUMPS 18:\tobj = -8.862366543525e-01\terr = 2.4033859380e-03\ttime = 0.03 sec\n[ Info: VUMPS 19:\tobj = -8.862368027756e-01\terr = 2.4751545251e-03\ttime = 0.03 sec\n[ Info: VUMPS 20:\tobj = -8.862370949666e-01\terr = 2.2173189980e-03\ttime = 0.05 sec\n[ Info: VUMPS 21:\tobj = -8.862372454594e-01\terr = 2.3525966932e-03\ttime = 0.05 sec\n[ Info: VUMPS 22:\tobj = -8.862376422218e-01\terr = 1.9729740148e-03\ttime = 0.04 sec\n[ Info: VUMPS 23:\tobj = -8.862378512527e-01\terr = 2.1069315226e-03\ttime = 0.07 sec\n[ Info: VUMPS 24:\tobj = -8.862381943532e-01\terr = 1.7728171465e-03\ttime = 0.04 sec\n[ Info: VUMPS 25:\tobj = -8.862384261527e-01\terr = 1.8605694862e-03\ttime = 0.03 sec\n[ Info: VUMPS 26:\tobj = -8.862386821954e-01\terr = 1.6005785804e-03\ttime = 0.04 sec\n[ Info: VUMPS 27:\tobj = -8.862388952173e-01\terr = 1.6219782649e-03\ttime = 0.03 sec\n[ Info: VUMPS 28:\tobj = -8.862390777872e-01\terr = 1.4098536096e-03\ttime = 0.05 sec\n[ Info: VUMPS 29:\tobj = -8.862392504199e-01\terr = 1.3742836059e-03\ttime = 0.05 sec\n[ Info: VUMPS 30:\tobj = -8.862393918124e-01\terr = 1.1981526208e-03\ttime = 0.05 sec\n[ Info: VUMPS 31:\tobj = -8.862395189366e-01\terr = 1.1227495232e-03\ttime = 0.05 sec\n[ Info: VUMPS 32:\tobj = -8.862396317750e-01\terr = 9.6790961802e-04\ttime = 0.05 sec\n[ Info: VUMPS 33:\tobj = -8.862397273358e-01\terr = 8.7235460197e-04\ttime = 0.04 sec\n[ Info: VUMPS 34:\tobj = -8.862398137238e-01\terr = 7.3864358738e-04\ttime = 0.03 sec\n[ Info: VUMPS 35:\tobj = -8.862398845201e-01\terr = 6.4279120671e-04\ttime = 0.03 sec\n[ Info: VUMPS 36:\tobj = -8.862399481195e-01\terr = 5.3518713271e-04\ttime = 0.04 sec\n[ Info: VUMPS 37:\tobj = -8.862400017558e-01\terr = 4.5437031592e-04\ttime = 0.04 sec\n[ Info: VUMPS 38:\tobj = -8.862400510754e-01\terr = 3.7529927192e-04\ttime = 0.04 sec\n[ Info: VUMPS 39:\tobj = -8.862400961622e-01\terr = 3.1709478672e-04\ttime = 0.04 sec\n[ Info: VUMPS 40:\tobj = -8.862401404447e-01\terr = 2.6516037727e-04\ttime = 0.05 sec\n[ Info: VUMPS 41:\tobj = -8.862401848458e-01\terr = 2.3115404187e-04\ttime = 0.04 sec\n[ Info: VUMPS 42:\tobj = -8.862402315158e-01\terr = 2.0263944361e-04\ttime = 0.04 sec\n[ Info: VUMPS 43:\tobj = -8.862402813257e-01\terr = 1.8985412367e-04\ttime = 0.04 sec\n[ Info: VUMPS 44:\tobj = -8.862403357012e-01\terr = 1.7867891600e-04\ttime = 0.04 sec\n[ Info: VUMPS 45:\tobj = -8.862403952507e-01\terr = 1.7958231642e-04\ttime = 0.04 sec\n[ Info: VUMPS 46:\tobj = -8.862404608464e-01\terr = 1.7788607349e-04\ttime = 0.06 sec\n[ Info: VUMPS 47:\tobj = -8.862405326781e-01\terr = 1.8395392822e-04\ttime = 0.06 sec\n[ Info: VUMPS 48:\tobj = -8.862406109377e-01\terr = 1.8586675040e-04\ttime = 0.06 sec\n[ Info: VUMPS 49:\tobj = -8.862406951285e-01\terr = 1.9086368515e-04\ttime = 0.06 sec\n[ Info: VUMPS 50:\tobj = -8.862407845139e-01\terr = 1.9239669989e-04\ttime = 0.06 sec\n[ Info: VUMPS 51:\tobj = -8.862408776839e-01\terr = 1.9330600812e-04\ttime = 0.04 sec\n[ Info: VUMPS 52:\tobj = -8.862409729223e-01\terr = 1.9221903809e-04\ttime = 0.04 sec\n[ Info: VUMPS 53:\tobj = -8.862410680644e-01\terr = 1.8904918253e-04\ttime = 0.06 sec\n[ Info: VUMPS 54:\tobj = -8.862411608804e-01\terr = 1.8372886328e-04\ttime = 0.07 sec\n[ Info: VUMPS 55:\tobj = -8.862412491530e-01\terr = 1.7627491752e-04\ttime = 0.04 sec\n[ Info: VUMPS 56:\tobj = -8.862413310135e-01\terr = 1.6700719117e-04\ttime = 0.06 sec\n[ Info: VUMPS 57:\tobj = -8.862414050343e-01\terr = 1.5632121418e-04\ttime = 0.06 sec\n[ Info: VUMPS 58:\tobj = -8.862414703832e-01\terr = 1.4463100169e-04\ttime = 0.06 sec\n[ Info: VUMPS 59:\tobj = -8.862415267819e-01\terr = 1.3240541746e-04\ttime = 0.04 sec\n[ Info: VUMPS 60:\tobj = -8.862415744605e-01\terr = 1.2003094122e-04\ttime = 0.04 sec\n[ Info: VUMPS 61:\tobj = -8.862416140187e-01\terr = 1.0787541315e-04\ttime = 0.04 sec\n[ Info: VUMPS 62:\tobj = -8.862416463016e-01\terr = 9.6199569445e-05\ttime = 0.04 sec\n[ Info: VUMPS 63:\tobj = -8.862416722680e-01\terr = 8.5213478564e-05\ttime = 0.04 sec\n[ Info: VUMPS 64:\tobj = -8.862416928959e-01\terr = 7.5037966909e-05\ttime = 0.04 sec\n[ Info: VUMPS 65:\tobj = -8.862417091097e-01\terr = 6.5748007888e-05\ttime = 0.04 sec\n[ Info: VUMPS 66:\tobj = -8.862417217414e-01\terr = 5.7359888977e-05\ttime = 0.04 sec\n[ Info: VUMPS 67:\tobj = -8.862417315096e-01\terr = 4.9862390372e-05\ttime = 0.08 sec\n[ Info: VUMPS 68:\tobj = -8.862417390182e-01\terr = 4.3212839861e-05\ttime = 0.04 sec\n[ Info: VUMPS 69:\tobj = -8.862417447618e-01\terr = 3.7357188222e-05\ttime = 0.04 sec\n[ Info: VUMPS 70:\tobj = -8.862417491385e-01\terr = 3.2228700378e-05\ttime = 0.04 sec\n[ Info: VUMPS 71:\tobj = -8.862417524639e-01\terr = 2.7759484498e-05\ttime = 0.04 sec\n[ Info: VUMPS 72:\tobj = -8.862417549849e-01\terr = 2.3879497160e-05\ttime = 0.04 sec\n[ Info: VUMPS 73:\tobj = -8.862417568933e-01\terr = 2.0522797005e-05\ttime = 0.04 sec\n[ Info: VUMPS 74:\tobj = -8.862417583366e-01\terr = 1.7626192855e-05\ttime = 0.04 sec\n[ Info: VUMPS 75:\tobj = -8.862417594276e-01\terr = 1.5132458948e-05\ttime = 0.04 sec\n[ Info: VUMPS 76:\tobj = -8.862417602523e-01\terr = 1.2989135774e-05\ttime = 0.06 sec\n[ Info: VUMPS 77:\tobj = -8.862417608759e-01\terr = 1.1149763921e-05\ttime = 0.04 sec\n[ Info: VUMPS 78:\tobj = -8.862417613476e-01\terr = 9.5726959771e-06\ttime = 0.04 sec\n[ Info: VUMPS 79:\tobj = -8.862417617047e-01\terr = 8.2216567005e-06\ttime = 0.05 sec\n[ Info: VUMPS 80:\tobj = -8.862417619753e-01\terr = 7.0647166216e-06\ttime = 0.05 sec\n[ Info: VUMPS 81:\tobj = -8.862417621806e-01\terr = 6.0742789761e-06\ttime = 0.04 sec\n[ Info: VUMPS 82:\tobj = -8.862417623365e-01\terr = 5.2264003503e-06\ttime = 0.04 sec\n[ Info: VUMPS 83:\tobj = -8.862417624550e-01\terr = 4.5004618841e-06\ttime = 0.04 sec\n[ Info: VUMPS 84:\tobj = -8.862417625453e-01\terr = 3.8786795482e-06\ttime = 0.04 sec\n[ Info: VUMPS 85:\tobj = -8.862417626141e-01\terr = 3.3458775562e-06\ttime = 0.04 sec\n[ Info: VUMPS 86:\tobj = -8.862417626666e-01\terr = 2.8890331408e-06\ttime = 0.06 sec\n[ Info: VUMPS 87:\tobj = -8.862417627068e-01\terr = 2.4970540348e-06\ttime = 0.04 sec\n[ Info: VUMPS 88:\tobj = -8.862417627375e-01\terr = 2.1604343906e-06\ttime = 0.06 sec\n[ Info: VUMPS 89:\tobj = -8.862417627610e-01\terr = 1.8711402154e-06\ttime = 0.05 sec\n[ Info: VUMPS 90:\tobj = -8.862417627790e-01\terr = 1.6222006325e-06\ttime = 0.04 sec\n[ Info: VUMPS 91:\tobj = -8.862417627929e-01\terr = 1.4077789981e-06\ttime = 0.04 sec\n[ Info: VUMPS 92:\tobj = -8.862417628035e-01\terr = 1.2229350105e-06\ttime = 0.04 sec\n[ Info: VUMPS 93:\tobj = -8.862417628117e-01\terr = 1.0633924828e-06\ttime = 0.04 sec\n[ Info: VUMPS 94:\tobj = -8.862417628180e-01\terr = 9.2553335577e-07\ttime = 0.06 sec\n[ Info: VUMPS 95:\tobj = -8.862417628229e-01\terr = 8.0725584351e-07\ttime = 0.04 sec\n[ Info: VUMPS 96:\tobj = -8.862417628266e-01\terr = 7.0473150657e-07\ttime = 0.04 sec\n[ Info: VUMPS 97:\tobj = -8.862417628295e-01\terr = 6.1568056415e-07\ttime = 0.04 sec\n[ Info: VUMPS 98:\tobj = -8.862417628318e-01\terr = 5.3828819844e-07\ttime = 0.04 sec\n[ Info: VUMPS 99:\tobj = -8.862417628335e-01\terr = 4.7093780362e-07\ttime = 0.05 sec\n┌ Warning: VUMPS cancel 100:\tobj = -8.862417628348e-01\terr = 4.1227746817e-07\ttime = 4.34 sec\n└ @ MPSKit ~/Projects/Julia/MPSKit.jl/src/algorithms/groundstate/vumps.jl:67\n","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"We get convergence, but it takes an enormous amount of iterations. The reason behind this becomes more obvious at higher bond dimensions:","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"groundstate, cache, delta = find_groundstate(state, H2,\n IDMRG2(; trscheme=truncdim(50), maxiter=20,\n tol=1e-12))\nentanglementplot(groundstate)","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"We see that some eigenvalues clearly belong to a group, and are almost degenerate. This implies 2 things:","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"there is superfluous information, if those eigenvalues are the same anyway\npoor convergence if we cut off within such a subspace","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"It are precisely those problems that we can solve by using symmetries.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/#Symmetries","page":"The XXZ model","title":"Symmetries","text":"","category":"section"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"The XXZ Heisenberg hamiltonian is SU(2) symmetric and we can exploit this to greatly speed up the simulation.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"It is cumbersome to construct symmetric hamiltonians, but luckily su(2) symmetric XXZ is already implemented:","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"H2 = heisenberg_XXX(ComplexF64, SU2Irrep, InfiniteChain(2); spin=1 // 2);","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"Our initial state should also be SU(2) symmetric. It now becomes apparent why we have to use a two-site periodic state. The physical space carries a half-integer charge and the first tensor maps the first virtual_space ⊗ the physical_space to the second virtual_space. Half-integer virtual charges will therefore map only to integer charges, and vice versa. The staggering thus happens on the virtual level.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"An alternative constructor for the initial state is","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"P = Rep[SU₂](1 // 2 => 1)\nV1 = Rep[SU₂](1 // 2 => 10, 3 // 2 => 5, 5 // 2 => 2)\nV2 = Rep[SU₂](0 => 15, 1 => 10, 2 => 5)\nstate = InfiniteMPS([P, P], [V1, V2]);","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"┌ Warning: Constructing an MPS from tensors that are not full rank\n└ @ MPSKit ~/Projects/Julia/MPSKit.jl/src/states/infinitemps.jl:149\n","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"Even though the bond dimension is higher than in the example without symmetry, convergence is reached much faster:","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"println(dim(V1))\nprintln(dim(V2))\ngroundstate, cache, delta = find_groundstate(state, H2,\n VUMPS(; maxiter=400, tol=1e-12));","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"52\n70\n[ Info: VUMPS init:\tobj = +2.529209601096e-02\terr = 3.8506e-01\n[ Info: VUMPS 1:\tobj = -8.700668137574e-01\terr = 1.2760693513e-01\ttime = 0.09 sec\n┌ Warning: ignoring imaginary component -9.671389572637824e-7 from total weight 1.071431546174058: operator might not be hermitian?\n│ α = 0.5076925045006396 - 9.671389572637824e-7im\n│ β₁ = 0.38537381617811456\n│ β₂ = 0.8612205877788699\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1081642497353856e-6 from total weight 1.9191569889382531: operator might not be hermitian?\n│ α = 1.2769155360134903 - 1.1081642497353856e-6im\n│ β₁ = 0.8612205877788699\n│ β₂ = 1.1449669695072051\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.1190854093148994e-6 from total weight 3.730590304906558: operator might not be hermitian?\n│ α = 2.794800756698454 - 2.1190854093148994e-6im\n│ β₁ = 1.664432597674601\n│ β₂ = 1.8264875803613458\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.3849446146892266e-6 from total weight 4.097529275374596: operator might not be hermitian?\n│ α = 3.177829412143231 - 2.3849446146892266e-6im\n│ β₁ = 1.7562777461027703\n│ β₂ = 1.8991142325852197\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.864978109262819e-7 from total weight 1.1361682375672237: operator might not be hermitian?\n│ α = 0.6796442852991254 - 9.864978109262819e-7im\n│ β₁ = 0.36574221428184467\n│ β₂ = 0.8337832705254361\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2560459516609994e-6 from total weight 2.0188159922504125: operator might not be hermitian?\n│ α = 1.475196807523427 - 1.2560459516609994e-6im\n│ β₁ = 0.8337832705254361\n│ β₂ = 1.09736860144121\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.287798814792349e-6 from total weight 3.131391735738219: operator might not be hermitian?\n│ α = 2.3816372787502273 - 2.287798814792349e-6im\n│ β₁ = 1.398562278073576\n│ β₂ = 1.4756156781022765\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.627322084186091e-6 from total weight 3.4851002789188974: operator might not be hermitian?\n│ α = 2.7576707367226887 - 2.627322084186091e-6im\n│ β₁ = 1.4756156781022765\n│ β₂ = 1.537444123367018\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.7586626591682636e-6 from total weight 3.988678975499865: operator might not be hermitian?\n│ α = 3.369986079025038 - 2.7586626591682636e-6im\n│ β₁ = 1.537444123367018\n│ β₂ = 1.479533495494006\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.576279468168019e-6 from total weight 4.408138403225203: operator might not be hermitian?\n│ α = 3.756862474916753 - 2.576279468168019e-6im\n│ β₁ = 1.479533495494006\n│ β₂ = 1.7687987907774767\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.0838745975609863e-6 from total weight 3.6721874341141185: operator might not be hermitian?\n│ α = 2.9242549058641267 - 2.0838745975609863e-6im\n│ β₁ = 1.4510488349306505\n│ β₂ = 1.6817107585543003\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -3.2011468193795557e-6 from total weight 3.928995034765234: operator might not be hermitian?\n│ α = 3.2218982183839864 - 3.2011468193795557e-6im\n│ β₁ = 1.6817107585543003\n│ β₂ = 1.4927232758071491\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.6483490946991716e-6 from total weight 3.8342135775491344: operator might not be hermitian?\n│ α = 3.147392732501323 - 2.6483490946991716e-6im\n│ β₁ = 1.4927232758071491\n│ β₂ = 1.6021516680753263\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -8.008456815874523e-7 from total weight 1.068648760572627: operator might not be hermitian?\n│ α = 0.49256503829854587 - 8.008456815874523e-7im\n│ β₁ = 0.3861387753335071\n│ β₂ = 0.8661909158509234\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1445368569925613e-6 from total weight 1.9110645467027934: operator might not be hermitian?\n│ α = 1.2679109876128705 - 1.1445368569925613e-6im\n│ β₁ = 0.8661909158509234\n│ β₂ = 1.1376654721186439\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.8545564228642994e-6 from total weight 3.293944443070549: operator might not be hermitian?\n│ α = 2.4420621357903936 - 1.8545564228642994e-6im\n│ β₁ = 1.4944926110182144\n│ β₂ = 1.6287708109438626\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.3486831544836106e-6 from total weight 3.712645223079187: operator might not be hermitian?\n│ α = 2.775675517357043 - 2.3486831544836106e-6im\n│ β₁ = 1.6287708109438626\n│ β₂ = 1.851071478957302\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.5715279290162985e-6 from total weight 4.138742304007041: operator might not be hermitian?\n│ α = 3.244964908413238 - 2.5715279290162985e-6im\n│ β₁ = 1.851071478957302\n│ β₂ = 1.7812706088431347\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.704545960600588e-6 from total weight 4.638773087532732: operator might not be hermitian?\n│ α = 3.888714950195714 - 2.704545960600588e-6im\n│ β₁ = 1.7812706088431347\n│ β₂ = 1.7953235952904407\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.3470771421838996e-6 from total weight 4.105392145218653: operator might not be hermitian?\n│ α = 3.336496533127281 - 2.3470771421838996e-6im\n│ β₁ = 1.7117357192414597\n│ β₂ = 1.670926802083221\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -8.845749970285409e-7 from total weight 1.5036342874312476: operator might not be hermitian?\n│ α = 1.170551214174138 - 8.845749970285409e-7im\n│ β₁ = 0.38496445782055083\n│ β₂ = 0.8617008132458002\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 2:\tobj = -8.856910840126e-01\terr = 7.8578408649e-03\ttime = 0.08 sec\n┌ Warning: ignoring imaginary component 2.7018785862182825e-7 from total weight 0.44194776924492263: operator might not be hermitian?\n│ α = -0.07978677254444026 + 2.7018785862182825e-7im\n│ β₁ = 0.02857112167935202\n│ β₂ = 0.43374600018146076\n└ @ KrylovKit ~/.julia/packages/KrylovKit/Y0zG7/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 3:\tobj = -8.861118311158e-01\terr = 4.0509339869e-03\ttime = 0.05 sec\n[ Info: VUMPS 4:\tobj = -8.862216799517e-01\terr = 2.1307990266e-03\ttime = 0.06 sec\n[ Info: VUMPS 5:\tobj = -8.862597578596e-01\terr = 1.2064832500e-03\ttime = 0.07 sec\n[ Info: VUMPS 6:\tobj = -8.862749304464e-01\terr = 8.5365973329e-04\ttime = 0.09 sec\n[ Info: VUMPS 7:\tobj = -8.862815509334e-01\terr = 6.3063221768e-04\ttime = 0.09 sec\n[ Info: VUMPS 8:\tobj = -8.862847899699e-01\terr = 4.7867144673e-04\ttime = 0.10 sec\n[ Info: VUMPS 9:\tobj = -8.862863646071e-01\terr = 3.8612691378e-04\ttime = 0.13 sec\n[ Info: VUMPS 10:\tobj = -8.862871410116e-01\terr = 3.0291821377e-04\ttime = 0.11 sec\n[ Info: VUMPS 11:\tobj = -8.862875242967e-01\terr = 2.3195751791e-04\ttime = 0.13 sec\n[ Info: VUMPS 12:\tobj = -8.862877135929e-01\terr = 1.7414560667e-04\ttime = 0.16 sec\n[ Info: VUMPS 13:\tobj = -8.862878071048e-01\terr = 1.2883734924e-04\ttime = 0.21 sec\n[ Info: VUMPS 14:\tobj = -8.862878532530e-01\terr = 9.4253044026e-05\ttime = 0.10 sec\n[ Info: VUMPS 15:\tobj = -8.862878759981e-01\terr = 6.8384197821e-05\ttime = 0.10 sec\n[ Info: VUMPS 16:\tobj = -8.862878872034e-01\terr = 4.9321469248e-05\ttime = 0.12 sec\n[ Info: VUMPS 17:\tobj = -8.862878927221e-01\terr = 3.5421334288e-05\ttime = 0.16 sec\n[ Info: VUMPS 18:\tobj = -8.862878954405e-01\terr = 2.5359982562e-05\ttime = 0.14 sec\n[ Info: VUMPS 19:\tobj = -8.862878967805e-01\terr = 1.8115338221e-05\ttime = 0.17 sec\n[ Info: VUMPS 20:\tobj = -8.862878974415e-01\terr = 1.2918474214e-05\ttime = 0.16 sec\n[ Info: VUMPS 21:\tobj = -8.862878977679e-01\terr = 9.2003371054e-06\ttime = 0.17 sec\n[ Info: VUMPS 22:\tobj = -8.862878979292e-01\terr = 6.5462638559e-06\ttime = 0.26 sec\n[ Info: VUMPS 23:\tobj = -8.862878980090e-01\terr = 4.6539903266e-06\ttime = 0.11 sec\n[ Info: VUMPS 24:\tobj = -8.862878980486e-01\terr = 3.3063133163e-06\ttime = 0.14 sec\n[ Info: VUMPS 25:\tobj = -8.862878980681e-01\terr = 2.3475142715e-06\ttime = 0.12 sec\n[ Info: VUMPS 26:\tobj = -8.862878980779e-01\terr = 1.6659191513e-06\ttime = 0.16 sec\n[ Info: VUMPS 27:\tobj = -8.862878980827e-01\terr = 1.1816853804e-06\ttime = 0.13 sec\n[ Info: VUMPS 28:\tobj = -8.862878980851e-01\terr = 8.3791026298e-07\ttime = 0.14 sec\n[ Info: VUMPS 29:\tobj = -8.862878980863e-01\terr = 5.9388578145e-07\ttime = 0.13 sec\n[ Info: VUMPS 30:\tobj = -8.862878980869e-01\terr = 4.2078193645e-07\ttime = 0.13 sec\n[ Info: VUMPS 31:\tobj = -8.862878980871e-01\terr = 2.9801452450e-07\ttime = 0.20 sec\n[ Info: VUMPS 32:\tobj = -8.862878980873e-01\terr = 2.1104589939e-07\ttime = 0.14 sec\n[ Info: VUMPS 33:\tobj = -8.862878980874e-01\terr = 1.4939769241e-07\ttime = 0.10 sec\n[ Info: VUMPS 34:\tobj = -8.862878980874e-01\terr = 1.0573206754e-07\ttime = 0.11 sec\n[ Info: VUMPS 35:\tobj = -8.862878980874e-01\terr = 7.4808317980e-08\ttime = 0.12 sec\n[ Info: VUMPS 36:\tobj = -8.862878980874e-01\terr = 5.2917998892e-08\ttime = 0.10 sec\n[ Info: VUMPS 37:\tobj = -8.862878980874e-01\terr = 3.7429304204e-08\ttime = 0.12 sec\n[ Info: VUMPS 38:\tobj = -8.862878980874e-01\terr = 2.6464141713e-08\ttime = 0.13 sec\n[ Info: VUMPS 39:\tobj = -8.862878980874e-01\terr = 1.8734153006e-08\ttime = 0.11 sec\n[ Info: VUMPS 40:\tobj = -8.862878980874e-01\terr = 1.3233756785e-08\ttime = 0.10 sec\n[ Info: VUMPS 41:\tobj = -8.862878980874e-01\terr = 9.3267037924e-09\ttime = 0.09 sec\n[ Info: VUMPS 42:\tobj = -8.862878980874e-01\terr = 6.6095283192e-09\ttime = 0.18 sec\n[ Info: VUMPS 43:\tobj = -8.862878980874e-01\terr = 4.6673057032e-09\ttime = 0.08 sec\n[ Info: VUMPS 44:\tobj = -8.862878980874e-01\terr = 3.2968234716e-09\ttime = 0.07 sec\n[ Info: VUMPS 45:\tobj = -8.862878980874e-01\terr = 2.3386800405e-09\ttime = 0.07 sec\n[ Info: VUMPS 46:\tobj = -8.862878980874e-01\terr = 1.6622890895e-09\ttime = 0.07 sec\n[ Info: VUMPS 47:\tobj = -8.862878980874e-01\terr = 1.1730161705e-09\ttime = 0.09 sec\n[ Info: VUMPS 48:\tobj = -8.862878980874e-01\terr = 8.2342105674e-10\ttime = 0.10 sec\n[ Info: VUMPS 49:\tobj = -8.862878980874e-01\terr = 5.8767379287e-10\ttime = 0.10 sec\n[ Info: VUMPS 50:\tobj = -8.862878980874e-01\terr = 4.3377628724e-10\ttime = 0.08 sec\n[ Info: VUMPS 51:\tobj = -8.862878980874e-01\terr = 2.9148815706e-10\ttime = 0.06 sec\n[ Info: VUMPS 52:\tobj = -8.862878980874e-01\terr = 2.3530568367e-10\ttime = 0.08 sec\n[ Info: VUMPS 53:\tobj = -8.862878980874e-01\terr = 1.9738411426e-10\ttime = 0.08 sec\n[ Info: VUMPS 54:\tobj = -8.862878980874e-01\terr = 1.6903098032e-10\ttime = 0.06 sec\n[ Info: VUMPS 55:\tobj = -8.862878980874e-01\terr = 1.0479313324e-10\ttime = 0.07 sec\n[ Info: VUMPS 56:\tobj = -8.862878980874e-01\terr = 1.1793027010e-10\ttime = 0.05 sec\n[ Info: VUMPS 57:\tobj = -8.862878980874e-01\terr = 8.7877060091e-11\ttime = 0.05 sec\n[ Info: VUMPS 58:\tobj = -8.862878980874e-01\terr = 7.7838852527e-11\ttime = 0.05 sec\n[ Info: VUMPS 59:\tobj = -8.862878980874e-01\terr = 7.7808315661e-11\ttime = 0.04 sec\n[ Info: VUMPS 60:\tobj = -8.862878980874e-01\terr = 5.9890246741e-11\ttime = 0.05 sec\n[ Info: VUMPS 61:\tobj = -8.862878980874e-01\terr = 5.9599058037e-11\ttime = 0.03 sec\n[ Info: VUMPS 62:\tobj = -8.862878980874e-01\terr = 8.2169329602e-11\ttime = 0.06 sec\n[ Info: VUMPS 63:\tobj = -8.862878980874e-01\terr = 1.9584055882e-10\ttime = 0.18 sec\n[ Info: VUMPS 64:\tobj = -8.862878980874e-01\terr = 1.3190704587e-10\ttime = 0.08 sec\n[ Info: VUMPS 65:\tobj = -8.862878980874e-01\terr = 9.4587810726e-11\ttime = 0.05 sec\n[ Info: VUMPS 66:\tobj = -8.862878980874e-01\terr = 7.6642342387e-11\ttime = 0.06 sec\n[ Info: VUMPS 67:\tobj = -8.862878980874e-01\terr = 7.6453977892e-11\ttime = 0.03 sec\n[ Info: VUMPS 68:\tobj = -8.862878980874e-01\terr = 1.6135931629e-10\ttime = 0.03 sec\n[ Info: VUMPS 69:\tobj = -8.862878980874e-01\terr = 4.8613631788e-11\ttime = 0.04 sec\n[ Info: VUMPS 70:\tobj = -8.862878980874e-01\terr = 4.8715755949e-11\ttime = 0.03 sec\n[ Info: VUMPS 71:\tobj = -8.862878980874e-01\terr = 4.9417123546e-11\ttime = 0.03 sec\n[ Info: VUMPS 72:\tobj = -8.862878980874e-01\terr = 4.8238297283e-11\ttime = 0.03 sec\n[ Info: VUMPS 73:\tobj = -8.862878980874e-01\terr = 4.9499679981e-11\ttime = 0.03 sec\n[ Info: VUMPS 74:\tobj = -8.862878980874e-01\terr = 5.0219935378e-11\ttime = 0.03 sec\n[ Info: VUMPS 75:\tobj = -8.862878980874e-01\terr = 4.8350451541e-11\ttime = 0.03 sec\n[ Info: VUMPS 76:\tobj = -8.862878980874e-01\terr = 4.8479938582e-11\ttime = 0.03 sec\n[ Info: VUMPS 77:\tobj = -8.862878980874e-01\terr = 4.8492803216e-11\ttime = 0.03 sec\n[ Info: VUMPS 78:\tobj = -8.862878980874e-01\terr = 4.8444269610e-11\ttime = 0.03 sec\n[ Info: VUMPS 79:\tobj = -8.862878980874e-01\terr = 5.2381270902e-11\ttime = 0.03 sec\n[ Info: VUMPS 80:\tobj = -8.862878980874e-01\terr = 4.8563550538e-11\ttime = 0.03 sec\n[ Info: VUMPS 81:\tobj = -8.862878980874e-01\terr = 5.0827468520e-11\ttime = 0.03 sec\n[ Info: VUMPS 82:\tobj = -8.862878980874e-01\terr = 1.1400600324e-10\ttime = 0.06 sec\n[ Info: VUMPS 83:\tobj = -8.862878980874e-01\terr = 1.9067343860e-10\ttime = 0.05 sec\n[ Info: VUMPS 84:\tobj = -8.862878980874e-01\terr = 1.6689382966e-10\ttime = 0.05 sec\n[ Info: VUMPS 85:\tobj = -8.862878980874e-01\terr = 9.3634468049e-11\ttime = 0.07 sec\n[ Info: VUMPS 86:\tobj = -8.862878980874e-01\terr = 5.4612311876e-11\ttime = 0.04 sec\n[ Info: VUMPS 87:\tobj = -8.862878980874e-01\terr = 5.9920739880e-11\ttime = 0.03 sec\n[ Info: VUMPS 88:\tobj = -8.862878980874e-01\terr = 5.5300426287e-11\ttime = 0.03 sec\n[ Info: VUMPS 89:\tobj = -8.862878980874e-01\terr = 5.4697291743e-11\ttime = 0.04 sec\n[ Info: VUMPS 90:\tobj = -8.862878980874e-01\terr = 9.0893602359e-11\ttime = 0.06 sec\n[ Info: VUMPS 91:\tobj = -8.862878980874e-01\terr = 9.1263591308e-11\ttime = 0.07 sec\n[ Info: VUMPS 92:\tobj = -8.862878980874e-01\terr = 8.4998690637e-11\ttime = 0.06 sec\n[ Info: VUMPS 93:\tobj = -8.862878980874e-01\terr = 1.1553836703e-10\ttime = 0.07 sec\n[ Info: VUMPS 94:\tobj = -8.862878980874e-01\terr = 9.6747893284e-11\ttime = 0.07 sec\n[ Info: VUMPS 95:\tobj = -8.862878980874e-01\terr = 1.1376915191e-10\ttime = 0.05 sec\n[ Info: VUMPS 96:\tobj = -8.862878980874e-01\terr = 8.4905437150e-11\ttime = 0.05 sec\n[ Info: VUMPS 97:\tobj = -8.862878980874e-01\terr = 1.3602624799e-10\ttime = 0.05 sec\n[ Info: VUMPS 98:\tobj = -8.862878980874e-01\terr = 3.8537544337e-11\ttime = 0.05 sec\n[ Info: VUMPS 99:\tobj = -8.862878980874e-01\terr = 3.8926546453e-11\ttime = 0.03 sec\n[ Info: VUMPS 100:\tobj = -8.862878980874e-01\terr = 3.9274493760e-11\ttime = 0.03 sec\n[ Info: VUMPS 101:\tobj = -8.862878980874e-01\terr = 3.8635555369e-11\ttime = 0.03 sec\n[ Info: VUMPS 102:\tobj = -8.862878980874e-01\terr = 3.8807575779e-11\ttime = 0.03 sec\n[ Info: VUMPS 103:\tobj = -8.862878980874e-01\terr = 3.8568495332e-11\ttime = 0.03 sec\n[ Info: VUMPS 104:\tobj = -8.862878980874e-01\terr = 3.8509242746e-11\ttime = 0.03 sec\n[ Info: VUMPS 105:\tobj = -8.862878980874e-01\terr = 3.8135791403e-11\ttime = 0.03 sec\n[ Info: VUMPS 106:\tobj = -8.862878980874e-01\terr = 3.8362355119e-11\ttime = 0.03 sec\n[ Info: VUMPS 107:\tobj = -8.862878980874e-01\terr = 3.9744912662e-11\ttime = 0.03 sec\n[ Info: VUMPS 108:\tobj = -8.862878980874e-01\terr = 3.8554727985e-11\ttime = 0.03 sec\n[ Info: VUMPS 109:\tobj = -8.862878980874e-01\terr = 3.8695253586e-11\ttime = 0.03 sec\n[ Info: VUMPS 110:\tobj = -8.862878980874e-01\terr = 3.8520588629e-11\ttime = 0.03 sec\n[ Info: VUMPS 111:\tobj = -8.862878980874e-01\terr = 3.8541288460e-11\ttime = 0.03 sec\n[ Info: VUMPS 112:\tobj = -8.862878980874e-01\terr = 3.8249357381e-11\ttime = 0.03 sec\n[ Info: VUMPS 113:\tobj = -8.862878980874e-01\terr = 3.8284823677e-11\ttime = 0.03 sec\n[ Info: VUMPS 114:\tobj = -8.862878980874e-01\terr = 4.0318445321e-11\ttime = 0.03 sec\n[ Info: VUMPS 115:\tobj = -8.862878980874e-01\terr = 3.8438479352e-11\ttime = 0.22 sec\n[ Info: VUMPS 116:\tobj = -8.862878980874e-01\terr = 3.8957255842e-11\ttime = 0.03 sec\n[ Info: VUMPS 117:\tobj = -8.862878980874e-01\terr = 3.8351906108e-11\ttime = 0.03 sec\n[ Info: VUMPS 118:\tobj = -8.862878980874e-01\terr = 8.1169575478e-11\ttime = 0.05 sec\n[ Info: VUMPS 119:\tobj = -8.862878980874e-01\terr = 1.4558819323e-10\ttime = 0.03 sec\n[ Info: VUMPS 120:\tobj = -8.862878980874e-01\terr = 7.2695848580e-11\ttime = 0.03 sec\n[ Info: VUMPS 121:\tobj = -8.862878980874e-01\terr = 6.3820080934e-11\ttime = 0.04 sec\n[ Info: VUMPS 122:\tobj = -8.862878980874e-01\terr = 6.4468448875e-11\ttime = 0.03 sec\n[ Info: VUMPS 123:\tobj = -8.862878980874e-01\terr = 3.5386680828e-10\ttime = 0.05 sec\n[ Info: VUMPS 124:\tobj = -8.862878980874e-01\terr = 1.0528805822e-10\ttime = 0.09 sec\n[ Info: VUMPS 125:\tobj = -8.862878980874e-01\terr = 1.0096381963e-10\ttime = 0.07 sec\n[ Info: VUMPS 126:\tobj = -8.862878980874e-01\terr = 8.0559599886e-11\ttime = 0.04 sec\n[ Info: VUMPS 127:\tobj = -8.862878980874e-01\terr = 1.0983328944e-10\ttime = 0.05 sec\n[ Info: VUMPS 128:\tobj = -8.862878980874e-01\terr = 9.6899927046e-11\ttime = 0.06 sec\n[ Info: VUMPS 129:\tobj = -8.862878980874e-01\terr = 9.1928629389e-11\ttime = 0.04 sec\n[ Info: VUMPS 130:\tobj = -8.862878980874e-01\terr = 4.9719194648e-11\ttime = 0.04 sec\n[ Info: VUMPS 131:\tobj = -8.862878980874e-01\terr = 4.2945823596e-11\ttime = 0.03 sec\n[ Info: VUMPS 132:\tobj = -8.862878980874e-01\terr = 5.4051247432e-10\ttime = 0.06 sec\n[ Info: VUMPS 133:\tobj = -8.862878980874e-01\terr = 1.4364385018e-10\ttime = 0.07 sec\n[ Info: VUMPS 134:\tobj = -8.862878980874e-01\terr = 8.8389549749e-11\ttime = 0.04 sec\n[ Info: VUMPS 135:\tobj = -8.862878980874e-01\terr = 8.7770612654e-11\ttime = 0.05 sec\n[ Info: VUMPS 136:\tobj = -8.862878980874e-01\terr = 1.0755372350e-10\ttime = 0.07 sec\n[ Info: VUMPS 137:\tobj = -8.862878980874e-01\terr = 9.1157795643e-11\ttime = 0.07 sec\n[ Info: VUMPS 138:\tobj = -8.862878980874e-01\terr = 1.2395993089e-10\ttime = 0.04 sec\n[ Info: VUMPS 139:\tobj = -8.862878980874e-01\terr = 5.8947156696e-11\ttime = 0.03 sec\n[ Info: VUMPS 140:\tobj = -8.862878980874e-01\terr = 8.3233578587e-10\ttime = 0.05 sec\n[ Info: VUMPS 141:\tobj = -8.862878980874e-01\terr = 1.1778486865e-10\ttime = 0.09 sec\n[ Info: VUMPS 142:\tobj = -8.862878980874e-01\terr = 7.4548842297e-11\ttime = 0.04 sec\n[ Info: VUMPS 143:\tobj = -8.862878980874e-01\terr = 7.7244247108e-11\ttime = 0.04 sec\n[ Info: VUMPS 144:\tobj = -8.862878980874e-01\terr = 7.7255861317e-11\ttime = 0.03 sec\n[ Info: VUMPS 145:\tobj = -8.862878980874e-01\terr = 7.7791688138e-11\ttime = 0.03 sec\n[ Info: VUMPS 146:\tobj = -8.862878980874e-01\terr = 1.8573962248e-10\ttime = 0.04 sec\n[ Info: VUMPS 147:\tobj = -8.862878980874e-01\terr = 7.3035341919e-11\ttime = 0.04 sec\n[ Info: VUMPS 148:\tobj = -8.862878980874e-01\terr = 1.0634890052e-10\ttime = 0.04 sec\n[ Info: VUMPS 149:\tobj = -8.862878980874e-01\terr = 4.7521976517e-11\ttime = 0.04 sec\n[ Info: VUMPS 150:\tobj = -8.862878980874e-01\terr = 4.8276089374e-11\ttime = 0.03 sec\n[ Info: VUMPS 151:\tobj = -8.862878980874e-01\terr = 4.7024688428e-11\ttime = 0.17 sec\n[ Info: VUMPS 152:\tobj = -8.862878980874e-01\terr = 4.3748964822e-10\ttime = 0.04 sec\n[ Info: VUMPS 153:\tobj = -8.862878980874e-01\terr = 9.2704143948e-11\ttime = 0.06 sec\n[ Info: VUMPS 154:\tobj = -8.862878980874e-01\terr = 1.3725345226e-10\ttime = 0.05 sec\n[ Info: VUMPS 155:\tobj = -8.862878980874e-01\terr = 7.8221525663e-11\ttime = 0.05 sec\n[ Info: VUMPS 156:\tobj = -8.862878980874e-01\terr = 1.5274244678e-10\ttime = 0.03 sec\n[ Info: VUMPS 157:\tobj = -8.862878980874e-01\terr = 5.2021209796e-11\ttime = 0.04 sec\n[ Info: VUMPS 158:\tobj = -8.862878980874e-01\terr = 6.4744543971e-11\ttime = 0.03 sec\n[ Info: VUMPS 159:\tobj = -8.862878980874e-01\terr = 9.3681465642e-11\ttime = 0.06 sec\n[ Info: VUMPS 160:\tobj = -8.862878980874e-01\terr = 7.0751354204e-11\ttime = 0.04 sec\n[ Info: VUMPS 161:\tobj = -8.862878980874e-01\terr = 1.1351374411e-10\ttime = 0.04 sec\n[ Info: VUMPS 162:\tobj = -8.862878980874e-01\terr = 8.1558260001e-11\ttime = 0.05 sec\n[ Info: VUMPS 163:\tobj = -8.862878980874e-01\terr = 1.1864028950e-10\ttime = 0.03 sec\n[ Info: VUMPS 164:\tobj = -8.862878980874e-01\terr = 4.4746986769e-11\ttime = 0.03 sec\n[ Info: VUMPS 165:\tobj = -8.862878980874e-01\terr = 4.3438831097e-11\ttime = 0.03 sec\n[ Info: VUMPS 166:\tobj = -8.862878980874e-01\terr = 4.1460085149e-11\ttime = 0.03 sec\n[ Info: VUMPS 167:\tobj = -8.862878980874e-01\terr = 4.4618208376e-11\ttime = 0.03 sec\n[ Info: VUMPS 168:\tobj = -8.862878980874e-01\terr = 4.2337696098e-11\ttime = 0.03 sec\n[ Info: VUMPS 169:\tobj = -8.862878980874e-01\terr = 4.1978118014e-11\ttime = 0.03 sec\n[ Info: VUMPS 170:\tobj = -8.862878980874e-01\terr = 4.2214168317e-11\ttime = 0.03 sec\n[ Info: VUMPS 171:\tobj = -8.862878980874e-01\terr = 4.1785244916e-11\ttime = 0.03 sec\n[ Info: VUMPS 172:\tobj = -8.862878980874e-01\terr = 4.2141386221e-11\ttime = 0.04 sec\n[ Info: VUMPS 173:\tobj = -8.862878980874e-01\terr = 4.1732296021e-11\ttime = 0.03 sec\n[ Info: VUMPS 174:\tobj = -8.862878980874e-01\terr = 4.2256117546e-11\ttime = 0.04 sec\n[ Info: VUMPS 175:\tobj = -8.862878980874e-01\terr = 4.1618346731e-11\ttime = 0.04 sec\n[ Info: VUMPS 176:\tobj = -8.862878980874e-01\terr = 4.2266344901e-11\ttime = 0.04 sec\n[ Info: VUMPS 177:\tobj = -8.862878980874e-01\terr = 9.8734315013e-11\ttime = 0.07 sec\n[ Info: VUMPS 178:\tobj = -8.862878980874e-01\terr = 7.4589677259e-11\ttime = 0.07 sec\n[ Info: VUMPS 179:\tobj = -8.862878980874e-01\terr = 7.9375086697e-11\ttime = 0.03 sec\n[ Info: VUMPS 180:\tobj = -8.862878980874e-01\terr = 1.7247929023e-10\ttime = 0.07 sec\n[ Info: VUMPS 181:\tobj = -8.862878980874e-01\terr = 8.6039641730e-11\ttime = 0.08 sec\n[ Info: VUMPS 182:\tobj = -8.862878980874e-01\terr = 1.1202139192e-10\ttime = 0.05 sec\n[ Info: VUMPS 183:\tobj = -8.862878980874e-01\terr = 8.0254748319e-11\ttime = 0.04 sec\n[ Info: VUMPS 184:\tobj = -8.862878980874e-01\terr = 8.0049698591e-11\ttime = 0.03 sec\n[ Info: VUMPS 185:\tobj = -8.862878980874e-01\terr = 8.0748438983e-11\ttime = 0.03 sec\n[ Info: VUMPS 186:\tobj = -8.862878980874e-01\terr = 1.7758301363e-10\ttime = 0.04 sec\n[ Info: VUMPS 187:\tobj = -8.862878980874e-01\terr = 7.9041173850e-11\ttime = 0.05 sec\n[ Info: VUMPS 188:\tobj = -8.862878980874e-01\terr = 4.2753988414e-10\ttime = 0.06 sec\n[ Info: VUMPS 189:\tobj = -8.862878980874e-01\terr = 1.4598945632e-10\ttime = 0.10 sec\n[ Info: VUMPS 190:\tobj = -8.862878980874e-01\terr = 1.7166605554e-10\ttime = 0.07 sec\n[ Info: VUMPS 191:\tobj = -8.862878980874e-01\terr = 1.2776212768e-10\ttime = 0.23 sec\n[ Info: VUMPS 192:\tobj = -8.862878980874e-01\terr = 8.7435361404e-11\ttime = 0.06 sec\n[ Info: VUMPS 193:\tobj = -8.862878980874e-01\terr = 1.6452219360e-10\ttime = 0.04 sec\n[ Info: VUMPS 194:\tobj = -8.862878980874e-01\terr = 4.9424927706e-11\ttime = 0.04 sec\n[ Info: VUMPS 195:\tobj = -8.862878980874e-01\terr = 1.6118096258e-10\ttime = 0.04 sec\n[ Info: VUMPS 196:\tobj = -8.862878980874e-01\terr = 1.3946342996e-10\ttime = 0.05 sec\n[ Info: VUMPS 197:\tobj = -8.862878980874e-01\terr = 1.1171007390e-10\ttime = 0.05 sec\n[ Info: VUMPS 198:\tobj = -8.862878980874e-01\terr = 1.2122617840e-10\ttime = 0.05 sec\n[ Info: VUMPS 199:\tobj = -8.862878980874e-01\terr = 9.6244952949e-11\ttime = 0.05 sec\n[ Info: VUMPS 200:\tobj = -8.862878980874e-01\terr = 8.0799742424e-11\ttime = 0.06 sec\n[ Info: VUMPS 201:\tobj = -8.862878980874e-01\terr = 5.1118445166e-11\ttime = 0.04 sec\n[ Info: VUMPS 202:\tobj = -8.862878980874e-01\terr = 5.1326558160e-11\ttime = 0.03 sec\n[ Info: VUMPS 203:\tobj = -8.862878980874e-01\terr = 5.0993858963e-11\ttime = 0.03 sec\n[ Info: VUMPS 204:\tobj = -8.862878980874e-01\terr = 5.1037654449e-11\ttime = 0.03 sec\n[ Info: VUMPS 205:\tobj = -8.862878980874e-01\terr = 5.3455271604e-11\ttime = 0.03 sec\n[ Info: VUMPS 206:\tobj = -8.862878980874e-01\terr = 3.8366163414e-10\ttime = 0.06 sec\n[ Info: VUMPS 207:\tobj = -8.862878980874e-01\terr = 1.4898391762e-10\ttime = 0.10 sec\n[ Info: VUMPS 208:\tobj = -8.862878980874e-01\terr = 1.0419203578e-10\ttime = 0.06 sec\n[ Info: VUMPS 209:\tobj = -8.862878980874e-01\terr = 1.3088789757e-10\ttime = 0.06 sec\n[ Info: VUMPS 210:\tobj = -8.862878980874e-01\terr = 7.8891392613e-11\ttime = 0.07 sec\n[ Info: VUMPS 211:\tobj = -8.862878980874e-01\terr = 1.0527138595e-10\ttime = 0.06 sec\n[ Info: VUMPS 212:\tobj = -8.862878980874e-01\terr = 1.6479041684e-10\ttime = 0.05 sec\n[ Info: VUMPS 213:\tobj = -8.862878980874e-01\terr = 8.2540083159e-11\ttime = 0.06 sec\n[ Info: VUMPS 214:\tobj = -8.862878980874e-01\terr = 9.7164188376e-11\ttime = 0.04 sec\n[ Info: VUMPS 215:\tobj = -8.862878980874e-01\terr = 1.3187308825e-10\ttime = 0.05 sec\n[ Info: VUMPS 216:\tobj = -8.862878980874e-01\terr = 1.3425752903e-10\ttime = 0.06 sec\n[ Info: VUMPS 217:\tobj = -8.862878980874e-01\terr = 9.7020802238e-11\ttime = 0.05 sec\n[ Info: VUMPS 218:\tobj = -8.862878980874e-01\terr = 1.3853989912e-10\ttime = 0.05 sec\n[ Info: VUMPS 219:\tobj = -8.862878980874e-01\terr = 7.8371664837e-11\ttime = 0.05 sec\n[ Info: VUMPS 220:\tobj = -8.862878980874e-01\terr = 9.2483636476e-11\ttime = 0.18 sec\n[ Info: VUMPS 221:\tobj = -8.862878980874e-01\terr = 1.6661668775e-10\ttime = 0.03 sec\n[ Info: VUMPS 222:\tobj = -8.862878980874e-01\terr = 5.5364490079e-11\ttime = 0.03 sec\n[ Info: VUMPS 223:\tobj = -8.862878980874e-01\terr = 5.5793836675e-11\ttime = 0.02 sec\n[ Info: VUMPS 224:\tobj = -8.862878980874e-01\terr = 5.9912710624e-11\ttime = 0.03 sec\n[ Info: VUMPS 225:\tobj = -8.862878980874e-01\terr = 5.5433095161e-11\ttime = 0.03 sec\n[ Info: VUMPS 226:\tobj = -8.862878980874e-01\terr = 5.5259932758e-11\ttime = 0.03 sec\n[ Info: VUMPS 227:\tobj = -8.862878980874e-01\terr = 5.5334515585e-11\ttime = 0.03 sec\n[ Info: VUMPS 228:\tobj = -8.862878980874e-01\terr = 5.5367265928e-11\ttime = 0.03 sec\n[ Info: VUMPS 229:\tobj = -8.862878980874e-01\terr = 5.5669228209e-11\ttime = 0.03 sec\n[ Info: VUMPS 230:\tobj = -8.862878980874e-01\terr = 1.2870203660e-10\ttime = 0.06 sec\n[ Info: VUMPS 231:\tobj = -8.862878980874e-01\terr = 9.5902953804e-11\ttime = 0.05 sec\n[ Info: VUMPS 232:\tobj = -8.862878980874e-01\terr = 8.2657443795e-11\ttime = 0.04 sec\n[ Info: VUMPS 233:\tobj = -8.862878980874e-01\terr = 1.1202671025e-10\ttime = 0.03 sec\n[ Info: VUMPS 234:\tobj = -8.862878980874e-01\terr = 9.9921378101e-11\ttime = 0.03 sec\n[ Info: VUMPS 235:\tobj = -8.862878980874e-01\terr = 5.2966240423e-11\ttime = 0.03 sec\n[ Info: VUMPS 236:\tobj = -8.862878980874e-01\terr = 5.3006366140e-11\ttime = 0.03 sec\n[ Info: VUMPS 237:\tobj = -8.862878980874e-01\terr = 5.4969988490e-11\ttime = 0.03 sec\n[ Info: VUMPS 238:\tobj = -8.862878980874e-01\terr = 5.3036937147e-11\ttime = 0.03 sec\n[ Info: VUMPS 239:\tobj = -8.862878980874e-01\terr = 5.2974854628e-11\ttime = 0.03 sec\n[ Info: VUMPS 240:\tobj = -8.862878980874e-01\terr = 5.3066412887e-11\ttime = 0.03 sec\n[ Info: VUMPS 241:\tobj = -8.862878980874e-01\terr = 5.2897434286e-11\ttime = 0.03 sec\n[ Info: VUMPS 242:\tobj = -8.862878980874e-01\terr = 5.2813844342e-11\ttime = 0.03 sec\n[ Info: VUMPS 243:\tobj = -8.862878980874e-01\terr = 5.2817999691e-11\ttime = 0.03 sec\n[ Info: VUMPS 244:\tobj = -8.862878980874e-01\terr = 5.4379547470e-11\ttime = 0.03 sec\n[ Info: VUMPS 245:\tobj = -8.862878980874e-01\terr = 5.2951047463e-11\ttime = 0.03 sec\n[ Info: VUMPS 246:\tobj = -8.862878980874e-01\terr = 5.2946313572e-11\ttime = 0.03 sec\n[ Info: VUMPS 247:\tobj = -8.862878980874e-01\terr = 5.2826255725e-11\ttime = 0.03 sec\n[ Info: VUMPS 248:\tobj = -8.862878980874e-01\terr = 5.2832477486e-11\ttime = 0.03 sec\n[ Info: VUMPS 249:\tobj = -8.862878980874e-01\terr = 5.2853933154e-11\ttime = 0.03 sec\n[ Info: VUMPS 250:\tobj = -8.862878980874e-01\terr = 5.2941505326e-11\ttime = 0.03 sec\n[ Info: VUMPS 251:\tobj = -8.862878980874e-01\terr = 5.3204273831e-11\ttime = 0.03 sec\n[ Info: VUMPS 252:\tobj = -8.862878980874e-01\terr = 7.1352315398e-11\ttime = 0.05 sec\n[ Info: VUMPS 253:\tobj = -8.862878980874e-01\terr = 7.2069779014e-11\ttime = 0.03 sec\n[ Info: VUMPS 254:\tobj = -8.862878980874e-01\terr = 7.1435783262e-11\ttime = 0.03 sec\n[ Info: VUMPS 255:\tobj = -8.862878980874e-01\terr = 2.6540427189e-10\ttime = 0.05 sec\n[ Info: VUMPS 256:\tobj = -8.862878980874e-01\terr = 1.2459100212e-10\ttime = 0.08 sec\n[ Info: VUMPS 257:\tobj = -8.862878980874e-01\terr = 7.9535019000e-11\ttime = 0.05 sec\n[ Info: VUMPS 258:\tobj = -8.862878980874e-01\terr = 9.5195176352e-11\ttime = 0.05 sec\n[ Info: VUMPS 259:\tobj = -8.862878980874e-01\terr = 9.2004952435e-11\ttime = 0.05 sec\n[ Info: VUMPS 260:\tobj = -8.862878980874e-01\terr = 9.2983561462e-11\ttime = 0.04 sec\n[ Info: VUMPS 261:\tobj = -8.862878980874e-01\terr = 8.3117224581e-11\ttime = 0.05 sec\n[ Info: VUMPS 262:\tobj = -8.862878980874e-01\terr = 1.5819106604e-10\ttime = 0.04 sec\n[ Info: VUMPS 263:\tobj = -8.862878980874e-01\terr = 8.4087291620e-11\ttime = 0.04 sec\n[ Info: VUMPS 264:\tobj = -8.862878980874e-01\terr = 1.0037148070e-10\ttime = 0.04 sec\n[ Info: VUMPS 265:\tobj = -8.862878980874e-01\terr = 1.0422725516e-10\ttime = 0.06 sec\n[ Info: VUMPS 266:\tobj = -8.862878980874e-01\terr = 1.1122581785e-10\ttime = 0.04 sec\n[ Info: VUMPS 267:\tobj = -8.862878980874e-01\terr = 5.5430916499e-11\ttime = 0.04 sec\n[ Info: VUMPS 268:\tobj = -8.862878980874e-01\terr = 5.8977721798e-11\ttime = 0.03 sec\n[ Info: VUMPS 269:\tobj = -8.862878980874e-01\terr = 5.5407226961e-11\ttime = 0.03 sec\n[ Info: VUMPS 270:\tobj = -8.862878980874e-01\terr = 5.5421359078e-11\ttime = 0.21 sec\n[ Info: VUMPS 271:\tobj = -8.862878980874e-01\terr = 5.5461650973e-11\ttime = 0.03 sec\n[ Info: VUMPS 272:\tobj = -8.862878980874e-01\terr = 5.5516068411e-11\ttime = 0.03 sec\n[ Info: VUMPS 273:\tobj = -8.862878980874e-01\terr = 5.5301390961e-11\ttime = 0.03 sec\n[ Info: VUMPS 274:\tobj = -8.862878980874e-01\terr = 5.5628679726e-11\ttime = 0.03 sec\n[ Info: VUMPS 275:\tobj = -8.862878980874e-01\terr = 5.7142294401e-11\ttime = 0.03 sec\n[ Info: VUMPS 276:\tobj = -8.862878980874e-01\terr = 9.1958955056e-11\ttime = 0.05 sec\n[ Info: VUMPS 277:\tobj = -8.862878980874e-01\terr = 1.6568749384e-10\ttime = 0.04 sec\n[ Info: VUMPS 278:\tobj = -8.862878980874e-01\terr = 6.6761715141e-11\ttime = 0.04 sec\n[ Info: VUMPS 279:\tobj = -8.862878980874e-01\terr = 7.0094294787e-11\ttime = 0.03 sec\n[ Info: VUMPS 280:\tobj = -8.862878980874e-01\terr = 6.5066113456e-11\ttime = 0.03 sec\n[ Info: VUMPS 281:\tobj = -8.862878980874e-01\terr = 6.5187520477e-11\ttime = 0.03 sec\n[ Info: VUMPS 282:\tobj = -8.862878980874e-01\terr = 6.5033651663e-11\ttime = 0.03 sec\n[ Info: VUMPS 283:\tobj = -8.862878980874e-01\terr = 6.4922953860e-11\ttime = 0.03 sec\n[ Info: VUMPS 284:\tobj = -8.862878980874e-01\terr = 6.7560788576e-11\ttime = 0.03 sec\n[ Info: VUMPS 285:\tobj = -8.862878980874e-01\terr = 6.5202786842e-11\ttime = 0.03 sec\n[ Info: VUMPS 286:\tobj = -8.862878980874e-01\terr = 6.4740890521e-11\ttime = 0.03 sec\n[ Info: VUMPS 287:\tobj = -8.862878980874e-01\terr = 6.4684719121e-11\ttime = 0.03 sec\n[ Info: VUMPS 288:\tobj = -8.862878980874e-01\terr = 6.8395714074e-11\ttime = 0.03 sec\n[ Info: VUMPS 289:\tobj = -8.862878980874e-01\terr = 6.5175379613e-11\ttime = 0.03 sec\n[ Info: VUMPS 290:\tobj = -8.862878980874e-01\terr = 6.5151302835e-11\ttime = 0.03 sec\n[ Info: VUMPS 291:\tobj = -8.862878980874e-01\terr = 8.9918749464e-10\ttime = 0.04 sec\n[ Info: VUMPS 292:\tobj = -8.862878980874e-01\terr = 1.3012580604e-10\ttime = 0.07 sec\n[ Info: VUMPS 293:\tobj = -8.862878980874e-01\terr = 1.3272650327e-10\ttime = 0.06 sec\n[ Info: VUMPS 294:\tobj = -8.862878980874e-01\terr = 1.1097892363e-10\ttime = 0.05 sec\n[ Info: VUMPS 295:\tobj = -8.862878980874e-01\terr = 1.1846768600e-10\ttime = 0.05 sec\n[ Info: VUMPS 296:\tobj = -8.862878980874e-01\terr = 9.8873851293e-11\ttime = 0.06 sec\n[ Info: VUMPS 297:\tobj = -8.862878980874e-01\terr = 8.6754908504e-11\ttime = 0.05 sec\n[ Info: VUMPS 298:\tobj = -8.862878980874e-01\terr = 1.8386713998e-10\ttime = 0.04 sec\n[ Info: VUMPS 299:\tobj = -8.862878980874e-01\terr = 4.9214682549e-11\ttime = 0.04 sec\n[ Info: VUMPS 300:\tobj = -8.862878980874e-01\terr = 5.1220666282e-11\ttime = 0.03 sec\n[ Info: VUMPS 301:\tobj = -8.862878980874e-01\terr = 4.9294368720e-11\ttime = 0.03 sec\n[ Info: VUMPS 302:\tobj = -8.862878980874e-01\terr = 4.9394454081e-11\ttime = 0.04 sec\n[ Info: VUMPS 303:\tobj = -8.862878980874e-01\terr = 5.0050931411e-11\ttime = 0.04 sec\n[ Info: VUMPS 304:\tobj = -8.862878980874e-01\terr = 4.9485290287e-11\ttime = 0.04 sec\n[ Info: VUMPS 305:\tobj = -8.862878980874e-01\terr = 4.9485117322e-11\ttime = 0.05 sec\n[ Info: VUMPS 306:\tobj = -8.862878980874e-01\terr = 4.9400562584e-11\ttime = 0.04 sec\n[ Info: VUMPS 307:\tobj = -8.862878980874e-01\terr = 8.0370473935e-11\ttime = 0.08 sec\n[ Info: VUMPS 308:\tobj = -8.862878980874e-01\terr = 1.0500194811e-10\ttime = 0.08 sec\n[ Info: VUMPS 309:\tobj = -8.862878980874e-01\terr = 7.8444943070e-11\ttime = 0.07 sec\n[ Info: VUMPS 310:\tobj = -8.862878980874e-01\terr = 8.9319276364e-11\ttime = 0.06 sec\n[ Info: VUMPS 311:\tobj = -8.862878980874e-01\terr = 5.9033763479e-11\ttime = 0.05 sec\n[ Info: VUMPS 312:\tobj = -8.862878980874e-01\terr = 8.0174422677e-11\ttime = 0.07 sec\n[ Info: VUMPS 313:\tobj = -8.862878980874e-01\terr = 8.0105274577e-11\ttime = 0.04 sec\n[ Info: VUMPS 314:\tobj = -8.862878980874e-01\terr = 7.9879071897e-11\ttime = 0.04 sec\n[ Info: VUMPS 315:\tobj = -8.862878980874e-01\terr = 6.7914930086e-11\ttime = 0.06 sec\n[ Info: VUMPS 316:\tobj = -8.862878980874e-01\terr = 6.7644805100e-11\ttime = 0.04 sec\n[ Info: VUMPS 317:\tobj = -8.862878980874e-01\terr = 6.7801565679e-11\ttime = 0.04 sec\n[ Info: VUMPS 318:\tobj = -8.862878980874e-01\terr = 6.8325197783e-11\ttime = 0.21 sec\n[ Info: VUMPS 319:\tobj = -8.862878980874e-01\terr = 6.7826120749e-11\ttime = 0.03 sec\n[ Info: VUMPS 320:\tobj = -8.862878980874e-01\terr = 7.2621205313e-11\ttime = 0.03 sec\n[ Info: VUMPS 321:\tobj = -8.862878980874e-01\terr = 3.8210726894e-10\ttime = 0.05 sec\n[ Info: VUMPS 322:\tobj = -8.862878980874e-01\terr = 1.0235740670e-10\ttime = 0.09 sec\n[ Info: VUMPS 323:\tobj = -8.862878980874e-01\terr = 9.6428191884e-11\ttime = 0.07 sec\n[ Info: VUMPS 324:\tobj = -8.862878980874e-01\terr = 1.0034202926e-10\ttime = 0.07 sec\n[ Info: VUMPS 325:\tobj = -8.862878980874e-01\terr = 7.0797901542e-11\ttime = 0.05 sec\n[ Info: VUMPS 326:\tobj = -8.862878980874e-01\terr = 2.3373034775e-10\ttime = 0.06 sec\n[ Info: VUMPS 327:\tobj = -8.862878980874e-01\terr = 9.8970620406e-11\ttime = 0.10 sec\n[ Info: VUMPS 328:\tobj = -8.862878980874e-01\terr = 1.3577761530e-10\ttime = 0.08 sec\n[ Info: VUMPS 329:\tobj = -8.862878980874e-01\terr = 1.0567516615e-10\ttime = 0.08 sec\n[ Info: VUMPS 330:\tobj = -8.862878980874e-01\terr = 7.2032452782e-11\ttime = 0.07 sec\n[ Info: VUMPS 331:\tobj = -8.862878980874e-01\terr = 5.2541282385e-11\ttime = 0.05 sec\n[ Info: VUMPS 332:\tobj = -8.862878980874e-01\terr = 5.2821022372e-11\ttime = 0.04 sec\n[ Info: VUMPS 333:\tobj = -8.862878980874e-01\terr = 5.4626716043e-11\ttime = 0.04 sec\n[ Info: VUMPS 334:\tobj = -8.862878980874e-01\terr = 2.7830125061e-10\ttime = 0.05 sec\n[ Info: VUMPS 335:\tobj = -8.862878980874e-01\terr = 9.9239900298e-11\ttime = 0.08 sec\n[ Info: VUMPS 336:\tobj = -8.862878980874e-01\terr = 1.0349176036e-10\ttime = 0.06 sec\n[ Info: VUMPS 337:\tobj = -8.862878980874e-01\terr = 1.0452650046e-10\ttime = 0.06 sec\n[ Info: VUMPS 338:\tobj = -8.862878980874e-01\terr = 1.4555221521e-10\ttime = 0.07 sec\n[ Info: VUMPS 339:\tobj = -8.862878980874e-01\terr = 1.2059414831e-10\ttime = 0.07 sec\n[ Info: VUMPS 340:\tobj = -8.862878980874e-01\terr = 1.4914061305e-10\ttime = 0.07 sec\n[ Info: VUMPS 341:\tobj = -8.862878980874e-01\terr = 1.2389694233e-10\ttime = 0.07 sec\n[ Info: VUMPS 342:\tobj = -8.862878980874e-01\terr = 1.1053522260e-10\ttime = 0.07 sec\n[ Info: VUMPS 343:\tobj = -8.862878980874e-01\terr = 1.0533349208e-10\ttime = 0.06 sec\n[ Info: VUMPS 344:\tobj = -8.862878980874e-01\terr = 5.5087727545e-11\ttime = 0.05 sec\n[ Info: VUMPS 345:\tobj = -8.862878980874e-01\terr = 4.7044124461e-10\ttime = 0.07 sec\n[ Info: VUMPS 346:\tobj = -8.862878980874e-01\terr = 7.7993212022e-11\ttime = 0.11 sec\n[ Info: VUMPS 347:\tobj = -8.862878980874e-01\terr = 9.9188349166e-11\ttime = 0.19 sec\n[ Info: VUMPS 348:\tobj = -8.862878980874e-01\terr = 9.0546548017e-11\ttime = 0.06 sec\n[ Info: VUMPS 349:\tobj = -8.862878980874e-01\terr = 1.1229111874e-10\ttime = 0.04 sec\n[ Info: VUMPS 350:\tobj = -8.862878980874e-01\terr = 9.4673378845e-11\ttime = 0.06 sec\n[ Info: VUMPS 351:\tobj = -8.862878980874e-01\terr = 1.0171542217e-10\ttime = 0.04 sec\n[ Info: VUMPS 352:\tobj = -8.862878980874e-01\terr = 1.4319624203e-10\ttime = 0.04 sec\n[ Info: VUMPS 353:\tobj = -8.862878980874e-01\terr = 4.4804644943e-11\ttime = 0.04 sec\n[ Info: VUMPS 354:\tobj = -8.862878980874e-01\terr = 4.5253009904e-11\ttime = 0.03 sec\n[ Info: VUMPS 355:\tobj = -8.862878980874e-01\terr = 4.8526941357e-11\ttime = 0.03 sec\n[ Info: VUMPS 356:\tobj = -8.862878980874e-01\terr = 4.5267178026e-11\ttime = 0.03 sec\n[ Info: VUMPS 357:\tobj = -8.862878980874e-01\terr = 5.3269395139e-11\ttime = 0.03 sec\n[ Info: VUMPS 358:\tobj = -8.862878980874e-01\terr = 6.9373720406e-11\ttime = 0.06 sec\n[ Info: VUMPS 359:\tobj = -8.862878980874e-01\terr = 1.6373642528e-10\ttime = 0.05 sec\n[ Info: VUMPS 360:\tobj = -8.862878980874e-01\terr = 4.8545728886e-11\ttime = 0.04 sec\n[ Info: VUMPS 361:\tobj = -8.862878980874e-01\terr = 4.8166216362e-11\ttime = 0.03 sec\n[ Info: VUMPS 362:\tobj = -8.862878980874e-01\terr = 4.8091531818e-11\ttime = 0.03 sec\n[ Info: VUMPS 363:\tobj = -8.862878980874e-01\terr = 8.5244170558e-11\ttime = 0.06 sec\n[ Info: VUMPS 364:\tobj = -8.862878980874e-01\terr = 1.0011641995e-10\ttime = 0.05 sec\n[ Info: VUMPS 365:\tobj = -8.862878980874e-01\terr = 1.0253292457e-10\ttime = 0.05 sec\n[ Info: VUMPS 366:\tobj = -8.862878980874e-01\terr = 1.1336554420e-10\ttime = 0.05 sec\n[ Info: VUMPS 367:\tobj = -8.862878980874e-01\terr = 7.8522322860e-11\ttime = 0.05 sec\n[ Info: VUMPS 368:\tobj = -8.862878980874e-01\terr = 2.1253946297e-10\ttime = 0.04 sec\n[ Info: VUMPS 369:\tobj = -8.862878980874e-01\terr = 6.1130038172e-11\ttime = 0.04 sec\n[ Info: VUMPS 370:\tobj = -8.862878980874e-01\terr = 6.1383942312e-11\ttime = 0.03 sec\n[ Info: VUMPS 371:\tobj = -8.862878980874e-01\terr = 6.1510474358e-11\ttime = 0.03 sec\n[ Info: VUMPS 372:\tobj = -8.862878980874e-01\terr = 6.1809499146e-11\ttime = 0.03 sec\n[ Info: VUMPS 373:\tobj = -8.862878980874e-01\terr = 6.1698467469e-11\ttime = 0.03 sec\n[ Info: VUMPS 374:\tobj = -8.862878980874e-01\terr = 6.2385550089e-11\ttime = 0.03 sec\n[ Info: VUMPS 375:\tobj = -8.862878980874e-01\terr = 2.3629545490e-10\ttime = 0.05 sec\n[ Info: VUMPS 376:\tobj = -8.862878980874e-01\terr = 1.0499986243e-10\ttime = 0.08 sec\n[ Info: VUMPS 377:\tobj = -8.862878980874e-01\terr = 7.2603816424e-11\ttime = 0.06 sec\n[ Info: VUMPS 378:\tobj = -8.862878980874e-01\terr = 7.2618849446e-11\ttime = 0.04 sec\n[ Info: VUMPS 379:\tobj = -8.862878980874e-01\terr = 7.7260293051e-11\ttime = 0.03 sec\n[ Info: VUMPS 380:\tobj = -8.862878980874e-01\terr = 1.2108909054e-10\ttime = 0.07 sec\n[ Info: VUMPS 381:\tobj = -8.862878980874e-01\terr = 1.0656096009e-10\ttime = 0.08 sec\n[ Info: VUMPS 382:\tobj = -8.862878980874e-01\terr = 7.6401106319e-11\ttime = 0.05 sec\n[ Info: VUMPS 383:\tobj = -8.862878980874e-01\terr = 1.3364758610e-10\ttime = 0.05 sec\n[ Info: VUMPS 384:\tobj = -8.862878980874e-01\terr = 6.9742993842e-11\ttime = 0.05 sec\n[ Info: VUMPS 385:\tobj = -8.862878980874e-01\terr = 1.7345659259e-10\ttime = 0.05 sec\n[ Info: VUMPS 386:\tobj = -8.862878980874e-01\terr = 7.7533324291e-11\ttime = 0.04 sec\n[ Info: VUMPS 387:\tobj = -8.862878980874e-01\terr = 1.4396981605e-10\ttime = 0.06 sec\n[ Info: VUMPS 388:\tobj = -8.862878980874e-01\terr = 1.5404124820e-10\ttime = 0.05 sec\n[ Info: VUMPS 389:\tobj = -8.862878980874e-01\terr = 8.9440098189e-11\ttime = 0.07 sec\n[ Info: VUMPS 390:\tobj = -8.862878980874e-01\terr = 5.7181420413e-11\ttime = 0.04 sec\n[ Info: VUMPS 391:\tobj = -8.862878980874e-01\terr = 5.9548328290e-10\ttime = 0.21 sec\n[ Info: VUMPS 392:\tobj = -8.862878980874e-01\terr = 1.5282754945e-10\ttime = 0.07 sec\n[ Info: VUMPS 393:\tobj = -8.862878980874e-01\terr = 1.5131412340e-10\ttime = 0.05 sec\n[ Info: VUMPS 394:\tobj = -8.862878980874e-01\terr = 1.4049801953e-10\ttime = 0.04 sec\n[ Info: VUMPS 395:\tobj = -8.862878980874e-01\terr = 6.3217689116e-11\ttime = 0.04 sec\n[ Info: VUMPS 396:\tobj = -8.862878980874e-01\terr = 6.3150855078e-11\ttime = 0.03 sec\n[ Info: VUMPS 397:\tobj = -8.862878980874e-01\terr = 6.3381605325e-11\ttime = 0.03 sec\n[ Info: VUMPS 398:\tobj = -8.862878980874e-01\terr = 6.3282895468e-11\ttime = 0.03 sec\n[ Info: VUMPS 399:\tobj = -8.862878980874e-01\terr = 6.3281276721e-11\ttime = 0.03 sec\n┌ Warning: VUMPS cancel 400:\tobj = -8.862878980874e-01\terr = 6.3702904878e-11\ttime = 23.07 sec\n└ @ MPSKit ~/Projects/Julia/MPSKit.jl/src/algorithms/groundstate/vumps.jl:67\n","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"This page was generated using Literate.jl.","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"EditURL = \"../../../../../examples/quantum1d/1.ising-cft/main.jl\"","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"examples/quantum1d/1.ising-cft/#The-Ising-CFT-spectrum","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"","category":"section"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"This tutorial is meant to show the finite size CFT spectrum for the quantum Ising model. We do this by first employing an exact diagonalization technique, and then extending the analysis to larger system sizes through the use of MPS techniques.","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"using MPSKit, MPSKitModels, TensorKit, Plots, KrylovKit\nusing LinearAlgebra: eigen, diagm, Hermitian","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"The hamiltonian is defined on a finite lattice with periodic boundary conditions, which can be implemented as follows:","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"L = 12\nH = periodic_boundary_conditions(transverse_field_ising(), L);","category":"page"},{"location":"examples/quantum1d/1.ising-cft/#Exact-diagonalisation","page":"The Ising CFT spectrum","title":"Exact diagonalisation","text":"","category":"section"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"In MPSKit, there is support for exact diagonalisation by leveraging the fact that applying the hamiltonian to an untruncated MPS will result in an effective hamiltonian on the center site which implements the action of the entire hamiltonian. Thus, optimizing the middle tensor is equivalent to optimixing a state in the entire Hilbert space, as all other tensors are just unitary matrices that mix the basis.","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"energies, states = exact_diagonalization(H; num=18, alg=Lanczos(; krylovdim=200));\nplot(real.(energies);\n seriestype=:scatter,\n legend=false,\n ylabel=\"energy\",\n xlabel=\"#eigenvalue\")","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"note: Krylov dimension\nNote that we have specified a large Krylov dimension as degenerate eigenvalues are notoriously difficult for iterative methods.","category":"page"},{"location":"examples/quantum1d/1.ising-cft/#Extracting-momentum","page":"The Ising CFT spectrum","title":"Extracting momentum","text":"","category":"section"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"Given a state, it is possible to assign a momentum label through the use of the translation operator. This operator can be defined in MPO language either diagramatically as","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"(Image: translation operator MPO)","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"or in the code as:","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"id = complex(isomorphism(ℂ^2, ℂ^2))\n@tensor O[-1 -2; -3 -4] := id[-1, -3] * id[-2, -4]\nT = periodic_boundary_conditions(DenseMPO(O), L);","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"We can then calculate the momentum of the groundstate as the expectation value of this operator. However, there is a subtlety because of the degeneracies in the energy eigenvalues. The eigensolver will find an orthonormal basis within each energy subspace, but this basis is not necessarily a basis of eigenstates of the translation operator. In order to fix this, we diagonalize the translation operator within each energy subspace.","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"momentum(ψᵢ, ψⱼ=ψᵢ) = angle(dot(ψᵢ, T * ψⱼ))\n\nfunction fix_degeneracies(basis)\n N = zeros(ComplexF64, length(basis), length(basis))\n M = zeros(ComplexF64, length(basis), length(basis))\n for i in eachindex(basis), j in eachindex(basis)\n N[i, j] = dot(basis[i], basis[j])\n M[i, j] = momentum(basis[i], basis[j])\n end\n\n vals, vecs = eigen(Hermitian(N))\n M = (vecs' * M * vecs)\n M /= diagm(vals)\n\n vals, vecs = eigen(M)\n return angle.(vals)\nend\n\nmomenta = Float64[]\nappend!(momenta, fix_degeneracies(states[1:1]))\nappend!(momenta, fix_degeneracies(states[2:2]))\nappend!(momenta, fix_degeneracies(states[3:3]))\nappend!(momenta, fix_degeneracies(states[4:5]))\nappend!(momenta, fix_degeneracies(states[6:9]))\nappend!(momenta, fix_degeneracies(states[10:11]))\nappend!(momenta, fix_degeneracies(states[12:12]))\nappend!(momenta, fix_degeneracies(states[13:16]))\nappend!(momenta, fix_degeneracies(states[17:18]))\n\nplot(momenta,\n real.(energies[1:18]);\n seriestype=:scatter,\n xlabel=\"momentum\",\n ylabel=\"energy\",\n legend=false)","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/1.ising-cft/#Finite-bond-dimension","page":"The Ising CFT spectrum","title":"Finite bond dimension","text":"","category":"section"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"If we limit the maximum bond dimension of the MPS, we get an approximate solution, but we can reach higher system sizes.","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"L_mps = 20\nH_mps = periodic_boundary_conditions(transverse_field_ising(), L_mps)\nD = 64\nψ, envs, δ = find_groundstate(FiniteMPS(L_mps, ℂ^2, ℂ^D), H_mps, DMRG());","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"[ Info: DMRG init:\tobj = -1.966338498022e+01\terr = 7.5670e-02\n[ Info: DMRG 1:\tobj = -2.549098905759e+01\terr = 8.6530961506e-03\ttime = 1.82 sec\n[ Info: DMRG 2:\tobj = -2.549098968632e+01\terr = 1.1511101281e-06\ttime = 0.74 sec\n[ Info: DMRG 3:\tobj = -2.549098968636e+01\terr = 1.4968031880e-07\ttime = 0.49 sec\n[ Info: DMRG 4:\tobj = -2.549098968636e+01\terr = 1.8734069152e-08\ttime = 0.60 sec\n[ Info: DMRG 5:\tobj = -2.549098968636e+01\terr = 8.9111826045e-09\ttime = 0.26 sec\n[ Info: DMRG 6:\tobj = -2.549098968636e+01\terr = 3.8873081213e-09\ttime = 0.25 sec\n[ Info: DMRG 7:\tobj = -2.549098968636e+01\terr = 2.0316417664e-09\ttime = 0.24 sec\n[ Info: DMRG 8:\tobj = -2.549098968636e+01\terr = 1.8443462781e-09\ttime = 0.23 sec\n[ Info: DMRG 9:\tobj = -2.549098968636e+01\terr = 1.7187968043e-09\ttime = 0.23 sec\n[ Info: DMRG 10:\tobj = -2.549098968636e+01\terr = 1.5834770903e-09\ttime = 0.23 sec\n[ Info: DMRG 11:\tobj = -2.549098968636e+01\terr = 1.4351188777e-09\ttime = 0.22 sec\n[ Info: DMRG 12:\tobj = -2.549098968636e+01\terr = 1.2823791724e-09\ttime = 0.22 sec\n[ Info: DMRG 13:\tobj = -2.549098968636e+01\terr = 1.1334733960e-09\ttime = 0.20 sec\n[ Info: DMRG 14:\tobj = -2.549098968636e+01\terr = 9.9399967768e-10\ttime = 0.20 sec\n[ Info: DMRG 15:\tobj = -2.549098968636e+01\terr = 8.6696262772e-10\ttime = 0.21 sec\n[ Info: DMRG 16:\tobj = -2.549098968636e+01\terr = 7.5346457934e-10\ttime = 0.20 sec\n[ Info: DMRG 17:\tobj = -2.549098968636e+01\terr = 6.5338501074e-10\ttime = 0.21 sec\n[ Info: DMRG 18:\tobj = -2.549098968636e+01\terr = 5.6588625932e-10\ttime = 0.19 sec\n[ Info: DMRG 19:\tobj = -2.549098968636e+01\terr = 4.8984473052e-10\ttime = 0.20 sec\n[ Info: DMRG 20:\tobj = -2.549098968636e+01\terr = 4.2398410528e-10\ttime = 0.20 sec\n[ Info: DMRG 21:\tobj = -2.549098968636e+01\terr = 3.6701567807e-10\ttime = 0.19 sec\n[ Info: DMRG 22:\tobj = -2.549098968636e+01\terr = 3.1784022120e-10\ttime = 0.18 sec\n[ Info: DMRG 23:\tobj = -2.549098968636e+01\terr = 2.7538139800e-10\ttime = 0.18 sec\n[ Info: DMRG 24:\tobj = -2.549098968636e+01\terr = 2.3871144511e-10\ttime = 0.18 sec\n[ Info: DMRG 25:\tobj = -2.549098968636e+01\terr = 2.0703135803e-10\ttime = 0.18 sec\n[ Info: DMRG 26:\tobj = -2.549098968636e+01\terr = 1.7964855233e-10\ttime = 0.23 sec\n[ Info: DMRG 27:\tobj = -2.549098968636e+01\terr = 1.5596026719e-10\ttime = 0.28 sec\n[ Info: DMRG 28:\tobj = -2.549098968636e+01\terr = 1.3537572002e-10\ttime = 0.17 sec\n[ Info: DMRG 29:\tobj = -2.549098968636e+01\terr = 1.1764928748e-10\ttime = 0.17 sec\n[ Info: DMRG 30:\tobj = -2.549098968636e+01\terr = 1.0228478965e-10\ttime = 0.17 sec\n[ Info: DMRG conv 31:\tobj = -2.549098968636e+01\terr = 8.8960401357e-11\ttime = 9.24 sec\n","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"Excitations on top of the groundstate can be found through the use of the quasiparticle ansatz. This returns quasiparticle states, which can be converted to regular FiniteMPS objects.","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"E_ex, qps = excitations(H, QuasiparticleAnsatz(), ψ, envs; num=16)\nstates_mps = vcat(ψ, map(qp -> convert(FiniteMPS, qp), qps))\nE_mps = map(x -> expectation_value(x, H_mps), states_mps)\n\nT_mps = periodic_boundary_conditions(DenseMPO(O), L_mps)\nmomenta_mps = Float64[]\nappend!(momenta_mps, fix_degeneracies(states[1:1]))\nappend!(momenta_mps, fix_degeneracies(states[2:2]))\nappend!(momenta_mps, fix_degeneracies(states[3:3]))\nappend!(momenta_mps, fix_degeneracies(states[4:5]))\nappend!(momenta_mps, fix_degeneracies(states[6:9]))\nappend!(momenta_mps, fix_degeneracies(states[10:11]))\nappend!(momenta_mps, fix_degeneracies(states[12:12]))\nappend!(momenta_mps, fix_degeneracies(states[13:16]))\n\nplot(momenta_mps,\n real.(energies[1:16]);\n seriestype=:scatter,\n xlabel=\"momentum\",\n ylabel=\"energy\",\n legend=false)","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"This page was generated using Literate.jl.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"DocTestSetup = quote\n using MPSKit, MPSKitModels, TensorKit\nend","category":"page"},{"location":"man/algorithms/#um_algorithms","page":"Algorithms","title":"Algorithms","text":"","category":"section"},{"location":"man/algorithms/#Minimizing-the-energy","page":"Algorithms","title":"Minimizing the energy","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"There are a number of different possible energy-minimization algorithms, depending on the system size. Exclusive to finite systems are","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"- DMRG\n\n- DMRG2","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"Exclusive to infinite systems are","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"- IDMRG\n\n- IDMRG2\n\n- VUMPS","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"with a last algorithm - GradientGrassmann - implemented for both finite and infinite systems.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"WindowMPS, which is a finite patch of mutable tensors embedded in an infinite MPS, is handled as a finite system where we only optimize over the patch of mutable tensors.","category":"page"},{"location":"man/algorithms/#DMRG","page":"Algorithms","title":"DMRG","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"state = FiniteMPS(20,ℂ^2,ℂ^10);\noperator = nonsym_ising_ham();\n(groundstate,environments,delta) = find_groundstate!(state,operator,DMRG())","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The DMRG algorithm sweeps through the system, optimizing every site. Because of its single-site behaviour, this will always keep the bond dimension fixed. If you do want to increase the bond dimension dynamically, then there are two options. Either you use the two-site variant of DMRG (DMRG2()), or you make use of the finalize option. Finalize is a function that gets called at the end of every DMRG iteration. Within that function call one can modify the state.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"function my_finalize(iter,state,H,envs)\n println(\"Hello from iteration $iter\")\n return state,envs;\nend\n\n(groundstate,environments,delta) = find_groundstate!(state,operator,DMRG(finalize = my_finalize))","category":"page"},{"location":"man/algorithms/#DMRG2","page":"Algorithms","title":"DMRG2","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"state = FiniteMPS(20,ℂ^2,ℂ^10);\noperator = nonsym_ising_ham();\n(groundstate,environments,delta) = find_groundstate!(state,operator,DMRG2(trscheme=truncbelow(1e-7)));","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The twosite variant of DMRG, which optimizes blocks of two sites and then decomposes them into 2 MPS tensors using the svd decomposition. By truncating the singular values up to a desired precision, one can dynamically grow and shrink the bond dimension as needed. However, this truncation in turn introduces an error, which is why a state converged with DMRG2 can often be slightly further converged by subsequently using DMRG.","category":"page"},{"location":"man/algorithms/#IDMRG","page":"Algorithms","title":"IDMRG","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"state = InfiniteMPS([ℂ^2],[ℂ^10]);\noperator = nonsym_ising_ham();\n(groundstate,environments,delta) = find_groundstate(state,operator,IDMRG1())","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The DMRG algorithm for finite systems can be generalized to infinite MPS. The idea is to start with a finite system and grow the system size, while we are sweeping through the system. This is again a single site algorithm, and therefore preserves the initial bond dimension.","category":"page"},{"location":"man/algorithms/#IDMRG2","page":"Algorithms","title":"IDMRG2","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"state = InfiniteMPS([ℂ^2,ℂ^2],[ℂ^10,ℂ^10]);\noperator = repeat(nonsym_ising_ham(),2);\n(groundstate,environments,delta) = find_groundstate(state,operator,IDMRG2(trscheme=truncbelow(1e-5)))","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The generalization of DMRG2 to infinite systems has the same caveats as its finite counterpart. We furthermore require a unitcell ≥ 2. As a rule of thumb, a truncation cutoff of 1e-5 is already really good.","category":"page"},{"location":"man/algorithms/#VUMPS","page":"Algorithms","title":"VUMPS","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"VUMPS is an (I)DMRG inspired algorithm that can be used to find the groundstate of infinite matrix product states","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"state = InfiniteMPS([ℂ^2],[ℂ^10]);\noperator = nonsym_ising_ham();\n(groundstate,environments,delta) = find_groundstate(state,operator,VUMPS())","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"much like DMRG, it cannot modify the bond dimension, and this has to be done manually in the finalize function.","category":"page"},{"location":"man/algorithms/#Gradient-descent","page":"Algorithms","title":"Gradient descent","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"Both finite and infinite matrix product states can be parametrized by a set of unitary matrices, and we can then perform gradient descent on this unitary manifold. Due to some technical reasons (gauge freedom), this manifold further restricts to a grassmann manifold.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"state = InfiniteMPS([ℂ^2],[ℂ^10]);\noperator = nonsym_ising_ham();\n(groundstate,environments,delta) = find_groundstate(state,operator,GradientGrassmann())","category":"page"},{"location":"man/algorithms/#Time-evolution","page":"Algorithms","title":"Time evolution","text":"","category":"section"},{"location":"man/algorithms/#TDVP","page":"Algorithms","title":"TDVP","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"There is an implementation of the one-site TDVP scheme for finite and infinite MPS:","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"(newstate,environments) = timestep(state,operator,dt,TDVP())","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"and the two-site scheme for finite MPS (TDVP2()). Similarly to DMRG, the one site scheme will preserve the bond dimension, and expansion has to be done manually.","category":"page"},{"location":"man/algorithms/#Time-evolution-MPO","page":"Algorithms","title":"Time evolution MPO","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"We have rudimentary support for turning an MPO hamiltonian into a time evolution MPO.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"make_time_mpo(H,dt,alg::WI)\nmake_time_mpo(H,dt,alg::WII)","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"two algorithms are available, corresponding to different orders of precision. It is possible to then multiply a state by this MPO, or to approximate (MPO,state) by a new state","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"state = InfiniteMPS([ℂ^2],[ℂ^10]);\noperator = nonsym_ising_ham();\nmpo = make_time_mpo(operator, 0.1, WII());\napproximate(state, (mpo, state), VUMPS())","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"This feature is at the moment not very well supported.","category":"page"},{"location":"man/algorithms/#Excitations","page":"Algorithms","title":"Excitations","text":"","category":"section"},{"location":"man/algorithms/#Quasiparticle-Ansatz","page":"Algorithms","title":"Quasiparticle Ansatz","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The Quasiparticle Ansatz offers an approach to compute low-energy eigenstates in quantum systems, playing a key role in both finite and infinite systems. It leverages localized perturbations for approximations, as detailed in this paper.","category":"page"},{"location":"man/algorithms/#Finite-Systems:","page":"Algorithms","title":"Finite Systems:","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"In finite systems, we approximate low-energy states by altering a single tensor in the Matrix Product State (MPS) for each site, and summing these across all sites. This method introduces additional gauge freedoms, utilized to ensure orthogonality to the ground state. Optimizing within this framework translates to solving an eigenvalue problem. For example, in the transverse field Ising model, we calculate the first excited state as shown in the provided code snippet, amd check the accuracy against theoretical values. Some deviations are expected, both due to finite-bond-dimension and finite-size effects.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"# Model parameters\ng = 10.0\nL = 16\nH = transverse_field_ising(; g)\n\n# Finding the ground state\nψ₀ = FiniteMPS(L, ℂ^2, ℂ^32)\nψ, = find_groundstate(ψ₀, H; verbosity=0)\n\n# Computing excitations using the Quasiparticle Ansatz\nEs, ϕs = excitations(H, QuasiparticleAnsatz(), ψ; num=1)\nisapprox(Es[1], 2(g - 1); rtol=1e-2)","category":"page"},{"location":"man/algorithms/#Infinite-Systems:","page":"Algorithms","title":"Infinite Systems:","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The ansatz in infinite systems maintains translational invariance by perturbing every site in the unit cell in a plane-wave superposition, requiring momentum specification. The Haldane gap computation in the Heisenberg model illustrates this approach.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"# Setting up the model and momentum\nmomentum = π\nH = heisenberg_XXX()\n\n# Ground state computation\nψ₀ = InfiniteMPS(ℂ^3, ℂ^48)\nψ, = find_groundstate(ψ₀, H; verbosity=0)\n\n# Excitation calculations\nEs, ϕs = excitations(H, QuasiparticleAnsatz(), momentum, ψ)\nisapprox(Es[1], 0.41047925; atol=1e-4)","category":"page"},{"location":"man/algorithms/#Charged-excitations:","page":"Algorithms","title":"Charged excitations:","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"When dealing with symmetric systems, the default optimization is for eigenvectors with trivial total charge. However, quasiparticles with different charges can be obtained using the sector keyword. For instance, in the transverse field Ising model, we consider an excitation built up of flipping a single spin, aligning with Z2Irrep(1).","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"g = 10.0\nL = 16\nH = transverse_field_ising(Z2Irrep; g)\nψ₀ = FiniteMPS(L, Z2Space(0 => 1, 1 => 1), Z2Space(0 => 16, 1 => 16))\nψ, = find_groundstate(ψ₀, H; verbosity=0)\nEs, ϕs = excitations(H, QuasiparticleAnsatz(), ψ; num=1, sector=Z2Irrep(1))\nisapprox(Es[1], 2(g - 1); rtol=1e-2) # infinite analytical result","category":"page"},{"location":"man/algorithms/#Finite-excitations","page":"Algorithms","title":"Finite excitations","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"For finite systems we can also do something else - find the groundstate of the hamiltonian + weight sum_i psi_i psi_i. This is also supported by calling","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"th = nonsym_ising_ham()\nts = FiniteMPS(10,ℂ^2,ℂ^12);\n(ts,envs,_) = find_groundstate(ts,th,DMRG(verbosity=0));\n(energies,Bs) = excitations(th,FiniteExcited(),ts,envs);","category":"page"},{"location":"man/algorithms/#\"Chepiga-Ansatz\"","page":"Algorithms","title":"\"Chepiga Ansatz\"","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"Computing excitations in critical systems poses a significant challenge due to the diverging correlation length, which requires very large bond dimensions. However, we can leverage this long-range correlation to effectively identify excitations. In this context, the left/right gauged MPS, serving as isometries, are effectively projecting the Hamiltonian into the low-energy sector. This projection method is particularly effective in long-range systems, where excitations are distributed throughout the entire system. Consequently, the low-lying energy spectrum can be extracted by diagonalizing the effective Hamiltonian (without any additional DMRG costs!). The states of these excitations are then represented by the ground state MPS, with one site substituted by the corresponding eigenvector. This approach is often referred to as the 'Chepiga ansatz', named after one of the authors of this paper.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"This is supported via the following syntax:","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"g = 1.0\nL = 16\nH = transverse_field_ising(; g)\nψ₀ = FiniteMPS(L, ComplexSpace(2), ComplexSpace(32))\nψ, envs, = find_groundstate(ψ₀, H; verbosity=0)\nE₀ = real(sum(expectation_value(ψ, H, envs)))\nEs, ϕs = excitations(H, ChepigaAnsatz(), ψ, envs; num=1)\nisapprox(Es[1], 2(g - 1); rtol=1e-2) # infinite analytical result\n\n# output\n\ntrue","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"In order to improve the accuracy, a two-site version also exists, which varies two neighbouring sites:","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"g = 1.0\nL = 16\nH = transverse_field_ising(; g)\nψ₀ = FiniteMPS(L, ComplexSpace(2), ComplexSpace(32))\nψ, envs, = find_groundstate(ψ₀, H; verbosity=0)\nE₀ = real(sum(expectation_value(ψ, H, envs)))\nEs, ϕs = excitations(H, ChepigaAnsatz2(), ψ, envs; num=1)\nisapprox(Es[1], 2(g - 1); rtol=1e-2) # infinite analytical result\n\n# output\n\ntrue","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The algorithm is described in more detail in the following paper:","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"Chepiga, N., & Mila, F. (2017). Excitation spectrum and density matrix renormalization group iterations. Physical Review B, 96(5), 054425.","category":"page"},{"location":"man/algorithms/#changebonds","page":"Algorithms","title":"changebonds","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"Many of the previously mentioned algorithms do not possess a way to dynamically change to bond dimension. This is often a problem, as the optimal bond dimension is often not a priori known, or needs to increase because of entanglement growth throughout the course of a simulation. changebonds exposes a way to change the bond dimension of a given state.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"changebonds","category":"page"},{"location":"man/algorithms/#MPSKit.changebonds-man-algorithms","page":"Algorithms","title":"MPSKit.changebonds","text":"changebonds(ψ::AbstractMPS, H, alg, envs) -> ψ′, envs′\nchangebonds(ψ::AbstractMPS, alg) -> ψ′\n\nChange the bond dimension of ψ using the algorithm alg, and return the new ψ and the new envs.\n\nSee also: SvdCut, RandExpand, VUMPSSvdCut, OptimalExpand\n\n\n\n\n\n","category":"function"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"There are several different algorithms implemented, each having their own advantages and disadvantages:","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"SvdCut: The simplest method for changing the bonddimension is found by simply locally truncating the state using an SVD decomposition. This yields a (locally) optimal truncation, but clearly cannot be used to increase the bond dimension. Note that a globally optimal truncation can be obtained by using the SvdCut algorithm in combination with approximate. Since the output of this method might have a truncated bonddimension, the new state might not be identical to the input state. The truncation is controlled through trscheme, which dictates how the singular values of the original state are truncated.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"OptimalExpand: This algorithm is based on the idea of expanding the bond dimension by investigating the two-site derivative, and adding the most important blocks which are orthogonal to the current state. From the point of view of a local two-site update, this procedure is optimal, but it requires to evaluate a two-site derivative, which can be costly when the physical space is large. The state will remain unchanged, but a one-site scheme will now be able to push the optimization further. The subspace used for expansion can be truncated through trscheme, which dictates how many singular values will be added.\nRandExpand: This algorithm similarly adds blocks orthogonal to the current state, but does not attempt to select the most important ones, and rather just selects them at random. The advantage here is that this is much cheaper than the optimal expand, and if the bond dimension is grown slow enough, this still obtains a very good expansion scheme. Again, The state will remain unchanged and a one-site scheme will now be able to push the optimization further. The subspace used for expansion can be truncated through trscheme, which dictates how many singular values will be added.\nVUMPSSvdCut: This algorithm is based on the VUMPS algorithm, and consists of performing a two-site update, and then truncating the state back down. Because of the two-site update, this can again become expensive, but the algorithm has the option of both expanding as well as truncating the bond dimension. Here, trscheme controls the truncation of the full state after the two-site update.","category":"page"},{"location":"man/algorithms/#leading-boundary","page":"Algorithms","title":"leading boundary","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"For statmech partition functions we want to find the approximate leading boundary MPS. Again this can be done with VUMPS:","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"th = nonsym_ising_mpo()\nts = InfiniteMPS([ℂ^2],[ℂ^20]);\n(ts,envs,_) = leading_boundary(ts,th,VUMPS(maxiter=400,verbosity=false));","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"if the mpo satisfies certain properties (positive and hermitian), it may also be possible to use GradientGrassmann.","category":"page"},{"location":"man/algorithms/#approximate","page":"Algorithms","title":"approximate","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"Often, it is useful to approximate a given MPS by another, typically by one of a different bond dimension. This is achieved by approximating an application of an MPO to the initial state, by a new state.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"approximate","category":"page"},{"location":"man/algorithms/#MPSKit.approximate-man-algorithms","page":"Algorithms","title":"MPSKit.approximate","text":"approximate(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)\napproximate!(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)\n\nCompute an approximation to the application of an operator O to the state ψ in the form of an MPS ψ₀.\n\nArguments\n\nψ₀::AbstractMPS: initial guess of the approximated state\n(O::AbstractMPO, ψ::AbstractMPS): operator O and state ψ to be approximated\nalgorithm: approximation algorithm. See below for a list of available algorithms.\n[environments]: MPS environment manager\n\nKeywords\n\ntol::Float64: tolerance for convergence criterium\nmaxiter::Int: maximum amount of iterations\nverbosity::Int: display progress information\n\nAlgorithms\n\nDMRG: Alternating least square method for maximizing the fidelity with a single-site scheme.\nDMRG2: Alternating least square method for maximizing the fidelity with a two-site scheme.\nIDMRG1: Variant of DMRG for maximizing fidelity density in the thermodynamic limit.\nIDMRG2: Variant of DMRG2 for maximizing fidelity density in the thermodynamic limit.\nVOMPS: Tangent space method for truncating uniform MPS.\n\n\n\n\n\n","category":"function"},{"location":"man/algorithms/#Varia","page":"Algorithms","title":"Varia","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"What follows is a medley of lesser known (or used) algorithms and don't entirely fit under one of the above categories.","category":"page"},{"location":"man/algorithms/#Dynamical-DMRG","page":"Algorithms","title":"Dynamical DMRG","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"Dynamical DMRG has been described in other papers and is a way to find the propagator. The basic idea is that to calculate G(z) = V (H-z)^-1 V , one can variationally find (H-z) W = V and then the propagator simply equals G(z) = V W .","category":"page"},{"location":"man/algorithms/#fidelity-susceptibility","page":"Algorithms","title":"fidelity susceptibility","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The fidelity susceptibility measures how much the groundstate changes when tuning a parameter in your hamiltonian. Divergences occur at phase transitions, making it a valuable measure when no order parameter is known.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"fidelity_susceptibility(groundstate,H_0,perturbing_Hams::AbstractVector)","category":"page"},{"location":"man/algorithms/#periodic-boundary-conditions","page":"Algorithms","title":"periodic boundary conditions","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"You can impose periodic boundary conditions on the hamiltonian itself, while still using a normal OBC finite matrix product states. This is straightforward to implement but competitive with more advanced PBC MPS algorithms.","category":"page"},{"location":"man/algorithms/#exact-diagonalization","page":"Algorithms","title":"exact diagonalization","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"As a side effect, our code support exact diagonalization. The idea is to construct a finite matrix product state with maximal bond dimension, and then optimize the middle site. Because we never truncated the bond dimension, this single site effectively parametrizes the entire hilbert space.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"exact_diagonalization(periodic_boundary_conditions(su2_xxx_ham(spin=1),10),which=:SR) # find the groundstate on 10 sites","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"DocTestSetup = nothing","category":"page"},{"location":"man/operators/#um_operators","page":"Operators","title":"Operators","text":"","category":"section"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"In analogy to how we can define matrix product states as a contraction of local tensors, a similar construction exist for operators. To that end, a Matrix Product Operator (MPO) is nothing more than a collection of local MPOTensor objects, contracted along a line. Again, we can distinguish between finite and infinite operators, with the latter being represented by a periodic array of MPO tensors.","category":"page"},{"location":"man/operators/#FiniteMPO","page":"Operators","title":"FiniteMPO","text":"","category":"section"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"Starting off with the simplest case, a basic finite MPO is a vector of MPOTensor objects. These objects can be created either directly from a vector of MPOTensors, or starting from a dense operator (a subtype of AbstractTensorMap{S,N,N}), which is then decomposed into a product of local tensors.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"(Image: )","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"using TensorKit, MPSKit","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"S_x = TensorMap(ComplexF64[0 1; 1 0], ℂ^2 ← ℂ^2)\nS_z = TensorMap(ComplexF64[1 0; 0 -1], ℂ^2 ← ℂ^2)\nO_xzx = FiniteMPO(S_x ⊗ S_x ⊗ S_x);","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"The individual tensors are accessible via regular indexing. Note that the tensors are internally converted to the MPOTensor objects, thus having four indices. In this specific case, the left- and right virtual spaces are trivial, but this is not a requirement.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"O_xzx[1]","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"warning: Warning\nThe local tensors are defined only up to a gauge transformation of the virtual spaces. This means that the tensors are not uniquely defined, and special care must be taken when comparing MPOs on an element-wise basis.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"For convenience, a number of utility functions are defined for probing the structure of the constructed MPO. For example, the spaces can be queried as follows:","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"left_virtualspace(O_xzx, 2)\nright_virtualspace(O_xzx, 2)\nphysicalspace(O_xzx, 2)","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"MPOs also support a range of linear algebra operations, such as addition, subtraction and multiplication, either among themselves or with a finite MPS. Here, it is important to note that these operations will increase the virtual dimension of the resulting MPO or MPS, and this naive application is thus typically not optimal. For approximate operations that do not increase the virtual dimension, the more advanced algorithms in the um_algorithms sections should be used.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"O_xzx² = O_xzx * O_xzx\nprintln(\"Virtual dimension of O_xzx²: \", left_virtualspace(O_xzx², 2))\nO_xzx_sum = 0.1 * O_xzx + O_xzx²\nprintln(\"Virtual dimension of O_xzx_sum: \", left_virtualspace(O_xzx_sum, 2))","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"O_xzx_sum * FiniteMPS(3, ℂ^2, ℂ^4)","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"note: Note\nThe virtual spaces of the resulting MPOs typically grow exponentially with the number of multiplications. Nevertheless, a number of optimizations are in place that make sure that the virtual spaces do not increase past the maximal virtual space that is dictated by the requirement of being full-rank tensors.","category":"page"},{"location":"man/operators/#MPOHamiltonian","page":"Operators","title":"MPOHamiltonian","text":"","category":"section"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"We can also represent quantum Hamiltonians in the same form. This is done by converting a sum of local operators into a single MPO operator. The resulting operator has a very specific structure, and is often referred to as a Jordan block MPO.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"This object can be constructed as an MPO by using the MPOHamiltonian constructor, which takes two crucial pieces of information:","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"An array of VectorSpace objects, which determines the local Hilbert spaces of the system. The resulting MPO will snake through the array in linear indexing order.\nA set of local operators, which are characterised by a number of indices that specify on which sites the operator acts, along with an operator to define the action. These are specified as a inds => operator pairs, or any other iterable collection thereof. The inds should be tuples of valid indices for the array of VectorSpace objects, or a single integer for single-site operators.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"As a concrete example, we consider the Transverse-field Ising model defined by the Hamiltonian","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"H = -J sum_langle i j rangle X_i X_j - h sum_j Z_j","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"J = 1.0\nh = 0.5\nchain = fill(ℂ^2, 3) # a finite chain of 4 sites, each with a 2-dimensional Hilbert space\nsingle_site_operators = [1 => -h * S_z, 2 => -h * S_z, 3 => -h * S_z]\ntwo_site_operators = [(1, 2) => -J * S_x ⊗ S_x, (2, 3) => -J * S_x ⊗ S_x]\nH_ising = MPOHamiltonian(chain, single_site_operators..., two_site_operators...);","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"Various alternative constructions are possible, such as using a Dict with key-value pairs that specify the operators, or using generator expressions to simplify the construction.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"H_ising′ = -J * MPOHamiltonian(chain,\n (i, i + 1) => S_x ⊗ S_x for i in 1:(length(chain) - 1)) -\n h * MPOHamiltonian(chain, i => S_z for i in 1:length(chain))\nisapprox(H_ising, H_ising′; atol=1e-6)","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"Note that this construction is not limited to nearest-neighbour interactions, or 1D systems. In particular, it is possible to construct quasi-1D realisations of 2D systems, by using different arrays of VectorSpace objects. For example, the 2D Ising model on a square lattice can be constructed as follows:","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"square = fill(ℂ^2, 3, 3) # a 3x3 square lattice\noperators = Dict()\n\nlocal_operators = Dict()\nfor I in eachindex(square)\n local_operators[(I,)] = -h * S_z # single site operators still require tuples of indices\nend\n\n# horizontal and vertical interactions are easier using Cartesian indices\nhorizontal_operators = Dict()\nI_horizontal = CartesianIndex(0, 1)\nfor I in eachindex(IndexCartesian(), square)\n if I[2] < size(square, 2)\n horizontal_operators[(I, I + I_horizontal)] = -J * S_x ⊗ S_x\n end\nend\n\nvertical_operators = Dict()\nI_vertical = CartesianIndex(1, 0)\nfor I in eachindex(IndexCartesian(), square)\n if I[1] < size(square, 1)\n vertical_operators[(I, I + I_vertical)] = -J * S_x ⊗ S_x\n end\nend\n\nH_ising_2d = MPOHamiltonian(square, local_operators) +\n MPOHamiltonian(square, horizontal_operators) +\n MPOHamiltonian(square, vertical_operators);","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"There are various utility functions available for constructing more advanced lattices, for which the lattices section should be consulted.","category":"page"},{"location":"man/operators/#Expert-mode","page":"Operators","title":"Expert mode","text":"","category":"section"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"The MPOHamiltonian constructor is in fact an automated way of constructing the aforementioned Jordan block MPO. In its most general form, the matrix W takes on the form of the following block matrix:","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"beginpmatrix\n1 C D \n0 A B \n0 0 1\nendpmatrix","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"which generates all single-site local operators D, all two-site operators CB, three-site operators CAB, and so on. Additionally, this machinery can also be used to construct interaction that are of (exponentially decaying) infinite range, and to approximate power-law interactions.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"In order to illustrate this, consider the following explicit example of the Transverse-field Ising model:","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"W = beginpmatrix\n1 X -hZ \n0 0 -JX \n0 0 1\nendpmatrix","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"If we add in the left and right boundary vectors","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"v_L = beginpmatrix\n1 0 0\nendpmatrix\n qquad \nv_R = beginpmatrix\n0 0 1\nendpmatrix","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"One can easily check that the Hamiltonian on N sites is given by the contraction","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"H = V_L W^otimes N V_R","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"We can even verify this symbolically:","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"using Symbolics\nL = 4\n# generate W matrices\n@variables A[1:L] B[1:L] C[1:L] D[1:L]\nWs = map(1:L) do l\n return [1 C[l] D[l]\n 0 A[l] B[l]\n 0 0 1]\nend\n\n# generate boundary vectors\nVₗ = [1, 0, 0]'\nVᵣ = [0, 0, 1]\n\n# expand the MPO\nexpand(Vₗ * prod(Ws) * Vᵣ)","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"The MPOHamiltonian constructor can also be used to construct the operator from this most general form, by supplying a 3-dimensional array W to the constructor. Here, the first dimension specifies the site in the unit cell, the second dimension specifies the row of the matrix, and the third dimension specifies the column of the matrix.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"data = Array{Any,3}(missing, 1, 3, 3) # missing is interpreted as zero\ndata[1, 1, 1] = id(Matrix{ComplexF64}, ℂ^2)\ndata[1, 3, 3] = 1 # regular numbers are interpreted as identity operators\ndata[1, 1, 2] = -J * S_x\ndata[1, 2, 3] = S_x\ndata[1, 1, 3] = -h * S_z\ndata_range = repeat(data, 4, 1, 1) # make 4 sites long\nH_ising″ = MPOHamiltonian(data_range)","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"MPSKit will then automatically attach the correct boundary vectors to the Hamiltonian whenever this is required.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"note: Note\nWhile the above example can be constructed from building blocks that are strictly local operators, i.e. TensorMaps with a single ingoing and outgoing index. This is not always the case, especially when symmetries are involved. In those cases, the elements of the matrix W have additional virtual legs that are contracted between different sites. As such, indexing an MPOHamiltonian object will result in a TensorMap with four legs.","category":"page"},{"location":"man/operators/#Working-with-MPOHamiltonian-objects","page":"Operators","title":"Working with MPOHamiltonian objects","text":"","category":"section"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"warning: Warning\nThis part is still a work in progress","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"Because of the discussion above, the MPOHamiltonian object is in fact just a FiniteMPO, with some additional structure. This means that similar operations and properties are available, such as the virtual spaces, or the individual tensors. However, the block structure of the operator means that now the virtual spaces are not just a single space, but a collection (direct sum) of spaces, one for each row/column.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"","category":"page"},{"location":"man/operators/#DenseMPO","page":"Operators","title":"DenseMPO","text":"","category":"section"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"This operator is used for statistical physics problems. It is simply a periodic array of mpo tensors.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"Can be created using","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"DenseMPO(t::AbstractArray{T,1}) where T<:MPOTensor","category":"page"},{"location":"man/operators/#SparseMPO","page":"Operators","title":"SparseMPO","text":"","category":"section"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"SparseMPO is similar to a DenseMPO, in that it again represents an mpo tensor, periodically repeated. However this type keeps track of all internal zero blocks, allowing for a more efficient representation of certain operators (such as time evolution operators and quantum hamiltonians). You can convert a sparse mpo to a densempo, but the converse does not hold.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"Indexing a SparseMPO returns a SparseMPOSlice object, which has 3 fields","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"MPSKit.SparseMPOSlice","category":"page"},{"location":"man/operators/#MPSKit.SparseMPOSlice","page":"Operators","title":"MPSKit.SparseMPOSlice","text":"SparseMPOSlice{S,T,E} <: AbstractArray{T,2}\n\nA view of a sparse MPO at a single position.\n\nFields\n\nOs::AbstractMatrix{Union{T,E}}: matrix of operators.\ndomspaces::AbstractVector{S}: list of left virtual spaces.\nimspaces::AbstractVector{S}: list of right virtual spaces.\npspace::S: physical space.\n\n\n\n\n\n","category":"type"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"When indexing a SparseMPOSlice at index [j, k] (or equivalently SparseMPO[i][j, k]), the code looks up the corresponding field in Os[j, k]. Either that element is a tensormap, in which case it gets returned. If it equals zero(E), then we return a tensormap","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"domspaces[j] * pspace ← pspace * imspaces[k]","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"with norm zero. If the element is a nonzero number, then implicitly we have the identity operator there (multiplied by that element).","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"The idea here is that you don't have to worry about the underlying structure, you can just index into a sparsempo as if it is a vector of matrices. Behind the scenes we then optimize certain contractions by using the sparsity structure.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"SparseMPO are always assumed to be periodic in the first index (position). In this way, we can both represent periodic infinite mpos and place dependent finite mpos.","category":"page"},{"location":"#MPSKit.jl","page":"Home","title":"MPSKit.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Efficient and versatile tools for working with matrix product states","category":"page"},{"location":"#Table-of-contents","page":"Home","title":"Table of contents","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Pages = [\"man/intro.md\",\"man/conventions.md\",\"man/states.md\",\"man/operators.md\",\"man/algorithms.md\",\"man/parallelism.md\", \"man/lattices.md\"]\nDepth = 1","category":"page"},{"location":"#Installation","page":"Home","title":"Installation","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"MPSKit.jl is a part of the general registry, and can be installed via the package manager as:","category":"page"},{"location":"","page":"Home","title":"Home","text":"pkg> add MPSKit","category":"page"},{"location":"#Key-Features","page":"Home","title":"Key Features","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Construction and manipulation of Matrix Product States (MPS)\nCalculation of observables and expectation values\nVarious optimization methods for obtaining MPS fixed points\nSupport for both finite and infinite MPS\nSupport for wide variety of symmetries, including Abelian, non-Abelian, fermionic and anyonic symmetries","category":"page"},{"location":"#Usage","page":"Home","title":"Usage","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"To get started with MPSKit, we recommend also including TensorKit.jl and MPSKitModels.jl. The former defines the tensor backend which is used throughout MPSKit, while the latter includes some common operators and models.","category":"page"},{"location":"","page":"Home","title":"Home","text":"using TensorOperations\nusing TensorKit\nusing MPSKit\nusing MPSKitModels\nusing LinearAlgebra: norm","category":"page"},{"location":"#Finite-Matrix-Product-States","page":"Home","title":"Finite Matrix Product States","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"using LinearAlgebra\nusing TensorOperations\nusing TensorKit\nusing MPSKit\nusing MPSKitModels","category":"page"},{"location":"","page":"Home","title":"Home","text":"Finite MPS are characterised by a set of tensors, one for each site, which each have 3 legs. They can be constructed by specifying the virtual spaces and the physical spaces, i.e. the dimensions of each of the legs. These are then contracted to form the MPS. In MPSKit, they are represented by FiniteMPS, which can be constructed either by passing in the tensors directly, or by specifying the dimensions of the legs.","category":"page"},{"location":"","page":"Home","title":"Home","text":"d = 2 # physical dimension\nD = 5 # virtual dimension\nL = 10 # number of sites\n\nmps = FiniteMPS(L, ComplexSpace(d), ComplexSpace(D)) # random MPS with maximal bond dimension D","category":"page"},{"location":"","page":"Home","title":"Home","text":"The FiniteMPS object then handles the gauging of the MPS, which is necessary for many of the algorithms. This is done automatically when needed, and the user can access the gauged tensors by getting and setting the AL, AR, CR/CL and AC fields, which each represent a vector of these tensors.","category":"page"},{"location":"","page":"Home","title":"Home","text":"al = mps.AL[3] # left gauged tensor of the third site\n@tensor E[a; b] := al[c, d, b] * conj(al[c, d, a])\n@show isapprox(E, id(left_virtualspace(mps, 3)))","category":"page"},{"location":"","page":"Home","title":"Home","text":"ar = mps.AR[3] # right gauged tensor of the third site\n@tensor E[a; b] := ar[a, d, c] * conj(ar[b, d, c])\n@show isapprox(E, id(right_virtualspace(mps, 2)))","category":"page"},{"location":"","page":"Home","title":"Home","text":"As the mps will be kept in a gauged form, updating a tensor will also update the gauged tensors. For example, we can set the tensor of the third site to the identity, and the gauged tensors will be updated accordingly.","category":"page"},{"location":"","page":"Home","title":"Home","text":"mps.CR[3] = id(domain(mps.CR[3]))\nprintln(mps)","category":"page"},{"location":"","page":"Home","title":"Home","text":"These objects can then be used to compute observables and expectation values. For example, the expectation value of the identity operator at the third site, which is equal to the norm of the MPS, can be computed as:","category":"page"},{"location":"","page":"Home","title":"Home","text":"N1 = LinearAlgebra.norm(mps)\nN2 = expectation_value(mps, 3 => id(physicalspace(mps, 3)))\nprintln(\"‖mps‖ = $N1\")\nprintln(\" = $N2\")","category":"page"},{"location":"","page":"Home","title":"Home","text":"Finally, the MPS can be optimized in order to determine groundstates of given Hamiltonians. Using the pre-defined models in MPSKitModels, we can construct the groundstate for the transverse field Ising model:","category":"page"},{"location":"","page":"Home","title":"Home","text":"H = transverse_field_ising(; J=1.0, g=0.5)\nfind_groundstate!(mps, H, DMRG(; maxiter=10))\nE0 = expectation_value(mps, H)\nprintln(\" = $(sum(real(E0)) / length(mps))\")","category":"page"},{"location":"#Infinite-Matrix-Product-States","page":"Home","title":"Infinite Matrix Product States","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"using LinearAlgebra\nusing TensorOperations\nusing TensorKit\nusing MPSKit\nusing MPSKitModels","category":"page"},{"location":"","page":"Home","title":"Home","text":"Similarly, an infinite MPS can be constructed by specifying the tensors for the unit cell, characterised by the spaces (dimensions) thereof.","category":"page"},{"location":"","page":"Home","title":"Home","text":"d = 2 # physical dimension\nD = 5 # virtual dimension\nmps = InfiniteMPS(d, D) # random MPS","category":"page"},{"location":"","page":"Home","title":"Home","text":"The InfiniteMPS object then handles the gauging of the MPS, which is necessary for many of the algorithms. This is done automatically upon creation of the object, and the user can access the gauged tensors by getting and setting the AL, AR, CR/CL and AC fields, which each represent a (periodic) vector of these tensors.","category":"page"},{"location":"","page":"Home","title":"Home","text":"al = mps.AL[1] # left gauged tensor of the third site\n@tensor E[a; b] := al[c, d, b] * conj(al[c, d, a])\n@show isapprox(E, id(left_virtualspace(mps, 1)))","category":"page"},{"location":"","page":"Home","title":"Home","text":"ar = mps.AR[1] # right gauged tensor of the third site\n@tensor E[a; b] := ar[a, d, c] * conj(ar[b, d, c])\n@show isapprox(E, id(right_virtualspace(mps, 2)))","category":"page"},{"location":"","page":"Home","title":"Home","text":"As regauging the MPS is not possible without recomputing all the tensors, setting a single tensor is not supported. Instead, the user should construct a new mps object with the desired tensor, which will then be gauged upon construction.","category":"page"},{"location":"","page":"Home","title":"Home","text":"als = 3 .* mps.AL\nmps = InfiniteMPS(als)","category":"page"},{"location":"","page":"Home","title":"Home","text":"These objects can then be used to compute observables and expectation values. For example, the norm of the MPS, which is equal to the expectation value of the identity operator can be computed by:","category":"page"},{"location":"","page":"Home","title":"Home","text":"N1 = norm(mps)\nN2 = expectation_value(mps, 1 => id(physicalspace(mps, 1)))\nprintln(\"‖mps‖ = $N1\")\nprintln(\" = $N2\")","category":"page"},{"location":"","page":"Home","title":"Home","text":"note: Normalization of infinite MPS\nBecause infinite MPS cannot sensibly be normalized to anything but 1, the norm of an infinite MPS is always set to be 1 at construction. If this were not the case, any observable computed from the MPS would either blow up to infinity or vanish to zero.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Finally, the MPS can be optimized in order to determine groundstates of given Hamiltonians. Using the pre-defined models in MPSKitModels, we can construct the groundstate for the transverse field Ising model:","category":"page"},{"location":"","page":"Home","title":"Home","text":"H = transverse_field_ising(; J=1.0, g=0.5)\nmps, = find_groundstate(mps, H, VUMPS(; maxiter=10))\nE0 = expectation_value(mps, H)\nprintln(\" = $(sum(real(E0)) / length(mps))\")","category":"page"},{"location":"#Additional-Resources","page":"Home","title":"Additional Resources","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"For more detailed information on the functionality and capabilities of MPSKit, refer to the Manual section, or have a look at the Examples page.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Keep in mind that the documentation is still a work in progress, and that some features may not be fully documented yet. If you encounter any issues or have questions, please check the library's issue tracker on the GitHub repository and open a new issue.","category":"page"},{"location":"#Publications-using-MPSKit","page":"Home","title":"Publications using MPSKit","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Below you can find a list of publications that have made use of MPSKit. If you have used this package and wish to have your publication added to this list, please open a pull request or an issue on the GitHub repository.","category":"page"},{"location":"","page":"Home","title":"Home","text":"R. Belyansky et al., “High-Energy Collision of Quarks and Hadrons in the Schwinger Model: From Tensor Networks to Circuit QED,” 2023, doi: 10.48550/ARXIV.2307.02522.\nL. Devos, L. Vanderstraeten, and F. Verstraete, “Haldane gap in the SU(3) [3 0 0] Heisenberg chain,” Phys. Rev. B, vol. 106, no. 15, p. 155103, Oct. 2022, doi: 10.1103/PhysRevB.106.155103.\nJ. C. Halimeh, M. V. Damme, T. V. Zache, D. Banerjee, and P. Hauke, “Achieving the quantum field theory limit in far-from-equilibrium quantum link models,” Quantum, vol. 6, p. 878, Dec. 2022, doi: 10.22331/q-2022-12-19-878.\nJ. C. Halimeh, D. Trapin, M. Van Damme, and M. Heyl, “Local measures of dynamical quantum phase transitions,” Phys. Rev. B, vol. 104, no. 7, p. 075130, Aug. 2021, doi: 10.1103/PhysRevB.104.075130.\nM. Hauru, M. Van Damme, and J. Haegeman, “Riemannian optimization of isometric tensor networks,” SciPost Physics, vol. 10, no. 2, p. 040, Feb. 2021, doi: 10.21468/SciPostPhys.10.2.040.\nM. Van Damme, R. Vanhove, J. Haegeman, F. Verstraete, and L. Vanderstraeten, “Efficient matrix product state methods for extracting spectral information on rings and cylinders,” Phys. Rev. B, vol. 104, no. 11, p. 115142, Sep. 2021, doi: 10.1103/PhysRevB.104.115142.\nM. Van Damme, T. V. Zache, D. Banerjee, P. Hauke, and J. C. Halimeh, “Dynamical quantum phase transitions in spin-S textU(1) quantum link models,” Phys. Rev. B, vol. 106, no. 24, p. 245110, Dec. 2022, doi: 10.1103/PhysRevB.106.245110.\nE. L. Weerda and M. Rizzi, “Fractional quantum Hall states with variational Projected Entangled-Pair States: a study of the bosonic Harper-Hofstadter model,” 2023, doi: 10.48550/ARXIV.2309.12811.\nC. Yu and J.-W. Lee, “Closing of the Haldane gap in a spin-1 XXZ chain,” J. Korean Phys. Soc., vol. 79, no. 9, pp. 841–845, Nov. 2021, doi: 10.1007/s40042-021-00283-z.\nY. Zhang, A. Hulsch, H.-C. Zhang, W. Tang, L. Wang, and H.-H. Tu, “Universal Scaling of Klein Bottle Entropy near Conformal Critical Points,” Phys. Rev. Lett., vol. 130, no. 15, p. 151602, Apr. 2023, doi: 10.1103/PhysRevLett.130.151602.\nGertian Roose, Laurens Vanderstraeten, Jutho Haegeman, and Nick Bultinck. Anomalous domain wall condensation in a modified ising chain. Phys. Rev. B, 99: 195132, May 2019. 10.1103/​PhysRevB.99.195132.","category":"page"},{"location":"","page":"Home","title":"Home","text":"https:/​/​doi.org/​10.1103/​PhysRevB.99.195132","category":"page"},{"location":"","page":"Home","title":"Home","text":"Roose, G., Bultinck, N., Vanderstraeten, L. et al. Lattice regularisation and entanglement structure of the Gross-Neveu model. J. High Energ. Phys. 2021, 207 (2021). https://doi.org/10.1007/JHEP07(2021)207\nRoose, G., Haegeman, J., Van Acoleyen, K. et al. The chiral Gross-Neveu model on the lattice via a Landau-forbidden phase transition. J. High Energ. Phys. 2022, 19 (2022). https://doi.org/10.1007/JHEP06(2022)019","category":"page"}] +[{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"EditURL = \"../../../../../examples/quantum1d/2.haldane/main.jl\"","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"examples/quantum1d/2.haldane/#demo_haldane","page":"The Haldane gap","title":"The Haldane gap","text":"","category":"section"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"In this tutorial we will calculate the Haldane gap (the energy gap in the S = 1 Heisenberg model) in two different ways. To follow the tutorial you need the following packages:","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"using MPSKit, MPSKitModels, TensorKit, Plots, Polynomials","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"The Heisenberg model is defined by the following hamiltonian:","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"H = -J_ij (X_i X_j + Y_i Y_j + Z_i Z_j)","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"This hamiltonian has an SU(2) symmetry, which we can enforce by using SU(2)-symmetric tensors:","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"H = heisenberg_XXX(ComplexF64, SU2Irrep; spin=1, J=1);","category":"page"},{"location":"examples/quantum1d/2.haldane/#Finite-size-extrapolation","page":"The Haldane gap","title":"Finite size extrapolation","text":"","category":"section"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"We can start the analysis using finite-size methods. The groundstate of this model can be approximated using finite MPS through the use of DMRG.","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"The typical way to find excited states is to minimize the energy while adding an error term λ leftgsright left gsright Here we will instead use the quasiparticle ansatz.","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"In Steven White's original DMRG paper it was remarked that the S = 1 excitations correspond to edge states, and that one should define the Haldane gap as the difference in energy between the S = 2 and S = 1 states. This can be done as follows.","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"L = 11\nphysical_space = SU2Space(1 => 1)\nvirtual_space = SU2Space(0 => 12, 1 => 12, 2 => 5, 3 => 3)\nψ₀ = FiniteMPS(rand, ComplexF64, L, physical_space, virtual_space)\nψ, envs, delta = find_groundstate(ψ₀, H, DMRG(; verbosity=0))\nE₀ = real(expectation_value(ψ, H))\nEn_1, st_1 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector=SU2Irrep(1))\nEn_2, st_2 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector=SU2Irrep(2))\nΔE_finite = real(En_2[1] - En_1[1])","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"0.7989253589480483","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"We can go even further and doublecheck the claim that S = 1 is an edge excitation, by plotting the energy density.","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"p_density = plot(; xaxis=\"position\", yaxis=\"energy density\")\nexcited_1 = convert(FiniteMPS, st_1[1])\nexcited_2 = convert(FiniteMPS, st_2[1])\nSS = -S_exchange(ComplexF64, SU2Irrep; spin=1)\ne₀ = [real(expectation_value(ψ, (i, i + 1) => SS)) for i in 1:(L - 1)]\ne₁ = [real(expectation_value(excited_1, (i, i + 1) => SS)) for i in 1:(L - 1)]\ne₂ = [real(expectation_value(excited_2, (i, i + 1) => SS)) for i in 1:(L - 1)]\nplot!(p_density, e₀; label=\"S = 0\")\nplot!(p_density, e₁; label=\"S = 1\")\nplot!(p_density, e₂; label=\"S = 2\")","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"Finally, we can obtain a value for the Haldane gap by extrapolating our results for different system sizes.","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"Ls = 12:4:30\nΔEs = map(Ls) do L\n @info \"computing L = $L\"\n ψ₀ = FiniteMPS(rand, ComplexF64, L, physical_space, virtual_space)\n ψ, envs, delta = find_groundstate(ψ₀, H, DMRG(; verbosity=0))\n En_1, st_1 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector=SU2Irrep(1))\n En_2, st_2 = excitations(H, QuasiparticleAnsatz(), ψ, envs; sector=SU2Irrep(2))\n return real(En_2[1] - En_1[1])\nend\n\nf = fit(Ls .^ (-2), ΔEs, 1)\nΔE_extrapolated = f.coeffs[1]","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"0.45173401585837447","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"p_size_extrapolation = plot(; xaxis=\"L^(-2)\", yaxis=\"ΔE\", xlims=(0, 0.015))\nplot!(p_size_extrapolation, Ls .^ (-2), ΔEs; seriestype=:scatter, label=\"numerical\")\nplot!(p_size_extrapolation, x -> f(x); label=\"fit\")","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/2.haldane/#Thermodynamic-limit","page":"The Haldane gap","title":"Thermodynamic limit","text":"","category":"section"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"A much nicer way of obtaining the Haldane gap is by working directly in the thermodynamic limit. As was already hinted at by the edge modes, this model is in a non-trivial SPT phase. Thus, care must be taken when selecting the symmetry sectors. The groundstate has half-integer edge modes, thus the virtual spaces must also all carry half-integer charges.","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"In contrast with the finite size case, we now should specify a momentum label to the excitations. This way, it is possible to scan the dispersion relation over the entire momentum space.","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"virtual_space_inf = Rep[SU₂](1 // 2 => 16, 3 // 2 => 16, 5 // 2 => 8, 7 // 2 => 4)\nψ₀_inf = InfiniteMPS([physical_space], [virtual_space_inf])\nψ_inf, envs_inf, delta_inf = find_groundstate(ψ₀_inf, H; verbosity=0)\n\nkspace = range(0, π, 16)\nEs, _ = excitations(H, QuasiparticleAnsatz(), kspace, ψ_inf, envs_inf; sector=SU2Irrep(1))\n\nΔE, idx = findmin(real.(Es))\nprintln(\"minimum @k = $(kspace[idx]):\\t ΔE = $(ΔE)\")","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"┌ Warning: resorting to η\n└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139\n┌ Warning: resorting to η\n└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139\n┌ Warning: resorting to η\n└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139\n┌ Warning: resorting to η\n└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139\n┌ Warning: resorting to η\n└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139\n┌ Warning: resorting to η\n└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139\n┌ Warning: resorting to η\n└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139\n┌ Warning: resorting to η\n└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139\n[ Info: Found excitations for momentum = 1.8849555921538759\n[ Info: Found excitations for momentum = 1.6755160819145563\n[ Info: Found excitations for momentum = 2.0943951023931953\n[ Info: Found excitations for momentum = 0.0\n[ Info: Found excitations for momentum = 0.20943951023931953\n[ Info: Found excitations for momentum = 1.4660765716752369\n[ Info: Found excitations for momentum = 2.722713633111154\n[ Info: Found excitations for momentum = 0.41887902047863906\n[ Info: Found excitations for momentum = 2.303834612632515\n[ Info: Found excitations for momentum = 1.2566370614359172\n[ Info: Found excitations for momentum = 2.5132741228718345\n[ Info: Found excitations for momentum = 2.9321531433504737\n[ Info: Found excitations for momentum = 0.6283185307179586\n[ Info: Found excitations for momentum = 3.141592653589793\n[ Info: Found excitations for momentum = 1.0471975511965976\n[ Info: Found excitations for momentum = 0.8377580409572781\nminimum @k = 3.141592653589793:\t ΔE = 0.4104792658835073\n","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"plot(kspace, real.(Es); xaxis=\"momentum\", yaxis=\"ΔE\", label=\"S = 1\")","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"","category":"page"},{"location":"examples/quantum1d/2.haldane/","page":"The Haldane gap","title":"The Haldane gap","text":"This page was generated using Literate.jl.","category":"page"},{"location":"lib/lib/#Library-documentation","page":"Library","title":"Library documentation","text":"","category":"section"},{"location":"lib/lib/#lib_states","page":"Library","title":"States","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"FiniteMPS\nInfiniteMPS\nWindowMPS\nMPSMultiline","category":"page"},{"location":"lib/lib/#MPSKit.FiniteMPS","page":"Library","title":"MPSKit.FiniteMPS","text":"FiniteMPS{A<:GenericMPSTensor,B<:MPSBondTensor} <: AbstractFiniteMPS\n\nType that represents a finite Matrix Product State.\n\nFields\n\nALs – left-gauged MPS tensors\nARs – right-gauged MPS tensors\nACs – center-gauged MPS tensors\nCLs – gauge tensors\n\nWhere each is entry can be a tensor or missing.\n\nNotes\n\nBy convention, we have that:\n\nAL[i] * CL[i+1] = AC[i] = CL[i] * AR[i]\nAL[i]' * AL[i] = 1\nAR[i] * AR[i]' = 1\n\n\n\nConstructors\n\nFiniteMPS([f, eltype], physicalspaces::Vector{<:Union{S,CompositeSpace{S}}},\n maxvirtualspaces::Union{S,Vector{S}};\n normalize=true, left=oneunit(S), right=oneunit(S)) where {S<:ElementarySpace}\nFiniteMPS([f, eltype], N::Int, physicalspace::Union{S,CompositeSpace{S}},\n maxvirtualspaces::Union{S,Vector{S}};\n normalize=true, left=oneunit(S), right=oneunit(S)) where {S<:ElementarySpace}\nFiniteMPS(As::Vector{<:GenericMPSTensor}; normalize=false, overwrite=false)\n\nConstruct an MPS via a specification of physical and virtual spaces, or from a list of tensors As. All cases reduce to the latter.\n\nArguments\n\nAs::Vector{<:GenericMPSTensor}: vector of site tensors\nf::Function=rand: initializer function for tensor data\neltype::Type{<:Number}=ComplexF64: scalar type of tensors\nphysicalspaces::Vector{<:Union{S, CompositeSpace{S}}: list of physical spaces\nN::Int: number of sites\nphysicalspace::Union{S,CompositeSpace{S}}: local physical space\nvirtualspaces::Vector{<:Union{S, CompositeSpace{S}}: list of virtual spaces\nmaxvirtualspace::S: maximum virtual space\n\nKeywords\n\nnormalize: normalize the constructed state\noverwrite=false: overwrite the given input tensors\nleft=oneunit(S): left-most virtual space\nright=oneunit(S): right-most virtual space\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.InfiniteMPS","page":"Library","title":"MPSKit.InfiniteMPS","text":"InfiniteMPS{A<:GenericMPSTensor,B<:MPSBondTensor} <: AbtractMPS\n\nType that represents an infinite Matrix Product State.\n\nFields\n\nAL – left-gauged MPS tensors\nAR – right-gauged MPS tensors\nAC – center-gauged MPS tensors\nCR – gauge tensors\n\nNotes\n\nBy convention, we have that:\n\nAL[i] * CR[i] = AC[i] = CR[i-1] * AR[i]\nAL[i]' * AL[i] = 1\nAR[i] * AR[i]' = 1\n\n\n\nConstructors\n\nInfiniteMPS([f, eltype], physicalspaces::Vector{<:Union{S, CompositeSpace{S}},\n virtualspaces::Vector{<:Union{S, CompositeSpace{S}};\n kwargs...) where {S<:ElementarySpace}\nInfiniteMPS(As::AbstractVector{<:GenericMPSTensor}; kwargs...)\nInfiniteMPS(ALs::AbstractVector{<:GenericMPSTensor}, C₀::MPSBondTensor;\n kwargs...)\n\nConstruct an MPS via a specification of physical and virtual spaces, or from a list of tensors As, or a list of left-gauged tensors ALs.\n\nArguments\n\nAs::AbstractVector{<:GenericMPSTensor}: vector of site tensors\nALs::AbstractVector{<:GenericMPSTensor}: vector of left-gauged site tensors\nC₀::MPSBondTensor: initial gauge tensor\nf::Function=rand: initializer function for tensor data\neltype::Type{<:Number}=ComplexF64: scalar type of tensors\nphysicalspaces::AbstractVector{<:Union{S, CompositeSpace{S}}: list of physical spaces\nvirtualspaces::AbstractVector{<:Union{S, CompositeSpace{S}}: list of virtual spaces\n\nKeywords\n\ntol: gauge fixing tolerance\nmaxiter: gauge fixing maximum iterations\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.WindowMPS","page":"Library","title":"MPSKit.WindowMPS","text":"WindowMPS{A<:GenericMPSTensor,B<:MPSBondTensor} <: AbstractFiniteMPS\n\nType that represents a finite Matrix Product State embedded in an infinte Matrix Product State.\n\nFields\n\nleft_gs::InfiniteMPS – left infinite environment\nwindow::FiniteMPS – finite window Matrix Product State\nright_gs::InfiniteMPS – right infinite environment\n\n\n\nConstructors\n\nWindowMPS(left_gs::InfiniteMPS, window_state::FiniteMPS, [right_gs::InfiniteMPS])\nWindowMPS(left_gs::InfiniteMPS, window_tensors::AbstractVector, [right_gs::InfiniteMPS])\nWindowMPS([f, eltype], physicalspaces::Vector{<:Union{S, CompositeSpace{S}},\n virtualspaces::Vector{<:Union{S, CompositeSpace{S}}, left_gs::InfiniteMPS,\n [right_gs::InfiniteMPS])\nWindowMPS([f, eltype], physicalspaces::Vector{<:Union{S,CompositeSpace{S}}},\n maxvirtualspace::S, left_gs::InfiniteMPS, [right_gs::InfiniteMPS])\n\nConstruct a WindowMPS via a specification of left and right infinite environment, and either a window state or a vector of tensors to construct the window. Alternatively, it is possible to supply the same arguments as for the constructor of FiniteMPS, followed by a left (and right) environment to construct the WindowMPS in one step.\n\nnote: Note\nBy default, the right environment is chosen to be equal to the left, however no copy is made. In this case, changing the left state will also affect the right state.WindowMPS(state::InfiniteMPS, L::Int)\n\nConstruct a WindowMPS from an InfiniteMPS, by promoting a region of length L to a FiniteMPS.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.MPSMultiline","page":"Library","title":"MPSKit.MPSMultiline","text":"const MPSMultiline = Multiline{<:InfiniteMPS}\n\nType that represents multiple lines of InfiniteMPS objects.\n\nConstructors\n\nMPSMultiline(mpss::AbstractVector{<:InfiniteMPS})\nMPSMultiline([f, eltype], physicalspaces::Matrix{<:Union{S, CompositeSpace{S}},\n virtualspaces::Matrix{<:Union{S, CompositeSpace{S}}) where\n {S<:ElementarySpace}\nMPSMultiline(As::AbstractMatrix{<:GenericMPSTensor}; kwargs...)\nMPSMultiline(ALs::AbstractMatrix{<:GenericMPSTensor}, \n C₀::AbstractVector{<:MPSBondTensor}; kwargs...)\n\nSee also: Multiline\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#Operators","page":"Library","title":"Operators","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"FiniteMPO\nSparseMPO\nDenseMPO\nMPOHamiltonian","category":"page"},{"location":"lib/lib/#MPSKit.FiniteMPO","page":"Library","title":"MPSKit.FiniteMPO","text":"FiniteMPO(Os::Vector{<:MPOTensor}) -> FiniteMPO\nFiniteMPO(O::AbstractTensorMap{S,N,N}) where {S,N} -> FiniteMPO\n\nMatrix Product Operator (MPO) acting on a finite tensor product space with a linear order.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.SparseMPO","page":"Library","title":"MPSKit.SparseMPO","text":"struct SparseMPO{S,T<:MPOTensor,E<:Number}\n\nSparse MPO, used to represent both time evolution MPOs and hamiltonians.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.DenseMPO","page":"Library","title":"MPSKit.DenseMPO","text":"Represents a dense periodic mpo\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.MPOHamiltonian","page":"Library","title":"MPSKit.MPOHamiltonian","text":"MPOHamiltonian(lattice::AbstractArray{<:VectorSpace}, local_operators...)\nMPOHamiltonian(lattice::AbstractArray{<:VectorSpace})\nMPOHamiltonian(x::AbstractArray{<:Any,3})\n\nMPO representation of a hamiltonian. This is a specific form of a SparseMPO, where all the sites are represented by an upper triangular block matrix of the following form:\n\nbeginpmatrix\n1 C D\n0 A B\n0 0 1\nendpmatrix\n\nwhere A, B, C, and D are MPOTensors, or (sparse) blocks thereof.\n\nExamples\n\nFor example, constructing a nearest-neighbour Hamiltonian would look like this:\n\nlattice = fill(ℂ^2, 10)\nH = MPOHamiltonian(lattice, (i, i+1) => O for i in 1:length(lattice)-1)\n\nSee also instantiate_operator, which is responsable for instantiating the local operators in a form that is compatible with this constructor.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#Environments","page":"Library","title":"Environments","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"MPSKit.AbstractInfEnv\nMPSKit.PerMPOInfEnv\nMPSKit.MPOHamInfEnv\nMPSKit.FinEnv\nMPSKit.IDMRGEnvs","category":"page"},{"location":"lib/lib/#MPSKit.AbstractInfEnv","page":"Library","title":"MPSKit.AbstractInfEnv","text":"Abstract environment for an infinite state\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.PerMPOInfEnv","page":"Library","title":"MPSKit.PerMPOInfEnv","text":"This object manages the periodic mpo environments for an MPSMultiline\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.MPOHamInfEnv","page":"Library","title":"MPSKit.MPOHamInfEnv","text":"This object manages the hamiltonian environments for an InfiniteMPS\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.FinEnv","page":"Library","title":"MPSKit.FinEnv","text":"FinEnv keeps track of the environments for FiniteMPS / WindowMPS\nIt automatically checks if the queried environment is still correctly cached and if not - recalculates\n\nif above is set to nothing, above === below.\n\nopp can be a vector of nothing, in which case it'll just be the overlap\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#Generic-actions","page":"Library","title":"Generic actions","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"∂C\n∂∂C\n∂AC\n∂∂AC\n∂AC2\n∂∂AC2\n\nc_proj\nac_proj\nac2_proj\n\ntransfer_left\ntransfer_right","category":"page"},{"location":"lib/lib/#MPSKit.∂C","page":"Library","title":"MPSKit.∂C","text":"Zero-site derivative (the C matrix to the right of pos)\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.∂AC2","page":"Library","title":"MPSKit.∂AC2","text":"Two-site derivative\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.transfer_left","page":"Library","title":"MPSKit.transfer_left","text":"transfer_left(v, A, Ā)\n\napply a transfer matrix to the left.\n\n ┌─A─\n-v │\n └─Ā─\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.transfer_right","page":"Library","title":"MPSKit.transfer_right","text":"transfer_right(v, A, Ā)\n\napply a transfer matrix to the right.\n\n─A─┐\n │ v-\n─Ā─┘\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#Algorithms","page":"Library","title":"Algorithms","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"find_groundstate\ntimestep\nleading_boundary\ndynamicaldmrg\nchangebonds\nexcitations\napproximate","category":"page"},{"location":"lib/lib/#MPSKit.find_groundstate","page":"Library","title":"MPSKit.find_groundstate","text":"find_groundstate(ψ, H, [environments]; kwargs...)\nfind_groundstate(ψ, H, algorithm, environments)\n\nCompute the groundstate for Hamiltonian H with initial guess ψ. If not specified, an optimization algorithm will be attempted based on the supplied keywords.\n\nArguments\n\nψ::AbstractMPS: initial guess\nH::AbstractMPO: operator for which to find the groundstate\n[environments]: MPS environment manager\nalgorithm: optimization algorithm\n\nKeywords\n\ntol::Float64: tolerance for convergence criterium\nmaxiter::Int: maximum amount of iterations\nverbosity::Int: display progress information\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.timestep","page":"Library","title":"MPSKit.timestep","text":"timestep(ψ₀, H, t, dt, [alg], [envs]; kwargs...)\ntimestep!(ψ₀, H, t, dt, [alg], [envs]; kwargs...)\n\nTime-step the state ψ₀ with Hamiltonian H over a given time step dt at time t, solving the Schroedinger equation: i ψt = H ψ.\n\nArguments\n\nψ₀::AbstractMPS: initial state\nH::AbstractMPO: operator that generates the time evolution (can be time-dependent).\nt::Number: starting time of time-step\ndt::Number: time-step magnitude\n[alg]: algorithm to use for the time evolution. Defaults to TDVP.\n[envs]: MPS environment manager\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.leading_boundary","page":"Library","title":"MPSKit.leading_boundary","text":"leading_boundary(ψ, opp, alg, envs=environments(ψ, opp))\n\nApproximate the leading eigenvector for opp.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.changebonds","page":"Library","title":"MPSKit.changebonds","text":"changebonds(ψ::AbstractMPS, H, alg, envs) -> ψ′, envs′\nchangebonds(ψ::AbstractMPS, alg) -> ψ′\n\nChange the bond dimension of ψ using the algorithm alg, and return the new ψ and the new envs.\n\nSee also: SvdCut, RandExpand, VUMPSSvdCut, OptimalExpand\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.excitations","page":"Library","title":"MPSKit.excitations","text":"excitations(H, algorithm::QuasiparticleAnsatz, ψ::FiniteQP, [left_environments],\n [right_environments]; num=1)\nexcitations(H, algorithm::QuasiparticleAnsatz, ψ::InfiniteQP, [left_environments],\n [right_environments]; num=1, solver=Defaults.solver)\nexcitations(H, algorithm::FiniteExcited, ψs::NTuple{<:Any, <:FiniteMPS};\n num=1, init=copy(first(ψs)))\nexcitations(H, algorithm::ChepigaAnsatz, ψ::FiniteMPS, [envs];\n num=1, pos=length(ψ)÷2)\nexcitations(H, algorithm::ChepigaAnsatz2, ψ::FiniteMPS, [envs];\n num=1, pos=length(ψ)÷2)\n\nCompute the first excited states and their energy gap above a groundstate.\n\nArguments\n\nH::AbstractMPO: operator for which to find the excitations\nalgorithm: optimization algorithm\nψ::QP: initial quasiparticle guess\nψs::NTuple{N, <:FiniteMPS}: N first excited states\n[left_environments]: left groundstate environment\n[right_environments]: right groundstate environment\n\nKeywords\n\nnum::Int: number of excited states to compute\nsolver: algorithm for the linear solver of the quasiparticle environments\ninit: initial excited state guess\npos: position of perturbation\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.approximate","page":"Library","title":"MPSKit.approximate","text":"approximate(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)\napproximate!(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)\n\nCompute an approximation to the application of an operator O to the state ψ in the form of an MPS ψ₀.\n\nArguments\n\nψ₀::AbstractMPS: initial guess of the approximated state\n(O::AbstractMPO, ψ::AbstractMPS): operator O and state ψ to be approximated\nalgorithm: approximation algorithm. See below for a list of available algorithms.\n[environments]: MPS environment manager\n\nKeywords\n\ntol::Float64: tolerance for convergence criterium\nmaxiter::Int: maximum amount of iterations\nverbosity::Int: display progress information\n\nAlgorithms\n\nDMRG: Alternating least square method for maximizing the fidelity with a single-site scheme.\nDMRG2: Alternating least square method for maximizing the fidelity with a two-site scheme.\nIDMRG1: Variant of DMRG for maximizing fidelity density in the thermodynamic limit.\nIDMRG2: Variant of DMRG2 for maximizing fidelity density in the thermodynamic limit.\nVOMPS: Tangent space method for truncating uniform MPS.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#lib_gs_alg","page":"Library","title":"Groundstate algorithms","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"VUMPS\nIDMRG1\nIDMRG2\nDMRG\nDMRG2\nGradientGrassmann","category":"page"},{"location":"lib/lib/#MPSKit.VUMPS","page":"Library","title":"MPSKit.VUMPS","text":"VUMPS{F} <: Algorithm\n\nVariational optimization algorithm for uniform matrix product states, as introduced in https://arxiv.org/abs/1701.07035.\n\nFields\n\ntol::Float64: tolerance for convergence criterium\nmaxiter::Int: maximum amount of iterations\nfinalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, H, envs) -> ψ, envs\nverbosity::Int: display progress information\nalg_gauge=Defaults.alg_gauge(): algorithm for gauging\nalg_eigsolve=Defaults.alg_eigsolve(): algorithm for eigensolvers\nalg_environments=Defaults.alg_environments(): algorithm for updating environments\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.IDMRG1","page":"Library","title":"MPSKit.IDMRG1","text":"IDMRG1{A} <: Algorithm\n\nSingle site infinite DMRG algorithm for finding groundstates.\n\nFields\n\ntol::Float64: tolerance for convergence criterium\ntol_gauge::Float64: tolerance for gauging algorithm\neigalg::A: eigensolver algorithm\nmaxiter::Int: maximum number of outer iterations\nverbosity::Int: display progress information\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.IDMRG2","page":"Library","title":"MPSKit.IDMRG2","text":"IDMRG2{A} <: Algorithm\n\n2-site infinite DMRG algorithm for finding groundstates.\n\nFields\n\ntol::Float64: tolerance for convergence criterium\ntol_gauge::Float64: tolerance for gauging algorithm\neigalg::A: eigensolver algorithm\nmaxiter::Int: maximum number of outer iterations\nverbosity::Int: display progress information\ntrscheme::TruncationScheme: truncation algorithm for [tsvd]TensorKit.tsvd\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.DMRG","page":"Library","title":"MPSKit.DMRG","text":"DMRG{A,F} <: Algorithm\n\nSingle site DMRG algorithm for finding groundstates.\n\nFields\n\ntol::Float64: tolerance for convergence criterium\neigalg::A: eigensolver algorithm or a NamedTuple with the eigensolver settings\nmaxiter::Int: maximum number of outer iterations\nverbosity::Int: display progress information\nfinalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, H, envs) -> ψ, envs\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.DMRG2","page":"Library","title":"MPSKit.DMRG2","text":"DMRG2{A,F} <: Algorithm\n\n2-site DMRG algorithm for finding groundstates.\n\nFields\n\ntol::Float64: tolerance for convergence criterium\neigalg::A: eigensolver algorithm or a NamedTuple with the eigensolver settings\nmaxiter::Int: maximum number of outer iterations\nverbosity::Int: display progress information\nfinalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, H, envs) -> ψ, envs\ntrscheme: truncation algorithm for [tsvd]TensorKit.tsvd\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.GradientGrassmann","page":"Library","title":"MPSKit.GradientGrassmann","text":"GradientGrassmann <: Algorithm\n\nVariational gradient-based optimization algorithm that keeps the MPS in left-canonical form, as points on a Grassmann manifold. The optimization is then a Riemannian gradient descent with a preconditioner to induce the metric from the Hilbert space inner product.\n\nFields\n\nmethod::OptimKit.OptimizationAlgorithm: algorithm to perform the gradient search\nfinalize!::Function: user-supplied function which is applied after each iteration, with signature finalize!(x::GrassmannMPS.ManifoldPoint, f, g, numiter) -> x, f, g\n\n\n\nConstructors\n\nGradientGrassmann(; kwargs...)\n\nKeywords\n\nmethod=ConjugateGradient: instance of optimization algorithm, or type of optimization algorithm to construct\nfinalize!: finalizer algorithm\ntol::Float64: tolerance for convergence criterium\nmaxiter::Int: maximum amount of iterations\nverbosity::Int: level of information display\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#lib_time_alg","page":"Library","title":"Time evolution algorithms","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"TDVP\nTDVP2\nTaylorCluster\nWII","category":"page"},{"location":"lib/lib/#MPSKit.TDVP","page":"Library","title":"MPSKit.TDVP","text":"TDVP{A} <: Algorithm\n\nSingle site TDVP algorithm for time evolution.\n\nFields\n\nintegrator::A: integration algorithm (defaults to Lanczos exponentiation)\ntolgauge::Float64: tolerance for gauging algorithm\ngaugemaxiter::Int: maximum amount of gauging iterations\nfinalize::F: user-supplied function which is applied after each timestep, with signature finalize(t, Ψ, H, envs) -> Ψ, envs\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.TDVP2","page":"Library","title":"MPSKit.TDVP2","text":"TDVP2{A} <: Algorithm\n\n2-site TDVP algorithm for time evolution.\n\nFields\n\nintegrator::A: integrator algorithm (defaults to Lanczos exponentiation)\ntolgauge::Float64: tolerance for gauging algorithm\ngaugemaxiter::Int: maximum amount of gauging iterations\ntrscheme: truncation algorithm for [tsvd]TensorKit.tsvd\nfinalize::F: user-supplied function which is applied after each timestep, with signature finalize(t, Ψ, H, envs) -> Ψ, envs\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#lib_bound_alg","page":"Library","title":"Leading boundary algorithms","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"VUMPS\nVOMPS\nGradientGrassmann","category":"page"},{"location":"lib/lib/#MPSKit.VOMPS","page":"Library","title":"MPSKit.VOMPS","text":"VOMPS{F} <: Algorithm\n\nPower method algorithm for infinite MPS. SciPost:4.1.004\n\nFields\n\ntol::Float64: tolerance for convergence criterium\nmaxiter::Int: maximum amount of iterations\nfinalize::F: user-supplied function which is applied after each iteration, with signature finalize(iter, ψ, toapprox, envs) -> ψ, envs\nverbosity::Int: display progress information\nalg_gauge=Defaults.alg_gauge(): algorithm for gauging\nalg_environments=Defaults.alg_environments(): algorithm for updating environments\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#lib_bc_alg","page":"Library","title":"Bond change algorithms","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"OptimalExpand\nRandExpand\nVUMPSSvdCut\nSvdCut","category":"page"},{"location":"lib/lib/#MPSKit.OptimalExpand","page":"Library","title":"MPSKit.OptimalExpand","text":"struct OptimalExpand <: Algorithm end\n\nAn algorithm that expands the given mps using the algorithm given in the VUMPS paper, by selecting the dominant contributions of a two-site updated MPS tensor, orthogonal to the original ψ.\n\nFields\n\ntrscheme::TruncationScheme = truncdim(1) : The truncation scheme to use.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.RandExpand","page":"Library","title":"MPSKit.RandExpand","text":"struct RandExpand <: Algorithm end\n\nAn algorithm that expands the bond dimension by adding random unitary vectors that are orthogonal to the existing state. This is achieved by performing a truncated SVD on a random two-site MPS tensor, which is made orthogonal to the existing state.\n\nFields\n\ntrscheme::TruncationScheme = truncdim(1) : The truncation scheme to use.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.VUMPSSvdCut","page":"Library","title":"MPSKit.VUMPSSvdCut","text":"struct VUMPSSvdCut <: Algorithm end\n\nAn algorithm that uses an IDMRG2 step to change the bond dimension of a state.\n\nFields\n\ntol_gauge::Real = Defaults.tolgauge : The tolerance for the gauge.\ntol::Real = Defaults.tol : The tolerance for the Galerkin truncation.\ntol_eigenval::Real = Defaults.tol : The tolerance for the eigenvalue solver.\ntrscheme::TruncationScheme = notrunc() : The truncation scheme to use.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.SvdCut","page":"Library","title":"MPSKit.SvdCut","text":"struct SvdCut <: Algorithm end\n\nAn algorithm that uses truncated SVD to change the bond dimension of a ψ.\n\nFields\n\ntrscheme::TruncationScheme = notrunc() : The truncation scheme to use.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#lib_ex_alg","page":"Library","title":"Excitations","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"QuasiparticleAnsatz\nFiniteExcited","category":"page"},{"location":"lib/lib/#MPSKit.QuasiparticleAnsatz","page":"Library","title":"MPSKit.QuasiparticleAnsatz","text":"QuasiparticleAnsatz <: Algorithm\n\nOptimization algorithm for quasiparticle excitations on top of MPS groundstates, as introduced in this paper.\n\nFields\n\nalg::A = Defaults.eigsolver: algorithm to use for the eigenvalue problem\n\nConstructors\n\nQuasiparticleAnsatz()\nQuasiparticleAnsatz(; kwargs...)\nQuasiparticleAnsatz(alg)\n\nCreate a QuasiparticleAnsatz algorithm with the given algorithm, or by passing the keyword arguments to Arnoldi.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#MPSKit.FiniteExcited","page":"Library","title":"MPSKit.FiniteExcited","text":"FiniteExcited{A} <: Algorithm\n\nVariational optimization algorithm for excitations of finite Matrix Product States by minimizing the energy of H - λᵢ ψᵢψᵢ.\n\nFields\n\ngsalg::A: optimization algorithm.\nweight::Float64: energy penalty for previous states.\n\n\n\n\n\n","category":"type"},{"location":"lib/lib/#Utility","page":"Library","title":"Utility","text":"","category":"section"},{"location":"lib/lib/","page":"Library","title":"Library","text":"left_virtualspace\nright_virtualspace\nphysicalspace\nadd_util_leg\nexpectation_value\nvariance\nentanglement_spectrum\nentropy\ntransfer_spectrum\ncorrelation_length\nentanglementplot\ntransferplot","category":"page"},{"location":"lib/lib/#MPSKit.left_virtualspace","page":"Library","title":"MPSKit.left_virtualspace","text":"left_virtualspace(ψ::AbstractMPS, i::Int)\n\nReturn the left virtual space of the bond tensor to the right of site i. This is equivalent to the left virtual space of the left-gauged site tensor at site i + 1.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.right_virtualspace","page":"Library","title":"MPSKit.right_virtualspace","text":"right_virtualspace(ψ::AbstractMPS, i::Int)\n\nReturn the right virtual space of the bond tensor to the right of site i. This is equivalent to the right virtual space of the right-gauged site tensor at site i.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.physicalspace","page":"Library","title":"MPSKit.physicalspace","text":"physicalspace(ψ::AbstractMPS, i::Int)\n\nReturn the physical space of the site tensor at site i.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.add_util_leg","page":"Library","title":"MPSKit.add_util_leg","text":"add_util_leg(tensor::AbstractTensorMap{S,N1,N2}) where {S,N1,N2}\n -> AbstractTensorMap{S,N1+1,N2+1}\n\nAdd trivial one-dimensional utility spaces with trivial sector to the left and right of a given tensor map, i.e. as the first space of the codomain and the last space of the domain.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.expectation_value","page":"Library","title":"MPSKit.expectation_value","text":"expectation_value(ψ, O, [environments])\nexpectation_value(ψ, inds => O)\n\nCompute the expectation value of an operator O on a state ψ. Optionally, it is possible to make the computations more efficient by also passing in previously calculated environments.\n\nIn general, the operator O may consist of an arbitrary MPO O <: AbstractMPO that acts on all sites, or a local operator O = inds => operator acting on a subset of sites. In the latter case, inds is a tuple of indices that specify the sites on which the operator acts, while the operator is either a AbstractTensorMap or a FiniteMPO.\n\nArguments\n\nψ::AbstractMPS : the state on which to compute the expectation value\nO::Union{AbstractMPO,Pair} : the operator to compute the expectation value of. This can either be an AbstractMPO, or a pair of indices and local operator..\nenvironments::Cache : the environments to use for the calculation. If not given, they will be calculated.\n\nExamples\n\njulia> ψ = FiniteMPS(ones, Float64, 4, ℂ^2, ℂ^3);\n\njulia> S_x = TensorMap(Float64[0 1; 1 0], ℂ^2, ℂ^2);\n\njulia> round(expectation_value(ψ, 2 => S_x))\n1.0\n\njulia> round(expectation_value(ψ, (2, 3) => S_x ⊗ S_x))\n1.0\n\njulia> round(expectation_value(ψ, MPOHamiltonian(S_x)))\n4.0\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.variance","page":"Library","title":"MPSKit.variance","text":"variance(state, hamiltonian, [envs=environments(state, hamiltonian)])\n\nCompute the variance of the energy of the state with respect to the hamiltonian.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.entanglement_spectrum","page":"Library","title":"MPSKit.entanglement_spectrum","text":"entanglement_spectrum(ψ, [site::Int=0]) -> SectorDict{sectortype(ψ),Vector{<:Real}}\n\nCompute the entanglement spectrum at a given site, i.e. the singular values of the gauge matrix to the right of a given site. This is a dictionary mapping the charge to the singular values.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.entropy","page":"Library","title":"MPSKit.entropy","text":"entropy(state, [site::Int])\n\nCalculate the Von Neumann entanglement entropy of a given MPS. If an integer site is given, the entropy is across the entanglement cut to the right of site site. Otherwise, a vector of entropies is returned, one for each site.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.transfer_spectrum","page":"Library","title":"MPSKit.transfer_spectrum","text":"transfer_spectrum(above::InfiniteMPS; below=above, tol=Defaults.tol, num_vals=20,\n sector=first(sectors(oneunit(left_virtualspace(above, 1)))))\n\nCalculate the partial spectrum of the left mixed transfer matrix corresponding to the overlap of a given above state and a below state. The sector keyword argument can be used to specify a non-trivial total charge for the transfer matrix eigenvectors. Specifically, an auxiliary space ℂ[typeof(sector)](sector => 1)' will be added to the domain of each eigenvector. The tol and num_vals keyword arguments are passed to KrylovKit.eigolve\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.correlation_length","page":"Library","title":"MPSKit.correlation_length","text":"correlation_length(above::InfiniteMPS; kwargs...)\n\nCompute the correlation length of a given InfiniteMPS based on the next-to-leading eigenvalue of the transfer matrix. The kwargs are passed to transfer_spectrum, and can for example be used to target the correlation length in a specific sector. \n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.entanglementplot","page":"Library","title":"MPSKit.entanglementplot","text":"entanglementplot(state; site=0[, kwargs...])\n\nPlot the entanglement spectrum of a given InfiniteMPS. \n\nArguments\n\nsite::Int=0: mps index for multisite unit cells. Spectrum is computed for the bond between site and site + 1.\nexpand_symmetry::Logical=false: add quantum dimension degeneracies.\nsortby=maximum: the method of sorting the sectors.\nsector_margin=1//10: the amount of whitespace between sectors.\nsector_formatter=string: how to convert sectors to strings.\nkwargs...: other kwargs are passed on to the plotting backend.\n\n\n\n\n\n","category":"function"},{"location":"lib/lib/#MPSKit.transferplot","page":"Library","title":"MPSKit.transferplot","text":"transferplot(above, below[, sectors[, transferkwargs[, kwargs]]])\n\nPlot the partial transfer matrix spectrum of two InfiniteMPS's.\n\nArguments\n\nabove::InfiniteMPS: above mps for transfer_spectrum.\nbelow::InfiniteMPS: below mps for transfer_spectrum.\nsectors=[]: vector of sectors for which to compute the spectrum.\ntransferkwargs: kwargs for call to transfer_spectrum.\nkwargs: other kwargs are passed on to the plotting backend.\nthetaorigin=0: origin of the angle range.\nsector_formatter=string: how to convert sectors to strings.\n\n\n\n\n\n","category":"function"},{"location":"man/lattices/#lattices","page":"Lattices","title":"Lattices","text":"","category":"section"},{"location":"man/lattices/","page":"Lattices","title":"Lattices","text":"warning: Warning\nThis section is still under construction. Coming soon!","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"EditURL = \"../../../../../examples/quantum1d/3.ising-dqpt/main.jl\"","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/#DQPT-in-the-Ising-model(@id-demo_dqpt)","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"","category":"section"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"In this tutorial we will try to reproduce the results from this paper. The needed packages are","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"using MPSKit, MPSKitModels, TensorKit","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"Dynamical quantum phase transitions (DQPT in short) are signatures of equilibrium phase transitions in a dynamical quantity - the loschmidth echo. This quantity is given by L(t) = frac-2N ln( psi(t) psi(0) ) where N is the system size. One typically starts from a groundstate and then quenches the hamiltonian to a different point. Non analycities in the loschmidth echo are called 'dynamical quantum phase transitions'.","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"In the mentioned paper they work with","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"H(g) = - sum^N-1_i=1 sigma^z_i sigma^z_i+1 + g sum_i=1^N sigma^x_i","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"and show that divergences occur when quenching across the critical point (g₀ → g₁) for t^*_n = t^*(n+frac12) with t^* = pie(g_1k^*), cos(k^*) = (1+g_0 g_1) (g_0 + g_1), e(gk) = sqrt(g-cos k)^2 + sin^2 k.","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"The outline of the tutorial is as follows. We will pick g₀ = 05, g₁ = 20, and perform the time evolution at different system sizes and compare with the thermodynamic limit. For those g we expect non-analicities to occur at t_n 235 (n + 12).","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"First we construct the hamiltonian in mpo form, and obtain the pre-quenched groundstate:","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"H₀ = transverse_field_ising(; g=-0.5)\n\nL = 20\nψ₀ = FiniteMPS(rand, ComplexF64, L, ℂ^2, ℂ^10)\nψ₀, _ = find_groundstate(ψ₀, H₀, DMRG());","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"[ Info: DMRG init:\tobj = +9.799964091770e+00\terr = 1.5223e-01\n[ Info: DMRG 1:\tobj = -2.040021714743e+01\terr = 2.4038839149e-02\ttime = 0.09 sec\n[ Info: DMRG 2:\tobj = -2.040021715170e+01\terr = 6.0313575856e-07\ttime = 0.07 sec\n[ Info: DMRG 3:\tobj = -2.040021773534e+01\terr = 1.6799456960e-05\ttime = 0.14 sec\n[ Info: DMRG 4:\tobj = -2.040021786694e+01\terr = 1.9058246307e-06\ttime = 0.09 sec\n[ Info: DMRG 5:\tobj = -2.040021786703e+01\terr = 1.1474711603e-06\ttime = 0.05 sec\n[ Info: DMRG 6:\tobj = -2.040021786703e+01\terr = 4.3837579221e-10\ttime = 0.02 sec\n[ Info: DMRG conv 7:\tobj = -2.040021786703e+01\terr = 1.9834477158e-11\ttime = 0.50 sec\n","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/#Finite-MPS-quenching","page":"DQPT in the Ising model(@id demo_dqpt)","title":"Finite MPS quenching","text":"","category":"section"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"We can define a helper function that measures the loschmith echo","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"echo(ψ₀::FiniteMPS, ψₜ::FiniteMPS) = -2 * log(abs(dot(ψ₀, ψₜ))) / length(ψ₀)\n@assert isapprox(echo(ψ₀, ψ₀), 0, atol=1e-10)","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"We will initially use a two-site TDVP scheme to dynamically increase the bond dimension while time evolving, and later on switch to a faster one-site scheme. A single timestep can be done using","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"H₁ = transverse_field_ising(; g=-2.0)\nψₜ = deepcopy(ψ₀)\ndt = 0.01\nψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP2(; trscheme=truncdim(20)));","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"\"envs\" is a kind of cache object that keeps track of all environments in ψ. It is often advantageous to re-use the environment, so that mpskit doesn't need to recalculate everything.","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"Putting it all together, we get","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"function finite_sim(L; dt=0.05, finaltime=5.0)\n ψ₀ = FiniteMPS(rand, ComplexF64, L, ℂ^2, ℂ^10)\n ψ₀, _ = find_groundstate(ψ₀, H₀, DMRG())\n\n ψₜ = deepcopy(ψ₀)\n envs = environments(ψₜ, H₁)\n\n echos = [echo(ψₜ, ψ₀)]\n times = collect(0:dt:finaltime)\n\n for t in times[2:end]\n alg = t > 3 * dt ? TDVP() : TDVP2(; trscheme=truncdim(50))\n ψₜ, envs = timestep(ψₜ, H₁, 0, dt, alg, envs)\n push!(echos, echo(ψₜ, ψ₀))\n end\n\n return times, echos\nend","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"finite_sim (generic function with 1 method)","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"(Image: )","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/#Infinite-MPS-quenching","page":"DQPT in the Ising model(@id demo_dqpt)","title":"Infinite MPS quenching","text":"","category":"section"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"Similarly we could start with an initial infinite state and find the pre-quench groundstate:","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"ψ₀ = InfiniteMPS([ℂ^2], [ℂ^10])\nψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS());","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"[ Info: VUMPS init:\tobj = +5.000419382862e-01\terr = 3.8507e-01\n[ Info: VUMPS 1:\tobj = -1.062780898337e+00\terr = 2.4151374798e-02\ttime = 1.31 sec\n┌ Warning: ignoring imaginary component -3.817802691569172e-6 from total weight 2.4343214394239743: operator might not be hermitian?\n│ α = 1.7081089443203243 - 3.817802691569172e-6im\n│ β₁ = 0.14004438155194618\n│ β₂ = 1.7287776826281838\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -4.33258309393697e-6 from total weight 3.290563788912538: operator might not be hermitian?\n│ α = 2.784222669687663 - 4.33258309393697e-6im\n│ β₁ = 0.13141322180957496\n│ β₂ = 1.7488981501547187\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 2:\tobj = -1.063544409753e+00\terr = 1.4337063091e-05\ttime = 0.08 sec\n[ Info: VUMPS 3:\tobj = -1.063544409973e+00\terr = 1.7048015038e-07\ttime = 0.01 sec\n[ Info: VUMPS 4:\tobj = -1.063544409973e+00\terr = 1.7183182449e-08\ttime = 0.01 sec\n[ Info: VUMPS 5:\tobj = -1.063544409973e+00\terr = 5.8865202016e-10\ttime = 0.01 sec\n[ Info: VUMPS conv 6:\tobj = -1.063544409973e+00\terr = 6.8020365686e-11\ttime = 1.42 sec\n","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"The dot product of two infinite matrix product states scales as alpha ^N where α is the dominant eigenvalue of the transfer matrix. It is this α that is returned when calling","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"dot(ψ₀, ψ₀)","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"1.0000000000000018 - 7.06078012856404e-16im","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"so the loschmidth echo takes on the pleasant form","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"echo(ψ₀::InfiniteMPS, ψₜ::InfiniteMPS) = -2 * log(abs(dot(ψ₀, ψₜ)))\n@assert isapprox(echo(ψ₀, ψ₀), 0, atol=1e-10)","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"This time we cannot use a two-site scheme to grow the bond dimension, as this isn't implemented (yet). Instead, we have to make use of the changebonds machinery. Multiple algorithms are available, but we will only focus on OptimalEpand(). Growing the bond dimension by 5 can be done by calling:","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"ψₜ = deepcopy(ψ₀)\nψₜ, envs = changebonds(ψₜ, H₁, OptimalExpand(; trscheme=truncdim(5)));","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"a single timestep is easy","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"dt = 0.01\nψₜ, envs = timestep(ψₜ, H₁, 0, dt, TDVP(), envs);","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"With performance in mind we should once again try to re-use these \"envs\" cache objects. The final code is","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"function infinite_sim(dt=0.05, finaltime=5.0)\n ψ₀ = InfiniteMPS([ℂ^2], [ℂ^10])\n ψ₀, _ = find_groundstate(ψ₀, H₀, VUMPS())\n\n ψₜ = deepcopy(ψ₀)\n envs = environments(ψₜ, H₁)\n\n echos = [echo(ψₜ, ψ₀)]\n times = collect(0:dt:finaltime)\n\n for t in times[2:end]\n if t < 50dt # if t is sufficiently small, we increase the bond dimension\n ψₜ, envs = changebonds(ψₜ, H₁, OptimalExpand(; trscheme=truncdim(1)), envs)\n end\n (ψₜ, envs) = timestep(ψₜ, H₁, 0, dt, TDVP(), envs)\n push!(echos, echo(ψₜ, ψ₀))\n end\n\n return times, echos\nend","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"infinite_sim (generic function with 3 methods)","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"(Image: )","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"","category":"page"},{"location":"examples/quantum1d/3.ising-dqpt/","page":"DQPT in the Ising model(@id demo_dqpt)","title":"DQPT in the Ising model(@id demo_dqpt)","text":"This page was generated using Literate.jl.","category":"page"},{"location":"man/parallelism/#Parallelism-in-julia","page":"Parallelism in julia","title":"Parallelism in julia","text":"","category":"section"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"Julia has great parallelism infrastructure, but there is a caveat that is relevant for all algorithms implemented in MPSKit. The Julia threads do not play nicely together with the BLAS threads, which are the threads used for many of the linear algebra routines, and in particular for gemm (general matrix-matrix multiplication). As this is a core routine in MPSKit, this has a significant impact on the overall performance.","category":"page"},{"location":"man/parallelism/#Julia-threads-vs-BLAS-threads","page":"Parallelism in julia","title":"Julia threads vs BLAS threads","text":"","category":"section"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"A lot of the confusion stems from the fact that the BLAS threading behaviour is not consistent between different vendors. Additionally, performance behaviour is severely dependent on hardware, the specifics of the problem, and the availability of other resources such as total memory, or memory bandwith. This means that there is no one size fits all solution, and that you will have to experiment with the settings to get optimal performance. Nevertheless, there are some general guidelines that can be followed, which seem to at least work well in most cases.","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"The number of threads that are set by BLAS.set_num_threads(), in the case of OpenBLAS (the default vendor), is equal to the total number of BLAS threads that is kept in a pool, which is then shared by all Julia threads. This means that if you have 4 julia threads and 4 BLAS threads, then all julia threads will share the same 4 BLAS threads. On the other hand, using BLAS.set_num_threads(1), OpenBLAS will now utilize the julia threads to run the BLAS jobs. Thus, for OpenBLAS, very often setting the number of BLAS threads to 1 is the best option, which will then maximally utilize the julia threading infrastructure of MPSKit.","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"In the case of MKL.jl, which often outperforms OpenBLAS, the situation is a bit different. Here, the number of BLAS threads corresponds to the number of threads that are spawned by each julia thread. Thus, if you have 4 julia threads and 4 BLAS threads, then each julia thread will spawn 4 BLAS threads, for a total of 16 BLAS threads. As such, it might become necessary to adapt the settings to avoid oversubscription of the cores.","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"A careful analysis of the different cases and benefits can be inspected by making use of ThreadPinning.jl's tool threadinfo(; blas=true, info=true). In particular, the following might demonstrate the difference between OpenBLAS and MKL:","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"julia> Threads.nthreads()\n4\n\njulia> using ThreadPinning; threadinfo(; blas=true, hints=true)\n\nSystem: 8 cores (2-way SMT), 1 sockets, 1 NUMA domains\n\n| 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 | \n\n# = Julia thread, # = HT, # = Julia thread on HT, | = Socket seperator\n\nJulia threads: 4\n├ Occupied CPU-threads: 4\n└ Mapping (Thread => CPUID): 1 => 8, 2 => 5, 3 => 9, 4 => 2,\n\nBLAS: libopenblas64_.so\n└ openblas_get_num_threads: 8\n\n[ Info: jlthreads != 1 && blasthreads < cputhreads. You should either set BLAS.set_num_threads(1) (recommended!) or at least BLAS.set_num_threads(16).\n[ Info: jlthreads < cputhreads. Perhaps increase number of Julia threads to 16?\njulia> using MKL; threadinfo(; blas=true, hints=true)\n\nSystem: 8 cores (2-way SMT), 1 sockets, 1 NUMA domains\n\n| 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 | \n\n# = Julia thread, # = HT, # = Julia thread on HT, | = Socket seperator\n\nJulia threads: 4\n├ Occupied CPU-threads: 4\n└ Mapping (Thread => CPUID): 1 => 11, 2 => 12, 3 => 1, 4 => 2,\n\nBLAS: libmkl_rt.so\n├ mkl_get_num_threads: 8\n└ mkl_get_dynamic: true\n\n┌ Warning: blasthreads_per_jlthread > cputhreads_per_jlthread. You should decrease the number of MKL threads, i.e. BLAS.set_num_threads(4).\n└ @ ThreadPinning ~/.julia/packages/ThreadPinning/qV2Cd/src/threadinfo.jl:256\n[ Info: jlthreads < cputhreads. Perhaps increase number of Julia threads to 16?","category":"page"},{"location":"man/parallelism/#MPSKit-multithreading","page":"Parallelism in julia","title":"MPSKit multithreading","text":"","category":"section"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"Within MPSKit, when Julia is started with multiple threads, by default the Threads.@spawn machinery will be used to parallelize the code as much as possible. In particular, there are three main places where this is happening, which can be disabled separately through a preference-based system.","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"During the process of some algorithms (e.g. VUMPS), local updates can take place at each site in parallel. This can be controlled by the parallelize_sites preference.\nDuring the calculation of the environments, when the MPO is block-sparse, it is possible to parallelize over these blocks. This can be enabled or disabled by the parallelize_transfers preference. (Note that left- and right environments will always be computed in parallel)\nDuring the calculation of the derivatives, when the MPO is block-sparse, it is possible to parallelize over these blocks. This can be enabled or disabled by the parallelize_derivatives preference.","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"For convenience, these preferences can be set via MPSKit.Defaults.set_parallelization, which takes as input pairs of preferences and booleans. For example, to disable all parallelization, one can call","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"Defaults.set_parallelization(\"sites\" => false, \"transfers\" => false, \"derivatives\" => false)","category":"page"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"warning: Warning\nThese settings are statically set at compile-time, and for changes to take effect the Julia session must be restarted.","category":"page"},{"location":"man/parallelism/#TensorKit-multithreading","page":"Parallelism in julia","title":"TensorKit multithreading","text":"","category":"section"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"Finally, when dealing with tensors that have some internal symmetry, it is also possible to parallelize over the symmetry sectors. This is handled by TensorKit, and more information can be found in its documentation (Soon TM).","category":"page"},{"location":"man/parallelism/#Memory-management","page":"Parallelism in julia","title":"Memory management","text":"","category":"section"},{"location":"man/parallelism/","page":"Parallelism in julia","title":"Parallelism in julia","text":"Because of the way julia threads work, it is possible that the total memory usage of your program becomes rather high. This seems to be because of the fact that MPSKit spawns several tasks (in a nested way), which each allocate and deallocate quite a bit of memory in a tight loop. This seems to lead to a situation where the garbage collector is not able to keep up, and can even fail to clear the garbage before an OutOfMemory error occurs. In this case, often the best thing to do is disable the multithreading of MPSKit, specifically for the derivatives, as this seems to be the most memory intensive part. This is something that is under investigation, and hopefully will be fixed in the future.","category":"page"},{"location":"man/environments/#um_environments","page":"Environments","title":"Environments","text":"","category":"section"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"In many tensor network algorithms we encounter partially contracted tensor networks. In dmrg for example, one needs to know the sum of all the hamiltonian contributions left and right of the site that we want to optimize. If you then optimize the neighboring site to the right, you only need to add one new contribution to the previous sum of hamiltonian contributions.","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"This kind of information is stored in the environment objects (at the moment called \"Cache\" in our code, but the name is subject to change). The goal is that the user should preferably never have to deal with the caches, but being aware of the inner workings may allow you to write more efficient code. That is why they are nonetheless included in the manual.","category":"page"},{"location":"man/environments/#Finite-Environments","page":"Environments","title":"Finite Environments","text":"","category":"section"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"When you create a state and a hamiltonian:","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"state = FiniteMPS(rand,ComplexF64,20,ℂ^2,ℂ^10);\noperator = nonsym_ising_ham();","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"an environment object can be created by calling","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"cache = environments(state,operator)","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"The partially contracted mpohamiltonian left of site i can then be queried using:","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"leftenv(cache,i,state)","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"This may take some time, but a subsequent call to","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"leftenv(cache,i-1,state)","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"Should pretty much be free. Behind the scenes the cache stored all tensors it used to calculate leftenv (state.AL[1 .. i]) and when queried again, it checks if the tensors it previously used are identical (using ===). If so, it can simply return the previously stored results. If not, it will recalculate again. If you update a tensor in-place, the caches cannot know using === that the actual tensors have changed. If you do this, you have to call poison!(state,i).","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"As an optional argument, many algorithms allow you to pass in an environment object, and they also return an updated one. Therefore, for time evolution code, it is more efficient to give it the updated caches every time step, instead of letting it recalculate.","category":"page"},{"location":"man/environments/#Infinite-Environments","page":"Environments","title":"Infinite Environments","text":"","category":"section"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"Infinite Environments are very similar :","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"state = InfiniteMPS([ℂ^2],[ℂ^10]);\noperator = nonsym_ising_ham();\ncache = environments(state,operator)","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"There are also some notable differences. Infinite environments typically require solving linear problems or eigenvalue problems iteratively with finite precision. To find out what precision we used we can type:","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"(cache.tol,cache.maxiter)","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"To recalculate with a different precision :","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"cache.tol=1e-8;\nrecalculate!(cache,state)","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"Unlike their finite counterparts, recalculating is not done automatically. To get the environment for a different state one has to recalculate explicitly!","category":"page"},{"location":"man/environments/","page":"Environments","title":"Environments","text":"different_state = InfiniteMPS([ℂ^2],[ℂ^10]);\nrecalculate!(cache,different_state)\nleftenv(cache,3,different_state)","category":"page"},{"location":"examples/#Examples","page":"Examples","title":"Examples","text":"","category":"section"},{"location":"examples/#Quantum-(11)d","page":"Examples","title":"Quantum (1+1)d","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"Pages = map(file -> joinpath(\"quantum1d\", file, \"index.md\"), readdir(\"quantum1d\"))\nDepth = 1","category":"page"},{"location":"examples/#Classical-(20)d","page":"Examples","title":"Classical (2+0)d","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"Pages = map(file -> joinpath(\"classic2d\", file, \"index.md\"), readdir(\"classic2d\"))\nDepth = 1","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"EditURL = \"../../../../../examples/classic2d/1.hard-hexagon/main.jl\"","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/#demo_hardhexagon","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"","category":"section"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"(Image: logo)","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"Tensor networks are a natural way to do statistical mechanics on a lattice. As an example of this we will extract the central charge of the hard hexagon model. This model is known to have central charge 0.8, and has very peculiar non-local (anyonic) symmetries. Because TensorKit supports anyonic symmetries, so does MPSKit. To follow the tutorial you need the following packages.","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"using MPSKit, MPSKitModels, TensorKit, Plots, Polynomials","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"The hard hexagon model is a 2-dimensional lattice model of a gas, where particles are allowed to be on the vertices of a triangular lattice, but no two particles may be adjacent. This can be encoded in a transfer matrix with a local MPO tensor using anyonic symmetries, and the resulting MPO has been implemented in MPSKitModels.","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"In order to use these anyonic symmetries, we need to generalise the notion of the bond dimension and define how it interacts with the symmetry. Thus, we implement away of converting integers to symmetric spaces of the given dimension, which provides a crude guess for how the final MPS would distribute its Schmidt spectrum.","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"mpo = hard_hexagon()\nP = space(mpo.opp[1], 2)\nfunction virtual_space(D::Integer)\n _D = round(Int, D / sum(dim, values(FibonacciAnyon)))\n return Vect[FibonacciAnyon](sector => _D for sector in (:I, :τ))\nend\n\n@assert isapprox(dim(virtual_space(100)), 100; atol=3)","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/#The-leading-boundary","page":"The Hard Hexagon model","title":"The leading boundary","text":"","category":"section"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"One way to study statistical mechanics in infinite systems with tensor networks is by approximating the dominant eigenvector of the transfer matrix by an MPS. This dominant eigenvector contains a lot of hidden information. For example, the free energy can be extracted by computing the expectation value of the mpo. Additionally, we can compute the entanglement entropy as well as the correlation length of the state:","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"D = 10\nV = virtual_space(D)\nψ₀ = InfiniteMPS([P], [V])\nψ, envs, = leading_boundary(ψ₀, mpo,\n VUMPS(; verbosity=0,\n alg_eigsolve=MPSKit.Defaults.alg_eigsolve(;\n ishermitian=false))) # use non-hermitian eigensolver\nF = real(expectation_value(ψ, mpo))\nS = real(first(entropy(ψ)))\nξ = correlation_length(ψ)\nprintln(\"F = $F\\tS = $S\\tξ = $ξ\")","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"F = 0.8839037051703854\tS = 1.280782962182927\tξ = 13.849682581380039\n","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/#The-scaling-hypothesis","page":"The Hard Hexagon model","title":"The scaling hypothesis","text":"","category":"section"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"The dominant eigenvector is of course only an approximation. The finite bond dimension enforces a finite correlation length, which effectively introduces a length scale in the system. This can be exploited to formulate a scaling hypothesis, which in turn allows to extract the central charge.","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"First we need to know the entropy and correlation length at a bunch of different bond dimensions. Our approach will be to re-use the previous approximated dominant eigenvector, and then expanding its bond dimension and re-running VUMPS. According to the scaling hypothesis we should have S propto fracc6 log(ξ). Therefore we should find c using","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"function scaling_simulations(ψ₀, mpo, Ds; verbosity=0, tol=1e-6,\n alg_eigsolve=MPSKit.Defaults.alg_eigsolve(; ishermitian=false))\n entropies = similar(Ds, Float64)\n correlations = similar(Ds, Float64)\n alg = VUMPS(; verbosity, tol, alg_eigsolve)\n\n ψ, envs, = leading_boundary(ψ₀, mpo, alg)\n entropies[1] = real(entropy(ψ)[1])\n correlations[1] = correlation_length(ψ)\n\n for (i, d) in enumerate(diff(Ds))\n ψ, envs = changebonds(ψ, mpo, OptimalExpand(; trscheme=truncdim(d)), envs)\n ψ, envs, = leading_boundary(ψ, mpo, alg, envs)\n entropies[i + 1] = real(entropy(ψ)[1])\n correlations[i + 1] = correlation_length(ψ)\n end\n return entropies, correlations\nend\n\nbond_dimensions = 10:5:25\nψ₀ = InfiniteMPS([P], [virtual_space(bond_dimensions[1])])\nSs, ξs = scaling_simulations(ψ₀, mpo, bond_dimensions)\n\nf = fit(log.(ξs), 6 * Ss, 1)\nc = f.coeffs[2]","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"0.8025415355662212","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"p = plot(; xlabel=\"logarithmic correlation length\", ylabel=\"entanglement entropy\")\np = plot(log.(ξs), Ss; seriestype=:scatter, label=nothing)\nplot!(p, ξ -> f(ξ) / 6; label=\"fit\")","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"","category":"page"},{"location":"examples/classic2d/1.hard-hexagon/","page":"The Hard Hexagon model","title":"The Hard Hexagon model","text":"This page was generated using Literate.jl.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"EditURL = \"../../../../../examples/quantum1d/5.haldane-spt/main.jl\"","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/#spin1heisenberg","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"","category":"section"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"The quantum Heisenberg model is a model often used in the study of critical points and phase transitions of magnetic systems, in which the spins are treated quantum mechanically. It models magnetic interactions between neighbouring spins through the so-called Heisenberg interaction term, which causes the spins to either align (J 0) or anti-align (J 0), thus modeling a (anti-) ferromagnetic system. Here, we will focus on the case of S = 1, with anti-ferromagnetic interactions.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"H = -J sum_langle i j rangle vecS_i cdot vecS_j","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"Importantly, the Hamiltonian of the isotropic model is invariant under SU(2) rotations, which can be exploited to increase efficiency, as well as interpretability of the MPS simulations. To see this, we can make use of the following derivation for the interaction term:","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"(vecS_i + vecS_j)^2 = vecS_i^2 + 2 vecS_i cdot vecS_j + vecS_j^2\nimplies vecS_i cdot vecS_j = frac12 left( (vecS_i + vecS_j)^2 - vecS_i^2 - vecS_j^2 right)","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"Here, we recognize the quadratic Casimir element vecS^2, which commutes with the elements of SU(2). Consequently, the Hamiltonian also commutes with all elements of SU(2).","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"using TensorKit\nusing MPSKit\nusing Plots\n\ncasimir(s::SU2Irrep) = s.j * (s.j + 1)\n\nfunction heisenberg_hamiltonian(; J=-1.0)\n s = SU2Irrep(1)\n ℋ = SU2Space(1 => 1)\n SS = TensorMap(zeros, ComplexF64, ℋ ⊗ ℋ ← ℋ ⊗ ℋ)\n for (S, data) in blocks(SS)\n data .= -0.5J * (casimir(S) - casimir(s) - casimir(s))\n end\n return MPOHamiltonian(SS)\nend\nH = heisenberg_hamiltonian();","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/#Symmetry-Protected-Topological-Order","page":"Spin 1 Heisenberg model","title":"Symmetry-Protected Topological Order","text":"","category":"section"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"The representations of SU(2) possess additional structure, known as a mathbbZ_2-grading. This means, that they can be partitioned in integer (+) and half-integer (-) spins, and the fusion rules will respect this grading. In other words, the following table holds:","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"s_1 s_2 s_1 otimes s_2\n+ + +\n+ - -\n- + -\n- - +","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"This has important consequences for the MPS representation of an SU(2)-symmetric state. If the physical spin consists of only integer representations, this means that the left and right virtual spaces of the MPS tensor belong to the same grading, i.e. are either both integer, or both half-integer. Thus, naively constructing a MPS tensor which contains spins from both classes, will necessarily be the direct sum of the two, which yields a non-injective MPS.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"ketpsi = ketpsi_+ oplus ketpsi_-","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"Because of this direct sum, many of the usual MPS algorithms will fail, as they typically cannot deal with non-injective MPS. The resulting MPS will have multiple values of the transfer matrix spectrum that have a magnitude close to 1, which is a clear sign of a non-injective MPS.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"ℋ = SU2Space(1 => 1)\nV_wrong = SU2Space(0 => 8, 1 // 2 => 8, 1 => 3, 3 // 2 => 3)\nψ = InfiniteMPS(ℋ, V_wrong)\nψ, environments, δ = find_groundstate(ψ, H, VUMPS(; maxiter=10))\nsectors = SU2Irrep[0, 1 // 2, 1, 3 // 2]\ntransferplot(ψ; sectors, title=\"Transfer matrix spectrum\", legend=:outertop)","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"Nevertheless, using the symmetry, this can be remedied rather easily, by imposing the groundstate to belong to a single class, and comparing the results. We can readily obtain 3 different criteria for determining the SPT phase of the groundstate.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"Firstly, we can compare variational energies for states of similar bond dimensions. As we expect the state of the wrong SPT phase to have to expend some of its expressiveness in correcting the SPT, it should have a harder time reaching lower energies.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"Secondly, when inspecting the spectrum of the transfer matrix, we should see that the wrong SPT phase has a dominant value that is not in the trivial sector, which leads to a non-injective MPS.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"Finally, the entanglement spectrum of the wrong SPT phase will show degeneracies of all singular values, which can again be attributed to an attempt to mimick the spectrum of the right SPT phase.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"V_plus = SU2Space(0 => 10, 1 => 5, 2 => 3)\nψ_plus = InfiniteMPS(ℋ, V_plus)\nψ_plus, = find_groundstate(ψ_plus, H, VUMPS(; maxiter=100))\nE_plus = expectation_value(ψ_plus, H)","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"-1.4014193313392995 - 4.940181871031602e-18im","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"V_minus = SU2Space(1 // 2 => 10, 3 // 2 => 5, 5 // 2 => 3)\nψ_minus = InfiniteMPS(ℋ, V_minus)\nψ_minus, = find_groundstate(ψ_minus, H, VUMPS(; maxiter=100))\nE_minus = expectation_value(ψ_minus, H)","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"-1.4014839739630824 - 6.245004513516506e-17im","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"transferp_plus = transferplot(ψ_plus; sectors=SU2Irrep[0, 1, 2], title=\"ψ_plus\",\n legend=:outertop)\ntransferp_minus = transferplot(ψ_minus; sectors=SU2Irrep[0, 1, 2], title=\"ψ_minus\",\n legend=:outertop)\nplot(transferp_plus, transferp_minus; layout=(1, 2), size=(800, 400))","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"entanglementp_plus = entanglementplot(ψ_plus; title=\"ψ_plus\", legend=:outertop)\nentanglementp_minus = entanglementplot(ψ_minus; title=\"ψ_minus\", legend=:outertop)\nplot(entanglementp_plus, entanglementp_minus; layout=(1, 2), size=(800, 400))","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"As we can see, the groundstate can be found in the non-trivial SPT phase, ketpsi_-. We can obtain an intuitive understanding of ketpsi_+ by considering the following diagram. If we denote the MPS tensors that make up the groundstate as A_-, we can construct a state in the trivial SPT phase that approximates the groundstate as follows:","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"(Image: spt-tensors.svg)","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"In other words, we can factorize a purely virtual isomorphism of S = 12 in order to obtain the groundstate. This then also explains the degeneracies in the entanglement spectrum as well as in the transfer matrix spectrum. Finally, we can further confirm this intuition by looking at the entanglement entropy of the groundstate. As we can see, the entanglement entropy of the state in the wrong SPT phase is exactly log(2) higher than the one in the right SPT phase, which is exactly what we would expect from the diagram above.","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"S_minus = sum(real, entropy(ψ_minus))\nS_plus = sum(real, entropy(ψ_plus))\nprintln(\"S_minus + log(2) = $(S_minus + log(2))\")\nprintln(\"S_plus = $S_plus\")","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"S_minus + log(2) = 1.548622723539237\nS_plus = 1.5450323530571275\n","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"","category":"page"},{"location":"examples/quantum1d/5.haldane-spt/","page":"Spin 1 Heisenberg model","title":"Spin 1 Heisenberg model","text":"This page was generated using Literate.jl.","category":"page"},{"location":"man/states/#um_states","page":"States","title":"States","text":"","category":"section"},{"location":"man/states/#FiniteMPS","page":"States","title":"FiniteMPS","text":"","category":"section"},{"location":"man/states/","page":"States","title":"States","text":"A FiniteMPS is - at its core - a chain of mps tensors.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"(Image: )","category":"page"},{"location":"man/states/#Usage","page":"States","title":"Usage","text":"","category":"section"},{"location":"man/states/","page":"States","title":"States","text":"A FiniteMPS can be created by passing in a vector of tensormaps:","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"data = fill(TensorMap(rand,ComplexF64,ℂ^1*ℂ^2,ℂ^1),10);\nFiniteMPS(data);","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"Or alternatively by","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"len = 10;\nmax_bond_dimension = ℂ^10;\nphysical_space = ℂ^2;\nFiniteMPS(rand,ComplexF64,len,physical_space,max_bond_dimension);","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"You can take dot products, renormalize!, expectation values,....","category":"page"},{"location":"man/states/#Gauging","page":"States","title":"Gauging","text":"","category":"section"},{"location":"man/states/","page":"States","title":"States","text":"There is residual gauge freedom in such a finite mps :","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"(Image: )","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"which is often exploited in mps algorithms. The gauging logic is handled behind the scenes, if you call","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"state.AL[3]","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"then the state will be gauged such that the third tensor is a left isometry (similarly for state.AR).","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"state.AC[3]","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"gauges the state in such a way that all tensors to the left are left isometries, and to the right will be right isometries.As a result you should have","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"norm(state) == norm(state.AC[3])","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"lastly there is also the CR field, with the following property:","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"@tensor a[-1 -2;-3] := state.AL[3][-1 -2;1]*state.CR[3][1;-3]\n@tensor b[-1 -2;-3] := state.CR[2][-1;1]*state.AR[3][1 -2;-3]\na ≈ state.AC[3];\nb ≈ state.AC[3];","category":"page"},{"location":"man/states/#Implementation-details","page":"States","title":"Implementation details","text":"","category":"section"},{"location":"man/states/","page":"States","title":"States","text":"Behind the scenes, a finite mps has 4 fields","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"ALs::Vector{Union{Missing,A}}\nARs::Vector{Union{Missing,A}}\nACs::Vector{Union{Missing,A}}\nCLs::Vector{Union{Missing,B}}","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"calling state.AC returns an \"orthoview\" instance, which is a very simple dummy object. When you call get/setindex on an orthoview, it will move the gauge for the underlying state, and return the result. The idea behind this construction is that one never has to worry about how the state is gauged, as this gets handled automagically.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"The following bit of code shows the logic in action:","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"state = FiniteMPS(10,ℂ^2,ℂ^10); # a random initial state\n@show ismissing.(state.ALs) # all AL fields are already calculated\n@show ismissing.(state.ARs) # all AR fields are missing\n\n#if we now query state.AC[2], it should calculate and store all AR fields left of position 2\nstate.AC[2];\n@show ismissing.(state.ARs)","category":"page"},{"location":"man/states/#InfiniteMPS","page":"States","title":"InfiniteMPS","text":"","category":"section"},{"location":"man/states/","page":"States","title":"States","text":"An infinite mps can be thought of as a finite mps, where the set of tensors is repeated periodically.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"It can be created by passing in a vector of tensormaps:","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"data = fill(TensorMap(rand,ComplexF64,ℂ^10*ℂ^2,ℂ^10),2);\nInfiniteMPS(data);","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"The above code would create an infinite mps with an A-B structure (a 2 site unit cell).","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"much like a finite mps, we can again query the fields state.AL, state.AR, state.AC and state.CR. The implementation is much easier, as they are now just plain fields in the struct","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"AL::PeriodicArray{A,1}\nAR::PeriodicArray{A,1}\nCR::PeriodicArray{B,1}\nAC::PeriodicArray{A,1}","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"The periodic array is an array-like type where all indices are repeated periodically.","category":"page"},{"location":"man/states/#WindowMPS","page":"States","title":"WindowMPS","text":"","category":"section"},{"location":"man/states/","page":"States","title":"States","text":"WindowMPS is a bit of a mix between an infinite mps and a finite mps. It represents a window of mutable tensors embedded in an infinite mps.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"It can be created using:","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"mpco = WindowMPS(left_infinite_mps,window_of_tensors,right_infinite_mps)","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"Algorithms will then act on this window of tensors, while leaving the left and right infinite mps's invariant.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"Behind the scenes it uses the same orthoview logic as finitemps.","category":"page"},{"location":"man/states/#Multiline","page":"States","title":"Multiline","text":"","category":"section"},{"location":"man/states/","page":"States","title":"States","text":"Statistical physics partition functions can be represented by an infinite tensor network which then needs to be contracted. This is done by finding approximate fixpoint infinite matrix product states. However, there is no good reason why a single mps should suffice and indeed we find in practice that this can require a nontrivial unit cell in both dimensions.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"In other words, the fixpoints can be well described by a set of matrix product states.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"Such a set can be created by","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"data = fill(TensorMap(rand,ComplexF64,ℂ^10*ℂ^2,ℂ^10),2,2);\nMPSMultiline(data);","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"MPSMultiline is also used extensively in as of yet unreleased peps code.","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"You can access properties by calling","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"state.AL[row,collumn]\nstate.AC[row,collumn]\nstate.AR[row,collumn]\nstate.CR[row,collumn]","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"Behind the scenes, we have a type called Multiline, defined as:","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"struct Multiline{T}\n data::PeriodicArray{T,1}\nend","category":"page"},{"location":"man/states/","page":"States","title":"States","text":"MPSMultiline/MPOMultiline are then defined as ```julia const MPSMultiline = Multiline{<:InfiniteMPS} const MPOMultiline = Multiline{<:DenseMPO}","category":"page"},{"location":"man/intro/#Prerequisites","page":"Prerequisites","title":"Prerequisites","text":"","category":"section"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"The following sections describe the prerequisites for using MPSKit. If you are already familiar with the concepts of MPSKit and TensorKit, you can skip to the Overview section.","category":"page"},{"location":"man/intro/#TensorKit","page":"Prerequisites","title":"TensorKit","text":"","category":"section"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"using TensorKit","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"MPSKit uses the tensors defined in TensorKit.jl as its underlying data structure. This is what allows the library to be generic with respect to the symmetry of the tensors. The main difference with regular multi-dimensional arrays is the notion of a partition of the dimensions in incoming and outgoing, which are respectively called domain and codomain. In other words, a TensorMap can be interpreted as a linear map from its domain to its codomain. Additionally, as generic symmetries are supported, in general the structure of the indices are not just integers, but are given by spaces.","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"The general syntax for creating a tensor is one of the following equivalent forms:","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"TensorMap(initializer, scalartype, codomain, domain)\nTensorMap(initializer, scalartype, codomain ← domain) # ← is the `\\leftarrow` operator","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"For example, the following creates a random tensor with three legs, each of which has dimension two, however with different partitions.","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"V1 = ℂ^2 # ℂ is the `\\bbC` operator, equivalent to ComplexSpace(10)\nt1 = Tensor(rand, Float64, V1 ⊗ V1 ⊗ V1) # all spaces in codomain\nt2 = TensorMap(rand, Float64, V1, V1 ⊗ V1) # one space in codomain, two in domain\n\ntry\n t1 + t2 # incompatible partition\ncatch err\n println(err)\nend\n\ntry\n t1 + permute(t2, (1, 2, 3), ()) # incompatible arrows\ncatch err\n println(err)\nend","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"These abstract objects can represent not only plain arrays but also symmetric tensors. The following creates a symmetric tensor with ℤ₂ symmetry, again with three legs of dimension two. However, now the dimension two is now split over even and odd sectors of ℤ₂.","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"V2 = Z2Space(0 => 1, 1 => 1)\nt3 = TensorMap(rand, Float64, V2 ⊗ V2, V2)","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"For more information, check out the TensorKit documentation!","category":"page"},{"location":"man/intro/#Conventions","page":"Prerequisites","title":"Conventions","text":"","category":"section"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"The general definition of an MPS tensor is as follows:","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"(Image: convention MPSTensor)","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"These tensors are allowed to have an arbitrary number of physical legs, and both FiniteMPS as well as InfiniteMPS will be able to handle the resulting objects. This allows for example for the definition of boundary tensors in PEPS code, which have two physical legs.","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"Similarly, the definition of a bond tensor, appearing in between two MPS tensors, is as follows:","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"(Image: convention BondTensor)","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"Finally, the definition of a MPO tensor, which is used to represent statistical mechanics problems as well as quantum hamiltonians, is represented as:","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"(Image: convention MPOTensor)","category":"page"},{"location":"man/intro/","page":"Prerequisites","title":"Prerequisites","text":"While this results at first glance in the not very intuitive ordering of spaces as V_l otimes P leftarrow P otimes V_r, this is actually the most natural ordering for keeping the algorithms planar. In particular, this is relevant for dealing with fermionic systems, where additional crossings would lead to sign problems.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"EditURL = \"../../../../../examples/quantum1d/4.xxz-heisenberg/main.jl\"","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/#The-XXZ-model","page":"The XXZ model","title":"The XXZ model","text":"","category":"section"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"In this file we will give step by step instructions on how to analyze the spin 1/2 XXZ model. The necessary packages to follow this tutorial are:","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"using MPSKit, MPSKitModels, TensorKit, Plots","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/#Failure","page":"The XXZ model","title":"Failure","text":"","category":"section"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"First we should define the hamiltonian we want to work with. Then we specify an initial guess, which we then further optimize. Working directly in the thermodynamic limit, this is achieved as follows:","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"H = heisenberg_XXX(; spin=1 // 2);","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"We then need an intial state, which we shall later optimize. In this example we work directly in the thermodynamic limit.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"random_data = TensorMap(rand, ComplexF64, ℂ^20 * ℂ^2, ℂ^20);\nstate = InfiniteMPS([random_data]);","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"The groundstate can then be found by calling find_groundstate.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"groundstate, cache, delta = find_groundstate(state, H, VUMPS());","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"[ Info: VUMPS init:\tobj = +2.499971249561e-01\terr = 4.8102e-03\n[ Info: VUMPS 1:\tobj = -1.047871149491e-01\terr = 3.6332884520e-01\ttime = 0.08 sec\n[ Info: VUMPS 2:\tobj = -2.424105097429e-01\terr = 3.6011566451e-01\ttime = 0.02 sec\n┌ Warning: ignoring imaginary component 1.475763903743127e-6 from total weight 2.0662736930482595: operator might not be hermitian?\n│ α = 0.8739699649778873 + 1.475763903743127e-6im\n│ β₁ = 1.345735500203679\n│ β₂ = 1.3017908581601034\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.1833380872891541e-6 from total weight 2.0507172924982444: operator might not be hermitian?\n│ α = 0.7372884749735164 + 1.1833380872891541e-6im\n│ β₁ = 1.3017908581601034\n│ β₂ = 1.4025646794468833\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.2416644342636007e-6 from total weight 2.031220380535854: operator might not be hermitian?\n│ α = 0.7386571067649788 + 1.2416644342636007e-6im\n│ β₁ = 1.4025646794468833\n│ β₂ = 1.2700607201611787\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.3004780743588323e-6 from total weight 1.9679978250135914: operator might not be hermitian?\n│ α = 0.7393243960693548 + 1.3004780743588323e-6im\n│ β₁ = 1.2700607201611787\n│ β₂ = 1.3089540265940922\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.6458907476889217e-6 from total weight 2.0349614523247865: operator might not be hermitian?\n│ α = 0.7249377970347587 + 1.6458907476889217e-6im\n│ β₁ = 1.3089540265940922\n│ β₂ = 1.3791927563392283\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.368995952526035e-6 from total weight 2.054876147824496: operator might not be hermitian?\n│ α = 0.7217714242687149 + 1.368995952526035e-6im\n│ β₁ = 1.3791927563392283\n│ β₂ = 1.3414131857361027\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.2494864182130416e-6 from total weight 2.0096836188378915: operator might not be hermitian?\n│ α = 0.807454611112027 + 1.2494864182130416e-6im\n│ β₁ = 1.2894881464660273\n│ β₂ = 1.313036792683791\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.1639985493788058e-6 from total weight 2.0933444093691493: operator might not be hermitian?\n│ α = 0.8461206485955095 + 1.1639985493788058e-6im\n│ β₁ = 1.313036792683791\n│ β₂ = 1.3935942900696372\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.141568236568552e-6 from total weight 2.0729883136407588: operator might not be hermitian?\n│ α = 0.5431648307956423 + 1.141568236568552e-6im\n│ β₁ = 1.3935942900696372\n│ β₂ = 1.435321382047205\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.6521519737508483e-6 from total weight 2.060744558293663: operator might not be hermitian?\n│ α = 0.5404024011086792 + 1.6521519737508483e-6im\n│ β₁ = 1.435321382047205\n│ β₂ = 1.376403251103502\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.6923960462905674e-6 from total weight 1.9964796296703375: operator might not be hermitian?\n│ α = 0.6219891554004395 + 1.6923960462905674e-6im\n│ β₁ = 1.376403251103502\n│ β₂ = 1.3055935403492547\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.5709160999938243e-6 from total weight 2.0472728905311404: operator might not be hermitian?\n│ α = 0.8795272048710723 + 1.5709160999938243e-6im\n│ β₁ = 1.3055935403492547\n│ β₂ = 1.3088864318921027\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.3793371174981167e-6 from total weight 2.008276861479189: operator might not be hermitian?\n│ α = 0.7608179355505824 + 1.3793371174981167e-6im\n│ β₁ = 1.3088864318921027\n│ β₂ = 1.3195257972863235\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.6662444934072845e-6 from total weight 1.9904775101744567: operator might not be hermitian?\n│ α = 0.6960250799777928 + 1.6662444934072845e-6im\n│ β₁ = 1.3195257972863235\n│ β₂ = 1.3177258731789887\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.8182383051540407e-6 from total weight 1.9900059862237078: operator might not be hermitian?\n│ α = 0.7703642977709004 + 1.8182383051540407e-6im\n│ β₁ = 1.3177258731789887\n│ β₂ = 1.2768168220529936\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.3705999932014934e-6 from total weight 1.9641339239991362: operator might not be hermitian?\n│ α = 0.6373205365232443 + 1.3705999932014934e-6im\n│ β₁ = 1.2768168220529936\n│ β₂ = 1.3495863840638673\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.2716514099669375e-6 from total weight 2.021948581163632: operator might not be hermitian?\n│ α = 0.6621740011024483 + 1.2716514099669375e-6im\n│ β₁ = 1.3495863840638673\n│ β₂ = 1.3521901674991565\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.748967636133747e-6 from total weight 2.007126065968527: operator might not be hermitian?\n│ α = 0.7855947486826597 + 1.748967636133747e-6im\n│ β₁ = 1.3521901674991565\n│ β₂ = 1.2581644115329562\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.8063431283139864e-6 from total weight 1.9589927438694472: operator might not be hermitian?\n│ α = 0.8791231530779282 + 1.8063431283139864e-6im\n│ β₁ = 1.2581644115329562\n│ β₂ = 1.2172992096457365\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.5885285506861413e-6 from total weight 1.9829497440587416: operator might not be hermitian?\n│ α = 0.9043769872180605 + 1.5885285506861413e-6im\n│ β₁ = 1.2172992096457365\n│ β₂ = 1.2776441549376552\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.5188320461479582e-6 from total weight 1.9588640484991768: operator might not be hermitian?\n│ α = 0.6899280363007593 + 1.5188320461479582e-6im\n│ β₁ = 1.2776441549376552\n│ β₂ = 1.3148281555321597\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.8580505688672172e-6 from total weight 2.008682608503421: operator might not be hermitian?\n│ α = 0.6913519715595543 + 1.8580505688672172e-6im\n│ β₁ = 1.3148281555321597\n│ β₂ = 1.3520596120516548\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.956068479325515e-6 from total weight 1.9935567596530768: operator might not be hermitian?\n│ α = 0.6475058176538288 + 1.956068479325515e-6im\n│ β₁ = 1.3520596120516548\n│ β₂ = 1.314130729995241\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.9744130875937183e-6 from total weight 2.0021703956141623: operator might not be hermitian?\n│ α = 0.782921176999384 + 1.9744130875937183e-6im\n│ β₁ = 1.314130729995241\n│ β₂ = 1.2918131243171154\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.6117145099628014e-6 from total weight 2.0198779920499415: operator might not be hermitian?\n│ α = 0.7898358256992374 + 1.6117145099628014e-6im\n│ β₁ = 1.2918131243171154\n│ β₂ = 1.3368939086738196\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.3593759494220231e-6 from total weight 2.019513392870969: operator might not be hermitian?\n│ α = 0.7955165842907529 + 1.3593759494220231e-6im\n│ β₁ = 1.3368939086738196\n│ β₂ = 1.2877509017867448\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.0936758011396291e-6 from total weight 1.962446160174074: operator might not be hermitian?\n│ α = 0.7681454973098479 + 1.0936758011396291e-6im\n│ β₁ = 1.0473109475340552\n│ β₂ = 1.4711516596594305\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.4140393918386784e-6 from total weight 2.3305892057232325: operator might not be hermitian?\n│ α = 1.2725888691538776 + 1.4140393918386784e-6im\n│ β₁ = 1.4711516596594305\n│ β₂ = 1.2836963855283718\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.2363655292799668e-6 from total weight 1.9215446561532274: operator might not be hermitian?\n│ α = 0.7043198883856858 + 1.2363655292799668e-6im\n│ β₁ = 1.2836963855283718\n│ β₂ = 1.2443435820525077\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.3621234929601933e-6 from total weight 2.031241267058665: operator might not be hermitian?\n│ α = 0.8491909978696255 + 1.3621234929601933e-6im\n│ β₁ = 1.2443435820525077\n│ β₂ = 1.362506801429688\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.5702297864253478e-6 from total weight 2.0046033526873535: operator might not be hermitian?\n│ α = 0.6551477286897311 + 1.5702297864253478e-6im\n│ β₁ = 1.362506801429688\n│ β₂ = 1.3163552982585813\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.5972965097966335e-6 from total weight 1.9982889168855587: operator might not be hermitian?\n│ α = 0.6762387934135368 + 1.5972965097966335e-6im\n│ β₁ = 1.3163552982585813\n│ β₂ = 1.3427838315880456\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.5781264739826717e-6 from total weight 2.0091768575110542: operator might not be hermitian?\n│ α = 0.797943851228216 + 1.5781264739826717e-6im\n│ β₁ = 1.3427838315880456\n│ β₂ = 1.2637281498282438\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.500389786990644e-6 from total weight 1.9365460830408492: operator might not be hermitian?\n│ α = 0.8370715044470002 + 1.500389786990644e-6im\n│ β₁ = 1.2637281498282438\n│ β₂ = 1.2052025520687897\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.6848371347591429e-6 from total weight 1.9701367571309558: operator might not be hermitian?\n│ α = 0.9381977580271958 + 1.6848371347591429e-6im\n│ β₁ = 1.2052025520687897\n│ β₂ = 1.2444720234361477\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.301224902904019e-6 from total weight 2.032783165297502: operator might not be hermitian?\n│ α = 1.0018865864506536 + 1.301224902904019e-6im\n│ β₁ = 1.3560745448480025\n│ β₂ = 1.135558230044051\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.4331223396387566e-6 from total weight 1.891875931072235: operator might not be hermitian?\n│ α = 0.9245962509023617 + 1.4331223396387566e-6im\n│ β₁ = 1.135558230044051\n│ β₂ = 1.1978413156862229\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.2020958610227395e-6 from total weight 1.8535112515440146: operator might not be hermitian?\n│ α = 0.7599300178221852 + 1.2020958610227395e-6im\n│ β₁ = 1.1978413156862229\n│ β₂ = 1.1929738094554658\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.2029225218155096e-6 from total weight 1.8361265730664569: operator might not be hermitian?\n│ α = 0.8126705814608668 + 1.2029225218155096e-6im\n│ β₁ = 1.1929738094554658\n│ β₂ = 1.1347866796454273\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.72781939736244e-6 from total weight 1.8379544196724218: operator might not be hermitian?\n│ α = 0.7746976579831134 + 1.72781939736244e-6im\n│ β₁ = 1.1347866796454273\n│ β₂ = 1.220728954029185\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.3164896480177823e-6 from total weight 1.8641899207308146: operator might not be hermitian?\n│ α = 0.753715042628617 + 1.3164896480177823e-6im\n│ β₁ = 1.220728954029185\n│ β₂ = 1.1903522654503504\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.1951999317263984e-6 from total weight 1.8262076303378614: operator might not be hermitian?\n│ α = 0.7790016654288074 + 1.1951999317263984e-6im\n│ β₁ = 1.1903522654503504\n│ β₂ = 1.1450992090204066\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.329043586510703e-6 from total weight 1.8656619514160093: operator might not be hermitian?\n│ α = 0.8930858144233594 + 1.329043586510703e-6im\n│ β₁ = 1.1450992090204066\n│ β₂ = 1.1712557562446508\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.137416697809951e-6 from total weight 1.9324138401886977: operator might not be hermitian?\n│ α = 0.8059601405207465 + 1.137416697809951e-6im\n│ β₁ = 1.1712557562446508\n│ β₂ = 1.3087442282994357\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.2041512158535161e-6 from total weight 1.8635788832563664: operator might not be hermitian?\n│ α = 0.624787036120966 + 1.2041512158535161e-6im\n│ β₁ = 1.3087442282994357\n│ β₂ = 1.170365737069267\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.6380061677104263e-6 from total weight 1.79911763127121: operator might not be hermitian?\n│ α = 0.8545636636861133 + 1.6380061677104263e-6im\n│ β₁ = 1.170365737069267\n│ β₂ = 1.0662031876476101\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.2228514773388825e-6 from total weight 1.8124365450754356: operator might not be hermitian?\n│ α = 0.9939764795428676 + 1.2228514773388825e-6im\n│ β₁ = 1.0662031876476101\n│ β₂ = 1.0771015507783512\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.3577038761106164e-6 from total weight 1.7818490802101545: operator might not be hermitian?\n│ α = 0.8828101046503334 + 1.3577038761106164e-6im\n│ β₁ = 1.0771015507783512\n│ β₂ = 1.1115235998763446\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.573225774296333e-6 from total weight 1.7952965109074976: operator might not be hermitian?\n│ α = 0.8037556413672008 + 1.573225774296333e-6im\n│ β₁ = 1.1115235998763446\n│ β₂ = 1.1582666868914475\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.9993628590166297e-6 from total weight 1.7966684663477028: operator might not be hermitian?\n│ α = 0.7833344237000951 + 1.9993628590166297e-6im\n│ β₁ = 1.1582666868914475\n│ β₂ = 1.1281945934315403\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.4402545049987947e-6 from total weight 1.7911396609775052: operator might not be hermitian?\n│ α = 0.8380019083518554 + 1.4402545049987947e-6im\n│ β₁ = 1.1281945934315403\n│ β₂ = 1.110455332768963\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.2109032088564176e-6 from total weight 1.7813199833273619: operator might not be hermitian?\n│ α = 0.7777249070445168 + 1.2109032088564176e-6im\n│ β₁ = 1.110455332768963\n│ β₂ = 1.1554799028488103\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.36909457887531e-6 from total weight 1.7554473671236752: operator might not be hermitian?\n│ α = 0.7782114591736479 + 1.36909457887531e-6im\n│ β₁ = 1.1554799028488103\n│ β₂ = 1.0681051341805705\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.6953973636414654e-6 from total weight 1.8478627263512848: operator might not be hermitian?\n│ α = 1.0786054983876303 + 1.6953973636414654e-6im\n│ β₁ = 1.0681051341805705\n│ β₂ = 1.0537353826367444\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.757283796120085e-6 from total weight 1.8111473736314618: operator might not be hermitian?\n│ α = 0.9110031771776171 + 1.757283796120085e-6im\n│ β₁ = 1.0537353826367444\n│ β₂ = 1.1575706300527562\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.6318890057095276e-6 from total weight 1.8203681556361564: operator might not be hermitian?\n│ α = 0.9124447934701678 + 1.6318890057095276e-6im\n│ β₁ = 1.1575706300527562\n│ β₂ = 1.0682766296048822\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.8390788291272608e-6 from total weight 1.742392537575849: operator might not be hermitian?\n│ α = 0.8617339094018543 + 1.8390788291272608e-6im\n│ β₁ = 1.0682766296048822\n│ β₂ = 1.0733738710363945\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.6564830520246487e-6 from total weight 1.7426059463027106: operator might not be hermitian?\n│ α = 0.7671804483853782 + 1.6564830520246487e-6im\n│ β₁ = 1.0733738710363945\n│ β₂ = 1.138410372703261\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.852045748698336e-6 from total weight 1.8175974775984134: operator might not be hermitian?\n│ α = 0.7528916040098729 + 1.852045748698336e-6im\n│ β₁ = 1.138410372703261\n│ β₂ = 1.2003485520888286\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.6617520472352737e-6 from total weight 1.8926943344910268: operator might not be hermitian?\n│ α = 0.8539520758169454 + 1.6617520472352737e-6im\n│ β₁ = 1.2003485520888286\n│ β₂ = 1.1883690712560016\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.3522051637501753e-6 from total weight 1.8705455442967294: operator might not be hermitian?\n│ α = 0.9282228149268801 + 1.3522051637501753e-6im\n│ β₁ = 1.1883690712560016\n│ β₂ = 1.1068522889789256\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.0122348380516705e-6 from total weight 1.7670985003089827: operator might not be hermitian?\n│ α = 0.930628231856587 + 1.0122348380516705e-6im\n│ β₁ = 1.1068522889789256\n│ β₂ = 1.0156014052012858\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.3856631444933258e-6 from total weight 1.825912721996031: operator might not be hermitian?\n│ α = 1.0815656907671525 + 1.3856631444933258e-6im\n│ β₁ = 1.0156014052012858\n│ β₂ = 1.0642963453162757\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 3:\tobj = -2.945462988948e-01\terr = 3.4609424308e-01\ttime = 0.03 sec\n┌ Warning: ignoring imaginary component -1.392483040988518e-6 from total weight 1.8955122145817562: operator might not be hermitian?\n│ α = 1.101941371687926 - 1.392483040988518e-6im\n│ β₁ = 1.0798020846906913\n│ β₂ = 1.1012353185794865\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0753622344539249e-6 from total weight 1.8648990216541668: operator might not be hermitian?\n│ α = 0.8383791538157135 - 1.0753622344539249e-6im\n│ β₁ = 1.1012353185794865\n│ β₂ = 1.2498998073949357\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2549910538232206e-6 from total weight 2.1121408373175985: operator might not be hermitian?\n│ α = 1.3409655729255554 - 1.2549910538232206e-6im\n│ β₁ = 1.2136080492246442\n│ β₂ = 1.0909196816212923\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.4022760645906324e-6 from total weight 1.7304296250907174: operator might not be hermitian?\n│ α = 0.8127621709548318 - 1.4022760645906324e-6im\n│ β₁ = 1.0909196816212923\n│ β₂ = 1.0694384456833976\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.4313764805165552e-6 from total weight 1.8794569157231034: operator might not be hermitian?\n│ α = 1.0784242798463932 - 1.4313764805165552e-6im\n│ β₁ = 1.0694384456833976\n│ β₂ = 1.1070956515086754\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1180232882476715e-6 from total weight 1.8844800254598146: operator might not be hermitian?\n│ α = 1.216318455706141 - 1.1180232882476715e-6im\n│ β₁ = 1.0649907248461274\n│ β₂ = 0.9683125201380608\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 4:\tobj = -2.319707042439e-01\terr = 3.6024027466e-01\ttime = 0.02 sec\n┌ Warning: ignoring imaginary component -1.0204260968149637e-6 from total weight 1.7960622649204319: operator might not be hermitian?\n│ α = 0.8465484658404078 - 1.0204260968149637e-6im\n│ β₁ = 1.0893153937710733\n│ β₂ = 1.1500379677848442\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.980297221391307e-7 from total weight 1.724221091947597: operator might not be hermitian?\n│ α = 0.6903523472065521 - 9.980297221391307e-7im\n│ β₁ = 1.1477237120574055\n│ β₂ = 1.0858555573387934\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 5:\tobj = -3.341745290133e-01\terr = 3.3118494023e-01\ttime = 0.08 sec\n[ Info: VUMPS 6:\tobj = -3.494924855347e-01\terr = 2.8628386188e-01\ttime = 0.03 sec\n┌ Warning: ignoring imaginary component -1.2137926916363064e-6 from total weight 1.8486757461171281: operator might not be hermitian?\n│ α = 0.771117205144365 - 1.2137926916363064e-6im\n│ β₁ = 1.1911622391957852\n│ β₂ = 1.1849526531151673\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.8052469317100112e-6 from total weight 1.8549819756331998: operator might not be hermitian?\n│ α = 0.8368904023840432 - 1.8052469317100112e-6im\n│ β₁ = 1.1849526531151673\n│ β₂ = 1.1560535429613934\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.0673666736130414e-6 from total weight 1.879996592383449: operator might not be hermitian?\n│ α = 0.882809938116432 - 2.0673666736130414e-6im\n│ β₁ = 1.1560535429613934\n│ β₂ = 1.1910390448420975\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.194385859464673e-6 from total weight 1.7942145377417382: operator might not be hermitian?\n│ α = 0.8003805303951113 - 2.194385859464673e-6im\n│ β₁ = 1.1910390448420975\n│ β₂ = 1.0770435495675412\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.3709987418962797e-6 from total weight 1.8718062529591089: operator might not be hermitian?\n│ α = 0.956423888603269 - 2.3709987418962797e-6im\n│ β₁ = 1.0770435495675412\n│ β₂ = 1.19536152951948\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.3673814470905746e-6 from total weight 1.8555379367315137: operator might not be hermitian?\n│ α = 0.8933821221410543 - 2.3673814470905746e-6im\n│ β₁ = 1.19536152951948\n│ β₂ = 1.102724005464574\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.334346772072532e-6 from total weight 1.888065121940592: operator might not be hermitian?\n│ α = 0.9721742902891686 - 2.334346772072532e-6im\n│ β₁ = 1.102724005464574\n│ β₂ = 1.1847644583443624\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.177633131844603e-6 from total weight 1.9390501291320332: operator might not be hermitian?\n│ α = 1.014147105401859 - 2.177633131844603e-6im\n│ β₁ = 1.1847644583443624\n│ β₂ = 1.152282183378374\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.9774983512077515e-6 from total weight 1.8305152178308537: operator might not be hermitian?\n│ α = 0.7177922188043688 - 1.9774983512077515e-6im\n│ β₁ = 1.152282183378374\n│ β₂ = 1.2279275480251655\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.9651366731853956e-6 from total weight 1.8439158098506916: operator might not be hermitian?\n│ α = 0.6857331180630781 - 1.9651366731853956e-6im\n│ β₁ = 1.2279275480251655\n│ β₂ = 1.1924720296115392\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.0190197140557142e-6 from total weight 1.8592053567515292: operator might not be hermitian?\n│ α = 0.7838374650404871 - 2.0190197140557142e-6im\n│ β₁ = 1.1924720296115392\n│ β₂ = 1.1917440352536046\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.105103661853916e-6 from total weight 1.8407455207629144: operator might not be hermitian?\n│ α = 0.840354593043139 - 2.105103661853916e-6im\n│ β₁ = 1.1917440352536046\n│ β₂ = 1.1233407250665566\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.06494826259819e-6 from total weight 1.841267305393983: operator might not be hermitian?\n│ α = 0.8882808636031334 - 2.06494826259819e-6im\n│ β₁ = 1.1233407250665566\n│ β₂ = 1.15729339956295\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.2230019045606925e-6 from total weight 1.8228821941757196: operator might not be hermitian?\n│ α = 0.7940779018084841 - 2.2230019045606925e-6im\n│ β₁ = 1.15729339956295\n│ β₂ = 1.1631903399811268\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.145042114523512e-6 from total weight 1.8171564444253046: operator might not be hermitian?\n│ α = 0.8544521983500817 - 2.145042114523512e-6im\n│ β₁ = 1.1631903399811268\n│ β₂ = 1.104063955222304\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.6467638147572156e-6 from total weight 1.8097942535063836: operator might not be hermitian?\n│ α = 0.8187040301882722 - 1.6467638147572156e-6im\n│ β₁ = 1.104063955222304\n│ β₂ = 1.177336712140745\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.5244830939625462e-6 from total weight 1.8186387999784603: operator might not be hermitian?\n│ α = 0.6481570111134087 - 1.5244830939625462e-6im\n│ β₁ = 1.177336712140745\n│ β₂ = 1.2252419516058546\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.9022438640223151e-6 from total weight 1.845672069956571: operator might not be hermitian?\n│ α = 0.8341584370695838 - 1.9022438640223151e-6im\n│ β₁ = 1.2252419516058546\n│ β₂ = 1.0997578150233172\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.097853804325367e-6 from total weight 1.859100484948138: operator might not be hermitian?\n│ α = 0.9829316071898353 - 2.097853804325367e-6im\n│ β₁ = 1.0997578150233172\n│ β₂ = 1.1316504835912666\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.218477325925325e-6 from total weight 1.824760097059155: operator might not be hermitian?\n│ α = 0.7981966528552535 - 2.218477325925325e-6im\n│ β₁ = 1.1316504835912666\n│ β₂ = 1.1882755144211035\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.107775001676873e-6 from total weight 1.7948760632162533: operator might not be hermitian?\n│ α = 0.715662975666142 - 2.107775001676873e-6im\n│ β₁ = 1.1882755144211035\n│ β₂ = 1.1390381422016462\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.8943371334406364e-6 from total weight 1.7786107483977287: operator might not be hermitian?\n│ α = 0.7939679645380324 - 1.8943371334406364e-6im\n│ β₁ = 1.1390381422016462\n│ β₂ = 1.111603875582258\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.940765476975831e-6 from total weight 1.8050001473989414: operator might not be hermitian?\n│ α = 0.8874112102188971 - 1.940765476975831e-6im\n│ β₁ = 1.111603875582258\n│ β₂ = 1.111244212527008\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.199444159377284e-6 from total weight 1.759110189883705: operator might not be hermitian?\n│ α = 0.8304008173000483 - 2.199444159377284e-6im\n│ β₁ = 1.111244212527008\n│ β₂ = 1.081683614972737\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.404082553034842e-6 from total weight 1.7701574894902945: operator might not be hermitian?\n│ α = 0.8176565476152748 - 2.404082553034842e-6im\n│ β₁ = 1.081683614972737\n│ β₂ = 1.1379173365557727\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.1608698665687154e-6 from total weight 1.777911385657947: operator might not be hermitian?\n│ α = 0.702221919442864 - 2.1608698665687154e-6im\n│ β₁ = 1.1379173365557727\n│ β₂ = 1.1717497199774738\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.0444276374407405e-6 from total weight 1.8530092878500277: operator might not be hermitian?\n│ α = 0.9004041535488609 - 2.0444276374407405e-6im\n│ β₁ = 1.1717497199774738\n│ β₂ = 1.1179974842811402\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.2029817202846858e-6 from total weight 1.8209273687022072: operator might not be hermitian?\n│ α = 0.8967101105620928 - 2.2029817202846858e-6im\n│ β₁ = 0.8788405586960297\n│ β₂ = 1.3188353695933623\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.216417890362702e-6 from total weight 2.1106092940068626: operator might not be hermitian?\n│ α = 1.2231888468396814 - 2.216417890362702e-6im\n│ β₁ = 1.3188353695933623\n│ β₂ = 1.104153025997658\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.3737135441750934e-6 from total weight 1.7108761064821731: operator might not be hermitian?\n│ α = 0.7689084483760471 - 2.3737135441750934e-6im\n│ β₁ = 1.104153025997658\n│ β₂ = 1.056751127239579\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.2950472934567256e-6 from total weight 1.805845919611404: operator might not be hermitian?\n│ α = 0.9011490916083735 - 2.2950472934567256e-6im\n│ β₁ = 1.056751127239579\n│ β₂ = 1.1542473110833626\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.9165190242613137e-6 from total weight 1.7806954185448687: operator might not be hermitian?\n│ α = 0.6766133971213509 - 1.9165190242613137e-6im\n│ β₁ = 1.1542473110833626\n│ β₂ = 1.175067499897663\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.7371752475472957e-6 from total weight 1.7997772548877546: operator might not be hermitian?\n│ α = 0.682777908206393 - 1.7371752475472957e-6im\n│ β₁ = 1.175067499897663\n│ β₂ = 1.1799274833471092\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.9827521738555176e-6 from total weight 1.826349907461843: operator might not be hermitian?\n│ α = 0.8580873616013737 - 1.9827521738555176e-6im\n│ β₁ = 1.1799274833471092\n│ β₂ = 1.0986406138424443\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.91092151146776e-6 from total weight 1.7435181739830286: operator might not be hermitian?\n│ α = 0.7394903063302251 - 1.91092151146776e-6im\n│ β₁ = 1.0986406138424443\n│ β₂ = 1.134018743877274\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.9595898916001386e-6 from total weight 1.8251022615462704: operator might not be hermitian?\n│ α = 0.9164809096157032 - 1.9595898916001386e-6im\n│ β₁ = 1.134018743877274\n│ β₂ = 1.0977533857576816\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.05986185874453e-6 from total weight 1.8186394706547202: operator might not be hermitian?\n│ α = 0.9455626165039587 - 2.05986185874453e-6im\n│ β₁ = 1.0977533857576816\n│ β₂ = 1.0992262581228545\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.9751055681822144e-6 from total weight 1.8210053523773804: operator might not be hermitian?\n│ α = 0.9358713510025474 - 1.9751055681822144e-6im\n│ β₁ = 1.0992262581228545\n│ β₂ = 1.1099130331737983\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.982306293563628e-6 from total weight 1.7917057681901003: operator might not be hermitian?\n│ α = 0.9121882545888488 - 1.982306293563628e-6im\n│ β₁ = 1.1099130331737983\n│ β₂ = 1.0706144061905936\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.196445485691187e-6 from total weight 1.7744014664512398: operator might not be hermitian?\n│ α = 0.874804800955041 - 2.196445485691187e-6im\n│ β₁ = 0.5978282520080367\n│ β₂ = 1.4233125115260221\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.180456329423097e-6 from total weight 2.1061953707531647: operator might not be hermitian?\n│ α = 1.1540327503490424 - 2.180456329423097e-6im\n│ β₁ = 1.4233125115260221\n│ β₂ = 1.0384839167905384\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.151285085509602e-6 from total weight 1.804623532007284: operator might not be hermitian?\n│ α = 0.8516682302055673 - 2.151285085509602e-6im\n│ β₁ = 1.0384839167905384\n│ β₂ = 1.2053540859414364\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.9497181986960488e-6 from total weight 1.8272748413277866: operator might not be hermitian?\n│ α = 0.7717001680448697 - 1.9497181986960488e-6im\n│ β₁ = 1.2053540859414364\n│ β₂ = 1.1360166037032604\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.9811992536446915e-6 from total weight 1.8330648060187416: operator might not be hermitian?\n│ α = 0.9324764918655245 - 1.9811992536446915e-6im\n│ β₁ = 1.1360166037032604\n│ β₂ = 1.0954818352164835\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.444192831056429e-6 from total weight 1.680031417900311: operator might not be hermitian?\n│ α = 0.8412545867799889 - 1.444192831056429e-6im\n│ β₁ = 1.0396167334930557\n│ β₂ = 1.0168546271679657\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.012070060116583e-6 from total weight 1.6996488398921563: operator might not be hermitian?\n│ α = 0.9563600153628701 - 2.012070060116583e-6im\n│ β₁ = 1.0168546271679657\n│ β₂ = 0.969633109565124\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.2284985421137937e-6 from total weight 1.625611124450328: operator might not be hermitian?\n│ α = 0.9076143355875635 - 2.2284985421137937e-6im\n│ β₁ = 0.969633109565124\n│ β₂ = 0.9373683260078226\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.3787217767051727e-6 from total weight 1.6320977987504197: operator might not be hermitian?\n│ α = 0.9151559473878687 - 2.3787217767051727e-6im\n│ β₁ = 0.9373683260078226\n│ β₂ = 0.9734338385520672\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.4459831018432132e-6 from total weight 1.7171504373726327: operator might not be hermitian?\n│ α = 1.0490080777046167 - 2.4459831018432132e-6im\n│ β₁ = 0.9734338385520672\n│ β₂ = 0.949006975440799\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.502042695789325e-6 from total weight 1.7461038387840222: operator might not be hermitian?\n│ α = 1.063200920663453 - 2.502042695789325e-6im\n│ β₁ = 0.949006975440799\n│ β₂ = 1.0088945329791073\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.2991596320565827e-6 from total weight 1.7649566358660225: operator might not be hermitian?\n│ α = 1.0323010887631134 - 2.2991596320565827e-6im\n│ β₁ = 1.0088945329791073\n│ β₂ = 1.0156565413295877\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.3680517285112196e-6 from total weight 1.6911743091363975: operator might not be hermitian?\n│ α = 0.822688208588965 - 2.3680517285112196e-6im\n│ β₁ = 1.0156565413295877\n│ β₂ = 1.0731712097239952\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.3240639867236346e-6 from total weight 1.7008433430515881: operator might not be hermitian?\n│ α = 0.9047109560948917 - 2.3240639867236346e-6im\n│ β₁ = 1.0731712097239952\n│ β₂ = 0.96055698328569\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.4438641293214602e-6 from total weight 1.6863390242825544: operator might not be hermitian?\n│ α = 1.0018650093118424 - 2.4438641293214602e-6im\n│ β₁ = 0.96055698328569\n│ β₂ = 0.9577766387785523\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.2852982025176743e-6 from total weight 1.6664847188204572: operator might not be hermitian?\n│ α = 0.9481338905918142 - 2.2852982025176743e-6im\n│ β₁ = 0.9577766387785523\n│ β₂ = 0.980243517590483\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.6503217592163675e-6 from total weight 1.6570209299072616: operator might not be hermitian?\n│ α = 0.9553022495142013 - 2.6503217592163675e-6im\n│ β₁ = 0.980243517590483\n│ β₂ = 0.9339371608618243\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.4977568402820283e-6 from total weight 1.6146874716863424: operator might not be hermitian?\n│ α = 0.9937470670638898 - 2.4977568402820283e-6im\n│ β₁ = 0.9339371608618243\n│ β₂ = 0.8645483083540594\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.7911041787048443e-6 from total weight 1.6526314248172924: operator might not be hermitian?\n│ α = 0.9942222833655865 - 1.7911041787048443e-6im\n│ β₁ = 0.8645483083540594\n│ β₂ = 0.997631645484384\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0910619358400764e-6 from total weight 1.628256128074027: operator might not be hermitian?\n│ α = 0.7468594858110634 - 1.0910619358400764e-6im\n│ β₁ = 0.997631645484384\n│ β₂ = 1.047926537020409\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.4086345025538481e-6 from total weight 1.7208828389475097: operator might not be hermitian?\n│ α = 1.0230379305064004 - 1.4086345025538481e-6im\n│ β₁ = 1.047926537020409\n│ β₂ = 0.9037041059637005\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.5801647672217256e-6 from total weight 1.6935875767437443: operator might not be hermitian?\n│ α = 1.0573393121341177 - 1.5801647672217256e-6im\n│ β₁ = 0.9037041059637005\n│ β₂ = 0.966225309117056\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.8503500605684953e-6 from total weight 1.687885653739837: operator might not be hermitian?\n│ α = 0.9077058420558016 - 1.8503500605684953e-6im\n│ β₁ = 0.966225309117056\n│ β₂ = 1.0447184962547331\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.7245869534127795e-6 from total weight 1.630010231135931: operator might not be hermitian?\n│ α = 0.8428816315538215 - 1.7245869534127795e-6im\n│ β₁ = 1.0447184962547331\n│ β₂ = 0.9246876079937777\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.669866318011401e-6 from total weight 1.5672706436085126: operator might not be hermitian?\n│ α = 0.7835317567308676 - 1.669866318011401e-6im\n│ β₁ = 0.9246876079937777\n│ β₂ = 0.9936639694238888\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.7442226515947817e-6 from total weight 1.6505309294564066: operator might not be hermitian?\n│ α = 0.8815928759787162 - 1.7442226515947817e-6im\n│ β₁ = 0.9936639694238888\n│ β₂ = 0.9796316991510248\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.5551504819709405e-6 from total weight 1.6065777130754422: operator might not be hermitian?\n│ α = 0.7930473224308218 - 1.5551504819709405e-6im\n│ β₁ = 0.9796316991510248\n│ β₂ = 0.9962377359606892\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.5768281077382929e-6 from total weight 1.6432036667533771: operator might not be hermitian?\n│ α = 0.8513104308677694 - 1.5768281077382929e-6im\n│ β₁ = 0.9962377359606892\n│ β₂ = 0.9914127365395857\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.7341376412037535e-6 from total weight 1.6510721319879114: operator might not be hermitian?\n│ α = 0.9480572889512263 - 1.7341376412037535e-6im\n│ β₁ = 0.9914127365395857\n│ β₂ = 0.9188728680931008\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.0380127565208794e-6 from total weight 1.6657878517427898: operator might not be hermitian?\n│ α = 1.0551087967110504 - 2.0380127565208794e-6im\n│ β₁ = 0.9188728680931008\n│ β₂ = 0.9040283438006927\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.9689745632016017e-6 from total weight 1.6316000751641972: operator might not be hermitian?\n│ α = 1.0068062496864232 - 1.9689745632016017e-6im\n│ β₁ = 0.9040283438006927\n│ β₂ = 0.9116977209959855\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.7641602776535814e-6 from total weight 1.643619185973048: operator might not be hermitian?\n│ α = 0.9832497995595976 - 1.7641602776535814e-6im\n│ β₁ = 0.9116977209959855\n│ β₂ = 0.9505320224444467\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.8717770270057499e-6 from total weight 1.6186044448934445: operator might not be hermitian?\n│ α = 0.933889625841253 - 1.8717770270057499e-6im\n│ β₁ = 0.7782860350350426\n│ β₂ = 1.0686446385215385\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.9087480197105267e-6 from total weight 1.872223188302107: operator might not be hermitian?\n│ α = 1.1855968939468708 - 1.9087480197105267e-6im\n│ β₁ = 1.0686446385215385\n│ β₂ = 0.9785593024621279\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.9402894978638036e-6 from total weight 1.565662888890479: operator might not be hermitian?\n│ α = 0.8073816698233107 - 1.9402894978638036e-6im\n│ β₁ = 0.9785593024621279\n│ β₂ = 0.9175275540512514\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.911761391519551e-6 from total weight 1.69861571249875: operator might not be hermitian?\n│ α = 0.9952744384587691 - 1.911761391519551e-6im\n│ β₁ = 0.9175275540512514\n│ β₂ = 1.0260932308768491\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.8291039981729873e-6 from total weight 1.6498451539412835: operator might not be hermitian?\n│ α = 0.858745751697278 - 1.8291039981729873e-6im\n│ β₁ = 1.0260932308768491\n│ β₂ = 0.9652344002732076\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.1171286886112473e-6 from total weight 1.6049927885630448: operator might not be hermitian?\n│ α = 0.9039923380658194 - 2.1171286886112473e-6im\n│ β₁ = 0.9652344002732076\n│ β₂ = 0.9094626196729643\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.7631975034633485e-6 from total weight 1.6635044587627164: operator might not be hermitian?\n│ α = 1.0268033716558147 - 1.7631975034633485e-6im\n│ β₁ = 0.9094626196729643\n│ β₂ = 0.9411693066043798\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.7538638426399522e-6 from total weight 1.598357955260205: operator might not be hermitian?\n│ α = 0.8395676881149241 - 1.7538638426399522e-6im\n│ β₁ = 0.9411693066043798\n│ β₂ = 0.9818729991804948\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.466572661972844e-6 from total weight 1.6275090983582583: operator might not be hermitian?\n│ α = 0.8477297716903176 - 1.466572661972844e-6im\n│ β₁ = 0.9818729991804948\n│ β₂ = 0.9828863173871848\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2983254894863294e-6 from total weight 1.6025938022231123: operator might not be hermitian?\n│ α = 0.8238345469560299 - 1.2983254894863294e-6im\n│ β₁ = 0.9828863173871848\n│ β₂ = 0.961008855972232\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.753803488737521e-6 from total weight 1.6853450238186074: operator might not be hermitian?\n│ α = 1.0058728121272003 - 1.753803488737521e-6im\n│ β₁ = 0.961008855972232\n│ β₂ = 0.9513515196147673\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.8713013819338098e-6 from total weight 1.6457558464254889: operator might not be hermitian?\n│ α = 0.953253090989849 - 1.8713013819338098e-6im\n│ β₁ = 0.9513515196147673\n│ β₂ = 0.945912858927897\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.1940684603594107e-6 from total weight 1.6685947310681075: operator might not be hermitian?\n│ α = 1.0035877974418752 - 2.1940684603594107e-6im\n│ β₁ = 0.5519727146275405\n│ β₂ = 1.2134026667499564\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -2.0196296084545873e-6 from total weight 1.9239962959657293: operator might not be hermitian?\n│ α = 1.2417813732350762 - 2.0196296084545873e-6im\n│ β₁ = 1.2134026667499564\n│ β₂ = 0.8290927187572397\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.8201529821404439e-6 from total weight 1.6421902342159629: operator might not be hermitian?\n│ α = 1.1015110960833447 - 1.8201529821404439e-6im\n│ β₁ = 0.8290927187572397\n│ β₂ = 0.8922260555823076\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.8864060040545833e-6 from total weight 1.6289668855724284: operator might not be hermitian?\n│ α = 1.054375019166633 - 1.8864060040545833e-6im\n│ β₁ = 0.8922260555823076\n│ β₂ = 0.8635734473600828\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 7:\tobj = -2.477828349789e-01\terr = 3.6861869835e-01\ttime = 0.04 sec\n┌ Warning: ignoring imaginary component 9.797819969445398e-7 from total weight 1.7826507126092328: operator might not be hermitian?\n│ α = 0.37266497932262266 + 9.797819969445398e-7im\n│ β₁ = 1.2529923849189937\n│ β₂ = 1.2120125658122227\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.0083546393710799e-6 from total weight 1.5121046107716045: operator might not be hermitian?\n│ α = 0.42712182311279506 + 1.0083546393710799e-6im\n│ β₁ = 1.0452302250562036\n│ β₂ = 1.0057440423713626\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 8.626484624303654e-7 from total weight 1.5025688882814423: operator might not be hermitian?\n│ α = 0.3906593447423297 + 8.626484624303654e-7im\n│ β₁ = 0.8502359245275253\n│ β₂ = 1.175668921524637\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 8:\tobj = +3.021742828810e-02\terr = 3.8513237752e-01\ttime = 0.02 sec\n[ Info: VUMPS 9:\tobj = -8.745011232470e-02\terr = 3.9063780450e-01\ttime = 0.02 sec\n[ Info: VUMPS 10:\tobj = -1.499513490072e-01\terr = 3.7840293472e-01\ttime = 0.06 sec\n[ Info: VUMPS 11:\tobj = -2.958681759723e-01\terr = 3.3123568953e-01\ttime = 0.03 sec\n[ Info: VUMPS 12:\tobj = -7.976662855182e-03\terr = 3.9656031279e-01\ttime = 0.03 sec\n[ Info: VUMPS 13:\tobj = -5.967400377513e-02\terr = 3.9708070211e-01\ttime = 0.03 sec\n[ Info: VUMPS 14:\tobj = -1.005858342981e-01\terr = 3.6761593768e-01\ttime = 0.02 sec\n┌ Warning: ignoring imaginary component 1.1228371103039203e-6 from total weight 1.925618999181602: operator might not be hermitian?\n│ α = 0.3165350873163584 + 1.1228371103039203e-6im\n│ β₁ = 1.326599888107445\n│ β₂ = 1.359392071986163\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.0111171559745724e-6 from total weight 1.7301725734241629: operator might not be hermitian?\n│ α = 0.3705094109208439 + 1.0111171559745724e-6im\n│ β₁ = 1.2507643011136502\n│ β₂ = 1.136577570299071\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.0452915227276982e-6 from total weight 1.7398003898725583: operator might not be hermitian?\n│ α = 0.32520104482655454 + 1.0452915227276982e-6im\n│ β₁ = 1.136577570299071\n│ β₂ = 1.276456463705829\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.043670650770212e-6 from total weight 1.741533774893118: operator might not be hermitian?\n│ α = 0.230415239863528 + 1.043670650770212e-6im\n│ β₁ = 1.225976649377648\n│ β₂ = 1.2152489298541975\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 9.49492928604273e-7 from total weight 1.7203306219892969: operator might not be hermitian?\n│ α = 0.28756839381882887 + 9.49492928604273e-7im\n│ β₁ = 1.2152489298541975\n│ β₂ = 1.1832209879468272\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.0232852264632775e-6 from total weight 1.686947657369024: operator might not be hermitian?\n│ α = 0.22818200575305508 + 1.0232852264632775e-6im\n│ β₁ = 1.16015510353531\n│ β₂ = 1.2032312773084308\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 9.778034893506704e-7 from total weight 1.7441005741153381: operator might not be hermitian?\n│ α = 0.3359468737393356 + 9.778034893506704e-7im\n│ β₁ = 1.2032312773084308\n│ β₂ = 1.2170706651464347\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 9.625125309067895e-7 from total weight 1.6930493324860827: operator might not be hermitian?\n│ α = 0.15689474930621 + 9.625125309067895e-7im\n│ β₁ = 1.2170706651464347\n│ β₂ = 1.1664214829600834\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.0255041846228552e-6 from total weight 1.6163568378358877: operator might not be hermitian?\n│ α = 0.15946995305765732 + 1.0255041846228552e-6im\n│ β₁ = 1.1664214829600834\n│ β₂ = 1.1075376677019915\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 9.450003205895008e-7 from total weight 1.63310722976173: operator might not be hermitian?\n│ α = 0.4164024184737056 + 9.450003205895008e-7im\n│ β₁ = 1.1188595855688177\n│ β₂ = 1.1143614662977006\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.080879533445732e-6 from total weight 1.614688674276658: operator might not be hermitian?\n│ α = 0.30429877958921225 + 1.080879533445732e-6im\n│ β₁ = 1.1143614662977006\n│ β₂ = 1.1281933743855694\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.0988263242361906e-6 from total weight 1.6115083028404351: operator might not be hermitian?\n│ α = 0.2897351912699093 + 1.0988263242361906e-6im\n│ β₁ = 1.1281933743855694\n│ β₂ = 1.113639187104487\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.003436960373555e-6 from total weight 1.6172105156629197: operator might not be hermitian?\n│ α = 0.14272259326333872 + 1.003436960373555e-6im\n│ β₁ = 1.113639187104487\n│ β₂ = 1.1639621446967956\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.0252943553334948e-6 from total weight 1.6211799504508382: operator might not be hermitian?\n│ α = 0.1247595589372499 + 1.0252943553334948e-6im\n│ β₁ = 1.1829896553891046\n│ β₂ = 1.10145129689827\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 9.687233263298844e-7 from total weight 1.5808042072341244: operator might not be hermitian?\n│ α = 0.1804895992486852 + 9.687233263298844e-7im\n│ β₁ = 1.10145129689827\n│ β₂ = 1.1194509755823783\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 9.67778768440515e-7 from total weight 1.564685677695013: operator might not be hermitian?\n│ α = 0.27799810530818225 + 9.67778768440515e-7im\n│ β₁ = 0.9536269829322506\n│ β₂ = 1.2089474351069032\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 15:\tobj = -1.268018919710e-01\terr = 3.9770372558e-01\ttime = 0.03 sec\n[ Info: VUMPS 16:\tobj = -2.089366409470e-01\terr = 3.5604649696e-01\ttime = 0.06 sec\n┌ Warning: ignoring imaginary component -1.4642964467764807e-6 from total weight 2.394006887776447: operator might not be hermitian?\n│ α = 0.8242382100564384 - 1.4642964467764807e-6im\n│ β₁ = 1.655282987088156\n│ β₂ = 1.520506029076635\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.3983965608810323e-6 from total weight 2.298232529409139: operator might not be hermitian?\n│ α = 0.9982576460523188 - 1.3983965608810323e-6im\n│ β₁ = 1.520506029076635\n│ β₂ = 1.4047832028010792\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2414856767097027e-6 from total weight 2.2348174847568463: operator might not be hermitian?\n│ α = 0.980492672115643 - 1.2414856767097027e-6im\n│ β₁ = 1.4047832028010792\n│ β₂ = 1.4351402242390265\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.4617492379419977e-6 from total weight 2.20291267013881: operator might not be hermitian?\n│ α = 0.9485389110548547 - 1.4617492379419977e-6im\n│ β₁ = 1.4765975180930613\n│ β₂ = 1.3314495619557836\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.3979009563739458e-6 from total weight 2.1101472430666828: operator might not be hermitian?\n│ α = 1.0471134224194303 - 1.3979009563739458e-6im\n│ β₁ = 1.3314495619557836\n│ β₂ = 1.2583786918002022\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2539214374338373e-6 from total weight 2.036435547475786: operator might not be hermitian?\n│ α = 0.9129612687076675 - 1.2539214374338373e-6im\n│ β₁ = 1.2583786918002022\n│ β₂ = 1.3153153724047817\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 17:\tobj = -2.048644413129e-01\terr = 3.6617686541e-01\ttime = 0.03 sec\n[ Info: VUMPS 18:\tobj = -2.799693370510e-01\terr = 3.3255889569e-01\ttime = 0.03 sec\n[ Info: VUMPS 19:\tobj = -1.753528829672e-01\terr = 3.8615523295e-01\ttime = 0.03 sec\n[ Info: VUMPS 20:\tobj = +6.627601983914e-02\terr = 3.7292664656e-01\ttime = 0.06 sec\n[ Info: VUMPS 21:\tobj = -2.320790738208e-01\terr = 3.6756828615e-01\ttime = 0.03 sec\n[ Info: VUMPS 22:\tobj = +9.275292947159e-03\terr = 4.0192510807e-01\ttime = 0.02 sec\n[ Info: VUMPS 23:\tobj = -7.298797837172e-02\terr = 3.7988627737e-01\ttime = 0.02 sec\n[ Info: VUMPS 24:\tobj = -1.854126547483e-01\terr = 3.6419418325e-01\ttime = 0.05 sec\n[ Info: VUMPS 25:\tobj = -3.671777760261e-01\terr = 3.0812532655e-01\ttime = 0.03 sec\n[ Info: VUMPS 26:\tobj = -6.058668310156e-02\terr = 3.8116081944e-01\ttime = 0.03 sec\n[ Info: VUMPS 27:\tobj = -2.015499701872e-03\terr = 4.0317162622e-01\ttime = 0.02 sec\n[ Info: VUMPS 28:\tobj = -1.933169651612e-01\terr = 3.8584662029e-01\ttime = 0.05 sec\n┌ Warning: ignoring imaginary component -1.1661211199304189e-6 from total weight 1.9830955524856506: operator might not be hermitian?\n│ α = 0.7062017103994722 - 1.1661211199304189e-6im\n│ β₁ = 1.2975553722381348\n│ β₂ = 1.322987970652728\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1145563612105502e-6 from total weight 1.9381249814965889: operator might not be hermitian?\n│ α = 0.5691588295585481 - 1.1145563612105502e-6im\n│ β₁ = 1.322987970652728\n│ β₂ = 1.2969539313883243\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2189929755176618e-6 from total weight 2.056544867261239: operator might not be hermitian?\n│ α = 0.5470064500394781 - 1.2189929755176618e-6im\n│ β₁ = 1.4301041013320408\n│ β₂ = 1.3729395449274322\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1440933743427778e-6 from total weight 2.0445152640029147: operator might not be hermitian?\n│ α = 0.6236570359401358 - 1.1440933743427778e-6im\n│ β₁ = 1.350665796986038\n│ β₂ = 1.4024252105242667\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.248874490177021e-6 from total weight 2.031575324892375: operator might not be hermitian?\n│ α = 0.5290086048223288 - 1.248874490177021e-6im\n│ β₁ = 1.4024252105242667\n│ β₂ = 1.371368559366846\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1024766432207733e-6 from total weight 2.0089343008618497: operator might not be hermitian?\n│ α = 0.7138216358572168 - 1.1024766432207733e-6im\n│ β₁ = 1.371368559366846\n│ β₂ = 1.282818760285451\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1510270212095053e-6 from total weight 1.9537611011393712: operator might not be hermitian?\n│ α = 0.6076833782060458 - 1.1510270212095053e-6im\n│ β₁ = 1.282818760285451\n│ β₂ = 1.342489992676217\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.224997782992704e-6 from total weight 1.9645654639590098: operator might not be hermitian?\n│ α = 0.5951035704552179 - 1.224997782992704e-6im\n│ β₁ = 1.342489992676217\n│ β₂ = 1.305024835845909\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1876444488932714e-6 from total weight 2.0169775219024793: operator might not be hermitian?\n│ α = 0.7688953944030071 - 1.1876444488932714e-6im\n│ β₁ = 1.305024835845909\n│ β₂ = 1.331881516558308\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1840660663932356e-6 from total weight 1.984838719137105: operator might not be hermitian?\n│ α = 0.785780036375005 - 1.1840660663932356e-6im\n│ β₁ = 1.331881516558308\n│ β₂ = 1.2442773409771872\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.077349919163459e-6 from total weight 1.8902174931287379: operator might not be hermitian?\n│ α = 0.7502244171904665 - 1.077349919163459e-6im\n│ β₁ = 1.2442773409771872\n│ β₂ = 1.2090737752141907\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0988026773565973e-6 from total weight 1.9119512889411112: operator might not be hermitian?\n│ α = 0.6200929725096753 - 1.0988026773565973e-6im\n│ β₁ = 1.2354323373196032\n│ β₂ = 1.3208896156119578\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2560645931206094e-6 from total weight 1.7909478939100432: operator might not be hermitian?\n│ α = 0.7333732110449686 - 1.2560645931206094e-6im\n│ β₁ = 1.1135982474665187\n│ β₂ = 1.1956408471026458\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1138326366866638e-6 from total weight 1.7427923996019516: operator might not be hermitian?\n│ α = 0.6189073977995818 - 1.1138326366866638e-6im\n│ β₁ = 1.1956408471026458\n│ β₂ = 1.1066715618455663\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.82501486145211e-7 from total weight 1.737355447292098: operator might not be hermitian?\n│ α = 0.7353320014976531 - 9.82501486145211e-7im\n│ β₁ = 1.0893509501287795\n│ β₂ = 1.136224143935316\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.2054549464787095e-6 from total weight 1.765964675748259: operator might not be hermitian?\n│ α = 0.5948599677205233 - 1.2054549464787095e-6im\n│ β₁ = 1.136224143935316\n│ β₂ = 1.2139882822874353\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1910613334550207e-6 from total weight 1.7457281622540435: operator might not be hermitian?\n│ α = 0.5876265067570648 - 1.1910613334550207e-6im\n│ β₁ = 1.2139882822874353\n│ β₂ = 1.1083746458263801\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1145402977093266e-6 from total weight 1.8228236011903869: operator might not be hermitian?\n│ α = 0.7583728039666247 - 1.1145402977093266e-6im\n│ β₁ = 1.1812863090759282\n│ β₂ = 1.1628066164453221\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0244123553188045e-6 from total weight 1.827416176813848: operator might not be hermitian?\n│ α = 0.7209367429139465 - 1.0244123553188045e-6im\n│ β₁ = 1.1628066164453221\n│ β₂ = 1.2114375216029523\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0686049562343147e-6 from total weight 1.8521257122682948: operator might not be hermitian?\n│ α = 0.9046242484510791 - 1.0686049562343147e-6im\n│ β₁ = 1.1441752673029573\n│ β₂ = 1.1414410106749817\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.02064543803463e-6 from total weight 1.8303026002338043: operator might not be hermitian?\n│ α = 0.8018410455211272 - 1.02064543803463e-6im\n│ β₁ = 1.1414410106749817\n│ β₂ = 1.1849772003243124\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1415911429371942e-6 from total weight 1.8503026810057916: operator might not be hermitian?\n│ α = 0.7878644256718402 - 1.1415911429371942e-6im\n│ β₁ = 1.1849772003243124\n│ β₂ = 1.1826743815641958\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1470443615248238e-6 from total weight 1.8849501176514116: operator might not be hermitian?\n│ α = 0.8619538770355701 - 1.1470443615248238e-6im\n│ β₁ = 1.1826743815641958\n│ β₂ = 1.1880041107200983\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0568060722793843e-6 from total weight 1.7864879735856112: operator might not be hermitian?\n│ α = 0.7350531632675616 - 1.0568060722793843e-6im\n│ β₁ = 1.1880041107200983\n│ β₂ = 1.1135000493252825\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -9.602859024383792e-7 from total weight 1.7025702297398062: operator might not be hermitian?\n│ α = 0.6791999518194767 - 9.602859024383792e-7im\n│ β₁ = 1.1135000493252825\n│ β₂ = 1.0943264836402107\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0558620769408888e-6 from total weight 1.7596527593571747: operator might not be hermitian?\n│ α = 0.7769001371869034 - 1.0558620769408888e-6im\n│ β₁ = 1.1619115114008967\n│ β₂ = 1.0690021749394427\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.0354194948727913e-6 from total weight 1.7038410836176745: operator might not be hermitian?\n│ α = 0.7165984827525741 - 1.0354194948727913e-6im\n│ β₁ = 1.0690021749394427\n│ β₂ = 1.116599929569149\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.091324247760525e-6 from total weight 1.7342773510387077: operator might not be hermitian?\n│ α = 0.8026570431688571 - 1.091324247760525e-6im\n│ β₁ = 1.0720399440829314\n│ β₂ = 1.1019028812317075\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component -1.1757481594952546e-6 from total weight 1.7331994241999757: operator might not be hermitian?\n│ α = 0.866234625976551 - 1.1757481594952546e-6im\n│ β₁ = 1.1019028812317075\n│ β₂ = 1.0195233480103687\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n[ Info: VUMPS 29:\tobj = -1.409357861027e-01\terr = 3.5767477119e-01\ttime = 0.03 sec\n[ Info: VUMPS 30:\tobj = -2.045532833861e-01\terr = 3.6013137514e-01\ttime = 0.02 sec\n[ Info: VUMPS 31:\tobj = -3.677340068350e-01\terr = 2.9848315584e-01\ttime = 0.02 sec\n[ Info: VUMPS 32:\tobj = -3.332844888666e-01\terr = 3.3334001697e-01\ttime = 0.06 sec\n[ Info: VUMPS 33:\tobj = -2.919507908127e-01\terr = 3.5475313994e-01\ttime = 0.03 sec\n[ Info: VUMPS 34:\tobj = -2.808449276253e-02\terr = 3.6950599342e-01\ttime = 0.08 sec\n[ Info: VUMPS 35:\tobj = -9.830142151296e-02\terr = 3.7023131749e-01\ttime = 0.06 sec\n[ Info: VUMPS 36:\tobj = -2.504433745603e-01\terr = 3.5111294760e-01\ttime = 0.02 sec\n[ Info: VUMPS 37:\tobj = -3.194192131126e-01\terr = 3.2385721415e-01\ttime = 0.02 sec\n[ Info: VUMPS 38:\tobj = +8.884748290821e-02\terr = 3.9871163038e-01\ttime = 0.07 sec\n[ Info: VUMPS 39:\tobj = -1.989518543281e-01\terr = 3.6796439117e-01\ttime = 0.02 sec\n[ Info: VUMPS 40:\tobj = -2.568596388181e-01\terr = 3.5396377788e-01\ttime = 0.02 sec\n[ Info: VUMPS 41:\tobj = -1.742517027774e-01\terr = 3.7560253512e-01\ttime = 0.03 sec\n[ Info: VUMPS 42:\tobj = -2.181842216501e-01\terr = 3.7550074763e-01\ttime = 0.02 sec\n[ Info: VUMPS 43:\tobj = -6.227109008840e-02\terr = 4.1909295201e-01\ttime = 0.05 sec\n[ Info: VUMPS 44:\tobj = -7.668274105361e-02\terr = 4.0844645003e-01\ttime = 0.03 sec\n[ Info: VUMPS 45:\tobj = -1.835375816162e-01\terr = 3.4820396366e-01\ttime = 0.02 sec\n[ Info: VUMPS 46:\tobj = -6.357716783443e-02\terr = 3.7708810363e-01\ttime = 0.02 sec\n[ Info: VUMPS 47:\tobj = +1.388559492933e-04 -5.781399664562e-15im\terr = 3.6961508021e-01\ttime = 0.05 sec\n[ Info: VUMPS 48:\tobj = -1.404104902042e-01\terr = 3.9016059615e-01\ttime = 0.02 sec\n[ Info: VUMPS 49:\tobj = -2.106708660955e-01\terr = 3.6760368335e-01\ttime = 0.02 sec\n[ Info: VUMPS 50:\tobj = +1.735796736157e-01\terr = 3.5521706372e-01\ttime = 0.02 sec\n[ Info: VUMPS 51:\tobj = -5.367170688984e-02\terr = 3.9109124649e-01\ttime = 0.06 sec\n[ Info: VUMPS 52:\tobj = -2.298653965104e-01\terr = 3.3926679477e-01\ttime = 0.02 sec\n[ Info: VUMPS 53:\tobj = -3.165325039869e-01\terr = 3.3133971575e-01\ttime = 0.02 sec\n[ Info: VUMPS 54:\tobj = -2.950197697207e-01\terr = 3.4876181076e-01\ttime = 0.03 sec\n[ Info: VUMPS 55:\tobj = -2.374027247452e-01\terr = 3.7519899465e-01\ttime = 0.06 sec\n[ Info: VUMPS 56:\tobj = -1.619819474039e-02\terr = 3.7718729795e-01\ttime = 0.02 sec\n[ Info: VUMPS 57:\tobj = -1.705343092043e-01\terr = 3.8558807493e-01\ttime = 0.02 sec\n[ Info: VUMPS 58:\tobj = -3.730847939935e-01\terr = 2.8129746259e-01\ttime = 0.02 sec\n[ Info: VUMPS 59:\tobj = -2.151394001240e-01\terr = 4.1030105789e-01\ttime = 0.06 sec\n[ Info: VUMPS 60:\tobj = -1.561041094602e-01\terr = 3.9671982762e-01\ttime = 0.02 sec\n[ Info: VUMPS 61:\tobj = -9.599837934985e-02\terr = 3.8528434214e-01\ttime = 0.02 sec\n[ Info: VUMPS 62:\tobj = -2.825562036813e-01\terr = 3.3900898933e-01\ttime = 0.02 sec\n[ Info: VUMPS 63:\tobj = -1.332286499835e-02\terr = 3.8572490466e-01\ttime = 0.06 sec\n[ Info: VUMPS 64:\tobj = -1.912868202818e-02\terr = 3.9649310912e-01\ttime = 0.02 sec\n[ Info: VUMPS 65:\tobj = -3.005244814032e-02\terr = 4.1809852519e-01\ttime = 0.02 sec\n[ Info: VUMPS 66:\tobj = -1.895637479899e-01\terr = 3.5881009323e-01\ttime = 0.05 sec\n[ Info: VUMPS 67:\tobj = -2.664858728631e-01\terr = 3.6123422433e-01\ttime = 0.03 sec\n[ Info: VUMPS 68:\tobj = -2.080458300379e-01\terr = 3.8597810940e-01\ttime = 0.03 sec\n[ Info: VUMPS 69:\tobj = -3.878141128139e-01\terr = 2.6683063405e-01\ttime = 0.02 sec\n[ Info: VUMPS 70:\tobj = -4.330198106833e-01\terr = 1.1995217484e-01\ttime = 0.08 sec\n[ Info: VUMPS 71:\tobj = -7.298278720525e-02\terr = 3.8622717637e-01\ttime = 0.03 sec\n[ Info: VUMPS 72:\tobj = -2.945720162791e-01\terr = 3.5422369206e-01\ttime = 0.02 sec\n[ Info: VUMPS 73:\tobj = -3.416537322445e-01\terr = 3.1228535420e-01\ttime = 0.02 sec\n[ Info: VUMPS 74:\tobj = -3.331595948832e-01\terr = 3.4179032729e-01\ttime = 0.06 sec\n[ Info: VUMPS 75:\tobj = -1.222292014205e-01\terr = 4.0978910412e-01\ttime = 0.03 sec\n[ Info: VUMPS 76:\tobj = -6.382262951270e-02\terr = 3.8950144913e-01\ttime = 0.04 sec\n[ Info: VUMPS 77:\tobj = -2.249182124905e-01\terr = 3.6705315029e-01\ttime = 0.06 sec\n[ Info: VUMPS 78:\tobj = -3.169211687090e-01\terr = 3.1190417293e-01\ttime = 0.03 sec\n[ Info: VUMPS 79:\tobj = -3.795013187369e-01\terr = 2.8575855105e-01\ttime = 0.04 sec\n[ Info: VUMPS 80:\tobj = -3.541737574468e-01\terr = 3.1274076174e-01\ttime = 0.03 sec\n[ Info: VUMPS 81:\tobj = -1.482341913801e-01\terr = 3.9486023268e-01\ttime = 0.06 sec\n[ Info: VUMPS 82:\tobj = -2.431823642066e-01\terr = 3.5485354611e-01\ttime = 0.03 sec\n[ Info: VUMPS 83:\tobj = -1.426154410251e-01\terr = 3.9431885582e-01\ttime = 0.02 sec\n[ Info: VUMPS 84:\tobj = -1.879354265828e-01\terr = 3.7761650164e-01\ttime = 0.06 sec\n[ Info: VUMPS 85:\tobj = -3.883275844777e-02\terr = 3.3484189710e-01\ttime = 0.03 sec\n[ Info: VUMPS 86:\tobj = -2.541785323711e-01\terr = 3.6013211771e-01\ttime = 0.02 sec\n[ Info: VUMPS 87:\tobj = -3.516595702805e-01\terr = 3.0264434875e-01\ttime = 0.03 sec\n[ Info: VUMPS 88:\tobj = -2.234563948608e-01\terr = 3.6699482034e-01\ttime = 0.05 sec\n[ Info: VUMPS 89:\tobj = +2.492258044917e-02\terr = 3.8778077237e-01\ttime = 0.02 sec\n[ Info: VUMPS 90:\tobj = -3.286041797336e-01\terr = 3.2736069863e-01\ttime = 0.02 sec\n[ Info: VUMPS 91:\tobj = -2.158862857429e-01\terr = 3.7995863438e-01\ttime = 0.03 sec\n[ Info: VUMPS 92:\tobj = -2.675801195049e-01\terr = 3.6561496937e-01\ttime = 0.06 sec\n[ Info: VUMPS 93:\tobj = +5.624309743865e-03\terr = 4.2867100082e-01\ttime = 0.03 sec\n[ Info: VUMPS 94:\tobj = -1.759420429917e-01\terr = 3.9349409438e-01\ttime = 0.02 sec\n[ Info: VUMPS 95:\tobj = -3.361200941070e-01\terr = 2.9968812876e-01\ttime = 0.02 sec\n[ Info: VUMPS 96:\tobj = -2.210577853944e-03\terr = 3.9551380217e-01\ttime = 0.06 sec\n[ Info: VUMPS 97:\tobj = -2.235056018794e-02\terr = 3.9877664313e-01\ttime = 0.02 sec\n[ Info: VUMPS 98:\tobj = +1.266964324347e-01\terr = 3.5087282451e-01\ttime = 0.02 sec\n[ Info: VUMPS 99:\tobj = -1.649834446522e-01\terr = 3.7313907507e-01\ttime = 0.02 sec\n[ Info: VUMPS 100:\tobj = -2.810724087197e-01\terr = 3.4803141841e-01\ttime = 0.06 sec\n[ Info: VUMPS 101:\tobj = -3.934095054094e-01\terr = 2.5788371653e-01\ttime = 0.03 sec\n[ Info: VUMPS 102:\tobj = -2.769141978863e-02\terr = 4.2113724750e-01\ttime = 0.03 sec\n[ Info: VUMPS 103:\tobj = -1.428941704956e-01\terr = 3.7175159384e-01\ttime = 0.05 sec\n[ Info: VUMPS 104:\tobj = -2.825079318885e-01\terr = 3.4365263618e-01\ttime = 0.02 sec\n[ Info: VUMPS 105:\tobj = -3.895828699840e-01\terr = 2.5772008058e-01\ttime = 0.03 sec\n[ Info: VUMPS 106:\tobj = -3.789769542971e-01\terr = 2.7647068815e-01\ttime = 0.03 sec\n[ Info: VUMPS 107:\tobj = -4.131370544119e-01\terr = 2.0771775492e-01\ttime = 0.06 sec\n[ Info: VUMPS 108:\tobj = +1.891808047741e-02\terr = 4.0211631708e-01\ttime = 0.03 sec\n[ Info: VUMPS 109:\tobj = -3.126203477249e-01\terr = 3.3581501662e-01\ttime = 0.03 sec\n[ Info: VUMPS 110:\tobj = -3.891256643994e-01\terr = 2.6587912557e-01\ttime = 0.07 sec\n[ Info: VUMPS 111:\tobj = -3.350222584524e-01\terr = 3.2878659423e-01\ttime = 0.03 sec\n[ Info: VUMPS 112:\tobj = -3.383500923964e-01\terr = 3.0810425001e-01\ttime = 0.03 sec\n[ Info: VUMPS 113:\tobj = -2.921012433328e-01\terr = 3.5940858624e-01\ttime = 0.03 sec\n[ Info: VUMPS 114:\tobj = -3.304195736343e-01\terr = 3.2278577971e-01\ttime = 0.06 sec\n[ Info: VUMPS 115:\tobj = -1.435645156425e-01\terr = 4.0512614823e-01\ttime = 0.03 sec\n[ Info: VUMPS 116:\tobj = -1.679237781365e-01\terr = 3.6250880408e-01\ttime = 0.02 sec\n[ Info: VUMPS 117:\tobj = -1.408768635481e-01\terr = 3.6326347756e-01\ttime = 0.05 sec\n[ Info: VUMPS 118:\tobj = -1.939462004720e-02\terr = 4.0498337302e-01\ttime = 0.03 sec\n[ Info: VUMPS 119:\tobj = -2.352201460179e-01\terr = 3.6574114214e-01\ttime = 0.02 sec\n[ Info: VUMPS 120:\tobj = -2.295422994168e-02\terr = 3.6188803296e-01\ttime = 0.03 sec\n[ Info: VUMPS 121:\tobj = -6.989486583808e-02\terr = 3.7006193288e-01\ttime = 0.05 sec\n[ Info: VUMPS 122:\tobj = -3.493531583983e-02\terr = 3.8804888357e-01\ttime = 0.03 sec\n[ Info: VUMPS 123:\tobj = +7.790731640126e-04\terr = 3.8138863176e-01\ttime = 0.02 sec\n[ Info: VUMPS 124:\tobj = -1.919530149789e-01\terr = 3.6070095280e-01\ttime = 0.03 sec\n[ Info: VUMPS 125:\tobj = -3.218424809114e-01\terr = 3.3338267984e-01\ttime = 0.05 sec\n[ Info: VUMPS 126:\tobj = -3.667333159463e-01\terr = 2.8821000587e-01\ttime = 0.02 sec\n[ Info: VUMPS 127:\tobj = -2.130648461950e-01\terr = 3.7595362973e-01\ttime = 0.03 sec\n[ Info: VUMPS 128:\tobj = -1.030371749297e-01\terr = 4.2417993413e-01\ttime = 0.03 sec\n[ Info: VUMPS 129:\tobj = -1.830830998421e-01\terr = 3.7685385391e-01\ttime = 0.05 sec\n[ Info: VUMPS 130:\tobj = -7.071567794803e-02\terr = 3.9744980880e-01\ttime = 0.02 sec\n[ Info: VUMPS 131:\tobj = -4.769518696950e-02\terr = 3.8112218583e-01\ttime = 0.02 sec\n[ Info: VUMPS 132:\tobj = -2.991402416948e-01\terr = 3.3370573847e-01\ttime = 0.02 sec\n[ Info: VUMPS 133:\tobj = -2.746313335444e-01\terr = 3.5097484163e-01\ttime = 0.06 sec\n[ Info: VUMPS 134:\tobj = -3.276842746897e-01\terr = 3.1708681372e-01\ttime = 0.02 sec\n[ Info: VUMPS 135:\tobj = -2.049761563157e-01\terr = 3.7370273426e-01\ttime = 0.02 sec\n[ Info: VUMPS 136:\tobj = -3.833983237486e-01\terr = 2.6114682914e-01\ttime = 0.02 sec\n[ Info: VUMPS 137:\tobj = -6.177005685578e-02\terr = 3.8019469489e-01\ttime = 0.06 sec\n[ Info: VUMPS 138:\tobj = -1.316570790104e-01\terr = 3.8729233886e-01\ttime = 0.02 sec\n[ Info: VUMPS 139:\tobj = -2.366225337929e-01\terr = 3.6759309875e-01\ttime = 0.03 sec\n[ Info: VUMPS 140:\tobj = +8.913339361766e-02\terr = 3.7167547836e-01\ttime = 0.08 sec\n[ Info: VUMPS 141:\tobj = -7.481699300835e-02\terr = 3.8011320937e-01\ttime = 0.04 sec\n[ Info: VUMPS 142:\tobj = -2.554895657661e-01\terr = 3.5626764832e-01\ttime = 0.03 sec\n[ Info: VUMPS 143:\tobj = -2.752729453871e-01\terr = 3.5827930411e-01\ttime = 0.03 sec\n[ Info: VUMPS 144:\tobj = -1.078710456452e-01\terr = 3.7452629595e-01\ttime = 0.06 sec\n[ Info: VUMPS 145:\tobj = -1.834468230261e-01\terr = 3.9202973168e-01\ttime = 0.03 sec\n[ Info: VUMPS 146:\tobj = -2.880934140139e-01\terr = 3.4460619232e-01\ttime = 0.04 sec\n[ Info: VUMPS 147:\tobj = -2.585829024830e-01\terr = 3.4906000653e-01\ttime = 0.03 sec\n[ Info: VUMPS 148:\tobj = -7.446540858731e-02\terr = 4.2725017960e-01\ttime = 0.06 sec\n[ Info: VUMPS 149:\tobj = +1.223133246756e-02\terr = 4.2025804351e-01\ttime = 0.02 sec\n[ Info: VUMPS 150:\tobj = -7.807677131111e-02\terr = 4.0384260646e-01\ttime = 0.02 sec\n[ Info: VUMPS 151:\tobj = -1.510082807256e-01\terr = 4.1367387477e-01\ttime = 0.03 sec\n[ Info: VUMPS 152:\tobj = -1.077844357575e-01\terr = 3.8783544296e-01\ttime = 0.05 sec\n[ Info: VUMPS 153:\tobj = -2.687661583404e-01\terr = 3.5954953023e-01\ttime = 0.02 sec\n[ Info: VUMPS 154:\tobj = -2.216118903419e-01\terr = 3.6631386313e-01\ttime = 0.03 sec\n[ Info: VUMPS 155:\tobj = -3.346454865703e-03\terr = 3.7228195751e-01\ttime = 0.03 sec\n[ Info: VUMPS 156:\tobj = -2.182777019563e-01\terr = 3.7120325813e-01\ttime = 0.06 sec\n[ Info: VUMPS 157:\tobj = -2.260481514080e-01\terr = 3.7084200121e-01\ttime = 0.03 sec\n[ Info: VUMPS 158:\tobj = -3.753639631248e-01\terr = 2.8129702848e-01\ttime = 0.02 sec\n[ Info: VUMPS 159:\tobj = +1.493818093509e-01\terr = 3.5990583300e-01\ttime = 0.06 sec\n[ Info: VUMPS 160:\tobj = -7.335279560891e-02\terr = 3.8634405938e-01\ttime = 0.02 sec\n[ Info: VUMPS 161:\tobj = -1.712788073268e-01\terr = 3.8098418215e-01\ttime = 0.03 sec\n[ Info: VUMPS 162:\tobj = -2.775045952826e-02\terr = 3.6432182146e-01\ttime = 0.03 sec\n[ Info: VUMPS 163:\tobj = -2.974540518908e-01\terr = 3.2120804570e-01\ttime = 0.06 sec\n[ Info: VUMPS 164:\tobj = -4.054076797989e-01\terr = 2.3514693235e-01\ttime = 0.04 sec\n[ Info: VUMPS 165:\tobj = -7.519182934781e-02\terr = 4.0110456979e-01\ttime = 0.03 sec\n[ Info: VUMPS 166:\tobj = -1.784723524117e-01\terr = 3.8591296831e-01\ttime = 0.02 sec\n[ Info: VUMPS 167:\tobj = -1.116507302906e-01\terr = 3.7195004686e-01\ttime = 0.06 sec\n[ Info: VUMPS 168:\tobj = -3.122365679686e-01\terr = 3.3350953764e-01\ttime = 0.02 sec\n[ Info: VUMPS 169:\tobj = -3.560972462991e-01\terr = 2.8786350505e-01\ttime = 0.03 sec\n[ Info: VUMPS 170:\tobj = -2.497036138206e-01\terr = 3.7652961352e-01\ttime = 0.03 sec\n[ Info: VUMPS 171:\tobj = -1.204935017155e-01\terr = 3.7477170313e-01\ttime = 0.06 sec\n[ Info: VUMPS 172:\tobj = -3.140736291711e-01\terr = 3.3651541095e-01\ttime = 0.02 sec\n[ Info: VUMPS 173:\tobj = -3.777537348031e-01\terr = 2.8281048666e-01\ttime = 0.03 sec\n[ Info: VUMPS 174:\tobj = -4.081318507282e-01\terr = 2.2729687790e-01\ttime = 0.06 sec\n[ Info: VUMPS 175:\tobj = +8.272685287566e-03\terr = 4.2559224619e-01\ttime = 0.03 sec\n[ Info: VUMPS 176:\tobj = -1.393268322253e-01\terr = 3.9579900440e-01\ttime = 0.03 sec\n[ Info: VUMPS 177:\tobj = -9.734245038937e-02\terr = 3.5396586975e-01\ttime = 0.03 sec\n[ Info: VUMPS 178:\tobj = -2.821477914715e-01\terr = 3.5794786333e-01\ttime = 0.06 sec\n[ Info: VUMPS 179:\tobj = -4.040896409723e-01\terr = 2.2336565394e-01\ttime = 0.03 sec\n[ Info: VUMPS 180:\tobj = +8.386756242174e-03\terr = 4.0133165398e-01\ttime = 0.02 sec\n[ Info: VUMPS 181:\tobj = -1.390628324690e-01\terr = 3.5859390916e-01\ttime = 0.05 sec\n[ Info: VUMPS 182:\tobj = -1.281482713515e-01\terr = 3.6674107529e-01\ttime = 0.02 sec\n[ Info: VUMPS 183:\tobj = -9.466660283788e-02\terr = 4.0504716786e-01\ttime = 0.03 sec\n[ Info: VUMPS 184:\tobj = -1.755981307732e-01\terr = 3.8378790855e-01\ttime = 0.02 sec\n[ Info: VUMPS 185:\tobj = -9.036868885930e-02\terr = 3.6141032024e-01\ttime = 0.05 sec\n[ Info: VUMPS 186:\tobj = -3.703625904624e-01\terr = 2.8654729147e-01\ttime = 0.02 sec\n[ Info: VUMPS 187:\tobj = -3.162732937988e-01\terr = 3.4485685016e-01\ttime = 0.03 sec\n[ Info: VUMPS 188:\tobj = -1.112394896513e-01\terr = 3.9807795128e-01\ttime = 0.03 sec\n[ Info: VUMPS 189:\tobj = +1.824853010192e-03\terr = 3.9447516200e-01\ttime = 0.06 sec\n[ Info: VUMPS 190:\tobj = -2.140867094456e-01\terr = 3.7898558231e-01\ttime = 0.02 sec\n[ Info: VUMPS 191:\tobj = +4.894440406361e-02\terr = 3.9055437558e-01\ttime = 0.02 sec\n[ Info: VUMPS 192:\tobj = -3.751396808486e-02\terr = 3.8799740635e-01\ttime = 0.02 sec\n[ Info: VUMPS 193:\tobj = -1.682962360358e-01\terr = 3.7336809188e-01\ttime = 0.05 sec\n[ Info: VUMPS 194:\tobj = -1.748904771170e-01\terr = 3.3383969111e-01\ttime = 0.02 sec\n[ Info: VUMPS 195:\tobj = -2.023258032592e-01\terr = 3.5779592817e-01\ttime = 0.02 sec\n[ Info: VUMPS 196:\tobj = -2.562842975568e-01\terr = 3.5451811621e-01\ttime = 0.03 sec\n[ Info: VUMPS 197:\tobj = -1.198772391755e-01\terr = 3.8884771754e-01\ttime = 0.06 sec\n[ Info: VUMPS 198:\tobj = -1.194696203501e-01\terr = 3.6306124333e-01\ttime = 0.03 sec\n[ Info: VUMPS 199:\tobj = -3.165670058206e-01\terr = 3.4580209634e-01\ttime = 0.03 sec\n┌ Warning: VUMPS cancel 200:\tobj = -3.605645351808e-01\terr = 3.2889262642e-01\ttime = 6.93 sec\n└ @ MPSKit ~/Projects/MPSKit.jl/src/algorithms/groundstate/vumps.jl:67\n","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"As you can see, VUMPS struggles to converge. On it's own, that is already quite curious. Maybe we can do better using another algorithm, such as gradient descent.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"groundstate, cache, delta = find_groundstate(state, H, GradientGrassmann(; maxiter=20));","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"[ Info: CG: initializing with f = 0.249997124956, ‖∇f‖ = 3.4016e-03\n[ Info: CG: iter 1: f = -0.025384109228, ‖∇f‖ = 6.9269e-01, α = 8.72e+05, β = 0.00e+00, nfg = 18\n[ Info: CG: iter 2: f = -0.034734780784, ‖∇f‖ = 6.7957e-01, α = 3.41e-02, β = 2.69e+04, nfg = 19\n[ Info: CG: iter 3: f = -0.035137291778, ‖∇f‖ = 6.6715e-01, α = 5.70e-03, β = 4.46e-01, nfg = 3\n┌ Warning: resorting to η\n└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:139\n[ Info: CG: iter 4: f = -0.230959138308, ‖∇f‖ = 6.9544e-01, α = 1.02e+00, β = -2.32e-04, nfg = 5\n[ Info: CG: iter 5: f = -0.344516007182, ‖∇f‖ = 5.3414e-01, α = 7.93e-01, β = 3.06e-01, nfg = 3\n[ Info: CG: iter 6: f = -0.394577435495, ‖∇f‖ = 4.0969e-01, α = 7.63e-01, β = 1.75e-01, nfg = 2\n[ Info: CG: iter 7: f = -0.423605152054, ‖∇f‖ = 2.3260e-01, α = 5.92e-01, β = 1.59e-01, nfg = 2\n[ Info: CG: iter 8: f = -0.433877622086, ‖∇f‖ = 1.0355e-01, α = 4.39e-01, β = 1.19e-01, nfg = 2\n[ Info: CG: iter 9: f = -0.436274421836, ‖∇f‖ = 7.4845e-02, α = 3.14e-01, β = 2.45e-01, nfg = 2\n[ Info: CG: iter 10: f = -0.437275612812, ‖∇f‖ = 6.7115e-02, α = 1.56e-01, β = 6.92e-01, nfg = 2\n[ Info: CG: iter 11: f = -0.438430268284, ‖∇f‖ = 6.7977e-02, α = 3.09e-01, β = 4.96e-01, nfg = 2\n[ Info: CG: iter 12: f = -0.439719125881, ‖∇f‖ = 5.3438e-02, α = 4.32e-01, β = 3.51e-01, nfg = 2\n[ Info: CG: iter 13: f = -0.440296278919, ‖∇f‖ = 4.4785e-02, α = 2.16e-01, β = 5.24e-01, nfg = 2\n[ Info: CG: iter 14: f = -0.440794890531, ‖∇f‖ = 3.8641e-02, α = 2.22e-01, β = 6.23e-01, nfg = 2\n[ Info: CG: iter 15: f = -0.441206155655, ‖∇f‖ = 3.7357e-02, α = 3.41e-01, β = 3.86e-01, nfg = 2\n[ Info: CG: iter 16: f = -0.441529728743, ‖∇f‖ = 3.0799e-02, α = 2.78e-01, β = 4.26e-01, nfg = 2\n[ Info: CG: iter 17: f = -0.441770475509, ‖∇f‖ = 2.7481e-02, α = 2.52e-01, β = 5.75e-01, nfg = 2\n[ Info: CG: iter 18: f = -0.441987084171, ‖∇f‖ = 2.5934e-02, α = 3.26e-01, β = 4.60e-01, nfg = 2\n[ Info: CG: iter 19: f = -0.442146991122, ‖∇f‖ = 2.3586e-02, α = 2.69e-01, β = 5.43e-01, nfg = 2\n┌ Warning: CG: not converged to requested tol: f = -0.442291713427, ‖∇f‖ = 2.0461e-02\n└ @ OptimKit ~/.julia/packages/OptimKit/xpmbV/src/cg.jl:103\n","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"Convergence is quite slow and even fails after sufficiently many iterations. To understand why, we can look at the transfer matrix spectrum.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"transferplot(groundstate, groundstate)","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"We can clearly see multiple eigenvalues close to the unit circle. Our state is close to being non-injective, and represents the sum of multiple injective states. This is numerically very problematic, but also indicates that we used an incorrect ansatz to approximate the groundstate. We should retry with a larger unit cell.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/#Success","page":"The XXZ model","title":"Success","text":"","category":"section"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"Let's initialize a different initial state, this time with a 2-site unit cell:","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"A = TensorMap(rand, ComplexF64, ℂ^20 * ℂ^2, ℂ^20);\nB = TensorMap(rand, ComplexF64, ℂ^20 * ℂ^2, ℂ^20);\nstate = InfiniteMPS([A, B]);","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"In MPSKit, we require that the periodicity of the hamiltonian equals that of the state it is applied to. This is not a big obstacle, you can simply repeat the original hamiltonian. Alternatively, the hamiltonian can be constructed directly on a two-site unitcell by making use of MPSKitModels.jl's @mpoham.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"# H2 = repeat(H, 2); -- copies the one-site version\nH2 = heisenberg_XXX(ComplexF64, Trivial, InfiniteChain(2); spin=1 // 2)\ngroundstate, cache, delta = find_groundstate(state, H2,\n VUMPS(; maxiter=100, tol=1e-12));","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"[ Info: VUMPS init:\tobj = +4.994034626541e-01\terr = 5.1147e-02\n[ Info: VUMPS 1:\tobj = -6.262869203043e-02\terr = 3.8580046779e-01\ttime = 0.11 sec\n[ Info: VUMPS 2:\tobj = -8.607141221574e-01\terr = 1.2356188469e-01\ttime = 0.02 sec\n[ Info: VUMPS 3:\tobj = -8.851326788898e-01\terr = 1.3843868842e-02\ttime = 0.02 sec\n[ Info: VUMPS 4:\tobj = -8.859081586783e-01\terr = 6.1401047820e-03\ttime = 0.03 sec\n[ Info: VUMPS 5:\tobj = -8.861065721524e-01\terr = 4.0177146467e-03\ttime = 0.03 sec\n[ Info: VUMPS 6:\tobj = -8.861785252458e-01\terr = 2.7819071955e-03\ttime = 0.05 sec\n[ Info: VUMPS 7:\tobj = -8.862090474504e-01\terr = 2.0054538265e-03\ttime = 0.09 sec\n[ Info: VUMPS 8:\tobj = -8.862231227796e-01\terr = 1.4866506538e-03\ttime = 0.03 sec\n[ Info: VUMPS 9:\tobj = -8.862299174133e-01\terr = 1.0781153418e-03\ttime = 0.03 sec\n[ Info: VUMPS 10:\tobj = -8.862332526284e-01\terr = 8.0176561905e-04\ttime = 0.04 sec\n[ Info: VUMPS 11:\tobj = -8.862349227193e-01\terr = 5.9244791851e-04\ttime = 0.07 sec\n[ Info: VUMPS 12:\tobj = -8.862357635094e-01\terr = 4.4166081769e-04\ttime = 0.04 sec\n[ Info: VUMPS 13:\tobj = -8.862361924426e-01\terr = 3.4628140735e-04\ttime = 0.04 sec\n[ Info: VUMPS 14:\tobj = -8.862364148218e-01\terr = 2.7392973609e-04\ttime = 0.07 sec\n[ Info: VUMPS 15:\tobj = -8.862365333782e-01\terr = 2.3548153669e-04\ttime = 0.04 sec\n[ Info: VUMPS 16:\tobj = -8.862366003882e-01\terr = 2.0924520967e-04\ttime = 0.07 sec\n[ Info: VUMPS 17:\tobj = -8.862366415980e-01\terr = 1.9635595936e-04\ttime = 0.04 sec\n[ Info: VUMPS 18:\tobj = -8.862366705874e-01\terr = 1.9049012489e-04\ttime = 0.07 sec\n[ Info: VUMPS 19:\tobj = -8.862366940299e-01\terr = 1.8899241029e-04\ttime = 0.04 sec\n[ Info: VUMPS 20:\tobj = -8.862367155996e-01\terr = 1.9097122153e-04\ttime = 0.07 sec\n[ Info: VUMPS 21:\tobj = -8.862367373638e-01\terr = 1.9481944475e-04\ttime = 0.05 sec\n[ Info: VUMPS 22:\tobj = -8.862367604209e-01\terr = 2.0067663970e-04\ttime = 0.09 sec\n[ Info: VUMPS 23:\tobj = -8.862367858969e-01\terr = 2.0818860599e-04\ttime = 0.04 sec\n[ Info: VUMPS 24:\tobj = -8.862368141807e-01\terr = 2.1736488170e-04\ttime = 0.07 sec\n[ Info: VUMPS 25:\tobj = -8.862368464497e-01\terr = 2.2859478788e-04\ttime = 0.04 sec\n[ Info: VUMPS 26:\tobj = -8.862368828456e-01\terr = 2.4175658730e-04\ttime = 0.07 sec\n[ Info: VUMPS 27:\tobj = -8.862369249947e-01\terr = 2.5762627945e-04\ttime = 0.04 sec\n[ Info: VUMPS 28:\tobj = -8.862369728770e-01\terr = 2.7619128372e-04\ttime = 0.07 sec\n[ Info: VUMPS 29:\tobj = -8.862370289739e-01\terr = 2.9841300959e-04\ttime = 0.05 sec\n[ Info: VUMPS 30:\tobj = -8.862370930650e-01\terr = 3.2477737551e-04\ttime = 0.07 sec\n[ Info: VUMPS 31:\tobj = -8.862371692951e-01\terr = 3.5590713379e-04\ttime = 0.04 sec\n[ Info: VUMPS 32:\tobj = -8.862372570904e-01\terr = 3.9353059847e-04\ttime = 0.07 sec\n[ Info: VUMPS 33:\tobj = -8.862373640071e-01\terr = 4.3603005725e-04\ttime = 0.04 sec\n[ Info: VUMPS 34:\tobj = -8.862374883321e-01\terr = 4.8815487884e-04\ttime = 0.07 sec\n[ Info: VUMPS 35:\tobj = -8.862376445282e-01\terr = 5.3937202139e-04\ttime = 0.04 sec\n[ Info: VUMPS 36:\tobj = -8.862378254047e-01\terr = 6.0151343771e-04\ttime = 0.04 sec\n[ Info: VUMPS 37:\tobj = -8.862380560924e-01\terr = 6.3791369135e-04\ttime = 0.07 sec\n[ Info: VUMPS 38:\tobj = -8.862383068811e-01\terr = 6.7996919433e-04\ttime = 0.04 sec\n[ Info: VUMPS 39:\tobj = -8.862386058811e-01\terr = 6.4634261288e-04\ttime = 0.08 sec\n[ Info: VUMPS 40:\tobj = -8.862388802875e-01\terr = 6.2080152793e-04\ttime = 0.04 sec\n[ Info: VUMPS 41:\tobj = -8.862391460561e-01\terr = 5.0675637451e-04\ttime = 0.08 sec\n[ Info: VUMPS 42:\tobj = -8.862393416168e-01\terr = 4.2985263716e-04\ttime = 0.04 sec\n[ Info: VUMPS 43:\tobj = -8.862394885298e-01\terr = 3.1911525906e-04\ttime = 0.08 sec\n[ Info: VUMPS 44:\tobj = -8.862395827629e-01\terr = 2.5276803245e-04\ttime = 0.04 sec\n[ Info: VUMPS 45:\tobj = -8.862396443908e-01\terr = 1.8512521569e-04\ttime = 0.08 sec\n[ Info: VUMPS 46:\tobj = -8.862396829362e-01\terr = 1.4700821652e-04\ttime = 0.04 sec\n[ Info: VUMPS 47:\tobj = -8.862397077973e-01\terr = 1.1022783530e-04\ttime = 0.07 sec\n[ Info: VUMPS 48:\tobj = -8.862397240917e-01\terr = 9.2219279764e-05\ttime = 0.04 sec\n[ Info: VUMPS 49:\tobj = -8.862397352818e-01\terr = 7.1892346813e-05\ttime = 0.07 sec\n[ Info: VUMPS 50:\tobj = -8.862397433166e-01\terr = 6.5073723507e-05\ttime = 0.04 sec\n[ Info: VUMPS 51:\tobj = -8.862397493970e-01\terr = 5.5282518065e-05\ttime = 0.08 sec\n[ Info: VUMPS 52:\tobj = -8.862397542161e-01\terr = 5.1456531474e-05\ttime = 0.04 sec\n[ Info: VUMPS 53:\tobj = -8.862397581953e-01\terr = 4.6714202684e-05\ttime = 0.08 sec\n[ Info: VUMPS 54:\tobj = -8.862397615871e-01\terr = 4.3942466103e-05\ttime = 0.04 sec\n[ Info: VUMPS 55:\tobj = -8.862397645493e-01\terr = 4.1177713870e-05\ttime = 0.07 sec\n[ Info: VUMPS 56:\tobj = -8.862397671820e-01\terr = 3.9114982243e-05\ttime = 0.04 sec\n[ Info: VUMPS 57:\tobj = -8.862397695517e-01\terr = 3.7186097920e-05\ttime = 0.07 sec\n[ Info: VUMPS 58:\tobj = -8.862397717040e-01\terr = 3.5553409941e-05\ttime = 0.04 sec\n[ Info: VUMPS 59:\tobj = -8.862397736718e-01\terr = 3.4038601553e-05\ttime = 0.08 sec\n[ Info: VUMPS 60:\tobj = -8.862397754798e-01\terr = 3.2679861075e-05\ttime = 0.04 sec\n[ Info: VUMPS 61:\tobj = -8.862397771471e-01\terr = 3.1412139117e-05\ttime = 0.07 sec\n[ Info: VUMPS 62:\tobj = -8.862397786894e-01\terr = 3.0244528404e-05\ttime = 0.04 sec\n[ Info: VUMPS 63:\tobj = -8.862397801195e-01\terr = 2.9148581648e-05\ttime = 0.07 sec\n[ Info: VUMPS 64:\tobj = -8.862397814483e-01\terr = 2.8125831750e-05\ttime = 0.04 sec\n[ Info: VUMPS 65:\tobj = -8.862397826855e-01\terr = 2.7161607890e-05\ttime = 0.07 sec\n[ Info: VUMPS 66:\tobj = -8.862397838391e-01\terr = 2.6254981486e-05\ttime = 0.04 sec\n[ Info: VUMPS 67:\tobj = -8.862397849165e-01\terr = 2.5397377333e-05\ttime = 0.07 sec\n[ Info: VUMPS 68:\tobj = -8.862397859242e-01\terr = 2.4587152172e-05\ttime = 0.04 sec\n[ Info: VUMPS 69:\tobj = -8.862397868680e-01\terr = 2.3818718802e-05\ttime = 0.07 sec\n[ Info: VUMPS 70:\tobj = -8.862397877531e-01\terr = 2.3090202212e-05\ttime = 0.04 sec\n[ Info: VUMPS 71:\tobj = -8.862397885843e-01\terr = 2.2397708419e-05\ttime = 0.07 sec\n[ Info: VUMPS 72:\tobj = -8.862397893656e-01\terr = 2.1739356071e-05\ttime = 0.04 sec\n[ Info: VUMPS 73:\tobj = -8.862397901011e-01\terr = 2.1112310644e-05\ttime = 0.07 sec\n[ Info: VUMPS 74:\tobj = -8.862397907941e-01\terr = 2.0514795921e-05\ttime = 0.04 sec\n[ Info: VUMPS 75:\tobj = -8.862397914478e-01\terr = 1.9944644746e-05\ttime = 0.07 sec\n[ Info: VUMPS 76:\tobj = -8.862397920651e-01\terr = 1.9400238943e-05\ttime = 0.04 sec\n[ Info: VUMPS 77:\tobj = -8.862397926487e-01\terr = 1.8879869617e-05\ttime = 0.07 sec\n[ Info: VUMPS 78:\tobj = -8.862397932009e-01\terr = 1.8382107216e-05\ttime = 0.04 sec\n[ Info: VUMPS 79:\tobj = -8.862397937239e-01\terr = 1.7905544693e-05\ttime = 0.07 sec\n[ Info: VUMPS 80:\tobj = -8.862397942198e-01\terr = 1.7448935744e-05\ttime = 0.04 sec\n[ Info: VUMPS 81:\tobj = -8.862397946902e-01\terr = 1.7011113669e-05\ttime = 0.07 sec\n[ Info: VUMPS 82:\tobj = -8.862397951371e-01\terr = 1.6590972981e-05\ttime = 0.04 sec\n[ Info: VUMPS 83:\tobj = -8.862397955618e-01\terr = 1.6187537766e-05\ttime = 0.07 sec\n[ Info: VUMPS 84:\tobj = -8.862397959658e-01\terr = 1.5799851792e-05\ttime = 0.04 sec\n[ Info: VUMPS 85:\tobj = -8.862397963505e-01\terr = 1.5427072391e-05\ttime = 0.07 sec\n[ Info: VUMPS 86:\tobj = -8.862397967170e-01\terr = 1.5068369727e-05\ttime = 0.06 sec\n[ Info: VUMPS 87:\tobj = -8.862397970664e-01\terr = 1.4723011390e-05\ttime = 0.09 sec\n[ Info: VUMPS 88:\tobj = -8.862397973998e-01\terr = 1.4390277758e-05\ttime = 0.04 sec\n[ Info: VUMPS 89:\tobj = -8.862397977181e-01\terr = 1.4069534998e-05\ttime = 0.07 sec\n[ Info: VUMPS 90:\tobj = -8.862397980223e-01\terr = 1.3760148626e-05\ttime = 0.04 sec\n[ Info: VUMPS 91:\tobj = -8.862397983131e-01\terr = 1.3461564491e-05\ttime = 0.07 sec\n[ Info: VUMPS 92:\tobj = -8.862397985912e-01\terr = 1.3173227645e-05\ttime = 0.04 sec\n[ Info: VUMPS 93:\tobj = -8.862397988575e-01\terr = 1.2894656269e-05\ttime = 0.07 sec\n[ Info: VUMPS 94:\tobj = -8.862397991125e-01\terr = 1.2625358983e-05\ttime = 0.04 sec\n[ Info: VUMPS 95:\tobj = -8.862397993569e-01\terr = 1.2364911249e-05\ttime = 0.07 sec\n[ Info: VUMPS 96:\tobj = -8.862397995913e-01\terr = 1.2112879975e-05\ttime = 0.04 sec\n[ Info: VUMPS 97:\tobj = -8.862397998161e-01\terr = 1.1868886466e-05\ttime = 0.07 sec\n[ Info: VUMPS 98:\tobj = -8.862398000318e-01\terr = 1.1632550359e-05\ttime = 0.04 sec\n[ Info: VUMPS 99:\tobj = -8.862398002390e-01\terr = 1.1403537234e-05\ttime = 0.07 sec\n┌ Warning: VUMPS cancel 100:\tobj = -8.862398004381e-01\terr = 1.1181508752e-05\ttime = 5.61 sec\n└ @ MPSKit ~/Projects/MPSKit.jl/src/algorithms/groundstate/vumps.jl:67\n","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"We get convergence, but it takes an enormous amount of iterations. The reason behind this becomes more obvious at higher bond dimensions:","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"groundstate, cache, delta = find_groundstate(state, H2,\n IDMRG2(; trscheme=truncdim(50), maxiter=20,\n tol=1e-12))\nentanglementplot(groundstate)","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"We see that some eigenvalues clearly belong to a group, and are almost degenerate. This implies 2 things:","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"there is superfluous information, if those eigenvalues are the same anyway\npoor convergence if we cut off within such a subspace","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"It are precisely those problems that we can solve by using symmetries.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/#Symmetries","page":"The XXZ model","title":"Symmetries","text":"","category":"section"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"The XXZ Heisenberg hamiltonian is SU(2) symmetric and we can exploit this to greatly speed up the simulation.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"It is cumbersome to construct symmetric hamiltonians, but luckily su(2) symmetric XXZ is already implemented:","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"H2 = heisenberg_XXX(ComplexF64, SU2Irrep, InfiniteChain(2); spin=1 // 2);","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"Our initial state should also be SU(2) symmetric. It now becomes apparent why we have to use a two-site periodic state. The physical space carries a half-integer charge and the first tensor maps the first virtual_space ⊗ the physical_space to the second virtual_space. Half-integer virtual charges will therefore map only to integer charges, and vice versa. The staggering thus happens on the virtual level.","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"An alternative constructor for the initial state is","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"P = Rep[SU₂](1 // 2 => 1)\nV1 = Rep[SU₂](1 // 2 => 10, 3 // 2 => 5, 5 // 2 => 2)\nV2 = Rep[SU₂](0 => 15, 1 => 10, 2 => 5)\nstate = InfiniteMPS([P, P], [V1, V2]);","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"┌ Warning: Constructing an MPS from tensors that are not full rank\n└ @ MPSKit ~/Projects/MPSKit.jl/src/states/infinitemps.jl:149\n","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"Even though the bond dimension is higher than in the example without symmetry, convergence is reached much faster:","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"println(dim(V1))\nprintln(dim(V2))\ngroundstate, cache, delta = find_groundstate(state, H2,\n VUMPS(; maxiter=400, tol=1e-12));","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"52\n70\n[ Info: VUMPS init:\tobj = +4.207308597914e-02\terr = 3.8417e-01\n[ Info: VUMPS 1:\tobj = -8.770246689397e-01\terr = 8.9387480236e-02\ttime = 0.09 sec\n[ Info: VUMPS 2:\tobj = -8.854224662459e-01\terr = 1.2035494481e-02\ttime = 0.08 sec\n[ Info: VUMPS 3:\tobj = -8.860742922774e-01\terr = 4.4294789545e-03\ttime = 0.08 sec\n[ Info: VUMPS 4:\tobj = -8.862108801823e-01\terr = 1.9061849051e-03\ttime = 0.09 sec\n[ Info: VUMPS 5:\tobj = -8.862567332668e-01\terr = 1.1244944387e-03\ttime = 0.11 sec\n[ Info: VUMPS 6:\tobj = -8.862739286226e-01\terr = 8.4129140580e-04\ttime = 0.12 sec\n[ Info: VUMPS 7:\tobj = -8.862812942419e-01\terr = 6.3937860306e-04\ttime = 0.23 sec\n[ Info: VUMPS 8:\tobj = -8.862846581258e-01\terr = 5.2763554024e-04\ttime = 0.12 sec\n[ Info: VUMPS 9:\tobj = -8.862862830189e-01\terr = 4.2102561366e-04\ttime = 0.12 sec\n[ Info: VUMPS 10:\tobj = -8.862870857559e-01\terr = 3.3035934875e-04\ttime = 0.13 sec\n[ Info: VUMPS 11:\tobj = -8.862874886043e-01\terr = 2.5432646892e-04\ttime = 0.13 sec\n[ Info: VUMPS 12:\tobj = -8.862876919660e-01\terr = 1.9202079806e-04\ttime = 0.21 sec\n[ Info: VUMPS 13:\tobj = -8.862877946054e-01\terr = 1.4279990039e-04\ttime = 0.19 sec\n[ Info: VUMPS 14:\tobj = -8.862878462682e-01\terr = 1.0491846055e-04\ttime = 0.14 sec\n[ Info: VUMPS 15:\tobj = -8.862878721892e-01\terr = 7.6390575113e-05\ttime = 0.20 sec\n[ Info: VUMPS 16:\tobj = -8.862878851596e-01\terr = 5.5250778998e-05\ttime = 0.14 sec\n[ Info: VUMPS 17:\tobj = -8.862878916381e-01\terr = 3.9767417638e-05\ttime = 0.15 sec\n[ Info: VUMPS 18:\tobj = -8.862878948705e-01\terr = 2.8521655196e-05\ttime = 0.20 sec\n[ Info: VUMPS 19:\tobj = -8.862878964826e-01\terr = 2.0403457752e-05\ttime = 0.15 sec\n[ Info: VUMPS 20:\tobj = -8.862878972865e-01\terr = 1.4568719674e-05\ttime = 0.15 sec\n[ Info: VUMPS 21:\tobj = -8.862878976876e-01\terr = 1.0388173825e-05\ttime = 0.19 sec\n[ Info: VUMPS 22:\tobj = -8.862878978877e-01\terr = 7.3993990730e-06\ttime = 0.15 sec\n[ Info: VUMPS 23:\tobj = -8.862878979876e-01\terr = 5.2663271673e-06\ttime = 0.20 sec\n[ Info: VUMPS 24:\tobj = -8.862878980375e-01\terr = 3.7457858907e-06\ttime = 0.15 sec\n[ Info: VUMPS 25:\tobj = -8.862878980625e-01\terr = 2.6630244108e-06\ttime = 0.19 sec\n[ Info: VUMPS 26:\tobj = -8.862878980749e-01\terr = 1.8924316652e-06\ttime = 0.15 sec\n[ Info: VUMPS 27:\tobj = -8.862878980812e-01\terr = 1.3443459346e-06\ttime = 0.19 sec\n[ Info: VUMPS 28:\tobj = -8.862878980843e-01\terr = 9.5471634701e-07\ttime = 0.15 sec\n[ Info: VUMPS 29:\tobj = -8.862878980859e-01\terr = 6.7781844497e-07\ttime = 0.19 sec\n[ Info: VUMPS 30:\tobj = -8.862878980866e-01\terr = 4.8112158398e-07\ttime = 0.15 sec\n[ Info: VUMPS 31:\tobj = -8.862878980870e-01\terr = 3.4143706519e-07\ttime = 0.19 sec\n[ Info: VUMPS 32:\tobj = -8.862878980872e-01\terr = 2.4224840418e-07\ttime = 0.15 sec\n[ Info: VUMPS 33:\tobj = -8.862878980873e-01\terr = 1.7186139672e-07\ttime = 0.18 sec\n[ Info: VUMPS 34:\tobj = -8.862878980874e-01\terr = 1.2190374782e-07\ttime = 0.14 sec\n[ Info: VUMPS 35:\tobj = -8.862878980874e-01\terr = 8.6464933933e-08\ttime = 0.17 sec\n[ Info: VUMPS 36:\tobj = -8.862878980874e-01\terr = 6.1286598356e-08\ttime = 0.12 sec\n[ Info: VUMPS 37:\tobj = -8.862878980874e-01\terr = 4.3458741190e-08\ttime = 0.17 sec\n[ Info: VUMPS 38:\tobj = -8.862878980874e-01\terr = 3.0804670453e-08\ttime = 0.12 sec\n[ Info: VUMPS 39:\tobj = -8.862878980874e-01\terr = 2.1850363058e-08\ttime = 0.16 sec\n[ Info: VUMPS 40:\tobj = -8.862878980874e-01\terr = 1.5482006174e-08\ttime = 0.11 sec\n[ Info: VUMPS 41:\tobj = -8.862878980874e-01\terr = 1.0955627446e-08\ttime = 0.11 sec\n[ Info: VUMPS 42:\tobj = -8.862878980874e-01\terr = 7.7609982125e-09\ttime = 0.16 sec\n[ Info: VUMPS 43:\tobj = -8.862878980874e-01\terr = 5.4975161355e-09\ttime = 0.10 sec\n[ Info: VUMPS 44:\tobj = -8.862878980874e-01\terr = 3.8884417026e-09\ttime = 0.14 sec\n[ Info: VUMPS 45:\tobj = -8.862878980874e-01\terr = 2.7526126601e-09\ttime = 0.10 sec\n[ Info: VUMPS 46:\tobj = -8.862878980874e-01\terr = 1.9592691434e-09\ttime = 0.10 sec\n[ Info: VUMPS 47:\tobj = -8.862878980874e-01\terr = 1.3970406578e-09\ttime = 0.14 sec\n[ Info: VUMPS 48:\tobj = -8.862878980874e-01\terr = 9.8889708684e-10\ttime = 0.09 sec\n[ Info: VUMPS 49:\tobj = -8.862878980874e-01\terr = 6.9459808321e-10\ttime = 0.09 sec\n[ Info: VUMPS 50:\tobj = -8.862878980874e-01\terr = 5.0367864464e-10\ttime = 0.14 sec\n[ Info: VUMPS 51:\tobj = -8.862878980874e-01\terr = 3.6463958695e-10\ttime = 0.09 sec\n[ Info: VUMPS 52:\tobj = -8.862878980874e-01\terr = 2.6828514578e-10\ttime = 0.08 sec\n[ Info: VUMPS 53:\tobj = -8.862878980874e-01\terr = 1.9666569024e-10\ttime = 0.12 sec\n[ Info: VUMPS 54:\tobj = -8.862878980874e-01\terr = 1.7318181994e-10\ttime = 0.07 sec\n[ Info: VUMPS 55:\tobj = -8.862878980874e-01\terr = 1.1881164874e-10\ttime = 0.07 sec\n[ Info: VUMPS 56:\tobj = -8.862878980874e-01\terr = 1.5646264432e-10\ttime = 0.07 sec\n[ Info: VUMPS 57:\tobj = -8.862878980874e-01\terr = 9.6907766503e-11\ttime = 0.10 sec\n[ Info: VUMPS 58:\tobj = -8.862878980874e-01\terr = 7.7365993612e-11\ttime = 0.06 sec\n[ Info: VUMPS 59:\tobj = -8.862878980874e-01\terr = 1.2792482228e-10\ttime = 0.05 sec\n[ Info: VUMPS 60:\tobj = -8.862878980874e-01\terr = 4.5325752050e-11\ttime = 0.05 sec\n[ Info: VUMPS 61:\tobj = -8.862878980874e-01\terr = 4.5779636260e-11\ttime = 0.09 sec\n[ Info: VUMPS 62:\tobj = -8.862878980874e-01\terr = 4.5269457493e-11\ttime = 0.04 sec\n[ Info: VUMPS 63:\tobj = -8.862878980874e-01\terr = 7.0408420460e-11\ttime = 0.06 sec\n[ Info: VUMPS 64:\tobj = -8.862878980874e-01\terr = 1.0027819938e-10\ttime = 0.07 sec\n[ Info: VUMPS 65:\tobj = -8.862878980874e-01\terr = 1.8123837296e-10\ttime = 0.05 sec\n[ Info: VUMPS 66:\tobj = -8.862878980874e-01\terr = 1.1028483287e-10\ttime = 0.11 sec\n[ Info: VUMPS 67:\tobj = -8.862878980874e-01\terr = 1.9542191849e-10\ttime = 0.07 sec\n[ Info: VUMPS 68:\tobj = -8.862878980874e-01\terr = 1.3266968631e-10\ttime = 0.09 sec\n[ Info: VUMPS 69:\tobj = -8.862878980874e-01\terr = 1.5648232544e-10\ttime = 0.10 sec\n[ Info: VUMPS 70:\tobj = -8.862878980874e-01\terr = 1.6333828323e-10\ttime = 0.07 sec\n[ Info: VUMPS 71:\tobj = -8.862878980874e-01\terr = 1.3636380966e-10\ttime = 0.07 sec\n[ Info: VUMPS 72:\tobj = -8.862878980874e-01\terr = 1.8799364680e-10\ttime = 0.07 sec\n[ Info: VUMPS 73:\tobj = -8.862878980874e-01\terr = 1.4472792724e-10\ttime = 0.11 sec\n[ Info: VUMPS 74:\tobj = -8.862878980874e-01\terr = 1.1889880597e-10\ttime = 0.08 sec\n[ Info: VUMPS 75:\tobj = -8.862878980874e-01\terr = 7.8177559574e-11\ttime = 0.07 sec\n[ Info: VUMPS 76:\tobj = -8.862878980874e-01\terr = 1.2096744970e-10\ttime = 0.09 sec\n[ Info: VUMPS 77:\tobj = -8.862878980874e-01\terr = 4.4508066303e-11\ttime = 0.05 sec\n[ Info: VUMPS 78:\tobj = -8.862878980874e-01\terr = 4.5031266470e-11\ttime = 0.04 sec\n[ Info: VUMPS 79:\tobj = -8.862878980874e-01\terr = 4.5991825775e-11\ttime = 0.04 sec\n[ Info: VUMPS 80:\tobj = -8.862878980874e-01\terr = 4.4021673623e-11\ttime = 0.04 sec\n[ Info: VUMPS 81:\tobj = -8.862878980874e-01\terr = 4.7747796467e-11\ttime = 0.09 sec\n[ Info: VUMPS 82:\tobj = -8.862878980874e-01\terr = 1.1679442420e-10\ttime = 0.06 sec\n[ Info: VUMPS 83:\tobj = -8.862878980874e-01\terr = 7.6452116242e-11\ttime = 0.05 sec\n[ Info: VUMPS 84:\tobj = -8.862878980874e-01\terr = 7.6436900611e-11\ttime = 0.04 sec\n[ Info: VUMPS 85:\tobj = -8.862878980874e-01\terr = 7.7080848736e-11\ttime = 0.04 sec\n[ Info: VUMPS 86:\tobj = -8.862878980874e-01\terr = 1.3910926209e-10\ttime = 0.09 sec\n[ Info: VUMPS 87:\tobj = -8.862878980874e-01\terr = 8.5011084551e-11\ttime = 0.05 sec\n[ Info: VUMPS 88:\tobj = -8.862878980874e-01\terr = 1.2377629438e-10\ttime = 0.06 sec\n[ Info: VUMPS 89:\tobj = -8.862878980874e-01\terr = 1.1509132562e-10\ttime = 0.05 sec\n[ Info: VUMPS 90:\tobj = -8.862878980874e-01\terr = 3.6280763476e-11\ttime = 0.10 sec\n[ Info: VUMPS 91:\tobj = -8.862878980874e-01\terr = 3.6759581497e-11\ttime = 0.04 sec\n[ Info: VUMPS 92:\tobj = -8.862878980874e-01\terr = 4.1936246167e-11\ttime = 0.04 sec\n[ Info: VUMPS 93:\tobj = -8.862878980874e-01\terr = 3.6586232570e-11\ttime = 0.04 sec\n[ Info: VUMPS 94:\tobj = -8.862878980874e-01\terr = 3.6323263078e-11\ttime = 0.04 sec\n[ Info: VUMPS 95:\tobj = -8.862878980874e-01\terr = 3.9734901103e-11\ttime = 0.04 sec\n[ Info: VUMPS 96:\tobj = -8.862878980874e-01\terr = 7.4695673156e-11\ttime = 0.10 sec\n[ Info: VUMPS 97:\tobj = -8.862878980874e-01\terr = 7.4601743849e-11\ttime = 0.04 sec\n[ Info: VUMPS 98:\tobj = -8.862878980874e-01\terr = 7.3737980701e-11\ttime = 0.04 sec\n[ Info: VUMPS 99:\tobj = -8.862878980874e-01\terr = 7.3617435190e-11\ttime = 0.04 sec\n[ Info: VUMPS 100:\tobj = -8.862878980874e-01\terr = 1.4117716258e-10\ttime = 0.09 sec\n[ Info: VUMPS 101:\tobj = -8.862878980874e-01\terr = 1.0140172092e-10\ttime = 0.07 sec\n[ Info: VUMPS 102:\tobj = -8.862878980874e-01\terr = 9.0099910339e-11\ttime = 0.05 sec\n[ Info: VUMPS 103:\tobj = -8.862878980874e-01\terr = 9.5223763299e-11\ttime = 0.05 sec\n[ Info: VUMPS 104:\tobj = -8.862878980874e-01\terr = 9.8372998640e-11\ttime = 0.05 sec\n[ Info: VUMPS 105:\tobj = -8.862878980874e-01\terr = 7.9944348222e-11\ttime = 0.09 sec\n[ Info: VUMPS 106:\tobj = -8.862878980874e-01\terr = 1.1796835106e-10\ttime = 0.05 sec\n[ Info: VUMPS 107:\tobj = -8.862878980874e-01\terr = 2.5584999237e-11\ttime = 0.05 sec\n[ Info: VUMPS 108:\tobj = -8.862878980874e-01\terr = 2.5755393013e-11\ttime = 0.04 sec\n[ Info: VUMPS 109:\tobj = -8.862878980874e-01\terr = 2.5654408608e-11\ttime = 0.09 sec\n[ Info: VUMPS 110:\tobj = -8.862878980874e-01\terr = 2.8969243219e-11\ttime = 0.04 sec\n[ Info: VUMPS 111:\tobj = -8.862878980874e-01\terr = 2.5648857275e-11\ttime = 0.04 sec\n[ Info: VUMPS 112:\tobj = -8.862878980874e-01\terr = 2.6085432445e-11\ttime = 0.04 sec\n[ Info: VUMPS 113:\tobj = -8.862878980874e-01\terr = 2.5711795068e-11\ttime = 0.04 sec\n[ Info: VUMPS 114:\tobj = -8.862878980874e-01\terr = 3.1841855751e-11\ttime = 0.09 sec\n[ Info: VUMPS 115:\tobj = -8.862878980874e-01\terr = 2.6088486457e-11\ttime = 0.04 sec\n[ Info: VUMPS 116:\tobj = -8.862878980874e-01\terr = 2.5759528213e-11\ttime = 0.04 sec\n[ Info: VUMPS 117:\tobj = -8.862878980874e-01\terr = 2.5550720189e-11\ttime = 0.04 sec\n[ Info: VUMPS 118:\tobj = -8.862878980874e-01\terr = 2.5802019915e-11\ttime = 0.04 sec\n[ Info: VUMPS 119:\tobj = -8.862878980874e-01\terr = 2.5672788136e-11\ttime = 0.04 sec\n[ Info: VUMPS 120:\tobj = -8.862878980874e-01\terr = 2.6669410249e-11\ttime = 0.08 sec\n[ Info: VUMPS 121:\tobj = -8.862878980874e-01\terr = 2.5760097393e-11\ttime = 0.04 sec\n[ Info: VUMPS 122:\tobj = -8.862878980874e-01\terr = 3.1549960796e-11\ttime = 0.04 sec\n[ Info: VUMPS 123:\tobj = -8.862878980874e-01\terr = 3.1008997814e-11\ttime = 0.04 sec\n[ Info: VUMPS 124:\tobj = -8.862878980874e-01\terr = 3.1957370730e-11\ttime = 0.08 sec\n[ Info: VUMPS 125:\tobj = -8.862878980874e-01\terr = 1.0149285465e-10\ttime = 0.07 sec\n[ Info: VUMPS 126:\tobj = -8.862878980874e-01\terr = 1.0055628069e-10\ttime = 0.06 sec\n[ Info: VUMPS 127:\tobj = -8.862878980874e-01\terr = 2.5279001435e-10\ttime = 0.05 sec\n[ Info: VUMPS 128:\tobj = -8.862878980874e-01\terr = 1.0462278313e-10\ttime = 0.13 sec\n[ Info: VUMPS 129:\tobj = -8.862878980874e-01\terr = 6.5624092038e-11\ttime = 0.05 sec\n[ Info: VUMPS 130:\tobj = -8.862878980874e-01\terr = 1.3309340506e-10\ttime = 0.06 sec\n[ Info: VUMPS 131:\tobj = -8.862878980874e-01\terr = 7.2784603802e-11\ttime = 0.05 sec\n[ Info: VUMPS 132:\tobj = -8.862878980874e-01\terr = 7.2178376983e-11\ttime = 0.09 sec\n[ Info: VUMPS 133:\tobj = -8.862878980874e-01\terr = 9.2518414406e-11\ttime = 0.05 sec\n[ Info: VUMPS 134:\tobj = -8.862878980874e-01\terr = 1.4506025355e-10\ttime = 0.05 sec\n[ Info: VUMPS 135:\tobj = -8.862878980874e-01\terr = 3.7219458775e-10\ttime = 0.06 sec\n[ Info: VUMPS 136:\tobj = -8.862878980874e-01\terr = 1.3286196929e-10\ttime = 0.14 sec\n[ Info: VUMPS 137:\tobj = -8.862878980874e-01\terr = 7.4787469080e-11\ttime = 0.06 sec\n[ Info: VUMPS 138:\tobj = -8.862878980874e-01\terr = 1.4426681861e-10\ttime = 0.05 sec\n[ Info: VUMPS 139:\tobj = -8.862878980874e-01\terr = 6.7558225447e-11\ttime = 0.05 sec\n[ Info: VUMPS 140:\tobj = -8.862878980874e-01\terr = 7.3084667829e-11\ttime = 0.04 sec\n[ Info: VUMPS 141:\tobj = -8.862878980874e-01\terr = 8.0793055079e-11\ttime = 0.11 sec\n[ Info: VUMPS 142:\tobj = -8.862878980874e-01\terr = 8.0831600216e-11\ttime = 0.04 sec\n[ Info: VUMPS 143:\tobj = -8.862878980874e-01\terr = 1.7136182241e-10\ttime = 0.05 sec\n[ Info: VUMPS 144:\tobj = -8.862878980874e-01\terr = 9.1343736608e-11\ttime = 0.06 sec\n[ Info: VUMPS 145:\tobj = -8.862878980874e-01\terr = 8.0089047570e-11\ttime = 0.09 sec\n[ Info: VUMPS 146:\tobj = -8.862878980874e-01\terr = 1.2911200272e-10\ttime = 0.05 sec\n[ Info: VUMPS 147:\tobj = -8.862878980874e-01\terr = 3.2779317163e-11\ttime = 0.05 sec\n[ Info: VUMPS 148:\tobj = -8.862878980874e-01\terr = 3.1270641488e-11\ttime = 0.04 sec\n[ Info: VUMPS 149:\tobj = -8.862878980874e-01\terr = 3.1527595715e-11\ttime = 0.04 sec\n[ Info: VUMPS 150:\tobj = -8.862878980874e-01\terr = 3.1023821946e-11\ttime = 0.08 sec\n[ Info: VUMPS 151:\tobj = -8.862878980874e-01\terr = 3.0958513933e-11\ttime = 0.04 sec\n[ Info: VUMPS 152:\tobj = -8.862878980874e-01\terr = 3.1072862070e-11\ttime = 0.04 sec\n[ Info: VUMPS 153:\tobj = -8.862878980874e-01\terr = 3.5383015513e-11\ttime = 0.04 sec\n[ Info: VUMPS 154:\tobj = -8.862878980874e-01\terr = 9.8524530302e-11\ttime = 0.07 sec\n[ Info: VUMPS 155:\tobj = -8.862878980874e-01\terr = 2.5977122435e-10\ttime = 0.10 sec\n[ Info: VUMPS 156:\tobj = -8.862878980874e-01\terr = 1.0280150178e-10\ttime = 0.08 sec\n[ Info: VUMPS 157:\tobj = -8.862878980874e-01\terr = 8.5396875631e-11\ttime = 0.06 sec\n[ Info: VUMPS 158:\tobj = -8.862878980874e-01\terr = 1.4028825209e-10\ttime = 0.05 sec\n[ Info: VUMPS 159:\tobj = -8.862878980874e-01\terr = 6.5407958603e-11\ttime = 0.09 sec\n[ Info: VUMPS 160:\tobj = -8.862878980874e-01\terr = 8.6364408976e-11\ttime = 0.05 sec\n[ Info: VUMPS 161:\tobj = -8.862878980874e-01\terr = 1.2150351995e-10\ttime = 0.05 sec\n[ Info: VUMPS 162:\tobj = -8.862878980874e-01\terr = 2.4842761534e-11\ttime = 0.05 sec\n[ Info: VUMPS 163:\tobj = -8.862878980874e-01\terr = 2.5748890253e-11\ttime = 0.09 sec\n[ Info: VUMPS 164:\tobj = -8.862878980874e-01\terr = 3.7022391153e-11\ttime = 0.04 sec\n[ Info: VUMPS 165:\tobj = -8.862878980874e-01\terr = 2.5404069966e-11\ttime = 0.04 sec\n[ Info: VUMPS 166:\tobj = -8.862878980874e-01\terr = 2.4702363948e-11\ttime = 0.04 sec\n[ Info: VUMPS 167:\tobj = -8.862878980874e-01\terr = 2.4860774600e-11\ttime = 0.04 sec\n[ Info: VUMPS 168:\tobj = -8.862878980874e-01\terr = 3.2324495346e-11\ttime = 0.04 sec\n[ Info: VUMPS 169:\tobj = -8.862878980874e-01\terr = 2.4719353428e-11\ttime = 0.09 sec\n[ Info: VUMPS 170:\tobj = -8.862878980874e-01\terr = 2.5745806649e-11\ttime = 0.04 sec\n[ Info: VUMPS 171:\tobj = -8.862878980874e-01\terr = 3.2930196760e-11\ttime = 0.04 sec\n[ Info: VUMPS 172:\tobj = -8.862878980874e-01\terr = 2.5085034713e-11\ttime = 0.04 sec\n[ Info: VUMPS 173:\tobj = -8.862878980874e-01\terr = 2.5520036513e-11\ttime = 0.04 sec\n[ Info: VUMPS 174:\tobj = -8.862878980874e-01\terr = 2.5135503465e-11\ttime = 0.08 sec\n[ Info: VUMPS 175:\tobj = -8.862878980874e-01\terr = 2.8503905090e-11\ttime = 0.04 sec\n[ Info: VUMPS 176:\tobj = -8.862878980874e-01\terr = 2.5538540554e-11\ttime = 0.04 sec\n[ Info: VUMPS 177:\tobj = -8.862878980874e-01\terr = 2.4691024801e-11\ttime = 0.04 sec\n[ Info: VUMPS 178:\tobj = -8.862878980874e-01\terr = 2.5248726569e-11\ttime = 0.08 sec\n[ Info: VUMPS 179:\tobj = -8.862878980874e-01\terr = 2.4760967560e-11\ttime = 0.04 sec\n[ Info: VUMPS 180:\tobj = -8.862878980874e-01\terr = 2.4969607389e-11\ttime = 0.04 sec\n[ Info: VUMPS 181:\tobj = -8.862878980874e-01\terr = 2.5195199024e-11\ttime = 0.04 sec\n[ Info: VUMPS 182:\tobj = -8.862878980874e-01\terr = 2.4838502094e-11\ttime = 0.04 sec\n[ Info: VUMPS 183:\tobj = -8.862878980874e-01\terr = 2.6113063075e-11\ttime = 0.08 sec\n[ Info: VUMPS 184:\tobj = -8.862878980874e-01\terr = 2.9908520201e-11\ttime = 0.04 sec\n[ Info: VUMPS 185:\tobj = -8.862878980874e-01\terr = 1.0991210900e-09\ttime = 0.05 sec\n[ Info: VUMPS 186:\tobj = -8.862878980874e-01\terr = 1.3487615412e-10\ttime = 0.10 sec\n[ Info: VUMPS 187:\tobj = -8.862878980874e-01\terr = 9.3069733146e-11\ttime = 0.11 sec\n[ Info: VUMPS 188:\tobj = -8.862878980874e-01\terr = 5.9219170076e-11\ttime = 0.05 sec\n[ Info: VUMPS 189:\tobj = -8.862878980874e-01\terr = 1.2416000800e-10\ttime = 0.05 sec\n[ Info: VUMPS 190:\tobj = -8.862878980874e-01\terr = 1.3881531446e-10\ttime = 0.07 sec\n[ Info: VUMPS 191:\tobj = -8.862878980874e-01\terr = 1.2937777179e-10\ttime = 0.12 sec\n[ Info: VUMPS 192:\tobj = -8.862878980874e-01\terr = 1.7091864452e-10\ttime = 0.07 sec\n[ Info: VUMPS 193:\tobj = -8.862878980874e-01\terr = 1.3809278028e-10\ttime = 0.07 sec\n[ Info: VUMPS 194:\tobj = -8.862878980874e-01\terr = 1.3718743400e-10\ttime = 0.07 sec\n[ Info: VUMPS 195:\tobj = -8.862878980874e-01\terr = 1.2999331067e-10\ttime = 0.12 sec\n[ Info: VUMPS 196:\tobj = -8.862878980874e-01\terr = 1.0286658958e-10\ttime = 0.06 sec\n[ Info: VUMPS 197:\tobj = -8.862878980874e-01\terr = 8.5927628448e-11\ttime = 0.06 sec\n[ Info: VUMPS 198:\tobj = -8.862878980874e-01\terr = 9.8964650709e-11\ttime = 0.11 sec\n[ Info: VUMPS 199:\tobj = -8.862878980874e-01\terr = 1.1996588094e-10\ttime = 0.05 sec\n[ Info: VUMPS 200:\tobj = -8.862878980874e-01\terr = 5.6341554935e-11\ttime = 0.04 sec\n[ Info: VUMPS 201:\tobj = -8.862878980874e-01\terr = 7.9000713006e-10\ttime = 0.06 sec\n[ Info: VUMPS 202:\tobj = -8.862878980874e-01\terr = 1.5435808912e-10\ttime = 0.14 sec\n[ Info: VUMPS 203:\tobj = -8.862878980874e-01\terr = 9.5848753583e-11\ttime = 0.08 sec\n[ Info: VUMPS 204:\tobj = -8.862878980874e-01\terr = 1.0637816317e-10\ttime = 0.07 sec\n[ Info: VUMPS 205:\tobj = -8.862878980874e-01\terr = 8.1143149644e-11\ttime = 0.06 sec\n[ Info: VUMPS 206:\tobj = -8.862878980874e-01\terr = 1.0842849551e-10\ttime = 0.09 sec\n[ Info: VUMPS 207:\tobj = -8.862878980874e-01\terr = 5.5594973835e-11\ttime = 0.05 sec\n[ Info: VUMPS 208:\tobj = -8.862878980874e-01\terr = 5.5599308569e-11\ttime = 0.04 sec\n[ Info: VUMPS 209:\tobj = -8.862878980874e-01\terr = 4.5664641092e-10\ttime = 0.05 sec\n[ Info: VUMPS 210:\tobj = -8.862878980874e-01\terr = 1.0815766206e-10\ttime = 0.13 sec\n[ Info: VUMPS 211:\tobj = -8.862878980874e-01\terr = 9.2896882921e-11\ttime = 0.07 sec\n[ Info: VUMPS 212:\tobj = -8.862878980874e-01\terr = 8.3630387677e-11\ttime = 0.05 sec\n[ Info: VUMPS 213:\tobj = -8.862878980874e-01\terr = 8.9177443058e-11\ttime = 0.07 sec\n[ Info: VUMPS 214:\tobj = -8.862878980874e-01\terr = 8.4590201305e-11\ttime = 0.11 sec\n[ Info: VUMPS 215:\tobj = -8.862878980874e-01\terr = 1.2973719725e-10\ttime = 0.07 sec\n[ Info: VUMPS 216:\tobj = -8.862878980874e-01\terr = 8.7532935985e-11\ttime = 0.07 sec\n[ Info: VUMPS 217:\tobj = -8.862878980874e-01\terr = 1.0094432065e-10\ttime = 0.05 sec\n[ Info: VUMPS 218:\tobj = -8.862878980874e-01\terr = 7.2901490544e-11\ttime = 0.10 sec\n[ Info: VUMPS 219:\tobj = -8.862878980874e-01\terr = 7.3030080658e-11\ttime = 0.04 sec\n[ Info: VUMPS 220:\tobj = -8.862878980874e-01\terr = 7.2814253578e-11\ttime = 0.04 sec\n[ Info: VUMPS 221:\tobj = -8.862878980874e-01\terr = 7.2721737007e-11\ttime = 0.04 sec\n[ Info: VUMPS 222:\tobj = -8.862878980874e-01\terr = 7.2575908766e-11\ttime = 0.04 sec\n[ Info: VUMPS 223:\tobj = -8.862878980874e-01\terr = 1.0886060787e-10\ttime = 0.09 sec\n[ Info: VUMPS 224:\tobj = -8.862878980874e-01\terr = 9.8891539544e-11\ttime = 0.05 sec\n[ Info: VUMPS 225:\tobj = -8.862878980874e-01\terr = 1.0482184140e-10\ttime = 0.05 sec\n[ Info: VUMPS 226:\tobj = -8.862878980874e-01\terr = 1.9012146089e-11\ttime = 0.04 sec\n[ Info: VUMPS 227:\tobj = -8.862878980874e-01\terr = 1.9322391656e-11\ttime = 0.04 sec\n[ Info: VUMPS 228:\tobj = -8.862878980874e-01\terr = 3.0618708554e-11\ttime = 0.08 sec\n[ Info: VUMPS 229:\tobj = -8.862878980874e-01\terr = 7.3510645058e-11\ttime = 0.06 sec\n[ Info: VUMPS 230:\tobj = -8.862878980874e-01\terr = 3.8581370951e-10\ttime = 0.05 sec\n[ Info: VUMPS 231:\tobj = -8.862878980874e-01\terr = 1.3190179067e-10\ttime = 0.09 sec\n[ Info: VUMPS 232:\tobj = -8.862878980874e-01\terr = 9.8345519722e-11\ttime = 0.11 sec\n[ Info: VUMPS 233:\tobj = -8.862878980874e-01\terr = 9.8692106436e-11\ttime = 0.06 sec\n[ Info: VUMPS 234:\tobj = -8.862878980874e-01\terr = 5.0517584685e-11\ttime = 0.05 sec\n[ Info: VUMPS 235:\tobj = -8.862878980874e-01\terr = 5.2479684150e-11\ttime = 0.04 sec\n[ Info: VUMPS 236:\tobj = -8.862878980874e-01\terr = 1.0842073163e-10\ttime = 0.11 sec\n[ Info: VUMPS 237:\tobj = -8.862878980874e-01\terr = 9.0981410086e-11\ttime = 0.06 sec\n[ Info: VUMPS 238:\tobj = -8.862878980874e-01\terr = 1.2392458729e-10\ttime = 0.05 sec\n[ Info: VUMPS 239:\tobj = -8.862878980874e-01\terr = 1.4216588231e-10\ttime = 0.06 sec\n[ Info: VUMPS 240:\tobj = -8.862878980874e-01\terr = 1.0202004549e-10\ttime = 0.12 sec\n[ Info: VUMPS 241:\tobj = -8.862878980874e-01\terr = 9.2663307948e-11\ttime = 0.07 sec\n[ Info: VUMPS 242:\tobj = -8.862878980874e-01\terr = 7.1213927824e-11\ttime = 0.06 sec\n[ Info: VUMPS 243:\tobj = -8.862878980874e-01\terr = 7.0990626515e-11\ttime = 0.06 sec\n[ Info: VUMPS 244:\tobj = -8.862878980874e-01\terr = 7.1367091900e-11\ttime = 0.04 sec\n[ Info: VUMPS 245:\tobj = -8.862878980874e-01\terr = 1.8669503143e-10\ttime = 0.09 sec\n[ Info: VUMPS 246:\tobj = -8.862878980874e-01\terr = 1.5282765127e-10\ttime = 0.08 sec\n[ Info: VUMPS 247:\tobj = -8.862878980874e-01\terr = 9.6415117857e-11\ttime = 0.07 sec\n[ Info: VUMPS 248:\tobj = -8.862878980874e-01\terr = 1.4058659748e-10\ttime = 0.11 sec\n[ Info: VUMPS 249:\tobj = -8.862878980874e-01\terr = 9.7187257969e-11\ttime = 0.07 sec\n[ Info: VUMPS 250:\tobj = -8.862878980874e-01\terr = 9.7759239537e-11\ttime = 0.05 sec\n[ Info: VUMPS 251:\tobj = -8.862878980874e-01\terr = 7.9875821567e-11\ttime = 0.07 sec\n[ Info: VUMPS 252:\tobj = -8.862878980874e-01\terr = 8.0093896508e-11\ttime = 0.08 sec\n[ Info: VUMPS 253:\tobj = -8.862878980874e-01\terr = 8.0057483179e-11\ttime = 0.04 sec\n[ Info: VUMPS 254:\tobj = -8.862878980874e-01\terr = 8.0011136205e-11\ttime = 0.04 sec\n[ Info: VUMPS 255:\tobj = -8.862878980874e-01\terr = 1.7883745718e-10\ttime = 0.05 sec\n[ Info: VUMPS 256:\tobj = -8.862878980874e-01\terr = 2.8363520443e-10\ttime = 0.06 sec\n[ Info: VUMPS 257:\tobj = -8.862878980874e-01\terr = 1.4712790190e-10\ttime = 0.12 sec\n[ Info: VUMPS 258:\tobj = -8.862878980874e-01\terr = 8.0262189893e-11\ttime = 0.05 sec\n[ Info: VUMPS 259:\tobj = -8.862878980874e-01\terr = 1.3607892547e-10\ttime = 0.05 sec\n[ Info: VUMPS 260:\tobj = -8.862878980874e-01\terr = 3.5585465386e-11\ttime = 0.09 sec\n[ Info: VUMPS 261:\tobj = -8.862878980874e-01\terr = 3.5886789540e-11\ttime = 0.04 sec\n[ Info: VUMPS 262:\tobj = -8.862878980874e-01\terr = 3.5821881811e-11\ttime = 0.04 sec\n[ Info: VUMPS 263:\tobj = -8.862878980874e-01\terr = 3.5295520311e-11\ttime = 0.04 sec\n[ Info: VUMPS 264:\tobj = -8.862878980874e-01\terr = 3.5725163978e-11\ttime = 0.04 sec\n[ Info: VUMPS 265:\tobj = -8.862878980874e-01\terr = 3.5743028152e-11\ttime = 0.09 sec\n[ Info: VUMPS 266:\tobj = -8.862878980874e-01\terr = 3.5399343199e-11\ttime = 0.04 sec\n[ Info: VUMPS 267:\tobj = -8.862878980874e-01\terr = 3.5477332519e-11\ttime = 0.04 sec\n[ Info: VUMPS 268:\tobj = -8.862878980874e-01\terr = 3.5528256597e-11\ttime = 0.04 sec\n[ Info: VUMPS 269:\tobj = -8.862878980874e-01\terr = 3.5192330992e-11\ttime = 0.04 sec\n[ Info: VUMPS 270:\tobj = -8.862878980874e-01\terr = 3.5801828668e-11\ttime = 0.04 sec\n[ Info: VUMPS 271:\tobj = -8.862878980874e-01\terr = 3.4963884022e-11\ttime = 0.08 sec\n[ Info: VUMPS 272:\tobj = -8.862878980874e-01\terr = 3.5992081275e-11\ttime = 0.04 sec\n[ Info: VUMPS 273:\tobj = -8.862878980874e-01\terr = 3.5473635188e-11\ttime = 0.04 sec\n[ Info: VUMPS 274:\tobj = -8.862878980874e-01\terr = 3.5704579427e-11\ttime = 0.04 sec\n[ Info: VUMPS 275:\tobj = -8.862878980874e-01\terr = 3.5442668182e-11\ttime = 0.04 sec\n[ Info: VUMPS 276:\tobj = -8.862878980874e-01\terr = 3.5482076714e-11\ttime = 0.08 sec\n[ Info: VUMPS 277:\tobj = -8.862878980874e-01\terr = 3.9356745202e-11\ttime = 0.04 sec\n[ Info: VUMPS 278:\tobj = -8.862878980874e-01\terr = 4.0210942413e-11\ttime = 0.04 sec\n[ Info: VUMPS 279:\tobj = -8.862878980874e-01\terr = 3.5167580179e-11\ttime = 0.04 sec\n[ Info: VUMPS 280:\tobj = -8.862878980874e-01\terr = 3.6493383635e-11\ttime = 0.04 sec\n[ Info: VUMPS 281:\tobj = -8.862878980874e-01\terr = 3.5805399155e-11\ttime = 0.08 sec\n[ Info: VUMPS 282:\tobj = -8.862878980874e-01\terr = 3.5166101177e-11\ttime = 0.04 sec\n[ Info: VUMPS 283:\tobj = -8.862878980874e-01\terr = 3.7246847607e-11\ttime = 0.04 sec\n[ Info: VUMPS 284:\tobj = -8.862878980874e-01\terr = 4.0568537077e-11\ttime = 0.04 sec\n[ Info: VUMPS 285:\tobj = -8.862878980874e-01\terr = 3.5491580364e-11\ttime = 0.04 sec\n[ Info: VUMPS 286:\tobj = -8.862878980874e-01\terr = 3.5099655639e-11\ttime = 0.08 sec\n[ Info: VUMPS 287:\tobj = -8.862878980874e-01\terr = 3.5165898259e-11\ttime = 0.04 sec\n[ Info: VUMPS 288:\tobj = -8.862878980874e-01\terr = 3.5582900108e-11\ttime = 0.04 sec\n[ Info: VUMPS 289:\tobj = -8.862878980874e-01\terr = 3.5267676837e-11\ttime = 0.04 sec\n[ Info: VUMPS 290:\tobj = -8.862878980874e-01\terr = 3.5547016549e-11\ttime = 0.08 sec\n[ Info: VUMPS 291:\tobj = -8.862878980874e-01\terr = 3.5194773385e-11\ttime = 0.04 sec\n[ Info: VUMPS 292:\tobj = -8.862878980874e-01\terr = 3.8861800688e-11\ttime = 0.04 sec\n[ Info: VUMPS 293:\tobj = -8.862878980874e-01\terr = 1.7694618399e-10\ttime = 0.06 sec\n[ Info: VUMPS 294:\tobj = -8.862878980874e-01\terr = 9.6879691257e-11\ttime = 0.08 sec\n[ Info: VUMPS 295:\tobj = -8.862878980874e-01\terr = 1.9734638828e-10\ttime = 0.09 sec\n[ Info: VUMPS 296:\tobj = -8.862878980874e-01\terr = 9.5735210562e-11\ttime = 0.07 sec\n[ Info: VUMPS 297:\tobj = -8.862878980874e-01\terr = 9.8202831809e-11\ttime = 0.06 sec\n[ Info: VUMPS 298:\tobj = -8.862878980874e-01\terr = 1.0619064963e-10\ttime = 0.05 sec\n[ Info: VUMPS 299:\tobj = -8.862878980874e-01\terr = 6.3326732099e-11\ttime = 0.09 sec\n[ Info: VUMPS 300:\tobj = -8.862878980874e-01\terr = 6.3186774093e-11\ttime = 0.04 sec\n[ Info: VUMPS 301:\tobj = -8.862878980874e-01\terr = 6.3238257167e-11\ttime = 0.04 sec\n[ Info: VUMPS 302:\tobj = -8.862878980874e-01\terr = 7.8177257008e-11\ttime = 0.06 sec\n[ Info: VUMPS 303:\tobj = -8.862878980874e-01\terr = 7.8085760822e-11\ttime = 0.08 sec\n[ Info: VUMPS 304:\tobj = -8.862878980874e-01\terr = 7.3527317393e-11\ttime = 0.04 sec\n[ Info: VUMPS 305:\tobj = -8.862878980874e-01\terr = 9.9416857299e-11\ttime = 0.04 sec\n[ Info: VUMPS 306:\tobj = -8.862878980874e-01\terr = 5.4494619202e-11\ttime = 0.05 sec\n[ Info: VUMPS 307:\tobj = -8.862878980874e-01\terr = 5.7062728379e-11\ttime = 0.04 sec\n[ Info: VUMPS 308:\tobj = -8.862878980874e-01\terr = 5.4603016721e-11\ttime = 0.08 sec\n[ Info: VUMPS 309:\tobj = -8.862878980874e-01\terr = 5.4567688376e-11\ttime = 0.04 sec\n[ Info: VUMPS 310:\tobj = -8.862878980874e-01\terr = 5.7938510837e-11\ttime = 0.04 sec\n[ Info: VUMPS 311:\tobj = -8.862878980874e-01\terr = 2.0622949240e-10\ttime = 0.06 sec\n[ Info: VUMPS 312:\tobj = -8.862878980874e-01\terr = 1.3121811134e-10\ttime = 0.08 sec\n[ Info: VUMPS 313:\tobj = -8.862878980874e-01\terr = 9.1235627109e-11\ttime = 0.10 sec\n[ Info: VUMPS 314:\tobj = -8.862878980874e-01\terr = 8.4669915126e-11\ttime = 0.06 sec\n[ Info: VUMPS 315:\tobj = -8.862878980874e-01\terr = 2.3252823264e-10\ttime = 0.05 sec\n[ Info: VUMPS 316:\tobj = -8.862878980874e-01\terr = 1.1096003071e-10\ttime = 0.13 sec\n[ Info: VUMPS 317:\tobj = -8.862878980874e-01\terr = 1.0920664731e-10\ttime = 0.06 sec\n[ Info: VUMPS 318:\tobj = -8.862878980874e-01\terr = 8.8285347864e-11\ttime = 0.06 sec\n[ Info: VUMPS 319:\tobj = -8.862878980874e-01\terr = 2.0864332560e-10\ttime = 0.06 sec\n[ Info: VUMPS 320:\tobj = -8.862878980874e-01\terr = 1.3027532605e-10\ttime = 0.13 sec\n[ Info: VUMPS 321:\tobj = -8.862878980874e-01\terr = 9.1835678484e-11\ttime = 0.06 sec\n[ Info: VUMPS 322:\tobj = -8.862878980874e-01\terr = 1.0506692631e-10\ttime = 0.07 sec\n[ Info: VUMPS 323:\tobj = -8.862878980874e-01\terr = 6.5764134932e-11\ttime = 0.05 sec\n[ Info: VUMPS 324:\tobj = -8.862878980874e-01\terr = 8.5615212507e-11\ttime = 0.10 sec\n[ Info: VUMPS 325:\tobj = -8.862878980874e-01\terr = 1.5884913185e-10\ttime = 0.05 sec\n[ Info: VUMPS 326:\tobj = -8.862878980874e-01\terr = 7.5397480867e-11\ttime = 0.05 sec\n[ Info: VUMPS 327:\tobj = -8.862878980874e-01\terr = 1.3672488066e-10\ttime = 0.06 sec\n[ Info: VUMPS 328:\tobj = -8.862878980874e-01\terr = 1.2905960387e-10\ttime = 0.11 sec\n[ Info: VUMPS 329:\tobj = -8.862878980874e-01\terr = 1.1137546210e-10\ttime = 0.07 sec\n[ Info: VUMPS 330:\tobj = -8.862878980874e-01\terr = 7.6064748012e-11\ttime = 0.05 sec\n[ Info: VUMPS 331:\tobj = -8.862878980874e-01\terr = 8.2230706651e-11\ttime = 0.06 sec\n[ Info: VUMPS 332:\tobj = -8.862878980874e-01\terr = 1.5547070838e-10\ttime = 0.09 sec\n[ Info: VUMPS 333:\tobj = -8.862878980874e-01\terr = 8.4530602671e-11\ttime = 0.05 sec\n[ Info: VUMPS 334:\tobj = -8.862878980874e-01\terr = 2.7703069729e-10\ttime = 0.05 sec\n[ Info: VUMPS 335:\tobj = -8.862878980874e-01\terr = 1.2843108098e-10\ttime = 0.07 sec\n[ Info: VUMPS 336:\tobj = -8.862878980874e-01\terr = 7.7139997032e-11\ttime = 0.09 sec\n[ Info: VUMPS 337:\tobj = -8.862878980874e-01\terr = 1.5230480609e-10\ttime = 0.05 sec\n[ Info: VUMPS 338:\tobj = -8.862878980874e-01\terr = 1.4349332630e-10\ttime = 0.05 sec\n[ Info: VUMPS 339:\tobj = -8.862878980874e-01\terr = 1.8791131229e-10\ttime = 0.07 sec\n[ Info: VUMPS 340:\tobj = -8.862878980874e-01\terr = 5.6705763103e-11\ttime = 0.11 sec\n[ Info: VUMPS 341:\tobj = -8.862878980874e-01\terr = 5.6628206369e-11\ttime = 0.04 sec\n[ Info: VUMPS 342:\tobj = -8.862878980874e-01\terr = 5.7700869354e-11\ttime = 0.04 sec\n[ Info: VUMPS 343:\tobj = -8.862878980874e-01\terr = 9.5014822831e-11\ttime = 0.07 sec\n[ Info: VUMPS 344:\tobj = -8.862878980874e-01\terr = 9.9584310546e-11\ttime = 0.09 sec\n[ Info: VUMPS 345:\tobj = -8.862878980874e-01\terr = 1.0944426167e-10\ttime = 0.04 sec\n[ Info: VUMPS 346:\tobj = -8.862878980874e-01\terr = 4.1610580123e-11\ttime = 0.04 sec\n[ Info: VUMPS 347:\tobj = -8.862878980874e-01\terr = 2.9414073597e-11\ttime = 0.04 sec\n[ Info: VUMPS 348:\tobj = -8.862878980874e-01\terr = 2.9723554637e-11\ttime = 0.04 sec\n[ Info: VUMPS 349:\tobj = -8.862878980874e-01\terr = 2.9370382842e-11\ttime = 0.08 sec\n[ Info: VUMPS 350:\tobj = -8.862878980874e-01\terr = 2.9069190284e-11\ttime = 0.04 sec\n[ Info: VUMPS 351:\tobj = -8.862878980874e-01\terr = 2.9200689531e-11\ttime = 0.04 sec\n[ Info: VUMPS 352:\tobj = -8.862878980874e-01\terr = 1.0829490368e-10\ttime = 0.06 sec\n[ Info: VUMPS 353:\tobj = -8.862878980874e-01\terr = 1.0018375647e-10\ttime = 0.11 sec\n[ Info: VUMPS 354:\tobj = -8.862878980874e-01\terr = 1.5362554440e-10\ttime = 0.06 sec\n[ Info: VUMPS 355:\tobj = -8.862878980874e-01\terr = 9.4013179693e-11\ttime = 0.07 sec\n[ Info: VUMPS 356:\tobj = -8.862878980874e-01\terr = 8.5844015408e-11\ttime = 0.06 sec\n[ Info: VUMPS 357:\tobj = -8.862878980874e-01\terr = 1.1938734236e-10\ttime = 0.09 sec\n[ Info: VUMPS 358:\tobj = -8.862878980874e-01\terr = 5.4442781639e-11\ttime = 0.04 sec\n[ Info: VUMPS 359:\tobj = -8.862878980874e-01\terr = 5.6747362650e-11\ttime = 0.04 sec\n[ Info: VUMPS 360:\tobj = -8.862878980874e-01\terr = 1.1602629725e-10\ttime = 0.07 sec\n[ Info: VUMPS 361:\tobj = -8.862878980874e-01\terr = 1.2693714656e-10\ttime = 0.06 sec\n[ Info: VUMPS 362:\tobj = -8.862878980874e-01\terr = 1.3334525033e-10\ttime = 0.11 sec\n[ Info: VUMPS 363:\tobj = -8.862878980874e-01\terr = 9.4883693020e-11\ttime = 0.07 sec\n[ Info: VUMPS 364:\tobj = -8.862878980874e-01\terr = 8.9430760837e-11\ttime = 0.07 sec\n[ Info: VUMPS 365:\tobj = -8.862878980874e-01\terr = 1.0615371329e-10\ttime = 0.11 sec\n[ Info: VUMPS 366:\tobj = -8.862878980874e-01\terr = 1.1358908029e-10\ttime = 0.04 sec\n[ Info: VUMPS 367:\tobj = -8.862878980874e-01\terr = 1.2828241179e-10\ttime = 0.05 sec\n[ Info: VUMPS 368:\tobj = -8.862878980874e-01\terr = 7.5500082303e-11\ttime = 0.05 sec\n[ Info: VUMPS 369:\tobj = -8.862878980874e-01\terr = 1.7133532560e-10\ttime = 0.05 sec\n[ Info: VUMPS 370:\tobj = -8.862878980874e-01\terr = 6.2722200745e-11\ttime = 0.09 sec\n[ Info: VUMPS 371:\tobj = -8.862878980874e-01\terr = 6.2778165324e-11\ttime = 0.04 sec\n[ Info: VUMPS 372:\tobj = -8.862878980874e-01\terr = 6.4224600150e-10\ttime = 0.06 sec\n[ Info: VUMPS 373:\tobj = -8.862878980874e-01\terr = 1.4567170198e-10\ttime = 0.09 sec\n[ Info: VUMPS 374:\tobj = -8.862878980874e-01\terr = 1.0380674404e-10\ttime = 0.11 sec\n[ Info: VUMPS 375:\tobj = -8.862878980874e-01\terr = 1.0822040195e-10\ttime = 0.07 sec\n[ Info: VUMPS 376:\tobj = -8.862878980874e-01\terr = 1.0520173008e-10\ttime = 0.06 sec\n[ Info: VUMPS 377:\tobj = -8.862878980874e-01\terr = 6.7365662418e-11\ttime = 0.10 sec\n[ Info: VUMPS 378:\tobj = -8.862878980874e-01\terr = 6.7760750536e-11\ttime = 0.04 sec\n[ Info: VUMPS 379:\tobj = -8.862878980874e-01\terr = 6.7722699479e-11\ttime = 0.04 sec\n[ Info: VUMPS 380:\tobj = -8.862878980874e-01\terr = 6.7250908434e-11\ttime = 0.04 sec\n[ Info: VUMPS 381:\tobj = -8.862878980874e-01\terr = 1.4694592798e-10\ttime = 0.06 sec\n[ Info: VUMPS 382:\tobj = -8.862878980874e-01\terr = 8.9730375422e-11\ttime = 0.11 sec\n[ Info: VUMPS 383:\tobj = -8.862878980874e-01\terr = 1.6221755374e-10\ttime = 0.06 sec\n[ Info: VUMPS 384:\tobj = -8.862878980874e-01\terr = 1.2999407274e-10\ttime = 0.08 sec\n[ Info: VUMPS 385:\tobj = -8.862878980874e-01\terr = 8.5732018525e-11\ttime = 0.06 sec\n[ Info: VUMPS 386:\tobj = -8.862878980874e-01\terr = 1.6277251600e-10\ttime = 0.09 sec\n[ Info: VUMPS 387:\tobj = -8.862878980874e-01\terr = 7.1550742938e-11\ttime = 0.04 sec\n[ Info: VUMPS 388:\tobj = -8.862878980874e-01\terr = 7.4376591685e-11\ttime = 0.06 sec\n[ Info: VUMPS 389:\tobj = -8.862878980874e-01\terr = 7.4713904887e-11\ttime = 0.04 sec\n[ Info: VUMPS 390:\tobj = -8.862878980874e-01\terr = 7.4436898750e-11\ttime = 0.08 sec\n[ Info: VUMPS 391:\tobj = -8.862878980874e-01\terr = 7.5772899650e-11\ttime = 0.04 sec\n[ Info: VUMPS 392:\tobj = -8.862878980874e-01\terr = 7.4943197420e-11\ttime = 0.04 sec\n[ Info: VUMPS 393:\tobj = -8.862878980874e-01\terr = 7.4400646683e-11\ttime = 0.04 sec\n[ Info: VUMPS 394:\tobj = -8.862878980874e-01\terr = 7.5613615370e-11\ttime = 0.04 sec\n[ Info: VUMPS 395:\tobj = -8.862878980874e-01\terr = 1.0859523215e-10\ttime = 0.11 sec\n[ Info: VUMPS 396:\tobj = -8.862878980874e-01\terr = 9.0566692582e-11\ttime = 0.05 sec\n[ Info: VUMPS 397:\tobj = -8.862878980874e-01\terr = 4.3667065720e-11\ttime = 0.05 sec\n[ Info: VUMPS 398:\tobj = -8.862878980874e-01\terr = 4.3513888787e-11\ttime = 0.04 sec\n[ Info: VUMPS 399:\tobj = -8.862878980874e-01\terr = 4.4283893567e-11\ttime = 0.04 sec\n┌ Warning: VUMPS cancel 400:\tobj = -8.862878980874e-01\terr = 4.3759074890e-11\ttime = 28.78 sec\n└ @ MPSKit ~/Projects/MPSKit.jl/src/algorithms/groundstate/vumps.jl:67\n","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"","category":"page"},{"location":"examples/quantum1d/4.xxz-heisenberg/","page":"The XXZ model","title":"The XXZ model","text":"This page was generated using Literate.jl.","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"EditURL = \"../../../../../examples/quantum1d/1.ising-cft/main.jl\"","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"examples/quantum1d/1.ising-cft/#The-Ising-CFT-spectrum","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"","category":"section"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"This tutorial is meant to show the finite size CFT spectrum for the quantum Ising model. We do this by first employing an exact diagonalization technique, and then extending the analysis to larger system sizes through the use of MPS techniques.","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"using MPSKit, MPSKitModels, TensorKit, Plots, KrylovKit\nusing LinearAlgebra: eigen, diagm, Hermitian","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"The hamiltonian is defined on a finite lattice with periodic boundary conditions, which can be implemented as follows:","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"L = 12\nH = periodic_boundary_conditions(transverse_field_ising(), L);","category":"page"},{"location":"examples/quantum1d/1.ising-cft/#Exact-diagonalisation","page":"The Ising CFT spectrum","title":"Exact diagonalisation","text":"","category":"section"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"In MPSKit, there is support for exact diagonalisation by leveraging the fact that applying the hamiltonian to an untruncated MPS will result in an effective hamiltonian on the center site which implements the action of the entire hamiltonian. Thus, optimizing the middle tensor is equivalent to optimixing a state in the entire Hilbert space, as all other tensors are just unitary matrices that mix the basis.","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"energies, states = exact_diagonalization(H; num=18, alg=Lanczos(; krylovdim=200));\nplot(real.(energies);\n seriestype=:scatter,\n legend=false,\n ylabel=\"energy\",\n xlabel=\"#eigenvalue\")","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"note: Krylov dimension\nNote that we have specified a large Krylov dimension as degenerate eigenvalues are notoriously difficult for iterative methods.","category":"page"},{"location":"examples/quantum1d/1.ising-cft/#Extracting-momentum","page":"The Ising CFT spectrum","title":"Extracting momentum","text":"","category":"section"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"Given a state, it is possible to assign a momentum label through the use of the translation operator. This operator can be defined in MPO language either diagramatically as","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"(Image: translation operator MPO)","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"or in the code as:","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"id = complex(isomorphism(ℂ^2, ℂ^2))\n@tensor O[-1 -2; -3 -4] := id[-1, -3] * id[-2, -4]\nT = periodic_boundary_conditions(DenseMPO(O), L);","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"We can then calculate the momentum of the groundstate as the expectation value of this operator. However, there is a subtlety because of the degeneracies in the energy eigenvalues. The eigensolver will find an orthonormal basis within each energy subspace, but this basis is not necessarily a basis of eigenstates of the translation operator. In order to fix this, we diagonalize the translation operator within each energy subspace.","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"momentum(ψᵢ, ψⱼ=ψᵢ) = angle(dot(ψᵢ, T * ψⱼ))\n\nfunction fix_degeneracies(basis)\n N = zeros(ComplexF64, length(basis), length(basis))\n M = zeros(ComplexF64, length(basis), length(basis))\n for i in eachindex(basis), j in eachindex(basis)\n N[i, j] = dot(basis[i], basis[j])\n M[i, j] = momentum(basis[i], basis[j])\n end\n\n vals, vecs = eigen(Hermitian(N))\n M = (vecs' * M * vecs)\n M /= diagm(vals)\n\n vals, vecs = eigen(M)\n return angle.(vals)\nend\n\nmomenta = Float64[]\nappend!(momenta, fix_degeneracies(states[1:1]))\nappend!(momenta, fix_degeneracies(states[2:2]))\nappend!(momenta, fix_degeneracies(states[3:3]))\nappend!(momenta, fix_degeneracies(states[4:5]))\nappend!(momenta, fix_degeneracies(states[6:9]))\nappend!(momenta, fix_degeneracies(states[10:11]))\nappend!(momenta, fix_degeneracies(states[12:12]))\nappend!(momenta, fix_degeneracies(states[13:16]))\nappend!(momenta, fix_degeneracies(states[17:18]))\n\nplot(momenta,\n real.(energies[1:18]);\n seriestype=:scatter,\n xlabel=\"momentum\",\n ylabel=\"energy\",\n legend=false)","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/1.ising-cft/#Finite-bond-dimension","page":"The Ising CFT spectrum","title":"Finite bond dimension","text":"","category":"section"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"If we limit the maximum bond dimension of the MPS, we get an approximate solution, but we can reach higher system sizes.","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"L_mps = 20\nH_mps = periodic_boundary_conditions(transverse_field_ising(), L_mps)\nD = 64\nψ, envs, δ = find_groundstate(FiniteMPS(L_mps, ℂ^2, ℂ^D), H_mps, DMRG());","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"[ Info: DMRG init:\tobj = -1.986175369583e+01\terr = 7.3962e-02\n[ Info: DMRG 1:\tobj = -2.549098908186e+01\terr = 9.7854336373e-03\ttime = 2.85 sec\n[ Info: DMRG 2:\tobj = -2.549098968632e+01\terr = 1.1440955438e-06\ttime = 0.65 sec\n[ Info: DMRG 3:\tobj = -2.549098968636e+01\terr = 1.1899350273e-07\ttime = 0.61 sec\n[ Info: DMRG 4:\tobj = -2.549098968636e+01\terr = 1.3300005913e-08\ttime = 0.34 sec\n[ Info: DMRG 5:\tobj = -2.549098968636e+01\terr = 5.5087464909e-09\ttime = 0.31 sec\n[ Info: DMRG 6:\tobj = -2.549098968636e+01\terr = 3.2413738015e-09\ttime = 0.30 sec\n[ Info: DMRG 7:\tobj = -2.549098968636e+01\terr = 2.4243792973e-09\ttime = 0.31 sec\n[ Info: DMRG 8:\tobj = -2.549098968636e+01\terr = 2.1231366707e-09\ttime = 0.56 sec\n[ Info: DMRG 9:\tobj = -2.549098968636e+01\terr = 1.9891538232e-09\ttime = 0.44 sec\n[ Info: DMRG 10:\tobj = -2.549098968636e+01\terr = 1.8864377638e-09\ttime = 0.32 sec\n[ Info: DMRG 11:\tobj = -2.549098968636e+01\terr = 1.7682141746e-09\ttime = 0.33 sec\n[ Info: DMRG 12:\tobj = -2.549098968636e+01\terr = 1.6262519428e-09\ttime = 0.30 sec\n[ Info: DMRG 13:\tobj = -2.549098968636e+01\terr = 1.4678381585e-09\ttime = 0.30 sec\n[ Info: DMRG 14:\tobj = -2.549098968636e+01\terr = 1.3037732764e-09\ttime = 0.30 sec\n[ Info: DMRG 15:\tobj = -2.549098968636e+01\terr = 1.1436368174e-09\ttime = 0.30 sec\n[ Info: DMRG 16:\tobj = -2.549098968636e+01\terr = 9.9399752806e-10\ttime = 0.30 sec\n[ Info: DMRG 17:\tobj = -2.549098968636e+01\terr = 8.5842868469e-10\ttime = 0.29 sec\n[ Info: DMRG 18:\tobj = -2.549098968636e+01\terr = 7.3821724717e-10\ttime = 0.29 sec\n[ Info: DMRG 19:\tobj = -2.549098968636e+01\terr = 6.3317095217e-10\ttime = 0.29 sec\n[ Info: DMRG 20:\tobj = -2.549098968636e+01\terr = 5.4224930858e-10\ttime = 0.47 sec\n[ Info: DMRG 21:\tobj = -2.549098968636e+01\terr = 4.6407320953e-10\ttime = 0.30 sec\n[ Info: DMRG 22:\tobj = -2.549098968636e+01\terr = 3.9709950959e-10\ttime = 0.28 sec\n[ Info: DMRG 23:\tobj = -2.549098968636e+01\terr = 3.3985399711e-10\ttime = 0.29 sec\n[ Info: DMRG 24:\tobj = -2.549098968636e+01\terr = 2.9097790850e-10\ttime = 0.28 sec\n[ Info: DMRG 25:\tobj = -2.549098968636e+01\terr = 2.4926442816e-10\ttime = 0.28 sec\n[ Info: DMRG 26:\tobj = -2.549098968636e+01\terr = 2.1365944710e-10\ttime = 0.28 sec\n[ Info: DMRG 27:\tobj = -2.549098968636e+01\terr = 1.8325685774e-10\ttime = 0.29 sec\n[ Info: DMRG 28:\tobj = -2.549098968636e+01\terr = 1.5728170079e-10\ttime = 0.27 sec\n[ Info: DMRG 29:\tobj = -2.549098968636e+01\terr = 1.3507433129e-10\ttime = 0.27 sec\n[ Info: DMRG 30:\tobj = -2.549098968636e+01\terr = 1.1601025066e-10\ttime = 0.32 sec\n[ Info: DMRG conv 31:\tobj = -2.549098968636e+01\terr = 9.9471043716e-11\ttime = 13.06 sec\n","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"Excitations on top of the groundstate can be found through the use of the quasiparticle ansatz. This returns quasiparticle states, which can be converted to regular FiniteMPS objects.","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"E_ex, qps = excitations(H, QuasiparticleAnsatz(), ψ, envs; num=16)\nstates_mps = vcat(ψ, map(qp -> convert(FiniteMPS, qp), qps))\nE_mps = map(x -> expectation_value(x, H_mps), states_mps)\n\nT_mps = periodic_boundary_conditions(DenseMPO(O), L_mps)\nmomenta_mps = Float64[]\nappend!(momenta_mps, fix_degeneracies(states[1:1]))\nappend!(momenta_mps, fix_degeneracies(states[2:2]))\nappend!(momenta_mps, fix_degeneracies(states[3:3]))\nappend!(momenta_mps, fix_degeneracies(states[4:5]))\nappend!(momenta_mps, fix_degeneracies(states[6:9]))\nappend!(momenta_mps, fix_degeneracies(states[10:11]))\nappend!(momenta_mps, fix_degeneracies(states[12:12]))\nappend!(momenta_mps, fix_degeneracies(states[13:16]))\n\nplot(momenta_mps,\n real.(energies[1:16]);\n seriestype=:scatter,\n xlabel=\"momentum\",\n ylabel=\"energy\",\n legend=false)","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"","category":"page"},{"location":"examples/quantum1d/1.ising-cft/","page":"The Ising CFT spectrum","title":"The Ising CFT spectrum","text":"This page was generated using Literate.jl.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"DocTestSetup = quote\n using MPSKit, MPSKitModels, TensorKit\nend","category":"page"},{"location":"man/algorithms/#um_algorithms","page":"Algorithms","title":"Algorithms","text":"","category":"section"},{"location":"man/algorithms/#Minimizing-the-energy","page":"Algorithms","title":"Minimizing the energy","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"There are a number of different possible energy-minimization algorithms, depending on the system size. Exclusive to finite systems are","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"- DMRG\n\n- DMRG2","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"Exclusive to infinite systems are","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"- IDMRG\n\n- IDMRG2\n\n- VUMPS","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"with a last algorithm - GradientGrassmann - implemented for both finite and infinite systems.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"WindowMPS, which is a finite patch of mutable tensors embedded in an infinite MPS, is handled as a finite system where we only optimize over the patch of mutable tensors.","category":"page"},{"location":"man/algorithms/#DMRG","page":"Algorithms","title":"DMRG","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"state = FiniteMPS(20,ℂ^2,ℂ^10);\noperator = nonsym_ising_ham();\n(groundstate,environments,delta) = find_groundstate!(state,operator,DMRG())","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The DMRG algorithm sweeps through the system, optimizing every site. Because of its single-site behaviour, this will always keep the bond dimension fixed. If you do want to increase the bond dimension dynamically, then there are two options. Either you use the two-site variant of DMRG (DMRG2()), or you make use of the finalize option. Finalize is a function that gets called at the end of every DMRG iteration. Within that function call one can modify the state.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"function my_finalize(iter,state,H,envs)\n println(\"Hello from iteration $iter\")\n return state,envs;\nend\n\n(groundstate,environments,delta) = find_groundstate!(state,operator,DMRG(finalize = my_finalize))","category":"page"},{"location":"man/algorithms/#DMRG2","page":"Algorithms","title":"DMRG2","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"state = FiniteMPS(20,ℂ^2,ℂ^10);\noperator = nonsym_ising_ham();\n(groundstate,environments,delta) = find_groundstate!(state,operator,DMRG2(trscheme=truncbelow(1e-7)));","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The twosite variant of DMRG, which optimizes blocks of two sites and then decomposes them into 2 MPS tensors using the svd decomposition. By truncating the singular values up to a desired precision, one can dynamically grow and shrink the bond dimension as needed. However, this truncation in turn introduces an error, which is why a state converged with DMRG2 can often be slightly further converged by subsequently using DMRG.","category":"page"},{"location":"man/algorithms/#IDMRG","page":"Algorithms","title":"IDMRG","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"state = InfiniteMPS([ℂ^2],[ℂ^10]);\noperator = nonsym_ising_ham();\n(groundstate,environments,delta) = find_groundstate(state,operator,IDMRG1())","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The DMRG algorithm for finite systems can be generalized to infinite MPS. The idea is to start with a finite system and grow the system size, while we are sweeping through the system. This is again a single site algorithm, and therefore preserves the initial bond dimension.","category":"page"},{"location":"man/algorithms/#IDMRG2","page":"Algorithms","title":"IDMRG2","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"state = InfiniteMPS([ℂ^2,ℂ^2],[ℂ^10,ℂ^10]);\noperator = repeat(nonsym_ising_ham(),2);\n(groundstate,environments,delta) = find_groundstate(state,operator,IDMRG2(trscheme=truncbelow(1e-5)))","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The generalization of DMRG2 to infinite systems has the same caveats as its finite counterpart. We furthermore require a unitcell ≥ 2. As a rule of thumb, a truncation cutoff of 1e-5 is already really good.","category":"page"},{"location":"man/algorithms/#VUMPS","page":"Algorithms","title":"VUMPS","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"VUMPS is an (I)DMRG inspired algorithm that can be used to find the groundstate of infinite matrix product states","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"state = InfiniteMPS([ℂ^2],[ℂ^10]);\noperator = nonsym_ising_ham();\n(groundstate,environments,delta) = find_groundstate(state,operator,VUMPS())","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"much like DMRG, it cannot modify the bond dimension, and this has to be done manually in the finalize function.","category":"page"},{"location":"man/algorithms/#Gradient-descent","page":"Algorithms","title":"Gradient descent","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"Both finite and infinite matrix product states can be parametrized by a set of unitary matrices, and we can then perform gradient descent on this unitary manifold. Due to some technical reasons (gauge freedom), this manifold further restricts to a grassmann manifold.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"state = InfiniteMPS([ℂ^2],[ℂ^10]);\noperator = nonsym_ising_ham();\n(groundstate,environments,delta) = find_groundstate(state,operator,GradientGrassmann())","category":"page"},{"location":"man/algorithms/#Time-evolution","page":"Algorithms","title":"Time evolution","text":"","category":"section"},{"location":"man/algorithms/#TDVP","page":"Algorithms","title":"TDVP","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"There is an implementation of the one-site TDVP scheme for finite and infinite MPS:","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"(newstate,environments) = timestep(state,operator,dt,TDVP())","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"and the two-site scheme for finite MPS (TDVP2()). Similarly to DMRG, the one site scheme will preserve the bond dimension, and expansion has to be done manually.","category":"page"},{"location":"man/algorithms/#Time-evolution-MPO","page":"Algorithms","title":"Time evolution MPO","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"We have rudimentary support for turning an MPO hamiltonian into a time evolution MPO.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"make_time_mpo(H,dt,alg::WI)\nmake_time_mpo(H,dt,alg::WII)","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"two algorithms are available, corresponding to different orders of precision. It is possible to then multiply a state by this MPO, or to approximate (MPO,state) by a new state","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"state = InfiniteMPS([ℂ^2],[ℂ^10]);\noperator = nonsym_ising_ham();\nmpo = make_time_mpo(operator, 0.1, WII());\napproximate(state, (mpo, state), VUMPS())","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"This feature is at the moment not very well supported.","category":"page"},{"location":"man/algorithms/#Excitations","page":"Algorithms","title":"Excitations","text":"","category":"section"},{"location":"man/algorithms/#Quasiparticle-Ansatz","page":"Algorithms","title":"Quasiparticle Ansatz","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The Quasiparticle Ansatz offers an approach to compute low-energy eigenstates in quantum systems, playing a key role in both finite and infinite systems. It leverages localized perturbations for approximations, as detailed in this paper.","category":"page"},{"location":"man/algorithms/#Finite-Systems:","page":"Algorithms","title":"Finite Systems:","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"In finite systems, we approximate low-energy states by altering a single tensor in the Matrix Product State (MPS) for each site, and summing these across all sites. This method introduces additional gauge freedoms, utilized to ensure orthogonality to the ground state. Optimizing within this framework translates to solving an eigenvalue problem. For example, in the transverse field Ising model, we calculate the first excited state as shown in the provided code snippet, amd check the accuracy against theoretical values. Some deviations are expected, both due to finite-bond-dimension and finite-size effects.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"# Model parameters\ng = 10.0\nL = 16\nH = transverse_field_ising(; g)\n\n# Finding the ground state\nψ₀ = FiniteMPS(L, ℂ^2, ℂ^32)\nψ, = find_groundstate(ψ₀, H; verbosity=0)\n\n# Computing excitations using the Quasiparticle Ansatz\nEs, ϕs = excitations(H, QuasiparticleAnsatz(), ψ; num=1)\nisapprox(Es[1], 2(g - 1); rtol=1e-2)","category":"page"},{"location":"man/algorithms/#Infinite-Systems:","page":"Algorithms","title":"Infinite Systems:","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The ansatz in infinite systems maintains translational invariance by perturbing every site in the unit cell in a plane-wave superposition, requiring momentum specification. The Haldane gap computation in the Heisenberg model illustrates this approach.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"# Setting up the model and momentum\nmomentum = π\nH = heisenberg_XXX()\n\n# Ground state computation\nψ₀ = InfiniteMPS(ℂ^3, ℂ^48)\nψ, = find_groundstate(ψ₀, H; verbosity=0)\n\n# Excitation calculations\nEs, ϕs = excitations(H, QuasiparticleAnsatz(), momentum, ψ)\nisapprox(Es[1], 0.41047925; atol=1e-4)","category":"page"},{"location":"man/algorithms/#Charged-excitations:","page":"Algorithms","title":"Charged excitations:","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"When dealing with symmetric systems, the default optimization is for eigenvectors with trivial total charge. However, quasiparticles with different charges can be obtained using the sector keyword. For instance, in the transverse field Ising model, we consider an excitation built up of flipping a single spin, aligning with Z2Irrep(1).","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"g = 10.0\nL = 16\nH = transverse_field_ising(Z2Irrep; g)\nψ₀ = FiniteMPS(L, Z2Space(0 => 1, 1 => 1), Z2Space(0 => 16, 1 => 16))\nψ, = find_groundstate(ψ₀, H; verbosity=0)\nEs, ϕs = excitations(H, QuasiparticleAnsatz(), ψ; num=1, sector=Z2Irrep(1))\nisapprox(Es[1], 2(g - 1); rtol=1e-2) # infinite analytical result","category":"page"},{"location":"man/algorithms/#Finite-excitations","page":"Algorithms","title":"Finite excitations","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"For finite systems we can also do something else - find the groundstate of the hamiltonian + weight sum_i psi_i psi_i. This is also supported by calling","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"th = nonsym_ising_ham()\nts = FiniteMPS(10,ℂ^2,ℂ^12);\n(ts,envs,_) = find_groundstate(ts,th,DMRG(verbosity=0));\n(energies,Bs) = excitations(th,FiniteExcited(),ts,envs);","category":"page"},{"location":"man/algorithms/#\"Chepiga-Ansatz\"","page":"Algorithms","title":"\"Chepiga Ansatz\"","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"Computing excitations in critical systems poses a significant challenge due to the diverging correlation length, which requires very large bond dimensions. However, we can leverage this long-range correlation to effectively identify excitations. In this context, the left/right gauged MPS, serving as isometries, are effectively projecting the Hamiltonian into the low-energy sector. This projection method is particularly effective in long-range systems, where excitations are distributed throughout the entire system. Consequently, the low-lying energy spectrum can be extracted by diagonalizing the effective Hamiltonian (without any additional DMRG costs!). The states of these excitations are then represented by the ground state MPS, with one site substituted by the corresponding eigenvector. This approach is often referred to as the 'Chepiga ansatz', named after one of the authors of this paper.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"This is supported via the following syntax:","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"g = 1.0\nL = 16\nH = transverse_field_ising(; g)\nψ₀ = FiniteMPS(L, ComplexSpace(2), ComplexSpace(32))\nψ, envs, = find_groundstate(ψ₀, H; verbosity=0)\nE₀ = real(sum(expectation_value(ψ, H, envs)))\nEs, ϕs = excitations(H, ChepigaAnsatz(), ψ, envs; num=1)\nisapprox(Es[1], 2(g - 1); rtol=1e-2) # infinite analytical result\n\n# output\n\ntrue","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"In order to improve the accuracy, a two-site version also exists, which varies two neighbouring sites:","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"g = 1.0\nL = 16\nH = transverse_field_ising(; g)\nψ₀ = FiniteMPS(L, ComplexSpace(2), ComplexSpace(32))\nψ, envs, = find_groundstate(ψ₀, H; verbosity=0)\nE₀ = real(sum(expectation_value(ψ, H, envs)))\nEs, ϕs = excitations(H, ChepigaAnsatz2(), ψ, envs; num=1)\nisapprox(Es[1], 2(g - 1); rtol=1e-2) # infinite analytical result\n\n# output\n\ntrue","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The algorithm is described in more detail in the following paper:","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"Chepiga, N., & Mila, F. (2017). Excitation spectrum and density matrix renormalization group iterations. Physical Review B, 96(5), 054425.","category":"page"},{"location":"man/algorithms/#changebonds","page":"Algorithms","title":"changebonds","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"Many of the previously mentioned algorithms do not possess a way to dynamically change to bond dimension. This is often a problem, as the optimal bond dimension is often not a priori known, or needs to increase because of entanglement growth throughout the course of a simulation. changebonds exposes a way to change the bond dimension of a given state.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"changebonds","category":"page"},{"location":"man/algorithms/#MPSKit.changebonds-man-algorithms","page":"Algorithms","title":"MPSKit.changebonds","text":"changebonds(ψ::AbstractMPS, H, alg, envs) -> ψ′, envs′\nchangebonds(ψ::AbstractMPS, alg) -> ψ′\n\nChange the bond dimension of ψ using the algorithm alg, and return the new ψ and the new envs.\n\nSee also: SvdCut, RandExpand, VUMPSSvdCut, OptimalExpand\n\n\n\n\n\n","category":"function"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"There are several different algorithms implemented, each having their own advantages and disadvantages:","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"SvdCut: The simplest method for changing the bonddimension is found by simply locally truncating the state using an SVD decomposition. This yields a (locally) optimal truncation, but clearly cannot be used to increase the bond dimension. Note that a globally optimal truncation can be obtained by using the SvdCut algorithm in combination with approximate. Since the output of this method might have a truncated bonddimension, the new state might not be identical to the input state. The truncation is controlled through trscheme, which dictates how the singular values of the original state are truncated.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"OptimalExpand: This algorithm is based on the idea of expanding the bond dimension by investigating the two-site derivative, and adding the most important blocks which are orthogonal to the current state. From the point of view of a local two-site update, this procedure is optimal, but it requires to evaluate a two-site derivative, which can be costly when the physical space is large. The state will remain unchanged, but a one-site scheme will now be able to push the optimization further. The subspace used for expansion can be truncated through trscheme, which dictates how many singular values will be added.\nRandExpand: This algorithm similarly adds blocks orthogonal to the current state, but does not attempt to select the most important ones, and rather just selects them at random. The advantage here is that this is much cheaper than the optimal expand, and if the bond dimension is grown slow enough, this still obtains a very good expansion scheme. Again, The state will remain unchanged and a one-site scheme will now be able to push the optimization further. The subspace used for expansion can be truncated through trscheme, which dictates how many singular values will be added.\nVUMPSSvdCut: This algorithm is based on the VUMPS algorithm, and consists of performing a two-site update, and then truncating the state back down. Because of the two-site update, this can again become expensive, but the algorithm has the option of both expanding as well as truncating the bond dimension. Here, trscheme controls the truncation of the full state after the two-site update.","category":"page"},{"location":"man/algorithms/#leading-boundary","page":"Algorithms","title":"leading boundary","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"For statmech partition functions we want to find the approximate leading boundary MPS. Again this can be done with VUMPS:","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"th = nonsym_ising_mpo()\nts = InfiniteMPS([ℂ^2],[ℂ^20]);\n(ts,envs,_) = leading_boundary(ts,th,VUMPS(maxiter=400,verbosity=false));","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"if the mpo satisfies certain properties (positive and hermitian), it may also be possible to use GradientGrassmann.","category":"page"},{"location":"man/algorithms/#approximate","page":"Algorithms","title":"approximate","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"Often, it is useful to approximate a given MPS by another, typically by one of a different bond dimension. This is achieved by approximating an application of an MPO to the initial state, by a new state.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"approximate","category":"page"},{"location":"man/algorithms/#MPSKit.approximate-man-algorithms","page":"Algorithms","title":"MPSKit.approximate","text":"approximate(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)\napproximate!(ψ₀, (O, ψ), algorithm, [environments]; kwargs...)\n\nCompute an approximation to the application of an operator O to the state ψ in the form of an MPS ψ₀.\n\nArguments\n\nψ₀::AbstractMPS: initial guess of the approximated state\n(O::AbstractMPO, ψ::AbstractMPS): operator O and state ψ to be approximated\nalgorithm: approximation algorithm. See below for a list of available algorithms.\n[environments]: MPS environment manager\n\nKeywords\n\ntol::Float64: tolerance for convergence criterium\nmaxiter::Int: maximum amount of iterations\nverbosity::Int: display progress information\n\nAlgorithms\n\nDMRG: Alternating least square method for maximizing the fidelity with a single-site scheme.\nDMRG2: Alternating least square method for maximizing the fidelity with a two-site scheme.\nIDMRG1: Variant of DMRG for maximizing fidelity density in the thermodynamic limit.\nIDMRG2: Variant of DMRG2 for maximizing fidelity density in the thermodynamic limit.\nVOMPS: Tangent space method for truncating uniform MPS.\n\n\n\n\n\n","category":"function"},{"location":"man/algorithms/#Varia","page":"Algorithms","title":"Varia","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"What follows is a medley of lesser known (or used) algorithms and don't entirely fit under one of the above categories.","category":"page"},{"location":"man/algorithms/#Dynamical-DMRG","page":"Algorithms","title":"Dynamical DMRG","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"Dynamical DMRG has been described in other papers and is a way to find the propagator. The basic idea is that to calculate G(z) = V (H-z)^-1 V , one can variationally find (H-z) W = V and then the propagator simply equals G(z) = V W .","category":"page"},{"location":"man/algorithms/#fidelity-susceptibility","page":"Algorithms","title":"fidelity susceptibility","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"The fidelity susceptibility measures how much the groundstate changes when tuning a parameter in your hamiltonian. Divergences occur at phase transitions, making it a valuable measure when no order parameter is known.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"fidelity_susceptibility(groundstate,H_0,perturbing_Hams::AbstractVector)","category":"page"},{"location":"man/algorithms/#periodic-boundary-conditions","page":"Algorithms","title":"periodic boundary conditions","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"You can impose periodic boundary conditions on the hamiltonian itself, while still using a normal OBC finite matrix product states. This is straightforward to implement but competitive with more advanced PBC MPS algorithms.","category":"page"},{"location":"man/algorithms/#exact-diagonalization","page":"Algorithms","title":"exact diagonalization","text":"","category":"section"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"As a side effect, our code support exact diagonalization. The idea is to construct a finite matrix product state with maximal bond dimension, and then optimize the middle site. Because we never truncated the bond dimension, this single site effectively parametrizes the entire hilbert space.","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"exact_diagonalization(periodic_boundary_conditions(su2_xxx_ham(spin=1),10),which=:SR) # find the groundstate on 10 sites","category":"page"},{"location":"man/algorithms/","page":"Algorithms","title":"Algorithms","text":"DocTestSetup = nothing","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"EditURL = \"../../../../../examples/quantum1d/6.hubbard/main.jl\"","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"using Markdown","category":"page"},{"location":"examples/quantum1d/6.hubbard/#hubbard","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"","category":"section"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"The Hubbard model is a model of interacting fermions on a lattice, which is often used as a somewhat realistic model for electrons in a solid. The Hamiltonian consists of two terms that describe competing forces of each electron: a kinetic term that allows electrons to hop between neighboring sites, and a potential term reflecting on-site interactions between electrons. Often, a third term is included which serves as a chemical potential to control the number of electrons in the system.","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"H = -t sum_langle i j rangle sigma c^dagger_isigma c_jsigma + U sum_i n_iuparrow n_idownarrow - mu sum_isigma n_isigma","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"At half-filling, the system exhibits particle-hole symmetry, which can be made explicit by rewriting the Hamiltonian slightly. First, we fix the overall energy scale by setting t = 1, and then shift the total energy by adding a constant U / 4, as well as shifting the chemical potential to N U / 2. This results in the following Hamiltonian:","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"H = - sum_langle i j rangle sigma c^dagger_isigma c_jsigma + U 4 sum_i (1 - 2 n_iuparrow) (1 - 2 n_idownarrow) - mu sum_isigma n_isigma","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"Finally, setting \\mu = 0 and defining u = U / 4 we obtain the Hubbard model at half-filling.","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"H = - sum_langle i j rangle sigma c^dagger_isigma c_jsigma + u sum_i (1 - 2 n_iuparrow) (1 - 2 n_idownarrow)","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"using TensorKit\nusing MPSKit\nusing MPSKitModels\nusing SpecialFunctions: besselj0, besselj1\nusing QuadGK: quadgk\nusing Plots\nusing Interpolations\nusing Optim\n\nconst t = 1.0\nconst mu = 0.0\nconst U = 3.0","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"3.0","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"For this case, the groundstate energy has an analytic solution, which can be used to benchmark the numerical results. It follows from Eq. (6.82) in .","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"e(u) = - u - 4 int_0^infty fracdomegaomega fracJ_0(omega) J_1(omega)1 + exp(2u omega)","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"We can easily verify this by comparing the numerical results to the analytic solution.","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"function hubbard_energy(u; rtol=1e-12)\n integrandum(ω) = besselj0(ω) * besselj1(ω) / (1 + exp(2u * ω)) / ω\n int, err = quadgk(integrandum, 0, Inf; rtol=rtol)\n return -u - 4 * int\nend\n\nfunction compute_groundstate(psi, H;\n svalue=1e-3,\n expansionfactor=(1 / 5),\n expansioniter=20)\n verbosity = 1\n psi, = find_groundstate(psi, H; tol=svalue * 10, verbosity)\n for _ in 1:expansioniter\n D = maximum(x -> dim(left_virtualspace(psi, x)), 1:length(psi))\n D′ = max(2, round(Int, D * expansionfactor))\n trscheme = truncbelow(svalue / 10) & truncdim(D′)\n psi′, = changebonds(psi, H, OptimalExpand(; trscheme=trscheme))\n all(left_virtualspace.(Ref(psi), 1:length(psi)) .==\n left_virtualspace.(Ref(psi′), 1:length(psi))) && break\n psi, = find_groundstate(psi′, H, VUMPS(; tol=svalue / 5, verbosity))\n end\n\n # convergence steps\n psi, = changebonds(psi, H, SvdCut(; trscheme=truncbelow(svalue)))\n psi, = find_groundstate(psi, H,\n VUMPS(; tol=svalue, verbosity) &\n GradientGrassmann(; tol=svalue / 100, verbosity))\n\n return psi\nend\n\nH = hubbard_model(InfiniteChain(2); U, t, mu=U / 2)\npsi = InfiniteMPS(H.data.pspaces, H.data.pspaces)\npsi = compute_groundstate(psi, H)\nE = real(expectation_value(psi, H)) / 2\n@info \"\"\"\nGroundstate energy:\n * numerical: $E\n * analytic: $(hubbard_energy(U / 4) - U / 4)\n\"\"\"","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"┌ Warning: ignoring imaginary component 7.807755346263268e-6 from total weight 1.519432279920462: operator might not be hermitian?\n│ α = 0.408644890723205 + 7.807755346263268e-6im\n│ β₁ = 0.9383819653579948\n│ β₂ = 1.1229973702462615\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 8.405210114706407e-6 from total weight 2.1738960127263907: operator might not be hermitian?\n│ α = 0.27297674897930924 + 8.405210114706407e-6im\n│ β₁ = 1.1229973702462615\n│ β₂ = 1.8412453598077907\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.0370915492496913e-5 from total weight 2.827735337332976: operator might not be hermitian?\n│ α = 1.1648009191635844 + 1.0370915492496913e-5im\n│ β₁ = 1.8412453598077907\n│ β₂ = 1.8025375118415796\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 9.968737032850505e-6 from total weight 2.317491673659234: operator might not be hermitian?\n│ α = 0.7920195374082283 + 9.968737032850505e-6im\n│ β₁ = 1.8025375118415796\n│ β₂ = 1.2224284143245874\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 7.730765716737475e-6 from total weight 1.931808439300787: operator might not be hermitian?\n│ α = 0.4590455194221491 + 7.730765716737475e-6im\n│ β₁ = 1.2224284143245874\n│ β₂ = 1.4236677382887843\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 9.461798323513737e-6 from total weight 1.885442422423453: operator might not be hermitian?\n│ α = 0.7494644422442023 + 9.461798323513737e-6im\n│ β₁ = 1.4236677382887843\n│ β₂ = 0.9830393425248946\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.4794589075523001e-5 from total weight 1.7036029158608066: operator might not be hermitian?\n│ α = 0.8543239115625937 + 1.4794589075523001e-5im\n│ β₁ = 0.9830393425248946\n│ β₂ = 1.0981926970669473\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.4779092975814034e-5 from total weight 1.801371752899485: operator might not be hermitian?\n│ α = 0.49812454899961545 + 1.4779092975814034e-5im\n│ β₁ = 1.0981926970669473\n│ β₂ = 1.3382021243887245\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.5082805806504451e-5 from total weight 2.3893902682891692: operator might not be hermitian?\n│ α = 1.2559157134638745 + 1.5082805806504451e-5im\n│ β₁ = 1.3382021243887245\n│ β₂ = 1.5300577273173481\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.4763764194347662e-5 from total weight 2.1971628324934835: operator might not be hermitian?\n│ α = 0.5374925927117064 + 1.4763764194347662e-5im\n│ β₁ = 1.5300577273173481\n│ β₂ = 1.482413429556458\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.6812044682155275e-5 from total weight 2.518373809924349: operator might not be hermitian?\n│ α = 1.6677501130681405 + 1.6812044682155275e-5im\n│ β₁ = 1.482413429556458\n│ β₂ = 1.1675900952226779\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.1656237645502748e-5 from total weight 1.836376541200128: operator might not be hermitian?\n│ α = 0.8424638093750539 + 1.1656237645502748e-5im\n│ β₁ = 1.1675900952226779\n│ β₂ = 1.1398538943063923\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.017848068659774e-5 from total weight 1.5505038790334096: operator might not be hermitian?\n│ α = 0.5675363971143528 + 1.017848068659774e-5im\n│ β₁ = 1.1398538943063923\n│ β₂ = 0.8847021060103001\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 8.048645567207413e-6 from total weight 1.50620841149816: operator might not be hermitian?\n│ α = 0.7404925865623019 + 8.048645567207413e-6im\n│ β₁ = 0.8847021060103001\n│ β₂ = 0.9683164212540453\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.2039057236130912e-5 from total weight 1.6744528808996058: operator might not be hermitian?\n│ α = 0.9406358537567846 + 1.2039057236130912e-5im\n│ β₁ = 0.9683164212540453\n│ β₂ = 0.9906361335854118\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.416432382847499e-5 from total weight 1.8325177435853954: operator might not be hermitian?\n│ α = 1.5919932470890588 + 1.416432382847499e-5im\n│ β₁ = 0.646450554019812\n│ β₂ = 0.6370089974129052\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.4532453500901155e-5 from total weight 1.6446897126802875: operator might not be hermitian?\n│ α = 1.2841210428311594 + 1.4532453500901155e-5im\n│ β₁ = 0.6370089974129052\n│ β₂ = 0.8063851036312584\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.3416927348061658e-5 from total weight 1.521631679409698: operator might not be hermitian?\n│ α = 1.1434117013792926 + 1.3416927348061658e-5im\n│ β₁ = 0.8063851036312584\n│ β₂ = 0.5980933985538383\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.2158232090938442e-5 from total weight 1.5502040087386693: operator might not be hermitian?\n│ α = 1.2769345460168038 + 1.2158232090938442e-5im\n│ β₁ = 0.5980933985538383\n│ β₂ = 0.6440923228519313\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.0742972417238095e-5 from total weight 1.1117183071326222: operator might not be hermitian?\n│ α = 0.7297689321905663 + 1.0742972417238095e-5im\n│ β₁ = 0.6440923228519313\n│ β₂ = 0.5371219410441697\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 1.2433513098084048e-5 from total weight 1.9525016713436172: operator might not be hermitian?\n│ α = 1.8430983693388352 + 1.2433513098084048e-5im\n│ β₁ = 0.5371219410441697\n│ β₂ = 0.35602134463329077\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 6.78403706365714e-6 from total weight 1.66019539364691: operator might not be hermitian?\n│ α = 1.6215725537902703 + 6.78403706365714e-6im\n│ β₁ = 0.35602134463329077\n│ β₂ = 2.4874957371557414e-21\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 4.420632150038684e-6 from total weight 1.5700523001952702: operator might not be hermitian?\n│ α = 0.5239626218600479 + 4.420632150038684e-6im\n│ β₁ = 0.8717165441447274\n│ β₂ = 1.1960926648411632\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 3.601080797851694e-6 from total weight 2.0345126979997414: operator might not be hermitian?\n│ α = 0.426288757350352 + 3.601080797851694e-6im\n│ β₁ = 1.1960926648411632\n│ β₂ = 1.589616982414027\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 4.19976496114291e-6 from total weight 2.0484867724942677: operator might not be hermitian?\n│ α = 0.5775202889239899 + 4.19976496114291e-6im\n│ β₁ = 1.589616982414027\n│ β₂ = 1.1558054430432567\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 3.640311513675165e-6 from total weight 1.6360531190605416: operator might not be hermitian?\n│ α = 0.07558256739995857 + 3.640311513675165e-6im\n│ β₁ = 1.1558054430432567\n│ β₂ = 1.155452665283735\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 2.5033396548745923e-6 from total weight 1.871835891862734: operator might not be hermitian?\n│ α = 0.0559770634887897 + 2.5033396548745923e-6im\n│ β₁ = 1.155452665283735\n│ β₂ = 1.4715859854969997\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 2.6430412059241792e-6 from total weight 1.9064423191724782: operator might not be hermitian?\n│ α = 0.22488899189261616 + 2.6430412059241792e-6im\n│ β₁ = 1.4715859854969997\n│ β₂ = 1.1909584144457346\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 3.0997451073364046e-6 from total weight 1.6098273943138954: operator might not be hermitian?\n│ α = -0.18729098151608492 + 3.0997451073364046e-6im\n│ β₁ = 1.1909584144457346\n│ β₂ = 1.0668103780792073\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 3.8430909460249185e-6 from total weight 1.4501419373064255: operator might not be hermitian?\n│ α = -0.1756932876023117 + 3.8430909460249185e-6im\n│ β₁ = 1.0668103780792073\n│ β₂ = 0.9664156063692543\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 4.737672034002549e-6 from total weight 1.6650488951358715: operator might not be hermitian?\n│ α = 0.3642826605632644 + 4.737672034002549e-6im\n│ β₁ = 0.9664156063692543\n│ β₂ = 1.3060347783078508\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 4.0463279378337436e-6 from total weight 1.809699994321244: operator might not be hermitian?\n│ α = 0.4792707902891812 + 4.0463279378337436e-6im\n│ β₁ = 1.3060347783078508\n│ β₂ = 1.1574051740232911\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 5.543573193336759e-6 from total weight 1.4866339796856036: operator might not be hermitian?\n│ α = -0.07750469979704211 + 5.543573193336759e-6im\n│ β₁ = 1.1574051740232911\n│ β₂ = 0.9297778628138067\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 4.437985246134174e-6 from total weight 1.2526483933898018: operator might not be hermitian?\n│ α = 0.14550455114158256 + 4.437985246134174e-6im\n│ β₁ = 0.9297778628138067\n│ β₂ = 0.826722171506748\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 3.479709569688405e-6 from total weight 1.2697888613350266: operator might not be hermitian?\n│ α = 0.5191679357429178 + 3.479709569688405e-6im\n│ β₁ = 0.826722171506748\n│ β₂ = 0.8120091489595418\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 4.309653650808043e-6 from total weight 1.1619455195047197: operator might not be hermitian?\n│ α = -0.03585372914963633 + 4.309653650808043e-6im\n│ β₁ = 0.8120091489595418\n│ β₂ = 0.8303451345016631\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 3.3876945127499225e-6 from total weight 1.5863366135243355: operator might not be hermitian?\n│ α = 0.10179881851551338 + 3.3876945127499225e-6im\n│ β₁ = 0.8303451345016631\n│ β₂ = 1.3478233599231915\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 2.4515236037372934e-6 from total weight 1.6563602496932375: operator might not be hermitian?\n│ α = 0.2942178379823914 + 2.4515236037372934e-6im\n│ β₁ = 1.3478233599231915\n│ β₂ = 0.9166991496757051\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 4.820295013530096e-6 from total weight 1.380724305754562: operator might not be hermitian?\n│ α = 0.05175251300778737 + 4.820295013530096e-6im\n│ β₁ = 0.9166991496757051\n│ β₂ = 1.0312050983482381\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 4.880373024380991e-6 from total weight 1.4083502233166574: operator might not be hermitian?\n│ α = 0.4869437492653818 + 4.880373024380991e-6im\n│ β₁ = 1.0312050983482381\n│ β₂ = 0.8264092095833846\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 2.4708468538414685e-6 from total weight 1.3679952162146665: operator might not be hermitian?\n│ α = 0.3365703089542389 + 2.4708468538414685e-6im\n│ β₁ = 0.8264092095833846\n│ β₂ = 1.0369084612569812\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 4.845211715443637e-6 from total weight 1.9535857899234355: operator might not be hermitian?\n│ α = 1.648360457701184 + 4.845211715443637e-6im\n│ β₁ = 0.697422390792335\n│ β₂ = 0.782947794476709\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 2.3929177318110506e-6 from total weight 1.6460071714797488: operator might not be hermitian?\n│ α = 1.0014749966958667 + 2.3929177318110506e-6im\n│ β₁ = 0.782947794476709\n│ β₂ = 1.0456482155457962\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 3.4887348726309053e-6 from total weight 2.297126647611539: operator might not be hermitian?\n│ α = 1.9544737849469627 + 3.4887348726309053e-6im\n│ β₁ = 1.0456482155457962\n│ β₂ = 0.602862230062428\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 3.893633891298431e-6 from total weight 1.51990288741988: operator might not be hermitian?\n│ α = 1.286400942835462 + 3.893633891298431e-6im\n│ β₁ = 0.602862230062428\n│ β₂ = 0.5402171165451158\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 4.977927394594905e-6 from total weight 1.3906451753871552: operator might not be hermitian?\n│ α = 1.2402536191060138 + 4.977927394594905e-6im\n│ β₁ = 0.5402171165451158\n│ β₂ = 0.3222272972435882\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 5.626639152545021e-6 from total weight 1.5689756337692407: operator might not be hermitian?\n│ α = 1.4337246333918294 + 5.626639152545021e-6im\n│ β₁ = 0.3222272972435882\n│ β₂ = 0.5498070423762209\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n┌ Warning: ignoring imaginary component 2.929774392332547e-6 from total weight 1.435283449174042: operator might not be hermitian?\n│ α = 1.3258019443408067 + 2.929774392332547e-6im\n│ β₁ = 0.5498070423762209\n│ β₂ = 1.8809234760612477e-21\n└ @ KrylovKit ~/.julia/packages/KrylovKit/xccMN/src/factorizations/lanczos.jl:170\n[ Info: CG: converged after 74 iterations: f = -3.630108220530, ‖∇f‖ = 8.8587e-06\n┌ Info: Groundstate energy:\n│ * numerical: -1.8150541102648536\n└ * analytic: -2.190038374277775\n","category":"page"},{"location":"examples/quantum1d/6.hubbard/#Symmetries","page":"Hubbard chain at half filling","title":"Symmetries","text":"","category":"section"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"The Hubbard model has a rich symmetry structure, which can be exploited to speed up simulations. Apart from the fermionic parity, the model also has a U(1) particle number symmetry, along with a SU(2) spin symmetry. Explicitly imposing these symmetries on the tensors can greatly reduce the computational cost of the simulation.","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"Naively imposing these symmetries however, is not compatible with our desire to work at half-filling. By construction, imposing symmetries restricts the optimization procedure to a single symmetry sector, which is the trivial sector. In order to work at half-filling, we need to effectively inject one particle per site. In MPSKit, this is achieved by the add_physical_charge function, which shifts the physical spaces of the tensors to the desired charge sector.","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"H_u1_su2 = hubbard_model(ComplexF64, U1Irrep, SU2Irrep, InfiniteChain(2); U, t, mu=U / 2);\ncharges = fill(FermionParity(1) ⊠ U1Irrep(1) ⊠ SU2Irrep(0), 2);\nH_u1_su2 = MPSKit.add_physical_charge(H_u1_su2, dual.(charges));\n\npspaces = H_u1_su2.data.pspaces\nvspaces = [oneunit(eltype(pspaces)), first(pspaces)]\npsi = InfiniteMPS(pspaces, vspaces)\npsi = compute_groundstate(psi, H_u1_su2; svalue=1e-3, expansionfactor=1 / 3,\n expansioniter=20)\nE = real(expectation_value(psi, H_u1_su2)) / 2\n@info \"\"\"\nGroundstate energy:\n * numerical: $E\n * analytic: $(hubbard_energy(U / 4) - U / 4)\n\"\"\"","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"[ Info: CG: converged after 51 iterations: f = -4.379995918984, ‖∇f‖ = 9.4208e-06\n┌ Info: Groundstate energy:\n│ * numerical: -2.189997959491911\n└ * analytic: -2.190038374277775\n","category":"page"},{"location":"examples/quantum1d/6.hubbard/#Excitations","page":"Hubbard chain at half filling","title":"Excitations","text":"","category":"section"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"Because of the integrability, it is known that the Hubbard model has a rich excitation spectrum. The elementary excitations are known as spinons and holons, which are domain walls in the spin and charge sectors, respectively. The fact that the spin and charge sectors are separate is a phenomenon known as spin-charge separation.","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"The domain walls can be constructed by noticing that there are two equivalent groundstates, which differ by a translation over a single site. In other words, the groundstates are psi_AB and\\psi_{BA} whereAandB`` are the two sites. These excitations can be constructed as follows:","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"alg = QuasiparticleAnsatz(; tol=1e-3)\nmomenta = range(-π, π; length=33)\npsi_AB = psi\nenvs_AB = environments(psi_AB, H_u1_su2);\npsi_BA = circshift(psi, 1)\nenvs_BA = environments(psi_BA, H_u1_su2);\n\nspinon_charge = FermionParity(0) ⊠ U1Irrep(0) ⊠ SU2Irrep(1 // 2)\nE_spinon, ϕ_spinon = excitations(H_u1_su2, alg, momenta,\n psi_AB, envs_AB, psi_BA, envs_BA;\n sector=spinon_charge, num=1);\n\nholon_charge = FermionParity(1) ⊠ U1Irrep(1) ⊠ SU2Irrep(0)\nE_holon, ϕ_holon = excitations(H_u1_su2, alg, momenta,\n psi_AB, envs_AB, psi_BA, envs_BA;\n sector=holon_charge, num=1);","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"[ Info: Found excitations for momentum = 1.5707963267948966\n[ Info: Found excitations for momentum = -1.5707963267948966\n[ Info: Found excitations for momentum = -2.945243112740431\n[ Info: Found excitations for momentum = -3.141592653589793\n[ Info: Found excitations for momentum = -0.19634954084936207\n[ Info: Found excitations for momentum = 3.141592653589793\n[ Info: Found excitations for momentum = 2.748893571891069\n[ Info: Found excitations for momentum = -0.39269908169872414\n[ Info: Found excitations for momentum = -2.748893571891069\n[ Info: Found excitations for momentum = 2.945243112740431\n[ Info: Found excitations for momentum = -2.552544031041707\n[ Info: Found excitations for momentum = 1.9634954084936207\n[ Info: Found excitations for momentum = 0.0\n[ Info: Found excitations for momentum = 0.19634954084936207\n[ Info: Found excitations for momentum = 2.552544031041707\n[ Info: Found excitations for momentum = -1.7671458676442586\n[ Info: Found excitations for momentum = -1.3744467859455345\n[ Info: Found excitations for momentum = 0.39269908169872414\n[ Info: Found excitations for momentum = -2.356194490192345\n[ Info: Found excitations for momentum = 0.5890486225480862\n[ Info: Found excitations for momentum = -0.5890486225480862\n[ Info: Found excitations for momentum = 1.7671458676442586\n[ Info: Found excitations for momentum = 0.7853981633974483\n[ Info: Found excitations for momentum = -0.9817477042468103\n[ Info: Found excitations for momentum = 2.356194490192345\n[ Info: Found excitations for momentum = 1.3744467859455345\n[ Info: Found excitations for momentum = -0.7853981633974483\n[ Info: Found excitations for momentum = -1.9634954084936207\n[ Info: Found excitations for momentum = -1.1780972450961724\n[ Info: Found excitations for momentum = 0.9817477042468103\n[ Info: Found excitations for momentum = 2.1598449493429825\n[ Info: Found excitations for momentum = -2.1598449493429825\n[ Info: Found excitations for momentum = 1.1780972450961724\n[ Info: Found excitations for momentum = 0.0\n[ Info: Found excitations for momentum = -3.141592653589793\n[ Info: Found excitations for momentum = 3.141592653589793\n[ Info: Found excitations for momentum = -1.3744467859455345\n[ Info: Found excitations for momentum = 1.3744467859455345\n[ Info: Found excitations for momentum = 2.1598449493429825\n[ Info: Found excitations for momentum = -1.7671458676442586\n[ Info: Found excitations for momentum = 1.7671458676442586\n[ Info: Found excitations for momentum = -1.5707963267948966\n[ Info: Found excitations for momentum = 1.5707963267948966\n[ Info: Found excitations for momentum = 1.1780972450961724\n[ Info: Found excitations for momentum = -0.39269908169872414\n[ Info: Found excitations for momentum = 0.7853981633974483\n[ Info: Found excitations for momentum = -2.1598449493429825\n[ Info: Found excitations for momentum = -2.552544031041707\n[ Info: Found excitations for momentum = 1.9634954084936207\n[ Info: Found excitations for momentum = 0.9817477042468103\n[ Info: Found excitations for momentum = -1.1780972450961724\n[ Info: Found excitations for momentum = -0.9817477042468103\n[ Info: Found excitations for momentum = 2.748893571891069\n[ Info: Found excitations for momentum = -2.748893571891069\n[ Info: Found excitations for momentum = -1.9634954084936207\n[ Info: Found excitations for momentum = 2.552544031041707\n[ Info: Found excitations for momentum = 0.5890486225480862\n[ Info: Found excitations for momentum = -2.356194490192345\n[ Info: Found excitations for momentum = -0.7853981633974483\n[ Info: Found excitations for momentum = -2.945243112740431\n[ Info: Found excitations for momentum = 2.945243112740431\n[ Info: Found excitations for momentum = -0.5890486225480862\n[ Info: Found excitations for momentum = -0.19634954084936207\n[ Info: Found excitations for momentum = 0.19634954084936207\n[ Info: Found excitations for momentum = 0.39269908169872414\n[ Info: Found excitations for momentum = 2.356194490192345\n","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"Again, we can compare the numerical results to the analytic solution. Here, the formulae for the excitation energies are expressed in terms of dressed momenta:","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"function spinon_momentum(Λ, u; rtol=1e-12)\n integrandum(ω) = besselj0(ω) * sin(ω * Λ) / ω / cosh(ω * u)\n return π / 2 - quadgk(integrandum, 0, Inf; rtol=rtol)[1]\nend\nfunction spinon_energy(Λ, u; rtol=1e-12)\n integrandum(ω) = besselj1(ω) * cos(ω * Λ) / ω / cosh(ω * u)\n return 2 * quadgk(integrandum, 0, Inf; rtol=rtol)[1]\nend\n\nfunction holon_momentum(k, u; rtol=1e-12)\n integrandum(ω) = besselj0(ω) * sin(ω * sin(k)) / ω / (1 + exp(2u * abs(ω)))\n return π / 2 - k - 2 * quadgk(integrandum, 0, Inf; rtol=rtol)[1]\nend\nfunction holon_energy(k, u; rtol=1e-12)\n integrandum(ω) = besselj1(ω) * cos(ω * sin(k)) * exp(-ω * u) / ω / cosh(ω * u)\n return 2 * cos(k) + 2u + 2 * quadgk(integrandum, 0, Inf; rtol=rtol)[1]\nend\n\nΛs = range(-10, 10; length=51)\nP_spinon_analytic = rem2pi.(spinon_momentum.(Λs, U / 4), RoundNearest)\nE_spinon_analytic = spinon_energy.(Λs, U / 4)\nI_spinon = sortperm(P_spinon_analytic)\nP_spinon_analytic = P_spinon_analytic[I_spinon]\nE_spinon_analytic = E_spinon_analytic[I_spinon]\nP_spinon_analytic = [reverse(-P_spinon_analytic); P_spinon_analytic]\nE_spinon_analytic = [reverse(E_spinon_analytic); E_spinon_analytic];\n\nks = range(0, 2π; length=51)\nP_holon_analytic = rem2pi.(holon_momentum.(ks, U / 4), RoundNearest)\nE_holon_analytic = holon_energy.(ks, U / 4)\nI_holon = sortperm(P_holon_analytic)\nP_holon_analytic = P_holon_analytic[I_holon]\nE_holon_analytic = E_holon_analytic[I_holon];\n\np = let p_excitations = plot(; xaxis=\"momentum\", yaxis=\"energy\")\n scatter!(p_excitations, momenta, real(E_spinon); label=\"spinon\")\n plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label=\"spinon (analytic)\")\n\n scatter!(p_excitations, momenta, real(E_holon); label=\"holon\")\n plot!(p_excitations, P_holon_analytic, E_holon_analytic; label=\"holon (analytic)\")\n\n p_excitations\nend","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"The plot shows some discrepancies between the numerical and analytic results. First and foremost, we must realize that in the thermodynamic limit, the momentum of a domain wall is actually not well-defined. Concretely, only the difference in momentum between the two groundstates is well-defined, as we can always shift the momentum by multiplying one of the groundstates by a phase. Here, we can fix this shift by realizing that our choice of shifting the groundstates by a single site, differs from the formula by a factor pi2.","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"momenta_shifted = rem2pi.(momenta .- π / 2, RoundNearest)\np = let p_excitations = plot(; xaxis=\"momentum\", yaxis=\"energy\", xlims=(-π, π))\n scatter!(p_excitations, momenta_shifted, real(E_spinon); label=\"spinon\")\n plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label=\"spinon (analytic)\")\n\n scatter!(p_excitations, momenta_shifted, real(E_holon); label=\"holon\")\n plot!(p_excitations, P_holon_analytic, E_holon_analytic; label=\"holon (analytic)\")\n\n p_excitations\nend","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"The second discrepancy is that while the spinon dispersion is well-reproduced, the holon dispersion is not. This is due to the fact that the excitation ansatz captures the lowest-energy excitation, and not the elementary single-particle excitation. To make this explicit, we can consider the scattering states comprising of a holon and two spinons. If these are truly scattering states, the energy of the scattering state should be the sum of the energies of the individual excitations, and the momentum is the sum of the momenta. Thus, we can find the lowest-energy scattering states by minimizing the energy over the combination of momenta for the constituent elementary excitations.","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"holon_dispersion_itp = linear_interpolation(P_holon_analytic, E_holon_analytic;\n extrapolation_bc=Line())\nspinon_dispersion_itp = linear_interpolation(P_spinon_analytic, E_spinon_analytic;\n extrapolation_bc=Line())\nfunction scattering_energy(p1, p2, p3)\n p1, p2, p3 = rem2pi.((p1, p2, p3), RoundNearest)\n return holon_dispersion_itp(p1) + spinon_dispersion_itp(p2) + spinon_dispersion_itp(p3)\nend;\n\nE_scattering_min = map(momenta_shifted) do p\n e = Inf\n for i in 1:10 # repeat for stability\n res = optimize((rand(2) .* (2π) .- π)) do (p₁, p₂)\n p₃ = p - p₁ - p₂\n return scattering_energy(p₁, p₂, p₃)\n end\n\n e = min(Optim.minimum(res), e)\n end\n return e\nend\nE_scattering_max = map(momenta_shifted) do p\n e = -Inf\n for i in 1:10 # repeat for stability\n res = optimize((rand(Float64, 2) .* (2π) .- π)) do (p₁, p₂)\n p₃ = p - p₁ - p₂\n return -scattering_energy(p₁, p₂, p₃)\n end\n\n e = max(-Optim.minimum(res), e)\n end\n return e\nend;\n\np = let p_excitations = plot(; xaxis=\"momentum\", yaxis=\"energy\", xlims=(-π, π),\n ylims=(-0.1, 5))\n scatter!(p_excitations, momenta_shifted, real(E_spinon); label=\"spinon\")\n plot!(p_excitations, P_spinon_analytic, E_spinon_analytic; label=\"spinon (analytic)\")\n\n scatter!(p_excitations, momenta_shifted, real(E_holon); label=\"holon\")\n plot!(p_excitations, P_holon_analytic, E_holon_analytic; label=\"holon (analytic)\")\n\n I = sortperm(momenta_shifted)\n plot!(p_excitations, momenta_shifted[I], E_scattering_min[I]; label=\"scattering states\",\n fillrange=E_scattering_max[I], fillalpha=0.3, fillstyle=:x)\n\n p_excitations\nend","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"","category":"page"},{"location":"examples/quantum1d/6.hubbard/","page":"Hubbard chain at half filling","title":"Hubbard chain at half filling","text":"This page was generated using Literate.jl.","category":"page"},{"location":"man/operators/#um_operators","page":"Operators","title":"Operators","text":"","category":"section"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"In analogy to how we can define matrix product states as a contraction of local tensors, a similar construction exist for operators. To that end, a Matrix Product Operator (MPO) is nothing more than a collection of local MPOTensor objects, contracted along a line. Again, we can distinguish between finite and infinite operators, with the latter being represented by a periodic array of MPO tensors.","category":"page"},{"location":"man/operators/#FiniteMPO","page":"Operators","title":"FiniteMPO","text":"","category":"section"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"Starting off with the simplest case, a basic finite MPO is a vector of MPOTensor objects. These objects can be created either directly from a vector of MPOTensors, or starting from a dense operator (a subtype of AbstractTensorMap{S,N,N}), which is then decomposed into a product of local tensors.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"(Image: )","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"using TensorKit, MPSKit","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"S_x = TensorMap(ComplexF64[0 1; 1 0], ℂ^2 ← ℂ^2)\nS_z = TensorMap(ComplexF64[1 0; 0 -1], ℂ^2 ← ℂ^2)\nO_xzx = FiniteMPO(S_x ⊗ S_x ⊗ S_x);","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"The individual tensors are accessible via regular indexing. Note that the tensors are internally converted to the MPOTensor objects, thus having four indices. In this specific case, the left- and right virtual spaces are trivial, but this is not a requirement.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"O_xzx[1]","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"warning: Warning\nThe local tensors are defined only up to a gauge transformation of the virtual spaces. This means that the tensors are not uniquely defined, and special care must be taken when comparing MPOs on an element-wise basis.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"For convenience, a number of utility functions are defined for probing the structure of the constructed MPO. For example, the spaces can be queried as follows:","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"left_virtualspace(O_xzx, 2)\nright_virtualspace(O_xzx, 2)\nphysicalspace(O_xzx, 2)","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"MPOs also support a range of linear algebra operations, such as addition, subtraction and multiplication, either among themselves or with a finite MPS. Here, it is important to note that these operations will increase the virtual dimension of the resulting MPO or MPS, and this naive application is thus typically not optimal. For approximate operations that do not increase the virtual dimension, the more advanced algorithms in the um_algorithms sections should be used.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"O_xzx² = O_xzx * O_xzx\nprintln(\"Virtual dimension of O_xzx²: \", left_virtualspace(O_xzx², 2))\nO_xzx_sum = 0.1 * O_xzx + O_xzx²\nprintln(\"Virtual dimension of O_xzx_sum: \", left_virtualspace(O_xzx_sum, 2))","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"O_xzx_sum * FiniteMPS(3, ℂ^2, ℂ^4)","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"note: Note\nThe virtual spaces of the resulting MPOs typically grow exponentially with the number of multiplications. Nevertheless, a number of optimizations are in place that make sure that the virtual spaces do not increase past the maximal virtual space that is dictated by the requirement of being full-rank tensors.","category":"page"},{"location":"man/operators/#MPOHamiltonian","page":"Operators","title":"MPOHamiltonian","text":"","category":"section"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"We can also represent quantum Hamiltonians in the same form. This is done by converting a sum of local operators into a single MPO operator. The resulting operator has a very specific structure, and is often referred to as a Jordan block MPO.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"This object can be constructed as an MPO by using the MPOHamiltonian constructor, which takes two crucial pieces of information:","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"An array of VectorSpace objects, which determines the local Hilbert spaces of the system. The resulting MPO will snake through the array in linear indexing order.\nA set of local operators, which are characterised by a number of indices that specify on which sites the operator acts, along with an operator to define the action. These are specified as a inds => operator pairs, or any other iterable collection thereof. The inds should be tuples of valid indices for the array of VectorSpace objects, or a single integer for single-site operators.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"As a concrete example, we consider the Transverse-field Ising model defined by the Hamiltonian","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"H = -J sum_langle i j rangle X_i X_j - h sum_j Z_j","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"J = 1.0\nh = 0.5\nchain = fill(ℂ^2, 3) # a finite chain of 4 sites, each with a 2-dimensional Hilbert space\nsingle_site_operators = [1 => -h * S_z, 2 => -h * S_z, 3 => -h * S_z]\ntwo_site_operators = [(1, 2) => -J * S_x ⊗ S_x, (2, 3) => -J * S_x ⊗ S_x]\nH_ising = MPOHamiltonian(chain, single_site_operators..., two_site_operators...);","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"Various alternative constructions are possible, such as using a Dict with key-value pairs that specify the operators, or using generator expressions to simplify the construction.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"H_ising′ = -J * MPOHamiltonian(chain,\n (i, i + 1) => S_x ⊗ S_x for i in 1:(length(chain) - 1)) -\n h * MPOHamiltonian(chain, i => S_z for i in 1:length(chain))\nisapprox(H_ising, H_ising′; atol=1e-6)","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"Note that this construction is not limited to nearest-neighbour interactions, or 1D systems. In particular, it is possible to construct quasi-1D realisations of 2D systems, by using different arrays of VectorSpace objects. For example, the 2D Ising model on a square lattice can be constructed as follows:","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"square = fill(ℂ^2, 3, 3) # a 3x3 square lattice\noperators = Dict()\n\nlocal_operators = Dict()\nfor I in eachindex(square)\n local_operators[(I,)] = -h * S_z # single site operators still require tuples of indices\nend\n\n# horizontal and vertical interactions are easier using Cartesian indices\nhorizontal_operators = Dict()\nI_horizontal = CartesianIndex(0, 1)\nfor I in eachindex(IndexCartesian(), square)\n if I[2] < size(square, 2)\n horizontal_operators[(I, I + I_horizontal)] = -J * S_x ⊗ S_x\n end\nend\n\nvertical_operators = Dict()\nI_vertical = CartesianIndex(1, 0)\nfor I in eachindex(IndexCartesian(), square)\n if I[1] < size(square, 1)\n vertical_operators[(I, I + I_vertical)] = -J * S_x ⊗ S_x\n end\nend\n\nH_ising_2d = MPOHamiltonian(square, local_operators) +\n MPOHamiltonian(square, horizontal_operators) +\n MPOHamiltonian(square, vertical_operators);","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"There are various utility functions available for constructing more advanced lattices, for which the lattices section should be consulted.","category":"page"},{"location":"man/operators/#Expert-mode","page":"Operators","title":"Expert mode","text":"","category":"section"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"The MPOHamiltonian constructor is in fact an automated way of constructing the aforementioned Jordan block MPO. In its most general form, the matrix W takes on the form of the following block matrix:","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"beginpmatrix\n1 C D \n0 A B \n0 0 1\nendpmatrix","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"which generates all single-site local operators D, all two-site operators CB, three-site operators CAB, and so on. Additionally, this machinery can also be used to construct interaction that are of (exponentially decaying) infinite range, and to approximate power-law interactions.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"In order to illustrate this, consider the following explicit example of the Transverse-field Ising model:","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"W = beginpmatrix\n1 X -hZ \n0 0 -JX \n0 0 1\nendpmatrix","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"If we add in the left and right boundary vectors","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"v_L = beginpmatrix\n1 0 0\nendpmatrix\n qquad \nv_R = beginpmatrix\n0 0 1\nendpmatrix","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"One can easily check that the Hamiltonian on N sites is given by the contraction","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"H = V_L W^otimes N V_R","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"We can even verify this symbolically:","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"using Symbolics\nL = 4\n# generate W matrices\n@variables A[1:L] B[1:L] C[1:L] D[1:L]\nWs = map(1:L) do l\n return [1 C[l] D[l]\n 0 A[l] B[l]\n 0 0 1]\nend\n\n# generate boundary vectors\nVₗ = [1, 0, 0]'\nVᵣ = [0, 0, 1]\n\n# expand the MPO\nexpand(Vₗ * prod(Ws) * Vᵣ)","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"The MPOHamiltonian constructor can also be used to construct the operator from this most general form, by supplying a 3-dimensional array W to the constructor. Here, the first dimension specifies the site in the unit cell, the second dimension specifies the row of the matrix, and the third dimension specifies the column of the matrix.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"data = Array{Any,3}(missing, 1, 3, 3) # missing is interpreted as zero\ndata[1, 1, 1] = id(Matrix{ComplexF64}, ℂ^2)\ndata[1, 3, 3] = 1 # regular numbers are interpreted as identity operators\ndata[1, 1, 2] = -J * S_x\ndata[1, 2, 3] = S_x\ndata[1, 1, 3] = -h * S_z\ndata_range = repeat(data, 4, 1, 1) # make 4 sites long\nH_ising″ = MPOHamiltonian(data_range)","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"MPSKit will then automatically attach the correct boundary vectors to the Hamiltonian whenever this is required.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"note: Note\nWhile the above example can be constructed from building blocks that are strictly local operators, i.e. TensorMaps with a single ingoing and outgoing index. This is not always the case, especially when symmetries are involved. In those cases, the elements of the matrix W have additional virtual legs that are contracted between different sites. As such, indexing an MPOHamiltonian object will result in a TensorMap with four legs.","category":"page"},{"location":"man/operators/#Working-with-MPOHamiltonian-objects","page":"Operators","title":"Working with MPOHamiltonian objects","text":"","category":"section"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"warning: Warning\nThis part is still a work in progress","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"Because of the discussion above, the MPOHamiltonian object is in fact just a FiniteMPO, with some additional structure. This means that similar operations and properties are available, such as the virtual spaces, or the individual tensors. However, the block structure of the operator means that now the virtual spaces are not just a single space, but a collection (direct sum) of spaces, one for each row/column.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"","category":"page"},{"location":"man/operators/#DenseMPO","page":"Operators","title":"DenseMPO","text":"","category":"section"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"This operator is used for statistical physics problems. It is simply a periodic array of mpo tensors.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"Can be created using","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"DenseMPO(t::AbstractArray{T,1}) where T<:MPOTensor","category":"page"},{"location":"man/operators/#SparseMPO","page":"Operators","title":"SparseMPO","text":"","category":"section"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"SparseMPO is similar to a DenseMPO, in that it again represents an mpo tensor, periodically repeated. However this type keeps track of all internal zero blocks, allowing for a more efficient representation of certain operators (such as time evolution operators and quantum hamiltonians). You can convert a sparse mpo to a densempo, but the converse does not hold.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"Indexing a SparseMPO returns a SparseMPOSlice object, which has 3 fields","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"MPSKit.SparseMPOSlice","category":"page"},{"location":"man/operators/#MPSKit.SparseMPOSlice","page":"Operators","title":"MPSKit.SparseMPOSlice","text":"SparseMPOSlice{S,T,E} <: AbstractArray{T,2}\n\nA view of a sparse MPO at a single position.\n\nFields\n\nOs::AbstractMatrix{Union{T,E}}: matrix of operators.\ndomspaces::AbstractVector{S}: list of left virtual spaces.\nimspaces::AbstractVector{S}: list of right virtual spaces.\npspace::S: physical space.\n\n\n\n\n\n","category":"type"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"When indexing a SparseMPOSlice at index [j, k] (or equivalently SparseMPO[i][j, k]), the code looks up the corresponding field in Os[j, k]. Either that element is a tensormap, in which case it gets returned. If it equals zero(E), then we return a tensormap","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"domspaces[j] * pspace ← pspace * imspaces[k]","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"with norm zero. If the element is a nonzero number, then implicitly we have the identity operator there (multiplied by that element).","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"The idea here is that you don't have to worry about the underlying structure, you can just index into a sparsempo as if it is a vector of matrices. Behind the scenes we then optimize certain contractions by using the sparsity structure.","category":"page"},{"location":"man/operators/","page":"Operators","title":"Operators","text":"SparseMPO are always assumed to be periodic in the first index (position). In this way, we can both represent periodic infinite mpos and place dependent finite mpos.","category":"page"},{"location":"#MPSKit.jl","page":"Home","title":"MPSKit.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Efficient and versatile tools for working with matrix product states","category":"page"},{"location":"#Table-of-contents","page":"Home","title":"Table of contents","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Pages = [\"man/intro.md\",\"man/conventions.md\",\"man/states.md\",\"man/operators.md\",\"man/algorithms.md\",\"man/parallelism.md\", \"man/lattices.md\"]\nDepth = 1","category":"page"},{"location":"#Installation","page":"Home","title":"Installation","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"MPSKit.jl is a part of the general registry, and can be installed via the package manager as:","category":"page"},{"location":"","page":"Home","title":"Home","text":"pkg> add MPSKit","category":"page"},{"location":"#Key-Features","page":"Home","title":"Key Features","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Construction and manipulation of Matrix Product States (MPS)\nCalculation of observables and expectation values\nVarious optimization methods for obtaining MPS fixed points\nSupport for both finite and infinite MPS\nSupport for wide variety of symmetries, including Abelian, non-Abelian, fermionic and anyonic symmetries","category":"page"},{"location":"#Usage","page":"Home","title":"Usage","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"To get started with MPSKit, we recommend also including TensorKit.jl and MPSKitModels.jl. The former defines the tensor backend which is used throughout MPSKit, while the latter includes some common operators and models.","category":"page"},{"location":"","page":"Home","title":"Home","text":"using TensorOperations\nusing TensorKit\nusing MPSKit\nusing MPSKitModels\nusing LinearAlgebra: norm","category":"page"},{"location":"#Finite-Matrix-Product-States","page":"Home","title":"Finite Matrix Product States","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"using LinearAlgebra\nusing TensorOperations\nusing TensorKit\nusing MPSKit\nusing MPSKitModels","category":"page"},{"location":"","page":"Home","title":"Home","text":"Finite MPS are characterised by a set of tensors, one for each site, which each have 3 legs. They can be constructed by specifying the virtual spaces and the physical spaces, i.e. the dimensions of each of the legs. These are then contracted to form the MPS. In MPSKit, they are represented by FiniteMPS, which can be constructed either by passing in the tensors directly, or by specifying the dimensions of the legs.","category":"page"},{"location":"","page":"Home","title":"Home","text":"d = 2 # physical dimension\nD = 5 # virtual dimension\nL = 10 # number of sites\n\nmps = FiniteMPS(L, ComplexSpace(d), ComplexSpace(D)) # random MPS with maximal bond dimension D","category":"page"},{"location":"","page":"Home","title":"Home","text":"The FiniteMPS object then handles the gauging of the MPS, which is necessary for many of the algorithms. This is done automatically when needed, and the user can access the gauged tensors by getting and setting the AL, AR, CR/CL and AC fields, which each represent a vector of these tensors.","category":"page"},{"location":"","page":"Home","title":"Home","text":"al = mps.AL[3] # left gauged tensor of the third site\n@tensor E[a; b] := al[c, d, b] * conj(al[c, d, a])\n@show isapprox(E, id(left_virtualspace(mps, 3)))","category":"page"},{"location":"","page":"Home","title":"Home","text":"ar = mps.AR[3] # right gauged tensor of the third site\n@tensor E[a; b] := ar[a, d, c] * conj(ar[b, d, c])\n@show isapprox(E, id(right_virtualspace(mps, 2)))","category":"page"},{"location":"","page":"Home","title":"Home","text":"As the mps will be kept in a gauged form, updating a tensor will also update the gauged tensors. For example, we can set the tensor of the third site to the identity, and the gauged tensors will be updated accordingly.","category":"page"},{"location":"","page":"Home","title":"Home","text":"mps.CR[3] = id(domain(mps.CR[3]))\nprintln(mps)","category":"page"},{"location":"","page":"Home","title":"Home","text":"These objects can then be used to compute observables and expectation values. For example, the expectation value of the identity operator at the third site, which is equal to the norm of the MPS, can be computed as:","category":"page"},{"location":"","page":"Home","title":"Home","text":"N1 = LinearAlgebra.norm(mps)\nN2 = expectation_value(mps, 3 => id(physicalspace(mps, 3)))\nprintln(\"‖mps‖ = $N1\")\nprintln(\" = $N2\")","category":"page"},{"location":"","page":"Home","title":"Home","text":"Finally, the MPS can be optimized in order to determine groundstates of given Hamiltonians. Using the pre-defined models in MPSKitModels, we can construct the groundstate for the transverse field Ising model:","category":"page"},{"location":"","page":"Home","title":"Home","text":"H = transverse_field_ising(; J=1.0, g=0.5)\nfind_groundstate!(mps, H, DMRG(; maxiter=10))\nE0 = expectation_value(mps, H)\nprintln(\" = $(sum(real(E0)) / length(mps))\")","category":"page"},{"location":"#Infinite-Matrix-Product-States","page":"Home","title":"Infinite Matrix Product States","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"using LinearAlgebra\nusing TensorOperations\nusing TensorKit\nusing MPSKit\nusing MPSKitModels","category":"page"},{"location":"","page":"Home","title":"Home","text":"Similarly, an infinite MPS can be constructed by specifying the tensors for the unit cell, characterised by the spaces (dimensions) thereof.","category":"page"},{"location":"","page":"Home","title":"Home","text":"d = 2 # physical dimension\nD = 5 # virtual dimension\nmps = InfiniteMPS(d, D) # random MPS","category":"page"},{"location":"","page":"Home","title":"Home","text":"The InfiniteMPS object then handles the gauging of the MPS, which is necessary for many of the algorithms. This is done automatically upon creation of the object, and the user can access the gauged tensors by getting and setting the AL, AR, CR/CL and AC fields, which each represent a (periodic) vector of these tensors.","category":"page"},{"location":"","page":"Home","title":"Home","text":"al = mps.AL[1] # left gauged tensor of the third site\n@tensor E[a; b] := al[c, d, b] * conj(al[c, d, a])\n@show isapprox(E, id(left_virtualspace(mps, 1)))","category":"page"},{"location":"","page":"Home","title":"Home","text":"ar = mps.AR[1] # right gauged tensor of the third site\n@tensor E[a; b] := ar[a, d, c] * conj(ar[b, d, c])\n@show isapprox(E, id(right_virtualspace(mps, 2)))","category":"page"},{"location":"","page":"Home","title":"Home","text":"As regauging the MPS is not possible without recomputing all the tensors, setting a single tensor is not supported. Instead, the user should construct a new mps object with the desired tensor, which will then be gauged upon construction.","category":"page"},{"location":"","page":"Home","title":"Home","text":"als = 3 .* mps.AL\nmps = InfiniteMPS(als)","category":"page"},{"location":"","page":"Home","title":"Home","text":"These objects can then be used to compute observables and expectation values. For example, the norm of the MPS, which is equal to the expectation value of the identity operator can be computed by:","category":"page"},{"location":"","page":"Home","title":"Home","text":"N1 = norm(mps)\nN2 = expectation_value(mps, 1 => id(physicalspace(mps, 1)))\nprintln(\"‖mps‖ = $N1\")\nprintln(\" = $N2\")","category":"page"},{"location":"","page":"Home","title":"Home","text":"note: Normalization of infinite MPS\nBecause infinite MPS cannot sensibly be normalized to anything but 1, the norm of an infinite MPS is always set to be 1 at construction. If this were not the case, any observable computed from the MPS would either blow up to infinity or vanish to zero.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Finally, the MPS can be optimized in order to determine groundstates of given Hamiltonians. Using the pre-defined models in MPSKitModels, we can construct the groundstate for the transverse field Ising model:","category":"page"},{"location":"","page":"Home","title":"Home","text":"H = transverse_field_ising(; J=1.0, g=0.5)\nmps, = find_groundstate(mps, H, VUMPS(; maxiter=10))\nE0 = expectation_value(mps, H)\nprintln(\" = $(sum(real(E0)) / length(mps))\")","category":"page"},{"location":"#Additional-Resources","page":"Home","title":"Additional Resources","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"For more detailed information on the functionality and capabilities of MPSKit, refer to the Manual section, or have a look at the Examples page.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Keep in mind that the documentation is still a work in progress, and that some features may not be fully documented yet. If you encounter any issues or have questions, please check the library's issue tracker on the GitHub repository and open a new issue.","category":"page"},{"location":"#Publications-using-MPSKit","page":"Home","title":"Publications using MPSKit","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Below you can find a list of publications that have made use of MPSKit. If you have used this package and wish to have your publication added to this list, please open a pull request or an issue on the GitHub repository.","category":"page"},{"location":"","page":"Home","title":"Home","text":"R. Belyansky et al., “High-Energy Collision of Quarks and Hadrons in the Schwinger Model: From Tensor Networks to Circuit QED,” 2023, doi: 10.48550/ARXIV.2307.02522.\nL. Devos, L. Vanderstraeten, and F. Verstraete, “Haldane gap in the SU(3) [3 0 0] Heisenberg chain,” Phys. Rev. B, vol. 106, no. 15, p. 155103, Oct. 2022, doi: 10.1103/PhysRevB.106.155103.\nJ. C. Halimeh, M. V. Damme, T. V. Zache, D. Banerjee, and P. Hauke, “Achieving the quantum field theory limit in far-from-equilibrium quantum link models,” Quantum, vol. 6, p. 878, Dec. 2022, doi: 10.22331/q-2022-12-19-878.\nJ. C. Halimeh, D. Trapin, M. Van Damme, and M. Heyl, “Local measures of dynamical quantum phase transitions,” Phys. Rev. B, vol. 104, no. 7, p. 075130, Aug. 2021, doi: 10.1103/PhysRevB.104.075130.\nM. Hauru, M. Van Damme, and J. Haegeman, “Riemannian optimization of isometric tensor networks,” SciPost Physics, vol. 10, no. 2, p. 040, Feb. 2021, doi: 10.21468/SciPostPhys.10.2.040.\nM. Van Damme, R. Vanhove, J. Haegeman, F. Verstraete, and L. Vanderstraeten, “Efficient matrix product state methods for extracting spectral information on rings and cylinders,” Phys. Rev. B, vol. 104, no. 11, p. 115142, Sep. 2021, doi: 10.1103/PhysRevB.104.115142.\nM. Van Damme, T. V. Zache, D. Banerjee, P. Hauke, and J. C. Halimeh, “Dynamical quantum phase transitions in spin-S textU(1) quantum link models,” Phys. Rev. B, vol. 106, no. 24, p. 245110, Dec. 2022, doi: 10.1103/PhysRevB.106.245110.\nE. L. Weerda and M. Rizzi, “Fractional quantum Hall states with variational Projected Entangled-Pair States: a study of the bosonic Harper-Hofstadter model,” 2023, doi: 10.48550/ARXIV.2309.12811.\nC. Yu and J.-W. Lee, “Closing of the Haldane gap in a spin-1 XXZ chain,” J. Korean Phys. Soc., vol. 79, no. 9, pp. 841–845, Nov. 2021, doi: 10.1007/s40042-021-00283-z.\nY. Zhang, A. Hulsch, H.-C. Zhang, W. Tang, L. Wang, and H.-H. Tu, “Universal Scaling of Klein Bottle Entropy near Conformal Critical Points,” Phys. Rev. Lett., vol. 130, no. 15, p. 151602, Apr. 2023, doi: 10.1103/PhysRevLett.130.151602.\nGertian Roose, Laurens Vanderstraeten, Jutho Haegeman, and Nick Bultinck. Anomalous domain wall condensation in a modified ising chain. Phys. Rev. B, 99: 195132, May 2019. 10.1103/​PhysRevB.99.195132.","category":"page"},{"location":"","page":"Home","title":"Home","text":"https:/​/​doi.org/​10.1103/​PhysRevB.99.195132","category":"page"},{"location":"","page":"Home","title":"Home","text":"Roose, G., Bultinck, N., Vanderstraeten, L. et al. Lattice regularisation and entanglement structure of the Gross-Neveu model. J. High Energ. Phys. 2021, 207 (2021). https://doi.org/10.1007/JHEP07(2021)207\nRoose, G., Haegeman, J., Van Acoleyen, K. et al. The chiral Gross-Neveu model on the lattice via a Landau-forbidden phase transition. J. High Energ. Phys. 2022, 19 (2022). https://doi.org/10.1007/JHEP06(2022)019","category":"page"}] }