code: def neighbor_average_features(g, args):
      """
      Compute multi-hop neighbor-averaged node features
      """
      print("Compute neighbor-averaged feats")
      g.ndata["feat_0"] = g.ndata["feat"]
      for hop in range(1, args.R + 1):
          g.update_all(
              fn.copy_u(f"feat_{hop-1}", "msg"),
              fn.mean("msg", f"feat_{hop}"),
          )
      res = []
      for hop in range(args.R + 1):
          res.append(g.ndata.pop(f"feat_{hop}"))
  
      if args.dataset == "ogbn-mag":
          # For MAG dataset, only return features for target node types (i.e.
          # paper nodes)
          target_mask = g.ndata["target_mask"]
          target_ids = g.ndata[dgl.NID][target_mask]
          num_target = target_mask.sum().item()
          new_res = []
          for x in res:
              feat = torch.zeros(
                  (num_target,) + x.shape[1:],
                  dtype=x.dtype,
                  device=x.device,
              )
              feat[target_ids] = x[target_mask]
              new_res.append(feat)
          res = new_res
      return res
  
imports: import argparse
  import time
  import dgl
  import dgl.function
  import numpy
  import torch
  import torch.nn
  from dataset import load_dataset
label_desc: Use image node_id 2 for calling a global function with example usage: neighbor_average_features(g, args) and returns: res