code: def write_gnina_conf(
      protein_filename: str,
      ligand_filename: str,
      conf_filename: str,
      num_modes: int = 9,
      exhaustiveness: Optional[int] = None,
      **kwargs,
  ) -> None:
      """Writes GNINA configuration file to disk.
  
      GNINA accepts a configuration file which provides options
      under which GNINA is invoked. This utility function writes a
      configuration file which directs GNINA to perform docking
      under the provided options.
  
      Parameters
      ----------
      protein_filename: str
          Filename for protein
      ligand_filename: str
          Filename for the ligand
      conf_filename: str
          Filename to write Autodock Vina configuration to.
      num_modes: int, optional (default 9)
          The number of binding modes GNINA should find
      exhaustiveness: int, optional
          The exhaustiveness of the search to be performed by GNINA
      kwargs:
          Args supported by GNINA documented here
          https://github.com/gnina/gnina#usage
  
      """
  
      with open(conf_filename, "w") as f:
          f.write("receptor = %s\n" % protein_filename)
          f.write("ligand = %s\n\n" % ligand_filename)
  
          f.write("autobox_ligand = %s\n\n" % protein_filename)
  
          if exhaustiveness is not None:
              f.write("exhaustiveness = %d\n" % exhaustiveness)
          f.write("num_modes = %d\n\n" % num_modes)
  
          for k, v in kwargs.items():
              f.write("%s = %s\n" % (str(k), str(v)))
  
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 2 for calling a global function with example usage: write_gnina_conf(protein_filename, ligand_filename, conf_filename, num_modes, exhaustiveness) without return types