class_docstr: The convolutional operator on :math:`\mathcal{X}`-transformed points
  from the `"PointCNN: Convolution On X-Transformed Points"
  <https://arxiv.org/abs/1801.07791>`_ paper
  .. math::
      \mathbf{x}^{\prime}_i = \mathrm{Conv}\left(\mathbf{K},
      \gamma_{\mathbf{\Theta}}(\mathbf{P}_i - \mathbf{p}_i) \times
      \left( h_\mathbf{\Theta}(\mathbf{P}_i - \mathbf{p}_i) \, \Vert \,
      \mathbf{x}_i \right) \right),
  where :math:`\mathbf{K}` and :math:`\mathbf{P}_i` denote the trainable
  filter and neighboring point positions of :math:`\mathbf{x}_i`,
  respectively.
  :math:`\gamma_{\mathbf{\Theta}}` and :math:`h_{\mathbf{\Theta}}` describe
  neural networks, *i.e.* MLPs, where :math:`h_{\mathbf{\Theta}}`
  individually lifts each point into a higher-dimensional space, and
  :math:`\gamma_{\mathbf{\Theta}}` computes the :math:`\mathcal{X}`-
  transformation matrix based on *all* points in a neighborhood.
  Args:
      in_channels (int): Size of each input sample.
      out_channels (int): Size of each output sample.
      dim (int): Point cloud dimensionality.
      kernel_size (int): Size of the convolving kernel, *i.e.* number of
          neighbors including self-loops.
      hidden_channels (int, optional): Output size of
          :math:`h_{\mathbf{\Theta}}`, *i.e.* dimensionality of lifted
          points. If set to :obj:`None`, will be automatically set to
          :obj:`in_channels / 4`. (default: :obj:`None`)
      dilation (int, optional): The factor by which the neighborhood is
          extended, from which :obj:`kernel_size` neighbors are then
          uniformly sampled. Can be interpreted as the dilation rate of
          classical convolutional operators. (default: :obj:`1`)
      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_cluster.knn_graph`.
code: def __repr__(self):
      return "{}({}, {})".format(
          self.__class__.__name__, self.in_channels, self.out_channels
      )
  
imports: from math import ceil
  import torch
  from torch.nn import Sequential, Linear, BatchNorm1d
  from torch.nn import ELU, Conv1d
  from torch_geometric.nn import Reshape
  from torch_geometric.nn.inits import reset
  from torch_points3d.core.spatial_ops import RandomSampler, FPSSampler, DilatedKNNNeighbourFinder
  from torch_points3d.core.base_conv.message_passing import *
label_desc: Use image node_id 4 for calling the XConv obj's underlying member method code with example usage: obj.__repr__() and returns: str