Skip to content

Commit

Permalink
Update LazyBandedMatrices.jl
Browse files Browse the repository at this point in the history
  • Loading branch information
dlfivefifty committed Jul 19, 2023
1 parent 9a418a2 commit 8d5b278
Showing 1 changed file with 12 additions and 10 deletions.
22 changes: 12 additions & 10 deletions src/LazyBandedMatrices.jl
Original file line number Diff line number Diff line change
Expand Up @@ -269,23 +269,31 @@ function sub_materialize(::PaddedLayout, V::AbstractMatrix{T}, ::Tuple{AbstractU
ApplyMatrix{T}(setindex, Zeros{T}(axes(V)), sub_materialize(dat), axes(dat)...)
end

const StructuredLayoutTypes{Lay} = Union{SymmetricLayout{Lay}, HermitianLayout{Lay}, TriangularLayout{'L','N',Lay}, TriangularLayout{'U','N',Lay}, TriangularLayout{'L','U',Lay}, TriangularLayout{'U','U',Lay}}

function similar(M::MulAdd{<:AbstractBandedLayout,<:PaddedLayout}, ::Type{T}, axes::Tuple{Any}) where T
const BandedLayouts = Union{AbstractBandedLayout, StructuredLayoutTypes{<:AbstractBandedLayout}, DualOrPaddedLayout}
const BlockBandedLayouts = Union{AbstractBlockBandedLayout, BlockLayout{<:AbstractBandedLayout}, StructuredLayoutTypes{<:AbstractBlockBandedLayout}}
const BandedBlockBandedLayouts = Union{AbstractBandedBlockBandedLayout,DiagonalLayout{<:AbstractBlockLayout}, StructuredLayoutTypes{<:AbstractBandedBlockBandedLayout}}


function similar(M::MulAdd{<:BandedLayouts,<:PaddedLayout}, ::Type{T}, axes::Tuple{Any}) where T
A,x = M.A,M.B
xf = paddeddata(x)
n = max(0,min(length(xf) + bandwidth(A,1),length(M)))
Vcat(Vector{T}(undef, n), Zeros{T}(size(A,1)-n))
end

function similar(M::MulAdd{<:AbstractBandedLayout,<:PaddedLayout}, ::Type{T}, axes::Tuple{Any,Any}) where T
similar(M::MulAdd{<:DiagonalLayout,<:PaddedLayout}, ::Type{T}, axes) where T = similar(M.B, T, axes)

Check warning on line 286 in src/LazyBandedMatrices.jl

View check run for this annotation

Codecov / codecov/patch

src/LazyBandedMatrices.jl#L286

Added line #L286 was not covered by tests

function similar(M::MulAdd{<:BandedLayouts,<:PaddedLayout}, ::Type{T}, axes::Tuple{Any,Any}) where T
A,x = M.A,M.B
xf = paddeddata(x)
m = max(0,min(size(xf,1) + bandwidth(A,1),size(M,1)))
n = size(xf,2)
PaddedArray(Matrix{T}(undef, m, n), size(A,1), size(x,2))
end

function materialize!(M::MatMulVecAdd{<:AbstractBandedLayout,<:PaddedLayout,<:PaddedLayout})
function materialize!(M::MatMulVecAdd{<:BandedLayouts,<:PaddedLayout,<:PaddedLayout})
α,A,x,β,y = M.α,M.A,M.B,M.β,M.C
length(y) == size(A,1) || throw(DimensionMismatch())
length(x) == size(A,2) || throw(DimensionMismatch())
Expand All @@ -305,7 +313,7 @@ function materialize!(M::MatMulVecAdd{<:AbstractBandedLayout,<:PaddedLayout,<:Pa
y
end

function materialize!(M::MatMulMatAdd{<:AbstractBandedLayout,<:PaddedLayout,<:PaddedLayout})
function materialize!(M::MatMulMatAdd{<:BandedLayouts,<:PaddedLayout,<:PaddedLayout})
α,A,x,β,y = M.α,M.A,M.B,M.β,M.C
size(y) == (size(A,1),size(x,2)) || throw(DimensionMismatch())
size(x,1) == size(A,2) || throw(DimensionMismatch())
Expand All @@ -330,12 +338,6 @@ end
_broadcast_banded_padded_mul((A1,A2)::Tuple{<:AbstractVector,<:AbstractMatrix}, B) = A1 .* mul(A2, B)
_broadcast_banded_padded_mul(Aargs, B) = copy(mulreduce(Mul(BroadcastArray(*, Aargs...), B)))

const StructuredLayoutTypes{Lay} = Union{SymmetricLayout{Lay}, HermitianLayout{Lay}, TriangularLayout{'L','N',Lay}, TriangularLayout{'U','N',Lay}, TriangularLayout{'L','U',Lay}, TriangularLayout{'U','U',Lay}}

const BandedLayouts = Union{AbstractBandedLayout, StructuredLayoutTypes{<:AbstractBandedLayout}, DualOrPaddedLayout}
const BlockBandedLayouts = Union{AbstractBlockBandedLayout, BlockLayout{<:AbstractBandedLayout}, StructuredLayoutTypes{<:AbstractBlockBandedLayout}}
const BandedBlockBandedLayouts = Union{AbstractBandedBlockBandedLayout,DiagonalLayout{<:AbstractBlockLayout}, StructuredLayoutTypes{<:AbstractBandedBlockBandedLayout}}

_block_last(b::Block) = b
_block_last(b::AbstractVector{<:Block}) = last(b)
function similar(Ml::MulAdd{<:BlockBandedLayouts,<:PaddedLayout}, ::Type{T}, _) where T
Expand Down

0 comments on commit 8d5b278

Please sign in to comment.