Skip to content

Commit dfa6b81

Browse files
committed
Implement relationshipSchema and correct relationshipCount for result graphs
1 parent 349b1d1 commit dfa6b81

File tree

2 files changed

+107
-0
lines changed

2 files changed

+107
-0
lines changed

algo/src/main/java/org/neo4j/gds/similarity/nodesim/TopKGraph.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,23 @@
1919
*/
2020
package org.neo4j.gds.similarity.nodesim;
2121

22+
import org.neo4j.gds.RelationshipType;
23+
import org.neo4j.gds.api.DefaultValue;
2224
import org.neo4j.gds.api.Graph;
2325
import org.neo4j.gds.api.GraphAdapter;
26+
import org.neo4j.gds.api.PropertyState;
27+
import org.neo4j.gds.api.nodeproperties.ValueType;
2428
import org.neo4j.gds.api.properties.relationships.RelationshipConsumer;
2529
import org.neo4j.gds.api.properties.relationships.RelationshipWithPropertyConsumer;
30+
import org.neo4j.gds.api.schema.Direction;
31+
import org.neo4j.gds.api.schema.GraphSchema;
32+
import org.neo4j.gds.api.schema.ImmutableMutableGraphSchema;
33+
import org.neo4j.gds.api.schema.ImmutableRelationshipPropertySchema;
34+
import org.neo4j.gds.api.schema.MutableRelationshipSchema;
35+
import org.neo4j.gds.api.schema.MutableRelationshipSchemaEntry;
36+
import org.neo4j.gds.core.Aggregation;
37+
38+
import java.util.Map;
2639

2740
public class TopKGraph extends GraphAdapter {
2841

@@ -39,6 +52,44 @@ public int degree(long nodeId) {
3952
return topKList != null ? topKList.size() : 0;
4053
}
4154

55+
@Override
56+
public boolean hasRelationshipProperty() {
57+
return true;
58+
}
59+
60+
@Override
61+
public GraphSchema schema() {
62+
var relationshipSchema = new MutableRelationshipSchema(
63+
Map.of(
64+
RelationshipType.ALL_RELATIONSHIPS,
65+
new MutableRelationshipSchemaEntry(
66+
RelationshipType.ALL_RELATIONSHIPS,
67+
Direction.DIRECTED,
68+
Map.of(
69+
"similarity",
70+
ImmutableRelationshipPropertySchema.of(
71+
"similarity",
72+
ValueType.DOUBLE,
73+
DefaultValue.DEFAULT,
74+
PropertyState.TRANSIENT,
75+
Aggregation.NONE
76+
)
77+
)
78+
)
79+
)
80+
);
81+
82+
return ImmutableMutableGraphSchema.builder()
83+
.from(graph.schema())
84+
.relationshipSchema(relationshipSchema)
85+
.build();
86+
}
87+
88+
@Override
89+
public boolean isMultiGraph() {
90+
return super.isMultiGraph();
91+
}
92+
4293
@Override
4394
public long relationshipCount() {
4495
return topKMap.similarityPairCount();

algo/src/main/java/org/neo4j/gds/spanningtree/SpanningGraph.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,24 @@
1919
*/
2020
package org.neo4j.gds.spanningtree;
2121

22+
import org.neo4j.gds.RelationshipType;
23+
import org.neo4j.gds.api.DefaultValue;
2224
import org.neo4j.gds.api.Graph;
2325
import org.neo4j.gds.api.GraphAdapter;
26+
import org.neo4j.gds.api.PropertyState;
27+
import org.neo4j.gds.api.nodeproperties.ValueType;
2428
import org.neo4j.gds.api.properties.relationships.RelationshipConsumer;
2529
import org.neo4j.gds.api.properties.relationships.RelationshipWithPropertyConsumer;
30+
import org.neo4j.gds.api.schema.Direction;
31+
import org.neo4j.gds.api.schema.GraphSchema;
32+
import org.neo4j.gds.api.schema.ImmutableMutableGraphSchema;
33+
import org.neo4j.gds.api.schema.ImmutableRelationshipPropertySchema;
34+
import org.neo4j.gds.api.schema.MutableRelationshipSchema;
35+
import org.neo4j.gds.api.schema.MutableRelationshipSchemaEntry;
36+
import org.neo4j.gds.core.Aggregation;
2637

2738
import java.util.Arrays;
39+
import java.util.Map;
2840

2941
public class SpanningGraph extends GraphAdapter {
3042

@@ -44,6 +56,50 @@ public int degree(long nodeId) {
4456
}
4557
}
4658

59+
@Override
60+
public long relationshipCount() {
61+
// parent -> node for each node (root -> root included)
62+
return spanningTree.effectiveNodeCount();
63+
}
64+
65+
@Override
66+
public boolean hasRelationshipProperty() {
67+
return true;
68+
}
69+
70+
@Override
71+
public GraphSchema schema() {
72+
var relationshipSchema = new MutableRelationshipSchema(
73+
Map.of(
74+
RelationshipType.ALL_RELATIONSHIPS,
75+
new MutableRelationshipSchemaEntry(
76+
RelationshipType.ALL_RELATIONSHIPS,
77+
Direction.DIRECTED,
78+
Map.of(
79+
"cost",
80+
ImmutableRelationshipPropertySchema.of(
81+
"cost",
82+
ValueType.DOUBLE,
83+
DefaultValue.DEFAULT,
84+
PropertyState.TRANSIENT,
85+
Aggregation.NONE
86+
)
87+
)
88+
)
89+
)
90+
);
91+
92+
return ImmutableMutableGraphSchema.builder()
93+
.from(graph.schema())
94+
.relationshipSchema(relationshipSchema)
95+
.build();
96+
}
97+
98+
@Override
99+
public boolean isMultiGraph() {
100+
return false;
101+
}
102+
47103
@Override
48104
public void forEachRelationship(long nodeId, RelationshipConsumer consumer) {
49105
forEachRelationship(

0 commit comments

Comments
 (0)