GrB_Info GrB_Matrix_apply // C<Mask> = accum (C, op(A)) or op(A') ( GrB_Matrix C, // input/output matrix for results const GrB_Matrix Mask, // optional Mask for C, unused if NULL const GrB_BinaryOp accum, // optional accum for Z=accum(C,T) const GrB_UnaryOp op, // operator to apply to the entries const GrB_Matrix A, // first input: matrix A const GrB_Descriptor desc // descriptor for C, Mask, and A ) { //-------------------------------------------------------------------------- // check inputs //-------------------------------------------------------------------------- GB_WHERE ("GrB_Matrix_apply (C, Mask, accum, op, A, desc)") ; GB_RETURN_IF_NULL_OR_FAULTY (C) ; GB_RETURN_IF_FAULTY (Mask) ; GB_RETURN_IF_NULL_OR_FAULTY (A) ; // get the descriptor GB_GET_DESCRIPTOR (info, desc, C_replace, Mask_comp, A_transpose, xx1, xx2); //-------------------------------------------------------------------------- // apply the operator and optionally transpose; assemble pending tuples //-------------------------------------------------------------------------- return (GB_apply ( C, C_replace, // C and its descriptor Mask, Mask_comp, // Mask and its descriptor accum, // optional accum for Z=accum(C,T) op, // operator to apply to the entries A, A_transpose, // A and its descriptor Context)) ; }
GrB_Info GB_subassign_scalar // C(Rows,Cols)<Mask> += x ( GrB_Matrix C, // input/output matrix for results const GrB_Matrix Mask, // mask for C(Rows,Cols), unused if NULL const GrB_BinaryOp accum, // accum for Z=accum(C(Rows,Cols),T) const void *scalar, // scalar to assign to C(Rows,Cols) const GB_Type_code scalar_code, // type code of scalar to assign const GrB_Index *Rows, // row indices const GrB_Index nRows, // number of row indices const GrB_Index *Cols, // column indices const GrB_Index nCols, // number of column indices const GrB_Descriptor desc, // descriptor for C(Rows,Cols) and Mask GB_Context Context ) { //-------------------------------------------------------------------------- // check inputs //-------------------------------------------------------------------------- ASSERT (GB_ALIAS_OK (C, Mask)) ; GB_RETURN_IF_NULL (scalar) ; ASSERT (scalar_code <= GB_UDT_code) ; // get the descriptor GB_GET_DESCRIPTOR (info, desc, C_replace, Mask_comp, xx1, xx2, xx3) ; //-------------------------------------------------------------------------- // C(Rows,Cols)<Mask> = accum (C(Rows,Cols), scalar) //-------------------------------------------------------------------------- return (GB_subassign ( C, C_replace, // C matrix and its descriptor Mask, Mask_comp, // Mask matrix and its descriptor false, // do not transpose the mask accum, // for accum (C(Rows,Cols),scalar) NULL, false, // no explicit matrix A Rows, nRows, // row indices Cols, nCols, // column indices true, // do scalar expansion scalar, // scalar to assign, expands to become A scalar_code, // type code of scalar to expand Context)) ; }
GrB_Info GrB_Matrix_assign // C<Mask>(Rows,Cols) += A or A' ( GrB_Matrix C, // input/output matrix for results const GrB_Matrix Mask, // mask for C, unused if NULL const GrB_BinaryOp accum, // accum for Z=accum(C(Rows,Cols),T) const GrB_Matrix A, // first input: matrix A const GrB_Index *Rows, // row indices GrB_Index nRows, // number of row indices const GrB_Index *Cols, // column indices GrB_Index nCols, // number of column indices const GrB_Descriptor desc // descriptor for C, Mask, and A ) { //-------------------------------------------------------------------------- // check inputs //-------------------------------------------------------------------------- GB_WHERE ("GrB_Matrix_assign" " (C, Mask, accum, A, Rows, nRows, Cols, nCols, desc)") ; GB_RETURN_IF_NULL_OR_FAULTY (C) ; GB_RETURN_IF_FAULTY (Mask) ; GB_RETURN_IF_NULL_OR_FAULTY (A) ; // get the descriptor GB_GET_DESCRIPTOR (info, desc, C_replace, Mask_comp, A_transpose, xx1, xx2); //-------------------------------------------------------------------------- // C<Mask>(Rows,Cols) = accum (C(Rows,Cols), A) and variations //-------------------------------------------------------------------------- return (GB_assign ( C, C_replace, // C matrix and its descriptor Mask, Mask_comp, // Mask matrix and its descriptor false, // do not transpose the mask accum, // for accum (C(Rows,Cols),A) A, A_transpose, // A and its descriptor (T=A or A') Rows, nRows, // row indices Cols, nCols, // column indices false, NULL, 0, // no scalar expansion false, false, // not GrB_Col_assign nor GrB_row_assign Context)) ; }