Skip to content

Commit 0273fed

Browse files
committed
Adjoint/Transpose conform block array interface
1 parent 7b9e88d commit 0273fed

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

src/BlockArrays.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import Base: @propagate_inbounds, Array, to_indices, to_index,
2727

2828
import Base: (:), IteratorSize, iterate, axes1
2929
import Base.Broadcast: broadcasted, DefaultArrayStyle
30-
import LinearAlgebra: lmul!, rmul!, AbstractTriangular
30+
import LinearAlgebra: lmul!, rmul!, AbstractTriangular, HermOrSym, AdjOrTrans
3131

3232

3333
include("abstractblockarray.jl")

src/blockarrayinterface.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
blocksizes(A::AbstractTriangular) = blocksizes(parent(A))
33

44

5-
blocksizes(A::Symmetric) = blocksizes(parent(A))
6-
blocksizes(A::Hermitian) = blocksizes(parent(A))
5+
blocksizes(A::HermOrSym) = blocksizes(parent(A))
6+
blocksizes(A::AdjOrTrans{<:Any,<:AbstractMatrix}) = BlockSizes(reverse(cumulsizes(blocksizes(parent(A)))))
7+
blocksizes(A::AdjOrTrans{<:Any,<:AbstractVector}) = BlockSizes(([1,2],cumulsizes(blocksizes(parent(A)))[1]))
78

89
Base.print_matrix_row(io::IO,
910
X::Union{AbstractTriangular{<:Any,<:AbstractBlockMatrix},

test/test_blockarrayinterface.jl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,19 @@ end
3939
@test Hermitian(A)[Block(2,3)] == A[2:3,4:6]
4040
@test Hermitian(A)[Block(3,2)] == A[2:3,4:6]'
4141
end
42+
43+
@testset "Adjoint/Transpose block arrays" begin
44+
A = PseudoBlockArray{ComplexF64}(undef, (1:4), (2:5))
45+
A .= randn.() .+ randn.().*im
46+
47+
@test blocksizes(A') == BlockArrays.BlockSizes(2:5, 1:4)
48+
@test blocksizes(Transpose(A)) == BlockArrays.BlockSizes(2:5, 1:4)
49+
50+
@test A'[Block(2,2)] == A[Block(2,2)]' == A[2:3,3:5]'
51+
@test transpose(A)[Block(2,2)] == transpose(A[2:3,3:5])
52+
@test A'[Block(2,3)] == A[Block(3,2)]'
53+
@test transpose(A)[Block(2,3)] == transpose(A[Block(3,2)])
54+
55+
@test BlockArray(A') == A'
56+
@test BlockArray(transpose(A)) == transpose(A)
57+
end

0 commit comments

Comments
 (0)