Skip to content

Commit c9fa486

Browse files
add documentation for multiplication operations
1 parent 7a86353 commit c9fa486

File tree

1 file changed

+165
-12
lines changed

1 file changed

+165
-12
lines changed

src/Operations/Multiplication.jl

Lines changed: 165 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,212 @@
1+
"""
2+
GrB_mxm(C, Mask, accum, semiring, A, B, desc)
3+
4+
Multiplies a matrix with another matrix on a semiring. The result is a matrix.
5+
6+
# Examples
7+
```jldoctest
8+
julia> using SuiteSparseGraphBLAS
9+
10+
julia> GrB_init(GrB_NONBLOCKING)
11+
GrB_SUCCESS::GrB_Info = 0
12+
13+
julia> A = GrB_Matrix{Int64}()
14+
GrB_Matrix{Int64}
15+
16+
julia> GrB_Matrix_new(A, GrB_INT64, 2, 2)
17+
GrB_SUCCESS::GrB_Info = 0
18+
19+
julia> I1 = [0, 1]; J1 = [0, 1]; X1 = [10, 20]; n1 = 2;
20+
21+
julia> GrB_Matrix_build(A, I1, J1, X1, n1, GrB_FIRST_INT64)
22+
GrB_SUCCESS::GrB_Info = 0
23+
24+
julia> B = GrB_Matrix{Int64}()
25+
GrB_Matrix{Int64}
26+
27+
julia> GrB_Matrix_new(B, GrB_INT64, 2, 2)
28+
GrB_SUCCESS::GrB_Info = 0
29+
30+
julia> I2 = [0, 1]; J2 = [0, 1]; X2 = [5, 15]; n2 = 2;
31+
32+
julia> GrB_Matrix_build(B, I2, J2, X2, n2, GrB_FIRST_INT64)
33+
GrB_SUCCESS::GrB_Info = 0
34+
35+
julia> C = GrB_Matrix{Int64}()
36+
GrB_Matrix{Int64}
37+
38+
julia> GrB_Matrix_new(C, GrB_INT64, 2, 2)
39+
GrB_SUCCESS::GrB_Info = 0
40+
41+
julia> GrB_mxm(C, GrB_NULL, GrB_NULL, GxB_PLUS_TIMES_INT64, A, B, GrB_NULL)
42+
GrB_SUCCESS::GrB_Info = 0
43+
44+
julia> GrB_Matrix_extractTuples(C)
45+
([0, 1], [0, 1], [50, 300])
46+
```
47+
"""
148
function GrB_mxm( # C<Mask> = accum (C, A*B)
249
C::GrB_Matrix, # input/output matrix for results
3-
Mask::GrB_Matrix, # optional mask for C, unused if NULL
4-
accum::GrB_BinaryOp, # optional accum for Z=accum(C,T)
50+
Mask, # optional mask for C, unused if NULL
51+
accum, # optional accum for Z=accum(C,T)
552
semiring::GrB_Semiring, # defines '+' and '*' for A*B
653
A::GrB_Matrix, # first input: matrix A
754
B::GrB_Matrix, # second input: matrix B
8-
desc::GrB_Descriptor # descriptor for C, Mask, A, and B
55+
desc # descriptor for C, Mask, A, and B
956
)
1057

58+
Mask_ptr = Mask == GrB_NULL ? C_NULL : Mask.p
59+
accum_ptr = accum == GrB_NULL ? C_NULL : accum.p
60+
desc_ptr = desc == GrB_NULL ? C_NULL : desc.p
61+
1162
return GrB_Info(
1263
ccall(
1364
dlsym(graphblas_lib, "GrB_mxm"),
1465
Cint,
1566
(Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}),
16-
C.p, Mask.p, accum.p, semiring.p, A.p, B.p, desc.p
67+
C.p, Mask_ptr, accum_ptr, semiring.p, A.p, B.p, desc_ptr
1768
)
1869
)
1970
end
2071

72+
"""
73+
GrB_vxm(w, mask, accum, semiring, u, A, desc)
74+
75+
Multiplies a (row) vector with a matrix on an semiring. The result is a vector.
76+
77+
# Examples
78+
```jldoctest
79+
julia> using SuiteSparseGraphBLAS
80+
81+
julia> GrB_init(GrB_NONBLOCKING)
82+
GrB_SUCCESS::GrB_Info = 0
83+
84+
julia> A = GrB_Matrix{Int64}()
85+
GrB_Matrix{Int64}
86+
87+
julia> GrB_Matrix_new(A, GrB_INT64, 2, 2)
88+
GrB_SUCCESS::GrB_Info = 0
89+
90+
julia> I1 = [0, 1]; J1 = [0, 1]; X1 = [10, 20]; n1 = 2;
91+
92+
julia> GrB_Matrix_build(A, I1, J1, X1, n1, GrB_FIRST_INT64)
93+
GrB_SUCCESS::GrB_Info = 0
94+
95+
julia> u = GrB_Vector{Int64}()
96+
GrB_Vector{Int64}
97+
98+
julia> GrB_Vector_new(u, GrB_INT64, 2)
99+
GrB_SUCCESS::GrB_Info = 0
100+
101+
julia> I2 = [0, 1]; X2 = [5, 6]; n2 = 2;
102+
103+
julia> GrB_Vector_build(u, I2, X2, n2, GrB_FIRST_INT64)
104+
GrB_SUCCESS::GrB_Info = 0
105+
106+
julia> w = GrB_Vector{Int64}()
107+
GrB_Vector{Int64}
108+
109+
julia> GrB_Vector_new(w, GrB_INT64, 2)
110+
GrB_SUCCESS::GrB_Info = 0
111+
112+
julia> GrB_vxm(w, GrB_NULL, GrB_NULL, GxB_PLUS_TIMES_INT64, u, A, GrB_NULL)
113+
GrB_SUCCESS::GrB_Info = 0
114+
115+
julia> GrB_Vector_extractTuples(w)
116+
([0, 1], [50, 120])
117+
```
118+
"""
21119
function GrB_vxm( # w'<Mask> = accum (w, u'*A)
22120
w::GrB_Vector, # input/output vector for results
23-
mask::GrB_Vector, # optional mask for w, unused if NULL
24-
accum::GrB_BinaryOp, # optional accum for z=accum(w,t)
121+
mask, # optional mask for w, unused if NULL
122+
accum, # optional accum for z=accum(w,t)
25123
semiring::GrB_Semiring, # defines '+' and '*' for u'*A
26124
u::GrB_Vector, # first input: vector u
27125
A::GrB_Matrix, # second input: matrix A
28-
desc::GrB_Descriptor # descriptor for w, mask, and A
126+
desc # descriptor for w, mask, and A
29127
)
30128

129+
mask_ptr = mask == GrB_NULL ? C_NULL : mask.p
130+
accum_ptr = accum == GrB_NULL ? C_NULL : accum.p
131+
desc_ptr = desc == GrB_NULL ? C_NULL : desc.p
132+
31133
return GrB_Info(
32134
ccall(
33135
dlsym(graphblas_lib, "GrB_vxm"),
34136
Cint,
35137
(Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}),
36-
w.p, mask.p, accum.p, semiring.p, u.p, A.p, desc.p
138+
w.p, mask_ptr, accum_ptr, semiring.p, u.p, A.p, desc_ptr
37139
)
38140
)
39141
end
40142

143+
"""
144+
GrB_mxv(w, mask, accum, semiring, A, u, desc)
145+
146+
Multiplies a matrix by a vector on a semiring. The result is a vector.
147+
148+
# Examples
149+
```jldoctest
150+
julia> using SuiteSparseGraphBLAS
151+
152+
julia> GrB_init(GrB_NONBLOCKING)
153+
GrB_SUCCESS::GrB_Info = 0
154+
155+
julia> A = GrB_Matrix{Int64}()
156+
GrB_Matrix{Int64}
157+
158+
julia> GrB_Matrix_new(A, GrB_INT64, 2, 2)
159+
GrB_SUCCESS::GrB_Info = 0
160+
161+
julia> I1 = [0, 0, 1]; J1 = [0, 1, 1]; X1 = [10, 20, 30]; n1 = 3;
162+
163+
julia> GrB_Matrix_build(A, I1, J1, X1, n1, GrB_FIRST_INT64)
164+
GrB_SUCCESS::GrB_Info = 0
165+
166+
julia> u = GrB_Vector{Int64}()
167+
GrB_Vector{Int64}
168+
169+
julia> GrB_Vector_new(u, GrB_INT64, 2)
170+
GrB_SUCCESS::GrB_Info = 0
171+
172+
julia> I2 = [0, 1]; X2 = [5, 6]; n2 = 2;
173+
174+
julia> GrB_Vector_build(u, I2, X2, n2, GrB_FIRST_INT64)
175+
GrB_SUCCESS::GrB_Info = 0
176+
177+
julia> w = GrB_Vector{Int64}()
178+
GrB_Vector{Int64}
179+
180+
julia> GrB_Vector_new(w, GrB_INT64, 2)
181+
GrB_SUCCESS::GrB_Info = 0
182+
183+
julia> GrB_mxv(w, GrB_NULL, GrB_NULL, GxB_PLUS_TIMES_INT64, A, u, GrB_NULL)
184+
GrB_SUCCESS::GrB_Info = 0
185+
186+
julia> GrB_Vector_extractTuples(w)
187+
([0, 1], [170, 180])
188+
```
189+
"""
41190
function GrB_mxv( # w<Mask> = accum (w, A*u)
42191
w::GrB_Vector, # input/output vector for results
43-
mask::GrB_Vector, # optional mask for w, unused if NULL
44-
accum::GrB_BinaryOp, # optional accum for z=accum(w,t)
192+
mask, # optional mask for w, unused if NULL
193+
accum, # optional accum for z=accum(w,t)
45194
semiring::GrB_Semiring, # defines '+' and '*' for A*B
46195
A::GrB_Matrix, # first input: matrix A
47196
u::GrB_Vector, # second input: vector u
48-
desc::GrB_Descriptor # descriptor for w, mask, and A
197+
desc # descriptor for w, mask, and A
49198
)
50199

200+
mask_ptr = mask == GrB_NULL ? C_NULL : mask.p
201+
accum_ptr = accum == GrB_NULL ? C_NULL : accum.p
202+
desc_ptr = desc == GrB_NULL ? C_NULL : desc.p
203+
51204
return GrB_Info(
52205
ccall(
53206
dlsym(graphblas_lib, "GrB_mxv"),
54207
Cint,
55208
(Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}),
56-
w.p, mask.p, accum.p, semiring.p, A.p, u.p, desc.p
209+
w.p, mask_ptr, accum_ptr, semiring.p, A.p, u.p, desc_ptr
57210
)
58211
)
59212
end

0 commit comments

Comments
 (0)