Mercurial > repos > public > sbplib_julia
comparison test/LazyTensors/lazy_tensor_operations_test.jl @ 943:fb060e98ac0a feature/tensormapping_application_promotion
Remove more type assertions
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 10 Mar 2022 16:57:01 +0100 |
parents | 7829c09f8137 |
children | 86889fc5b63f |
comparison
equal
deleted
inserted
replaced
942:7829c09f8137 | 943:fb060e98ac0a |
---|---|
121 @test ((A-B)*v)[i] == 2*v[i] - 3*v[i] | 121 @test ((A-B)*v)[i] == 2*v[i] - 3*v[i] |
122 end | 122 end |
123 | 123 |
124 @test range_size(A+B) == range_size(A) == range_size(B) | 124 @test range_size(A+B) == range_size(A) == range_size(B) |
125 @test domain_size(A+B) == domain_size(A) == domain_size(B) | 125 @test domain_size(A+B) == domain_size(A) == domain_size(B) |
126 | |
127 @test ((A+B)*ComplexF64[1.1,1.2,1.3])[3] isa ComplexF64 | |
126 end | 128 end |
127 | 129 |
128 | 130 |
129 @testset "TensorMappingComposition" begin | 131 @testset "TensorMappingComposition" begin |
130 A = rand(2,3) | 132 A = rand(2,3) |
143 v = rand(4) | 145 v = rand(4) |
144 @test Ã∘B̃*v ≈ A*B*v rtol=1e-14 | 146 @test Ã∘B̃*v ≈ A*B*v rtol=1e-14 |
145 | 147 |
146 v = rand(2) | 148 v = rand(2) |
147 @test (Ã∘B̃)'*v ≈ B'*A'*v rtol=1e-14 | 149 @test (Ã∘B̃)'*v ≈ B'*A'*v rtol=1e-14 |
150 | |
151 @test (Ã∘B̃*ComplexF64[1.,2.,3.,4.])[1] isa ComplexF64 | |
152 @test ((Ã∘B̃)'*ComplexF64[1.,2.])[1] isa ComplexF64 | |
148 end | 153 end |
149 | 154 |
150 @testset "LazyLinearMap" begin | 155 @testset "LazyLinearMap" begin |
151 # Test a standard matrix-vector product | 156 # Test a standard matrix-vector product |
152 # mapping vectors of size 4 to vectors of size 3. | 157 # mapping vectors of size 4 to vectors of size 3. |
205 @test IdentityMapping(3,2) isa IdentityMapping{Float64,2} | 210 @test IdentityMapping(3,2) isa IdentityMapping{Float64,2} |
206 | 211 |
207 for sz ∈ [(4,5),(3,),(5,6,4)] | 212 for sz ∈ [(4,5),(3,),(5,6,4)] |
208 I = IdentityMapping{Float64}(sz) | 213 I = IdentityMapping{Float64}(sz) |
209 v = rand(sz...) | 214 v = rand(sz...) |
215 @test I*v == v | |
216 @test I'*v == v | |
217 | |
218 v = rand(ComplexF64,sz...) | |
210 @test I*v == v | 219 @test I*v == v |
211 @test I'*v == v | 220 @test I'*v == v |
212 | 221 |
213 @test range_size(I) == sz | 222 @test range_size(I) == sz |
214 @test domain_size(I) == sz | 223 @test domain_size(I) == sz |
336 true_value = tests[i][3](v) | 345 true_value = tests[i][3](v) |
337 @test tm'*v ≈ true_value rtol=1e-14 | 346 @test tm'*v ≈ true_value rtol=1e-14 |
338 end | 347 end |
339 end | 348 end |
340 | 349 |
350 @testset "application to other type" begin | |
351 tm = InflatedTensorMapping(I(3,2), A, I(4)) | |
352 | |
353 v = rand(ComplexF64, domain_size(tm)...) | |
354 @test (tm*v)[1,2,3,1] isa ComplexF64 | |
355 | |
356 v = rand(ComplexF64, domain_size(tm')...) | |
357 @test (tm'*v)[1,2,2,1] isa ComplexF64 | |
358 end | |
359 | |
341 @testset "Inference of application" begin | 360 @testset "Inference of application" begin |
342 struct ScalingOperator{T,D} <: TensorMapping{T,D,D} | 361 struct ScalingOperator{T,D} <: TensorMapping{T,D,D} |
343 λ::T | 362 λ::T |
344 size::NTuple{D,Int} | 363 size::NTuple{D,Int} |
345 end | 364 end |