Skip to content

Commit e36c3fe

Browse files
committed
fix: use selecet instead of apply in user filtering
1 parent bf4eb8b commit e36c3fe

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

src/main.c

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,17 @@ typedef struct
5353
uint32_t count;
5454
} EdgeTX;
5555

56-
void check_user_age(bool *z, const User *x, GrB_Index _i, GrB_Index _j, const uint8_t *y) // EdgeOwns
56+
void check_user_age(bool *z, const User *x, GrB_Index i, GrB_Index j, const uint8_t *y)
5757
{
5858

5959
*z = (x->age > *y);
6060
}
61+
62+
bool user_filter_mul(bool *z, const User *x, const bool *y)
63+
{
64+
*z = (x->age > 30) && (*y);
65+
}
66+
6167
void check_payment_system(bool *z, const Card *x, GrB_Index _i, GrB_Index _j, const uint8_t *y)
6268
{
6369

@@ -276,26 +282,32 @@ GrB_Info analyze_graph(GrB_Matrix tx_edge_mat, GrB_Matrix owns_edge_mat, GrB_Vec
276282

277283
// vertex filter: we will take only prersons over 30
278284
GrB_Matrix ID;
279-
GrB_Vector v;
280-
TRY(GrB_Vector_new(&v, GrB_BOOL, VERTICES_NUMBER));
281-
TRY(GrB_Vector_assign_BOOL(v, NULL, NULL, false, GrB_ALL, VERTICES_NUMBER, NULL));
282-
283-
// create selector
284285
GrB_IndexUnaryOp user_age;
285286
TRY(GrB_IndexUnaryOp_new(&user_age, (GxB_index_unary_function)&check_user_age, GrB_BOOL, user, GrB_UINT8));
287+
286288
uint8_t age = 30;
287-
TRY(GrB_Vector_apply_IndexOp_UDT(v, NULL, NULL, user_age, users, &age, NULL));
289+
GrB_Vector v;
290+
TRY(GrB_Vector_new(&v, user, VERTICES_NUMBER));
291+
292+
TRY(GrB_Vector_select_UDT(v, NULL, NULL, user_age, users, &age, NULL));
293+
288294
GxB_print(v, GxB_COMPLETE);
289295
TRY(GrB_Matrix_diag(&ID, v, 0));
290296

291297
// ------------------------------------------------------------------------
292298
// apply user filters
293299
// ------------------------------------------------------------------------
294300

301+
GrB_BinaryOp user_filter_mul_op;
302+
TRY(GrB_BinaryOp_new(&user_filter_mul_op, (GxB_binary_function)user_filter_mul,
303+
GrB_BOOL, user, GrB_BOOL));
304+
305+
GrB_Semiring user_filter_semiring;
306+
TRY(GrB_Semiring_new(&user_filter_semiring, GrB_LOR_MONOID_BOOL, user_filter_mul_op));
295307
GrB_Matrix owns_mat_filtered;
296308
TRY(GrB_Matrix_new(&owns_mat_filtered, GrB_BOOL, VERTICES_NUMBER, VERTICES_NUMBER));
297309
// apply filter
298-
TRY(GrB_mxm(owns_mat_filtered, NULL, NULL, GrB_LOR_LAND_SEMIRING_BOOL, ID, owns_edge_mat, NULL));
310+
TRY(GrB_mxm(owns_mat_filtered, NULL, NULL, user_filter_semiring, ID, owns_edge_mat, NULL));
299311

300312
// ------------------------------------------------------------------------
301313
// get cards of filtered users
@@ -475,6 +487,7 @@ int main()
475487
{
476488
LAGraph_Init(msg);
477489
printf("LAGraph initialized.\n\n");
490+
// GxB_Global_Option_set(GxB_BURBLE);
478491

479492
// ------------------------------------------------------------------------
480493
// init edge matrices

0 commit comments

Comments
 (0)