Mercurial > repos > public > sbplib_julia
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]
