@@ -77,9 +77,10 @@ function emul(
7777 accum = nothing ,
7878 desc = nothing
7979)
80- t = inferbinarytype (parent (A), parent (B), op)
81-
82- C = similar (A, t, _combinesizes (A, B); fill= _promotefill (parent (A), parent (B), op))
80+ T = inferbinarytype (parent (A), parent (B), op)
81+ fill= _promotefill (parent (A), parent (B), op)
82+ M = gbpromote_strip (A, B)
83+ C = M {T} (_combinesizes (A, B); fill)
8384 return emul! (C, A, B, op; mask, accum, desc)
8485end
8586
@@ -163,8 +164,10 @@ function eadd(
163164 accum = nothing ,
164165 desc = nothing
165166)
166- t = inferbinarytype (parent (A), parent (B), op)
167- C = similar (A, t, _combinesizes (A, B); fill= _promotefill (parent (A), parent (B), op))
167+ T = inferbinarytype (parent (A), parent (B), op)
168+ fill= _promotefill (parent (A), parent (B), op)
169+ M = gbpromote_strip (A, B)
170+ C = M {T} (_combinesizes (A, B); fill)
168171 return eadd! (C, A, B, op; mask, accum, desc)
169172end
170173
@@ -250,10 +253,18 @@ function eunion(
250253 desc = nothing
251254) where {T, U}
252255 t = inferbinarytype (parent (A), parent (B), op)
253- C = similar (A, t, _combinesizes (A, B); fill= _promotefill (parent (A), parent (B), op))
256+ fill= _promotefill (parent (A), parent (B), op)
257+ M = gbpromote_strip (A, B)
258+ C = M {t} (_combinesizes (A, B); fill)
254259 return eunion! (C, A, α, B, β, op; mask, accum, desc)
255260end
256261
262+ eunion (
263+ A:: GBArrayOrTranspose , α, B:: GBArrayOrTranspose , β, op = + ;
264+ mask = nothing , accum = nothing , desc = nothing
265+ ) = eunion (A, convert (storedeltype (A), α), B, convert (storedeltype (B), β), op; mask, accum, desc)
266+
267+
257268function Base.:+ (A:: GBArrayOrTranspose , B:: GBArrayOrTranspose )
258269 eadd (A, B, + )
259270end
@@ -299,4 +310,17 @@ eadd(A::VecMatOrTrans, B::GBArrayOrTranspose, op = +; kwargs...) =
299310eadd (A:: GBArrayOrTranspose , B:: VecMatOrTrans , op = + ; kwargs... ) =
300311 @_densepack B eadd (A, B, op; kwargs... )
301312eadd (A:: VecMatOrTrans , B:: VecMatOrTrans , op = + ; kwargs... ) =
302- @_densepack A B eadd (A, B, op; kwargs... )
313+ @_densepack A B eadd (A, B, op; kwargs... )
314+
315+ eunion! (C:: GBVecOrMat , A:: VecMatOrTrans , α, B:: GBArrayOrTranspose , β, op = + ; kwargs... ) =
316+ @_densepack A eunion! (C, A, α, B, β, op; kwargs... )
317+ eunion! (C:: GBVecOrMat , A:: GBArrayOrTranspose , α, B:: VecMatOrTrans , β, op = + ; kwargs... ) =
318+ @_densepack B eunion! (C, A, α, B, β, op; kwargs... )
319+ eunion! (C:: GBVecOrMat , A:: VecMatOrTrans , α, B:: VecMatOrTrans , β, op = + ; kwargs... ) =
320+ @_densepack A B eunion! (C, A, α, B, β, op; kwargs... )
321+ eunion (A:: VecMatOrTrans , α, B:: GBArrayOrTranspose , β, op = + ; kwargs... ) =
322+ @_densepack A eunion (A, α, B, β, op; kwargs... )
323+ eunion (A:: GBArrayOrTranspose , α, B:: VecMatOrTrans , β, op = + ; kwargs... ) =
324+ @_densepack B eunion (A, α, B, β, op; kwargs... )
325+ eunion (A:: VecMatOrTrans , α, B:: VecMatOrTrans , β, op = + ; kwargs... ) =
326+ @_densepack A B eunion (A, B, op; kwargs... )
0 commit comments