diff src/LazyTensors/LazyTensors.jl @ 999:20cb83efb3f1 refactor/lazy_tensors

More operator definitions to top file
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 18 Mar 2022 21:43:38 +0100
parents 20c376dffe84
children 1091ac8c69ad
line wrap: on
line diff
--- a/src/LazyTensors/LazyTensors.jl	Fri Mar 18 21:36:17 2022 +0100
+++ b/src/LazyTensors/LazyTensors.jl	Fri Mar 18 21:43:38 2022 +0100
@@ -16,4 +16,19 @@
 include("lazy_tensor_operations.jl")
 include("tuple_manipulation.jl")
 
+# Applying lazy tensors to vectors
+Base.:*(a::LazyTensor, v::AbstractArray) = LazyTensorApplication(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.:+(tm1::LazyTensor{T,R,D}, tm2::LazyTensor{T,R,D}) where {T,R,D} = LazyLazyTensorBinaryOperation{:+,T,R,D}(tm1,tm2)
+Base.:-(tm1::LazyTensor{T,R,D}, tm2::LazyTensor{T,R,D}) where {T,R,D} = LazyLazyTensorBinaryOperation{:-,T,R,D}(tm1,tm2)
+
+# Composing lazy tensors
+Base.:∘(s::LazyTensor, t::LazyTensor) = LazyTensorComposition(s,t)
+
+# Outer products of tensors
+⊗(a::LazyTensor, b::LazyTensor) = LazyOuterProduct(a,b)
+
 end # module