@@ -14,17 +14,53 @@ const GrB_Index = Union{Int64, UInt64}
14
14
const valid_types = Union{Bool, Int8, UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Float32, Float64}
15
15
const valid_int_types = Union{Bool, Int8, UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64}
16
16
17
- unary_operators = [ " IDENTITY " , " AINV " , " MINV " ]
17
+ const GrB_NULL = C_NULL
18
18
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" ,
20
22
" PLUS" , " MINUS" , " TIMES" , " DIV" ]
21
23
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
+
22
55
include (depsjl_path)
23
56
include (" Structures.jl" )
24
57
include (" Utils.jl" )
25
58
26
59
const GrB_LNOT = GrB_UnaryOp ()
27
60
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
+
28
64
graphblas_lib = C_NULL
29
65
30
66
function __init__ ()
@@ -49,7 +85,7 @@ function __init__()
49
85
# load global unary operators
50
86
GrB_LNOT. p = load_global (" GrB_LNOT" )
51
87
52
- for op in unary_operators
88
+ for op in built_in_unary_operators
53
89
for t in types
54
90
varname = " GrB_" * op * " _" * t
55
91
@eval const $ (Symbol (varname)) = $ (GrB_UnaryOp (load_global (varname)))
@@ -61,12 +97,38 @@ function __init__()
61
97
GrB_LAND. p = load_global (" GrB_LAND" )
62
98
GrB_LXOR. p = load_global (" GrB_LXOR" )
63
99
64
- for op in binary_operators
100
+ for op in built_in_binary_operators
65
101
for t in types
66
102
varname = " GrB_" * op * " _" * t
67
103
@eval const $ (Symbol (varname)) = $ (GrB_BinaryOp (load_global (varname)))
68
104
end
69
105
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
70
132
end
71
133
72
134
include (" Enums.jl" )
109
171
110
172
# Unary Operators
111
173
export GrB_LNOT
112
- for op in unary_operators
174
+ for op in built_in_unary_operators
113
175
for t in types
114
176
varname = " GrB_" * op * " _" * t
115
177
@eval export $ (Symbol (varname))
@@ -118,13 +180,35 @@ end
118
180
119
181
# Binary Operators
120
182
export GrB_LOR, GrB_LAND, GrB_LXOR
121
- for op in binary_operators
183
+ for op in built_in_binary_operators
122
184
for t in types
123
185
varname = " GrB_" * op * " _" * t
124
186
@eval export $ (Symbol (varname))
125
187
end
126
188
end
127
189
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
+
128
212
# Enums
129
213
export GrB_Info
130
214
for s in instances (GrB_Info)
@@ -150,4 +234,8 @@ export GrB_Desc_Value
150
234
for s in instances (GrB_Desc_Value)
151
235
@eval export $ (Symbol (s))
152
236
end
237
+
238
+ # NULL
239
+ export GrB_NULL
240
+
153
241
end # end of module
0 commit comments