nodes: 0, module; 1, function_definition; 2, function_name:get_graph_component; 3, parameters; 4, block; 5, identifier:graph; 6, expression_statement; 7, expression_statement; 8, expression_statement; 9, expression_statement; 10, expression_statement; 11, return_statement; 12, comment:""" Identify strongly connected components in a graph using
          Tarjan's algorithm.
  
          graph should be a dictionary mapping node names to
          lists of successor nodes.
      """; 13, assignment; 14, assignment; 15, assignment; 16, call; 17, identifier:graph_component; 18, identifier:components; 19, call; 20, identifier:node_component; 21, call; 22, identifier:graph_component; 23, dictionary_comprehension; 24, attribute; 25, argument_list; 26, identifier:map; 27, argument_list; 28, identifier:dict; 29, argument_list; 30, pair; 31, for_in_clause; 32, identifier:graph_component; 33, identifier:update; 34, call; 35, call; 36, identifier:graph; 37, call; 38, identifier:component; 39, list; 40, identifier:component; 41, identifier:components; 42, identifier:dict; 43, argument_list; 44, identifier:partial; 45, argument_list; 46, identifier:_gen_node_component; 47, argument_list; 48, call; 49, identifier:_visit; 50, keyword_argument; 51, identifier:components; 52, identifier:_gen_graph_component; 53, argument_list; 54, identifier:graph; 55, identifier:graph; 56, identifier:graph; 57, identifier:node_component; 58, identifier:_gen_graph_value
code: def get_graph_component(graph):
      """ Identify strongly connected components in a graph using
          Tarjan's algorithm.
  
          graph should be a dictionary mapping node names to
          lists of successor nodes.
      """
      components = map(partial(_visit, graph=graph), graph)
      node_component = dict(_gen_node_component(components))
      graph_component = {component: [] for component in components}
      graph_component.update(
          dict(_gen_graph_component(graph, node_component, _gen_graph_value)))
  
      return graph_component