changeset 2083:ce6450c7505f feature/lazy_tensors/matrix_of_operators

Start sketching code for matrix of operators tensor
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 02 Mar 2026 13:14:40 +0100
parents 118c09b168f5
children
files src/LazyTensors/tensor_types.jl
diffstat 1 files changed, 25 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/LazyTensors/tensor_types.jl	Wed Feb 18 21:33:00 2026 +0100
+++ b/src/LazyTensors/tensor_types.jl	Mon Mar 02 13:14:40 2026 +0100
@@ -92,3 +92,28 @@
 function apply_transpose(llm::DenseTensor{T,R,D}, v::AbstractArray{<:Any,R}, I::Vararg{Any,D}) where {T,R,D}
     apply(DenseTensor(llm.A, llm.domain_indicies, llm.range_indicies), v, I...)
 end
+
+
+struct VectorValuedTensor{N,M¬}
+    D::T # Matrix of Tensors
+end
+
+function apply(t::VectorValuedTensor, v, I...)
+    return ntuple(size(t.D,1)) do i
+        sum(1:size(t.D,2)) do j # Should use axes?
+            vⱼ = componentview(v,j)
+            (D[i,j]*vⱼ)[I...]
+        end
+    end |> SVector
+end
+
+
+struct TupleTable{N,M, T <: NTuple{N,NTuple{M, Any}}}
+    table::T
+end
+# Is this type really needed?
+
+size(::Type{<:TupleTable{N,M}}) where {N,M} = (N,M)
+size(t::TupleTable) = size(typeof(t))
+
+Base.getindex(t::TupleTable, i, j) = t.table[i][j]