code: def copy_v(g, x_node, etype=None):
      """Compute new edge data by fetching from destination node data.
  
      Given an input graph :math:`G(V, E)` (or a unidirectional bipartite graph
      :math:`G(V_{src}, V_{dst}, E)`) and an input tensor :math:`X`,
      the operator computes a tensor :math:`Y` storing the new edge data.
      For each edge :math:`e=(u,v) \\in E`, it computes:
  
      .. math:
  
          Y_e = X_v
  
      Parameters
      ----------
      g : DGLGraph
          The input graph.
      x_node : Tensor
          The tensor storing the destination node data. Shape :math:`(|V_{dst}|, *)`.
      etype : str or (str, str, str), optional
          Edge type. If not specified, the input graph must have
          only one type of edges.
  
      Returns
      -------
      Tensor
          The tensor storing the new edge data. Shape :math:`(|E|, *)`.
  
      Examples
      --------
  
      **Homogeneous graph**
  
      >>> import torch, dgl
      >>> g = dgl.rand_graph(100, 500)  # a random graph of 100 nodes, 500 edges
      >>> x = torch.randn(g.num_nodes(), 5)  # 5 features
      >>> y = dgl.copy_v(g, x)
      >>> print(y.shape)
      (500, 5)
  
      **Heterogeneous graph**
  
      >>> hg = dgl.heterograph({
      ...     ('user', 'follow', 'user'): ([0, 1, 2], [2, 3, 4]),
      ...     ('user', 'like', 'movie'): ([3, 3, 1, 2], [0, 0, 1, 1])
      ... })
      >>> x = torch.randn(hg.num_nodes('movie'), 5)
      >>> y = dgl.copy_v(hg, x, etype='like')
      >>> print(y.shape)
      (4, 5)
      """
      etype_subg = g if etype is None else g[etype]
      return ops.gsddmm(etype_subg, "copy_rhs", None, x_node)
  
imports: import sys
  from ..None import ops
label_desc: Use image node_id 2 for calling a global function with example usage: copy_v(g, x_node, etype) and returns: ops