@@ -135,17 +135,13 @@ function Matrix{T}(M::SymTridiagonal) where T
135135 n = size (M, 1 )
136136 Mf = Matrix {T} (undef, n, n)
137137 n == 0 && return Mf
138- if haszero (T) # optimized path for types with zero(T) defined
139- n > 2 && fill! (Mf, zero (T))
140- @inbounds for i = 1 : n- 1
141- Mf[i,i] = symmetric (M. dv[i], :U )
142- Mf[i+ 1 ,i] = transpose (M. ev[i])
143- Mf[i,i+ 1 ] = M. ev[i]
144- end
145- Mf[n,n] = symmetric (M. dv[n], :U )
146- else
147- copyto! (Mf, M)
138+ n > 2 && fill! (Mf, zero (T))
139+ @inbounds for i = 1 : n- 1
140+ Mf[i,i] = symmetric (M. dv[i], :U )
141+ Mf[i+ 1 ,i] = transpose (M. ev[i])
142+ Mf[i,i+ 1 ] = M. ev[i]
148143 end
144+ Mf[n,n] = symmetric (M. dv[n], :U )
149145 return Mf
150146end
151147Matrix (M:: SymTridiagonal{T} ) where {T} = Matrix {promote_type(T, typeof(zero(T)))} (M)
@@ -590,14 +586,15 @@ axes(M::Tridiagonal) = (ax = axes(M.d,1); (ax, ax))
590586
591587function Matrix {T} (M:: Tridiagonal ) where {T}
592588 A = Matrix {T} (undef, size (M))
593- if haszero (T) # optimized path for types with zero(T) defined
594- size (A,1 ) > 2 && fill! (A, zero (T))
595- copyto! (view (A, diagind (A)), M. d)
596- copyto! (view (A, diagind (A,1 )), M. du)
597- copyto! (view (A, diagind (A,- 1 )), M. dl)
598- else
599- copyto! (A, M)
600- end
589+ n = length (M. d)
590+ n == 0 && return A
591+ n > 2 && fill! (A, zero (T))
592+ for i in 1 : n- 1
593+ A[i,i] = M. d[i]
594+ A[i+ 1 ,i] = M. dl[i]
595+ A[i,i+ 1 ] = M. du[i]
596+ end
597+ A[n,n] = M. d[n]
601598 A
602599end
603600Matrix (M:: Tridiagonal{T} ) where {T} = Matrix {promote_type(T, typeof(zero(T)))} (M)
0 commit comments