class_docstr: The Attentive FP model for molecular representation learning from the
  `"Pushing the Boundaries of Molecular Representation for Drug Discovery
  with the Graph Attention Mechanism"
  <https://pubs.acs.org/doi/10.1021/acs.jmedchem.9b00959>`_ paper, based on
  graph attention mechanisms.
  
  Args:
      in_channels (int): Size of each input sample.
      hidden_channels (int): Hidden node feature dimensionality.
      out_channels (int): Size of each output sample.
      edge_dim (int): Edge feature dimensionality.
      num_layers (int): Number of GNN layers.
      num_timesteps (int): Number of iterative refinement steps for global
          readout.
      dropout (float, optional): Dropout probability. (default: :obj:`0.0`)
code: def __repr__(self) -> str:
      return (
          f"{self.__class__.__name__}("
          f"in_channels={self.in_channels}, "
          f"hidden_channels={self.hidden_channels}, "
          f"out_channels={self.out_channels}, "
          f"edge_dim={self.edge_dim}, "
          f"num_layers={self.num_layers}, "
          f"num_timesteps={self.num_timesteps}"
          f")"
      )
  
imports: from typing import Optional
  import torch
  import torch.nn.functional
  from torch import Tensor
  from torch.nn import GRUCell, Linear, Parameter
  from torch_geometric.nn import GATConv, MessagePassing, global_add_pool
  from torch_geometric.nn.inits import glorot, zeros
  from torch_geometric.typing import Adj, OptTensor
  from torch_geometric.utils import softmax
label_desc: Use image node_id 4 for calling the AttentiveFP obj's underlying member method code with example usage: obj.__repr__() and returns: self, str, self, str, self, str, self, str, self, str, self, str, self, str