Skip to content

Commit 7e89e9a

Browse files
Add wcc in compute facade
1 parent 70b14d9 commit 7e89e9a

File tree

3 files changed

+77
-0
lines changed

3 files changed

+77
-0
lines changed

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

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@
3434
import org.neo4j.gds.conductance.Conductance;
3535
import org.neo4j.gds.conductance.ConductanceParameters;
3636
import org.neo4j.gds.conductance.ConductanceResult;
37+
import org.neo4j.gds.core.concurrency.Concurrency;
3738
import org.neo4j.gds.core.concurrency.DefaultPool;
39+
import org.neo4j.gds.core.concurrency.ParallelUtil;
40+
import org.neo4j.gds.core.utils.paged.dss.DisjointSetStruct;
41+
import org.neo4j.gds.core.utils.paged.dss.HugeAtomicDisjointSetStruct;
3842
import org.neo4j.gds.core.utils.progress.JobId;
3943
import org.neo4j.gds.hdbscan.HDBScan;
4044
import org.neo4j.gds.hdbscan.HDBScanParameters;
@@ -74,6 +78,8 @@
7478
import org.neo4j.gds.triangle.LocalClusteringCoefficientResult;
7579
import org.neo4j.gds.triangle.TriangleCountParameters;
7680
import org.neo4j.gds.triangle.TriangleCountResult;
81+
import org.neo4j.gds.wcc.Wcc;
82+
import org.neo4j.gds.wcc.WccParameters;
7783

7884
import java.util.Optional;
7985
import java.util.concurrent.CompletableFuture;
@@ -586,4 +592,37 @@ CompletableFuture<TimedAlgorithmResult<TriangleCountResult>> triangleCount(
586592
);
587593
}
588594

595+
CompletableFuture<TimedAlgorithmResult<DisjointSetStruct>> wcc(
596+
Graph graph,
597+
WccParameters parameters,
598+
JobId jobId,
599+
boolean logProgress
600+
) {
601+
602+
if (graph.isEmpty()) {
603+
return CompletableFuture.completedFuture(TimedAlgorithmResult.empty( new HugeAtomicDisjointSetStruct(0 , new Concurrency(1))));
604+
}
605+
606+
var progressTracker = progressTrackerFactory.create(
607+
tasks.wcc(graph),
608+
jobId,
609+
parameters.concurrency(),
610+
logProgress
611+
);
612+
613+
var algorithm = new Wcc(
614+
graph,
615+
DefaultPool.INSTANCE,
616+
ParallelUtil.DEFAULT_BATCH_SIZE,
617+
parameters,
618+
progressTracker,
619+
terminationFlag
620+
);
621+
622+
return algorithmCaller.run(
623+
algorithm::compute,
624+
jobId
625+
);
626+
}
627+
589628
}

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
@@ -57,6 +57,7 @@
5757
import org.neo4j.gds.triangle.LocalClusteringCoefficientResult;
5858
import org.neo4j.gds.triangle.TriangleCountParameters;
5959
import org.neo4j.gds.triangle.TriangleCountResult;
60+
import org.neo4j.gds.wcc.WccParameters;
6061

6162
import static org.assertj.core.api.Assertions.assertThat;
6263
import static org.mockito.Mockito.mock;
@@ -343,4 +344,21 @@ void triangleCount(){
343344
verifyNoInteractions(algorithmCallerMock);
344345
}
345346

347+
@Test
348+
void wcc(){
349+
350+
var future = facade.wcc(
351+
graph,
352+
mock(WccParameters.class),
353+
jobIdMock,
354+
false
355+
);
356+
357+
var results = future.join();
358+
359+
assertThat(results.result().size()).isEqualTo(0L);
360+
verifyNoInteractions(progressTrackerFactoryMock);
361+
verifyNoInteractions(algorithmCallerMock);
362+
}
363+
346364
}

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import org.neo4j.gds.termination.TerminationFlag;
5555
import org.neo4j.gds.triangle.LocalClusteringCoefficientParameters;
5656
import org.neo4j.gds.triangle.TriangleCountParameters;
57+
import org.neo4j.gds.wcc.WccParameters;
5758

5859
import java.util.List;
5960
import java.util.Optional;
@@ -414,4 +415,23 @@ void triangleCount(){
414415
assertThat(results.computeMillis()).isNotNegative();
415416
}
416417

418+
@Test
419+
void wcc(){
420+
var future = facade.wcc(
421+
graph,
422+
new WccParameters(
423+
0,
424+
null,
425+
new Concurrency(4)
426+
),
427+
jobIdMock,
428+
false
429+
);
430+
431+
var results = future.join();
432+
433+
assertThat(results.result().size()).isEqualTo(3L);
434+
assertThat(results.computeMillis()).isNotNegative();
435+
}
436+
417437
}

0 commit comments

Comments
 (0)