Skip to content
This repository was archived by the owner on Mar 20, 2025. It is now read-only.

Commit a435b7b

Browse files
authored
Use StableRNGs.jl to make tests more consistent (#80)
* Use StableRNGs to make tests more consistent * Bump to v0.4.2
1 parent 703ac67 commit a435b7b

File tree

7 files changed

+41
-25
lines changed

7 files changed

+41
-25
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ITensorTDVP"
22
uuid = "25707e16-a4db-4a07-99d9-4d67b7af0342"
33
authors = ["Matthew Fishman <mfishman@flatironinstitute.org> and contributors"]
4-
version = "0.4.1"
4+
version = "0.4.2"
55

66
[deps]
77
Compat = "34da2185-b29b-5c13-b0c7-acf172513d20"

test/test_contract.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using ITensors: ITensors, dag, delta, denseblocks
33
using ITensors: MPO, OpSum, apply, contract, inner, randomMPS, siteinds, truncate!
44
using ITensorTDVP: ITensorTDVP
5+
using StableRNGs: StableRNG
56
using Test: @test, @test_throws, @testset
67
@testset "Contract MPO (eltype=$elt, conserve_qns=$conserve_qns)" for elt in (
78
Float32, Float64, Complex{Float32}, Complex{Float64}
@@ -10,7 +11,8 @@ using Test: @test, @test_throws, @testset
1011

1112
N = 20
1213
s = siteinds("S=1/2", N; conserve_qns)
13-
psi = randomMPS(elt, s, j -> isodd(j) ? "" : ""; linkdims=8)
14+
rng = StableRNG(1234)
15+
psi = randomMPS(rng, elt, s, j -> isodd(j) ? "" : ""; linkdims=8)
1416
os = OpSum()
1517
for j in 1:(N - 1)
1618
os += 0.5, "S+", j, "S-", j + 1

test/test_dmrg.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
@eval module $(gensym())
22
using ITensors: ITensors, MPO, OpSum, inner, randomMPS, siteinds
33
using ITensorTDVP: ITensorTDVP
4+
using StableRNGs: StableRNG
45
using Test: @test, @test_throws, @testset
56
@testset "DMRG (eltype=$elt, nsite=$nsite, conserve_qns=$conserve_qns)" for elt in (
67
Float32, Float64, Complex{Float32}, Complex{Float64}
@@ -18,7 +19,8 @@ using Test: @test, @test_throws, @testset
1819
os += "Sz", j, "Sz", j + 1
1920
end
2021
H = MPO(elt, os, s)
21-
psi = randomMPS(elt, s, j -> isodd(j) ? "" : ""; linkdims=20)
22+
rng = StableRNG(1234)
23+
psi = randomMPS(rng, elt, s, j -> isodd(j) ? "" : ""; linkdims=20)
2224
nsweeps = 10
2325
maxdim = [10, 20, 40, 100]
2426
@test_throws ErrorException ITensorTDVP.dmrg(H, psi; maxdim, cutoff, nsite)

test/test_dmrg_x.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using ITensors: ITensors, MPO, MPS, OpSum, ProjMPO, inner, siteinds
33
using ITensorTDVP: dmrg_x
44
using Random: Random
5+
using StableRNGs: StableRNG
56
using Test: @test, @test_throws, @testset
67
@testset "DMRG-X (eltype=$elt, conserve_qns=$conserve_qns)" for elt in (
78
Float32, Float64, Complex{Float32}, Complex{Float64}
@@ -27,9 +28,10 @@ using Test: @test, @test_throws, @testset
2728
Random.seed!(12)
2829
W = 12
2930
# Random fields h ∈ [-W, W]
30-
h = W * (2 * rand(real(elt), n) .- 1)
31+
rng = StableRNG(1234)
32+
h = W * (2 * rand(rng, real(elt), n) .- 1)
3133
H = MPO(elt, heisenberg(n; h), s)
32-
initstate = rand(["", ""], n)
34+
initstate = rand(rng, ["", ""], n)
3335
ψ = MPS(elt, s, initstate)
3436
@test_throws ErrorException dmrg_x(H, ψ; nsite=2, maxdim=20, cutoff=1e-10)
3537
dmrg_x_kwargs = (; nsweeps=20, normalize=true, maxdim=20, cutoff=1e-10, outputlevel=0)

test/test_linsolve.jl

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
@eval module $(gensym())
2-
using ITensors: ITensors, MPO, OpSum, apply, randomMPS, siteinds
2+
using ITensors: scalartype
3+
using ITensors.ITensorMPS: MPO, OpSum, apply, randomMPS, siteinds
34
using ITensorTDVP: ITensorTDVP, dmrg
45
using KrylovKit: linsolve
56
using LinearAlgebra: norm
7+
using StableRNGs: StableRNG
68
using Test: @test, @test_throws, @testset
79
using Random: Random
810
@testset "linsolve (eltype=$elt, conserve_qns=$conserve_qns)" for elt in (
@@ -18,25 +20,26 @@ using Random: Random
1820
os += 0.5, "S-", j, "S+", j + 1
1921
os += "Sz", j, "Sz", j + 1
2022
end
21-
H = ITensors.convert_leaf_eltype(elt, MPO(os, s))
23+
H = MPO(elt, os, s)
2224
state = [isodd(n) ? "Up" : "Dn" for n in 1:N]
23-
Random.seed!(1234)
24-
x_c = randomMPS(elt, s, state; linkdims=2)
25+
rng = StableRNG(1234)
26+
x_c = randomMPS(rng, elt, s, state; linkdims=2)
2527
e, x_c = dmrg(H, x_c; nsweeps=10, cutoff=1e-6, maxdim=20, outputlevel=0)
26-
@test ITensors.scalartype(x_c) == elt
28+
@test scalartype(x_c) == elt
2729
# Compute `b = H * x_c`
2830
b = apply(H, x_c; cutoff=1e-8)
29-
@test ITensors.scalartype(b) == elt
31+
@test scalartype(b) == elt
3032
# Starting guess
31-
x0 = x_c + elt(0.05) * randomMPS(elt, s, state; linkdims=2)
32-
@test ITensors.scalartype(x0) == elt
33+
rng = StableRNG(1234)
34+
x0 = x_c + elt(0.05) * randomMPS(rng, elt, s, state; linkdims=2)
35+
@test scalartype(x0) == elt
3336
nsweeps = 10
3437
cutoff = 1e-5
3538
maxdim = 20
3639
updater_kwargs = (; tol=1e-4, maxiter=20, krylovdim=30, ishermitian=true)
3740
@test_throws ErrorException linsolve(H, b, x0; cutoff, maxdim, updater_kwargs)
3841
x = linsolve(H, b, x0; nsweeps, cutoff, maxdim, updater_kwargs)
39-
@test ITensors.scalartype(x) == elt
42+
@test scalartype(x) == elt
4043
@test norm(x - x_c) < 1e-2
4144
end
4245
end

test/test_tdvp.jl

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ using ITensorTDVP: ITensorTDVP, tdvp
2020
using KrylovKit: exponentiate
2121
using LinearAlgebra: norm
2222
using Observers: observer
23+
using StableRNGs: StableRNG
2324
using Test: @test, @test_throws, @testset
2425
const elts = (Float32, Float64, Complex{Float32}, Complex{Float64})
2526
@testset "Basic TDVP (eltype=$elt)" for elt in elts
@@ -33,7 +34,8 @@ const elts = (Float32, Float64, Complex{Float32}, Complex{Float64})
3334
os += "Sz", j, "Sz", j + 1
3435
end
3536
H = MPO(elt, os, s)
36-
ψ0 = randomMPS(elt, s; linkdims=10)
37+
rng = StableRNG(1234)
38+
ψ0 = randomMPS(rng, elt, s; linkdims=10)
3739
time_step = elt(0.1) * im
3840
# Time evolve forward:
3941
ψ1 = tdvp(H, -time_step, ψ0; cutoff, nsite=1)
@@ -71,15 +73,16 @@ end
7173
H1 = MPO(elt, os1, s)
7274
H2 = MPO(elt, os2, s)
7375
Hs = [H1, H2]
74-
ψ0 = randomMPS(elt, s; linkdims=10)
76+
rng = StableRNG(1234)
77+
ψ0 = randomMPS(rng, elt, s; linkdims=10)
7578
ψ1 = tdvp(Hs, -elt(0.1) * im, ψ0; cutoff, nsite=1)
7679
@test ITensors.scalartype(ψ1) === complex(elt)
7780
@test norm(ψ1) 1 rtol = eps(real(elt))
7881
## Should lose fidelity:
7982
#@test abs(inner(ψ0,ψ1)) < 0.9
8083
# Average energy should be conserved:
8184
@test real(sum(H -> inner(ψ1', H, ψ1), Hs)) ≈ sum(H -> inner(ψ0', H, ψ0), Hs) rtol =
82-
2 * eps(real(elt))
85+
4 * eps(real(elt))
8386
# Time evolve backwards:
8487
ψ2 = tdvp(Hs, elt(0.1) * im, ψ1; cutoff)
8588
@test ITensors.scalartype(ψ2) === complex(elt)
@@ -98,7 +101,8 @@ end
98101
os += "Sz", j, "Sz", j + 1
99102
end
100103
H = MPO(os, s)
101-
ψ0 = randomMPS(s; linkdims=10)
104+
rng = StableRNG(1234)
105+
ψ0 = randomMPS(rng, s; linkdims=10)
102106
function updater(PH, state0; internal_kwargs, kwargs...)
103107
return exponentiate(PH, internal_kwargs.time_step, state0; kwargs...)
104108
end
@@ -252,7 +256,8 @@ end
252256
os += "Sz", j, "Sz", j + 1
253257
end
254258
H = MPO(os, s)
255-
state = randomMPS(s; linkdims=2)
259+
rng = StableRNG(1234)
260+
state = randomMPS(rng, s; linkdims=2)
256261
state2 = deepcopy(state)
257262
trange = 0.0:tau:ttotal
258263
for (step, t) in enumerate(trange)

test/test_tdvp_time_dependent.jl

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
@eval module $(gensym())
2-
using ITensors: ITensors, Index, QN, contract, randomITensor
2+
using ITensors: ITensors, Index, QN, contract, randomITensor, scalartype
33
using ITensors.ITensorMPS: MPO, MPS, ProjMPO, ProjMPOSum, randomMPS, position!, siteinds
44
using ITensorTDVP: ITensorTDVP, TimeDependentSum, tdvp
55
using LinearAlgebra: norm
6+
using StableRNGs: StableRNG
67
using Test: @test, @test_skip, @testset
78
include(joinpath(pkgdir(ITensorTDVP), "examples", "03_models.jl"))
89
include(joinpath(pkgdir(ITensorTDVP), "examples", "03_updaters.jl"))
@@ -17,7 +18,8 @@ include(joinpath(pkgdir(ITensorTDVP), "examples", "03_updaters.jl"))
1718
H = MPO(elt, s, "I")
1819
H⃗ = (H, H)
1920
region = 2:3
20-
ψ = randomMPS(elt, s, j -> isodd(j) ? "" : ""; linkdims=2)
21+
rng = StableRNG(1234)
22+
ψ = randomMPS(rng, elt, s, j -> isodd(j) ? "" : ""; linkdims=2)
2123
H⃗ᵣ = ProjMPO.(H⃗)
2224
map(Hᵣ -> position!(Hᵣ, ψ, first(region)), H⃗ᵣ)
2325
∑Hᵣ = ProjMPOSum(collect(H⃗))
@@ -87,10 +89,10 @@ include(joinpath(pkgdir(ITensorTDVP), "examples", "03_updaters.jl"))
8789
abstol=tol,
8890
)
8991

90-
@test ITensors.scalartype(ψ₀) == complex(elt)
91-
@test ITensors.scalartype(ψₜ_ode) == complex(elt)
92-
@test ITensors.scalartype(ψₜ_krylov) == complex(elt)
93-
@test ITensors.scalartype(ψₜ_full) == complex(elt)
92+
@test scalartype(ψ₀) == complex(elt)
93+
@test scalartype(ψₜ_ode) == complex(elt)
94+
@test scalartype(ψₜ_krylov) == complex(elt)
95+
@test scalartype(ψₜ_full) == complex(elt)
9496
@test norm(ψ₀) 1
9597
@test norm(ψₜ_ode) 1
9698
@test norm(ψₜ_krylov) 1 rtol = (eps(real(elt)))

0 commit comments

Comments
 (0)