class_docstr: The QM9 chemical data set of small molecules.
  
  In this dataset, nodes represent atoms and edges represent chemical bonds.
  There are 5 possible atom types (H, C, N, O, F) and 4 bond types (single,
  double, triple, aromatic).
  
  Node features represent the chemical properties of each atom and include:
  
  - The atomic number, one-hot encoded;
  - The atom's position in the X, Y, and Z dimensions;
  - The atomic charge;
  - The mass difference from the monoisotope;
  
  The edge features represent the type of chemical bond between two atoms,
  one-hot encoded.
  
  Each graph has an 19-dimensional label for regression.
  
  **Arguments**
  
  - `amount`: int, load this many molecules instead of the full dataset
  (useful for debugging).
  - `n_jobs`: number of CPU cores to use for reading the data (-1, to use all
  available cores).
code: def read(self):
      print("Loading QM9 dataset.")
      sdf_file = osp.join(self.path, "gdb9.sdf")
      data = load_sdf(
          sdf_file, amount=self.amount
      )  # Internal SDF format
  
      def read_mol(mol):
          x = np.array([atom_to_feature(atom) for atom in mol["atoms"]])
          a, e = mol_to_adj(mol)
          return x, a, e
  
      data = Parallel(n_jobs=self.n_jobs)(
          delayed(read_mol)(mol) for mol in tqdm(data, ncols=80)
      )
      x_list, a_list, e_list = list(zip(*data))
  
      # Load labels
      labels_file = osp.join(self.path, "gdb9.sdf.csv")
      labels = load_csv(labels_file)
      labels = labels.set_index("mol_id").values
      if self.amount is not None:
          labels = labels[: self.amount]
  
      return [
          Graph(x=x, a=a, e=e, y=y)
          for x, a, e, y in zip(x_list, a_list, e_list, labels)
      ]
  
file_path: spektral/spektral/datasets/qm9.py
imports: import os
  import os.path
  import numpy
  from joblib import Parallel, delayed
  from tensorflow.keras.utils import get_file
  from tqdm import tqdm
  from spektral.data import Dataset, Graph
  from spektral.utils import label_to_one_hot, sparse
  from spektral.utils.io import load_csv, load_sdf
label_desc: Use image node_id 3 for calling the QM9 obj's underlying member method code with example usage: obj.read() and returns: unknown, x,  a,  e