Skip to content

Commit 414478c

Browse files
committed
Make adjoint/transpose for Bidiagonal lazy
1 parent 82842c3 commit 414478c

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

src/bidiag.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -308,12 +308,12 @@ for func in (:conj, :copy, :real, :imag)
308308
end
309309
isreal(M::Bidiagonal) = isreal(M.dv) && isreal(M.ev)
310310

311-
adjoint(B::Bidiagonal{<:Number}) = Bidiagonal(vec(adjoint(B.dv)), vec(adjoint(B.ev)), B.uplo == 'U' ? :L : :U)
312-
adjoint(B::Bidiagonal{<:Number, <:Base.ReshapedArray{<:Number,1,<:Adjoint}}) =
311+
adjoint(B::Bidiagonal) = Bidiagonal(vec(adjoint(B.dv)), vec(adjoint(B.ev)), B.uplo == 'U' ? :L : :U)
312+
adjoint(B::Bidiagonal{<:Any, <:Base.ReshapedArray{<:Any,1,<:AdjointAbsVec}}) =
313313
Bidiagonal(adjoint(parent(B.dv)), adjoint(parent(B.ev)), B.uplo == 'U' ? :L : :U)
314-
adjoint(B::Bidiagonal) = Bidiagonal(adjoint.(B.dv), adjoint.(B.ev), B.uplo == 'U' ? :L : :U)
315-
transpose(B::Bidiagonal{<:Number}) = Bidiagonal(B.dv, B.ev, B.uplo == 'U' ? :L : :U)
316-
transpose(B::Bidiagonal) = Bidiagonal(transpose.(B.dv), transpose.(B.ev), B.uplo == 'U' ? :L : :U)
314+
transpose(B::Bidiagonal) = Bidiagonal(vec(transpose(B.dv)), vec(transpose(B.ev)), B.uplo == 'U' ? :L : :U)
315+
transpose(B::Bidiagonal{<:Any, <:Base.ReshapedArray{<:Any,1,<:TransposeAbsVec}}) =
316+
Bidiagonal(transpose(parent(B.dv)), transpose(parent(B.ev)), B.uplo == 'U' ? :L : :U)
317317
permutedims(B::Bidiagonal) = Bidiagonal(B.dv, B.ev, B.uplo == 'U' ? 'L' : 'U')
318318
function permutedims(B::Bidiagonal, perm)
319319
Base.checkdims_perm(axes(B), axes(B), perm)

test/bidiag.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1240,4 +1240,17 @@ end
12401240
@test_throws BoundsError B[LinearAlgebra.BandIndex(0,size(B,1)+1)]
12411241
end
12421242

1243+
@testset "lazy adjtrans" begin
1244+
B = Bidiagonal(fill([1 2; 3 4], 3), fill([5 6; 7 8], 2), :U)
1245+
m = [2 4; 6 8]
1246+
for op in (transpose, adjoint)
1247+
C = op(B)
1248+
el = op(m)
1249+
C[1,1] = el
1250+
@test B[1,1] == m
1251+
C[2,1] = el
1252+
@test B[1,2] == m
1253+
end
1254+
end
1255+
12431256
end # module TestBidiagonal

0 commit comments

Comments
 (0)