comparison test/LazyTensors/lazy_tensor_operations_test.jl @ 981:df562695b1b5 feature/variable_derivatives

Merge feature/tensormapping_application_promotion
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 15 Mar 2022 21:40:31 +0100
parents 043d13ef8898
children bc384aaade30 bbbc31953367
comparison
equal deleted inserted replaced
980:f885e1de6dc4 981:df562695b1b5
34 LazyTensors.domain_size(m::SizeDoublingMapping) = m.domain_size 34 LazyTensors.domain_size(m::SizeDoublingMapping) = m.domain_size
35 35
36 36
37 m = SizeDoublingMapping{Int, 1, 1}((3,)) 37 m = SizeDoublingMapping{Int, 1, 1}((3,))
38 v = [0,1,2] 38 v = [0,1,2]
39 @test m*v isa AbstractVector{Int}
40 @test size(m*v) == 2 .*size(v) 39 @test size(m*v) == 2 .*size(v)
41 @test (m*v)[0] == (:apply,v,(0,)) 40 @test (m*v)[0] == (:apply,v,(0,))
42 @test m*m*v isa AbstractVector{Int}
43 @test (m*m*v)[1] == (:apply,m*v,(1,)) 41 @test (m*m*v)[1] == (:apply,m*v,(1,))
44 @test (m*m*v)[3] == (:apply,m*v,(3,)) 42 @test (m*m*v)[3] == (:apply,m*v,(3,))
45 @test (m*m*v)[6] == (:apply,m*v,(6,)) 43 @test (m*m*v)[6] == (:apply,m*v,(6,))
46 @test_broken BoundsError == (m*m*v)[0] 44 @test_broken BoundsError == (m*m*v)[0]
47 @test_broken BoundsError == (m*m*v)[7] 45 @test_broken BoundsError == (m*m*v)[7]
79 m = ScalingOperator{Int,2}(2,(2,2)) 77 m = ScalingOperator{Int,2}(2,(2,2))
80 v = [[1 2];[3 4]] 78 v = [[1 2];[3 4]]
81 @test m*v == [[2 4];[6 8]] 79 @test m*v == [[2 4];[6 8]]
82 @test (m*v)[2,1] == 6 80 @test (m*v)[2,1] == 6
83 81
84 @testset "Promotion" begin 82 @testset "Type calculation" begin
85 m = ScalingOperator{Int,1}(2,(3,)) 83 m = ScalingOperator{Int,1}(2,(3,))
86 v = [1.,2.,3.] 84 v = [1.,2.,3.]
87 @test m*v isa AbstractVector{Float64} 85 @test m*v isa AbstractVector{Float64}
88 @test m*v == [2.,4.,6.] 86 @test m*v == [2.,4.,6.]
87 @inferred m*v
88 @inferred (m*v)[1]
89 89
90 m = ScalingOperator{Int,2}(2,(2,2)) 90 m = ScalingOperator{Int,2}(2,(2,2))
91 v = [[1. 2.];[3. 4.]] 91 v = [[1. 2.];[3. 4.]]
92 @test m*v == [[2. 4.];[6. 8.]] 92 @test m*v == [[2. 4.];[6. 8.]]
93 @test (m*v)[2,1] == 6. 93 @test (m*v)[2,1] == 6.
94 @inferred m*v
95 @inferred (m*v)[1]
94 96
95 m = ScalingOperator{ComplexF64,1}(2. +2. *im,(3,)) 97 m = ScalingOperator{ComplexF64,1}(2. +2. *im,(3,))
96 v = [1.,2.,3.] 98 v = [1.,2.,3.]
97 @test m*v isa AbstractVector{ComplexF64} 99 @test m*v isa AbstractVector{ComplexF64}
98 @test m*v == [2. + 2. *im, 4. + 4. *im, 6. + 6. *im] 100 @test m*v == [2. + 2. *im, 4. + 4. *im, 6. + 6. *im]
101 @inferred m*v
102 @inferred (m*v)[1]
99 103
100 m = ScalingOperator{ComplexF64,1}(1,(3,)) 104 m = ScalingOperator{ComplexF64,1}(1,(3,))
101 v = [2. + 2. *im, 4. + 4. *im, 6. + 6. *im] 105 v = [2. + 2. *im, 4. + 4. *im, 6. + 6. *im]
102 @test m*v isa AbstractVector{ComplexF64} 106 @test m*v isa AbstractVector{ComplexF64}
103 @test m*v == [2. + 2. *im, 4. + 4. *im, 6. + 6. *im] 107 @test m*v == [2. + 2. *im, 4. + 4. *im, 6. + 6. *im]
108 @inferred m*v
109 @inferred (m*v)[1]
110
111 m = ScalingOperator{Float64,1}(2., (3,))
112 v = [[1,2,3], [3,2,1],[1,3,1]]
113 @test m*v isa AbstractVector{Vector{Float64}}
114 @test m*v == [[2.,4.,6.], [6.,4.,2.],[2.,6.,2.]]
115 @inferred m*v
116 @inferred (m*v)[1]
104 end 117 end
105 end 118 end
106 119
107 @testset "TensorMapping binary operations" begin 120 @testset "TensorMapping binary operations" begin
108 struct ScalarMapping{T,R,D} <: TensorMapping{T,R,D} 121 struct ScalarMapping{T,R,D} <: TensorMapping{T,R,D}