class_docstr: The GATv2 operator from the `"How Attentive are Graph Attention
  Networks?" <https://arxiv.org/abs/2105.14491>`_ paper, which fixes the
  static attention problem of the standard
  :class:`~torch_geometric.conv.GATConv` layer.
  Since the linear layers in the standard GAT are applied right after each
  other, the ranking of attended nodes is unconditioned on the query node.
  In contrast, in :class:`GATv2`, every node can attend to any other node.
  
  .. math::
      \mathbf{x}^{\prime}_i = \alpha_{i,i}\mathbf{\Theta}\mathbf{x}_{i} +
      \sum_{j \in \mathcal{N}(i)} \alpha_{i,j}\mathbf{\Theta}\mathbf{x}_{j},
  
  where the attention coefficients :math:`\alpha_{i,j}` are computed as
  
  .. math::
      \alpha_{i,j} =
      \frac{
      \exp\left(\mathbf{a}^{\top}\mathrm{LeakyReLU}\left(\mathbf{\Theta}
      [\mathbf{x}_i \, \Vert \, \mathbf{x}_j]
      \right)\right)}
      {\sum_{k \in \mathcal{N}(i) \cup \{ i \}}
      \exp\left(\mathbf{a}^{\top}\mathrm{LeakyReLU}\left(\mathbf{\Theta}
      [\mathbf{x}_i \, \Vert \, \mathbf{x}_k]
      \right)\right)}.
  
  If the graph has multi-dimensional edge features :math:`\mathbf{e}_{i,j}`,
  the attention coefficients :math:`\alpha_{i,j}` are computed as
  
  .. math::
      \alpha_{i,j} =
      \frac{
      \exp\left(\mathbf{a}^{\top}\mathrm{LeakyReLU}\left(\mathbf{\Theta}
      [\mathbf{x}_i \, \Vert \, \mathbf{x}_j \, \Vert \, \mathbf{e}_{i,j}]
      \right)\right)}
      {\sum_{k \in \mathcal{N}(i) \cup \{ i \}}
      \exp\left(\mathbf{a}^{\top}\mathrm{LeakyReLU}\left(\mathbf{\Theta}
      [\mathbf{x}_i \, \Vert \, \mathbf{x}_k \, \Vert \, \mathbf{e}_{i,k}]
      \right)\right)}.
  
  Args:
      in_channels (int or tuple): Size of each input sample, or :obj:`-1` to
          derive the size from the first input(s) to the forward method.
          A tuple corresponds to the sizes of source and target
          dimensionalities.
      out_channels (int): Size of each output sample.
      heads (int, optional): Number of multi-head-attentions.
          (default: :obj:`1`)
      concat (bool, optional): If set to :obj:`False`, the multi-head
          attentions are averaged instead of concatenated.
          (default: :obj:`True`)
      negative_slope (float, optional): LeakyReLU angle of the negative
          slope. (default: :obj:`0.2`)
      edge_dim (int, optional): Edge feature dimensionality (in case
          there are any). (default: :obj:`None`)
      bias (bool, optional): If set to :obj:`False`, the layer will not learn
          an additive bias. (default: :obj:`True`)
      share_weights (bool, optional): If set to :obj:`True`, the same matrix
          will be applied to the source and the target node of every edge.
          (default: :obj:`False`)
code: def reset_parameters(self):
      self.lin_src.reset_parameters()
      self.lin_dst.reset_parameters()
      if self.lin_edge is not None:
          self.lin_edge.reset_parameters()
  
      torch_geometric.nn.inits.glorot(
          self.att.view(-1, self.heads, self.out_channels)
      )
  
      torch_geometric.nn.inits.zeros(self.bias)
  
file_path: cugraph/python/cugraph-pyg/cugraph_pyg/nn/conv/gatv2_conv.py
imports: from typing import Optional, Tuple, Union
  from cugraph.utilities.utils import import_optional
  from pylibcugraphops.pytorch.operators import mha_gat_v2_n2n
  from .base import BaseConv
label_desc: Use image node_id 2 for calling the GATv2Conv obj's underlying member method code with example usage: obj.reset_parameters() without return types