class_docstr: The dynamic neighborhood aggregation operator from the `"Just Jump:
  Towards Dynamic Neighborhood Aggregation in Graph Neural Networks"
  <https://arxiv.org/abs/1904.04849>`_ paper.
  
  .. math::
      \mathbf{x}_v^{(t)} = h_{\mathbf{\Theta}}^{(t)} \left( \mathbf{x}_{v
      \leftarrow v}^{(t)}, \left\{ \mathbf{x}_{v \leftarrow w}^{(t)} : w \in
      \mathcal{N}(v) \right\} \right)
  
  based on (multi-head) dot-product attention
  
  .. math::
      \mathbf{x}_{v \leftarrow w}^{(t)} = \textrm{Attention} \left(
      \mathbf{x}^{(t-1)}_v \, \mathbf{\Theta}_Q^{(t)}, [\mathbf{x}_w^{(1)},
      \ldots, \mathbf{x}_w^{(t-1)}] \, \mathbf{\Theta}_K^{(t)}, \,
      [\mathbf{x}_w^{(1)}, \ldots, \mathbf{x}_w^{(t-1)}] \,
      \mathbf{\Theta}_V^{(t)} \right)
  
  with :math:`\mathbf{\Theta}_Q^{(t)}, \mathbf{\Theta}_K^{(t)},
  \mathbf{\Theta}_V^{(t)}` denoting (grouped) projection matrices for query,
  key and value information, respectively.
  :math:`h^{(t)}_{\mathbf{\Theta}}` is implemented as a non-trainable
  version of :class:`torch_geometric.nn.conv.GCNConv`.
  
  .. note::
      In contrast to other layers, this operator expects node features as
      shape :obj:`[num_nodes, num_layers, channels]`.
  
  Args:
      channels (int): Size of each input/output sample.
      heads (int, optional): Number of multi-head-attentions.
          (default: :obj:`1`)
      groups (int, optional): Number of groups to use for all linear
          projections. (default: :obj:`1`)
      dropout (float, optional): Dropout probability of attention
          coefficients. (default: :obj:`0.`)
      cached (bool, optional): If set to :obj:`True`, the layer will cache
          the computation of :math:`\mathbf{\hat{D}}^{-1/2} \mathbf{\hat{A}}
          \mathbf{\hat{D}}^{-1/2}` on first execution, and will use the
          cached version for further executions.
          This parameter should only be set to :obj:`True` in transductive
          learning scenarios. (default: :obj:`False`)
      normalize (bool, optional): Whether to add self-loops and apply
          symmetric normalization. (default: :obj:`True`)
      add_self_loops (bool, optional): If set to :obj:`False`, will not add
          self-loops to the input graph. (default: :obj:`True`)
      bias (bool, optional): If set to :obj:`False`, the layer will not learn
          an additive bias. (default: :obj:`True`)
      **kwargs (optional): Additional arguments of
          :class:`torch_geometric.nn.conv.MessagePassing`.
  
  Shapes:
      - **input:**
        node features :math:`(|\mathcal{V}|, L, F)` where :math:`L` is the
        number of layers,
        edge indices :math:`(2, |\mathcal{E}|)`
      - **output:** node features :math:`(|\mathcal{V}|, F)`
class_docstr_tok: ["The","dynamic","neighborhood","aggregation","operator","from","the","`","``","Just","Jump",":","Towards","Dynamic","Neighborhood","Aggregation","in","Graph","Neural","Networks","''","<","https",":","\/\/arxiv.org\/abs\/1904.04849",">","`","_","paper",".","..","math",":",":","\\mathbf","{","x","}","_v^","{","(","t",")","}","=","h_","{","\\mathbf","{","\\Theta","}","}","^","{","(","t",")","}","\\left","(","\\mathbf","{","x","}","_","{","v","\\leftarrow","v","}","^","{","(","t",")","}",",","\\left\\","{","\\mathbf","{","x","}","_","{","v","\\leftarrow","w","}","^","{","(","t",")","}",":","w","\\in","\\mathcal","{","N","}","(","v",")","\\right\\","}","\\right",")","based","on","(","multi-head",")","dot-product","attention","..","math",":",":","\\mathbf","{","x","}","_","{","v","\\leftarrow","w","}","^","{","(","t",")","}","=","\\textrm","{","Attention","}","\\left","(","\\mathbf","{","x","}","^","{","(","t-1",")","}","_v","\\",",","\\mathbf","{","\\Theta","}","_Q^","{","(","t",")","}",",","[","\\mathbf","{","x","}","_w^","{","(","1",")","}",",","\\ldots",",","\\mathbf","{","x","}","_w^","{","(","t-1",")","}","]","\\",",","\\mathbf","{","\\Theta","}","_K^","{","(","t",")","}",",","\\",",","[","\\mathbf","{","x","}","_w^","{","(","1",")","}",",","\\ldots",",","\\mathbf","{","x","}","_w^","{","(","t-1",")","}","]","\\",",","\\mathbf","{","\\Theta","}","_V^","{","(","t",")","}","\\right",")","with",":","math",":","`","\\mathbf","{","\\Theta","}","_Q^","{","(","t",")","}",",","\\mathbf","{","\\Theta","}","_K^","{","(","t",")","}",",","\\mathbf","{","\\Theta","}","_V^","{","(","t",")","}","`","denoting","(","grouped",")","projection","matrices","for","query",",","key","and","value","information",",","respectively",".",":","math",":","`","h^","{","(","t",")","}","_","{","\\mathbf","{","\\Theta","}","}","`","is","implemented","as","a","non-trainable","version","of",":","class",":","`","torch_geometric.nn.conv.GCNConv","`",".","..","note",":",":","In","contrast","to","other","layers",",","this","operator","expects","node","features","as","shape",":","obj",":","`","[","num_nodes",",","num_layers",",","channels","]","`",".","Args",":","channels","(","int",")",":","Size","of","each","input\/output","sample",".","heads","(","int",",","optional",")",":","Number","of","multi-head-attentions",".","(","default",":",":","obj",":","`","1","`",")","groups","(","int",",","optional",")",":","Number","of","groups","to","use","for","all","linear","projections",".","(","default",":",":","obj",":","`","1","`",")","dropout","(","float",",","optional",")",":","Dropout","probability","of","attention","coefficients",".","(","default",":",":","obj",":","`","0.","`",")","cached","(","bool",",","optional",")",":","If","set","to",":","obj",":","`","True","`",",","the","layer","will","cache","the","computation","of",":","math",":","`","\\mathbf","{","\\hat","{","D","}","}","^","{","-1\/2","}","\\mathbf","{","\\hat","{","A","}","}","\\mathbf","{","\\hat","{","D","}","}","^","{","-1\/2","}","`","on","first","execution",",","and","will","use","the","cached","version","for","further","executions",".","This","parameter","should","only","be","set","to",":","obj",":","`","True","`","in","transductive","learning","scenarios",".","(","default",":",":","obj",":","`","False","`",")","normalize","(","bool",",","optional",")",":","Whether","to","add","self-loops","and","apply","symmetric","normalization",".","(","default",":",":","obj",":","`","True","`",")","add_self_loops","(","bool",",","optional",")",":","If","set","to",":","obj",":","`","False","`",",","will","not","add","self-loops","to","the","input","graph",".","(","default",":",":","obj",":","`","True","`",")","bias","(","bool",",","optional",")",":","If","set","to",":","obj",":","`","False","`",",","the","layer","will","not","learn","an","additive","bias",".","(","default",":",":","obj",":","`","True","`",")","*","*","kwargs","(","optional",")",":","Additional","arguments","of",":","class",":","`","torch_geometric.nn.conv.MessagePassing","`",".","Shapes",":","-","*","*","input",":","*","*","node","features",":","math",":","`","(","|\\mathcal","{","V","}","|",",","L",",","F",")","`","where",":","math",":","`","L","`","is","the","number","of","layers",",","edge","indices",":","math",":","`","(","2",",","|\\mathcal","{","E","}","|",")","`","-","*","*","output",":","*","*","node","features",":","math",":","`","(","|\\mathcal","{","V","}","|",",","F",")","`"]
docstr: Runs the forward pass of the module.
  
  Args:
      x (torch.Tensor): The input node features of shape
          :obj:`[num_nodes, num_layers, channels]`.
      edge_index (torch.Tensor or SparseTensor): The edge indices.
      edge_weight (torch.Tensor, optional): The edge weights.
          (default: :obj:`None`)
docstr_tok: ["Runs","the","forward","pass","of","the","module",".","Args",":","x","(","torch.Tensor",")",":","The","input","node","features","of","shape",":","obj",":","`","[","num_nodes",",","num_layers",",","channels","]","`",".","edge_index","(","torch.Tensor","or","SparseTensor",")",":","The","edge","indices",".","edge_weight","(","torch.Tensor",",","optional",")",":","The","edge","weights",".","(","default",":",":","obj",":","`","None","`",")"]
code: def forward(
      self,
      x: Tensor,
      edge_index: Adj,
      edge_weight: OptTensor = None,
  ) -> Tensor:
      r"""Runs the forward pass of the module.
  
      Args:
          x (torch.Tensor): The input node features of shape
              :obj:`[num_nodes, num_layers, channels]`.
          edge_index (torch.Tensor or SparseTensor): The edge indices.
          edge_weight (torch.Tensor, optional): The edge weights.
              (default: :obj:`None`)
      """
      if x.dim() != 3:
          raise ValueError(
              "Feature shape must be [num_nodes, num_layers, "
              "channels]."
          )
  
      if self.normalize:
          if isinstance(edge_index, Tensor):
              cache = self._cached_edge_index
              if cache is None:
                  edge_index, edge_weight = gcn_norm(  # yapf: disable
                      edge_index,
                      edge_weight,
                      x.size(self.node_dim),
                      False,
                      self.add_self_loops,
                      self.flow,
                      dtype=x.dtype,
                  )
                  if self.cached:
                      self._cached_edge_index = (
                          edge_index,
                          edge_weight,
                      )
              else:
                  edge_index, edge_weight = cache[0], cache[1]
  
          elif isinstance(edge_index, SparseTensor):
              cache = self._cached_adj_t
              if cache is None:
                  edge_index = gcn_norm(  # yapf: disable
                      edge_index,
                      edge_weight,
                      x.size(self.node_dim),
                      False,
                      self.add_self_loops,
                      self.flow,
                      dtype=x.dtype,
                  )
                  if self.cached:
                      self._cached_adj_t = edge_index
              else:
                  edge_index = cache
  
      # propagate_type: (x: Tensor, edge_weight: OptTensor)
      return self.propagate(edge_index, x=x, edge_weight=edge_weight)
  
imports: import math
  from typing import Optional
  import torch
  import torch.nn.functional
  from torch import Tensor
  from torch.nn import Parameter
  from torch_geometric.nn.conv import MessagePassing
  from torch_geometric.nn.conv.gcn_conv import gcn_norm
  from torch_geometric.nn.inits import kaiming_uniform, uniform
  from torch_geometric.typing import Adj, OptPairTensor, OptTensor, SparseTensor
label_desc: Use image node_id 3 for calling the DNAConv obj's underlying member method code with example usage: obj.forward(x, edge_index, edge_weight) and returns: self