@@ -8,10 +8,6 @@ AdjOrTransStridedMat{T} = Union{Adjoint{<:Any, <:StridedMatrix{T}}, Transpose{<:
8
8
StridedMaybeAdjOrTransMat{T} = Union{StridedMatrix{T}, Adjoint{<: Any , <: StridedMatrix{T} }, Transpose{<: Any , <: StridedMatrix{T} }}
9
9
StridedMaybeAdjOrTransVecOrMat{T} = Union{StridedVecOrMat{T}, AdjOrTrans{<: Any , <: StridedVecOrMat{T} }}
10
10
11
- _parent (A) = A
12
- _parent (A:: Adjoint ) = parent (A)
13
- _parent (A:: Transpose ) = parent (A)
14
-
15
11
matprod (x, y) = x* y + x* y
16
12
17
13
# dot products
@@ -115,14 +111,14 @@ end
115
111
function (* )(A:: StridedMaybeAdjOrTransMat{<:BlasReal} , B:: StridedMaybeAdjOrTransMat{<:BlasReal} )
116
112
TS = promote_type (eltype (A), eltype (B))
117
113
mul! (similar (B, TS, (size (A, 1 ), size (B, 2 ))),
118
- wrapperop (A)(convert (AbstractArray{TS}, _parent (A))),
119
- wrapperop (B)(convert (AbstractArray{TS}, _parent (B))))
114
+ wrapperop (A)(convert (AbstractArray{TS}, _unwrap (A))),
115
+ wrapperop (B)(convert (AbstractArray{TS}, _unwrap (B))))
120
116
end
121
117
function (* )(A:: StridedMaybeAdjOrTransMat{<:BlasComplex} , B:: StridedMaybeAdjOrTransMat{<:BlasComplex} )
122
118
TS = promote_type (eltype (A), eltype (B))
123
119
mul! (similar (B, TS, (size (A, 1 ), size (B, 2 ))),
124
- wrapperop (A)(convert (AbstractArray{TS}, _parent (A))),
125
- wrapperop (B)(convert (AbstractArray{TS}, _parent (B))))
120
+ wrapperop (A)(convert (AbstractArray{TS}, _unwrap (A))),
121
+ wrapperop (B)(convert (AbstractArray{TS}, _unwrap (B))))
126
122
end
127
123
128
124
# Complex Matrix times real matrix: We use that it is generally faster to reinterpret the
@@ -131,13 +127,13 @@ function (*)(A::StridedMatrix{<:BlasComplex}, B::StridedMaybeAdjOrTransMat{<:Bla
131
127
TS = promote_type (eltype (A), eltype (B))
132
128
mul! (similar (B, TS, (size (A, 1 ), size (B, 2 ))),
133
129
convert (AbstractArray{TS}, A),
134
- wrapperop (B)(convert (AbstractArray{real (TS)}, _parent (B))))
130
+ wrapperop (B)(convert (AbstractArray{real (TS)}, _unwrap (B))))
135
131
end
136
132
function (* )(A:: AdjOrTransStridedMat{<:BlasComplex} , B:: StridedMaybeAdjOrTransMat{<:BlasReal} )
137
133
TS = promote_type (eltype (A), eltype (B))
138
134
mul! (similar (B, TS, (size (A, 1 ), size (B, 2 ))),
139
135
copymutable_oftype (A, TS), # remove AdjOrTrans to use reinterpret trick below
140
- wrapperop (B)(convert (AbstractArray{real (TS)}, _parent (B))))
136
+ wrapperop (B)(convert (AbstractArray{real (TS)}, _unwrap (B))))
141
137
end
142
138
# the following case doesn't seem to benefit from the translation A*B = (B' * A')'
143
139
function (* )(A:: StridedMatrix{<:BlasReal} , B:: StridedMatrix{<:BlasComplex} )
0 commit comments