File tree Expand file tree Collapse file tree 4 files changed +84
-0
lines changed
algorithms-compute-facade/src
main/java/org/neo4j/gds/community
algo/src/main/java/org/neo4j/gds/louvain Expand file tree Collapse file tree 4 files changed +84
-0
lines changed Original file line number Diff line number Diff line change @@ -55,4 +55,12 @@ public long size() {
5555 return communities .size ();
5656 }
5757
58+ public static LouvainResult EMPTY = new LouvainResult (
59+ HugeLongArray .newArray (0 ),
60+ 0 ,
61+ null ,
62+ new double [0 ],
63+ 0
64+ );
65+
5866}
Original file line number Diff line number Diff line change 5454import org .neo4j .gds .leiden .Leiden ;
5555import org .neo4j .gds .leiden .LeidenParameters ;
5656import org .neo4j .gds .leiden .LeidenResult ;
57+ import org .neo4j .gds .louvain .Louvain ;
58+ import org .neo4j .gds .louvain .LouvainParameters ;
59+ import org .neo4j .gds .louvain .LouvainResult ;
5760import org .neo4j .gds .result .TimedAlgorithmResult ;
5861import org .neo4j .gds .termination .TerminationFlag ;
5962import org .neo4j .gds .triangle .LocalClusteringCoefficient ;
@@ -413,5 +416,36 @@ CompletableFuture<TimedAlgorithmResult<LeidenResult>> leiden(
413416 );
414417 }
415418
419+ CompletableFuture <TimedAlgorithmResult <LouvainResult >> louvain (
420+ Graph graph ,
421+ LouvainParameters parameters ,
422+ JobId jobId ,
423+ boolean logProgress
424+ ) {
425+
426+ if (graph .isEmpty ()) {
427+ return CompletableFuture .completedFuture (TimedAlgorithmResult .empty (LouvainResult .EMPTY ));
428+ }
429+
430+ var progressTracker = progressTrackerFactory .create (
431+ tasks .louvain (graph ,parameters ),
432+ jobId ,
433+ parameters .concurrency (),
434+ logProgress
435+ );
436+
437+ var algorithm = new Louvain (
438+ graph ,
439+ parameters ,
440+ progressTracker ,
441+ DefaultPool .INSTANCE ,
442+ terminationFlag
443+ );
444+
445+ return algorithmCaller .run (
446+ algorithm ::compute ,
447+ jobId
448+ );
449+ }
416450
417451}
Original file line number Diff line number Diff line change 4545import org .neo4j .gds .labelpropagation .LabelPropagationResult ;
4646import org .neo4j .gds .leiden .LeidenParameters ;
4747import org .neo4j .gds .leiden .LeidenResult ;
48+ import org .neo4j .gds .louvain .LouvainParameters ;
49+ import org .neo4j .gds .louvain .LouvainResult ;
4850import org .neo4j .gds .termination .TerminationFlag ;
4951import org .neo4j .gds .triangle .LocalClusteringCoefficientParameters ;
5052import org .neo4j .gds .triangle .LocalClusteringCoefficientResult ;
@@ -249,4 +251,21 @@ void leiden(){
249251 verifyNoInteractions (progressTrackerFactoryMock );
250252 verifyNoInteractions (algorithmCallerMock );
251253 }
254+
255+ @ Test
256+ void louvain (){
257+
258+ var future = facade .louvain (
259+ graph ,
260+ mock (LouvainParameters .class ),
261+ jobIdMock ,
262+ false
263+ );
264+
265+ var results = future .join ();
266+
267+ assertThat (results .result ()).isEqualTo (LouvainResult .EMPTY );
268+ verifyNoInteractions (progressTrackerFactoryMock );
269+ verifyNoInteractions (algorithmCallerMock );
270+ }
252271}
Original file line number Diff line number Diff line change 4747import org .neo4j .gds .labelpropagation .LabelPropagationParameters ;
4848import org .neo4j .gds .leiden .LeidenParameters ;
4949import org .neo4j .gds .logging .Log ;
50+ import org .neo4j .gds .louvain .LouvainParameters ;
5051import org .neo4j .gds .termination .TerminationFlag ;
5152import org .neo4j .gds .triangle .LocalClusteringCoefficientParameters ;
5253
@@ -313,4 +314,26 @@ void leiden(){
313314 assertThat (results .computeMillis ()).isNotNegative ();
314315 }
315316
317+ @ Test
318+ void louvain (){
319+ var future = facade .louvain (
320+ graph ,
321+ new LouvainParameters (
322+ new Concurrency (4 ),
323+ 10 ,
324+ 0 ,
325+ 10 ,
326+ false ,
327+ null
328+ ),
329+ jobIdMock ,
330+ false
331+ );
332+
333+ var results = future .join ();
334+
335+ assertThat (results .result ().ranLevels ()).isGreaterThan (0 );
336+ assertThat (results .computeMillis ()).isNotNegative ();
337+ }
338+
316339}
You can’t perform that action at this time.
0 commit comments