o
    2g                     @   sp   U d Z ddlZddlmZ ddlZddlmZ e Z	G dd dee Z
e
 Zeed< dejjd	efd
dZdS )z

Evaluate an expression.

Used by stubtest; in a separate file because things break if we don't
put it in a mypyc-compiled file.

    N)Final)ExpressionVisitorc                   @   s  e Zd ZdejjdefddZdejjde	fddZ
dejjdefddZdejjdefd	d
ZdejjdefddZdejjdefddZdejjdefddZdejjdefddZdejjdefddZdejjdefddZdejjdefddZdejjdefddZ dejj!defddZ"dejj#defddZ$dejj%defdd Z&dejj'defd!d"Z(dejj)defd#d$Z*dejj+defd%d&Z,dejj-defd'd(Z.dejj/defd)d*Z0dejj1defd+d,Z2dejj3defd-d.Z4dejj5defd/d0Z6dejj7defd1d2Z8dejj9defd3d4Z:dejj;defd5d6Z<dejj=defd7d8Z>dejj?defd9d:Z@dejjAdefd;d<ZBdejjCdefd=d>ZDdejjEdefd?d@ZFdejjGdefdAdBZHdejjIdefdCdDZJdejjKdefdEdFZLdejjMdefdGdHZNdejjOdefdIdJZPdejjQdefdKdLZRdejjSdefdMdNZTdejjUdefdOdPZVdejjWdefdQdRZXdejjYdefdSdTZZdejj[defdUdVZ\dejj]defdWdXZ^dejj_defdYdZZ`d[S )\_NodeEvaluatororeturnc                 C      |j S Nvalueselfr    r   E/home/garg/my-data/venv/lib/python3.10/site-packages/mypy/evalexpr.pyvisit_int_expr      z_NodeEvaluator.visit_int_exprc                 C   r   r   r	   r   r   r   r   visit_str_expr   r   z_NodeEvaluator.visit_str_exprc                 C   s>   zt d|j dW S  ty   t d|j d Y S w )Nzb''zb"")astliteral_evalr
   SyntaxErrorr   r   r   r   visit_bytes_expr   s
   z_NodeEvaluator.visit_bytes_exprc                 C   r   r   r	   r   r   r   r   visit_float_expr"   r   z_NodeEvaluator.visit_float_exprc                 C   r   r   r	   r   r   r   r   visit_complex_expr%   r   z!_NodeEvaluator.visit_complex_exprc                 C      t S r   )Ellipsisr   r   r   r   visit_ellipsis(      z_NodeEvaluator.visit_ellipsisc                 C   r   r   UNKNOWNr   r   r   r   visit_star_expr+   r   z_NodeEvaluator.visit_star_exprc                 C   s.   |j dkrdS |j dkrdS |j dkrd S tS )NTrueTFalseFNone)namer   r   r   r   r   visit_name_expr.   s   


z_NodeEvaluator.visit_name_exprc                 C   r   r   r   r   r   r   r   visit_member_expr9   r   z _NodeEvaluator.visit_member_exprc                 C   r   r   r   r   r   r   r   visit_yield_from_expr<   r   z$_NodeEvaluator.visit_yield_from_exprc                 C   r   r   r   r   r   r   r   visit_yield_expr?   r   z_NodeEvaluator.visit_yield_exprc                 C   r   r   r   r   r   r   r   visit_call_exprB   r   z_NodeEvaluator.visit_call_exprc                 C   r   r   r   r   r   r   r   visit_op_exprE   r   z_NodeEvaluator.visit_op_exprc                 C   r   r   r   r   r   r   r   visit_comparison_exprH   r   z$_NodeEvaluator.visit_comparison_exprc                 C      |j | S r   expracceptr   r   r   r   visit_cast_exprK      z_NodeEvaluator.visit_cast_exprc                 C   r,   r   r-   r   r   r   r   visit_assert_type_exprN   r1   z%_NodeEvaluator.visit_assert_type_exprc                 C   r   r   r   r   r   r   r   visit_reveal_exprQ   r   z _NodeEvaluator.visit_reveal_exprc                 C   r   r   r   r   r   r   r   visit_super_exprT   r   z_NodeEvaluator.visit_super_exprc                 C   s   |j | }|tu rtS |jdkrt|tttfr| S tS |jdkr0t|tttfr.|
 S tS |jdkr?t|tr=| S tS |jdkrQt|tttt	t
frQ| S tS )N-+~not)r.   r/   r   op
isinstanceintfloatcomplexboolstrbytes)r   r   operandr   r   r   visit_unary_exprW   s&   





z_NodeEvaluator.visit_unary_exprc                 C   r,   r   )r
   r/   r   r   r   r   visit_assignment_expri   r1   z$_NodeEvaluator.visit_assignment_exprc                    s.    fdd|j D }tdd |D r|S tS )Nc                       g | ]}|  qS r   r/   .0itemr   r   r   
<listcomp>m       z2_NodeEvaluator.visit_list_expr.<locals>.<listcomp>c                 s       | ]}|t uV  qd S r   r   rF   r   r   r   	<genexpr>n       z1_NodeEvaluator.visit_list_expr.<locals>.<genexpr>)itemsallr   r   r   rO   r   rI   r   visit_list_exprl   s   z_NodeEvaluator.visit_list_exprc                    2    fdd|j D }tdd |D rt|S tS )Nc                    s0   g | ]\}}|d u rt n| | fqS r   )r   r/   rG   keyr
   rI   r   r   rJ   s   s    z2_NodeEvaluator.visit_dict_expr.<locals>.<listcomp>c                 s   s$    | ]\}}|t uo|d uV  qd S r   r   rT   r   r   r   rM   w   s   " z1_NodeEvaluator.visit_dict_expr.<locals>.<genexpr>)rO   rP   dictr   rQ   r   rI   r   visit_dict_exprr   s   
z_NodeEvaluator.visit_dict_exprc                    rS   )Nc                    rD   r   rE   rF   rI   r   r   rJ   |   rK   z3_NodeEvaluator.visit_tuple_expr.<locals>.<listcomp>c                 s   rL   r   r   rF   r   r   r   rM   }   rN   z2_NodeEvaluator.visit_tuple_expr.<locals>.<genexpr>)rO   rP   tupler   rQ   r   rI   r   visit_tuple_expr{      z_NodeEvaluator.visit_tuple_exprc                    rS   )Nc                    rD   r   rE   rF   rI   r   r   rJ      rK   z1_NodeEvaluator.visit_set_expr.<locals>.<listcomp>c                 s   rL   r   r   rF   r   r   r   rM      rN   z0_NodeEvaluator.visit_set_expr.<locals>.<genexpr>)rO   rP   setr   rQ   r   rI   r   visit_set_expr   rZ   z_NodeEvaluator.visit_set_exprc                 C   r   r   r   r   r   r   r   visit_index_expr   r   z_NodeEvaluator.visit_index_exprc                 C   r   r   r   r   r   r   r   visit_type_application   r   z%_NodeEvaluator.visit_type_applicationc                 C   r   r   r   r   r   r   r   visit_lambda_expr   r   z _NodeEvaluator.visit_lambda_exprc                 C   r   r   r   r   r   r   r   visit_list_comprehension   r   z'_NodeEvaluator.visit_list_comprehensionc                 C   r   r   r   r   r   r   r   visit_set_comprehension   r   z&_NodeEvaluator.visit_set_comprehensionc                 C   r   r   r   r   r   r   r   visit_dictionary_comprehension   r   z-_NodeEvaluator.visit_dictionary_comprehensionc                 C   r   r   r   r   r   r   r   visit_generator_expr   r   z#_NodeEvaluator.visit_generator_exprc                 C   r   r   r   r   r   r   r   visit_slice_expr   r   z_NodeEvaluator.visit_slice_exprc                 C   r   r   r   r   r   r   r   visit_conditional_expr   r   z%_NodeEvaluator.visit_conditional_exprc                 C   r   r   r   r   r   r   r   visit_type_var_expr   r   z"_NodeEvaluator.visit_type_var_exprc                 C   r   r   r   r   r   r   r   visit_paramspec_expr   r   z#_NodeEvaluator.visit_paramspec_exprc                 C   r   r   r   r   r   r   r   visit_type_var_tuple_expr   r   z(_NodeEvaluator.visit_type_var_tuple_exprc                 C   r   r   r   r   r   r   r   visit_type_alias_expr   r   z$_NodeEvaluator.visit_type_alias_exprc                 C   r   r   r   r   r   r   r   visit_namedtuple_expr   r   z$_NodeEvaluator.visit_namedtuple_exprc                 C   r   r   r   r   r   r   r   visit_enum_call_expr   r   z#_NodeEvaluator.visit_enum_call_exprc                 C   r   r   r   r   r   r   r   visit_typeddict_expr   r   z#_NodeEvaluator.visit_typeddict_exprc                 C   r   r   r   r   r   r   r   visit_newtype_expr   r   z!_NodeEvaluator.visit_newtype_exprc                 C   r   r   r   r   r   r   r   visit__promote_expr   r   z"_NodeEvaluator.visit__promote_exprc                 C   r   r   r   r   r   r   r   visit_await_expr   r   z_NodeEvaluator.visit_await_exprc                 C   r   r   r   r   r   r   r   visit_temp_node   r   z_NodeEvaluator.visit_temp_nodeN)a__name__
__module____qualname__mypynodesIntExprr;   r   StrExprr?   r   	BytesExprobjectr   	FloatExprr<   r   ComplexExprr   EllipsisExprr   StarExprr    NameExprr%   
MemberExprr&   YieldFromExprr'   	YieldExprr(   CallExprr)   OpExprr*   ComparisonExprr+   CastExprr0   AssertTypeExprr2   
RevealExprr3   	SuperExprr4   	UnaryExprrB   AssignmentExprrC   ListExprrR   DictExprrW   	TupleExprrY   SetExprr\   	IndexExprr]   TypeApplicationr^   
LambdaExprr_   ListComprehensionr`   SetComprehensionra   DictionaryComprehensionrb   GeneratorExprrc   	SliceExprrd   ConditionalExprre   TypeVarExprrf   ParamSpecExprrg   TypeVarTupleExprrh   TypeAliasExprri   NamedTupleExprrj   EnumCallExprrk   TypedDictExprrl   NewTypeExprrm   PromoteExprrn   	AwaitExprro   TempNoderp   r   r   r   r   r      sZ    	r   
_evaluatorr.   r   c                 C   s
   |  tS )zEvaluate an expression at runtime.

    Return the result of the expression, or UNKNOWN if the expression cannot be
    evaluated.
    )r/   r   )r.   r   r   r   evaluate_expression   s   
r   )__doc__r   typingr   
mypy.nodesrt   mypy.visitorr   ry   r   r   r   __annotations__ru   
Expressionr   r   r   r   r   <module>   s    	 2