Skip to content

Commit 9ec792c

Browse files
author
Wimmerer
committed
Complex Support
1 parent 94ba108 commit 9ec792c

File tree

4 files changed

+109
-0
lines changed

4 files changed

+109
-0
lines changed

src/operators/binaryops.jl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,23 @@ function _load(binary::AbstractBinaryOp)
327327
"GxB_SECONDJ1",
328328
]
329329

330+
complexes = [
331+
"GxB_FIRST",
332+
"GxB_SECOND",
333+
"GxB_POW",
334+
"GxB_PLUS",
335+
"GxB_MINUS",
336+
"GxB_TIMES",
337+
"GxB_DIV",
338+
"GxB_RMINUS",
339+
"GxB_RDIV",
340+
"GxB_PAIR",
341+
"GxB_ANY",
342+
"GxB_ISEQ",
343+
"GxB_ISNE",
344+
"GxB_EQ",
345+
"GxB_NE",
346+
]
330347
name = binary.name
331348
if name booleans
332349
binary.pointers[Bool] = load_global(name * "_BOOL")
@@ -353,6 +370,11 @@ function _load(binary::AbstractBinaryOp)
353370
if name positionals
354371
binary.pointers[Any] = load_global(name * "_INT64")
355372
end
373+
name = "GxB_" * name[5:end]
374+
if name complexes
375+
binary.pointers[ComplexF32] = load_global(name * "_FC32")
376+
binary.pointers[ComplexF64] = load_global(name * "_FC64")
377+
end
356378
end
357379

358380
Base.show(io::IO, ::MIME"text/plain", u::libgb.GrB_BinaryOp) = gxbprint(io, u)

src/operators/monoids.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ function _load(monoid::AbstractMonoid)
137137
"GxB_BXNOR",
138138
]
139139
floats = ["GrB_MIN", "GrB_MAX", "GrB_PLUS", "GrB_TIMES", "GxB_ANY"]
140+
complexes = ["GxB_PLUS", "GxB_TIMES", "GxB_ANY"]
140141
name = monoid.name
141142

142143
if name booleans
@@ -172,6 +173,12 @@ function _load(monoid::AbstractMonoid)
172173
monoid.pointers[Float64] =
173174
load_global(name * (isGxB(name) ? "_FP64_MONOID" : "_MONOID_FP64"))
174175
end
176+
name = "GxB_" * name[5:end]
177+
if name complexes
178+
#Complex monoids are always GxB, so "_MONOID" is always at the end.
179+
monoid.pointers[ComplexF32] = load_global(name * "_FC32_MONOID")
180+
monoid.pointer[ComplexF64] = load_global(name * "_FC64_MONOID")
181+
end
175182
end
176183
Base.show(io::IO, ::MIME"text/plain", m::libgb.GrB_Monoid) = gxbprint(io, m)
177184
operator(monoid::libgb.GrB_Monoid) = libgb.GxB_Monoid_operator(monoid)

src/operators/semirings.jl

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,6 +814,36 @@ function _load(rig::AbstractSemiring)
814814
"GxB_PLUS_SECONDJ1",
815815
"GxB_TIMES_SECONDJ1",
816816
]
817+
818+
complexes = [
819+
"GxB_PLUS_FIRST",
820+
"GxB_TIMES_FIRST",
821+
"GxB_ANY_FIRST",
822+
"GxB_PLUS_SECOND",
823+
"GxB_TIMES_SECOND",
824+
"GxB_ANY_SECOND",
825+
"GxB_PLUS_PAIR",
826+
"GxB_TIMES_PAIR",
827+
"GxB_ANY_PAIR",
828+
"GxB_PLUS_PLUS",
829+
"GxB_TIMES_PLUS",
830+
"GxB_ANY_PLUS",
831+
"GxB_PLUS_MINUS",
832+
"GxB_TIMES_MINUS",
833+
"GxB_ANY_MINUS",
834+
"GxB_PLUS_TIMES",
835+
"GxB_TIMES_TIMES",
836+
"GxB_ANY_TIMES",
837+
"GxB_PLUS_DIV",
838+
"GxB_TIMES_DIV",
839+
"GxB_ANY_DIV",
840+
"GxB_PLUS_RDIV",
841+
"GxB_TIMES_RDIV",
842+
"GxB_ANY_RDIV",
843+
"GxB_PLUS_RMINUS",
844+
"GxB_TIMES_RMINUS",
845+
"GxB_ANY_RMINUS",
846+
]
817847
name = rig.name
818848
if name booleans
819849
rig.pointers[Bool] = load_global(name * "_BOOL")
@@ -840,6 +870,12 @@ function _load(rig::AbstractSemiring)
840870
if name positionals
841871
rig.pointers[Any] = load_global(name * "_INT64")
842872
end
873+
name = replace(name, "GrB_" => "GxB_")
874+
name = replace(name, "_SEMIRING" => "")
875+
if name complexes
876+
rig.pointers[ComplexF32] = load_global(name * "_FC32")
877+
rig.pointers[ComplexF64] = load_global(name * "_FC64")
878+
end
843879
end
844880

845881
Base.show(io::IO, ::MIME"text/plain", s::libgb.GrB_Semiring) = gxbprint(io, s)

src/operators/unaryops.jl

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,45 @@ function _load(unaryop::AbstractUnaryOp)
212212
"GxB_ISFINITE",
213213
]
214214
positionals = ["GxB_POSITIONI", "GxB_POSITIONI1", "GxB_POSITIONJ", "GxB_POSITIONJ1"]
215+
complexes = [
216+
"GxB_IDENTITY",
217+
"GxB_AINV",
218+
"GxB_MINV",
219+
"GxB_ONE",
220+
"GxB_SQRT",
221+
"GxB_LOG",
222+
"GxB_EXP",
223+
"GxB_LOG2",
224+
"GxB_SIN",
225+
"GxB_COS",
226+
"GxB_TAN",
227+
"GxB_ACOS",
228+
"GxB_ASIN",
229+
"GxB_ATAN",
230+
"GxB_SINH",
231+
"GxB_COSH",
232+
"GxB_TANH",
233+
"GxB_ASINH",
234+
"GxB_ACOSH",
235+
"GxB_ATANH",
236+
"GxB_SIGNUM",
237+
"GxB_CEIL",
238+
"GxB_FLOOR",
239+
"GxB_ROUND",
240+
"GxB_TRUNC",
241+
"GxB_EXP2",
242+
"GxB_EXPM1",
243+
"GxB_LOG10",
244+
"GxB_LOG1P",
245+
"GxB_CONJ",
246+
"GxB_CREAL",
247+
"GxB_CIMAG",
248+
"GxB_CARG",
249+
"GxB_ABS",
250+
"GxB_ISINF",
251+
"GxB_ISNAN",
252+
"GxB_ISFINITE",
253+
]
215254
name = unaryop.name
216255
if name booleans
217256
constname = name * "_BOOL"
@@ -239,6 +278,11 @@ function _load(unaryop::AbstractUnaryOp)
239278
if name positionals
240279
unaryop.pointers[Any] = load_global(name)
241280
end
281+
name = "GxB_" * name[5:end]
282+
if name complexes
283+
unaryop.pointers[ComplexF32] = load_global(name * "_FC32")
284+
unaryop.pointers[ComplexF64] = load_global(name * "_FC64")
285+
end
242286
end
243287

244288
ztype(op::libgb.GrB_UnaryOp) = tojuliatype(ptrtogbtype[libgb.GxB_UnaryOp_ztype(op)])

0 commit comments

Comments
 (0)