(context, atom)
Basically to process ``atom`` nodes. The parser sometimes doesn't
    generate the node (because it has just one child). In that case an atom
    might be a name or a literal as well.
Basically to process ``atom`` nodes. The parser sometimes doesn't
    generate the node (because it has just one child). In that case an atom
    might be a name or a literal as well.
Basically to process atom nodes . The parser sometimes doesn t generate the node ( because it has just one child ) . In that case an atom might be a name or a literal as well .
def eval_atom(context, atom):
    """
    Basically to process ``atom`` nodes. The parser sometimes doesn't
    generate the node (because it has just one child). In that case an atom
    might be a name or a literal as well.
    """
    if atom.type == 'name':
        # This is the first global lookup.
        stmt = tree.search_ancestor(
            atom, 'expr_stmt', 'lambdef'
        ) or atom
        if stmt.type == 'lambdef':
            stmt = atom
        return context.py__getattribute__(
            name_or_str=atom,
            position=stmt.start_pos,
            search_global=True
        )

    elif isinstance(atom, tree.Literal):
        string = context.evaluator.compiled_subprocess.safe_literal_eval(atom.value)
        return ContextSet(compiled.create_simple_object(context.evaluator, string))
    elif atom.type == 'strings':
        # Will be multiple string.
        context_set = eval_atom(context, atom.children[0])
        for string in atom.children[1:]:
            right = eval_atom(context, string)
            context_set = _eval_comparison(context.evaluator, context, context_set, u'+', right)
        return context_set
    else:
        c = atom.children
        # Parentheses without commas are not tuples.
        if c[0] == '(' and not len(c) == 2 \
                and not(c[1].type == 'testlist_comp' and
                        len(c[1].children) > 1):
            return context.eval_node(c[1])

        try:
            comp_for = c[1].children[1]
        except (IndexError, AttributeError):
            pass
        else:
            if comp_for == ':':
                # Dict comprehensions have a colon at the 3rd index.
                try:
                    comp_for = c[1].children[3]
                except IndexError:
                    pass

            if comp_for.type == 'comp_for':
                return ContextSet(iterable.comprehension_from_atom(
                    context.evaluator, context, atom
                ))

        # It's a dict/list/tuple literal.
        array_node = c[1]
        try:
            array_node_c = array_node.children
        except AttributeError:
            array_node_c = []
        if c[0] == '{' and (array_node == '}' or ':' in array_node_c):
            context = iterable.DictLiteralContext(context.evaluator, context, atom)
        else:
            context = iterable.SequenceLiteralContext(context.evaluator, context, atom)
        return ContextSet(context)
def eval_atom ( context , atom ) : if atom . type == 'name' : # This is the first global lookup. stmt = tree . search_ancestor ( atom , 'expr_stmt' , 'lambdef' ) or atom if stmt . type == 'lambdef' : stmt = atom return context . py__getattribute__ ( name_or_str = atom , position = stmt . start_pos , search_global = True ) elif isinstance ( atom , tree . Literal ) : string = context . evaluator . compiled_subprocess . safe_literal_eval ( atom . value ) return ContextSet ( compiled . create_simple_object ( context . evaluator , string ) ) elif atom . type == 'strings' : # Will be multiple string. context_set = eval_atom ( context , atom . children [ 0 ] ) for string in atom . children [ 1 : ] : right = eval_atom ( context , string ) context_set = _eval_comparison ( context . evaluator , context , context_set , u'+' , right ) return context_set else : c = atom . children # Parentheses without commas are not tuples. if c [ 0 ] == '(' and not len ( c ) == 2 and not ( c [ 1 ] . type == 'testlist_comp' and len ( c [ 1 ] . children ) > 1 ) : return context . eval_node ( c [ 1 ] ) try : comp_for = c [ 1 ] . children [ 1 ] except ( IndexError , AttributeError ) : pass else : if comp_for == ':' : # Dict comprehensions have a colon at the 3rd index. try : comp_for = c [ 1 ] . children [ 3 ] except IndexError : pass if comp_for . type == 'comp_for' : return ContextSet ( iterable . comprehension_from_atom ( context . evaluator , context , atom ) ) # It's a dict/list/tuple literal. array_node = c [ 1 ] try : array_node_c = array_node . children except AttributeError : array_node_c = [ ] if c [ 0 ] == '{' and ( array_node == '}' or ':' in array_node_c ) : context = iterable . DictLiteralContext ( context . evaluator , context , atom ) else : context = iterable . SequenceLiteralContext ( context . evaluator , context , atom ) return ContextSet ( context )