Skip to content

Commit fd76432

Browse files
authored
Merge pull request #9894 from lassewesth/diespecs14
migrate estimation cli k1 coloring to application layer
2 parents 09aef90 + 2bb9f8d commit fd76432

File tree

11 files changed

+96
-396
lines changed

11 files changed

+96
-396
lines changed

algo/src/main/java/org/neo4j/gds/k1coloring/K1ColoringAlgorithmFactory.java

Lines changed: 0 additions & 87 deletions
This file was deleted.

algo/src/main/java/org/neo4j/gds/k1coloring/K1ColoringProgressTrackerTaskCreator.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,10 @@
2525

2626
import java.util.List;
2727

28-
public class K1ColoringProgressTrackerTaskCreator {
29-
28+
public final class K1ColoringProgressTrackerTaskCreator {
3029
private K1ColoringProgressTrackerTaskCreator() {}
3130

3231
public static Task progressTask(long nodeCount, int maxIterations) {
33-
3432
return Tasks.iterativeDynamic(
3533
AlgorithmLabel.K1Coloring.asString(),
3634
() -> List.of(
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/*
2+
* Copyright (c) "Neo4j"
3+
* Neo4j Sweden AB [http://neo4j.com]
4+
*
5+
* This file is part of Neo4j.
6+
*
7+
* Neo4j is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU General Public License as published by
9+
* the Free Software Foundation, either version 3 of the License, or
10+
* (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Public License
18+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
19+
*/
20+
package org.neo4j.gds.modularityoptimization;
21+
22+
import org.neo4j.gds.api.Graph;
23+
import org.neo4j.gds.applications.algorithms.machinery.AlgorithmMachinery;
24+
import org.neo4j.gds.core.concurrency.Concurrency;
25+
import org.neo4j.gds.core.concurrency.DefaultPool;
26+
import org.neo4j.gds.core.utils.progress.tasks.ProgressTracker;
27+
import org.neo4j.gds.k1coloring.K1Coloring;
28+
import org.neo4j.gds.k1coloring.K1ColoringParameters;
29+
import org.neo4j.gds.k1coloring.K1ColoringResult;
30+
import org.neo4j.gds.termination.TerminationFlag;
31+
32+
public class K1ColoringStub {
33+
private final AlgorithmMachinery algorithmMachinery;
34+
35+
public K1ColoringStub(AlgorithmMachinery algorithmMachinery) {
36+
this.algorithmMachinery = algorithmMachinery;
37+
}
38+
39+
public K1ColoringResult k1Coloring(
40+
Graph graph,
41+
K1ColoringParameters parameters,
42+
ProgressTracker progressTracker,
43+
TerminationFlag terminationFlag,
44+
Concurrency concurrency,
45+
boolean shouldReleaseProgressTracker
46+
) {
47+
var algorithm = new K1Coloring(
48+
graph,
49+
parameters.maxIterations(),
50+
parameters.batchSize(),
51+
parameters.concurrency(),
52+
DefaultPool.INSTANCE,
53+
progressTracker,
54+
terminationFlag
55+
);
56+
57+
return algorithmMachinery.runAlgorithmsAndManageProgressTracker(
58+
algorithm,
59+
progressTracker,
60+
shouldReleaseProgressTracker,
61+
concurrency
62+
);
63+
}
64+
}

algo/src/main/java/org/neo4j/gds/modularityoptimization/ModularityOptimization.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.neo4j.gds.api.Graph;
2828
import org.neo4j.gds.api.properties.nodes.NodePropertyValues;
2929
import org.neo4j.gds.api.properties.relationships.RelationshipIterator;
30+
import org.neo4j.gds.applications.algorithms.machinery.AlgorithmMachinery;
3031
import org.neo4j.gds.collections.ha.HugeDoubleArray;
3132
import org.neo4j.gds.collections.ha.HugeLongArray;
3233
import org.neo4j.gds.collections.haa.HugeAtomicDoubleArray;
@@ -38,8 +39,6 @@
3839
import org.neo4j.gds.core.utils.partition.Partition;
3940
import org.neo4j.gds.core.utils.partition.PartitionUtils;
4041
import org.neo4j.gds.core.utils.progress.tasks.ProgressTracker;
41-
import org.neo4j.gds.k1coloring.K1Coloring;
42-
import org.neo4j.gds.k1coloring.K1ColoringAlgorithmFactory;
4342
import org.neo4j.gds.k1coloring.K1ColoringParameters;
4443
import org.neo4j.gds.termination.TerminationFlag;
4544

@@ -177,10 +176,16 @@ public ModularityOptimizationResult compute() {
177176

178177
private void computeColoring() {
179178
var parameters = new K1ColoringParameters(concurrency, K1COLORING_MAX_ITERATIONS, minBatchSize);
180-
K1Coloring coloring = new K1ColoringAlgorithmFactory<>().build(graph, parameters, progressTracker);
181-
coloring.setTerminationFlag(terminationFlag);
179+
var k1ColoringStub = new K1ColoringStub(new AlgorithmMachinery());
180+
var k1ColoringResult = k1ColoringStub.k1Coloring(
181+
graph,
182+
parameters,
183+
progressTracker,
184+
terminationFlag,
185+
concurrency,
186+
false
187+
);
182188

183-
var k1ColoringResult = coloring.compute();
184189
modularityColorArray = ModularityColorArray.create(
185190
k1ColoringResult.colors(),
186191
k1ColoringResult.usedColors()
@@ -394,11 +399,4 @@ private double calculateModularity() {
394399
modularityManager.registerCommunities(currentCommunities);
395400
return modularityManager.calculateModularity();
396401
}
397-
398-
private long getCommunityId(long nodeId) {
399-
if (seedProperty == null || reverseSeedCommunityMapping == null) {
400-
return currentCommunities.get(nodeId);
401-
}
402-
return reverseSeedCommunityMapping.get(currentCommunities.get(nodeId));
403-
}
404402
}

algo/src/main/java/org/neo4j/gds/modularityoptimization/ModularityOptimizationFactory.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
import org.neo4j.gds.api.Graph;
2525
import org.neo4j.gds.api.properties.nodes.NodePropertyValues;
2626
import org.neo4j.gds.core.concurrency.DefaultPool;
27+
import org.neo4j.gds.k1coloring.K1ColoringProgressTrackerTaskCreator;
2728
import org.neo4j.gds.mem.MemoryEstimation;
2829
import org.neo4j.gds.core.utils.progress.tasks.ProgressTracker;
2930
import org.neo4j.gds.core.utils.progress.tasks.Task;
3031
import org.neo4j.gds.core.utils.progress.tasks.Tasks;
31-
import org.neo4j.gds.k1coloring.K1ColoringAlgorithmFactory;
3232
import org.neo4j.gds.k1coloring.K1ColoringBaseConfig;
3333
import org.neo4j.gds.k1coloring.K1ColoringStreamConfigImpl;
3434
import org.neo4j.gds.termination.TerminationFlag;
@@ -94,11 +94,13 @@ public Task progressTask(Graph graph, CONFIG config) {
9494
}
9595

9696
public static Task progressTask(Graph graph, int maxIterations) {
97+
var config = createModularityConfig();
98+
9799
return Tasks.task(
98100
MODULARITY_OPTIMIZATION_TASK_NAME,
99101
Tasks.task(
100102
"initialization",
101-
K1ColoringAlgorithmFactory.k1ColoringProgressTask(graph, createModularityConfig())
103+
K1ColoringProgressTrackerTaskCreator.progressTask(graph.nodeCount(), config.maxIterations())
102104
),
103105
Tasks.iterativeDynamic(
104106
"compute modularity",

algorithm-specifications/src/main/java/org/neo4j/gds/k1coloring/Constants.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

algorithm-specifications/src/main/java/org/neo4j/gds/k1coloring/K1ColoringMutateSpecification.java

Lines changed: 0 additions & 60 deletions
This file was deleted.

algorithm-specifications/src/main/java/org/neo4j/gds/k1coloring/K1ColoringStatsSpecification.java

Lines changed: 0 additions & 60 deletions
This file was deleted.

0 commit comments

Comments
 (0)