in graphjet-core/src/main/java/com/twitter/graphjet/algorithms/salsa/subgraph/SalsaSubgraphInternalState.java [182:208]
public void traverseSubgraphLeftToRight(SalsaNodeVisitor.NodeVisitor nodeVisitor) {
int currentEdgeArrayIndex = 0;
double weightResetToQueryNode = 0;
for (int i = 0; i < numLeftNodesAdded; i++) {
long leftNode = subgraphLeftNodes[i];
int degree = subgraphLeftNodeDegree[i];
double weightPerEdge = (double) currentLeftNodes.get(leftNode) / (double) degree;
weightResetToQueryNode += currentLeftNodes.get(leftNode) * salsaRequest.getResetProbability();
for (int j = 0; j < degree; j++) {
long rightNode = subgraphEdgesArray[currentEdgeArrayIndex];
long edgeMetadata = subgraphEdgeMetadataArray[currentEdgeArrayIndex];
byte edgeType = subgraphEdgeTypesArray[currentEdgeArrayIndex];
currentEdgeArrayIndex++;
int numVisits = visitRightNode(
nodeVisitor,
leftNode,
rightNode,
edgeType,
edgeMetadata,
weightPerEdge
);
salsaStats.updateVisitStatsPerRightNode(numVisits);
}
}
salsaStats.addToNumRHSVisits(currentEdgeArrayIndex);
resetCurrentLeftNodes(salsaRequest.getQueryNode(), (int) weightResetToQueryNode);
}