code: def read_gnina_log(log_file: str) -> np.ndarray:
      """Read GNINA logfile and get docking scores.
  
      GNINA writes computed binding affinities to a logfile.
  
      Parameters
      ----------
      log_file: str
          Filename of logfile generated by GNINA.
  
      Returns
      -------
      scores: np.array, dimension (num_modes, 3)
          Array of binding affinity (kcal/mol), CNN pose score,
          and CNN affinity for each binding mode.
  
      """
  
      scores = []
      lines = open(log_file).readlines()
      mode_start = np.inf
      for idx, line in enumerate(lines):
          if line[:6] == "-----+":
              mode_start = idx
          if idx > mode_start:
              mode = line.split()
              score = [float(x) for x in mode[1:]]
              scores.append(score)
  
      return np.array(scores)
  
file_path: deepchem/deepchem/utils/docking_utils.py
imports: from typing import List, Optional, Tuple
  import os
  import numpy
  from deepchem.utils.typing import RDKitMol
  from deepchem.utils.pdbqt_utils import pdbqt_to_pdb
label_desc: Use image node_id 3 for calling a global function with example usage: read_gnina_log(log_file) and returns: np