class_docstr: The edge convolutional operator from the `"Dynamic Graph CNN for
  Learning on Point Clouds" <https://arxiv.org/abs/1801.07829>`_ paper.
  
  .. math::
      \mathbf{x}^{\prime}_i = \sum_{j \in \mathcal{N}(i)}
      h_{\mathbf{\Theta}}(\mathbf{x}_i \, \Vert \,
      \mathbf{x}_j - \mathbf{x}_i),
  
  where :math:`h_{\mathbf{\Theta}}` denotes a neural network, *.i.e.* a MLP.
  
  Args:
      nn (torch.nn.Module): A neural network :math:`h_{\mathbf{\Theta}}` that
          maps pair-wise concatenated node features :obj:`x` of shape
          :obj:`[-1, 2 * in_channels]` to shape :obj:`[-1, out_channels]`,
          *e.g.*, defined by :class:`torch.nn.Sequential`.
      aggr (str, optional): The aggregation scheme to use
          (:obj:`"add"`, :obj:`"mean"`, :obj:`"max"`).
          (default: :obj:`"max"`)
      **kwargs (optional): Additional arguments of
          :class:`torch_geometric.nn.conv.MessagePassing`.
  
  Shapes:
      - **input:**
        node features :math:`(|\mathcal{V}|, F_{in})` or
        :math:`((|\mathcal{V}|, F_{in}), (|\mathcal{V}|, F_{in}))`
        if bipartite,
        edge indices :math:`(2, |\mathcal{E}|)`
      - **output:** node features :math:`(|\mathcal{V}|, F_{out})` or
        :math:`(|\mathcal{V}_t|, F_{out})` if bipartite
class_docstr_tok: ["The","edge","convolutional","operator","from","the","`","``","Dynamic","Graph","CNN","for","Learning","on","Point","Clouds","''","<","https",":","\/\/arxiv.org\/abs\/1801.07829",">","`","_","paper",".","..","math",":",":","\\mathbf","{","x","}","^","{","\\prime","}","_i","=","\\sum_","{","j","\\in","\\mathcal","{","N","}","(","i",")","}","h_","{","\\mathbf","{","\\Theta","}","}","(","\\mathbf","{","x","}","_i","\\",",","\\Vert","\\",",","\\mathbf","{","x","}","_j","-","\\mathbf","{","x","}","_i",")",",","where",":","math",":","`","h_","{","\\mathbf","{","\\Theta","}","}","`","denotes","a","neural","network",",","*",".i.e",".","*","a","MLP",".","Args",":","nn","(","torch.nn.Module",")",":","A","neural","network",":","math",":","`","h_","{","\\mathbf","{","\\Theta","}","}","`","that","maps","pair-wise","concatenated","node","features",":","obj",":","`","x","`","of","shape",":","obj",":","`","[","-1",",","2","*","in_channels","]","`","to","shape",":","obj",":","`","[","-1",",","out_channels","]","`",",","*","e.g",".","*",",","defined","by",":","class",":","`","torch.nn.Sequential","`",".","aggr","(","str",",","optional",")",":","The","aggregation","scheme","to","use","(",":","obj",":","`","``","add","''","`",",",":","obj",":","`","``","mean","''","`",",",":","obj",":","`","``","max","''","`",")",".","(","default",":",":","obj",":","`","``","max","''","`",")","*","*","kwargs","(","optional",")",":","Additional","arguments","of",":","class",":","`","torch_geometric.nn.conv.MessagePassing","`",".","Shapes",":","-","*","*","input",":","*","*","node","features",":","math",":","`","(","|\\mathcal","{","V","}","|",",","F_","{","in","}",")","`","or",":","math",":","`","(","(","|\\mathcal","{","V","}","|",",","F_","{","in","}",")",",","(","|\\mathcal","{","V","}","|",",","F_","{","in","}",")",")","`","if","bipartite",",","edge","indices",":","math",":","`","(","2",",","|\\mathcal","{","E","}","|",")","`","-","*","*","output",":","*","*","node","features",":","math",":","`","(","|\\mathcal","{","V","}","|",",","F_","{","out","}",")","`","or",":","math",":","`","(","|\\mathcal","{","V","}","_t|",",","F_","{","out","}",")","`","if","bipartite"]
code: def __repr__(self) -> str:
      return f"{self.__class__.__name__}(nn={self.nn})"
  
file_path: pytorch_geometric/torch_geometric/nn/conv/edge_conv.py
imports: from typing import Callable, Optional, Union
  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, OptTensor, PairOptTensor, PairTensor
label_desc: Use image node_id 5 for calling the EdgeConv obj's underlying member method code with example usage: obj.__repr__() and returns: self, str, self, str