Skip to content

Commit dab25d1

Browse files
authored
Support materializing banded * banded with one ∞ dimension (#32)
* Support materializing banded * banded with one ∞ dimension * Update runtests.jl
1 parent 9be3bfe commit dab25d1

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

src/InfiniteLinearAlgebra.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ using BlockArrays, BlockBandedMatrices, BandedMatrices, LazyArrays, LazyBandedMa
44

55
import Base: +, -, *, /, \, ^, OneTo, getindex, promote_op, _unsafe_getindex, print_matrix_row, size, axes,
66
AbstractMatrix, AbstractArray, Matrix, Array, Vector, AbstractVector, Slice,
7-
show, getproperty, copy, map, require_one_based_indexing
7+
show, getproperty, copy, map, require_one_based_indexing, similar
88
import Base.Broadcast: BroadcastStyle, Broadcasted, broadcasted
99

1010
import ArrayLayouts: colsupport, rowsupport, triangularlayout, MatLdivVec, triangulardata, TriangularLayout, sublayout, _qr,

src/banded/infbanded.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,18 @@ end
349349

350350
_default_banded_broadcast(bc::Broadcasted, ::Tuple{<:OneToInf,<:Any}) = copy(Broadcasted{LazyArrayStyle{2}}(bc.f, bc.args))
351351

352+
###
353+
# Banded * Banded
354+
###
355+
356+
BandedMatrix{T}(::UndefInitializer, axes::Tuple{OneToInf{Int},OneTo{Int}}, lu::NTuple{2,Integer}) where T =
357+
BandedMatrix{T}(undef, map(length,axes), lu)
358+
359+
similar(M::MulAdd{<:AbstractBandedLayout,<:AbstractBandedLayout}, ::Type{T}, axes::Tuple{OneTo{Int},OneToInf{Int}}) where T =
360+
transpose(BandedMatrix{T}(undef, reverse(axes), reverse(bandwidths(M))))
361+
similar(M::MulAdd{<:AbstractBandedLayout,<:AbstractBandedLayout}, ::Type{T}, axes::Tuple{OneToInf{Int},OneTo{Int}}) where T =
362+
BandedMatrix{T}(undef, axes, bandwidths(M))
363+
352364

353365
###
354366
# BandedFill * BandedFill

test/runtests.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,17 @@ end
100100
@test A*A isa BandedMatrix
101101
@test (A^2)[1:10,1:10] == (A*A)[1:10,1:10] == (A[1:100,1:100]^2)[1:10,1:10]
102102
@test (A^3)[1:10,1:10] == (A*A*A)[1:10,1:10] == ((A*A)*A)[1:10,1:10] == (A*(A*A))[1:10,1:10] == (A[1:100,1:100]^3)[1:10,1:10]
103+
104+
@testset "∞ x finite" begin
105+
A = BandedMatrix(1 => 1:∞) + BandedMatrix(-1 => Fill(2,∞))
106+
B = _BandedMatrix(randn(3,5), ∞, 1,1)
107+
108+
@test_broken A*B isa BandedMatrix
109+
@test B'A isa Transpose{<:Any,<:BandedMatrix}
110+
111+
@test_broken (A*B)[1:7,1:5] A[1:7,1:6] * B[1:6,1:5]
112+
@test (B'A)[1:5,1:7] (B')[1:5,1:6] * A[1:6,1:7]
113+
end
103114
end
104115

105116
@testset "BlockTridiagonal" begin

0 commit comments

Comments
 (0)