code: def max_pool(
      cluster: Tensor,
      data: Data,
      transform: Optional[Callable] = None,
  ) -> Data:
      r"""Pools and coarsens a graph given by the
      :class:`torch_geometric.data.Data` object according to the clustering
      defined in :attr:`cluster`.
      All nodes within the same cluster will be represented as one node.
      Final node features are defined by the *maximum* features of all nodes
      within the same cluster, node positions are averaged and edge indices are
      defined to be the union of the edge indices of all nodes within the same
      cluster.
  
      Args:
          cluster (torch.Tensor): The cluster vector
              :math:`\mathbf{c} \in \{ 0, \ldots, N - 1 \}^N`, which assigns each
              node to a specific cluster.
          data (Data): Graph data object.
          transform (callable, optional): A function/transform that takes in the
              coarsened and pooled :obj:`torch_geometric.data.Data` object and
              returns a transformed version. (default: :obj:`None`)
  
      :rtype: :class:`torch_geometric.data.Data`
      """
      cluster, perm = consecutive_cluster(cluster)
  
      x = None if data.x is None else _max_pool_x(cluster, data.x)
      index, attr = pool_edge(cluster, data.edge_index, data.edge_attr)
      batch = (
          None if data.batch is None else pool_batch(perm, data.batch)
      )
      pos = None if data.pos is None else pool_pos(cluster, data.pos)
  
      data = Batch(
          batch=batch, x=x, edge_index=index, edge_attr=attr, pos=pos
      )
  
      if transform is not None:
          data = transform(data)
  
      return data
  
file_path: pytorch_geometric/torch_geometric/nn/pool/max_pool.py
imports: from typing import Callable, Optional, Tuple
  from torch import Tensor
  from torch_geometric.data import Batch, Data
  from torch_geometric.nn.pool.consecutive import consecutive_cluster
  from torch_geometric.nn.pool.pool import pool_batch, pool_edge, pool_pos
  from torch_geometric.utils import add_self_loops, scatter
label_desc: Use image node_id 3 for calling a global function with example usage: max_pool(cluster, data, transform) and returns: data