Ë
    pPêj4  ã                  óÐ   — 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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mZ d dlmZ d dlmZ d dlmZ  G d„ de«      Z dd	„Z! G d
„ de«      Z"y)é    )Úannotations)ÚAssignmentStmtÚBlockÚ	DecoratorÚDelStmtÚDictionaryComprehensionÚ
ExpressionÚFuncDefÚFuncItemÚGeneratorExprÚImportÚ
LambdaExprÚListExprÚ
MemberExprÚMypyFileÚNameExprÚNodeÚStrExprÚ
SymbolNodeÚ	TupleExprÚVar)ÚExtendedTraverserVisitorÚTraverserVisitor)ÚType)ÚErrors)ÚMissingTypesVisitorc                  ó   — e Zd ZdZdZdd„Zy)Ú_LambdaCheckerz:Check whether an AST subtree contains a lambda expression.Fc                ó   — d| _         y ©NT)Úfound)ÚselfÚ_os     úb/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypyc/irbuild/prebuildvisitor.pyÚvisit_lambda_exprz _LambdaChecker.visit_lambda_expr$   s	   € Øˆ�
ó    N)r#   r   ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r%   © r&   r$   r   r      s   „ ÙDà€Eôr&   r   c                ó\  — t        «       }t        | t        «      r| j                  j	                  |«       nB| j
                  �| j
                  j	                  |«       | j                  j	                  |«       | j                  D ]  }|D ]  }|j	                  |«       Œ Œ |j                  S )zÐReturn True if a comprehension body contains a lambda.

    Only checks body expressions (left_expr/key/value and conditions),
    not the sequences, since sequences are evaluated in the enclosing scope.
    )	r   Ú
isinstancer   Ú	left_exprÚacceptÚkeyÚvalueÚ	condlistsr!   )ÚnodeÚcheckerÚcondsÚconds       r$   Ú_comprehension_has_lambdar9   (   sŽ   € ô Ó€GÜ�$œÔ&Ø�‰×Ñ˜gÕ&à�8‰8ÐØ�H‰H�O‰O˜GÔ$Ø�
‰
×Ñ˜'Ô"Ø—‘ò !ˆØò 	!ˆDØ�K‰K˜Õ ñ	!ð!ð �=‰=Ðr&   c                  óø   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zdˆ fd„Zdˆ fd„Zdˆ fd„Zdd„Z	dˆ fd„Z
dd	„Zdd
„Zdˆ fd„Zd ˆ fd„Zd!ˆ fd„Zd"ˆ fd„Zd#ˆ fd„Zd$d„Zd%ˆ fd„Zd&d„Zd'd„Zd(d„Zd'd„Zˆ xZS ))ÚPreBuildVisitora�  Mypy file AST visitor run before building the IR.

    This collects various things, including:

    * Determine relationships between nested functions and functions that
      contain nested functions
    * Find non-local variables (free variables)
    * Find property setters
    * Find decorators of functions
    * Find module import groups

    The main IR build pass uses this information.
    c                óB  •— t         ‰| �  «        i | _        i | _        g | _        t        «       | _        t        «       | _        i | _        i | _	        i | _
        || _        i | _        d | _        || _        || _        t!        |«      | _        d | _        d| _        i | _        y )Nr   )ÚsuperÚ__init__Úfree_variablesÚsymbols_to_funcsÚfuncsÚsetÚprop_settersÚdeleted_varsÚencapsulating_funcsÚnested_funcsÚfuncs_to_decoratorsÚdecorators_to_removeÚmodule_import_groupsÚ_current_import_groupÚerrorsÚcurrent_filer   Úmissing_types_visitorÚ_module_fitemÚ_comprehension_counterÚcomprehension_to_fitem)r"   rK   rL   rH   ÚtypesÚ	__class__s        €r$   r>   zPreBuildVisitor.__init__J   sÄ   ø€ ô 	‰ÑÔð @BˆÔð =?ˆÔð &(ˆŒ
ô +.«%ˆÔô '*£eˆÔð DFˆÔ ð 79ˆÔð EGˆÔ ð ?SˆÔ!ð
 ACˆÔ!Ø48ˆÔ"à$ˆŒà&2ˆÔä%8¸Ó%?ˆÔ"ð .2ˆÔð '(ˆÔ#ð _aˆÕ#r&   c                ó2   — t        |t        «      sd | _        yr    )r/   r   rJ   )r"   Úos     r$   ÚvisitzPreBuildVisitor.visitŒ   s   € Ü˜!œVÔ$Ø)-ˆDÔ&Ør&   c                ó„   •— |j                   r%|j                  j                  | j                  «       t        ‰| �  |«      S ©N)Úis_alias_defÚrvaluer1   rM   r=   Úvisit_assignment_stmt©r"   ÚstmtrR   s     €r$   rZ   z%PreBuildVisitor.visit_assignment_stmt‘   s6   ø€ ð ×ÒØ�K‰K×Ñ˜t×9Ñ9Ô:Ü‰wÑ,¨TÓ2Ð2r&   c                ó@   •— d | _         t        ‰| �	  |«       d | _         y rW   )rJ   r=   Úvisit_block)r"   ÚblockrR   s     €r$   r^   zPreBuildVisitor.visit_block˜   s    ø€ Ø%)ˆÔ"Ü‰Ñ˜EÔ"Ø%)ˆÕ"r&   c                óZ   •— | j                  |j                  «       t        ‰| �  |«       y rW   )Úrecord_deleted_namesÚexprr=   Úvisit_del_stmtr[   s     €r$   rc   zPreBuildVisitor.visit_del_stmt�   s"   ø€ Ø×!Ñ! $§)¡)Ô,Ü‰Ñ˜tÕ$r&   c                ó  — t        |t        «      r@t        |j                  t        «      r&| j                  j                  |j                  «       y t        |t        t        f«      r#|j                  D ]  }| j                  |«       Œ y y rW   )
r/   r   r5   r   rD   Úaddr   r   Úitemsra   )r"   rb   Úitems      r$   ra   z$PreBuildVisitor.record_deleted_names¡   sf   € Ü�dœHÔ%¬*°T·Y±YÄÔ*DØ×Ñ×!Ñ! $§)¡)Õ,Ü˜œx¬Ð3Ô4ØŸ
™
ò 0�Ø×)Ñ)¨$Õ/ñ0ð 5r&   c                óî  •— |j                   rÙt        |j                   d   t        «      rB|j                   d   j                  dk(  r&| j                  j                  |j                  «       nz|j                   j                  «       }|j                  | j                  v r/| j                  |j                     }t        |«      D ]  }||= Œ |sy || j                  |j                  <   t        ‰| �1  |«       y )Nr   Úsetter)Ú
decoratorsr/   r   ÚnamerC   re   ÚfuncÚcopyrH   ÚreversedrG   r=   Úvisit_decorator)r"   ÚdecÚdecorators_to_storeÚ	to_removeÚirR   s        €r$   ro   zPreBuildVisitor.visit_decorator¨   sÌ   ø€ Ø�>Š>ô ˜#Ÿ.™.¨Ñ+¬ZÔ8¸S¿^¹^ÈAÑ=N×=SÑ=SÐW_Ò=_à×!Ñ!×%Ñ% c§h¡hÕ/à&)§n¡n×&9Ñ&9Ó&;Ð#Ø—8‘8˜t×8Ñ8Ñ8Ø $× 9Ñ 9¸#¿(¹(Ñ C�Iä% iÓ0ò 3˜Ø/°Ñ2ð3ñ /Øà5H�×(Ñ(¨¯©Ñ2Ü‰Ñ Õ$r&   c                óH   — | j                  |«       | j                  |«       y rW   )Ú
visit_funcÚvisit_symbol_node)r"   Úfdefs     r$   Úvisit_func_defzPreBuildVisitor.visit_func_defÃ   s   € à�‰˜ÔØ×Ñ˜tÕ$r&   c                ó&   — | j                  |«       y rW   )ru   ©r"   rb   s     r$   r%   z!PreBuildVisitor.visit_lambda_exprÈ   s   € Ø�‰˜Õr&   c                óN  •— | j                   rT| j                  j                  | j                   d   g «      j                  |«       | j                   d   | j                  |<   | j                   j                  |«       t
        ‰| �  |«       | j                   j                  «        y ©Néÿÿÿÿ)rA   rE   Ú
setdefaultÚappendrF   r=   ru   Úpop)r"   rl   rR   s     €r$   ru   zPreBuildVisitor.visit_funcË   s~   ø€ ð
 �:Š:ð ×$Ñ$×/Ñ/°·
±
¸2±ÀÓC×JÑJÈ4ÔPð '+§j¡j°¡nˆD×Ñ˜dÑ#à�
‰
×Ñ˜$ÔÜ‰Ñ˜4Ô Ø�
‰
�‰Õr&   c                ó  •— d}| j                   sT| j                  €!t        d«      | _        d| j                  _        | j                   j	                  | j                  «       d}t        d| j
                  › d�«      }| xj
                  dz  c_        |j                  |_        || j                  |<   | j                  j                  | j                   d   g «      j	                  |«       | j                   d   | j                  |<   | j                   j	                  |«       t        |t        «      rt        ‰| �5  |«       nt        ‰| �9  |«       | j                   j                  «        |r| j                   j                  «        yy)	zýVisit a comprehension that contains lambdas.

        Creates a synthetic FuncDef to represent the comprehension's scope,
        registers it in the function nesting hierarchy, and traverses the
        comprehension body with it on the stack.
        FNÚ__mypyc_module__é   TÚ__comprehension_Ú__r}   )rA   rN   r
   Úliner   rO   rP   rE   r~   rF   r/   r   r=   Úvisit_generator_exprÚvisit_dictionary_comprehensionr€   )r"   rT   Úpushed_moduleÚcomprehension_fdefrR   s       €r$   Ú_visit_comprehension_with_scopez/PreBuildVisitor._visit_comprehension_with_scopeÜ   sE  ø€ ð ˆØ�zŠzà×!Ñ!Ð)Ü%,Ð-?Ó%@�Ô"Ø*+�×"Ñ"Ô'Ø�J‰J×Ñ˜d×0Ñ0Ô1Ø ˆMô %Ð'7¸×8SÑ8SÐ7TÐTVÐ%WÓXÐØ×#Ò# qÑ(Õ#Ø"#§&¡&ÐÔØ);ˆ×#Ñ# AÑ&ð 	× Ñ ×+Ñ+¨D¯J©J°r©N¸BÓ?×FÑFÐGYÔZØ04·
±
¸2±ˆ×ÑÐ,Ñ-ð 	�
‰
×ÑÐ,Ô-Ü�aœÔ'Ü‰GÑ(¨Õ+ä‰GÑ2°1Ô5Ø�
‰
�‰ÔáØ�J‰J�N‰NÕð r&   c                ó^   •— t        |«      r| j                  |«       y t        ‰| �  |«       y rW   )r9   r‹   r=   r‡   ©r"   rT   rR   s     €r$   r‡   z$PreBuildVisitor.visit_generator_expr  s&   ø€ Ü$ QÔ'Ø×0Ñ0°Õ3ä‰GÑ(¨Õ+r&   c                ó^   •— t        |«      r| j                  |«       y t        ‰| �  |«       y rW   )r9   r‹   r=   rˆ   r�   s     €r$   rˆ   z.PreBuildVisitor.visit_dictionary_comprehension  s&   ø€ Ü$ QÔ'Ø×0Ñ0°Õ3ä‰GÑ2°1Õ5r&   c                ó¼   •— | j                   �)| j                  | j                      j                  |«       n|g| j                  |<   || _         t        ‰| �  |«       y rW   )rJ   rI   r   r=   Úvisit_import)r"   ÚimprR   s     €r$   r�   zPreBuildVisitor.visit_import  sU   ø€ Ø×%Ñ%Ð1Ø×%Ñ% d×&@Ñ&@ÑA×HÑHÈÕMà.1¨UˆD×%Ñ% cÑ*Ø),ˆDÔ&Ü‰Ñ˜SÕ!r&   c                ó|   — t        |j                  t        t        f«      r| j	                  |j                  «       y y rW   )r/   r5   r   r
   rv   rz   s     r$   Úvisit_name_exprzPreBuildVisitor.visit_name_expr  s+   € Ü�d—i‘i¤#¤w Ô0Ø×"Ñ" 4§9¡9Õ-ð 1r&   c                ó²   •— |j                   r;| j                  j                  d| j                  j                  |j
                  «       t        ‰| �  |«       y )NzKSurrogate codepoints in string literals not supported, use chr(...) instead)Úhas_surrogatesrK   ÚerrorrL   Úpathr†   r=   Úvisit_str_exprr�   s     €r$   r˜   zPreBuildVisitor.visit_str_expr  sH   ø€ ð ×ÒØ�K‰K×ÑØ]Ø×!Ñ!×&Ñ&Ø—‘ôô
 	‰Ñ˜qÕ!r&   c                ó&   — | j                  |«       y rW   )rv   )r"   Úvars     r$   Ú	visit_varzPreBuildVisitor.visit_var$  s   € Ø×Ñ˜sÕ#r&   c                óì  — | j                   sy || j                  v r½| j                  |   }| j                  | j                   d   |«      r]| j                   d   | j                  |<   | j                  j	                  | j                   d   t        «       «      j                  |«       y | j                  || j                   d   «      r| j                  |«       y y | j                   d   | j                  |<   y r|   )rA   r@   Ú	is_parentr?   r~   rB   re   Úadd_free_variable)r"   ÚsymbolÚ	orig_funcs      r$   rv   z!PreBuildVisitor.visit_symbol_node'  sÌ   € Ø�zŠzð à�T×*Ñ*Ñ*Ø×-Ñ-¨fÑ5ˆIØ�~‰~˜dŸj™j¨™n¨iÔ8ð
 15·
±
¸2±�×%Ñ% fÑ-à×#Ñ#×.Ñ.¨t¯z©z¸"©~¼s»uÓE×IÑIÈ&ÕQà—‘ 	¨4¯:©:°b©>Ô:ð ×&Ñ& vÕ.ð	 ;ð -1¯J©J°r©NˆD×!Ñ! &Ò)r&   c                óp   — || j                   vry| j                   |   }||k(  xs | j                  ||«      S )NF)rF   r�   )r"   ÚfitemÚchildÚparents       r$   r�   zPreBuildVisitor.is_parentD  s?   € ð ˜×)Ñ)Ñ)ØØ×"Ñ" 5Ñ)ˆØ˜‰Ò? $§.¡.°¸Ó"?Ð?r&   c                óˆ   — | j                   |   }| j                  j                  |t        «       «      j	                  |«       y rW   )r@   r?   r~   rB   re   )r"   rŸ   rl   s      r$   rž   z!PreBuildVisitor.add_free_variableL  s7   € ð ×$Ñ$ VÑ,ˆØ×Ñ×&Ñ& t¬S«UÓ3×7Ñ7¸Õ?r&   )
rK   r   rL   r   rH   zdict[FuncDef, list[int]]rQ   zdict[Expression, Type]r'   r(   )rT   r   r'   Úbool)r\   r   r'   r(   )r_   r   r'   r(   )r\   r   r'   r(   )rb   r	   r'   r(   )rp   r   r'   r(   )rw   r
   r'   r(   )rb   r   r'   r(   )rl   r   r'   r(   )rT   ú'GeneratorExpr | DictionaryComprehensionr'   r(   )rT   r   r'   r(   )rT   r   r'   r(   )r‘   r   r'   r(   )rb   r   r'   r(   )rT   r   r'   r(   )rš   r   r'   r(   )rŸ   r   r'   r(   )r¢   r   r£   r   r'   r¦   )r)   r*   r+   r,   r>   rU   rZ   r^   rc   ra   ro   rx   r%   ru   r‹   r‡   rˆ   r�   r“   r˜   r›   rv   r�   rž   Ú__classcell__)rR   s   @r$   r;   r;   ;   s¬   ø„ ñð@aàð@að ð@að 7ð	@að
 &ð@að 
õ@aóDõ
3õ*õ
%ó0õ%ó6%ó
õõ"#õJ,õ6õ"ó.õ	"ó$ó;ó:@÷@r&   r;   N)r5   r§   r'   r¦   )#Ú
__future__r   Ú
mypy.nodesr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   Úmypy.traverserr   r   Ú
mypy.typesr   Úmypyc.errorsr   Ú mypyc.irbuild.missingtypevisitorr   r   r9   r;   r-   r&   r$   ú<module>r¯      sX   ðÝ "÷÷ ÷ ÷ ÷ ó ÷, FÝ Ý Ý @ôÐ%ô óô&U@Ð.õ U@r&   