code: def node_homophily(graph, y):
      r"""Homophily measure from `Geom-GCN: Geometric Graph Convolutional
      Networks <https://arxiv.org/abs/2002.05287>`__
  
      We follow the practice of a later paper `Large Scale Learning on
      Non-Homophilous Graphs: New Benchmarks and Strong Simple Methods
      <https://arxiv.org/abs/2110.14446>`__ to call it node homophily.
  
      Mathematically it is defined as follows:
  
      .. math::
        \frac{1}{|\mathcal{V}|} \sum_{v \in \mathcal{V}} \frac{ | \{u
        \in \mathcal{N}(v): y_v = y_u \} |  } { |\mathcal{N}(v)| },
  
      where :math:`\mathcal{V}` is the set of nodes, :math:`\mathcal{N}(v)` is
      the predecessors of node :math:`v`, and :math:`y_v` is the class of node
      :math:`v`.
  
      Parameters
      ----------
      graph : DGLGraph
          The graph.
      y : torch.Tensor
          The node labels, which is a tensor of shape (|V|).
  
      Returns
      -------
      float
          The node homophily value.
  
      Examples
      --------
      >>> import dgl
      >>> import torch
  
      >>> graph = dgl.graph(([1, 2, 0, 4], [0, 1, 2, 3]))
      >>> y = torch.tensor([0, 0, 0, 0, 1])
      >>> dgl.node_homophily(graph, y)
      0.6000000238418579
      """
      check_pytorch()
      with graph.local_scope():
          # Handle the case where graph is of dtype int32.
          src, dst = get_long_edges(graph)
          # Compute y_v = y_u for all edges.
          graph.edata["same_class"] = (y[src] == y[dst]).float()
          graph.update_all(
              fn.copy_e("same_class", "m"),
              fn.mean("m", "same_class_deg"),
          )
          return graph.ndata["same_class_deg"].mean(dim=0).item()
  
imports: from .None import function, to_bidirected
label_desc: Use image node_id 3 for calling a global function with example usage: node_homophily(graph, y) and returns: graph