@@ -113,19 +113,22 @@ end
113113similar (S:: SymTridiagonal , :: Type{T} ) where {T} = SymTridiagonal (similar (S. dv, T), similar (S. ev, T))
114114similar (S:: SymTridiagonal , :: Type{T} , dims:: Union{Dims{1},Dims{2}} ) where {T} = spzeros (T, dims... )
115115
116+ function copyto! (dest:: SymTridiagonal , bc:: Broadcasted{PromoteToSparse} )
117+ axs = axes (dest)
118+ axes (bc) == axs || Broadcast. throwdm (axes (bc), axs)
119+ for i in axs[1 ]
120+ dest. dv[i] = Broadcast. _broadcast_getindex (bc, CartesianIndex (i, i))
121+ end
122+ for i = 1 : size (dest, 1 )- 1
123+ dest. ev[i] = Broadcast. _broadcast_getindex (bc, CartesianIndex (i, i+ 1 ))
124+ end
125+ dest
126+ end
127+
116128# Elementary operations
117- broadcast (:: typeof (abs), M:: SymTridiagonal ) = SymTridiagonal (abs .(M. dv), abs .(M. ev))
118- broadcast (:: typeof (round), M:: SymTridiagonal ) = SymTridiagonal (round .(M. dv), round .(M. ev))
119- broadcast (:: typeof (trunc), M:: SymTridiagonal ) = SymTridiagonal (trunc .(M. dv), trunc .(M. ev))
120- broadcast (:: typeof (floor), M:: SymTridiagonal ) = SymTridiagonal (floor .(M. dv), floor .(M. ev))
121- broadcast (:: typeof (ceil), M:: SymTridiagonal ) = SymTridiagonal (ceil .(M. dv), ceil .(M. ev))
122129for func in (:conj , :copy , :real , :imag )
123130 @eval ($ func)(M:: SymTridiagonal ) = SymTridiagonal (($ func)(M. dv), ($ func)(M. ev))
124131end
125- broadcast (:: typeof (round), :: Type{T} , M:: SymTridiagonal ) where {T<: Integer } = SymTridiagonal (round .(T, M. dv), round .(T, M. ev))
126- broadcast (:: typeof (trunc), :: Type{T} , M:: SymTridiagonal ) where {T<: Integer } = SymTridiagonal (trunc .(T, M. dv), trunc .(T, M. ev))
127- broadcast (:: typeof (floor), :: Type{T} , M:: SymTridiagonal ) where {T<: Integer } = SymTridiagonal (floor .(T, M. dv), floor .(T, M. ev))
128- broadcast (:: typeof (ceil), :: Type{T} , M:: SymTridiagonal ) where {T<: Integer } = SymTridiagonal (ceil .(T, M. dv), ceil .(T, M. ev))
129132
130133transpose (M:: SymTridiagonal ) = M # Identity operation
131134adjoint (M:: SymTridiagonal ) = conj (M)
@@ -500,24 +503,11 @@ similar(M::Tridiagonal, ::Type{T}, dims::Union{Dims{1},Dims{2}}) where {T} = spz
500503copyto! (dest:: Tridiagonal , src:: Tridiagonal ) = (copyto! (dest. dl, src. dl); copyto! (dest. d, src. d); copyto! (dest. du, src. du); dest)
501504
502505# Elementary operations
503- broadcast (:: typeof (abs), M:: Tridiagonal ) = Tridiagonal (abs .(M. dl), abs .(M. d), abs .(M. du))
504- broadcast (:: typeof (round), M:: Tridiagonal ) = Tridiagonal (round .(M. dl), round .(M. d), round .(M. du))
505- broadcast (:: typeof (trunc), M:: Tridiagonal ) = Tridiagonal (trunc .(M. dl), trunc .(M. d), trunc .(M. du))
506- broadcast (:: typeof (floor), M:: Tridiagonal ) = Tridiagonal (floor .(M. dl), floor .(M. d), floor .(M. du))
507- broadcast (:: typeof (ceil), M:: Tridiagonal ) = Tridiagonal (ceil .(M. dl), ceil .(M. d), ceil .(M. du))
508506for func in (:conj , :copy , :real , :imag )
509507 @eval function ($ func)(M:: Tridiagonal )
510508 Tridiagonal (($ func)(M. dl), ($ func)(M. d), ($ func)(M. du))
511509 end
512510end
513- broadcast (:: typeof (round), :: Type{T} , M:: Tridiagonal ) where {T<: Integer } =
514- Tridiagonal (round .(T, M. dl), round .(T, M. d), round .(T, M. du))
515- broadcast (:: typeof (trunc), :: Type{T} , M:: Tridiagonal ) where {T<: Integer } =
516- Tridiagonal (trunc .(T, M. dl), trunc .(T, M. d), trunc .(T, M. du))
517- broadcast (:: typeof (floor), :: Type{T} , M:: Tridiagonal ) where {T<: Integer } =
518- Tridiagonal (floor .(T, M. dl), floor .(T, M. d), floor .(T, M. du))
519- broadcast (:: typeof (ceil), :: Type{T} , M:: Tridiagonal ) where {T<: Integer } =
520- Tridiagonal (ceil .(T, M. dl), ceil .(T, M. d), ceil .(T, M. du))
521511
522512transpose (M:: Tridiagonal ) = Tridiagonal (M. du, M. d, M. dl)
523513adjoint (M:: Tridiagonal ) = conj (transpose (M))
@@ -576,6 +566,19 @@ function Base.replace_in_print_matrix(A::Tridiagonal,i::Integer,j::Integer,s::Ab
576566 i== j- 1 || i== j|| i== j+ 1 ? s : Base. replace_with_centered_mark (s)
577567end
578568
569+ function copyto! (dest:: Tridiagonal , bc:: Broadcasted{PromoteToSparse} )
570+ axs = axes (dest)
571+ axes (bc) == axs || Broadcast. throwdm (axes (bc), axs)
572+ for i in axs[1 ]
573+ dest. d[i] = Broadcast. _broadcast_getindex (bc, CartesianIndex (i, i))
574+ end
575+ for i = 1 : size (dest, 1 )- 1
576+ dest. du[i] = Broadcast. _broadcast_getindex (bc, CartesianIndex (i, i+ 1 ))
577+ dest. dl[i] = Broadcast. _broadcast_getindex (bc, CartesianIndex (i+ 1 , i))
578+ end
579+ dest
580+ end
581+
579582# tril and triu
580583
581584istriu (M:: Tridiagonal ) = iszero (M. dl)
0 commit comments