Skip to content

Commit d834082

Browse files
Add sllpa in compute facade
1 parent 7e89e9a commit d834082

File tree

4 files changed

+76
-1
lines changed

4 files changed

+76
-1
lines changed

algorithms-compute-facade/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,17 @@ dependencies {
99
implementation project(':algo')
1010
implementation project(':algo-common')
1111
implementation project(':collections')
12+
implementation project(":community-configs")
1213
implementation project(':community-params')
14+
implementation project(":config-api")
1315
implementation project(':core')
1416
implementation project(':core-api')
1517
implementation project(':logging')
1618
implementation project(':ml-core')
1719
implementation project(':node-embeddings-params')
1820
implementation project(':path-finding-algorithms')
1921
implementation project(':path-finding-params')
22+
implementation project(":pregel")
2023
implementation project(':progress-tracking')
2124
implementation project(':termination')
2225

algorithms-compute-facade/src/main/java/org/neo4j/gds/community/CommunityComputeFacade.java

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import org.neo4j.gds.approxmaxkcut.ApproxMaxKCutParameters;
2828
import org.neo4j.gds.approxmaxkcut.ApproxMaxKCutResult;
2929
import org.neo4j.gds.async.AsyncAlgorithmCaller;
30+
import org.neo4j.gds.beta.pregel.ImmutablePregelResult;
31+
import org.neo4j.gds.beta.pregel.PregelResult;
3032
import org.neo4j.gds.cliqueCounting.CliqueCounting;
3133
import org.neo4j.gds.cliqueCounting.CliqueCountingResult;
3234
import org.neo4j.gds.cliquecounting.CliqueCountingParameters;
@@ -71,6 +73,8 @@
7173
import org.neo4j.gds.result.TimedAlgorithmResult;
7274
import org.neo4j.gds.scc.Scc;
7375
import org.neo4j.gds.scc.SccParameters;
76+
import org.neo4j.gds.sllpa.SpeakerListenerLPA;
77+
import org.neo4j.gds.sllpa.SpeakerListenerLPAConfig;
7478
import org.neo4j.gds.termination.TerminationFlag;
7579
import org.neo4j.gds.triangle.IntersectingTriangleCount;
7680
import org.neo4j.gds.triangle.LocalClusteringCoefficient;
@@ -600,7 +604,7 @@ CompletableFuture<TimedAlgorithmResult<DisjointSetStruct>> wcc(
600604
) {
601605

602606
if (graph.isEmpty()) {
603-
return CompletableFuture.completedFuture(TimedAlgorithmResult.empty( new HugeAtomicDisjointSetStruct(0 , new Concurrency(1))));
607+
return CompletableFuture.completedFuture(TimedAlgorithmResult.empty(new HugeAtomicDisjointSetStruct(0, new Concurrency(1))));
604608
}
605609

606610
var progressTracker = progressTrackerFactory.create(
@@ -624,5 +628,36 @@ CompletableFuture<TimedAlgorithmResult<DisjointSetStruct>> wcc(
624628
jobId
625629
);
626630
}
631+
CompletableFuture<TimedAlgorithmResult<PregelResult>> sllpa(
632+
Graph graph,
633+
SpeakerListenerLPAConfig configuration,
634+
JobId jobId,
635+
boolean logProgress
636+
) {
637+
638+
if (graph.isEmpty()) {
639+
return CompletableFuture.completedFuture(TimedAlgorithmResult.empty(ImmutablePregelResult.of(null, 0, false)));
640+
}
641+
642+
var progressTracker = progressTrackerFactory.create(
643+
tasks.speakerListenerLPA(graph,configuration),
644+
jobId,
645+
configuration.concurrency(),
646+
logProgress
647+
);
648+
649+
var algorithm = new SpeakerListenerLPA(
650+
graph,
651+
configuration,
652+
DefaultPool.INSTANCE,
653+
progressTracker,
654+
Optional.empty()
655+
);
656+
657+
return algorithmCaller.run(
658+
algorithm::compute,
659+
jobId
660+
);
661+
}
627662

628663
}

algorithms-compute-facade/src/test/java/org/neo4j/gds/community/CommunityComputeFacadeEmptyGraphTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import org.neo4j.gds.modularityoptimization.ModularityOptimizationParameters;
5353
import org.neo4j.gds.modularityoptimization.ModularityOptimizationResult;
5454
import org.neo4j.gds.scc.SccParameters;
55+
import org.neo4j.gds.sllpa.SpeakerListenerLPAConfig;
5556
import org.neo4j.gds.termination.TerminationFlag;
5657
import org.neo4j.gds.triangle.LocalClusteringCoefficientParameters;
5758
import org.neo4j.gds.triangle.LocalClusteringCoefficientResult;
@@ -361,4 +362,21 @@ void wcc(){
361362
verifyNoInteractions(algorithmCallerMock);
362363
}
363364

365+
@Test
366+
void sllpa(){
367+
368+
var future = facade.sllpa(
369+
graph,
370+
mock(SpeakerListenerLPAConfig.class),
371+
jobIdMock,
372+
false
373+
);
374+
375+
var results = future.join();
376+
377+
assertThat(results.result().ranIterations()).isEqualTo(0L);
378+
verifyNoInteractions(progressTrackerFactoryMock);
379+
verifyNoInteractions(algorithmCallerMock);
380+
}
381+
364382
}

algorithms-compute-facade/src/test/java/org/neo4j/gds/community/CommunityComputeFacadeTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.neo4j.gds.modularity.ModularityParameters;
5252
import org.neo4j.gds.modularityoptimization.ModularityOptimizationParameters;
5353
import org.neo4j.gds.scc.SccParameters;
54+
import org.neo4j.gds.sllpa.SpeakerListenerLPAConfigImpl;
5455
import org.neo4j.gds.termination.TerminationFlag;
5556
import org.neo4j.gds.triangle.LocalClusteringCoefficientParameters;
5657
import org.neo4j.gds.triangle.TriangleCountParameters;
@@ -434,4 +435,22 @@ void wcc(){
434435
assertThat(results.computeMillis()).isNotNegative();
435436
}
436437

438+
@Test
439+
void sllpa(){
440+
441+
var config = SpeakerListenerLPAConfigImpl.builder().concurrency(4).minAssociationStrength(0.00).maxIterations(10).build();
442+
443+
var future = facade.sllpa(
444+
graph,
445+
config,
446+
jobIdMock,
447+
false
448+
);
449+
450+
var results = future.join();
451+
452+
assertThat(results.result().ranIterations()).isGreaterThan(0);
453+
assertThat(results.computeMillis()).isNotNegative();
454+
}
455+
437456
}

0 commit comments

Comments
 (0)