Skip to content

Commit 699a65c

Browse files
author
Wimmerer
committed
elementwise infixes, broken on boolean outputs
1 parent 8b448a8 commit 699a65c

File tree

2 files changed

+71
-2
lines changed

2 files changed

+71
-2
lines changed

src/operations/ewise.jl

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,3 +290,70 @@ function eadd(
290290
C = GBMatrix{t}(size(A))
291291
return eadd!(C, A, B, op; mask, accum, desc)
292292
end
293+
294+
#Elementwise Broadcasts
295+
#######################
296+
297+
# default argument is missing to avoid `nothing` picking up the default default :).
298+
function Base.broadcasted(::typeof(), A::GBArray, B::GBArray)
299+
eadd(A, B, missing)
300+
end
301+
302+
# default argument is missing to avoid `nothing` picking up the default default :).
303+
function Base.broadcasted(::typeof(), A::GBArray, B::GBArray)
304+
emul(A, B, missing)
305+
end
306+
307+
function Base.broadcasted(::typeof(*), A::GBArray, B::GBArray)
308+
emul(A, B, BinaryOps.TIMES)
309+
end
310+
311+
function Base.broadcasted(::typeof(+), A::GBArray, B::GBArray)
312+
eadd(A, B, BinaryOps.PLUS)
313+
end
314+
315+
function Base.broadcasted(::typeof(-), A::GBArray, B::GBArray)
316+
eadd(A, B, BinaryOps.MINUS)
317+
end
318+
319+
function Base.broadcasted(::typeof(/), A::GBArray, B::GBArray)
320+
emul(A, B, BinaryOps.DIV)
321+
end
322+
323+
#TODO: fix tricky gotchas, this will do type-specific (ie sometimes integer) division.
324+
function Base.broadcasted(::typeof(/), A::GBArray, B::GBArray)
325+
emul(A, B, BinaryOps.DIV)
326+
end
327+
328+
#TODO: fix tricky gotchas, this will do type-specific (ie sometimes integer) division.
329+
function Base.broadcasted(::typeof(\), A::GBArray, B::GBArray)
330+
emul(A, B, BinaryOps.RDIV)
331+
end
332+
333+
function Base.broadcasted(::typeof(==), A::GBArray, B::GBArray)
334+
eadd(A, B, BinaryOps.EQ)
335+
end
336+
337+
function Base.broadcasted(::typeof(!=), A::GBArray, B::GBArray)
338+
eadd(A, B, BinaryOps.NE)
339+
end
340+
341+
function Base.broadcasted(::typeof(<), A::GBArray, B::GBArray)
342+
eadd(A, B, BinaryOps.LT)
343+
end
344+
345+
function Base.broadcasted(::typeof(>), A::GBArray, B::GBArray)
346+
eadd(A, B, BinaryOps.GT)
347+
end
348+
349+
function Base.broadcasted(::typeof(<=), A::GBArray, B::GBArray)
350+
eadd(A, B, BinaryOps.LE)
351+
end
352+
353+
function Base.broadcasted(::typeof(>=), A::GBArray, B::GBArray)
354+
eadd(A, B, BinaryOps.GE)
355+
end
356+
357+
function Base.broadcasted(::typeof(^), A::GBArray, B::GBArray)
358+
emul(A, B, BinaryOps.POW)
359+
end

src/operations/operationutils.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ end
1919
optype(A::GBArray, B::GBArray) = optype(eltype(A), eltype(B))
2020

2121
function _handlectx(ctx, ctxvar, default = nothing)
22-
if ctx === nothing
22+
if ctx === nothing || ctx === missing
2323
ctx2 = get(ctxvar)
2424
if ctx2 !== nothing
2525
return something(ctx2)
26-
else
26+
elseif ctx !== missing
2727
return default
28+
else
29+
throw(ArgumentError("This operation requires an operator specified by the `with` function."))
2830
end
2931
else
3032
return ctx

0 commit comments

Comments
 (0)