Skip to content

Commit 1c3b9d4

Browse files
authored
Move out Lazy arrays (#49)
* Update for ArrayLayouts * Update test_triblockbanded.jl * import mul
1 parent 9c4db4a commit 1c3b9d4

18 files changed

+103
-223
lines changed

Project.toml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,26 @@
11
name = "BlockBandedMatrices"
22
uuid = "ffab5731-97b5-5995-9138-79e8c1846df0"
3-
version = "0.5.3"
3+
version = "0.6"
44

55
[deps]
66
BandedMatrices = "aae01518-5342-5314-be14-df237901396f"
77
BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e"
88
Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b"
99
FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b"
10-
LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02"
10+
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"
1111
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
1212
MatrixFactorizations = "a3b82374-2e81-5b9e-98ce-41277c0e4c87"
1313
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
14-
Profile = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79"
1514
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
1615
SharedArrays = "1a1011a3-84de-559e-8e89-a11a2f7dc383"
1716
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
1817
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
1918
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
2019

2120
[compat]
22-
BandedMatrices = "0.13"
21+
BandedMatrices = "0.14"
2322
BlockArrays = "0.10"
2423
FillArrays = "0.8"
25-
LazyArrays = "0.13"
24+
ArrayLayouts = "0.1"
2625
MatrixFactorizations = "0.2"
2726
julia = "1"

examples/blockarray_backend.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ using BlockBandedMatrices: BandedBlockBandedMatrix, _BandedBlockBandedMatrix,
1212
using LinearAlgebra: BLAS
1313
using BandedMatrices: _BandedMatrix
1414
using SharedArrays
15-
using LazyArrays
15+
using ArrayLayouts
1616
import Distributed
1717

1818
import Adapt: adapt
@@ -117,7 +117,7 @@ function banded_mul!(c::BlockVector{T},
117117
B = _BandedMatrix(A.data.blocks[i - j + u + 1, j],
118118
size(view(A, Block(i, j)), 1),
119119
λ, μ)
120-
c[Block(i)] .+= Mul(B, x.blocks[j])
120+
muladd!(one(T), B, x.blocks[j], one(T), c[Block(i)])
121121
end
122122

123123
c

examples/cuarrays.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using BandedMatrices, BlockBandedMatrices, LazyArrays, BlockArrays, FillArrays, CuArrays, GPUArrays, LinearAlgebra
1+
using BandedMatrices, BlockBandedMatrices, ArrayLayouts, BlockArrays, FillArrays, CuArrays, GPUArrays, LinearAlgebra
22
import BlockBandedMatrices: _BandedBlockBandedMatrix
33
import BandedMatrices: _BandedMatrix
44

@@ -47,7 +47,7 @@ b = BlockVector{T, CuArray{T,1}}(undef, Fill(N,N))
4747
c = BlockVector{T, CuArray{T,1}}(Zeros{T}(N^2), Fill(N,N))
4848

4949

50-
function mul!(c, A::BandedBlockBandedMatrix{<:Any,<:BlockMatrix{<:Any,<:CuArray}}, b)
50+
function mul!(c, A::BandedBlockBandedMatrix{T,<:BlockMatrix{<:Any,<:CuArray}}, b) where T
5151
fill!(c, 0)
5252

5353
l, u = blockbandwidths(A)
@@ -56,7 +56,7 @@ function mul!(c, A::BandedBlockBandedMatrix{<:Any,<:BlockMatrix{<:Any,<:CuArray}
5656

5757
for J = 1:N, K = max(1,J-l):min(N,J+u)
5858
B = _BandedMatrix(A.data.blocks[K-J+u+1,J],N,λ,μ)
59-
c.blocks[K] .= Mul(B, b.blocks[J]) .+ c.blocks[K]
59+
muladd!(one(T), B, b.blocks[J], one(T), c.blocks[K])
6060
end
6161
c
6262
end
@@ -71,7 +71,7 @@ function mul!(c, A::BandedBlockBandedMatrix{<:Any,<:BlockMatrix{<:Any,<:CuArray}
7171

7272
for J = 1:N, K = max(1,J-l):min(N,J+u)
7373
B = _BandedMatrix(A.data.blocks[K-J+u+1,J],N,λ,μ)
74-
LazyArrays.materialize!(MulAdd(1f0, B, b.blocks[J], 1f0, c.blocks[K]))
74+
ArrayLayouts.materialize!(MulAdd(1f0, B, b.blocks[J], 1f0, c.blocks[K]))
7575
end
7676
c
7777
end
@@ -87,15 +87,15 @@ function mul2!(c, A::BandedBlockBandedMatrix{<:Any,<:BlockMatrix{<:Any,<:CuArray
8787
for J = 1-b:M
8888
K = J + b
8989
B = _BandedMatrix(A.data.blocks[b+u+1,J],N,λ,μ)
90-
LazyArrays.materialize!(MulAdd(1f0, B, x.blocks[J], 1f0, c.blocks[K]))
90+
ArrayLayouts.materialize!(MulAdd(1f0, B, x.blocks[J], 1f0, c.blocks[K]))
9191
end
9292
end
9393

9494
@inbounds for b = 1:l
9595
for J = 1:M-b
9696
K = J + b
9797
B = _BandedMatrix(A.data.blocks[b+u+1,J],N,λ,μ)
98-
LazyArrays.materialize!(MulAdd(1f0, B, x.blocks[J], 1f0, c.blocks[K]))
98+
ArrayLayouts.materialize!(MulAdd(1f0, B, x.blocks[J], 1f0, c.blocks[K]))
9999
end
100100
end
101101

examples/finitedifference_2d.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#
44
###########
55

6-
using BlockBandedMatrices, BandedMatrices, LazyArrays, FillArrays
6+
using BlockBandedMatrices, BandedMatrices, ArrayLayouts, FillArrays
77

88

99
function finitedifference_2d(n)

examples/shared_array_backend.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ using LinearAlgebra: BLAS
77
import LinearAlgebra
88
using BandedMatrices: _BandedMatrix, BandedMatrix
99
using SharedArrays
10-
using LazyArrays
10+
using ArrayLayouts
1111
using Distributed: procs, remotecall_wait
1212
import Distributed
1313

examples/sharedarrays_setup.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using Pkg
22

33
Pkg.activate(homedir() * "/Documents/Coding/gpublockbanded")
4-
using BandedMatrices, BlockBandedMatrices, SharedArrays, LazyArrays, BlockArrays, FillArrays
4+
using BandedMatrices, BlockBandedMatrices, SharedArrays, ArrayLayouts, BlockArrays, FillArrays
55
import BlockBandedMatrices: _BandedBlockBandedMatrix, BandedBlockBandedSizes, BlockSizes, blockcolrange
66
import BandedMatrices: AbstractBandedMatrix, bandwidths, BandedStyle
77
import Base: getindex, size

src/BlockBandedMatrices.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
module BlockBandedMatrices
3-
using BlockArrays, BandedMatrices, LazyArrays, FillArrays, SparseArrays, MatrixFactorizations
3+
using BlockArrays, BandedMatrices, ArrayLayouts, FillArrays, SparseArrays, MatrixFactorizations
44
using LinearAlgebra
55

66
import Base: getindex, setindex!, checkbounds, @propagate_inbounds, convert,
@@ -22,11 +22,11 @@ import LinearAlgebra.LAPACK: chktrans, chkdiag, liblapack, chklapackerror, check
2222
import MatrixFactorizations: ql, ql!, QLPackedQ
2323
import SparseArrays: sparse
2424

25-
import LazyArrays: AbstractStridedLayout, ColumnMajor, @lazymul, MatMulMatAdd, MatMulVecAdd, BlasMatLmulVec,
25+
import ArrayLayouts: @lazymul, MatMulMatAdd, MatMulVecAdd, BlasMatLmulVec,
2626
triangularlayout, UpperTriangularLayout, TriangularLayout, MatLdivVec,
27-
triangulardata, subarraylayout, @lazyldiv, @lazylmul,
27+
triangulardata, sublayout, @lazyldiv, @lazylmul,
2828
AbstractColumnMajor, DenseColumnMajor, ColumnMajor,
29-
DiagonalLayout, apply!, materialize!, MulAdd, mulapplystyle, MulAddStyle
29+
DiagonalLayout, materialize!, MulAdd, mul
3030

3131
import BlockArrays: BlockSizes, nblocks, blocksize, blockcheckbounds, global2blockindex,
3232
Block, BlockSlice, getblock, unblock, setblock!, globalrange,

src/blockskylineqr.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ for Typ in (:StridedVector, :StridedMatrix, :AbstractVector, :AbstractMatrix)
107107
M,N = nblocks(A.factors)
108108
MN = min(M,N)
109109
V = view(A.factors,Block.(1:MN), Block.(1:MN))
110-
apply!(\, UpperTriangular(V), view(B,1:size(V,1),:))
110+
materialize!(Ldiv(UpperTriangular(V), view(B,1:size(V,1),:)))
111111
B
112112
end
113113
end
@@ -116,12 +116,12 @@ end
116116

117117
function ldiv!(A::QL{<:Any,<:BlockSkylineMatrix}, B::AbstractVector)
118118
lmul!(adjoint(A.Q), B)
119-
apply!(\, LowerTriangular(A.factors), B)
119+
materialize!(Ldiv(LowerTriangular(A.factors), B))
120120
end
121121

122122
function ldiv!(A::QL{<:Any,<:BlockSkylineMatrix}, B::AbstractMatrix)
123123
lmul!(adjoint(A.Q), B)
124-
apply!(\, LowerTriangular(A.factors), B)
124+
materialize!(Ldiv(LowerTriangular(A.factors), B))
125125
end
126126

127127
\(A::AbstractBlockBandedMatrix, b::AbstractVecOrMat) = qr(A)\b # use QR because LU would be a _mess_ to implement

src/interfaceimpl.jl

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,6 @@ BroadcastStyle(::Type{<:SubArray{<:Any,2,<:PseudoBlockMatrix{<:Any,<:Diagonal},
2020
NTuple{2,BlockSlice1}}}) = BandedStyle()
2121

2222

23-
isblockbanded(K::Kron{<:Any,2}) = isbanded(first(K.args))
24-
isbandedblockbanded(K::Kron{<:Any,2}) = all(isbanded, K.args)
25-
blockbandwidths(K::Kron{<:Any,2}) = bandwidths(first(K.args))
26-
subblockbandwidths(K::Kron{<:Any,2}) = bandwidths(last(K.args))
27-
function blocksizes(K::Kron{<:Any,2})
28-
A,B = K.args
29-
BlockSizes(Fill(size(B,1), size(A,1)), Fill(size(B,2), size(A,2)))
30-
end
31-
32-
const SubKron{T,M1,M2,R1,R2} =
33-
SubArray{T,2,<:Kron{T,2,Tuple{M1,M2}},Tuple{BlockSlice{R1},BlockSlice{R2}}}
34-
35-
36-
BroadcastStyle(::Type{<:SubKron{<:Any,<:Any,B,Block1,Block1}}) where B =
37-
BroadcastStyle(B)
38-
39-
@inline bandwidths(V::SubKron{<:Any,<:Any,<:Any,Block1,Block1}) =
40-
subblockbandwidths(parent(V))
4123

4224

4325
const BlockDiagonal{T,VT<:Matrix{T}} = BlockMatrix{T,<:Diagonal{VT}}

src/linalg.jl

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ function materialize!(M::MatMulVecAdd{<:AbstractBlockBandedLayout,<:AbstractStri
3939

4040
for J = Block.(1:nblocks(A,2))
4141
for K = blockcolrange(A,J)
42-
view(y,K) .= α .* Mul(view(A,K,J), view(x,J)) .+ view(y,K)
42+
muladd!(α, view(A,K,J), view(x,J), one(α), view(y,K))
4343
end
4444
end
4545
y_in
@@ -48,9 +48,8 @@ end
4848
function materialize!(M::MatMulMatAdd{<:AbstractBlockBandedLayout,<:AbstractBlockBandedLayout,<:AbstractBlockBandedLayout})
4949
α, A, X, β, Y = M.α, M.A, M.B, M.β, M.C
5050
_fill_lmul!(β, Y)
51-
for J=Block(1):Block(nblocks(X,2)),
52-
N=blockcolrange(X,J), K=blockcolrange(A,N)
53-
view(Y,K,J) .= α .* Mul( view(A,K,N), view(X,N,J)) .+ view(Y,K,J)
51+
for J=Block(1):Block(nblocks(X,2)), N=blockcolrange(X,J), K=blockcolrange(A,N)
52+
muladd!(α, view(A,K,N), view(X,N,J), one(α), view(Y,K,J))
5453
end
5554
Y
5655
end
@@ -61,7 +60,7 @@ function materialize!(M::MatMulMatAdd{<:AbstractBlockBandedLayout,<:AbstractColu
6160
X = PseudoBlockArray(X_in, BlockSizes((cumulsizes(blocksizes(A),2),[1,size(X_in,2)+1])))
6261
Y = PseudoBlockArray(Y_in, BlockSizes((cumulsizes(blocksizes(A),1), [1,size(Y_in,2)+1])))
6362
for N=Block.(1:nblocks(X,1)), K=blockcolrange(A,N)
64-
view(Y,K,Block(1)) .= α .* Mul( view(A,K,N), view(X,N,Block(1))) .+ view(Y,K,Block(1))
63+
muladd!(α, view(A,K,N), view(X,N,Block(1)), one(α), view(Y,K,Block(1)))
6564
end
6665
Y_in
6766
end
@@ -72,7 +71,7 @@ function materialize!(M::MatMulMatAdd{<:AbstractColumnMajor,<:AbstractBlockBande
7271
A = PseudoBlockArray(A_in, BlockSizes(([1,size(A_in,1)+1],cumulsizes(blocksizes(X),1))))
7372
Y = PseudoBlockArray(Y_in, BlockSizes(([1,size(Y_in,1)+1],cumulsizes(blocksizes(X),2))))
7473
for J=Block(1):Block(nblocks(X,2)), N=blockcolrange(X,J)
75-
view(Y,Block(1),J) .= α .* Mul( view(A,Block(1),N), view(X,N,J)) .+ view(Y,Block(1),J)
74+
muladd!(α, view(A,Block(1),N), view(X,N,J), one(α), view(Y,Block(1),J))
7675
end
7776
Y_in
7877
end
@@ -84,14 +83,14 @@ end
8483
# * overrides
8584
#############
8685

87-
*(A::BlockBandedMatrix, B::BlockBandedMatrix) = materialize(Mul(A,B))
88-
*(A::BlockBandedMatrix, B::BandedBlockBandedMatrix) = materialize(Mul(A,B))
89-
*(A::BandedBlockBandedMatrix, B::BlockBandedMatrix) = materialize(Mul(A,B))
90-
*(A::BandedBlockBandedMatrix, B::BandedBlockBandedMatrix) = materialize(Mul(A,B))
91-
*(A::Matrix, B::BlockBandedMatrix) = materialize(Mul(A,B))
92-
*(A::BlockBandedMatrix, B::Matrix) = materialize(Mul(A,B))
93-
*(A::BandedBlockBandedMatrix, B::Matrix) = materialize(Mul(A,B))
94-
*(A::Matrix, B::BandedBlockBandedMatrix) = materialize(Mul(A,B))
86+
*(A::BlockBandedMatrix, B::BlockBandedMatrix) = mul(A,B)
87+
*(A::BlockBandedMatrix, B::BandedBlockBandedMatrix) = mul(A,B)
88+
*(A::BandedBlockBandedMatrix, B::BlockBandedMatrix) = mul(A,B)
89+
*(A::BandedBlockBandedMatrix, B::BandedBlockBandedMatrix) = mul(A,B)
90+
*(A::Matrix, B::BlockBandedMatrix) = mul(A,B)
91+
*(A::BlockBandedMatrix, B::Matrix) = mul(A,B)
92+
*(A::BandedBlockBandedMatrix, B::Matrix) = mul(A,B)
93+
*(A::Matrix, B::BandedBlockBandedMatrix) = mul(A,B)
9594

9695

9796
function add_bandwidths(A::AbstractBlockBandedMatrix,B::AbstractBlockBandedMatrix)
@@ -165,9 +164,6 @@ end
165164
similar(M::MulAdd{<:DiagonalLayout,<:AbstractBlockBandedLayout}, ::Type{T}) where T = similar(M.B,T)
166165
similar(M::MulAdd{<:AbstractBlockBandedLayout,<:DiagonalLayout}, ::Type{T}) where T = similar(M.A,T)
167166

168-
mulapplystyle(::DiagonalLayout, ::AbstractBlockBandedLayout) = MulAddStyle()
169-
mulapplystyle(::AbstractBlockBandedLayout, ::DiagonalLayout) = MulAddStyle()
170-
171167

172168

173169
function blocksizes(V::SubBlockSkylineMatrix{<:Any,LL,UU,BlockRange1,BlockRange1}) where {LL,UU}
@@ -202,17 +198,17 @@ end
202198
####
203199

204200

205-
subarraylayout(::BlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockRange1}}}) = BlockBandedColumnMajor()
206-
subarraylayout(::BlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{Block1}}}) = ColumnMajor()
207-
subarraylayout(::BlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockIndexRange1}}}) = ColumnMajor()
208-
subarraylayout(::BlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockIndexRange1}, BlockSlice{BlockIndexRange1}}}) = ColumnMajor()
201+
sublayout(::BlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockRange1}}}) = BlockBandedColumnMajor()
202+
sublayout(::BlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{Block1}}}) = ColumnMajor()
203+
sublayout(::BlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockIndexRange1}}}) = ColumnMajor()
204+
sublayout(::BlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockIndexRange1}, BlockSlice{BlockIndexRange1}}}) = ColumnMajor()
209205

210-
subarraylayout(::BandedBlockBandedColumnMajor, ::Type{Tuple{BlockSlice{Block1}, BlockSlice{Block1}}}) = BandedColumnMajor()
211-
subarraylayout(::BandedBlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockRange1}}}) = BandedBlockBandedColumnMajor()
212-
subarraylayout(::BandedBlockBandedColumnMajor, ::Type{Tuple{BlockSlice{Block1}, BlockSlice{BlockRange1}}}) = BandedBlockBandedColumnMajor()
213-
subarraylayout(::BandedBlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{Block1}}}) = BandedBlockBandedColumnMajor()
214-
subarraylayout(::BandedBlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockIndexRange1}}}) = BandedBlockBandedColumnMajor()
215-
subarraylayout(::BandedBlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockIndexRange1}, BlockSlice{BlockIndexRange1}}}) = BandedBlockBandedColumnMajor()
206+
sublayout(::BandedBlockBandedColumnMajor, ::Type{Tuple{BlockSlice{Block1}, BlockSlice{Block1}}}) = BandedColumnMajor()
207+
sublayout(::BandedBlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockRange1}}}) = BandedBlockBandedColumnMajor()
208+
sublayout(::BandedBlockBandedColumnMajor, ::Type{Tuple{BlockSlice{Block1}, BlockSlice{BlockRange1}}}) = BandedBlockBandedColumnMajor()
209+
sublayout(::BandedBlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{Block1}}}) = BandedBlockBandedColumnMajor()
210+
sublayout(::BandedBlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockIndexRange1}}}) = BandedBlockBandedColumnMajor()
211+
sublayout(::BandedBlockBandedColumnMajor, ::Type{Tuple{BlockSlice{BlockIndexRange1}, BlockSlice{BlockIndexRange1}}}) = BandedBlockBandedColumnMajor()
216212

217213
isbanded(A::SubArray{<:Any,2,<:BandedBlockBandedMatrix}) = MemoryLayout(typeof(A)) == BandedColumnMajor()
218214
isbandedblockbanded(A::SubArray{<:Any,2,<:BandedBlockBandedMatrix}) = MemoryLayout(typeof(A)) == BandedBlockBandedColumnMajor()

src/triblockbanded.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ _triangular_matrix(::Val{'U'}, ::Val{'U'}, A) = UnitUpperTriangular(A)
4545
_triangular_matrix(::Val{'L'}, ::Val{'U'}, A) = UnitLowerTriangular(A)
4646

4747

48-
function _matchingblocks_triangular_mul!(::Val{'U'}, UNIT, A, dest)
48+
function _matchingblocks_triangular_mul!(::Val{'U'}, UNIT, A::AbstractMatrix{T}, dest) where T
4949
# impose block structure
5050
b = PseudoBlockArray(dest, BlockSizes((cumulsizes(blocksizes(A),1),)))
5151

@@ -55,16 +55,16 @@ function _matchingblocks_triangular_mul!(::Val{'U'}, UNIT, A, dest)
5555
for K = 1:N
5656
b_2 = view(b, Block(K))
5757
= _triangular_matrix(Val('U'), UNIT, view(A, Block(K,K)))
58-
b_2 .= Mul(Ũ, b_2)
58+
materialize!(Lmul(Ũ, b_2))
5959
JR = Block(K+1):blockrowstop(A,K)
6060
if !isempty(JR)
61-
b_2 .= applied(+, applied(*, view(A, Block(K), JR), view(b,JR)), b_2)
61+
muladd!(one(T), view(A, Block(K), JR), view(b,JR), one(T), b_2)
6262
end
6363
end
6464
dest
6565
end
6666

67-
function _matchingblocks_triangular_mul!(::Val{'L'}, UNIT, A, dest)
67+
function _matchingblocks_triangular_mul!(::Val{'L'}, UNIT, A::AbstractMatrix{T}, dest) where T
6868
# impose block structure
6969
b = PseudoBlockArray(dest, BlockSizes((cumulsizes(blocksizes(A),1),)))
7070

@@ -74,10 +74,10 @@ function _matchingblocks_triangular_mul!(::Val{'L'}, UNIT, A, dest)
7474
for K = N:-1:1
7575
b_2 = view(b, Block(K))
7676
= _triangular_matrix(Val('L'), UNIT, view(A, Block(K,K)))
77-
b_2 .= Mul(L̃, b_2)
77+
materialize!(Lmul(L̃, b_2))
7878
JR = blockrowstart(A,K):Block(K-1)
7979
if !isempty(JR)
80-
b_2 .= applied(+, applied(*, view(A, Block(K), JR), view(b,JR)), b_2)
80+
muladd!(one(T), view(A, Block(K), JR), view(b,JR), one(T), b_2)
8181
end
8282
end
8383

@@ -119,7 +119,7 @@ for UNIT in ('U', 'N')
119119
for K = N:-1:1
120120
b_2 = view(b, Block(K))
121121
= _triangular_matrix(Val('U'), Val($UNIT), view(A, Block(K,K)))
122-
apply!(\, Ũ, b_2)
122+
materialize!(Ldiv(Ũ, b_2))
123123

124124
if K  2
125125
KR = blockcolstart(A, K):Block(K-1)
@@ -150,7 +150,7 @@ for UNIT in ('U', 'N')
150150
for K = 1:N
151151
b_2 = view(b, Block(K))
152152
= _triangular_matrix(Val('L'), Val($UNIT), view(A, Block(K,K)))
153-
b_2 .= Ldiv(L̃, b_2)
153+
materialize!(Ldiv(L̃, b_2))
154154

155155
if K < N
156156
KR = Block(K+1):blockcolstop(A, K)

test/test_bandedblockbanded.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using BlockArrays, BandedMatrices, BlockBandedMatrices, FillArrays, SparseArrays, Test, LazyArrays , LinearAlgebra
1+
using BlockArrays, BandedMatrices, BlockBandedMatrices, FillArrays, SparseArrays, Test, ArrayLayouts , LinearAlgebra
22
import BlockBandedMatrices: _BandedBlockBandedMatrix, blockcolrange, blockrowrange, colrange, rowrange, isbandedblockbanded, bandeddata
33

44
@testset "BandedBlockBandedMatrix" begin
@@ -304,7 +304,7 @@ import BlockBandedMatrices: _BandedBlockBandedMatrix, blockcolrange, blockrowran
304304

305305
x = randn(size(B,2))
306306
y = similar(x, size(B,1))
307-
@test all((similar(y) .= Mul(B, x)) .=== (similar(y) .= Mul(V,x)))
307+
@test all((similar(y) .= MulAdd(B, x)) .=== (similar(y) .= MulAdd(V,x)))
308308
end
309309

310310
@testset "BLAS arithmetic" begin

test/test_blockbanded.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
using BlockArrays, BandedMatrices, BlockBandedMatrices, FillArrays, LazyArrays, LinearAlgebra, Test
1+
using BlockArrays, BandedMatrices, BlockBandedMatrices, FillArrays, ArrayLayouts, LinearAlgebra, Test
22
import BlockBandedMatrices: MemoryLayout, ColumnMajor, BroadcastStyle, BlockBandedStyle
3-
import LazyArrays: Mul, MulAdd
43
import Base.Broadcast: materialize!
54

65
@testset "BlockBandedMatrix" begin
@@ -147,7 +146,7 @@ import Base.Broadcast: materialize!
147146
@test sum(A) == 20
148147
@test sum(B) == 20
149148
C = BlockBandedMatrix{Float64}(undef, ([2,2], [2,2,2]), (0,3))
150-
@test all(copyto!(C, Mul(A,B)) .=== materialize!(MulAdd(1.0,A,B,0.0,similar(C))) .===
149+
@test all(mul!(C,A,B) .=== materialize!(MulAdd(1.0,A,B,0.0,similar(C))) .===
151150
A*B)
152151
AB = A*B
153152
@test AB isa BlockBandedMatrix

0 commit comments

Comments
 (0)