private void collectRightNodeInfo()

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);
      }
    }
  }