Skip to content

Commit cbba464

Browse files
committed
feat: reduce cards for filtered users
Signed-off-by: Rodion Suvorov <rodion.suvorov.94@mail.ru>
1 parent 05fae16 commit cbba464

File tree

1 file changed

+56
-9
lines changed

1 file changed

+56
-9
lines changed

src/main.c

Lines changed: 56 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ typedef struct EdgeTX
4949
} EdgeTX;
5050

5151
// operations TODO TODO TODO !!!
52+
void owns_or_bool(EdgeOwns *z, const EdgeOwns *_x, const EdgeOwns *_y)
53+
{
54+
*z = *_x;
55+
}
5256

5357
void tx_add(EdgeTX *z, EdgeTX *x, EdgeTX *y)
5458
{
@@ -381,17 +385,17 @@ int main()
381385
}
382386
GxB_print(v, GxB_COMPLETE);
383387
GrB_Matrix v_mat, id_mat;
384-
GrB_Matrix_new(&v_mat, GrB_BOOL,VERTICES_NUMBER,1);
385-
GrB_Col_assign(v_mat,NULL,NULL,v,GrB_ALL,VERTICES_NUMBER,0,NULL);
388+
GrB_Matrix_new(&v_mat, GrB_BOOL, VERTICES_NUMBER, 1);
389+
GrB_Col_assign(v_mat, NULL, NULL, v, GrB_ALL, VERTICES_NUMBER, 0, NULL);
386390

387391
GrB_Vector id;
388392
info = GrB_Vector_new(&id, GrB_BOOL, VERTICES_NUMBER);
389393
info = GrB_Vector_assign_BOOL(id, NULL, NULL, true, GrB_ALL, VERTICES_NUMBER, NULL);
390-
GrB_Matrix_new(&id_mat, GrB_BOOL,1,VERTICES_NUMBER);
391-
GrB_Row_assign(id_mat,NULL,NULL,id,0,GrB_ALL,VERTICES_NUMBER,NULL);
394+
GrB_Matrix_new(&id_mat, GrB_BOOL, 1, VERTICES_NUMBER);
395+
GrB_Row_assign(id_mat, NULL, NULL, id, 0, GrB_ALL, VERTICES_NUMBER, NULL);
392396

393397
GrB_Matrix kron;
394-
GrB_Matrix_new(&kron,GrB_BOOL,VERTICES_NUMBER,VERTICES_NUMBER);
398+
GrB_Matrix_new(&kron, GrB_BOOL, VERTICES_NUMBER, VERTICES_NUMBER);
395399
GxB_print(v_mat, GxB_COMPLETE);
396400
GxB_print(id_mat, GxB_COMPLETE);
397401
info = GrB_kronecker(kron, NULL, NULL, GrB_LAND, v_mat, id_mat, NULL);
@@ -404,7 +408,7 @@ int main()
404408

405409
// DEBUG
406410
printf("filter matrix content: \n");
407-
for (GrB_Index i = 0; i < VERTICES_NUMBER; i++)
411+
for (GrB_Index i = 0; i < VERTICES_NUMBER; i++)
408412
for (GrB_Index j = 0; j < VERTICES_NUMBER; j++)
409413
{
410414
bool val;
@@ -447,7 +451,7 @@ int main()
447451
// verices filter
448452
// фильтр только owns фильтруем с одной стороны (исходящие ребра) (поправить рисунок)
449453
GrB_Matrix owns_mat_filtered;
450-
GrB_Matrix_new(&owns_mat_filtered,owns_edge,VERTICES_NUMBER,VERTICES_NUMBER);
454+
GrB_Matrix_new(&owns_mat_filtered, owns_edge, VERTICES_NUMBER, VERTICES_NUMBER);
451455
printf("\nowns edge mat before filter\n");
452456
for (GrB_Index i = 0; i < VERTICES_NUMBER; i++)
453457
for (GrB_Index j = 0; j < VERTICES_NUMBER; j++)
@@ -496,9 +500,52 @@ int main()
496500
// в итоге получаем ребра исходящие из отобранных пользователем
497501

498502
// /*--------------------------- PART 2 --------------------------*/
503+
GrB_Vector filtered_cards;
504+
info = GrB_Vector_new(&filtered_cards, owns_edge, VERTICES_NUMBER);
505+
if (info != GrB_SUCCESS)
506+
{
507+
fprintf(stderr, "failed to create filtered cards vector %d\n", info);
508+
return 1;
509+
}
510+
511+
GrB_BinaryOp ownsedge_bool;
512+
info = GrB_BinaryOp_new(&ownsedge_bool, (GxB_binary_function)&owns_or_bool, owns_edge, owns_edge, owns_edge);
513+
if (info != GrB_SUCCESS)
514+
{
515+
fprintf(stderr, "failed to create binop ownsedge_bool %d\n", info);
516+
return 1;
517+
}
518+
bool identity = false;
519+
GrB_Monoid ownsedge_any_bool;
520+
info = GrB_Monoid_new(&ownsedge_any_bool, ownsedge_bool, (void *)&identity);
521+
if (info != GrB_SUCCESS)
522+
{
523+
fprintf(stderr, "failed to create monoid ownsedge_any_bool %d\n", info);
524+
return 1;
525+
}
526+
GxB_print(owns_mat_filtered, GxB_COMPLETE);
527+
info = GrB_Matrix_reduce_Monoid(filtered_cards, NULL, NULL, ownsedge_any_bool, owns_mat_filtered, GrB_DESC_T0);
528+
if (info != GrB_SUCCESS)
529+
{
530+
fprintf(stderr, "failed to filter cards %d\n", info);
531+
return 1;
532+
}
533+
GxB_print(filtered_cards, GxB_COMPLETE);
499534

500-
// теперь нужно взять карты (редукция по строчкам или по столбцам)
501-
// редуцируем карты (строим вектор карты, которые относятся к отфильтрованным пользователем )
535+
GrB_Vector bool_vec;
536+
info = GrB_Vector_new(&bool_vec, GrB_BOOL, VERTICES_NUMBER);
537+
if (info != GrB_SUCCESS)
538+
{
539+
fprintf(stderr, "failed to create id vector for filtered cards %d\n", info);
540+
return 1;
541+
}
542+
info = GrB_assign(bool_vec, filtered_cards, NULL, true, GrB_ALL, VERTICES_NUMBER, GrB_DESC_S);
543+
if (info != GrB_SUCCESS)
544+
{
545+
fprintf(stderr, "failed to fill id vector for filtered cards %d\n", info);
546+
return 1;
547+
}
548+
GxB_print(bool_vec, GxB_COMPLETE);
502549

503550
// строим ID матрицу
504551

0 commit comments

Comments
 (0)