@@ -236,22 +236,23 @@ true
236
236
```
237
237
"""
238
238
function eigen (A:: AbstractMatrix{T} ; permute:: Bool = true , scale:: Bool = true , sortby:: Union{Function,Nothing} = eigsortby) where T
239
- isdiag (A) && return eigen (Diagonal {eigtype(T)} (diag (A)); sortby)
240
- ishermitian (A) && return eigen! (eigencopy_oftype (Hermitian (A), eigtype (T)); sortby)
241
- AA = eigencopy_oftype (A, eigtype (T))
242
- return eigen! (AA; permute, scale, sortby)
239
+ _eigen (A; permute, scale, sortby)
243
240
end
244
241
function eigen (A:: AbstractMatrix{T} ; permute:: Bool = true , scale:: Bool = true , sortby:: Union{Function,Nothing} = eigsortby) where {T <: Union{Float16,Complex{Float16}} }
242
+ E = _eigen (A; permute, scale, sortby)
243
+ values = convert (AbstractVector{isreal (E. values) ? Float16 : Complex{Float16}}, E. values)
244
+ vectors = convert (AbstractMatrix{isreal (E. vectors) ? Float16 : Complex{Float16}}, E. vectors)
245
+ return Eigen (values, vectors)
246
+ end
247
+ function _eigen (A:: AbstractMatrix{T} ; permute= true , scale= true , sortby= eigsortby) where {T}
245
248
isdiag (A) && return eigen (Diagonal {eigtype(T)} (diag (A)); sortby)
246
- E = if ishermitian (A)
249
+ if ishermitian (A)
247
250
eigen! (eigencopy_oftype (Hermitian (A), eigtype (T)); sortby)
248
251
else
249
252
eigen! (eigencopy_oftype (A, eigtype (T)); permute, scale, sortby)
250
253
end
251
- values = convert (AbstractVector{isreal (E. values) ? Float16 : Complex{Float16}}, E. values)
252
- vectors = convert (AbstractMatrix{isreal (E. vectors) ? Float16 : Complex{Float16}}, E. vectors)
253
- return Eigen (values, vectors)
254
254
end
255
+
255
256
eigen (x:: Number ) = Eigen ([x], fill (one (x), 1 , 1 ))
256
257
257
258
"""
0 commit comments