class_docstr: Identify constant expressions.
class_docstr_tok: ["Identify","constant","expressions","."]
code: def visit_Name(self, node):
      if node in self.aliases:
          # params and store are not constants
          if not isinstance(node.ctx, ast.Load):
              return False
          # if we can alias on multiple value, it is not constant
          elif len(self.aliases[node]) > 1:
              return False
          # if it is not a globals, it depends on variable so it is not
          # constant
          elif node.id not in self.globals:
              return False
          # if it is defined in the current function, it is not constant
          elif node.id in self.locals[node]:
              return False
  
          def is_function(x):
              return isinstance(
                  x, (FunctionIntr, ast.FunctionDef, ast.alias)
              )
  
          pure_fun = all(
              alias in self.pure_functions
              for alias in self.aliases[node]
          )
          return pure_fun
      else:
          return False
  
imports: from pythran.analyses.aliases import Aliases
  from pythran.analyses.globals_analysis import Globals
  from pythran.analyses.locals_analysis import Locals
  from pythran.analyses.pure_functions import PureFunctions
  from pythran.intrinsic import FunctionIntr
  from pythran.passmanager import NodeAnalysis
  import gast
label_desc: Use image node_id 10 for calling the ConstantExpressions obj's underlying member method code with example usage: obj.visit_Name(node) and returns: pure_fun, False, False, isinstance, False, False, False