Mercurial > repos > public > sbplib_julia
changeset 992:bc384aaade30 refactor/lazy_tensors
Add a bunch of todos and add a ScalingTensor
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Fri, 18 Mar 2022 17:28:07 +0100 |
parents | 83046af6143a |
children | 2f9beee56a4c |
files | src/LazyTensors/LazyTensors.jl src/LazyTensors/lazy_tensor_operations.jl test/LazyTensors/lazy_tensor_operations_test.jl |
diffstat | 3 files changed, 37 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/LazyTensors/LazyTensors.jl Wed Mar 16 18:39:00 2022 +0100 +++ b/src/LazyTensors/LazyTensors.jl Fri Mar 18 17:28:07 2022 +0100 @@ -5,6 +5,7 @@ export TensorMappingComposition export LazyLinearMap export IdentityMapping +export ScalingTensor export InflatedTensorMapping export LazyOuterProduct export ⊗
--- a/src/LazyTensors/lazy_tensor_operations.jl Wed Mar 16 18:39:00 2022 +0100 +++ b/src/LazyTensors/lazy_tensor_operations.jl Fri Mar 18 17:28:07 2022 +0100 @@ -1,3 +1,5 @@ +# TBD: Is there a good way to split this file? + """ LazyTensorMappingApplication{T,R,D} <: LazyArray{T,R} @@ -186,7 +188,27 @@ @boundscheck check_domain_size(tm, range_size(tmi)) return tmi end +# TODO: Implement the above as TensorMappingComposition instead +# TODO: Move the operator definitions to one place +""" + ScalingTensor{T,D} <: TensorMapping{T,D,D} + +A Lazy tensor operator that scales its input with `λ`. +""" +struct ScalingTensor{T,D} <: TensorMapping{T,D,D} + λ::T + size::NTuple{D,Int} +end + +LazyTensors.apply(tm::ScalingTensor{T,D}, v::AbstractArray{<:Any,D}, I::Vararg{Any,D}) where {T,D} = tm.λ*v[I...] +LazyTensors.apply_transpose(tm::ScalingTensor{T,D}, v::AbstractArray{<:Any,D}, I::Vararg{Any,D}) where {T,D} = tm.λ*v[I...] + +LazyTensors.range_size(m::ScalingTensor) = m.size +LazyTensors.domain_size(m::ScalingTensor) = m.size + +# TODO: Rename everything with mapping +# TODO: Remove ScalingOperator from tests """ InflatedTensorMapping{T,R,D} <: TensorMapping{T,R,D}
--- a/test/LazyTensors/lazy_tensor_operations_test.jl Wed Mar 16 18:39:00 2022 +0100 +++ b/test/LazyTensors/lazy_tensor_operations_test.jl Fri Mar 18 17:28:07 2022 +0100 @@ -263,6 +263,20 @@ @test_throws SizeMismatch I1∘I2 end +@testset "ScalingTensor" begin + st = ScalingTensor(2.,(3,4)) + @test st isa TensorMapping{Float64, 2, 2} + @test range_size(st) == (3,4) + @test domain_size(st) == (3,4) + + v = rand(3,4) + @test st*v == 2.0 .* v + @test st'*v == 2.0 .* v + + @inferred (st*v)[2,2] + @inferred (st'*v)[2,2] +end + @testset "InflatedTensorMapping" begin I(sz...) = IdentityMapping(sz...)