Skip to content

Commit f92caa7

Browse files
committed
Add transpose/adjoint specializations for block Bidiagonal
1 parent e53b50c commit f92caa7

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

src/bidiag.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,11 @@ end
290290
adjoint(B::Bidiagonal{<:Number}) = Bidiagonal(vec(adjoint(B.dv)), vec(adjoint(B.ev)), B.uplo == 'U' ? :L : :U)
291291
adjoint(B::Bidiagonal{<:Number, <:Base.ReshapedArray{<:Number,1,<:Adjoint}}) =
292292
Bidiagonal(adjoint(parent(B.dv)), adjoint(parent(B.ev)), B.uplo == 'U' ? :L : :U)
293+
adjoint(B::Bidiagonal) = Bidiagonal(adjoint.(B.dv), adjoint.(B.ev), B.uplo == 'U' ? :L : :U)
293294
transpose(B::Bidiagonal{<:Number}) = Bidiagonal(B.dv, B.ev, B.uplo == 'U' ? :L : :U)
295+
transpose(B::Bidiagonal{<:Number, <:Base.ReshapedArray{<:Number,1,<:Transpose}}) =
296+
Bidiagonal(transpose(parent(B.dv)), transpose(parent(B.ev)), B.uplo == 'U' ? :L : :U)
297+
transpose(B::Bidiagonal) = Bidiagonal(transpose.(B.dv), transpose.(B.ev), B.uplo == 'U' ? :L : :U)
294298
permutedims(B::Bidiagonal) = Bidiagonal(B.dv, B.ev, B.uplo == 'U' ? 'L' : 'U')
295299
function permutedims(B::Bidiagonal, perm)
296300
Base.checkdims_perm(axes(B), axes(B), perm)

test/bidiag.jl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -800,7 +800,7 @@ using .Main.ImmutableArrays
800800
@test convert(AbstractMatrix{Float64}, Bl)::Bidiagonal{Float64,ImmutableArray{Float64,1,Array{Float64,1}}} == Bl
801801
end
802802

803-
@testset "block-bidiagonal matrix indexing" begin
803+
@testset "block-bidiagonal matrix" begin
804804
dv = [ones(4,3), ones(2,2).*2, ones(2,3).*3, ones(4,4).*4]
805805
evu = [ones(4,2), ones(2,3).*2, ones(2,4).*3]
806806
evl = [ones(2,3), ones(2,2).*2, ones(4,3).*3]
@@ -840,6 +840,18 @@ end
840840
@test @inferred(B[2,1]) isa typeof(s)
841841
@test all(iszero, B[2,1])
842842
end
843+
844+
@testset "adjoint/transpose" begin
845+
m = rand(Int, 2, 2)
846+
for uplo in [:U, :L]
847+
B = Bidiagonal(fill(m,4), fill(m,3), uplo)
848+
A = Array{Matrix{Int}}(B)
849+
@testset for f in (adjoint, transpose)
850+
@test f(B) == f(A)
851+
@test f(f(B)) == B
852+
end
853+
end
854+
end
843855
end
844856

845857
@testset "copyto!" begin

0 commit comments

Comments
 (0)