Ë
    pPêj  ã                  óÚ   — U d Z ddlmZ ddlmZmZ ddlmZmZ ddl	m
Z
mZmZmZmZmZmZmZmZmZmZ ddlmZ erddl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"y)ad  Constant folding of IR values.

For example, 3 + 5 can be constant folded into 8.

This is mostly like mypy.constant_fold, but we can bind some additional
NameExpr and MemberExpr references here, since we have more knowledge
about which definitions can be trusted -- we constant fold only references
to other compiled modules in the same compilation unit.
é    )Úannotations)ÚTYPE_CHECKINGÚFinal)Úconstant_fold_binary_opÚconstant_fold_unary_op)Ú	BytesExprÚComplexExprÚ
ExpressionÚ	FloatExprÚIntExprÚ
MemberExprÚNameExprÚOpExprÚStrExprÚ	UnaryExprÚVar)Úbytes_from_str)Ú	IRBuilderr   ÚCONST_TYPESc                óÐ  — t        |t        «      r|j                  S t        |t        «      r|j                  S t        |t        «      r|j                  S t        |t
        «      rt        |j                  «      S t        |t        «      r|j                  S t        |t        «      rG|j                  }t        |t        «      r*|j                  r|j                  }t        |t        «      r|S yt        |t        «      rD| j                  |«      }|�0|\  }}}|j                  r|j                  }t        |t        «      r|S yt        |t         «      rHt#        | |j$                  «      }t#        | |j&                  «      }	|�|	�t)        |j*                  ||	«      S yt        |t,        «      r>t#        | |j.                  «      }
|
�&t        |
t0        «      st3        |j*                  |
«      S y)zeReturn the constant value of an expression for supported operations.

    Return None otherwise.
    N)Ú
isinstancer   Úvaluer   r   r   r   r	   r   Únoder   Úis_finalÚfinal_valuer   r   Úget_final_refr   Úconstant_fold_exprÚleftÚrightÚ constant_fold_binary_op_extendedÚopr   ÚexprÚbytesr   )Úbuilderr"   r   r   ÚfinalÚfnÚ	final_varÚnativer   r   r   s              ú`/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypyc/irbuild/constant_fold.pyr   r   '   s•  € ô
 �$œÔ Ø�z‰zÐÜ�$œ	Ô"Ø�z‰zÐÜ�$œÔ Ø�z‰zÐÜ�$œ	Ô"Ü˜dŸj™jÓ)Ð)Ü�$œÔ$Ø�z‰zÐÜ	�Dœ(Ô	#Ø�y‰yˆÜ�dœCÔ  T§]¢]Ø×*Ñ*ˆKÜ˜+¬Ô5Ø"Ð"ð$ ô# 
�Dœ*Ô	%Ø×%Ñ% dÓ+ˆØÐØ$)Ñ!ˆB�	˜6Ø×!Ò!Ø'×3Ñ3�Ü˜k¬KÔ9Ø&Ð&ð ô 
�Dœ&Ô	!Ü! '¨4¯9©9Ó5ˆÜ" 7¨D¯J©JÓ7ˆØÐ Ð 1Ü3°D·G±G¸TÀ5ÓIÐIð
 ô	 
�Dœ)Ô	$Ü" 7¨D¯I©IÓ6ˆØÐ¤Z°´uÔ%=Ü)¨$¯'©'°5Ó9Ð9Øó    c                óZ  — t        |t        «      st        |t        «      s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 y)z¨Like mypy's constant_fold_binary_op(), but includes bytes support.

    mypy cannot use constant folded bytes easily so it's simpler to only support them in mypyc.
    ú+Ú*N)r   r#   r   Úint)r!   r   r   s      r)   r    r    P   s’   € ô �dœEÔ"¬:°e¼UÔ+CÜ& r¨4°Ó7Ð7à	ˆS‚y”Z ¤eÔ,´¸EÄ5Ô1IØ�e‰|ÐØ	ˆsŠ”z $¬Ô.´:¸eÄSÔ3IØ�e‰|ÐØ	ˆsŠ”z $¬Ô,´¸EÄ5Ô1IØ�e‰|Ðàr*   N)r$   r   r"   r
   ÚreturnúConstantValue | None)r!   Ústrr   ÚConstantValuer   r2   r/   r0   )#Ú__doc__Ú
__future__r   Útypingr   r   Úmypy.constant_foldr   r   Ú
mypy.nodesr   r	   r
   r   r   r   r   r   r   r   r   Úmypyc.irbuild.utilr   Úmypyc.irbuild.builderr   r.   ÚfloatÚcomplexr1   r#   r2   r   Ú__annotations__r   r    © r*   r)   ú<module>r>      sŽ   ðòõ #ç 'ç N÷÷ ÷ ñ õ .áÝ/ð �e‘˜gÑ%¨Ñ+¨eÑ3€Ø˜5 '¨3°Ð6€ˆUÓ 6ó&ðRØðØ ðØ)6ðàôr*   