diff src/LazyTensors/lazy_tensor_operations.jl @ 1836:368999a2e243 refactor/lazy_tensors/elementwise_ops

Add TensorNegation
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 09 Jan 2025 15:32:47 +0100
parents 48eaa973159a
children 200971c71657
line wrap: on
line diff
--- a/src/LazyTensors/lazy_tensor_operations.jl	Thu Jan 09 12:40:49 2025 +0100
+++ b/src/LazyTensors/lazy_tensor_operations.jl	Thu Jan 09 15:32:47 2025 +0100
@@ -51,6 +51,16 @@
 range_size(tmt::TensorTranspose) = domain_size(tmt.tm)
 domain_size(tmt::TensorTranspose) = range_size(tmt.tm)
 
+struct TensorNegation{T,R,D, TM<:LazyTensor{T,R,D}} <: LazyTensor{T,R,D}
+    tm::TM
+end
+
+apply(tm::TensorNegation, v, I...) = -apply(tm.tm, v, I...)
+apply_transpose(tm::TensorNegation, v, I...) = -apply_transpose(tm.tm, v, I...)
+
+range_size(tm::TensorNegation) = range_size(tm.tm)
+domain_size(tm::TensorNegation) = domain_size(tm.tm)
+
 
 struct ElementwiseTensorOperation{Op,T,R,D,TT<:NTuple{N, LazyTensor{T,R,D}} where N} <: LazyTensor{T,R,D}
     tms::TT
@@ -157,7 +167,6 @@
 
 Base.:*(a::T, tm::LazyTensor{T}) where T = TensorComposition(ScalingTensor{T,range_dim(tm)}(a,range_size(tm)), tm)
 Base.:*(tm::LazyTensor{T}, a::T) where T = a*tm
-Base.:-(tm::LazyTensor) = (-one(eltype(tm)))*tm
 
 """
     InflatedTensor{T,R,D} <: LazyTensor{T,R,D}