in graphjet-core/src/main/java/com/twitter/graphjet/algorithms/socialproof/SocialProofGenerator.java [165:199]
private void collectRightNodeInfo(
Long2DoubleMap leftSeedNodesWithWeight, LongSet rightNodeIds, byte[] validSocialProofTypes) {
ByteSet socialProofTypeSet = new ByteArraySet(validSocialProofTypes);
// Iterate through the set of left node seeds with weights.
// For each left node, go through its edges and collect the engagements on the right nodes
for (Long2DoubleMap.Entry entry: leftSeedNodesWithWeight.long2DoubleEntrySet()) {
long leftNode = entry.getLongKey();
EdgeIterator edgeIterator = leftIndexedBipartiteGraph.getLeftNodeEdges(leftNode);
if (edgeIterator == null) {
continue;
}
int numEdgePerNode = 0;
double weight = entry.getDoubleValue();
seenEdgesPerNode.clear();
// Sequentially iterate through the latest MAX_EDGES_PER_NODE edges per node
while (edgeIterator.hasNext() && numEdgePerNode++ < MAX_EDGES_PER_NODE) {
long rightNode = idMask.restore(edgeIterator.nextLong());
byte edgeType = edgeIterator.currentEdgeType();
boolean hasSeenRightNodeFromEdge =
seenEdgesPerNode.containsKey(rightNode) && seenEdgesPerNode.get(rightNode) == edgeType;
boolean isValidEngagement = rightNodeIds.contains(rightNode) &&
socialProofTypeSet.contains(edgeType);
if (hasSeenRightNodeFromEdge || !isValidEngagement) {
continue;
}
updateVisitedRightNodes(leftNode, rightNode, edgeType, weight);
}
}
}