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