Skip to content

Commit de132d3

Browse files
committed
update tests
1 parent fed4790 commit de132d3

File tree

3 files changed

+56
-39
lines changed

3 files changed

+56
-39
lines changed

test/core-test/dynamical-shifted-fock.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
)
6464
val_ss = abs2(sol0.expect[1, end])
6565
@test sum(abs2.(sol0.expect[1, :] .- sol_dsf_me.expect[1, :])) / (val_ss * length(tlist)) < 0.1
66-
@test sum(abs2.(sol0.expect[1, :] .- sol_dsf_mc.expect[1, :])) / (val_ss * length(tlist)) < 0.1
66+
@test sum(abs2.(sol0.expect[1, :] .- average_expect(sol_dsf_mc)[1, :])) / (val_ss * length(tlist)) < 0.1
6767

6868
# Two cavities case
6969
F = 2
@@ -143,7 +143,7 @@
143143

144144
val_ss = abs2(sol0.expect[1, end])
145145
@test sum(abs2.(sol0.expect[1, :] .- sol_dsf_me.expect[1, :])) / (val_ss * length(tlist)) < 0.6
146-
@test sum(abs2.(sol0.expect[1, :] .- sol_dsf_mc.expect[1, :])) / (val_ss * length(tlist)) < 0.6
146+
@test sum(abs2.(sol0.expect[1, :] .- average_expect(sol_dsf_mc)[1, :])) / (val_ss * length(tlist)) < 0.6
147147
@test sum(abs2.(sol0.expect[2, :] .- sol_dsf_me.expect[2, :])) / (val_ss * length(tlist)) < 0.6
148-
@test sum(abs2.(sol0.expect[2, :] .- sol_dsf_mc.expect[2, :])) / (val_ss * length(tlist)) < 0.6
148+
@test sum(abs2.(sol0.expect[2, :] .- average_expect(sol_dsf_mc)[2, :])) / (val_ss * length(tlist)) < 0.6
149149
end

test/core-test/time_evolution.jl

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,11 @@
186186
# Redirect to `sesolve`
187187
sol_me5 = mesolve(H, ψ0, tlist, progress_bar = Val(false))
188188

189+
# standard deviation
190+
std_mc = dropdims(sqrt.(mean(abs2.(sol_mc.expect), dims = 2) .- abs2.(mean(sol_mc.expect, dims = 2))), dims = 2)
191+
std_mc2 =
192+
dropdims(sqrt.(mean(abs2.(sol_mc2.expect), dims = 2) .- abs2.(mean(sol_mc2.expect, dims = 2))), dims = 2)
193+
189194
ρt_mc = [ket2dm.(normalize.(states)) for states in sol_mc_states.states]
190195
expect_mc_states = mapreduce(states -> expect.(Ref(e_ops[1]), states), hcat, ρt_mc)
191196
expect_mc_states_mean = sum(expect_mc_states, dims = 2) / size(expect_mc_states, 2)
@@ -202,13 +207,17 @@
202207
@test prob_me.prob.f.f isa MatrixOperator
203208
@test prob_mc.prob.f.f isa MatrixOperator
204209
@test isket(sol_me5.states[1])
205-
@test sum(abs, sol_mc.expect .- sol_me.expect) / length(tlist) < 0.1
206-
@test sum(abs, sol_mc2.expect .- sol_me.expect) / length(tlist) < 0.1
210+
@test all(isapprox.(average_states(sol_mc), sol_me.states; atol = 0.1))
211+
@test all(isapprox.(average_states(sol_mc2), sol_me.states; atol = 0.1))
212+
@test all(isapprox.(average_expect(sol_mc), sol_me.expect; atol = 0.1))
213+
@test all(isapprox.(average_expect(sol_mc2), sol_me.expect; atol = 0.1))
214+
@test all(std_expect(sol_mc) .≈ std_mc)
215+
@test all(std_expect(sol_mc2) .≈ std_mc2)
207216
@test sum(abs, vec(expect_mc_states_mean) .- vec(sol_me.expect[1, saveat_idxs])) / length(tlist) < 0.1
208217
@test sum(abs, vec(expect_mc_states_mean2) .- vec(sol_me.expect[1, saveat_idxs])) / length(tlist) < 0.1
209-
@test sum(abs, sol_sse.expect .- sol_me.expect) / length(tlist) < 0.1
210-
@test sum(abs, sol_sme.expect .- sol_me.expect) / length(tlist) < 0.1
211-
@test sum(abs, sol_sme3.expect .- sol_me.expect) / length(tlist) < 0.1
218+
@test sum(abs, average_expect(sol_sse) .- sol_me.expect) / length(tlist) < 0.1
219+
@test sum(abs, average_expect(sol_sme) .- sol_me.expect) / length(tlist) < 0.1
220+
@test sum(abs, average_expect(sol_sme3) .- sol_me.expect) / length(tlist) < 0.1
212221
@test length(sol_me.times) == length(tlist)
213222
@test length(sol_me.states) == 1
214223
@test size(sol_me.expect) == (length(e_ops), length(tlist))
@@ -221,13 +230,15 @@
221230
@test sol_me3.expect[1, saveat_idxs] expect(e_ops[1], sol_me3.states) atol = 1e-6
222231
@test all([sol_me3.states[i] vector_to_operator(sol_me4.states[i]) for i in eachindex(saveat)])
223232
@test length(sol_mc.times) == length(tlist)
224-
@test size(sol_mc.expect) == (length(e_ops), length(tlist))
233+
@test size(sol_mc.expect) == (length(e_ops), 500, length(tlist))
225234
@test length(sol_mc_states.times) == length(tlist)
226235
@test sol_mc_states.expect === nothing
236+
@test average_expect(sol_mc_states) === nothing
237+
@test std_expect(sol_mc_states) === nothing
227238
@test length(sol_sse.times) == length(tlist)
228-
@test size(sol_sse.expect) == (length(e_ops), length(tlist))
239+
@test size(sol_sse.expect) == (length(e_ops), 500, length(tlist))
229240
@test length(sol_sme.times) == length(tlist)
230-
@test size(sol_sme.expect) == (length(e_ops), length(tlist))
241+
@test size(sol_sme.expect) == (length(e_ops), 500, length(tlist))
231242
@test isnothing(sol_sse.measurement)
232243
@test isnothing(sol_sme.measurement)
233244
@test size(sol_sse2.measurement) == (length(c_ops), 20, length(tlist) - 1)
@@ -336,7 +347,7 @@
336347

337348
@test sol_se.expect sol_se_td.expect atol = 1e-6 * length(tlist)
338349
@test sol_me.expect sol_me_td.expect atol = 1e-6 * length(tlist)
339-
@test sol_mc.expect sol_mc_td.expect atol = 1e-2 * length(tlist)
350+
@test average_expect(sol_mc) average_expect(sol_mc_td) atol = 1e-2 * length(tlist)
340351
# @test sol_sse.expect ≈ sol_sse_td.expect atol = 1e-2 * length(tlist)
341352

342353
H_td2 = QobjEvo(H_td)
@@ -350,7 +361,7 @@
350361

351362
@test sol_se.expect sol_se_td2.expect atol = 1e-6 * length(tlist)
352363
@test sol_me.expect sol_me_td2.expect atol = 1e-6 * length(tlist)
353-
@test sol_mc.expect sol_mc_td2.expect atol = 1e-2 * length(tlist)
364+
@test average_expect(sol_mc) average_expect(sol_mc_td2) atol = 1e-2 * length(tlist)
354365
# @test sol_sse.expect ≈ sol_sse_td2.expect atol = 1e-2 * length(tlist)
355366

356367
@testset "Memory Allocations (mesolve)" begin
@@ -542,7 +553,7 @@
542553
@inferred mesolve(L_td, ψ0, tlist, c_ops, e_ops = e_ops, progress_bar = Val(false), params = p)
543554
end
544555

545-
@testset "Type Inference mcsolve" begin
556+
@testset "Type Inference mcsolve and statistical analysis functions" begin
546557
@inferred mcsolveEnsembleProblem(
547558
H,
548559
ψ0,
@@ -553,10 +564,11 @@
553564
progress_bar = Val(false),
554565
rng = rng,
555566
)
556-
@inferred mcsolve(H, ψ0, tlist, c_ops, ntraj = 5, e_ops = e_ops, progress_bar = Val(false), rng = rng)
567+
sol1 =
568+
@inferred mcsolve(H, ψ0, tlist, c_ops, ntraj = 5, e_ops = e_ops, progress_bar = Val(false), rng = rng)
569+
sol2 = @inferred mcsolve(H, ψ0_int, tlist, c_ops, ntraj = 5, progress_bar = Val(false), rng = rng)
557570
@inferred mcsolve(H, ψ0, tlist, c_ops, ntraj = 5, progress_bar = Val(true), rng = rng)
558571
@inferred mcsolve(H, ψ0, [0, 10], c_ops, ntraj = 5, progress_bar = Val(false), rng = rng)
559-
@inferred mcsolve(H, ψ0_int, tlist, c_ops, ntraj = 5, progress_bar = Val(false), rng = rng)
560572
@inferred mcsolve(
561573
H,
562574
ψ0,
@@ -578,6 +590,13 @@
578590
params = p,
579591
rng = rng,
580592
)
593+
594+
@inferred average_states(sol1)
595+
@inferred average_expect(sol1)
596+
@inferred std_expect(sol1)
597+
@inferred average_states(sol2)
598+
@inferred average_expect(sol2)
599+
@inferred std_expect(sol2)
581600
end
582601

583602
@testset "Type Inference ssesolve" begin
@@ -763,21 +782,18 @@
763782
)
764783

765784
@test sol_mc1.expect sol_mc2.expect atol = 1e-10
766-
@test sol_mc1.runs_expect sol_mc2.runs_expect atol = 1e-10
767785
@test sol_mc1.col_times sol_mc2.col_times atol = 1e-10
768786
@test sol_mc1.col_which sol_mc2.col_which atol = 1e-10
769787

770-
@test sol_mc1.runs_expect sol_mc3.runs_expect[:, 1:500, :] atol = 1e-10
788+
@test sol_mc1.expect sol_mc3.expect[:, 1:500, :] atol = 1e-10
771789

772790
@test sol_sse1.expect sol_sse2.expect atol = 1e-10
773-
@test sol_sse1.runs_expect sol_sse2.runs_expect atol = 1e-10
774791

775-
@test sol_sse1.runs_expect sol_sse3.runs_expect[:, 1:50, :] atol = 1e-10
792+
@test sol_sse1.expect sol_sse3.expect[:, 1:50, :] atol = 1e-10
776793

777794
@test sol_sme1.expect sol_sme2.expect atol = 1e-10
778-
@test sol_sme1.runs_expect sol_sme2.runs_expect atol = 1e-10
779795

780-
@test sol_sme1.runs_expect sol_sme3.runs_expect[:, 1:50, :] atol = 1e-10
796+
@test sol_sme1.expect sol_sme3.expect[:, 1:50, :] atol = 1e-10
781797
end
782798
end
783799

@@ -818,7 +834,7 @@
818834
t_l = LinRange(0, 20 / γ1, 1000)
819835
sol_me = mesolve(H, psi0, t_l, c_ops, e_ops = [sp1 * sm1, sp2 * sm2], progress_bar = false) # Here we don't put Val(false) because we want to test the support for Bool type
820836
sol_mc = mcsolve(H, psi0, t_l, c_ops, e_ops = [sp1 * sm1, sp2 * sm2], progress_bar = Val(false))
821-
@test sum(abs.(sol_mc.expect[1:2, :] .- sol_me.expect[1:2, :])) / length(t_l) < 0.1
837+
@test sum(abs.(average_expect(sol_mc) .- sol_me.expect)) / length(t_l) < 0.1
822838
@test expect(sp1 * sm1, sol_me.states[end]) expect(sigmap() * sigmam(), ptrace(sol_me.states[end], 1))
823839
end
824840
end

test/runtests.jl

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,27 @@ const testdir = dirname(@__FILE__)
1212

1313
# Put core tests in alphabetical order
1414
core_tests = [
15-
"block_diagonal_form.jl",
16-
"correlations_and_spectrum.jl",
17-
"dynamical_fock_dimension_mesolve.jl",
18-
"dynamical-shifted-fock.jl",
19-
"eigenvalues_and_operators.jl",
20-
"entropy_and_metric.jl",
21-
"generalized_master_equation.jl",
22-
"low_rank_dynamics.jl",
23-
"negativity_and_partial_transpose.jl",
24-
"progress_bar.jl",
25-
"quantum_objects.jl",
26-
"quantum_objects_evo.jl",
27-
"states_and_operators.jl",
28-
"steady_state.jl",
15+
# "block_diagonal_form.jl",
16+
# "correlations_and_spectrum.jl",
17+
# "dynamical_fock_dimension_mesolve.jl",
18+
# "dynamical-shifted-fock.jl",
19+
# "eigenvalues_and_operators.jl",
20+
# "entropy_and_metric.jl",
21+
# "generalized_master_equation.jl",
22+
# "low_rank_dynamics.jl",
23+
# "negativity_and_partial_transpose.jl",
24+
# "progress_bar.jl",
25+
# "quantum_objects.jl",
26+
# "quantum_objects_evo.jl",
27+
# "states_and_operators.jl",
28+
# "steady_state.jl",
2929
"time_evolution.jl",
30-
"utilities.jl",
31-
"wigner.jl",
30+
# "utilities.jl",
31+
# "wigner.jl",
3232
]
3333

3434
if (GROUP == "All") || (GROUP == "Core")
35+
import Statistics: mean
3536
using QuantumToolbox
3637
import QuantumToolbox: position, momentum
3738
import Random: MersenneTwister

0 commit comments

Comments
 (0)