Skip to content

Commit 3e211c8

Browse files
committed
migrate FastRP stats
1 parent c4a4241 commit 3e211c8

File tree

15 files changed

+245
-131
lines changed

15 files changed

+245
-131
lines changed

algo/src/main/java/org/neo4j/gds/algorithms/embeddings/NodeEmbeddingsAlgorithmStatsBusinessFacade.java

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

applications/algorithms/node-embeddings/src/main/java/org/neo4j/gds/applications/algorithms/embeddings/NodeEmbeddingAlgorithmsEstimationModeBusinessFacade.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,30 @@
1919
*/
2020
package org.neo4j.gds.applications.algorithms.embeddings;
2121

22+
import org.neo4j.gds.applications.algorithms.machinery.AlgorithmEstimationTemplate;
23+
import org.neo4j.gds.applications.algorithms.machinery.MemoryEstimateResult;
2224
import org.neo4j.gds.embeddings.fastrp.FastRPBaseConfig;
2325
import org.neo4j.gds.embeddings.fastrp.FastRPMemoryEstimateDefinition;
2426
import org.neo4j.gds.mem.MemoryEstimation;
2527

2628
public class NodeEmbeddingAlgorithmsEstimationModeBusinessFacade {
29+
private final AlgorithmEstimationTemplate algorithmEstimationTemplate;
30+
31+
public NodeEmbeddingAlgorithmsEstimationModeBusinessFacade(AlgorithmEstimationTemplate algorithmEstimationTemplate) {
32+
this.algorithmEstimationTemplate = algorithmEstimationTemplate;
33+
}
34+
2735
public MemoryEstimation fastRP(FastRPBaseConfig configuration) {
2836
return new FastRPMemoryEstimateDefinition(configuration.toParameters()).memoryEstimation();
2937
}
38+
39+
public MemoryEstimateResult fastRP(FastRPBaseConfig configuration, Object graphNameOrConfiguration) {
40+
var memoryEstimation = fastRP(configuration);
41+
42+
return algorithmEstimationTemplate.estimate(
43+
configuration,
44+
graphNameOrConfiguration,
45+
memoryEstimation
46+
);
47+
}
3048
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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.applications.algorithms.embeddings;
21+
22+
import org.neo4j.gds.api.GraphName;
23+
import org.neo4j.gds.applications.algorithms.machinery.AlgorithmProcessingTemplate;
24+
import org.neo4j.gds.applications.algorithms.machinery.ResultBuilder;
25+
import org.neo4j.gds.embeddings.fastrp.FastRPResult;
26+
import org.neo4j.gds.embeddings.fastrp.FastRPStatsConfig;
27+
28+
import java.util.Optional;
29+
30+
import static org.neo4j.gds.applications.algorithms.metadata.LabelForProgressTracking.FastRP;
31+
32+
public class NodeEmbeddingAlgorithmsStatsModeBusinessFacade {
33+
private final NodeEmbeddingAlgorithmsEstimationModeBusinessFacade estimationFacade;
34+
private final NodeEmbeddingAlgorithms algorithms;
35+
private final AlgorithmProcessingTemplate algorithmProcessingTemplate;
36+
37+
public NodeEmbeddingAlgorithmsStatsModeBusinessFacade(
38+
NodeEmbeddingAlgorithmsEstimationModeBusinessFacade estimationFacade,
39+
NodeEmbeddingAlgorithms algorithms,
40+
AlgorithmProcessingTemplate algorithmProcessingTemplate
41+
) {
42+
this.estimationFacade = estimationFacade;
43+
this.algorithms = algorithms;
44+
this.algorithmProcessingTemplate = algorithmProcessingTemplate;
45+
}
46+
47+
public <RESULT> RESULT fastRP(
48+
GraphName graphName,
49+
FastRPStatsConfig configuration,
50+
ResultBuilder<FastRPStatsConfig, FastRPResult, RESULT, Void> resultBuilder
51+
) {
52+
return algorithmProcessingTemplate.processAlgorithm(
53+
graphName,
54+
configuration,
55+
FastRP,
56+
() -> estimationFacade.fastRP(configuration),
57+
graph -> algorithms.fastRP(graph, configuration),
58+
Optional.empty(),
59+
resultBuilder
60+
);
61+
}
62+
}

applications/facade/src/main/java/org/neo4j/gds/applications/ApplicationsFacade.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ public static ApplicationsFacade create(
134134

135135
var nodeEmbeddingApplications = NodeEmbeddingApplications.create(
136136
requestScopedDependencies,
137+
algorithmEstimationTemplate,
137138
algorithmProcessingTemplate,
138139
progressTrackerCreator,
139140
mutateNodeProperty
@@ -142,8 +143,8 @@ public static ApplicationsFacade create(
142143
var pathFindingApplications = PathFindingApplications.create(
143144
log,
144145
requestScopedDependencies,
145-
algorithmProcessingTemplate,
146146
algorithmEstimationTemplate,
147+
algorithmProcessingTemplate,
147148
progressTrackerCreator
148149
);
149150

applications/facade/src/main/java/org/neo4j/gds/applications/NodeEmbeddingApplications.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import org.neo4j.gds.applications.algorithms.embeddings.NodeEmbeddingAlgorithms;
2323
import org.neo4j.gds.applications.algorithms.embeddings.NodeEmbeddingAlgorithmsEstimationModeBusinessFacade;
2424
import org.neo4j.gds.applications.algorithms.embeddings.NodeEmbeddingAlgorithmsMutateModeBusinessFacade;
25+
import org.neo4j.gds.applications.algorithms.embeddings.NodeEmbeddingAlgorithmsStatsModeBusinessFacade;
26+
import org.neo4j.gds.applications.algorithms.machinery.AlgorithmEstimationTemplate;
2527
import org.neo4j.gds.applications.algorithms.machinery.AlgorithmProcessingTemplate;
2628
import org.neo4j.gds.applications.algorithms.machinery.MutateNodeProperty;
2729
import org.neo4j.gds.applications.algorithms.machinery.ProgressTrackerCreator;
@@ -30,17 +32,22 @@
3032
public final class NodeEmbeddingApplications {
3133
private final NodeEmbeddingAlgorithmsEstimationModeBusinessFacade estimationMode;
3234
private final NodeEmbeddingAlgorithmsMutateModeBusinessFacade mutateMode;
35+
private final NodeEmbeddingAlgorithmsStatsModeBusinessFacade statsMode;
3336

3437
private NodeEmbeddingApplications(
3538
NodeEmbeddingAlgorithmsEstimationModeBusinessFacade estimationMode,
36-
NodeEmbeddingAlgorithmsMutateModeBusinessFacade mutateMode
39+
NodeEmbeddingAlgorithmsMutateModeBusinessFacade mutateMode,
40+
NodeEmbeddingAlgorithmsStatsModeBusinessFacade statsMode
3741
) {
3842
this.estimationMode = estimationMode;
3943
this.mutateMode = mutateMode;
44+
this.statsMode = statsMode;
4045
}
4146

4247
static NodeEmbeddingApplications create(
43-
RequestScopedDependencies requestScopedDependencies, AlgorithmProcessingTemplate algorithmProcessingTemplate,
48+
RequestScopedDependencies requestScopedDependencies,
49+
AlgorithmEstimationTemplate algorithmEstimationTemplate,
50+
AlgorithmProcessingTemplate algorithmProcessingTemplate,
4451
ProgressTrackerCreator progressTrackerCreator,
4552
MutateNodeProperty mutateNodeProperty
4653
) {
@@ -49,22 +56,31 @@ static NodeEmbeddingApplications create(
4956
requestScopedDependencies.getTerminationFlag()
5057
);
5158

52-
var estimationMode = new NodeEmbeddingAlgorithmsEstimationModeBusinessFacade();
59+
var estimationMode = new NodeEmbeddingAlgorithmsEstimationModeBusinessFacade(algorithmEstimationTemplate);
5360
var mutateMode = new NodeEmbeddingAlgorithmsMutateModeBusinessFacade(
5461
estimationMode,
5562
algorithms,
5663
algorithmProcessingTemplate,
5764
mutateNodeProperty
5865
);
66+
var statsMode = new NodeEmbeddingAlgorithmsStatsModeBusinessFacade(
67+
estimationMode,
68+
algorithms,
69+
algorithmProcessingTemplate
70+
);
5971

60-
return new NodeEmbeddingApplications(estimationMode, mutateMode);
72+
return new NodeEmbeddingApplications(estimationMode, mutateMode, statsMode);
73+
}
74+
75+
public NodeEmbeddingAlgorithmsEstimationModeBusinessFacade estimate() {
76+
return estimationMode;
6177
}
6278

6379
public NodeEmbeddingAlgorithmsMutateModeBusinessFacade mutate() {
6480
return mutateMode;
6581
}
6682

67-
public NodeEmbeddingAlgorithmsEstimationModeBusinessFacade estimate() {
68-
return estimationMode;
83+
public NodeEmbeddingAlgorithmsStatsModeBusinessFacade stats() {
84+
return statsMode;
6985
}
7086
}

applications/facade/src/main/java/org/neo4j/gds/applications/PathFindingApplications.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ private PathFindingApplications(
6161
public static PathFindingApplications create(
6262
Log log,
6363
RequestScopedDependencies requestScopedDependencies,
64-
AlgorithmProcessingTemplate algorithmProcessingTemplate,
6564
AlgorithmEstimationTemplate algorithmEstimationTemplate,
65+
AlgorithmProcessingTemplate algorithmProcessingTemplate,
6666
ProgressTrackerCreator progressTrackerCreator
6767
) {
6868
var pathFindingAlgorithms = new PathFindingAlgorithms(requestScopedDependencies, progressTrackerCreator);

proc/embeddings/src/main/java/org/neo4j/gds/embeddings/fastrp/FastRPStatsProc.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import org.neo4j.gds.applications.algorithms.machinery.MemoryEstimateResult;
2323
import org.neo4j.gds.procedures.GraphDataScienceProcedures;
24-
import org.neo4j.gds.procedures.embeddings.fastrp.FastRPStatsResult;
24+
import org.neo4j.gds.procedures.algorithms.embeddings.FastRPStatsResult;
2525
import org.neo4j.procedure.Context;
2626
import org.neo4j.procedure.Description;
2727
import org.neo4j.procedure.Name;
@@ -44,7 +44,7 @@ public Stream<FastRPStatsResult> stats(
4444
@Name(value = "graphName") String graphName,
4545
@Name(value = "configuration", defaultValue = "{}") Map<String, Object> configuration
4646
) {
47-
return facade.oldNodeEmbeddings().fastRP().stats(graphName, configuration);
47+
return facade.algorithms().nodeEmbeddings().fastRPStats(graphName, configuration);
4848
}
4949

5050
@Procedure(value = "gds.fastRP.stats.estimate", mode = READ)
@@ -53,6 +53,6 @@ public Stream<MemoryEstimateResult> estimate(
5353
@Name(value = "graphNameOrConfiguration") Object graphNameOrConfiguration,
5454
@Name(value = "algoConfiguration") Map<String, Object> algoConfiguration
5555
) {
56-
return facade.oldNodeEmbeddings().fastRP().statsEstimate(graphNameOrConfiguration, algoConfiguration);
56+
return facade.algorithms().nodeEmbeddings().fastRPStatsEstimate(graphNameOrConfiguration, algoConfiguration);
5757
}
5858
}

proc/embeddings/src/main/java/org/neo4j/gds/embeddings/fastrp/FastRPStatsSpec.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import org.neo4j.gds.executor.ExecutionContext;
2626
import org.neo4j.gds.executor.GdsCallable;
2727
import org.neo4j.gds.procedures.algorithms.configuration.NewConfigFunction;
28-
import org.neo4j.gds.procedures.embeddings.fastrp.FastRPStatsResult;
28+
import org.neo4j.gds.procedures.algorithms.embeddings.FastRPStatsResult;
2929

3030
import java.util.stream.Stream;
3131

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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.procedures.algorithms.embeddings;
21+
22+
import org.neo4j.gds.api.Graph;
23+
import org.neo4j.gds.api.GraphStore;
24+
import org.neo4j.gds.applications.algorithms.machinery.AlgorithmProcessingTimings;
25+
import org.neo4j.gds.applications.algorithms.machinery.ResultBuilder;
26+
import org.neo4j.gds.embeddings.fastrp.FastRPResult;
27+
import org.neo4j.gds.embeddings.fastrp.FastRPStatsConfig;
28+
29+
import java.util.Optional;
30+
import java.util.stream.Stream;
31+
32+
class FastRPResultBuilderForStatsMode implements ResultBuilder<FastRPStatsConfig, FastRPResult, Stream<FastRPStatsResult>, Void> {
33+
@Override
34+
public Stream<FastRPStatsResult> build(
35+
Graph graph,
36+
GraphStore graphStore,
37+
FastRPStatsConfig configuration,
38+
Optional<FastRPResult> result,
39+
AlgorithmProcessingTimings timings,
40+
Optional<Void> unused
41+
) {
42+
if (result.isEmpty()) return Stream.of(FastRPStatsResult.emptyFrom(timings, configuration.toMap()));
43+
44+
var fastRPStatsResult = new FastRPStatsResult(
45+
graph.nodeCount(),
46+
timings.preProcessingMillis,
47+
timings.computeMillis,
48+
configuration.toMap()
49+
);
50+
51+
return Stream.of(fastRPStatsResult);
52+
}
53+
}

procedures/facade/src/main/java/org/neo4j/gds/procedures/embeddings/fastrp/FastRPStatsResult.java renamed to procedures/algorithms-facade/src/main/java/org/neo4j/gds/procedures/algorithms/embeddings/FastRPStatsResult.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@
1717
* You should have received a copy of the GNU General Public License
1818
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1919
*/
20-
package org.neo4j.gds.procedures.embeddings.fastrp;
20+
package org.neo4j.gds.procedures.algorithms.embeddings;
2121

22+
import org.neo4j.gds.applications.algorithms.machinery.AlgorithmProcessingTimings;
2223
import org.neo4j.gds.result.AbstractResultBuilder;
2324

2425
import java.util.Map;
2526

2627
public final class FastRPStatsResult {
27-
2828
public final long nodeCount;
2929
public final long preProcessingMillis;
3030
public final long computeMillis;
@@ -42,8 +42,11 @@ public FastRPStatsResult(
4242
this.configuration = config;
4343
}
4444

45-
public static final class Builder extends AbstractResultBuilder<FastRPStatsResult> {
45+
static FastRPStatsResult emptyFrom(AlgorithmProcessingTimings timings, Map<String, Object> configurationMap) {
46+
return new FastRPStatsResult(0, timings.preProcessingMillis, timings.computeMillis, configurationMap);
47+
}
4648

49+
public static final class Builder extends AbstractResultBuilder<FastRPStatsResult> {
4750
@Override
4851
public FastRPStatsResult build() {
4952
return new FastRPStatsResult(

0 commit comments

Comments
 (0)