Skip to content

Commit eb83cff

Browse files
add built in monoids and semirings
1 parent cfe5a8f commit eb83cff

File tree

1 file changed

+94
-6
lines changed

1 file changed

+94
-6
lines changed

src/SuiteSparseGraphBLAS.jl

Lines changed: 94 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,53 @@ const GrB_Index = Union{Int64, UInt64}
1414
const valid_types = Union{Bool, Int8, UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Float32, Float64}
1515
const valid_int_types = Union{Bool, Int8, UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64}
1616

17-
unary_operators = ["IDENTITY", "AINV", "MINV"]
17+
const GrB_NULL = C_NULL
1818

19-
binary_operators = ["EQ", "NE", "GT", "LT", "GE", "LE", "FIRST", "SECOND", "MIN", "MAX",
19+
built_in_unary_operators = ["IDENTITY", "AINV", "MINV"]
20+
21+
built_in_binary_operators = ["EQ", "NE", "GT", "LT", "GE", "LE", "FIRST", "SECOND", "MIN", "MAX",
2022
"PLUS", "MINUS", "TIMES", "DIV"]
2123

24+
built_in_monoids = ["MIN", "MAX", "PLUS", "TIMES"]
25+
26+
built_in_semirings = [ "MIN_FIRST", "MAX_FIRST", "PLUS_FIRST", "TIMES_FIRST", "MIN_SECOND",
27+
"MAX_SECOND", "PLUS_SECOND", "TIMES_SECOND", "MIN_MIN", "MAX_MIN",
28+
"PLUS_MIN", "TIMES_MIN", "MIN_MAX", "MAX_MAX", "PLUS_MAX", "TIMES_MAX",
29+
"MIN_PLUS", "MAX_PLUS", "PLUS_PLUS", "TIMES_PLUS", "MIN_MINUS",
30+
"MAX_MINUS", "PLUS_MINUS", "TIMES_MINUS", "MIN_TIMES", "MAX_TIMES",
31+
"PLUS_TIMES", "TIMES_TIMES", "MIN_DIV", "MAX_DIV", "PLUS_DIV",
32+
"TIMES_DIV", "MIN_ISEQ", "MAX_ISEQ", "PLUS_ISEQ", "TIMES_ISEQ", "MIN_ISNE",
33+
"MAX_ISNE", "PLUS_ISNE", "TIMES_ISNE", "MIN_ISGT", "MAX_ISGT", "PLUS_ISGT",
34+
"TIMES_ISGT", "MIN_ISLT", "MAX_ISLT", "PLUS_ISLT", "TIMES_ISLT", "MIN_ISGE",
35+
"MAX_ISGE", "PLUS_ISGE", "TIMES_ISGE", "MIN_ISLE", "MAX_ISLE", "PLUS_ISLE",
36+
"TIMES_ISLE", "MIN_LOR", "MAX_LOR", "PLUS_LOR", "TIMES_LOR", "MIN_LAND", "MAX_LAND",
37+
"PLUS_LAND", "TIMES_LAND", "MIN_LXOR", "MAX_LXOR", "PLUS_LXOR", "TIMES_LXOR",
38+
"LOR_EQ", "LAND_EQ", "LXOR_EQ", "EQ_EQ", "LOR_NE", "LAND_NE", "LXOR_NE", "EQ_NE",
39+
"LOR_GT", "LAND_GT", "LXOR_GT", "EQ_GT", "LOR_LT", "LAND_LT", "LXOR_LT", "EQ_LT",
40+
"LOR_GE", "LAND_GE", "LXOR_GE", "EQ_GE", "LOR_LE", "LAND_LE", "LXOR_LE", "EQ_LE"
41+
]
42+
43+
built_in_boolean_semirings = [ "LOR_FIRST", "LAND_FIRST", "LXOR_FIRST", "EQ_FIRST",
44+
"LOR_SECOND", "LAND_SECOND", "LXOR_SECOND", "EQ_SECOND",
45+
"LOR_LOR", "LAND_LOR", "LXOR_LOR", "EQ_LOR",
46+
"LOR_LAND", "LAND_LAND", "LXOR_LAND", "EQ_LAND",
47+
"LOR_LXOR", "LAND_LXOR", "LXOR_LXOR", "EQ_LXOR",
48+
"LOR_EQ", "LAND_EQ", "LXOR_EQ", "EQ_EQ",
49+
"LOR_GT", "LAND_GT", "LXOR_GT", "EQ_GT",
50+
"LOR_LT", "LAND_LT", "LXOR_LT", "EQ_LT",
51+
"LOR_GE", "LAND_GE", "LXOR_GE", "EQ_GE",
52+
"LOR_LE", "LAND_LE", "LXOR_LE", "EQ_LE"
53+
]
54+
2255
include(depsjl_path)
2356
include("Structures.jl")
2457
include("Utils.jl")
2558

2659
const GrB_LNOT = GrB_UnaryOp()
2760
const GrB_LOR = GrB_BinaryOp(); const GrB_LAND = GrB_BinaryOp(); const GrB_LXOR = GrB_BinaryOp()
61+
const GxB_LOR_BOOL_MONOID = GrB_Monoid(); const GxB_LAND_BOOL_MONOID = GrB_Monoid()
62+
const GxB_LXOR_BOOL_MONOID = GrB_Monoid(); const GxB_EQ_BOOL_MONOID = GrB_Monoid()
63+
2864
graphblas_lib = C_NULL
2965

3066
function __init__()
@@ -49,7 +85,7 @@ function __init__()
4985
#load global unary operators
5086
GrB_LNOT.p = load_global("GrB_LNOT")
5187

52-
for op in unary_operators
88+
for op in built_in_unary_operators
5389
for t in types
5490
varname = "GrB_" * op * "_" * t
5591
@eval const $(Symbol(varname)) = $(GrB_UnaryOp(load_global(varname)))
@@ -61,12 +97,38 @@ function __init__()
6197
GrB_LAND.p = load_global("GrB_LAND")
6298
GrB_LXOR.p = load_global("GrB_LXOR")
6399

64-
for op in binary_operators
100+
for op in built_in_binary_operators
65101
for t in types
66102
varname = "GrB_" * op * "_" * t
67103
@eval const $(Symbol(varname)) = $(GrB_BinaryOp(load_global(varname)))
68104
end
69105
end
106+
107+
#load global monoids
108+
GxB_LOR_BOOL_MONOID.p = load_global("GxB_LOR_BOOL_MONOID")
109+
GxB_LAND_BOOL_MONOID.p = load_global("GxB_LAND_BOOL_MONOID")
110+
GxB_LXOR_BOOL_MONOID.p = load_global("GxB_LXOR_BOOL_MONOID")
111+
GxB_EQ_BOOL_MONOID.p = load_global("GxB_EQ_BOOL_MONOID")
112+
113+
for m in built_in_monoids
114+
for t in types[2:end]
115+
varname = "GxB_" * m * "_" * t * "_MONOID"
116+
@eval const $(Symbol(varname)) = $(GrB_Monoid(load_global(varname)))
117+
end
118+
end
119+
120+
#load global semirings
121+
for s in built_in_semirings
122+
for t in types[2:end]
123+
varname = "GxB_" * s * "_" * t
124+
@eval const $(Symbol(varname)) = $(GrB_Semiring(load_global(varname)))
125+
end
126+
end
127+
128+
for bool_s in built_in_boolean_semirings
129+
varname = "GxB_" * bool_s * "_" * "BOOL"
130+
@eval const $(Symbol(varname)) = $(GrB_Semiring(load_global(varname)))
131+
end
70132
end
71133

72134
include("Enums.jl")
@@ -109,7 +171,7 @@ end
109171

110172
# Unary Operators
111173
export GrB_LNOT
112-
for op in unary_operators
174+
for op in built_in_unary_operators
113175
for t in types
114176
varname = "GrB_" * op * "_" * t
115177
@eval export $(Symbol(varname))
@@ -118,13 +180,35 @@ end
118180

119181
# Binary Operators
120182
export GrB_LOR, GrB_LAND, GrB_LXOR
121-
for op in binary_operators
183+
for op in built_in_binary_operators
122184
for t in types
123185
varname = "GrB_" * op * "_" * t
124186
@eval export $(Symbol(varname))
125187
end
126188
end
127189

190+
# Monoids
191+
export GxB_LOR_BOOL_MONOID, GxB_LAND_BOOL_MONOID, GxB_LXOR_BOOL_MONOID, GxB_EQ_BOOL_MONOID
192+
for m in built_in_monoids
193+
for t in types[2:end]
194+
varname = "GxB_" * m * "_" * t * "_MONOID"
195+
@eval export $(Symbol(varname))
196+
end
197+
end
198+
199+
# Semirings
200+
for s in built_in_semirings
201+
for t in types[2:end]
202+
varname = "GxB_" * s * "_" * t
203+
@eval export $(Symbol(varname))
204+
end
205+
end
206+
207+
for bool_s in built_in_boolean_semirings
208+
varname = "GxB_" * bool_s * "_" * "BOOL"
209+
@eval export $(Symbol(varname))
210+
end
211+
128212
# Enums
129213
export GrB_Info
130214
for s in instances(GrB_Info)
@@ -150,4 +234,8 @@ export GrB_Desc_Value
150234
for s in instances(GrB_Desc_Value)
151235
@eval export $(Symbol(s))
152236
end
237+
238+
# NULL
239+
export GrB_NULL
240+
153241
end #end of module

0 commit comments

Comments
 (0)