class_docstr: The PointGNN operator from the `"Point-GNN: Graph Neural Network for
  3D Object Detection in a Point Cloud" <https://arxiv.org/abs/2003.01251>`_
  paper.
  
  .. math::
  
      \Delta \textrm{pos}_i &= h_{\mathbf{\Theta}}(\mathbf{x}_i)
  
      \mathbf{e}_{j,i} &= f_{\mathbf{\Theta}}(\textrm{pos}_j -
      \textrm{pos}_i + \Delta \textrm{pos}_i, \mathbf{x}_j)
  
      \mathbf{x}^{\prime}_i &= g_{\mathbf{\Theta}}(\max_{j \in
      \mathcal{N}(i)} \mathbf{e}_{j,i}) + \mathbf{x}_i
  
  The relative position is used in the message passing step to introduce
  global translation invariance.
  To also counter shifts in the local neighborhood of the center node, the
  authors propose to utilize an alignment offset.
  The graph should be statically constructed using radius-based cutoff.
  
  Args:
      mlp_h (torch.nn.Module): A neural network :math:`h_{\mathbf{\Theta}}`
          that maps node features of size :math:`F_{in}` to three-dimensional
          coordination offsets :math:`\Delta \textrm{pos}_i`.
      mlp_f (torch.nn.Module): A neural network :math:`f_{\mathbf{\Theta}}`
          that computes :math:`\mathbf{e}_{j,i}` from the features of
          neighbors of size :math:`F_{in}` and the three-dimensional vector
          :math:`\textrm{pos_j} - \textrm{pos_i} + \Delta \textrm{pos}_i`.
      mlp_g (torch.nn.Module): A neural network :math:`g_{\mathbf{\Theta}}`
          that maps the aggregated edge features back to :math:`F_{in}`.
      **kwargs (optional): Additional arguments of
          :class:`torch_geometric.nn.conv.MessagePassing`.
  
  Shapes:
      - **input:**
        node features :math:`(|\mathcal{V}|, F_{in})`,
        positions :math:`(|\mathcal{V}|, 3)`,
        edge indices :math:`(2, |\mathcal{E}|)`,
      - **output:** node features :math:`(|\mathcal{V}|, F_{in})`
class_docstr_tok: ["The","PointGNN","operator","from","the","`","``","Point-GNN",":","Graph","Neural","Network","for","3D","Object","Detection","in","a","Point","Cloud","''","<","https",":","\/\/arxiv.org\/abs\/2003.01251",">","`","_","paper",".","..","math",":",":","\\Delta","\\textrm","{","pos","}","_i","&","=","h_","{","\\mathbf","{","\\Theta","}","}","(","\\mathbf","{","x","}","_i",")","\\mathbf","{","e","}","_","{","j",",","i","}","&","=","f_","{","\\mathbf","{","\\Theta","}","}","(","\\textrm","{","pos","}","_j","-","\\textrm","{","pos","}","_i","+","\\Delta","\\textrm","{","pos","}","_i",",","\\mathbf","{","x","}","_j",")","\\mathbf","{","x","}","^","{","\\prime","}","_i","&","=","g_","{","\\mathbf","{","\\Theta","}","}","(","\\max_","{","j","\\in","\\mathcal","{","N","}","(","i",")","}","\\mathbf","{","e","}","_","{","j",",","i","}",")","+","\\mathbf","{","x","}","_i","The","relative","position","is","used","in","the","message","passing","step","to","introduce","global","translation","invariance",".","To","also","counter","shifts","in","the","local","neighborhood","of","the","center","node",",","the","authors","propose","to","utilize","an","alignment","offset",".","The","graph","should","be","statically","constructed","using","radius-based","cutoff",".","Args",":","mlp_h","(","torch.nn.Module",")",":","A","neural","network",":","math",":","`","h_","{","\\mathbf","{","\\Theta","}","}","`","that","maps","node","features","of","size",":","math",":","`","F_","{","in","}","`","to","three-dimensional","coordination","offsets",":","math",":","`","\\Delta","\\textrm","{","pos","}","_i","`",".","mlp_f","(","torch.nn.Module",")",":","A","neural","network",":","math",":","`","f_","{","\\mathbf","{","\\Theta","}","}","`","that","computes",":","math",":","`","\\mathbf","{","e","}","_","{","j",",","i","}","`","from","the","features","of","neighbors","of","size",":","math",":","`","F_","{","in","}","`","and","the","three-dimensional","vector",":","math",":","`","\\textrm","{","pos_j","}","-","\\textrm","{","pos_i","}","+","\\Delta","\\textrm","{","pos","}","_i","`",".","mlp_g","(","torch.nn.Module",")",":","A","neural","network",":","math",":","`","g_","{","\\mathbf","{","\\Theta","}","}","`","that","maps","the","aggregated","edge","features","back","to",":","math",":","`","F_","{","in","}","`",".","*","*","kwargs","(","optional",")",":","Additional","arguments","of",":","class",":","`","torch_geometric.nn.conv.MessagePassing","`",".","Shapes",":","-","*","*","input",":","*","*","node","features",":","math",":","`","(","|\\mathcal","{","V","}","|",",","F_","{","in","}",")","`",",","positions",":","math",":","`","(","|\\mathcal","{","V","}","|",",","3",")","`",",","edge","indices",":","math",":","`","(","2",",","|\\mathcal","{","E","}","|",")","`",",","-","*","*","output",":","*","*","node","features",":","math",":","`","(","|\\mathcal","{","V","}","|",",","F_","{","in","}",")","`"]
code: def forward(self, x: Tensor, pos: Tensor, edge_index: Adj) -> Tensor:
      # propagate_type: (x: Tensor, pos: Tensor)
      out = self.propagate(edge_index, x=x, pos=pos)
      out = self.mlp_g(out)
      return x + out
  
file_path: pytorch_geometric/torch_geometric/nn/conv/point_gnn_conv.py
imports: import torch
  from torch import Tensor
  from torch_geometric.nn.conv import MessagePassing
  from torch_geometric.nn.inits import reset
  from torch_geometric.typing import Adj
label_desc: Use image node_id 3 for calling the PointGNNConv obj's underlying member method code with example usage: obj.forward(x, pos, edge_index) and returns: unknown