Skip to content

Commit 9ea8992

Browse files
committed
Forward blocks to parent in block-blockrange views
1 parent 347d5fb commit 9ea8992

File tree

4 files changed

+11
-5
lines changed

4 files changed

+11
-5
lines changed

src/blockarray.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ copy(A::BlockArray) = _BlockArray(map(copy,A.blocks), A.axes)
330330
################################
331331
@inline axes(block_array::BlockArray) = block_array.axes
332332

333-
function viewblock(block_arr::BlockArray, block)
333+
@propagate_inbounds function viewblock(block_arr::BlockArray, block::Block)
334334
blks = block.n
335335
@boundscheck blockcheckbounds(block_arr, blks...)
336336
block_arr.blocks[blks...]

src/blocklinalg.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ function _matchingblocks_triangular_mul!(::Val{'U'}, UNIT, A::AbstractMatrix{T},
304304
for K = blockaxes(A,1)
305305
b_2 = view(b, K)
306306
= _triangular_matrix(Val('U'), UNIT, view(A, K,K))
307-
materialize!(Lmul(Ũ, b_2))
307+
lmul!(Ũ, b_2)
308308
JR = (K+1):last(blockrowsupport(A,K))
309309
if !isempty(JR)
310310
muladd!(one(T), view(A, K, JR), view(b,JR), one(T), b_2)
@@ -322,7 +322,7 @@ function _matchingblocks_triangular_mul!(::Val{'L'}, UNIT, A::AbstractMatrix{T},
322322
for K = N:-1:1
323323
b_2 = view(b, Block(K))
324324
= _triangular_matrix(Val('L'), UNIT, view(A, Block(K,K)))
325-
materialize!(Lmul(L̃, b_2))
325+
lmul!(L̃, b_2)
326326
JR = blockrowstart(A,Block(K)):Block(K-1)
327327
if !isempty(JR)
328328
muladd!(one(T), view(A, Block(K), JR), view(b,JR), one(T), b_2)

src/views.jl

+3-2
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,11 @@ block(A::Block) = A
131131
@inline Base.view(block_arr::AbstractBlockArray{<:Any,N}, blocks::Vararg{BlockSlice1, N}) where N =
132132
view(block_arr, map(block,blocks)...)
133133

134-
const BlockSlices = Union{Base.Slice,BlockSlice{<:BlockRange{1}}}
134+
const BlockSlices = Union{Base.Slice,BlockSlice{<:Union{BlockRange{1},Block{1}}}}
135135
# Base.view(V::SubArray{<:Any,N,NTuple{N,BlockSlices}},
136136

137-
_block_reindex(b::BlockSlice, i::Block{1}) = b.block[Int(i)]
137+
_block_reindex(b::BlockSlice{<:Block{1}}, i::Block{1}) = Block(b.block.n[Int(i)])
138+
_block_reindex(b::BlockSlice{<:BlockRange{1}}, i::Block{1}) = b.block[Int(i)]
138139
_block_reindex(b::Slice, i::Block{1}) = i
139140

140141
@inline Base.view(V::SubArray{<:Any,N,<:AbstractBlockArray,<:NTuple{N,BlockSlices}}, block::Block{N}) where N =

test/test_blockviews.jl

+5
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,11 @@ bview(a, b) = Base.invoke(view, Tuple{AbstractArray,Any}, a, b)
182182
@test stringmime("text/plain", W) == "3×1 view(::BlockMatrix{$Int, Matrix{Matrix{$Int}}"*
183183
", $(typeof(axes(A)))}, $(Wi[1]), $(Wi[2])) "*
184184
"with eltype $Int with indices $(axes(W,1))×$(axes(W,2)):\n 1\n\n 4\n 7"
185+
186+
Vv = view(V, Block(1), Block(2))
187+
@test Vv === blocks(A)[1,2]
188+
Wv = view(W, Block(2), Block(1))
189+
@test Wv === blocks(A)[2,1]
185190
end
186191

187192
@testset "getindex with BlockRange" begin

0 commit comments

Comments
 (0)