class_docstr: Featurizes binding pockets with information about chemical
  environments.
  
  In many applications, it's desirable to look at binding pockets on
  macromolecules which may be good targets for potential ligands or
  other molecules to interact with. A `BindingPocketFeaturizer`
  expects to be given a macromolecule, and a list of pockets to
  featurize on that macromolecule. These pockets should be of the form
  produced by a `dc.dock.BindingPocketFinder`, that is as a list of
  `dc.utils.CoordinateBox` objects.
  
  The base featurization in this class's featurization is currently
  very simple and counts the number of residues of each type present
  in the pocket. It's likely that you'll want to overwrite this
  implementation for more sophisticated downstream usecases. Note that
  this class's implementation will only work for proteins and not for
  other macromolecules
  
  Note
  ----
  This class requires mdtraj to be installed.
docstr: Calculate atomic coodinates.
  
  Parameters
  ----------
  protein_file: str
      Location of PDB file. Will be loaded by MDTraj
  pockets: List[CoordinateBox]
      List of `dc.utils.CoordinateBox` objects.
  
  Returns
  -------
  np.ndarray
      A numpy array of shale `(len(pockets), n_residues)`
docstr_tok: ["Calculate","atomic","coodinates",".","Parameters","--","--","--","--","--","protein_file",":","str","Location","of","PDB","file",".","Will","be","loaded","by","MDTraj","pockets",":","List","[","CoordinateBox","]","List","of","`","dc.utils.CoordinateBox","`","objects",".","Returns","--","--","--","-","np.ndarray","A","numpy","array","of","shale","`","(","len","(","pockets",")",",","n_residues",")","`"]
code: def featurize(  # type: ignore[override]
      self, protein_file: str, pockets: List[CoordinateBox]
  ) -> np.ndarray:
      """
      Calculate atomic coodinates.
  
      Parameters
      ----------
      protein_file: str
          Location of PDB file. Will be loaded by MDTraj
      pockets: List[CoordinateBox]
          List of `dc.utils.CoordinateBox` objects.
  
      Returns
      -------
      np.ndarray
          A numpy array of shale `(len(pockets), n_residues)`
      """
      try:
          import mdtraj
      except ModuleNotFoundError:
          raise ImportError(
              "This class requires mdtraj to be installed."
          )
  
      protein_coords = load_molecule(
          protein_file, add_hydrogens=False, calc_charges=False
      )[0]
      mapping = boxes_to_atoms(protein_coords, pockets)
      protein = mdtraj.load(protein_file)
      n_pockets = len(pockets)
      n_residues = len(BindingPocketFeaturizer.residues)
      res_map = dict(
          zip(BindingPocketFeaturizer.residues, range(n_residues))
      )
      all_features = np.zeros((n_pockets, n_residues))
      for pocket_num, pocket in enumerate(pockets):
          pocket_atoms = mapping[pocket]
          for ind, atom in enumerate(pocket_atoms):
              atom_name = str(protein.top.atom(atom))
              # atom_name is of format RESX-ATOMTYPE
              # where X is a 1 to 4 digit number
              residue = atom_name[:3]
              if residue not in res_map:
                  logger.info(
                      "Warning: Non-standard residue in PDB file"
                  )
                  continue
              all_features[pocket_num, res_map[residue]] += 1
      return all_features
  
file_path: deepchem/deepchem/feat/binding_pocket_features.py
imports: import numpy
  import logging
  from typing import Dict, List
  from deepchem.feat import Featurizer
  from deepchem.utils.coordinate_box_utils import CoordinateBox
  from deepchem.utils.rdkit_utils import load_molecule
label_desc: Use image node_id 1 for calling the BindingPocketFeaturizer obj's underlying member method code with example usage: obj.featurize(protein_file, pockets) and returns: all_features