|
| 1 | +using Test: @test, @testset |
| 2 | +using TensorOperations: @tensor, ncon |
| 3 | +using TensorAlgebra: Matricize |
| 4 | + |
| 5 | +elts = (Float32, Float64, ComplexF32, ComplexF64) |
| 6 | + |
| 7 | +@testset "tensor network examples ($T)" for T in elts |
| 8 | + D1, D2, D3 = 30, 40, 20 |
| 9 | + d1, d2 = 2, 3 |
| 10 | + A1 = rand(T, D1, d1, D2) .- 1//2 |
| 11 | + A2 = rand(T, D2, d2, D3) .- 1//2 |
| 12 | + rhoL = rand(T, D1, D1) .- 1//2 |
| 13 | + rhoR = rand(T, D3, D3) .- 1//2 |
| 14 | + H = rand(T, d1, d2, d1, d2) .- 1//2 |
| 15 | + |
| 16 | + @tensor HrA12[a, s1, s2, c] := |
| 17 | + rhoL[a, a'] * A1[a', t1, b] * A2[b, t2, c'] * rhoR[c', c] * H[s1, s2, t1, t2] |
| 18 | + @tensor backend = Matricize() HrA12′[a, s1, s2, c] := |
| 19 | + rhoL[a, a'] * A1[a', t1, b] * A2[b, t2, c'] * rhoR[c', c] * H[s1, s2, t1, t2] |
| 20 | + |
| 21 | + @test HrA12 ≈ HrA12′ |
| 22 | + @test HrA12 ≈ ncon( |
| 23 | + [rhoL, H, A2, rhoR, A1], |
| 24 | + [[-1, 1], [-2, -3, 4, 5], [2, 5, 3], [3, -4], [1, 4, 2]]; |
| 25 | + backend=Matricize(), |
| 26 | + ) |
| 27 | + E = @tensor rhoL[a', a] * |
| 28 | + A1[a, s, b] * |
| 29 | + A2[b, s', c] * |
| 30 | + rhoR[c, c'] * |
| 31 | + H[t, t', s, s'] * |
| 32 | + conj(A1[a', t, b']) * |
| 33 | + conj(A2[b', t', c']) |
| 34 | + @test E ≈ @tensor backend = Matricize() rhoL[a', a] * |
| 35 | + A1[a, s, b] * |
| 36 | + A2[b, s', c] * |
| 37 | + rhoR[c, c'] * |
| 38 | + H[t, t', s, s'] * |
| 39 | + conj(A1[a', t, b']) * |
| 40 | + conj(A2[b', t', c']) |
| 41 | +end |
0 commit comments