Skip to content

Commit dc553d9

Browse files
authored
Better support for infinite KronTrav, including subarrays and mult (#110)
* Better support for infinite KronTrav, including subarrays and multiplication * v0.6.10
1 parent 437a207 commit dc553d9

File tree

4 files changed

+21
-2
lines changed

4 files changed

+21
-2
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "InfiniteLinearAlgebra"
22
uuid = "cde9dba0-b1de-11e9-2c62-0bab9446c55c"
3-
version = "0.6.9"
3+
version = "0.6.10"
44

55
[deps]
66
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"

src/InfiniteLinearAlgebra.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ import BlockArrays: AbstractBlockVecOrMat, sizes_from_blocks, _length, BlockedUn
2828

2929
import BandedMatrices: BandedMatrix, bandwidths, AbstractBandedLayout, _banded_qr!, _banded_qr, _BandedMatrix, banded_chol!
3030

31-
import LazyBandedMatrices: ApplyBandedLayout, BroadcastBandedLayout, _krontrav_axes, _block_interlace_axes, LazyBandedLayout,AbstractLazyBandedLayout, OneToCumsum
31+
import LazyBandedMatrices: ApplyBandedLayout, BroadcastBandedLayout, _krontrav_axes, _block_interlace_axes, LazyBandedLayout, AbstractLazyBandedBlockBandedLayout,
32+
AbstractLazyBandedLayout, OneToCumsum, BlockSlice1, KronTravBandedBlockBandedLayout, krontravargs, _broadcast_sub_arguments
3233

3334
import BlockBandedMatrices: _BlockSkylineMatrix, _BandedMatrix, _BlockSkylineMatrix, blockstart, blockstride,
3435
BlockSkylineSizes, BlockSkylineMatrix, BlockBandedMatrix, _BlockBandedMatrix, BlockTridiagonal,

src/blockbanded/blockbanded.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,14 @@ BroadcastStyle(::Type{<:PseudoBlockArray{T,N,<:AbstractArray{T,N},<:NTuple{N,Blo
7474
###
7575

7676
_krontrav_axes(A::OneToInf{Int}, B::OneToInf{Int}) where N = blockedrange(oneto(length(A)))
77+
78+
79+
struct InfKronTravBandedBlockBandedLayout <: AbstractLazyBandedBlockBandedLayout end
80+
MemoryLayout(::Type{<:KronTrav{<:Any,2,<:Any,NTuple{2,BlockedUnitRange{OneToInfCumsum}}}}) = InfKronTravBandedBlockBandedLayout()
81+
82+
sublayout(::InfKronTravBandedBlockBandedLayout, ::Type{<:NTuple{2,BlockSlice1}}) = BroadcastBandedLayout{typeof(*)}()
83+
sublayout(::InfKronTravBandedBlockBandedLayout, ::Type{<:NTuple{2,BlockSlice{BlockRange{1,Tuple{OneTo{Int}}}}}}) = KronTravBandedBlockBandedLayout()
84+
85+
copy(M::Mul{InfKronTravBandedBlockBandedLayout, InfKronTravBandedBlockBandedLayout}) = KronTrav((krontravargs(M.A) .* krontravargs(M.B))...)
86+
87+
_broadcast_sub_arguments(::InfKronTravBandedBlockBandedLayout, M, V) = _broadcast_sub_arguments(KronTravBandedBlockBandedLayout(), M, V)

test/runtests.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,18 @@ include("test_infbanded.jl")
100100
A = KronTrav- 2I, Eye(∞))
101101
@test axes(A, 1) isa InfiniteLinearAlgebra.OneToInfBlocks
102102
V = view(A, Block.(Base.OneTo(3)), Block.(Base.OneTo(3)))
103+
104+
@test MemoryLayout(A) isa InfiniteLinearAlgebra.InfKronTravBandedBlockBandedLayout
103105
@test MemoryLayout(V) isa LazyBandedMatrices.KronTravBandedBlockBandedLayout
104106

107+
@test A[Block.(Base.OneTo(3)), Block.(Base.OneTo(3))] isa KronTrav
108+
105109
u = A * [1; zeros(∞)]
106110
@test u[1:3] == A[1:3, 1]
107111
@test bandwidths(view(A, Block(1, 1))) == (1, 1)
112+
113+
@test A*A isa KronTrav
114+
@test (A*A)[Block.(Base.OneTo(3)), Block.(Base.OneTo(3))] A[Block.(1:3), Block.(1:4)]A[Block.(1:4), Block.(1:3)]
108115
end
109116

110117
@testset "triangle recurrences" begin

0 commit comments

Comments
 (0)