docs: def make_call_types(f, globals_d):
      # type: (Callable, Dict) -> Tuple[Dict[str, Anno], Anno]
      """Make a call_types dictionary that describes what arguments to pass to f
  
      Args:
          f: The function to inspect for argument names (without self)
          globals_d: A dictionary of globals to lookup annotation definitions in
      """
      arg_spec = getargspec(f)
      args = [k for k in arg_spec.args if k != "self"]
  
      defaults = {}  # type: Dict[str, Any]
      if arg_spec.defaults:
          default_args = args[-len(arg_spec.defaults):]
          for a, default in zip(default_args, arg_spec.defaults):
              defaults[a] = default
  
      if not getattr(f, "__annotations__", None):
          # Make string annotations from the type comment if there is one
          annotations = make_annotations(f, globals_d)
      else:
          annotations = f.__annotations__
  
      call_types = OrderedDict()  # type: Dict[str, Anno]
      for a in args:
          anno = anno_with_default(annotations[a], defaults.get(a, NO_DEFAULT))
          assert isinstance(anno, Anno), \
              "Argument %r has type %r which is not an Anno" % (a, anno)
          call_types[a] = anno
  
      return_type = anno_with_default(annotations.get("return", None))
      if return_type is Any:
          return_type = Anno("Any return value", Any, "return")
      assert return_type is None or isinstance(return_type, Anno), \
          "Return has type %r which is not an Anno" % (return_type,)
  
      return call_types, return_type