@@ -177,6 +177,29 @@ function \(U::UnitUpperTriangular, H::UpperHessenberg)
177177 UpperHessenberg (HH)
178178end
179179
180+ function (\ )(H:: Union{UpperHessenberg,AdjOrTrans{<:Any,<:UpperHessenberg}} , B:: AbstractVecOrMat )
181+ TFB = typeof (oneunit (eltype (H)) \ oneunit (eltype (B)))
182+ return ldiv! (H, copy_similar (B, TFB))
183+ end
184+
185+ function (/ )(B:: AbstractMatrix , H:: Union{UpperHessenberg,AdjOrTrans{<:Any,<:UpperHessenberg}} )
186+ TFB = typeof (oneunit (eltype (B)) / oneunit (eltype (H)))
187+ return rdiv! (copy_similar (B, TFB), H)
188+ end
189+
190+ ldiv! (H:: AdjOrTrans{<:Any,<:UpperHessenberg} , B:: AbstractVecOrMat ) =
191+ (rdiv! (wrapperop (H)(B), parent (H)); B)
192+ rdiv! (B:: AbstractVecOrMat , H:: AdjOrTrans{<:Any,<:UpperHessenberg} ) =
193+ (ldiv! (parent (H), wrapperop (H)(B)); B)
194+
195+ # fix method ambiguities for right division, from adjtrans.jl:
196+ / (u:: AdjointAbsVec , A:: UpperHessenberg ) = adjoint (adjoint (A) \ u. parent)
197+ / (u:: TransposeAbsVec , A:: UpperHessenberg ) = transpose (transpose (A) \ u. parent)
198+ / (u:: AdjointAbsVec , A:: Adjoint{<:Any,<:UpperHessenberg} ) = adjoint (adjoint (A) \ u. parent)
199+ / (u:: TransposeAbsVec , A:: Transpose{<:Any,<:UpperHessenberg} ) = transpose (transpose (A) \ u. parent)
200+ / (u:: AdjointAbsVec , A:: Transpose{<:Any,<:UpperHessenberg} ) = adjoint (conj (A. parent) \ u. parent) # technically should be adjoint(copy(adjoint(copy(A))) \ u.parent)
201+ / (u:: TransposeAbsVec , A:: Adjoint{<:Any,<:UpperHessenberg} ) = transpose (conj (A. parent) \ u. parent)
202+
180203# Solving (H+µI)x = b: we can do this in O(m²) time and O(m) memory
181204# (in-place in x) by the RQ algorithm from:
182205#
0 commit comments