Skip to content

Commit

Permalink
Move tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dlfivefifty committed Apr 24, 2024
1 parent 13890b3 commit 43603e1
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 888 deletions.
6 changes: 3 additions & 3 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "LazyBandedMatrices"
uuid = "d7e5e226-e90b-4449-9968-0f923699bf6f"
authors = ["Sheehan Olver <[email protected]>"]
version = "0.9.4"
version = "0.10"

[deps]
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"
Expand All @@ -21,8 +21,8 @@ BandedMatrices = "1"
BlockArrays = "1"
BlockBandedMatrices = "0.12"
FillArrays = "1.0"
LazyArrays = "1.6"
MatrixFactorizations = "1, 2"
LazyArrays = "2"
MatrixFactorizations = "3"
StaticArrays = "1"
julia = "1.9"

Expand Down
128 changes: 4 additions & 124 deletions src/LazyBandedMatrices.jl
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import ArrayLayouts: materialize!, colsupport, rowsupport, MatMulVecAdd, MatMulM
sublayout, transposelayout, conjlayout, _copyto!, MemoryLayout, AbstractQLayout,
OnesLayout, DualLayout, mulreduce, _inv, symtridiagonallayout, tridiagonallayout, bidiagonallayout,
bidiagonaluplo, diagonaldata, subdiagonaldata, supdiagonaldata, mul,
symmetriclayout, hermitianlayout, _fill_lmul!, _copy_oftype
symmetriclayout, hermitianlayout, _copy_oftype
import LazyArrays: LazyArrayStyle, combine_mul_styles, PaddedLayout,
broadcastlayout, applylayout, arguments, _mul_arguments, call,
LazyArrayApplyStyle, ApplyArrayBroadcastStyle, ApplyStyle,
Expand All @@ -30,9 +30,9 @@ import LazyArrays: LazyArrayStyle, combine_mul_styles, PaddedLayout,
_mul_args_colsupport, _mul_args_rowsupport, _islazy, simplifiable, simplify, convexunion, tuple_type_memorylayouts,
PaddedArray, DualOrPaddedLayout, layout_broadcasted
import BandedMatrices: bandedcolumns, bandwidths, isbanded, AbstractBandedLayout,
prodbandwidths, BandedStyle, BandedColumns, BandedRows, BandedLayout,
AbstractBandedMatrix, BandedSubBandedMatrix, BandedStyle, _bnds,
banded_rowsupport, banded_colsupport, _BandedMatrix, bandeddata,
BandedStyle, BandedColumns, BandedRows, BandedLayout,
AbstractBandedMatrix, BandedSubBandedMatrix, BandedStyle,
_BandedMatrix, bandeddata,
banded_qr_lmul!, banded_qr_rmul!, _banded_broadcast!, bandedbroadcaststyle
import BlockBandedMatrices: BlockSlice, Block1, AbstractBlockBandedLayout,
isblockbanded, isbandedblockbanded, blockbandwidths,
Expand Down Expand Up @@ -70,124 +70,4 @@ include("special.jl")
include("blockconcat.jl")
include("blockkron.jl")

StructuredLazyLayouts = Union{BandedLazyLayouts,
BlockBandedColumns{LazyLayout}, BandedBlockBandedColumns{LazyLayout},
BlockBandedRows{LazyLayout},BandedBlockBandedRows{LazyLayout},
BlockLayout{LazyLayout},
BlockLayout{TridiagonalLayout{LazyLayout,LazyLayout,LazyLayout}}, BlockLayout{DiagonalLayout{LazyLayout}},
BlockLayout{BidiagonalLayout{LazyLayout,LazyLayout}}, BlockLayout{SymTridiagonalLayout{LazyLayout,LazyLayout}},
BlockLayout{LazyBandedLayout},
AbstractLazyBlockBandedLayout, LazyBandedBlockBandedLayouts}


@inline _islazy(::StructuredLazyLayouts) = Val(true)

copy(M::Mul{<:StructuredLazyLayouts, <:StructuredLazyLayouts}) = simplify(M)
copy(M::Mul{<:StructuredLazyLayouts}) = simplify(M)
copy(M::Mul{<:Any, <:StructuredLazyLayouts}) = simplify(M)
copy(M::Mul{<:StructuredLazyLayouts, <:AbstractLazyLayout}) = simplify(M)
copy(M::Mul{<:AbstractLazyLayout, <:StructuredLazyLayouts}) = simplify(M)
copy(M::Mul{<:StructuredLazyLayouts, <:DiagonalLayout}) = simplify(M)
copy(M::Mul{<:DiagonalLayout, <:StructuredLazyLayouts}) = simplify(M)


copy(M::Mul{<:Union{ZerosLayout,DualLayout{ZerosLayout}}, <:StructuredLazyLayouts}) = copy(mulreduce(M))
copy(M::Mul{<:StructuredLazyLayouts, <:Union{ZerosLayout,DualLayout{ZerosLayout}}}) = copy(mulreduce(M))

simplifiable(::Mul{<:StructuredLazyLayouts, <:DiagonalLayout{<:OnesLayout}}) = Val(true)
simplifiable(::Mul{<:DiagonalLayout{<:OnesLayout}, <:StructuredLazyLayouts}) = Val(true)
copy(M::Mul{<:StructuredLazyLayouts, <:DiagonalLayout{<:OnesLayout}}) = _copy_oftype(M.A, eltype(M))
copy(M::Mul{<:DiagonalLayout{<:OnesLayout}, <:StructuredLazyLayouts}) = _copy_oftype(M.B, eltype(M))

copy(M::Mul{<:DiagonalLayout{<:AbstractFillLayout}, <:StructuredLazyLayouts}) = copy(mulreduce(M))
copy(M::Mul{<:StructuredLazyLayouts, <:DiagonalLayout{<:AbstractFillLayout}}) = copy(mulreduce(M))

copy(M::Mul{<:StructuredApplyLayouts{typeof(*)},<:StructuredApplyLayouts{typeof(*)}}) = simplify(M)
copy(M::Mul{<:StructuredApplyLayouts{typeof(*)},<:StructuredLazyLayouts}) = simplify(M)
copy(M::Mul{<:StructuredLazyLayouts,<:StructuredApplyLayouts{typeof(*)}}) = simplify(M)
copy(M::Mul{<:StructuredApplyLayouts{typeof(*)},<:BroadcastLayouts}) = simplify(M)
copy(M::Mul{<:BroadcastLayouts,<:StructuredApplyLayouts{typeof(*)}}) = simplify(M)
copy(M::Mul{BroadcastLayout{typeof(*)},<:StructuredApplyLayouts{typeof(*)}}) = simplify(M)
copy(M::Mul{ApplyLayout{typeof(*)},<:StructuredLazyLayouts}) = simplify(M)
copy(M::Mul{<:StructuredLazyLayouts,ApplyLayout{typeof(*)}}) = simplify(M)
copy(M::Mul{ApplyLayout{typeof(*)},<:BroadcastLayouts}) = simplify(M)
copy(M::Mul{<:BroadcastLayouts,ApplyLayout{typeof(*)}}) = simplify(M)

copy(M::Mul{<:AbstractInvLayout, <:StructuredApplyLayouts{typeof(*)}}) = simplify(M)
simplifiable(::Mul{<:AbstractInvLayout, <:StructuredLazyLayouts}) = Val(false)
copy(M::Mul{<:AbstractInvLayout, <:StructuredLazyLayouts}) = simplify(M)


copy(L::Ldiv{<:StructuredLazyLayouts, <:StructuredLazyLayouts}) = lazymaterialize(\, L.A, L.B)

# TODO: this is type piracy
function colsupport(lay::ApplyLayout{typeof(\)}, L, j)
A,B = arguments(lay, L)
l,u = bandwidths(A)
cs = colsupport(B,j)
m = size(L,1)
l == u == 0 && return cs
l == 0 && return 1:last(cs)
u == 0 && return first(cs):m
1:m
end

function rowsupport(lay::ApplyLayout{typeof(\)}, L, k)
A,B = arguments(lay, L)
l,u = bandwidths(A)
cs = rowsupport(B,k)
m = size(L,1)
l == u == 0 && return cs
l == 0 && return first(cs):m
u == 0 && return 1:last(cs)
1:m
end

copy(M::Mul{ApplyLayout{typeof(\)}, <:StructuredLazyLayouts}) = lazymaterialize(*, M.A, M.B)
copy(M::Mul{BroadcastLayout{typeof(*)}, <:StructuredLazyLayouts}) = lazymaterialize(*, M.A, M.B)

## padded copy
mulreduce(M::Mul{<:StructuredLazyLayouts, <:Union{PaddedLayout,AbstractStridedLayout}}) = MulAdd(M)
mulreduce(M::Mul{<:StructuredApplyLayouts{F}, D}) where {F,D<:Union{PaddedLayout,AbstractStridedLayout}} = Mul{ApplyLayout{F},D}(M.A, M.B)
# need to overload copy due to above
copy(M::Mul{<:StructuredLazyLayouts, <:Union{PaddedLayout,AbstractStridedLayout}}) = copy(mulreduce(M))
copy(M::Mul{<:AbstractInvLayout{<:BandedLazyLayouts}, <:Union{PaddedLayout,AbstractStridedLayout}}) = ArrayLayouts.ldiv(pinv(M.A), M.B)
copy(M::Mul{<:BandedLazyLayouts, <:Union{PaddedLayout,AbstractStridedLayout}}) = copy(mulreduce(M))
copy(M::Mul{<:Union{PaddedLayout,AbstractStridedLayout}, <:BandedLazyLayouts}) = copy(mulreduce(M))
simplifiable(::Mul{<:StructuredLazyLayouts, <:Union{PaddedLayout,AbstractStridedLayout}}) = Val(true)


copy(L::Ldiv{ApplyBandedLayout{typeof(*)}, Lay}) where Lay = copy(Ldiv{ApplyLayout{typeof(*)},Lay}(L.A, L.B))
copy(L::Ldiv{ApplyBandedLayout{typeof(*)}, Lay}) where Lay<:StructuredLazyLayouts = copy(Ldiv{ApplyLayout{typeof(*)},Lay}(L.A, L.B))
_inv(::StructuredLazyLayouts, _, A) = ApplyArray(inv, A)

##
# support Inf Block ranges
broadcasted(::LazyArrayStyle{1}, ::Type{Block}, r::AbstractUnitRange) = Block(first(r)):Block(last(r))
broadcasted(::LazyArrayStyle{1}, ::Type{Int}, block_range::BlockRange{1}) = first(block_range.indices)
broadcasted(::LazyArrayStyle{0}, ::Type{Int}, block::Block{1}) = Int(block)


####
# Band getindex
####

function getindex(bc::BroadcastArray{<:Any,2,<:Any,<:NTuple{2,AbstractMatrix}}, b::Band)
A,B = bc.args
bc.f.(A[b],B[b])
end
function getindex(bc::BroadcastArray{<:Any,2,<:Any,<:Tuple{Number,AbstractMatrix}}, b::Band)
a,B = bc.args
bc.f.(a,B[b])
end
function getindex(bc::BroadcastArray{<:Any,2,<:Any,<:Tuple{AbstractMatrix,Number}}, b::Band)
A,c = bc.args
bc.f.(A[b],c)
end

# useful for turning Array into block array
unitblocks(a::AbstractArray) = PseudoBlockArray(a, Ones{Int}.(axes(a))...)
unitblocks(a::OneTo) = blockedrange(Ones{Int}(length(a)))
unitblocks(a::AbstractUnitRange) = BlockArrays._BlockedUnitRange(first(a),(first(a)-1) .+ BlockArrays._blocklengths2blocklasts(Ones{Int}(length(a))))

end
10 changes: 0 additions & 10 deletions test/mylazyarray.jl

This file was deleted.

Loading

0 comments on commit 43603e1

Please sign in to comment.