Skip to content

Commit f4e7a4c

Browse files
tkelmanmfasi
authored andcommitted
Revert "Towards #12251 part 2, replace all full(X) calls with convert(Array, X) and migrate tests" (JuliaLang#17564)
1 parent 8f03766 commit f4e7a4c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+601
-604
lines changed

base/abstractarray.jl

+5-5
Original file line numberDiff line numberDiff line change
@@ -890,7 +890,7 @@ function typed_vcat{T}(::Type{T}, V::AbstractVector...)
890890
for Vk in V
891891
n += length(Vk)
892892
end
893-
a = similar(convert(Array, V[1]), T, n)
893+
a = similar(full(V[1]), T, n)
894894
pos = 1
895895
for k=1:length(V)
896896
Vk = V[k]
@@ -918,7 +918,7 @@ function typed_hcat{T}(::Type{T}, A::AbstractVecOrMat...)
918918
nd = ndims(Aj)
919919
ncols += (nd==2 ? size(Aj,2) : 1)
920920
end
921-
B = similar(convert(Array, A[1]), T, nrows, ncols)
921+
B = similar(full(A[1]), T, nrows, ncols)
922922
pos = 1
923923
if dense
924924
for k=1:nargs
@@ -950,7 +950,7 @@ function typed_vcat{T}(::Type{T}, A::AbstractMatrix...)
950950
throw(ArgumentError("number of columns of each array must match (got $(map(x->size(x,2), A)))"))
951951
end
952952
end
953-
B = similar(convert(Array, A[1]), T, nrows, ncols)
953+
B = similar(full(A[1]), T, nrows, ncols)
954954
pos = 1
955955
for k=1:nargs
956956
Ak = A[k]
@@ -997,7 +997,7 @@ function cat_t(catdims, typeC::Type, X...)
997997
end
998998
end
999999

1000-
C = similar(isa(X[1],AbstractArray) ? convert(Array, X[1]) : [X[1]], typeC, tuple(dimsC...))
1000+
C = similar(isa(X[1],AbstractArray) ? full(X[1]) : [X[1]], typeC, tuple(dimsC...))
10011001
if length(catdims)>1
10021002
fill!(C,0)
10031003
end
@@ -1069,7 +1069,7 @@ function typed_hvcat{T}(::Type{T}, rows::Tuple{Vararg{Int}}, as::AbstractMatrix.
10691069
a += rows[i]
10701070
end
10711071

1072-
out = similar(convert(Array, as[1]), T, nr, nc)
1072+
out = similar(full(as[1]), T, nr, nc)
10731073

10741074
a = 1
10751075
r = 1

base/linalg/bidiag.jl

+8-8
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ end
1818
Constructs an upper (`isupper=true`) or lower (`isupper=false`) bidiagonal matrix using the
1919
given diagonal (`dv`) and off-diagonal (`ev`) vectors. The result is of type `Bidiagonal`
2020
and provides efficient specialized linear solvers, but may be converted into a regular
21-
matrix with [`convert(Array, _)`](:func:`convert`). `ev`'s length must be one less than the length of `dv`.
21+
matrix with [`full`](:func:`full`). `ev`'s length must be one less than the length of `dv`.
2222
2323
**Example**
2424
@@ -38,7 +38,7 @@ Bidiagonal(dv::AbstractVector, ev::AbstractVector) = throw(ArgumentError("did yo
3838
Constructs an upper (`uplo='U'`) or lower (`uplo='L'`) bidiagonal matrix using the
3939
given diagonal (`dv`) and off-diagonal (`ev`) vectors. The result is of type `Bidiagonal`
4040
and provides efficient specialized linear solvers, but may be converted into a regular
41-
matrix with [`convert(Array, _)`](:func:`convert`). `ev`'s length must be one less than the length of `dv`.
41+
matrix with [`full`](:func:`full`). `ev`'s length must be one less than the length of `dv`.
4242
4343
**Example**
4444
@@ -302,7 +302,7 @@ end
302302
function A_mul_B_td!(C::AbstractMatrix, A::BiTriSym, B::BiTriSym)
303303
check_A_mul_B!_sizes(C, A, B)
304304
n = size(A,1)
305-
n <= 3 && return A_mul_B!(C, convert(Array, A), convert(Array, B))
305+
n <= 3 && return A_mul_B!(C, full(A), full(B))
306306
fill!(C, zero(eltype(C)))
307307
Al = diag(A, -1)
308308
Ad = diag(A, 0)
@@ -361,7 +361,7 @@ function A_mul_B_td!(C::AbstractVecOrMat, A::BiTriSym, B::AbstractVecOrMat)
361361
if size(C,2) != nB
362362
throw(DimensionMismatch("A has second dimension $nA, B has $(size(B,2)), C has $(size(C,2)) but all must match"))
363363
end
364-
nA <= 3 && return A_mul_B!(C, convert(Array, A), convert(Array, B))
364+
nA <= 3 && return A_mul_B!(C, full(A), full(B))
365365
l = diag(A, -1)
366366
d = diag(A, 0)
367367
u = diag(A, 1)
@@ -382,7 +382,7 @@ end
382382
function A_mul_B_td!(C::AbstractMatrix, A::AbstractMatrix, B::BiTriSym)
383383
check_A_mul_B!_sizes(C, A, B)
384384
n = size(A,1)
385-
n <= 3 && return A_mul_B!(C, convert(Array, A), convert(Array, B))
385+
n <= 3 && return A_mul_B!(C, full(A), full(B))
386386
m = size(B,2)
387387
Bl = diag(B, -1)
388388
Bd = diag(B, 0)
@@ -412,12 +412,12 @@ end
412412

413413
SpecialMatrix = Union{Bidiagonal, SymTridiagonal, Tridiagonal}
414414
# to avoid ambiguity warning, but shouldn't be necessary
415-
*(A::AbstractTriangular, B::SpecialMatrix) = convert(Array, A) * convert(Array, B)
416-
*(A::SpecialMatrix, B::SpecialMatrix) = convert(Array, A) * convert(Array, B)
415+
*(A::AbstractTriangular, B::SpecialMatrix) = full(A) * full(B)
416+
*(A::SpecialMatrix, B::SpecialMatrix) = full(A) * full(B)
417417

418418
#Generic multiplication
419419
for func in (:*, :Ac_mul_B, :A_mul_Bc, :/, :A_rdiv_Bc)
420-
@eval ($func){T}(A::Bidiagonal{T}, B::AbstractVector{T}) = ($func)(convert(Array, A), B)
420+
@eval ($func){T}(A::Bidiagonal{T}, B::AbstractVector{T}) = ($func)(full(A), B)
421421
end
422422

423423
#Linear solvers

base/linalg/dense.jl

+9-9
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ expm(x::Number) = exp(x)
206206
function expm!{T<:BlasFloat}(A::StridedMatrix{T})
207207
n = checksquare(A)
208208
if ishermitian(A)
209-
return convert(Array, expm(Hermitian(A)))
209+
return full(expm(Hermitian(A)))
210210
end
211211
ilo, ihi, scale = LAPACK.gebal!('B', A) # modifies A
212212
nA = norm(A, 1)
@@ -321,13 +321,13 @@ function logm{T}(A::StridedMatrix{T})
321321
return full(logm(Symmetric(A)))
322322
end
323323
if ishermitian(A)
324-
return convert(Array, logm(Hermitian(A)))
324+
return full(logm(Hermitian(A)))
325325
end
326326

327327
# Use Schur decomposition
328328
n = checksquare(A)
329329
if istriu(A)
330-
retmat = convert(Array, logm(UpperTriangular(complex(A))))
330+
retmat = full(logm(UpperTriangular(complex(A))))
331331
d = diag(A)
332332
else
333333
S,Q,d = schur(complex(A))
@@ -358,27 +358,27 @@ logm(a::Complex) = log(a)
358358

359359
function sqrtm{T<:Real}(A::StridedMatrix{T})
360360
if issymmetric(A)
361-
return convert(Array, sqrtm(Symmetric(A)))
361+
return full(sqrtm(Symmetric(A)))
362362
end
363363
n = checksquare(A)
364364
if istriu(A)
365-
return convert(Array, sqrtm(UpperTriangular(A)))
365+
return full(sqrtm(UpperTriangular(A)))
366366
else
367367
SchurF = schurfact(complex(A))
368-
R = convert(Array, sqrtm(UpperTriangular(SchurF[:T])))
368+
R = full(sqrtm(UpperTriangular(SchurF[:T])))
369369
return SchurF[:vectors] * R * SchurF[:vectors]'
370370
end
371371
end
372372
function sqrtm{T<:Complex}(A::StridedMatrix{T})
373373
if ishermitian(A)
374-
return convert(Array, sqrtm(Hermitian(A)))
374+
return full(sqrtm(Hermitian(A)))
375375
end
376376
n = checksquare(A)
377377
if istriu(A)
378-
return convert(Array, sqrtm(UpperTriangular(A)))
378+
return full(sqrtm(UpperTriangular(A)))
379379
else
380380
SchurF = schurfact(A)
381-
R = convert(Array, sqrtm(UpperTriangular(SchurF[:T])))
381+
R = full(sqrtm(UpperTriangular(SchurF[:T])))
382382
return SchurF[:vectors] * R * SchurF[:vectors]'
383383
end
384384
end

base/linalg/diagonal.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ svdvals(D::Diagonal) = [svdvals(v) for v in D.diag]
314314
function svd{T<:Number}(D::Diagonal{T})
315315
S = abs(D.diag)
316316
piv = sortperm(S, rev = true)
317-
U = convert(Array, Diagonal(D.diag ./ S))
317+
U = full(Diagonal(D.diag ./ S))
318318
Up = hcat([U[:,i] for i = 1:length(D.diag)][piv]...)
319319
V = eye(D)
320320
Vp = hcat([V[:,i] for i = 1:length(D.diag)][piv]...)

base/linalg/hessenberg.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ end
2323
Compute the Hessenberg decomposition of `A` and return a `Hessenberg` object. If `F` is the
2424
factorization object, the unitary matrix can be accessed with `F[:Q]` and the Hessenberg
2525
matrix with `F[:H]`. When `Q` is extracted, the resulting type is the `HessenbergQ` object,
26-
and may be converted to a regular matrix with [`convert(Array, _)`](:func:`convert`).
26+
and may be converted to a regular matrix with [`full`](:func:`full`).
2727
"""
2828
hessfact
2929

@@ -56,7 +56,7 @@ end
5656
convert{T<:BlasFloat}(::Type{Matrix}, A::HessenbergQ{T}) = LAPACK.orghr!(1, size(A.factors, 1), copy(A.factors), A.τ)
5757
convert(::Type{Array}, A::HessenbergQ) = convert(Matrix, A)
5858
full(A::HessenbergQ) = convert(Array, A)
59-
convert(::Type{AbstractMatrix}, F::Hessenberg) = (fq = convert(Array, F[:Q]); (fq * F[:H]) * fq')
59+
convert(::Type{AbstractMatrix}, F::Hessenberg) = (fq = full(F[:Q]); (fq * F[:H]) * fq')
6060
convert(::Type{AbstractArray}, F::Hessenberg) = convert(AbstractMatrix, F)
6161
convert(::Type{Matrix}, F::Hessenberg) = convert(Array, convert(AbstractArray, F))
6262
convert(::Type{Array}, F::Hessenberg) = convert(Matrix, F)

base/linalg/lq.jl

+3-4
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,8 @@ zeros if the full `Q` is requested.
4242
"""
4343
function lq(A::Union{Number, AbstractMatrix}; thin::Bool=true)
4444
F = lqfact(A)
45-
F[:L], thin ? convert(Array, F[:Q]) : thickQ(F[:Q])
45+
F[:L], full(F[:Q], thin=thin)
4646
end
47-
thickQ{T}(Q::LQPackedQ{T}) = A_mul_B!(Q, eye(T, size(Q.factors,2), size(Q.factors,1)))
4847

4948
copy(A::LQ) = LQ(copy(A.factors), copy(A.τ))
5049

@@ -113,8 +112,8 @@ size(A::LQPackedQ) = size(A.factors)
113112

114113
## Multiplication by LQ
115114
A_mul_B!{T<:BlasFloat}(A::LQ{T}, B::StridedVecOrMat{T}) = A[:L]*LAPACK.ormlq!('L','N',A.factors,A.τ,B)
116-
A_mul_B!{T<:BlasFloat}(A::LQ{T}, B::QR{T}) = A[:L]*LAPACK.ormlq!('L','N',A.factors,A.τ,convert(Array, B))
117-
A_mul_B!{T<:BlasFloat}(A::QR{T}, B::LQ{T}) = A_mul_B!(zeros(convert(Array, A)), convert(Array, A), convert(Array, B))
115+
A_mul_B!{T<:BlasFloat}(A::LQ{T}, B::QR{T}) = A[:L]*LAPACK.ormlq!('L','N',A.factors,A.τ,full(B))
116+
A_mul_B!{T<:BlasFloat}(A::QR{T}, B::LQ{T}) = A_mul_B!(zeros(full(A)), full(A), full(B))
118117
function *{TA,TB}(A::LQ{TA},B::StridedVecOrMat{TB})
119118
TAB = promote_type(TA, TB)
120119
A_mul_B!(convert(Factorization{TAB},A), copy_oftype(B, TAB))

base/linalg/lu.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -308,15 +308,15 @@ factorize(A::Tridiagonal) = lufact(A)
308308
function getindex{T}(F::Base.LinAlg.LU{T,Tridiagonal{T}}, d::Symbol)
309309
m, n = size(F)
310310
if d == :L
311-
L = convert(Array, Bidiagonal(ones(T, n), F.factors.dl, false))
311+
L = full(Bidiagonal(ones(T, n), F.factors.dl, false))
312312
for i = 2:n
313313
tmp = L[F.ipiv[i], 1:i - 1]
314314
L[F.ipiv[i], 1:i - 1] = L[i, 1:i - 1]
315315
L[i, 1:i - 1] = tmp
316316
end
317317
return L
318318
elseif d == :U
319-
U = convert(Array, Bidiagonal(F.factors.d, F.factors.du, true))
319+
U = full(Bidiagonal(F.factors.d, F.factors.du, true))
320320
for i = 1:n - 2
321321
U[i,i + 2] = F.factors.du2[i]
322322
end

base/linalg/qr.jl

+2-5
Original file line numberDiff line numberDiff line change
@@ -174,14 +174,13 @@ qr(A::Union{Number, AbstractMatrix}, pivot::Union{Type{Val{false}}, Type{Val{tru
174174
_qr(A, pivot, thin=thin)
175175
function _qr(A::Union{Number, AbstractMatrix}, ::Type{Val{false}}; thin::Bool=true)
176176
F = qrfact(A, Val{false})
177-
(thin ? convert(Array, getq(F)) : thickQ(getq(F))), F[:R]::Matrix{eltype(F)}
177+
full(getq(F), thin=thin), F[:R]::Matrix{eltype(F)}
178178
end
179179
function _qr(A::Union{Number, AbstractMatrix}, ::Type{Val{true}}; thin::Bool=true)
180180
F = qrfact(A, Val{true})
181-
(thin ? convert(Array, getq(F)) : thickQ(getq(F))), F[:R]::Matrix{eltype(F)}, F[:p]::Vector{BlasInt}
181+
full(getq(F), thin=thin), F[:R]::Matrix{eltype(F)}, F[:p]::Vector{BlasInt}
182182
end
183183

184-
185184
"""
186185
qr(v::AbstractVector)
187186
@@ -326,8 +325,6 @@ function full{T}(A::Union{QRPackedQ{T},QRCompactWYQ{T}}; thin::Bool = true)
326325
end
327326
end
328327

329-
thickQ{T}(Q::Union{QRPackedQ{T},QRCompactWYQ{T}}) = A_mul_B!(Q, eye(T, size(Q.factors, 1)))
330-
331328
size(A::Union{QR,QRCompactWY,QRPivoted}, dim::Integer) = size(A.factors, dim)
332329
size(A::Union{QR,QRCompactWY,QRPivoted}) = size(A.factors)
333330
size(A::Union{QRPackedQ,QRCompactWYQ}, dim::Integer) = 0 < dim ? (dim <= 2 ? size(A.factors, 1) : 1) : throw(BoundsError())

base/linalg/special.jl

+10-10
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@
66
convert{T}(::Type{Bidiagonal}, A::Diagonal{T})=Bidiagonal(A.diag, zeros(T, size(A.diag,1)-1), true)
77
convert{T}(::Type{SymTridiagonal}, A::Diagonal{T})=SymTridiagonal(A.diag, zeros(T, size(A.diag,1)-1))
88
convert{T}(::Type{Tridiagonal}, A::Diagonal{T})=Tridiagonal(zeros(T, size(A.diag,1)-1), A.diag, zeros(T, size(A.diag,1)-1))
9-
convert(::Type{LowerTriangular}, A::Bidiagonal) = !A.isupper ? LowerTriangular(convert(Array, A)) : throw(ArgumentError("Bidiagonal matrix must have lower off diagonal to be converted to LowerTriangular"))
10-
convert(::Type{UpperTriangular}, A::Bidiagonal) = A.isupper ? UpperTriangular(convert(Array, A)) : throw(ArgumentError("Bidiagonal matrix must have upper off diagonal to be converted to UpperTriangular"))
9+
convert(::Type{LowerTriangular}, A::Bidiagonal) = !A.isupper ? LowerTriangular(full(A)) : throw(ArgumentError("Bidiagonal matrix must have lower off diagonal to be converted to LowerTriangular"))
10+
convert(::Type{UpperTriangular}, A::Bidiagonal) = A.isupper ? UpperTriangular(full(A)) : throw(ArgumentError("Bidiagonal matrix must have upper off diagonal to be converted to UpperTriangular"))
1111

1212
function convert(::Type{UnitUpperTriangular}, A::Diagonal)
1313
if !all(A.diag .== one(eltype(A)))
1414
throw(ArgumentError("matrix cannot be represented as UnitUpperTriangular"))
1515
end
16-
UnitUpperTriangular(convert(Array, A))
16+
UnitUpperTriangular(full(A))
1717
end
1818

1919
function convert(::Type{UnitLowerTriangular}, A::Diagonal)
2020
if !all(A.diag .== one(eltype(A)))
2121
throw(ArgumentError("matrix cannot be represented as UnitLowerTriangular"))
2222
end
23-
UnitLowerTriangular(convert(Array, A))
23+
UnitLowerTriangular(full(A))
2424
end
2525

2626
function convert(::Type{Diagonal}, A::Union{Bidiagonal, SymTridiagonal})
@@ -72,14 +72,14 @@ function convert(::Type{Tridiagonal}, A::SymTridiagonal)
7272
end
7373

7474
function convert(::Type{Diagonal}, A::AbstractTriangular)
75-
if convert(Array, A) != diagm(diag(A))
75+
if full(A) != diagm(diag(A))
7676
throw(ArgumentError("matrix cannot be represented as Diagonal"))
7777
end
7878
Diagonal(diag(A))
7979
end
8080

8181
function convert(::Type{Bidiagonal}, A::AbstractTriangular)
82-
fA = convert(Array, A)
82+
fA = full(A)
8383
if fA == diagm(diag(A)) + diagm(diag(fA, 1), 1)
8484
return Bidiagonal(diag(A), diag(fA,1), true)
8585
elseif fA == diagm(diag(A)) + diagm(diag(fA, -1), -1)
@@ -92,7 +92,7 @@ end
9292
convert(::Type{SymTridiagonal}, A::AbstractTriangular) = convert(SymTridiagonal, convert(Tridiagonal, A))
9393

9494
function convert(::Type{Tridiagonal}, A::AbstractTriangular)
95-
fA = convert(Array, A)
95+
fA = full(A)
9696
if fA == diagm(diag(A)) + diagm(diag(fA, 1), 1) + diagm(diag(fA, -1), -1)
9797
return Tridiagonal(diag(fA, -1), diag(A), diag(fA,1))
9898
else
@@ -154,12 +154,12 @@ for op in (:+, :-)
154154
end
155155
for matrixtype in (:SymTridiagonal,:Tridiagonal,:Bidiagonal,:Matrix)
156156
@eval begin
157-
($op)(A::AbstractTriangular, B::($matrixtype)) = ($op)(convert(Array, A), B)
158-
($op)(A::($matrixtype), B::AbstractTriangular) = ($op)(A, convert(Array, B))
157+
($op)(A::AbstractTriangular, B::($matrixtype)) = ($op)(full(A), B)
158+
($op)(A::($matrixtype), B::AbstractTriangular) = ($op)(A, full(B))
159159
end
160160
end
161161
end
162162

163163
A_mul_Bc!(A::AbstractTriangular, B::QRCompactWYQ) = A_mul_Bc!(full!(A),B)
164164
A_mul_Bc!(A::AbstractTriangular, B::QRPackedQ) = A_mul_Bc!(full!(A),B)
165-
A_mul_Bc(A::AbstractTriangular, B::Union{QRCompactWYQ,QRPackedQ}) = A_mul_Bc(convert(Array, A), B)
165+
A_mul_Bc(A::AbstractTriangular, B::Union{QRCompactWYQ,QRPackedQ}) = A_mul_Bc(full(A), B)

base/linalg/symmetric.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,8 @@ A_mul_B!{T<:BlasFloat,S<:StridedMatrix}(C::StridedMatrix{T}, A::StridedMatrix{T}
174174
A_mul_B!{T<:BlasComplex,S<:StridedMatrix}(C::StridedMatrix{T}, A::Hermitian{T,S}, B::StridedMatrix{T}) = BLAS.hemm!('L', A.uplo, one(T), A.data, B, zero(T), C)
175175
A_mul_B!{T<:BlasComplex,S<:StridedMatrix}(C::StridedMatrix{T}, A::StridedMatrix{T}, B::Hermitian{T,S}) = BLAS.hemm!('R', B.uplo, one(T), B.data, A, zero(T), C)
176176

177-
*(A::HermOrSym, B::HermOrSym) = convert(Array, A)*convert(Array, B)
178-
*(A::StridedMatrix, B::HermOrSym) = A*convert(Array, B)
177+
*(A::HermOrSym, B::HermOrSym) = full(A)*full(B)
178+
*(A::StridedMatrix, B::HermOrSym) = A*full(B)
179179

180180
bkfact(A::HermOrSym) = bkfact(A.data, Symbol(A.uplo), issymmetric(A))
181181
factorize(A::HermOrSym) = bkfact(A)

base/linalg/triangular.jl

+7-7
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ scale!(c::Number, A::Union{UpperTriangular,LowerTriangular}) = scale!(A,c)
362362
+(A::UnitLowerTriangular, B::LowerTriangular) = LowerTriangular(tril(A.data, -1) + B.data + I)
363363
+(A::UnitUpperTriangular, B::UnitUpperTriangular) = UpperTriangular(triu(A.data, 1) + triu(B.data, 1) + 2I)
364364
+(A::UnitLowerTriangular, B::UnitLowerTriangular) = LowerTriangular(tril(A.data, -1) + tril(B.data, -1) + 2I)
365-
+(A::AbstractTriangular, B::AbstractTriangular) = convert(Array, A) + convert(Array, B)
365+
+(A::AbstractTriangular, B::AbstractTriangular) = full(A) + full(B)
366366

367367
-(A::UpperTriangular, B::UpperTriangular) = UpperTriangular(A.data - B.data)
368368
-(A::LowerTriangular, B::LowerTriangular) = LowerTriangular(A.data - B.data)
@@ -372,15 +372,15 @@ scale!(c::Number, A::Union{UpperTriangular,LowerTriangular}) = scale!(A,c)
372372
-(A::UnitLowerTriangular, B::LowerTriangular) = LowerTriangular(tril(A.data, -1) - B.data + I)
373373
-(A::UnitUpperTriangular, B::UnitUpperTriangular) = UpperTriangular(triu(A.data, 1) - triu(B.data, 1))
374374
-(A::UnitLowerTriangular, B::UnitLowerTriangular) = LowerTriangular(tril(A.data, -1) - tril(B.data, -1))
375-
-(A::AbstractTriangular, B::AbstractTriangular) = convert(Array, A) - convert(Array, B)
375+
-(A::AbstractTriangular, B::AbstractTriangular) = full(A) - full(B)
376376

377377
######################
378378
# BlasFloat routines #
379379
######################
380380

381381
A_mul_B!(A::Tridiagonal, B::AbstractTriangular) = A*full!(B)
382-
A_mul_B!(C::AbstractMatrix, A::AbstractTriangular, B::Tridiagonal) = A_mul_B!(C, convert(Array, A), B)
383-
A_mul_B!(C::AbstractMatrix, A::Tridiagonal, B::AbstractTriangular) = A_mul_B!(C, A, convert(Array, B))
382+
A_mul_B!(C::AbstractMatrix, A::AbstractTriangular, B::Tridiagonal) = A_mul_B!(C, full(A), B)
383+
A_mul_B!(C::AbstractMatrix, A::Tridiagonal, B::AbstractTriangular) = A_mul_B!(C, A, full(B))
384384
A_mul_B!(C::AbstractVector, A::AbstractTriangular, B::AbstractVector) = A_mul_B!(A, copy!(C, B))
385385
A_mul_B!(C::AbstractMatrix, A::AbstractTriangular, B::AbstractVecOrMat) = A_mul_B!(A, copy!(C, B))
386386
A_mul_B!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVecOrMat) = A_mul_B!(A, copy!(C, B))
@@ -437,7 +437,7 @@ for (t, uploc, isunitc) in ((:LowerTriangular, 'L', 'N'),
437437
elseif p == Inf
438438
return inv(LAPACK.trcon!('I', $uploc, $isunitc, A.data))
439439
else #use fallback
440-
return cond(convert(Array, A), p)
440+
return cond(full(A), p)
441441
end
442442
end
443443
end
@@ -1321,7 +1321,7 @@ end
13211321
## Some Triangular-Triangular cases. We might want to write taylored methods for these cases, but I'm not sure it is worth it.
13221322
for t in (UpperTriangular, UnitUpperTriangular, LowerTriangular, UnitLowerTriangular)
13231323
@eval begin
1324-
(*)(A::Tridiagonal, B::$t) = A_mul_B!(convert(Array, A), B)
1324+
(*)(A::Tridiagonal, B::$t) = A_mul_B!(full(A), B)
13251325
end
13261326
end
13271327

@@ -1987,7 +1987,7 @@ eigfact(A::AbstractTriangular) = Eigen(eigvals(A), eigvecs(A))
19871987
#Generic singular systems
19881988
for func in (:svd, :svdfact, :svdfact!, :svdvals)
19891989
@eval begin
1990-
($func)(A::AbstractTriangular) = ($func)(convert(Array, A))
1990+
($func)(A::AbstractTriangular) = ($func)(full(A))
19911991
end
19921992
end
19931993

0 commit comments

Comments
 (0)