docs: def lookup_symbol(self, name, namespace_stack):
          """Returns AST node and module for symbol if found.
  
          Args:
            name: 'name of the symbol to lookup'
            namespace_stack: None or ['namespaces', 'in', 'current', 'scope']
  
          Returns:
            (ast.Node, module (ie, any object stored with symbol)) if found
  
          Raises:
            Error if the symbol cannot be found.
          """
          # TODO(nnorwitz): a convenient API for this depends on the
          # representation of the name. e.g., does symbol_name contain
          # ::, is symbol_name a list of colon separated names, how are
          # names prefixed with :: handled. These have different lookup
          # semantics (if leading ::) or change the desirable API.
  
          # For now assume that the symbol_name contains :: and parse it.
          symbol = Symbol(name, name.split('::'), namespace_stack)
          assert symbol.parts
          if symbol.parts[0] == '':
              # Handle absolute (global) ::symbol_names.
              symbol.parts = symbol.parts[1:]
          elif namespace_stack is not None:
              result = self._lookup_in_all_namespaces(symbol)
              if result:
                  return result
  
          return self._lookup_global(symbol)