Skip to content

Commit cbea711

Browse files
committed
Replace A[ct]_(mul|ldiv|rdiv)_B[ct][!] defs in base/operators.jl with de-jazzed passthroughs.
1 parent cbc6693 commit cbea711

File tree

9 files changed

+235
-141
lines changed

9 files changed

+235
-141
lines changed

base/deprecated.jl

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2823,6 +2823,128 @@ end
28232823
A_mul_Bc(A::AbstractVecOrMat{T}, R::AbstractRotation{S}) where {T,S} = *(A, Adjoint(R))
28242824
end
28252825

2826+
# A[ct]_(mul|ldiv|rdiv)_B[ct][!] methods from base/operators.jl, to deprecate
2827+
@eval Base begin
2828+
using Base.LinAlg: Adjoint, Transpose
2829+
"""
2830+
Ac_ldiv_Bt(A, B)
2831+
2832+
For matrices or vectors ``A`` and ``B``, calculates ``Aᴴ`` \\ ``Bᵀ``.
2833+
"""
2834+
Ac_ldiv_Bt(a,b) = \(Adjoint(a), Transpose(b))
2835+
"""
2836+
At_ldiv_Bt(A, B)
2837+
2838+
For matrices or vectors ``A`` and ``B``, calculates ``Aᵀ`` \\ ``Bᵀ``.
2839+
"""
2840+
At_ldiv_Bt(a,b) = \(Transpose(a), Transpose(b))
2841+
"""
2842+
A_ldiv_Bt(A, B)
2843+
2844+
For matrices or vectors ``A`` and ``B``, calculates ``A`` \\ ``Bᵀ``.
2845+
"""
2846+
A_ldiv_Bt(a,b) = \(a, Transpose(b))
2847+
"""
2848+
At_ldiv_B(A, B)
2849+
2850+
For matrices or vectors ``A`` and ``B``, calculates ``Aᵀ`` \\ ``B``.
2851+
"""
2852+
At_ldiv_B(a,b) = \(Transpose(a), b)
2853+
"""
2854+
Ac_ldiv_Bc(A, B)
2855+
2856+
For matrices or vectors ``A`` and ``B``, calculates ``Aᴴ`` \\ ``Bᴴ``.
2857+
"""
2858+
Ac_ldiv_Bc(a,b) = \(Adjoint(a), Adjoint(b))
2859+
"""
2860+
A_ldiv_Bc(A, B)
2861+
2862+
For matrices or vectors ``A`` and ``B``, calculates ``A`` \\ ``Bᴴ``.
2863+
"""
2864+
A_ldiv_Bc(a,b) = \(a, Adjoint(b))
2865+
"""
2866+
Ac_ldiv_B(A, B)
2867+
2868+
For matrices or vectors ``A`` and ``B``, calculates ``Aᴴ`` \\ ``B``.
2869+
"""
2870+
Ac_ldiv_B(a,b) = \(Adjoint(a), b)
2871+
"""
2872+
At_rdiv_Bt(A, B)
2873+
2874+
For matrices or vectors ``A`` and ``B``, calculates ``Aᵀ / Bᵀ``.
2875+
"""
2876+
At_rdiv_Bt(a,b) = /(Transpose(a), Transpose(b))
2877+
"""
2878+
A_rdiv_Bt(A, B)
2879+
2880+
For matrices or vectors ``A`` and ``B``, calculates ``A / Bᵀ``.
2881+
"""
2882+
A_rdiv_Bt(a,b) = /(a, Transpose(b))
2883+
"""
2884+
At_rdiv_B(A, B)
2885+
2886+
For matrices or vectors ``A`` and ``B``, calculates ``Aᵀ / B``.
2887+
"""
2888+
At_rdiv_B(a,b) = /(Transpose(a), b)
2889+
"""
2890+
Ac_rdiv_Bc(A, B)
2891+
2892+
For matrices or vectors ``A`` and ``B``, calculates ``Aᴴ / Bᴴ``.
2893+
"""
2894+
Ac_rdiv_Bc(a,b) = /(Adjoint(a), Adjoint(b))
2895+
"""
2896+
A_rdiv_Bc(A, B)
2897+
2898+
For matrices or vectors ``A`` and ``B``, calculates ``A / Bᴴ``.
2899+
"""
2900+
A_rdiv_Bc(a,b) = /(a, Adjoint(b))
2901+
"""
2902+
Ac_rdiv_B(A, B)
2903+
2904+
For matrices or vectors ``A`` and ``B``, calculates ``Aᴴ / B``.
2905+
"""
2906+
Ac_rdiv_B(a,b) = /(Adjoint(a), b)
2907+
"""
2908+
At_mul_Bt(A, B)
2909+
2910+
For matrices or vectors ``A`` and ``B``, calculates ``Aᵀ⋅Bᵀ``.
2911+
"""
2912+
At_mul_Bt(a,b) = *(Transpose(a), Transpose(b))
2913+
"""
2914+
A_mul_Bt(A, B)
2915+
2916+
For matrices or vectors ``A`` and ``B``, calculates ``A⋅Bᵀ``.
2917+
"""
2918+
A_mul_Bt(a,b) = *(a, Transpose(b))
2919+
"""
2920+
At_mul_B(A, B)
2921+
2922+
For matrices or vectors ``A`` and ``B``, calculates ``Aᵀ⋅B``.
2923+
"""
2924+
At_mul_B(a,b) = *(Transpose(a), b)
2925+
"""
2926+
Ac_mul_Bc(A, B)
2927+
2928+
For matrices or vectors ``A`` and ``B``, calculates ``Aᴴ Bᴴ``.
2929+
"""
2930+
Ac_mul_Bc(a,b) = *(Adjoint(a), Adjoint(b))
2931+
"""
2932+
A_mul_Bc(A, B)
2933+
2934+
For matrices or vectors ``A`` and ``B``, calculates ``A⋅Bᴴ``.
2935+
"""
2936+
A_mul_Bc(a,b) = *(a, Adjoint(b))
2937+
"""
2938+
Ac_mul_B(A, B)
2939+
2940+
For matrices or vectors ``A`` and ``B``, calculates ``Aᴴ⋅B``.
2941+
"""
2942+
Ac_mul_B(a,b) = *(Adjoint(a), b)
2943+
end
2944+
2945+
# re. A_mul_B deprecation, don't forget to:
2946+
# 1) delete function shims in base/linalg/linalg.jl
2947+
28262948
# issue #24822
28272949
@deprecate_binding Display AbstractDisplay
28282950

base/linalg/adjtrans.jl

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,55 @@ similar(A::AdjOrTransAbsMat, ::Type{T}, dims::Dims{2}) where {T} =
9494
# sundry basic definitions
9595
parent(A::AdjOrTrans) = A.parent
9696
vec(v::AdjOrTransAbsVec) = v.parent
97+
98+
99+
### linear algebra
100+
101+
# generic fallbacks inherited from A[ct]_(mul|ldiv|rdiv)_B[ct]
102+
# --> mul, adjoint args
103+
*(a::Adjoint, b) = adjoint(a.parent) * b
104+
*(a, b::Adjoint) = a * adjoint(b.parent)
105+
*(a::Adjoint, b::Adjoint) = adjoint(a.parent) * adjoint(b.parent)
106+
# --> mul, transpose args
107+
*(a::Transpose,b) = transpose(a.parent) * b
108+
*(a, b::Transpose) = a * transpose(b.parent)
109+
*(a::Transpose, b::Transpose) = transpose(a.parent) * transpose(b.parent)
110+
# --> rdiv, adjoint args
111+
/(a::Adjoint, b) = adjoint(a.parent) / b
112+
/(a, b::Adjoint) = a / adjoint(b.parent)
113+
/(a::Adjoint, b::Adjoint) = adjoint(a.parent) / adjoint(b.parent)
114+
# --> rdiv, transpose args
115+
/(a::Transpose, b) = transpose(a.parent) / b
116+
/(a, b::Transpose) = a / transpose(b.parent)
117+
/(a::Transpose, b::Transpose) = transpose(a.parent) / transpose(b.parent)
118+
# --> ldiv, adjoint args
119+
\(a::Adjoint, b) = adjoint(a.parent) \ b
120+
\(a, b::Adjoint) = a \ adjoint(b.parent)
121+
\(a::Adjoint, b::Adjoint) = adjoint(a.parent) \ adjoint(b.parent)
122+
# --> ldiv, transpose args
123+
\(a::Transpose, b) = transpose(a.parent) \ b
124+
\(a, b::Transpose) = a \ transpose(b.parent)
125+
\(a::Transpose, b::Transpose) = \(a, transpose(b.parent))
126+
# --> mixed args
127+
\(a::Adjoint, b::Transpose) = \(a, transpose(b.parent))
128+
129+
# ambiguity killers (TODO: clean up eventually)
130+
/(A::Adjoint{<:Any,<:Vector}, B::Matrix) = adjoint(A.parent) / B
131+
/(A::Transpose{<:Any,<:Vector}, B::Matrix) = transpose(A.parent) / B
132+
*(A::Adjoint{<:Any,<:Matrix}, B::Adjoint{<:Any,<:Vector}) = A * adjoint(B.parent)
133+
\(A::Matrix, B::Adjoint{<:Any,<:Matrix}) = A \ adjoint(B.parent)
134+
\(A::Matrix, B::Transpose{<:Any,<:Matrix}) = A \ transpose(B.parent)
135+
\(A::Adjoint{<:Any,<:Matrix}, B::Vector) = adjoint(A.parent) \ B
136+
\(A::Adjoint{<:Any,<:Matrix}, B::Matrix) = adjoint(A.parent) \ B
137+
\(A::Transpose{<:Any,<:Matrix}, B::Vector) = transpose(A.parent) \ B
138+
\(A::Transpose{<:Any,<:Matrix}, B::Matrix) = transpose(A.parent) \ B
139+
/(A::Matrix, B::Transpose{<:Any,<:Matrix}) = A / transpose(B.parent)
140+
/(A::Matrix, B::Adjoint{<:Any,<:Matrix}) = A / adjoint(B.parent)
141+
/(A::Transpose{<:Any,<:Matrix}, B::Matrix) = transpose(A.parent) / B
142+
/(A::Adjoint{<:Any,<:Matrix}, B::Matrix) = adjoint(A.parent) / B
143+
\(A::AbstractMatrix, B::Adjoint{<:Any,<:AbstractMatrix}) = A \ adjoint(B.parent)
144+
\(A::Adjoint{<:Any,<:AbstractMatrix}, B::AbstractMatrix) = adjoint(A.parent) \ B
145+
\(A::Adjoint{<:Any,<:AbstractMatrix}, B::Adjoint{<:Any,<:AbstractMatrix}) = adjoint(A.parent) \ B
146+
\(A::Vector, B::Adjoint{<:Any,<:Matrix}) = A \ adjoint(B.parent)
147+
/(A::Matrix, B::Adjoint{<:Any,<:AbstractVector}) = A / adjoint(B.parent)
148+
\(A::AbstractVector, B::Adjoint{<:Any,<:Matrix}) = A \ adjoint(B.parent)

base/linalg/bidiag.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,3 +654,11 @@ function fill!(A::Union{Bidiagonal,Tridiagonal,SymTridiagonal}, x)
654654
throw(ArgumentError("array A of type $(typeof(A)) and size $(size(A)) can
655655
not be filled with x=$x, since some of its entries are constrained."))
656656
end
657+
658+
# ambiguity killers
659+
\(A::Transpose{TA,<:Bidiagonal{TA}}, B::Transpose{TB,Matrix{TB}}) where {TA<:Number,TB<:Number} = transpose(A.parent) \ B
660+
\(A::Bidiagonal{TA}, B::Transpose{TB,Matrix{TB}}) where {TA<:Number,TB<:Number} = A \ transpose(B.parent)
661+
\(A::Bidiagonal{TA}, B::Adjoint{TB,<:AbstractMatrix{TB}}) where {TA<:Number,TB<:Number} = A \ adjoint(B.parent)
662+
\(A::Adjoint{TA,<:Bidiagonal{TA}}, B::Adjoint{TB,<:AbstractMatrix{TB}}) where {TA<:Number,TB<:Number} = adjoint(A.parent) \ B
663+
\(A::Bidiagonal{TA}, B::Adjoint{TB,<:AbstractVector{TB}}) where {TA<:Number,TB<:Number} = A \ adjoint(B.parent)
664+
\(A::Adjoint{TA,<:Bidiagonal{TA}}, B::Adjoint{TB,<:AbstractVector{TB}}) where {TA<:Number,TB<:Number} = adjoint(A.parent) \ B

base/linalg/diagonal.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,3 +459,6 @@ function svdfact(D::Diagonal)
459459
U, s, V = svd(D)
460460
SVD(U, s, V')
461461
end
462+
463+
# ambiguity killer
464+
\(A::Transpose{<:Any,<:Diagonal}, B::Matrix) = transpose(A.parent) \ B

base/linalg/linalg.jl

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,26 @@
11
# This file is a part of Julia. License is MIT: https://julialang.org/license
22

3+
# shims to maintain existence of names in Base module in A_mul_B deprecation process
4+
function Ac_ldiv_Bt end
5+
function At_ldiv_Bt end
6+
function A_ldiv_Bt end
7+
function At_ldiv_B end
8+
function Ac_ldiv_Bc end
9+
function A_ldiv_Bc end
10+
function Ac_ldiv_B end
11+
function At_rdiv_Bt end
12+
function A_rdiv_Bt end
13+
function At_rdiv_B end
14+
function Ac_rdiv_Bc end
15+
function A_rdiv_Bc end
16+
function Ac_rdiv_B end
17+
function At_mul_Bt end
18+
function A_mul_Bt end
19+
function At_mul_B end
20+
function Ac_mul_Bc end
21+
function A_mul_Bc end
22+
function Ac_mul_B end
23+
324
"""
425
Linear algebra module. Provides array arithmetic,
526
matrix factorizations and other linear algebra related
@@ -237,7 +258,7 @@ function char_uplo(uplo::Symbol)
237258
end
238259
end
239260

240-
# shims to maintain existence of names in A_mul_B deprecation process
261+
# shims to maintain existence of names in LinAlg module in A_mul_B deprecation process
241262
function A_mul_B! end
242263
function Ac_mul_B! end
243264
function Ac_mul_B! end

base/linalg/triangular.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2386,3 +2386,23 @@ for func in (:svd, :svdfact, :svdfact!, :svdvals)
23862386
end
23872387

23882388
factorize(A::AbstractTriangular) = A
2389+
2390+
# ambiguity killers
2391+
\(A::Union{UpperTriangular,LowerTriangular}, B::Transpose{<:Any,<:Matrix}) = A \ transpose(B.parent)
2392+
\(A::Union{UnitUpperTriangular,UnitLowerTriangular}, B::Transpose{<:Any,<:Matrix}) = A \ transpose(B.parent)
2393+
\(A::Union{UpperTriangular,LowerTriangular}, B::Adjoint{<:Any,<:Matrix}) = A \ adjoint(B.parent)
2394+
\(A::Union{UnitUpperTriangular,UnitLowerTriangular}, B::Adjoint{<:Any,<:Matrix}) = A \ adjoint(B.parent)
2395+
\(A::Adjoint{<:Any,<:Union{UpperTriangular,LowerTriangular}}, B::Adjoint{<:Any,<:Matrix}) = A \ adjoint(B.parent)
2396+
\(A::Adjoint{<:Any,<:Union{UnitUpperTriangular,UnitLowerTriangular}}, B::Adjoint{<:Any,<:Matrix}) = A \ adjoint(B.parent)
2397+
\(A::Transpose{<:Any,<:Union{UpperTriangular,LowerTriangular}}, B::Transpose{<:Any,<:Matrix}) = A \ transpose(B.parent)
2398+
\(A::Transpose{<:Any,<:Union{UnitUpperTriangular,UnitLowerTriangular}}, B::Transpose{<:Any,<:Matrix}) = A \ transpose(B.parent)
2399+
/(A::Transpose{<:Any,<:Matrix}, B::Union{UpperTriangular,LowerTriangular}) = transpose(A.parent) / B
2400+
/(A::Transpose{<:Any,<:Matrix}, B::Union{UnitUpperTriangular,UnitLowerTriangular}) = transpose(A.parent) / B
2401+
/(A::Adjoint{<:Any,<:Matrix}, B::Union{UpperTriangular,LowerTriangular}) = adjoint(A.parent) / B
2402+
/(A::Adjoint{<:Any,<:Matrix}, B::Union{UnitUpperTriangular,UnitLowerTriangular}) = adjoint(A.parent) / B
2403+
/(A::Transpose{<:Any,<:Matrix}, B::Transpose{<:Any,<:Union{UpperTriangular,LowerTriangular}}) = transpose(A.parent) / B
2404+
/(A::Transpose{<:Any,<:Matrix}, B::Transpose{<:Any,<:Union{UnitUpperTriangular,UnitLowerTriangular}}) = transpose(A.parent) / B
2405+
/(A::Adjoint{<:Any,<:Matrix}, B::Adjoint{<:Any,<:Union{UpperTriangular,LowerTriangular}}) = adjoint(A.parent) / B
2406+
/(A::Adjoint{<:Any,<:Matrix}, B::Adjoint{<:Any,<:Union{UnitUpperTriangular,UnitLowerTriangular}}) = adjoint(A.parent) / B
2407+
/(A::Matrix, B::Adjoint{<:Any,<:Union{UpperTriangular,LowerTriangular}}) = A / adjoint(B.parent)
2408+
/(A::Matrix, B::Adjoint{<:Any,<:Union{UnitUpperTriangular,UnitLowerTriangular}}) = A / adjoint(B.parent)

base/linalg/uniformscaling.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,3 +386,6 @@ Array(s::UniformScaling, dims::Dims{2}) = Matrix(s, dims)
386386
## Diagonal construction from UniformScaling
387387
Diagonal{T}(s::UniformScaling, m::Integer) where {T} = Diagonal{T}(fill(T(s.λ), m))
388388
Diagonal(s::UniformScaling, m::Integer) = Diagonal{eltype(s)}(s, m)
389+
390+
# ambiguity killer
391+
*(adjI::Adjoint{<:Any,<:UniformScaling}, B::Matrix) = adjoint(adjI.parent) * B

0 commit comments

Comments
 (0)