|
| 1 | +using LinearMaps, LinearAlgebra, Test |
| 2 | + |
| 3 | +@testset "trace" begin |
| 4 | + for A in (randn(5, 5), randn(ComplexF64, 5, 5)) |
| 5 | + @test tr(LinearMap(A)) == tr(A) |
| 6 | + @test tr(transpose(LinearMap(A))) == tr(A) |
| 7 | + @test tr(adjoint(LinearMap(A))) == tr(A') |
| 8 | + end |
| 9 | + @test tr(LinearMap(3I, 10)) == 30 |
| 10 | + @test tr(LinearMap{Int}(cumsum, 10)) == 10 |
| 11 | + @test tr(LinearMap{Int}(cumsum, reverse∘cumsum∘reverse, 10)') == 10 |
| 12 | + @test tr(LinearMap{Complex{Int}}(cumsum, reverse∘cumsum∘reverse, 10)') == 10 |
| 13 | + @test tr(LinearMap{Int}(cumsum!, 10)) == 10 |
| 14 | + @test tr(2LinearMap{Int}(cumsum!, 10)) == 20 |
| 15 | + A = randn(3, 5); B = copy(transpose(A)) |
| 16 | + @test tr(A ⊗ B) == tr(kron(A, B)) |
| 17 | + @test tr(A ⊗ B ⊗ A ⊗ B) ≈ tr(kron(A, B, A, B)) |
| 18 | + A = randn(5, 5); B = copy(transpose(A)) |
| 19 | + @test tr(A ⊗ B) ≈ tr(kron(A, B)) |
| 20 | + @test tr(A ⊗ B ⊗ A) ≈ tr(kron(A, B, A)) |
| 21 | + @test tr(A ⊗ B ⊗ A ⊗ B) ≈ tr(kron(A, B, A, B)) |
| 22 | + v = A[:,1] |
| 23 | + @test tr(v ⊗ v') ≈ norm(v)^2 |
| 24 | + v = [randn(2,2) for _ in 1:3] |
| 25 | + @test tr(v ⊗ v') ≈ mapreduce(*, +, v, v') |
| 26 | + @test tr(LinearMap{Int}(cumsum!, 10) ⊕ LinearMap{Int}(cumsum!, 10)) == 200 |
| 27 | + @test tr(FillMap(true, 5, 5)) == 5 |
| 28 | +end |
0 commit comments