docs: def _ParseTypeCheckString(type_check_string, stack_location, self_name):
    """Convert string version of a type_check into a python instance.
  
    Type checks can be either defined directly in python code or in a string.
    The syntax is exactly the same since we use eval to parse the string.
  
    :param int stack_location: For eval to get the right globals() scope,
      we require a stack_location to tell us the index in inspect.stack to
      where the string was defined.
    :param str self_name: Optional name of the class itself, which can be used
      to type check for an instance of a class you are currently defining, and
      thus would not be available in the globals namespace. If none, it will
      be quessed from the stack.
    """
    target_frame = inspect.stack()[stack_location][0]
    self_name = self_name or inspect.stack()[stack_location][3]
    eval_globals = target_frame.f_globals
    eval_locals = {self_name: Typename[self_name]}
  
    try:
      return eval(type_check_string, eval_globals, eval_locals)
    except:
      print "Exception while parsing", type_check_string
      raise