class_docstr: Abstract class for calculating a set of features for a datapoint.
  
  This class is abstract and cannot be invoked directly. You'll
  likely only interact with this class if you're a developer. In
  that case, you might want to make a child class which
  implements the `_featurize` method for calculating features for
  a single datapoints if you'd like to make a featurizer for a
  new datatype.
class_docstr_tok: ["Abstract","class","for","calculating","a","set","of","features","for","a","datapoint",".","This","class","is","abstract","and","can","not","be","invoked","directly",".","You'll","likely","only","interact","with","this","class","if","you","'re","a","developer",".","In","that","case",",","you","might","want","to","make","a","child","class","which","implements","the","`","_featurize","`","method","for","calculating","features","for","a","single","datapoints","if","you","'d","like","to","make","a","featurizer","for","a","new","datatype","."]
docstr: Convert self to str representation.
  
  Returns
  -------
  str
      The string represents the class.
  
  Examples
  --------
  >>> import deepchem as dc
  >>> str(dc.feat.CircularFingerprint(size=1024, radius=4))
  'CircularFingerprint_radius_4_size_1024'
  >>> str(dc.feat.CGCNNFeaturizer())
  'CGCNNFeaturizer'
docstr_tok: ["Convert","self","to","str","representation",".","Returns","--","--","--","-","str","The","string","represents","the","class",".","Examples","--","--","--","--",">",">",">","import","deepchem","as","dc",">",">",">","str","(","dc.feat.CircularFingerprint","(","size=1024",",","radius=4",")",")","'CircularFingerprint_radius_4_size_1024'",">",">",">","str","(","dc.feat.CGCNNFeaturizer","(",")",")","'CGCNNFeaturizer","'"]
code: def __str__(self) -> str:
      """Convert self to str representation.
  
      Returns
      -------
      str
          The string represents the class.
  
      Examples
      --------
      >>> import deepchem as dc
      >>> str(dc.feat.CircularFingerprint(size=1024, radius=4))
      'CircularFingerprint_radius_4_size_1024'
      >>> str(dc.feat.CGCNNFeaturizer())
      'CGCNNFeaturizer'
      """
      args_spec = inspect.getfullargspec(self.__init__)  # type: ignore
      args_names = [arg for arg in args_spec.args if arg != "self"]
      args_num = len(args_names)
      args_default_values = [None for _ in range(args_num)]
      if args_spec.defaults is not None:
          defaults = list(args_spec.defaults)
          args_default_values[-len(defaults) :] = defaults
  
      override_args_info = ""
      for arg_name, default in zip(args_names, args_default_values):
          if arg_name in self.__dict__:
              arg_value = self.__dict__[arg_name]
              # validation
              # skip list
              if isinstance(arg_value, list):
                  continue
              if isinstance(arg_value, str):
                  # skip path string
                  if (
                      "\\/." in arg_value
                      or "/" in arg_value
                      or "." in arg_value
                  ):
                      continue
              # main logic
              if default != arg_value:
                  override_args_info += (
                      "_" + arg_name + "_" + str(arg_value)
                  )
      return self.__class__.__name__ + override_args_info
  
imports: import inspect
  import logging
  import numpy
  from typing import Any, Dict, Iterable, Optional, Tuple, Union, cast
  from deepchem.utils import get_print_threshold
  from deepchem.utils.typing import PymatgenStructure
label_desc: Use image node_id 5 for calling the Featurizer obj's underlying member method code with example usage: obj.__str__() and returns: unknown