GraphBLAS operations
Multiplication
GraphBLASInterface.GrB_mxm
— Function.GrB_mxm(C, Mask, accum, semiring, A, B, desc)
Multiplies a matrix with another matrix on a semiring. The result is a matrix.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 2, 2)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 1]; J1 = ZeroBasedIndex[0, 1]; X1 = [10, 20]; n1 = 2;
julia> GrB_Matrix_build(A, I1, J1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> B = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(B, GrB_INT64, 2, 2)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 1]; J2 = ZeroBasedIndex[0, 1]; X2 = [5, 15]; n2 = 2;
julia> GrB_Matrix_build(B, I2, J2, X2, n2, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> C = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(C, GrB_INT64, 2, 2)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_mxm(C, GrB_NULL, GrB_NULL, GxB_PLUS_TIMES_INT64, A, B, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(C, GxB_COMPLETE)
GraphBLAS matrix: C
nrows: 2 ncols: 2 max # entries: 2
format: standard CSR vlen: 2 nvec_nonempty: 2 nvec: 2 plen: 2 vdim: 2
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
last method used for GrB_mxm, vxm, or mxv: heap
number of entries: 2
row: 0 : 1 entries [0:0]
column 0: int64 50
row: 1 : 1 entries [1:1]
column 1: int64 300
GraphBLASInterface.GrB_vxm
— Function.GrB_vxm(w, mask, accum, semiring, u, A, desc)
Multiplies a (row)vector with a matrix on an semiring. The result is a vector.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 2, 2)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 1]; J1 = ZeroBasedIndex[0, 1]; X1 = [10, 20]; n1 = 2;
julia> GrB_Matrix_build(A, I1, J1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> u = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(u, GrB_INT64, 2)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 1]; X2 = [5, 6]; n2 = 2;
julia> GrB_Vector_build(u, I2, X2, n2, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> w = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(w, GrB_INT64, 2)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_vxm(w, GrB_NULL, GrB_NULL, GxB_PLUS_TIMES_INT64, u, A, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(w, GxB_COMPLETE)
GraphBLAS vector: w
nrows: 2 ncols: 1 max # entries: 2
format: standard CSC vlen: 2 nvec_nonempty: 1 nvec: 1 plen: 1 vdim: 1
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
last method used for GrB_mxm, vxm, or mxv: heap
number of entries: 2
column: 0 : 2 entries [0:1]
row 0: int64 50
row 1: int64 120
GraphBLASInterface.GrB_mxv
— Function.GrB_mxv(w, mask, accum, semiring, A, u, desc)
Multiplies a matrix by a vector on a semiring. The result is a vector.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 2, 2)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 0, 1]; J1 = ZeroBasedIndex[0, 1, 1]; X1 = [10, 20, 30]; n1 = 3;
julia> GrB_Matrix_build(A, I1, J1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> u = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(u, GrB_INT64, 2)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 1]; X2 = [5, 6]; n2 = 2;
julia> GrB_Vector_build(u, I2, X2, n2, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> w = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(w, GrB_INT64, 2)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_mxv(w, GrB_NULL, GrB_NULL, GxB_PLUS_TIMES_INT64, A, u, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(w, GxB_COMPLETE)
GraphBLAS vector: w
nrows: 2 ncols: 1 max # entries: 2
format: standard CSC vlen: 2 nvec_nonempty: 1 nvec: 1 plen: 1 vdim: 1
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
last method used for GrB_mxm, vxm, or mxv: dot
number of entries: 2
column: 0 : 2 entries [0:1]
row 0: int64 170
row 1: int64 180
Element-wise multiplication
GraphBLASInterface.GrB_eWiseMult
— Function.GrB_eWiseMult(C, mask, accum, op, A, B, desc)
Generic method for element-wise matrix and vector operations: using set intersection.
GrB_eWiseMult
computes C<Mask> = accum (C, A .* B)
, where pairs of elements in two matrices (or vectors) are pairwise "multiplied" with C(i, j) = mult (A(i, j), B(i, j)). The "multiplication" operator can be any binary operator. The pattern of the result T = A .* B is the set intersection (not union) of A and B. Entries outside of the intersection are not computed. This is primary difference with GrB_eWiseAdd
. The input matrices A and/or B may be transposed first, via the descriptor. For a semiring, the mult operator is the semiring's multiply operator; this differs from the eWiseAdd methods which use the semiring's add operator instead.
GraphBLASInterface.GrB_eWiseMult_Vector_Semiring
— Function.GrB_eWiseMult_Vector_Semiring(w, mask, accum, semiring, u, v, desc)
Compute element-wise vector multiplication using semiring. Semiring's multiply operator is used. w<mask> = accum (w, u .* v)
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> u = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(u, GrB_INT64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 2, 4]; X1 = [10, 20, 3]; n1 = 3;
julia> GrB_Vector_build(u, I1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> v = GrB_Vector{Float64}()
GrB_Vector{Float64}
julia> GrB_Vector_new(v, GrB_FP64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 1, 4]; X2 = [1.1, 2.2, 3.3]; n2 = 3;
julia> GrB_Vector_build(v, I2, X2, n2, GrB_FIRST_FP64)
GrB_SUCCESS::GrB_Info = 0
julia> w = GrB_Vector{Float64}()
GrB_Vector{Float64}
julia> GrB_Vector_new(w, GrB_FP64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_eWiseMult_Vector_Semiring(w, GrB_NULL, GrB_NULL, GxB_PLUS_TIMES_FP64, u, v, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(w, GxB_COMPLETE)
GraphBLAS vector: w
nrows: 5 ncols: 1 max # entries: 2
format: standard CSC vlen: 5 nvec_nonempty: 1 nvec: 1 plen: 1 vdim: 1
hyper_ratio 0.0625
GraphBLAS type: double size: 8
number of entries: 2
column: 0 : 2 entries [0:1]
row 0: double 11
row 4: double 9.9
GraphBLASInterface.GrB_eWiseMult_Vector_Monoid
— Function.GrB_eWiseMult_Vector_Monoid(w, mask, accum, monoid, u, v, desc)
Compute element-wise vector multiplication using monoid. w<mask> = accum (w, u .* v)
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> u = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(u, GrB_INT64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 2, 4]; X1 = [10, 20, 3]; n1 = 3;
julia> GrB_Vector_build(u, I1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> v = GrB_Vector{Float64}()
GrB_Vector{Float64}
julia> GrB_Vector_new(v, GrB_FP64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 1, 4]; X2 = [1.1, 2.2, 3.3]; n2 = 3;
julia> GrB_Vector_build(v, I2, X2, n2, GrB_FIRST_FP64)
GrB_SUCCESS::GrB_Info = 0
julia> w = GrB_Vector{Float64}()
GrB_Vector{Float64}
julia> GrB_Vector_new(w, GrB_FP64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_eWiseMult_Vector_Monoid(w, GrB_NULL, GrB_NULL, GxB_MAX_FP64_MONOID, u, v, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(w, GxB_COMPLETE)
GraphBLAS vector: w
nrows: 5 ncols: 1 max # entries: 2
format: standard CSC vlen: 5 nvec_nonempty: 1 nvec: 1 plen: 1 vdim: 1
hyper_ratio 0.0625
GraphBLAS type: double size: 8
number of entries: 2
column: 0 : 2 entries [0:1]
row 0: double 10
row 4: double 3.3
GraphBLASInterface.GrB_eWiseMult_Vector_BinaryOp
— Function.GrB_eWiseMult_Vector_BinaryOp(w, mask, accum, mult, u, v, desc)
Compute element-wise vector multiplication using binary operator. w<mask> = accum (w, u .* v)
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> u = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(u, GrB_INT64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 2, 4]; X1 = [10, 20, 30]; n1 = 3;
julia> GrB_Vector_build(u, I1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> v = GrB_Vector{Float64}()
GrB_Vector{Float64}
julia> GrB_Vector_new(v, GrB_FP64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 1, 4]; X2 = [1.1, 2.2, 3.3]; n2 = 3;
julia> GrB_Vector_build(v, I2, X2, n2, GrB_FIRST_FP64)
GrB_SUCCESS::GrB_Info = 0
julia> w = GrB_Vector{Float64}()
GrB_Vector{Float64}
julia> GrB_Vector_new(w, GrB_FP64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_eWiseMult_Vector_BinaryOp(w, GrB_NULL, GrB_NULL, GrB_TIMES_FP64, u, v, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(w, GxB_COMPLETE)
GraphBLAS vector: w
nrows: 5 ncols: 1 max # entries: 2
format: standard CSC vlen: 5 nvec_nonempty: 1 nvec: 1 plen: 1 vdim: 1
hyper_ratio 0.0625
GraphBLAS type: double size: 8
number of entries: 2
column: 0 : 2 entries [0:1]
row 0: double 11
row 4: double 99
GraphBLASInterface.GrB_eWiseMult_Matrix_Semiring
— Function.GrB_eWiseMult_Matrix_Semiring(C, Mask, accum, semiring, A, B, desc)
Compute element-wise matrix multiplication using semiring. Semiring's multiply operator is used. C<Mask> = accum (C, A .* B)
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 0, 2, 2]; J1 = ZeroBasedIndex[1, 2, 0, 2]; X1 = [10, 20, 30, 40]; n1 = 4;
julia> GrB_Matrix_build(A, I1, J1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> B = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(B, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 0, 2]; J2 = ZeroBasedIndex[3, 2, 0]; X2 = [15, 16, 17]; n2 = 3;
julia> GrB_Matrix_build(B, I2, J2, X2, n2, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> C = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(C, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_eWiseMult_Matrix_Semiring(C, GrB_NULL, GrB_NULL, GxB_PLUS_TIMES_INT64, A, B, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(C, GxB_COMPLETE)
GraphBLAS matrix: C
nrows: 4 ncols: 4 max # entries: 2
format: standard CSR vlen: 4 nvec_nonempty: 2 nvec: 4 plen: 4 vdim: 4
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 2
row: 0 : 1 entries [0:0]
column 2: int64 320
row: 2 : 1 entries [1:1]
column 0: int64 510
GraphBLASInterface.GrB_eWiseMult_Matrix_Monoid
— Function.GrB_eWiseMult_Matrix_Monoid(C, Mask, accum, monoid, A, B, desc)
Compute element-wise matrix multiplication using monoid. C<Mask> = accum (C, A .* B)
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 0, 2, 2]; J1 = ZeroBasedIndex[1, 2, 0, 2]; X1 = [10, 20, 30, 40]; n1 = 4;
julia> GrB_Matrix_build(A, I1, J1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> B = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(B, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 0, 2]; J2 = ZeroBasedIndex[3, 2, 0]; X2 = [15, 16, 17]; n2 = 3;
julia> GrB_Matrix_build(B, I2, J2, X2, n2, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> C = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(C, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_eWiseMult_Matrix_Monoid(C, GrB_NULL, GrB_NULL, GxB_PLUS_INT64_MONOID, A, B, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(C, GxB_COMPLETE)
GraphBLAS matrix: C
nrows: 4 ncols: 4 max # entries: 2
format: standard CSR vlen: 4 nvec_nonempty: 2 nvec: 4 plen: 4 vdim: 4
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 2
row: 0 : 1 entries [0:0]
column 2: int64 36
row: 2 : 1 entries [1:1]
column 0: int64 47
GraphBLASInterface.GrB_eWiseMult_Matrix_BinaryOp
— Function.GrB_eWiseMult_Matrix_BinaryOp(C, Mask, accum, mult, A, B, desc)
Compute element-wise matrix multiplication using binary operator. C<Mask> = accum (C, A .* B)
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 0, 2, 2]; J1 = ZeroBasedIndex[1, 2, 0, 2]; X1 = [10, 20, 30, 40]; n1 = 4;
julia> GrB_Matrix_build(A, I1, J1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> B = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(B, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 0, 2]; J2 = ZeroBasedIndex[3, 2, 0]; X2 = [15, 16, 17]; n2 = 3;
julia> GrB_Matrix_build(B, I2, J2, X2, n2, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> C = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(C, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_eWiseMult_Matrix_BinaryOp(C, GrB_NULL, GrB_NULL, GrB_PLUS_INT64, A, B, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(C, GxB_COMPLETE)
GraphBLAS matrix: C
nrows: 4 ncols: 4 max # entries: 2
format: standard CSR vlen: 4 nvec_nonempty: 2 nvec: 4 plen: 4 vdim: 4
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 2
row: 0 : 1 entries [0:0]
column 2: int64 36
row: 2 : 1 entries [1:1]
column 0: int64 47
Element-wise addition
GraphBLASInterface.GrB_eWiseAdd
— Function.GrB_eWiseAdd(C, mask, accum, op, A, B, desc)
Generic method for element-wise matrix and vector operations: using set union.
GrB_eWiseAdd
computes C<Mask> = accum (C, A + B)
, where pairs of elements in two matrices (or two vectors) are pairwise "added". The "add" operator can be any binary operator. With the plus operator, this is the same matrix addition in conventional linear algebra. The pattern of the result T = A + B is the set union of A and B. Entries outside of the union are not computed. That is, if both A(i, j) and B(i, j) are present in the pattern of A and B, then T(i, j) = A(i, j) "+" B(i, j). If only A(i, j) is present then T(i, j) = A (i, j) and the "+" operator is not used. Likewise, if only B(i, j) is in the pattern of B but A(i, j) is not in the pattern of A, then T(i, j) = B(i, j). For a semiring, the mult operator is the semiring's add operator.
GraphBLASInterface.GrB_eWiseAdd_Vector_Semiring
— Function.GrB_eWiseAdd_Vector_Semiring(w, mask, accum, semiring, u, v, desc)
Compute element-wise vector addition using semiring. Semiring's add operator is used. w<mask> = accum (w, u + v)
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> u = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(u, GrB_INT64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 2, 4]; X1 = [10, 20, 3]; n1 = 3;
julia> GrB_Vector_build(u, I1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> v = GrB_Vector{Float64}()
GrB_Vector{Float64}
julia> GrB_Vector_new(v, GrB_FP64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 1, 4]; X2 = [1.1, 2.2, 3.3]; n2 = 3;
julia> GrB_Vector_build(v, I2, X2, n2, GrB_FIRST_FP64)
GrB_SUCCESS::GrB_Info = 0
julia> w = GrB_Vector{Float64}()
GrB_Vector{Float64}
julia> GrB_Vector_new(w, GrB_FP64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_eWiseAdd_Vector_Semiring(w, GrB_NULL, GrB_NULL, GxB_PLUS_TIMES_FP64, u, v, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(w, GxB_COMPLETE)
GraphBLAS vector: w
nrows: 5 ncols: 1 max # entries: 4
format: standard CSC vlen: 5 nvec_nonempty: 1 nvec: 1 plen: 1 vdim: 1
hyper_ratio 0.0625
GraphBLAS type: double size: 8
number of entries: 4
column: 0 : 4 entries [0:3]
row 0: double 11.1
row 1: double 2.2
row 2: double 20
row 4: double 6.3
GraphBLASInterface.GrB_eWiseAdd_Vector_Monoid
— Function.GrB_eWiseAdd_Vector_Monoid(w, mask, accum, monoid, u, v, desc)
Compute element-wise vector addition using monoid. w<mask> = accum (w, u + v)
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> u = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(u, GrB_INT64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 2, 4]; X1 = [10, 20, 3]; n1 = 3;
julia> GrB_Vector_build(u, I1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> v = GrB_Vector{Float64}()
GrB_Vector{Float64}
julia> GrB_Vector_new(v, GrB_FP64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 1, 4]; X2 = [1.1, 2.2, 3.3]; n2 = 3;
julia> GrB_Vector_build(v, I2, X2, n2, GrB_FIRST_FP64)
GrB_SUCCESS::GrB_Info = 0
julia> w = GrB_Vector{Float64}()
GrB_Vector{Float64}
julia> GrB_Vector_new(w, GrB_FP64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_eWiseAdd_Vector_Monoid(w, GrB_NULL, GrB_NULL, GxB_MAX_FP64_MONOID, u, v, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(w, GxB_COMPLETE)
GraphBLAS vector: w
nrows: 5 ncols: 1 max # entries: 4
format: standard CSC vlen: 5 nvec_nonempty: 1 nvec: 1 plen: 1 vdim: 1
hyper_ratio 0.0625
GraphBLAS type: double size: 8
number of entries: 4
column: 0 : 4 entries [0:3]
row 0: double 10
row 1: double 2.2
row 2: double 20
row 4: double 3.3
GraphBLASInterface.GrB_eWiseAdd_Vector_BinaryOp
— Function.GrB_eWiseAdd_Vector_BinaryOp(w, mask, accum, add, u, v, desc)
Compute element-wise vector addition using binary operator. w<mask> = accum (w, u + v)
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> u = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(u, GrB_INT64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 2, 4]; X1 = [10, 20, 3]; n1 = 3;
julia> GrB_Vector_build(u, I1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> v = GrB_Vector{Float64}()
GrB_Vector{Float64}
julia> GrB_Vector_new(v, GrB_FP64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 1, 4]; X2 = [1.1, 2.2, 3.3]; n2 = 3;
julia> GrB_Vector_build(v, I2, X2, n2, GrB_FIRST_FP64)
GrB_SUCCESS::GrB_Info = 0
julia> w = GrB_Vector{Float64}()
GrB_Vector{Float64}
julia> GrB_Vector_new(w, GrB_FP64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_eWiseAdd_Vector_BinaryOp(w, GrB_NULL, GrB_NULL, GrB_PLUS_FP64, u, v, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(w, GxB_COMPLETE)
GraphBLAS vector: w
nrows: 5 ncols: 1 max # entries: 4
format: standard CSC vlen: 5 nvec_nonempty: 1 nvec: 1 plen: 1 vdim: 1
hyper_ratio 0.0625
GraphBLAS type: double size: 8
number of entries: 4
column: 0 : 4 entries [0:3]
row 0: double 11.1
row 1: double 2.2
row 2: double 20
row 4: double 6.3
GraphBLASInterface.GrB_eWiseAdd_Matrix_Semiring
— Function.GrB_eWiseAdd_Matrix_Semiring(C, Mask, accum, semiring, A, B, desc)
Compute element-wise matrix addition using semiring. Semiring's add operator is used. C<Mask> = accum (C, A + B)
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 0, 2, 2]; J1 = ZeroBasedIndex[1, 2, 0, 2]; X1 = [10, 20, 30, 40]; n1 = 4;
julia> GrB_Matrix_build(A, I1, J1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> B = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(B, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 0, 2]; J2 = ZeroBasedIndex[3, 2, 0]; X2 = [15, 16, 17]; n2 = 3;
julia> GrB_Matrix_build(B, I2, J2, X2, n2, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> C = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(C, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_eWiseAdd_Matrix_Semiring(C, GrB_NULL, GrB_NULL, GxB_PLUS_TIMES_INT64, A, B, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(C, GxB_COMPLETE)
GraphBLAS matrix: C
nrows: 4 ncols: 4 max # entries: 5
format: standard CSR vlen: 4 nvec_nonempty: 2 nvec: 4 plen: 4 vdim: 4
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 5
row: 0 : 3 entries [0:2]
column 1: int64 10
column 2: int64 36
column 3: int64 15
row: 2 : 2 entries [3:4]
column 0: int64 47
column 2: int64 40
GraphBLASInterface.GrB_eWiseAdd_Matrix_Monoid
— Function.GrB_eWiseAdd_Matrix_Monoid(C, Mask, accum, monoid, A, B, desc)
Compute element-wise matrix addition using monoid. C<Mask> = accum (C, A + B)
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 0, 2, 2]; J1 = ZeroBasedIndex[1, 2, 0, 2]; X1 = [10, 20, 30, 40]; n1 = 4;
julia> GrB_Matrix_build(A, I1, J1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> B = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(B, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 0, 2]; J2 = ZeroBasedIndex[3, 2, 0]; X2 = [15, 16, 17]; n2 = 3;
julia> GrB_Matrix_build(B, I2, J2, X2, n2, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> C = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(C, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> mask = GrB_Matrix{Bool}()
GrB_Matrix{Bool}
julia> GrB_Matrix_new(mask, GrB_BOOL, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Matrix_build(mask, ZeroBasedIndex[0, 0], ZeroBasedIndex[1, 2], [true, true], 2, GrB_FIRST_BOOL)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_eWiseAdd_Matrix_Monoid(C, mask, GrB_NULL, GxB_PLUS_INT64_MONOID, A, B, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(C, GxB_COMPLETE)
GraphBLAS matrix: C
nrows: 4 ncols: 4 max # entries: 5
format: standard CSR vlen: 4 nvec_nonempty: 1 nvec: 4 plen: 4 vdim: 4
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 2
row: 0 : 2 entries [0:1]
column 1: int64 10
column 2: int64 36
GraphBLASInterface.GrB_eWiseAdd_Matrix_BinaryOp
— Function.GrB_eWiseAdd_Matrix_BinaryOp(C, Mask, accum, add, A, B, desc)
Compute element-wise matrix addition using binary operator. C<Mask> = accum (C, A + B)
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I1 = ZeroBasedIndex[0, 0, 2, 2]; J1 = ZeroBasedIndex[1, 2, 0, 2]; X1 = [10, 20, 30, 40]; n1 = 4;
julia> GrB_Matrix_build(A, I1, J1, X1, n1, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> B = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(B, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = [0, 0, 2]; J2 = [3, 2, 0]; X2 = [15, 16, 17]; n2 = 3;
julia> GrB_Matrix_build(B, I2, J2, X2, n2, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> C = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(C, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_eWiseAdd_Matrix_BinaryOp(C, GrB_NULL, GrB_NULL, GrB_PLUS_INT64, A, B, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Matrix_extractTuples(C)
julia> @GxB_fprint(C, GxB_COMPLETE)
GraphBLAS matrix: C
nrows: 4 ncols: 4 max # entries: 5
format: standard CSR vlen: 4 nvec_nonempty: 2 nvec: 4 plen: 4 vdim: 4
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 5
row: 0 : 3 entries [0:2]
column 1: int64 10
column 2: int64 36
column 3: int64 15
row: 2 : 2 entries [3:4]
column 0: int64 47
column 2: int64 40
Extract
GraphBLASInterface.GrB_extract
— Function.GrB_extract(arg1, Mask, accum, arg4, ...)
Generic matrix/vector extraction.
GraphBLASInterface.GrB_Vector_extract
— Function.GrB_Vector_extract(w, mask, accum, u, I, ni, desc)
Extract a sub-vector from a larger vector as specified by a set of indices. The result is a vector whose size is equal to the number of indices.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> V = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(V, GrB_INT64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> I = ZeroBasedIndex[1, 2, 4]; X = [15, 32, 84]; n = 3;
julia> GrB_Vector_build(V, I, X, n, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_Vector_fprint(V, GxB_COMPLETE)
GraphBLAS vector: V
nrows: 5 ncols: 1 max # entries: 3
format: standard CSC vlen: 5 nvec_nonempty: 1 nvec: 1 plen: 1 vdim: 1
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 3
column: 0 : 3 entries [0:2]
row 1: int64 15
row 2: int64 32
row 4: int64 84
julia> W = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(W, GrB_INT64, 2)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Vector_extract(W, GrB_NULL, GrB_NULL, V, ZeroBasedIndex[1, 4], 2, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Vector_extractTuples(W)[2]
2-element Array{Int64,1}:
15
84
GraphBLASInterface.GrB_Matrix_extract
— Function.GrB_Matrix_extract(C, Mask, accum, A, I, ni, J, nj, desc)
Extract a sub-matrix from a larger matrix as specified by a set of row indices and a set of column indices. The result is a matrix whose size is equal to size of the sets of indices.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> MAT = GrB_Matrix{Int8}()
GrB_Matrix{Int8}
julia> GrB_Matrix_new(MAT, GrB_INT8, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I = ZeroBasedIndex[1, 2, 2, 2, 3]; J = ZeroBasedIndex[1, 2, 1, 3, 3]; X = Int8[2, 3, 4, 5, 6]; n = 5;
julia> GrB_Matrix_build(MAT, I, J, X, n, GrB_FIRST_INT8)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_Matrix_fprint(MAT, GxB_COMPLETE)
GraphBLAS matrix: MAT
nrows: 4 ncols: 4 max # entries: 5
format: standard CSR vlen: 4 nvec_nonempty: 3 nvec: 4 plen: 4 vdim: 4
hyper_ratio 0.0625
GraphBLAS type: int8_t size: 1
number of entries: 5
row: 1 : 1 entries [0:0]
column 1: int8 2
row: 2 : 3 entries [1:3]
column 1: int8 4
column 2: int8 3
column 3: int8 5
row: 3 : 1 entries [4:4]
column 3: int8 6
julia> OUT = GrB_Matrix{Int8}()
GrB_Matrix{Int8}
julia> GrB_Matrix_new(OUT, GrB_INT8, 2, 2)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Matrix_extract(OUT, GrB_NULL, GrB_NULL, MAT, ZeroBasedIndex[1, 3], 2, ZeroBasedIndex[1, 3], 2, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Matrix_extractTuples(OUT)[3]
2-element Array{Int8,1}:
2
6
GraphBLASInterface.GrB_Col_extract
— Function.GrB_Col_extract(w, mask, accum, A, I, ni, j, desc)
Extract from one column of a matrix into a vector. With the transpose descriptor for the source matrix, elements of an arbitrary row of the matrix can be extracted with this function as well.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> MAT = GrB_Matrix{Int8}()
GrB_Matrix{Int8}
julia> GrB_Matrix_new(MAT, GrB_INT8, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I = ZeroBasedIndex[1, 2, 2, 2, 3]; J = ZeroBasedIndex[1, 2, 1, 3, 3]; X = Int8[23, 34, 43, 57, 61]; n = 5;
julia> GrB_Matrix_build(MAT, I, J, X, n, GrB_FIRST_INT8)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_Matrix_fprint(MAT, GxB_COMPLETE)
GraphBLAS matrix: MAT
nrows: 4 ncols: 4 max # entries: 5
format: standard CSR vlen: 4 nvec_nonempty: 3 nvec: 4 plen: 4 vdim: 4
hyper_ratio 0.0625
GraphBLAS type: int8_t size: 1
number of entries: 5
row: 1 : 1 entries [0:0]
column 1: int8 23
row: 2 : 3 entries [1:3]
column 1: int8 43
column 2: int8 34
column 3: int8 57
row: 3 : 1 entries [4:4]
column 3: int8 61
julia> desc = GrB_Descriptor()
GrB_Descriptor
julia> GrB_Descriptor_new(desc)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Descriptor_set(desc, GrB_INP0, GrB_TRAN) # descriptor to transpose first input
GrB_SUCCESS::GrB_Info = 0
julia> out = GrB_Vector{Int8}()
GrB_Vector{Int8}
julia> GrB_Vector_new(out, GrB_INT8, 3)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Col_extract(out, GrB_NULL, GrB_NULL, MAT, ZeroBasedIndex[1, 2, 3], 3, ZeroBasedIndex(2), desc) # extract elements of row 2
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Vector_extractTuples(out)[2]
3-element Array{Int8,1}:
43
34
57
Assign
GraphBLASInterface.GrB_assign
— Function.GrB_assign(arg1, Mask, accum, arg4, arg5, ...)
Generic method for submatrix/subvector assignment.
GraphBLASInterface.GrB_Vector_assign
— Function.GrB_Vector_assign(w, mask, accum, u, I, ni, desc)
Assign values from one GraphBLAS vector to a subset of a vector as specified by a set of indices. The size of the input vector is the same size as the index array provided.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> w = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(w, GrB_INT64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> u = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(u, GrB_INT64, 2)
GrB_SUCCESS::GrB_Info = 0
julia> I = ZeroBasedIndex[0, 1]; X = [10, 20]; n = 2;
julia> GrB_Vector_build(u, I, X, n, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Vector_assign(w, GrB_NULL, GrB_NULL, u, [2, 4], 2, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Vector_extractTuples(w)
(ZeroBasedIndex[ZeroBasedIndex(0x0000000000000002), ZeroBasedIndex(0x0000000000000004)], [10, 20])
GrB_Vector_assign(w, mask, accum, x, I, ni, desc)
Assign the same value to a specified subset of vector elements. With the use of GrB_ALL
, the entire destination vector can be filled with the constant.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> w = GrB_Vector{Float64}()
GrB_Vector{Float64}
julia> GrB_Vector_new(w, GrB_FP64, 4)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Vector_assign(w, GrB_NULL, GrB_NULL, 2.3, ZeroBasedIndex[0, 3], 2, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Vector_extractTuples(w)
(ZeroBasedIndex[ZeroBasedIndex(0x0000000000000000), ZeroBasedIndex(0x0000000000000003)], [2.3, 2.3])
GraphBLASInterface.GrB_Matrix_assign
— Function.GrB_Matrix_assign(C, Mask, accum, A, I, ni, J, nj, desc)
Assign values from one GraphBLAS matrix to a subset of a matrix as specified by a set of indices. The dimensions of the input matrix are the same size as the row and column index arrays provided.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I = ZeroBasedIndex[0, 0, 2, 2]; J = ZeroBasedIndex[1, 2, 0, 2]; X = [10, 20, 30, 40]; n = 4;
julia> GrB_Matrix_build(A, I, J, X, n, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> C = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(C, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Matrix_assign(C, GrB_NULL, GrB_NULL, A, GrB_ALL, 4, GrB_ALL, 4, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_wait()
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_Matrix_fprint(C, GxB_COMPLETE)
GraphBLAS matrix: C
nrows: 4 ncols: 4 max # entries: 4
format: standard CSR vlen: 4 nvec_nonempty: 2 nvec: 4 plen: 4 vdim: 4
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 4
row: 0 : 2 entries [0:1]
column 1: int64 10
column 2: int64 20
row: 2 : 2 entries [2:3]
column 0: int64 30
column 2: int64 40
GrB_Matrix_assign(C, Mask, accum, x, I, ni, J, nj, desc)
Assign the same value to a specified subset of matrix elements. With the use of GrB_ALL
, the entire destination matrix can be filled with the constant.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Bool}()
GrB_Matrix{Bool}
julia> GrB_Matrix_new(A, GrB_BOOL, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Matrix_assign(A, GrB_NULL, GrB_NULL, true, ZeroBasedIndex[0, 1], 2, ZeroBasedIndex[0, 1], 2, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_wait()
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_Matrix_fprint(A, GxB_COMPLETE)
GraphBLAS matrix: A
nrows: 4 ncols: 4 max # entries: 4
format: standard CSR vlen: 4 nvec_nonempty: 2 nvec: 4 plen: 4 vdim: 4
hyper_ratio 0.0625
GraphBLAS type: bool size: 1
number of entries: 4
row: 0 : 2 entries [0:1]
column 0: bool 1
column 1: bool 1
row: 1 : 2 entries [2:3]
column 0: bool 1
column 1: bool 1
GraphBLASInterface.GrB_Col_assign
— Function.GrB_Col_assign(C, Mask, accum, u, I, ni, j, desc)
Assign the contents of a vector to a subset of elements in one column of a matrix. Note that since the output cannot be transposed, a different variant of assign is provided to assign to a row of matrix.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I = ZeroBasedIndex[0, 0, 2, 2]; J = ZeroBasedIndex[1, 2, 0, 2]; X = [10, 20, 30, 40]; n = 4;
julia> GrB_Matrix_build(A, I, J, X, n, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> u = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(u, GrB_INT64, 2)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 1]; X2 = [5, 6]; n2 = 2;
julia> GrB_Vector_build(u, I2, X2, n2, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Col_assign(A, GrB_NULL, GrB_NULL, u, ZeroBasedIndex[1, 2], 2, ZeroBasedIndex(0), GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_wait()
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_Matrix_fprint(A, GxB_COMPLETE)
GraphBLAS matrix: A
nrows: 4 ncols: 4 max # entries: 7
format: standard CSR vlen: 4 nvec_nonempty: 3 nvec: 4 plen: 4 vdim: 4
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 5
row: 0 : 2 entries [0:1]
column 1: int64 10
column 2: int64 20
row: 1 : 1 entries [2:2]
column 0: int64 5
row: 2 : 2 entries [3:4]
column 0: int64 6
column 2: int64 40
GraphBLASInterface.GrB_Row_assign
— Function.GrB_Row_assign(C, mask, accum, u, i, J, nj, desc)
Assign the contents of a vector to a subset of elements in one row of a matrix. Note that since the output cannot be transposed, a different variant of assign is provided to assign to a column of a matrix.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I = ZeroBasedIndex[0, 0, 2, 2]; J = ZeroBasedIndex[1, 2, 0, 2]; X = [10, 20, 30, 40]; n = 4;
julia> GrB_Matrix_build(A, I, J, X, n, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> u = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(u, GrB_INT64, 2)
GrB_SUCCESS::GrB_Info = 0
julia> I2 = ZeroBasedIndex[0, 1]; X2 = [5, 6]; n2 = 2;
julia> GrB_Vector_build(u, I2, X2, n2, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Row_assign(A, GrB_NULL, GrB_NULL, u, ZeroBasedIndex(0), ZeroBasedIndex[1, 3], 2, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_wait()
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_Matrix_fprint(A, GxB_COMPLETE)
GraphBLAS matrix: A
nrows: 4 ncols: 4 max # entries: 7
format: standard CSR vlen: 4 nvec_nonempty: 2 nvec: 4 plen: 4 vdim: 4
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 5
row: 0 : 3 entries [0:2]
column 1: int64 5
column 2: int64 20
column 3: int64 6
row: 2 : 2 entries [3:4]
column 0: int64 30
column 2: int64 40
Apply
GraphBLASInterface.GrB_apply
— Function.GrB_apply(C, Mask, accum, op, A, desc)
Generic matrix/vector apply.
GraphBLASInterface.GrB_Vector_apply
— Function.GrB_Vector_apply(w, mask, accum, op, u, desc)
Compute the transformation of the values of the elements of a vector using a unary function.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> u = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(u, GrB_INT64, 3)
GrB_SUCCESS::GrB_Info = 0
julia> I = ZeroBasedIndex[0, 2]; X = [10, 20]; n = 2;
julia> GrB_Vector_build(u, I, X, n, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> w = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(w, GrB_INT64, 3)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Vector_apply(w, GrB_NULL, GrB_NULL, GrB_AINV_INT64, u, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(w, GxB_COMPLETE)
GraphBLAS vector: w
nrows: 3 ncols: 1 max # entries: 2
format: standard CSC vlen: 3 nvec_nonempty: 1 nvec: 1 plen: 1 vdim: 1
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 2
column: 0 : 2 entries [0:1]
row 0: int64 -10
row 2: int64 -20
GraphBLASInterface.GrB_Matrix_apply
— Function.GrB_Matrix_apply(C, Mask, accum, op, A, desc)
Compute the transformation of the values of the elements of a matrix using a unary function.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 2, 2)
GrB_SUCCESS::GrB_Info = 0
julia> I = ZeroBasedIndex[0, 0, 1]; J = ZeroBasedIndex[0, 1, 1]; X = [10, 20, 30]; n = 3;
julia> GrB_Matrix_build(A, I, J, X, n, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> B = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(B, GrB_INT64, 2, 2)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Matrix_apply(B, GrB_NULL, GrB_NULL, GrB_AINV_INT64, A, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(B, GxB_COMPLETE)
GraphBLAS matrix: B
nrows: 2 ncols: 2 max # entries: 3
format: standard CSR vlen: 2 nvec_nonempty: 2 nvec: 2 plen: 2 vdim: 2
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 3
row: 0 : 2 entries [0:1]
column 0: int64 -10
column 1: int64 -20
row: 1 : 1 entries [2:2]
column 1: int64 -30
Reduce
GraphBLASInterface.GrB_reduce
— Function.GrB_reduce(arg1, arg2, arg3, arg4, ...)
Generic method for matrix/vector reduction to a vector or scalar.
GraphBLASInterface.GrB_Matrix_reduce_Monoid
— Function.GrB_Matrix_reduce_Monoid(w, mask, accum, monoid, A, desc)
Reduce the entries in a matrix to a vector. By default these methods compute a column vector w such that w(i) = sum(A(i,:)), where "sum" is a commutative and associative monoid with an identity value. A can be transposed, which reduces down the columns instead of the rows.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I = ZeroBasedIndex[0, 0, 2, 2]; J = ZeroBasedIndex[1, 2, 0, 2]; X = [10, 20, 30, 40]; n = 4;
julia> GrB_Matrix_build(A, I, J, X, n, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> w = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(w, GrB_INT64, 4)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Matrix_reduce_Monoid(w, GrB_NULL, GrB_NULL, GxB_PLUS_INT64_MONOID, A, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(w, GxB_COMPLETE)
GraphBLAS vector: w
nrows: 4 ncols: 1 max # entries: 2
format: standard CSC vlen: 4 nvec_nonempty: 1 nvec: 1 plen: 1 vdim: 1
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 2
column: 0 : 2 entries [0:1]
row 0: int64 30
row 2: int64 70
GraphBLASInterface.GrB_Matrix_reduce_BinaryOp
— Function.GrB_Matrix_reduce_BinaryOp(w, mask, accum, op, A, desc)
Reduce the entries in a matrix to a vector. By default these methods compute a column vector w such that w(i) = sum(A(i,:)), where "sum" is a commutative and associative binary operator. A can be transposed, which reduces down the columns instead of the rows.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I = ZeroBasedIndex[0, 0, 2, 2]; J = ZeroBasedIndex[1, 2, 0, 2]; X = [10, 20, 30, 40]; n = 4;
julia> GrB_Matrix_build(A, I, J, X, n, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> w = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(w, GrB_INT64, 4)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Matrix_reduce_BinaryOp(w, GrB_NULL, GrB_NULL, GrB_TIMES_INT64, A, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(w, GxB_COMPLETE)
GraphBLAS vector: w
nrows: 4 ncols: 1 max # entries: 2
format: standard CSC vlen: 4 nvec_nonempty: 1 nvec: 1 plen: 1 vdim: 1
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 2
column: 0 : 2 entries [0:1]
row 0: int64 200
row 2: int64 1200
GraphBLASInterface.GrB_Vector_reduce
— Function.GrB_Vector_reduce(monoid, u, desc)
Reduce entries in a vector to a scalar. All entries in the vector are "summed" using the reduce monoid, which must be associative (otherwise the results are undefined). If the vector has no entries, the result is the identity value of the monoid.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> u = GrB_Vector{Int64}()
GrB_Vector{Int64}
julia> GrB_Vector_new(u, GrB_INT64, 5)
GrB_SUCCESS::GrB_Info = 0
julia> I = ZeroBasedIndex[0, 2, 4]; X = [10, 20, 30]; n = 3;
julia> GrB_Vector_build(u, I, X, n, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Vector_reduce(GxB_MAX_INT64_MONOID, u, GrB_NULL)
30
GraphBLASInterface.GrB_Matrix_reduce
— Function.GrB_Matrix_reduce(monoid, A, desc)
Reduce entries in a matrix to a scalar. All entries in the matrix are "summed" using the reduce monoid, which must be associative (otherwise the results are undefined). If the matrix has no entries, the result is the identity value of the monoid.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> A = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(A, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I = ZeroBasedIndex[0, 0, 2, 2]; J = ZeroBasedIndex[1, 2, 0, 2]; X = [10, 20, 30, 40]; n = 4;
julia> GrB_Matrix_build(A, I, J, X, n, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_Matrix_reduce(GxB_MIN_INT64_MONOID, A, GrB_NULL)
10
Transpose
GraphBLASInterface.GrB_transpose
— Function.GrB_transpose(C, Mask, accum, A, desc)
Compute a new matrix that is the transpose of the source matrix.
Examples
julia> using GraphBLASInterface, SuiteSparseGraphBLAS
julia> GrB_init(GrB_NONBLOCKING)
GrB_SUCCESS::GrB_Info = 0
julia> M = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(M, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> I = ZeroBasedIndex[0, 0]; J = ZeroBasedIndex[1, 2]; X = [10, 20]; n = 2;
julia> GrB_Matrix_build(M, I, J, X, n, GrB_FIRST_INT64)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(M, GxB_COMPLETE)
GraphBLAS matrix: M
nrows: 4 ncols: 4 max # entries: 2
format: standard CSR vlen: 4 nvec_nonempty: 1 nvec: 4 plen: 4 vdim: 4
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 2
row: 0 : 2 entries [0:1]
column 1: int64 10
column 2: int64 20
julia> M_TRAN = GrB_Matrix{Int64}()
GrB_Matrix{Int64}
julia> GrB_Matrix_new(M_TRAN, GrB_INT64, 4, 4)
GrB_SUCCESS::GrB_Info = 0
julia> GrB_transpose(M_TRAN, GrB_NULL, GrB_NULL, M, GrB_NULL)
GrB_SUCCESS::GrB_Info = 0
julia> @GxB_fprint(M_TRAN, GxB_COMPLETE)
GraphBLAS matrix: M_TRAN
nrows: 4 ncols: 4 max # entries: 2
format: standard CSR vlen: 4 nvec_nonempty: 2 nvec: 4 plen: 4 vdim: 4
hyper_ratio 0.0625
GraphBLAS type: int64_t size: 8
number of entries: 2
row: 1 : 1 entries [0:0]
column 0: int64 10
row: 2 : 1 entries [1:1]
column 0: int64 20