nodes: 0, module; 1, function_definition; 2, function_name:object_type; 3, parameters; 4, block; 5, identifier:node; 6, default_parameter; 7, expression_statement; 8, try_statement; 9, if_statement; 10, return_statement; 11, identifier:context; 12, None; 13, comment:"""Obtain the type of the given node
  
      This is used to implement the ``type`` builtin, which means that it's
      used for inferring type calls, as well as used in a couple of other places
      in the inference.
      The node will be inferred first, so this function can support all
      sorts of objects, as long as they support inference.
      """; 14, block; 15, except_clause; 16, boolean_operator; 17, block; 18, subscript; 19, expression_statement; 20, attribute; 21, block; 22, comparison_operator:len(types) > 1; 23, not_operator; 24, return_statement; 25, call; 26, integer:0; 27, assignment; 28, identifier:exceptions; 29, identifier:InferenceError; 30, return_statement; 31, call; 32, integer:1; 33, identifier:types; 34, attribute; 35, identifier:list; 36, argument_list; 37, identifier:types; 38, call; 39, attribute; 40, identifier:len; 41, argument_list; 42, identifier:util; 43, identifier:Uninferable; 44, identifier:types; 45, identifier:set; 46, argument_list; 47, identifier:util; 48, identifier:Uninferable; 49, identifier:types; 50, call; 51, identifier:_object_type; 52, argument_list; 53, identifier:node; 54, identifier:context
code: def object_type(node, context=None):
      """Obtain the type of the given node
  
      This is used to implement the ``type`` builtin, which means that it's
      used for inferring type calls, as well as used in a couple of other places
      in the inference.
      The node will be inferred first, so this function can support all
      sorts of objects, as long as they support inference.
      """
  
      try:
          types = set(_object_type(node, context))
      except exceptions.InferenceError:
          return util.Uninferable
      if len(types) > 1 or not types:
          return util.Uninferable
      return list(types)[0]