Ë
    pPêj­  ã                  óº   — U d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZ eez  ez  ez  ez  ZeeeeefZded<   dd„Z	 	 	 	 	 	 	 	 dd„Zdd	„Zdd
„Zdd„Zy)zTConstant folding of expressions.

For example, 3 + 5 can be constant folded into 8.
é    )Úannotations)ÚFinal)	ÚComplexExprÚ
ExpressionÚ	FloatExprÚIntExprÚNameExprÚOpExprÚStrExprÚ	UnaryExprÚVarr   ÚCONST_TYPESc                óB  — t        | t        «      r| j                  S t        | t        «      r| j                  S t        | t        «      r| j                  S t        | t
        «      r| j                  S t        | t        «      r‰| j                  dk(  ry| j                  dk(  ry| j                  }t        |t        «      rL|j                  r@|j                  j                  dd«      d   |k(  r|j                  }t        |t        «      r|S yt        | t        «      rHt!        | j"                  |«      }t!        | j$                  |«      }|�|�t'        | j(                  ||«      S yt        | t*        «      r.t!        | j,                  |«      }|�t/        | j(                  |«      S y)	aý  Return the constant value of an expression for supported operations.

    Among other things, support int arithmetic and string
    concatenation. For example, the expression 3 + 5 has the constant
    value 8.

    Also bind simple references to final constants defined in the
    current module (cur_mod_id). Binding to references is best effort
    -- we don't bind references to other modules. Mypyc trusts these
    to be correct in compiled modules, so that it can replace a
    constant expression (or a reference to one) with the statically
    computed value. We don't want to infer constant values based on
    stubs, in particular, as these might not match the implementation
    (due to version skew, for example).

    Return None if unsuccessful.
    ÚTrueTÚFalseFú.é   r   N)Ú
isinstancer   Úvaluer   r   r   r	   ÚnameÚnoder   Úis_finalÚfullnameÚrsplitÚfinal_valuer   r
   Úconstant_fold_exprÚleftÚrightÚconstant_fold_binary_opÚopr   ÚexprÚconstant_fold_unary_op)r!   Ú
cur_mod_idr   r   r   r   s         úW/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypy/constant_fold.pyr   r      sX  € ô$ �$œÔ Ø�z‰zÐÜ�$œÔ Ø�z‰zÐÜ�$œ	Ô"Ø�z‰zÐÜ�$œÔ$Ø�z‰zÐÜ	�Dœ(Ô	#Ø�9‰9˜ÒØØ�Y‰Y˜'Ò!ØØ�y‰yˆä�tœSÔ!Ø—’Ø—‘×$Ñ$ S¨!Ó,¨QÑ/°:Ò=à×$Ñ$ˆEÜ˜%¤+Ô/Ø�ð ô 
�Dœ&Ô	!Ü! $§)¡)¨ZÓ8ˆÜ" 4§:¡:¨zÓ:ˆØÐ Ð 1Ü*¨4¯7©7°D¸%Ó@Ð@ð
 ô	 
�Dœ)Ô	$Ü" 4§9¡9¨jÓ9ˆØÐÜ)¨$¯'©'°5Ó9Ð9Øó    c                óè  — t        |t        «      rt        |t        «      rt        | ||«      S t        |t        «      rt        |t        «      rt	        | ||«      S t        |t        «      rt        |t        «      rt	        | ||«      S t        |t        «      rt        |t        «      rt	        | ||«      S | dk(  r%t        |t
        «      rt        |t
        «      r||z   S | dk(  r%t        |t
        «      rt        |t        «      r||z  S | dk(  r%t        |t        «      rt        |t
        «      r||z  S | dk(  r+t        |t        t        f«      rt        |t        «      r||z   S | dk(  r+t        |t        «      rt        |t        t        f«      r||z   S | dk(  r+t        |t        t        f«      rt        |t        «      r||z
  S | dk(  r+t        |t        «      rt        |t        t        f«      r||z
  S y )Nú+Ú*ú-)r   ÚintÚconstant_fold_binary_int_opÚfloatÚconstant_fold_binary_float_opÚstrÚcomplex)r    r   r   s      r$   r   r   O   sš  € ô �$œÔ¤¨E´3Ô!7Ü*¨2¨t°UÓ;Ð;ô �$œÔ¤:¨e´UÔ#;Ü,¨R°°uÓ=Ð=Ü	�Dœ%Ô	 ¤Z°´sÔ%;Ü,¨R°°uÓ=Ð=Ü	�Dœ#Ô	¤:¨e´UÔ#;Ü,¨R°°uÓ=Ð=ð 
ˆS‚y”Z ¤cÔ*¬z¸%ÄÔ/EØ�e‰|ÐØ	ˆsŠ”z $¬Ô,´¸EÄ3Ô1GØ�e‰|ÐØ	ˆsŠ”z $¬Ô,´¸EÄ3Ô1GØ�e‰|Ðð 
ˆS‚y”Z ¤s¬E lÔ3¼
À5Ì'Ô8RØ�e‰|ÐØ	ˆsŠ”z $¬Ô0´ZÀÌÌUÀ|Ô5TØ�e‰|ÐØ	ˆsŠ”z $¬¬e¨Ô5¼*ÀUÌGÔ:TØ�e‰|ÐØ	ˆsŠ”z $¬Ô0´ZÀÌÌUÀ|Ô5TØ�e‰|Ðàr%   c                ób  — | dk(  r||z   S | dk(  r||z
  S | dk(  r||z  S | dk(  r|dk7  r||z  S y | dk(  r|dk7  r||z  S y | dk(  r|dk7  r||z  S y | dk(  r||z  S | d	k(  r||z  S | d
k(  r||z  S | dk(  r|dk\  r||z  S y | dk(  r|dk\  r||z	  S y | dk(  r|dk\  r||z  }t        |t        «      sJ ‚|S y )Nr'   r)   r(   ú/r   ú//ú%ú&ú|ú^z<<z>>ú**)r   r*   ©r    r   r   Úrets       r$   r+   r+   r   s2  € Ø	ˆS‚yØ�e‰|ÐØ	ˆS‚yØ�e‰|ÐØ	ˆsŠØ�e‰|ÐØ	ˆsŠØ�AŠ:Ø˜%‘<Ðð0 ð/ 
ˆtŠØ�AŠ:Ø˜5‘=Ð ð* ð) 
ˆsŠØ�AŠ:Ø˜%‘<Ðð$ ð# 
ˆsŠØ�e‰|ÐØ	ˆsŠØ�e‰|ÐØ	ˆsŠØ�e‰|ÐØ	ˆtŠØ�AŠ:Ø˜5‘=Ð ð ð 
ˆtŠØ�AŠ:Ø˜5‘=Ð ð ð 
ˆtŠØ�AŠ:Ø˜‘+ˆCÜ˜c¤3Ô'Ð'Ð'ØˆJØr%   c                óŽ  — t        |t        «      rt        |t        «      r
J | ||f«       ‚| dk(  r||z   S | dk(  r||z
  S | dk(  r||z  S | dk(  r|dk7  r||z  S y | dk(  r|dk7  r||z  S y | dk(  r|dk7  r||z  S y | dk(  r9|dk  rt        |t        «      s|dkD  r	 ||z  }t        |t        «      sJ |«       ‚|S y # t        $ r Y y w xY w)	Nr'   r)   r(   r1   r   r2   r3   r7   )r   r*   r,   ÚOverflowErrorr8   s       r$   r-   r-   –   s  € Ü˜4¤Ô%¬*°U¼CÔ*@ÐTÀBÈÈeÐCTÓTÐAØ	ˆS‚yØ�e‰|ÐØ	ˆsŠØ�e‰|ÐØ	ˆsŠØ�e‰|ÐØ	ˆsŠØ�AŠ:Ø˜%‘<Ðð" ð! 
ˆtŠØ�AŠ:Ø˜5‘=Ð ð ð 
ˆsŠØ�AŠ:Ø˜%‘<Ðð ð 
ˆtŠØ�1ŠHœ E¬3Ô/°D¸1²HðØ˜E‘k�ô " #¤uÔ-Ð2¨sÓ2Ð-Ø�
àøô !ò Ùðús   ÂB8 Â8	CÃCc                óª   — | dk(  rt        |t        t        f«      r| S | dk(  rt        |t        «      r| S | dk(  rt        |t        t        f«      r|S y )Nr)   ú~r'   )r   r*   r,   )r    r   s     r$   r"   r"   ´   sP   € Ø	ˆS‚y”Z ¬¬U |Ô4ØˆvˆØ	ˆsŠ”z %¬Ô-ØˆvˆØ	ˆsŠ”z %¬#¬u¨Ô6ØˆØr%   N)r!   r   r#   r.   ÚreturnúConstantValue | None)r    r.   r   ÚConstantValuer   r@   r>   r?   )r    r.   r   r*   r   r*   r>   úint | float | None)r    r.   r   úint | floatr   rB   r>   zfloat | None)r    r.   r   r@   r>   rA   )Ú__doc__Ú
__future__r   Útypingr   Ú
mypy.nodesr   r   r   r   r	   r
   r   r   r   r*   Úboolr,   r/   r.   r@   r   Ú__annotations__r   r   r+   r-   r"   © r%   r$   ú<module>rJ      sŒ   ðòõ
 #å ÷
÷ 
õ 
ð �d‘
˜UÑ" WÑ,¨sÑ2€Ø˜4 ¨°Ð5€ˆUÓ 5ó1ðh Øð Ø ð Ø)6ð àó óF!óHô<r%   