@@ -91,6 +91,14 @@ modifying(::typeof(emul)) = emul!
91
91
if right isa Broadcast. Broadcasted
92
92
right = copy (right)
93
93
end
94
+ if left isa AbstractVector && right isa GBMatrixOrTranspose &&
95
+ ! (size (left, 1 ) == size (right, 1 ) && size (left, 2 ) == size (right, 2 ))
96
+ return * (Diagonal (left), right, (any, f))
97
+ end
98
+ if left isa GBMatrixOrTranspose && right isa Transpose{<: Any , <: AbstractVector } &&
99
+ ! (size (left, 1 ) == size (right, 1 ) && size (left, 2 ) == size (right, 2 ))
100
+ return * (left, Diagonal (right), (any, f))
101
+ end
94
102
if left isa StridedArray
95
103
left = pack (left; fill = right isa GBArrayOrTranspose ? getfill (right) : nothing )
96
104
end
@@ -103,14 +111,7 @@ modifying(::typeof(emul)) = emul!
103
111
# for many operations. But for non-builtins we'd need an API of sorts.
104
112
# To get around this for now we will require that Vectors be on the left
105
113
# and transposed vectors be on the right.
106
- if left isa AbstractVector && right isa GBMatrixOrTranspose &&
107
- ! (size (left, 1 ) == size (right, 1 ) && size (left, 2 ) == size (right, 2 ))
108
- return * (Diagonal (left), right, (any, f))
109
- end
110
- if left isa GBMatrixOrTranspose && right isa Transpose{<: Any , <: AbstractVector } &&
111
- ! (size (left, 1 ) == size (right, 1 ) && size (left, 2 ) == size (right, 2 ))
112
- return * (left, Diagonal (right), (any, f))
113
- end
114
+
114
115
if left isa GBArrayOrTranspose && right isa GBArrayOrTranspose
115
116
add = defaultadd (f)
116
117
return add (left, right, f)
0 commit comments