@@ -177,28 +177,35 @@ function \(U::UnitUpperTriangular, H::UpperHessenberg)
177
177
UpperHessenberg (HH)
178
178
end
179
179
180
- function (\ )(H:: Union{UpperHessenberg,AdjOrTrans{<:Any,<:UpperHessenberg}} , B:: AbstractVecOrMat )
180
+ AdjUpperHessenberg{T,S<: UpperHessenberg{T} } = Adjoint{T, S}
181
+ TransUpperHessenberg{T,S<: UpperHessenberg{T} } = Transpose{T, S}
182
+ AdjOrTransUpperHessenberg{T,S<: UpperHessenberg{T} } = AdjOrTrans{T, S}
183
+
184
+ function (\ )(H:: Union{UpperHessenberg,AdjOrTransUpperHessenberg} , B:: AbstractVecOrMat )
181
185
TFB = typeof (oneunit (eltype (H)) \ oneunit (eltype (B)))
182
186
return ldiv! (H, copy_similar (B, TFB))
183
187
end
184
188
185
- function (/ )(B:: AbstractMatrix , H:: Union{UpperHessenberg,AdjOrTrans{<:Any,<:UpperHessenberg}} )
189
+ (/ )(B:: AbstractMatrix , H:: UpperHessenberg ) = _rdiv (B, H)
190
+ (/ )(B:: AbstractMatrix , H:: AdjUpperHessenberg ) = _rdiv (B, H)
191
+ (/ )(B:: AbstractMatrix , H:: TransUpperHessenberg ) = _rdiv (B, H)
192
+ function _rdiv (B, H)
186
193
TFB = typeof (oneunit (eltype (B)) / oneunit (eltype (H)))
187
194
return rdiv! (copy_similar (B, TFB), H)
188
195
end
189
196
190
- ldiv! (H:: AdjOrTrans{<:Any,<:UpperHessenberg} , B:: AbstractVecOrMat ) =
197
+ ldiv! (H:: AdjOrTransUpperHessenberg , B:: AbstractVecOrMat ) =
191
198
(rdiv! (wrapperop (H)(B), parent (H)); B)
192
- rdiv! (B:: AbstractVecOrMat , H:: AdjOrTrans{<:Any,<:UpperHessenberg} ) =
199
+ rdiv! (B:: AbstractVecOrMat , H:: AdjOrTransUpperHessenberg ) =
193
200
(ldiv! (parent (H), wrapperop (H)(B)); B)
194
201
195
202
# fix method ambiguities for right division, from adjtrans.jl:
196
203
/ (u:: AdjointAbsVec , A:: UpperHessenberg ) = adjoint (adjoint (A) \ u. parent)
197
204
/ (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)
205
+ / (u:: AdjointAbsVec , A:: AdjUpperHessenberg ) = adjoint (adjoint (A) \ u. parent)
206
+ / (u:: TransposeAbsVec , A:: TransUpperHessenberg ) = transpose (transpose (A) \ u. parent)
207
+ / (u:: AdjointAbsVec , A:: TransUpperHessenberg ) = adjoint (conj (A. parent) \ u. parent) # technically should be adjoint(copy(adjoint(copy(A))) \ u.parent)
208
+ / (u:: TransposeAbsVec , A:: AdjUpperHessenberg ) = transpose (conj (A. parent) \ u. parent)
202
209
203
210
# Solving (H+µI)x = b: we can do this in O(m²) time and O(m) memory
204
211
# (in-place in x) by the RQ algorithm from:
0 commit comments