Skip to content

Commit a540843

Browse files
authored
Merge pull request #6564 from DarthMax/orientation_to_is_undirected
Replace orientation with direction
2 parents 04b8b31 + 7681644 commit a540843

File tree

95 files changed

+1779
-1490
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+1779
-1490
lines changed

algo/src/main/java/org/neo4j/gds/embeddings/graphsage/GraphSageHelper.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -276,10 +276,9 @@ public static HugeObjectArray<double[]> initializeMultiLabelFeatures(
276276
private static Map<NodeLabel, Set<String>> propertyKeysPerNodeLabel(GraphSchema graphSchema) {
277277
return graphSchema
278278
.nodeSchema()
279-
.properties()
280-
.entrySet()
279+
.entries()
281280
.stream()
282-
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().keySet()));
281+
.collect(Collectors.toMap(e -> e.identifier, e -> e.properties().keySet()));
283282
}
284283

285284
private static Map<NodeLabel, Set<String>> filteredPropertyKeysPerNodeLabel(Graph graph, GraphSageTrainConfig config) {

algo/src/main/java/org/neo4j/gds/leiden/GraphAggregationPhase.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.neo4j.gds.api.DefaultValue;
2828
import org.neo4j.gds.api.Graph;
2929
import org.neo4j.gds.api.IdMap;
30+
import org.neo4j.gds.api.schema.Direction;
3031
import org.neo4j.gds.core.Aggregation;
3132
import org.neo4j.gds.core.ImmutableGraphDimensions;
3233
import org.neo4j.gds.core.concurrency.ParallelUtil;
@@ -98,7 +99,7 @@ static MemoryEstimation memoryEstimation() {
9899

99100
private final Graph workingGraph;
100101
private final HugeLongArray communities;
101-
private final Orientation orientation;
102+
private final Direction direction;
102103
private final long maxCommunityId;
103104
private final ExecutorService executorService;
104105
private final int concurrency;
@@ -107,7 +108,7 @@ static MemoryEstimation memoryEstimation() {
107108

108109
GraphAggregationPhase(
109110
Graph workingGraph,
110-
Orientation orientation,
111+
Direction direction,
111112
HugeLongArray communities,
112113
long maxCommunityId,
113114
ExecutorService executorService,
@@ -117,7 +118,7 @@ static MemoryEstimation memoryEstimation() {
117118
) {
118119
this.workingGraph = workingGraph;
119120
this.communities = communities;
120-
this.orientation = orientation;
121+
this.direction = direction;
121122
this.maxCommunityId = maxCommunityId;
122123
this.executorService = executorService;
123124
this.concurrency = concurrency;
@@ -147,7 +148,7 @@ Graph run() {
147148
IdMap idMap = nodesBuilder.build().idMap();
148149
RelationshipsBuilder relationshipsBuilder = GraphFactory.initRelationshipsBuilder()
149150
.nodes(idMap)
150-
.orientation(orientation)
151+
.orientation(direction.toOrientation())
151152
.addPropertyConfig(Aggregation.SUM, DefaultValue.forDouble())
152153
.executorService(executorService)
153154
.build();
@@ -169,7 +170,7 @@ Graph run() {
169170
partition,
170171
relationshipsBuilder,
171172
workingGraph.concurrentCopy(),
172-
orientation,
173+
direction,
173174
progressTracker
174175
),
175176
Optional.empty(),

algo/src/main/java/org/neo4j/gds/leiden/Leiden.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
import org.jetbrains.annotations.NotNull;
2323
import org.jetbrains.annotations.Nullable;
2424
import org.neo4j.gds.Algorithm;
25-
import org.neo4j.gds.Orientation;
2625
import org.neo4j.gds.api.Graph;
2726
import org.neo4j.gds.api.properties.nodes.NodePropertyValues;
27+
import org.neo4j.gds.api.schema.Direction;
2828
import org.neo4j.gds.core.concurrency.Pools;
2929
import org.neo4j.gds.core.concurrency.RunWithConcurrency;
3030
import org.neo4j.gds.core.utils.paged.HugeDoubleArray;
@@ -42,7 +42,7 @@
4242
public class Leiden extends Algorithm<LeidenResult> {
4343

4444
private final Graph rootGraph;
45-
private final Orientation orientation;
45+
private final Direction direction;
4646
private final int maxIterations;
4747
private final double initialGamma;
4848
private final double theta;
@@ -71,7 +71,7 @@ public Leiden(
7171
) {
7272
super(progressTracker);
7373
this.rootGraph = graph;
74-
this.orientation = rootGraph.schema().isUndirected() ? Orientation.UNDIRECTED : Orientation.NATURAL;
74+
this.direction = rootGraph.schema().direction();
7575
this.maxIterations = maxIterations;
7676
this.initialGamma = initialGamma;
7777
this.theta = theta;
@@ -209,7 +209,7 @@ public LeidenResult compute() {
209209
// 3 CREATE NEW GRAPH
210210
var graphAggregationPhase = new GraphAggregationPhase(
211211
workingGraph,
212-
this.orientation,
212+
this.direction,
213213
refinedCommunities,
214214
maximumRefinedCommunityId,
215215
this.executorService,

algo/src/main/java/org/neo4j/gds/leiden/RelationshipCreator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
*/
2020
package org.neo4j.gds.leiden;
2121

22-
import org.neo4j.gds.Orientation;
2322
import org.neo4j.gds.api.RelationshipIterator;
23+
import org.neo4j.gds.api.schema.Direction;
2424
import org.neo4j.gds.core.loading.construction.RelationshipsBuilder;
2525
import org.neo4j.gds.core.utils.paged.HugeDoubleArray;
2626
import org.neo4j.gds.core.utils.paged.HugeLongArray;
@@ -29,7 +29,7 @@
2929

3030
final class RelationshipCreator implements Runnable {
3131

32-
private final Orientation orientation;
32+
private final Direction direction;
3333
private final RelationshipsBuilder relationshipsBuilder;
3434
private final HugeLongArray communities;
3535
private final RelationshipIterator relationshipIterator;
@@ -46,10 +46,10 @@ final class RelationshipCreator implements Runnable {
4646
Partition partition,
4747
RelationshipsBuilder relationshipsBuilder,
4848
RelationshipIterator relationshipIterator,
49-
Orientation orientation,
49+
Direction direction,
5050
ProgressTracker progressTracker
5151
) {
52-
this.orientation = orientation;
52+
this.direction = direction;
5353
this.relationshipsBuilder = relationshipsBuilder;
5454
this.communities = communities;
5555
this.relationshipIterator = relationshipIterator;
@@ -96,7 +96,7 @@ public void run() {
9696
// hence we should add it as we encounter it from a
9797
//otherwise a<-[weight]->b will be visited from both a and b.
9898
// To not include it twice we break a tie based on id.
99-
if (orientation == Orientation.NATURAL || currentCommunity > targetCommunityId) {
99+
if (direction == Direction.DIRECTED || currentCommunity > targetCommunityId) {
100100
double valueToAdd = property;
101101
if (encounteredCommunityWeights.get(targetCommunityId) == -1) {
102102
encounteredCommunities.set(encountereCommunitiesCounter++, targetCommunityId);

algo/src/main/java/org/neo4j/gds/louvain/Louvain.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
package org.neo4j.gds.louvain;
2121

2222
import org.neo4j.gds.Algorithm;
23-
import org.neo4j.gds.Orientation;
2423
import org.neo4j.gds.api.DefaultValue;
2524
import org.neo4j.gds.api.Graph;
2625
import org.neo4j.gds.api.IdMap;
@@ -235,11 +234,10 @@ private Graph summarizeGraph(
235234
if (workingGraph.schema().isUndirected()) {
236235
scaleCoefficient /= 2.0;
237236
}
238-
Orientation orientation = rootGraph.schema().isUndirected() ? Orientation.UNDIRECTED : Orientation.NATURAL;
239237
IdMap idMap = nodesBuilder.build().idMap();
240238
RelationshipsBuilder relationshipsBuilder = GraphFactory.initRelationshipsBuilder()
241239
.nodes(idMap)
242-
.orientation(orientation)
240+
.orientation(rootGraph.schema().direction().toOrientation())
243241
.addPropertyConfig(Aggregation.SUM, DefaultValue.forDouble())
244242
.executorService(executorService)
245243
.build();

algo/src/main/java/org/neo4j/gds/similarity/SimilarityGraphResult.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
*/
2020
package org.neo4j.gds.similarity;
2121

22-
import org.neo4j.gds.Orientation;
2322
import org.neo4j.gds.api.Graph;
23+
import org.neo4j.gds.api.schema.Direction;
2424

2525
public class SimilarityGraphResult {
2626
private final Graph similarityGraph;
@@ -37,11 +37,10 @@ public Graph similarityGraph() {
3737
return similarityGraph;
3838
}
3939

40-
public Orientation orientation() {
40+
public Direction direction() {
4141
return similarityGraph
4242
.schema()
43-
.relationshipSchema()
44-
.isUndirected() ? Orientation.UNDIRECTED : Orientation.NATURAL;
43+
.direction();
4544
}
4645

4746
public long comparedNodes() {

algo/src/test/java/org/neo4j/gds/beta/k1coloring/K1ColoringTest.java

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

2222
import org.apache.commons.lang3.mutable.MutableLong;
2323
import org.junit.jupiter.api.Test;
24-
import org.neo4j.gds.Orientation;
2524
import org.neo4j.gds.TestProgressTracker;
2625
import org.neo4j.gds.api.Graph;
26+
import org.neo4j.gds.api.schema.Direction;
2727
import org.neo4j.gds.beta.generator.RandomGraphGenerator;
2828
import org.neo4j.gds.beta.generator.RelationshipDistribution;
2929
import org.neo4j.gds.compat.Neo4jProxy;
@@ -33,13 +33,11 @@
3333
import org.neo4j.gds.core.GraphDimensions;
3434
import org.neo4j.gds.core.ImmutableGraphDimensions;
3535
import org.neo4j.gds.core.concurrency.Pools;
36-
import org.neo4j.gds.core.huge.UnionGraph;
3736
import org.neo4j.gds.core.utils.mem.MemoryRange;
3837
import org.neo4j.gds.core.utils.paged.HugeLongArray;
3938
import org.neo4j.gds.core.utils.progress.EmptyTaskRegistryFactory;
4039
import org.neo4j.gds.core.utils.progress.tasks.ProgressTracker;
4140

42-
import java.util.Arrays;
4341
import java.util.HashSet;
4442
import java.util.List;
4543
import java.util.Set;
@@ -92,26 +90,16 @@ void testK1Coloring() {
9290
void testParallelK1Coloring() {
9391
long seed = 42L;
9492

95-
RandomGraphGenerator outGenerator = RandomGraphGenerator.builder()
96-
.nodeCount(100_000)
97-
.averageDegree(5)
98-
.relationshipDistribution(RelationshipDistribution.POWER_LAW)
99-
.seed(seed)
100-
.build();
101-
102-
RandomGraphGenerator inGenerator = RandomGraphGenerator.builder()
103-
.nodeCount(100_000)
104-
.averageDegree(5)
93+
var graph = RandomGraphGenerator.builder()
94+
.nodeCount(200_000)
95+
.averageDegree(10)
10596
.relationshipDistribution(RelationshipDistribution.POWER_LAW)
10697
.seed(seed)
10798
.aggregation(Aggregation.NONE)
108-
.orientation(Orientation.REVERSE)
99+
.direction(Direction.UNDIRECTED)
109100
.allowSelfLoops(AllowSelfLoops.NO)
110-
.build();
111-
112-
var naturalGraph = outGenerator.generate();
113-
var reverseGraph = inGenerator.generate();
114-
var graph = UnionGraph.of(Arrays.asList(naturalGraph, reverseGraph));
101+
.build()
102+
.generate();
115103

116104
K1Coloring k1Coloring = new K1Coloring(
117105
graph,

algo/src/test/java/org/neo4j/gds/beta/walking/CollapsePathTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.neo4j.gds.api.Graph;
2727
import org.neo4j.gds.api.GraphStore;
2828
import org.neo4j.gds.api.Relationships;
29+
import org.neo4j.gds.api.schema.Direction;
2930
import org.neo4j.gds.core.concurrency.Pools;
3031
import org.neo4j.gds.core.utils.progress.tasks.ProgressTracker;
3132
import org.neo4j.gds.extension.GdlExtension;
@@ -160,7 +161,7 @@ private void assertResultGraph(GraphStore graphStore, Relationships relationship
160161
RelationshipType.of("SAME_DRUG"),
161162
Optional.empty(),
162163
Optional.empty(),
163-
Orientation.NATURAL,
164+
Direction.DIRECTED,
164165
relationships
165166
);
166167

@@ -201,7 +202,7 @@ void shouldComputeForAllNodesWithoutNodeLabelsSpecified() {
201202
var relationships = new CollapsePathAlgorithmFactory()
202203
.build(graphStore, config, ProgressTracker.NULL_TRACKER)
203204
.compute();
204-
graphStore.addRelationshipType(mutateRelType, Optional.empty(), Optional.empty(), Orientation.NATURAL, relationships);
205+
graphStore.addRelationshipType(mutateRelType, Optional.empty(), Optional.empty(), Direction.DIRECTED, relationships);
205206
var resultGraph = graphStore.getGraph(mutateRelType);
206207

207208
// then two relationships should be created
@@ -226,7 +227,7 @@ void shouldComputeForSubsetOfNodesWithNodeLabelsSpecified() {
226227
var relationships = new CollapsePathAlgorithmFactory()
227228
.build(graphStore, config, ProgressTracker.NULL_TRACKER)
228229
.compute();
229-
graphStore.addRelationshipType(mutateRelType, Optional.empty(), Optional.empty(), Orientation.NATURAL, relationships);
230+
graphStore.addRelationshipType(mutateRelType, Optional.empty(), Optional.empty(), Direction.DIRECTED, relationships);
230231
var resultGraph = graphStore.getGraph(mutateRelType);
231232

232233
// a single relationship is created (there is no Dog)

algo/src/test/java/org/neo4j/gds/embeddings/graphsage/GraphSageTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.neo4j.gds.api.DatabaseId;
2929
import org.neo4j.gds.api.Graph;
3030
import org.neo4j.gds.api.GraphStore;
31+
import org.neo4j.gds.api.schema.Direction;
3132
import org.neo4j.gds.beta.generator.PropertyProducer;
3233
import org.neo4j.gds.beta.generator.RandomGraphGenerator;
3334
import org.neo4j.gds.beta.generator.RelationshipDistribution;
@@ -105,7 +106,7 @@ void setUp() {
105106
.relationshipPropertyProducer(PropertyProducer.fixedDouble("weight", 1.0))
106107
.seed(123L)
107108
.aggregation(Aggregation.SINGLE)
108-
.orientation(Orientation.UNDIRECTED)
109+
.direction(Direction.UNDIRECTED)
109110
.allowSelfLoops(RandomGraphGeneratorConfig.AllowSelfLoops.NO)
110111
.build().generate();
111112

@@ -189,7 +190,7 @@ void differentTrainAndPredictionGraph() {
189190
.relationshipDistribution(RelationshipDistribution.POWER_LAW)
190191
.relationshipPropertyProducer(PropertyProducer.fixedDouble("weight", 1.0))
191192
.aggregation(Aggregation.SINGLE)
192-
.orientation(Orientation.UNDIRECTED)
193+
.direction(Direction.UNDIRECTED)
193194
.allowSelfLoops(RandomGraphGeneratorConfig.AllowSelfLoops.NO)
194195
.build()
195196
.generate();

algo/src/test/java/org/neo4j/gds/leiden/GraphAggregationPhaseTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.junit.jupiter.api.Test;
2323
import org.neo4j.gds.Orientation;
24+
import org.neo4j.gds.api.schema.Direction;
2425
import org.neo4j.gds.core.concurrency.Pools;
2526
import org.neo4j.gds.core.utils.TerminationFlag;
2627
import org.neo4j.gds.core.utils.paged.HugeLongArray;
@@ -79,7 +80,7 @@ void testGraphAggregation() {
7980

8081
var aggregationPhase = new GraphAggregationPhase(
8182
graph,
82-
Orientation.UNDIRECTED,
83+
Direction.UNDIRECTED,
8384
communities,
8485
1L,
8586
Pools.DEFAULT_SINGLE_THREAD_POOL,

0 commit comments

Comments
 (0)