Skip to content

Commit 0272186

Browse files
authored
Merge pull request #25125 from Sacha0/depdotap
remove special lowering for and deprecate .'
2 parents ca7e64f + 36b33d7 commit 0272186

36 files changed

+294
-277
lines changed

base/deprecated.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3100,7 +3100,7 @@ end
31003100
*(rowvec::RowVector, A::AbstractTriangular) = rvtranspose(transpose(A) * rvtranspose(rowvec))
31013101
*(rowvec::RowVector, transA::Transpose{<:Any,<:AbstractTriangular}) = rvtranspose(transA.parent * rvtranspose(rowvec))
31023102
*(A::AbstractTriangular, transrowvec::Transpose{<:Any,<:RowVector}) = A * rvtranspose(transrowvec.parent)
3103-
*(transA::Transpose{<:Any,<:AbstractTriangular}, transrowvec::Transpose{<:Any,<:RowVector}) = transA.parent.' * rvtranspose(transrowvec.parent)
3103+
*(transA::Transpose{<:Any,<:AbstractTriangular}, transrowvec::Transpose{<:Any,<:RowVector}) = transA * rvtranspose(transrowvec.parent)
31043104
*(rowvec::RowVector, adjA::Adjoint{<:Any,<:AbstractTriangular}) = rvadjoint(adjA.parent * rvadjoint(rowvec))
31053105
*(A::AbstractTriangular, adjrowvec::Adjoint{<:Any,<:RowVector}) = A * rvadjoint(adjrowvec.parent)
31063106
*(adjA::Adjoint{<:Any,<:AbstractTriangular}, adjrowvec::Adjoint{<:Any,<:RowVector}) = adjA.parent' * rvadjoint(adjrowvec.parent)

base/linalg/bitarray.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ end
123123

124124
## Structure query functions
125125

126-
issymmetric(A::BitMatrix) = size(A, 1)==size(A, 2) && count(!iszero, A - A.')==0
126+
issymmetric(A::BitMatrix) = size(A, 1)==size(A, 2) && count(!iszero, A - transpose(A))==0
127127
ishermitian(A::BitMatrix) = issymmetric(A)
128128

129129
function nonzero_chunks(chunks::Vector{UInt64}, pos0::Int, pos1::Int)

base/linalg/blas.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -555,9 +555,9 @@ for (fname, elty) in ((:dgemv_,:Float64),
555555
if trans == 'N' && (length(X) != n || length(Y) != m)
556556
throw(DimensionMismatch("A has dimensions $(size(A)), X has length $(length(X)) and Y has length $(length(Y))"))
557557
elseif trans == 'C' && (length(X) != m || length(Y) != n)
558-
throw(DimensionMismatch("A' has dimensions $n, $m, X has length $(length(X)) and Y has length $(length(Y))"))
558+
throw(DimensionMismatch("the adjoint of A has dimensions $n, $m, X has length $(length(X)) and Y has length $(length(Y))"))
559559
elseif trans == 'T' && (length(X) != m || length(Y) != n)
560-
throw(DimensionMismatch("A.' has dimensions $n, $m, X has length $(length(X)) and Y has length $(length(Y))"))
560+
throw(DimensionMismatch("the transpose of A has dimensions $n, $m, X has length $(length(X)) and Y has length $(length(Y))"))
561561
end
562562
ccall((@blasfunc($fname), libblas), Void,
563563
(Ref{UInt8}, Ref{BlasInt}, Ref{BlasInt}, Ref{$elty},
@@ -994,7 +994,7 @@ end
994994
"""
995995
syr!(uplo, alpha, x, A)
996996
997-
Rank-1 update of the symmetric matrix `A` with vector `x` as `alpha*x*x.' + A`.
997+
Rank-1 update of the symmetric matrix `A` with vector `x` as `alpha*x*Transpose(x) + A`.
998998
[`uplo`](@ref stdlib-blas-uplo) controls which triangle of `A` is updated. Returns `A`.
999999
"""
10001000
function syr! end
@@ -1228,7 +1228,7 @@ end
12281228
"""
12291229
syrk!(uplo, trans, alpha, A, beta, C)
12301230
1231-
Rank-k update of the symmetric matrix `C` as `alpha*A*A.' + beta*C` or `alpha*A.'*A +
1231+
Rank-k update of the symmetric matrix `C` as `alpha*A*Transpose(A) + beta*C` or `alpha*Transpose(A)*A +
12321232
beta*C` according to [`trans`](@ref stdlib-blas-trans).
12331233
Only the [`uplo`](@ref stdlib-blas-uplo) triangle of `C` is used. Returns `C`.
12341234
"""
@@ -1239,7 +1239,7 @@ function syrk! end
12391239
12401240
Returns either the upper triangle or the lower triangle of `A`,
12411241
according to [`uplo`](@ref stdlib-blas-uplo),
1242-
of `alpha*A*A.'` or `alpha*A.'*A`,
1242+
of `alpha*A*Transpose(A)` or `alpha*Transpose(A)*A`,
12431243
according to [`trans`](@ref stdlib-blas-trans).
12441244
"""
12451245
function syrk end

base/linalg/bunchkaufman.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ end
118118
getindex(B::BunchKaufman, d::Symbol)
119119
120120
Extract the factors of the Bunch-Kaufman factorization `B`. The factorization can take the
121-
two forms `L*D*L'` or `U*D*U'` (or `.'` in the complex symmetric case) where `L` is a
121+
two forms `L*D*L'` or `U*D*U'` (or `L*D*Transpose(L)` in the complex symmetric case) where `L` is a
122122
`UnitLowerTriangular` matrix, `U` is a `UnitUpperTriangular`, and `D` is a block diagonal
123123
symmetric or Hermitian matrix with 1x1 or 2x2 blocks. The argument `d` can be
124124
- `:D`: the block diagonal matrix
@@ -153,15 +153,15 @@ permutation:
153153
3
154154
2
155155
156-
julia> F[:L]*F[:D]*F[:L].' - A[F[:p], F[:p]]
156+
julia> F[:L]*F[:D]*F[:L]' - A[F[:p], F[:p]]
157157
3×3 Array{Float64,2}:
158158
0.0 0.0 0.0
159159
0.0 0.0 0.0
160160
0.0 0.0 0.0
161161
162162
julia> F = bkfact(Symmetric(A));
163163
164-
julia> F[:U]*F[:D]*F[:U].' - F[:P]*A*F[:P]'
164+
julia> F[:U]*F[:D]*F[:U]' - F[:P]*A*F[:P]'
165165
3×3 Array{Float64,2}:
166166
0.0 0.0 0.0
167167
0.0 0.0 0.0
@@ -192,13 +192,13 @@ function getindex(B::BunchKaufman{T}, d::Symbol) where {T<:BlasFloat}
192192
if B.uplo == 'L'
193193
return UnitLowerTriangular(LUD)
194194
else
195-
throw(ArgumentError("factorization is U*D*U.' but you requested L"))
195+
throw(ArgumentError("factorization is U*D*Transpose(U) but you requested L"))
196196
end
197197
else # :U
198198
if B.uplo == 'U'
199199
return UnitUpperTriangular(LUD)
200200
else
201-
throw(ArgumentError("factorization is L*D*L.' but you requested U"))
201+
throw(ArgumentError("factorization is L*D*Transpose(L) but you requested U"))
202202
end
203203
end
204204
else

base/linalg/givens.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
abstract type AbstractRotation{T} end
55

6-
transpose(R::AbstractRotation) = error("transpose not implemented for $(typeof(R)). Consider using conjugate transpose (') instead of transpose (.').")
6+
transpose(R::AbstractRotation) = error("transpose not implemented for $(typeof(R)). Consider using adjoint instead of transpose.")
77

88
function *(R::AbstractRotation{T}, A::AbstractVecOrMat{S}) where {T,S}
99
TS = typeof(zero(T)*zero(S) + zero(T)*zero(S))

base/linalg/lapack.jl

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -972,7 +972,7 @@ end
972972
"""
973973
gels!(trans, A, B) -> (F, B, ssr)
974974
975-
Solves the linear equation `A * X = B`, `A.' * X =B`, or `A' * X = B` using
975+
Solves the linear equation `A * X = B`, `Transpose(A) * X = B`, or `Adjoint(A) * X = B` using
976976
a QR or LQ factorization. Modifies the matrix/vector `B` in place with the
977977
solution. `A` is overwritten with its `QR` or `LQ` factorization. `trans`
978978
may be one of `N` (no modification), `T` (transpose), or `C` (conjugate
@@ -994,7 +994,7 @@ gesv!(A::StridedMatrix, B::StridedVecOrMat)
994994
"""
995995
getrs!(trans, A, ipiv, B)
996996
997-
Solves the linear equation `A * X = B`, `A.' * X =B`, or `A' * X = B` for
997+
Solves the linear equation `A * X = B`, `Transpose(A) * X = B`, or `Adjoint(A) * X = B` for
998998
square `A`. Modifies the matrix/vector `B` in place with the solution. `A`
999999
is the `LU` factorization from `getrf!`, with `ipiv` the pivoting
10001000
information. `trans` may be one of `N` (no modification), `T` (transpose),
@@ -1155,8 +1155,8 @@ end
11551155
"""
11561156
gesvx!(fact, trans, A, AF, ipiv, equed, R, C, B) -> (X, equed, R, C, B, rcond, ferr, berr, work)
11571157
1158-
Solves the linear equation `A * X = B` (`trans = N`), `A.' * X =B`
1159-
(`trans = T`), or `A' * X = B` (`trans = C`) using the `LU` factorization
1158+
Solves the linear equation `A * X = B` (`trans = N`), `Transpose(A) * X = B`
1159+
(`trans = T`), or `Adjoint(A) * X = B` (`trans = C`) using the `LU` factorization
11601160
of `A`. `fact` may be `E`, in which case `A` will be equilibrated and copied
11611161
to `AF`; `F`, in which case `AF` and `ipiv` from a previous `LU` factorization
11621162
are inputs; or `N`, in which case `A` will be copied to `AF` and then
@@ -2436,8 +2436,8 @@ gttrf!(dl::StridedVector, d::StridedVector, du::StridedVector)
24362436
"""
24372437
gttrs!(trans, dl, d, du, du2, ipiv, B)
24382438
2439-
Solves the equation `A * X = B` (`trans = N`), `A.' * X = B` (`trans = T`),
2440-
or `A' * X = B` (`trans = C`) using the `LU` factorization computed by
2439+
Solves the equation `A * X = B` (`trans = N`), `Transpose(A) * X = B` (`trans = T`),
2440+
or `Adjoint(A) * X = B` (`trans = C`) using the `LU` factorization computed by
24412441
`gttrf!`. `B` is overwritten with the solution `X`.
24422442
"""
24432443
gttrs!(trans::Char, dl::StridedVector, d::StridedVector, du::StridedVector, du2::StridedVector,
@@ -2866,7 +2866,7 @@ orgrq!(A::StridedMatrix, tau::StridedVector, k::Integer = length(tau))
28662866
"""
28672867
ormlq!(side, trans, A, tau, C)
28682868
2869-
Computes `Q * C` (`trans = N`), `Q.' * C` (`trans = T`), `Q' * C`
2869+
Computes `Q * C` (`trans = N`), `Transpose(Q) * C` (`trans = T`), `Adjoint(Q) * C`
28702870
(`trans = C`) for `side = L` or the equivalent right-sided multiplication
28712871
for `side = R` using `Q` from a `LQ` factorization of `A` computed using
28722872
`gelqf!`. `C` is overwritten.
@@ -2876,7 +2876,7 @@ ormlq!(side::Char, trans::Char, A::StridedMatrix, tau::StridedVector, C::Strided
28762876
"""
28772877
ormqr!(side, trans, A, tau, C)
28782878
2879-
Computes `Q * C` (`trans = N`), `Q.' * C` (`trans = T`), `Q' * C`
2879+
Computes `Q * C` (`trans = N`), `Transpose(Q) * C` (`trans = T`), `Adjoint(Q) * C`
28802880
(`trans = C`) for `side = L` or the equivalent right-sided multiplication
28812881
for `side = R` using `Q` from a `QR` factorization of `A` computed using
28822882
`geqrf!`. `C` is overwritten.
@@ -2886,7 +2886,7 @@ ormqr!(side::Char, trans::Char, A::StridedMatrix, tau::StridedVector, C::Strided
28862886
"""
28872887
ormql!(side, trans, A, tau, C)
28882888
2889-
Computes `Q * C` (`trans = N`), `Q.' * C` (`trans = T`), `Q' * C`
2889+
Computes `Q * C` (`trans = N`), `Transpose(Q) * C` (`trans = T`), `Adjoint(Q) * C`
28902890
(`trans = C`) for `side = L` or the equivalent right-sided multiplication
28912891
for `side = R` using `Q` from a `QL` factorization of `A` computed using
28922892
`geqlf!`. `C` is overwritten.
@@ -2896,7 +2896,7 @@ ormql!(side::Char, trans::Char, A::StridedMatrix, tau::StridedVector, C::Strided
28962896
"""
28972897
ormrq!(side, trans, A, tau, C)
28982898
2899-
Computes `Q * C` (`trans = N`), `Q.' * C` (`trans = T`), `Q' * C`
2899+
Computes `Q * C` (`trans = N`), `Transpose(Q) * C` (`trans = T`), `Adjoint(Q) * C`
29002900
(`trans = C`) for `side = L` or the equivalent right-sided multiplication
29012901
for `side = R` using `Q` from a `RQ` factorization of `A` computed using
29022902
`gerqf!`. `C` is overwritten.
@@ -2906,7 +2906,7 @@ ormrq!(side::Char, trans::Char, A::StridedMatrix, tau::StridedVector, C::Strided
29062906
"""
29072907
gemqrt!(side, trans, V, T, C)
29082908
2909-
Computes `Q * C` (`trans = N`), `Q.' * C` (`trans = T`), `Q' * C`
2909+
Computes `Q * C` (`trans = N`), `Transpose(Q) * C` (`trans = T`), `Adjoint(Q) * C`
29102910
(`trans = C`) for `side = L` or the equivalent right-sided multiplication
29112911
for `side = R` using `Q` from a `QR` factorization of `A` computed using
29122912
`geqrt!`. `C` is overwritten.
@@ -3306,8 +3306,8 @@ trtri!(uplo::Char, diag::Char, A::StridedMatrix)
33063306
"""
33073307
trtrs!(uplo, trans, diag, A, B)
33083308
3309-
Solves `A * X = B` (`trans = N`), `A.' * X = B` (`trans = T`), or
3310-
`A' * X = B` (`trans = C`) for (upper if `uplo = U`, lower if `uplo = L`)
3309+
Solves `A * X = B` (`trans = N`), `Transpose(A) * X = B` (`trans = T`), or
3310+
`Adjoint(A) * X = B` (`trans = C`) for (upper if `uplo = U`, lower if `uplo = L`)
33113311
triangular matrix `A`. If `diag = N`, `A` has non-unit diagonal elements.
33123312
If `diag = U`, all diagonal elements of `A` are one. `B` is overwritten
33133313
with the solution `X`.
@@ -3601,7 +3601,7 @@ trevc!(side::Char, howmny::Char, select::StridedVector{BlasInt}, T::StridedMatri
36013601
trrfs!(uplo, trans, diag, A, B, X, Ferr, Berr) -> (Ferr, Berr)
36023602
36033603
Estimates the error in the solution to `A * X = B` (`trans = N`),
3604-
`A.' * X = B` (`trans = T`), `A' * X = B` (`trans = C`) for `side = L`,
3604+
`Transpose(A) * X = B` (`trans = T`), `Adjoint(A) * X = B` (`trans = C`) for `side = L`,
36053605
or the equivalent equations a right-handed `side = R` `X * A` after
36063606
computing `X` using `trtrs!`. If `uplo = U`, `A` is upper triangular.
36073607
If `uplo = L`, `A` is lower triangular. If `diag = N`, `A` has non-unit

base/linalg/lq.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ lqfact(x::Number) = lqfact(fill(x,1,1))
3737
3838
Perform an LQ factorization of `A` such that `A = L*Q`. The default (`full = false`)
3939
computes a factorization with possibly-rectangular `L` and `Q`, commonly the "thin"
40-
factorization. The LQ factorization is the QR factorization of `A.'`. If the explicit,
40+
factorization. The LQ factorization is the QR factorization of `Transpose(A)`. If the explicit,
4141
full/square form of `Q` is requested via `full = true`, `L` is not extended with zeros.
4242
4343
!!! note

base/linalg/lu.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ function ldiv!(adjA::Adjoint{<:Any,LU{T,Tridiagonal{T,V}}}, B::AbstractVecOrMat)
590590
return B
591591
end
592592

593-
/(B::AbstractMatrix,A::LU) = \(Transpose(A),Transpose(B)).'
593+
/(B::AbstractMatrix,A::LU) = transpose(Transpose(A) \ Transpose(B))
594594

595595
# Conversions
596596
convert(::Type{AbstractMatrix}, F::LU) = (F[:L] * F[:U])[invperm(F[:p]),:]

base/linalg/matmul.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ function generic_matvecmul!(C::AbstractVector{R}, tA, A::AbstractVecOrMat, B::Ab
475475
s = zero(A[aoffs + 1]*B[1] + A[aoffs + 1]*B[1])
476476
end
477477
for i = 1:nA
478-
s += A[aoffs+i].'B[i]
478+
s += Transpose(A[aoffs+i]) * B[i]
479479
end
480480
C[k] = s
481481
end
@@ -629,7 +629,7 @@ function _generic_matmatmul!(C::AbstractVecOrMat{R}, tA, tB, A::AbstractVecOrMat
629629
z2 = zero(A[i, 1]*B[j, 1] + A[i, 1]*B[j, 1])
630630
Ctmp = convert(promote_type(R, typeof(z2)), z2)
631631
for k = 1:nA
632-
Ctmp += A[i, k]*B[j, k].'
632+
Ctmp += A[i, k] * Transpose(B[j, k])
633633
end
634634
C[i,j] = Ctmp
635635
end
@@ -649,7 +649,7 @@ function _generic_matmatmul!(C::AbstractVecOrMat{R}, tA, tB, A::AbstractVecOrMat
649649
z2 = zero(A[1, i]*B[1, j] + A[1, i]*B[1, j])
650650
Ctmp = convert(promote_type(R, typeof(z2)), z2)
651651
for k = 1:nA
652-
Ctmp += A[k, i].'B[k, j]
652+
Ctmp += Transpose(A[k, i]) * B[k, j]
653653
end
654654
C[i,j] = Ctmp
655655
end
@@ -658,7 +658,7 @@ function _generic_matmatmul!(C::AbstractVecOrMat{R}, tA, tB, A::AbstractVecOrMat
658658
z2 = zero(A[1, i]*B[j, 1] + A[1, i]*B[j, 1])
659659
Ctmp = convert(promote_type(R, typeof(z2)), z2)
660660
for k = 1:nA
661-
Ctmp += A[k, i].'B[j, k].'
661+
Ctmp += Transpose(A[k, i]) * Transpose(B[j, k])
662662
end
663663
C[i,j] = Ctmp
664664
end
@@ -667,7 +667,7 @@ function _generic_matmatmul!(C::AbstractVecOrMat{R}, tA, tB, A::AbstractVecOrMat
667667
z2 = zero(A[1, i]*B[j, 1] + A[1, i]*B[j, 1])
668668
Ctmp = convert(promote_type(R, typeof(z2)), z2)
669669
for k = 1:nA
670-
Ctmp += A[k, i].'B[j, k]'
670+
Ctmp += Transpose(A[k, i]) * Adjoint(B[j, k])
671671
end
672672
C[i,j] = Ctmp
673673
end
@@ -687,7 +687,7 @@ function _generic_matmatmul!(C::AbstractVecOrMat{R}, tA, tB, A::AbstractVecOrMat
687687
z2 = zero(A[1, i]*B[j, 1] + A[1, i]*B[j, 1])
688688
Ctmp = convert(promote_type(R, typeof(z2)), z2)
689689
for k = 1:nA
690-
Ctmp += A[k, i]'B[j, k].'
690+
Ctmp += Adjoint(A[k, i]) * Transpose(B[j, k])
691691
end
692692
C[i,j] = Ctmp
693693
end

base/linalg/rowvector.jl

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@
55
66
A lazy-view wrapper of an [`AbstractVector`](@ref), which turns a length-`n` vector into a `1×n`
77
shaped row vector and represents the transpose of a vector (the elements are also transposed
8-
recursively). This type is usually constructed (and unwrapped) via the [`transpose`](@ref)
9-
function or `.'` operator (or related [`adjoint`](@ref) or `'` operator).
8+
recursively).
109
1110
By convention, a vector can be multiplied by a matrix on its left (`A * v`) whereas a row
12-
vector can be multiplied by a matrix on its right (such that `v.' * A = (A.' * v).'`). It
11+
vector can be multiplied by a matrix on its right (such that `RowVector(v) * A = RowVector(Transpose(A) * v)`). It
1312
differs from a `1×n`-sized matrix by the facts that its transpose returns a vector and the
14-
inner product `v1.' * v2` returns a scalar, but will otherwise behave similarly.
13+
inner product `RowVector(v1) * v2` returns a scalar, but will otherwise behave similarly.
1514
1615
# Examples
1716
```jldoctest
@@ -26,21 +25,17 @@ julia> RowVector(a)
2625
1×4 RowVector{Int64,Array{Int64,1}}:
2726
1 2 3 4
2827
29-
julia> a.'
30-
1×4 RowVector{Int64,Array{Int64,1}}:
31-
1 2 3 4
32-
33-
julia> a.'[3]
28+
julia> RowVector(a)[3]
3429
3
3530
36-
julia> a.'[1,3]
31+
julia> RowVector(a)[1,3]
3732
3
3833
39-
julia> a.'[3,1]
34+
julia> RowVector(a)[3,1]
4035
ERROR: BoundsError: attempt to access 1×4 RowVector{Int64,Array{Int64,1}} at index [3, 1]
4136
[...]
4237
43-
julia> a.'*a
38+
julia> RowVector(a)*a
4439
30
4540
4641
julia> B = [1 2; 3 4; 5 6; 7 8]
@@ -50,7 +45,7 @@ julia> B = [1 2; 3 4; 5 6; 7 8]
5045
5 6
5146
7 8
5247
53-
julia> a.'*B
48+
julia> RowVector(a)*B
5449
1×2 RowVector{Int64,Array{Int64,1}}:
5550
50 60
5651
```
@@ -148,7 +143,7 @@ Return a [`ConjArray`](@ref) lazy view of the input, where each element is conju
148143
149144
# Examples
150145
```jldoctest
151-
julia> v = [1+im, 1-im].'
146+
julia> v = RowVector([1+im, 1-im])
152147
1×2 RowVector{Complex{Int64},Array{Complex{Int64},1}}:
153148
1+1im 1-1im
154149
@@ -214,7 +209,7 @@ IndexStyle(::Type{<:RowVector}) = IndexLinear()
214209
end
215210
sum(@inbounds(return rowvec[i]*vec[i]) for i = 1:length(vec))
216211
end
217-
@inline *(rowvec::RowVector, mat::AbstractMatrix) = rvtranspose(mat.' * rvtranspose(rowvec))
212+
@inline *(rowvec::RowVector, mat::AbstractMatrix) = rvtranspose(Transpose(mat) * rvtranspose(rowvec))
218213
*(::RowVector, ::RowVector) = throw(DimensionMismatch("Cannot multiply two transposed vectors"))
219214
@inline *(vec::AbstractVector, rowvec::RowVector) = vec .* rowvec
220215
*(vec::AbstractVector, rowvec::AbstractVector) = throw(DimensionMismatch("Cannot multiply two vectors"))
@@ -238,7 +233,7 @@ end
238233
*(transvec::Transpose{<:Any,<:AbstractVector}, transrowvec::Transpose{<:Any,<:RowVector}) =
239234
transpose(transvec.parent)*rvtranspose(transrowvec.parent)
240235
*(transmat::Transpose{<:Any,<:AbstractMatrix}, transrowvec::Transpose{<:Any,<:RowVector}) =
241-
(transmat.parent).' * rvtranspose(transrowvec.parent)
236+
transmat * rvtranspose(transrowvec.parent)
242237

243238
*(::Transpose{<:Any,<:RowVector}, ::AbstractVector) =
244239
throw(DimensionMismatch("Cannot multiply two vectors"))

0 commit comments

Comments
 (0)