class_docstr: Infer symbolic type for all AST node. 
class_docstr_tok: ["Infer","symbolic","type","for","all","AST","node","."]
code: def visit_FunctionDef(self, node):
      self.delayed_types = set()
      self.curr_locals_declaration = self.gather(
          LocalNodeDeclarations, node
      )
      self.current = node
      self.typedefs = defaultdict(list)
      self.name_to_nodes = defaultdict(ordered_set)
      for arg in node.args.args:
          self.name_to_nodes[arg.id].append(arg)
  
      self.yield_points = self.gather(YieldPoints, node)
  
      self.generic_visit(node)
  
      for delayed_node in self.delayed_types:
          delayed_type = self.result[delayed_node]
          all_types = ordered_set(
              self.result[ty]
              for ty in self.name_to_nodes[delayed_node.id]
          )
          final_type = self.combined(*all_types)
          delayed_type.final_type = final_type
  
      # propagate type information through all aliases
      for name, nodes in self.name_to_nodes.items():
          all_types = ordered_set(self.result[ty] for ty in nodes)
          final_type = self.combined(*all_types)
          for n in nodes:
              if n not in self.delayed_types:
                  self.result[n] = final_type
      self.current_global_declarations[node.name] = node
  
      # return type may be unset if the function always raises
      return_type = self.result.get(
          node, self.builder.NamedType("pythonic::types::none_type")
      )
  
      self.result[node] = (
          self.builder.Returnable(return_type),
          reduce(list.__add__, self.typedefs.values(), []),
      )
      for k in self.curr_locals_declaration:
          self.result[k] = self.get_qualifier(k)(self.result[k])
  
imports: from pythran.analyses import LazynessAnalysis, StrictAliases, YieldPoints
  from pythran.analyses import LocalNodeDeclarations, Immediates, RangeValues
  from pythran.analyses import Ancestors
  from pythran.config import cfg
  from pythran.cxxtypes import TypeBuilder, ordered_set
  from pythran.intrinsic import UserFunction, Class
  from pythran.passmanager import ModuleAnalysis
  from pythran.tables import operator_to_lambda, MODULES
  from pythran.types.conversion import pytype_to_ctype
  from pythran.types.reorder import Reorder
  from pythran.utils import attr_to_path, cxxid, isnum, isextslice
  from collections import defaultdict
  from functools import reduce
  import gast
  from itertools import islice
  from copy import deepcopy
label_desc: Use image node_id 11 for calling the Types obj's underlying member method code with example usage: obj.visit_FunctionDef(node) without return types