class_docstr: Performs MLP aggregation in which the elements to aggregate are
  flattened into a single vectorial representation, and are then processed by
  a Multi-Layer Perceptron (MLP), as described in the `"Graph Neural Networks
  with Adaptive Readouts" <https://arxiv.org/abs/2211.04952>`_ paper.
  
  .. note::
  
      :class:`GRUAggregation` requires sorted indices :obj:`index` as input.
      Specifically, if you use this aggregation as part of
      :class:`~torch_geometric.nn.conv.MessagePassing`, ensure that
      :obj:`edge_index` is sorted by destination nodes, either by manually
      sorting edge indices via :meth:`~torch_geometric.utils.sort_edge_index`
      or by calling :meth:`torch_geometric.data.Data.sort`.
  
  .. warning::
  
      :class:`MLPAggregation` is not a permutation-invariant operator.
  
  Args:
      in_channels (int): Size of each input sample.
      out_channels (int): Size of each output sample.
      max_num_elements (int): The maximum number of elements to aggregate per
          group.
      **kwargs (optional): Additional arguments of
          :class:`torch_geometric.nn.models.MLP`.
code: def __init__(
      self,
      in_channels: int,
      out_channels: int,
      max_num_elements: int,
      **kwargs,
  ):
      super().__init__()
  
      self.in_channels = in_channels
      self.out_channels = out_channels
      self.max_num_elements = max_num_elements
  
      from torch_geometric.nn import MLP
  
      self.mlp = MLP(
          in_channels=in_channels * max_num_elements,
          out_channels=out_channels,
          **kwargs,
      )
  
      self.reset_parameters()
  
file_path: pytorch_geometric/torch_geometric/nn/aggr/mlp.py
imports: from typing import Optional
  from torch import Tensor
  from torch_geometric.nn.aggr import Aggregation
label_desc: Use image node_id 1 to create a new MLPAggregation object from inherited base classes: Aggregation with example: obj = MLPAggregation(in_channels, out_channels, max_num_elements)