
    %^g                         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ee         Z
 e
       Zeed<   dej                  j                  d	efd
Zy)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                   	   e Zd Zdej                  j
                  defdZdej                  j                  de	fdZ
dej                  j                  defdZdej                  j                  defdZdej                  j"                  defdZdej                  j&                  defdZdej                  j*                  defd	Zdej                  j.                  defd
Zdej                  j2                  defdZdej                  j6                  defdZdej                  j:                  defdZdej                  j>                  defdZ dej                  jB                  defdZ"dej                  jF                  defdZ$dej                  jJ                  defdZ&dej                  jN                  defdZ(dej                  jR                  defdZ*dej                  jV                  defdZ,dej                  jZ                  defdZ.dej                  j^                  defdZ0dej                  jb                  defdZ2dej                  jf                  defdZ4dej                  jj                  defdZ6dej                  jn                  defdZ8dej                  jr                  defdZ:dej                  jv                  defdZ<dej                  jz                  defdZ>dej                  j~                  defdZ@dej                  j                  defdZBdej                  j                  defd ZDdej                  j                  defd!ZFdej                  j                  defd"ZHdej                  j                  defd#ZJdej                  j                  defd$ZLdej                  j                  defd%ZNdej                  j                  defd&ZPdej                  j                  defd'ZRdej                  j                  defd(ZTdej                  j                  defd)ZVdej                  j                  defd*ZXdej                  j                  defd+ZZdej                  j                  defd,Z\dej                  j                  defd-Z^dej                  j                  defd.Z`y/)0_NodeEvaluatororeturnc                     |j                   S Nvalueselfr   s     -lib/python3.12/site-packages/mypy/evalexpr.pyvisit_int_exprz_NodeEvaluator.visit_int_expr       ww    c                     |j                   S r
   r   r   s     r   visit_str_exprz_NodeEvaluator.visit_str_expr   r   r   c                     	 t        j                  d|j                   d      S # t        $ r& t        j                  d|j                   d      cY S w xY w)Nzb''zb"")astliteral_evalr   SyntaxErrorr   s     r   visit_bytes_exprz_NodeEvaluator.visit_bytes_expr   sP    	5##b	O44 	5##b	O44	5s   "% ,AAc                     |j                   S r
   r   r   s     r   visit_float_exprz_NodeEvaluator.visit_float_expr"   r   r   c                     |j                   S r
   r   r   s     r   visit_complex_exprz!_NodeEvaluator.visit_complex_expr%   r   r   c                     t         S r
   )Ellipsisr   s     r   visit_ellipsisz_NodeEvaluator.visit_ellipsis(   s    r   c                     t         S r
   UNKNOWNr   s     r   visit_star_exprz_NodeEvaluator.visit_star_expr+       r   c                 n    |j                   dk(  ry|j                   dk(  ry|j                   dk(  ry t        S )NTrueTFalseFNone)namer%   r   s     r   visit_name_exprz_NodeEvaluator.visit_name_expr.   s6    66VVVwVVv r   c                     t         S r
   r$   r   s     r   visit_member_exprz _NodeEvaluator.visit_member_expr9   r'   r   c                     t         S r
   r$   r   s     r   visit_yield_from_exprz$_NodeEvaluator.visit_yield_from_expr<   r'   r   c                     t         S r
   r$   r   s     r   visit_yield_exprz_NodeEvaluator.visit_yield_expr?   r'   r   c                     t         S r
   r$   r   s     r   visit_call_exprz_NodeEvaluator.visit_call_exprB   r'   r   c                     t         S r
   r$   r   s     r   visit_op_exprz_NodeEvaluator.visit_op_exprE   r'   r   c                     t         S r
   r$   r   s     r   visit_comparison_exprz$_NodeEvaluator.visit_comparison_exprH   r'   r   c                 8    |j                   j                  |       S r
   expracceptr   s     r   visit_cast_exprz_NodeEvaluator.visit_cast_exprK       vv}}T""r   c                 8    |j                   j                  |       S r
   r;   r   s     r   visit_assert_type_exprz%_NodeEvaluator.visit_assert_type_exprN   r?   r   c                     t         S r
   r$   r   s     r   visit_reveal_exprz _NodeEvaluator.visit_reveal_exprQ   r'   r   c                     t         S r
   r$   r   s     r   visit_super_exprz_NodeEvaluator.visit_super_exprT   r'   r   c                    |j                   j                  |       }|t        u rt        S |j                  dk(  r$t	        |t
        t        t        f      r| S t        S |j                  dk(  r$t	        |t
        t        t        f      r|S t        S |j                  dk(  rt	        |t
              r| S t        S |j                  dk(  r(t	        |t        t
        t        t        t        f      r| S t        S )N-+~not)r<   r=   r%   op
isinstanceintfloatcomplexboolstrbytes)r   r   operands      r   visit_unary_exprz_NodeEvaluator.visit_unary_exprW   s    &&--%gN443;'C#89x  TTS['C#89x  TTS['3'x  TTU]'D#uc5#AB"{"r   c                 8    |j                   j                  |       S r
   )r   r=   r   s     r   visit_assignment_exprz$_NodeEvaluator.visit_assignment_expri   s    ww~~d##r   c                     |j                   D cg c]  }|j                  |        }}t        d |D              r|S t        S c c}w )Nc              3   ,   K   | ]  }|t         u  y wr
   r$   .0items     r   	<genexpr>z1_NodeEvaluator.visit_list_expr.<locals>.<genexpr>n        5utt7"u   )itemsr=   allr%   r   r   r[   r_   s       r   visit_list_exprz_NodeEvaluator.visit_list_exprl   s@    /0ww7wtT"w75u55L 8s   Ac                     |j                   D cg c]/  \  }}|t        n|j                  |       |j                  |       f1 }}}t        d |D              rt	        |      S t        S c c}}w )Nc              3   >   K   | ]  \  }}|t         uxr |d u  y wr
   r$   )rZ   keyr   s      r   r\   z1_NodeEvaluator.visit_dict_expr.<locals>.<genexpr>w   s'     P%JCs'!7e4&77%s   )r_   r%   r=   r`   dict)r   r   re   r   r_   s        r   visit_dict_exprz_NodeEvaluator.visit_dict_exprr   sm      gg
%
U WD)95<<;MN% 	 
 P%PP;
s   4A*c                     |j                   D cg c]  }|j                  |        }}t        d |D              rt        |      S t        S c c}w )Nc              3   ,   K   | ]  }|t         u  y wr
   r$   rY   s     r   r\   z2_NodeEvaluator.visit_tuple_expr.<locals>.<genexpr>}   r]   r^   )r_   r=   r`   tupler%   ra   s       r   visit_tuple_exprz_NodeEvaluator.visit_tuple_expr{   sE    /0ww7wtT"w75u55< 8   Ac                     |j                   D cg c]  }|j                  |        }}t        d |D              rt        |      S t        S c c}w )Nc              3   ,   K   | ]  }|t         u  y wr
   r$   rY   s     r   r\   z0_NodeEvaluator.visit_set_expr.<locals>.<genexpr>   r]   r^   )r_   r=   r`   setr%   ra   s       r   visit_set_exprz_NodeEvaluator.visit_set_expr   sE    /0ww7wtT"w75u55u: 8rl   c                     t         S r
   r$   r   s     r   visit_index_exprz_NodeEvaluator.visit_index_expr   r'   r   c                     t         S r
   r$   r   s     r   visit_type_applicationz%_NodeEvaluator.visit_type_application   r'   r   c                     t         S r
   r$   r   s     r   visit_lambda_exprz _NodeEvaluator.visit_lambda_expr   r'   r   c                     t         S r
   r$   r   s     r   visit_list_comprehensionz'_NodeEvaluator.visit_list_comprehension   r'   r   c                     t         S r
   r$   r   s     r   visit_set_comprehensionz&_NodeEvaluator.visit_set_comprehension   r'   r   c                     t         S r
   r$   r   s     r   visit_dictionary_comprehensionz-_NodeEvaluator.visit_dictionary_comprehension   r'   r   c                     t         S r
   r$   r   s     r   visit_generator_exprz#_NodeEvaluator.visit_generator_expr   r'   r   c                     t         S r
   r$   r   s     r   visit_slice_exprz_NodeEvaluator.visit_slice_expr   r'   r   c                     t         S r
   r$   r   s     r   visit_conditional_exprz%_NodeEvaluator.visit_conditional_expr   r'   r   c                     t         S r
   r$   r   s     r   visit_type_var_exprz"_NodeEvaluator.visit_type_var_expr   r'   r   c                     t         S r
   r$   r   s     r   visit_paramspec_exprz#_NodeEvaluator.visit_paramspec_expr   r'   r   c                     t         S r
   r$   r   s     r   visit_type_var_tuple_exprz(_NodeEvaluator.visit_type_var_tuple_expr   r'   r   c                     t         S r
   r$   r   s     r   visit_type_alias_exprz$_NodeEvaluator.visit_type_alias_expr   r'   r   c                     t         S r
   r$   r   s     r   visit_namedtuple_exprz$_NodeEvaluator.visit_namedtuple_expr   r'   r   c                     t         S r
   r$   r   s     r   visit_enum_call_exprz#_NodeEvaluator.visit_enum_call_expr   r'   r   c                     t         S r
   r$   r   s     r   visit_typeddict_exprz#_NodeEvaluator.visit_typeddict_expr   r'   r   c                     t         S r
   r$   r   s     r   visit_newtype_exprz!_NodeEvaluator.visit_newtype_expr   r'   r   c                     t         S r
   r$   r   s     r   visit__promote_exprz"_NodeEvaluator.visit__promote_expr   r'   r   c                     t         S r
   r$   r   s     r   visit_await_exprz_NodeEvaluator.visit_await_expr   r'   r   c                     t         S r
   r$   r   s     r   visit_temp_nodez_NodeEvaluator.visit_temp_node   r'   r   N)a__name__
__module____qualname__mypynodesIntExprrM   r   StrExprrQ   r   	BytesExprobjectr   	FloatExprrN   r   ComplexExprr   EllipsisExprr"   StarExprr&   NameExprr-   
MemberExprr/   YieldFromExprr1   	YieldExprr3   CallExprr5   OpExprr7   ComparisonExprr9   CastExprr>   AssertTypeExprrA   
RevealExprrC   	SuperExprrE   	UnaryExprrT   AssignmentExprrV   ListExprrb   DictExprrg   	TupleExprrk   SetExprrp   	IndexExprrr   TypeApplicationrt   
LambdaExprrv   ListComprehensionrx   SetComprehensionrz   DictionaryComprehensionr|   GeneratorExprr~   	SliceExprr   ConditionalExprr   TypeVarExprr   ParamSpecExprr   TypeVarTupleExprr   TypeAliasExprr   NamedTupleExprr   EnumCallExprr   TypedDictExprr   NewTypeExprr   PromoteExprr   	AwaitExprr   TempNoder    r   r   r   r      s   

 2 2 s 

 2 2 s 5$**"6"6 56 5$**"6"6 5 DJJ$:$: v 

 7 7 F !4!4  	!4!4 	 	4::#8#8 V tzz'?'? F $**"6"6 6 !4!4  tzz00 V tzz'@'@ V #!4!4 # ##

(A(A #f #4::#8#8 V $**"6"6 6 $**"6"6 6 $$tzz'@'@ $V $!4!4  !4!4  $**"6"6 6 

 2 2 v $**"6"6 6 

(B(B v 4::#8#8 V $***F*F 6 )D)D  

0R0R W] djj&>&> 6 $**"6"6 6 

(B(B v TZZ%;%;  djj&>&> 6 4::+F+F 6 tzz'?'? F tzz'@'@ V djj&=&= & djj&>&> 6 DJJ$:$: v TZZ%;%;  $**"6"6 6 !4!4  r   r   
_evaluatorr<   r   c                 ,    | j                  t              S )zEvaluate an expression at runtime.

    Return the result of the expression, or UNKNOWN if the expression cannot be
    evaluated.
    )r=   r   )r<   s    r   evaluate_expressionr      s     ;;z""r   )__doc__r   typingr   
mypy.nodesr   mypy.visitorr   r   r%   r   r   __annotations__r   
Expressionr   r   r   r   <module>r      s`       *
(n&v. nb #$
E $#djj33 # #r   