Skip to content

Commit 0fcc85c

Browse files
committed
feat: add transactions filter
Signed-off-by: Rodion Suvorov <rodion.suvorov.94@mail.ru>
1 parent cbba464 commit 0fcc85c

File tree

1 file changed

+130
-8
lines changed

1 file changed

+130
-8
lines changed

src/main.c

Lines changed: 130 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -447,9 +447,6 @@ int main()
447447
// ------------------------------------------------------------------------
448448
// apply user filters
449449
// ------------------------------------------------------------------------
450-
451-
// verices filter
452-
// фильтр только owns фильтруем с одной стороны (исходящие ребра) (поправить рисунок)
453450
GrB_Matrix owns_mat_filtered;
454451
GrB_Matrix_new(&owns_mat_filtered, owns_edge, VERTICES_NUMBER, VERTICES_NUMBER);
455452
printf("\nowns edge mat before filter\n");
@@ -497,9 +494,13 @@ int main()
497494
// printf("[%lu,%lu] error code: %d\n", i, j, info);
498495
// }
499496
}
500-
// в итоге получаем ребра исходящие из отобранных пользователем
501497

502498
// /*--------------------------- PART 2 --------------------------*/
499+
500+
// ------------------------------------------------------------------------
501+
// get cards of filtered users
502+
// ------------------------------------------------------------------------
503+
503504
GrB_Vector filtered_cards;
504505
info = GrB_Vector_new(&filtered_cards, owns_edge, VERTICES_NUMBER);
505506
if (info != GrB_SUCCESS)
@@ -532,6 +533,10 @@ int main()
532533
}
533534
GxB_print(filtered_cards, GxB_COMPLETE);
534535

536+
// ------------------------------------------------------------------------
537+
// build filter for tx matrix
538+
// ------------------------------------------------------------------------
539+
535540
GrB_Vector bool_vec;
536541
info = GrB_Vector_new(&bool_vec, GrB_BOOL, VERTICES_NUMBER);
537542
if (info != GrB_SUCCESS)
@@ -545,13 +550,130 @@ int main()
545550
fprintf(stderr, "failed to fill id vector for filtered cards %d\n", info);
546551
return 1;
547552
}
548-
GxB_print(bool_vec, GxB_COMPLETE);
553+
// GxB_print(bool_vec, GxB_COMPLETE);
554+
555+
GrB_Matrix v_mat2, id_mat2;
556+
info = GrB_Matrix_new(&v_mat2, GrB_BOOL, VERTICES_NUMBER, 1);
557+
if (info != GrB_SUCCESS)
558+
{
559+
fprintf(stderr, "failed to create v_mat2 matrix %d\n", info);
560+
return 1;
561+
}
562+
info = GrB_Col_assign(v_mat2, NULL, NULL, bool_vec, GrB_ALL, VERTICES_NUMBER, 0, NULL);
563+
if (info != GrB_SUCCESS)
564+
{
565+
fprintf(stderr, "failed to assign col to v_mat2 %d\n", info);
566+
return 1;
567+
}
568+
569+
GrB_Vector id2;
570+
info = GrB_Vector_new(&id2, GrB_BOOL, VERTICES_NUMBER);
571+
if (info != GrB_SUCCESS)
572+
{
573+
fprintf(stderr, "failed to create id2 vector %d\n", info);
574+
return 1;
575+
}
576+
info = GrB_Vector_assign_BOOL(id2, NULL, NULL, true, GrB_ALL, VERTICES_NUMBER, NULL);
577+
if (info != GrB_SUCCESS)
578+
{
579+
fprintf(stderr, "failed to assign bools to id2 mat %d\n", info);
580+
return 1;
581+
}
582+
info = GrB_Matrix_new(&id_mat2, GrB_BOOL, 1, VERTICES_NUMBER);
583+
if (info != GrB_SUCCESS)
584+
{
585+
fprintf(stderr, "failed to create id_mat2 %d\n", info);
586+
return 1;
587+
}
588+
info = GrB_Row_assign(id_mat2, NULL, NULL, id2, 0, GrB_ALL, VERTICES_NUMBER, NULL);
589+
if (info != GrB_SUCCESS)
590+
{
591+
fprintf(stderr, "failed to assign row to id_mat2 %d\n", info);
592+
return 1;
593+
}
594+
595+
GrB_Matrix kron2, kronT;
596+
info = GrB_Matrix_new(&kron2, GrB_BOOL, VERTICES_NUMBER, VERTICES_NUMBER);
597+
if (info != GrB_SUCCESS)
598+
{
599+
fprintf(stderr, "failed to create kron2 %d\n", info);
600+
return 1;
601+
}
602+
info = GrB_Matrix_new(&kronT, GrB_BOOL, VERTICES_NUMBER, VERTICES_NUMBER);
603+
if (info != GrB_SUCCESS)
604+
{
605+
fprintf(stderr, "failed to create kronT %d\n", info);
606+
return 1;
607+
}
608+
// GxB_print(v_mat2, GxB_COMPLETE);
609+
// GxB_print(id_mat2, GxB_COMPLETE);
610+
611+
info = GrB_kronecker(kron2, NULL, NULL, GrB_LAND, v_mat2, id_mat2, NULL);
612+
if (info != GrB_SUCCESS)
613+
{
614+
fprintf(stderr, "failed to do kronecker product for kron2 %d\n", info);
615+
return 1;
616+
}
617+
618+
GrB_Matrix id_matT;
619+
info = GrB_Matrix_new(&id_matT, GrB_BOOL, VERTICES_NUMBER, 1);
620+
if (info != GrB_SUCCESS)
621+
{
622+
fprintf(stderr, "failed to create id_matT %d\n", info);
623+
return 1;
624+
}
625+
info = GrB_Col_assign(id_matT, NULL, NULL, id2, GrB_ALL, VERTICES_NUMBER, 0, NULL);
626+
if (info != GrB_SUCCESS)
627+
{
628+
fprintf(stderr, "failed to assign col in id_matT %d\n", info);
629+
return 1;
630+
}
631+
632+
GrB_Matrix v_matT;
633+
info = GrB_Matrix_new(&v_matT, GrB_BOOL, 1, VERTICES_NUMBER);
634+
if (info != GrB_SUCCESS)
635+
{
636+
fprintf(stderr, "failed to create v_matT %d\n", info);
637+
return 1;
638+
}
639+
info = GrB_Row_assign(v_matT, NULL, NULL, bool_vec, 0, GrB_ALL, VERTICES_NUMBER, NULL);
640+
if (info != GrB_SUCCESS)
641+
{
642+
fprintf(stderr, "failed to assign row to v_matT %d\n", info);
643+
return 1;
644+
}
645+
646+
info = GrB_kronecker(kronT, NULL, NULL, GrB_LAND, id_matT, v_matT, NULL);
647+
if (info != GrB_SUCCESS)
648+
{
649+
fprintf(stderr, "failed to do kronecker product for kronT %d\n", info);
650+
return 1;
651+
}
549652

550-
// строим ID матрицу
653+
// GxB_print(kron2, GxB_COMPLETE);
654+
// GxB_print(kronT, GxB_COMPLETE);
551655

552-
// ID с двух сторон на матрицу транзакций
553-
// получили подграф на нужных транзакциях
656+
// ------------------------------------------------------------------------
657+
// apply cards filter to tx matrix
658+
// ------------------------------------------------------------------------
659+
GrB_Matrix tx_mat_filtered;
660+
GrB_Matrix_new(&tx_mat_filtered, tx_edge, VERTICES_NUMBER, VERTICES_NUMBER);
661+
info = GrB_Matrix_assign(tx_mat_filtered, kron2, NULL, tx_edge_mat, GrB_ALL, VERTICES_NUMBER, GrB_ALL, VERTICES_NUMBER, NULL);
662+
if (info != GrB_SUCCESS)
663+
{
664+
fprintf(stderr, "failed to assign kron2 to tx_edge_mat %d\n", info);
665+
return 1;
666+
}
667+
668+
info = GrB_Matrix_assign(tx_mat_filtered, kronT, NULL, tx_edge_mat, GrB_ALL, VERTICES_NUMBER, GrB_ALL, VERTICES_NUMBER, NULL);
669+
if (info != GrB_SUCCESS)
670+
{
671+
fprintf(stderr, "failed to assign kronT to tx_edge_mat %d\n", info);
672+
return 1;
673+
}
674+
GxB_print(tx_mat_filtered, GxB_COMPLETE);
554675

676+
555677
// теперь строим матрицу для pagerank (пункт ниже). softmax. (посмотреть как можно сделать не по дебильному с помощью GB)
556678
/// снова редуцируем по строчкам , получаем знаменатель softmax
557679
/// 2

0 commit comments

Comments
 (0)