Skip to content

Commit aedaa85

Browse files
authored
view(::AbstractFill, ::Block) (#207)
* view(::AbstractFill, ::Block) * Generalise fill view special cases
1 parent e4b16d1 commit aedaa85

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

src/blocklinalg.jl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ sublayout(BL::BlockLayout{MLAY,BLAY}, ::Type{<:Tuple{Sl,<:BlockSlice{BlockRange{
6464
sublayout(BL::BlockLayout{MLAY,BLAY}, ::Type{<:Tuple{<:BlockSlice{BlockRange{1,Tuple{II}}},Sl}}) where {MLAY,BLAY,Sl<:Slice,II} =
6565
BlockLayout{typeof(sublayout(MLAY(),Tuple{II,Sl})), BLAY}()
6666
sublayout(BL::BlockLayout{MLAY,BLAY}, ::Type{<:Tuple{Sl1,Sl2}}) where {MLAY,BLAY,Sl1<:Slice,Sl2<:Slice,II} =
67-
BlockLayout{typeof(sublayout(MLAY(),Tuple{Sl1,Sl2})), BLAY}()
67+
BlockLayout{typeof(sublayout(MLAY(),Tuple{Sl1,Sl2})), BLAY}()
6868

6969
# materialize views, used for `getindex`
7070
sub_materialize(::AbstractBlockLayout, V, _) = BlockArray(V)
@@ -101,6 +101,13 @@ sub_materialize(::ArrayLayouts.OnesLayout, V, ax::Tuple{<:AbstractUnitRange,<:Bl
101101
sub_materialize(::ArrayLayouts.ZerosLayout, V, ax::Tuple{<:AbstractUnitRange,<:BlockedUnitRange}) =
102102
Zeros{eltype(V)}(ax)
103103

104+
@propagate_inbounds Base.view(A::FillArrays.AbstractFill{<:Any,N}, I::Vararg{Union{Real, AbstractArray, Block}, N}) where N =
105+
FillArrays._fill_getindex(A, Base.to_indices(A, I)...)
106+
@propagate_inbounds Base.view(A::FillArrays.AbstractFill{<:Any,N}, I::Block{N}) where N =
107+
FillArrays._fill_getindex(A, Base.to_indices(A, (I,))...)
108+
@propagate_inbounds Base.view(A::FillArrays.AbstractFill{<:Any,1}, I::Block{1}) =
109+
FillArrays._fill_getindex(A, Base.to_indices(A, (I,))...)
110+
104111
conjlayout(::Type{T}, ::BlockLayout{MLAY,BLAY}) where {T<:Complex,MLAY,BLAY} = BlockLayout{MLAY,typeof(conjlayout(T,BLAY()))}()
105112
conjlayout(::Type{T}, ::BlockLayout{MLAY,BLAY}) where {T<:Real,MLAY,BLAY} = BlockLayout{MLAY,BLAY}()
106113

test/test_blockarrayinterface.jl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,16 @@ end
127127

128128
@testset "block Fill" begin
129129
A = Fill(2,(blockedrange([1,2,2]),))
130-
@test A[Block(1)] Fill(2,1)
130+
@test A[Block(1)] view(A,Block(1)) Fill(2,1)
131131
@test A[Block.(1:2)] == [2,2,2]
132132
@test A[Block.(1:2)] isa Fill
133+
@test view(A,Block.(1:2)) isa Fill
133134
@test 2A Fill(4,axes(A))
134135

135136
F = Fill(2, (blockedrange([1,2,2]),blockedrange(1:3)))
136-
@test F[Block(2,2)] F[Block(2),Block(2)] Fill(2, 2,2)
137-
@test F[Block(2),1:5] Fill(2, 2,5)
138-
@test F[1:5,Block(2)] Fill(2, 5,2)
137+
@test F[Block(2,2)] view(F,Block(2,2)) view(F,Block(2),Block(2)) F[Block(2),Block(2)] Fill(2, 2,2)
138+
@test F[Block(2),1:5] view(F,Block(2),1:5) Fill(2, 2,5)
139+
@test F[1:5,Block(2)] view(F,1:5,Block(2)) Fill(2, 5,2)
139140
@test F[:,Block(2)] Fill(2, (axes(F,1),Base.OneTo(2)))
140141
@test F[Block(2),:] Fill(2, (Base.OneTo(2),axes(F,2)))
141142
@test F[Block.(1:2),Block.(1:2)] == Fill(2, (blockedrange([1,2]),blockedrange(1:2)))

0 commit comments

Comments
 (0)