class_docstr: This class is used to evaluate functions and their returns.
  
  This is the most complicated class, because it contains the logic to
  transfer parameters. It is even more complicated, because there may be
  multiple calls to functions and recursion has to be avoided. But this is
  responsibility of the decorators.
class_docstr_tok: ["This","class","is","used","to","evaluate","functions","and","their","returns",".","This","is","the","most","complicated","class",",","because","it","contains","the","logic","to","transfer","parameters",".","It","is","even","more","complicated",",","because","there","may","be","multiple","calls","to","functions","and","recursion","has","to","be","avoided",".","But","this","is","responsibility","of","the","decorators","."]
code: def get_return_values(self, check_yields=False):
      funcdef = self.tree_node
      if funcdef.type == "lambdef":
          return self.eval_node(funcdef.children[-1])
  
      if check_yields:
          context_set = NO_CONTEXTS
          returns = get_yield_exprs(self.evaluator, funcdef)
      else:
          returns = funcdef.iter_return_stmts()
          context_set = docstrings.infer_return_types(
              self.function_context
          )
          context_set |= pep0484.infer_return_types(
              self.function_context
          )
  
      for r in returns:
          check = flow_analysis.reachability_check(self, funcdef, r)
          if check is flow_analysis.UNREACHABLE:
              debug.dbg("Return unreachable: %s", r)
          else:
              if check_yields:
                  context_set |= ContextSet.from_sets(
                      lazy_context.infer()
                      for lazy_context in self._get_yield_lazy_context(
                          r
                      )
                  )
              else:
                  try:
                      children = r.children
                  except AttributeError:
                      ctx = compiled.builtin_from_name(
                          self.evaluator, "None"
                      )
                      context_set |= ContextSet(ctx)
                  else:
                      context_set |= self.eval_node(children[1])
          if check is flow_analysis.REACHABLE:
              debug.dbg("Return reachable: %s", r)
              break
      return context_set
  
imports: from parso.python import tree
  from jedi._compatibility import use_metaclass
  from jedi import debug
  from jedi.evaluate.cache import evaluator_method_cache, CachedMetaClass
  from jedi.evaluate import compiled
  from jedi.evaluate import recursion
  from jedi.evaluate import docstrings
  from jedi.evaluate import pep0484
  from jedi.evaluate import flow_analysis
  from jedi.evaluate import helpers
  from jedi.evaluate.arguments import AnonymousArguments
  from jedi.evaluate.filters import ParserTreeFilter, FunctionExecutionFilter, ContextName, AbstractNameDefinition, ParamName
  from jedi.evaluate.base_context import ContextualizedNode, NO_CONTEXTS, ContextSet, TreeContext
  from jedi.evaluate.lazy_context import LazyKnownContexts, LazyKnownContext, LazyTreeContext
  from jedi.evaluate.context import iterable
  from jedi.evaluate.context import asynchronous
  from jedi import parser_utils
  from jedi.evaluate.parser_cache import get_yield_exprs
label_desc: Use image node_id 2 for calling the FunctionExecutionContext obj's underlying member method code with example usage: obj.get_return_values(check_yields) and returns: context_set, self