class_docstr: This pass handle user-defined import, mangling name for function from
  other modules and include them in the current module, patching all call
  site accordingly.
class_docstr_tok: ["This","pass","handle","user-defined","import",",","mangling","name","for","function","from","other","modules","and","include","them","in","the","current","module",",","patching","all","call","site","accordingly","."]
code: def visit_Attribute(self, node):
      if not isinstance(node.ctx, ast.Load):
          return node
  
      # is that a module attribute load?
      root = node.value
      while isinstance(root, ast.Attribute):
          root = root.value
      if not isinstance(root, ast.Name):
          return node
  
      renaming = self.lookup(root.id)
  
      if not renaming:
          return node
  
      if not is_mangled_module(renaming):
          return node
  
      base_module = demangle(renaming)
  
      if is_builtin_module(base_module):
          return node
  
      renaming = self.lookup(root.id)
  
      root = node
      suffix = ""
      while isinstance(root, ast.Attribute):
          root = root.value
          suffix = "$" + node.attr + suffix
      return ast.Name(renaming + suffix[1:], node.ctx, None, None)
  
imports: from pythran.passmanager import Transformation
  from pythran.tables import MODULES, pythran_ward
  from pythran.syntax import PythranSyntaxError
  import gast
  import logging
  import os
label_desc: Use image node_id 15 for calling the HandleImport obj's underlying member method code with example usage: obj.visit_Attribute(node) and returns: ast, node, node, node, node, node