3838 GrB_free (&t) ; \
3939 GrB_free (&t_q) ; \
4040 GrB_free (&Theta) ; \
41- GrB_free (&Semiring ) ; \
42- GrB_free (&Mon ) ; \
41+ GrB_free (&IBop_MAX ) ; \
42+ GrB_free (&MAXFP64_mon ) ; \
4343 GrB_free (&Tuple) ; \
4444 GrB_free (&dS) ; \
4545 GrB_free (&dSTk) ; \
4949 GrB_free (&max_q1) ; \
5050 GrB_free (&za) ; \
5151 GrB_free (&z_dSTk) ; \
52- LAGraph_Free ((void *) &Sp, NULL) ; \
53- LAGraph_Free ((void *) &Sj, NULL) ; \
54- LAGraph_Free ((void *) &dSp, NULL) ; \
55- LAGraph_Free ((void *) &dSj, NULL) ; \
5652 }
57- #define DEBUG 0
53+ #define DEBUG 1
5854#define dbg (x ) if (DEBUG) GxB_print(x,5)
5955// uint64_t seed = 213;
6056typedef struct tuple_fp64 {
@@ -71,8 +67,10 @@ void make_fp64(tuple_fp64 *z,
7167 z -> k = (int64_t )jx ;
7268 z -> v = (* x );
7369 uint64_t seed = (* y + ix + iy + jy );
74- uint64_t tb = LG_Random64 (& seed );
75- z -> tb = tb ;
70+ seed ^= seed << 13 ;
71+ seed ^= seed >> 7 ;
72+ seed ^= seed << 17 ;
73+ z -> tb = seed ;
7674}
7775void max_fp64 (tuple_fp64 * z , const tuple_fp64 * x , const tuple_fp64 * y ){
7876
@@ -100,16 +98,18 @@ void max_fp64(tuple_fp64 *z, const tuple_fp64 *x, const tuple_fp64 *y){
10098" } \n" \
10199"}"
102100#define MAKE_FP64 \
103- "void make_fp64(tuple_fp64 *z, \n" \
104- " const double *x, GrB_Index ix, GrB_Index jx, \n" \
105- " const uint64_t *y, GrB_Index iy, GrB_Index jy, \n" \
106- " const void *theta) \n" \
107- "{ \n" \
108- " z->k = (int64_t)jx; \n" \
109- " z->v = (*x); \n" \
101+ "void make_fp64(tuple_fp64 *z, \n"\
102+ " const double *x, GrB_Index ix, GrB_Index jx, \n"\
103+ " const uint64_t *y, GrB_Index iy, GrB_Index jy, \n"\
104+ " const void *theta) \n"\
105+ "{ \n"\
106+ " z->k = (int64_t)jx; \n"\
107+ " z->v = (*x); \n"\
110108" uint64_t seed = (*y + ix + iy + jy); \n" \
111- " uint64_t tb = LG_Random64(&seed);\n" \
112- " z->tb = tb;\n" \
109+ " seed ^= seed << 13 ; \n" \
110+ " seed ^= seed >> 7 ;\n" \
111+ " seed ^= seed << 17 ;\n" \
112+ " z->tb = seed; \n" \
113113"}"
114114
115115
@@ -126,7 +126,7 @@ int LAGraph_Louvain2(
126126
127127 char MATRIX_TYPE [LAGRAPH_MSG_LEN ];
128128 if (DEBUG )
129- GrB_set (GrB_GLOBAL , true , GxB_BURBLE );
129+ GrB_set (GrB_GLOBAL , false , GxB_BURBLE );
130130
131131 //assignment of monoids, bops, and semis
132132 GrB_Monoid plusmon = GrB_PLUS_MONOID_FP64 ;
@@ -140,9 +140,6 @@ int LAGraph_Louvain2(
140140 GrB_Semiring stdmxm = GrB_PLUS_TIMES_SEMIRING_FP64 ;
141141 GrB_Semiring anypB = GxB_ANY_PAIR_FP64 ;
142142
143- double * Sx = NULL ; //try S as double not bool
144- GrB_Index * Sp = NULL , * Sj = NULL , Sp_size = 0 , Sj_size = 0 , Sx_size = 0 ;
145- bool S_jumbled = false, S_iso = false;
146143 GrB_Vector t_q = NULL , q1 = NULL , t = NULL ,v = NULL ;
147144 GrB_Vector k = NULL ;
148145 GrB_Vector x = NULL ;
@@ -151,24 +148,26 @@ int LAGraph_Louvain2(
151148 GrB_Vector z_dSTk = NULL ;
152149 GrB_Index n ,b ;
153150 GrB_Matrix S = NULL ;
151+ GrB_Matrix dS = NULL ;
154152 GrB_Vector sr = NULL ;
155- GrB_Semiring Semiring = NULL ;
156153 GrB_Vector srxq = NULL ;
157154 GrB_Index vals_srxq ;
158155 GrB_Matrix dS = NULL ;
159156 GrB_Vector dSTk = NULL , vtS = NULL ;
160157 GrB_Vector temp = NULL ;
161158 GrB_Vector y_rand = NULL ;
162159 GrB_Vector max_q1 = NULL ;
163- GxB_IndexBinaryOp Iop = NULL ;
164- GrB_BinaryOp Bop = NULL , MonOp = NULL ;
160+
161+ GrB_Semiring IBop_MAX = NULL ;
162+ GxB_IndexBinaryOp MAKEFP64_op = NULL ;
163+ GrB_BinaryOp MAKEFP64_Bop = NULL , MAXFP64_op = NULL ;
165164 GrB_Scalar Theta = NULL ;
166165 GrB_Type Tuple = NULL ;
167- GrB_Monoid Mon = NULL ;
166+ GrB_Monoid MAXFP64_mon = NULL ;
167+
168+
168169 GxB_Container S_container = NULL ;
169- double * dSx = NULL ;
170- GrB_Index * dSp = NULL , * dSj = NULL , dSp_size , dSj_size , dSx_size ;
171- bool dS_jumbled = false, dS_iso = false ;
170+ GxB_Container dS_container = NULL ;
172171 GrB_Index q1_size ;
173172 //GrB_Container
174173 tuple_fp64 o ;
@@ -187,15 +186,15 @@ int LAGraph_Louvain2(
187186 GRB_TRY (GrB_Scalar_new (& Theta , GrB_BOOL ));
188187 GRB_TRY (GrB_Scalar_setElement_BOOL (Theta , 0 ));
189188 GRB_TRY (GxB_Type_new (& Tuple , sizeof (tuple_fp64 ), "tuple_fp64" , FP64_K ));
190- GRB_TRY (GxB_IndexBinaryOp_new (& Iop ,(GxB_index_binary_function )make_fp64 , Tuple , GrB_FP64 , GrB_UINT64 , GrB_BOOL ,"make_fp64" , MAKE_FP64 ));
191- GRB_TRY (GxB_BinaryOp_new_IndexOp (& Bop , Iop , Theta ));
189+ GRB_TRY (GxB_IndexBinaryOp_new (& MAKEFP64_op ,(GxB_index_binary_function )make_fp64 , Tuple , GrB_FP64 , GrB_UINT64 , GrB_BOOL ,"make_fp64" , MAKE_FP64 ));
190+ GRB_TRY (GxB_BinaryOp_new_IndexOp (& MAKEFP64_Bop , MAKEFP64_op , Theta ));
192191 tuple_fp64 id ;
193192 memset (& id , 0 , sizeof (tuple_fp64 ));
194193 id .k = INT64_MAX ;
195194 id .v = (double )(- INFINITY );
196- GRB_TRY (GxB_BinaryOp_new (& MonOp ,(GxB_binary_function )max_fp64 , Tuple , Tuple , Tuple , "max_fp64" , MAX_FP64 ));
197- GRB_TRY (GrB_Monoid_new_UDT (& Mon , MonOp , & id ));
198- GRB_TRY (GrB_Semiring_new (& Semiring , Mon , Bop ));
195+ GRB_TRY (GxB_BinaryOp_new (& MAXFP64_op ,(GxB_binary_function )max_fp64 , Tuple , Tuple , Tuple , "max_fp64" , MAX_FP64 ));
196+ GRB_TRY (GrB_Monoid_new_UDT (& MAXFP64_mon , MAXFP64_op , & id ));
197+ GRB_TRY (GrB_Semiring_new (& IBop_MAX , MAXFP64_mon , MAKEFP64_Bop ));
199198//------------------------------------------------------------------------------------------------------------------
200199
201200
@@ -245,7 +244,7 @@ int LAGraph_Louvain2(
245244 bool changed = true;
246245 int max_iter = 20 ;
247246 int iter = 0 ;
248- uint64_t seed = 231 ;
247+ uint64_t seed = 12314 ;
249248
250249 // GxB_print(y_rand,5);
251250 GRB_TRY (GrB_mxv (z ,NULL ,NULL ,stdmxm ,S ,k ,NULL ));
@@ -269,28 +268,29 @@ int LAGraph_Louvain2(
269268
270269 //sr = S(i,:)
271270 GRB_TRY (GrB_Col_extract (sr ,NULL ,NULL ,S ,GrB_ALL ,1 ,i ,GrB_DESC_T0 ));
272- // GxB_print(sr,5);
271+ GxB_print (sr ,5 );
273272
274- //S(i,:) = empty
273+ //S(i,:) = 0/false
275274 GRB_TRY (GxB_unload_Matrix_into_Container (S ,S_container ,NULL ));
276275 GRB_TRY (GrB_Vector_setElement_BOOL (S_container -> x ,false,i ));
277276 GRB_TRY (GxB_load_Matrix_from_Container (S ,S_container ,NULL ));
278-
277+ dbg ( S );
279278
280279
281280////////////////////////////////////////////////////////////
282281//-------------q1<t_q> = a(kTS)+vTS----------- -----------//
282+ //-------------q1<t_q> = z+vTS----------------------------//
283283 // double alpha_p = 1;
284284 double alpha = - k_i /m ;
285285
286286 GRB_TRY (GrB_Vector_apply_BinaryOp2nd_FP64 (za ,NULL ,NULL ,timesf64 ,z ,alpha ,GrB_DESC_T0 ));
287-
287+ dbg ( za );
288288
289289 GRB_TRY (GrB_eWiseAdd (za ,NULL ,NULL ,plusf64 ,za ,v ,NULL ));
290290 // printf("z*alpha + v\n");
291- // GxB_print (za,5 );
291+ dbg (za );
292292 GRB_TRY (GrB_vxm (q1 ,t_q ,NULL ,stdmxm ,za ,S ,GrB_DESC_R ));
293- // dbg(q1);
293+ dbg (q1 );
294294///////////////////////////////////////////////////////////
295295
296296///////////////////////////////////////////////////////////
@@ -303,7 +303,7 @@ int LAGraph_Louvain2(
303303 GRB_TRY (GrB_assign (y_rand , t_q , NULL , seed , GrB_ALL , n , GrB_DESC_S ));
304304
305305 // GxB_print(q1,5);
306- GRB_TRY (GrB_mxv (max_q1 ,NULL ,NULL ,Semiring ,(GrB_Matrix )q1 ,y_rand ,GrB_DESC_T0 ));
306+ GRB_TRY (GrB_mxv (max_q1 ,NULL ,NULL ,IBop_MAX ,(GrB_Matrix )q1 ,y_rand ,GrB_DESC_T0 ));
307307 // GxB_print(q1,5);
308308
309309 GRB_TRY (GrB_Vector_extractElement_UDT ((void * )& o ,max_q1 ,0 ));
@@ -327,14 +327,14 @@ int LAGraph_Louvain2(
327327 if (vals_srxq == 0 ){
328328 changed = true;
329329 }
330- // if(i==0 )break;
330+ // if(i==3 )break;
331331
332332 }
333333 iter ++ ;
334334 // break;
335335 // printf("changed: %i\n", changed);
336336 }
337- // GxB_print(S,5);
337+ GxB_print (S ,5 );
338338 double Q ;
339339 double gamma = 1 ;
340340 GRB_TRY (LAGr_Modularity2 (& Q ,gamma ,A ,S ,msg ));
0 commit comments