Mercurial > repos > public > sbplib_julia
diff src/LazyTensors/LazyTensors.jl @ 1858:4a9be96f2569 feature/documenter_logo
Merge default
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Sun, 12 Jan 2025 21:18:44 +0100 |
parents | dfb43fdac9fc |
children | b8cb38fd67ff |
line wrap: on
line diff
--- a/src/LazyTensors/LazyTensors.jl Fri Jan 21 15:23:08 2022 +0100 +++ b/src/LazyTensors/LazyTensors.jl Sun Jan 12 21:18:44 2025 +0100 @@ -1,7 +1,48 @@ module LazyTensors -using Sbplib.RegionIndices -include("tensor_mapping.jl") + +export LazyTensor +export apply +export apply_transpose +export range_dim, domain_dim +export range_size, domain_size + +export TensorApplication +export TensorTranspose +export TensorComposition +export IdentityTensor +export ScalingTensor +export DiagonalTensor +export DenseTensor +export InflatedTensor +export LazyOuterProduct +export ⊗ +export DomainSizeMismatch +export RangeSizeMismatch + +export LazyArray +export LazyFunctionArray +export +̃, -̃, *̃, /̃ + +include("lazy_tensor.jl") +include("tensor_types.jl") include("lazy_array.jl") include("lazy_tensor_operations.jl") +include("tuple_manipulation.jl") + +# Applying lazy tensors to vectors +Base.:*(a::LazyTensor, v::AbstractArray) = TensorApplication(a,v) +Base.:*(a::LazyTensor, b::LazyTensor) = throw(MethodError(Base.:*,(a,b))) +Base.:*(a::LazyTensor, args::Union{LazyTensor, AbstractArray}...) = foldr(*,(a,args...)) + +# Addition and subtraction of lazy tensors +Base.:+(s::LazyTensor, t::LazyTensor) = ElementwiseTensorOperation{:+}(s,t) +Base.:-(s::LazyTensor, t::LazyTensor) = ElementwiseTensorOperation{:-}(s,t) + +# Composing lazy tensors +Base.:∘(s::LazyTensor, t::LazyTensor) = TensorComposition(s,t) +Base.:∘(s::TensorComposition, t::LazyTensor) = s.t1∘(s.t2∘t) + +# Outer products of tensors +⊗(a::LazyTensor, b::LazyTensor) = LazyOuterProduct(a,b) end # module