@@ -332,6 +332,28 @@ function (*)(D::Diagonal, V::AbstractVector)
332332    return  D. diag .*  V
333333end 
334334
335+ function  _diag_adj_mul (A:: AdjOrTransAbsMat , D:: Diagonal )
336+     adj =  wrapperop (A)
337+     copy (adj (adj (D) *  adj (A)))
338+ end 
339+ function  _diag_adj_mul (A:: AdjOrTransAbsMat{<:Number, <:StridedMatrix} , D:: Diagonal{<:Number} )
340+     @invoke  * (A:: AbstractMatrix , D:: AbstractMatrix )
341+ end 
342+ function  _diag_adj_mul (D:: Diagonal , A:: AdjOrTransAbsMat )
343+     adj =  wrapperop (A)
344+     copy (adj (adj (A) *  adj (D)))
345+ end 
346+ function  _diag_adj_mul (D:: Diagonal{<:Number} , A:: AdjOrTransAbsMat{<:Number, <:StridedMatrix} )
347+     @invoke  * (D:: AbstractMatrix , A:: AbstractMatrix )
348+ end 
349+ 
350+ function  (* )(A:: AdjOrTransAbsMat , D:: Diagonal )
351+     _diag_adj_mul (A, D)
352+ end 
353+ function  (* )(D:: Diagonal , A:: AdjOrTransAbsMat )
354+     _diag_adj_mul (D, A)
355+ end 
356+ 
335357function  rmul! (A:: AbstractMatrix , D:: Diagonal )
336358    matmul_size_check (size (A), size (D))
337359    for  I in  CartesianIndices (A)
@@ -671,22 +693,24 @@ end
671693for  Tri in  (:UpperTriangular , :LowerTriangular )
672694    UTri =  Symbol (:Unit , Tri)
673695    #  2 args
674-     for  (fun, f) in  zip ((:* , :rmul! , :rdiv! , :/ ), (:identity , :identity , :inv , :inv ))
675-         @eval  $ fun (A:: $Tri , D:: Diagonal ) =  $ Tri ($ fun (A. data, D))
676-         @eval  $ fun (A:: $UTri , D:: Diagonal ) =  $ Tri (_setdiag! ($ fun (A. data, D), $ f, D. diag))
696+     for  (fun, f) in  zip ((:mul , :rmul! , :rdiv! , :/ ), (:identity , :identity , :inv , :inv ))
697+         g =  fun ==  :mul  ?  :*  :  fun
698+         @eval  $ fun (A:: $Tri , D:: Diagonal ) =  $ Tri ($ g (A. data, D))
699+         @eval  $ fun (A:: $UTri , D:: Diagonal ) =  $ Tri (_setdiag! ($ g (A. data, D), $ f, D. diag))
677700    end 
678-     @eval  * (A:: $Tri{<:Any, <:StridedMaybeAdjOrTransMat} , D:: Diagonal ) = 
679-             @invoke  * (A:: AbstractMatrix , D:: Diagonal )
680-     @eval  * (A:: $UTri{<:Any, <:StridedMaybeAdjOrTransMat} , D:: Diagonal ) = 
681-             @invoke  * (A:: AbstractMatrix , D:: Diagonal )
682-     for  (fun, f) in  zip ((:* , :lmul! , :ldiv! , :\ ), (:identity , :identity , :inv , :inv ))
683-         @eval  $ fun (D:: Diagonal , A:: $Tri ) =  $ Tri ($ fun (D, A. data))
684-         @eval  $ fun (D:: Diagonal , A:: $UTri ) =  $ Tri (_setdiag! ($ fun (D, A. data), $ f, D. diag))
701+     @eval  mul (A:: $Tri{<:Any, <:StridedMaybeAdjOrTransMat} , D:: Diagonal ) = 
702+             @invoke  mul (A:: AbstractMatrix , D:: Diagonal )
703+     @eval  mul (A:: $UTri{<:Any, <:StridedMaybeAdjOrTransMat} , D:: Diagonal ) = 
704+             @invoke  mul (A:: AbstractMatrix , D:: Diagonal )
705+     for  (fun, f) in  zip ((:mul , :lmul! , :ldiv! , :\ ), (:identity , :identity , :inv , :inv ))
706+         g =  fun ==  :mul  ?  :*  :  fun
707+         @eval  $ fun (D:: Diagonal , A:: $Tri ) =  $ Tri ($ g (D, A. data))
708+         @eval  $ fun (D:: Diagonal , A:: $UTri ) =  $ Tri (_setdiag! ($ g (D, A. data), $ f, D. diag))
685709    end 
686-     @eval  * (D:: Diagonal , A:: $Tri{<:Any, <:StridedMaybeAdjOrTransMat} ) = 
687-             @invoke  * (D:: Diagonal , A:: AbstractMatrix )
688-     @eval  * (D:: Diagonal , A:: $UTri{<:Any, <:StridedMaybeAdjOrTransMat} ) = 
689-             @invoke  * (D:: Diagonal , A:: AbstractMatrix )
710+     @eval  mul (D:: Diagonal , A:: $Tri{<:Any, <:StridedMaybeAdjOrTransMat} ) = 
711+             @invoke  mul (D:: Diagonal , A:: AbstractMatrix )
712+     @eval  mul (D:: Diagonal , A:: $UTri{<:Any, <:StridedMaybeAdjOrTransMat} ) = 
713+             @invoke  mul (D:: Diagonal , A:: AbstractMatrix )
690714    #  3-arg ldiv!
691715    @eval  ldiv! (C:: $Tri , D:: Diagonal , A:: $Tri ) =  $ Tri (ldiv! (C. data, D, A. data))
692716    @eval  ldiv! (C:: $Tri , D:: Diagonal , A:: $UTri ) =  $ Tri (_setdiag! (ldiv! (C. data, D, A. data), inv, D. diag))
0 commit comments