Skip to content

Commit c3521db

Browse files
committed
improve type stability
1 parent 3e87170 commit c3521db

File tree

2 files changed

+122
-0
lines changed

2 files changed

+122
-0
lines changed

test/excis.jl

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
using MPSKit, TensorKit
2+
import LinearAlgebra.eigvals
3+
using MPSKit: max_virtualspaces
4+
5+
V = U1Space(i => 1 for i in 0:1)
6+
O = randn(V^2 V^2)
7+
O += O' # Hermitian
8+
9+
N = 3
10+
H = FiniteMPOHamiltonian(fill(V, N), (i, i + 1) => O for i in 1:(N - 1));
11+
12+
h = convert(TensorMap, H);
13+
14+
sectors = collect(blocksectors(h))
15+
sec = U1Irrep(1)
16+
@assert sec in sectors
17+
num = 10
18+
vals1 = eigvals(block(h, sec))
19+
vals2 = eigvals(h)[sec]
20+
@assert vals1 vals2
21+
vals3, vecs = exact_diagonalization(H; sector=(sec), num);
22+
vals1
23+
vals3
24+
25+
right = U1Space(sec => 1)
26+
max_virtualspaces(physicalspace(H); right)
27+
28+
psi_full = rand(oneunit(V) * V^N right);
29+
dim(space(psi_full))
30+
psi = MPSKit.decompose_localmps(psi_full);
31+
left_virtualspace.(psi)
32+
33+
left_virtualspace.(vecs[1].AL)
34+
right_virtualspace.(vecs[1].AL)
35+
max_virtualspaces(physicalspace(H); right)
36+
psi1 = FiniteMPS(physicalspace(H), max_virtualspaces(physicalspace(H))[2:(end - 1)])
37+
psi1, = find_groundstate(psi1, H);
38+
psi2 = FiniteMPS(physicalspace(H), max_virtualspaces(physicalspace(H); right)[2:(end - 1)];
39+
right)
40+
left_virtualspace.(psi2.AL)
41+
right_virtualspace.(psi2.AL)
42+
43+
psi2, = find_groundstate(psi2, H);
44+
expectation_value(psi2, H)
45+
46+
Es, Bs = excitations(H, QuasiparticleAnsatz(), FiniteMPS(psi); sector=sec);
47+
@inferred excitations(H, QuasiparticleAnsatz(), FiniteMPS(psi); sector=sec);
48+
49+
Es .+ expectation_value(psi1, H)
50+
51+
vals1
52+
vals3
53+
54+
psi2
55+
using TestEnv
56+
using Test
57+
TestEnv.activate()
58+
include("setup.jl")
59+
using .TestSetup
60+
using TensorKit, MPSKit
61+
using MPSKit: Multiline
62+
using KrylovKit
63+
64+
H = repeat(TestSetup.sixvertex(), 2)
65+
ψ = InfiniteMPS([ℂ^2, ℂ^2], [ℂ^10, ℂ^10])
66+
ψ, envs, _ = leading_boundary(ψ, H,
67+
VUMPS(; maxiter=400, tol=1e-10))
68+
energies, ϕs = @inferred excitations(H, QuasiparticleAnsatz(),
69+
[0.0, Float64(pi / 2)], ψ,
70+
envs; verbosity=0)
71+
@test abs(energies[1]) > abs(energies[2]) # has a minimum at pi/2
72+
alg = QuasiparticleAnsatz()
73+
ps = [0.0, Float64(pi / 2)]
74+
excitations(H, alg, ps, ψ, envs; verbosity=0);
75+
using Cthulhu
76+
Hm = convert(MultilineMPO, H);
77+
psim = convert(MultilineMPS, ψ);
78+
envs = environments(psim, Hm);
79+
excitations(Hm, alg, ps[1], psim, envs, psim, envs; verbosity=0);
80+
81+
@descend excitations(Hm, alg, ps[1], psim, envs, psim, envs);
82+
83+
qp = Multiline([LeftGaugedQP(rand, psim[1], psim[1]; sector=one(sectortype(psim[1])), momentum=ps[1])]);
84+
excitations(Hm, alg, qp, envs, envs; num=1);
85+
86+
@descend excitations(Hm, alg, qp, envs, envs; num=1);
87+
@code_warntype excitations(Hm, alg, qp, envs, envs; num=1);
88+
89+
Heff = MPSKit.EffectiveExcitationHamiltonian(H, envs[1], envs[1], fill(1.0, length(H)));
90+
Heffs = Multiline([Heff]);
91+
@code_warntype KrylovKit.apply(Heff, qp[1])
92+
@descend KrylovKit.apply(Heff, qp[1])
93+
94+
KrylovKit.apply(Multiline([Heff]), qp);
95+
@code_warntype KrylovKit.apply(Heffs, qp);
96+
97+
@descend eigsolve(Heffs, qp, 1, :LM, Lanczos());
98+
@code_warntype eigsolve(Heffs, qp, 1, :LM);
99+
@descend eigsolve(Heffs, qp, 1, :LM);

test/pbc.jl

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using MPSKit
2+
using MPSKitModels
3+
4+
using TensorKit
5+
6+
ccdag = c_plusmin();
7+
cdagc = c_minplus();
8+
9+
hop = cdagc + ccdag;
10+
11+
L = 3
12+
Vs = fill(space(hop, 1), L);
13+
14+
H1 = FiniteMPOHamiltonian(Vs, (i, i + 1) => hop for i in 1:(L - 1)) +
15+
FiniteMPOHamiltonian(Vs, (1, L) => -hop);
16+
17+
18+
H2 = periodic_boundary_conditions(InfiniteMPOHamiltonian(Vs[1:1], (1, 2) => hop), L)
19+
H3 = FiniteMPOHamiltonian(Vs, (i, i + 1) => hop for i in 1:(L - 1)) +
20+
FiniteMPOHamiltonian(Vs, (1, L) => hop);
21+
22+
H1 H2
23+
H3 H2

0 commit comments

Comments
 (0)