class_docstr: Model for Graph Property Prediction.
  
  This model proceeds as follows:
  
  * Update node representations in graphs with a variant of GAT, where a
      linear additive form of attention is applied. Attention Weights are derived
      by concatenating the node and edge features for each bond.
  * Update node representations with multiple rounds of message passing.
  * For each layer has, residual connections with its previous layer.
  * The final molecular representation is computed by combining the representations
      of all nodes in the molecule.
  * Perform the final prediction using a linear layer
  
  Examples
  --------
  >>> import deepchem as dc
  >>> from deepchem.models import PagtnModel
  >>> # preparing dataset
  >>> smiles = ["C1CCC1", "CCC"]
  >>> labels = [0., 1.]
  >>> featurizer = dc.feat.PagtnMolGraphFeaturizer(max_length=5)
  >>> X = featurizer.featurize(smiles)
  >>> dataset = dc.data.NumpyDataset(X=X, y=labels)
  >>> # training model
  >>> model = PagtnModel(mode='classification', n_tasks=1,
  ...                    batch_size=16, learning_rate=0.001)
  >>> loss = model.fit(dataset, nb_epoch=5)
  
  References
  ----------
  .. [1] Benson Chen, Regina Barzilay, Tommi Jaakkola. "Path-Augmented
      Graph Transformer Network." arXiv:1905.12712
  
  Notes
  -----
  This class requires DGL (https://github.com/dmlc/dgl) and DGL-LifeSci
  (https://github.com/awslabs/dgl-lifesci) to be installed.
docstr: Create batch data for Pagtn.
  
  Parameters
  ----------
  batch: tuple
      The tuple is ``(inputs, labels, weights)``.
  
  Returns
  -------
  inputs: DGLGraph
      DGLGraph for a batch of graphs.
  labels: list of torch.Tensor or None
      The graph labels.
  weights: list of torch.Tensor or None
      The weights for each sample or sample/task pair converted to torch.Tensor.
code: def _prepare_batch(self, batch):
      """Create batch data for Pagtn.
  
      Parameters
      ----------
      batch: tuple
          The tuple is ``(inputs, labels, weights)``.
  
      Returns
      -------
      inputs: DGLGraph
          DGLGraph for a batch of graphs.
      labels: list of torch.Tensor or None
          The graph labels.
      weights: list of torch.Tensor or None
          The weights for each sample or sample/task pair converted to torch.Tensor.
      """
      try:
          import dgl
      except:
          raise ImportError("This class requires dgl.")
  
      inputs, labels, weights = batch
      dgl_graphs = [graph.to_dgl_graph() for graph in inputs[0]]
      inputs = dgl.batch(dgl_graphs).to(self.device)
      _, labels, weights = super(PagtnModel, self)._prepare_batch(
          ([], labels, weights)
      )
      return inputs, labels, weights
  
file_path: deepchem/deepchem/models/torch_models/pagtn.py
imports: import torch.nn
  import torch.nn.functional
  from deepchem.models.losses import Loss, L2Loss, SparseSoftmaxCrossEntropy
  from deepchem.models.torch_models.torch_model import TorchModel
label_desc: Use image node_id 2 for calling the PagtnModel obj's underlying member method code with example usage: obj._prepare_batch(batch) and returns: inputs,  labels,  weights