117117# the off diagonal could be a different type after the operation resulting in
118118# an error. See issue #28994
119119
120- function (+ )(A:: Bidiagonal , B:: Diagonal )
120+ @commutative function (+ )(A:: Bidiagonal , B:: Diagonal )
121121 newdv = A. dv + B. diag
122122 Bidiagonal (newdv, typeof (newdv)(A. ev), A. uplo)
123123end
@@ -127,104 +127,98 @@ function (-)(A::Bidiagonal, B::Diagonal)
127127 Bidiagonal (newdv, typeof (newdv)(A. ev), A. uplo)
128128end
129129
130- function (+ )(A:: Diagonal , B:: Bidiagonal )
131- newdv = A. diag + B. dv
132- Bidiagonal (newdv, typeof (newdv)(B. ev), B. uplo)
133- end
134-
135130function (- )(A:: Diagonal , B:: Bidiagonal )
136- newdv = A. diag- B. dv
131+ newdv = A. diag - B. dv
137132 Bidiagonal (newdv, typeof (newdv)(- B. ev), B. uplo)
138133end
139134
140- function (+ )(A:: Diagonal , B:: SymTridiagonal )
141- newdv = A. diag+ B. dv
142- SymTridiagonal (A. diag+ B. dv, typeof (newdv)(B. ev))
135+ @commutative function (+ )(A:: Diagonal , B:: SymTridiagonal )
136+ newdv = A. diag + B. dv
137+ SymTridiagonal (A. diag + B. dv, typeof (newdv)(B. ev))
143138end
144139
145140function (- )(A:: Diagonal , B:: SymTridiagonal )
146- newdv = A. diag- B. dv
141+ newdv = A. diag - B. dv
147142 SymTridiagonal (newdv, typeof (newdv)(- B. ev))
148143end
149144
150- function (+ )(A:: SymTridiagonal , B:: Diagonal )
151- newdv = A. dv+ B. diag
152- SymTridiagonal (newdv, typeof (newdv)(A. ev))
153- end
154-
155145function (- )(A:: SymTridiagonal , B:: Diagonal )
156- newdv = A. dv- B. diag
146+ newdv = A. dv - B. diag
157147 SymTridiagonal (newdv, typeof (newdv)(A. ev))
158148end
159149
160150# this set doesn't have the aforementioned problem
161151
162- + (A:: Tridiagonal , B:: SymTridiagonal ) = Tridiagonal (A. dl+ _evview (B), A. d+ B. dv, A. du+ _evview (B))
152+ @commutative ( + ) (A:: Tridiagonal , B:: SymTridiagonal ) = Tridiagonal (A. dl+ _evview (B), A. d+ B. dv, A. du+ _evview (B))
163153- (A:: Tridiagonal , B:: SymTridiagonal ) = Tridiagonal (A. dl- _evview (B), A. d- B. dv, A. du- _evview (B))
164- + (A:: SymTridiagonal , B:: Tridiagonal ) = Tridiagonal (_evview (A)+ B. dl, A. dv+ B. d, _evview (A)+ B. du)
165154- (A:: SymTridiagonal , B:: Tridiagonal ) = Tridiagonal (_evview (A)- B. dl, A. dv- B. d, _evview (A)- B. du)
166155
167-
168- function (+ )(A:: Diagonal , B:: Tridiagonal )
169- newdv = A. diag+ B. d
156+ @commutative function (+ )(A:: Diagonal , B:: Tridiagonal )
157+ newdv = A. diag + B. d
170158 Tridiagonal (typeof (newdv)(B. dl), newdv, typeof (newdv)(B. du))
171159end
172160
173161function (- )(A:: Diagonal , B:: Tridiagonal )
174- newdv = A. diag- B. d
162+ newdv = A. diag - B. d
175163 Tridiagonal (typeof (newdv)(- B. dl), newdv, typeof (newdv)(- B. du))
176164end
177165
178- function (+ )(A:: Tridiagonal , B:: Diagonal )
179- newdv = A. d+ B. diag
180- Tridiagonal (typeof (newdv)(A. dl), newdv, typeof (newdv)(A. du))
181- end
182-
183166function (- )(A:: Tridiagonal , B:: Diagonal )
184- newdv = A. d- B. diag
167+ newdv = A. d - B. diag
185168 Tridiagonal (typeof (newdv)(A. dl), newdv, typeof (newdv)(A. du))
186169end
187170
188- function (+ )(A:: Bidiagonal , B:: Tridiagonal )
189- newdv = A. dv+ B. d
171+ @commutative function (+ )(A:: Bidiagonal , B:: Tridiagonal )
172+ newdv = A. dv + B. d
190173 Tridiagonal ((A. uplo == ' U' ? (typeof (newdv)(B. dl), newdv, A. ev+ B. du) : (A. ev+ B. dl, newdv, typeof (newdv)(B. du))). .. )
191174end
192175
193176function (- )(A:: Bidiagonal , B:: Tridiagonal )
194- newdv = A. dv- B. d
177+ newdv = A. dv - B. d
195178 Tridiagonal ((A. uplo == ' U' ? (typeof (newdv)(- B. dl), newdv, A. ev- B. du) : (A. ev- B. dl, newdv, typeof (newdv)(- B. du))). .. )
196179end
197180
198- function (+ )(A:: Tridiagonal , B:: Bidiagonal )
199- newdv = A. d+ B. dv
200- Tridiagonal ((B. uplo == ' U' ? (typeof (newdv)(A. dl), newdv, A. du+ B. ev) : (A. dl+ B. ev, newdv, typeof (newdv)(A. du))). .. )
201- end
202-
203181function (- )(A:: Tridiagonal , B:: Bidiagonal )
204- newdv = A. d- B. dv
182+ newdv = A. d - B. dv
205183 Tridiagonal ((B. uplo == ' U' ? (typeof (newdv)(A. dl), newdv, A. du- B. ev) : (A. dl- B. ev, newdv, typeof (newdv)(A. du))). .. )
206184end
207185
208- function (+ )(A:: Bidiagonal , B:: SymTridiagonal )
209- newdv = A. dv+ B. dv
186+ @commutative function (+ )(A:: Bidiagonal , B:: SymTridiagonal )
187+ newdv = A. dv + B. dv
210188 Tridiagonal ((A. uplo == ' U' ? (typeof (newdv)(_evview (B)), A. dv+ B. dv, A. ev+ _evview (B)) : (A. ev+ _evview (B), A. dv+ B. dv, typeof (newdv)(_evview (B)))). .. )
211189end
212190
213191function (- )(A:: Bidiagonal , B:: SymTridiagonal )
214- newdv = A. dv- B. dv
192+ newdv = A. dv - B. dv
215193 Tridiagonal ((A. uplo == ' U' ? (typeof (newdv)(- _evview (B)), newdv, A. ev- _evview (B)) : (A. ev- _evview (B), newdv, typeof (newdv)(- _evview (B)))). .. )
216194end
217195
218- function (+ )(A:: SymTridiagonal , B:: Bidiagonal )
219- newdv = A. dv+ B. dv
220- Tridiagonal ((B. uplo == ' U' ? (typeof (newdv)(_evview (A)), newdv, _evview (A)+ B. ev) : (_evview (A)+ B. ev, newdv, typeof (newdv)(_evview (A)))). .. )
221- end
222-
223196function (- )(A:: SymTridiagonal , B:: Bidiagonal )
224- newdv = A. dv- B. dv
197+ newdv = A. dv - B. dv
225198 Tridiagonal ((B. uplo == ' U' ? (typeof (newdv)(_evview (A)), newdv, _evview (A)- B. ev) : (_evview (A)- B. ev, newdv, typeof (newdv)(_evview (A)))). .. )
226199end
227200
201+ @commutative function (+ )(A:: Tridiagonal , B:: UniformScaling )
202+ newd = A. d .+ Ref (B)
203+ Tridiagonal (typeof (newd)(A. dl), newd, typeof (newd)(A. du))
204+ end
205+
206+ @commutative function (+ )(A:: SymTridiagonal , B:: UniformScaling )
207+ newdv = A. dv .+ Ref (B)
208+ SymTridiagonal (newdv, typeof (newdv)(A. ev))
209+ end
210+
211+ @commutative function (+ )(A:: Bidiagonal , B:: UniformScaling )
212+ newdv = A. dv .+ Ref (B)
213+ Bidiagonal (newdv, typeof (newdv)(A. ev), A. uplo)
214+ end
215+
216+ @commutative function (+ )(A:: Diagonal , B:: UniformScaling )
217+ Diagonal (A. diag .+ Ref (B))
218+ end
219+
220+ # StructuredMatrix - UniformScaling = StructuredMatrix + (-UniformScaling) =>
221+ # no need to define reversed order
228222function (- )(A:: UniformScaling , B:: Tridiagonal )
229223 d = Ref (A) .- B. d
230224 Tridiagonal (convert (typeof (d), - B. dl), d, convert (typeof (d), - B. du))
240234function (- )(A:: UniformScaling , B:: Diagonal )
241235 Diagonal (Ref (A) .- B. diag)
242236end
237+
243238lmul! (Q:: AbstractQ , B:: AbstractTriangular ) = lmul! (Q, full! (B))
244239lmul! (Q:: QRPackedQ , B:: AbstractTriangular ) = lmul! (Q, full! (B)) # disambiguation
245240lmul! (Q:: Adjoint{<:Any,<:AbstractQ} , B:: AbstractTriangular ) = lmul! (Q, full! (B))
0 commit comments