class_docstr: Gather aliasing informations across nodes
  
  As a result, each node from the module is associated to a set of node or
  Intrinsic to which it *may* alias to.
class_docstr_tok: ["Gather","aliasing","informations","across","nodes","As","a","result",",","each","node","from","the","module","is","associated","to","a","set","of","node","or","Intrinsic","to","which","it","*","may","*","alias","to","."]
docstr: For loop creates aliasing between the target
  and the content of the iterator
  
  >>> from pythran import passmanager
  >>> pm = passmanager.PassManager('demo')
  >>> module = ast.parse("""
  ... def foo(a):
  ...     for i in a:
  ...         {i}""")
  >>> result = pm.gather(Aliases, module)
  >>> Aliases.dump(result, filter=ast.Set)
  {i} => ['|i|']
  
  Not very useful, unless we know something about the iterated container
  
  >>> module = ast.parse("""
  ... def foo(a, b):
  ...     for i in [a, b]:
  ...         {i}""")
  >>> result = pm.gather(Aliases, module)
  >>> Aliases.dump(result, filter=ast.Set)
  {i} => ['|a|, |b|']
docstr_tok: ["For","loop","creates","aliasing","between","the","target","and","the","content","of","the","iterator",">",">",">","from","pythran","import","passmanager",">",">",">","pm","=","passmanager.PassManager","(","'demo","'",")",">",">",">","module","=","ast.parse","(","``","''","''","...","def","foo","(","a",")",":","...","for","i","in","a",":","...","{","i","}","''","''","''",")",">",">",">","result","=","pm.gather","(","Aliases",",","module",")",">",">",">","Aliases.dump","(","result",",","filter=ast.Set",")","{","i","}","=",">","[","'|i|","'","]","Not","very","useful",",","unless","we","know","something","about","the","iterated","container",">",">",">","module","=","ast.parse","(","``","''","''","...","def","foo","(","a",",","b",")",":","...","for","i","in","[","a",",","b","]",":","...","{","i","}","''","''","''",")",">",">",">","result","=","pm.gather","(","Aliases",",","module",")",">",">",">","Aliases.dump","(","result",",","filter=ast.Set",")","{","i","}","=",">","[","'|a|",",","|b|","'","]"]
code: def visit_For(self, node):
      '''
      For loop creates aliasing between the target
      and the content of the iterator
  
      >>> from pythran import passmanager
      >>> pm = passmanager.PassManager('demo')
      >>> module = ast.parse("""
      ... def foo(a):
      ...     for i in a:
      ...         {i}""")
      >>> result = pm.gather(Aliases, module)
      >>> Aliases.dump(result, filter=ast.Set)
      {i} => ['|i|']
  
      Not very useful, unless we know something about the iterated container
  
      >>> module = ast.parse("""
      ... def foo(a, b):
      ...     for i in [a, b]:
      ...         {i}""")
      >>> result = pm.gather(Aliases, module)
      >>> Aliases.dump(result, filter=ast.Set)
      {i} => ['|a|, |b|']
      '''
  
      iter_aliases = self.visit(node.iter)
      if all(isinstance(x, ContainerOf) for x in iter_aliases):
          target_aliases = set().union(
              *[iter_alias.containees for iter_alias in iter_aliases]
          )
      else:
          target_aliases = {node.target}
  
      self.add(node.target, target_aliases)
      self.aliases[node.target.id] = self.result[node.target]
  
      self.generic_visit(node)
      self.generic_visit(node)
  
imports: from pythran.analyses.global_declarations import GlobalDeclarations
  from pythran.intrinsic import Intrinsic, Class, UnboundValue
  from pythran.passmanager import ModuleAnalysis
  from pythran.tables import functions, methods, MODULES
  from pythran.unparse import Unparser
  from pythran.conversion import demangle
  import pythran.metadata
  from pythran.utils import isnum
  from pythran.syntax import PythranSyntaxError
  import gast
  from copy import deepcopy
  from itertools import product
  import io
label_desc: Use image node_id 24 for calling the Aliases obj's underlying member method code with example usage: obj.visit_For(node) without return types