
    X-Ph!                        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 d dlmZ d dlmZ d dlmZ d dlmZ  G d de          Zd	S )
    )annotations)AssignmentStmtBlock	Decorator
ExpressionFuncDefFuncItemImport
LambdaExpr
MemberExprMypyFileNameExprNode
SymbolNodeVar)ExtendedTraverserVisitor)Type)Errors)MissingTypesVisitorc                       e Zd ZdZd2 fdZd3dZd4 fdZd5 fdZd6 fdZd7dZ	d8dZ
d9 fd"Zd: fd%Zd;d'Zd<d*Zd=d-Zd>d0Zd=d1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.
    errorsr   current_filer   decorators_to_removedict[FuncDef, list[int]]typesdict[Expression, Type]returnNonec                0   t                                                       i | _        i | _        g | _        t                      | _        i | _        i | _        i | _	        || _
        i | _        d | _        || _        || _        t          |          | _        d S N)super__init__free_variablessymbols_to_funcsfuncssetprop_settersencapsulating_funcsnested_funcsfuncs_to_decoratorsr   module_import_groups_current_import_groupr   r   r   missing_types_visitor)selfr   r   r   r   	__class__s        ]/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypyc/irbuild/prebuildvisitor.pyr#   zPreBuildVisitor.__init__(   s     	 @B =? &(
 +.%% DF  79 EG  ?S!
 AC!48"$&2%8%?%?"""    or   boolc                >    t          |t                    sd | _        dS )NT)
isinstancer
   r-   )r/   r3   s     r1   visitzPreBuildVisitor.visit[   s!    !V$$ 	.)-D&tr2   stmtr   c                    |j         r|j                            | j                   t	                                          |          S r!   )is_alias_defrvalueacceptr.   r"   visit_assignment_stmt)r/   r8   r0   s     r1   r=   z%PreBuildVisitor.visit_assignment_stmt`   sA      	;Kt9:::ww,,T222r2   blockr   c                f    d | _         t                                          |           d | _         d S r!   )r-   r"   visit_block)r/   r>   r0   s     r1   r@   zPreBuildVisitor.visit_blockg   s1    %)"E"""%)"""r2   decr   c                   |j         rt          |j         d         t                    r6|j         d         j        dk    r | j                            |j                   na|j                                         }|j        | j        v r+| j        |j                 }t          |          D ]}||= |sd S || j
        |j        <   t                                          |           d S )Nr   setter)
decoratorsr6   r   namer(   addfunccopyr   reversedr+   r"   visit_decorator)r/   rA   decorators_to_store	to_removeir0   s        r1   rJ   zPreBuildVisitor.visit_decoratorl   s    > 	I #.+Z88 IS^A=N=SW_=_=_!%%ch////&)n&9&9&;&;#8t888 $ 9#( CI%i00 3 3/22 / 5H(2$$$$$r2   fdefr   c                Z    |                      |           |                     |           d S r!   )
visit_funcvisit_symbol_node)r/   rN   s     r1   visit_func_defzPreBuildVisitor.visit_func_def   s.    t$$$$$r2   exprr   c                0    |                      |           d S r!   )rP   r/   rS   s     r1   visit_lambda_exprz!PreBuildVisitor.visit_lambda_expr   s    r2   rG   r	   c                Z   | j         rN| j                            | j         d         g                               |           | j         d         | j        |<   | j                             |           t                                          |           | j                                          d S N)r&   r)   
setdefaultappendr*   r"   rP   pop)r/   rG   r0   s     r1   rP   zPreBuildVisitor.visit_func   s    
 : 	5 $//
2CCJJ4PPP '+jnDd#
$4   
r2   impr
   c                    | j         &| j        | j                                      |           n|g| j        |<   || _         t                                          |           d S r!   )r-   r,   r[   r"   visit_import)r/   r]   r0   s     r1   r_   zPreBuildVisitor.visit_import   sc    %1%d&@AHHMMMM.1UD%c*),D&S!!!!!r2   r   c                    t          |j        t          t          f          r|                     |j                   d S d S r!   )r6   noder   r   rQ   rU   s     r1   visit_name_exprzPreBuildVisitor.visit_name_expr   s@    di#w00 	.""49-----	. 	.r2   varr   c                0    |                      |           d S r!   )rQ   )r/   rc   s     r1   	visit_varzPreBuildVisitor.visit_var   s    s#####r2   symbolr   c                   | j         sd S || j        v r| j        |         }|                     | j         d         |          r\| j         d         | j        |<   | j                            | j         d         t                                                    |           d S |                     || j         d                   r|                     |           d S d S | j         d         | j        |<   d S rX   )r&   r%   	is_parentr$   rZ   r'   rF   add_free_variable)r/   rf   	orig_funcs      r1   rQ   z!PreBuildVisitor.visit_symbol_node   s    z 	 FT***-f5I~~djni88 /
 15
2%f-#..tz"~suuEEII&QQQQQ	4:b>:: / &&v.....	/ / -1JrND!&)))r2   fitemchildc                j    || j         vrdS | j         |         }||k    p|                     ||          S )NF)r*   rh   )r/   rk   rl   parents       r1   rh   zPreBuildVisitor.is_parent   sA     )))5"5)?$.."?"??r2   c                    | j         |         }| j                            |t                                                    |           d S r!   )r%   r$   rZ   r'   rF   )r/   rf   rG   s      r1   ri   z!PreBuildVisitor.add_free_variable   sB     $V,&&tSUU3377?????r2   )
r   r   r   r   r   r   r   r   r   r   )r3   r   r   r4   )r8   r   r   r   )r>   r   r   r   )rA   r   r   r   )rN   r   r   r   )rS   r   r   r   )rG   r	   r   r   )r]   r
   r   r   )rS   r   r   r   )rc   r   r   r   )rf   r   r   r   )rk   r	   rl   r	   r   r4   )__name__
__module____qualname____doc__r#   r7   r=   r@   rJ   rR   rV   rP   r_   rb   re   rQ   rh   ri   __classcell__)r0   s   @r1   r   r      s        1@ 1@ 1@ 1@ 1@ 1@f   
3 3 3 3 3 3* * * * * *
% % % % % %6% % % %
        "" " " " " ". . . .$ $ $ $; ; ; ;:@ @ @ @@ @ @ @ @ @ @ @r2   r   N)
__future__r   
mypy.nodesr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   mypy.traverserr   
mypy.typesr   mypyc.errorsr    mypyc.irbuild.missingtypevisitorr   r    r2   r1   <module>r|      sJ   " " " " " "                                 4 3 3 3 3 3             @ @ @ @ @ @@ @ @ @ @. @ @ @ @ @r2   