Skip to content

Commit 06a5cd1

Browse files
authored
Forward diagview for adjoint/transpose to parent (#1373)
After this, ```julia julia> B = reshape([1:9;], 3, 3) 3×3 Matrix{Int64}: 1 4 7 2 5 8 3 6 9 julia> diagview(B', 1) 2-element view(::Vector{Int64}, 2:4:6) with eltype Int64: 2 6 ``` The view directly indexes into the parent, and the `adjoint` layer is removed. This also makes the view linearly indexed.
1 parent b1f9cb3 commit 06a5cd1

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

src/adjtrans.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,3 +569,6 @@ Compute `vec(adjoint(A))`, but avoid an allocating reshape if possible
569569
"""
570570
_vecadjoint(A::AbstractVector) = vec(adjoint(A))
571571
_vecadjoint(A::Base.ReshapedArray{<:Any,1,<:AdjointAbsVec}) = adjoint(parent(A))
572+
573+
diagview(A::Transpose, k::Integer = 0) = _vectranspose(diagview(parent(A), -k))
574+
diagview(A::Adjoint, k::Integer = 0) = _vecadjoint(diagview(parent(A), -k))

test/adjtrans.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -787,4 +787,15 @@ end
787787
end
788788
end
789789

790+
@testset "diagview" begin
791+
for A in (rand(4, 4), rand(ComplexF64,4,4),
792+
fill([1 2; 3 4], 4, 4))
793+
for k in -3:3
794+
@test diagview(A', k) == diag(A', k)
795+
@test diagview(transpose(A), k) == diag(transpose(A), k)
796+
end
797+
@test IndexStyle(diagview(A')) == IndexLinear()
798+
end
799+
end
800+
790801
end # module TestAdjointTranspose

0 commit comments

Comments
 (0)