def METHOD_NAME(
    self,
    x: Tensor,
    edge_index: Adj,
    batch: Optional[torch.Tensor] = None,
    **kwargs,
) -> Tensor:
    r"""Runs the forward pass of the module."""
    hs = []
    if self.conv is not None:  # Local MPNN.
        h = self.conv(x, edge_index, **kwargs)
        h = F.dropout(h, p=self.dropout, training=self.training)
        h = h + x
        if self.norm1 is not None:
            if self.norm_with_batch:
                h = self.norm1(h, batch=batch)
            else:
                h = self.norm1(h)
        hs.append(h)
    # Global attention transformer-style model.
    h, mask = to_dense_batch(x, batch)
    if isinstance(self.attn, torch.nn.MultiheadAttention):
        h, _ = self.attn(h, h, h, key_padding_mask=~mask,
                         need_weights=False)
    elif isinstance(self.attn, PerformerAttention):
        h = self.attn(h, mask=mask)
    h = h[mask]
    h = F.dropout(h, p=self.dropout, training=self.training)
    h = h + x  # Residual connection.
    if self.norm2 is not None:
        if self.norm_with_batch:
            h = self.norm2(h, batch=batch)
        else:
            h = self.norm2(h)
    hs.append(h)
    out = sum(hs)  # Combine local and global outputs.
    out = out + self.mlp(out)
    if self.norm3 is not None:
        if self.norm_with_batch:
            out = self.norm3(out, batch=batch)
        else:
            out = self.norm3(out)
    return out