class_docstr: Turns all list comprehension from a node into new function calls.
  
  >>> import gast as ast
  >>> from pythran import passmanager, backend
  >>> node = ast.parse("[x*x for x in (1,2,3)]")
  >>> pm = passmanager.PassManager("test")
  >>> _, node = pm.apply(RemoveComprehension, node)
  >>> print(pm.dump(backend.Python, node))
  list_comprehension0()
  def list_comprehension0():
      __target = builtins.list()
      for x in (1, 2, 3):
          builtins.list.append(__target, (x * x))
      return __target
docstr: Create a ast.For node from a comprehension and another node.
  
  g is an ast.comprehension.
  x is the code that have to be executed.
  
  Examples
  --------
  >> [i for i in range(2)]
  
  Becomes
  
  >> for i in range(2):
  >>    ... x code with if clauses ...
  
  It is a reducer as it can be call recursively for mutli generator.
  
  Ex : >> [i, j for i in range(2) for j in range(4)]
docstr_tok: ["Create","a","ast.For","node","from","a","comprehension","and","another","node",".","g","is","an","ast.comprehension",".","x","is","the","code","that","have","to","be","executed",".","Examples","--","--","--","--",">",">","[","i","for","i","in","range","(","2",")","]","Becomes",">",">","for","i","in","range","(","2",")",":",">",">","...","x","code","with","if","clauses","...","It","is","a","reducer","as","it","can","be","call","recursively","for","mutli","generator",".","Ex",":",">",">","[","i",",","j","for","i","in","range","(","2",")","for","j","in","range","(","4",")","]"]
code: def nest_reducer(x, g):
      """
      Create a ast.For node from a comprehension and another node.
  
      g is an ast.comprehension.
      x is the code that have to be executed.
  
      Examples
      --------
      >> [i for i in range(2)]
  
      Becomes
  
      >> for i in range(2):
      >>    ... x code with if clauses ...
  
      It is a reducer as it can be call recursively for mutli generator.
  
      Ex : >> [i, j for i in range(2) for j in range(4)]
      """
  
      def wrap_in_ifs(node, ifs):
          """
          Wrap comprehension content in all possibles if clauses.
  
          Examples
          --------
          >> [i for i in range(2) if i < 3 if 0 < i]
  
          Becomes
  
          >> for i in range(2):
          >>    if i < 3:
          >>        if 0 < i:
          >>            ... the code from `node` ...
  
          Note the nested ifs clauses.
          """
          return reduce(lambda n, if_: ast.If(if_, [n], []), ifs, node)
  
      return ast.For(
          g.target, g.iter, [wrap_in_ifs(x, g.ifs)], [], None
      )
  
file_path: pythran/pythran/transformations/remove_comprehension.py
imports: from pythran.analyses import ImportedIds
  from pythran.passmanager import Transformation
  from pythran.conversion import mangle
  import pythran.metadata
  import gast
  from functools import reduce
label_desc: Use image node_id 3 for calling the RemoveComprehension obj's underlying member method code with example usage: obj.nest_reducer(x, g) and returns: ast, reduce