From 16a944ed72a8d656d7e91bb04d95e9d9b419474d Mon Sep 17 00:00:00 2001 From: Sacha Verweij Date: Wed, 27 Dec 2017 15:09:33 -0800 Subject: [PATCH 1/7] Make adjoint/transpose lazy with copy for materialization. --- base/linalg/adjtrans.jl | 59 ++++++++---- base/linalg/bidiag.jl | 14 ++- base/linalg/bitarray.jl | 21 ++-- base/linalg/cholesky.jl | 10 +- base/linalg/dense.jl | 2 +- base/linalg/diagonal.jl | 71 +++++++------- base/linalg/factorization.jl | 8 +- base/linalg/generic.jl | 6 +- base/linalg/givens.jl | 31 +++--- base/linalg/lq.jl | 12 ++- base/linalg/lu.jl | 26 ++--- base/linalg/matmul.jl | 49 ++++++---- base/linalg/qr.jl | 6 +- base/linalg/svd.jl | 2 +- base/linalg/symmetric.jl | 55 ++++++----- base/linalg/transpose.jl | 15 +-- base/linalg/triangular.jl | 95 +++++++++++-------- base/linalg/tridiag.jl | 17 +++- base/number.jl | 24 ++++- base/operators.jl | 25 +---- base/pkg/resolve/maxsum.jl | 2 +- base/sparse/linalg.jl | 24 ++--- base/sparse/sparsematrix.jl | 6 +- .../src/IterativeEigensolvers.jl | 2 +- stdlib/IterativeEigensolvers/test/runtests.jl | 10 +- stdlib/SharedArrays/test/runtests.jl | 4 +- stdlib/SuiteSparse/src/cholmod.jl | 2 + stdlib/SuiteSparse/src/spqr.jl | 4 +- stdlib/SuiteSparse/src/umfpack.jl | 8 +- stdlib/SuiteSparse/test/cholmod.jl | 8 +- test/abstractarray.jl | 3 +- test/arrayops.jl | 8 +- test/bitarray.jl | 4 +- test/examples.jl | 4 +- test/iterators.jl | 1 + test/linalg/adjtrans.jl | 24 ++--- test/linalg/bidiag.jl | 6 +- test/linalg/blas.jl | 10 +- test/linalg/bunchkaufman.jl | 10 +- test/linalg/cholesky.jl | 2 +- test/linalg/dense.jl | 14 +-- test/linalg/diagonal.jl | 2 +- test/linalg/eigen.jl | 8 +- test/linalg/givens.jl | 8 +- test/linalg/lapack.jl | 20 ++-- test/linalg/lq.jl | 6 +- test/linalg/lu.jl | 8 +- test/linalg/matmul.jl | 4 +- test/linalg/qr.jl | 10 +- test/linalg/schur.jl | 12 +-- test/linalg/svd.jl | 4 +- test/linalg/symmetric.jl | 24 ++--- test/linalg/triangular.jl | 32 +++---- test/math.jl | 2 +- test/mod2pi.jl | 34 +++---- test/offsetarray.jl | 4 +- test/perf/lapack/eig.jl | 4 +- test/show.jl | 2 +- test/sparse/higherorderfns.jl | 8 +- test/sparse/sparse.jl | 68 ++++++------- test/sparse/sparsevector.jl | 6 +- test/statistics.jl | 20 ++-- 62 files changed, 521 insertions(+), 469 deletions(-) diff --git a/base/linalg/adjtrans.jl b/base/linalg/adjtrans.jl index 46f1229d4cb97..a5a5ebc72075f 100644 --- a/base/linalg/adjtrans.jl +++ b/base/linalg/adjtrans.jl @@ -51,22 +51,40 @@ Transpose(x::Number) = transpose(x) # unwrapping constructors Adjoint(A::Adjoint) = A.parent Transpose(A::Transpose) = A.parent -# normalizing unwrapping constructors -# technically suspect, but at least fine for now -Adjoint(A::Transpose) = conj(A.parent) -Transpose(A::Adjoint) = conj(A.parent) -# eager lowercase quasi-constructors, unwrapping -adjoint(A::Adjoint) = copy(A.parent) -transpose(A::Transpose) = copy(A.parent) -# eager lowercase quasi-constructors, normalizing -# technically suspect, but at least fine for now -adjoint(A::Transpose) = conj!(copy(A.parent)) -transpose(A::Adjoint) = conj!(copy(A.parent)) - -# lowercase quasi-constructors for vectors, TODO: deprecate -adjoint(sv::AbstractVector) = Adjoint(sv) -transpose(sv::AbstractVector) = Transpose(sv) +# wrapping lowercase quasi-constructors +adjoint(A::AbstractVecOrMat) = Adjoint(A) +""" + transpose(A::AbstractMatrix) + +Lazy matrix transpose. Mutating the returned object should appropriately mutate `A`. Often, +but not always, yields `Transpose(A)`, where `Transpose` is a lazy transpose wrapper. Note +that this operation is recursive. + +This operation is intended for linear algebra usage - for general data manipulation see +[`permutedims`](@ref), which is non-recursive. + +# Examples +```jldoctest +julia> A = [1 2 3; 4 5 6; 7 8 9] +3×3 Array{Int64,2}: + 1 2 3 + 4 5 6 + 7 8 9 + +julia> transpose(A) +3×3 Transpose{Int64,Array{Int64,2}}: + 1 4 7 + 2 5 8 + 3 6 9 +``` +""" +transpose(A::AbstractVecOrMat) = Transpose(A) +# unwrapping lowercase quasi-constructors +adjoint(A::Adjoint) = A.parent +transpose(A::Transpose) = A.parent +adjoint(A::Transpose{<:Real}) = A.parent +transpose(A::Adjoint{<:Real}) = A.parent # some aliases for internal convenience use @@ -185,13 +203,14 @@ pinv(v::TransposeAbsVec, tol::Real = 0) = pinv(conj(v.parent)).parent ## right-division \ /(u::AdjointAbsVec, A::AbstractMatrix) = Adjoint(Adjoint(A) \ u.parent) /(u::TransposeAbsVec, A::AbstractMatrix) = Transpose(Transpose(A) \ u.parent) - +/(u::AdjointAbsVec, A::Transpose{<:Any,<:AbstractMatrix}) = Adjoint(conj(A.parent) \ u.parent) # technically should be Adjoint(copy(Adjoint(copy(A))) \ u.parent) +/(u::TransposeAbsVec, A::Adjoint{<:Any,<:AbstractMatrix}) = Transpose(conj(A.parent) \ u.parent) # technically should be Transpose(copy(Transpose(copy(A))) \ u.parent) # dismabiguation methods -*(A::AdjointAbsVec, B::Transpose{<:Any,<:AbstractMatrix}) = A * transpose(B.parent) -*(A::TransposeAbsVec, B::Adjoint{<:Any,<:AbstractMatrix}) = A * adjoint(B.parent) -*(A::Transpose{<:Any,<:AbstractMatrix}, B::Adjoint{<:Any,<:AbstractMatrix}) = transpose(A.parent) * B -*(A::Adjoint{<:Any,<:AbstractMatrix}, B::Transpose{<:Any,<:AbstractMatrix}) = A * transpose(B.parent) +*(A::AdjointAbsVec, B::Transpose{<:Any,<:AbstractMatrix}) = A * copy(B) +*(A::TransposeAbsVec, B::Adjoint{<:Any,<:AbstractMatrix}) = A * copy(B) +*(A::Transpose{<:Any,<:AbstractMatrix}, B::Adjoint{<:Any,<:AbstractMatrix}) = copy(A) * B +*(A::Adjoint{<:Any,<:AbstractMatrix}, B::Transpose{<:Any,<:AbstractMatrix}) = A * copy(B) # Adj/Trans-vector * Trans/Adj-vector, shouldn't exist, here for ambiguity resolution? TODO: test removal *(A::Adjoint{<:Any,<:AbstractVector}, B::Transpose{<:Any,<:AbstractVector}) = throw(MethodError(*, (A, B))) *(A::Transpose{<:Any,<:AbstractVector}, B::Adjoint{<:Any,<:AbstractVector}) = throw(MethodError(*, (A, B))) diff --git a/base/linalg/bidiag.jl b/base/linalg/bidiag.jl index 7c6ad8b1bd2eb..5b95b18233b77 100644 --- a/base/linalg/bidiag.jl +++ b/base/linalg/bidiag.jl @@ -247,8 +247,14 @@ broadcast(::typeof(trunc), ::Type{T}, M::Bidiagonal) where {T<:Integer} = Bidiag broadcast(::typeof(floor), ::Type{T}, M::Bidiagonal) where {T<:Integer} = Bidiagonal(floor.(T, M.dv), floor.(T, M.ev), M.uplo) broadcast(::typeof(ceil), ::Type{T}, M::Bidiagonal) where {T<:Integer} = Bidiagonal(ceil.(T, M.dv), ceil.(T, M.ev), M.uplo) -transpose(M::Bidiagonal) = Bidiagonal(M.dv, M.ev, M.uplo == 'U' ? :L : :U) -adjoint(M::Bidiagonal) = Bidiagonal(conj(M.dv), conj(M.ev), M.uplo == 'U' ? :L : :U) +adjoint(B::Bidiagonal) = Adjoint(B) +transpose(B::Bidiagonal) = Transpose(B) +adjoint(B::Bidiagonal{<:Real}) = Bidiagonal(B.dv, B.ev, B.uplo == 'U' ? :L : :U) +transpose(B::Bidiagonal{<:Number}) = Bidiagonal(B.dv, B.ev, B.uplo == 'U' ? :L : :U) +Base.copy(aB::Adjoint{<:Any,<:Bidiagonal}) = + (B = aB.parent; Bidiagonal(map(x -> copy.(Adjoint.(x)), (B.dv, B.ev))..., B.uplo == 'U' ? :L : :U)) +Base.copy(tB::Transpose{<:Any,<:Bidiagonal}) = + (B = tB.parent; Bidiagonal(map(x -> copy.(Transpose.(x)), (B.dv, B.ev))..., B.uplo == 'U' ? :L : :U)) istriu(M::Bidiagonal) = M.uplo == 'U' || iszero(M.ev) istril(M::Bidiagonal) = M.uplo == 'L' || iszero(M.ev) @@ -501,8 +507,8 @@ const SpecialMatrix = Union{Bidiagonal,SymTridiagonal,Tridiagonal} #Linear solvers ldiv!(A::Union{Bidiagonal, AbstractTriangular}, b::AbstractVector) = naivesub!(A, b) -ldiv!(transA::Transpose{<:Any,<:Bidiagonal}, b::AbstractVector) = ldiv!(transpose(transA.parent), b) -ldiv!(adjA::Adjoint{<:Any,<:Bidiagonal}, b::AbstractVector) = ldiv!(adjoint(adjA.parent), b) +ldiv!(A::Transpose{<:Any,<:Bidiagonal}, b::AbstractVector) = ldiv!(copy(A), b) +ldiv!(A::Adjoint{<:Any,<:Bidiagonal}, b::AbstractVector) = ldiv!(copy(A), b) function ldiv!(A::Union{Bidiagonal,AbstractTriangular}, B::AbstractMatrix) nA,mA = size(A) tmp = similar(B,size(B,1)) diff --git a/base/linalg/bitarray.jl b/base/linalg/bitarray.jl index d2f1601f418ff..ea127ddfeebf4 100644 --- a/base/linalg/bitarray.jl +++ b/base/linalg/bitarray.jl @@ -123,7 +123,7 @@ end ## Structure query functions -issymmetric(A::BitMatrix) = size(A, 1)==size(A, 2) && count(!iszero, A - transpose(A))==0 +issymmetric(A::BitMatrix) = size(A, 1)==size(A, 2) && count(!iszero, A - copy(A'))==0 ishermitian(A::BitMatrix) = issymmetric(A) function nonzero_chunks(chunks::Vector{UInt64}, pos0::Int, pos1::Int) @@ -250,16 +250,19 @@ function put_8x8_chunk(Bc::Vector{UInt64}, i1::Int, i2::Int, x::UInt64, m::Int, return end -function transpose(B::BitMatrix) - l1 = size(B, 1) - l2 = size(B, 2) - Bt = falses(l2, l1) +adjoint(B::Union{BitVector,BitMatrix}) = Adjoint(B) +transpose(B::Union{BitVector,BitMatrix}) = Transpose(B) +Base.copy(B::Adjoint{Bool,BitMatrix}) = transpose!(falses(size(B)), B.parent) +Base.copy(B::Transpose{Bool,BitMatrix}) = transpose!(falses(size(B)), B.parent) +function transpose!(C::BitMatrix, B::BitMatrix) + @boundscheck size(C) == reverse(size(B)) || throw(DimensionMismatch()) + l1, l2 = size(B) cgap1, cinc1 = Base._div64(l1), Base._mod64(l1) cgap2, cinc2 = Base._div64(l2), Base._mod64(l2) Bc = B.chunks - Btc = Bt.chunks + Cc = C.chunks nc = length(Bc) @@ -278,10 +281,8 @@ function transpose(B::BitMatrix) msk8_2 >>>= j + 7 - l2 end - put_8x8_chunk(Btc, j, i, x, l2, cgap2, cinc2, nc, msk8_2) + put_8x8_chunk(Cc, j, i, x, l2, cgap2, cinc2, nc, msk8_2) end end - return Bt + return C end - -adjoint(B::Union{BitMatrix,BitVector}) = transpose(B) diff --git a/base/linalg/cholesky.jl b/base/linalg/cholesky.jl index bd8d1eb5db013..945889b108d04 100644 --- a/base/linalg/cholesky.jl +++ b/base/linalg/cholesky.jl @@ -87,7 +87,7 @@ function _chol!(A::AbstractMatrix, ::Type{UpperTriangular}) return UpperTriangular(A), info end A[k,k] = Akk - AkkInv = inv(adjoint(Akk)) + AkkInv = inv(copy(Akk')) for j = k + 1:n for i = 1:k - 1 A[k,j] -= A[i,k]'A[i,j] @@ -384,9 +384,9 @@ function getproperty(C::Cholesky, d::Symbol) Cfactors = getfield(C, :factors) Cuplo = getfield(C, :uplo) if d == :U - return UpperTriangular(Symbol(Cuplo) == d ? Cfactors : adjoint(Cfactors)) + return UpperTriangular(Symbol(Cuplo) == d ? Cfactors : copy(Cfactors')) elseif d == :L - return LowerTriangular(Symbol(Cuplo) == d ? Cfactors : adjoint(Cfactors)) + return LowerTriangular(Symbol(Cuplo) == d ? Cfactors : copy(Cfactors')) elseif d == :UL return Symbol(Cuplo) == :U ? UpperTriangular(Cfactors) : LowerTriangular(Cfactors) else @@ -397,9 +397,9 @@ function getproperty(C::CholeskyPivoted{T}, d::Symbol) where T<:BlasFloat Cfactors = getfield(C, :factors) Cuplo = getfield(C, :uplo) if d == :U - return UpperTriangular(Symbol(Cuplo) == d ? Cfactors : adjoint(Cfactors)) + return UpperTriangular(Symbol(Cuplo) == d ? Cfactors : copy(Cfactors')) elseif d == :L - return LowerTriangular(Symbol(Cuplo) == d ? Cfactors : adjoint(Cfactors)) + return LowerTriangular(Symbol(Cuplo) == d ? Cfactors : copy(Cfactors')) elseif d == :p return getfield(C, :piv) elseif d == :P diff --git a/base/linalg/dense.jl b/base/linalg/dense.jl index 759ca954133d2..7f9ef51f1f0d0 100644 --- a/base/linalg/dense.jl +++ b/base/linalg/dense.jl @@ -1336,7 +1336,7 @@ function nullspace(A::StridedMatrix{T}) where T (m == 0 || n == 0) && return Matrix{T}(I, n, n) SVD = svdfact(A, full = true) indstart = sum(SVD.S .> max(m,n)*maximum(SVD.S)*eps(eltype(SVD.S))) + 1 - return adjoint(SVD.Vt[indstart:end,:]) + return copy(SVD.Vt[indstart:end,:]') end nullspace(a::StridedVector) = nullspace(reshape(a, length(a), 1)) diff --git a/base/linalg/diagonal.jl b/base/linalg/diagonal.jl index b2104e7e626a5..c9538ebad2ee2 100644 --- a/base/linalg/diagonal.jl +++ b/base/linalg/diagonal.jl @@ -188,8 +188,8 @@ function mul!(D::Diagonal, B::UnitUpperTriangular) UpperTriangular(B.data) end -*(adjD::Adjoint{<:Any,<:Diagonal}, B::Diagonal) = (D = adjD.parent; Diagonal(adjoint.(D.diag) .* B.diag)) -*(adjA::Adjoint{<:Any,<:AbstractTriangular}, D::Diagonal) = (A = adjA.parent; mul!(adjoint(A), D)) +*(D::Adjoint{<:Any,<:Diagonal}, B::Diagonal) = Diagonal(Adjoint.(D.parent.diag) .* B.diag) +*(A::Adjoint{<:Any,<:AbstractTriangular}, D::Diagonal) = mul!(copy(A), D) function *(adjA::Adjoint{<:Any,<:AbstractMatrix}, D::Diagonal) A = adjA.parent Ac = similar(A, promote_op(*, eltype(A), eltype(D.diag)), (size(A, 2), size(A, 1))) @@ -197,8 +197,8 @@ function *(adjA::Adjoint{<:Any,<:AbstractMatrix}, D::Diagonal) mul!(Ac, D) end -*(transD::Transpose{<:Any,<:Diagonal}, B::Diagonal) = (D = transD.parent; Diagonal(transpose.(D.diag) .* B.diag)) -*(transA::Transpose{<:Any,<:AbstractTriangular}, D::Diagonal) = (A = transA.parent; mul!(transpose(A), D)) +*(D::Transpose{<:Any,<:Diagonal}, B::Diagonal) = Diagonal(Transpose.(D.parent.diag) .* B.diag) +*(A::Transpose{<:Any,<:AbstractTriangular}, D::Diagonal) = mul!(copy(A), D) function *(transA::Transpose{<:Any,<:AbstractMatrix}, D::Diagonal) A = transA.parent At = similar(A, promote_op(*, eltype(A), eltype(D.diag)), (size(A, 2), size(A, 1))) @@ -206,8 +206,8 @@ function *(transA::Transpose{<:Any,<:AbstractMatrix}, D::Diagonal) mul!(At, D) end -*(D::Diagonal, adjB::Adjoint{<:Any,<:Diagonal}) = (B = adjB.parent; Diagonal(D.diag .* adjoint.(B.diag))) -*(D::Diagonal, adjB::Adjoint{<:Any,<:AbstractTriangular}) = (B = adjB.parent; mul!(D, adjoint(B))) +*(D::Diagonal, B::Adjoint{<:Any,<:Diagonal}) = Diagonal(D.diag .* Adjoint.(B.parent.diag)) +*(D::Diagonal, B::Adjoint{<:Any,<:AbstractTriangular}) = mul!(D, collect(B)) *(D::Diagonal, adjQ::Adjoint{<:Any,<:Union{QRCompactWYQ,QRPackedQ}}) = (Q = adjQ.parent; mul!(Array(D), Adjoint(Q))) function *(D::Diagonal, adjA::Adjoint{<:Any,<:AbstractMatrix}) A = adjA.parent @@ -216,8 +216,8 @@ function *(D::Diagonal, adjA::Adjoint{<:Any,<:AbstractMatrix}) mul!(D, Ac) end -*(D::Diagonal, transB::Transpose{<:Any,<:Diagonal}) = (B = transB.parent; Diagonal(D.diag .* transpose.(B.diag))) -*(D::Diagonal, transB::Transpose{<:Any,<:AbstractTriangular}) = (B = transB.parent; mul!(D, transpose(B))) +*(D::Diagonal, B::Transpose{<:Any,<:Diagonal}) = Diagonal(D.diag .* Transpose.(B.parent.diag)) +*(D::Diagonal, B::Transpose{<:Any,<:AbstractTriangular}) = mul!(D, copy(B)) function *(D::Diagonal, transA::Transpose{<:Any,<:AbstractMatrix}) A = transA.parent At = similar(A, promote_op(*, eltype(A), eltype(D.diag)), (size(A, 2), size(A, 1))) @@ -225,10 +225,10 @@ function *(D::Diagonal, transA::Transpose{<:Any,<:AbstractMatrix}) mul!(D, At) end -*(adjD::Adjoint{<:Any,<:Diagonal}, adjB::Adjoint{<:Any,<:Diagonal}) = - (D = adjD.parent; B = adjB.parent; Diagonal(adjoint.(D.diag) .* adjoint.(B.diag))) -*(transD::Transpose{<:Any,<:Diagonal}, transB::Transpose{<:Any,<:Diagonal}) = - (D = transD.parent; B = transB.parent; Diagonal(transpose.(D.diag) .* transpose.(B.diag))) +*(D::Adjoint{<:Any,<:Diagonal}, B::Adjoint{<:Any,<:Diagonal}) = + Diagonal(Adjoint.(D.parent.diag) .* Adjoint.(B.parent.diag)) +*(D::Transpose{<:Any,<:Diagonal}, B::Transpose{<:Any,<:Diagonal}) = + Diagonal(Transpose.(D.parent.diag) .* Transpose.(B.parent.diag)) mul!(A::Diagonal, B::Diagonal) = throw(MethodError(mul!, (A, B))) mul!(A::QRPackedQ, D::Diagonal) = throw(MethodError(mul!, (A, D))) @@ -254,23 +254,19 @@ mul!(A::AbstractMatrix, transB::Transpose{<:Any,<:Diagonal}) = (B = transB.paren # Get ambiguous method if try to unify AbstractVector/AbstractMatrix here using AbstractVecOrMat mul!(out::AbstractVector, A::Diagonal, in::AbstractVector) = out .= A.diag .* in -mul!(out::AbstractVector, adjA::Adjoint{<:Any,<:Diagonal}, in::AbstractVector) = - (A = adjA.parent; out .= adjoint.(A.diag) .* in) -mul!(out::AbstractVector, transA::Transpose{<:Any,<:Diagonal}, in::AbstractVector) = - (A = transA.parent; out .= transpose.(A.diag) .* in) +mul!(out::AbstractVector, A::Adjoint{<:Any,<:Diagonal}, in::AbstractVector) = out .= Adjoint.(A.parent.diag) .* in +mul!(out::AbstractVector, A::Transpose{<:Any,<:Diagonal}, in::AbstractVector) = out .= Transpose.(A.parent.diag) .* in mul!(out::AbstractMatrix, A::Diagonal, in::AbstractMatrix) = out .= A.diag .* in -mul!(out::AbstractMatrix, adjA::Adjoint{<:Any,<:Diagonal}, in::AbstractMatrix) = - (A = adjA.parent; out .= adjoint.(A.diag) .* in) -mul!(out::AbstractMatrix, transA::Transpose{<:Any,<:Diagonal}, in::AbstractMatrix) = - (A = transA.parent; out .= transpose.(A.diag) .* in) +mul!(out::AbstractMatrix, A::Adjoint{<:Any,<:Diagonal}, in::AbstractMatrix) = out .= Adjoint.(A.parent.diag) .* in +mul!(out::AbstractMatrix, A::Transpose{<:Any,<:Diagonal}, in::AbstractMatrix) = out .= Transpose.(A.parent.diag) .* in -mul!(C::AbstractMatrix, A::Diagonal, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, adjoint(B.parent)) -mul!(C::AbstractMatrix, A::Diagonal, B::Transpose{<:Any,<:AbstractVecOrMat}) = mul!(C, A, transpose(B.parent)) -mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:Diagonal}, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, adjoint(B.parent)) -mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:Diagonal}, B::Transpose{<:Any,<:AbstractVecOrMat}) = mul!(C, A, transpose(B.parent)) -mul!(C::AbstractMatrix, A::Transpose{<:Any,<:Diagonal}, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, adjoint(B.parent)) -mul!(C::AbstractMatrix, A::Transpose{<:Any,<:Diagonal}, B::Transpose{<:Any,<:AbstractVecOrMat}) = mul!(C, A, transpose(B.parent)) +mul!(C::AbstractMatrix, A::Diagonal, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) +mul!(C::AbstractMatrix, A::Diagonal, B::Transpose{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) +mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:Diagonal}, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) +mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:Diagonal}, B::Transpose{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) +mul!(C::AbstractMatrix, A::Transpose{<:Any,<:Diagonal}, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) +mul!(C::AbstractMatrix, A::Transpose{<:Any,<:Diagonal}, B::Transpose{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) # ambiguities with Symmetric/Hermitian @@ -283,14 +279,10 @@ mul!(C::AbstractMatrix, A::Transpose{<:Any,<:Diagonal}, B::Transpose{<:Any,<:Abs *(transD::Transpose{<:Any,<:Diagonal}, transA::Transpose{<:Any,<:RealHermSymComplexSym}) = transD * transA.parent *(adjA::Adjoint{<:Any,<:RealHermSymComplexHerm}, adjD::Adjoint{<:Any,<:Diagonal}) = adjA.parent * adjD *(adjD::Adjoint{<:Any,<:Diagonal}, adjA::Adjoint{<:Any,<:RealHermSymComplexHerm}) = adjD * adjA.parent -mul!(C::AbstractMatrix, adjA::Adjoint{<:Any,<:Diagonal}, adjB::Adjoint{<:Any,<:RealHermSymComplexHerm}) = - mul!(C, adjA, adjB.parent) -mul!(C::AbstractMatrix, transA::Transpose{<:Any,<:Diagonal}, transB::Transpose{<:Any,<:RealHermSymComplexSym}) = - mul!(C, transA, transB.parent) -mul!(C::AbstractMatrix, adjA::Adjoint{<:Any,<:Diagonal}, adjB::Adjoint{<:Any,<:RealHermSymComplexSym}) = - (A = adjA.parent; C .= adjoint.(A.diag) .* adjB) -mul!(C::AbstractMatrix, transA::Transpose{<:Any,<:Diagonal}, transB::Transpose{<:Any,<:RealHermSymComplexHerm}) = - (A = transA.parent; C .= transpose.(A.diag) .* transB) +mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:Diagonal}, B::Adjoint{<:Any,<:RealHermSymComplexHerm}) = mul!(C, A, B.parent) +mul!(C::AbstractMatrix, A::Transpose{<:Any,<:Diagonal}, B::Transpose{<:Any,<:RealHermSymComplexSym}) = mul!(C, A, B.parent) +mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:Diagonal}, B::Adjoint{<:Any,<:RealHermSymComplexSym}) = C .= Adjoint.(A.parent.diag) .* B +mul!(C::AbstractMatrix, A::Transpose{<:Any,<:Diagonal}, B::Transpose{<:Any,<:RealHermSymComplexHerm}) = C .= Transpose.(A.parent.diag) .* B (/)(Da::Diagonal, Db::Diagonal) = Diagonal(Da.diag ./ Db.diag) @@ -469,11 +461,12 @@ function svd(D::Diagonal{<:Number}) end function svdfact(D::Diagonal) U, s, V = svd(D) - SVD(U, s, adjoint(V)) + SVD(U, s, copy(V')) end # dismabiguation methods: * of Diagonal and Adj/Trans AbsVec -*(A::Diagonal, B::Adjoint{<:Any,<:AbstractVector}) = A * adjoint(B.parent) -*(A::Diagonal, B::Transpose{<:Any,<:AbstractVector}) = A * transpose(B.parent) -*(A::Adjoint{<:Any,<:AbstractVector}, B::Diagonal) = adjoint(A.parent) * B -*(A::Transpose{<:Any,<:AbstractVector}, B::Diagonal) = transpose(A.parent) * B +*(A::Diagonal, B::Adjoint{<:Any,<:AbstractVector}) = A * copy(B) +*(A::Diagonal, B::Transpose{<:Any,<:AbstractVector}) = A * copy(B) +*(A::Adjoint{<:Any,<:AbstractVector}, B::Diagonal) = copy(A) * B +*(A::Transpose{<:Any,<:AbstractVector}, B::Diagonal) = copy(A) * B +# TODO: these methods will yield row matrices, rather than adjoint/transpose vectors diff --git a/base/linalg/factorization.jl b/base/linalg/factorization.jl index 3bef6499d1bb9..c7806e5edd582 100644 --- a/base/linalg/factorization.jl +++ b/base/linalg/factorization.jl @@ -61,9 +61,9 @@ Base.isequal(F::T, G::T) where {T<:Factorization} = all(f -> isequal(getfield(F, # With a real lhs and complex rhs with the same precision, we can reinterpret # the complex rhs as a real rhs with twice the number of columns function (\)(F::Factorization{T}, B::VecOrMat{Complex{T}}) where T<:BlasReal - c2r = reshape(transpose(reinterpret(T, reshape(B, (1, length(B))))), size(B, 1), 2*size(B, 2)) + c2r = reshape(copy(Transpose(reinterpret(T, reshape(B, (1, length(B)))))), size(B, 1), 2*size(B, 2)) x = ldiv!(F, c2r) - return reshape(collect(reinterpret(Complex{T}, transpose(reshape(x, div(length(x), 2), 2)))), _ret_size(F, B)) + return reshape(copy(reinterpret(Complex{T}, copy(Transpose(reshape(x, div(length(x), 2), 2))))), _ret_size(F, B)) end function \(F::Factorization, B::AbstractVecOrMat) @@ -88,5 +88,5 @@ ldiv!(Y::AbstractVecOrMat, transA::Transpose{<:Any,<:Factorization}, B::Abstract (A = transA.parent; ldiv!(Transpose(A), copyto!(Y, B))) # fallback methods for transposed solves -\(transF::Transpose{<:Any,<:Factorization{<:Real}}, B::AbstractVecOrMat) = (F = transF.parent; \(Adjoint(F), B)) -\(transF::Transpose{<:Any,<:Factorization}, B::AbstractVecOrMat) = (F = transF.parent; conj.(\(Adjoint(F), conj.(B)))) +\(F::Transpose{<:Any,<:Factorization{<:Real}}, B::AbstractVecOrMat) = Adjoint(F.parent) \ B +\(F::Transpose{<:Any,<:Factorization}, B::AbstractVecOrMat) = conj.(Adjoint(F.parent) \ conj.(B)) \ No newline at end of file diff --git a/base/linalg/generic.jl b/base/linalg/generic.jl index 805bc4202c066..e59be0a2e0780 100644 --- a/base/linalg/generic.jl +++ b/base/linalg/generic.jl @@ -885,7 +885,7 @@ function (\)(A::AbstractMatrix, B::AbstractVecOrMat) end (\)(a::AbstractVector, b::AbstractArray) = pinv(a) * b -(/)(A::AbstractVecOrMat, B::AbstractVecOrMat) = adjoint(Adjoint(B) \ Adjoint(A)) +(/)(A::AbstractVecOrMat, B::AbstractVecOrMat) = copy(adjoint(adjoint(B) \ adjoint(A))) # \(A::StridedMatrix,x::Number) = inv(A)*x Should be added at some point when the old elementwise version has been deprecated long enough # /(x::Number,A::StridedMatrix) = x*inv(A) /(x::Number, v::AbstractVector) = x*pinv(v) @@ -947,7 +947,7 @@ function issymmetric(A::AbstractMatrix) return false end for i = first(indsn):last(indsn), j = (i):last(indsn) - if A[i,j] != transpose(A[j,i]) + if A[i,j] != Transpose(A[j,i]) return false end end @@ -986,7 +986,7 @@ function ishermitian(A::AbstractMatrix) return false end for i = indsn, j = i:last(indsn) - if A[i,j] != adjoint(A[j,i]) + if A[i,j] != Adjoint(A[j,i]) return false end end diff --git a/base/linalg/givens.jl b/base/linalg/givens.jl index daa3cebb0416d..e270335fe18d8 100644 --- a/base/linalg/givens.jl +++ b/base/linalg/givens.jl @@ -47,8 +47,10 @@ Rotation{T}(R::Rotation) where {T} = Rotation{T}([Givens{T}(g) for g in R.rotati AbstractRotation{T}(G::Givens) where {T} = Givens{T}(G) AbstractRotation{T}(R::Rotation) where {T} = Rotation{T}(R) -adjoint(G::Givens) = Givens(G.i1, G.i2, conj(G.c), -G.s) -adjoint(R::Rotation{T}) where {T} = Rotation{T}(reverse!([adjoint(r) for r in R.rotations])) +adjoint(G::Givens) = Adjoint(G) +adjoint(R::Rotation) = Adjoint(R) +Base.copy(aG::Adjoint{<:Any,<:Givens}) = (G = aG.parent; Givens(G.i1, G.i2, conj(G.c), -G.s)) +Base.copy(aR::Adjoint{<:Any,Rotation{T}}) where {T} = Rotation{T}(reverse!([copy(r') for r in aR.parent.rotations])) realmin2(::Type{Float32}) = reinterpret(Float32, 0x26000000) realmin2(::Type{Float64}) = reinterpret(Float64, 0x21a0000000000000) @@ -370,19 +372,22 @@ function mul!(A::AbstractMatrix, adjR::Adjoint{<:Any,<:Rotation}) end *(G1::Givens{T}, G2::Givens{T}) where {T} = Rotation(push!(push!(Givens{T}[], G2), G1)) +# TODO: None of the following disambiguation methods are great. They should perhaps +# instead be MethodErrors, or revised. +# # dismabiguation methods: *(Adj/Trans of AbsVec or AbsMat, Adj of AbstractRotation) -*(A::Adjoint{<:Any,<:AbstractVector}, B::Adjoint{<:Any,<:AbstractRotation}) = adjoint(A.parent) * B -*(A::Adjoint{<:Any,<:AbstractMatrix}, B::Adjoint{<:Any,<:AbstractRotation}) = adjoint(A.parent) * B -*(A::Transpose{<:Any,<:AbstractVector}, B::Adjoint{<:Any,<:AbstractRotation}) = transpose(A.parent) * B -*(A::Transpose{<:Any,<:AbstractMatrix}, B::Adjoint{<:Any,<:AbstractRotation}) = transpose(A.parent) * B +*(A::Adjoint{<:Any,<:AbstractVector}, B::Adjoint{<:Any,<:AbstractRotation}) = copy(A) * B +*(A::Adjoint{<:Any,<:AbstractMatrix}, B::Adjoint{<:Any,<:AbstractRotation}) = copy(A) * B +*(A::Transpose{<:Any,<:AbstractVector}, B::Adjoint{<:Any,<:AbstractRotation}) = copy(A) * B +*(A::Transpose{<:Any,<:AbstractMatrix}, B::Adjoint{<:Any,<:AbstractRotation}) = copy(A) * B # dismabiguation methods: *(Adj/Trans of AbsTri or RealHermSymComplex{Herm|Sym}, Adj of AbstractRotation) -*(A::Adjoint{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractRotation}) = adjoint(A.parent) * B -*(A::Transpose{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractRotation}) = transpose(A.parent) * B -*(A::Adjoint{<:Any,<:RealHermSymComplexHerm}, B::Adjoint{<:Any,<:AbstractRotation}) = A.parent * B -*(A::Transpose{<:Any,<:RealHermSymComplexSym}, B::Adjoint{<:Any,<:AbstractRotation}) = A.parent * B -# dismabiguation methods: *(Diag/RowVec/AbsTri, Adj of AbstractRotation) -*(A::Diagonal, B::Adjoint{<:Any,<:AbstractRotation}) = A * adjoint(B.parent) -*(A::AbstractTriangular, B::Adjoint{<:Any,<:AbstractRotation}) = A * adjoint(B.parent) +*(A::Adjoint{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractRotation}) = copy(A) * B +*(A::Transpose{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractRotation}) = copy(A) * B +*(A::Adjoint{<:Any,<:RealHermSymComplexHerm}, B::Adjoint{<:Any,<:AbstractRotation}) = copy(A) * B +*(A::Transpose{<:Any,<:RealHermSymComplexSym}, B::Adjoint{<:Any,<:AbstractRotation}) = copy(A) * B +# dismabiguation methods: *(Diag/AbsTri, Adj of AbstractRotation) +*(A::Diagonal, B::Adjoint{<:Any,<:AbstractRotation}) = A * copy(B) +*(A::AbstractTriangular, B::Adjoint{<:Any,<:AbstractRotation}) = A * copy(B) # moar disambiguation mul!(A::QRPackedQ, B::Adjoint{<:Any,<:Givens}) = throw(MethodError(mul!, (A, B))) mul!(A::QRPackedQ, B::Adjoint{<:Any,<:Rotation}) = throw(MethodError(mul!, (A, B))) diff --git a/base/linalg/lq.jl b/base/linalg/lq.jl index a080151b1de2c..1b7983043564b 100644 --- a/base/linalg/lq.jl +++ b/base/linalg/lq.jl @@ -70,7 +70,9 @@ AbstractArray(A::LQ) = AbstractMatrix(A) Matrix(A::LQ) = Array(AbstractArray(A)) Array(A::LQ) = Matrix(A) -adjoint(A::LQ{T}) where {T} = QR{T,typeof(A.factors)}(adjoint(A.factors), A.τ) +adjoint(A::LQ) = Adjoint(A) +Base.copy(F::Adjoint{T,<:LQ{T}}) where {T} = + QR{T,typeof(F.parent.factors)}(copy(Adjoint(F.parent.factors)), copy(F.parent.τ)) function getproperty(F::LQ, d::Symbol) m, n = size(F) @@ -136,8 +138,8 @@ function *(A::QR{TA},B::LQ{TB}) where {TA,TB} TAB = promote_type(TA, TB) mul!(Factorization{TAB}(A), Factorization{TAB}(B)) end -*(A::Adjoint{<:Any,<:LQ}, B::LQ) = adjoint(A.parent) * B -*(A::LQ, B::Adjoint{<:Any,<:LQ}) = A * adjoint(B.parent) +*(A::Adjoint{<:Any,<:LQ}, B::LQ) = copy(A) * B +*(A::LQ, B::Adjoint{<:Any,<:LQ}) = A * copy(B) ## Multiplication by Q ### QB @@ -279,9 +281,9 @@ end # With a real lhs and complex rhs with the same precision, we can reinterpret # the complex rhs as a real rhs with twice the number of columns function (\)(F::LQ{T}, B::VecOrMat{Complex{T}}) where T<:BlasReal - c2r = reshape(transpose(reinterpret(T, reshape(B, (1, length(B))))), size(B, 1), 2*size(B, 2)) + c2r = reshape(copy(Transpose(reinterpret(T, reshape(B, (1, length(B)))))), size(B, 1), 2*size(B, 2)) x = ldiv!(F, c2r) - return reshape(collect(reinterpret(Complex{T}, transpose(reshape(x, div(length(x), 2), 2)))), + return reshape(copy(reinterpret(Complex{T}, copy(Transpose(reshape(x, div(length(x), 2), 2))))), isa(B, AbstractVector) ? (size(F,2),) : (size(F,2), size(B,2))) end diff --git a/base/linalg/lu.jl b/base/linalg/lu.jl index 8c391b8292607..d5d9651c32eca 100644 --- a/base/linalg/lu.jl +++ b/base/linalg/lu.jl @@ -11,6 +11,9 @@ struct LU{T,S<:AbstractMatrix} <: Factorization{T} end LU(factors::AbstractMatrix{T}, ipiv::Vector{BlasInt}, info::BlasInt) where {T} = LU{T,typeof(factors)}(factors, ipiv, info) +adjoint(F::LU) = Adjoint(F) +transpose(F::LU) = Transpose(F) + # StridedMatrix function lufact!(A::StridedMatrix{T}, pivot::Union{Val{false}, Val{true}} = Val(true)) where T<:BlasFloat if pivot === Val(false) @@ -330,21 +333,12 @@ function ldiv!(adjA::Adjoint{<:Any,<:LU{<:Any,<:StridedMatrix}}, B::StridedVecOr _apply_inverse_ipiv!(A, B) end -function \(transA::Transpose{T,<:LU{T,<:StridedMatrix}}, - transB::Transpose{T,<:StridedVecOrMat{T}}) where {T<:BlasFloat} - A, B = transA.parent, transB.parent - @assertnonsingular LAPACK.getrs!('T', A.factors, A.ipiv, transpose(B)) A.info -end -\(transA::Transpose{<:Any,<:LU}, transB::Transpose{<:Any,<:StridedVecOrMat}) = - (A = transA.parent; B = transB.parent; \(Transpose(A), transpose(B))) - -function \(adjA::Adjoint{T,<:LU{T,<:StridedMatrix}}, - adjB::Adjoint{T,<:StridedVecOrMat{T}}) where {T<:BlasComplex} - A, B = adjA.parent, adjB.parent - @assertnonsingular LAPACK.getrs!('C', A.factors, A.ipiv, adjoint(B)) A.info -end -\(adjA::Adjoint{<:Any,<:LU}, adjB::Adjoint{<:Any,<:StridedVecOrMat}) = - (A = adjA.parent; B = adjB.parent; \(Adjoint(A), adjoint(B))) +\(A::Adjoint{<:Any,<:LU}, B::Adjoint{<:Any,<:StridedVecOrMat}) = A \ copy(B) +\(A::Transpose{<:Any,<:LU}, B::Transpose{<:Any,<:StridedVecOrMat}) = A \ copy(B) +\(A::Adjoint{T,<:LU{T,<:StridedMatrix}}, B::Adjoint{T,<:StridedVecOrMat{T}}) where {T<:BlasComplex} = + @assertnonsingular LAPACK.getrs!('C', A.parent.factors, A.parent.ipiv, copy(B)) A.parent.info +\(A::Transpose{T,<:LU{T,<:StridedMatrix}}, B::Transpose{T,<:StridedVecOrMat{T}}) where {T<:BlasFloat} = + @assertnonsingular LAPACK.getrs!('T', A.parent.factors, A.parent.ipiv, copy(B)) A.parent.info function det(F::LU{T}) where T n = checksquare(F) @@ -590,7 +584,7 @@ function ldiv!(adjA::Adjoint{<:Any,LU{T,Tridiagonal{T,V}}}, B::AbstractVecOrMat) return B end -/(B::AbstractMatrix,A::LU) = transpose(Transpose(A) \ Transpose(B)) +/(B::AbstractMatrix, A::LU) = copy(Transpose(Transpose(A) \ Transpose(B))) # Conversions AbstractMatrix(F::LU) = (F.L * F.U)[invperm(F.p),:] diff --git a/base/linalg/matmul.jl b/base/linalg/matmul.jl index 78838f019451e..5f1f06eec792d 100644 --- a/base/linalg/matmul.jl +++ b/base/linalg/matmul.jl @@ -247,7 +247,7 @@ mul!(C::StridedMatrix{T}, transA::Transpose{<:Any,<:StridedVecOrMat{T}}, transB: (A = transA.parent; B = transB.parent; gemm_wrapper!(C, 'T', 'T', A, B)) mul!(C::AbstractMatrix, transA::Transpose{<:Any,<:AbstractVecOrMat}, transB::Transpose{<:Any,<:AbstractVecOrMat}) = (A = transA.parent; B = transB.parent; generic_matmatmul!(C, 'T', 'T', A, B)) -mul!(C::AbstractMatrix, A::Transpose{<:Any,<:AbstractVecOrMat}, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, adjoint(B.parent)) +mul!(C::AbstractMatrix, A::Transpose{<:Any,<:AbstractVecOrMat}, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) *(adjA::Adjoint{<:Any,<:StridedMatrix{T}}, B::StridedMatrix{T}) where {T<:BlasReal} = (A = adjA.parent; *(Transpose(A), B)) @@ -719,18 +719,27 @@ function matmul2x2!(C::AbstractMatrix, tA, tB, A::AbstractMatrix, B::AbstractMat end @inbounds begin if tA == 'T' - A11 = transpose(A[1,1]); A12 = transpose(A[2,1]); A21 = transpose(A[1,2]); A22 = transpose(A[2,2]) + # TODO making these lazy could improve perf + A11 = copy(Transpose(A[1,1])); A12 = copy(Transpose(A[2,1])) + A21 = copy(Transpose(A[1,2])); A22 = copy(Transpose(A[2,2])) elseif tA == 'C' - A11 = adjoint(A[1,1]); A12 = adjoint(A[2,1]); A21 = adjoint(A[1,2]); A22 = adjoint(A[2,2]) + # TODO making these lazy could improve perf + A11 = copy(A[1,1]'); A12 = copy(A[2,1]') + A21 = copy(A[1,2]'); A22 = copy(A[2,2]') else A11 = A[1,1]; A12 = A[1,2]; A21 = A[2,1]; A22 = A[2,2] end if tB == 'T' - B11 = transpose(B[1,1]); B12 = transpose(B[2,1]); B21 = transpose(B[1,2]); B22 = transpose(B[2,2]) + # TODO making these lazy could improve perf + B11 = copy(Transpose(B[1,1])); B12 = copy(Transpose(B[2,1])) + B21 = copy(Transpose(B[1,2])); B22 = copy(Transpose(B[2,2])) elseif tB == 'C' - B11 = adjoint(B[1,1]); B12 = adjoint(B[2,1]); B21 = adjoint(B[1,2]); B22 = adjoint(B[2,2]) + # TODO making these lazy could improve perf + B11 = copy(B[1,1]'); B12 = copy(B[2,1]') + B21 = copy(B[1,2]'); B22 = copy(B[2,2]') else - B11 = B[1,1]; B12 = B[1,2]; B21 = B[2,1]; B22 = B[2,2] + B11 = B[1,1]; B12 = B[1,2]; + B21 = B[2,1]; B22 = B[2,2] end C[1,1] = A11*B11 + A12*B21 C[1,2] = A11*B12 + A12*B22 @@ -751,13 +760,15 @@ function matmul3x3!(C::AbstractMatrix, tA, tB, A::AbstractMatrix, B::AbstractMat end @inbounds begin if tA == 'T' - A11 = transpose(A[1,1]); A12 = transpose(A[2,1]); A13 = transpose(A[3,1]) - A21 = transpose(A[1,2]); A22 = transpose(A[2,2]); A23 = transpose(A[3,2]) - A31 = transpose(A[1,3]); A32 = transpose(A[2,3]); A33 = transpose(A[3,3]) + # TODO making these lazy could improve perf + A11 = copy(Transpose(A[1,1])); A12 = copy(Transpose(A[2,1])); A13 = copy(Transpose(A[3,1])) + A21 = copy(Transpose(A[1,2])); A22 = copy(Transpose(A[2,2])); A23 = copy(Transpose(A[3,2])) + A31 = copy(Transpose(A[1,3])); A32 = copy(Transpose(A[2,3])); A33 = copy(Transpose(A[3,3])) elseif tA == 'C' - A11 = adjoint(A[1,1]); A12 = adjoint(A[2,1]); A13 = adjoint(A[3,1]) - A21 = adjoint(A[1,2]); A22 = adjoint(A[2,2]); A23 = adjoint(A[3,2]) - A31 = adjoint(A[1,3]); A32 = adjoint(A[2,3]); A33 = adjoint(A[3,3]) + # TODO making these lazy could improve perf + A11 = copy(A[1,1]'); A12 = copy(A[2,1]'); A13 = copy(A[3,1]') + A21 = copy(A[1,2]'); A22 = copy(A[2,2]'); A23 = copy(A[3,2]') + A31 = copy(A[1,3]'); A32 = copy(A[2,3]'); A33 = copy(A[3,3]') else A11 = A[1,1]; A12 = A[1,2]; A13 = A[1,3] A21 = A[2,1]; A22 = A[2,2]; A23 = A[2,3] @@ -765,13 +776,15 @@ function matmul3x3!(C::AbstractMatrix, tA, tB, A::AbstractMatrix, B::AbstractMat end if tB == 'T' - B11 = transpose(B[1,1]); B12 = transpose(B[2,1]); B13 = transpose(B[3,1]) - B21 = transpose(B[1,2]); B22 = transpose(B[2,2]); B23 = transpose(B[3,2]) - B31 = transpose(B[1,3]); B32 = transpose(B[2,3]); B33 = transpose(B[3,3]) + # TODO making these lazy could improve perf + B11 = copy(Transpose(B[1,1])); B12 = copy(Transpose(B[2,1])); B13 = copy(Transpose(B[3,1])) + B21 = copy(Transpose(B[1,2])); B22 = copy(Transpose(B[2,2])); B23 = copy(Transpose(B[3,2])) + B31 = copy(Transpose(B[1,3])); B32 = copy(Transpose(B[2,3])); B33 = copy(Transpose(B[3,3])) elseif tB == 'C' - B11 = adjoint(B[1,1]); B12 = adjoint(B[2,1]); B13 = adjoint(B[3,1]) - B21 = adjoint(B[1,2]); B22 = adjoint(B[2,2]); B23 = adjoint(B[3,2]) - B31 = adjoint(B[1,3]); B32 = adjoint(B[2,3]); B33 = adjoint(B[3,3]) + # TODO making these lazy could improve perf + B11 = copy(B[1,1]'); B12 = copy(B[2,1]'); B13 = copy(B[3,1]') + B21 = copy(B[1,2]'); B22 = copy(B[2,2]'); B23 = copy(B[3,2]') + B31 = copy(B[1,3]'); B32 = copy(B[2,3]'); B33 = copy(B[3,3]') else B11 = B[1,1]; B12 = B[1,2]; B13 = B[1,3] B21 = B[2,1]; B22 = B[2,2]; B23 = B[2,3] diff --git a/base/linalg/qr.jl b/base/linalg/qr.jl index 21e5263dc3c87..30d8cbc1117e4 100644 --- a/base/linalg/qr.jl +++ b/base/linalg/qr.jl @@ -792,7 +792,7 @@ function ldiv!(A::QR{T}, B::StridedMatrix{T}) where T for k = m:-1:1 # Trapezoid to triangular by elementary operation x = view(R, k, [k; m + 1:n]) τk = reflector!(x) - τ[k] = adjoint(τk) + τ[k] = conj(τk) for i = 1:k - 1 vRi = R[i,k] for j = m + 1:n @@ -878,7 +878,7 @@ function (\)(A::Union{QR{T},QRCompactWY{T},QRPivoted{T}}, BIn::VecOrMat{Complex{ # |z2|z4| -> |y1|y2|y3|y4| -> |x2|y2| -> |x2|y2|x4|y4| # |x3|y3| # |x4|y4| - B = reshape(transpose(reinterpret(T, reshape(BIn, (1, length(BIn))))), size(BIn, 1), 2*size(BIn, 2)) + B = reshape(copy(Transpose(reinterpret(T, reshape(BIn, (1, length(BIn)))))), size(BIn, 1), 2*size(BIn, 2)) X = _zeros(T, B, n) X[1:size(B, 1), :] = B @@ -889,7 +889,7 @@ function (\)(A::Union{QR{T},QRCompactWY{T},QRPivoted{T}}, BIn::VecOrMat{Complex{ # |z2|z4| <- |y1|y2|y3|y4| <- |x2|y2| <- |x2|y2|x4|y4| # |x3|y3| # |x4|y4| - XX = reshape(collect(reinterpret(Complex{T}, transpose(reshape(X, div(length(X), 2), 2)))), _ret_size(A, BIn)) + XX = reshape(collect(reinterpret(Complex{T}, copy(Transpose(reshape(X, div(length(X), 2), 2))))), _ret_size(A, BIn)) return _cut_B(XX, 1:n) end diff --git a/base/linalg/svd.jl b/base/linalg/svd.jl index f8daef26e5f5a..ceaab76430cfe 100644 --- a/base/linalg/svd.jl +++ b/base/linalg/svd.jl @@ -165,7 +165,7 @@ function svd(A::AbstractArray; full::Bool = false, thin::Union{Bool,Nothing} = n full::Bool = !thin end F = svdfact(A, full = full) - F.U, F.S, adjoint(F.Vt) + F.U, F.S, copy(F.Vt') end function svd(x::Number; full::Bool = false, thin::Union{Bool,Nothing} = nothing) # DEPRECATION TODO: remove deprecated thin argument and associated logic after 0.7 diff --git a/base/linalg/symmetric.jl b/base/linalg/symmetric.jl index c019375b7cfcf..214dcf2264649 100644 --- a/base/linalg/symmetric.jl +++ b/base/linalg/symmetric.jl @@ -244,18 +244,21 @@ ishermitian(A::Symmetric{<:Complex}) = isreal(A) issymmetric(A::Hermitian{<:Real}) = true issymmetric(A::Hermitian{<:Complex}) = isreal(A) issymmetric(A::Symmetric) = true + +adjoint(A::Hermitian) = A transpose(A::Symmetric) = A -transpose(A::Hermitian{<:Real}) = A adjoint(A::Symmetric{<:Real}) = A -function adjoint(A::Symmetric) - AC = adjoint(A.data) - return Symmetric(AC, ifelse(A.uplo == 'U', :L, :U)) -end -function transpose(A::Hermitian) - AT = transpose(A.data) - return Hermitian(AT, ifelse(A.uplo == 'U', :L, :U)) -end -adjoint(A::Hermitian) = A +transpose(A::Hermitian{<:Real}) = A +adjoint(A::Symmetric) = Adjoint(A) +transpose(A::Hermitian) = Transpose(A) + +Base.copy(A::Adjoint{<:Any,<:Hermitian}) = copy(A.parent) +Base.copy(A::Transpose{<:Any,<:Symmetric}) = copy(A.parent) +Base.copy(A::Adjoint{<:Any,<:Symmetric}) = + Symmetric(copy(Adjoint(A.parent.data)), ifelse(A.parent.uplo == 'U', :L, :U)) +Base.collect(A::Transpose{<:Any,<:Hermitian}) = + Hermitian(copy(Transpose(A.parent.data)), ifelse(A.parent.uplo == 'U', :L, :U)) + trace(A::Hermitian) = real(trace(A.data)) Base.conj(A::HermOrSym) = typeof(A)(conj(A.data), A.uplo) @@ -264,25 +267,25 @@ Base.conj!(A::HermOrSym) = typeof(A)(conj!(A.data), A.uplo) # tril/triu function tril(A::Hermitian, k::Integer=0) if A.uplo == 'U' && k <= 0 - return tril!(adjoint(A.data),k) + return tril!(copy(A.data'),k) elseif A.uplo == 'U' && k > 0 - return tril!(adjoint(A.data),-1) + tril!(triu(A.data),k) + return tril!(copy(A.data'),-1) + tril!(triu(A.data),k) elseif A.uplo == 'L' && k <= 0 return tril(A.data,k) else - return tril(A.data,-1) + tril!(triu!(adjoint(A.data)),k) + return tril(A.data,-1) + tril!(triu!(copy(A.data')),k) end end function tril(A::Symmetric, k::Integer=0) if A.uplo == 'U' && k <= 0 - return tril!(transpose(A.data),k) + return tril!(copy(Transpose(A.data)),k) elseif A.uplo == 'U' && k > 0 - return tril!(transpose(A.data),-1) + tril!(triu(A.data),k) + return tril!(copy(Transpose(A.data)),-1) + tril!(triu(A.data),k) elseif A.uplo == 'L' && k <= 0 return tril(A.data,k) else - return tril(A.data,-1) + tril!(triu!(transpose(A.data)),k) + return tril(A.data,-1) + tril!(triu!(copy(Transpose(A.data))),k) end end @@ -290,11 +293,11 @@ function triu(A::Hermitian, k::Integer=0) if A.uplo == 'U' && k >= 0 return triu(A.data,k) elseif A.uplo == 'U' && k < 0 - return triu(A.data,1) + triu!(tril!(adjoint(A.data)),k) + return triu(A.data,1) + triu!(tril!(copy(A.data')),k) elseif A.uplo == 'L' && k >= 0 - return triu!(adjoint(A.data),k) + return triu!(copy(A.data'),k) else - return triu!(adjoint(A.data),1) + triu!(tril(A.data),k) + return triu!(copy(A.data'),1) + triu!(tril(A.data),k) end end @@ -302,11 +305,11 @@ function triu(A::Symmetric, k::Integer=0) if A.uplo == 'U' && k >= 0 return triu(A.data,k) elseif A.uplo == 'U' && k < 0 - return triu(A.data,1) + triu!(tril!(transpose(A.data)),k) + return triu(A.data,1) + triu!(tril!(copy(Transpose(A.data))),k) elseif A.uplo == 'L' && k >= 0 - return triu!(transpose(A.data),k) + return triu!(copy(Transpose(A.data)),k) else - return triu!(transpose(A.data),1) + triu!(tril(A.data),k) + return triu!(copy(Transpose(A.data)),1) + triu!(tril(A.data),k) end end @@ -551,18 +554,18 @@ eigmax(A::RealHermSymComplexHerm{<:Real,<:StridedMatrix}) = eigvals(A, size(A, 1 eigmin(A::RealHermSymComplexHerm{<:Real,<:StridedMatrix}) = eigvals(A, 1:1)[1] function eigfact!(A::HermOrSym{T,S}, B::HermOrSym{T,S}) where {T<:BlasReal,S<:StridedMatrix} - vals, vecs, _ = LAPACK.sygvd!(1, 'V', A.uplo, A.data, B.uplo == A.uplo ? B.data : adjoint(B.data)) + vals, vecs, _ = LAPACK.sygvd!(1, 'V', A.uplo, A.data, B.uplo == A.uplo ? B.data : copy(B.data')) GeneralizedEigen(vals, vecs) end function eigfact!(A::Hermitian{T,S}, B::Hermitian{T,S}) where {T<:BlasComplex,S<:StridedMatrix} - vals, vecs, _ = LAPACK.sygvd!(1, 'V', A.uplo, A.data, B.uplo == A.uplo ? B.data : adjoint(B.data)) + vals, vecs, _ = LAPACK.sygvd!(1, 'V', A.uplo, A.data, B.uplo == A.uplo ? B.data : copy(B.data')) GeneralizedEigen(vals, vecs) end eigvals!(A::HermOrSym{T,S}, B::HermOrSym{T,S}) where {T<:BlasReal,S<:StridedMatrix} = - LAPACK.sygvd!(1, 'N', A.uplo, A.data, B.uplo == A.uplo ? B.data : adjoint(B.data))[1] + LAPACK.sygvd!(1, 'N', A.uplo, A.data, B.uplo == A.uplo ? B.data : copy(B.data'))[1] eigvals!(A::Hermitian{T,S}, B::Hermitian{T,S}) where {T<:BlasComplex,S<:StridedMatrix} = - LAPACK.sygvd!(1, 'N', A.uplo, A.data, B.uplo == A.uplo ? B.data : adjoint(B.data))[1] + LAPACK.sygvd!(1, 'N', A.uplo, A.data, B.uplo == A.uplo ? B.data : copy(B.data'))[1] eigvecs(A::HermOrSym) = eigvecs(eigfact(A)) diff --git a/base/linalg/transpose.jl b/base/linalg/transpose.jl index a6a8c1622a378..5b67703c57ee7 100644 --- a/base/linalg/transpose.jl +++ b/base/linalg/transpose.jl @@ -169,19 +169,8 @@ julia> transpose(A) 3 6 9 ``` """ -function transpose(A::AbstractMatrix) - ind1, ind2 = axes(A) - B = similar(A, (ind2, ind1)) - transpose!(B, A) -end -function adjoint(A::AbstractMatrix) - ind1, ind2 = axes(A) - B = similar(A, (ind2, ind1)) - adjoint!(B, A) -end - -@inline adjoint(A::AbstractVector{<:Real}) = transpose(A) -@inline adjoint(A::AbstractMatrix{<:Real}) = transpose(A) +Base.copy(A::Transpose{<:Any,<:AbstractMatrix}) = transpose!(similar(A.parent, reverse(axes(A.parent))), A.parent) +Base.copy(A::Adjoint{<:Any,<:AbstractMatrix}) = adjoint!(similar(A.parent, reverse(axes(A.parent))), A.parent) function copy_transpose!(B::AbstractVecOrMat, ir_dest::AbstractRange{Int}, jr_dest::AbstractRange{Int}, A::AbstractVecOrMat, ir_src::AbstractRange{Int}, jr_src::AbstractRange{Int}) diff --git a/base/linalg/triangular.jl b/base/linalg/triangular.jl index 3685b38c88647..27f442055434c 100644 --- a/base/linalg/triangular.jl +++ b/base/linalg/triangular.jl @@ -328,14 +328,25 @@ function tril!(A::UnitLowerTriangular, k::Integer=0) return tril!(LowerTriangular(A.data),k) end -transpose(A::LowerTriangular) = UpperTriangular(transpose(A.data)) -transpose(A::UnitLowerTriangular) = UnitUpperTriangular(transpose(A.data)) -transpose(A::UpperTriangular) = LowerTriangular(transpose(A.data)) -transpose(A::UnitUpperTriangular) = UnitLowerTriangular(transpose(A.data)) -adjoint(A::LowerTriangular) = UpperTriangular(adjoint(A.data)) -adjoint(A::UnitLowerTriangular) = UnitUpperTriangular(adjoint(A.data)) -adjoint(A::UpperTriangular) = LowerTriangular(adjoint(A.data)) -adjoint(A::UnitUpperTriangular) = UnitLowerTriangular(adjoint(A.data)) +# TODO consolidate +adjoint(A::LowerTriangular) = Adjoint(A) +adjoint(A::UpperTriangular) = Adjoint(A) +adjoint(A::UnitLowerTriangular) = Adjoint(A) +adjoint(A::UnitUpperTriangular) = Adjoint(A) +transpose(A::LowerTriangular) = Transpose(A) +transpose(A::UpperTriangular) = Transpose(A) +transpose(A::UnitLowerTriangular) = Transpose(A) +transpose(A::UnitUpperTriangular) = Transpose(A) + +# TODO consolidate +Base.copy(A::Adjoint{<:Any,<:LowerTriangular}) = adjoint!(copy(A.parent)) +Base.copy(A::Adjoint{<:Any,<:UpperTriangular}) = adjoint!(copy(A.parent)) +Base.copy(A::Adjoint{<:Any,<:UnitLowerTriangular}) = adjoint!(copy(A.parent)) +Base.copy(A::Adjoint{<:Any,<:UnitUpperTriangular}) = adjoint!(copy(A.parent)) +Base.copy(A::Transpose{<:Any,<:LowerTriangular}) = transpose!(copy(A.parent)) +Base.copy(A::Transpose{<:Any,<:UpperTriangular}) = transpose!(copy(A.parent)) +Base.copy(A::Transpose{<:Any,<:UnitLowerTriangular}) = transpose!(copy(A.parent)) +Base.copy(A::Transpose{<:Any,<:UnitUpperTriangular}) = transpose!(copy(A.parent)) transpose!(A::LowerTriangular) = UpperTriangular(copytri!(A.data, 'L')) transpose!(A::UnitLowerTriangular) = UnitUpperTriangular(copytri!(A.data, 'L')) @@ -473,10 +484,10 @@ mul!(C::AbstractMatrix , transA::Transpose{<:Any,<:AbstractTriangular}, B::Abst (A = transA.parent; mul!(Transpose(A), copyto!(C, B))) mul!(C::AbstractVecOrMat, transA::Transpose{<:Any,<:AbstractTriangular}, B::AbstractVecOrMat) = (A = transA.parent; mul!(Transpose(A), copyto!(C, B))) -mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, adjoint(B.parent)) -mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractVecOrMat}) = mul!(C, A, adjoint(B.parent)) -mul!(C::AbstractMatrix, A::Transpose{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, adjoint(B.parent)) -mul!(C::AbstractMatrix, A::Transpose{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractVecOrMat}) = mul!(C, A, transpose(B.parent)) +mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) +mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) +mul!(C::AbstractMatrix, A::Transpose{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) +mul!(C::AbstractMatrix, A::Transpose{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) mul!(C::AbstractVector, A::Adjoint{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractVecOrMat}) = throw(MethodError(mul!, (C, A, B))) mul!(C::AbstractVector, A::Transpose{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractVecOrMat}) = throw(MethodError(mul!, (C, A, B))) @@ -588,13 +599,13 @@ function eigvecs(A::UnitUpperTriangular{<:BlasFloat,<:StridedMatrix}) LAPACK.trevc!('R', 'A', BlasInt[], triu!(A.data)) end function eigvecs(A::LowerTriangular{<:BlasFloat,<:StridedMatrix}) - LAPACK.trevc!('L', 'A', BlasInt[], adjoint(tril!(A.data))) + LAPACK.trevc!('L', 'A', BlasInt[], copy(tril!(A.data)')) end function eigvecs(A::UnitLowerTriangular{<:BlasFloat,<:StridedMatrix}) for i = 1:size(A, 1) A.data[i,i] = 1 end - LAPACK.trevc!('L', 'A', BlasInt[], adjoint(tril!(A.data))) + LAPACK.trevc!('L', 'A', BlasInt[], copy(tril!(A.data)')) end #################### @@ -1848,16 +1859,16 @@ end # below might compute an unnecessary copy. Eliminating the copy requires adding # all the promotion logic here once again. Since these methods are probably relatively # rare, we chose not to bother for now. -*(adjA::Adjoint{<:Any,<:AbstractMatrix}, B::AbstractTriangular) = (*)(adjoint(adjA.parent), B) -*(transA::Transpose{<:Any,<:AbstractMatrix}, B::AbstractTriangular) = (*)(transpose(transA.parent), B) -*(A::AbstractTriangular, adjB::Adjoint{<:Any,<:AbstractMatrix}) = (*)(A, adjoint(adjB.parent)) -*(A::AbstractTriangular, transB::Transpose{<:Any,<:AbstractMatrix}) = (*)(A, transpose(transB.parent)) -*(adjA::Adjoint{<:Any,<:AbstractTriangular}, adjB::Adjoint{<:Any,<:AbstractTriangular}) = *(adjA, adjoint(adjB.parent)) -*(adjA::Adjoint{<:Any,<:AbstractTriangular}, adjB::Adjoint{<:Any,<:AbstractMatrix}) = *(adjA, adjoint(adjB.parent)) -*(adjA::Adjoint{<:Any,<:AbstractMatrix}, adjB::Adjoint{<:Any,<:AbstractTriangular}) = *(adjoint(adjA.parent), adjB) -*(transA::Transpose{<:Any,<:AbstractTriangular}, transB::Transpose{<:Any,<:AbstractTriangular}) = *(transA, transpose(transB.parent)) -*(transA::Transpose{<:Any,<:AbstractTriangular}, transB::Transpose{<:Any,<:AbstractMatrix}) = *(transA, transpose(transB.parent)) -*(transA::Transpose{<:Any,<:AbstractMatrix}, transB::Transpose{<:Any,<:AbstractTriangular}) = *(transpose(transA.parent), transB) +*(A::Adjoint{<:Any,<:AbstractMatrix}, B::AbstractTriangular) = copy(A) * B +*(A::Transpose{<:Any,<:AbstractMatrix}, B::AbstractTriangular) = copy(A) * B +*(A::AbstractTriangular, B::Adjoint{<:Any,<:AbstractMatrix}) = A * copy(B) +*(A::AbstractTriangular, B::Transpose{<:Any,<:AbstractMatrix}) = A * copy(B) +*(A::Adjoint{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractTriangular}) = A * copy(B) +*(A::Adjoint{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractMatrix}) = A * copy(B) +*(A::Adjoint{<:Any,<:AbstractMatrix}, B::Adjoint{<:Any,<:AbstractTriangular}) = copy(A) * B +*(A::Transpose{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractTriangular}) = A * copy(B) +*(A::Transpose{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractMatrix}) = A * copy(B) +*(A::Transpose{<:Any,<:AbstractMatrix}, B::Transpose{<:Any,<:AbstractTriangular}) = copy(A) * B # Complex matrix power for upper triangular factor, see: # Higham and Lin, "A Schur-Padé algorithm for fractional powers of a Matrix", @@ -1926,7 +1937,7 @@ function powm!(A0::UpperTriangular{<:BlasFloat}, p::Real) scale!(S, normA0^p) return S end -powm(A::LowerTriangular, p::Real) = transpose(powm(transpose(A), p::Real)) +powm(A::LowerTriangular, p::Real) = copy(Transpose(powm(copy(Transpose(A)), p::Real))) # Complex matrix logarithm for the upper triangular factor, see: # Al-Mohy and Higham, "Improved inverse scaling and squaring algorithms for @@ -2110,7 +2121,7 @@ function log(A0::UpperTriangular{T}) where T<:BlasFloat return UpperTriangular(Y) end -log(A::LowerTriangular) = transpose(log(transpose(A))) +log(A::LowerTriangular) = copy(Transpose(log(copy(Transpose(A))))) # Auxiliary functions for matrix logarithm and matrix power @@ -2318,8 +2329,8 @@ function sqrt(A::UnitUpperTriangular{T}) where T end return UnitUpperTriangular(R) end -sqrt(A::LowerTriangular) = transpose(sqrt(transpose(A))) -sqrt(A::UnitLowerTriangular) = transpose(sqrt(transpose(A))) +sqrt(A::LowerTriangular) = copy(Transpose(sqrt(copy(Transpose(A))))) +sqrt(A::UnitLowerTriangular) = copy(Transpose(sqrt(copy(Transpose(A))))) # Generic eigensystems eigvals(A::AbstractTriangular) = diag(A) @@ -2362,23 +2373,23 @@ end factorize(A::AbstractTriangular) = A # dismabiguation methods: *(AbstractTriangular, Adj/Trans of AbstractVector) -*(A::AbstractTriangular, B::Adjoint{<:Any,<:AbstractVector}) = A * adjoint(B.parent) -*(A::AbstractTriangular, B::Transpose{<:Any,<:AbstractVector}) = A * transpose(B.parent) +*(A::AbstractTriangular, B::Adjoint{<:Any,<:AbstractVector}) = A * copy(B) +*(A::AbstractTriangular, B::Transpose{<:Any,<:AbstractVector}) = A * copy(B) # dismabiguation methods: *(Adj/Trans of AbstractTriangular, Trans/Ajd of AbstractTriangular) -*(A::Adjoint{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractTriangular}) = adjoint(A.parent) * B -*(A::Transpose{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractTriangular}) = transpose(A.parent) * B +*(A::Adjoint{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractTriangular}) = copy(A) * B +*(A::Transpose{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractTriangular}) = copy(A) * B # dismabiguation methods: *(Adj/Trans of AbstractTriangular, Adj/Trans of AbsVec or AbsMat) -*(A::Adjoint{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractVector}) = A * adjoint(B.parent) -*(A::Adjoint{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractMatrix}) = A * transpose(B.parent) -*(A::Adjoint{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractVector}) = A * transpose(B.parent) -*(A::Transpose{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractVector}) = A * transpose(B.parent) -*(A::Transpose{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractVector}) = A * adjoint(B.parent) -*(A::Transpose{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractMatrix}) = A * adjoint(B.parent) +*(A::Adjoint{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractVector}) = A * copy(B) +*(A::Adjoint{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractMatrix}) = A * copy(B) +*(A::Adjoint{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractVector}) = A * copy(B) +*(A::Transpose{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractVector}) = A * copy(B) +*(A::Transpose{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractVector}) = A * copy(B) +*(A::Transpose{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractMatrix}) = A * copy(B) # dismabiguation methods: *(Adj/Trans of AbsVec or AbsMat, Adj/Trans of AbstractTriangular) -*(A::Adjoint{<:Any,<:AbstractVector}, B::Transpose{<:Any,<:AbstractTriangular}) = adjoint(A.parent) * B -*(A::Adjoint{<:Any,<:AbstractMatrix}, B::Transpose{<:Any,<:AbstractTriangular}) = adjoint(A.parent) * B -*(A::Transpose{<:Any,<:AbstractVector}, B::Adjoint{<:Any,<:AbstractTriangular}) = transpose(A.parent) * B -*(A::Transpose{<:Any,<:AbstractMatrix}, B::Adjoint{<:Any,<:AbstractTriangular}) = transpose(A.parent) * B +*(A::Adjoint{<:Any,<:AbstractVector}, B::Transpose{<:Any,<:AbstractTriangular}) = copy(A) * B +*(A::Adjoint{<:Any,<:AbstractMatrix}, B::Transpose{<:Any,<:AbstractTriangular}) = copy(A) * B +*(A::Transpose{<:Any,<:AbstractVector}, B::Adjoint{<:Any,<:AbstractTriangular}) = copy(A) * B +*(A::Transpose{<:Any,<:AbstractMatrix}, B::Adjoint{<:Any,<:AbstractTriangular}) = copy(A) * B # disambiguation methods: /(Adjoint of AbsVec, <:AbstractTriangular) /(u::AdjointAbsVec, A::Union{LowerTriangular,UpperTriangular}) = Adjoint(Adjoint(A) \ u.parent) diff --git a/base/linalg/tridiag.jl b/base/linalg/tridiag.jl index 0bc8448e50c0d..383abe2c22001 100644 --- a/base/linalg/tridiag.jl +++ b/base/linalg/tridiag.jl @@ -127,8 +127,11 @@ broadcast(::typeof(trunc), ::Type{T}, M::SymTridiagonal) where {T<:Integer} = Sy broadcast(::typeof(floor), ::Type{T}, M::SymTridiagonal) where {T<:Integer} = SymTridiagonal(floor.(T, M.dv), floor.(T, M.ev)) broadcast(::typeof(ceil), ::Type{T}, M::SymTridiagonal) where {T<:Integer} = SymTridiagonal(ceil.(T, M.dv), ceil.(T, M.ev)) -transpose(M::SymTridiagonal) = M #Identity operation -adjoint(M::SymTridiagonal) = conj(M) +transpose(S::SymTridiagonal) = S +adjoint(S::SymTridiagonal{<:Real}) = S +adjoint(S::SymTridiagonal) = Adjoint(S) +Base.copy(S::Adjoint{<:Any,<:SymTridiagonal}) = SymTridiagonal(map(x -> copy.(Adjoint.(x)), (S.parent.dv, S.parent.ev))...) +Base.copy(S::Transpose{<:Any,<:SymTridiagonal}) = SymTridiagonal(map(x -> copy.(Transpose.(x)), (S.parent.dv, S.parent.ev))...) function diag(M::SymTridiagonal, n::Integer=0) # every branch call similar(..., ::Int) to make sure the @@ -519,10 +522,14 @@ broadcast(::typeof(floor), ::Type{T}, M::Tridiagonal) where {T<:Integer} = broadcast(::typeof(ceil), ::Type{T}, M::Tridiagonal) where {T<:Integer} = Tridiagonal(ceil.(T, M.dl), ceil.(T, M.d), ceil.(T, M.du)) -transpose(M::Tridiagonal) = Tridiagonal(M.du, M.d, M.dl) -adjoint(M::Tridiagonal) = conj(transpose(M)) +adjoint(S::Tridiagonal) = Adjoint(S) +transpose(S::Tridiagonal) = Transpose(S) +adjoint(S::Tridiagonal{<:Real}) = Tridiagonal(S.du, S.d, S.dl) +transpose(S::Tridiagonal{<:Number}) = Tridiagonal(S.du, S.d, S.dl) +Base.copy(aS::Adjoint{<:Any,<:Tridiagonal}) = (S = aS.parent; Tridiagonal(map(x -> copy.(Adjoint.(x)), (S.du, S.d, S.dl))...)) +Base.copy(tS::Transpose{<:Any,<:Tridiagonal}) = (S = tS.parent; Tridiagonal(map(x -> copy.(Transpose.(x)), (S.du, S.d, S.dl))...)) -\(A::Adjoint{<:Any,<:Tridiagonal}, B::Adjoint{<:Any,<:StridedVecOrMat}) = adjoint(A.parent) \ adjoint(B.parent) +\(A::Adjoint{<:Any,<:Tridiagonal}, B::Adjoint{<:Any,<:StridedVecOrMat}) = copy(A) \ copy(B) function diag(M::Tridiagonal{T}, n::Integer=0) where T # every branch call similar(..., ::Int) to make sure the diff --git a/base/number.jl b/base/number.jl index d6c9bd4ca5804..bc05e0c3619ef 100644 --- a/base/number.jl +++ b/base/number.jl @@ -69,7 +69,7 @@ function getindex(x::Number, I::Integer...) end first(x::Number) = x last(x::Number) = x -copy(x::Number) = x # some code treats numbers as collection-like +copy(x::Number) = x # some code treats numbers as collection-like """ divrem(x, y) @@ -171,6 +171,28 @@ copysign(x::Real, y::Real) = ifelse(signbit(x)!=signbit(y), -x, +x) conj(x::Real) = x transpose(x::Number) = x +""" + adjoint(A) + +Lazy adjoint (conjugate transposition) (also postfix `'`). Note that `adjoint` is applied recursively to +elements. + +This operation is intended for linear algebra usage - for general data manipulation see +[`permutedims`](@ref). + +# Examples +```jldoctest +julia> A = [3+2im 9+2im; 8+7im 4+6im] +2×2 Array{Complex{Int64},2}: + 3+2im 9+2im + 8+7im 4+6im + +julia> adjoint(A) +2×2 Adjoint{Complex{Int64},Array{Complex{Int64},2}}: + 3-2im 8-7im + 9-2im 4-6im +``` +""" adjoint(x::Number) = conj(x) angle(z::Real) = atan2(zero(z), z) diff --git a/base/operators.jl b/base/operators.jl index a54f59fc8b3cc..c28f5bf4f63bd 100644 --- a/base/operators.jl +++ b/base/operators.jl @@ -475,7 +475,7 @@ julia> inv(A) * x 4.5 ``` """ -\(x,y) = adjoint(Adjoint(y)/Adjoint(x)) +\(x,y) = adjoint(adjoint(y)/adjoint(x)) # Core <<, >>, and >>> take either Int or UInt as second arg. Signed shift # counts can shift in either direction, and are translated here to unsigned @@ -717,29 +717,6 @@ fldmod1(x::T, y::T) where {T<:Integer} = (fld1(x,y), mod1(x,y)) # postfix apostophre Core.postfixapostrophize(x) = Adjoint(x) -""" - adjoint(A) - -The conjugate transposition operator (`'`). Note that `adjoint` is applied recursively to -elements. - -This operation is intended for linear algebra usage - for general data manipulation see -[`permutedims`](@ref). - -# Examples -```jldoctest -julia> A = [3+2im 9+2im; 8+7im 4+6im] -2×2 Array{Complex{Int64},2}: - 3+2im 9+2im - 8+7im 4+6im - -julia> adjoint(A) -2×2 Array{Complex{Int64},2}: - 3-2im 8-7im - 9-2im 4-6im -``` -""" -adjoint(x) = conj(transpose(x)) conj(x) = x diff --git a/base/pkg/resolve/maxsum.jl b/base/pkg/resolve/maxsum.jl index cc22a8abe3555..c35bdc5aa9b58 100644 --- a/base/pkg/resolve/maxsum.jl +++ b/base/pkg/resolve/maxsum.jl @@ -122,7 +122,7 @@ mutable struct Graph adjdict[p0][p1] = j1 bm = trues(spp[p1], spp[p0]) - bmt = adjoint(bm) + bmt = trues(spp[p0], spp[p1]) push!(gmsk[p0], bm) push!(gmsk[p1], bmt) diff --git a/base/sparse/linalg.jl b/base/sparse/linalg.jl index 79d15212c89cc..42727a33a501e 100644 --- a/base/sparse/linalg.jl +++ b/base/sparse/linalg.jl @@ -139,19 +139,13 @@ end # Sparse matrix multiplication as described in [Gustavson, 1978]: # http://dl.acm.org/citation.cfm?id=355796 -(*)(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} = spmatmul(A,B) -*(A::SparseMatrixCSC{Tv,Ti}, transB::Transpose{<:Any,<:SparseMatrixCSC{Tv,Ti}}) where {Tv,Ti} = - (B = transB.parent; spmatmul(A, transpose(B))) -*(A::SparseMatrixCSC{Tv,Ti}, adjB::Adjoint{<:Any,<:SparseMatrixCSC{Tv,Ti}}) where {Tv,Ti} = - (B = adjB.parent; spmatmul(A, adjoint(B))) -*(transA::Transpose{<:Any,<:SparseMatrixCSC{Tv,Ti}}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} = - (A = transA.parent; spmatmul(tranpsose(A), B)) -*(adjA::Adjoint{<:Any,<:SparseMatrixCSC{Tv,Ti}}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} = - (A = adjA.parent; spmatmul(adjoint(A), B)) -*(transA::Transpose{<:Any,<:SparseMatrixCSC{Tv,Ti}}, transB::Transpose{<:Any,<:SparseMatrixCSC{Tv,Ti}}) where {Tv,Ti} = - (A = transA.parent; B = transB.parent; spmatmul(transpose(A), transpose(B))) -*(adjA::Adjoint{<:Any,<:SparseMatrixCSC{Tv,Ti}}, adjB::Adjoint{<:Any,<:SparseMatrixCSC{Tv,Ti}}) where {Tv,Ti} = - (A = adjA.parent; B = adjB.parent; spmatmul(adjoint(A), adjoint(B))) +*(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} = spmatmul(A,B) +*(A::SparseMatrixCSC{Tv,Ti}, B::Adjoint{<:Any,<:SparseMatrixCSC{Tv,Ti}}) where {Tv,Ti} = spmatmul(A, copy(B)) +*(A::SparseMatrixCSC{Tv,Ti}, B::Transpose{<:Any,<:SparseMatrixCSC{Tv,Ti}}) where {Tv,Ti} = spmatmul(A, copy(B)) +*(A::Transpose{<:Any,<:SparseMatrixCSC{Tv,Ti}}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} = spmatmul(copy(A), B) +*(A::Adjoint{<:Any,<:SparseMatrixCSC{Tv,Ti}}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} = spmatmul(copy(A), B) +*(A::Adjoint{<:Any,<:SparseMatrixCSC{Tv,Ti}}, B::Adjoint{<:Any,<:SparseMatrixCSC{Tv,Ti}}) where {Tv,Ti} = spmatmul(copy(A), copy(B)) +*(A::Transpose{<:Any,<:SparseMatrixCSC{Tv,Ti}}, B::Transpose{<:Any,<:SparseMatrixCSC{Tv,Ti}}) where {Tv,Ti} = spmatmul(copy(A), copy(B)) function spmatmul(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}; sortindices::Symbol = :sortcols) where {Tv,Ti} @@ -307,7 +301,7 @@ ldiv!(U::UpperTriangular{T,<:SparseMatrixCSCUnion{T}}, B::StridedVecOrMat) where (\)(L::LowerTriangular{T,<:SparseMatrixCSCUnion{T}}, B::SparseMatrixCSC) where {T} = ldiv!(L, Array(B)) (\)(U::UpperTriangular{T,<:SparseMatrixCSCUnion{T}}, B::SparseMatrixCSC) where {T} = ldiv!(U, Array(B)) \(A::Transpose{<:Real,<:Hermitian{<:Real,<:SparseMatrixCSC}}, B::Vector) = A.parent \ B -\(A::Transpose{<:Complex,<:Hermitian{<:Complex,<:SparseMatrixCSC}}, B::Vector) = transpose(A.parent) \ B +\(A::Transpose{<:Complex,<:Hermitian{<:Complex,<:SparseMatrixCSC}}, B::Vector) = copy(A) \ B \(A::Transpose{<:Number,<:Symmetric{<:Number,<:SparseMatrixCSC}}, B::Vector) = A.parent \ B function rdiv!(A::SparseMatrixCSC{T}, D::Diagonal{T}) where T @@ -580,7 +574,7 @@ function cond(A::SparseMatrixCSC, p::Real=2) normA = norm(A, 1) return normA * normAinv elseif p == Inf - normAinv = normestinv(adjoint(A)) + normAinv = normestinv(copy(A')) normA = norm(A, Inf) return normA * normAinv elseif p == 2 diff --git a/base/sparse/sparsematrix.jl b/base/sparse/sparsematrix.jl index 836ce57e3cde2..c9a0da3d501d2 100644 --- a/base/sparse/sparsematrix.jl +++ b/base/sparse/sparsematrix.jl @@ -830,8 +830,10 @@ function ftranspose(A::SparseMatrixCSC{Tv,Ti}, f::Function) where {Tv,Ti} Vector{Tv}(uninitialized, nnz(A))) halfperm!(X, A, 1:A.n, f) end -transpose(A::SparseMatrixCSC) = ftranspose(A, identity) -adjoint(A::SparseMatrixCSC) = ftranspose(A, conj) +adjoint(A::SparseMatrixCSC) = Adjoint(A) +transpose(A::SparseMatrixCSC) = Transpose(A) +Base.copy(A::Adjoint{<:Any,<:SparseMatrixCSC}) = ftranspose(A.parent, conj) +Base.copy(A::Transpose{<:Any,<:SparseMatrixCSC}) = ftranspose(A.parent, identity) """ unchecked_noalias_permute!(X::SparseMatrixCSC{Tv,Ti}, diff --git a/stdlib/IterativeEigensolvers/src/IterativeEigensolvers.jl b/stdlib/IterativeEigensolvers/src/IterativeEigensolvers.jl index ec9d6309154d2..b97bb883d2761 100644 --- a/stdlib/IterativeEigensolvers/src/IterativeEigensolvers.jl +++ b/stdlib/IterativeEigensolvers/src/IterativeEigensolvers.jl @@ -321,7 +321,7 @@ function _svds(X; nsv::Int = 6, ritzvec::Bool = true, tol::Float64 = 0.0, maxite end # right_sv = sqrt(2) * ex[2][ size(X,1)+1:end, ind ] - return (SVD(U, svals, adjoint(V)), ex[3], ex[4], ex[5], ex[6]) + return (SVD(U, svals, copy(V')), ex[3], ex[4], ex[5], ex[6]) else #The sort is necessary to work around #10329 return (SVD(zeros(eltype(svals), n, 0), diff --git a/stdlib/IterativeEigensolvers/test/runtests.jl b/stdlib/IterativeEigensolvers/test/runtests.jl index a8782939da55c..186c45e4cab0a 100644 --- a/stdlib/IterativeEigensolvers/test/runtests.jl +++ b/stdlib/IterativeEigensolvers/test/runtests.jl @@ -23,11 +23,11 @@ using Test end a_evs = eigvals(Array(a)) a = convert(SparseMatrixCSC{elty}, a) - asym = adjoint(a) + a # symmetric indefinite + asym = copy(a') + a # symmetric indefinite apd = a'*a # symmetric positive-definite b = convert(SparseMatrixCSC{elty}, b) - bsym = adjoint(b) + b + bsym = copy(b') + b bpd = b'*b (d,v) = eigs(a, nev=3) @@ -88,8 +88,8 @@ using Test @test_throws DimensionMismatch eigs(a, v0=zeros(elty,n+2)) @test_throws ArgumentError eigs(a, v0=zeros(Int,n)) if elty == Float64 - @test_throws ArgumentError eigs(a + transpose(a), which=:SI) - @test_throws ArgumentError eigs(a + transpose(a), which=:LI) + @test_throws ArgumentError eigs(a + copy(Transpose(a)), which=:SI) + @test_throws ArgumentError eigs(a + copy(Transpose(a)), which=:LI) @test_throws ArgumentError eigs(a, sigma = rand(ComplexF32)) end end @@ -167,7 +167,7 @@ let v = real(v) # @test vecnorm(v-v')/2 ≈ 0. # it should be Hermitian # Since this fails sometimes (numerical precision error),this test is commented out - v = (v+adjoint(v))/2 + v = (v + v')/2 @test isposdef(v) # Repeat with starting vector diff --git a/stdlib/SharedArrays/test/runtests.jl b/stdlib/SharedArrays/test/runtests.jl index d69b3e0ce2f16..a512cfade2926 100644 --- a/stdlib/SharedArrays/test/runtests.jl +++ b/stdlib/SharedArrays/test/runtests.jl @@ -212,8 +212,8 @@ d[5,1:2:4,8] = 19 AA = rand(4,2) A = @inferred(convert(SharedArray, AA)) -B = @inferred(convert(SharedArray, adjoint(AA))) -@test B*A == adjoint(AA)*AA +B = @inferred(convert(SharedArray, copy(AA'))) +@test B*A == AA'*AA d=SharedArray{Int64,2}((10,10); init = D->fill!(D.loc_subarr_1d, myid()), pids=[id_me, id_other]) d2 = map(x->1, d) diff --git a/stdlib/SuiteSparse/src/cholmod.jl b/stdlib/SuiteSparse/src/cholmod.jl index b6b47080c7891..8ad3b14974201 100644 --- a/stdlib/SuiteSparse/src/cholmod.jl +++ b/stdlib/SuiteSparse/src/cholmod.jl @@ -347,6 +347,8 @@ end Factor(ptr::Ptr{C_Factor{Tv}}) where {Tv<:VTypes} = Factor{Tv}(ptr) Factor(x::Factor) = x +Base.LinAlg.adjoint(F::Factor) = Adjoint(F) + # All pointer loads should be checked to make sure that SuiteSparse is not called with # a C_NULL pointer which could cause a segfault. Pointers are set to null # when serialized so this can happen when mutiple processes are in use. diff --git a/stdlib/SuiteSparse/src/spqr.jl b/stdlib/SuiteSparse/src/spqr.jl index 20716c2780561..a0d1ce49016c8 100644 --- a/stdlib/SuiteSparse/src/spqr.jl +++ b/stdlib/SuiteSparse/src/spqr.jl @@ -340,14 +340,14 @@ function (\)(F::QRSparse{Float64}, B::VecOrMat{Complex{Float64}}) # |z2|z4| -> |y1|y2|y3|y4| -> |x2|y2| -> |x2|y2|x4|y4| # |x3|y3| # |x4|y4| - c2r = reshape(transpose(reinterpret(Float64, reshape(B, (1, length(B))))), size(B, 1), 2*size(B, 2)) + c2r = reshape(copy(Transpose(reinterpret(Float64, reshape(B, (1, length(B)))))), size(B, 1), 2*size(B, 2)) x = F\c2r # |z1|z3| reinterpret |x1|x2|x3|x4| transpose |x1|y1| reshape |x1|y1|x3|y3| # |z2|z4| <- |y1|y2|y3|y4| <- |x2|y2| <- |x2|y2|x4|y4| # |x3|y3| # |x4|y4| - return collect(reshape(reinterpret(Complex{Float64}, transpose(reshape(x, (length(x) >> 1), 2))), _ret_size(F, B))) + return collect(reshape(reinterpret(Complex{Float64}, copy(Transpose(reshape(x, (length(x) >> 1), 2)))), _ret_size(F, B))) end function _ldiv_basic(F::QRSparse, B::StridedVecOrMat) diff --git a/stdlib/SuiteSparse/src/umfpack.jl b/stdlib/SuiteSparse/src/umfpack.jl index 5c6ef5b7d3494..022812c875cec 100644 --- a/stdlib/SuiteSparse/src/umfpack.jl +++ b/stdlib/SuiteSparse/src/umfpack.jl @@ -6,7 +6,6 @@ export UmfpackLU import Base: (\), findnz, getproperty, show, size import Base.LinAlg: Factorization, det, lufact, ldiv! -using Base.LinAlg: Adjoint, Transpose using ..SparseArrays import ..SparseArrays: nnz @@ -104,6 +103,9 @@ mutable struct UmfpackLU{Tv<:UMFVTypes,Ti<:UMFITypes} <: Factorization{Tv} nzval::Vector{Tv} end +Base.LinAlg.adjoint(F::UmfpackLU) = Adjoint(F) +Base.LinAlg.transpose(F::UmfpackLU) = Transpose(F) + """ lufact(A::SparseMatrixCSC) -> F::UmfpackLU @@ -345,7 +347,7 @@ for itype in UmfpackIndexTypes Up,Ui,Ux, P, Q, C_NULL, 0, Rs, lu.numeric) - (transpose(SparseMatrixCSC(min(n_row, n_col), n_row, increment!(Lp), increment!(Lj), Lx)), + (copy(Transpose(SparseMatrixCSC(min(n_row, n_col), n_row, increment!(Lp), increment!(Lj), Lx))), SparseMatrixCSC(min(n_row, n_col), n_col, increment!(Up), increment!(Ui), Ux), increment!(P), increment!(Q), Rs) end @@ -372,7 +374,7 @@ for itype in UmfpackIndexTypes Up,Ui,Ux,Uz, P, Q, C_NULL, C_NULL, 0, Rs, lu.numeric) - (transpose(SparseMatrixCSC(min(n_row, n_col), n_row, increment!(Lp), increment!(Lj), complex.(Lx, Lz))), + (copy(Transpose(SparseMatrixCSC(min(n_row, n_col), n_row, increment!(Lp), increment!(Lj), complex.(Lx, Lz)))), SparseMatrixCSC(min(n_row, n_col), n_col, increment!(Up), increment!(Ui), complex.(Ux, Uz)), increment!(P), increment!(Q), Rs) end diff --git a/stdlib/SuiteSparse/test/cholmod.jl b/stdlib/SuiteSparse/test/cholmod.jl index db792b945ebde..07543b7b78bcb 100644 --- a/stdlib/SuiteSparse/test/cholmod.jl +++ b/stdlib/SuiteSparse/test/cholmod.jl @@ -183,7 +183,7 @@ end @test sparse(cmA'*cmA) ≈ A'*A # A_mul_Ac for symmetric A - A = 0.5*(A + adjoint(A)) + A = 0.5*(A + copy(A')) cmA = CHOLMOD.Sparse(A) @test sparse(cmA*cmA') ≈ A*A' end @@ -374,7 +374,7 @@ end @test_throws ArgumentError cholfact(A1, shift=1.0) @test_throws ArgumentError ldltfact(A1) @test_throws ArgumentError ldltfact(A1, shift=1.0) - C = A1 + adjoint(A1) + C = A1 + copy(adjoint(A1)) λmaxC = eigmax(Array(C)) b = fill(1., size(A1, 1)) @test_throws LinAlg.PosDefException cholfact(C - 2λmaxC*I)\b @@ -408,7 +408,7 @@ end @test logdet(ldltfact(A1pd)) ≈ logdet(Array(A1pd)) @test isposdef(A1pd) @test !isposdef(A1) - @test !isposdef(A1 + adjoint(A1) |> t -> t - 2eigmax(Array(t))*I) + @test !isposdef(A1 + copy(A1') |> t -> t - 2eigmax(Array(t))*I) if elty <: Real @test CHOLMOD.issymmetric(Sparse(A1pd, 0)) @@ -692,7 +692,7 @@ end @testset "Make sure that ldltfact performs an LDLt (Issue #19032)" begin m, n = 400, 500 A = sprandn(m, n, .2) - M = [I adjoint(A); A -I] + M = [I copy(A'); A -I] b = M * fill(1., m+n) F = ldltfact(M) s = unsafe_load(pointer(F)) diff --git a/test/abstractarray.jl b/test/abstractarray.jl index 910372bf4a077..0fc998af8b13c 100644 --- a/test/abstractarray.jl +++ b/test/abstractarray.jl @@ -576,8 +576,7 @@ function test_cat(::Type{TestAbstractArray}) # hvcat for nbc in (1, 2, 3, 4, 5, 6) - @test hvcat(nbc, 1:120...) == - transpose(reshape([1:120...], nbc, round(Int, 120 / nbc))) + @test hvcat(nbc, 1:120...) == reshape([1:120...], nbc, round(Int, 120 / nbc))' end @test_throws ArgumentError hvcat(7, 1:20...) diff --git a/test/arrayops.jl b/test/arrayops.jl index c598e7e1a4f61..bbd829ce35d6d 100644 --- a/test/arrayops.jl +++ b/test/arrayops.jl @@ -48,7 +48,7 @@ using Main.TestHelpers.OAs a[1,2] = 2 a[2,1] = 3 a[2,2] = 4 - b = adjoint(a) + b = copy(a') @test a[1,1] == 1. && a[1,2] == 2. && a[2,1] == 3. && a[2,2] == 4. @test b[1,1] == 1. && b[2,1] == 2. && b[1,2] == 3. && b[2,2] == 4. a[[1 2 3 4]] = 0 @@ -609,7 +609,7 @@ let A, B, C, D C = unique(B, 1) @test sortrows(C) == sortrows(A) @test unique(B, 2) == B - @test transpose(unique(transpose(B), 2)) == C + @test unique(B', 2)' == C # Along third dimension D = cat(3, B, B) @@ -623,7 +623,7 @@ end @testset "large matrices transpose" begin for i = 1 : 3 a = rand(200, 300) - @test isequal(adjoint(a), permutedims(a, [2, 1])) + @test isequal(copy(a'), permutedims(a, [2, 1])) end end @@ -1350,7 +1350,7 @@ end @test size([]') == (1,0) # issue #6996 -@test adjoint(Any[ 1 2; 3 4 ]) == transpose(Any[ 1 2; 3 4 ]) +@test copy(Adjoint(Any[ 1 2; 3 4 ])) == copy(Transpose(Any[ 1 2; 3 4 ])) # map with promotion (issue #6541) @test map(join, ["z", "я"]) == ["z", "я"] diff --git a/test/bitarray.jl b/test/bitarray.jl index 549891e1966f6..30330dbd3434c 100644 --- a/test/bitarray.jl +++ b/test/bitarray.jl @@ -1312,7 +1312,7 @@ end for m1 = 0:n1, m2 = 0:n2 b1 = bitrand(m1, m2) - @check_bit_operation transpose(b1) BitMatrix + @check_bit_operation copy(b1') BitMatrix end end @@ -1390,7 +1390,7 @@ timesofar("cat") end b1 = bitrand(n1,n1) - b1 .|= transpose(b1) + b1 .|= copy(b1') @check_bit_operation issymmetric(b1) Bool @check_bit_operation ishermitian(b1) Bool diff --git a/test/examples.jl b/test/examples.jl index a3002e3240171..378e9038deda2 100644 --- a/test/examples.jl +++ b/test/examples.jl @@ -24,9 +24,9 @@ include(joinpath(dir, "ndgrid.jl")) r = repmat(1:10,1,10) r1, r2 = ndgrid(1:10, 1:10) @test r1 == r -@test r2 == adjoint(r) +@test r2 == r' r3, r4 = meshgrid(1:10,1:10) -@test r3 == adjoint(r) +@test r3 == r' @test r4 == r include(joinpath(dir, "queens.jl")) diff --git a/test/iterators.jl b/test/iterators.jl index 54dcb7dc80e88..c312f76c8d3be 100644 --- a/test/iterators.jl +++ b/test/iterators.jl @@ -475,6 +475,7 @@ end end @testset "reverse iterators" begin + squash(x::Number) = x squash(A) = reshape(A, length(A)) Z = Array{Int,0}(uninitialized); Z[] = 17 # zero-dimensional test case for itr in (2:10, "∀ϵ>0", 1:0, "", (2,3,5,7,11), [2,3,5,7,11], rand(5,6), Z, 3, true, 'x', 4=>5, diff --git a/test/linalg/adjtrans.jl b/test/linalg/adjtrans.jl index cad11f67a3de6..c84a551a84c33 100644 --- a/test/linalg/adjtrans.jl +++ b/test/linalg/adjtrans.jl @@ -365,13 +365,13 @@ end @test complexvec * Transpose(complexvec) == broadcast(*, complexvec, reshape(complexvec, (1, 3))) # Adjoint/Transpose-vector * matrix @test (Adjoint(realvec) * realmat)::Adjoint{Int,Vector{Int}} == - reshape(adjoint(realmat) * realvec, (1, 3)) + reshape(copy(Adjoint(realmat)) * realvec, (1, 3)) @test (Transpose(realvec) * realmat)::Transpose{Int,Vector{Int}} == - reshape(transpose(realmat) * realvec, (1, 3)) + reshape(copy(Transpose(realmat)) * realvec, (1, 3)) @test (Adjoint(complexvec) * complexmat)::Adjoint{Complex{Int},Vector{Complex{Int}}} == - reshape(conj(adjoint(complexmat) * complexvec), (1, 3)) + reshape(conj(copy(Adjoint(complexmat)) * complexvec), (1, 3)) @test (Transpose(complexvec) * complexmat)::Transpose{Complex{Int},Vector{Complex{Int}}} == - reshape(transpose(complexmat) * complexvec, (1, 3)) + reshape(copy(Transpose(complexmat)) * complexvec, (1, 3)) # Adjoint/Transpose-vector * Adjoint/Transpose-matrix @test (Adjoint(realvec) * Adjoint(realmat))::Adjoint{Int,Vector{Int}} == reshape(realmat * realvec, (1, 3)) @@ -414,15 +414,15 @@ end @test (Transpose(realvec) / realmat)::Transpose ≈ rowrealvec / realmat @test (Transpose(complexvec) / complexmat)::Transpose ≈ rowcomplexvec / complexmat # /(Adjoint/Transpose-vector, Adjoint matrix) - @test (Adjoint(realvec) / Adjoint(realmat))::Adjoint ≈ rowrealvec / adjoint(realmat) - @test (Adjoint(complexvec) / Adjoint(complexmat))::Adjoint ≈ conj(rowcomplexvec) / adjoint(complexmat) - @test (Transpose(realvec) / Adjoint(realmat))::Transpose ≈ rowrealvec / adjoint(realmat) - @test (Transpose(complexvec) / Adjoint(complexmat))::Transpose ≈ rowcomplexvec / adjoint(complexmat) + @test (Adjoint(realvec) / Adjoint(realmat))::Adjoint ≈ rowrealvec / copy(Adjoint(realmat)) + @test (Adjoint(complexvec) / Adjoint(complexmat))::Adjoint ≈ conj(rowcomplexvec) / copy(Adjoint(complexmat)) + @test (Transpose(realvec) / Adjoint(realmat))::Transpose ≈ rowrealvec / copy(Adjoint(realmat)) + @test (Transpose(complexvec) / Adjoint(complexmat))::Transpose ≈ rowcomplexvec / copy(Adjoint(complexmat)) # /(Adjoint/Transpose-vector, Transpose matrix) - @test (Adjoint(realvec) / Transpose(realmat))::Adjoint ≈ rowrealvec / transpose(realmat) - @test (Adjoint(complexvec) / Transpose(complexmat))::Adjoint ≈ conj(rowcomplexvec) / transpose(complexmat) - @test (Transpose(realvec) / Transpose(realmat))::Transpose ≈ rowrealvec / transpose(realmat) - @test (Transpose(complexvec) / Transpose(complexmat))::Transpose ≈ rowcomplexvec / transpose(complexmat) + @test (Adjoint(realvec) / Transpose(realmat))::Adjoint ≈ rowrealvec / copy(Transpose(realmat)) + @test (Adjoint(complexvec) / Transpose(complexmat))::Adjoint ≈ conj(rowcomplexvec) / copy(Transpose(complexmat)) + @test (Transpose(realvec) / Transpose(realmat))::Transpose ≈ rowrealvec / copy(Transpose(realmat)) + @test (Transpose(complexvec) / Transpose(complexmat))::Transpose ≈ rowcomplexvec / copy(Transpose(complexmat)) end @testset "norm of Adjoint/Transpose-wrapped vectors" begin diff --git a/test/linalg/bidiag.jl b/test/linalg/bidiag.jl index d48d55cb10554..423d09b05e440 100644 --- a/test/linalg/bidiag.jl +++ b/test/linalg/bidiag.jl @@ -167,10 +167,10 @@ srand(1) tx = Transpose(Tfull) \ Transpose(c) elty <: AbstractFloat && @test norm(x-tx,Inf) <= 4*condT*max(eps()*norm(tx,Inf), eps(promty)*norm(x,Inf)) @test_throws DimensionMismatch Transpose(T)\Transpose(b) - x = T'\transpose(c) - tx = Tfull'\transpose(c) + x = T'\copy(Transpose(c)) + tx = Tfull'\copy(Transpose(c)) @test norm(x-tx,Inf) <= 4*condT*max(eps()*norm(tx,Inf), eps(promty)*norm(x,Inf)) - @test_throws DimensionMismatch T'\transpose(b) + @test_throws DimensionMismatch T'\copy(Transpose(b)) x = T\Transpose(c) tx = Tfull\Transpose(c) @test norm(x-tx,Inf) <= 4*condT*max(eps()*norm(tx,Inf), eps(promty)*norm(x,Inf)) diff --git a/test/linalg/blas.jl b/test/linalg/blas.jl index 7bea5dea57cea..b433f3c9aeaa3 100644 --- a/test/linalg/blas.jl +++ b/test/linalg/blas.jl @@ -134,14 +134,14 @@ srand(100) @test_throws DimensionMismatch BLAS.ger!(α,Vector{elty}(uninitialized,n+1),y,copy(A)) A = rand(elty,n,n) - A = A + transpose(A) + A = A + Transpose(A) @test issymmetric(A) @test triu(BLAS.syr!('U',α,x,copy(A))) ≈ triu(A + α*x*Transpose(x)) @test_throws DimensionMismatch BLAS.syr!('U',α,Vector{elty}(uninitialized,n+1),copy(A)) if elty <: Complex A = rand(elty,n,n) - A = A + adjoint(A) + A = A + A' α = real(α) @test triu(BLAS.her!('U',α,x,copy(A))) ≈ triu(A + α*x*x') @test_throws DimensionMismatch BLAS.her!('U',α,Vector{elty}(uninitialized,n+1),copy(A)) @@ -163,8 +163,8 @@ srand(100) @testset "symmetric/Hermitian multiplication" begin x = rand(elty,n) A = rand(elty,n,n) - Aherm = A + adjoint(A) - Asymm = A + transpose(A) + Aherm = A + A' + Asymm = A + Transpose(A) @testset "symv and hemv" begin @test BLAS.symv('U',Asymm,x) ≈ Asymm*x offsizevec, offsizemat = Array{elty}.(uninitialized,(n+1, (n,n+1))) @@ -281,7 +281,7 @@ srand(100) @test_throws DimensionMismatch BLAS.gemm!('N','N', one(elty), I43, I4, elm1, I4) @test_throws DimensionMismatch BLAS.gemm!('T','N', one(elty), I43, I4, elm1, I43) @test_throws DimensionMismatch BLAS.gemm!('N','T', one(elty), I43, I43, elm1, I43) - @test_throws DimensionMismatch BLAS.gemm!('T','T', one(elty), I43, I43, elm1, adjoint(I43)) + @test_throws DimensionMismatch BLAS.gemm!('T','T', one(elty), I43, I43, elm1, Matrix{elty}(I, 3, 4)) end @testset "gemm compared to (sy)(he)rk" begin if eltype(elm1) <: Complex diff --git a/test/linalg/bunchkaufman.jl b/test/linalg/bunchkaufman.jl index 41395fcaaf4c1..4bc7a954fe293 100644 --- a/test/linalg/bunchkaufman.jl +++ b/test/linalg/bunchkaufman.jl @@ -23,9 +23,9 @@ bimg = randn(n,2)/2 @testset "$eltya argument A" for eltya in (Float32, Float64, ComplexF32, ComplexF64, Int) a = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex.(areal, aimg) : areal) a2 = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex.(a2real, a2img) : a2real) - asym = transpose(a) + a # symmetric indefinite - aher = adjoint(a) + a # Hermitian indefinite - apd = adjoint(a) * a # Positive-definite + asym = Transpose(a) + a # symmetric indefinite + aher = a' + a # Hermitian indefinite + apd = a' * a # Positive-definite for (a, a2, aher, apd) in ((a, a2, aher, apd), (view(a, 1:n, 1:n), view(a2, 1:n, 1:n), @@ -47,11 +47,11 @@ bimg = randn(n,2)/2 end @test inv(bc1)*aher ≈ Matrix(I, n, n) @testset for rook in (false, true) - @test inv(bkfact(Symmetric(transpose(a) + a, uplo), rook))*(transpose(a) + a) ≈ Matrix(I, n, n) + @test inv(bkfact(Symmetric(Transpose(a) + a, uplo), rook))*(Transpose(a) + a) ≈ Matrix(I, n, n) if eltya <: BlasFloat # test also bkfact! without explicit type tag # no bkfact! method for Int ... yet - @test inv(bkfact!(transpose(a) + a, rook))*(transpose(a) + a) ≈ Matrix(I, n, n) + @test inv(bkfact!(Transpose(a) + a, rook))*(Transpose(a) + a) ≈ Matrix(I, n, n) end @test size(bc1) == size(bc1.LD) @test size(bc1, 1) == size(bc1.LD, 1) diff --git a/test/linalg/cholesky.jl b/test/linalg/cholesky.jl index b95c54ea85a1a..620272e6677d8 100644 --- a/test/linalg/cholesky.jl +++ b/test/linalg/cholesky.jl @@ -217,7 +217,7 @@ end for uplo in (:U, :L) AcA = A'*A BcB = AcA + v*v' - BcB = (BcB + adjoint(BcB))/2 + BcB = (BcB + BcB')/2 F = cholfact(Hermitian(AcA, uplo)) G = cholfact(Hermitian(BcB, uplo)) @test Base.getproperty(LinAlg.lowrankupdate(F, v), uplo) ≈ Base.getproperty(G, uplo) diff --git a/test/linalg/dense.jl b/test/linalg/dense.jl index 9b968c0f82fa3..85676a8c0e002 100644 --- a/test/linalg/dense.jl +++ b/test/linalg/dense.jl @@ -66,7 +66,7 @@ bimg = randn(n,2)/2 end @testset "Test nullspace" begin - a15null = nullspace(adjoint(a[:,1:n1])) + a15null = nullspace(copy(a[:,1:n1]')) @test rank([a[:,1:n1] a15null]) == 10 @test norm(a[:,1:n1]'a15null,Inf) ≈ zero(eltya) atol=300ε @test norm(a15null'a[:,1:n1],Inf) ≈ zero(eltya) atol=400ε @@ -95,7 +95,7 @@ bimg = randn(n,2)/2 @testset "Matrix square root" begin asq = sqrt(a) @test asq*asq ≈ a - asym = adjoint(a)+a # symmetric indefinite + asym = a + a' # symmetric indefinite asymsq = sqrt(asym) @test asymsq*asymsq ≈ asym end @@ -349,9 +349,9 @@ end @testset "Matrix exponential" begin @testset "Tests for $elty" for elty in (Float32, Float64, ComplexF32, ComplexF64) A1 = convert(Matrix{elty}, [4 2 0; 1 4 1; 1 1 4]) - eA1 = convert(Matrix{elty}, adjoint([147.866622446369 127.781085523181 127.781085523182; + eA1 = convert(Matrix{elty}, [147.866622446369 127.781085523181 127.781085523182; 183.765138646367 183.765138646366 163.679601723179; - 71.797032399996 91.8825693231832 111.968106246371])) + 71.797032399996 91.8825693231832 111.968106246371]') @test exp(A1) ≈ eA1 A2 = convert(Matrix{elty}, @@ -365,9 +365,9 @@ end @test exp(A2) ≈ eA2 A3 = convert(Matrix{elty}, [-131 19 18;-390 56 54;-387 57 52]) - eA3 = convert(Matrix{elty}, adjoint([-1.50964415879218 -5.6325707998812 -4.934938326092; - 0.367879439109187 1.47151775849686 1.10363831732856; - 0.135335281175235 0.406005843524598 0.541341126763207])) + eA3 = convert(Matrix{elty}, [-1.50964415879218 -5.6325707998812 -4.934938326092; + 0.367879439109187 1.47151775849686 1.10363831732856; + 0.135335281175235 0.406005843524598 0.541341126763207]') @test exp(A3) ≈ eA3 A4 = convert(Matrix{elty}, [0.25 0.25; 0 0]) diff --git a/test/linalg/diagonal.jl b/test/linalg/diagonal.jl index 2c8fb4cab6539..69c8700043695 100644 --- a/test/linalg/diagonal.jl +++ b/test/linalg/diagonal.jl @@ -103,7 +103,7 @@ srand(1) @test ldiv!(D, copy(U)) ≈ DM\U atol=atol_three @test ldiv!(Transpose(D), copy(U)) ≈ DM\U atol=atol_three @test ldiv!(Adjoint(conj(D)), copy(U)) ≈ DM\U atol=atol_three - Uc = adjoint(U) + Uc = copy(U') target = scale!(Uc, inv.(D.diag)) @test rdiv!(Uc, D) ≈ target atol=atol_three @test_throws DimensionMismatch rdiv!(Matrix{elty}(I, n-1, n-1), D) diff --git a/test/linalg/eigen.jl b/test/linalg/eigen.jl index 57940617e5961..645473127b897 100644 --- a/test/linalg/eigen.jl +++ b/test/linalg/eigen.jl @@ -17,8 +17,8 @@ aimg = randn(n,n)/2 @testset for eltya in (Float32, Float64, ComplexF32, ComplexF64, Int) aa = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex.(areal, aimg) : areal) - asym = adjoint(aa)+aa # symmetric indefinite - apd = aa'*aa # symmetric positive-definite + asym = aa' + aa # symmetric indefinite + apd = aa' * aa # symmetric positive-definite for (a, asym, apd) in ((aa, asym, apd), (view(aa, 1:n, 1:n), view(asym, 1:n, 1:n), @@ -49,8 +49,8 @@ aimg = randn(n,n)/2 h = asym @test minimum(eigvals(h)) ≈ eigmin(h) @test maximum(eigvals(h)) ≈ eigmax(h) - @test_throws DomainError eigmin(a - adjoint(a)) - @test_throws DomainError eigmax(a - adjoint(a)) + @test_throws DomainError eigmin(a - a') + @test_throws DomainError eigmax(a - a') end @testset "symmetric generalized eigenproblem" begin if isa(a, Array) diff --git a/test/linalg/givens.jl b/test/linalg/givens.jl index 8d12900a6bb9c..1e118bc8d2e57 100644 --- a/test/linalg/givens.jl +++ b/test/linalg/givens.jl @@ -23,8 +23,8 @@ using Base.LinAlg: mul!, Adjoint, Transpose @test mul!(G,Matrix{elty}(I, 10, 10)) == [G[i,j] for i=1:10,j=1:10] @testset "transposes" begin - @test adjoint(G)*G*Matrix(elty(1)I, 10, 10) ≈ Matrix(I, 10, 10) - @test adjoint(R)*(R*Matrix(elty(1)I, 10, 10)) ≈ Matrix(I, 10, 10) + @test copy(G')*G*Matrix(elty(1)I, 10, 10) ≈ Matrix(I, 10, 10) + @test copy(R')*(R*Matrix(elty(1)I, 10, 10)) ≈ Matrix(I, 10, 10) @test_throws ErrorException transpose(G) @test_throws ErrorException transpose(R) end @@ -40,9 +40,9 @@ using Base.LinAlg: mul!, Adjoint, Transpose I10 = Matrix{elty}(I, 10, 10) G, _ = givens(one(elty),zero(elty),9,10) - @test adjoint(G*I10) * (G*I10) ≈ I10 + @test (G*I10)' * (G*I10) ≈ I10 K, _ = givens(zero(elty),one(elty),9,10) - @test adjoint(K*I10) * (K*I10) ≈ I10 + @test (K*I10)' * (K*I10) ≈ I10 @testset "Givens * vectors" begin if isa(A, Array) diff --git a/test/linalg/lapack.jl b/test/linalg/lapack.jl index e316e6a0182ac..0aa06f4896c12 100644 --- a/test/linalg/lapack.jl +++ b/test/linalg/lapack.jl @@ -170,7 +170,7 @@ end lU,lS,lVt = LAPACK.gesvd!('S','S',A) @test U ≈ lU @test S ≈ lS - @test adjoint(V) ≈ lVt + @test V' ≈ lVt B = rand(elty,10,10) # xggsvd3 replaced xggsvd in LAPACK 3.6.0 if LAPACK.version() < v"3.6.0" @@ -357,7 +357,7 @@ end @testset "sytri, sytrs, and sytrf" begin @testset for elty in (Float32, Float64, ComplexF32, ComplexF64) A = rand(elty,10,10) - A = A + transpose(A) #symmetric! + A = A + Transpose(A) #symmetric! B = copy(A) B,ipiv = LAPACK.sytrf!('U',B) @test triu(inv(A)) ≈ triu(LAPACK.sytri!('U',B,ipiv)) rtol=eps(cond(A)) @@ -368,14 +368,14 @@ end # Rook-pivoting variants @testset for elty in (Float32, Float64, ComplexF32, ComplexF64) A = rand(elty, 10, 10) - A = A + transpose(A) #symmetric! + A = A + Transpose(A) #symmetric! B = copy(A) B,ipiv = LAPACK.sytrf_rook!('U', B) @test triu(inv(A)) ≈ triu(LAPACK.sytri_rook!('U', B, ipiv)) rtol=eps(cond(A)) @test_throws DimensionMismatch LAPACK.sytrs_rook!('U', B, ipiv, rand(elty, 11, 5)) @test LAPACK.sytrf_rook!('U',zeros(elty, 0, 0)) == (zeros(elty, 0, 0),zeros(BlasInt, 0)) A = rand(elty, 10, 10) - A = A + transpose(A) #symmetric! + A = A + Transpose(A) #symmetric! b = rand(elty, 10) c = A \ b cnd = cond(A) @@ -396,7 +396,7 @@ end @testset "hetrf, hetrs" begin @testset for elty in (ComplexF32, ComplexF64) A = rand(elty,10,10) - A = A + adjoint(A) #hermitian! + A = A + A' #hermitian! B = copy(A) B,ipiv = LAPACK.hetrf!('U',B) @test_throws DimensionMismatch LAPACK.hetrs!('U',B,ipiv,rand(elty,11,5)) @@ -446,7 +446,7 @@ end @testset for elty in (Float32, Float64, ComplexF32, ComplexF64) srand(123) A = rand(elty,10,10) - A = A + transpose(A) #symmetric! + A = A + Transpose(A) #symmetric! b = rand(elty,10) c = A \ b b,A = LAPACK.sysv!('U',A,b) @@ -459,14 +459,14 @@ end @testset for elty in (ComplexF32, ComplexF64) srand(935) A = rand(elty,10,10) - A = A + adjoint(A) #hermitian! + A = A + A' #hermitian! b = rand(elty,10) c = A \ b b,A = LAPACK.hesv!('U',A,b) @test b ≈ c @test_throws DimensionMismatch LAPACK.hesv!('U',A,rand(elty,11)) A = rand(elty,10,10) - A = A + adjoint(A) #hermitian! + A = A + A' #hermitian! b = rand(elty,10) c = A \ b b,A = LAPACK.hesv_rook!('U',A,b) @@ -523,9 +523,9 @@ end A = rand(elty,n,n)/100 A += real(diagm(0 => n*real(rand(elty,n)))) if elty <: Complex - A = A + adjoint(A) + A = A + A' else - A = A + transpose(A) + A = A + Transpose(A) end B = rand(elty,n,n) D = copy(A) diff --git a/test/linalg/lq.jl b/test/linalg/lq.jl index 8bb610911812a..599007400ac67 100644 --- a/test/linalg/lq.jl +++ b/test/linalg/lq.jl @@ -27,8 +27,8 @@ rectangularQ(Q::LinAlg.LQPackedQ) = convert(Array, Q) @testset for eltya in (Float32, Float64, ComplexF32, ComplexF64) a = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex.(areal, aimg) : areal) a2 = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex.(a2real, a2img) : a2real) - asym = adjoint(a)+a # symmetric indefinite - apd = a'*a # symmetric positive-definite + asym = a' + a # symmetric indefinite + apd = a' * a # symmetric positive-definite ε = εa = eps(abs(float(one(eltya)))) @testset for eltyb in (Float32, Float64, ComplexF32, ComplexF64, Int) @@ -53,7 +53,7 @@ rectangularQ(Q::LinAlg.LQPackedQ) = convert(Array, Q) @test size(lqa,3) == 1 @test size(lqa.Q,3) == 1 @test_throws ErrorException lqa.Z - @test Array(adjoint(lqa)) ≈ a' + @test Array(copy(Adjoint(lqa))) ≈ a' @test lqa * lqa' ≈ a * a' @test lqa' * lqa ≈ a' * a @test q*squareQ(q)' ≈ Matrix(I, n, n) diff --git a/test/linalg/lu.jl b/test/linalg/lu.jl index 353e9b07dd5fd..2bbb0760a6ec8 100644 --- a/test/linalg/lu.jl +++ b/test/linalg/lu.jl @@ -106,7 +106,7 @@ dimg = randn(n)/2 for (bb, cc) in ((Bs, Cs), (view(Bs, 1:n, 1), view(Cs, 1:n))) @test norm(a*(lua\bb) - bb, 1) < ε*κ*n*2 # Two because the right hand side has two columns @test norm(a'*(lua'\bb) - bb, 1) < ε*κ*n*2 # Two because the right hand side has two columns - @test norm(a'*(lua'\a') - adjoint(a), 1) < ε*κ*n^2 + @test norm(a'*(lua'\a') - a', 1) < ε*κ*n^2 @test norm(a*(lua\cc) - cc, 1) < ε*κ*n # cc is a vector @test norm(a'*(lua'\cc) - cc, 1) < ε*κ*n # cc is a vector @test AbstractArray(lua) ≈ a @@ -151,9 +151,9 @@ dimg = randn(n)/2 for bb in (Bs, view(Bs, 1:n, 1)) @test norm(d*(lud\bb) - bb, 1) < ε*κd*n*2 # Two because the right hand side has two columns if eltya <: Real - @test norm((Transpose(lud)\bb) - Array(transpose(d))\bb, 1) < ε*κd*n*2 # Two because the right hand side has two columns + @test norm((Transpose(lud)\bb) - Array(Transpose(d))\bb, 1) < ε*κd*n*2 # Two because the right hand side has two columns if eltya != Int && eltyb != Int - @test norm(Base.LinAlg.ldiv!(Transpose(lud), copy(bb)) - Array(transpose(d))\bb, 1) < ε*κd*n*2 + @test norm(Base.LinAlg.ldiv!(Transpose(lud), copy(bb)) - Array(Transpose(d))\bb, 1) < ε*κd*n*2 end end if eltya <: Complex @@ -164,7 +164,7 @@ dimg = randn(n)/2 if eltya <: BlasFloat && eltyb <: BlasFloat e = rand(eltyb,n,n) @test norm(e/lud - e/d,1) < ε*κ*n^2 - @test norm((Transpose(lud)\e') - Array(transpose(d))\e',1) < ε*κd*n^2 + @test norm((Transpose(lud)\e') - Array(Transpose(d))\e',1) < ε*κd*n^2 #test singular du = rand(eltya,n-1) dl = rand(eltya,n-1) diff --git a/test/linalg/matmul.jl b/test/linalg/matmul.jl index d47543da2072e..8082daf9472c7 100644 --- a/test/linalg/matmul.jl +++ b/test/linalg/matmul.jl @@ -180,7 +180,7 @@ end res = Float64[135228751 9979252 -115270247; 9979252 10481254 10983256; -115270247 10983256 137236759] for A in (copy(AA), view(AA, 1:501, 1:3)) @test *(Transpose(A), A) == res - @test *(Adjoint(A), Transpose(adjoint(A))) == res + @test *(Adjoint(A), Transpose(copy(A'))) == res end cutoff = 501 A = reshape(1:6*cutoff,2*cutoff,3).-(6*cutoff)/2 @@ -277,7 +277,7 @@ end @test_throws DimensionMismatch Base.LinAlg.gemm_wrapper!(I10x10,'N','N', I0x0, I0x0) A = rand(elty,3,3) - @test Base.LinAlg.matmul3x3('T','N',A, Matrix{elty}(I, 3, 3)) == transpose(A) + @test Base.LinAlg.matmul3x3('T','N',A, Matrix{elty}(I, 3, 3)) == Transpose(A) end @testset "#13593, #13488" begin diff --git a/test/linalg/qr.jl b/test/linalg/qr.jl index 5757c6f44b4eb..73dd4d1b32c96 100644 --- a/test/linalg/qr.jl +++ b/test/linalg/qr.jl @@ -26,7 +26,7 @@ rectangularQ(Q::LinAlg.AbstractQ) = convert(Array, Q) @testset for eltya in (Float32, Float64, ComplexF32, ComplexF64, BigFloat, Int) raw_a = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex.(areal, aimg) : areal) raw_a2 = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex.(a2real, a2img) : a2real) - asym = adjoint(raw_a) + raw_a # symmetric indefinite + asym = raw_a' + raw_a # symmetric indefinite apd = raw_a' * raw_a # symmetric positive-definite ε = εa = eps(abs(float(one(eltya)))) @@ -53,9 +53,9 @@ rectangularQ(Q::LinAlg.AbstractQ) = convert(Array, Q) @test_throws ErrorException qra.Z @test q'*squareQ(q) ≈ Matrix(I, a_1, a_1) @test q*squareQ(q)' ≈ Matrix(I, a_1, a_1) - @test q'*Matrix(1.0I, a_1, a_1)' ≈ adjoint(squareQ(q)) + @test q'*Matrix(1.0I, a_1, a_1)' ≈ squareQ(q)' @test squareQ(q)'q ≈ Matrix(I, a_1, a_1) - @test Matrix(1.0I, a_1, a_1)'q' ≈ adjoint(squareQ(q)) + @test Matrix(1.0I, a_1, a_1)'q' ≈ squareQ(q)' @test q*r ≈ a @test a*(qra\b) ≈ b atol=3000ε @test Array(qra) ≈ a @@ -135,7 +135,7 @@ rectangularQ(Q::LinAlg.AbstractQ) = convert(Array, Q) a = raw_a qrpa = factorize(a[:,1:n1]) q, r = qrpa.Q, qrpa.R - @test mul!(adjoint(squareQ(q)), q) ≈ Matrix(I, n, n) + @test mul!(copy(squareQ(q)'), q) ≈ Matrix(I, n, n) @test_throws DimensionMismatch mul!(Matrix{eltya}(I, n+1, n+1),q) @test mul!(squareQ(q), Adjoint(q)) ≈ Matrix(I, n, n) @test_throws DimensionMismatch mul!(Matrix{eltya}(I, n+1, n+1), Adjoint(q)) @@ -145,7 +145,7 @@ rectangularQ(Q::LinAlg.AbstractQ) = convert(Array, Q) qra = qrfact(a[:,1:n1], Val(false)) q, r = qra.Q, qra.R - @test mul!(adjoint(squareQ(q)), q) ≈ Matrix(I, n, n) + @test mul!(copy(squareQ(q)'), q) ≈ Matrix(I, n, n) @test_throws DimensionMismatch mul!(Matrix{eltya}(I, n+1, n+1),q) @test mul!(squareQ(q), Adjoint(q)) ≈ Matrix(I, n, n) @test_throws DimensionMismatch mul!(Matrix{eltya}(I, n+1, n+1),Adjoint(q)) diff --git a/test/linalg/schur.jl b/test/linalg/schur.jl index 10a7584b843cf..be2a4422f6c97 100644 --- a/test/linalg/schur.jl +++ b/test/linalg/schur.jl @@ -17,8 +17,8 @@ aimg = randn(n,n)/2 @testset for eltya in (Float32, Float64, ComplexF32, ComplexF64, Int) a = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex.(areal, aimg) : areal) - asym = adjoint(a)+a # symmetric indefinite - apd = a'*a # symmetric positive-definite + asym = a' + a # symmetric indefinite + apd = a' * a # symmetric positive-definite for (a, asym, apd) in ((a, asym, apd), (view(a, 1:n, 1:n), view(asym, 1:n, 1:n), @@ -40,10 +40,10 @@ aimg = randn(n,n)/2 @test vecs*sch*vecs' ≈ tril(a) sch, vecs, vals = schur(Hermitian(asym)) @test vecs*sch*vecs' ≈ asym - sch, vecs, vals = schur(Symmetric(a + transpose(a))) - @test vecs*sch*vecs' ≈ a + transpose(a) - sch, vecs, vals = schur(Tridiagonal(a + transpose(a))) - @test vecs*sch*vecs' ≈ Tridiagonal(a + transpose(a)) + sch, vecs, vals = schur(Symmetric(a + Transpose(a))) + @test vecs*sch*vecs' ≈ a + Transpose(a) + sch, vecs, vals = schur(Tridiagonal(a + Transpose(a))) + @test vecs*sch*vecs' ≈ Tridiagonal(a + Transpose(a)) tstring = sprint(show,f.T) zstring = sprint(show,f.Z) diff --git a/test/linalg/svd.jl b/test/linalg/svd.jl index ff56a00f939c3..8f5207c413336 100644 --- a/test/linalg/svd.jl +++ b/test/linalg/svd.jl @@ -46,8 +46,8 @@ a2img = randn(n,n)/2 @testset for eltya in (Float32, Float64, ComplexF32, ComplexF64, Int) aa = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex.(areal, aimg) : areal) aa2 = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex.(a2real, a2img) : a2real) - asym = adjoint(aa)+aa # symmetric indefinite - apd = aa'*aa # symmetric positive-definite + asym = aa' + aa # symmetric indefinite + apd = aa' * aa # symmetric positive-definite for (a, a2) in ((aa, aa2), (view(aa, 1:n, 1:n), view(aa2, 1:n, 1:n))) ε = εa = eps(abs(float(one(eltya)))) diff --git a/test/linalg/symmetric.jl b/test/linalg/symmetric.jl index d05e292591ca5..0ed1f188932ca 100644 --- a/test/linalg/symmetric.jl +++ b/test/linalg/symmetric.jl @@ -11,16 +11,16 @@ end @testset "Hermitian matrix exponential/log" begin A1 = randn(4,4) + im*randn(4,4) - A2 = A1 + adjoint(A1) + A2 = A1 + A1' @test exp(A2) ≈ exp(Hermitian(A2)) @test log(A2) ≈ log(Hermitian(A2)) - A3 = A1 * adjoint(A1) # posdef + A3 = A1 * A1' # posdef @test exp(A3) ≈ exp(Hermitian(A3)) @test log(A3) ≈ log(Hermitian(A3)) A1 = randn(4,4) - A3 = A1 * adjoint(A1) - A4 = A1 + transpose(A1) + A3 = A1 * A1' + A4 = A1 + Transpose(A1) @test exp(A4) ≈ exp(Symmetric(A4)) @test log(A3) ≈ log(Symmetric(A3)) @test log(A3) ≈ log(Hermitian(A3)) @@ -32,10 +32,10 @@ end aimg = randn(n,n)/2 @testset for eltya in (Float32, Float64, ComplexF32, ComplexF64, BigFloat, Int) a = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex.(areal, aimg) : areal) - asym = transpose(a)+a # symmetric indefinite - aherm = adjoint(a)+a # Hermitian indefinite - apos = a'*a # Hermitian positive definite - aposs = apos + transpose(apos) # Symmetric positive definite + asym = Transpose(a) + a # symmetric indefinite + aherm = a' + a # Hermitian indefinite + apos = a' * a # Hermitian positive definite + aposs = apos + Transpose(apos) # Symmetric positive definite ε = εa = eps(abs(float(one(eltya)))) x = randn(n) @@ -121,7 +121,7 @@ end elseif eltya <: Complex # test that zero imaginary component is # handled properly - @test ishermitian(Symmetric(b + adjoint(b))) + @test ishermitian(Symmetric(b + b')) end end @@ -148,7 +148,7 @@ end @test transpose(H) === H == aherm else @test adjoint(S) == Symmetric(conj(asym)) - @test transpose(H) == Hermitian(transpose(aherm)) + @test transpose(H) == Hermitian(copy(Transpose(aherm))) end end end @@ -255,7 +255,7 @@ end let A = a[:,1:5]*a[:,1:5]' # Make sure A is Hermitian even in the presence of rounding error # xianyi/OpenBLAS#729 - A = (adjoint(A) + A) / 2 + A = (A + A') / 2 @test rank(A) == rank(Hermitian(A)) end end @@ -383,7 +383,7 @@ end @test conj(c) == conj(Array(c)) cc = copy(c) @test conj!(c) == conj(Array(cc)) - c = Hermitian(b + adjoint(b)) + c = Hermitian(b + b') @test conj(c) == conj(Array(c)) cc = copy(c) @test conj!(c) == conj(Array(cc)) diff --git a/test/linalg/triangular.jl b/test/linalg/triangular.jl index 8a6dfcba2f0a7..5e45b2fc43073 100644 --- a/test/linalg/triangular.jl +++ b/test/linalg/triangular.jl @@ -24,7 +24,7 @@ for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFlo (UnitLowerTriangular, :L)) # Construct test matrix - A1 = t1(elty1 == Int ? rand(1:7, n, n) : convert(Matrix{elty1}, (elty1 <: Complex ? complex.(randn(n, n), randn(n, n)) : randn(n, n)) |> t -> chol(t't) |> t -> uplo1 == :U ? t : adjoint(t))) + A1 = t1(elty1 == Int ? rand(1:7, n, n) : convert(Matrix{elty1}, (elty1 <: Complex ? complex.(randn(n, n), randn(n, n)) : randn(n, n)) |> t -> chol(t't) |> t -> uplo1 == :U ? t : copy(t'))) debug && println("elty1: $elty1, A1: $t1") @@ -133,17 +133,17 @@ for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFlo # [c]transpose[!] (test views as well, see issue #14317) let vrange = 1:n-1, viewA1 = t1(view(A1.data, vrange, vrange)) # transpose - @test transpose(A1) == transpose(Matrix(A1)) - @test transpose(viewA1) == transpose(Matrix(viewA1)) + @test copy(Transpose(A1)) == Transpose(Matrix(A1)) + @test copy(Transpose(viewA1)) == Transpose(Matrix(viewA1)) # adjoint - @test adjoint(A1) == adjoint(Matrix(A1)) - @test adjoint(viewA1) == adjoint(Matrix(viewA1)) + @test copy(A1') == Matrix(A1)' + @test copy(viewA1') == Matrix(viewA1)' # transpose! - @test transpose!(copy(A1)) == transpose(A1) - @test transpose!(t1(view(copy(A1).data, vrange, vrange))) == transpose(viewA1) + @test transpose!(copy(A1)) == Transpose(A1) + @test transpose!(t1(view(copy(A1).data, vrange, vrange))) == Transpose(viewA1) # adjoint! - @test adjoint!(copy(A1)) == adjoint(A1) - @test adjoint!(t1(view(copy(A1).data, vrange, vrange))) == adjoint(viewA1) + @test adjoint!(copy(A1)) == Adjoint(A1) + @test adjoint!(t1(view(copy(A1).data, vrange, vrange))) == Adjoint(viewA1) end # diag @@ -166,15 +166,15 @@ for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFlo B = similar(A1) copyto!(B, A1) @test B == A1 - B = similar(transpose(A1)) - copyto!(B, transpose(A1)) - @test B == transpose(A1) + B = similar(copy(Transpose(A1))) + copyto!(B, copy(Transpose(A1))) + @test B == copy(Transpose(A1)) B = similar(viewA1) copyto!(B, viewA1) @test B == viewA1 - B = similar(transpose(viewA1)) - copyto!(B, transpose(viewA1)) - @test B == transpose(viewA1) + B = similar(copy(Transpose(viewA1))) + copyto!(B, copy(Transpose(viewA1))) + @test B == Transpose(viewA1) end #exp/log @@ -277,7 +277,7 @@ for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFlo debug && println("elty1: $elty1, A1: $t1, elty2: $elty2") - A2 = t2(elty2 == Int ? rand(1:7, n, n) : convert(Matrix{elty2}, (elty2 <: Complex ? complex.(randn(n, n), randn(n, n)) : randn(n, n)) |> t -> chol(t't) |> t -> uplo2 == :U ? t : adjoint(t))) + A2 = t2(elty2 == Int ? rand(1:7, n, n) : convert(Matrix{elty2}, (elty2 <: Complex ? complex.(randn(n, n), randn(n, n)) : randn(n, n)) |> t -> chol(t't) |> t -> uplo2 == :U ? t : copy(t'))) # Convert if elty1 <: Real && !(elty2 <: Integer) diff --git a/test/math.jl b/test/math.jl index ffe8cae351390..43040f8c1fb5a 100644 --- a/test/math.jl +++ b/test/math.jl @@ -297,7 +297,7 @@ end @testset "test abstractarray trig functions" begin TAA = rand(2,2) - TAA = (TAA + transpose(TAA))/2. + TAA = (TAA + TAA')/2. STAA = Symmetric(TAA) @test Array(atanh.(STAA)) == atanh.(TAA) @test Array(asinh.(STAA)) == asinh.(TAA) diff --git a/test/mod2pi.jl b/test/mod2pi.jl index f0fe43b9ed776..5b0cb906bcef2 100644 --- a/test/mod2pi.jl +++ b/test/mod2pi.jl @@ -222,23 +222,23 @@ testModPi() # ieee754_rem_pio2_return contains the returned value from the ieee754_rem_pio2 # function in openlibm: https://github.com/JuliaLang/openlibm/blob/0598080ca09468490a13ae393ba17d8620c1b201/src/e_rem_pio2.c - ieee754_rem_pio2_return = adjoint([1.5707963267948966 1.5707963267948966; - 1.0471975511965979 -1.0471975511965979; - 0.10000000000000014 -0.10000000000000014; - 6.123233995736766e-17 -6.123233995736766e-17; - -0.6853981633974481 0.6853981633974481; - 0.10000000000000021 -0.10000000000000021; - 1.2246467991473532e-16 -1.2246467991473532e-16; - -0.6853981633974481 0.6853981633974481; - 0.09999999999999983 -0.09999999999999983; - 1.8369701987210297e-16 -1.8369701987210297e-16; - -0.6853981633974484 0.6853981633974484; - 2.4492935982947064e-16 -2.4492935982947064e-16; - 0.0999999999999999 -0.0999999999999999; - -0.6853981633974484 0.6853981633974484; - 3.135095805817224e-14 -3.135095805817224e-14; - 3.287386219680602e-8 -3.287386219680602e-8; - -0.1757159771004682 0.1757159771004682]) + ieee754_rem_pio2_return = [ 1.5707963267948966 1.5707963267948966; + 1.0471975511965979 -1.0471975511965979; + 0.10000000000000014 -0.10000000000000014; + 6.123233995736766e-17 -6.123233995736766e-17; + -0.6853981633974481 0.6853981633974481; + 0.10000000000000021 -0.10000000000000021; + 1.2246467991473532e-16 -1.2246467991473532e-16; + -0.6853981633974481 0.6853981633974481; + 0.09999999999999983 -0.09999999999999983; + 1.8369701987210297e-16 -1.8369701987210297e-16; + -0.6853981633974484 0.6853981633974484; + 2.4492935982947064e-16 -2.4492935982947064e-16; + 0.0999999999999999 -0.0999999999999999; + -0.6853981633974484 0.6853981633974484; + 3.135095805817224e-14 -3.135095805817224e-14; + 3.287386219680602e-8 -3.287386219680602e-8; + -0.1757159771004682 0.1757159771004682 ]' for (i, case) in enumerate(cases) # negative argument diff --git a/test/offsetarray.jl b/test/offsetarray.jl index f27a59983eb3b..9b298d9ea6714 100644 --- a/test/offsetarray.jl +++ b/test/offsetarray.jl @@ -327,8 +327,8 @@ cv = copy(v) A = OffsetArray(rand(4,4), (-3,5)) @test A ≈ A -@test axes(adjoint(A)) === (6:9, -2:1) -@test parent(adjoint(A)) == adjoint(parent(A)) +@test axes(A') === (6:9, -2:1) +@test parent(copy(A')) == copy(parent(A)') @test collect(A) == parent(A) @test maximum(A) == maximum(parent(A)) @test minimum(A) == minimum(parent(A)) diff --git a/test/perf/lapack/eig.jl b/test/perf/lapack/eig.jl index 69b2948f0e40b..aeea0559fd72d 100644 --- a/test/perf/lapack/eig.jl +++ b/test/perf/lapack/eig.jl @@ -14,7 +14,7 @@ end function symeigtest(n, iter) local d, v A = rand(n,n) - A = A + adjoint(A) + A = A + A' for i = 1:iter d,v = eig(A) end @@ -25,7 +25,7 @@ end function hermitianeigtest(n, iter) local d, v A = rand(ComplexF64, n, n) - A = A + adjoint(A) + A = A + A' for i = 1:iter d,v = eig(A) end diff --git a/test/show.jl b/test/show.jl index b852e512f0afe..8403706b7342a 100644 --- a/test/show.jl +++ b/test/show.jl @@ -638,7 +638,7 @@ let A = reshape(1:16, 4, 4) @test replstr(Diagonal(A)) == "4×4 Diagonal{$(Int),Array{$(Int),1}}:\n 1 ⋅ ⋅ ⋅\n ⋅ 6 ⋅ ⋅\n ⋅ ⋅ 11 ⋅\n ⋅ ⋅ ⋅ 16" @test replstr(Bidiagonal(A, :U)) == "4×4 Bidiagonal{$(Int),Array{$(Int),1}}:\n 1 5 ⋅ ⋅\n ⋅ 6 10 ⋅\n ⋅ ⋅ 11 15\n ⋅ ⋅ ⋅ 16" @test replstr(Bidiagonal(A, :L)) == "4×4 Bidiagonal{$(Int),Array{$(Int),1}}:\n 1 ⋅ ⋅ ⋅\n 2 6 ⋅ ⋅\n ⋅ 7 11 ⋅\n ⋅ ⋅ 12 16" - @test replstr(SymTridiagonal(A + adjoint(A))) == "4×4 SymTridiagonal{$(Int),Array{$(Int),1}}:\n 2 7 ⋅ ⋅\n 7 12 17 ⋅\n ⋅ 17 22 27\n ⋅ ⋅ 27 32" + @test replstr(SymTridiagonal(A + A')) == "4×4 SymTridiagonal{$(Int),Array{$(Int),1}}:\n 2 7 ⋅ ⋅\n 7 12 17 ⋅\n ⋅ 17 22 27\n ⋅ ⋅ 27 32" @test replstr(Tridiagonal(diag(A, -1), diag(A), diag(A, +1))) == "4×4 Tridiagonal{$(Int),Array{$(Int),1}}:\n 1 5 ⋅ ⋅\n 2 6 10 ⋅\n ⋅ 7 11 15\n ⋅ ⋅ 12 16" @test replstr(UpperTriangular(copy(A))) == "4×4 UpperTriangular{$Int,Array{$Int,2}}:\n 1 5 9 13\n ⋅ 6 10 14\n ⋅ ⋅ 11 15\n ⋅ ⋅ ⋅ 16" @test replstr(LowerTriangular(copy(A))) == "4×4 LowerTriangular{$Int,Array{$Int,2}}:\n 1 ⋅ ⋅ ⋅\n 2 6 ⋅ ⋅\n 3 7 11 ⋅\n 4 8 12 16" diff --git a/test/sparse/higherorderfns.jl b/test/sparse/higherorderfns.jl index 719e9fa83ffdb..9fd045a9d5f2a 100644 --- a/test/sparse/higherorderfns.jl +++ b/test/sparse/higherorderfns.jl @@ -415,8 +415,10 @@ end @test broadcast(*, s, V, A, X)::SparseMatrixCSC == sparse(broadcast(*, s, fV, fA, X)) @test broadcast!(*, Z, s, V, A, X) == sparse(broadcast(*, s, fV, fA, X)) # Issue #20954 combinations of sparse arrays and Adjoint/Transpose vectors - @test broadcast(+, A, adjoint(X))::SparseMatrixCSC == sparse(broadcast(+, fA, adjoint(X))) - @test broadcast(*, V, adjoint(X))::SparseMatrixCSC == sparse(broadcast(*, fV, adjoint(X))) + if X isa Vector + @test broadcast(+, A, X')::SparseMatrixCSC == sparse(broadcast(+, fA, X')) + @test broadcast(*, V, X')::SparseMatrixCSC == sparse(broadcast(*, fV, X')) + end end @test V .+ ntuple(identity, N) isa Vector @test A .+ ntuple(identity, N) isa Matrix @@ -427,7 +429,7 @@ end # to the generic AbstractArray broadcast! code (at least for now). N, p = 5, 0.4 A = sprand(N, N, p) - sA = A + transpose(A) + sA = A + copy(A') D = Diagonal(rand(N)) B = Bidiagonal(rand(N), rand(N - 1), :U) T = Tridiagonal(rand(N - 1), rand(N), rand(N - 1)) diff --git a/test/sparse/sparse.jl b/test/sparse/sparse.jl index 4ebfb966ea981..c9b9f73898dac 100644 --- a/test/sparse/sparse.jl +++ b/test/sparse/sparse.jl @@ -163,7 +163,7 @@ end am = sprand(1, 20, 0.2) av = squeeze(am, 1) @test ndims(av) == 1 - @test all(transpose(av) .== am) + @test all(Transpose(av) .== am) end end @@ -201,8 +201,8 @@ end @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) - @test (maximum(abs.(a'\b - Array(adjoint(a))\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) + @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) @test (maximum(abs.((a'*c + d) - (Array(a)'*c + d))) < 1000*eps()) @test (maximum(abs.((α*Transpose(a)*c + β*d) - (α*Transpose(Array(a))*c + β*d))) < 1000*eps()) @test (maximum(abs.((Transpose(a)*c + d) - (Transpose(Array(a))*c + d))) < 1000*eps()) @@ -216,8 +216,8 @@ end @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) - @test (maximum(abs.(a'\b - Array(adjoint(a))\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) + @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) a = I + tril(0.1*sprandn(5, 5, 0.2)) b = randn(5,3) + im*randn(5,3) @@ -225,8 +225,8 @@ end @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) - @test (maximum(abs.(a'\b - Array(adjoint(a))\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) + @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) a = I + tril(0.1*sprandn(5, 5, 0.2) + 0.1*im*sprandn(5, 5, 0.2)) b = randn(5,3) @@ -234,8 +234,8 @@ end @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) - @test (maximum(abs.(a'\b - Array(adjoint(a))\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) + @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) a = I + triu(0.1*sprandn(5, 5, 0.2)) b = randn(5,3) + im*randn(5,3) @@ -243,8 +243,8 @@ end @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) - @test (maximum(abs.(a'\b - Array(adjoint(a))\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) + @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) a = I + triu(0.1*sprandn(5, 5, 0.2) + 0.1*im*sprandn(5, 5, 0.2)) b = randn(5,3) @@ -252,8 +252,8 @@ end @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) - @test (maximum(abs.(a'\b - Array(adjoint(a))\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) + @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) a = I + triu(0.1*sprandn(5, 5, 0.2)) b = randn(5,3) + im*randn(5,3) @@ -261,8 +261,8 @@ end @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) - @test (maximum(abs.(a'\b - Array(adjoint(a))\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) + @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) # UpperTriangular/LowerTriangular solve a = UpperTriangular(I + triu(0.1*sprandn(5, 5, 0.2))) @@ -284,16 +284,16 @@ end @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) - @test (maximum(abs.(a'\b - Array(adjoint(a))\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) + @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) b = randn(5,3) + im*randn(5,3) @test (maximum(abs.(a*b - Array(a)*b)) < 100*eps()) @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) - @test (maximum(abs.(a'\b - Array(adjoint(a))\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) + @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) end end end @@ -341,8 +341,8 @@ dA = Array(sA) @testset "inverse scale!" begin bi = inv.(b) - dAt = transpose(dA) - sAt = transpose(sA) + dAt = copy(Transpose(dA)) + sAt = copy(Transpose(sA)) @test scale!(copy(dAt), bi) ≈ rdiv!(copy(sAt), Diagonal(b)) @test scale!(copy(dAt), bi) ≈ rdiv!(copy(sAt), Transpose(Diagonal(b))) @test scale!(copy(dAt), conj(bi)) ≈ rdiv!(copy(sAt), Adjoint(Diagonal(b))) @@ -403,7 +403,7 @@ end (m, n) = (smalldim, smalldim) A = sprand(m, n, nzprob) X = similar(A) - C = transpose(A) + C = copy(Transpose(A)) p = randperm(m) q = randperm(n) @testset "common error checking of [c]transpose! methods (ftranspose!)" begin @@ -440,15 +440,15 @@ end @testset "overall functionality of [c]transpose[!] and permute[!]" begin for (m, n) in ((smalldim, smalldim), (smalldim, largedim), (largedim, smalldim)) A = sprand(m, n, nzprob) - At = transpose(A) + At = copy(Transpose(A)) # transpose[!] - fullAt = transpose(Array(A)) - @test transpose(A) == fullAt + fullAt = Array(Transpose(A)) + @test copy(Transpose(A)) == fullAt @test transpose!(similar(At), A) == fullAt # adjoint[!] C = A + im*A/2 - fullCh = adjoint(Array(C)) - @test adjoint(C) == fullCh + fullCh = Array(C') + @test copy(C') == fullCh @test adjoint!(similar(sparse(fullCh)), C) == fullCh # permute[!] p = randperm(m) @@ -466,8 +466,8 @@ end @testset "transpose of SubArrays" begin A = view(sprandn(10, 10, 0.3), 1:4, 1:4) - @test transpose(Array(A)) == Array(transpose(A)) - @test adjoint(Array(A)) == Array(adjoint(A)) + @test copy(Transpose(Array(A))) == Array(Transpose(A)) + @test copy(Adjoint(Array(A))) == Array(Adjoint(A)) end @testset "exp" begin @@ -1313,7 +1313,7 @@ end end @testset "issue #9917" begin - @test sparse(adjoint([])) == reshape(sparse([]), 1, 0) + @test sparse([]') == reshape(sparse([]), 1, 0) @test Array(sparse([])) == zeros(0) @test_throws BoundsError sparse([])[1] @test_throws BoundsError sparse([])[1] = 1 @@ -1746,13 +1746,13 @@ end srand(123) local A A = sparse(Diagonal(rand(5))) + sprandn(5, 5, 0.2) + im*sprandn(5, 5, 0.2) - A = A + adjoint(A) + A = A + copy(A') @test !Base.USE_GPL_LIBS || abs(det(factorize(Hermitian(A)))) ≈ abs(det(factorize(Array(A)))) A = sparse(Diagonal(rand(5))) + sprandn(5, 5, 0.2) + im*sprandn(5, 5, 0.2) A = A*A' @test !Base.USE_GPL_LIBS || abs(det(factorize(Hermitian(A)))) ≈ abs(det(factorize(Array(A)))) A = sparse(Diagonal(rand(5))) + sprandn(5, 5, 0.2) - A = A + transpose(A) + A = A + copy(Transpose(A)) @test !Base.USE_GPL_LIBS || abs(det(factorize(Symmetric(A)))) ≈ abs(det(factorize(Array(A)))) A = sparse(Diagonal(rand(5))) + sprandn(5, 5, 0.2) A = A*Transpose(A) @@ -1916,7 +1916,7 @@ end end @testset "issue #14398" begin - @test transpose(view(sparse(I, 10, 10), 1:5, 1:5)) ≈ Matrix(I, 5, 5) + @test collect(Transpose((view(sparse(I, 10, 10), 1:5, 1:5)))) ≈ Matrix(I, 5, 5) end @testset "dropstored issue #20513" begin @@ -2012,7 +2012,7 @@ end A = guardsrand(1234) do sprand(5, 5, 1/5) end - A = max.(A, adjoint(A)) + A = max.(A, copy(A')) LinAlg.fillstored!(A, 1) B = A[5:-1:1, 5:-1:1] @test issymmetric(B) diff --git a/test/sparse/sparsevector.jl b/test/sparse/sparsevector.jl index d2a822cd03226..194ebd8a7516b 100644 --- a/test/sparse/sparsevector.jl +++ b/test/sparse/sparsevector.jl @@ -385,14 +385,14 @@ end @test float(af) == af @test isa(af, SparseVector{Float64,Int}) @test exact_equal(af, SparseVector(8, [2, 5, 6], [12., 35., 72.])) - @test sparsevec(transpose(transpose(af))) == af + @test sparsevec(Transpose(Transpose(af))) == af # complex acp = complex(af) @test complex(acp) == acp @test isa(acp, SparseVector{ComplexF64,Int}) @test exact_equal(acp, SparseVector(8, [2, 5, 6], complex([12., 35., 72.]))) - @test sparsevec(adjoint(adjoint(acp))) == acp + @test sparsevec((acp')') == acp end @testset "Type conversion" begin @@ -984,7 +984,7 @@ end @testset "#16716" begin # The preceding tests miss the edge case where the sparse vector is empty origmat = [-1.5 -0.7; 0.0 1.0] - transmat = transpose(origmat) + transmat = copy(origmat') utmat = UpperTriangular(origmat) ltmat = LowerTriangular(transmat) uutmat = Base.LinAlg.UnitUpperTriangular(origmat) diff --git a/test/statistics.jl b/test/statistics.jl index 5b6154260fb2f..b255c2c1e68f6 100644 --- a/test/statistics.jl +++ b/test/statistics.jl @@ -137,8 +137,8 @@ end @test var((1,2,3); mean=0, corrected=false) ≈ 14.0/3 @test_throws ArgumentError var((1,2,3); mean=()) - @test var([1 2 3 4 5; 6 7 8 9 10], 2) ≈ adjoint([2.5 2.5]) - @test var([1 2 3 4 5; 6 7 8 9 10], 2; corrected=false) ≈ adjoint([2.0 2.0]) + @test var([1 2 3 4 5; 6 7 8 9 10], 2) ≈ [2.5 2.5]' + @test var([1 2 3 4 5; 6 7 8 9 10], 2; corrected=false) ≈ [2.0 2.0]' @test stdm([1,2,3], 2) ≈ 1. @test std([1,2,3]) ≈ 1. @@ -152,8 +152,8 @@ end @test std((1,2,3); mean=0) ≈ sqrt(7.0) @test std((1,2,3); mean=0, corrected=false) ≈ sqrt(14.0/3) - @test std([1 2 3 4 5; 6 7 8 9 10], 2) ≈ sqrt.(adjoint([2.5 2.5])) - @test std([1 2 3 4 5; 6 7 8 9 10], 2; corrected=false) ≈ sqrt.(adjoint([2.0 2.0])) + @test std([1 2 3 4 5; 6 7 8 9 10], 2) ≈ sqrt.([2.5 2.5]') + @test std([1 2 3 4 5; 6 7 8 9 10], 2; corrected=false) ≈ sqrt.([2.0 2.0]') let A = ComplexF64[exp(i*im) for i in 1:10^4] @test varm(A, 0.) ≈ sum(map(abs2, A)) / (length(A) - 1) @@ -175,8 +175,16 @@ function safe_cov(x, y, zm::Bool, cr::Bool) end dot(vec(x), vec(y)) / (n - Int(cr)) end -X = adjoint([1. 2. 3. 4. 5.; 5. 4. 6. 2. 1.]) -Y = adjoint([6. 1. 5. 3. 2.; 2. 7. 8. 4. 3.]) +X = [1.0 5.0; + 2.0 4.0; + 3.0 6.0; + 4.0 2.0; + 5.0 1.0] +Y = [6.0 2.0; + 1.0 7.0; + 5.0 8.0; + 3.0 4.0; + 2.0 3.0] @testset "covariance" begin for vd in [1, 2], zm in [true, false], cr in [true, false] From 43b2cfbb3aec3d8777210ca306f9f80eed1cce6d Mon Sep 17 00:00:00 2001 From: Sacha Verweij Date: Wed, 3 Jan 2018 15:16:57 -0800 Subject: [PATCH 2/7] Replace Adjoint/Transpose with adjoint/transpose throughout test/. --- test/arrayops.jl | 4 +- test/linalg/bidiag.jl | 22 +++---- test/linalg/blas.jl | 22 +++---- test/linalg/bunchkaufman.jl | 10 ++-- test/linalg/diagonal.jl | 64 ++++++++++---------- test/linalg/givens.jl | 6 +- test/linalg/lapack.jl | 10 ++-- test/linalg/lq.jl | 30 +++++----- test/linalg/lu.jl | 28 ++++----- test/linalg/matmul.jl | 93 ++++++++++++++--------------- test/linalg/qr.jl | 20 +++---- test/linalg/schur.jl | 8 +-- test/linalg/special.jl | 10 ++-- test/linalg/symmetric.jl | 26 ++++----- test/linalg/triangular.jl | 106 +++++++++++++++++----------------- test/linalg/uniformscaling.jl | 2 +- test/perf/micro/perf.jl | 4 +- test/sparse/sparse.jl | 80 ++++++++++++------------- test/sparse/sparsevector.jl | 44 +++++++------- 19 files changed, 296 insertions(+), 293 deletions(-) diff --git a/test/arrayops.jl b/test/arrayops.jl index bbd829ce35d6d..79a91b9a46405 100644 --- a/test/arrayops.jl +++ b/test/arrayops.jl @@ -1350,14 +1350,14 @@ end @test size([]') == (1,0) # issue #6996 -@test copy(Adjoint(Any[ 1 2; 3 4 ])) == copy(Transpose(Any[ 1 2; 3 4 ])) +@test copy(adjoint(Any[ 1 2; 3 4 ])) == copy(transpose(Any[ 1 2; 3 4 ])) # map with promotion (issue #6541) @test map(join, ["z", "я"]) == ["z", "я"] # Handle block matrices let A = [randn(2, 2) for i = 1:2, j = 1:2] - @test issymmetric(Transpose(A)*A) + @test issymmetric(A'A) end let A = [complex.(randn(2, 2), randn(2, 2)) for i = 1:2, j = 1:2] @test ishermitian(A'A) diff --git a/test/linalg/bidiag.jl b/test/linalg/bidiag.jl index 423d09b05e440..017aa2cdcdef0 100644 --- a/test/linalg/bidiag.jl +++ b/test/linalg/bidiag.jl @@ -1,7 +1,7 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license using Test -using Base.LinAlg: mul!, Adjoint, Transpose +using Base.LinAlg: mul! import Base.LinAlg: BlasReal, BlasFloat n = 10 #Size of test matrix @@ -163,22 +163,22 @@ srand(1) condT = cond(map(ComplexF64,Tfull)) promty = typeof((zero(relty)*zero(relty) + zero(relty)*zero(relty))/one(relty)) if relty != BigFloat - x = Transpose(T)\Transpose(c) - tx = Transpose(Tfull) \ Transpose(c) + x = transpose(T)\transpose(c) + tx = transpose(Tfull) \ transpose(c) elty <: AbstractFloat && @test norm(x-tx,Inf) <= 4*condT*max(eps()*norm(tx,Inf), eps(promty)*norm(x,Inf)) - @test_throws DimensionMismatch Transpose(T)\Transpose(b) - x = T'\copy(Transpose(c)) - tx = Tfull'\copy(Transpose(c)) + @test_throws DimensionMismatch transpose(T)\transpose(b) + x = T'\copy(transpose(c)) + tx = Tfull'\copy(transpose(c)) @test norm(x-tx,Inf) <= 4*condT*max(eps()*norm(tx,Inf), eps(promty)*norm(x,Inf)) - @test_throws DimensionMismatch T'\copy(Transpose(b)) - x = T\Transpose(c) - tx = Tfull\Transpose(c) + @test_throws DimensionMismatch T'\copy(transpose(b)) + x = T\transpose(c) + tx = Tfull\transpose(c) @test norm(x-tx,Inf) <= 4*condT*max(eps()*norm(tx,Inf), eps(promty)*norm(x,Inf)) - @test_throws DimensionMismatch T\Transpose(b) + @test_throws DimensionMismatch T\transpose(b) end offsizemat = Matrix{elty}(uninitialized, n+1, 2) @test_throws DimensionMismatch T \ offsizemat - @test_throws DimensionMismatch Transpose(T) \ offsizemat + @test_throws DimensionMismatch transpose(T) \ offsizemat @test_throws DimensionMismatch T' \ offsizemat let bb = b, cc = c diff --git a/test/linalg/blas.jl b/test/linalg/blas.jl index b433f3c9aeaa3..b829569ed7bcc 100644 --- a/test/linalg/blas.jl +++ b/test/linalg/blas.jl @@ -14,10 +14,10 @@ srand(100) end U = convert(Array{elty, 2}, U) V = convert(Array{elty, 2}, V) - @test tril(LinAlg.BLAS.syr2k('L','N',U,V)) ≈ tril(U*Transpose(V) + V*Transpose(U)) - @test triu(LinAlg.BLAS.syr2k('U','N',U,V)) ≈ triu(U*Transpose(V) + V*Transpose(U)) - @test tril(LinAlg.BLAS.syr2k('L','T',U,V)) ≈ tril(Transpose(U)*V + Transpose(V)*U) - @test triu(LinAlg.BLAS.syr2k('U','T',U,V)) ≈ triu(Transpose(U)*V + Transpose(V)*U) + @test tril(LinAlg.BLAS.syr2k('L','N',U,V)) ≈ tril(U*transpose(V) + V*transpose(U)) + @test triu(LinAlg.BLAS.syr2k('U','N',U,V)) ≈ triu(U*transpose(V) + V*transpose(U)) + @test tril(LinAlg.BLAS.syr2k('L','T',U,V)) ≈ tril(transpose(U)*V + transpose(V)*U) + @test triu(LinAlg.BLAS.syr2k('U','T',U,V)) ≈ triu(transpose(U)*V + transpose(V)*U) end if elty in (ComplexF32, ComplexF64) @@ -134,9 +134,9 @@ srand(100) @test_throws DimensionMismatch BLAS.ger!(α,Vector{elty}(uninitialized,n+1),y,copy(A)) A = rand(elty,n,n) - A = A + Transpose(A) + A = A + transpose(A) @test issymmetric(A) - @test triu(BLAS.syr!('U',α,x,copy(A))) ≈ triu(A + α*x*Transpose(x)) + @test triu(BLAS.syr!('U',α,x,copy(A))) ≈ triu(A + α*x*transpose(x)) @test_throws DimensionMismatch BLAS.syr!('U',α,Vector{elty}(uninitialized,n+1),copy(A)) if elty <: Complex @@ -164,7 +164,7 @@ srand(100) x = rand(elty,n) A = rand(elty,n,n) Aherm = A + A' - Asymm = A + Transpose(A) + Asymm = A + transpose(A) @testset "symv and hemv" begin @test BLAS.symv('U',Asymm,x) ≈ Asymm*x offsizevec, offsizemat = Array{elty}.(uninitialized,(n+1, (n,n+1))) @@ -316,10 +316,10 @@ end @testset "syr for eltype $elty" for elty in (Float32, Float64, Complex{Float32}, Complex{Float64}) A = rand(elty, 5, 5) - @test triu(A[1,:] * Transpose(A[1,:])) ≈ BLAS.syr!('U', one(elty), A[1,:], zeros(elty, 5, 5)) - @test tril(A[1,:] * Transpose(A[1,:])) ≈ BLAS.syr!('L', one(elty), A[1,:], zeros(elty, 5, 5)) - @test triu(A[1,:] * Transpose(A[1,:])) ≈ BLAS.syr!('U', one(elty), view(A, 1, :), zeros(elty, 5, 5)) - @test tril(A[1,:] * Transpose(A[1,:])) ≈ BLAS.syr!('L', one(elty), view(A, 1, :), zeros(elty, 5, 5)) + @test triu(A[1,:] * transpose(A[1,:])) ≈ BLAS.syr!('U', one(elty), A[1,:], zeros(elty, 5, 5)) + @test tril(A[1,:] * transpose(A[1,:])) ≈ BLAS.syr!('L', one(elty), A[1,:], zeros(elty, 5, 5)) + @test triu(A[1,:] * transpose(A[1,:])) ≈ BLAS.syr!('U', one(elty), view(A, 1, :), zeros(elty, 5, 5)) + @test tril(A[1,:] * transpose(A[1,:])) ≈ BLAS.syr!('L', one(elty), view(A, 1, :), zeros(elty, 5, 5)) end @testset "her for eltype $elty" for elty in (Complex{Float32}, Complex{Float64}) diff --git a/test/linalg/bunchkaufman.jl b/test/linalg/bunchkaufman.jl index 4bc7a954fe293..61bfa395dd277 100644 --- a/test/linalg/bunchkaufman.jl +++ b/test/linalg/bunchkaufman.jl @@ -23,7 +23,7 @@ bimg = randn(n,2)/2 @testset "$eltya argument A" for eltya in (Float32, Float64, ComplexF32, ComplexF64, Int) a = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex.(areal, aimg) : areal) a2 = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex.(a2real, a2img) : a2real) - asym = Transpose(a) + a # symmetric indefinite + asym = transpose(a) + a # symmetric indefinite aher = a' + a # Hermitian indefinite apd = a' * a # Positive-definite for (a, a2, aher, apd) in ((a, a2, aher, apd), @@ -47,11 +47,11 @@ bimg = randn(n,2)/2 end @test inv(bc1)*aher ≈ Matrix(I, n, n) @testset for rook in (false, true) - @test inv(bkfact(Symmetric(Transpose(a) + a, uplo), rook))*(Transpose(a) + a) ≈ Matrix(I, n, n) + @test inv(bkfact(Symmetric(transpose(a) + a, uplo), rook))*(transpose(a) + a) ≈ Matrix(I, n, n) if eltya <: BlasFloat # test also bkfact! without explicit type tag # no bkfact! method for Int ... yet - @test inv(bkfact!(Transpose(a) + a, rook))*(Transpose(a) + a) ≈ Matrix(I, n, n) + @test inv(bkfact!(transpose(a) + a, rook))*(transpose(a) + a) ≈ Matrix(I, n, n) end @test size(bc1) == size(bc1.LD) @test size(bc1, 1) == size(bc1.LD, 1) @@ -66,8 +66,8 @@ bimg = randn(n,2)/2 end bc1 = bkfact(Symmetric(asym, uplo)) - @test getproperty(bc1, uplo)*bc1.D*Transpose(getproperty(bc1, uplo)) ≈ asym[bc1.p, bc1.p] - @test getproperty(bc1, uplo)*bc1.D*Transpose(getproperty(bc1, uplo)) ≈ bc1.P*asym*Transpose(bc1.P) + @test getproperty(bc1, uplo)*bc1.D*transpose(getproperty(bc1, uplo)) ≈ asym[bc1.p, bc1.p] + @test getproperty(bc1, uplo)*bc1.D*transpose(getproperty(bc1, uplo)) ≈ bc1.P*asym*transpose(bc1.P) @test_throws ErrorException bc1.Z @test_throws ArgumentError uplo == :L ? bc1.U : bc1.L end diff --git a/test/linalg/diagonal.jl b/test/linalg/diagonal.jl index 69c8700043695..70e14dfbea6af 100644 --- a/test/linalg/diagonal.jl +++ b/test/linalg/diagonal.jl @@ -1,7 +1,7 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license using Test -using Base.LinAlg: mul!, ldiv!, rdiv!, Adjoint, Transpose +using Base.LinAlg: mul!, ldiv!, rdiv! import Base.LinAlg: BlasFloat, BlasComplex, SingularException n=12 #Size of matrix problem to test @@ -89,7 +89,7 @@ srand(1) @test D*v ≈ DM*v atol=n*eps(relty)*(1+(elty<:Complex)) @test D*U ≈ DM*U atol=n^2*eps(relty)*(1+(elty<:Complex)) - @test Transpose(U)*D ≈ Transpose(U)*Array(D) + @test transpose(U)*D ≈ transpose(U)*Array(D) @test U'*D ≈ U'*Array(D) if relty != BigFloat @@ -98,18 +98,18 @@ srand(1) @test D\v ≈ DM\v atol=atol_two @test D\U ≈ DM\U atol=atol_three @test ldiv!(D, copy(v)) ≈ DM\v atol=atol_two - @test ldiv!(Transpose(D), copy(v)) ≈ DM\v atol=atol_two - @test ldiv!(Adjoint(conj(D)), copy(v)) ≈ DM\v atol=atol_two + @test ldiv!(transpose(D), copy(v)) ≈ DM\v atol=atol_two + @test ldiv!(adjoint(conj(D)), copy(v)) ≈ DM\v atol=atol_two @test ldiv!(D, copy(U)) ≈ DM\U atol=atol_three - @test ldiv!(Transpose(D), copy(U)) ≈ DM\U atol=atol_three - @test ldiv!(Adjoint(conj(D)), copy(U)) ≈ DM\U atol=atol_three + @test ldiv!(transpose(D), copy(U)) ≈ DM\U atol=atol_three + @test ldiv!(adjoint(conj(D)), copy(U)) ≈ DM\U atol=atol_three Uc = copy(U') target = scale!(Uc, inv.(D.diag)) @test rdiv!(Uc, D) ≈ target atol=atol_three @test_throws DimensionMismatch rdiv!(Matrix{elty}(I, n-1, n-1), D) @test_throws SingularException rdiv!(Uc, Diagonal(fill!(similar(D.diag), 0))) - @test rdiv!(Uc, Transpose(D)) ≈ target atol=atol_three - @test rdiv!(Uc, Adjoint(conj(D))) ≈ target atol=atol_three + @test rdiv!(Uc, transpose(D)) ≈ target atol=atol_three + @test rdiv!(Uc, adjoint(conj(D))) ≈ target atol=atol_three @test ldiv!(D, Matrix{eltype(D)}(I, size(D))) ≈ D \ Matrix{eltype(D)}(I, size(D)) atol=atol_three @test_throws DimensionMismatch ldiv!(D, fill(elty(1), n + 1)) @test_throws SingularException ldiv!(Diagonal(zeros(relty, n)), copy(v)) @@ -147,15 +147,15 @@ srand(1) b = rand(elty,n,n) b = sparse(b) @test mul!(copy(D), copy(b)) ≈ Array(D)*Array(b) - @test mul!(Transpose(copy(D)), copy(b)) ≈ Transpose(Array(D))*Array(b) - @test mul!(Adjoint(copy(D)), copy(b)) ≈ Array(D)'*Array(b) + @test mul!(transpose(copy(D)), copy(b)) ≈ transpose(Array(D))*Array(b) + @test mul!(adjoint(copy(D)), copy(b)) ≈ Array(D)'*Array(b) end end #a few missing mults bd = Bidiagonal(D2) - @test D*Transpose(D2) ≈ Array(D)*Transpose(Array(D2)) - @test D2*Transpose(D) ≈ Array(D2)*Transpose(Array(D)) + @test D*transpose(D2) ≈ Array(D)*transpose(Array(D2)) + @test D2*transpose(D) ≈ Array(D2)*transpose(Array(D)) @test D2*D' ≈ Array(D2)*Array(D)' #division of two Diagonals @@ -165,13 +165,13 @@ srand(1) # Performance specialisations for A*_mul_B! vvv = similar(vv) @test (r = Matrix(D) * vv ; mul!(vvv, D, vv) ≈ r ≈ vvv) - @test (r = Matrix(D)' * vv ; mul!(vvv, Adjoint(D), vv) ≈ r ≈ vvv) - @test (r = Transpose(Matrix(D)) * vv ; mul!(vvv, Transpose(D), vv) ≈ r ≈ vvv) + @test (r = Matrix(D)' * vv ; mul!(vvv, adjoint(D), vv) ≈ r ≈ vvv) + @test (r = transpose(Matrix(D)) * vv ; mul!(vvv, transpose(D), vv) ≈ r ≈ vvv) UUU = similar(UU) @test (r = Matrix(D) * UU ; mul!(UUU, D, UU) ≈ r ≈ UUU) - @test (r = Matrix(D)' * UU ; mul!(UUU, Adjoint(D), UU) ≈ r ≈ UUU) - @test (r = Transpose(Matrix(D)) * UU ; mul!(UUU, Transpose(D), UU) ≈ r ≈ UUU) + @test (r = Matrix(D)' * UU ; mul!(UUU, adjoint(D), UU) ≈ r ≈ UUU) + @test (r = transpose(Matrix(D)) * UU ; mul!(UUU, transpose(D), UU) ≈ r ≈ UUU) # make sure that mul!(A, {Adj|Trans}(B)) works with B as a Diagonal VV = Array(D) @@ -179,11 +179,11 @@ srand(1) r = VV * Matrix(D) @test Array(mul!(VV, DD)) ≈ r ≈ Array(D)*Array(D) DD = copy(D) - r = VV * Transpose(Array(D)) - @test Array(mul!(VV, Transpose(DD))) ≈ r + r = VV * transpose(Array(D)) + @test Array(mul!(VV, transpose(DD))) ≈ r DD = copy(D) r = VV * Array(D)' - @test Array(mul!(VV, Adjoint(DD))) ≈ r + @test Array(mul!(VV, adjoint(DD))) ≈ r end @testset "triu/tril" begin @test istriu(D) @@ -228,7 +228,7 @@ srand(1) end # Translates to Ac/t_mul_B, which is specialized after issue 21286 @test(D' * vv == conj(D) * vv) - @test(Transpose(D) * vv == D * vv) + @test(transpose(D) * vv == D * vv) end #logdet @@ -339,17 +339,17 @@ end D = Diagonal(randn(5)) @test T*D == Array(T)*Array(D) @test T'D == Array(T)'*Array(D) - @test Transpose(T)*D == Transpose(Array(T))*Array(D) + @test transpose(T)*D == transpose(Array(T))*Array(D) @test D*T' == Array(D)*Array(T)' - @test D*Transpose(T) == Array(D)*Transpose(Array(T)) + @test D*transpose(T) == Array(D)*transpose(Array(T)) @test D*T == Array(D)*Array(T) end end let D1 = Diagonal(rand(5)), D2 = Diagonal(rand(5)) @test_throws MethodError mul!(D1,D2) - @test_throws MethodError mul!(Transpose(D1),D2) - @test_throws MethodError mul!(Adjoint(D1),D2) + @test_throws MethodError mul!(transpose(D1),D2) + @test_throws MethodError mul!(adjoint(D1),D2) end @testset "multiplication of QR Q-factor and Diagonal (#16615 spot test)" begin @@ -373,7 +373,7 @@ end v = [[1, 2], [3, 4]] @test Dherm' * v == Dherm * v - @test Transpose(D) * v == [[7, 10], [15, 22]] + @test transpose(D) * v == [[7, 10], [15, 22]] @test issymmetric(D) == false @test issymmetric(Dherm) == false @@ -395,8 +395,8 @@ end S = Symmetric(A) H = Hermitian(A) for (transform1, transform2) in ((identity, identity), - (identity, Adjoint ), (Adjoint, identity ), (Adjoint, Adjoint ), - (identity, Transpose), (Transpose, identity ), (Transpose, Transpose) ) + (identity, adjoint ), (adjoint, identity ), (adjoint, adjoint ), + (identity, transpose), (transpose, identity ), (transpose, transpose) ) @test *(transform1(D), transform2(S)) ≈ *(transform1(Matrix(D)), transform2(Matrix(S))) @test *(transform1(D), transform2(H)) ≈ *(transform1(Matrix(D)), transform2(Matrix(H))) @test *(transform1(S), transform2(D)) ≈ *(transform1(Matrix(S)), transform2(Matrix(D))) @@ -414,15 +414,15 @@ end fullDD = copyto!(Matrix{Matrix{T}}(uninitialized, 2, 2), DD) fullBB = copyto!(Matrix{Matrix{T}}(uninitialized, 2, 2), BB) for (transform1, transform2) in ((identity, identity), - (identity, Adjoint ), (Adjoint, identity ), (Adjoint, Adjoint ), - (identity, Transpose), (Transpose, identity ), (Transpose, Transpose) ) + (identity, adjoint ), (adjoint, identity ), (adjoint, adjoint ), + (identity, transpose), (transpose, identity ), (transpose, transpose) ) @test *(transform1(D), transform2(B))::typeof(D) ≈ *(transform1(Matrix(D)), transform2(Matrix(B))) atol=2 * eps() @test *(transform1(DD), transform2(BB))::typeof(DD) == *(transform1(fullDD), transform2(fullBB)) end end end -@testset "Diagonal of Adjoint/Transpose vectors (#23649)" begin - @test Diagonal(Adjoint([1, 2, 3])) == Diagonal([1 2 3]) - @test Diagonal(Transpose([1, 2, 3])) == Diagonal([1 2 3]) +@testset "Diagonal of adjoint/transpose vectors (#23649)" begin + @test Diagonal(adjoint([1, 2, 3])) == Diagonal([1 2 3]) + @test Diagonal(transpose([1, 2, 3])) == Diagonal([1 2 3]) end diff --git a/test/linalg/givens.jl b/test/linalg/givens.jl index 1e118bc8d2e57..2b3a4a077bcc9 100644 --- a/test/linalg/givens.jl +++ b/test/linalg/givens.jl @@ -1,7 +1,7 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license using Test -using Base.LinAlg: mul!, Adjoint, Transpose +using Base.LinAlg: mul! # Test givens rotations @testset for elty in (Float32, Float64, ComplexF32, ComplexF64) @@ -17,7 +17,7 @@ using Base.LinAlg: mul!, Adjoint, Transpose for i = j+2:10 G, _ = givens(A, j+1, i, j) mul!(G, A) - mul!(A, Adjoint(G)) + mul!(A, adjoint(G)) mul!(G, R) @test mul!(G,Matrix{elty}(I, 10, 10)) == [G[i,j] for i=1:10,j=1:10] @@ -34,7 +34,7 @@ using Base.LinAlg: mul!, Adjoint, Transpose @test_throws ArgumentError givens(one(elty),zero(elty),2,2) G, _ = givens(one(elty),zero(elty),11,12) @test_throws DimensionMismatch mul!(G, A) - @test_throws DimensionMismatch mul!(A, Adjoint(G)) + @test_throws DimensionMismatch mul!(A, adjoint(G)) @test abs.(A) ≈ abs.(hessfact(Ac).H) @test norm(R*Matrix{elty}(I, 10, 10)) ≈ one(elty) diff --git a/test/linalg/lapack.jl b/test/linalg/lapack.jl index 0aa06f4896c12..7a37365a1c5e8 100644 --- a/test/linalg/lapack.jl +++ b/test/linalg/lapack.jl @@ -357,7 +357,7 @@ end @testset "sytri, sytrs, and sytrf" begin @testset for elty in (Float32, Float64, ComplexF32, ComplexF64) A = rand(elty,10,10) - A = A + Transpose(A) #symmetric! + A = A + transpose(A) #symmetric! B = copy(A) B,ipiv = LAPACK.sytrf!('U',B) @test triu(inv(A)) ≈ triu(LAPACK.sytri!('U',B,ipiv)) rtol=eps(cond(A)) @@ -368,14 +368,14 @@ end # Rook-pivoting variants @testset for elty in (Float32, Float64, ComplexF32, ComplexF64) A = rand(elty, 10, 10) - A = A + Transpose(A) #symmetric! + A = A + transpose(A) #symmetric! B = copy(A) B,ipiv = LAPACK.sytrf_rook!('U', B) @test triu(inv(A)) ≈ triu(LAPACK.sytri_rook!('U', B, ipiv)) rtol=eps(cond(A)) @test_throws DimensionMismatch LAPACK.sytrs_rook!('U', B, ipiv, rand(elty, 11, 5)) @test LAPACK.sytrf_rook!('U',zeros(elty, 0, 0)) == (zeros(elty, 0, 0),zeros(BlasInt, 0)) A = rand(elty, 10, 10) - A = A + Transpose(A) #symmetric! + A = A + transpose(A) #symmetric! b = rand(elty, 10) c = A \ b cnd = cond(A) @@ -446,7 +446,7 @@ end @testset for elty in (Float32, Float64, ComplexF32, ComplexF64) srand(123) A = rand(elty,10,10) - A = A + Transpose(A) #symmetric! + A = A + transpose(A) #symmetric! b = rand(elty,10) c = A \ b b,A = LAPACK.sysv!('U',A,b) @@ -525,7 +525,7 @@ end if elty <: Complex A = A + A' else - A = A + Transpose(A) + A = A + transpose(A) end B = rand(elty,n,n) D = copy(A) diff --git a/test/linalg/lq.jl b/test/linalg/lq.jl index 599007400ac67..6505a00074bad 100644 --- a/test/linalg/lq.jl +++ b/test/linalg/lq.jl @@ -2,7 +2,7 @@ using Test -using Base.LinAlg: BlasComplex, BlasFloat, BlasReal, mul!, Adjoint, Transpose +using Base.LinAlg: BlasComplex, BlasFloat, BlasReal, mul! n = 10 @@ -53,7 +53,7 @@ rectangularQ(Q::LinAlg.LQPackedQ) = convert(Array, Q) @test size(lqa,3) == 1 @test size(lqa.Q,3) == 1 @test_throws ErrorException lqa.Z - @test Array(copy(Adjoint(lqa))) ≈ a' + @test Array(copy(adjoint(lqa))) ≈ a' @test lqa * lqa' ≈ a * a' @test lqa' * lqa ≈ a' * a @test q*squareQ(q)' ≈ Matrix(I, n, n) @@ -67,27 +67,27 @@ rectangularQ(Q::LinAlg.LQPackedQ) = convert(Array, Q) @testset "Binary ops" begin @test a*(lqa\b) ≈ b atol=3000ε @test lqa*b ≈ qra.Q*qra.R*b atol=3000ε - @test (sq = size(q.factors, 2); *(Matrix{eltyb}(I, sq, sq), Adjoint(q))*squareQ(q)) ≈ Matrix(I, n, n) atol=5000ε + @test (sq = size(q.factors, 2); *(Matrix{eltyb}(I, sq, sq), adjoint(q))*squareQ(q)) ≈ Matrix(I, n, n) atol=5000ε if eltya != Int @test Matrix{eltyb}(I, n, n)*q ≈ convert(AbstractMatrix{tab},q) end @test q*b ≈ squareQ(q)*b atol=100ε - @test Transpose(q)*b ≈ Transpose(squareQ(q))*b atol=100ε + @test transpose(q)*b ≈ transpose(squareQ(q))*b atol=100ε @test q'*b ≈ squareQ(q)'*b atol=100ε @test a*q ≈ a*squareQ(q) atol=100ε - @test a*Transpose(q) ≈ a*Transpose(squareQ(q)) atol=100ε + @test a*transpose(q) ≈ a*transpose(squareQ(q)) atol=100ε @test a*q' ≈ a*squareQ(q)' atol=100ε @test a'*q ≈ a'*squareQ(q) atol=100ε @test a'*q' ≈ a'*squareQ(q)' atol=100ε @test_throws DimensionMismatch q*b[1:n1 + 1] - @test_throws DimensionMismatch Adjoint(q) * Matrix{eltya}(uninitialized,n+2,n+2) + @test_throws DimensionMismatch adjoint(q) * Matrix{eltya}(uninitialized,n+2,n+2) @test_throws DimensionMismatch Matrix{eltyb}(uninitialized,n+2,n+2)*q if isa(a, DenseArray) && isa(b, DenseArray) # use this to test 2nd branch in mult code pad_a = vcat(I, a) pad_b = hcat(I, b) @test pad_a*q ≈ pad_a*squareQ(q) atol=100ε - @test Transpose(q)*pad_b ≈ Transpose(squareQ(q))*pad_b atol=100ε + @test transpose(q)*pad_b ≈ transpose(squareQ(q))*pad_b atol=100ε @test q'*pad_b ≈ squareQ(q)'*pad_b atol=100ε end end @@ -100,8 +100,8 @@ rectangularQ(Q::LinAlg.LQPackedQ) = convert(Array, Q) @test rectangularQ(q)*rectangularQ(q)' ≈ Matrix(I, n1, n1) @test squareQ(q)'*squareQ(q) ≈ Matrix(I, n1, n1) @test_throws DimensionMismatch mul!(Matrix{eltya}(I, n+1, n+1),q) - @test mul!(Adjoint(q), rectangularQ(q)) ≈ Matrix(I, n1, n1) - @test_throws DimensionMismatch mul!(Matrix{eltya}(I, n+1, n+1), Adjoint(q)) + @test mul!(adjoint(q), rectangularQ(q)) ≈ Matrix(I, n1, n1) + @test_throws DimensionMismatch mul!(Matrix{eltya}(I, n+1, n+1), adjoint(q)) @test_throws BoundsError size(q,-1) end end @@ -200,9 +200,9 @@ end implicitQ, explicitQ = getqs(lqfact(randn(mA, nA))) C = randn(nA, nA) @test *(C, implicitQ) ≈ *(C, explicitQ) - @test *(C, Adjoint(implicitQ)) ≈ *(C, Adjoint(explicitQ)) - @test *(Adjoint(C), implicitQ) ≈ *(Adjoint(C), explicitQ) - @test *(Adjoint(C), Adjoint(implicitQ)) ≈ *(Adjoint(C), Adjoint(explicitQ)) + @test *(C, adjoint(implicitQ)) ≈ *(C, adjoint(explicitQ)) + @test *(adjoint(C), implicitQ) ≈ *(adjoint(C), explicitQ) + @test *(adjoint(C), adjoint(implicitQ)) ≈ *(adjoint(C), adjoint(explicitQ)) end # where the LQ-factored matrix has at least as many rows m as columns n, # Q's full/square and reduced/rectangular forms have the same shape (n-by-n). hence we expect @@ -219,7 +219,7 @@ end zeroextCright = hcat(C, zeros(eltype(C), mA)) zeroextCdown = vcat(C, zeros(eltype(C), (1, mA))) @test *(C, implicitQ) ≈ *(zeroextCright, explicitQ) - @test *(Adjoint(C), implicitQ) ≈ *(Adjoint(zeroextCdown), explicitQ) - @test_throws DimensionMismatch C * Adjoint(implicitQ) - @test_throws DimensionMismatch Adjoint(C) * Adjoint(implicitQ) + @test *(adjoint(C), implicitQ) ≈ *(adjoint(zeroextCdown), explicitQ) + @test_throws DimensionMismatch C * adjoint(implicitQ) + @test_throws DimensionMismatch adjoint(C) * adjoint(implicitQ) end diff --git a/test/linalg/lu.jl b/test/linalg/lu.jl index 2bbb0760a6ec8..e25fa73d4be64 100644 --- a/test/linalg/lu.jl +++ b/test/linalg/lu.jl @@ -1,7 +1,7 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license using Test -using Base.LinAlg: ldiv!, Adjoint, Transpose +using Base.LinAlg: ldiv! import Base.LinAlg.BlasInt, Base.LinAlg.BlasFloat n = 10 @@ -110,8 +110,8 @@ dimg = randn(n)/2 @test norm(a*(lua\cc) - cc, 1) < ε*κ*n # cc is a vector @test norm(a'*(lua'\cc) - cc, 1) < ε*κ*n # cc is a vector @test AbstractArray(lua) ≈ a - @test norm(Transpose(a)*(Transpose(lua)\bb) - bb,1) < ε*κ*n*2 # Two because the right hand side has two columns - @test norm(Transpose(a)*(Transpose(lua)\cc) - cc,1) < ε*κ*n + @test norm(transpose(a)*(transpose(lua)\bb) - bb,1) < ε*κ*n*2 # Two because the right hand side has two columns + @test norm(transpose(a)*(transpose(lua)\cc) - cc,1) < ε*κ*n end # Test whether Ax_ldiv_B!(y, LU, x) indeed overwrites y @@ -125,13 +125,13 @@ dimg = randn(n)/2 @test norm(b_dest - lua \ b, 1) < ε*κ*2n @test norm(c_dest - lua \ c, 1) < ε*κ*n - ldiv!(b_dest, Transpose(lua), b) - ldiv!(c_dest, Transpose(lua), c) - @test norm(b_dest - Transpose(lua) \ b, 1) < ε*κ*2n - @test norm(c_dest - Transpose(lua) \ c, 1) < ε*κ*n + ldiv!(b_dest, transpose(lua), b) + ldiv!(c_dest, transpose(lua), c) + @test norm(b_dest - transpose(lua) \ b, 1) < ε*κ*2n + @test norm(c_dest - transpose(lua) \ c, 1) < ε*κ*n - ldiv!(b_dest, Adjoint(lua), b) - ldiv!(c_dest, Adjoint(lua), c) + ldiv!(b_dest, adjoint(lua), b) + ldiv!(c_dest, adjoint(lua), c) @test norm(b_dest - lua' \ b, 1) < ε*κ*2n @test norm(c_dest - lua' \ c, 1) < ε*κ*n end @@ -144,16 +144,16 @@ dimg = randn(n)/2 lud = factorize(d) f = zeros(eltyb, n+1) @test_throws DimensionMismatch lud\f - @test_throws DimensionMismatch Transpose(lud)\f + @test_throws DimensionMismatch transpose(lud)\f @test_throws DimensionMismatch lud'\f - @test_throws DimensionMismatch Base.LinAlg.ldiv!(Transpose(lud), f) + @test_throws DimensionMismatch Base.LinAlg.ldiv!(transpose(lud), f) let Bs = copy(b) for bb in (Bs, view(Bs, 1:n, 1)) @test norm(d*(lud\bb) - bb, 1) < ε*κd*n*2 # Two because the right hand side has two columns if eltya <: Real - @test norm((Transpose(lud)\bb) - Array(Transpose(d))\bb, 1) < ε*κd*n*2 # Two because the right hand side has two columns + @test norm((transpose(lud)\bb) - Array(transpose(d))\bb, 1) < ε*κd*n*2 # Two because the right hand side has two columns if eltya != Int && eltyb != Int - @test norm(Base.LinAlg.ldiv!(Transpose(lud), copy(bb)) - Array(Transpose(d))\bb, 1) < ε*κd*n*2 + @test norm(Base.LinAlg.ldiv!(transpose(lud), copy(bb)) - Array(transpose(d))\bb, 1) < ε*κd*n*2 end end if eltya <: Complex @@ -164,7 +164,7 @@ dimg = randn(n)/2 if eltya <: BlasFloat && eltyb <: BlasFloat e = rand(eltyb,n,n) @test norm(e/lud - e/d,1) < ε*κ*n^2 - @test norm((Transpose(lud)\e') - Array(Transpose(d))\e',1) < ε*κd*n^2 + @test norm((transpose(lud)\e') - Array(transpose(d))\e',1) < ε*κd*n^2 #test singular du = rand(eltya,n-1) dl = rand(eltya,n-1) diff --git a/test/linalg/matmul.jl b/test/linalg/matmul.jl index 8082daf9472c7..21513ced88dd1 100644 --- a/test/linalg/matmul.jl +++ b/test/linalg/matmul.jl @@ -2,7 +2,7 @@ using Test -using Base.LinAlg: mul!, Adjoint, Transpose +using Base.LinAlg: mul! ## Test Julia fallbacks to BLAS routines @@ -29,15 +29,15 @@ end BBi = BB+(2.5*im).*AA[[2,1],[2,1]] for A in (copy(AA), view(AA, 1:2, 1:2)), B in (copy(BB), view(BB, 1:2, 1:2)) @test A*B == [19 22; 43 50] - @test *(Transpose(A), B) == [26 30; 38 44] - @test *(A, Transpose(B)) == [17 23; 39 53] - @test *(Transpose(A), Transpose(B)) == [23 31; 34 46] + @test *(transpose(A), B) == [26 30; 38 44] + @test *(A, transpose(B)) == [17 23; 39 53] + @test *(transpose(A), transpose(B)) == [23 31; 34 46] end for Ai in (copy(AAi), view(AAi, 1:2, 1:2)), Bi in (copy(BBi), view(BBi, 1:2, 1:2)) @test Ai*Bi == [-21+53.5im -4.25+51.5im; -12+95.5im 13.75+85.5im] - @test *(Adjoint(Ai), Bi) == [68.5-12im 57.5-28im; 88-3im 76.5-25im] - @test *(Ai, Adjoint(Bi)) == [64.5+5.5im 43+31.5im; 104-18.5im 80.5+31.5im] - @test *(Adjoint(Ai), Adjoint(Bi)) == [-28.25-66im 9.75-58im; -26-89im 21-73im] + @test *(adjoint(Ai), Bi) == [68.5-12im 57.5-28im; 88-3im 76.5-25im] + @test *(Ai, adjoint(Bi)) == [64.5+5.5im 43+31.5im; 104-18.5im 80.5+31.5im] + @test *(adjoint(Ai), adjoint(Bi)) == [-28.25-66im 9.75-58im; -26-89im 21-73im] @test_throws DimensionMismatch [1 2; 0 0; 0 0] * [1 2] end @test_throws DimensionMismatch mul!(Matrix{Float64}(uninitialized,3,3), AA, BB) @@ -49,15 +49,15 @@ end BBi = BB+(2.5*im).*AA[[2,1,3],[2,3,1]] for A in (copy(AA), view(AA, 1:3, 1:3)), B in (copy(BB), view(BB, 1:3, 1:3)) @test A*B == [-26 38 -27; 1 -4 -6; 28 -46 15] - @test *(Adjoint(A), B) == [-6 2 -25; 3 -12 -18; 12 -26 -11] - @test *(A, Adjoint(B)) == [-14 0 6; 4 -3 -3; 22 -6 -12] - @test *(Adjoint(A), Adjoint(B)) == [6 -8 -6; 12 -9 -9; 18 -10 -12] + @test *(adjoint(A), B) == [-6 2 -25; 3 -12 -18; 12 -26 -11] + @test *(A, adjoint(B)) == [-14 0 6; 4 -3 -3; 22 -6 -12] + @test *(adjoint(A), adjoint(B)) == [6 -8 -6; 12 -9 -9; 18 -10 -12] end for Ai in (copy(AAi), view(AAi, 1:3, 1:3)), Bi in (copy(BBi), view(BBi, 1:3, 1:3)) @test Ai*Bi == [-44.75+13im 11.75-25im -38.25+30im; -47.75-16.5im -51.5+51.5im -56+6im; 16.75-4.5im -53.5+52im -15.5im] - @test *(Adjoint(Ai), Bi) == [-21+2im -1.75+49im -51.25+19.5im; 25.5+56.5im -7-35.5im 22+35.5im; -3+12im -32.25+43im -34.75-2.5im] - @test *(Ai, Adjoint(Bi)) == [-20.25+15.5im -28.75-54.5im 22.25+68.5im; -12.25+13im -15.5+75im -23+27im; 18.25+im 1.5+94.5im -27-54.5im] - @test *(Adjoint(Ai), Adjoint(Bi)) == [1+2im 20.75+9im -44.75+42im; 19.5+17.5im -54-36.5im 51-14.5im; 13+7.5im 11.25+31.5im -43.25-14.5im] + @test *(adjoint(Ai), Bi) == [-21+2im -1.75+49im -51.25+19.5im; 25.5+56.5im -7-35.5im 22+35.5im; -3+12im -32.25+43im -34.75-2.5im] + @test *(Ai, adjoint(Bi)) == [-20.25+15.5im -28.75-54.5im 22.25+68.5im; -12.25+13im -15.5+75im -23+27im; 18.25+im 1.5+94.5im -27-54.5im] + @test *(adjoint(Ai), adjoint(Bi)) == [1+2im 20.75+9im -44.75+42im; 19.5+17.5im -54-36.5im 51-14.5im; 13+7.5im 11.25+31.5im -43.25-14.5im] @test_throws DimensionMismatch [1 2 3; 0 0 0; 0 0 0] * [1 2 3] end @test_throws DimensionMismatch mul!(Matrix{Float64}(uninitialized,4,4), AA, BB) @@ -83,7 +83,7 @@ end BB = [2 -2; 3 -5; -4 7] for A in (copy(AA), view(AA, 1:2, 1:3)), B in (copy(BB), view(BB, 1:3, 1:2)) @test A*B == [-7 9; -4 9] - @test *(Transpose(A), Transpose(B)) == [-6 -11 15; -6 -13 18; -6 -15 21] + @test *(transpose(A), transpose(B)) == [-6 -11 15; -6 -13 18; -6 -15 21] end AA = fill(1, 2, 100) BB = fill(1, 100, 3) @@ -94,23 +94,23 @@ end BB = rand(1:20, 5, 5) .- 10 CC = Matrix{Int}(uninitialized, size(AA, 1), size(BB, 2)) for A in (copy(AA), view(AA, 1:5, 1:5)), B in (copy(BB), view(BB, 1:5, 1:5)), C in (copy(CC), view(CC, 1:5, 1:5)) - @test *(Transpose(A), B) == A'*B - @test *(A, Transpose(B)) == A*B' + @test *(transpose(A), B) == A'*B + @test *(A, transpose(B)) == A*B' # Preallocated @test mul!(C, A, B) == A*B - @test mul!(C, Transpose(A), B) == A'*B - @test mul!(C, A, Transpose(B)) == A*B' - @test mul!(C, Transpose(A), Transpose(B)) == A'*B' - @test Base.LinAlg.mul!(C, Adjoint(A), Transpose(B)) == A'*Transpose(B) + @test mul!(C, transpose(A), B) == A'*B + @test mul!(C, A, transpose(B)) == A*B' + @test mul!(C, transpose(A), transpose(B)) == A'*B' + @test Base.LinAlg.mul!(C, adjoint(A), transpose(B)) == A'*transpose(B) #test DimensionMismatch for generic_matmatmul - @test_throws DimensionMismatch Base.LinAlg.mul!(C, Adjoint(A), Transpose(fill(1,4,4))) - @test_throws DimensionMismatch Base.LinAlg.mul!(C, Adjoint(fill(1,4,4)), Transpose(B)) + @test_throws DimensionMismatch Base.LinAlg.mul!(C, adjoint(A), transpose(fill(1,4,4))) + @test_throws DimensionMismatch Base.LinAlg.mul!(C, adjoint(fill(1,4,4)), transpose(B)) end vv = [1,2] CC = Matrix{Int}(uninitialized, 2, 2) for v in (copy(vv), view(vv, 1:2)), C in (copy(CC), view(CC, 1:2, 1:2)) - @test @inferred(mul!(C, v, Adjoint(v))) == [1 2; 2 4] + @test @inferred(mul!(C, v, adjoint(v))) == [1 2; 2 4] end end @@ -124,12 +124,12 @@ end vv = [1,2,3] CC = Matrix{Int}(uninitialized, 3, 3) for v in (copy(vv), view(vv, 1:3)), C in (copy(CC), view(CC, 1:3, 1:3)) - @test mul!(C, v, Transpose(v)) == v*v' + @test mul!(C, v, transpose(v)) == v*v' end vvf = map(Float64,vv) CC = Matrix{Float64}(uninitialized, 3, 3) for vf in (copy(vvf), view(vvf, 1:3)), C in (copy(CC), view(CC, 1:3, 1:3)) - @test mul!(C, vf, Transpose(vf)) == vf*vf' + @test mul!(C, vf, transpose(vf)) == vf*vf' end end @@ -138,9 +138,9 @@ end BB = rand(Float64,6,6) CC = zeros(Float64,6,6) for A in (copy(AA), view(AA, 1:6, 1:6)), B in (copy(BB), view(BB, 1:6, 1:6)), C in (copy(CC), view(CC, 1:6, 1:6)) - @test Base.LinAlg.mul!(C, Transpose(A), Transpose(B)) == Transpose(A)*Transpose(B) - @test Base.LinAlg.mul!(C, A, Adjoint(B)) == A*Transpose(B) - @test Base.LinAlg.mul!(C, Adjoint(A), B) == Transpose(A)*B + @test Base.LinAlg.mul!(C, transpose(A), transpose(B)) == transpose(A)*transpose(B) + @test Base.LinAlg.mul!(C, A, adjoint(B)) == A*transpose(B) + @test Base.LinAlg.mul!(C, adjoint(A), B) == transpose(A)*B end end @@ -150,13 +150,13 @@ end Asub = view(A, 1:2:5, 1:2:4) b = [1.2,-2.5] @test (Aref*b) == (Asub*b) - @test *(Transpose(Asub), Asub) == *(Transpose(Aref), Aref) - @test *(Asub, Transpose(Asub)) == *(Aref, Transpose(Aref)) + @test *(transpose(Asub), Asub) == *(transpose(Aref), Aref) + @test *(Asub, transpose(Asub)) == *(Aref, transpose(Aref)) Ai = A .+ im Aref = Ai[1:2:end,1:2:end] Asub = view(Ai, 1:2:5, 1:2:4) - @test *(Adjoint(Asub), Asub) == *(Adjoint(Aref), Aref) - @test *(Asub, Adjoint(Asub)) == *(Aref, Adjoint(Aref)) + @test *(adjoint(Asub), Asub) == *(adjoint(Aref), Aref) + @test *(Asub, adjoint(Asub)) == *(Aref, adjoint(Aref)) end @testset "issue #15286" begin @@ -164,33 +164,33 @@ end C = zeros(8, 8) sC = view(C, 1:2:8, 1:2:8) B = reshape(map(Float64,-9:10),5,4) - @test mul!(sC, Transpose(A), A) == A'*A - @test mul!(sC, Transpose(A), B) == A'*B + @test mul!(sC, transpose(A), A) == A'*A + @test mul!(sC, transpose(A), B) == A'*B Aim = A .- im C = zeros(ComplexF64,8,8) sC = view(C, 1:2:8, 1:2:8) B = reshape(map(Float64,-9:10),5,4) .+ im - @test mul!(sC, Adjoint(Aim), Aim) == Aim'*Aim - @test mul!(sC, Adjoint(Aim), B) == Aim'*B + @test mul!(sC, adjoint(Aim), Aim) == Aim'*Aim + @test mul!(sC, adjoint(Aim), B) == Aim'*B end @testset "syrk & herk" begin AA = reshape(1:1503, 501, 3).-750.0 res = Float64[135228751 9979252 -115270247; 9979252 10481254 10983256; -115270247 10983256 137236759] for A in (copy(AA), view(AA, 1:501, 1:3)) - @test *(Transpose(A), A) == res - @test *(Adjoint(A), Transpose(copy(A'))) == res + @test *(transpose(A), A) == res + @test *(adjoint(A), transpose(copy(A'))) == res end cutoff = 501 A = reshape(1:6*cutoff,2*cutoff,3).-(6*cutoff)/2 Asub = view(A, 1:2:2*cutoff, 1:3) Aref = A[1:2:2*cutoff, 1:3] - @test *(Transpose(Asub), Asub) == *(Transpose(Aref), Aref) + @test *(transpose(Asub), Asub) == *(transpose(Aref), Aref) Ai = A .- im Asub = view(Ai, 1:2:2*cutoff, 1:3) Aref = Ai[1:2:2*cutoff, 1:3] - @test *(Adjoint(Asub), Asub) == *(Adjoint(Aref), Aref) + @test *(adjoint(Asub), Asub) == *(adjoint(Aref), Aref) A5x5, A6x5 = Matrix{Float64}.(uninitialized, ((5, 5), (6, 5))) @test_throws DimensionMismatch Base.LinAlg.syrk_wrapper!(A5x5,'N',A6x5) @@ -222,7 +222,7 @@ end @test_throws BoundsError dot(x, 1:4, y, 1:4) @test_throws BoundsError dot(x, 1:3, y, 2:4) @test dot(x, 1:2,y, 1:2) == convert(elty, 12.5) - @test Transpose(x)*y == convert(elty, 29.0) + @test transpose(x)*y == convert(elty, 29.0) @test_throws MethodError dot(rand(elty, 2, 2), randn(elty, 2, 2)) X = convert(Vector{Matrix{elty}},[reshape(1:4, 2, 2), fill(1, 2, 2)]) res = convert(Matrix{elty}, [7.0 13.0; 13.0 27.0]) @@ -277,7 +277,7 @@ end @test_throws DimensionMismatch Base.LinAlg.gemm_wrapper!(I10x10,'N','N', I0x0, I0x0) A = rand(elty,3,3) - @test Base.LinAlg.matmul3x3('T','N',A, Matrix{elty}(I, 3, 3)) == Transpose(A) + @test Base.LinAlg.matmul3x3('T','N',A, Matrix{elty}(I, 3, 3)) == transpose(A) end @testset "#13593, #13488" begin @@ -297,18 +297,21 @@ end import Base: *, adjoint, transpose, Adjoint, Transpose (*)(x::RootInt, y::RootInt) = x.i*y.i adjoint(x::RootInt) = x -Adjoint(x::RootInt) = x transpose(x::RootInt) = x +Adjoint(x::RootInt) = x Transpose(x::RootInt) = x +# TODO once Adjoint/Transpose constructors call adjoint/transpose recursively +# rather than Adjoint/Transpose, the additional definitions should become unnecessary + @test Base.promote_op(*, RootInt, RootInt) === Int @testset "#14293" begin a = [RootInt(3)] C = [0] - mul!(C, a, Transpose(a)) + mul!(C, a, transpose(a)) @test C[1] == 9 a = [RootInt(2),RootInt(10)] - @test a*a' == [4 20; 20 100] + @test a*adjoint(a) == [4 20; 20 100] A = [RootInt(3) RootInt(5)] @test A*a == [56] end diff --git a/test/linalg/qr.jl b/test/linalg/qr.jl index 73dd4d1b32c96..548470baf33ed 100644 --- a/test/linalg/qr.jl +++ b/test/linalg/qr.jl @@ -2,7 +2,7 @@ using Test -using Base.LinAlg: BlasComplex, BlasFloat, BlasReal, QRPivoted, mul!, Adjoint, Transpose +using Base.LinAlg: BlasComplex, BlasFloat, BlasReal, QRPivoted, mul! n = 10 @@ -60,7 +60,7 @@ rectangularQ(Q::LinAlg.AbstractQ) = convert(Array, Q) @test a*(qra\b) ≈ b atol=3000ε @test Array(qra) ≈ a sq = size(q.factors, 2) - @test *(Matrix{eltyb}(I, sq, sq), Adjoint(q)) * squareQ(q) ≈ Matrix(I, sq, sq) atol=5000ε + @test *(Matrix{eltyb}(I, sq, sq), adjoint(q)) * squareQ(q) ≈ Matrix(I, sq, sq) atol=5000ε if eltya != Int @test Matrix{eltyb}(I, a_1, a_1)*q ≈ convert(AbstractMatrix{tab}, q) ac = copy(a) @@ -83,7 +83,7 @@ rectangularQ(Q::LinAlg.AbstractQ) = convert(Array, Q) @test_throws DimensionMismatch q*b[1:n1 + 1] @test_throws DimensionMismatch b[1:n1 + 1]*q' sq = size(q.factors, 2) - @test *(UpperTriangular(Matrix{eltyb}(I, sq, sq)), Adjoint(q))*squareQ(q) ≈ Matrix(I, n1, a_1) atol=5000ε + @test *(UpperTriangular(Matrix{eltyb}(I, sq, sq)), adjoint(q))*squareQ(q) ≈ Matrix(I, n1, a_1) atol=5000ε if eltya != Int @test Matrix{eltyb}(I, a_1, a_1)*q ≈ convert(AbstractMatrix{tab},q) end @@ -102,7 +102,7 @@ rectangularQ(Q::LinAlg.AbstractQ) = convert(Array, Q) @test (UpperTriangular(Matrix{eltya}(I, sq, sq))*q')*squareQ(q) ≈ Matrix(I, n1, n1) @test q*r ≈ (isa(qrpa,QRPivoted) ? a[1:n1,p] : a[1:n1,:]) @test q*r[:,invperm(p)] ≈ a[1:n1,:] - @test q*r*Transpose(qrpa.P) ≈ a[1:n1,:] + @test q*r*transpose(qrpa.P) ≈ a[1:n1,:] @test a[1:n1,:]*(qrpa\b[1:n1]) ≈ b[1:n1] atol=5000ε @test Array(qrpa) ≈ a[1:5,:] @test_throws DimensionMismatch q*b[1:n1+1] @@ -124,7 +124,7 @@ rectangularQ(Q::LinAlg.AbstractQ) = convert(Array, Q) @test_throws DimensionMismatch q*b[1:n1+1] @test_throws DimensionMismatch b[1:n1+1]*q' sq = size(q.factors, 2) - @test *(UpperTriangular(Matrix{eltyb}(I, sq, sq)), Adjoint(q))*squareQ(q) ≈ Matrix(I, n1, a_1) atol=5000ε + @test *(UpperTriangular(Matrix{eltyb}(I, sq, sq)), adjoint(q))*squareQ(q) ≈ Matrix(I, n1, a_1) atol=5000ε if eltya != Int @test Matrix{eltyb}(I, a_1, a_1)*q ≈ convert(AbstractMatrix{tab},q) end @@ -137,18 +137,18 @@ rectangularQ(Q::LinAlg.AbstractQ) = convert(Array, Q) q, r = qrpa.Q, qrpa.R @test mul!(copy(squareQ(q)'), q) ≈ Matrix(I, n, n) @test_throws DimensionMismatch mul!(Matrix{eltya}(I, n+1, n+1),q) - @test mul!(squareQ(q), Adjoint(q)) ≈ Matrix(I, n, n) - @test_throws DimensionMismatch mul!(Matrix{eltya}(I, n+1, n+1), Adjoint(q)) + @test mul!(squareQ(q), adjoint(q)) ≈ Matrix(I, n, n) + @test_throws DimensionMismatch mul!(Matrix{eltya}(I, n+1, n+1), adjoint(q)) @test_throws BoundsError size(q,-1) @test_throws DimensionMismatch Base.LinAlg.mul!(q,zeros(eltya,n1+1)) - @test_throws DimensionMismatch Base.LinAlg.mul!(Adjoint(q), zeros(eltya,n1+1)) + @test_throws DimensionMismatch Base.LinAlg.mul!(adjoint(q), zeros(eltya,n1+1)) qra = qrfact(a[:,1:n1], Val(false)) q, r = qra.Q, qra.R @test mul!(copy(squareQ(q)'), q) ≈ Matrix(I, n, n) @test_throws DimensionMismatch mul!(Matrix{eltya}(I, n+1, n+1),q) - @test mul!(squareQ(q), Adjoint(q)) ≈ Matrix(I, n, n) - @test_throws DimensionMismatch mul!(Matrix{eltya}(I, n+1, n+1),Adjoint(q)) + @test mul!(squareQ(q), adjoint(q)) ≈ Matrix(I, n, n) + @test_throws DimensionMismatch mul!(Matrix{eltya}(I, n+1, n+1),adjoint(q)) @test_throws BoundsError size(q,-1) @test_throws DimensionMismatch q * Matrix{Int8}(I, n+4, n+4) end diff --git a/test/linalg/schur.jl b/test/linalg/schur.jl index be2a4422f6c97..235071019c02f 100644 --- a/test/linalg/schur.jl +++ b/test/linalg/schur.jl @@ -40,10 +40,10 @@ aimg = randn(n,n)/2 @test vecs*sch*vecs' ≈ tril(a) sch, vecs, vals = schur(Hermitian(asym)) @test vecs*sch*vecs' ≈ asym - sch, vecs, vals = schur(Symmetric(a + Transpose(a))) - @test vecs*sch*vecs' ≈ a + Transpose(a) - sch, vecs, vals = schur(Tridiagonal(a + Transpose(a))) - @test vecs*sch*vecs' ≈ Tridiagonal(a + Transpose(a)) + sch, vecs, vals = schur(Symmetric(a + transpose(a))) + @test vecs*sch*vecs' ≈ a + transpose(a) + sch, vecs, vals = schur(Tridiagonal(a + transpose(a))) + @test vecs*sch*vecs' ≈ Tridiagonal(a + transpose(a)) tstring = sprint(show,f.T) zstring = sprint(show,f.Z) diff --git a/test/linalg/special.jl b/test/linalg/special.jl index 751b63c6e1de1..1c50bde7a24d6 100644 --- a/test/linalg/special.jl +++ b/test/linalg/special.jl @@ -2,7 +2,7 @@ using Test -using Base.LinAlg: mul!, Adjoint, Transpose +using Base.LinAlg: mul! n= 10 #Size of matrix to test srand(1) @@ -116,11 +116,11 @@ end atri = typ(a) b = rand(n,n) qrb = qrfact(b,Val(true)) - @test *(atri, Adjoint(qrb.Q)) ≈ Matrix(atri) * qrb.Q' - @test mul!(copy(atri), Adjoint(qrb.Q)) ≈ Matrix(atri) * qrb.Q' + @test *(atri, adjoint(qrb.Q)) ≈ Matrix(atri) * qrb.Q' + @test mul!(copy(atri), adjoint(qrb.Q)) ≈ Matrix(atri) * qrb.Q' qrb = qrfact(b,Val(false)) - @test *(atri, Adjoint(qrb.Q)) ≈ Matrix(atri) * qrb.Q' - @test mul!(copy(atri), Adjoint(qrb.Q)) ≈ Matrix(atri) * qrb.Q' + @test *(atri, adjoint(qrb.Q)) ≈ Matrix(atri) * qrb.Q' + @test mul!(copy(atri), adjoint(qrb.Q)) ≈ Matrix(atri) * qrb.Q' end end diff --git a/test/linalg/symmetric.jl b/test/linalg/symmetric.jl index 0ed1f188932ca..92fa6bde38c30 100644 --- a/test/linalg/symmetric.jl +++ b/test/linalg/symmetric.jl @@ -20,7 +20,7 @@ end A1 = randn(4,4) A3 = A1 * A1' - A4 = A1 + Transpose(A1) + A4 = A1 + transpose(A1) @test exp(A4) ≈ exp(Symmetric(A4)) @test log(A3) ≈ log(Symmetric(A3)) @test log(A3) ≈ log(Hermitian(A3)) @@ -32,10 +32,10 @@ end aimg = randn(n,n)/2 @testset for eltya in (Float32, Float64, ComplexF32, ComplexF64, BigFloat, Int) a = eltya == Int ? rand(1:7, n, n) : convert(Matrix{eltya}, eltya <: Complex ? complex.(areal, aimg) : areal) - asym = Transpose(a) + a # symmetric indefinite + asym = transpose(a) + a # symmetric indefinite aherm = a' + a # Hermitian indefinite apos = a' * a # Hermitian positive definite - aposs = apos + Transpose(apos) # Symmetric positive definite + aposs = apos + transpose(apos) # Symmetric positive definite ε = εa = eps(abs(float(one(eltya)))) x = randn(n) @@ -148,7 +148,7 @@ end @test transpose(H) === H == aherm else @test adjoint(S) == Symmetric(conj(asym)) - @test transpose(H) == Hermitian(copy(Transpose(aherm))) + @test transpose(H) == Hermitian(copy(transpose(aherm))) end end end @@ -218,7 +218,7 @@ end if eltya <: Real # the eigenvalues are only real and ordered for Hermitian matrices d, v = eig(asym) @test asym*v[:,1] ≈ d[1]*v[:,1] - @test v*Diagonal(d)*Transpose(v) ≈ asym + @test v*Diagonal(d)*transpose(v) ≈ asym @test isequal(eigvals(asym[1]), eigvals(asym[1:1,1:1])) @test abs.(eigfact(Symmetric(asym), 1:2).vectors'v[:,1:2]) ≈ Matrix(I, 2, 2) eig(Symmetric(asym), 1:2) # same result, but checks that method works @@ -289,13 +289,13 @@ end @testset "linalg binary ops" begin @testset "mat * vec" begin @test Symmetric(asym)*x+y ≈ asym*x+y - # testing fallbacks for Transpose-vector * Transpose(SymHerm) - xadj = Transpose(x) - @test xadj * Transpose(Symmetric(asym)) ≈ xadj * asym + # testing fallbacks for transpose-vector * transpose(SymHerm) + xadj = transpose(x) + @test xadj * transpose(Symmetric(asym)) ≈ xadj * asym @test x' * Symmetric(asym) ≈ x' * asym @test Hermitian(aherm)*x+y ≈ aherm*x+y - # testing fallbacks for Adjoint-vector * SymHerm' + # testing fallbacks for adjoint-vector * SymHerm' xadj = x' @test x' * Hermitian(aherm) ≈ x' * aherm @test xadj * Hermitian(aherm)' ≈ xadj * aherm @@ -318,13 +318,13 @@ end @test C ≈ a*asym tri_b = UpperTriangular(triu(b)) - @test Array(Transpose(Hermitian(aherm)) * tri_b) ≈ Transpose(aherm) * Array(tri_b) - @test Array(tri_b * Transpose(Hermitian(aherm))) ≈ Array(tri_b) * Transpose(aherm) + @test Array(transpose(Hermitian(aherm)) * tri_b) ≈ transpose(aherm) * Array(tri_b) + @test Array(tri_b * transpose(Hermitian(aherm))) ≈ Array(tri_b) * transpose(aherm) @test Array(Hermitian(aherm)' * tri_b) ≈ aherm' * Array(tri_b) @test Array(tri_b * Hermitian(aherm)') ≈ Array(tri_b) * aherm' - @test Array(Transpose(Symmetric(asym)) * tri_b) ≈ Transpose(asym) * Array(tri_b) - @test Array(tri_b * Transpose(Symmetric(asym))) ≈ Array(tri_b) * Transpose(asym) + @test Array(transpose(Symmetric(asym)) * tri_b) ≈ transpose(asym) * Array(tri_b) + @test Array(tri_b * transpose(Symmetric(asym))) ≈ Array(tri_b) * transpose(asym) @test Array(Symmetric(asym)' * tri_b) ≈ asym' * Array(tri_b) @test Array(tri_b * Symmetric(asym)') ≈ Array(tri_b) * asym' end diff --git a/test/linalg/triangular.jl b/test/linalg/triangular.jl index 5e45b2fc43073..f532fe7468234 100644 --- a/test/linalg/triangular.jl +++ b/test/linalg/triangular.jl @@ -4,7 +4,7 @@ debug = false using Test using Base.LinAlg: BlasFloat, errorbounds, full!, naivesub!, transpose!, UnitUpperTriangular, UnitLowerTriangular, - mul!, rdiv!, Adjoint, Transpose + mul!, rdiv! debug && println("Triangular matrices") @@ -133,17 +133,17 @@ for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFlo # [c]transpose[!] (test views as well, see issue #14317) let vrange = 1:n-1, viewA1 = t1(view(A1.data, vrange, vrange)) # transpose - @test copy(Transpose(A1)) == Transpose(Matrix(A1)) - @test copy(Transpose(viewA1)) == Transpose(Matrix(viewA1)) + @test copy(transpose(A1)) == transpose(Matrix(A1)) + @test copy(transpose(viewA1)) == transpose(Matrix(viewA1)) # adjoint @test copy(A1') == Matrix(A1)' @test copy(viewA1') == Matrix(viewA1)' # transpose! - @test transpose!(copy(A1)) == Transpose(A1) - @test transpose!(t1(view(copy(A1).data, vrange, vrange))) == Transpose(viewA1) + @test transpose!(copy(A1)) == transpose(A1) + @test transpose!(t1(view(copy(A1).data, vrange, vrange))) == transpose(viewA1) # adjoint! - @test adjoint!(copy(A1)) == Adjoint(A1) - @test adjoint!(t1(view(copy(A1).data, vrange, vrange))) == Adjoint(viewA1) + @test adjoint!(copy(A1)) == adjoint(A1) + @test adjoint!(t1(view(copy(A1).data, vrange, vrange))) == adjoint(viewA1) end # diag @@ -166,15 +166,15 @@ for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFlo B = similar(A1) copyto!(B, A1) @test B == A1 - B = similar(copy(Transpose(A1))) - copyto!(B, copy(Transpose(A1))) - @test B == copy(Transpose(A1)) + B = similar(copy(transpose(A1))) + copyto!(B, copy(transpose(A1))) + @test B == copy(transpose(A1)) B = similar(viewA1) copyto!(B, viewA1) @test B == viewA1 - B = similar(copy(Transpose(viewA1))) - copyto!(B, copy(Transpose(viewA1))) - @test B == Transpose(viewA1) + B = similar(copy(transpose(viewA1))) + copyto!(B, copy(transpose(viewA1))) + @test B == transpose(viewA1) end #exp/log @@ -292,22 +292,22 @@ for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFlo # Triangular-Triangualar multiplication and division @test A1*A2 ≈ Matrix(A1)*Matrix(A2) - @test Transpose(A1)*A2 ≈ Transpose(Matrix(A1))*Matrix(A2) + @test transpose(A1)*A2 ≈ transpose(Matrix(A1))*Matrix(A2) @test A1'A2 ≈ Matrix(A1)'Matrix(A2) - @test A1*Transpose(A2) ≈ Matrix(A1)*Transpose(Matrix(A2)) + @test A1*transpose(A2) ≈ Matrix(A1)*transpose(Matrix(A2)) @test A1*A2' ≈ Matrix(A1)*Matrix(A2)' - @test Transpose(A1)*Transpose(A2) ≈ Transpose(Matrix(A1))*Transpose(Matrix(A2)) + @test transpose(A1)*transpose(A2) ≈ transpose(Matrix(A1))*transpose(Matrix(A2)) @test A1'A2' ≈ Matrix(A1)'Matrix(A2)' @test A1/A2 ≈ Matrix(A1)/Matrix(A2) @test A1\A2 ≈ Matrix(A1)\Matrix(A2) offsizeA = Matrix{Float64}(I, n+1, n+1) @test_throws DimensionMismatch offsizeA / A2 - @test_throws DimensionMismatch offsizeA / Transpose(A2) + @test_throws DimensionMismatch offsizeA / transpose(A2) @test_throws DimensionMismatch offsizeA / A2' @test_throws DimensionMismatch offsizeA * A2 - @test_throws DimensionMismatch offsizeA * Transpose(A2) + @test_throws DimensionMismatch offsizeA * transpose(A2) @test_throws DimensionMismatch offsizeA * A2' - @test_throws DimensionMismatch Transpose(A2) * offsizeA + @test_throws DimensionMismatch transpose(A2) * offsizeA @test_throws DimensionMismatch A2' * offsizeA @test_throws DimensionMismatch A2 * offsizeA end @@ -326,69 +326,69 @@ for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFlo # Triangular-dense Matrix/vector multiplication @test A1*B[:,1] ≈ Matrix(A1)*B[:,1] @test A1*B ≈ Matrix(A1)*B - @test Transpose(A1)*B[:,1] ≈ Transpose(Matrix(A1))*B[:,1] + @test transpose(A1)*B[:,1] ≈ transpose(Matrix(A1))*B[:,1] @test A1'B[:,1] ≈ Matrix(A1)'B[:,1] - @test Transpose(A1)*B ≈ Transpose(Matrix(A1))*B + @test transpose(A1)*B ≈ transpose(Matrix(A1))*B @test A1'B ≈ Matrix(A1)'B - @test A1*Transpose(B) ≈ Matrix(A1)*Transpose(B) + @test A1*transpose(B) ≈ Matrix(A1)*transpose(B) @test A1*B' ≈ Matrix(A1)*B' @test B*A1 ≈ B*Matrix(A1) - @test Transpose(B[:,1])*A1 ≈ Transpose(B[:,1])*Matrix(A1) + @test transpose(B[:,1])*A1 ≈ transpose(B[:,1])*Matrix(A1) @test B[:,1]'A1 ≈ B[:,1]'Matrix(A1) - @test Transpose(B)*A1 ≈ Transpose(B)*Matrix(A1) + @test transpose(B)*A1 ≈ transpose(B)*Matrix(A1) @test B'A1 ≈ B'Matrix(A1) - @test B*Transpose(A1) ≈ B*Transpose(Matrix(A1)) + @test B*transpose(A1) ≈ B*transpose(Matrix(A1)) @test B*A1' ≈ B*Matrix(A1)' - @test Transpose(B[:,1])*Transpose(A1) ≈ Transpose(B[:,1])*Transpose(Matrix(A1)) + @test transpose(B[:,1])*transpose(A1) ≈ transpose(B[:,1])*transpose(Matrix(A1)) @test B[:,1]'A1' ≈ B[:,1]'Matrix(A1)' - @test Transpose(B)*Transpose(A1) ≈ Transpose(B)*Transpose(Matrix(A1)) + @test transpose(B)*transpose(A1) ≈ transpose(B)*transpose(Matrix(A1)) @test B'A1' ≈ B'Matrix(A1)' if eltyB == elty1 @test mul!(similar(B),A1,B) ≈ A1*B - @test mul!(similar(B), A1, Adjoint(B)) ≈ A1*B' - @test mul!(similar(B), A1, Transpose(B)) ≈ A1*Transpose(B) - @test mul!(similar(B), Adjoint(A1), B) ≈ A1'*B - @test mul!(similar(B), Transpose(A1), B) ≈ Transpose(A1)*B + @test mul!(similar(B), A1, adjoint(B)) ≈ A1*B' + @test mul!(similar(B), A1, transpose(B)) ≈ A1*transpose(B) + @test mul!(similar(B), adjoint(A1), B) ≈ A1'*B + @test mul!(similar(B), transpose(A1), B) ≈ transpose(A1)*B # test also vector methods B1 = vec(B[1,:]) @test mul!(similar(B1),A1,B1) ≈ A1*B1 - @test mul!(similar(B1), Adjoint(A1), B1) ≈ A1'*B1 - @test mul!(similar(B1), Transpose(A1), B1) ≈ Transpose(A1)*B1 + @test mul!(similar(B1), adjoint(A1), B1) ≈ A1'*B1 + @test mul!(similar(B1), transpose(A1), B1) ≈ transpose(A1)*B1 end #error handling Ann, Bmm, bm = A1, Matrix{eltyB}(uninitialized, n+1, n+1), Vector{eltyB}(uninitialized, n+1) @test_throws DimensionMismatch mul!(Ann, bm) @test_throws DimensionMismatch mul!(Bmm, Ann) - @test_throws DimensionMismatch mul!(Transpose(Ann), bm) - @test_throws DimensionMismatch mul!(Adjoint(Ann), bm) - @test_throws DimensionMismatch mul!(Bmm, Adjoint(Ann)) - @test_throws DimensionMismatch mul!(Bmm, Transpose(Ann)) + @test_throws DimensionMismatch mul!(transpose(Ann), bm) + @test_throws DimensionMismatch mul!(adjoint(Ann), bm) + @test_throws DimensionMismatch mul!(Bmm, adjoint(Ann)) + @test_throws DimensionMismatch mul!(Bmm, transpose(Ann)) # ... and division @test A1\B[:,1] ≈ Matrix(A1)\B[:,1] @test A1\B ≈ Matrix(A1)\B - @test Transpose(A1)\B[:,1] ≈ Transpose(Matrix(A1))\B[:,1] + @test transpose(A1)\B[:,1] ≈ transpose(Matrix(A1))\B[:,1] @test A1'\B[:,1] ≈ Matrix(A1)'\B[:,1] - @test Transpose(A1)\B ≈ Transpose(Matrix(A1))\B + @test transpose(A1)\B ≈ transpose(Matrix(A1))\B @test A1'\B ≈ Matrix(A1)'\B - @test A1\Transpose(B) ≈ Matrix(A1)\Transpose(B) + @test A1\transpose(B) ≈ Matrix(A1)\transpose(B) @test A1\B' ≈ Matrix(A1)\B' - @test Transpose(A1)\Transpose(B) ≈ Transpose(Matrix(A1))\Transpose(B) + @test transpose(A1)\transpose(B) ≈ transpose(Matrix(A1))\transpose(B) @test A1'\B' ≈ Matrix(A1)'\B' Ann, bm = A1, Vector{elty1}(uninitialized,n+1) @test_throws DimensionMismatch Ann\bm @test_throws DimensionMismatch Ann'\bm - @test_throws DimensionMismatch Transpose(Ann)\bm + @test_throws DimensionMismatch transpose(Ann)\bm if t1 == UpperTriangular || t1 == LowerTriangular @test_throws Base.LinAlg.SingularException naivesub!(t1(zeros(elty1,n,n)),fill(eltyB(1),n)) end @test B/A1 ≈ B/Matrix(A1) - @test B/Transpose(A1) ≈ B/Transpose(Matrix(A1)) + @test B/transpose(A1) ≈ B/transpose(Matrix(A1)) @test B/A1' ≈ B/Matrix(A1)' - @test Transpose(B)/A1 ≈ Transpose(B)/Matrix(A1) + @test transpose(B)/A1 ≈ transpose(B)/Matrix(A1) @test B'/A1 ≈ B'/Matrix(A1) - @test Transpose(B)/Transpose(A1) ≈ Transpose(B)/Transpose(Matrix(A1)) + @test transpose(B)/transpose(A1) ≈ transpose(B)/transpose(Matrix(A1)) @test B'/A1' ≈ B'/Matrix(A1)' # Error bounds @@ -498,15 +498,15 @@ let n = 5 @test_throws DimensionMismatch rdiv!(A, UnitLowerTriangular(B)) @test_throws DimensionMismatch rdiv!(A, UnitUpperTriangular(B)) - @test_throws DimensionMismatch rdiv!(A, Adjoint(LowerTriangular(B))) - @test_throws DimensionMismatch rdiv!(A, Adjoint(UpperTriangular(B))) - @test_throws DimensionMismatch rdiv!(A, Adjoint(UnitLowerTriangular(B))) - @test_throws DimensionMismatch rdiv!(A, Adjoint(UnitUpperTriangular(B))) + @test_throws DimensionMismatch rdiv!(A, adjoint(LowerTriangular(B))) + @test_throws DimensionMismatch rdiv!(A, adjoint(UpperTriangular(B))) + @test_throws DimensionMismatch rdiv!(A, adjoint(UnitLowerTriangular(B))) + @test_throws DimensionMismatch rdiv!(A, adjoint(UnitUpperTriangular(B))) - @test_throws DimensionMismatch rdiv!(A, Transpose(LowerTriangular(B))) - @test_throws DimensionMismatch rdiv!(A, Transpose(UpperTriangular(B))) - @test_throws DimensionMismatch rdiv!(A, Transpose(UnitLowerTriangular(B))) - @test_throws DimensionMismatch rdiv!(A, Transpose(UnitUpperTriangular(B))) + @test_throws DimensionMismatch rdiv!(A, transpose(LowerTriangular(B))) + @test_throws DimensionMismatch rdiv!(A, transpose(UpperTriangular(B))) + @test_throws DimensionMismatch rdiv!(A, transpose(UnitLowerTriangular(B))) + @test_throws DimensionMismatch rdiv!(A, transpose(UnitUpperTriangular(B))) end # Test that UpperTriangular(LowerTriangular) throws. See #16201 diff --git a/test/linalg/uniformscaling.jl b/test/linalg/uniformscaling.jl index 7a9f3a1236c16..b163144ab7b99 100644 --- a/test/linalg/uniformscaling.jl +++ b/test/linalg/uniformscaling.jl @@ -76,7 +76,7 @@ let @testset "transpose, conj, inv" begin @test ndims(J) == 2 @test transpose(J) == J - @test J * [1 0; 0 1] == conj(*(Base.LinAlg.Adjoint(J), [1 0; 0 1])) # ctranpose (and A(c)_mul_B) + @test J * [1 0; 0 1] == conj(*(adjoint(J), [1 0; 0 1])) # ctranpose (and A(c)_mul_B) @test I + I === UniformScaling(2) # + @test inv(I) == I @test inv(J) == UniformScaling(inv(λ)) diff --git a/test/perf/micro/perf.jl b/test/perf/micro/perf.jl index 125667ed646ef..c7c921fc8c815 100644 --- a/test/perf/micro/perf.jl +++ b/test/perf/micro/perf.jl @@ -125,8 +125,8 @@ function randmatstat(t) d = randn(n,n) P = [a b c d] Q = [a b; c d] - v[i] = trace((Transpose(P)*P)^4) - w[i] = trace((Transpose(Q)*Q)^4) + v[i] = trace((P'*P)^4) + w[i] = trace((Q'*Q)^4) end return (std(v)/mean(v), std(w)/mean(w)) end diff --git a/test/sparse/sparse.jl b/test/sparse/sparse.jl index c9b9f73898dac..00bc183992f7d 100644 --- a/test/sparse/sparse.jl +++ b/test/sparse/sparse.jl @@ -1,6 +1,6 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license -using Base.LinAlg: mul!, ldiv!, rdiv!, Adjoint, Transpose +using Base.LinAlg: mul!, ldiv!, rdiv! using Base.Printf: @printf @testset "issparse" begin @@ -163,7 +163,7 @@ end am = sprand(1, 20, 0.2) av = squeeze(am, 1) @test ndims(av) == 1 - @test all(Transpose(av) .== am) + @test all(av' .== am) end end @@ -196,73 +196,73 @@ end @test (maximum(abs.(a*b - Array(a)*b)) < 100*eps()) @test (maximum(abs.(mul!(similar(b), a, b) - Array(a)*b)) < 100*eps()) # for compatibility with present matmul API. Should go away eventually. @test (maximum(abs.(mul!(similar(c), a, c) - Array(a)*c)) < 100*eps()) # for compatibility with present matmul API. Should go away eventually. - @test (maximum(abs.(mul!(similar(b), Transpose(a), b) - Transpose(Array(a))*b)) < 100*eps()) # for compatibility with present matmul API. Should go away eventually. - @test (maximum(abs.(mul!(similar(c), Transpose(a), c) - Transpose(Array(a))*c)) < 100*eps()) # for compatibility with present matmul API. Should go away eventually. + @test (maximum(abs.(mul!(similar(b), transpose(a), b) - transpose(Array(a))*b)) < 100*eps()) # for compatibility with present matmul API. Should go away eventually. + @test (maximum(abs.(mul!(similar(c), transpose(a), c) - transpose(Array(a))*c)) < 100*eps()) # for compatibility with present matmul API. Should go away eventually. @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) - @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) + @test (maximum(abs.(transpose(a)*b - transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) @test (maximum(abs.((a'*c + d) - (Array(a)'*c + d))) < 1000*eps()) - @test (maximum(abs.((α*Transpose(a)*c + β*d) - (α*Transpose(Array(a))*c + β*d))) < 1000*eps()) - @test (maximum(abs.((Transpose(a)*c + d) - (Transpose(Array(a))*c + d))) < 1000*eps()) + @test (maximum(abs.((α*transpose(a)*c + β*d) - (α*transpose(Array(a))*c + β*d))) < 1000*eps()) + @test (maximum(abs.((transpose(a)*c + d) - (transpose(Array(a))*c + d))) < 1000*eps()) c = randn(6) + im*randn(6) - @test_throws DimensionMismatch α*Transpose(a)*c + β*c - @test_throws DimensionMismatch α*Transpose(a)*fill(1.,5) + β*c + @test_throws DimensionMismatch α*transpose(a)*c + β*c + @test_throws DimensionMismatch α*transpose(a)*fill(1.,5) + β*c a = I + 0.1*sprandn(5, 5, 0.2) + 0.1*im*sprandn(5, 5, 0.2) b = randn(5,3) @test (maximum(abs.(a*b - Array(a)*b)) < 100*eps()) @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) - @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) + @test (maximum(abs.(transpose(a)*b - transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) a = I + tril(0.1*sprandn(5, 5, 0.2)) b = randn(5,3) + im*randn(5,3) @test (maximum(abs.(a*b - Array(a)*b)) < 100*eps()) @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) - @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) + @test (maximum(abs.(transpose(a)*b - transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) a = I + tril(0.1*sprandn(5, 5, 0.2) + 0.1*im*sprandn(5, 5, 0.2)) b = randn(5,3) @test (maximum(abs.(a*b - Array(a)*b)) < 100*eps()) @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) - @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) + @test (maximum(abs.(transpose(a)*b - transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) a = I + triu(0.1*sprandn(5, 5, 0.2)) b = randn(5,3) + im*randn(5,3) @test (maximum(abs.(a*b - Array(a)*b)) < 100*eps()) @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) - @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) + @test (maximum(abs.(transpose(a)*b - transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) a = I + triu(0.1*sprandn(5, 5, 0.2) + 0.1*im*sprandn(5, 5, 0.2)) b = randn(5,3) @test (maximum(abs.(a*b - Array(a)*b)) < 100*eps()) @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) - @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) + @test (maximum(abs.(transpose(a)*b - transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) a = I + triu(0.1*sprandn(5, 5, 0.2)) b = randn(5,3) + im*randn(5,3) @test (maximum(abs.(a*b - Array(a)*b)) < 100*eps()) @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) - @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) + @test (maximum(abs.(transpose(a)*b - transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) # UpperTriangular/LowerTriangular solve a = UpperTriangular(I + triu(0.1*sprandn(5, 5, 0.2))) @@ -282,18 +282,18 @@ end b = randn(5,3) @test (maximum(abs.(a*b - Array(a)*b)) < 100*eps()) @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) - @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) + @test (maximum(abs.(transpose(a)*b - transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) b = randn(5,3) + im*randn(5,3) @test (maximum(abs.(a*b - Array(a)*b)) < 100*eps()) @test (maximum(abs.(a'b - Array(a)'b)) < 100*eps()) - @test (maximum(abs.(Transpose(a)*b - Transpose(Array(a))*b)) < 100*eps()) + @test (maximum(abs.(transpose(a)*b - transpose(Array(a))*b)) < 100*eps()) @test (maximum(abs.(a\b - Array(a)\b)) < 1000*eps()) @test (maximum(abs.(a'\b - Array(a')\b)) < 1000*eps()) - @test (maximum(abs.(Transpose(a)\b - Array(Transpose(a))\b)) < 1000*eps()) + @test (maximum(abs.(transpose(a)\b - Array(transpose(a))\b)) < 1000*eps()) end end end @@ -341,11 +341,11 @@ dA = Array(sA) @testset "inverse scale!" begin bi = inv.(b) - dAt = copy(Transpose(dA)) - sAt = copy(Transpose(sA)) + dAt = copy(transpose(dA)) + sAt = copy(transpose(sA)) @test scale!(copy(dAt), bi) ≈ rdiv!(copy(sAt), Diagonal(b)) - @test scale!(copy(dAt), bi) ≈ rdiv!(copy(sAt), Transpose(Diagonal(b))) - @test scale!(copy(dAt), conj(bi)) ≈ rdiv!(copy(sAt), Adjoint(Diagonal(b))) + @test scale!(copy(dAt), bi) ≈ rdiv!(copy(sAt), transpose(Diagonal(b))) + @test scale!(copy(dAt), conj(bi)) ≈ rdiv!(copy(sAt), adjoint(Diagonal(b))) @test_throws DimensionMismatch rdiv!(copy(sAt), Diagonal(fill(1., length(b)+1))) @test_throws LinAlg.SingularException rdiv!(copy(sAt), Diagonal(zeros(length(b)))) end @@ -403,7 +403,7 @@ end (m, n) = (smalldim, smalldim) A = sprand(m, n, nzprob) X = similar(A) - C = copy(Transpose(A)) + C = copy(transpose(A)) p = randperm(m) q = randperm(n) @testset "common error checking of [c]transpose! methods (ftranspose!)" begin @@ -440,10 +440,10 @@ end @testset "overall functionality of [c]transpose[!] and permute[!]" begin for (m, n) in ((smalldim, smalldim), (smalldim, largedim), (largedim, smalldim)) A = sprand(m, n, nzprob) - At = copy(Transpose(A)) + At = copy(transpose(A)) # transpose[!] - fullAt = Array(Transpose(A)) - @test copy(Transpose(A)) == fullAt + fullAt = Array(transpose(A)) + @test copy(transpose(A)) == fullAt @test transpose!(similar(At), A) == fullAt # adjoint[!] C = A + im*A/2 @@ -466,8 +466,8 @@ end @testset "transpose of SubArrays" begin A = view(sprandn(10, 10, 0.3), 1:4, 1:4) - @test copy(Transpose(Array(A))) == Array(Transpose(A)) - @test copy(Adjoint(Array(A))) == Array(Adjoint(A)) + @test copy(transpose(Array(A))) == Array(transpose(A)) + @test copy(adjoint(Array(A))) == Array(adjoint(A)) end @testset "exp" begin @@ -1752,10 +1752,10 @@ end A = A*A' @test !Base.USE_GPL_LIBS || abs(det(factorize(Hermitian(A)))) ≈ abs(det(factorize(Array(A)))) A = sparse(Diagonal(rand(5))) + sprandn(5, 5, 0.2) - A = A + copy(Transpose(A)) + A = A + copy(transpose(A)) @test !Base.USE_GPL_LIBS || abs(det(factorize(Symmetric(A)))) ≈ abs(det(factorize(Array(A)))) A = sparse(Diagonal(rand(5))) + sprandn(5, 5, 0.2) - A = A*Transpose(A) + A = A*transpose(A) @test !Base.USE_GPL_LIBS || abs(det(factorize(Symmetric(A)))) ≈ abs(det(factorize(Array(A)))) @test factorize(triu(A)) == triu(A) @test isa(factorize(triu(A)), UpperTriangular{Float64, SparseMatrixCSC{Float64, Int}}) @@ -1846,7 +1846,7 @@ end m = 5 intmat = fill(1, m, m) ltintmat = LowerTriangular(rand(1:5, m, m)) - @test \(Transpose(ltintmat), sparse(intmat)) ≈ \(Transpose(ltintmat), intmat) + @test \(transpose(ltintmat), sparse(intmat)) ≈ \(transpose(ltintmat), intmat) end # Test temporary fix for issue #16548 in PR #16979. Somewhat brittle. Expect to remove with `\` revisions. @@ -1916,7 +1916,7 @@ end end @testset "issue #14398" begin - @test collect(Transpose((view(sparse(I, 10, 10), 1:5, 1:5)))) ≈ Matrix(I, 5, 5) + @test collect(view(sparse(I, 10, 10), 1:5, 1:5)') ≈ Matrix(I, 5, 5) end @testset "dropstored issue #20513" begin diff --git a/test/sparse/sparsevector.jl b/test/sparse/sparsevector.jl index 194ebd8a7516b..721bcf6f6f54d 100644 --- a/test/sparse/sparsevector.jl +++ b/test/sparse/sparsevector.jl @@ -1,6 +1,6 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license -using Base.LinAlg: mul!, ldiv!, Adjoint, Transpose +using Base.LinAlg: mul!, ldiv! ### Data @@ -385,7 +385,7 @@ end @test float(af) == af @test isa(af, SparseVector{Float64,Int}) @test exact_equal(af, SparseVector(8, [2, 5, 6], [12., 35., 72.])) - @test sparsevec(Transpose(Transpose(af))) == af + @test sparsevec(transpose(transpose(af))) == af # complex acp = complex(af) @@ -830,12 +830,12 @@ end for α in [0.0, 1.0, 2.0], β in [0.0, 0.5, 1.0] y = rand(9) rr = α*A'xf + β*y - @test mul!(α, Transpose(A), x, β, y) === y + @test mul!(α, transpose(A), x, β, y) === y @test y ≈ rr end - y = *(Transpose(A), x) + y = *(transpose(A), x) @test isa(y, Vector{Float64}) - @test y ≈ *(Transpose(A), xf) + @test y ≈ *(transpose(A), xf) end end @testset "sparse A * sparse x -> dense y" begin @@ -859,12 +859,12 @@ end for α in [0.0, 1.0, 2.0], β in [0.0, 0.5, 1.0] y = rand(9) rr = α*Af'xf + β*y - @test mul!(α, Transpose(A), x, β, y) === y + @test mul!(α, transpose(A), x, β, y) === y @test y ≈ rr end y = SparseArrays.densemv(A, x; trans='T') @test isa(y, Vector{Float64}) - @test y ≈ *(Transpose(Af), xf) + @test y ≈ *(transpose(Af), xf) end let A = complex.(sprandn(7, 8, 0.5), sprandn(7, 8, 0.5)), @@ -874,7 +874,7 @@ end xf = Array(x) x2f = Array(x2) @test SparseArrays.densemv(A, x; trans='N') ≈ Af * xf - @test SparseArrays.densemv(A, x2; trans='T') ≈ Transpose(Af) * x2f + @test SparseArrays.densemv(A, x2; trans='T') ≈ transpose(Af) * x2f @test SparseArrays.densemv(A, x2; trans='C') ≈ Af'x2f @test_throws ArgumentError SparseArrays.densemv(A, x; trans='D') end @@ -890,7 +890,7 @@ end @test all(nonzeros(y) .!= 0.0) @test Array(y) ≈ Af * xf - y = *(Transpose(A), x2) + y = *(transpose(A), x2) @test isa(y, SparseVector{Float64,Int}) @test all(nonzeros(y) .!= 0.0) @test Array(y) ≈ Af'x2f @@ -907,11 +907,11 @@ end @test isa(y, SparseVector{ComplexF64,Int}) @test Array(y) ≈ Af * xf - y = *(Transpose(A), x2) + y = *(transpose(A), x2) @test isa(y, SparseVector{ComplexF64,Int}) - @test Array(y) ≈ Transpose(Af) * x2f + @test Array(y) ≈ transpose(Af) * x2f - y = *(Adjoint(A), x2) + y = *(adjoint(A), x2) @test isa(y, SparseVector{ComplexF64,Int}) @test Array(y) ≈ Af'x2f end @@ -958,23 +958,23 @@ end # test out-of-place left-division methods for mat in (trimats..., unittrimats...) @test \(mat, spvec) ≈ \(mat, fspvec) - @test \(Adjoint(mat), spvec) ≈ \(Adjoint(mat), fspvec) - @test \(Transpose(mat), spvec) ≈ \(Transpose(mat), fspvec) + @test \(adjoint(mat), spvec) ≈ \(adjoint(mat), fspvec) + @test \(transpose(mat), spvec) ≈ \(transpose(mat), fspvec) end # test in-place left-division methods not involving quotients if eltypevec == typeof(zero(eltypemat)*zero(eltypevec) + zero(eltypemat)*zero(eltypevec)) for mat in unittrimats @test ldiv!(mat, copy(spvec)) ≈ ldiv!(mat, copy(fspvec)) - @test ldiv!(Adjoint(mat), copy(spvec)) ≈ ldiv!(Adjoint(mat), copy(fspvec)) - @test ldiv!(Transpose(mat), copy(spvec)) ≈ ldiv!(Transpose(mat), copy(fspvec)) + @test ldiv!(adjoint(mat), copy(spvec)) ≈ ldiv!(adjoint(mat), copy(fspvec)) + @test ldiv!(transpose(mat), copy(spvec)) ≈ ldiv!(transpose(mat), copy(fspvec)) end end # test in-place left-division methods involving quotients if eltypevec == typeof((zero(eltypemat)*zero(eltypevec) + zero(eltypemat)*zero(eltypevec))/one(eltypemat)) for mat in trimats @test ldiv!(mat, copy(spvec)) ≈ ldiv!(mat, copy(fspvec)) - @test ldiv!(Adjoint(mat), copy(spvec)) ≈ ldiv!(Adjoint(mat), copy(fspvec)) - @test ldiv!(Transpose(mat), copy(spvec)) ≈ ldiv!(Transpose(mat), copy(fspvec)) + @test ldiv!(adjoint(mat), copy(spvec)) ≈ ldiv!(adjoint(mat), copy(fspvec)) + @test ldiv!(transpose(mat), copy(spvec)) ≈ ldiv!(transpose(mat), copy(fspvec)) end end end @@ -995,11 +995,11 @@ end for mat in (utmat, ltmat, uutmat, ultmat) @test isequal(\(mat, zerospvec), zerodvec) - @test isequal(\(Adjoint(mat), zerospvec), zerodvec) - @test isequal(\(Transpose(mat), zerospvec), zerodvec) + @test isequal(\(adjoint(mat), zerospvec), zerodvec) + @test isequal(\(transpose(mat), zerospvec), zerodvec) @test isequal(ldiv!(mat, copy(zerospvec)), zerospvec) - @test isequal(ldiv!(Adjoint(mat), copy(zerospvec)), zerospvec) - @test isequal(ldiv!(Transpose(mat), copy(zerospvec)), zerospvec) + @test isequal(ldiv!(adjoint(mat), copy(zerospvec)), zerospvec) + @test isequal(ldiv!(transpose(mat), copy(zerospvec)), zerospvec) end end end From dd9cef8e3e9570c43cdc18ed01d70028ed1f382f Mon Sep 17 00:00:00 2001 From: Sacha Verweij Date: Wed, 3 Jan 2018 16:48:08 -0800 Subject: [PATCH 3/7] Replace Adjoint/Transpose with adjoint/transpose throughout base/. --- base/linalg/bidiag.jl | 18 ++--- base/linalg/blas.jl | 6 +- base/linalg/bunchkaufman.jl | 8 +- base/linalg/cholesky.jl | 12 +-- base/linalg/dense.jl | 8 +- base/linalg/diagonal.jl | 4 +- base/linalg/factorization.jl | 14 ++-- base/linalg/generic.jl | 4 +- base/linalg/givens.jl | 4 +- base/linalg/hessenberg.jl | 4 +- base/linalg/lapack.jl | 28 +++---- base/linalg/lq.jl | 20 ++--- base/linalg/lu.jl | 8 +- base/linalg/matmul.jl | 70 ++++++++-------- base/linalg/qr.jl | 24 +++--- base/linalg/rowvector.jl | 2 +- base/linalg/special.jl | 4 +- base/linalg/symmetric.jl | 18 ++--- base/linalg/triangular.jl | 152 +++++++++++++++++------------------ base/sparse/linalg.jl | 25 +++--- base/sparse/sparsevector.jl | 15 ++-- base/statistics.jl | 6 +- 22 files changed, 226 insertions(+), 228 deletions(-) diff --git a/base/linalg/bidiag.jl b/base/linalg/bidiag.jl index 5b95b18233b77..34860fefde098 100644 --- a/base/linalg/bidiag.jl +++ b/base/linalg/bidiag.jl @@ -500,10 +500,10 @@ const SpecialMatrix = Union{Bidiagonal,SymTridiagonal,Tridiagonal} #Generic multiplication *(A::Bidiagonal{T}, B::AbstractVector{T}) where {T} = *(Array(A), B) -*(adjA::Adjoint{<:Any,<:Bidiagonal{T}}, B::AbstractVector{T}) where {T} = *(Adjoint(Array(adjA.parent)), B) -*(A::Bidiagonal{T}, adjB::Adjoint{<:Any,<:AbstractVector{T}}) where {T} = *(Array(A), Adjoint(adjB.parent)) +*(adjA::Adjoint{<:Any,<:Bidiagonal{T}}, B::AbstractVector{T}) where {T} = *(adjoint(Array(adjA.parent)), B) +*(A::Bidiagonal{T}, adjB::Adjoint{<:Any,<:AbstractVector{T}}) where {T} = *(Array(A), adjoint(adjB.parent)) /(A::Bidiagonal{T}, B::AbstractVector{T}) where {T} = /(Array(A), B) -/(A::Bidiagonal{T}, adjB::Adjoint{<:Any,<:AbstractVector{T}}) where {T} = /(Array(A), Adjoint(adjB.parent)) +/(A::Bidiagonal{T}, adjB::Adjoint{<:Any,<:AbstractVector{T}}) where {T} = /(Array(A), adjoint(adjB.parent)) #Linear solvers ldiv!(A::Union{Bidiagonal, AbstractTriangular}, b::AbstractVector) = naivesub!(A, b) @@ -533,7 +533,7 @@ function ldiv!(adjA::Adjoint{<:Any,<:Union{Bidiagonal,AbstractTriangular}}, B::A end for i = 1:size(B,2) copyto!(tmp, 1, B, (i - 1)*n + 1, n) - ldiv!(Adjoint(A), tmp) + ldiv!(adjoint(A), tmp) copyto!(B, (i - 1)*n + 1, tmp, 1, n) # Modify this when array view are implemented. end B @@ -548,7 +548,7 @@ function ldiv!(transA::Transpose{<:Any,<:Union{Bidiagonal,AbstractTriangular}}, end for i = 1:size(B,2) copyto!(tmp, 1, B, (i - 1)*n + 1, n) - ldiv!(Transpose(A), tmp) + ldiv!(transpose(A), tmp) copyto!(B, (i - 1)*n + 1, tmp, 1, n) # Modify this when array view are implemented. end B @@ -586,16 +586,16 @@ function \(transA::Transpose{<:Number,<:Bidiagonal{<:Number}}, B::AbstractVecOrM A = transA.parent TA, TB = eltype(A), eltype(B) TAB = typeof((zero(TA)*zero(TB) + zero(TA)*zero(TB))/one(TA)) - ldiv!(Transpose(convert(AbstractArray{TAB}, A)), copy_oftype(B, TAB)) + ldiv!(transpose(convert(AbstractArray{TAB}, A)), copy_oftype(B, TAB)) end -\(transA::Transpose{<:Any,<:Bidiagonal}, B::AbstractVecOrMat) = ldiv!(Transpose(transA.parent), copy(B)) +\(transA::Transpose{<:Any,<:Bidiagonal}, B::AbstractVecOrMat) = ldiv!(transpose(transA.parent), copy(B)) function \(adjA::Adjoint{<:Number,<:Bidiagonal{<:Number}}, B::AbstractVecOrMat{<:Number}) A = adjA.parent TA, TB = eltype(A), eltype(B) TAB = typeof((zero(TA)*zero(TB) + zero(TA)*zero(TB))/one(TA)) - ldiv!(Adjoint(convert(AbstractArray{TAB}, A)), copy_oftype(B, TAB)) + ldiv!(adjoint(convert(AbstractArray{TAB}, A)), copy_oftype(B, TAB)) end -\(adjA::Adjoint{<:Any,<:Bidiagonal}, B::AbstractVecOrMat) = ldiv!(Adjoint(adjA.parent), copy(B)) +\(adjA::Adjoint{<:Any,<:Bidiagonal}, B::AbstractVecOrMat) = ldiv!(adjoint(adjA.parent), copy(B)) factorize(A::Bidiagonal) = A diff --git a/base/linalg/blas.jl b/base/linalg/blas.jl index 02faac2e8b362..4c894da337b13 100644 --- a/base/linalg/blas.jl +++ b/base/linalg/blas.jl @@ -1000,7 +1000,7 @@ end """ syr!(uplo, alpha, x, A) -Rank-1 update of the symmetric matrix `A` with vector `x` as `alpha*x*Transpose(x) + A`. +Rank-1 update of the symmetric matrix `A` with vector `x` as `alpha*x*transpose(x) + A`. [`uplo`](@ref stdlib-blas-uplo) controls which triangle of `A` is updated. Returns `A`. """ function syr! end @@ -1243,7 +1243,7 @@ end """ syrk!(uplo, trans, alpha, A, beta, C) -Rank-k update of the symmetric matrix `C` as `alpha*A*Transpose(A) + beta*C` or `alpha*Transpose(A)*A + +Rank-k update of the symmetric matrix `C` as `alpha*A*transpose(A) + beta*C` or `alpha*transpose(A)*A + beta*C` according to [`trans`](@ref stdlib-blas-trans). Only the [`uplo`](@ref stdlib-blas-uplo) triangle of `C` is used. Returns `C`. """ @@ -1254,7 +1254,7 @@ function syrk! end Returns either the upper triangle or the lower triangle of `A`, according to [`uplo`](@ref stdlib-blas-uplo), -of `alpha*A*Transpose(A)` or `alpha*Transpose(A)*A`, +of `alpha*A*transpose(A)` or `alpha*transpose(A)*A`, according to [`trans`](@ref stdlib-blas-trans). """ function syrk end diff --git a/base/linalg/bunchkaufman.jl b/base/linalg/bunchkaufman.jl index e42d29f1b6c9b..fc36a1e888c25 100644 --- a/base/linalg/bunchkaufman.jl +++ b/base/linalg/bunchkaufman.jl @@ -43,7 +43,7 @@ end """ bkfact(A, rook::Bool=false) -> BunchKaufman -Compute the Bunch-Kaufman [^Bunch1977] factorization of a symmetric or Hermitian matrix `A` as ``P'*U*D*U'*P`` or ``P'*L*D*L'*P``, depending on which triangle is stored in `A`, and return a `BunchKaufman` object. Note that if `A` is complex symmetric then `U'` and `L'` denote the unconjugated transposes, i.e. `Transpose(U)` and `Transpose(L)`. +Compute the Bunch-Kaufman [^Bunch1977] factorization of a symmetric or Hermitian matrix `A` as ``P'*U*D*U'*P`` or ``P'*L*D*L'*P``, depending on which triangle is stored in `A`, and return a `BunchKaufman` object. Note that if `A` is complex symmetric then `U'` and `L'` denote the unconjugated transposes, i.e. `transpose(U)` and `transpose(L)`. If `rook` is `true`, rook pivoting is used. If `rook` is false, rook pivoting is not used. @@ -115,7 +115,7 @@ end getproperty(B::BunchKaufman, d::Symbol) Extract the factors of the Bunch-Kaufman factorization `B`. The factorization can take the -two forms `P'*L*D*L'*P` or `P'*U*D*U'*P` (or `L*D*Transpose(L)` in the complex symmetric case) +two forms `P'*L*D*L'*P` or `P'*U*D*U'*P` (or `L*D*transpose(L)` in the complex symmetric case) where `P` is a (symmetric) permutation matrix, `L` is a `UnitLowerTriangular` matrix, `U` is a `UnitUpperTriangular`, and `D` is a block diagonal symmetric or Hermitian matrix with 1x1 or 2x2 blocks. The argument `d` can be @@ -191,13 +191,13 @@ function getproperty(B::BunchKaufman{T}, d::Symbol) where {T<:BlasFloat} if getfield(B, :uplo) == 'L' return UnitLowerTriangular(LUD) else - throw(ArgumentError("factorization is U*D*Transpose(U) but you requested L")) + throw(ArgumentError("factorization is U*D*transpose(U) but you requested L")) end else # :U if B.uplo == 'U' return UnitUpperTriangular(LUD) else - throw(ArgumentError("factorization is L*D*Transpose(L) but you requested U")) + throw(ArgumentError("factorization is L*D*transpose(L) but you requested U")) end end else diff --git a/base/linalg/cholesky.jl b/base/linalg/cholesky.jl index 945889b108d04..6ed5cdf6b2fc4 100644 --- a/base/linalg/cholesky.jl +++ b/base/linalg/cholesky.jl @@ -437,9 +437,9 @@ ldiv!(C::Cholesky{T,<:AbstractMatrix}, B::StridedVecOrMat{T}) where {T<:BlasFloa function ldiv!(C::Cholesky{<:Any,<:AbstractMatrix}, B::StridedVecOrMat) if C.uplo == 'L' - return ldiv!(Adjoint(LowerTriangular(C.factors)), ldiv!(LowerTriangular(C.factors), B)) + return ldiv!(adjoint(LowerTriangular(C.factors)), ldiv!(LowerTriangular(C.factors), B)) else - return ldiv!(UpperTriangular(C.factors), ldiv!(Adjoint(UpperTriangular(C.factors)), B)) + return ldiv!(UpperTriangular(C.factors), ldiv!(adjoint(UpperTriangular(C.factors)), B)) end end @@ -462,21 +462,21 @@ end function ldiv!(C::CholeskyPivoted, B::StridedVector) if C.uplo == 'L' - ldiv!(Adjoint(LowerTriangular(C.factors)), + ldiv!(adjoint(LowerTriangular(C.factors)), ldiv!(LowerTriangular(C.factors), B[C.piv]))[invperm(C.piv)] else ldiv!(UpperTriangular(C.factors), - ldiv!(Adjoint(UpperTriangular(C.factors)), B[C.piv]))[invperm(C.piv)] + ldiv!(adjoint(UpperTriangular(C.factors)), B[C.piv]))[invperm(C.piv)] end end function ldiv!(C::CholeskyPivoted, B::StridedMatrix) if C.uplo == 'L' - ldiv!(Adjoint(LowerTriangular(C.factors)), + ldiv!(adjoint(LowerTriangular(C.factors)), ldiv!(LowerTriangular(C.factors), B[C.piv,:]))[invperm(C.piv),:] else ldiv!(UpperTriangular(C.factors), - ldiv!(Adjoint(UpperTriangular(C.factors)), B[C.piv,:]))[invperm(C.piv),:] + ldiv!(adjoint(UpperTriangular(C.factors)), B[C.piv,:]))[invperm(C.piv),:] end end diff --git a/base/linalg/dense.jl b/base/linalg/dense.jl index 7f9ef51f1f0d0..74e5494781034 100644 --- a/base/linalg/dense.jl +++ b/base/linalg/dense.jl @@ -1402,9 +1402,9 @@ function sylvester(A::StridedMatrix{T},B::StridedMatrix{T},C::StridedMatrix{T}) RA, QA = schur(A) RB, QB = schur(B) - D = -(Adjoint(QA) * (C*QB)) + D = -(adjoint(QA) * (C*QB)) Y, scale = LAPACK.trsyl!('N','N', RA, RB, D) - scale!(QA*(Y * Adjoint(QB)), inv(scale)) + scale!(QA*(Y * adjoint(QB)), inv(scale)) end sylvester(A::StridedMatrix{T}, B::StridedMatrix{T}, C::StridedMatrix{T}) where {T<:Integer} = sylvester(float(A), float(B), float(C)) @@ -1445,9 +1445,9 @@ julia> A*X + X*A' + B function lyap(A::StridedMatrix{T}, C::StridedMatrix{T}) where {T<:BlasFloat} R, Q = schur(A) - D = -(Adjoint(Q) * (C*Q)) + D = -(adjoint(Q) * (C*Q)) Y, scale = LAPACK.trsyl!('N', T <: Complex ? 'C' : 'T', R, R, D) - scale!(Q*(Y * Adjoint(Q)), inv(scale)) + scale!(Q*(Y * adjoint(Q)), inv(scale)) end lyap(A::StridedMatrix{T}, C::StridedMatrix{T}) where {T<:Integer} = lyap(float(A), float(C)) lyap(a::T, c::T) where {T<:Number} = -c/(2a) diff --git a/base/linalg/diagonal.jl b/base/linalg/diagonal.jl index c9538ebad2ee2..c33b00076f7d1 100644 --- a/base/linalg/diagonal.jl +++ b/base/linalg/diagonal.jl @@ -208,7 +208,7 @@ end *(D::Diagonal, B::Adjoint{<:Any,<:Diagonal}) = Diagonal(D.diag .* Adjoint.(B.parent.diag)) *(D::Diagonal, B::Adjoint{<:Any,<:AbstractTriangular}) = mul!(D, collect(B)) -*(D::Diagonal, adjQ::Adjoint{<:Any,<:Union{QRCompactWYQ,QRPackedQ}}) = (Q = adjQ.parent; mul!(Array(D), Adjoint(Q))) +*(D::Diagonal, adjQ::Adjoint{<:Any,<:Union{QRCompactWYQ,QRPackedQ}}) = (Q = adjQ.parent; mul!(Array(D), adjoint(Q))) function *(D::Diagonal, adjA::Adjoint{<:Any,<:AbstractMatrix}) A = adjA.parent Ac = similar(A, promote_op(*, eltype(A), eltype(D.diag)), (size(A, 2), size(A, 1))) @@ -346,7 +346,7 @@ rdiv!(A::AbstractMatrix{T}, transD::Transpose{<:Any,<:Diagonal{T}}) where {T} = (\)(F::Factorization, D::Diagonal) = ldiv!(F, Matrix{typeof(oneunit(eltype(D))/oneunit(eltype(F)))}(D)) \(adjF::Adjoint{<:Any,<:Factorization}, D::Diagonal) = - (F = adjF.parent; ldiv!(Adjoint(F), Matrix{typeof(oneunit(eltype(D))/oneunit(eltype(F)))}(D))) + (F = adjF.parent; ldiv!(adjoint(F), Matrix{typeof(oneunit(eltype(D))/oneunit(eltype(F)))}(D))) conj(D::Diagonal) = Diagonal(conj(D.diag)) transpose(D::Diagonal{<:Number}) = D diff --git a/base/linalg/factorization.jl b/base/linalg/factorization.jl index c7806e5edd582..13fe9d8201da2 100644 --- a/base/linalg/factorization.jl +++ b/base/linalg/factorization.jl @@ -61,9 +61,9 @@ Base.isequal(F::T, G::T) where {T<:Factorization} = all(f -> isequal(getfield(F, # With a real lhs and complex rhs with the same precision, we can reinterpret # the complex rhs as a real rhs with twice the number of columns function (\)(F::Factorization{T}, B::VecOrMat{Complex{T}}) where T<:BlasReal - c2r = reshape(copy(Transpose(reinterpret(T, reshape(B, (1, length(B)))))), size(B, 1), 2*size(B, 2)) + c2r = reshape(copy(transpose(reinterpret(T, reshape(B, (1, length(B)))))), size(B, 1), 2*size(B, 2)) x = ldiv!(F, c2r) - return reshape(copy(reinterpret(Complex{T}, copy(Transpose(reshape(x, div(length(x), 2), 2))))), _ret_size(F, B)) + return reshape(copy(reinterpret(Complex{T}, copy(transpose(reshape(x, div(length(x), 2), 2))))), _ret_size(F, B)) end function \(F::Factorization, B::AbstractVecOrMat) @@ -77,16 +77,16 @@ function \(adjF::Adjoint{<:Any,<:Factorization}, B::AbstractVecOrMat) TFB = typeof(oneunit(eltype(B)) / oneunit(eltype(F))) BB = similar(B, TFB, size(B)) copyto!(BB, B) - ldiv!(Adjoint(F), BB) + ldiv!(adjoint(F), BB) end # support the same 3-arg idiom as in our other in-place A_*_B functions: ldiv!(Y::AbstractVecOrMat, A::Factorization, B::AbstractVecOrMat) = ldiv!(A, copyto!(Y, B)) ldiv!(Y::AbstractVecOrMat, adjA::Adjoint{<:Any,<:Factorization}, B::AbstractVecOrMat) = - (A = adjA.parent; ldiv!(Adjoint(A), copyto!(Y, B))) + (A = adjA.parent; ldiv!(adjoint(A), copyto!(Y, B))) ldiv!(Y::AbstractVecOrMat, transA::Transpose{<:Any,<:Factorization}, B::AbstractVecOrMat) = - (A = transA.parent; ldiv!(Transpose(A), copyto!(Y, B))) + (A = transA.parent; ldiv!(transpose(A), copyto!(Y, B))) # fallback methods for transposed solves -\(F::Transpose{<:Any,<:Factorization{<:Real}}, B::AbstractVecOrMat) = Adjoint(F.parent) \ B -\(F::Transpose{<:Any,<:Factorization}, B::AbstractVecOrMat) = conj.(Adjoint(F.parent) \ conj.(B)) \ No newline at end of file +\(F::Transpose{<:Any,<:Factorization{<:Real}}, B::AbstractVecOrMat) = adjoint(F.parent) \ B +\(F::Transpose{<:Any,<:Factorization}, B::AbstractVecOrMat) = conj.(adjoint(F.parent) \ conj.(B)) \ No newline at end of file diff --git a/base/linalg/generic.jl b/base/linalg/generic.jl index e59be0a2e0780..6b4f7aff6c91c 100644 --- a/base/linalg/generic.jl +++ b/base/linalg/generic.jl @@ -947,7 +947,7 @@ function issymmetric(A::AbstractMatrix) return false end for i = first(indsn):last(indsn), j = (i):last(indsn) - if A[i,j] != Transpose(A[j,i]) + if A[i,j] != transpose(A[j,i]) return false end end @@ -986,7 +986,7 @@ function ishermitian(A::AbstractMatrix) return false end for i = indsn, j = i:last(indsn) - if A[i,j] != Adjoint(A[j,i]) + if A[i,j] != adjoint(A[j,i]) return false end end diff --git a/base/linalg/givens.jl b/base/linalg/givens.jl index e270335fe18d8..f305760e8159f 100644 --- a/base/linalg/givens.jl +++ b/base/linalg/givens.jl @@ -14,7 +14,7 @@ end function _absvecormat_mul_adjrot(A::AbstractVecOrMat{T}, adjR::Adjoint{<:Any,<:AbstractRotation{S}}) where {T,S} R = adjR.parent TS = typeof(zero(T)*zero(S) + zero(T)*zero(S)) - mul!(TS == T ? copy(A) : convert(AbstractArray{TS}, A), Adjoint(convert(AbstractRotation{TS}, R))) + mul!(TS == T ? copy(A) : convert(AbstractArray{TS}, A), adjoint(convert(AbstractRotation{TS}, R))) end """ LinAlg.Givens(i1,i2,c,s) -> G @@ -366,7 +366,7 @@ end function mul!(A::AbstractMatrix, adjR::Adjoint{<:Any,<:Rotation}) R = adjR.parent @inbounds for i = 1:length(R.rotations) - mul!(A, Adjoint(R.rotations[i])) + mul!(A, adjoint(R.rotations[i])) end return A end diff --git a/base/linalg/hessenberg.jl b/base/linalg/hessenberg.jl index f9c0520e78b07..5b4ea46f5fedc 100644 --- a/base/linalg/hessenberg.jl +++ b/base/linalg/hessenberg.jl @@ -103,10 +103,10 @@ end function *(adjQ::Adjoint{<:Any,<:HessenbergQ{T}}, X::StridedVecOrMat{S}) where {T,S} Q = adjQ.parent TT = typeof(zero(T)*zero(S) + zero(T)*zero(S)) - return mul!(Adjoint(Q), copy_oftype(X, TT)) + return mul!(adjoint(Q), copy_oftype(X, TT)) end function *(X::StridedVecOrMat{S}, adjQ::Adjoint{<:Any,<:HessenbergQ{T}}) where {T,S} Q = adjQ.parent TT = typeof(zero(T)*zero(S) + zero(T)*zero(S)) - return mul!(copy_oftype(X, TT), Adjoint(Q)) + return mul!(copy_oftype(X, TT), adjoint(Q)) end diff --git a/base/linalg/lapack.jl b/base/linalg/lapack.jl index 93d8fe662e4a7..29bf383877336 100644 --- a/base/linalg/lapack.jl +++ b/base/linalg/lapack.jl @@ -973,7 +973,7 @@ end """ gels!(trans, A, B) -> (F, B, ssr) -Solves the linear equation `A * X = B`, `Transpose(A) * X = B`, or `Adjoint(A) * X = B` using +Solves the linear equation `A * X = B`, `transpose(A) * X = B`, or `adjoint(A) * X = B` using a QR or LQ factorization. Modifies the matrix/vector `B` in place with the solution. `A` is overwritten with its `QR` or `LQ` factorization. `trans` may be one of `N` (no modification), `T` (transpose), or `C` (conjugate @@ -995,7 +995,7 @@ gesv!(A::AbstractMatrix, B::AbstractVecOrMat) """ getrs!(trans, A, ipiv, B) -Solves the linear equation `A * X = B`, `Transpose(A) * X = B`, or `Adjoint(A) * X = B` for +Solves the linear equation `A * X = B`, `transpose(A) * X = B`, or `adjoint(A) * X = B` for square `A`. Modifies the matrix/vector `B` in place with the solution. `A` is the `LU` factorization from `getrf!`, with `ipiv` the pivoting information. `trans` may be one of `N` (no modification), `T` (transpose), @@ -1156,8 +1156,8 @@ end """ gesvx!(fact, trans, A, AF, ipiv, equed, R, C, B) -> (X, equed, R, C, B, rcond, ferr, berr, work) -Solves the linear equation `A * X = B` (`trans = N`), `Transpose(A) * X = B` -(`trans = T`), or `Adjoint(A) * X = B` (`trans = C`) using the `LU` factorization +Solves the linear equation `A * X = B` (`trans = N`), `transpose(A) * X = B` +(`trans = T`), or `adjoint(A) * X = B` (`trans = C`) using the `LU` factorization of `A`. `fact` may be `E`, in which case `A` will be equilibrated and copied to `AF`; `F`, in which case `AF` and `ipiv` from a previous `LU` factorization are inputs; or `N`, in which case `A` will be copied to `AF` and then @@ -2437,8 +2437,8 @@ gttrf!(dl::AbstractVector, d::AbstractVector, du::AbstractVector) """ gttrs!(trans, dl, d, du, du2, ipiv, B) -Solves the equation `A * X = B` (`trans = N`), `Transpose(A) * X = B` (`trans = T`), -or `Adjoint(A) * X = B` (`trans = C`) using the `LU` factorization computed by +Solves the equation `A * X = B` (`trans = N`), `transpose(A) * X = B` (`trans = T`), +or `adjoint(A) * X = B` (`trans = C`) using the `LU` factorization computed by `gttrf!`. `B` is overwritten with the solution `X`. """ gttrs!(trans::Char, dl::AbstractVector, d::AbstractVector, du::AbstractVector, du2::AbstractVector, @@ -2867,7 +2867,7 @@ orgrq!(A::AbstractMatrix, tau::AbstractVector, k::Integer = length(tau)) """ ormlq!(side, trans, A, tau, C) -Computes `Q * C` (`trans = N`), `Transpose(Q) * C` (`trans = T`), `Adjoint(Q) * C` +Computes `Q * C` (`trans = N`), `transpose(Q) * C` (`trans = T`), `adjoint(Q) * C` (`trans = C`) for `side = L` or the equivalent right-sided multiplication for `side = R` using `Q` from a `LQ` factorization of `A` computed using `gelqf!`. `C` is overwritten. @@ -2877,7 +2877,7 @@ ormlq!(side::Char, trans::Char, A::AbstractMatrix, tau::AbstractVector, C::Abstr """ ormqr!(side, trans, A, tau, C) -Computes `Q * C` (`trans = N`), `Transpose(Q) * C` (`trans = T`), `Adjoint(Q) * C` +Computes `Q * C` (`trans = N`), `transpose(Q) * C` (`trans = T`), `adjoint(Q) * C` (`trans = C`) for `side = L` or the equivalent right-sided multiplication for `side = R` using `Q` from a `QR` factorization of `A` computed using `geqrf!`. `C` is overwritten. @@ -2887,7 +2887,7 @@ ormqr!(side::Char, trans::Char, A::AbstractMatrix, tau::AbstractVector, C::Abstr """ ormql!(side, trans, A, tau, C) -Computes `Q * C` (`trans = N`), `Transpose(Q) * C` (`trans = T`), `Adjoint(Q) * C` +Computes `Q * C` (`trans = N`), `transpose(Q) * C` (`trans = T`), `adjoint(Q) * C` (`trans = C`) for `side = L` or the equivalent right-sided multiplication for `side = R` using `Q` from a `QL` factorization of `A` computed using `geqlf!`. `C` is overwritten. @@ -2897,7 +2897,7 @@ ormql!(side::Char, trans::Char, A::AbstractMatrix, tau::AbstractVector, C::Abstr """ ormrq!(side, trans, A, tau, C) -Computes `Q * C` (`trans = N`), `Transpose(Q) * C` (`trans = T`), `Adjoint(Q) * C` +Computes `Q * C` (`trans = N`), `transpose(Q) * C` (`trans = T`), `adjoint(Q) * C` (`trans = C`) for `side = L` or the equivalent right-sided multiplication for `side = R` using `Q` from a `RQ` factorization of `A` computed using `gerqf!`. `C` is overwritten. @@ -2907,7 +2907,7 @@ ormrq!(side::Char, trans::Char, A::AbstractMatrix, tau::AbstractVector, C::Abstr """ gemqrt!(side, trans, V, T, C) -Computes `Q * C` (`trans = N`), `Transpose(Q) * C` (`trans = T`), `Adjoint(Q) * C` +Computes `Q * C` (`trans = N`), `transpose(Q) * C` (`trans = T`), `adjoint(Q) * C` (`trans = C`) for `side = L` or the equivalent right-sided multiplication for `side = R` using `Q` from a `QR` factorization of `A` computed using `geqrt!`. `C` is overwritten. @@ -3307,8 +3307,8 @@ trtri!(uplo::Char, diag::Char, A::AbstractMatrix) """ trtrs!(uplo, trans, diag, A, B) -Solves `A * X = B` (`trans = N`), `Transpose(A) * X = B` (`trans = T`), or -`Adjoint(A) * X = B` (`trans = C`) for (upper if `uplo = U`, lower if `uplo = L`) +Solves `A * X = B` (`trans = N`), `transpose(A) * X = B` (`trans = T`), or +`adjoint(A) * X = B` (`trans = C`) for (upper if `uplo = U`, lower if `uplo = L`) triangular matrix `A`. If `diag = N`, `A` has non-unit diagonal elements. If `diag = U`, all diagonal elements of `A` are one. `B` is overwritten with the solution `X`. @@ -3604,7 +3604,7 @@ trevc!(side::Char, howmny::Char, select::AbstractVector{BlasInt}, T::AbstractMat trrfs!(uplo, trans, diag, A, B, X, Ferr, Berr) -> (Ferr, Berr) Estimates the error in the solution to `A * X = B` (`trans = N`), -`Transpose(A) * X = B` (`trans = T`), `Adjoint(A) * X = B` (`trans = C`) for `side = L`, +`transpose(A) * X = B` (`trans = T`), `adjoint(A) * X = B` (`trans = C`) for `side = L`, or the equivalent equations a right-handed `side = R` `X * A` after computing `X` using `trtrs!`. If `uplo = U`, `A` is upper triangular. If `uplo = L`, `A` is lower triangular. If `diag = N`, `A` has non-unit diff --git a/base/linalg/lq.jl b/base/linalg/lq.jl index 1b7983043564b..77c3d7d11e232 100644 --- a/base/linalg/lq.jl +++ b/base/linalg/lq.jl @@ -37,7 +37,7 @@ lqfact(x::Number) = lqfact(fill(x,1,1)) Perform an LQ factorization of `A` such that `A = L*Q`. The default (`full = false`) computes a factorization with possibly-rectangular `L` and `Q`, commonly the "thin" -factorization. The LQ factorization is the QR factorization of `Transpose(A)`. If the explicit, +factorization. The LQ factorization is the QR factorization of `transpose(A)`. If the explicit, full/square form of `Q` is requested via `full = true`, `L` is not extended with zeros. !!! note @@ -72,7 +72,7 @@ Array(A::LQ) = Matrix(A) adjoint(A::LQ) = Adjoint(A) Base.copy(F::Adjoint{T,<:LQ{T}}) where {T} = - QR{T,typeof(F.parent.factors)}(copy(Adjoint(F.parent.factors)), copy(F.parent.τ)) + QR{T,typeof(F.parent.factors)}(copy(adjoint(F.parent.factors)), copy(F.parent.τ)) function getproperty(F::LQ, d::Symbol) m, n = size(F) @@ -158,9 +158,9 @@ function *(adjA::Adjoint{<:Any,<:LQPackedQ}, B::StridedVecOrMat) A = adjA.parent TAB = promote_type(eltype(A), eltype(B)) if size(B,1) == size(A.factors,2) - mul!(Adjoint(AbstractMatrix{TAB}(A)), copy_oftype(B, TAB)) + mul!(adjoint(AbstractMatrix{TAB}(A)), copy_oftype(B, TAB)) elseif size(B,1) == size(A.factors,1) - mul!(Adjoint(AbstractMatrix{TAB}(A)), [B; zeros(TAB, size(A.factors, 2) - size(A.factors, 1), size(B, 2))]) + mul!(adjoint(AbstractMatrix{TAB}(A)), [B; zeros(TAB, size(A.factors, 2) - size(A.factors, 1), size(B, 2))]) else throw(DimensionMismatch("first dimension of B, $(size(B,1)), must equal one of the dimensions of A, $(size(A))")) end @@ -179,7 +179,7 @@ function *(adjA::Adjoint{<:Any,<:LQPackedQ}, adjB::Adjoint{<:Any,<:StridedVecOrM TAB = promote_type(eltype(A), eltype(B)) BB = similar(B, TAB, (size(B, 2), size(B, 1))) adjoint!(BB, B) - return mul!(Adjoint(A), BB) + return mul!(adjoint(A), BB) end # in-place right-application of LQPackedQs @@ -209,13 +209,13 @@ mul!(A::StridedMatrix{T}, adjB::Adjoint{<:Any,<:LQPackedQ{T}}) where {T<:BlasCom function *(A::StridedVecOrMat, adjQ::Adjoint{<:Any,<:LQPackedQ}) Q = adjQ.parent TR = promote_type(eltype(A), eltype(Q)) - return mul!(copy_oftype(A, TR), Adjoint(AbstractMatrix{TR}(Q))) + return mul!(copy_oftype(A, TR), adjoint(AbstractMatrix{TR}(Q))) end function *(adjA::Adjoint{<:Any,<:StridedMatrix}, adjQ::Adjoint{<:Any,<:LQPackedQ}) A, Q = adjA.parent, adjQ.parent TR = promote_type(eltype(A), eltype(Q)) C = adjoint!(similar(A, TR, reverse(size(A))), A) - return mul!(C, Adjoint(AbstractMatrix{TR}(Q))) + return mul!(C, adjoint(AbstractMatrix{TR}(Q))) end # # (2) the inner dimension in the multiplication is the LQPackedQ's first dimension. @@ -281,14 +281,14 @@ end # With a real lhs and complex rhs with the same precision, we can reinterpret # the complex rhs as a real rhs with twice the number of columns function (\)(F::LQ{T}, B::VecOrMat{Complex{T}}) where T<:BlasReal - c2r = reshape(copy(Transpose(reinterpret(T, reshape(B, (1, length(B)))))), size(B, 1), 2*size(B, 2)) + c2r = reshape(copy(transpose(reinterpret(T, reshape(B, (1, length(B)))))), size(B, 1), 2*size(B, 2)) x = ldiv!(F, c2r) - return reshape(copy(reinterpret(Complex{T}, copy(Transpose(reshape(x, div(length(x), 2), 2))))), + return reshape(copy(reinterpret(Complex{T}, copy(transpose(reshape(x, div(length(x), 2), 2))))), isa(B, AbstractVector) ? (size(F,2),) : (size(F,2), size(B,2))) end function ldiv!(A::LQ{T}, B::StridedVecOrMat{T}) where T - mul!(Adjoint(A.Q), ldiv!(LowerTriangular(A.L),B)) + mul!(adjoint(A.Q), ldiv!(LowerTriangular(A.L),B)) return B end diff --git a/base/linalg/lu.jl b/base/linalg/lu.jl index d5d9651c32eca..d440570f24a36 100644 --- a/base/linalg/lu.jl +++ b/base/linalg/lu.jl @@ -318,18 +318,18 @@ ldiv!(transA::Transpose{T,<:LU{T,<:StridedMatrix}}, B::StridedVecOrMat{T}) where function ldiv!(transA::Transpose{<:Any,<:LU{<:Any,<:StridedMatrix}}, B::StridedVecOrMat) A = transA.parent - ldiv!(Transpose(UnitLowerTriangular(A.factors)), ldiv!(Transpose(UpperTriangular(A.factors)), B)) + ldiv!(transpose(UnitLowerTriangular(A.factors)), ldiv!(transpose(UpperTriangular(A.factors)), B)) _apply_inverse_ipiv!(A, B) end ldiv!(adjF::Adjoint{T,<:LU{T,<:StridedMatrix}}, B::StridedVecOrMat{T}) where {T<:Real} = - (F = adjF.parent; ldiv!(Transpose(F), B)) + (F = adjF.parent; ldiv!(transpose(F), B)) ldiv!(adjA::Adjoint{T,<:LU{T,<:StridedMatrix}}, B::StridedVecOrMat{T}) where {T<:BlasComplex} = (A = adjA.parent; @assertnonsingular(LAPACK.getrs!('C', A.factors, A.ipiv, B), A.info)) function ldiv!(adjA::Adjoint{<:Any,<:LU{<:Any,<:StridedMatrix}}, B::StridedVecOrMat) A = adjA.parent - ldiv!(Adjoint(UnitLowerTriangular(A.factors)), ldiv!(Adjoint(UpperTriangular(A.factors)), B)) + ldiv!(adjoint(UnitLowerTriangular(A.factors)), ldiv!(adjoint(UpperTriangular(A.factors)), B)) _apply_inverse_ipiv!(A, B) end @@ -584,7 +584,7 @@ function ldiv!(adjA::Adjoint{<:Any,LU{T,Tridiagonal{T,V}}}, B::AbstractVecOrMat) return B end -/(B::AbstractMatrix, A::LU) = copy(Transpose(Transpose(A) \ Transpose(B))) +/(B::AbstractMatrix, A::LU) = copy(Transpose(transpose(A) \ transpose(B))) # Conversions AbstractMatrix(F::LU) = (F.L * F.U)[invperm(F.p),:] diff --git a/base/linalg/matmul.jl b/base/linalg/matmul.jl index 5f1f06eec792d..229667b4bf451 100644 --- a/base/linalg/matmul.jl +++ b/base/linalg/matmul.jl @@ -82,13 +82,13 @@ end # these will throw a DimensionMismatch unless B has 1 row (or 1 col for transposed case): *(a::AbstractVector, transB::Transpose{<:Any,<:AbstractMatrix}) = - (B = transB.parent; *(reshape(a,length(a),1), Transpose(B))) + (B = transB.parent; *(reshape(a,length(a),1), transpose(B))) *(A::AbstractMatrix, transb::Transpose{<:Any,<:AbstractVector}) = - (b = transb.parent; *(A, Transpose(reshape(b,length(b),1)))) + (b = transb.parent; *(A, transpose(reshape(b,length(b),1)))) *(a::AbstractVector, adjB::Adjoint{<:Any,<:AbstractMatrix}) = - (B = adjB.parent; *(reshape(a,length(a),1), Adjoint(B))) + (B = adjB.parent; *(reshape(a,length(a),1), adjoint(B))) *(A::AbstractMatrix, adjb::Adjoint{<:Any,<:AbstractVector}) = - (b = adjb.parent; *(A, Adjoint(reshape(b,length(b),1)))) + (b = adjb.parent; *(A, adjoint(reshape(b,length(b),1)))) (*)(a::AbstractVector, B::AbstractMatrix) = reshape(a,length(a),1)*B mul!(y::StridedVector{T}, A::StridedVecOrMat{T}, x::StridedVector{T}) where {T<:BlasFloat} = gemv!(y, 'N', A, x) @@ -107,12 +107,12 @@ mul!(y::AbstractVector, A::AbstractVecOrMat, x::AbstractVector) = generic_matvec function *(transA::Transpose{<:Any,<:StridedMatrix{T}}, x::StridedVector{S}) where {T<:BlasFloat,S} A = transA.parent TS = promote_op(matprod, T, S) - mul!(similar(x,TS,size(A,2)), Transpose(A), convert(AbstractVector{TS}, x)) + mul!(similar(x,TS,size(A,2)), transpose(A), convert(AbstractVector{TS}, x)) end function *(transA::Transpose{<:Any,<:AbstractMatrix{T}}, x::AbstractVector{S}) where {T,S} A = transA.parent TS = promote_op(matprod, T, S) - mul!(similar(x,TS,size(A,2)), Transpose(A), x) + mul!(similar(x,TS,size(A,2)), transpose(A), x) end mul!(y::StridedVector{T}, transA::Transpose{<:Any,<:StridedVecOrMat{T}}, x::StridedVector{T}) where {T<:BlasFloat} = (A = transA.parent; gemv!(y, 'T', A, x)) @@ -122,16 +122,16 @@ mul!(y::AbstractVector, transA::Transpose{<:Any,<:AbstractVecOrMat}, x::Abstract function *(adjA::Adjoint{<:Any,<:StridedMatrix{T}}, x::StridedVector{S}) where {T<:BlasFloat,S} A = adjA.parent TS = promote_op(matprod, T, S) - mul!(similar(x,TS,size(A,2)), Adjoint(A) ,convert(AbstractVector{TS},x)) + mul!(similar(x,TS,size(A,2)), adjoint(A) ,convert(AbstractVector{TS},x)) end function *(adjA::Adjoint{<:Any,<:AbstractMatrix{T}}, x::AbstractVector{S}) where {T,S} A = adjA.parent TS = promote_op(matprod, T, S) - mul!(similar(x,TS,size(A,2)), Adjoint(A), x) + mul!(similar(x,TS,size(A,2)), adjoint(A), x) end mul!(y::StridedVector{T}, adjA::Adjoint{<:Any,<:StridedVecOrMat{T}}, x::StridedVector{T}) where {T<:BlasReal} = - (A = adjA.parent; mul!(y, Transpose(A), x)) + (A = adjA.parent; mul!(y, transpose(A), x)) mul!(y::StridedVector{T}, adjA::Adjoint{<:Any,<:StridedVecOrMat{T}}, x::StridedVector{T}) where {T<:BlasComplex} = (A = adjA.parent; gemv!(y, 'C', A, x)) mul!(y::AbstractVector, adjA::Adjoint{<:Any,<:AbstractVecOrMat}, x::AbstractVector) = @@ -200,7 +200,7 @@ mul!(A, B) function *(transA::Transpose{<:Any,<:AbstractMatrix}, B::AbstractMatrix) A = transA.parent TS = promote_op(matprod, eltype(A), eltype(B)) - mul!(similar(B, TS, (size(A,2), size(B,2))), Transpose(A), B) + mul!(similar(B, TS, (size(A,2), size(B,2))), transpose(A), B) end mul!(C::StridedMatrix{T}, transA::Transpose{<:Any,<:StridedVecOrMat{T}}, B::StridedVecOrMat{T}) where {T<:BlasFloat} = (A = transA.parent; A===B ? syrk_wrapper!(C, 'T', A) : gemm_wrapper!(C, 'T', 'N', A, B)) @@ -210,7 +210,7 @@ mul!(C::AbstractMatrix, transA::Transpose{<:Any,<:AbstractVecOrMat}, B::Abstract function *(A::AbstractMatrix, transB::Transpose{<:Any,<:AbstractMatrix}) B = transB.parent TS = promote_op(matprod, eltype(A), eltype(B)) - mul!(similar(B, TS, (size(A,1), size(B,1))), A, Transpose(B)) + mul!(similar(B, TS, (size(A,1), size(B,1))), A, transpose(B)) end mul!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, transB::Transpose{<:Any,<:StridedVecOrMat{T}}) where {T<:BlasFloat} = (B = transB.parent; A===B ? syrk_wrapper!(C, 'N', A) : gemm_wrapper!(C, 'N', 'T', A, B)) @@ -241,7 +241,7 @@ _disambigmul!(C::AbstractVecOrMat, A::AbstractVecOrMat, transB::Transpose{<:Any, function _disambigmul(transA::Transpose{<:Any,<:AbstractMatrix{T}}, transB::Transpose{<:Any,<:AbstractVecOrMat{S}}) where {T,S} A, B = transA.parent, transB.parent TS = promote_op(matprod, T, S) - mul!(similar(B, TS, (size(A,2), size(B,1))), Transpose(A), Transpose(B)) + mul!(similar(B, TS, (size(A,2), size(B,1))), transpose(A), transpose(B)) end mul!(C::StridedMatrix{T}, transA::Transpose{<:Any,<:StridedVecOrMat{T}}, transB::Transpose{<:Any,<:StridedVecOrMat{T}}) where {T<:BlasFloat} = (A = transA.parent; B = transB.parent; gemm_wrapper!(C, 'T', 'T', A, B)) @@ -250,13 +250,13 @@ mul!(C::AbstractMatrix, transA::Transpose{<:Any,<:AbstractVecOrMat}, transB::Tra mul!(C::AbstractMatrix, A::Transpose{<:Any,<:AbstractVecOrMat}, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) *(adjA::Adjoint{<:Any,<:StridedMatrix{T}}, B::StridedMatrix{T}) where {T<:BlasReal} = - (A = adjA.parent; *(Transpose(A), B)) + (A = adjA.parent; *(transpose(A), B)) mul!(C::StridedMatrix{T}, adjA::Adjoint{<:Any,<:StridedVecOrMat{T}}, B::StridedVecOrMat{T}) where {T<:BlasReal} = - (A = adjA.parent; mul!(C, Transpose(A), B)) + (A = adjA.parent; mul!(C, transpose(A), B)) function *(adjA::Adjoint{<:Any,<:AbstractMatrix}, B::AbstractMatrix) A = adjA.parent TS = promote_op(matprod, eltype(A), eltype(B)) - mul!(similar(B, TS, (size(A,2), size(B,2))), Adjoint(A), B) + mul!(similar(B, TS, (size(A,2), size(B,2))), adjoint(A), B) end mul!(C::StridedMatrix{T}, adjA::Adjoint{<:Any,<:StridedVecOrMat{T}}, B::StridedVecOrMat{T}) where {T<:BlasComplex} = (A = adjA.parent; A===B ? herk_wrapper!(C,'C',A) : gemm_wrapper!(C,'C', 'N', A, B)) @@ -264,13 +264,13 @@ mul!(C::AbstractMatrix, adjA::Adjoint{<:Any,<:AbstractVecOrMat}, B::AbstractVecO (A = adjA.parent; generic_matmatmul!(C, 'C', 'N', A, B)) *(A::StridedMatrix{<:BlasFloat}, adjB::Adjoint{<:Any,<:StridedMatrix{<:BlasReal}}) = - (B = adjB.parent; *(A, Transpose(B))) + (B = adjB.parent; *(A, transpose(B))) mul!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, adjB::Adjoint{<:Any,<:StridedVecOrMat{<:BlasReal}}) where {T<:BlasFloat} = - (B = adjB.parent; mul!(C, A, Transpose(B))) + (B = adjB.parent; mul!(C, A, transpose(B))) function *(A::AbstractMatrix, adjB::Adjoint{<:Any,<:AbstractMatrix}) B = adjB.parent TS = promote_op(matprod, eltype(A), eltype(B)) - mul!(similar(B,TS,(size(A,1),size(B,1))), A, Adjoint(B)) + mul!(similar(B,TS,(size(A,1),size(B,1))), A, adjoint(B)) end mul!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, adjB::Adjoint{<:Any,<:StridedVecOrMat{T}}) where {T<:BlasComplex} = (B = adjB.parent; A===B ? herk_wrapper!(C, 'N', A) : gemm_wrapper!(C, 'N', 'C', A, B)) @@ -278,7 +278,7 @@ mul!(C::AbstractMatrix, A::AbstractVecOrMat, adjB::Adjoint{<:Any,<:AbstractVecOr (B = adjB.parent; generic_matmatmul!(C, 'N', 'C', A, B)) *(adjA::Adjoint{<:Any,<:AbstractMatrix}, adjB::Adjoint{<:Any,<:AbstractMatrix}) = - (A = adjA.parent; B = adjB.parent; mul!(similar(B, promote_op(matprod, eltype(A), eltype(B)), (size(A,2), size(B,1))), Adjoint(A), Adjoint(B))) + (A = adjA.parent; B = adjB.parent; mul!(similar(B, promote_op(matprod, eltype(A), eltype(B)), (size(A,2), size(B,1))), adjoint(A), adjoint(B))) mul!(C::StridedMatrix{T}, adjA::Adjoint{<:Any,<:StridedVecOrMat{T}}, adjB::Adjoint{<:Any,<:StridedVecOrMat{T}}) where {T<:BlasFloat} = (A = adjA.parent; B = adjB.parent; gemm_wrapper!(C, 'C', 'C', A, B)) mul!(C::AbstractMatrix, adjA::Adjoint{<:Any,<:AbstractVecOrMat}, adjB::Adjoint{<:Any,<:AbstractVecOrMat}) = @@ -475,7 +475,7 @@ function generic_matvecmul!(C::AbstractVector{R}, tA, A::AbstractVecOrMat, B::Ab s = zero(A[aoffs + 1]*B[1] + A[aoffs + 1]*B[1]) end for i = 1:nA - s += Transpose(A[aoffs+i]) * B[i] + s += transpose(A[aoffs+i]) * B[i] end C[k] = s end @@ -629,7 +629,7 @@ function _generic_matmatmul!(C::AbstractVecOrMat{R}, tA, tB, A::AbstractVecOrMat z2 = zero(A[i, 1]*B[j, 1] + A[i, 1]*B[j, 1]) Ctmp = convert(promote_type(R, typeof(z2)), z2) for k = 1:nA - Ctmp += A[i, k] * Transpose(B[j, k]) + Ctmp += A[i, k] * transpose(B[j, k]) end C[i,j] = Ctmp end @@ -649,7 +649,7 @@ function _generic_matmatmul!(C::AbstractVecOrMat{R}, tA, tB, A::AbstractVecOrMat z2 = zero(A[1, i]*B[1, j] + A[1, i]*B[1, j]) Ctmp = convert(promote_type(R, typeof(z2)), z2) for k = 1:nA - Ctmp += Transpose(A[k, i]) * B[k, j] + Ctmp += transpose(A[k, i]) * B[k, j] end C[i,j] = Ctmp end @@ -658,7 +658,7 @@ function _generic_matmatmul!(C::AbstractVecOrMat{R}, tA, tB, A::AbstractVecOrMat z2 = zero(A[1, i]*B[j, 1] + A[1, i]*B[j, 1]) Ctmp = convert(promote_type(R, typeof(z2)), z2) for k = 1:nA - Ctmp += Transpose(A[k, i]) * Transpose(B[j, k]) + Ctmp += transpose(A[k, i]) * transpose(B[j, k]) end C[i,j] = Ctmp end @@ -667,7 +667,7 @@ function _generic_matmatmul!(C::AbstractVecOrMat{R}, tA, tB, A::AbstractVecOrMat z2 = zero(A[1, i]*B[j, 1] + A[1, i]*B[j, 1]) Ctmp = convert(promote_type(R, typeof(z2)), z2) for k = 1:nA - Ctmp += Transpose(A[k, i]) * Adjoint(B[j, k]) + Ctmp += transpose(A[k, i]) * adjoint(B[j, k]) end C[i,j] = Ctmp end @@ -687,7 +687,7 @@ function _generic_matmatmul!(C::AbstractVecOrMat{R}, tA, tB, A::AbstractVecOrMat z2 = zero(A[1, i]*B[j, 1] + A[1, i]*B[j, 1]) Ctmp = convert(promote_type(R, typeof(z2)), z2) for k = 1:nA - Ctmp += Adjoint(A[k, i]) * Transpose(B[j, k]) + Ctmp += adjoint(A[k, i]) * transpose(B[j, k]) end C[i,j] = Ctmp end @@ -720,8 +720,8 @@ function matmul2x2!(C::AbstractMatrix, tA, tB, A::AbstractMatrix, B::AbstractMat @inbounds begin if tA == 'T' # TODO making these lazy could improve perf - A11 = copy(Transpose(A[1,1])); A12 = copy(Transpose(A[2,1])) - A21 = copy(Transpose(A[1,2])); A22 = copy(Transpose(A[2,2])) + A11 = copy(transpose(A[1,1])); A12 = copy(transpose(A[2,1])) + A21 = copy(transpose(A[1,2])); A22 = copy(transpose(A[2,2])) elseif tA == 'C' # TODO making these lazy could improve perf A11 = copy(A[1,1]'); A12 = copy(A[2,1]') @@ -731,8 +731,8 @@ function matmul2x2!(C::AbstractMatrix, tA, tB, A::AbstractMatrix, B::AbstractMat end if tB == 'T' # TODO making these lazy could improve perf - B11 = copy(Transpose(B[1,1])); B12 = copy(Transpose(B[2,1])) - B21 = copy(Transpose(B[1,2])); B22 = copy(Transpose(B[2,2])) + B11 = copy(transpose(B[1,1])); B12 = copy(transpose(B[2,1])) + B21 = copy(transpose(B[1,2])); B22 = copy(transpose(B[2,2])) elseif tB == 'C' # TODO making these lazy could improve perf B11 = copy(B[1,1]'); B12 = copy(B[2,1]') @@ -761,9 +761,9 @@ function matmul3x3!(C::AbstractMatrix, tA, tB, A::AbstractMatrix, B::AbstractMat @inbounds begin if tA == 'T' # TODO making these lazy could improve perf - A11 = copy(Transpose(A[1,1])); A12 = copy(Transpose(A[2,1])); A13 = copy(Transpose(A[3,1])) - A21 = copy(Transpose(A[1,2])); A22 = copy(Transpose(A[2,2])); A23 = copy(Transpose(A[3,2])) - A31 = copy(Transpose(A[1,3])); A32 = copy(Transpose(A[2,3])); A33 = copy(Transpose(A[3,3])) + A11 = copy(transpose(A[1,1])); A12 = copy(transpose(A[2,1])); A13 = copy(transpose(A[3,1])) + A21 = copy(transpose(A[1,2])); A22 = copy(transpose(A[2,2])); A23 = copy(transpose(A[3,2])) + A31 = copy(transpose(A[1,3])); A32 = copy(transpose(A[2,3])); A33 = copy(transpose(A[3,3])) elseif tA == 'C' # TODO making these lazy could improve perf A11 = copy(A[1,1]'); A12 = copy(A[2,1]'); A13 = copy(A[3,1]') @@ -777,9 +777,9 @@ function matmul3x3!(C::AbstractMatrix, tA, tB, A::AbstractMatrix, B::AbstractMat if tB == 'T' # TODO making these lazy could improve perf - B11 = copy(Transpose(B[1,1])); B12 = copy(Transpose(B[2,1])); B13 = copy(Transpose(B[3,1])) - B21 = copy(Transpose(B[1,2])); B22 = copy(Transpose(B[2,2])); B23 = copy(Transpose(B[3,2])) - B31 = copy(Transpose(B[1,3])); B32 = copy(Transpose(B[2,3])); B33 = copy(Transpose(B[3,3])) + B11 = copy(transpose(B[1,1])); B12 = copy(transpose(B[2,1])); B13 = copy(transpose(B[3,1])) + B21 = copy(transpose(B[1,2])); B22 = copy(transpose(B[2,2])); B23 = copy(transpose(B[3,2])) + B31 = copy(transpose(B[1,3])); B32 = copy(transpose(B[2,3])); B33 = copy(transpose(B[3,3])) elseif tB == 'C' # TODO making these lazy could improve perf B11 = copy(B[1,1]'); B12 = copy(B[2,1]'); B13 = copy(B[3,1]') diff --git a/base/linalg/qr.jl b/base/linalg/qr.jl index 30d8cbc1117e4..0471ab7597bea 100644 --- a/base/linalg/qr.jl +++ b/base/linalg/qr.jl @@ -614,7 +614,7 @@ end function *(adjQ::Adjoint{<:Any,<:AbstractQ}, B::StridedVecOrMat) Q = adjQ.parent TQB = promote_type(eltype(Q), eltype(B)) - return mul!(Adjoint(convert(AbstractMatrix{TQB}, Q)), copy_oftype(B, TQB)) + return mul!(adjoint(convert(AbstractMatrix{TQB}, Q)), copy_oftype(B, TQB)) end ### QBc/QcBc @@ -630,7 +630,7 @@ function *(adjQ::Adjoint{<:Any,<:AbstractQ}, adjB::Adjoint{<:Any,<:StridedVecOrM TQB = promote_type(eltype(Q), eltype(B)) Bc = similar(B, TQB, (size(B, 2), size(B, 1))) adjoint!(Bc, B) - return mul!(Adjoint(convert(AbstractMatrix{TQB}, Q)), Bc) + return mul!(adjoint(convert(AbstractMatrix{TQB}, Q)), Bc) end ### AQ @@ -709,14 +709,14 @@ function *(A::StridedMatrix, adjB::Adjoint{<:Any,<:AbstractQ}) if size(A,2) == size(B.factors, 1) AA = similar(A, TAB, size(A)) copyto!(AA, A) - return mul!(AA, Adjoint(BB)) + return mul!(AA, adjoint(BB)) elseif size(A,2) == size(B.factors,2) - return mul!([A zeros(TAB, size(A, 1), size(B.factors, 1) - size(B.factors, 2))], Adjoint(BB)) + return mul!([A zeros(TAB, size(A, 1), size(B.factors, 1) - size(B.factors, 2))], adjoint(BB)) else throw(DimensionMismatch("matrix A has dimensions $(size(A)) but matrix B has dimensions $(size(B))")) end end -*(u::AdjointAbsVec, A::Adjoint{<:Any,<:AbstractQ}) = Adjoint(A.parent * u.parent) +*(u::AdjointAbsVec, A::Adjoint{<:Any,<:AbstractQ}) = adjoint(A.parent * u.parent) ### AcQ/AcQc @@ -732,13 +732,13 @@ function *(adjA::Adjoint{<:Any,<:StridedVecOrMat}, adjQ::Adjoint{<:Any,<:Abstrac TAQ = promote_type(eltype(A), eltype(Q)) Ac = similar(A, TAQ, (size(A, 2), size(A, 1))) adjoint!(Ac, A) - return mul!(Ac, Adjoint(convert(AbstractMatrix{TAQ}, Q))) + return mul!(Ac, adjoint(convert(AbstractMatrix{TAQ}, Q))) end ldiv!(A::QRCompactWY{T}, b::StridedVector{T}) where {T<:BlasFloat} = - (ldiv!(UpperTriangular(A.R), view(mul!(Adjoint(A.Q), b), 1:size(A, 2))); b) + (ldiv!(UpperTriangular(A.R), view(mul!(adjoint(A.Q), b), 1:size(A, 2))); b) ldiv!(A::QRCompactWY{T}, B::StridedMatrix{T}) where {T<:BlasFloat} = - (ldiv!(UpperTriangular(A.R), view(mul!(Adjoint(A.Q), B), 1:size(A, 2), 1:size(B, 2))); B) + (ldiv!(UpperTriangular(A.R), view(mul!(adjoint(A.Q), B), 1:size(A, 2), 1:size(B, 2))); B) # Julia implementation similar to xgelsy function ldiv!(A::QRPivoted{T}, B::StridedMatrix{T}, rcond::Real) where T<:BlasFloat @@ -770,7 +770,7 @@ function ldiv!(A::QRPivoted{T}, B::StridedMatrix{T}, rcond::Real) where T<:BlasF rnk += 1 end C, τ = LAPACK.tzrzf!(A.factors[1:rnk,:]) - ldiv!(UpperTriangular(C[1:rnk,1:rnk]),view(mul!(Adjoint(A.Q), view(B, 1:mA, 1:nrhs)), 1:rnk, 1:nrhs)) + ldiv!(UpperTriangular(C[1:rnk,1:rnk]),view(mul!(adjoint(A.Q), view(B, 1:mA, 1:nrhs)), 1:rnk, 1:nrhs)) B[rnk+1:end,:] = zero(T) LAPACK.ormrz!('L', eltype(B)<:Complex ? 'C' : 'T', C, τ, view(B,1:nA,1:nrhs)) B[1:nA,:] = view(B, 1:nA, :)[invperm(A.p),:] @@ -784,7 +784,7 @@ function ldiv!(A::QR{T}, B::StridedMatrix{T}) where T m, n = size(A) minmn = min(m,n) mB, nB = size(B) - mul!(Adjoint(A.Q), view(B, 1:m, :)) + mul!(adjoint(A.Q), view(B, 1:m, :)) R = A.R @inbounds begin if n > m # minimum norm solution @@ -878,7 +878,7 @@ function (\)(A::Union{QR{T},QRCompactWY{T},QRPivoted{T}}, BIn::VecOrMat{Complex{ # |z2|z4| -> |y1|y2|y3|y4| -> |x2|y2| -> |x2|y2|x4|y4| # |x3|y3| # |x4|y4| - B = reshape(copy(Transpose(reinterpret(T, reshape(BIn, (1, length(BIn)))))), size(BIn, 1), 2*size(BIn, 2)) + B = reshape(copy(transpose(reinterpret(T, reshape(BIn, (1, length(BIn)))))), size(BIn, 1), 2*size(BIn, 2)) X = _zeros(T, B, n) X[1:size(B, 1), :] = B @@ -889,7 +889,7 @@ function (\)(A::Union{QR{T},QRCompactWY{T},QRPivoted{T}}, BIn::VecOrMat{Complex{ # |z2|z4| <- |y1|y2|y3|y4| <- |x2|y2| <- |x2|y2|x4|y4| # |x3|y3| # |x4|y4| - XX = reshape(collect(reinterpret(Complex{T}, copy(Transpose(reshape(X, div(length(X), 2), 2))))), _ret_size(A, BIn)) + XX = reshape(collect(reinterpret(Complex{T}, copy(transpose(reshape(X, div(length(X), 2), 2))))), _ret_size(A, BIn)) return _cut_B(XX, 1:n) end diff --git a/base/linalg/rowvector.jl b/base/linalg/rowvector.jl index 73182b0a38c13..1b63a35d70625 100644 --- a/base/linalg/rowvector.jl +++ b/base/linalg/rowvector.jl @@ -10,7 +10,7 @@ shaped row vector and represents the transpose of a vector (the elements are als recursively). By convention, a vector can be multiplied by a matrix on its left (`A * v`) whereas a row -vector can be multiplied by a matrix on its right (such that `RowVector(v) * A = RowVector(Transpose(A) * v)`). It +vector can be multiplied by a matrix on its right (such that `RowVector(v) * A = RowVector(transpose(A) * v)`). It differs from a `1×n`-sized matrix by the facts that its transpose returns a vector and the inner product `RowVector(v1) * v2` returns a scalar, but will otherwise behave similarly. diff --git a/base/linalg/special.jl b/base/linalg/special.jl index 40d13824fbcbf..2f3c32a3887b7 100644 --- a/base/linalg/special.jl +++ b/base/linalg/special.jl @@ -119,9 +119,9 @@ for op in (:+, :-) end mul!(A::AbstractTriangular, adjB::Adjoint{<:Any,<:Union{QRCompactWYQ,QRPackedQ}}) = - (B = adjB.parent; mul!(full!(A), Adjoint(B))) + (B = adjB.parent; mul!(full!(A), adjoint(B))) *(A::AbstractTriangular, adjB::Adjoint{<:Any,<:Union{QRCompactWYQ,QRPackedQ}}) = - (B = adjB.parent; *(copyto!(similar(parent(A)), A), Adjoint(B))) + (B = adjB.parent; *(copyto!(similar(parent(A)), A), adjoint(B))) # fill[stored]! methods fillstored!(A::Diagonal, x) = (fill!(A.diag, x); A) diff --git a/base/linalg/symmetric.jl b/base/linalg/symmetric.jl index 214dcf2264649..3d7745d16a916 100644 --- a/base/linalg/symmetric.jl +++ b/base/linalg/symmetric.jl @@ -38,7 +38,7 @@ julia> Slower = Symmetric(A, :L) 2 0 3 0 4 ``` -Note that `Supper` will not be equal to `Slower` unless `A` is itself symmetric (e.g. if `A == Transpose(A)`). +Note that `Supper` will not be equal to `Slower` unless `A` is itself symmetric (e.g. if `A == transpose(A)`). """ Symmetric(A::AbstractMatrix, uplo::Symbol=:U) = (checksquare(A); Symmetric{eltype(A),typeof(A)}(A, char_uplo(uplo))) @@ -255,9 +255,9 @@ transpose(A::Hermitian) = Transpose(A) Base.copy(A::Adjoint{<:Any,<:Hermitian}) = copy(A.parent) Base.copy(A::Transpose{<:Any,<:Symmetric}) = copy(A.parent) Base.copy(A::Adjoint{<:Any,<:Symmetric}) = - Symmetric(copy(Adjoint(A.parent.data)), ifelse(A.parent.uplo == 'U', :L, :U)) + Symmetric(copy(adjoint(A.parent.data)), ifelse(A.parent.uplo == 'U', :L, :U)) Base.collect(A::Transpose{<:Any,<:Hermitian}) = - Hermitian(copy(Transpose(A.parent.data)), ifelse(A.parent.uplo == 'U', :L, :U)) + Hermitian(copy(transpose(A.parent.data)), ifelse(A.parent.uplo == 'U', :L, :U)) trace(A::Hermitian) = real(trace(A.data)) @@ -279,13 +279,13 @@ end function tril(A::Symmetric, k::Integer=0) if A.uplo == 'U' && k <= 0 - return tril!(copy(Transpose(A.data)),k) + return tril!(copy(transpose(A.data)),k) elseif A.uplo == 'U' && k > 0 - return tril!(copy(Transpose(A.data)),-1) + tril!(triu(A.data),k) + return tril!(copy(transpose(A.data)),-1) + tril!(triu(A.data),k) elseif A.uplo == 'L' && k <= 0 return tril(A.data,k) else - return tril(A.data,-1) + tril!(triu!(copy(Transpose(A.data))),k) + return tril(A.data,-1) + tril!(triu!(copy(transpose(A.data))),k) end end @@ -305,11 +305,11 @@ function triu(A::Symmetric, k::Integer=0) if A.uplo == 'U' && k >= 0 return triu(A.data,k) elseif A.uplo == 'U' && k < 0 - return triu(A.data,1) + triu!(tril!(copy(Transpose(A.data))),k) + return triu(A.data,1) + triu!(tril!(copy(transpose(A.data))),k) elseif A.uplo == 'L' && k >= 0 - return triu!(copy(Transpose(A.data)),k) + return triu!(copy(transpose(A.data)),k) else - return triu!(copy(Transpose(A.data)),1) + triu!(tril(A.data),k) + return triu!(copy(transpose(A.data)),1) + triu!(tril(A.data),k) end end diff --git a/base/linalg/triangular.jl b/base/linalg/triangular.jl index 27f442055434c..44f836c835280 100644 --- a/base/linalg/triangular.jl +++ b/base/linalg/triangular.jl @@ -473,17 +473,17 @@ mul!(C::AbstractVector , A::AbstractTriangular, B::AbstractVector) = mul!(A, mul!(C::AbstractMatrix , A::AbstractTriangular, B::AbstractVecOrMat) = mul!(A, copyto!(C, B)) mul!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVecOrMat) = mul!(A, copyto!(C, B)) mul!(C::AbstractVector , adjA::Adjoint{<:Any,<:AbstractTriangular}, B::AbstractVector) = - (A = adjA.parent; mul!(Adjoint(A), copyto!(C, B))) + (A = adjA.parent; mul!(adjoint(A), copyto!(C, B))) mul!(C::AbstractMatrix , adjA::Adjoint{<:Any,<:AbstractTriangular}, B::AbstractVecOrMat) = - (A = adjA.parent; mul!(Adjoint(A), copyto!(C, B))) + (A = adjA.parent; mul!(adjoint(A), copyto!(C, B))) mul!(C::AbstractVecOrMat, adjA::Adjoint{<:Any,<:AbstractTriangular}, B::AbstractVecOrMat) = - (A = adjA.parent; mul!(Adjoint(A), copyto!(C, B))) + (A = adjA.parent; mul!(adjoint(A), copyto!(C, B))) mul!(C::AbstractVector , transA::Transpose{<:Any,<:AbstractTriangular}, B::AbstractVector) = - (A = transA.parent; mul!(Transpose(A), copyto!(C, B))) + (A = transA.parent; mul!(transpose(A), copyto!(C, B))) mul!(C::AbstractMatrix , transA::Transpose{<:Any,<:AbstractTriangular}, B::AbstractVecOrMat) = - (A = transA.parent; mul!(Transpose(A), copyto!(C, B))) + (A = transA.parent; mul!(transpose(A), copyto!(C, B))) mul!(C::AbstractVecOrMat, transA::Transpose{<:Any,<:AbstractTriangular}, B::AbstractVecOrMat) = - (A = transA.parent; mul!(Transpose(A), copyto!(C, B))) + (A = transA.parent; mul!(transpose(A), copyto!(C, B))) mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:AbstractTriangular}, B::Transpose{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) mul!(C::AbstractMatrix, A::Transpose{<:Any,<:AbstractTriangular}, B::Adjoint{<:Any,<:AbstractVecOrMat}) = mul!(C, A, copy(B)) @@ -804,9 +804,9 @@ function mul!(transA::Transpose{<:Any,<:UpperTriangular}, B::StridedVecOrMat) end for j = 1:n for i = m:-1:1 - Bij = Transpose(A.data[i,i]) * B[i,j] + Bij = transpose(A.data[i,i]) * B[i,j] for k = 1:i - 1 - Bij += Transpose(A.data[k,i]) * B[k,j] + Bij += transpose(A.data[k,i]) * B[k,j] end B[i,j] = Bij end @@ -823,7 +823,7 @@ function mul!(transA::Transpose{<:Any,<:UnitUpperTriangular}, B::StridedVecOrMat for i = m:-1:1 Bij = B[i,j] for k = 1:i - 1 - Bij += Transpose(A.data[k,i]) * B[k,j] + Bij += transpose(A.data[k,i]) * B[k,j] end B[i,j] = Bij end @@ -839,9 +839,9 @@ function mul!(transA::Transpose{<:Any,<:LowerTriangular}, B::StridedVecOrMat) end for j = 1:n for i = 1:m - Bij = Transpose(A.data[i,i]) * B[i,j] + Bij = transpose(A.data[i,i]) * B[i,j] for k = i + 1:m - Bij += Transpose(A.data[k,i]) * B[k,j] + Bij += transpose(A.data[k,i]) * B[k,j] end B[i,j] = Bij end @@ -858,7 +858,7 @@ function mul!(transA::Transpose{<:Any,<:UnitLowerTriangular}, B::StridedVecOrMat for i = 1:m Bij = B[i,j] for k = i + 1:m - Bij += Transpose(A.data[k,i]) * B[k,j] + Bij += transpose(A.data[k,i]) * B[k,j] end B[i,j] = Bij end @@ -1010,9 +1010,9 @@ function mul!(A::StridedMatrix, transB::Transpose{<:Any,<:UpperTriangular}) end for i = 1:m for j = 1:n - Aij = A[i,j] * Transpose(B.data[j,j]) + Aij = A[i,j] * transpose(B.data[j,j]) for k = j + 1:n - Aij += A[i,k] * Transpose(B.data[j,k]) + Aij += A[i,k] * transpose(B.data[j,k]) end A[i,j] = Aij end @@ -1029,7 +1029,7 @@ function mul!(A::StridedMatrix, transB::Transpose{<:Any,<:UnitUpperTriangular}) for j = 1:n Aij = A[i,j] for k = j + 1:n - Aij += A[i,k] * Transpose(B.data[j,k]) + Aij += A[i,k] * transpose(B.data[j,k]) end A[i,j] = Aij end @@ -1045,9 +1045,9 @@ function mul!(A::StridedMatrix, transB::Transpose{<:Any,<:LowerTriangular}) end for i = 1:m for j = n:-1:1 - Aij = A[i,j] * Transpose(B.data[j,j]) + Aij = A[i,j] * transpose(B.data[j,j]) for k = 1:j - 1 - Aij += A[i,k] * Transpose(B.data[j,k]) + Aij += A[i,k] * transpose(B.data[j,k]) end A[i,j] = Aij end @@ -1064,7 +1064,7 @@ function mul!(A::StridedMatrix, transB::Transpose{<:Any,<:UnitLowerTriangular}) for j = n:-1:1 Aij = A[i,j] for k = 1:j - 1 - Aij += A[i,k] * Transpose(B.data[j,k]) + Aij += A[i,k] * transpose(B.data[j,k]) end A[i,j] = Aij end @@ -1407,9 +1407,9 @@ function rdiv!(A::StridedMatrix, transB::Transpose{<:Any,<:UpperTriangular}) for j = n:-1:1 Aij = A[i,j] for k = j + 1:n - Aij -= A[i,k] * Transpose(B.data[j,k]) + Aij -= A[i,k] * transpose(B.data[j,k]) end - A[i,j] = Aij / Transpose(B.data[j,j]) + A[i,j] = Aij / transpose(B.data[j,j]) end end A @@ -1424,7 +1424,7 @@ function rdiv!(A::StridedMatrix, transB::Transpose{<:Any,<:UnitUpperTriangular}) for j = n:-1:1 Aij = A[i,j] for k = j + 1:n - Aij -= A[i,k] * Transpose(B.data[j,k]) + Aij -= A[i,k] * transpose(B.data[j,k]) end A[i,j] = Aij end @@ -1442,9 +1442,9 @@ function rdiv!(A::StridedMatrix, transB::Transpose{<:Any,<:LowerTriangular}) for j = 1:n Aij = A[i,j] for k = 1:j - 1 - Aij -= A[i,k] * Transpose(B.data[j,k]) + Aij -= A[i,k] * transpose(B.data[j,k]) end - A[i,j] = Aij / Transpose(B.data[j,j]) + A[i,j] = Aij / transpose(B.data[j,j]) end end A @@ -1459,7 +1459,7 @@ function rdiv!(A::StridedMatrix, transB::Transpose{<:Any,<:UnitLowerTriangular}) for j = 1:n Aij = A[i,j] for k = 1:j - 1 - Aij -= A[i,k] * Transpose(B.data[j,k]) + Aij -= A[i,k] * transpose(B.data[j,k]) end A[i,j] = Aij end @@ -1468,21 +1468,21 @@ function rdiv!(A::StridedMatrix, transB::Transpose{<:Any,<:UnitLowerTriangular}) end mul!(adjA::Adjoint{<:Any,<:Union{LowerTriangular,UnitLowerTriangular}}, B::UpperTriangular) = - (A = adjA.parent; UpperTriangular(mul!(Adjoint(A), triu!(B.data)))) + (A = adjA.parent; UpperTriangular(mul!(adjoint(A), triu!(B.data)))) mul!(adjA::Adjoint{<:Any,<:Union{UpperTriangular,UnitUpperTriangular}}, B::LowerTriangular) = - (A = adjA.parent; LowerTriangular(mul!(Adjoint(A), tril!(B.data)))) + (A = adjA.parent; LowerTriangular(mul!(adjoint(A), tril!(B.data)))) mul!(transA::Transpose{<:Any,<:Union{LowerTriangular,UnitLowerTriangular}}, B::UpperTriangular) = - (A = transA.parent; UpperTriangular(mul!(Transpose(A), triu!(B.data)))) + (A = transA.parent; UpperTriangular(mul!(transpose(A), triu!(B.data)))) mul!(transA::Transpose{<:Any,<:Union{UpperTriangular,UnitUpperTriangular}}, B::LowerTriangular) = - (A = transA.parent; LowerTriangular(mul!(Transpose(A), tril!(B.data)))) + (A = transA.parent; LowerTriangular(mul!(transpose(A), tril!(B.data)))) ldiv!(adjA::Adjoint{<:Any,<:Union{LowerTriangular,UnitLowerTriangular}}, B::UpperTriangular) = - (A = adjA.parent; UpperTriangular(ldiv!(Adjoint(A), triu!(B.data)))) + (A = adjA.parent; UpperTriangular(ldiv!(adjoint(A), triu!(B.data)))) ldiv!(adjA::Adjoint{<:Any,<:Union{UpperTriangular,UnitUpperTriangular}}, B::LowerTriangular) = - (A = adjA.parent; LowerTriangular(ldiv!(Adjoint(A), tril!(B.data)))) + (A = adjA.parent; LowerTriangular(ldiv!(adjoint(A), tril!(B.data)))) ldiv!(transA::Transpose{<:Any,<:Union{LowerTriangular,UnitLowerTriangular}}, B::UpperTriangular) = - (A = transA.parent; UpperTriangular(ldiv!(Transpose(A), triu!(B.data)))) + (A = transA.parent; UpperTriangular(ldiv!(transpose(A), triu!(B.data)))) ldiv!(transA::Transpose{<:Any,<:Union{UpperTriangular,UnitUpperTriangular}}, B::LowerTriangular) = - (A = transA.parent; LowerTriangular(ldiv!(Transpose(A), tril!(B.data)))) + (A = transA.parent; LowerTriangular(ldiv!(transpose(A), tril!(B.data)))) rdiv!(A::UpperTriangular, B::Union{UpperTriangular,UnitUpperTriangular}) = UpperTriangular(rdiv!(triu!(A.data), B)) @@ -1490,21 +1490,21 @@ rdiv!(A::LowerTriangular, B::Union{LowerTriangular,UnitLowerTriangular}) = LowerTriangular(rdiv!(tril!(A.data), B)) mul!(A::UpperTriangular, adjB::Adjoint{<:Any,<:Union{LowerTriangular,UnitLowerTriangular}}) = - (B = adjB.parent; UpperTriangular(mul!(triu!(A.data), Adjoint(B)))) + (B = adjB.parent; UpperTriangular(mul!(triu!(A.data), adjoint(B)))) mul!(A::LowerTriangular, adjB::Adjoint{<:Any,<:Union{UpperTriangular,UnitUpperTriangular}}) = - (B = adjB.parent; LowerTriangular(mul!(tril!(A.data), Adjoint(B)))) + (B = adjB.parent; LowerTriangular(mul!(tril!(A.data), adjoint(B)))) mul!(A::UpperTriangular, transB::Transpose{<:Any,<:Union{LowerTriangular,UnitLowerTriangular}}) = - (B = transB.parent; UpperTriangular(mul!(triu!(A.data), Transpose(B)))) + (B = transB.parent; UpperTriangular(mul!(triu!(A.data), transpose(B)))) mul!(A::LowerTriangular, transB::Transpose{<:Any,<:Union{UpperTriangular,UnitUpperTriangular}}) = - (B = transB.parent; LowerTriangular(mul!(tril!(A.data), Transpose(B)))) + (B = transB.parent; LowerTriangular(mul!(tril!(A.data), transpose(B)))) rdiv!(A::UpperTriangular, adjB::Adjoint{<:Any,<:Union{LowerTriangular,UnitLowerTriangular}}) = - (B = adjB.parent; UpperTriangular(rdiv!(triu!(A.data), Adjoint(B)))) + (B = adjB.parent; UpperTriangular(rdiv!(triu!(A.data), adjoint(B)))) rdiv!(A::LowerTriangular, adjB::Adjoint{<:Any,<:Union{UpperTriangular,UnitUpperTriangular}}) = - (B = adjB.parent; LowerTriangular(rdiv!(tril!(A.data), Adjoint(B)))) + (B = adjB.parent; LowerTriangular(rdiv!(tril!(A.data), adjoint(B)))) rdiv!(A::UpperTriangular, transB::Transpose{<:Any,<:Union{LowerTriangular,UnitLowerTriangular}}) = - (B = transB.parent; UpperTriangular(rdiv!(triu!(A.data), Transpose(B)))) + (B = transB.parent; UpperTriangular(rdiv!(triu!(A.data), transpose(B)))) rdiv!(A::LowerTriangular, transB::Transpose{<:Any,<:Union{UpperTriangular,UnitUpperTriangular}}) = - (B = transB.parent; LowerTriangular(rdiv!(tril!(A.data), Transpose(B)))) + (B = transB.parent; LowerTriangular(rdiv!(tril!(A.data), transpose(B)))) # Promotion ## Promotion methods in matmul don't apply to triangular multiplication since @@ -1683,14 +1683,14 @@ function *(adjA::Adjoint{<:Any,<:AbstractTriangular}, B::AbstractTriangular) TAB = typeof(zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B))) BB = similar(B, TAB, size(B)) copyto!(BB, B) - mul!(Adjoint(convert(AbstractArray{TAB}, A)), BB) + mul!(adjoint(convert(AbstractArray{TAB}, A)), BB) end function *(transA::Transpose{<:Any,<:AbstractTriangular}, B::AbstractTriangular) A = transA.parent TAB = typeof(zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B))) BB = similar(B, TAB, size(B)) copyto!(BB, B) - mul!(Transpose(convert(AbstractArray{TAB}, A)), BB) + mul!(transpose(convert(AbstractArray{TAB}, A)), BB) end function *(A::AbstractTriangular, adjB::Adjoint{<:Any,<:AbstractTriangular}) @@ -1698,14 +1698,14 @@ function *(A::AbstractTriangular, adjB::Adjoint{<:Any,<:AbstractTriangular}) TAB = typeof(zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B))) AA = similar(A, TAB, size(A)) copyto!(AA, A) - mul!(AA, Adjoint(convert(AbstractArray{TAB}, B))) + mul!(AA, adjoint(convert(AbstractArray{TAB}, B))) end function *(A::AbstractTriangular, transB::Transpose{<:Any,<:AbstractTriangular}) B = transB.parent TAB = typeof(zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B))) AA = similar(A, TAB, size(A)) copyto!(AA, A) - mul!(AA, Transpose(convert(AbstractArray{TAB}, B))) + mul!(AA, transpose(convert(AbstractArray{TAB}, B))) end for mat in (:AbstractVector, :AbstractMatrix) @@ -1722,14 +1722,14 @@ for mat in (:AbstractVector, :AbstractMatrix) TAB = typeof(zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B))) BB = similar(B, TAB, size(B)) copyto!(BB, B) - mul!(Adjoint(convert(AbstractArray{TAB}, A)), BB) + mul!(adjoint(convert(AbstractArray{TAB}, A)), BB) end function *(transA::Transpose{<:Any,<:AbstractTriangular}, B::$mat) A = transA.parent TAB = typeof(zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B))) BB = similar(B, TAB, size(B)) copyto!(BB, B) - mul!(Transpose(convert(AbstractArray{TAB}, A)), BB) + mul!(transpose(convert(AbstractArray{TAB}, A)), BB) end end ### Left division with triangle to the left hence rhs cannot be transposed. No quotients. @@ -1745,14 +1745,14 @@ for mat in (:AbstractVector, :AbstractMatrix) TAB = typeof(zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B))) BB = similar(B, TAB, size(B)) copyto!(BB, B) - ldiv!(Adjoint(convert(AbstractArray{TAB}, A)), BB) + ldiv!(adjoint(convert(AbstractArray{TAB}, A)), BB) end function \(transA::Transpose{<:Any,<:Union{UnitUpperTriangular,UnitLowerTriangular}}, B::$mat) A = transA.parent TAB = typeof(zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B))) BB = similar(B, TAB, size(B)) copyto!(BB, B) - ldiv!(Transpose(convert(AbstractArray{TAB}, A)), BB) + ldiv!(transpose(convert(AbstractArray{TAB}, A)), BB) end end ### Left division with triangle to the left hence rhs cannot be transposed. Quotients. @@ -1768,14 +1768,14 @@ for mat in (:AbstractVector, :AbstractMatrix) TAB = typeof((zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B)))/one(eltype(A))) BB = similar(B, TAB, size(B)) copyto!(BB, B) - ldiv!(Adjoint(convert(AbstractArray{TAB}, A)), BB) + ldiv!(adjoint(convert(AbstractArray{TAB}, A)), BB) end function \(transA::Transpose{<:Any,<:Union{UpperTriangular,LowerTriangular}}, B::$mat) A = transA.parent TAB = typeof((zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B)))/one(eltype(A))) BB = similar(B, TAB, size(B)) copyto!(BB, B) - ldiv!(Transpose(convert(AbstractArray{TAB}, A)), BB) + ldiv!(transpose(convert(AbstractArray{TAB}, A)), BB) end end ### Right division with triangle to the right hence lhs cannot be transposed. No quotients. @@ -1791,14 +1791,14 @@ for mat in (:AbstractVector, :AbstractMatrix) TAB = typeof(zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B))) AA = similar(A, TAB, size(A)) copyto!(AA, A) - rdiv!(AA, Adjoint(convert(AbstractArray{TAB}, B))) + rdiv!(AA, adjoint(convert(AbstractArray{TAB}, B))) end function /(A::$mat, transB::Transpose{<:Any,<:Union{UnitUpperTriangular, UnitLowerTriangular}}) B = transB.parent TAB = typeof(zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B))) AA = similar(A, TAB, size(A)) copyto!(AA, A) - rdiv!(AA, Transpose(convert(AbstractArray{TAB}, B))) + rdiv!(AA, transpose(convert(AbstractArray{TAB}, B))) end end ### Right division with triangle to the right hence lhs cannot be transposed. Quotients. @@ -1814,14 +1814,14 @@ for mat in (:AbstractVector, :AbstractMatrix) TAB = typeof((zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B)))/one(eltype(A))) AA = similar(A, TAB, size(A)) copyto!(AA, A) - rdiv!(AA, Adjoint(convert(AbstractArray{TAB}, B))) + rdiv!(AA, adjoint(convert(AbstractArray{TAB}, B))) end function /(A::$mat, transB::Transpose{<:Any,<:Union{UpperTriangular,LowerTriangular}}) B = transB.parent TAB = typeof((zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B)))/one(eltype(A))) AA = similar(A, TAB, size(A)) copyto!(AA, A) - rdiv!(AA, Transpose(convert(AbstractArray{TAB}, B))) + rdiv!(AA, transpose(convert(AbstractArray{TAB}, B))) end end end @@ -1838,20 +1838,20 @@ function *(A::AbstractMatrix, adjB::Adjoint{<:Any,<:AbstractTriangular}) TAB = typeof(zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B))) AA = similar(A, TAB, size(A)) copyto!(AA, A) - mul!(AA, Adjoint(convert(AbstractArray{TAB}, B))) + mul!(AA, adjoint(convert(AbstractArray{TAB}, B))) end function *(A::AbstractMatrix, transB::Transpose{<:Any,<:AbstractTriangular}) B = transB.parent TAB = typeof(zero(eltype(A))*zero(eltype(B)) + zero(eltype(A))*zero(eltype(B))) AA = similar(A, TAB, size(A)) copyto!(AA, A) - mul!(AA, Transpose(convert(AbstractArray{TAB}, B))) + mul!(AA, transpose(convert(AbstractArray{TAB}, B))) end # ambiguity resolution with definitions in linalg/rowvector.jl -*(v::AdjointAbsVec, A::AbstractTriangular) = Adjoint(Adjoint(A) * v.parent) -*(v::TransposeAbsVec, A::AbstractTriangular) = Transpose(Transpose(A) * v.parent) -*(v::AdjointAbsVec, A::Adjoint{<:Any,<:AbstractTriangular}) = Adjoint(A.parent * v.parent) -*(v::TransposeAbsVec, A::Transpose{<:Any,<:AbstractTriangular}) = Transpose(A.parent * v.parent) +*(v::AdjointAbsVec, A::AbstractTriangular) = adjoint(adjoint(A) * v.parent) +*(v::TransposeAbsVec, A::AbstractTriangular) = transpose(transpose(A) * v.parent) +*(v::AdjointAbsVec, A::Adjoint{<:Any,<:AbstractTriangular}) = adjoint(A.parent * v.parent) +*(v::TransposeAbsVec, A::Transpose{<:Any,<:AbstractTriangular}) = transpose(A.parent * v.parent) # If these are not defined, they will fallback to the versions in matmul.jl @@ -1937,7 +1937,7 @@ function powm!(A0::UpperTriangular{<:BlasFloat}, p::Real) scale!(S, normA0^p) return S end -powm(A::LowerTriangular, p::Real) = copy(Transpose(powm(copy(Transpose(A)), p::Real))) +powm(A::LowerTriangular, p::Real) = copy(transpose(powm(copy(transpose(A)), p::Real))) # Complex matrix logarithm for the upper triangular factor, see: # Al-Mohy and Higham, "Improved inverse scaling and squaring algorithms for @@ -2121,7 +2121,7 @@ function log(A0::UpperTriangular{T}) where T<:BlasFloat return UpperTriangular(Y) end -log(A::LowerTriangular) = copy(Transpose(log(copy(Transpose(A))))) +log(A::LowerTriangular) = copy(transpose(log(copy(transpose(A))))) # Auxiliary functions for matrix logarithm and matrix power @@ -2329,8 +2329,8 @@ function sqrt(A::UnitUpperTriangular{T}) where T end return UnitUpperTriangular(R) end -sqrt(A::LowerTriangular) = copy(Transpose(sqrt(copy(Transpose(A))))) -sqrt(A::UnitLowerTriangular) = copy(Transpose(sqrt(copy(Transpose(A))))) +sqrt(A::LowerTriangular) = copy(transpose(sqrt(copy(transpose(A))))) +sqrt(A::UnitLowerTriangular) = copy(transpose(sqrt(copy(transpose(A))))) # Generic eigensystems eigvals(A::AbstractTriangular) = diag(A) @@ -2392,18 +2392,18 @@ factorize(A::AbstractTriangular) = A *(A::Transpose{<:Any,<:AbstractMatrix}, B::Adjoint{<:Any,<:AbstractTriangular}) = copy(A) * B # disambiguation methods: /(Adjoint of AbsVec, <:AbstractTriangular) -/(u::AdjointAbsVec, A::Union{LowerTriangular,UpperTriangular}) = Adjoint(Adjoint(A) \ u.parent) -/(u::AdjointAbsVec, A::Union{UnitLowerTriangular,UnitUpperTriangular}) = Adjoint(Adjoint(A) \ u.parent) +/(u::AdjointAbsVec, A::Union{LowerTriangular,UpperTriangular}) = adjoint(adjoint(A) \ u.parent) +/(u::AdjointAbsVec, A::Union{UnitLowerTriangular,UnitUpperTriangular}) = adjoint(adjoint(A) \ u.parent) # disambiguation methods: /(Adjoint of AbsVec, Adj/Trans of <:AbstractTriangular) -/(u::AdjointAbsVec, A::Adjoint{<:Any,<:Union{LowerTriangular,UpperTriangular}}) = Adjoint(A.parent \ u.parent) -/(u::AdjointAbsVec, A::Adjoint{<:Any,<:Union{UnitLowerTriangular,UnitUpperTriangular}}) = Adjoint(A.parent \ u.parent) -/(u::AdjointAbsVec, A::Transpose{<:Any,<:Union{LowerTriangular,UpperTriangular}}) = Adjoint(conj(A.parent) \ u.parent) -/(u::AdjointAbsVec, A::Transpose{<:Any,<:Union{UnitLowerTriangular,UnitUpperTriangular}}) = Adjoint(conj(A.parent) \ u.parent) +/(u::AdjointAbsVec, A::Adjoint{<:Any,<:Union{LowerTriangular,UpperTriangular}}) = adjoint(A.parent \ u.parent) +/(u::AdjointAbsVec, A::Adjoint{<:Any,<:Union{UnitLowerTriangular,UnitUpperTriangular}}) = adjoint(A.parent \ u.parent) +/(u::AdjointAbsVec, A::Transpose{<:Any,<:Union{LowerTriangular,UpperTriangular}}) = adjoint(conj(A.parent) \ u.parent) +/(u::AdjointAbsVec, A::Transpose{<:Any,<:Union{UnitLowerTriangular,UnitUpperTriangular}}) = adjoint(conj(A.parent) \ u.parent) # disambiguation methods: /(Transpose of AbsVec, <:AbstractTriangular) -/(u::TransposeAbsVec, A::Union{LowerTriangular,UpperTriangular}) = Transpose(Transpose(A) \ u.parent) -/(u::TransposeAbsVec, A::Union{UnitLowerTriangular,UnitUpperTriangular}) = Transpose(Transpose(A) \ u.parent) +/(u::TransposeAbsVec, A::Union{LowerTriangular,UpperTriangular}) = transpose(transpose(A) \ u.parent) +/(u::TransposeAbsVec, A::Union{UnitLowerTriangular,UnitUpperTriangular}) = transpose(transpose(A) \ u.parent) # disambiguation methods: /(Transpose of AbsVec, Adj/Trans of <:AbstractTriangular) -/(u::TransposeAbsVec, A::Adjoint{<:Any,<:Union{LowerTriangular,UpperTriangular}}) = Transpose(conj(A.parent) \ u.parent) -/(u::TransposeAbsVec, A::Adjoint{<:Any,<:Union{UnitLowerTriangular,UnitUpperTriangular}}) = Transpose(conj(A.parent) \ u.parent) -/(u::TransposeAbsVec, A::Transpose{<:Any,<:Union{LowerTriangular,UpperTriangular}}) = Transpose(A.parent \ u.parent) -/(u::TransposeAbsVec, A::Transpose{<:Any,<:Union{UnitLowerTriangular,UnitUpperTriangular}}) = Transpose(A.parent \ u.parent) +/(u::TransposeAbsVec, A::Adjoint{<:Any,<:Union{LowerTriangular,UpperTriangular}}) = transpose(conj(A.parent) \ u.parent) +/(u::TransposeAbsVec, A::Adjoint{<:Any,<:Union{UnitLowerTriangular,UnitUpperTriangular}}) = transpose(conj(A.parent) \ u.parent) +/(u::TransposeAbsVec, A::Transpose{<:Any,<:Union{LowerTriangular,UpperTriangular}}) = transpose(A.parent \ u.parent) +/(u::TransposeAbsVec, A::Transpose{<:Any,<:Union{UnitLowerTriangular,UnitUpperTriangular}}) = transpose(A.parent \ u.parent) diff --git a/base/sparse/linalg.jl b/base/sparse/linalg.jl index 42727a33a501e..acc9005e50a88 100644 --- a/base/sparse/linalg.jl +++ b/base/sparse/linalg.jl @@ -1,6 +1,5 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license -using Base.LinAlg: Adjoint, Transpose import Base.LinAlg: checksquare ## sparse matrix multiplication @@ -8,17 +7,17 @@ import Base.LinAlg: checksquare *(A::SparseMatrixCSC{TvA,TiA}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} = *(sppromote(A, B)...) *(A::SparseMatrixCSC{TvA,TiA}, transB::Transpose{<:Any,<:SparseMatrixCSC{TvB,TiB}}) where {TvA,TiA,TvB,TiB} = - (B = transB.parent; (pA, pB) = sppromote(A, B); *(pA, Transpose(pB))) + (B = transB.parent; (pA, pB) = sppromote(A, B); *(pA, transpose(pB))) *(A::SparseMatrixCSC{TvA,TiA}, adjB::Adjoint{<:Any,<:SparseMatrixCSC{TvB,TiB}}) where {TvA,TiA,TvB,TiB} = - (B = adjB.parent; (pA, pB) = sppromote(A, B); *(pA, Adjoint(pB))) + (B = adjB.parent; (pA, pB) = sppromote(A, B); *(pA, adjoint(pB))) *(transA::Transpose{<:Any,<:SparseMatrixCSC{TvA,TiA}}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} = - (A = transA.parent; (pA, pB) = sppromote(A, B); *(Transpose(pA), pB)) + (A = transA.parent; (pA, pB) = sppromote(A, B); *(transpose(pA), pB)) *(adjA::Adjoint{<:Any,<:SparseMatrixCSC{TvA,TiA}}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} = - (A = adjA.parent; (pA, pB) = sppromote(A, B); *(Adjoint(pA), pB)) + (A = adjA.parent; (pA, pB) = sppromote(A, B); *(adjoint(pA), pB)) *(transA::Transpose{<:Any,<:SparseMatrixCSC{TvA,TiA}}, transB::Transpose{<:Any,<:SparseMatrixCSC{TvB,TiB}}) where {TvA,TiA,TvB,TiB} = - (A = transA.parent; B = transB.parent; (pA, pB) = sppromote(A, B); *(Transpose(pA), Transpose(pB))) + (A = transA.parent; B = transB.parent; (pA, pB) = sppromote(A, B); *(transpose(pA), transpose(pB))) *(adjA::Adjoint{<:Any,<:SparseMatrixCSC{TvA,TiA}}, adjB::Adjoint{<:Any,<:SparseMatrixCSC{TvB,TiB}}) where {TvA,TiA,TvB,TiB} = - (A = adjA.parent; B = adjB.parent; (pA, pB) = sppromote(A, B); *(Adjoint(pA), Adjoint(pB))) + (A = adjA.parent; B = adjB.parent; (pA, pB) = sppromote(A, B); *(adjoint(pA), adjoint(pB))) function sppromote(A::SparseMatrixCSC{TvA,TiA}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} Tv = promote_type(TvA, TvB) @@ -76,9 +75,9 @@ function mul!(α::Number, adjA::Adjoint{<:Any,<:SparseMatrixCSC}, B::StridedVecO C end *(adjA::Adjoint{<:Any,<:SparseMatrixCSC{TA,S}}, x::StridedVector{Tx}) where {TA,S,Tx} = - (A = adjA.parent; T = promote_type(TA, Tx); mul!(one(T), Adjoint(A), x, zero(T), similar(x, T, A.n))) + (A = adjA.parent; T = promote_type(TA, Tx); mul!(one(T), adjoint(A), x, zero(T), similar(x, T, A.n))) *(adjA::Adjoint{<:Any,<:SparseMatrixCSC{TA,S}}, B::StridedMatrix{Tx}) where {TA,S,Tx} = - (A = adjA.parent; T = promote_type(TA, Tx); mul!(one(T), Adjoint(A), B, zero(T), similar(B, T, (A.n, size(B, 2))))) + (A = adjA.parent; T = promote_type(TA, Tx); mul!(one(T), adjoint(A), B, zero(T), similar(B, T, (A.n, size(B, 2))))) function mul!(α::Number, transA::Transpose{<:Any,<:SparseMatrixCSC}, B::StridedVecOrMat, β::Number, C::StridedVecOrMat) A = transA.parent @@ -102,18 +101,18 @@ function mul!(α::Number, transA::Transpose{<:Any,<:SparseMatrixCSC}, B::Strided C end *(transA::Transpose{<:Any,<:SparseMatrixCSC{TA,S}}, x::StridedVector{Tx}) where {TA,S,Tx} = - (A = transA.parent; T = promote_type(TA, Tx); mul!(one(T), Transpose(A), x, zero(T), similar(x, T, A.n))) + (A = transA.parent; T = promote_type(TA, Tx); mul!(one(T), transpose(A), x, zero(T), similar(x, T, A.n))) *(transA::Transpose{<:Any,<:SparseMatrixCSC{TA,S}}, B::StridedMatrix{Tx}) where {TA,S,Tx} = - (A = transA.parent; T = promote_type(TA, Tx); mul!(one(T), Transpose(A), B, zero(T), similar(B, T, (A.n, size(B, 2))))) + (A = transA.parent; T = promote_type(TA, Tx); mul!(one(T), transpose(A), B, zero(T), similar(B, T, (A.n, size(B, 2))))) # For compatibility with dense multiplication API. Should be deleted when dense multiplication # API is updated to follow BLAS API. mul!(C::StridedVecOrMat, A::SparseMatrixCSC, B::StridedVecOrMat) = mul!(one(eltype(B)), A, B, zero(eltype(C)), C) mul!(C::StridedVecOrMat, adjA::Adjoint{<:Any,<:SparseMatrixCSC}, B::StridedVecOrMat) = - (A = adjA.parent; mul!(one(eltype(B)), Adjoint(A), B, zero(eltype(C)), C)) + (A = adjA.parent; mul!(one(eltype(B)), adjoint(A), B, zero(eltype(C)), C)) mul!(C::StridedVecOrMat, transA::Transpose{<:Any,<:SparseMatrixCSC}, B::StridedVecOrMat) = - (A = transA.parent; mul!(one(eltype(B)), Transpose(A), B, zero(eltype(C)), C)) + (A = transA.parent; mul!(one(eltype(B)), transpose(A), B, zero(eltype(C)), C)) function (*)(X::StridedMatrix{TX}, A::SparseMatrixCSC{TvA,TiA}) where {TX,TvA,TiA} mX, nX = size(X) diff --git a/base/sparse/sparsevector.jl b/base/sparse/sparsevector.jl index 229c602e3fa7a..26c3288bef47e 100644 --- a/base/sparse/sparsevector.jl +++ b/base/sparse/sparsevector.jl @@ -2,7 +2,6 @@ ### Common definitions -using Base.LinAlg: Adjoint, Transpose import Base: scalarmax, scalarmin, sort, find, findnz import Base.LinAlg: promote_to_array_type, promote_to_arrays_ @@ -1612,7 +1611,7 @@ function mul!(α::Number, A::StridedMatrix, x::AbstractSparseVector, β::Number, return y end -# * and mul!(C, Transpose(A), B) +# * and mul!(C, transpose(A), B) function *(transA::Transpose{<:Any,<:StridedMatrix{Ta}}, x::AbstractSparseVector{Tx}) where {Ta,Tx} A = transA.parent @@ -1620,11 +1619,11 @@ function *(transA::Transpose{<:Any,<:StridedMatrix{Ta}}, x::AbstractSparseVector length(x) == m || throw(DimensionMismatch()) Ty = promote_type(Ta, Tx) y = Vector{Ty}(uninitialized, n) - mul!(y, Transpose(A), x) + mul!(y, transpose(A), x) end mul!(y::AbstractVector{Ty}, transA::Transpose{<:Any,<:StridedMatrix}, x::AbstractSparseVector{Tx}) where {Tx,Ty} = - (A = transA.parent; mul!(one(Tx), Transpose(A), x, zero(Ty), y)) + (A = transA.parent; mul!(one(Tx), transpose(A), x, zero(Ty), y)) function mul!(α::Number, transA::Transpose{<:Any,<:StridedMatrix}, x::AbstractSparseVector, β::Number, y::AbstractVector) A = transA.parent @@ -1671,9 +1670,9 @@ function densemv(A::SparseMatrixCSC, x::AbstractSparseVector; trans::Char='N') if trans == 'N' || trans == 'N' mul!(y, A, x) elseif trans == 'T' || trans == 't' - mul!(y, Transpose(A), x) + mul!(y, transpose(A), x) elseif trans == 'C' || trans == 'c' - mul!(y, Adjoint(A), x) + mul!(y, adjoint(A), x) else throw(ArgumentError("Invalid trans character $trans")) end @@ -1716,13 +1715,13 @@ end # * and *(Tranpose(A), B) mul!(y::AbstractVector{Ty}, transA::Transpose{<:Any,<:SparseMatrixCSC}, x::AbstractSparseVector{Tx}) where {Tx,Ty} = - (A = transA.parent; mul!(one(Tx), Transpose(A), x, zero(Ty), y)) + (A = transA.parent; mul!(one(Tx), transpose(A), x, zero(Ty), y)) mul!(α::Number, transA::Transpose{<:Any,<:SparseMatrixCSC}, x::AbstractSparseVector, β::Number, y::AbstractVector) = (A = transA.parent; _At_or_Ac_mul_B!(*, α, A, x, β, y)) mul!(y::AbstractVector{Ty}, adjA::Adjoint{<:Any,<:SparseMatrixCSC}, x::AbstractSparseVector{Tx}) where {Tx,Ty} = - (A = adjA.parent; mul!(one(Tx), Adjoint(A), x, zero(Ty), y)) + (A = adjA.parent; mul!(one(Tx), adjoint(A), x, zero(Ty), y)) mul!(α::Number, adjA::Adjoint{<:Any,<:SparseMatrixCSC}, x::AbstractSparseVector, β::Number, y::AbstractVector) = (A = adjA.parent; _At_or_Ac_mul_B!(dot, α, A, x, β, y)) diff --git a/base/statistics.jl b/base/statistics.jl index c8f24c7ac39d5..80dff1d94e93d 100644 --- a/base/statistics.jl +++ b/base/statistics.jl @@ -330,11 +330,11 @@ unscaled_covzm(x::AbstractMatrix, vardim::Int) = (vardim == 1 ? _conj(x'x) : x * unscaled_covzm(x::AbstractVector, y::AbstractVector) = dot(y, x) unscaled_covzm(x::AbstractVector, y::AbstractMatrix, vardim::Int) = - (vardim == 1 ? *(Transpose(x), _conj(y)) : *(Transpose(x), Transpose(_conj(y)))) + (vardim == 1 ? *(transpose(x), _conj(y)) : *(transpose(x), transpose(_conj(y)))) unscaled_covzm(x::AbstractMatrix, y::AbstractVector, vardim::Int) = - (c = vardim == 1 ? *(Transpose(x), _conj(y)) : x * _conj(y); reshape(c, length(c), 1)) + (c = vardim == 1 ? *(transpose(x), _conj(y)) : x * _conj(y); reshape(c, length(c), 1)) unscaled_covzm(x::AbstractMatrix, y::AbstractMatrix, vardim::Int) = - (vardim == 1 ? *(Transpose(x), _conj(y)) : *(x, Adjoint(y))) + (vardim == 1 ? *(transpose(x), _conj(y)) : *(x, adjoint(y))) # covzm (with centered data) From 6a215396805dbca58934e8d8c4999ebb0c9bba5e Mon Sep 17 00:00:00 2001 From: Sacha Verweij Date: Thu, 4 Jan 2018 11:08:16 -0800 Subject: [PATCH 4/7] Replace Adjoint/Transpose with adjoint/transpose throughout deprecations. --- base/deprecated.jl | 736 ++++++++++++++++++++++----------------------- 1 file changed, 368 insertions(+), 368 deletions(-) diff --git a/base/deprecated.jl b/base/deprecated.jl index 6a5bc7231a811..5907027ec4ee1 100644 --- a/base/deprecated.jl +++ b/base/deprecated.jl @@ -1632,7 +1632,7 @@ end end sum(@inbounds(return rowvec[i]*vec[i]) for i = 1:length(vec)) end - @inline *(rowvec::RowVector, mat::AbstractMatrix) = rvtranspose(Transpose(mat) * rvtranspose(rowvec)) + @inline *(rowvec::RowVector, mat::AbstractMatrix) = rvtranspose(transpose(mat) * rvtranspose(rowvec)) *(::RowVector, ::RowVector) = throw(DimensionMismatch("Cannot multiply two transposed vectors")) @inline *(vec::AbstractVector, rowvec::RowVector) = vec .* rowvec *(vec::AbstractVector, rowvec::AbstractVector) = throw(DimensionMismatch("Cannot multiply two vectors")) @@ -1733,25 +1733,25 @@ end end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/operators.jl, to deprecate -@deprecate Ac_ldiv_Bt(a,b) (\)(Adjoint(a), Transpose(b)) -@deprecate At_ldiv_Bt(a,b) (\)(Transpose(a), Transpose(b)) -@deprecate A_ldiv_Bt(a,b) (\)(a, Transpose(b)) -@deprecate At_ldiv_B(a,b) (\)(Transpose(a), b) -@deprecate Ac_ldiv_Bc(a,b) (\)(Adjoint(a), Adjoint(b)) -@deprecate A_ldiv_Bc(a,b) (\)(a, Adjoint(b)) -@deprecate Ac_ldiv_B(a,b) (\)(Adjoint(a), b) -@deprecate At_rdiv_Bt(a,b) (/)(Transpose(a), Transpose(b)) -@deprecate A_rdiv_Bt(a,b) (/)(a, Transpose(b)) -@deprecate At_rdiv_B(a,b) (/)(Transpose(a), b) -@deprecate Ac_rdiv_Bc(a,b) (/)(Adjoint(a), Adjoint(b)) -@deprecate A_rdiv_Bc(a,b) (/)(a, Adjoint(b)) -@deprecate Ac_rdiv_B(a,b) (/)(Adjoint(a), b) -@deprecate At_mul_Bt(a,b) (*)(Transpose(a), Transpose(b)) -@deprecate A_mul_Bt(a,b) (*)(a, Transpose(b)) -@deprecate At_mul_B(a,b) (*)(Transpose(a), b) -@deprecate Ac_mul_Bc(a,b) (*)(Adjoint(a), Adjoint(b)) -@deprecate A_mul_Bc(a,b) (*)(a, Adjoint(b)) -@deprecate Ac_mul_B(a,b) (*)(Adjoint(a), b) +@deprecate Ac_ldiv_Bt(a,b) (\)(adjoint(a), transpose(b)) +@deprecate At_ldiv_Bt(a,b) (\)(transpose(a), transpose(b)) +@deprecate A_ldiv_Bt(a,b) (\)(a, transpose(b)) +@deprecate At_ldiv_B(a,b) (\)(transpose(a), b) +@deprecate Ac_ldiv_Bc(a,b) (\)(adjoint(a), adjoint(b)) +@deprecate A_ldiv_Bc(a,b) (\)(a, adjoint(b)) +@deprecate Ac_ldiv_B(a,b) (\)(adjoint(a), b) +@deprecate At_rdiv_Bt(a,b) (/)(transpose(a), transpose(b)) +@deprecate A_rdiv_Bt(a,b) (/)(a, transpose(b)) +@deprecate At_rdiv_B(a,b) (/)(transpose(a), b) +@deprecate Ac_rdiv_Bc(a,b) (/)(adjoint(a), adjoint(b)) +@deprecate A_rdiv_Bc(a,b) (/)(a, adjoint(b)) +@deprecate Ac_rdiv_B(a,b) (/)(adjoint(a), b) +@deprecate At_mul_Bt(a,b) (*)(transpose(a), transpose(b)) +@deprecate A_mul_Bt(a,b) (*)(a, transpose(b)) +@deprecate At_mul_B(a,b) (*)(transpose(a), b) +@deprecate Ac_mul_Bc(a,b) (*)(adjoint(a), adjoint(b)) +@deprecate A_mul_Bc(a,b) (*)(a, adjoint(b)) +@deprecate Ac_mul_B(a,b) (*)(adjoint(a), b) # additionally, the following in-place ops were exported from Base export A_mul_B!, A_mul_Bt!, At_mul_B!, At_mul_Bt!, @@ -1805,23 +1805,23 @@ end @deprecate A_mul_B!(C::AbstractVector, A::BiTri, B::AbstractVector) mul!(C, A, B) @deprecate A_mul_B!(C::AbstractMatrix, A::BiTri, B::AbstractVecOrMat) mul!(C, A, B) @deprecate A_mul_B!(C::AbstractVecOrMat, A::BiTri, B::AbstractVecOrMat) mul!(C, A, B) - @deprecate Ac_ldiv_B(A::Bidiagonal, v::RowVector) (\)(Adjoint(A), v) - @deprecate At_ldiv_B(A::Bidiagonal, v::RowVector) (\)(Transpose(A), v) - @deprecate Ac_ldiv_B(A::Bidiagonal{<:Number}, v::RowVector{<:Number}) (\)(Adjoint(A), v) - @deprecate At_ldiv_B(A::Bidiagonal{<:Number}, v::RowVector{<:Number}) (\)(Transpose(A), v) - @deprecate Ac_mul_B(A::Bidiagonal{T}, B::AbstractVector{T}) where {T} (*)(Adjoint(A), B) - @deprecate A_mul_Bc(A::Bidiagonal{T}, B::AbstractVector{T}) where {T} (*)(A, Adjoint(B)) - @deprecate A_rdiv_Bc(A::Bidiagonal{T}, B::AbstractVector{T}) where {T} (/)(A, Adjoint(B)) + @deprecate Ac_ldiv_B(A::Bidiagonal, v::RowVector) (\)(adjoint(A), v) + @deprecate At_ldiv_B(A::Bidiagonal, v::RowVector) (\)(transpose(A), v) + @deprecate Ac_ldiv_B(A::Bidiagonal{<:Number}, v::RowVector{<:Number}) (\)(adjoint(A), v) + @deprecate At_ldiv_B(A::Bidiagonal{<:Number}, v::RowVector{<:Number}) (\)(transpose(A), v) + @deprecate Ac_mul_B(A::Bidiagonal{T}, B::AbstractVector{T}) where {T} (*)(adjoint(A), B) + @deprecate A_mul_Bc(A::Bidiagonal{T}, B::AbstractVector{T}) where {T} (*)(A, adjoint(B)) + @deprecate A_rdiv_Bc(A::Bidiagonal{T}, B::AbstractVector{T}) where {T} (/)(A, adjoint(B)) @deprecate A_ldiv_B!(A::Union{Bidiagonal, AbstractTriangular}, b::AbstractVector) ldiv!(A, b) - @deprecate At_ldiv_B!(A::Bidiagonal, b::AbstractVector) ldiv!(Transpose(A), b) - @deprecate Ac_ldiv_B!(A::Bidiagonal, b::AbstractVector) ldiv!(Adjoint(A), b) + @deprecate At_ldiv_B!(A::Bidiagonal, b::AbstractVector) ldiv!(transpose(A), b) + @deprecate Ac_ldiv_B!(A::Bidiagonal, b::AbstractVector) ldiv!(adjoint(A), b) @deprecate A_ldiv_B!(A::Union{Bidiagonal,AbstractTriangular}, B::AbstractMatrix) ldiv!(A, B) - @deprecate Ac_ldiv_B!(A::Union{Bidiagonal,AbstractTriangular}, B::AbstractMatrix) ldiv!(Adjoint(A), B) - @deprecate At_ldiv_B!(A::Union{Bidiagonal,AbstractTriangular}, B::AbstractMatrix) ldiv!(Transpose(A), B) - @deprecate At_ldiv_B(A::Bidiagonal, B::AbstractVecOrMat) (\)(Transpose(A), B) - @deprecate Ac_ldiv_B(A::Bidiagonal, B::AbstractVecOrMat) ldiv!(Adjoint(A), B) - @deprecate Ac_ldiv_B(A::Bidiagonal{TA}, B::AbstractVecOrMat{TB}) where {TA<:Number,TB<:Number} (\)(Adjoint(A), B) - @deprecate At_ldiv_B(A::Bidiagonal{TA}, B::AbstractVecOrMat{TB}) where {TA<:Number,TB<:Number} (\)(Transpose(A), B) + @deprecate Ac_ldiv_B!(A::Union{Bidiagonal,AbstractTriangular}, B::AbstractMatrix) ldiv!(adjoint(A), B) + @deprecate At_ldiv_B!(A::Union{Bidiagonal,AbstractTriangular}, B::AbstractMatrix) ldiv!(transpose(A), B) + @deprecate At_ldiv_B(A::Bidiagonal, B::AbstractVecOrMat) (\)(transpose(A), B) + @deprecate Ac_ldiv_B(A::Bidiagonal, B::AbstractVecOrMat) ldiv!(adjoint(A), B) + @deprecate Ac_ldiv_B(A::Bidiagonal{TA}, B::AbstractVecOrMat{TB}) where {TA<:Number,TB<:Number} (\)(adjoint(A), B) + @deprecate At_ldiv_B(A::Bidiagonal{TA}, B::AbstractVecOrMat{TB}) where {TA<:Number,TB<:Number} (\)(transpose(A), B) end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/linalg/tridiag.jl, to deprecate @@ -1836,58 +1836,58 @@ end @deprecate A_mul_B!(A::UnitUpperTriangular, D::Diagonal) mul!(A, D) @deprecate A_mul_B!(D::Diagonal, B::UnitLowerTriangular) mul!(D, B) @deprecate A_mul_B!(D::Diagonal, B::UnitUpperTriangular) mul!(D, B) - @deprecate Ac_mul_B(D::Diagonal, B::Diagonal) (*)(Adjoint(D), B) - @deprecate Ac_mul_B(A::AbstractTriangular, D::Diagonal) (*)(Adjoint(A), D) - @deprecate Ac_mul_B(A::AbstractMatrix, D::Diagonal) (*)(Adjoint(A), D) - @deprecate At_mul_B(D::Diagonal, B::Diagonal) (*)(Transpose(D), B) - @deprecate At_mul_B(A::AbstractTriangular, D::Diagonal) (*)(Transpose(A), D) - @deprecate At_mul_B(A::AbstractMatrix, D::Diagonal) (*)(Transpose(A), D) - @deprecate A_mul_Bc(D::Diagonal, B::Diagonal) (*)(D, Adjoint(B)) - @deprecate A_mul_Bc(D::Diagonal, B::AbstractTriangular) (*)(D, Adjoint(B)) - @deprecate A_mul_Bc(D::Diagonal, Q::Union{QRCompactWYQ,QRPackedQ}) (*)(D, Adjoint(Q)) - @deprecate A_mul_Bc(D::Diagonal, A::AbstractMatrix) (*)(D, Adjoint(A)) - @deprecate A_mul_Bt(D::Diagonal, B::Diagonal) (*)(D, Transpose(B)) - @deprecate A_mul_Bt(D::Diagonal, B::AbstractTriangular) (*)(D, Transpose(B)) - @deprecate A_mul_Bt(D::Diagonal, A::AbstractMatrix) (*)(D, Transpose(A)) - @deprecate Ac_mul_Bc(D::Diagonal, B::Diagonal) (*)(Adjoint(D), Adjoint(B)) - @deprecate At_mul_Bt(D::Diagonal, B::Diagonal) (*)(Transpose(D), Transpose(B)) + @deprecate Ac_mul_B(D::Diagonal, B::Diagonal) (*)(adjoint(D), B) + @deprecate Ac_mul_B(A::AbstractTriangular, D::Diagonal) (*)(adjoint(A), D) + @deprecate Ac_mul_B(A::AbstractMatrix, D::Diagonal) (*)(adjoint(A), D) + @deprecate At_mul_B(D::Diagonal, B::Diagonal) (*)(transpose(D), B) + @deprecate At_mul_B(A::AbstractTriangular, D::Diagonal) (*)(transpose(A), D) + @deprecate At_mul_B(A::AbstractMatrix, D::Diagonal) (*)(transpose(A), D) + @deprecate A_mul_Bc(D::Diagonal, B::Diagonal) (*)(D, adjoint(B)) + @deprecate A_mul_Bc(D::Diagonal, B::AbstractTriangular) (*)(D, adjoint(B)) + @deprecate A_mul_Bc(D::Diagonal, Q::Union{QRCompactWYQ,QRPackedQ}) (*)(D, adjoint(Q)) + @deprecate A_mul_Bc(D::Diagonal, A::AbstractMatrix) (*)(D, adjoint(A)) + @deprecate A_mul_Bt(D::Diagonal, B::Diagonal) (*)(D, transpose(B)) + @deprecate A_mul_Bt(D::Diagonal, B::AbstractTriangular) (*)(D, transpose(B)) + @deprecate A_mul_Bt(D::Diagonal, A::AbstractMatrix) (*)(D, transpose(A)) + @deprecate Ac_mul_Bc(D::Diagonal, B::Diagonal) (*)(adjoint(D), adjoint(B)) + @deprecate At_mul_Bt(D::Diagonal, B::Diagonal) (*)(transpose(D), transpose(B)) @deprecate A_mul_B!(A::Diagonal,B::Diagonal) mul!(A, B) - @deprecate At_mul_B!(A::Diagonal,B::Diagonal) mul!(Transpose(A), B) - @deprecate Ac_mul_B!(A::Diagonal,B::Diagonal) mul!(Adjoint(A), B) + @deprecate At_mul_B!(A::Diagonal,B::Diagonal) mul!(transpose(A), B) + @deprecate Ac_mul_B!(A::Diagonal,B::Diagonal) mul!(adjoint(A), B) @deprecate A_mul_B!(A::QRPackedQ, D::Diagonal) mul!(A, D) @deprecate A_mul_B!(A::Diagonal,B::AbstractMatrix) mul!(A, B) - @deprecate At_mul_B!(A::Diagonal,B::AbstractMatrix) mul!(Transpose(A), B) - @deprecate Ac_mul_B!(A::Diagonal,B::AbstractMatrix) mul!(Adjoint(A), B) + @deprecate At_mul_B!(A::Diagonal,B::AbstractMatrix) mul!(transpose(A), B) + @deprecate Ac_mul_B!(A::Diagonal,B::AbstractMatrix) mul!(adjoint(A), B) @deprecate A_mul_B!(A::AbstractMatrix,B::Diagonal) mul!(A, B) - @deprecate A_mul_Bt!(A::AbstractMatrix,B::Diagonal) mul!(A, Transpose(B)) - @deprecate A_mul_Bc!(A::AbstractMatrix,B::Diagonal) mul!(A, Adjoint(B)) + @deprecate A_mul_Bt!(A::AbstractMatrix,B::Diagonal) mul!(A, transpose(B)) + @deprecate A_mul_Bc!(A::AbstractMatrix,B::Diagonal) mul!(A, adjoint(B)) @deprecate A_mul_B!(out::AbstractVector, A::Diagonal, in::AbstractVector) mul!(out, A, in) - @deprecate Ac_mul_B!(out::AbstractVector, A::Diagonal, in::AbstractVector) mul!(out, Adjoint(A), in) - @deprecate At_mul_B!(out::AbstractVector, A::Diagonal, in::AbstractVector) mul!(out, Transpose(A), in) + @deprecate Ac_mul_B!(out::AbstractVector, A::Diagonal, in::AbstractVector) mul!(out, adjoint(A), in) + @deprecate At_mul_B!(out::AbstractVector, A::Diagonal, in::AbstractVector) mul!(out, transpose(A), in) @deprecate A_mul_B!(out::AbstractMatrix, A::Diagonal, in::AbstractMatrix) mul!(out, A, in) - @deprecate Ac_mul_B!(out::AbstractMatrix, A::Diagonal, in::AbstractMatrix) mul!(out, Adjoint(A), in) - @deprecate At_mul_B!(out::AbstractMatrix, A::Diagonal, in::AbstractMatrix) mul!(out, Transpose(A), in) - @deprecate A_mul_Bt(A::Diagonal, B::RealHermSymComplexSym) (*)(A, Transpose(B)) - @deprecate At_mul_B(A::RealHermSymComplexSym, B::Diagonal) (*)(Transpose(A), B) - @deprecate A_mul_Bc(A::Diagonal, B::RealHermSymComplexHerm) (*)(A, Adjoint(B)) - @deprecate Ac_mul_B(A::RealHermSymComplexHerm, B::Diagonal) (*)(Adjoint(A), B) + @deprecate Ac_mul_B!(out::AbstractMatrix, A::Diagonal, in::AbstractMatrix) mul!(out, adjoint(A), in) + @deprecate At_mul_B!(out::AbstractMatrix, A::Diagonal, in::AbstractMatrix) mul!(out, transpose(A), in) + @deprecate A_mul_Bt(A::Diagonal, B::RealHermSymComplexSym) (*)(A, transpose(B)) + @deprecate At_mul_B(A::RealHermSymComplexSym, B::Diagonal) (*)(transpose(A), B) + @deprecate A_mul_Bc(A::Diagonal, B::RealHermSymComplexHerm) (*)(A, adjoint(B)) + @deprecate Ac_mul_B(A::RealHermSymComplexHerm, B::Diagonal) (*)(adjoint(A), B) @deprecate A_ldiv_B!(D::Diagonal{T}, v::AbstractVector{T}) where {T} ldiv!(D, v) @deprecate A_ldiv_B!(D::Diagonal{T}, V::AbstractMatrix{T}) where {T} ldiv!(D, V) - @deprecate Ac_ldiv_B!(D::Diagonal{T}, B::AbstractVecOrMat{T}) where {T} ldiv!(Adjoint(D), B) - @deprecate At_ldiv_B!(D::Diagonal{T}, B::AbstractVecOrMat{T}) where {T} ldiv!(Transpose(D), B) + @deprecate Ac_ldiv_B!(D::Diagonal{T}, B::AbstractVecOrMat{T}) where {T} ldiv!(adjoint(D), B) + @deprecate At_ldiv_B!(D::Diagonal{T}, B::AbstractVecOrMat{T}) where {T} ldiv!(transpose(D), B) @deprecate A_rdiv_B!(A::AbstractMatrix{T}, D::Diagonal{T}) where {T} rdiv!(A, D) - @deprecate A_rdiv_Bc!(A::AbstractMatrix{T}, D::Diagonal{T}) where {T} rdiv!(A, Adjoint(D)) - @deprecate A_rdiv_Bt!(A::AbstractMatrix{T}, D::Diagonal{T}) where {T} rdiv!(A, Transpose(D)) - @deprecate Ac_ldiv_B(F::Factorization, D::Diagonal) (\)(Adjoint(F), D) - @deprecate A_mul_Bt(D::Diagonal, rowvec::RowVector) (*)(D, Transpose(rowvec)) - @deprecate A_mul_Bc(D::Diagonal, rowvec::RowVector) (*)(D, Adjoint(rowvec)) + @deprecate A_rdiv_Bc!(A::AbstractMatrix{T}, D::Diagonal{T}) where {T} rdiv!(A, adjoint(D)) + @deprecate A_rdiv_Bt!(A::AbstractMatrix{T}, D::Diagonal{T}) where {T} rdiv!(A, transpose(D)) + @deprecate Ac_ldiv_B(F::Factorization, D::Diagonal) (\)(adjoint(F), D) + @deprecate A_mul_Bt(D::Diagonal, rowvec::RowVector) (*)(D, transpose(rowvec)) + @deprecate A_mul_Bc(D::Diagonal, rowvec::RowVector) (*)(D, adjoint(rowvec)) @deprecate A_ldiv_B!(D::Diagonal, B::StridedVecOrMat) ldiv!(D, B) end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/linalg/special.jl, to deprecate @eval Base.LinAlg begin - @deprecate A_mul_Bc!(A::AbstractTriangular, B::Union{QRCompactWYQ,QRPackedQ}) mul!(A, Adjoint(B)) - @deprecate A_mul_Bc(A::AbstractTriangular, B::Union{QRCompactWYQ,QRPackedQ}) (*)(A, Adjoint(B)) + @deprecate A_mul_Bc!(A::AbstractTriangular, B::Union{QRCompactWYQ,QRPackedQ}) mul!(A, adjoint(B)) + @deprecate A_mul_Bc(A::AbstractTriangular, B::Union{QRCompactWYQ,QRPackedQ}) (*)(A, adjoint(B)) end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/linalg/bunchkaufman.jl, to deprecate @@ -1909,22 +1909,22 @@ end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/linalg/factorization.jl, to deprecate @eval Base.LinAlg begin - @deprecate Ac_ldiv_B(F::Factorization, B::AbstractVecOrMat) (\)(Adjoint(F), B) + @deprecate Ac_ldiv_B(F::Factorization, B::AbstractVecOrMat) (\)(adjoint(F), B) @deprecate A_ldiv_B!(Y::AbstractVecOrMat, A::Factorization, B::AbstractVecOrMat) ldiv!(Y, A, B) - @deprecate Ac_ldiv_B!(Y::AbstractVecOrMat, A::Factorization, B::AbstractVecOrMat) ldiv!(Y, Adjoint(A), B) - @deprecate At_ldiv_B!(Y::AbstractVecOrMat, A::Factorization, B::AbstractVecOrMat) ldiv!(Y, Transpose(A), B) - @deprecate At_ldiv_B(F::Factorization{<:Real}, B::AbstractVecOrMat) (\)(Transpose(F), B) - @deprecate At_ldiv_B(F::Factorization, B) (\)(Transpose(F), B) + @deprecate Ac_ldiv_B!(Y::AbstractVecOrMat, A::Factorization, B::AbstractVecOrMat) ldiv!(Y, adjoint(A), B) + @deprecate At_ldiv_B!(Y::AbstractVecOrMat, A::Factorization, B::AbstractVecOrMat) ldiv!(Y, transpose(A), B) + @deprecate At_ldiv_B(F::Factorization{<:Real}, B::AbstractVecOrMat) (\)(transpose(F), B) + @deprecate At_ldiv_B(F::Factorization, B) (\)(transpose(F), B) end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/linalg/hessenberg.jl, to deprecate @eval Base.LinAlg begin @deprecate A_mul_B!(Q::HessenbergQ{T}, X::StridedVecOrMat{T}) where {T<:BlasFloat} mul!(Q, X) @deprecate A_mul_B!(X::StridedMatrix{T}, Q::HessenbergQ{T}) where {T<:BlasFloat} mul!(X, Q) - @deprecate Ac_mul_B!(Q::HessenbergQ{T}, X::StridedVecOrMat{T}) where {T<:BlasFloat} mul!(Adjoint(Q), X) - @deprecate A_mul_Bc!(X::StridedMatrix{T}, Q::HessenbergQ{T}) where {T<:BlasFloat} mul!(X, Adjoint(Q)) - @deprecate Ac_mul_B(Q::HessenbergQ{T}, X::StridedVecOrMat{S}) where {T,S} (*)(Adjoint(Q), X) - @deprecate A_mul_Bc(X::StridedVecOrMat{S}, Q::HessenbergQ{T}) where {T,S} (*)(X, Adjoint(Q)) + @deprecate Ac_mul_B!(Q::HessenbergQ{T}, X::StridedVecOrMat{T}) where {T<:BlasFloat} mul!(adjoint(Q), X) + @deprecate A_mul_Bc!(X::StridedMatrix{T}, Q::HessenbergQ{T}) where {T<:BlasFloat} mul!(X, adjoint(Q)) + @deprecate Ac_mul_B(Q::HessenbergQ{T}, X::StridedVecOrMat{S}) where {T,S} (*)(adjoint(Q), X) + @deprecate A_mul_Bc(X::StridedVecOrMat{S}, Q::HessenbergQ{T}) where {T,S} (*)(X, adjoint(Q)) end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/linalg/ldlt.jl, to deprecate @@ -1948,36 +1948,36 @@ end @deprecate A_mul_B!(C::StridedMatrix{T}, A::StridedMatrix{T}, B::Hermitian{T,<:StridedMatrix}) where {T<:BlasReal} mul!(C, A, B) @deprecate A_mul_B!(C::StridedMatrix{T}, A::Hermitian{T,<:StridedMatrix}, B::StridedMatrix{T}) where {T<:BlasComplex} mul!(C, A, B) @deprecate A_mul_B!(C::StridedMatrix{T}, A::StridedMatrix{T}, B::Hermitian{T,<:StridedMatrix}) where {T<:BlasComplex} mul!(C, A, B) - @deprecate At_mul_B(A::RealHermSymComplexSym, B::AbstractVector) (*)(Transpose(A), B) - @deprecate At_mul_B(A::RealHermSymComplexSym, B::AbstractMatrix) (*)(Transpose(A), B) - @deprecate A_mul_Bt(A::AbstractMatrix, B::RealHermSymComplexSym) (*)(A, Transpose(B)) - @deprecate Ac_mul_B(A::RealHermSymComplexHerm, B::AbstractVector) (*)(Adjoint(A), B) - @deprecate Ac_mul_B(A::RealHermSymComplexHerm, B::AbstractMatrix) (*)(Adjoint(A), B) - @deprecate A_mul_Bc(A::AbstractMatrix, B::RealHermSymComplexHerm) (*)(A, Adjoint(B)) - @deprecate A_mul_Bt(A::RowVector, B::RealHermSymComplexSym) (*)(A, Transpose(B)) - @deprecate A_mul_Bc(A::RowVector, B::RealHermSymComplexHerm) (*)(A, Adjoint(B)) - @deprecate At_mul_B(A::RealHermSymComplexSym, B::AbstractTriangular) (*)(Transpose(A), B) - @deprecate A_mul_Bt(A::AbstractTriangular, B::RealHermSymComplexSym) (*)(A, Transpose(B)) - @deprecate Ac_mul_B(A::RealHermSymComplexHerm, B::AbstractTriangular) (*)(Adjoint(A), B) - @deprecate A_mul_Bc(A::AbstractTriangular, B::RealHermSymComplexHerm) (*)(A, Adjoint(B)) + @deprecate At_mul_B(A::RealHermSymComplexSym, B::AbstractVector) (*)(transpose(A), B) + @deprecate At_mul_B(A::RealHermSymComplexSym, B::AbstractMatrix) (*)(transpose(A), B) + @deprecate A_mul_Bt(A::AbstractMatrix, B::RealHermSymComplexSym) (*)(A, transpose(B)) + @deprecate Ac_mul_B(A::RealHermSymComplexHerm, B::AbstractVector) (*)(adjoint(A), B) + @deprecate Ac_mul_B(A::RealHermSymComplexHerm, B::AbstractMatrix) (*)(adjoint(A), B) + @deprecate A_mul_Bc(A::AbstractMatrix, B::RealHermSymComplexHerm) (*)(A, adjoint(B)) + @deprecate A_mul_Bt(A::RowVector, B::RealHermSymComplexSym) (*)(A, transpose(B)) + @deprecate A_mul_Bc(A::RowVector, B::RealHermSymComplexHerm) (*)(A, adjoint(B)) + @deprecate At_mul_B(A::RealHermSymComplexSym, B::AbstractTriangular) (*)(transpose(A), B) + @deprecate A_mul_Bt(A::AbstractTriangular, B::RealHermSymComplexSym) (*)(A, transpose(B)) + @deprecate Ac_mul_B(A::RealHermSymComplexHerm, B::AbstractTriangular) (*)(adjoint(A), B) + @deprecate A_mul_Bc(A::AbstractTriangular, B::RealHermSymComplexHerm) (*)(A, adjoint(B)) end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/linalg/lu.jl, to deprecate @eval Base.LinAlg begin @deprecate A_ldiv_B!(A::LU{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasFloat} ldiv!(A, B) @deprecate A_ldiv_B!(A::LU{<:Any,<:StridedMatrix}, B::StridedVecOrMat) ldiv!(A, B) - @deprecate At_ldiv_B!(A::LU{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasFloat} ldiv!(Transpose(A), B) - @deprecate At_ldiv_B!(A::LU{<:Any,<:StridedMatrix}, B::StridedVecOrMat) ldiv!(Transpose(A), B) - @deprecate Ac_ldiv_B!(F::LU{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:Real} ldiv!(Adjoint(F), B) - @deprecate Ac_ldiv_B!(A::LU{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasComplex} ldiv!(Adjoint(A), B) - @deprecate Ac_ldiv_B!(A::LU{<:Any,<:StridedMatrix}, B::StridedVecOrMat) ldiv!(Adjoint(A), B) - @deprecate At_ldiv_Bt(A::LU{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasFloat} (\)(Transpose(A), Transpose(B)) - @deprecate At_ldiv_Bt(A::LU, B::StridedVecOrMat) (\)(Transpose(A), Transpose(B)) - @deprecate Ac_ldiv_Bc(A::LU{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasComplex} (\)(Adjoint(A), Adjoint(B)) - @deprecate Ac_ldiv_Bc(A::LU, B::StridedVecOrMat) (\)(Adjoint(A), Adjoint(B)) + @deprecate At_ldiv_B!(A::LU{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasFloat} ldiv!(transpose(A), B) + @deprecate At_ldiv_B!(A::LU{<:Any,<:StridedMatrix}, B::StridedVecOrMat) ldiv!(transpose(A), B) + @deprecate Ac_ldiv_B!(F::LU{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:Real} ldiv!(adjoint(F), B) + @deprecate Ac_ldiv_B!(A::LU{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasComplex} ldiv!(adjoint(A), B) + @deprecate Ac_ldiv_B!(A::LU{<:Any,<:StridedMatrix}, B::StridedVecOrMat) ldiv!(adjoint(A), B) + @deprecate At_ldiv_Bt(A::LU{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasFloat} (\)(transpose(A), transpose(B)) + @deprecate At_ldiv_Bt(A::LU, B::StridedVecOrMat) (\)(transpose(A), transpose(B)) + @deprecate Ac_ldiv_Bc(A::LU{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasComplex} (\)(adjoint(A), adjoint(B)) + @deprecate Ac_ldiv_Bc(A::LU, B::StridedVecOrMat) (\)(adjoint(A), adjoint(B)) @deprecate A_ldiv_B!(A::LU{T,Tridiagonal{T,V}}, B::AbstractVecOrMat) where {T,V} ldiv!(A, B) - @deprecate At_ldiv_B!(A::LU{T,Tridiagonal{T,V}}, B::AbstractVecOrMat) where {T,V} (\)(Transpose(A), B) - @deprecate Ac_ldiv_B!(A::LU{T,Tridiagonal{T,V}}, B::AbstractVecOrMat) where {T,V} ldiv!(Adjoint(A), B) + @deprecate At_ldiv_B!(A::LU{T,Tridiagonal{T,V}}, B::AbstractVecOrMat) where {T,V} (\)(transpose(A), B) + @deprecate Ac_ldiv_B!(A::LU{T,Tridiagonal{T,V}}, B::AbstractVecOrMat) where {T,V} ldiv!(adjoint(A), B) end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/linalg/lq.jl, to deprecate @@ -1986,17 +1986,17 @@ end @deprecate A_mul_B!(A::LQ{T}, B::QR{T}) where {T<:BlasFloat} mul!(A, B) @deprecate A_mul_B!(A::QR{T}, B::LQ{T}) where {T<:BlasFloat} mul!(A, B) @deprecate A_mul_B!(A::LQPackedQ{T}, B::StridedVecOrMat{T}) where {T<:BlasFloat} mul!(A, B) - @deprecate Ac_mul_B!(A::LQPackedQ{T}, B::StridedVecOrMat{T}) where {T<:BlasReal} mul!(Adjoint(A), B) - @deprecate Ac_mul_B!(A::LQPackedQ{T}, B::StridedVecOrMat{T}) where {T<:BlasComplex} mul!(Adjoint(A), B) - @deprecate Ac_mul_B(A::LQPackedQ, B::StridedVecOrMat) (*)(Adjoint(A), B) - @deprecate A_mul_Bc(A::LQPackedQ, B::StridedVecOrMat) (*)(A, Adjoint(B)) - @deprecate Ac_mul_Bc(A::LQPackedQ, B::StridedVecOrMat) (*)(Adjoint(A), Adjoint(B)) + @deprecate Ac_mul_B!(A::LQPackedQ{T}, B::StridedVecOrMat{T}) where {T<:BlasReal} mul!(adjoint(A), B) + @deprecate Ac_mul_B!(A::LQPackedQ{T}, B::StridedVecOrMat{T}) where {T<:BlasComplex} mul!(adjoint(A), B) + @deprecate Ac_mul_B(A::LQPackedQ, B::StridedVecOrMat) (*)(adjoint(A), B) + @deprecate A_mul_Bc(A::LQPackedQ, B::StridedVecOrMat) (*)(A, adjoint(B)) + @deprecate Ac_mul_Bc(A::LQPackedQ, B::StridedVecOrMat) (*)(adjoint(A), adjoint(B)) @deprecate A_mul_B!(A::StridedMatrix{T}, B::LQPackedQ{T}) where {T<:BlasFloat} mul!(A, B) - @deprecate A_mul_Bc!(A::StridedMatrix{T}, B::LQPackedQ{T}) where {T<:BlasReal} mul!(A, Adjoint(B)) - @deprecate A_mul_Bc!(A::StridedMatrix{T}, B::LQPackedQ{T}) where {T<:BlasComplex} mul!(A, Adjoint(B)) - @deprecate A_mul_Bc(A::StridedVecOrMat, Q::LQPackedQ) (*)(A, Adjoint(Q)) - @deprecate Ac_mul_Bc(A::StridedMatrix, Q::LQPackedQ) (*)(Adjoint(A), Adjoint(Q)) - @deprecate Ac_mul_B(A::StridedMatrix, Q::LQPackedQ) (*)(Adjoint(A), Q) + @deprecate A_mul_Bc!(A::StridedMatrix{T}, B::LQPackedQ{T}) where {T<:BlasReal} mul!(A, adjoint(B)) + @deprecate A_mul_Bc!(A::StridedMatrix{T}, B::LQPackedQ{T}) where {T<:BlasComplex} mul!(A, adjoint(B)) + @deprecate A_mul_Bc(A::StridedVecOrMat, Q::LQPackedQ) (*)(A, adjoint(Q)) + @deprecate Ac_mul_Bc(A::StridedMatrix, Q::LQPackedQ) (*)(adjoint(A), adjoint(Q)) + @deprecate Ac_mul_B(A::StridedMatrix, Q::LQPackedQ) (*)(adjoint(A), Q) @deprecate A_ldiv_B!(A::LQ{T}, B::StridedVecOrMat{T}) where {T} ldiv!(A, B) end @@ -2005,26 +2005,26 @@ end @deprecate A_mul_B!(A::QRCompactWYQ{T,S}, B::StridedVecOrMat{T}) where {T<:BlasFloat, S<:StridedMatrix} mul!(A, B) @deprecate A_mul_B!(A::QRPackedQ{T,S}, B::StridedVecOrMat{T}) where {T<:BlasFloat, S<:StridedMatrix} mul!(A, B) @deprecate A_mul_B!(A::QRPackedQ, B::AbstractVecOrMat) mul!(A, B) - @deprecate Ac_mul_B!(A::QRCompactWYQ{T,S}, B::StridedVecOrMat{T}) where {T<:BlasReal,S<:StridedMatrix} mul!(Adjoint(A), B) - @deprecate Ac_mul_B!(A::QRCompactWYQ{T,S}, B::StridedVecOrMat{T}) where {T<:BlasComplex,S<:StridedMatrix} mul!(Adjoint(A), B) - @deprecate Ac_mul_B!(A::QRPackedQ{T,S}, B::StridedVecOrMat{T}) where {T<:BlasReal,S<:StridedMatrix} mul!(Adjoint(A), B) - @deprecate Ac_mul_B!(A::QRPackedQ{T,S}, B::StridedVecOrMat{T}) where {T<:BlasComplex,S<:StridedMatrix} mul!(Adjoint(A), B) - @deprecate Ac_mul_B!(A::QRPackedQ, B::AbstractVecOrMat) mul!(Adjoint(A), B) - @deprecate Ac_mul_B(Q::AbstractQ, B::StridedVecOrMat) (*)(Adjoint(Q), B) - @deprecate A_mul_Bc(Q::AbstractQ, B::StridedVecOrMat) (*)(Q, Adjoint(B)) - @deprecate Ac_mul_Bc(Q::AbstractQ, B::StridedVecOrMat) (*)(Adjoint(Q), Adjoint(B)) + @deprecate Ac_mul_B!(A::QRCompactWYQ{T,S}, B::StridedVecOrMat{T}) where {T<:BlasReal,S<:StridedMatrix} mul!(adjoint(A), B) + @deprecate Ac_mul_B!(A::QRCompactWYQ{T,S}, B::StridedVecOrMat{T}) where {T<:BlasComplex,S<:StridedMatrix} mul!(adjoint(A), B) + @deprecate Ac_mul_B!(A::QRPackedQ{T,S}, B::StridedVecOrMat{T}) where {T<:BlasReal,S<:StridedMatrix} mul!(adjoint(A), B) + @deprecate Ac_mul_B!(A::QRPackedQ{T,S}, B::StridedVecOrMat{T}) where {T<:BlasComplex,S<:StridedMatrix} mul!(adjoint(A), B) + @deprecate Ac_mul_B!(A::QRPackedQ, B::AbstractVecOrMat) mul!(adjoint(A), B) + @deprecate Ac_mul_B(Q::AbstractQ, B::StridedVecOrMat) (*)(adjoint(Q), B) + @deprecate A_mul_Bc(Q::AbstractQ, B::StridedVecOrMat) (*)(Q, adjoint(B)) + @deprecate Ac_mul_Bc(Q::AbstractQ, B::StridedVecOrMat) (*)(adjoint(Q), adjoint(B)) @deprecate A_mul_B!(A::StridedVecOrMat{T}, B::QRCompactWYQ{T,S}) where {T<:BlasFloat,S<:StridedMatrix} mul!(A, B) @deprecate A_mul_B!(A::StridedVecOrMat{T}, B::QRPackedQ{T,S}) where {T<:BlasFloat,S<:StridedMatrix} mul!(A, B) @deprecate A_mul_B!(A::StridedMatrix,Q::QRPackedQ) mul!(A, Q) - @deprecate A_mul_Bc!(A::StridedVecOrMat{T}, B::QRCompactWYQ{T}) where {T<:BlasReal} mul!(A, Adjoint(B)) - @deprecate A_mul_Bc!(A::StridedVecOrMat{T}, B::QRCompactWYQ{T}) where {T<:BlasComplex} mul!(A, Adjoint(B)) - @deprecate A_mul_Bc!(A::StridedVecOrMat{T}, B::QRPackedQ{T}) where {T<:BlasReal} mul!(A, Adjoint(B)) - @deprecate A_mul_Bc!(A::StridedVecOrMat{T}, B::QRPackedQ{T}) where {T<:BlasComplex} mul!(A, Adjoint(B)) - @deprecate A_mul_Bc!(A::StridedMatrix,Q::QRPackedQ) mul!(A, Adjoint(Q)) - @deprecate A_mul_Bc(A::StridedMatrix, B::AbstractQ) (*)(A, Adjoint(B)) - @deprecate A_mul_Bc(rowvec::RowVector, B::AbstractQ) (*)(rowvec, Adjoint(B)) - @deprecate Ac_mul_B(A::StridedVecOrMat, Q::AbstractQ) (*)(Adjoint(A), Q) - @deprecate Ac_mul_Bc(A::StridedVecOrMat, Q::AbstractQ) (*)(Adjoint(A), Adjoint(Q)) + @deprecate A_mul_Bc!(A::StridedVecOrMat{T}, B::QRCompactWYQ{T}) where {T<:BlasReal} mul!(A, adjoint(B)) + @deprecate A_mul_Bc!(A::StridedVecOrMat{T}, B::QRCompactWYQ{T}) where {T<:BlasComplex} mul!(A, adjoint(B)) + @deprecate A_mul_Bc!(A::StridedVecOrMat{T}, B::QRPackedQ{T}) where {T<:BlasReal} mul!(A, adjoint(B)) + @deprecate A_mul_Bc!(A::StridedVecOrMat{T}, B::QRPackedQ{T}) where {T<:BlasComplex} mul!(A, adjoint(B)) + @deprecate A_mul_Bc!(A::StridedMatrix,Q::QRPackedQ) mul!(A, adjoint(Q)) + @deprecate A_mul_Bc(A::StridedMatrix, B::AbstractQ) (*)(A, adjoint(B)) + @deprecate A_mul_Bc(rowvec::RowVector, B::AbstractQ) (*)(rowvec, adjoint(B)) + @deprecate Ac_mul_B(A::StridedVecOrMat, Q::AbstractQ) (*)(adjoint(A), Q) + @deprecate Ac_mul_Bc(A::StridedVecOrMat, Q::AbstractQ) (*)(adjoint(A), adjoint(Q)) @deprecate A_ldiv_B!(A::QRCompactWY{T}, b::StridedVector{T}) where {T<:BlasFloat} ldiv!(A, b) @deprecate A_ldiv_B!(A::QRCompactWY{T}, B::StridedMatrix{T}) where {T<:BlasFloat} ldiv!(A, B) @deprecate A_ldiv_B!(A::QRPivoted{T}, B::StridedMatrix{T}, rcond::Real) where {T<:BlasFloat} ldiv!(A, B, rcond) @@ -2038,143 +2038,143 @@ end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/linalg/matmul.jl, to deprecate @eval Base.LinAlg begin - @deprecate Ac_mul_Bc(A::AbstractMatrix{T}, B::AbstractMatrix{S}) where {T,S} (*)(Adjoint(A), Adjoint(B)) - @deprecate Ac_mul_Bc!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasFloat} mul!(C, Adjoint(A), Adjoint(B)) - @deprecate Ac_mul_Bc!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, Adjoint(A), Adjoint(B)) - @deprecate Ac_mul_Bt!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, Adjoint(A), Transpose(B)) - @deprecate A_mul_Bc!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasComplex} mul!(C, A, Adjoint(B)) - @deprecate A_mul_Bc!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, A, Adjoint(B)) - @deprecate A_mul_Bc(A::AbstractMatrix{T}, B::AbstractMatrix{S}) where {T,S} (*)(A, Adjoint(B)) - @deprecate A_mul_Bc(A::StridedMatrix{<:BlasFloat}, B::StridedMatrix{<:BlasReal}) (*)(A, Adjoint(B)) - @deprecate A_mul_Bc!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{<:BlasReal}) where {T<:BlasFloat} mul!(C, A, Adjoint(B)) - @deprecate Ac_mul_B!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasComplex} mul!(C, Adjoint(A), B) - @deprecate Ac_mul_B!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, Adjoint(A), B) - @deprecate Ac_mul_B(A::AbstractMatrix{T}, B::AbstractMatrix{S}) where {T,S} (*)(Adjoint(A), B) - @deprecate Ac_mul_B(A::StridedMatrix{T}, B::StridedMatrix{T}) where {T<:BlasReal} (*)(Adjoint(A), B) - @deprecate Ac_mul_B!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasReal} mul!(C, Adjoint(A), B) - @deprecate At_mul_Bt!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasFloat} mul!(C, Transpose(A), Transpose(B)) - @deprecate At_mul_Bt!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, Transpose(A), Transpose(B)) - @deprecate At_mul_Bt(A::AbstractMatrix{T}, B::AbstractVecOrMat{S}) where {T,S} (*)(Transpose(A), Transpose(B)) - @deprecate A_mul_Bt!(C::AbstractVecOrMat, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, A, Transpose(B)) - @deprecate A_mul_Bt!(C::StridedMatrix{Complex{Float32}}, A::StridedVecOrMat{Complex{Float32}}, B::StridedVecOrMat{Float32}) mul!(C, A, Transpose(B)) - @deprecate A_mul_Bt!(C::StridedMatrix{Complex{Float64}}, A::StridedVecOrMat{Complex{Float64}}, B::StridedVecOrMat{Float64}) mul!(C, A, Transpose(B)) - @deprecate A_mul_Bt!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasFloat} mul!(C, A, Transpose(B)) - @deprecate A_mul_Bt(A::AbstractMatrix{T}, B::AbstractMatrix{S}) where {T,S} (*)(A, Transpose(B)) - @deprecate At_mul_B!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasFloat} mul!(C, Transpose(A), B) - @deprecate At_mul_B!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, Transpose(A), B) - @deprecate At_mul_B(A::AbstractMatrix{T}, B::AbstractMatrix{S}) where {T,S} (*)(Transpose(A), B) + @deprecate Ac_mul_Bc(A::AbstractMatrix{T}, B::AbstractMatrix{S}) where {T,S} (*)(adjoint(A), adjoint(B)) + @deprecate Ac_mul_Bc!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasFloat} mul!(C, adjoint(A), adjoint(B)) + @deprecate Ac_mul_Bc!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, adjoint(A), adjoint(B)) + @deprecate Ac_mul_Bt!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, adjoint(A), transpose(B)) + @deprecate A_mul_Bc!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasComplex} mul!(C, A, adjoint(B)) + @deprecate A_mul_Bc!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, A, adjoint(B)) + @deprecate A_mul_Bc(A::AbstractMatrix{T}, B::AbstractMatrix{S}) where {T,S} (*)(A, adjoint(B)) + @deprecate A_mul_Bc(A::StridedMatrix{<:BlasFloat}, B::StridedMatrix{<:BlasReal}) (*)(A, adjoint(B)) + @deprecate A_mul_Bc!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{<:BlasReal}) where {T<:BlasFloat} mul!(C, A, adjoint(B)) + @deprecate Ac_mul_B!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasComplex} mul!(C, adjoint(A), B) + @deprecate Ac_mul_B!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, adjoint(A), B) + @deprecate Ac_mul_B(A::AbstractMatrix{T}, B::AbstractMatrix{S}) where {T,S} (*)(adjoint(A), B) + @deprecate Ac_mul_B(A::StridedMatrix{T}, B::StridedMatrix{T}) where {T<:BlasReal} (*)(adjoint(A), B) + @deprecate Ac_mul_B!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasReal} mul!(C, adjoint(A), B) + @deprecate At_mul_Bt!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasFloat} mul!(C, transpose(A), transpose(B)) + @deprecate At_mul_Bt!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, transpose(A), transpose(B)) + @deprecate At_mul_Bt(A::AbstractMatrix{T}, B::AbstractVecOrMat{S}) where {T,S} (*)(transpose(A), transpose(B)) + @deprecate A_mul_Bt!(C::AbstractVecOrMat, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, A, transpose(B)) + @deprecate A_mul_Bt!(C::StridedMatrix{Complex{Float32}}, A::StridedVecOrMat{Complex{Float32}}, B::StridedVecOrMat{Float32}) mul!(C, A, transpose(B)) + @deprecate A_mul_Bt!(C::StridedMatrix{Complex{Float64}}, A::StridedVecOrMat{Complex{Float64}}, B::StridedVecOrMat{Float64}) mul!(C, A, transpose(B)) + @deprecate A_mul_Bt!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasFloat} mul!(C, A, transpose(B)) + @deprecate A_mul_Bt(A::AbstractMatrix{T}, B::AbstractMatrix{S}) where {T,S} (*)(A, transpose(B)) + @deprecate At_mul_B!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasFloat} mul!(C, transpose(A), B) + @deprecate At_mul_B!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, transpose(A), B) + @deprecate At_mul_B(A::AbstractMatrix{T}, B::AbstractMatrix{S}) where {T,S} (*)(transpose(A), B) @deprecate A_mul_B!(C::AbstractMatrix, A::AbstractVecOrMat, B::AbstractVecOrMat) mul!(C, A, B) @deprecate A_mul_B!(C::StridedMatrix{Complex{Float32}}, A::StridedVecOrMat{Complex{Float32}}, B::StridedVecOrMat{Float32}) mul!(C, A, B) @deprecate A_mul_B!(C::StridedMatrix{Complex{Float64}}, A::StridedVecOrMat{Complex{Float64}}, B::StridedVecOrMat{Float64}) mul!(C, A, B) @deprecate A_mul_B!(C::StridedMatrix{T}, A::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasFloat} mul!(C, A, B) - @deprecate Ac_mul_B!(y::StridedVector{T}, A::StridedVecOrMat{T}, x::StridedVector{T}) where {T<:BlasReal} mul!(y, Adjoint(A), x) - @deprecate Ac_mul_B!(y::StridedVector{T}, A::StridedVecOrMat{T}, x::StridedVector{T}) where {T<:BlasComplex} mul!(y, Adjoint(A), x) - @deprecate Ac_mul_B!(y::AbstractVector, A::AbstractVecOrMat, x::AbstractVector) mul!(y, Adjoint(A), x) - @deprecate Ac_mul_B(A::StridedMatrix{T}, x::StridedVector{S}) where {T<:BlasFloat,S} (*)(Adjoint(A), x) - @deprecate Ac_mul_B(A::AbstractMatrix{T}, x::AbstractVector{S}) where {T,S} (*)(Adjoint(A), x) - @deprecate At_mul_B(A::StridedMatrix{T}, x::StridedVector{S}) where {T<:BlasFloat,S} (*)(Transpose(A), x) - @deprecate At_mul_B(A::AbstractMatrix{T}, x::AbstractVector{S}) where {T,S} (*)(Transpose(A), x) - @deprecate At_mul_B!(y::StridedVector{T}, A::StridedVecOrMat{T}, x::StridedVector{T}) where {T<:BlasFloat} mul!(y, Transpose(A), x) - @deprecate At_mul_B!(y::AbstractVector, A::AbstractVecOrMat, x::AbstractVector) mul!(y, Transpose(A), x) + @deprecate Ac_mul_B!(y::StridedVector{T}, A::StridedVecOrMat{T}, x::StridedVector{T}) where {T<:BlasReal} mul!(y, adjoint(A), x) + @deprecate Ac_mul_B!(y::StridedVector{T}, A::StridedVecOrMat{T}, x::StridedVector{T}) where {T<:BlasComplex} mul!(y, adjoint(A), x) + @deprecate Ac_mul_B!(y::AbstractVector, A::AbstractVecOrMat, x::AbstractVector) mul!(y, adjoint(A), x) + @deprecate Ac_mul_B(A::StridedMatrix{T}, x::StridedVector{S}) where {T<:BlasFloat,S} (*)(adjoint(A), x) + @deprecate Ac_mul_B(A::AbstractMatrix{T}, x::AbstractVector{S}) where {T,S} (*)(adjoint(A), x) + @deprecate At_mul_B(A::StridedMatrix{T}, x::StridedVector{S}) where {T<:BlasFloat,S} (*)(transpose(A), x) + @deprecate At_mul_B(A::AbstractMatrix{T}, x::AbstractVector{S}) where {T,S} (*)(transpose(A), x) + @deprecate At_mul_B!(y::StridedVector{T}, A::StridedVecOrMat{T}, x::StridedVector{T}) where {T<:BlasFloat} mul!(y, transpose(A), x) + @deprecate At_mul_B!(y::AbstractVector, A::AbstractVecOrMat, x::AbstractVector) mul!(y, transpose(A), x) @deprecate A_mul_B!(y::AbstractVector, A::AbstractVecOrMat, x::AbstractVector) mul!(y, A, x) @deprecate A_mul_B!(y::StridedVector{Complex{Float32}}, A::StridedVecOrMat{Complex{Float32}}, x::StridedVector{Float32}) mul!(y, A, x) @deprecate A_mul_B!(y::StridedVector{Complex{Float64}}, A::StridedVecOrMat{Complex{Float64}}, x::StridedVector{Float64}) mul!(y, A, x) @deprecate A_mul_B!(y::StridedVector{T}, A::StridedVecOrMat{T}, x::StridedVector{T}) where {T<:BlasFloat} mul!(y, A, x) - @deprecate A_mul_Bt(a::AbstractVector, B::AbstractMatrix) (*)(a, Transpose(B)) - @deprecate A_mul_Bt(A::AbstractMatrix, b::AbstractVector) (*)(A, Transpose(b)) - @deprecate A_mul_Bc(a::AbstractVector, B::AbstractMatrix) (*)(a, Adjoint(B)) - @deprecate A_mul_Bc(A::AbstractMatrix, b::AbstractVector) (*)(A, Adjoint(b)) - @deprecate At_mul_B(x::StridedVector{T}, y::StridedVector{T}) where {T<:BlasComplex} (*)(Transpose(x), y) + @deprecate A_mul_Bt(a::AbstractVector, B::AbstractMatrix) (*)(a, transpose(B)) + @deprecate A_mul_Bt(A::AbstractMatrix, b::AbstractVector) (*)(A, transpose(b)) + @deprecate A_mul_Bc(a::AbstractVector, B::AbstractMatrix) (*)(a, adjoint(B)) + @deprecate A_mul_Bc(A::AbstractMatrix, b::AbstractVector) (*)(A, adjoint(b)) + @deprecate At_mul_B(x::StridedVector{T}, y::StridedVector{T}) where {T<:BlasComplex} (*)(transpose(x), y) end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/linalg/triangular.jl, to deprecate @eval Base.LinAlg begin - @deprecate A_mul_Bc(A::AbstractTriangular, B::AbstractTriangular) (*)(A, Adjoint(B)) - @deprecate A_mul_Bt(A::AbstractTriangular, B::AbstractTriangular) (*)(A, Transpose(B)) - @deprecate Ac_mul_B(A::AbstractTriangular, B::AbstractTriangular) (*)(Adjoint(A), B) - @deprecate At_mul_B(A::AbstractTriangular, B::AbstractTriangular) (*)(Transpose(A), B) - @deprecate Ac_ldiv_B(A::Union{UpperTriangular,LowerTriangular}, B::RowVector) (\)(Adjoint(A), B) - @deprecate Ac_ldiv_B(A::Union{UnitUpperTriangular,UnitLowerTriangular}, B::RowVector) (\)(Adjoint(A), B) - @deprecate At_ldiv_B(A::Union{UpperTriangular,LowerTriangular}, B::RowVector) (\)(Transpose(A), B) - @deprecate At_ldiv_B(A::Union{UnitUpperTriangular,UnitLowerTriangular}, B::RowVector) (\)(Transpose(A), B) - @deprecate A_rdiv_Bc(rowvec::RowVector, A::Union{UpperTriangular,LowerTriangular}) (/)(rowvec, Adjoint(A)) - @deprecate A_rdiv_Bc(rowvec::RowVector, A::Union{UnitUpperTriangular,UnitLowerTriangular}) (/)(rowvec, Adjoint(A)) - @deprecate A_rdiv_Bt(rowvec::RowVector, A::Union{UpperTriangular,LowerTriangular}) (/)(rowvec, Transpose(A)) - @deprecate A_rdiv_Bt(rowvec::RowVector, A::Union{UnitUpperTriangular,UnitLowerTriangular}) (/)(rowvec, Transpose(A)) - @deprecate A_mul_Bt(rowvec::RowVector, A::AbstractTriangular) (*)(rowvec, Transpose(A)) - @deprecate A_mul_Bt(A::AbstractTriangular, rowvec::RowVector) (*)(A, Transpose(rowvec)) - @deprecate At_mul_Bt(A::AbstractTriangular, rowvec::RowVector) (*)(Transpose(A), Transpose(rowvec)) - @deprecate A_mul_Bc(rowvec::RowVector, A::AbstractTriangular) (*)(rowvec, Adjoint(A)) - @deprecate A_mul_Bc(A::AbstractTriangular, rowvec::RowVector) (*)(A, Adjoint(rowvec)) - @deprecate Ac_mul_Bc(A::AbstractTriangular, rowvec::RowVector) (*)(Adjoint(A), Adjoint(rowvec)) - @deprecate Ac_mul_B(A::AbstractMatrix, B::AbstractTriangular) (*)(Adjoint(A), B) - @deprecate At_mul_B(A::AbstractMatrix, B::AbstractTriangular) (*)(Transpose(A), B) - @deprecate A_mul_Bc(A::AbstractTriangular, B::AbstractMatrix) (*)(A, Adjoint(B)) - @deprecate A_mul_Bt(A::AbstractTriangular, B::AbstractMatrix) (*)(A, Transpose(B)) - @deprecate Ac_mul_Bc(A::AbstractTriangular, B::AbstractTriangular) (*)(Adjoint(A), Adjoint(B)) - @deprecate Ac_mul_Bc(A::AbstractTriangular, B::AbstractMatrix) (*)(Adjoint(A), Adjoint(B)) - @deprecate Ac_mul_Bc(A::AbstractMatrix, B::AbstractTriangular) (*)(Adjoint(A), Adjoint(B)) - @deprecate At_mul_Bt(A::AbstractTriangular, B::AbstractTriangular) (*)(Transpose(A), Transpose(B)) - @deprecate At_mul_Bt(A::AbstractTriangular, B::AbstractMatrix) (*)(Transpose(A), Transpose(B)) - @deprecate At_mul_Bt(A::AbstractMatrix, B::AbstractTriangular) (*)(Transpose(A), Transpose(B)) - @deprecate A_mul_Bc!(A::UpperTriangular, B::Union{LowerTriangular,UnitLowerTriangular}) mul!(A, Adjoint(B)) - @deprecate A_mul_Bc!(A::LowerTriangular, B::Union{UpperTriangular,UnitUpperTriangular}) mul!(A, Adjoint(B)) - @deprecate A_mul_Bt!(A::UpperTriangular, B::Union{LowerTriangular,UnitLowerTriangular}) mul!(A, Transpose(B)) - @deprecate A_mul_Bt!(A::LowerTriangular, B::Union{UpperTriangular,UnitUpperTriangular}) mul!(A, Transpose(B)) - @deprecate A_rdiv_Bc!(A::UpperTriangular, B::Union{LowerTriangular,UnitLowerTriangular}) rdiv!(A, Adjoint(B)) - @deprecate A_rdiv_Bc!(A::LowerTriangular, B::Union{UpperTriangular,UnitUpperTriangular}) rdiv!(A, Adjoint(B)) - @deprecate A_rdiv_Bt!(A::UpperTriangular, B::Union{LowerTriangular,UnitLowerTriangular}) rdiv!(A, Transpose(B)) - @deprecate A_rdiv_Bt!(A::LowerTriangular, B::Union{UpperTriangular,UnitUpperTriangular}) rdiv!(A, Transpose(B)) + @deprecate A_mul_Bc(A::AbstractTriangular, B::AbstractTriangular) (*)(A, adjoint(B)) + @deprecate A_mul_Bt(A::AbstractTriangular, B::AbstractTriangular) (*)(A, transpose(B)) + @deprecate Ac_mul_B(A::AbstractTriangular, B::AbstractTriangular) (*)(adjoint(A), B) + @deprecate At_mul_B(A::AbstractTriangular, B::AbstractTriangular) (*)(transpose(A), B) + @deprecate Ac_ldiv_B(A::Union{UpperTriangular,LowerTriangular}, B::RowVector) (\)(adjoint(A), B) + @deprecate Ac_ldiv_B(A::Union{UnitUpperTriangular,UnitLowerTriangular}, B::RowVector) (\)(adjoint(A), B) + @deprecate At_ldiv_B(A::Union{UpperTriangular,LowerTriangular}, B::RowVector) (\)(transpose(A), B) + @deprecate At_ldiv_B(A::Union{UnitUpperTriangular,UnitLowerTriangular}, B::RowVector) (\)(transpose(A), B) + @deprecate A_rdiv_Bc(rowvec::RowVector, A::Union{UpperTriangular,LowerTriangular}) (/)(rowvec, adjoint(A)) + @deprecate A_rdiv_Bc(rowvec::RowVector, A::Union{UnitUpperTriangular,UnitLowerTriangular}) (/)(rowvec, adjoint(A)) + @deprecate A_rdiv_Bt(rowvec::RowVector, A::Union{UpperTriangular,LowerTriangular}) (/)(rowvec, transpose(A)) + @deprecate A_rdiv_Bt(rowvec::RowVector, A::Union{UnitUpperTriangular,UnitLowerTriangular}) (/)(rowvec, transpose(A)) + @deprecate A_mul_Bt(rowvec::RowVector, A::AbstractTriangular) (*)(rowvec, transpose(A)) + @deprecate A_mul_Bt(A::AbstractTriangular, rowvec::RowVector) (*)(A, transpose(rowvec)) + @deprecate At_mul_Bt(A::AbstractTriangular, rowvec::RowVector) (*)(transpose(A), transpose(rowvec)) + @deprecate A_mul_Bc(rowvec::RowVector, A::AbstractTriangular) (*)(rowvec, adjoint(A)) + @deprecate A_mul_Bc(A::AbstractTriangular, rowvec::RowVector) (*)(A, adjoint(rowvec)) + @deprecate Ac_mul_Bc(A::AbstractTriangular, rowvec::RowVector) (*)(adjoint(A), adjoint(rowvec)) + @deprecate Ac_mul_B(A::AbstractMatrix, B::AbstractTriangular) (*)(adjoint(A), B) + @deprecate At_mul_B(A::AbstractMatrix, B::AbstractTriangular) (*)(transpose(A), B) + @deprecate A_mul_Bc(A::AbstractTriangular, B::AbstractMatrix) (*)(A, adjoint(B)) + @deprecate A_mul_Bt(A::AbstractTriangular, B::AbstractMatrix) (*)(A, transpose(B)) + @deprecate Ac_mul_Bc(A::AbstractTriangular, B::AbstractTriangular) (*)(adjoint(A), adjoint(B)) + @deprecate Ac_mul_Bc(A::AbstractTriangular, B::AbstractMatrix) (*)(adjoint(A), adjoint(B)) + @deprecate Ac_mul_Bc(A::AbstractMatrix, B::AbstractTriangular) (*)(adjoint(A), adjoint(B)) + @deprecate At_mul_Bt(A::AbstractTriangular, B::AbstractTriangular) (*)(transpose(A), transpose(B)) + @deprecate At_mul_Bt(A::AbstractTriangular, B::AbstractMatrix) (*)(transpose(A), transpose(B)) + @deprecate At_mul_Bt(A::AbstractMatrix, B::AbstractTriangular) (*)(transpose(A), transpose(B)) + @deprecate A_mul_Bc!(A::UpperTriangular, B::Union{LowerTriangular,UnitLowerTriangular}) mul!(A, adjoint(B)) + @deprecate A_mul_Bc!(A::LowerTriangular, B::Union{UpperTriangular,UnitUpperTriangular}) mul!(A, adjoint(B)) + @deprecate A_mul_Bt!(A::UpperTriangular, B::Union{LowerTriangular,UnitLowerTriangular}) mul!(A, transpose(B)) + @deprecate A_mul_Bt!(A::LowerTriangular, B::Union{UpperTriangular,UnitUpperTriangular}) mul!(A, transpose(B)) + @deprecate A_rdiv_Bc!(A::UpperTriangular, B::Union{LowerTriangular,UnitLowerTriangular}) rdiv!(A, adjoint(B)) + @deprecate A_rdiv_Bc!(A::LowerTriangular, B::Union{UpperTriangular,UnitUpperTriangular}) rdiv!(A, adjoint(B)) + @deprecate A_rdiv_Bt!(A::UpperTriangular, B::Union{LowerTriangular,UnitLowerTriangular}) rdiv!(A, transpose(B)) + @deprecate A_rdiv_Bt!(A::LowerTriangular, B::Union{UpperTriangular,UnitUpperTriangular}) rdiv!(A, transpose(B)) @deprecate A_rdiv_B!(A::UpperTriangular, B::Union{UpperTriangular,UnitUpperTriangular}) rdiv!(A, B) @deprecate A_rdiv_B!(A::LowerTriangular, B::Union{LowerTriangular,UnitLowerTriangular}) rdiv!(A, B) - @deprecate Ac_mul_B!(A::Union{LowerTriangular,UnitLowerTriangular}, B::UpperTriangular) mul!(Adjoint(A), B) - @deprecate Ac_mul_B!(A::Union{UpperTriangular,UnitUpperTriangular}, B::LowerTriangular) mul!(Adjoint(A), B) - @deprecate At_mul_B!(A::Union{LowerTriangular,UnitLowerTriangular}, B::UpperTriangular) mul!(Transpose(A), B) - @deprecate At_mul_B!(A::Union{UpperTriangular,UnitUpperTriangular}, B::LowerTriangular) mul!(Transpose(A), B) - @deprecate Ac_ldiv_B!(A::Union{LowerTriangular,UnitLowerTriangular}, B::UpperTriangular) ldiv!(Adjoint(A), B) - @deprecate Ac_ldiv_B!(A::Union{UpperTriangular,UnitUpperTriangular}, B::LowerTriangular) ldiv!(Adjoint(A), B) - @deprecate At_ldiv_B!(A::Union{LowerTriangular,UnitLowerTriangular}, B::UpperTriangular) ldiv!(Transpose(A), B) - @deprecate At_ldiv_B!(A::Union{UpperTriangular,UnitUpperTriangular}, B::LowerTriangular) ldiv!(Transpose(A), B) - @deprecate A_rdiv_Bt!(A::StridedMatrix, B::UnitLowerTriangular) rdiv!(A, Transpose(B)) - @deprecate A_rdiv_Bt!(A::StridedMatrix, B::LowerTriangular) rdiv!(A, Transpose(B)) - @deprecate A_rdiv_Bt!(A::StridedMatrix, B::UnitUpperTriangular) rdiv!(A, Transpose(B)) - @deprecate A_rdiv_Bt!(A::StridedMatrix, B::UpperTriangular) rdiv!(A, Transpose(B)) - @deprecate A_rdiv_Bc!(A::StridedMatrix, B::UnitLowerTriangular) rdiv!(A, Adjoint(B)) - @deprecate A_rdiv_Bc!(A::StridedMatrix, B::LowerTriangular) rdiv!(A, Adjoint(B)) - @deprecate A_rdiv_Bc!(A::StridedMatrix, B::UnitUpperTriangular) rdiv!(A, Adjoint(B)) - @deprecate A_rdiv_Bc!(A::StridedMatrix, B::UpperTriangular) rdiv!(A, Adjoint(B)) + @deprecate Ac_mul_B!(A::Union{LowerTriangular,UnitLowerTriangular}, B::UpperTriangular) mul!(adjoint(A), B) + @deprecate Ac_mul_B!(A::Union{UpperTriangular,UnitUpperTriangular}, B::LowerTriangular) mul!(adjoint(A), B) + @deprecate At_mul_B!(A::Union{LowerTriangular,UnitLowerTriangular}, B::UpperTriangular) mul!(transpose(A), B) + @deprecate At_mul_B!(A::Union{UpperTriangular,UnitUpperTriangular}, B::LowerTriangular) mul!(transpose(A), B) + @deprecate Ac_ldiv_B!(A::Union{LowerTriangular,UnitLowerTriangular}, B::UpperTriangular) ldiv!(adjoint(A), B) + @deprecate Ac_ldiv_B!(A::Union{UpperTriangular,UnitUpperTriangular}, B::LowerTriangular) ldiv!(adjoint(A), B) + @deprecate At_ldiv_B!(A::Union{LowerTriangular,UnitLowerTriangular}, B::UpperTriangular) ldiv!(transpose(A), B) + @deprecate At_ldiv_B!(A::Union{UpperTriangular,UnitUpperTriangular}, B::LowerTriangular) ldiv!(transpose(A), B) + @deprecate A_rdiv_Bt!(A::StridedMatrix, B::UnitLowerTriangular) rdiv!(A, transpose(B)) + @deprecate A_rdiv_Bt!(A::StridedMatrix, B::LowerTriangular) rdiv!(A, transpose(B)) + @deprecate A_rdiv_Bt!(A::StridedMatrix, B::UnitUpperTriangular) rdiv!(A, transpose(B)) + @deprecate A_rdiv_Bt!(A::StridedMatrix, B::UpperTriangular) rdiv!(A, transpose(B)) + @deprecate A_rdiv_Bc!(A::StridedMatrix, B::UnitLowerTriangular) rdiv!(A, adjoint(B)) + @deprecate A_rdiv_Bc!(A::StridedMatrix, B::LowerTriangular) rdiv!(A, adjoint(B)) + @deprecate A_rdiv_Bc!(A::StridedMatrix, B::UnitUpperTriangular) rdiv!(A, adjoint(B)) + @deprecate A_rdiv_Bc!(A::StridedMatrix, B::UpperTriangular) rdiv!(A, adjoint(B)) @deprecate A_rdiv_B!(A::StridedMatrix, B::UnitLowerTriangular) rdiv!(A, B) @deprecate A_rdiv_B!(A::StridedMatrix, B::LowerTriangular) rdiv!(A, B) @deprecate A_rdiv_B!(A::StridedMatrix, B::UnitUpperTriangular) rdiv!(A, B) @deprecate A_rdiv_B!(A::StridedMatrix, B::UpperTriangular) rdiv!(A, B) - @deprecate Ac_ldiv_B!(A::UnitUpperTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(Adjoint(A), b, x) - @deprecate Ac_ldiv_B!(A::UpperTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(Adjoint(A), b, x) - @deprecate Ac_ldiv_B!(A::UnitLowerTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(Adjoint(A), b, x) - @deprecate Ac_ldiv_B!(A::LowerTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(Adjoint(A), b, x) - @deprecate At_ldiv_B!(A::UnitUpperTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(Transpose(A), b, x) - @deprecate At_ldiv_B!(A::UpperTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(Transpose(A), b, x) - @deprecate At_ldiv_B!(A::UnitLowerTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(Transpose(A), b, x) - @deprecate At_ldiv_B!(A::LowerTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(Transpose(A), b, x) - @deprecate A_mul_Bt!(A::StridedMatrix, B::UnitLowerTriangular) mul!(A, Transpose(B)) - @deprecate A_mul_Bt!(A::StridedMatrix, B::LowerTriangular) mul!(A, Transpose(B)) - @deprecate A_mul_Bt!(A::StridedMatrix, B::UnitUpperTriangular) mul!(A, Transpose(B)) - @deprecate A_mul_Bt!(A::StridedMatrix, B::UpperTriangular) mul!(A, Transpose(B)) - @deprecate A_mul_Bc!(A::StridedMatrix, B::UnitLowerTriangular) mul!(A, Adjoint(B)) - @deprecate A_mul_Bc!(A::StridedMatrix, B::LowerTriangular) mul!(A, Adjoint(B)) - @deprecate A_mul_Bc!(A::StridedMatrix, B::UnitUpperTriangular) mul!(A, Adjoint(B)) - @deprecate A_mul_Bc!(A::StridedMatrix, B::UpperTriangular) mul!(A, Adjoint(B)) + @deprecate Ac_ldiv_B!(A::UnitUpperTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(adjoint(A), b, x) + @deprecate Ac_ldiv_B!(A::UpperTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(adjoint(A), b, x) + @deprecate Ac_ldiv_B!(A::UnitLowerTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(adjoint(A), b, x) + @deprecate Ac_ldiv_B!(A::LowerTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(adjoint(A), b, x) + @deprecate At_ldiv_B!(A::UnitUpperTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(transpose(A), b, x) + @deprecate At_ldiv_B!(A::UpperTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(transpose(A), b, x) + @deprecate At_ldiv_B!(A::UnitLowerTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(transpose(A), b, x) + @deprecate At_ldiv_B!(A::LowerTriangular, b::AbstractVector, x::AbstractVector = b) ldiv!(transpose(A), b, x) + @deprecate A_mul_Bt!(A::StridedMatrix, B::UnitLowerTriangular) mul!(A, transpose(B)) + @deprecate A_mul_Bt!(A::StridedMatrix, B::LowerTriangular) mul!(A, transpose(B)) + @deprecate A_mul_Bt!(A::StridedMatrix, B::UnitUpperTriangular) mul!(A, transpose(B)) + @deprecate A_mul_Bt!(A::StridedMatrix, B::UpperTriangular) mul!(A, transpose(B)) + @deprecate A_mul_Bc!(A::StridedMatrix, B::UnitLowerTriangular) mul!(A, adjoint(B)) + @deprecate A_mul_Bc!(A::StridedMatrix, B::LowerTriangular) mul!(A, adjoint(B)) + @deprecate A_mul_Bc!(A::StridedMatrix, B::UnitUpperTriangular) mul!(A, adjoint(B)) + @deprecate A_mul_Bc!(A::StridedMatrix, B::UpperTriangular) mul!(A, adjoint(B)) @deprecate A_mul_B!(A::StridedMatrix, B::UnitLowerTriangular) mul!(A, B) @deprecate A_mul_B!(A::StridedMatrix, B::LowerTriangular) mul!(A, B) @deprecate A_mul_B!(A::StridedMatrix, B::UnitUpperTriangular) mul!(A, B) @deprecate A_mul_B!(A::StridedMatrix, B::UpperTriangular) mul!(A, B) - @deprecate At_mul_B!(A::UnitLowerTriangular, B::StridedVecOrMat) mul!(Transpose(A), B) - @deprecate At_mul_B!(A::LowerTriangular, B::StridedVecOrMat) mul!(Transpose(A), B) - @deprecate At_mul_B!(A::UnitUpperTriangular, B::StridedVecOrMat) mul!(Transpose(A), B) - @deprecate At_mul_B!(A::UpperTriangular, B::StridedVecOrMat) mul!(Transpose(A), B) - @deprecate Ac_mul_B!(A::UnitLowerTriangular, B::StridedVecOrMat) mul!(Adjoint(A), B) - @deprecate Ac_mul_B!(A::LowerTriangular, B::StridedVecOrMat) mul!(Adjoint(A), B) - @deprecate Ac_mul_B!(A::UnitUpperTriangular, B::StridedVecOrMat) mul!(Adjoint(A), B) - @deprecate Ac_mul_B!(A::UpperTriangular, B::StridedVecOrMat) mul!(Adjoint(A), B) + @deprecate At_mul_B!(A::UnitLowerTriangular, B::StridedVecOrMat) mul!(transpose(A), B) + @deprecate At_mul_B!(A::LowerTriangular, B::StridedVecOrMat) mul!(transpose(A), B) + @deprecate At_mul_B!(A::UnitUpperTriangular, B::StridedVecOrMat) mul!(transpose(A), B) + @deprecate At_mul_B!(A::UpperTriangular, B::StridedVecOrMat) mul!(transpose(A), B) + @deprecate Ac_mul_B!(A::UnitLowerTriangular, B::StridedVecOrMat) mul!(adjoint(A), B) + @deprecate Ac_mul_B!(A::LowerTriangular, B::StridedVecOrMat) mul!(adjoint(A), B) + @deprecate Ac_mul_B!(A::UnitUpperTriangular, B::StridedVecOrMat) mul!(adjoint(A), B) + @deprecate Ac_mul_B!(A::UpperTriangular, B::StridedVecOrMat) mul!(adjoint(A), B) @deprecate A_mul_B!(A::UnitLowerTriangular, B::StridedVecOrMat) mul!(A, B) @deprecate A_mul_B!(A::LowerTriangular, B::StridedVecOrMat) mul!(A, B) @deprecate A_mul_B!(A::UnitUpperTriangular, B::StridedVecOrMat) mul!(A, B) @@ -2182,36 +2182,36 @@ end @deprecate A_mul_B!(C::AbstractVector , A::AbstractTriangular, B::AbstractVector) mul!(C, A, B) @deprecate A_mul_B!(C::AbstractMatrix , A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, A, B) @deprecate A_mul_B!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, A, B) - @deprecate Ac_mul_B!(C::AbstractVector , A::AbstractTriangular, B::AbstractVector) mul!(C, Adjoint(A), B) - @deprecate Ac_mul_B!(C::AbstractMatrix , A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, Adjoint(A), B) - @deprecate Ac_mul_B!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, Adjoint(A), B) - @deprecate At_mul_B!(C::AbstractVector , A::AbstractTriangular, B::AbstractVector) mul!(C, Transpose(A), B) - @deprecate At_mul_B!(C::AbstractMatrix , A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, Transpose(A), B) - @deprecate At_mul_B!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, Transpose(A), B) + @deprecate Ac_mul_B!(C::AbstractVector , A::AbstractTriangular, B::AbstractVector) mul!(C, adjoint(A), B) + @deprecate Ac_mul_B!(C::AbstractMatrix , A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, adjoint(A), B) + @deprecate Ac_mul_B!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, adjoint(A), B) + @deprecate At_mul_B!(C::AbstractVector , A::AbstractTriangular, B::AbstractVector) mul!(C, transpose(A), B) + @deprecate At_mul_B!(C::AbstractMatrix , A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, transpose(A), B) + @deprecate At_mul_B!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, transpose(A), B) @deprecate A_mul_B!(A::Tridiagonal, B::AbstractTriangular) mul!(A, B) @deprecate A_mul_B!(C::AbstractMatrix, A::AbstractTriangular, B::Tridiagonal) mul!(C, A, B) @deprecate A_mul_B!(C::AbstractMatrix, A::Tridiagonal, B::AbstractTriangular) mul!(C, A, B) - @deprecate A_mul_Bt!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, A, Transpose(B)) - @deprecate A_mul_Bc!(C::AbstractMatrix, A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, A, Adjoint(B)) - @deprecate A_mul_Bc!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, A, Adjoint(B)) + @deprecate A_mul_Bt!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, A, transpose(B)) + @deprecate A_mul_Bc!(C::AbstractMatrix, A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, A, adjoint(B)) + @deprecate A_mul_Bc!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVecOrMat) mul!(C, A, adjoint(B)) end for mat in (:AbstractVector, :AbstractMatrix) @eval Base.LinAlg begin - @deprecate Ac_mul_B(A::AbstractTriangular, B::$mat) (*)(Adjoint(A), B) - @deprecate At_mul_B(A::AbstractTriangular, B::$mat) (*)(Transpose(A), B) - @deprecate Ac_ldiv_B(A::Union{UnitUpperTriangular,UnitLowerTriangular}, B::$mat) (\)(Adjoint(A), B) - @deprecate At_ldiv_B(A::Union{UnitUpperTriangular,UnitLowerTriangular}, B::$mat) (\)(Transpose(A), B) - @deprecate Ac_ldiv_B(A::Union{UpperTriangular,LowerTriangular}, B::$mat) (\)(Adjoint(A), B) - @deprecate At_ldiv_B(A::Union{UpperTriangular,LowerTriangular}, B::$mat) (\)(Transpose(A), B) - @deprecate A_rdiv_Bc(A::$mat, B::Union{UnitUpperTriangular, UnitLowerTriangular}) (/)(A, Adjoint(B)) - @deprecate A_rdiv_Bt(A::$mat, B::Union{UnitUpperTriangular, UnitLowerTriangular}) (/)(A, Transpose(B)) - @deprecate A_rdiv_Bc(A::$mat, B::Union{UpperTriangular,LowerTriangular}) (/)(A, Adjoint(B)) - @deprecate A_rdiv_Bt(A::$mat, B::Union{UpperTriangular,LowerTriangular}) (/)(A, Transpose(B)) + @deprecate Ac_mul_B(A::AbstractTriangular, B::$mat) (*)(adjoint(A), B) + @deprecate At_mul_B(A::AbstractTriangular, B::$mat) (*)(transpose(A), B) + @deprecate Ac_ldiv_B(A::Union{UnitUpperTriangular,UnitLowerTriangular}, B::$mat) (\)(adjoint(A), B) + @deprecate At_ldiv_B(A::Union{UnitUpperTriangular,UnitLowerTriangular}, B::$mat) (\)(transpose(A), B) + @deprecate Ac_ldiv_B(A::Union{UpperTriangular,LowerTriangular}, B::$mat) (\)(adjoint(A), B) + @deprecate At_ldiv_B(A::Union{UpperTriangular,LowerTriangular}, B::$mat) (\)(transpose(A), B) + @deprecate A_rdiv_Bc(A::$mat, B::Union{UnitUpperTriangular, UnitLowerTriangular}) (/)(A, adjoint(B)) + @deprecate A_rdiv_Bt(A::$mat, B::Union{UnitUpperTriangular, UnitLowerTriangular}) (/)(A, transpose(B)) + @deprecate A_rdiv_Bc(A::$mat, B::Union{UpperTriangular,LowerTriangular}) (/)(A, adjoint(B)) + @deprecate A_rdiv_Bt(A::$mat, B::Union{UpperTriangular,LowerTriangular}) (/)(A, transpose(B)) end end @eval Base.LinAlg begin - @deprecate A_mul_Bc(A::AbstractMatrix, B::AbstractTriangular) (*)(A, Adjoint(B)) - @deprecate A_mul_Bt(A::AbstractMatrix, B::AbstractTriangular) (*)(A, Transpose(B)) + @deprecate A_mul_Bc(A::AbstractMatrix, B::AbstractTriangular) (*)(A, adjoint(B)) + @deprecate A_mul_Bt(A::AbstractMatrix, B::AbstractTriangular) (*)(A, transpose(B)) end for (f, op, transform) in ( (:A_mul_Bc, :*, :Adjoint), @@ -2244,88 +2244,88 @@ for (t, uploc, isunitc) in ((:LowerTriangular, 'L', 'N'), @eval Base.LinAlg begin # Vector multiplication @deprecate A_mul_B!(A::$t{T,<:StridedMatrix}, b::StridedVector{T}) where {T<:BlasFloat} mul!(A, b) - @deprecate At_mul_B!(A::$t{T,<:StridedMatrix}, b::StridedVector{T}) where {T<:BlasFloat} mul!(Transpose(A), b) - @deprecate Ac_mul_B!(A::$t{T,<:StridedMatrix}, b::StridedVector{T}) where {T<:BlasReal} mul!(Adjoint(A), b) - @deprecate Ac_mul_B!(A::$t{T,<:StridedMatrix}, b::StridedVector{T}) where {T<:BlasComplex} mul!(Adjoint(A), b) + @deprecate At_mul_B!(A::$t{T,<:StridedMatrix}, b::StridedVector{T}) where {T<:BlasFloat} mul!(transpose(A), b) + @deprecate Ac_mul_B!(A::$t{T,<:StridedMatrix}, b::StridedVector{T}) where {T<:BlasReal} mul!(adjoint(A), b) + @deprecate Ac_mul_B!(A::$t{T,<:StridedMatrix}, b::StridedVector{T}) where {T<:BlasComplex} mul!(adjoint(A), b) # Matrix multiplication @deprecate A_mul_B!(A::$t{T,<:StridedMatrix}, B::StridedMatrix{T}) where {T<:BlasFloat} mul!(A, B) @deprecate A_mul_B!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasFloat} mul!(A, B) - @deprecate At_mul_B!(A::$t{T,<:StridedMatrix}, B::StridedMatrix{T}) where {T<:BlasFloat} mul!(Transpose(A), B) - @deprecate Ac_mul_B!(A::$t{T,<:StridedMatrix}, B::StridedMatrix{T}) where {T<:BlasComplex} mul!(Adjoint(A), B) - @deprecate Ac_mul_B!(A::$t{T,<:StridedMatrix}, B::StridedMatrix{T}) where {T<:BlasReal} mul!(Adjoint(A), B) + @deprecate At_mul_B!(A::$t{T,<:StridedMatrix}, B::StridedMatrix{T}) where {T<:BlasFloat} mul!(transpose(A), B) + @deprecate Ac_mul_B!(A::$t{T,<:StridedMatrix}, B::StridedMatrix{T}) where {T<:BlasComplex} mul!(adjoint(A), B) + @deprecate Ac_mul_B!(A::$t{T,<:StridedMatrix}, B::StridedMatrix{T}) where {T<:BlasReal} mul!(adjoint(A), B) - @deprecate A_mul_Bt!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasFloat} mul!(A, Transpose(B)) - @deprecate A_mul_Bc!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasComplex} mul!(A, Adjoint(B)) - @deprecate A_mul_Bc!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasReal} mul!(A, Adjoint(B)) + @deprecate A_mul_Bt!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasFloat} mul!(A, transpose(B)) + @deprecate A_mul_Bc!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasComplex} mul!(A, adjoint(B)) + @deprecate A_mul_Bc!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasReal} mul!(A, adjoint(B)) # Left division @deprecate A_ldiv_B!(A::$t{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasFloat} ldiv!(A, B) - @deprecate At_ldiv_B!(A::$t{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasFloat} ldiv!(Transpose(A), B) - @deprecate Ac_ldiv_B!(A::$t{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasReal} ldiv!(Adjoint(A), B) - @deprecate Ac_ldiv_B!(A::$t{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasComplex} ldiv!(Adjoint(A), B) + @deprecate At_ldiv_B!(A::$t{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasFloat} ldiv!(transpose(A), B) + @deprecate Ac_ldiv_B!(A::$t{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasReal} ldiv!(adjoint(A), B) + @deprecate Ac_ldiv_B!(A::$t{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasComplex} ldiv!(adjoint(A), B) # Right division @deprecate A_rdiv_B!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasFloat} rdiv!(A, B) - @deprecate A_rdiv_Bt!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasFloat} rdiv!(A, Transpose(B)) - @deprecate A_rdiv_Bc!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasReal} rdiv!(A, Adjoint(B)) - @deprecate A_rdiv_Bc!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasComplex} rdiv!(A, Adjoint(B)) + @deprecate A_rdiv_Bt!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasFloat} rdiv!(A, transpose(B)) + @deprecate A_rdiv_Bc!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasReal} rdiv!(A, adjoint(B)) + @deprecate A_rdiv_Bc!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasComplex} rdiv!(A, adjoint(B)) end end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/linalg/rowvector.jl, to deprecate @eval Base.LinAlg begin - @deprecate A_rdiv_Bt(rowvec::RowVector, mat::AbstractMatrix) (/)(rowvec, Transpose(mat)) - @deprecate A_rdiv_Bc(rowvec::RowVector, mat::AbstractMatrix) (/)(rowvec, Adjoint(mat)) - @deprecate At_ldiv_B(mat::AbstractMatrix, rowvec::RowVector) (\)(Transpose(mat), rowvec) - @deprecate Ac_ldiv_B(mat::AbstractMatrix, rowvec::RowVector) (\)(Adjoint(mat), rowvec) - @deprecate Ac_mul_B(u::RowVector, v::AbstractVector) (*)(Adjoint(u), v) - @deprecate Ac_mul_B(vec::AbstractVector, mat::AbstractMatrix) (*)(Adjoint(vec), mat) - @deprecate Ac_mul_B(rowvec1::RowVector, rowvec2::RowVector) (*)(Adjoint(rowvec1), rowvec2) - @deprecate Ac_mul_B(vec::AbstractVector, rowvec::RowVector) (*)(Adjoint(vec), rowvec) - @deprecate Ac_mul_B(vec1::AbstractVector, vec2::AbstractVector) (*)(Adjoint(vec1), vec2) - @deprecate Ac_mul_Bc(rowvec::RowVector, vec::AbstractVector) (*)(Adjoint(rowvec), Adjoint(vec)) - @deprecate Ac_mul_Bc(vec::AbstractVector, mat::AbstractMatrix) (*)(Adjoint(vec), Adjoint(mat)) - @deprecate Ac_mul_Bc(rowvec1::RowVector, rowvec2::RowVector) (*)(Adjoint(rowvec1), Adjoint(rowvec2)) - @deprecate Ac_mul_Bc(vec::AbstractVector, rowvec::RowVector) (*)(Adjoint(vec), Adjoint(rowvec)) - @deprecate Ac_mul_Bc(vec::AbstractVector, rowvec::AbstractVector) (*)(Adjoint(vec), Adjoint(rowvec)) - @deprecate Ac_mul_Bc(mat::AbstractMatrix, rowvec::RowVector) (*)(Adjoint(mat), Adjoint(rowvec)) - @deprecate A_mul_Bc(u::RowVector, v::AbstractVector) (*)(u, Adjoint(v)) - @deprecate A_mul_Bc(rowvec::RowVector, mat::AbstractMatrix) (*)(rowvec, Adjoint(mat)) - @deprecate A_mul_Bc(rowvec1::RowVector, rowvec2::RowVector) (*)(rowvec1, Adjoint(rowvec2)) - @deprecate A_mul_Bc(vec::AbstractVector, rowvec::RowVector) (*)(vec, Adjoint(rowvec)) - @deprecate A_mul_Bc(vec1::AbstractVector, vec2::AbstractVector) (*)(vec1, Adjoint(vec2)) - @deprecate A_mul_Bc(mat::AbstractMatrix, rowvec::RowVector) (*)(mat, Adjoint(rowvec)) - @deprecate At_mul_B(v::RowVector, u::AbstractVector) (*)(Transpose(v), u) - @deprecate At_mul_B(vec::AbstractVector, mat::AbstractMatrix) (*)(Transpose(vec), mat) - @deprecate At_mul_B(rowvec1::RowVector, rowvec2::RowVector) (*)(Transpose(rowvec1), rowvec2) - @deprecate At_mul_B(vec::AbstractVector, rowvec::RowVector) (*)(Transpose(vec), rowvec) - @deprecate At_mul_B(vec1::AbstractVector{T}, vec2::AbstractVector{T}) where {T<:Real} (*)(Transpose(vec1), vec2) - @deprecate At_mul_B(vec1::AbstractVector, vec2::AbstractVector) (*)(Transpose(vec1), vec2) - @deprecate At_mul_Bt(rowvec::RowVector, vec::AbstractVector) (*)(Transpose(rowvec), Transpose(vec)) - @deprecate At_mul_Bt(vec::AbstractVector, mat::AbstractMatrix) (*)(Transpose(vec), Transpose(mat)) - @deprecate At_mul_Bt(rowvec1::RowVector, rowvec2::RowVector) (*)(Transpose(rowvec1), Transpose(rowvec2)) - @deprecate At_mul_Bt(vec::AbstractVector, rowvec::RowVector) (*)(Transpose(vec), Transpose(rowvec)) - @deprecate At_mul_Bt(vec::AbstractVector, rowvec::AbstractVector) (*)(Transpose(vec), Transpose(rowvec)) - @deprecate At_mul_Bt(mat::AbstractMatrix, rowvec::RowVector) (*)(Transpose(mat), Transpose(rowvec)) - @deprecate A_mul_Bt(v::RowVector, A::AbstractVector) (*)(v, Transpose(A)) - @deprecate A_mul_Bt(rowvec::RowVector, mat::AbstractMatrix) (*)(rowvec, Transpose(mat)) - @deprecate A_mul_Bt(rowvec1::RowVector, rowvec2::RowVector) (*)(rowvec1, Transpose(rowvec2)) - @deprecate A_mul_Bt(vec::AbstractVector, rowvec::RowVector) (*)(vec, Transpose(rowvec)) - @deprecate A_mul_Bt(vec1::AbstractVector, vec2::AbstractVector) (*)(vec1, Transpose(vec2)) - @deprecate A_mul_Bt(mat::AbstractMatrix, rowvec::RowVector) (*)(mat, Transpose(rowvec)) + @deprecate A_rdiv_Bt(rowvec::RowVector, mat::AbstractMatrix) (/)(rowvec, transpose(mat)) + @deprecate A_rdiv_Bc(rowvec::RowVector, mat::AbstractMatrix) (/)(rowvec, adjoint(mat)) + @deprecate At_ldiv_B(mat::AbstractMatrix, rowvec::RowVector) (\)(transpose(mat), rowvec) + @deprecate Ac_ldiv_B(mat::AbstractMatrix, rowvec::RowVector) (\)(adjoint(mat), rowvec) + @deprecate Ac_mul_B(u::RowVector, v::AbstractVector) (*)(adjoint(u), v) + @deprecate Ac_mul_B(vec::AbstractVector, mat::AbstractMatrix) (*)(adjoint(vec), mat) + @deprecate Ac_mul_B(rowvec1::RowVector, rowvec2::RowVector) (*)(adjoint(rowvec1), rowvec2) + @deprecate Ac_mul_B(vec::AbstractVector, rowvec::RowVector) (*)(adjoint(vec), rowvec) + @deprecate Ac_mul_B(vec1::AbstractVector, vec2::AbstractVector) (*)(adjoint(vec1), vec2) + @deprecate Ac_mul_Bc(rowvec::RowVector, vec::AbstractVector) (*)(adjoint(rowvec), adjoint(vec)) + @deprecate Ac_mul_Bc(vec::AbstractVector, mat::AbstractMatrix) (*)(adjoint(vec), adjoint(mat)) + @deprecate Ac_mul_Bc(rowvec1::RowVector, rowvec2::RowVector) (*)(adjoint(rowvec1), adjoint(rowvec2)) + @deprecate Ac_mul_Bc(vec::AbstractVector, rowvec::RowVector) (*)(adjoint(vec), adjoint(rowvec)) + @deprecate Ac_mul_Bc(vec::AbstractVector, rowvec::AbstractVector) (*)(adjoint(vec), adjoint(rowvec)) + @deprecate Ac_mul_Bc(mat::AbstractMatrix, rowvec::RowVector) (*)(adjoint(mat), adjoint(rowvec)) + @deprecate A_mul_Bc(u::RowVector, v::AbstractVector) (*)(u, adjoint(v)) + @deprecate A_mul_Bc(rowvec::RowVector, mat::AbstractMatrix) (*)(rowvec, adjoint(mat)) + @deprecate A_mul_Bc(rowvec1::RowVector, rowvec2::RowVector) (*)(rowvec1, adjoint(rowvec2)) + @deprecate A_mul_Bc(vec::AbstractVector, rowvec::RowVector) (*)(vec, adjoint(rowvec)) + @deprecate A_mul_Bc(vec1::AbstractVector, vec2::AbstractVector) (*)(vec1, adjoint(vec2)) + @deprecate A_mul_Bc(mat::AbstractMatrix, rowvec::RowVector) (*)(mat, adjoint(rowvec)) + @deprecate At_mul_B(v::RowVector, u::AbstractVector) (*)(transpose(v), u) + @deprecate At_mul_B(vec::AbstractVector, mat::AbstractMatrix) (*)(transpose(vec), mat) + @deprecate At_mul_B(rowvec1::RowVector, rowvec2::RowVector) (*)(transpose(rowvec1), rowvec2) + @deprecate At_mul_B(vec::AbstractVector, rowvec::RowVector) (*)(transpose(vec), rowvec) + @deprecate At_mul_B(vec1::AbstractVector{T}, vec2::AbstractVector{T}) where {T<:Real} (*)(transpose(vec1), vec2) + @deprecate At_mul_B(vec1::AbstractVector, vec2::AbstractVector) (*)(transpose(vec1), vec2) + @deprecate At_mul_Bt(rowvec::RowVector, vec::AbstractVector) (*)(transpose(rowvec), transpose(vec)) + @deprecate At_mul_Bt(vec::AbstractVector, mat::AbstractMatrix) (*)(transpose(vec), transpose(mat)) + @deprecate At_mul_Bt(rowvec1::RowVector, rowvec2::RowVector) (*)(transpose(rowvec1), transpose(rowvec2)) + @deprecate At_mul_Bt(vec::AbstractVector, rowvec::RowVector) (*)(transpose(vec), transpose(rowvec)) + @deprecate At_mul_Bt(vec::AbstractVector, rowvec::AbstractVector) (*)(transpose(vec), transpose(rowvec)) + @deprecate At_mul_Bt(mat::AbstractMatrix, rowvec::RowVector) (*)(transpose(mat), transpose(rowvec)) + @deprecate A_mul_Bt(v::RowVector, A::AbstractVector) (*)(v, transpose(A)) + @deprecate A_mul_Bt(rowvec::RowVector, mat::AbstractMatrix) (*)(rowvec, transpose(mat)) + @deprecate A_mul_Bt(rowvec1::RowVector, rowvec2::RowVector) (*)(rowvec1, transpose(rowvec2)) + @deprecate A_mul_Bt(vec::AbstractVector, rowvec::RowVector) (*)(vec, transpose(rowvec)) + @deprecate A_mul_Bt(vec1::AbstractVector, vec2::AbstractVector) (*)(vec1, transpose(vec2)) + @deprecate A_mul_Bt(mat::AbstractMatrix, rowvec::RowVector) (*)(mat, transpose(rowvec)) end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/linalg/givens.jl, to deprecate @eval Base.LinAlg begin - @deprecate A_mul_Bc!(A::AbstractMatrix, R::Rotation) mul!(A, Adjoint(R)) + @deprecate A_mul_Bc!(A::AbstractMatrix, R::Rotation) mul!(A, adjoint(R)) @deprecate A_mul_B!(R::Rotation, A::AbstractMatrix) mul!(R, A) @deprecate A_mul_B!(G::Givens, R::Rotation) mul!(G, R) - @deprecate A_mul_Bc!(A::AbstractMatrix, G::Givens) mul!(A, Adjoint(G)) + @deprecate A_mul_Bc!(A::AbstractMatrix, G::Givens) mul!(A, adjoint(G)) @deprecate A_mul_B!(G::Givens, A::AbstractVecOrMat) mul!(G, A) @deprecate A_mul_B!(G1::Givens, G2::Givens) mul!(G1, G2) - @deprecate A_mul_Bc(A::AbstractVecOrMat{T}, R::AbstractRotation{S}) where {T,S} (*)(A, Adjoint(R)) + @deprecate A_mul_Bc(A::AbstractVecOrMat{T}, R::AbstractRotation{S}) where {T,S} (*)(A, adjoint(R)) end # former imports into SparseArrays @@ -2339,39 +2339,39 @@ end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/sparse/linalg.jl, to deprecate @eval Base.SparseArrays begin using Base.LinAlg: Adjoint, Transpose - @deprecate Ac_ldiv_B(A::SparseMatrixCSC, B::RowVector) (\)(Adjoint(A), B) - @deprecate At_ldiv_B(A::SparseMatrixCSC, B::RowVector) (\)(Transpose(A), B) - @deprecate Ac_ldiv_B(A::SparseMatrixCSC, B::AbstractVecOrMat) (\)(Adjoint(A), B) - @deprecate At_ldiv_B(A::SparseMatrixCSC, B::AbstractVecOrMat) (\)(Transpose(A), B) - @deprecate A_rdiv_Bc!(A::SparseMatrixCSC{T}, D::Diagonal{T}) where {T} rdiv!(A, Adjoint(D)) - @deprecate A_rdiv_Bt!(A::SparseMatrixCSC{T}, D::Diagonal{T}) where {T} rdiv!(A, Transpose(D)) + @deprecate Ac_ldiv_B(A::SparseMatrixCSC, B::RowVector) (\)(adjoint(A), B) + @deprecate At_ldiv_B(A::SparseMatrixCSC, B::RowVector) (\)(transpose(A), B) + @deprecate Ac_ldiv_B(A::SparseMatrixCSC, B::AbstractVecOrMat) (\)(adjoint(A), B) + @deprecate At_ldiv_B(A::SparseMatrixCSC, B::AbstractVecOrMat) (\)(transpose(A), B) + @deprecate A_rdiv_Bc!(A::SparseMatrixCSC{T}, D::Diagonal{T}) where {T} rdiv!(A, adjoint(D)) + @deprecate A_rdiv_Bt!(A::SparseMatrixCSC{T}, D::Diagonal{T}) where {T} rdiv!(A, transpose(D)) @deprecate A_rdiv_B!(A::SparseMatrixCSC{T}, D::Diagonal{T}) where {T} rdiv!(A, D) @deprecate A_ldiv_B!(L::LowerTriangular{T,<:SparseMatrixCSCUnion{T}}, B::StridedVecOrMat) where {T} ldiv!(L, B) @deprecate A_ldiv_B!(U::UpperTriangular{T,<:SparseMatrixCSCUnion{T}}, B::StridedVecOrMat) where {T} ldiv!(U, B) - @deprecate A_mul_Bt(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} (*)(A, Transpose(B)) - @deprecate A_mul_Bc(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} (*)(A, Adjoint(B)) - @deprecate At_mul_B(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} (*)(Transpose(A), B) - @deprecate Ac_mul_B(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} (*)(Adjoint(A), B) - @deprecate At_mul_Bt(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} (*)(Transpose(A), Transpose(B)) - @deprecate Ac_mul_Bc(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} (*)(Adjoint(A), Adjoint(B)) + @deprecate A_mul_Bt(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} (*)(A, transpose(B)) + @deprecate A_mul_Bc(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} (*)(A, adjoint(B)) + @deprecate At_mul_B(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} (*)(transpose(A), B) + @deprecate Ac_mul_B(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} (*)(adjoint(A), B) + @deprecate At_mul_Bt(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} (*)(transpose(A), transpose(B)) + @deprecate Ac_mul_Bc(A::SparseMatrixCSC{Tv,Ti}, B::SparseMatrixCSC{Tv,Ti}) where {Tv,Ti} (*)(adjoint(A), adjoint(B)) @deprecate A_mul_B!(C::StridedVecOrMat, A::SparseMatrixCSC, B::StridedVecOrMat) mul!(C, A, B) - @deprecate Ac_mul_B!(C::StridedVecOrMat, A::SparseMatrixCSC, B::StridedVecOrMat) mul!(C, Adjoint(A), B) - @deprecate At_mul_B!(C::StridedVecOrMat, A::SparseMatrixCSC, B::StridedVecOrMat) mul!(C, Transpose(A), B) + @deprecate Ac_mul_B!(C::StridedVecOrMat, A::SparseMatrixCSC, B::StridedVecOrMat) mul!(C, adjoint(A), B) + @deprecate At_mul_B!(C::StridedVecOrMat, A::SparseMatrixCSC, B::StridedVecOrMat) mul!(C, transpose(A), B) @deprecate A_mul_B!(α::Number, A::SparseMatrixCSC, B::StridedVecOrMat, β::Number, C::StridedVecOrMat) mul!(α, A, B, β, C) @deprecate A_mul_B(A::SparseMatrixCSC{TA,S}, x::StridedVector{Tx}) where {TA,S,Tx} (*)(A, x) @deprecate A_mul_B(A::SparseMatrixCSC{TA,S}, B::StridedMatrix{Tx}) where {TA,S,Tx} (*)(A, B) - @deprecate Ac_mul_B!(α::Number, A::SparseMatrixCSC, B::StridedVecOrMat, β::Number, C::StridedVecOrMat) mul!(α, Adjoint(A), B, β, C) - @deprecate Ac_mul_B(A::SparseMatrixCSC{TA,S}, x::StridedVector{Tx}) where {TA,S,Tx} (*)(Adjoint(A), x) - @deprecate Ac_mul_B(A::SparseMatrixCSC{TA,S}, B::StridedMatrix{Tx}) where {TA,S,Tx} (*)(Adjoint(A), B) - @deprecate At_mul_B!(α::Number, A::SparseMatrixCSC, B::StridedVecOrMat, β::Number, C::StridedVecOrMat) mul!(α, Transpose(A), B, β, C) - @deprecate At_mul_B(A::SparseMatrixCSC{TA,S}, x::StridedVector{Tx}) where {TA,S,Tx} (*)(Transpose(A), x) - @deprecate At_mul_B(A::SparseMatrixCSC{TA,S}, B::StridedMatrix{Tx}) where {TA,S,Tx} (*)(Transpose(A), B) - @deprecate A_mul_Bt(A::SparseMatrixCSC{TvA,TiA}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} (*)(A, Transpose(B)) - @deprecate A_mul_Bc(A::SparseMatrixCSC{TvA,TiA}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} (*)(A, Adjoint(B)) - @deprecate At_mul_B(A::SparseMatrixCSC{TvA,TiA}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} (*)(Transpose(A), B) - @deprecate Ac_mul_B(A::SparseMatrixCSC{TvA,TiA}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} (*)(Adjoint(A),B) - @deprecate At_mul_Bt(A::SparseMatrixCSC{TvA,TiA}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} (*)(Transpose(A), Transpose(B)) - @deprecate Ac_mul_Bc(A::SparseMatrixCSC{TvA,TiA}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} (*)(Adjoint(A), Adjoint(B)) + @deprecate Ac_mul_B!(α::Number, A::SparseMatrixCSC, B::StridedVecOrMat, β::Number, C::StridedVecOrMat) mul!(α, adjoint(A), B, β, C) + @deprecate Ac_mul_B(A::SparseMatrixCSC{TA,S}, x::StridedVector{Tx}) where {TA,S,Tx} (*)(adjoint(A), x) + @deprecate Ac_mul_B(A::SparseMatrixCSC{TA,S}, B::StridedMatrix{Tx}) where {TA,S,Tx} (*)(adjoint(A), B) + @deprecate At_mul_B!(α::Number, A::SparseMatrixCSC, B::StridedVecOrMat, β::Number, C::StridedVecOrMat) mul!(α, transpose(A), B, β, C) + @deprecate At_mul_B(A::SparseMatrixCSC{TA,S}, x::StridedVector{Tx}) where {TA,S,Tx} (*)(transpose(A), x) + @deprecate At_mul_B(A::SparseMatrixCSC{TA,S}, B::StridedMatrix{Tx}) where {TA,S,Tx} (*)(transpose(A), B) + @deprecate A_mul_Bt(A::SparseMatrixCSC{TvA,TiA}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} (*)(A, transpose(B)) + @deprecate A_mul_Bc(A::SparseMatrixCSC{TvA,TiA}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} (*)(A, adjoint(B)) + @deprecate At_mul_B(A::SparseMatrixCSC{TvA,TiA}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} (*)(transpose(A), B) + @deprecate Ac_mul_B(A::SparseMatrixCSC{TvA,TiA}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} (*)(adjoint(A),B) + @deprecate At_mul_Bt(A::SparseMatrixCSC{TvA,TiA}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} (*)(transpose(A), transpose(B)) + @deprecate Ac_mul_Bc(A::SparseMatrixCSC{TvA,TiA}, B::SparseMatrixCSC{TvB,TiB}) where {TvA,TiA,TvB,TiB} (*)(adjoint(A), adjoint(B)) end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/sparse/sparsevector.jl, to deprecate @@ -2381,30 +2381,30 @@ for isunittri in (true, false), islowertri in (true, false) tritype = :(Base.LinAlg.$(Symbol(unitstr, halfstr, "Triangular"))) @eval Base.SparseArrays begin using Base.LinAlg: Adjoint, Transpose - @deprecate At_ldiv_B(A::$tritype{TA,<:AbstractMatrix}, b::SparseVector{Tb}) where {TA<:Number,Tb<:Number} (\)(Transpose(A), b) - @deprecate At_ldiv_B(A::$tritype{TA,<:StridedMatrix}, b::SparseVector{Tb}) where {TA<:Number,Tb<:Number} (\)(Transpose(A), b) - @deprecate At_ldiv_B(A::$tritype, b::SparseVector) (\)(Transpose(A), b) - @deprecate Ac_ldiv_B(A::$tritype{TA,<:AbstractMatrix}, b::SparseVector{Tb}) where {TA<:Number,Tb<:Number} (\)(Adjoint(A), b) - @deprecate Ac_ldiv_B(A::$tritype{TA,<:StridedMatrix}, b::SparseVector{Tb}) where {TA<:Number,Tb<:Number} (\)(Adjoint(A), b) - @deprecate Ac_ldiv_B(A::$tritype, b::SparseVector) (\)(Adjoint(A), b) + @deprecate At_ldiv_B(A::$tritype{TA,<:AbstractMatrix}, b::SparseVector{Tb}) where {TA<:Number,Tb<:Number} (\)(transpose(A), b) + @deprecate At_ldiv_B(A::$tritype{TA,<:StridedMatrix}, b::SparseVector{Tb}) where {TA<:Number,Tb<:Number} (\)(transpose(A), b) + @deprecate At_ldiv_B(A::$tritype, b::SparseVector) (\)(transpose(A), b) + @deprecate Ac_ldiv_B(A::$tritype{TA,<:AbstractMatrix}, b::SparseVector{Tb}) where {TA<:Number,Tb<:Number} (\)(adjoint(A), b) + @deprecate Ac_ldiv_B(A::$tritype{TA,<:StridedMatrix}, b::SparseVector{Tb}) where {TA<:Number,Tb<:Number} (\)(adjoint(A), b) + @deprecate Ac_ldiv_B(A::$tritype, b::SparseVector) (\)(adjoint(A), b) @deprecate A_ldiv_B!(A::$tritype{<:Any,<:StridedMatrix}, b::SparseVector) ldiv!(A, b) - @deprecate At_ldiv_B!(A::$tritype{<:Any,<:StridedMatrix}, b::SparseVector) ldiv!(Transpose(A), b) - @deprecate Ac_ldiv_B!(A::$tritype{<:Any,<:StridedMatrix}, b::SparseVector) ldiv!(Adjoint(A), b) + @deprecate At_ldiv_B!(A::$tritype{<:Any,<:StridedMatrix}, b::SparseVector) ldiv!(transpose(A), b) + @deprecate Ac_ldiv_B!(A::$tritype{<:Any,<:StridedMatrix}, b::SparseVector) ldiv!(adjoint(A), b) end end @eval Base.SparseArrays begin using Base.LinAlg: Adjoint, Transpose - @deprecate Ac_mul_B(A::SparseMatrixCSC, x::AbstractSparseVector) (*)(Adjoint(A), x) - @deprecate At_mul_B(A::SparseMatrixCSC, x::AbstractSparseVector) (*)(Transpose(A), x) - @deprecate Ac_mul_B!(α::Number, A::SparseMatrixCSC, x::AbstractSparseVector, β::Number, y::StridedVector) mul!(α, Adjoint(A), x, β, y) - @deprecate Ac_mul_B!(y::StridedVector{Ty}, A::SparseMatrixCSC, x::AbstractSparseVector{Tx}) where {Tx,Ty} mul!(y, Adjoint(A), x) - @deprecate At_mul_B!(α::Number, A::SparseMatrixCSC, x::AbstractSparseVector, β::Number, y::StridedVector) mul!(α, Transpose(A), x, β, y) - @deprecate At_mul_B!(y::StridedVector{Ty}, A::SparseMatrixCSC, x::AbstractSparseVector{Tx}) where {Tx,Ty} mul!(y, Transpose(A), x) + @deprecate Ac_mul_B(A::SparseMatrixCSC, x::AbstractSparseVector) (*)(adjoint(A), x) + @deprecate At_mul_B(A::SparseMatrixCSC, x::AbstractSparseVector) (*)(transpose(A), x) + @deprecate Ac_mul_B!(α::Number, A::SparseMatrixCSC, x::AbstractSparseVector, β::Number, y::StridedVector) mul!(α, adjoint(A), x, β, y) + @deprecate Ac_mul_B!(y::StridedVector{Ty}, A::SparseMatrixCSC, x::AbstractSparseVector{Tx}) where {Tx,Ty} mul!(y, adjoint(A), x) + @deprecate At_mul_B!(α::Number, A::SparseMatrixCSC, x::AbstractSparseVector, β::Number, y::StridedVector) mul!(α, transpose(A), x, β, y) + @deprecate At_mul_B!(y::StridedVector{Ty}, A::SparseMatrixCSC, x::AbstractSparseVector{Tx}) where {Tx,Ty} mul!(y, transpose(A), x) @deprecate A_mul_B!(α::Number, A::SparseMatrixCSC, x::AbstractSparseVector, β::Number, y::StridedVector) mul!(α, A, x, β, y) @deprecate A_mul_B!(y::StridedVector{Ty}, A::SparseMatrixCSC, x::AbstractSparseVector{Tx}) where {Tx,Ty} mul!(y, A, x) - @deprecate At_mul_B!(α::Number, A::StridedMatrix, x::AbstractSparseVector, β::Number, y::StridedVector) mul!(α, Transpose(A), x, β, y) - @deprecate At_mul_B!(y::StridedVector{Ty}, A::StridedMatrix, x::AbstractSparseVector{Tx}) where {Tx,Ty} mul!(y, Transpose(A), x) - @deprecate At_mul_B(A::StridedMatrix{Ta}, x::AbstractSparseVector{Tx}) where {Ta,Tx} (*)(Transpose(A), x) + @deprecate At_mul_B!(α::Number, A::StridedMatrix, x::AbstractSparseVector, β::Number, y::StridedVector) mul!(α, transpose(A), x, β, y) + @deprecate At_mul_B!(y::StridedVector{Ty}, A::StridedMatrix, x::AbstractSparseVector{Tx}) where {Tx,Ty} mul!(y, transpose(A), x) + @deprecate At_mul_B(A::StridedMatrix{Ta}, x::AbstractSparseVector{Tx}) where {Ta,Tx} (*)(transpose(A), x) @deprecate A_mul_B!(α::Number, A::StridedMatrix, x::AbstractSparseVector, β::Number, y::StridedVector) mul!(α, A, x, β, y) @deprecate A_mul_B!(y::StridedVector{Ty}, A::StridedMatrix, x::AbstractSparseVector{Tx}) where {Tx,Ty} mul!(y, A, x) end From 1aef8e032027b32d6cbf9e5ca7b6d4e7f35d24e4 Mon Sep 17 00:00:00 2001 From: Sacha Verweij Date: Thu, 4 Jan 2018 14:35:26 -0800 Subject: [PATCH 5/7] Replace Adjoint/Transpose with adjoint/transpose in IterativeEigensolvers. --- stdlib/IterativeEigensolvers/src/IterativeEigensolvers.jl | 8 ++++---- stdlib/IterativeEigensolvers/test/runtests.jl | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/stdlib/IterativeEigensolvers/src/IterativeEigensolvers.jl b/stdlib/IterativeEigensolvers/src/IterativeEigensolvers.jl index b97bb883d2761..6bee43e55d1ab 100644 --- a/stdlib/IterativeEigensolvers/src/IterativeEigensolvers.jl +++ b/stdlib/IterativeEigensolvers/src/IterativeEigensolvers.jl @@ -7,7 +7,7 @@ Arnoldi and Lanczos iteration for computing eigenvalues """ module IterativeEigensolvers -using Base.LinAlg: BlasFloat, BlasInt, SVD, checksquare, mul!, Adjoint, Transpose +using Base.LinAlg: BlasFloat, BlasInt, SVD, checksquare, mul! export eigs, svds @@ -208,7 +208,7 @@ end function Base.LinAlg.mul!(y::StridedVector{T}, A::SVDAugmented{T}, x::StridedVector{T}) where T m, mn = size(A.X, 1), length(x) mul!( view(y, 1:m), A.X, view(x, m + 1:mn)) # left singular vector - mul!(view(y, m + 1:mn), Adjoint(A.X), view(x, 1:m)) # right singular vector + mul!(view(y, m + 1:mn), adjoint(A.X), view(x, 1:m)) # right singular vector return y end Base.size(A::SVDAugmented) = ((+)(size(A.X)...), (+)(size(A.X)...)) @@ -228,9 +228,9 @@ end function Base.LinAlg.mul!(y::StridedVector{T}, A::AtA_or_AAt{T}, x::StridedVector{T}) where T if size(A.A, 1) >= size(A.A, 2) mul!(A.buffer, A.A, x) - return mul!(y, Adjoint(A.A), A.buffer) + return mul!(y, adjoint(A.A), A.buffer) else - mul!(A.buffer, Adjoint(A.A), x) + mul!(A.buffer, adjoint(A.A), x) return mul!(y, A.A, A.buffer) end end diff --git a/stdlib/IterativeEigensolvers/test/runtests.jl b/stdlib/IterativeEigensolvers/test/runtests.jl index 186c45e4cab0a..06b094e03f84f 100644 --- a/stdlib/IterativeEigensolvers/test/runtests.jl +++ b/stdlib/IterativeEigensolvers/test/runtests.jl @@ -88,8 +88,8 @@ using Test @test_throws DimensionMismatch eigs(a, v0=zeros(elty,n+2)) @test_throws ArgumentError eigs(a, v0=zeros(Int,n)) if elty == Float64 - @test_throws ArgumentError eigs(a + copy(Transpose(a)), which=:SI) - @test_throws ArgumentError eigs(a + copy(Transpose(a)), which=:LI) + @test_throws ArgumentError eigs(a + copy(transpose(a)), which=:SI) + @test_throws ArgumentError eigs(a + copy(transpose(a)), which=:LI) @test_throws ArgumentError eigs(a, sigma = rand(ComplexF32)) end end From 70aed0684113b0d7ddaebb0f0b99fb74e56107ce Mon Sep 17 00:00:00 2001 From: Sacha Verweij Date: Thu, 4 Jan 2018 17:03:08 -0800 Subject: [PATCH 6/7] Replace Adjoint/Transpose with adjoint/transpose in SuiteSparse. --- stdlib/SuiteSparse/src/cholmod.jl | 16 +++++------ stdlib/SuiteSparse/src/deprecated.jl | 43 ++++++++++++++-------------- stdlib/SuiteSparse/src/spqr.jl | 7 ++--- stdlib/SuiteSparse/src/umfpack.jl | 12 ++++---- stdlib/SuiteSparse/src/umfpack_h.jl | 24 ++++++++-------- stdlib/SuiteSparse/test/cholmod.jl | 8 +++--- stdlib/SuiteSparse/test/spqr.jl | 4 +-- stdlib/SuiteSparse/test/umfpack.jl | 22 +++++++------- 8 files changed, 67 insertions(+), 69 deletions(-) diff --git a/stdlib/SuiteSparse/src/cholmod.jl b/stdlib/SuiteSparse/src/cholmod.jl index 8ad3b14974201..183010b62dc98 100644 --- a/stdlib/SuiteSparse/src/cholmod.jl +++ b/stdlib/SuiteSparse/src/cholmod.jl @@ -7,8 +7,7 @@ import Base: (*), convert, copy, eltype, getindex, getproperty, show, size, import Base.LinAlg: (\), cholfact, cholfact!, det, diag, ishermitian, isposdef, - issuccess, issymmetric, ldltfact, ldltfact!, logdet, - Adjoint, Transpose + issuccess, issymmetric, ldltfact, ldltfact!, logdet using ..SparseArrays using Base.Printf.@printf @@ -348,6 +347,7 @@ Factor(ptr::Ptr{C_Factor{Tv}}) where {Tv<:VTypes} = Factor{Tv}(ptr) Factor(x::Factor) = x Base.LinAlg.adjoint(F::Factor) = Adjoint(F) +Base.LinAlg.transpose(F::Factor) = Transpose(F) # All pointer loads should be checked to make sure that SuiteSparse is not called with # a C_NULL pointer which could cause a segfault. Pointers are set to null @@ -1321,7 +1321,7 @@ function *(adjA::Adjoint{<:Any,<:Sparse}, B::Sparse) A = adjA.parent aa1 = transpose_(A, 2) if A === B - return *(aa1, Adjoint(aa1)) + return *(aa1, adjoint(aa1)) end ## result of ssmult will have stype==0, contain numerical values and be sorted return ssmult(aa1, B, 0, true, true) @@ -1330,7 +1330,7 @@ end *(adjA::Adjoint{<:Any,<:Sparse}, B::Dense) = (A = adjA.parent; sdmult!(A, true, 1., 0., B, zeros(size(A, 2), size(B, 2)))) *(adjA::Adjoint{<:Any,<:Sparse}, B::VecOrMat) = - (A = adjA.parent; *(Adjoint(A), Dense(B))) + (A = adjA.parent; *(adjoint(A), Dense(B))) ## Factorization methods @@ -1697,7 +1697,7 @@ end \(adjL::Adjoint{<:Any,<:Factor}, B::Dense) = (L = adjL.parent; solve(CHOLMOD_A, L, B)) \(adjL::Adjoint{<:Any,<:Factor}, B::VecOrMat) = (L = adjL.parent; Matrix(solve(CHOLMOD_A, L, Dense(B)))) \(adjL::Adjoint{<:Any,<:Factor}, B::Sparse) = (L = adjL.parent; spsolve(CHOLMOD_A, L, B)) -\(adjL::Adjoint{<:Any,<:Factor}, B::SparseVecOrMat) = (L = adjL.parent; \(Adjoint(L), Sparse(B))) +\(adjL::Adjoint{<:Any,<:Factor}, B::SparseVecOrMat) = (L = adjL.parent; \(adjoint(L), Sparse(B))) const RealHermSymComplexHermF64SSL = Union{ Symmetric{Float64,SparseMatrixCSC{Float64,SuiteSparse_long}}, @@ -1720,13 +1720,13 @@ function \(adjA::Adjoint{<:Any,<:RealHermSymComplexHermF64SSL}, B::StridedVecOrM A = adjA.parent F = cholfact(A) if issuccess(F) - return \(Adjoint(F), B) + return \(adjoint(F), B) else ldltfact!(F, A) if issuccess(F) - return \(Adjoint(F), B) + return \(adjoint(F), B) else - return \(Adjoint(lufact(SparseMatrixCSC{eltype(A), SuiteSparse_long}(A))), B) + return \(adjoint(lufact(SparseMatrixCSC{eltype(A), SuiteSparse_long}(A))), B) end end end diff --git a/stdlib/SuiteSparse/src/deprecated.jl b/stdlib/SuiteSparse/src/deprecated.jl index 974bb6ab5c119..2bf2d022684a2 100644 --- a/stdlib/SuiteSparse/src/deprecated.jl +++ b/stdlib/SuiteSparse/src/deprecated.jl @@ -2,18 +2,17 @@ # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from src/cholmod.jl, to deprecate @eval SuiteSparse.CHOLMOD begin - using Base.LinAlg: Adjoint, Transpose - Base.Ac_ldiv_B(A::RealHermSymComplexHermF64SSL, B::StridedVecOrMat) = \(Adjoint(A), B) - Base.Ac_ldiv_B(L::Factor, B::Dense) = \(Adjoint(L), B) - Base.Ac_ldiv_B(L::Factor, B::VecOrMat) = \(Adjoint(L), B) - Base.Ac_ldiv_B(L::Factor, B::Sparse) = \(Adjoint(L), B) - Base.Ac_ldiv_B(L::Factor, B::SparseVecOrMat) = \(Adjoint(L), B) - Base.Ac_ldiv_B(L::FactorComponent, B) = \(Adjoint(L), B) - Base.Ac_ldiv_B(L::FactorComponent, B::RowVector) = \(Adjoint(L), B) - Base.Ac_mul_B(A::Sparse, B::Dense) = *(Adjoint(A), B) - Base.Ac_mul_B(A::Sparse, B::VecOrMat) = *(Adjoint(A), B) - Base.Ac_mul_B(A::Sparse, B::Sparse) = *(Adjoint(A), B) - Base.A_mul_Bc(A::Sparse{Tv}, B::Sparse{Tv}) where {Tv<:VRealTypes} = *(A, Adjoint(B)) + Base.Ac_ldiv_B(A::RealHermSymComplexHermF64SSL, B::StridedVecOrMat) = \(adjoint(A), B) + Base.Ac_ldiv_B(L::Factor, B::Dense) = \(adjoint(L), B) + Base.Ac_ldiv_B(L::Factor, B::VecOrMat) = \(adjoint(L), B) + Base.Ac_ldiv_B(L::Factor, B::Sparse) = \(adjoint(L), B) + Base.Ac_ldiv_B(L::Factor, B::SparseVecOrMat) = \(adjoint(L), B) + Base.Ac_ldiv_B(L::FactorComponent, B) = \(adjoint(L), B) + Base.Ac_ldiv_B(L::FactorComponent, B::RowVector) = \(adjoint(L), B) + Base.Ac_mul_B(A::Sparse, B::Dense) = *(adjoint(A), B) + Base.Ac_mul_B(A::Sparse, B::VecOrMat) = *(adjoint(A), B) + Base.Ac_mul_B(A::Sparse, B::Sparse) = *(adjoint(A), B) + Base.A_mul_Bc(A::Sparse{Tv}, B::Sparse{Tv}) where {Tv<:VRealTypes} = *(A, adjoint(B)) end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from src/umfpack.jl, to deprecate @@ -22,28 +21,28 @@ end Base.A_ldiv_B!(X::StridedVecOrMat{T}, lu::UmfpackLU{T}, B::StridedVecOrMat{T}) where {T<:UMFVTypes} = Base.LinAlg.ldiv!(X, lu, B) Base.At_ldiv_B!(X::StridedVecOrMat{T}, lu::UmfpackLU{T}, B::StridedVecOrMat{T}) where {T<:UMFVTypes} = - Base.LinAlg.ldiv!(X, Transpose(lu), B) + Base.LinAlg.ldiv!(X, transpose(lu), B) Base.Ac_ldiv_B!(X::StridedVecOrMat{T}, lu::UmfpackLU{T}, B::StridedVecOrMat{T}) where {T<:UMFVTypes} = - Base.LinAlg.ldiv!(X, Adjoint(lu), B) + Base.LinAlg.ldiv!(X, adjoint(lu), B) Base.A_ldiv_B!(X::StridedVecOrMat{Tb}, lu::UmfpackLU{Float64}, B::StridedVecOrMat{Tb}) where {Tb<:Complex} = Base.LinAlg.ldiv!(X, lu, B) Base.At_ldiv_B!(X::StridedVecOrMat{Tb}, lu::UmfpackLU{Float64}, B::StridedVecOrMat{Tb}) where {Tb<:Complex} = - Base.LinAlg.ldiv!(X, Transpose(lu), B) + Base.LinAlg.ldiv!(X, transpose(lu), B) Base.Ac_ldiv_B!(X::StridedVecOrMat{Tb}, lu::UmfpackLU{Float64}, B::StridedVecOrMat{Tb}) where {Tb<:Complex} = - Base.LinAlg.ldiv!(X, Adjoint(lu), B) + Base.LinAlg.ldiv!(X, adjoint(lu), B) Base.A_ldiv_B!(lu::UmfpackLU{T}, B::StridedVecOrMat{T}) where {T<:UMFVTypes} = Base.LinAlg.ldiv!(lu, B) - Base.At_ldiv_B!(lu::UmfpackLU{T}, B::StridedVecOrMat{T}) where {T<:UMFVTypes} = Base.LinAlg.ldiv!(Transpose(lu), B) - Base.Ac_ldiv_B!(lu::UmfpackLU{T}, B::StridedVecOrMat{T}) where {T<:UMFVTypes} = Base.LinAlg.ldiv!(Adjoint(lu), B) + Base.At_ldiv_B!(lu::UmfpackLU{T}, B::StridedVecOrMat{T}) where {T<:UMFVTypes} = Base.LinAlg.ldiv!(transpose(lu), B) + Base.Ac_ldiv_B!(lu::UmfpackLU{T}, B::StridedVecOrMat{T}) where {T<:UMFVTypes} = Base.LinAlg.ldiv!(adjoint(lu), B) Base.A_ldiv_B!(lu::UmfpackLU{Float64}, B::StridedVecOrMat{<:Complex}) = Base.LinAlg.ldiv!(lu, B) - Base.At_ldiv_B!(lu::UmfpackLU{Float64}, B::StridedVecOrMat{<:Complex}) = Base.LinAlg.ldiv!(Transpose(lu), B) - Base.Ac_ldiv_B!(lu::UmfpackLU{Float64}, B::StridedVecOrMat{<:Complex}) = Base.LinAlg.ldiv!(Adjoint(lu), B) + Base.At_ldiv_B!(lu::UmfpackLU{Float64}, B::StridedVecOrMat{<:Complex}) = Base.LinAlg.ldiv!(transpose(lu), B) + Base.Ac_ldiv_B!(lu::UmfpackLU{Float64}, B::StridedVecOrMat{<:Complex}) = Base.LinAlg.ldiv!(adjoint(lu), B) end # A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from src/spqr.jl, to deprecate @eval SuiteSparse.SPQR begin using Base.LinAlg: Adjoint, Transpose - Base.A_mul_Bc!(A::StridedMatrix, Q::QRSparseQ) = Base.LinAlg.mul!(A, Adjoint(Q)) - Base.Ac_mul_B!(Q::QRSparseQ, A::StridedVecOrMat) = Base.LinAlg.mul!(Adjoint(Q), A) + Base.A_mul_Bc!(A::StridedMatrix, Q::QRSparseQ) = Base.LinAlg.mul!(A, adjoint(Q)) + Base.Ac_mul_B!(Q::QRSparseQ, A::StridedVecOrMat) = Base.LinAlg.mul!(adjoint(Q), A) Base.A_mul_B!(A::StridedMatrix, Q::QRSparseQ) = Base.LinAlg.mul!(A, Q) Base.A_mul_B!(Q::QRSparseQ, A::StridedVecOrMat) = Base.LinAlg.mul!(Q, A) end diff --git a/stdlib/SuiteSparse/src/spqr.jl b/stdlib/SuiteSparse/src/spqr.jl index a0d1ce49016c8..e844a66a9688e 100644 --- a/stdlib/SuiteSparse/src/spqr.jl +++ b/stdlib/SuiteSparse/src/spqr.jl @@ -3,7 +3,6 @@ module SPQR import Base: \ -using Base.LinAlg: Adjoint, Transpose # ordering options */ const ORDERING_FIXED = Int32(0) @@ -340,14 +339,14 @@ function (\)(F::QRSparse{Float64}, B::VecOrMat{Complex{Float64}}) # |z2|z4| -> |y1|y2|y3|y4| -> |x2|y2| -> |x2|y2|x4|y4| # |x3|y3| # |x4|y4| - c2r = reshape(copy(Transpose(reinterpret(Float64, reshape(B, (1, length(B)))))), size(B, 1), 2*size(B, 2)) + c2r = reshape(copy(transpose(reinterpret(Float64, reshape(B, (1, length(B)))))), size(B, 1), 2*size(B, 2)) x = F\c2r # |z1|z3| reinterpret |x1|x2|x3|x4| transpose |x1|y1| reshape |x1|y1|x3|y3| # |z2|z4| <- |y1|y2|y3|y4| <- |x2|y2| <- |x2|y2|x4|y4| # |x3|y3| # |x4|y4| - return collect(reshape(reinterpret(Complex{Float64}, copy(Transpose(reshape(x, (length(x) >> 1), 2)))), _ret_size(F, B))) + return collect(reshape(reinterpret(Complex{Float64}, copy(transpose(reshape(x, (length(x) >> 1), 2)))), _ret_size(F, B))) end function _ldiv_basic(F::QRSparse, B::StridedVecOrMat) @@ -375,7 +374,7 @@ function _ldiv_basic(F::QRSparse, B::StridedVecOrMat) X0 = view(X, 1:size(B, 1), :) # Apply Q' to B - Base.LinAlg.mul!(Adjoint(F.Q), X0) + Base.LinAlg.mul!(adjoint(F.Q), X0) # Zero out to get basic solution X[rnk + 1:end, :] = 0 diff --git a/stdlib/SuiteSparse/src/umfpack.jl b/stdlib/SuiteSparse/src/umfpack.jl index 022812c875cec..3647445da3098 100644 --- a/stdlib/SuiteSparse/src/umfpack.jl +++ b/stdlib/SuiteSparse/src/umfpack.jl @@ -347,7 +347,7 @@ for itype in UmfpackIndexTypes Up,Ui,Ux, P, Q, C_NULL, 0, Rs, lu.numeric) - (copy(Transpose(SparseMatrixCSC(min(n_row, n_col), n_row, increment!(Lp), increment!(Lj), Lx))), + (copy(transpose(SparseMatrixCSC(min(n_row, n_col), n_row, increment!(Lp), increment!(Lj), Lx))), SparseMatrixCSC(min(n_row, n_col), n_col, increment!(Up), increment!(Ui), Ux), increment!(P), increment!(Q), Rs) end @@ -374,7 +374,7 @@ for itype in UmfpackIndexTypes Up,Ui,Ux,Uz, P, Q, C_NULL, C_NULL, 0, Rs, lu.numeric) - (copy(Transpose(SparseMatrixCSC(min(n_row, n_col), n_row, increment!(Lp), increment!(Lj), complex.(Lx, Lz)))), + (copy(transpose(SparseMatrixCSC(min(n_row, n_col), n_row, increment!(Lp), increment!(Lj), complex.(Lx, Lz)))), SparseMatrixCSC(min(n_row, n_col), n_col, increment!(Up), increment!(Ui), complex.(Ux, Uz)), increment!(P), increment!(Q), Rs) end @@ -390,15 +390,15 @@ end ldiv!(lu::UmfpackLU{T}, B::StridedVecOrMat{T}) where {T<:UMFVTypes} = ldiv!(B, lu, copy(B)) ldiv!(translu::Transpose{T,<:UmfpackLU{T}}, B::StridedVecOrMat{T}) where {T<:UMFVTypes} = - (lu = translu.parent; ldiv!(B, Transpose(lu), copy(B))) + (lu = translu.parent; ldiv!(B, transpose(lu), copy(B))) ldiv!(adjlu::Adjoint{T,<:UmfpackLU{T}}, B::StridedVecOrMat{T}) where {T<:UMFVTypes} = - (lu = adjlu.parent; ldiv!(B, Adjoint(lu), copy(B))) + (lu = adjlu.parent; ldiv!(B, adjoint(lu), copy(B))) ldiv!(lu::UmfpackLU{Float64}, B::StridedVecOrMat{<:Complex}) = ldiv!(B, lu, copy(B)) ldiv!(translu::Transpose{Float64,<:UmfpackLU{Float64}}, B::StridedVecOrMat{<:Complex}) = - (lu = translu.parent; ldiv!(B, Transpose(lu), copy(B))) + (lu = translu.parent; ldiv!(B, transpose(lu), copy(B))) ldiv!(adjlu::Adjoint{Float64,<:UmfpackLU{Float64}}, B::StridedVecOrMat{<:Complex}) = - (lu = adjlu.parent; ldiv!(B, Adjoint(lu), copy(B))) + (lu = adjlu.parent; ldiv!(B, adjoint(lu), copy(B))) ldiv!(X::StridedVecOrMat{T}, lu::UmfpackLU{T}, B::StridedVecOrMat{T}) where {T<:UMFVTypes} = _Aq_ldiv_B!(X, lu, B, UMFPACK_A) diff --git a/stdlib/SuiteSparse/src/umfpack_h.jl b/stdlib/SuiteSparse/src/umfpack_h.jl index 5d228959cc49c..985f9387fcc75 100644 --- a/stdlib/SuiteSparse/src/umfpack_h.jl +++ b/stdlib/SuiteSparse/src/umfpack_h.jl @@ -4,20 +4,20 @@ ## Type of solve const UMFPACK_A = 0 # Ax=b -const UMFPACK_At = 1 # Adjoint(A)x=b -const UMFPACK_Aat = 2 # Transpose(A)x=b -const UMFPACK_Pt_L = 3 # Adjoint(P)Lx=b +const UMFPACK_At = 1 # adjoint(A)x=b +const UMFPACK_Aat = 2 # transpose(A)x=b +const UMFPACK_Pt_L = 3 # adjoint(P)Lx=b const UMFPACK_L = 4 # Lx=b -const UMFPACK_Lt_P = 5 # Adjoint(L)Px=b -const UMFPACK_Lat_P = 6 # Transpose(L)Px=b -const UMFPACK_Lt = 7 # Adjoint(L)x=b -const UMFPACK_Lat = 8 # Transpose(L)x=b -const UMFPACK_U_Qt = 9 # U*Adjoint(Q)x=b +const UMFPACK_Lt_P = 5 # adjoint(L)Px=b +const UMFPACK_Lat_P = 6 # transpose(L)Px=b +const UMFPACK_Lt = 7 # adjoint(L)x=b +const UMFPACK_Lat = 8 # transpose(L)x=b +const UMFPACK_U_Qt = 9 # U*adjoint(Q)x=b const UMFPACK_U = 10 # Ux=b -const UMFPACK_Q_Ut = 11 # Q*Adjoint(U)x=b -const UMFPACK_Q_Uat = 12 # Q*Transpose(U)x=b -const UMFPACK_Ut = 13 # Adjoint(U)x=b -const UMFPACK_Uat = 14 # Transpose(U)x=b +const UMFPACK_Q_Ut = 11 # Q*adjoint(U)x=b +const UMFPACK_Q_Uat = 12 # Q*transpose(U)x=b +const UMFPACK_Ut = 13 # adjoint(U)x=b +const UMFPACK_Uat = 14 # transpose(U)x=b ## Sizes of Control and Info arrays for returning information from solver const UMFPACK_INFO = 90 diff --git a/stdlib/SuiteSparse/test/cholmod.jl b/stdlib/SuiteSparse/test/cholmod.jl index 07543b7b78bcb..14fd2f4d5c7d4 100644 --- a/stdlib/SuiteSparse/test/cholmod.jl +++ b/stdlib/SuiteSparse/test/cholmod.jl @@ -396,7 +396,7 @@ end bT = fill(elty(1), 5) @test F'\bT ≈ Array(A1pd)'\b @test F'\sparse(bT) ≈ Array(A1pd)'\b - @test Transpose(F)\bT ≈ conj(A1pd)'\bT + @test transpose(F)\bT ≈ conj(A1pd)'\bT @test F\CHOLMOD.Sparse(sparse(bT)) ≈ A1pd\b @test logdet(F) ≈ logdet(Array(A1pd)) @test det(F) == exp(logdet(F)) @@ -713,8 +713,8 @@ end @test Fs\fill(1., 4) ≈ Fd\fill(1., 4) end -@testset "\\ '\\ and Transpose(...)\\" begin - # Test that \ and '\ and Transpose(...)\ work for Symmetric and Hermitian. This is just +@testset "\\ '\\ and transpose(...)\\" begin + # Test that \ and '\ and transpose(...)\ work for Symmetric and Hermitian. This is just # a dispatch exercise so it doesn't matter that the complex matrix has # zero imaginary parts Apre = sprandn(10, 10, 0.2) - I @@ -725,7 +725,7 @@ end x = fill(1., 10) b = A*x @test x ≈ A\b - @test Transpose(A)\b ≈ A'\b + @test transpose(A)\b ≈ A'\b end end diff --git a/stdlib/SuiteSparse/test/spqr.jl b/stdlib/SuiteSparse/test/spqr.jl index 704be55becac1..ff9a93eedf789 100644 --- a/stdlib/SuiteSparse/test/spqr.jl +++ b/stdlib/SuiteSparse/test/spqr.jl @@ -44,9 +44,9 @@ nn = 100 offsizeA = Matrix{Float64}(I, m+1, m+1) @test_throws DimensionMismatch mul!(Q, offsizeA) - @test_throws DimensionMismatch mul!(Adjoint(Q), offsizeA) + @test_throws DimensionMismatch mul!(adjoint(Q), offsizeA) @test_throws DimensionMismatch mul!(offsizeA, Q) - @test_throws DimensionMismatch mul!(offsizeA, Adjoint(Q)) + @test_throws DimensionMismatch mul!(offsizeA, adjoint(Q)) end @testset "element type of B: $eltyB" for eltyB in (Int, Float64, Complex{Float64}) diff --git a/stdlib/SuiteSparse/test/umfpack.jl b/stdlib/SuiteSparse/test/umfpack.jl index 0f8b9fcfd59a1..ec747d4a42d1d 100644 --- a/stdlib/SuiteSparse/test/umfpack.jl +++ b/stdlib/SuiteSparse/test/umfpack.jl @@ -47,25 +47,25 @@ @test A'*x ≈ b z = complex.(b) - x = SuiteSparse.ldiv!(Adjoint(lua), z) + x = SuiteSparse.ldiv!(adjoint(lua), z) @test x ≈ float([1:5;]) @test x === z y = similar(x) - SuiteSparse.ldiv!(y, Adjoint(lua), complex.(b)) + SuiteSparse.ldiv!(y, adjoint(lua), complex.(b)) @test y ≈ x @test A'*x ≈ b - x = Transpose(lua) \ b + x = transpose(lua) \ b @test x ≈ float([1:5;]) - @test Transpose(A) * x ≈ b - x = SuiteSparse.ldiv!(Transpose(lua), complex.(b)) + @test transpose(A) * x ≈ b + x = SuiteSparse.ldiv!(transpose(lua), complex.(b)) @test x ≈ float([1:5;]) y = similar(x) - SuiteSparse.ldiv!(y, Transpose(lua), complex.(b)) + SuiteSparse.ldiv!(y, transpose(lua), complex.(b)) @test y ≈ x - @test Transpose(A) * x ≈ b + @test transpose(A) * x ≈ b # Element promotion and type inference @inferred lua\fill(1, size(A, 2)) @@ -84,8 +84,8 @@ @test Ac\b ≈ x b = Ac'*x @test Ac'\b ≈ x - b = Transpose(Ac)*x - @test Transpose(Ac)\b ≈ x + b = transpose(Ac)*x + @test transpose(Ac)\b ≈ x end end @@ -163,8 +163,8 @@ B = complex.(rand(N, N), rand(N, N)) luA, lufA = lufact(A), lufact(Array(A)) @test Base.LinAlg.ldiv!(copy(X), luA, B) ≈ Base.LinAlg.ldiv!(copy(X), lufA, B) - @test Base.LinAlg.ldiv!(copy(X), Adjoint(luA), B) ≈ Base.LinAlg.ldiv!(copy(X), Adjoint(lufA), B) - @test Base.LinAlg.ldiv!(copy(X), Transpose(luA), B) ≈ Base.LinAlg.ldiv!(copy(X), Transpose(lufA), B) + @test Base.LinAlg.ldiv!(copy(X), adjoint(luA), B) ≈ Base.LinAlg.ldiv!(copy(X), adjoint(lufA), B) + @test Base.LinAlg.ldiv!(copy(X), transpose(luA), B) ≈ Base.LinAlg.ldiv!(copy(X), transpose(lufA), B) end end From ac18317b4f504f9a3de82ede57502f28d4a899db Mon Sep 17 00:00:00 2001 From: Sacha Verweij Date: Fri, 5 Jan 2018 15:41:12 -0800 Subject: [PATCH 7/7] Lower ' directly to adjoint. --- base/boot.jl | 2 -- base/operators.jl | 3 --- src/julia-syntax.scm | 2 +- 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/base/boot.jl b/base/boot.jl index 900a82c588229..f2ec63647f12e 100644 --- a/base/boot.jl +++ b/base/boot.jl @@ -212,8 +212,6 @@ macro _noinline_meta() Expr(:meta, :noinline) end -function postfixapostrophize end - struct BoundsError <: Exception a::Any i::Any diff --git a/base/operators.jl b/base/operators.jl index c28f5bf4f63bd..fb7c77fc36158 100644 --- a/base/operators.jl +++ b/base/operators.jl @@ -714,9 +714,6 @@ fldmod1(x::T, y::T) where {T<:Real} = (fld1(x,y), mod1(x,y)) # efficient version for integers fldmod1(x::T, y::T) where {T<:Integer} = (fld1(x,y), mod1(x,y)) -# postfix apostophre -Core.postfixapostrophize(x) = Adjoint(x) - conj(x) = x diff --git a/src/julia-syntax.scm b/src/julia-syntax.scm index 28bc5a7bd66cc..3f35c4a9d9740 100644 --- a/src/julia-syntax.scm +++ b/src/julia-syntax.scm @@ -2342,7 +2342,7 @@ ,.(apply append rows))) `(call (top typed_vcat) ,t ,@a))))) - '|'| (lambda (e) (expand-forms `(call (core postfixapostrophize) ,(cadr e)))) + '|'| (lambda (e) (expand-forms `(call (top adjoint) ,(cadr e)))) '|.'| (lambda (e) (begin (deprecation-message (string "The syntax `.'` for transposition is deprecated, " "and the special lowering of `.'` in multiplication " "(`*`), left-division (`\\`), and right-division (`/`) "