docstr: Return a (n_user, K) matrix of recommended items for each user
docstr_tok: ["Return","a","(","n_user",",","K",")","matrix","of","recommended","items","for","each","user"]
code: def recommend(self, full_graph, K, h_user, h_item):
      """
      Return a (n_user, K) matrix of recommended items for each user
      """
      graph_slice = full_graph.edge_type_subgraph(
          [self.user_to_item_etype]
      )
      n_users = full_graph.num_nodes(self.user_ntype)
      latest_interactions = dgl.sampling.select_topk(
          graph_slice, 1, self.timestamp, edge_dir="out"
      )
      user, latest_items = latest_interactions.all_edges(
          form="uv", order="srcdst"
      )
      # each user should have at least one "latest" interaction
      assert torch.equal(user, torch.arange(n_users))
  
      recommended_batches = []
      user_batches = torch.arange(n_users).split(self.batch_size)
      for user_batch in user_batches:
          latest_item_batch = latest_items[user_batch].to(
              device=h_item.device
          )
          dist = h_item[latest_item_batch] @ h_item.t()
          # exclude items that are already interacted
          for i, u in enumerate(user_batch.tolist()):
              interacted_items = full_graph.successors(
                  u, etype=self.user_to_item_etype
              )
              dist[i, interacted_items] = -np.inf
          recommended_batches.append(dist.topk(K, 1)[1])
  
      recommendations = torch.cat(recommended_batches, 0)
      return recommendations
  
file_path: dgl/examples/pytorch/pinsage/evaluation.py
imports: import argparse
  import pickle
  import dgl
  import numpy
  import torch
label_desc: Use image node_id 2 for calling the LatestNNRecommender obj's underlying member method code with example usage: obj.recommend(full_graph, K, h_user, h_item) and returns: recommendations