nodes: 0, module; 1, function_definition; 2, function_name:vectorizable_features; 3, parameters; 4, block; 5, identifier:fcs; 6, expression_statement; 7, expression_statement; 8, return_statement; 9, string; 10, assignment; 11, call; 12, string_content:Discovers the ordered set of vectorizable features in ``fcs``.
  
      Returns a list of feature names, sorted lexicographically.
      Feature names are only included if the corresponding
      features are vectorizable (i.e., they are an instance of
      :class:`collections.Mapping`).; 13, identifier:is_mapping; 14, lambda; 15, identifier:sorted; 16, argument_list; 17, lambda_parameters; 18, call; 19, call; 20, identifier:obj; 21, identifier:isinstance; 22, argument_list; 23, identifier:set; 24, argument_list; 25, identifier:obj; 26, attribute; 27, list_comprehension; 28, identifier:collections; 29, identifier:Mapping; 30, identifier:name; 31, for_in_clause; 32, for_in_clause; 33, if_clause; 34, identifier:fc; 35, identifier:fcs; 36, identifier:name; 37, identifier:fc; 38, call; 39, identifier:is_mapping; 40, argument_list; 41, subscript; 42, identifier:fc; 43, identifier:name
code: def vectorizable_features(fcs):
      '''Discovers the ordered set of vectorizable features in ``fcs``.
  
      Returns a list of feature names, sorted lexicographically.
      Feature names are only included if the corresponding
      features are vectorizable (i.e., they are an instance of
      :class:`collections.Mapping`).
      '''
      is_mapping = lambda obj: isinstance(obj, collections.Mapping)
      return sorted(set([name for fc in fcs for name in fc if is_mapping(fc[name])]))