comparison src/LazyTensors/lazy_tensor_operations.jl @ 1853:a12708e48499

Merge feature/jet_aqua
author Jonatan Werpers <jonatan@werpers.com>
date Sat, 11 Jan 2025 10:17:12 +0100
parents 164e26a6cf79
children 21e5fe1545c0
comparison
equal deleted inserted replaced
1848:a4c9966f7d34 1853:a12708e48499
167 itm.tm, 167 itm.tm,
168 IdentityTensor(itm.after.size..., after.size...), 168 IdentityTensor(itm.after.size..., after.size...),
169 ) 169 )
170 end 170 end
171 171
172 InflatedTensor(before::IdentityTensor, tm::LazyTensor{T}) where T = InflatedTensor(before,tm,IdentityTensor{T}()) 172 InflatedTensor(before::IdentityTensor, tm::LazyTensor) = InflatedTensor(before,tm,IdentityTensor{eltype(tm)}())
173 InflatedTensor(tm::LazyTensor{T}, after::IdentityTensor) where T = InflatedTensor(IdentityTensor{T}(),tm,after) 173 InflatedTensor(tm::LazyTensor, after::IdentityTensor) = InflatedTensor(IdentityTensor{eltype(tm)}(),tm,after)
174 # Resolve ambiguity between the two previous methods 174 # Resolve ambiguity between the two previous methods
175 InflatedTensor(I1::IdentityTensor{T}, I2::IdentityTensor{T}) where T = InflatedTensor(I1,I2,IdentityTensor{T}()) 175 InflatedTensor(I1::IdentityTensor, I2::IdentityTensor) = InflatedTensor(I1,I2,IdentityTensor{promote_type(eltype(I1), eltype(I2))}())
176 176
177 # TODO: Implement some pretty printing in terms of ⊗. E.g InflatedTensor(I(3),B,I(2)) -> I(3)⊗B⊗I(2) 177 # TODO: Implement some pretty printing in terms of ⊗. E.g InflatedTensor(I(3),B,I(2)) -> I(3)⊗B⊗I(2)
178 178
179 function range_size(itm::InflatedTensor) 179 function range_size(itm::InflatedTensor)
180 return concatenate_tuples( 180 return concatenate_tuples(
261 itm2 = InflatedTensor(IdentityTensor{T}(domain_size(tm1)),tm2) 261 itm2 = InflatedTensor(IdentityTensor{T}(domain_size(tm1)),tm2)
262 262
263 return itm1∘itm2 263 return itm1∘itm2
264 end 264 end
265 265
266 LazyOuterProduct(t1::IdentityTensor{T}, t2::IdentityTensor{T}) where T = IdentityTensor{T}(t1.size...,t2.size...) 266 LazyOuterProduct(t1::IdentityTensor, t2::IdentityTensor) = IdentityTensor{promote_type(eltype(t1),eltype(t2))}(t1.size...,t2.size...)
267 LazyOuterProduct(t1::LazyTensor, t2::IdentityTensor) = InflatedTensor(t1, t2) 267 LazyOuterProduct(t1::LazyTensor, t2::IdentityTensor) = InflatedTensor(t1, t2)
268 LazyOuterProduct(t1::IdentityTensor, t2::LazyTensor) = InflatedTensor(t1, t2) 268 LazyOuterProduct(t1::IdentityTensor, t2::LazyTensor) = InflatedTensor(t1, t2)
269 269
270 LazyOuterProduct(tms::Vararg{LazyTensor}) = foldl(LazyOuterProduct, tms) 270 LazyOuterProduct(tms::Vararg{LazyTensor}) = foldl(LazyOuterProduct, tms)
271 271