class_docstr: TUDataset contains lots of graph kernel datasets for graph classification.
  
  Parameters
  ----------
  name : str
      Dataset Name, such as ``ENZYMES``, ``DD``, ``COLLAB``, ``MUTAG``, can be the
      datasets name on `<https://chrsmrrs.github.io/datasets/docs/datasets/>`_.
  transform : callable, optional
      A transform that takes in a :class:`~dgl.DGLGraph` object and returns
      a transformed version. The :class:`~dgl.DGLGraph` object will be
      transformed before every access.
  
  Attributes
  ----------
  max_num_node : int
      Maximum number of nodes
  num_classes : int
      Number of classes
  num_labels : int
      (DEPRECATED, use num_classes instead) Number of classes
  
  Notes
  -----
  **IMPORTANT:** Some of the datasets have duplicate edges exist in the graphs, e.g.
  the edges in ``IMDB-BINARY`` are all duplicated.  DGL faithfully keeps the duplicates
  as per the original data.  Other frameworks such as PyTorch Geometric removes the
  duplicates by default.  You can remove the duplicate edges with :func:`dgl.to_simple`.
  
  Graphs may have node labels, node attributes, edge labels, and edge attributes,
  varing from different dataset.
  
  Labels are mapped to :math:`\lbrace 0,\cdots,n-1 \rbrace` where :math:`n` is the
  number of labels (some datasets have raw labels :math:`\lbrace -1, 1 \rbrace` which
  will be mapped to :math:`\lbrace 0, 1 \rbrace`). In previous versions, the minimum
  label was added so that :math:`\lbrace -1, 1 \rbrace` was mapped to
  :math:`\lbrace 0, 2 \rbrace`.
  
  The dataset sorts graphs by their labels.
  Shuffle is preferred before manual train/val split.
  
  Examples
  --------
  >>> data = TUDataset('DD')
  
  The dataset instance is an iterable
  
  >>> len(data)
  188
  >>> g, label = data[1024]
  >>> g
  Graph(num_nodes=88, num_edges=410,
        ndata_schemes={'_ID': Scheme(shape=(), dtype=torch.int64), 'node_labels': Scheme(shape=(1,), dtype=torch.int64)}
        edata_schemes={'_ID': Scheme(shape=(), dtype=torch.int64)})
  >>> label
  tensor([1])
  
  Batch the graphs and labels for mini-batch training
  
  >>> graphs, labels = zip(*[data[i] for i in range(16)])
  >>> batched_graphs = dgl.batch(graphs)
  >>> batched_labels = torch.tensor(labels)
  >>> batched_graphs
  Graph(num_nodes=9539, num_edges=47382,
        ndata_schemes={'node_labels': Scheme(shape=(1,), dtype=torch.int64), '_ID': Scheme(shape=(), dtype=torch.int64)}
        edata_schemes={'_ID': Scheme(shape=(), dtype=torch.int64)})
code: def statistics(self):
      return (
          self.graph_lists[0].ndata["feat"].shape[1],
          self.num_labels,
          self.max_num_node,
      )
  
imports: from __future__ import absolute_import
  import os
  import numpy
  from ..None import backend
  from ..convert import graph
  from .dgl_dataset import DGLBuiltinDataset
  from .utils import load_graphs, load_info, loadtxt, save_graphs, save_info
label_desc: Use image node_id 13 for calling the TUDataset obj's underlying member method code with example usage: obj.statistics() and returns: self,  self,  self