
    hi,                    J   d Z ddl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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%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3  G d de$ee1                            Z4 G d d	e$d
                   Z5ddZ6d
S )z5Helpers for implementing generic IR to IR transforms.    )annotations)FinalOptional)+AssignAssignMulti
BasicBlockBoxBranchCallCallCCastComparisonOpDecRefExtendFloatComparisonOpFloatNegFloatOpGetAttrGetElementPtrGotoIncRef
InitStaticIntOp	KeepAliveLoadAddressLoadErrorValue
LoadGlobalLoadLiteralLoadMem
LoadStatic
MethodCallOp	OpVisitorPrimitiveOpRaiseStandardErrorReturnSetAttr
SetElementSetMemTruncateTupleGetTupleSetUnborrowUnboxUnreachableValue)LowLevelIRBuilderc                  b   e Zd ZdZd^dZd_d	Zd`dZdadZdbdZdcdZ	dddZ
dedZdfdZdgdZdhdZdid Zdjd"Zdkd$Zdld&Zdmd(Zdnd*Zdod,Zdpd.Zdqd0Zdrd2Zdsd4Zdtd6Zdud8Zdvd:Zdwd<Zdxd>Zdyd@ZdzdBZ d{dDZ!d|dFZ"d}dHZ#d~dJZ$ddLZ%ddNZ&ddPZ'ddRZ(ddTZ)ddVZ*ddXZ+ddZZ,dd\Z-d]S )IRTransforma   Identity transform.

    Subclass and override to perform changes to IR.

    Subclass IRTransform and override any OpVisitor visit_* methods
    that perform any IR changes. The default implementations implement
    an identity transform.

    A visit method can return None to remove ops. In this case the
    transform must ensure that no op uses the original removed op
    as a source after the transform.

    You can retain old BasicBlock and op references in ops. The transform
    will automatically patch these for you as needed.
    builderr1   returnNonec                "    || _         i | _        d S N)r4   op_map)selfr4   s     l/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/mypyc/transform/ir_transform.py__init__zIRTransform.__init__H   s     24    blockslist[BasicBlock]c                  	 i }| j         }t                      	|D ]}t                      }|||<   | j                            |           |j        |_        |j        D ] }|                    |           }||ur|||<   !t          |          r$t          |          s		                    |           	fd| j        j
        D             | j        _
        t          ||          }| j        j
        D ]M}|j        D ]}|                    |           |j        %|                    |j        |j                  |_        NdS )zTransform basic blocks that represent a single function.

        The result of the transform will be collected at self.builder.blocks.
        c                    g | ]}|v|	S  rB   ).0blockemptiess     r;   
<listcomp>z0IRTransform.transform_blocks.<locals>.<listcomp>b   s$    ^^^V]I]I]uI]I]I]r=   N)r9   setr   r4   activate_blockerror_handleropsacceptis_empty_blockaddr>   PatchVisitorget)
r:   r>   	block_mapr9   rD   	new_blockopnew_oppatcherrE   s
            @r;   transform_blockszIRTransform.transform_blocksN   sd   
 35	%% 	' 	'E"I(IeL''	222&+&9I#i ( (4##!'F2Ji(( '1F1F 'I&&&^^^^$,2E^^^vy11\( 	^ 	^Ei # #		'""""".&/mmE4GI\&]&]#		^ 	^r=   rR   r"   r0   c                6    | j                             |          S r8   )r4   rM   r:   rR   s     r;   rM   zIRTransform.addk   s    |###r=   r   c                0    |                      |           d S r8   rM   rW   s     r;   
visit_gotozIRTransform.visit_goton       r=   r
   c                0    |                      |           d S r8   rY   rW   s     r;   visit_branchzIRTransform.visit_branchq   r[   r=   r&   c                0    |                      |           d S r8   rY   rW   s     r;   visit_returnzIRTransform.visit_returnt   r[   r=   r/   c                0    |                      |           d S r8   rY   rW   s     r;   visit_unreachablezIRTransform.visit_unreachablew   r[   r=   r   Value | Nonec                p    |j         | j        v r| j        |j                  d S |                     |          S r8   )srcr9   rM   rW   s     r;   visit_assignzIRTransform.visit_assignz   s4    6T[  T[%8%@4xx||r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_assign_multizIRTransform.visit_assign_multi       xx||r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_load_error_valuez"IRTransform.visit_load_error_value   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_load_literalzIRTransform.visit_load_literal   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_get_attrzIRTransform.visit_get_attr   rh   r=   r'   c                ,    |                      |          S r8   rY   rW   s     r;   visit_set_attrzIRTransform.visit_set_attr   rh   r=   r    c                ,    |                      |          S r8   rY   rW   s     r;   visit_load_staticzIRTransform.visit_load_static   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_init_staticzIRTransform.visit_init_static   rh   r=   r+   c                ,    |                      |          S r8   rY   rW   s     r;   visit_tuple_getzIRTransform.visit_tuple_get   rh   r=   r,   c                ,    |                      |          S r8   rY   rW   s     r;   visit_tuple_setzIRTransform.visit_tuple_set   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_inc_refzIRTransform.visit_inc_ref   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_dec_refzIRTransform.visit_dec_ref   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   
visit_callzIRTransform.visit_call   rh   r=   r!   c                ,    |                      |          S r8   rY   rW   s     r;   visit_method_callzIRTransform.visit_method_call   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   
visit_castzIRTransform.visit_cast   rh   r=   r	   c                ,    |                      |          S r8   rY   rW   s     r;   	visit_boxzIRTransform.visit_box   rh   r=   r.   c                ,    |                      |          S r8   rY   rW   s     r;   visit_unboxzIRTransform.visit_unbox   rh   r=   r%   c                ,    |                      |          S r8   rY   rW   s     r;   visit_raise_standard_errorz&IRTransform.visit_raise_standard_error   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_call_czIRTransform.visit_call_c   rh   r=   r$   c                ,    |                      |          S r8   rY   rW   s     r;   visit_primitive_opzIRTransform.visit_primitive_op   rh   r=   r*   c                ,    |                      |          S r8   rY   rW   s     r;   visit_truncatezIRTransform.visit_truncate   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_extendzIRTransform.visit_extend   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_load_globalzIRTransform.visit_load_global   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_int_opzIRTransform.visit_int_op   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_comparison_opzIRTransform.visit_comparison_op   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_float_opzIRTransform.visit_float_op   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_float_negzIRTransform.visit_float_neg   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_float_comparison_opz%IRTransform.visit_float_comparison_op   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_load_memzIRTransform.visit_load_mem   rh   r=   r)   c                ,    |                      |          S r8   rY   rW   s     r;   visit_set_memzIRTransform.visit_set_mem   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_get_element_ptrz!IRTransform.visit_get_element_ptr   rh   r=   r(   c                ,    |                      |          S r8   rY   rW   s     r;   visit_set_elementzIRTransform.visit_set_element   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_load_addresszIRTransform.visit_load_address   rh   r=   r   c                ,    |                      |          S r8   rY   rW   s     r;   visit_keep_alivezIRTransform.visit_keep_alive   rh   r=   r-   c                ,    |                      |          S r8   rY   rW   s     r;   visit_unborrowzIRTransform.visit_unborrow   rh   r=   N)r4   r1   r5   r6   )r>   r?   r5   r6   )rR   r"   r5   r0   rR   r   r5   r6   rR   r
   r5   r6   rR   r&   r5   r6   rR   r/   r5   r6   )rR   r   r5   rb   )rR   r   r5   rb   )rR   r   r5   rb   )rR   r   r5   rb   )rR   r   r5   rb   )rR   r'   r5   rb   )rR   r    r5   rb   )rR   r   r5   rb   )rR   r+   r5   rb   )rR   r,   r5   rb   )rR   r   r5   rb   )rR   r   r5   rb   )rR   r   r5   rb   )rR   r!   r5   rb   )rR   r   r5   rb   )rR   r	   r5   rb   )rR   r.   r5   rb   )rR   r%   r5   rb   )rR   r   r5   rb   )rR   r$   r5   rb   )rR   r*   r5   rb   )rR   r   r5   rb   )rR   r   r5   rb   )rR   r   r5   rb   )rR   r   r5   rb   )rR   r   r5   rb   )rR   r   r5   rb   )rR   r   r5   rb   )rR   r   r5   rb   )rR   r)   r5   rb   )rR   r   r5   rb   )rR   r(   r5   rb   )rR   r   r5   rb   )rR   r   r5   rb   )rR   r-   r5   rb   ).__name__
__module____qualname____doc__r<   rU   rM   rZ   r]   r_   ra   re   rg   rj   rl   rn   rp   rr   rt   rv   rx   rz   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rB   r=   r;   r3   r3   7   sj         4 4 4 4^ ^ ^ ^:$ $ $ $                                                                                                                       r=   r3   c                  ^   e Zd Zd]dZd^d
Zd_dZd`dZdadZdbdZdcdZ	dddZ
dedZdfdZdgdZdhdZdid!Zdjd#Zdkd%Zdld'Zdmd)Zdnd+Zdod-Zdpd/Zdqd1Zdrd3Zdsd5Zdtd7Zdud9Zdvd;Zdwd=Zdxd?ZdydAZdzdCZ d{dEZ!d|dGZ"d}dIZ#d~dKZ$ddMZ%ddOZ&ddQZ'ddSZ(ddUZ)ddWZ*ddYZ+dd[Z,d\S )rN   r9   dict[Value, Value | None]rP   dict[BasicBlock, BasicBlock]r5   r6   c                "    || _         || _        d S r8   )r9   rP   )r:   r9   rP   s      r;   r<   zPatchVisitor.__init__   s     $ )r=   rR   r0   c                T    | j                             ||          }|
J d            |S )Nzuse of removed op)r9   rO   r:   rR   news      r;   fix_opzPatchVisitor.fix_op   s,    koob"%% 3
r=   rD   r   c                8    | j                             ||          S r8   )rP   rO   )r:   rD   s     r;   	fix_blockzPatchVisitor.fix_block   s    ~!!%///r=   r   c                D    |                      |j                  |_        d S r8   )r   labelrW   s     r;   rZ   zPatchVisitor.visit_goto   s    >>"(++r=   r
   c                    |                      |j                  |_        |                     |j                  |_        |                     |j                  |_        d S r8   )r   valuer   truefalserW   s     r;   r]   zPatchVisitor.visit_branch   sE    ;;rx((..))>>"(++r=   r&   c                D    |                      |j                  |_        d S r8   r   r   rW   s     r;   r_   zPatchVisitor.visit_return       ;;rx((r=   r/   c                    d S r8   rB   rW   s     r;   ra   zPatchVisitor.visit_unreachable      r=   r   c                D    |                      |j                  |_        d S r8   r   rd   rW   s     r;   re   zPatchVisitor.visit_assign      RV$$r=   r   c                8      fd|j         D             |_         d S )Nc                :    g | ]}                     |          S rB   r   rC   sr:   s     r;   rF   z3PatchVisitor.visit_assign_multi.<locals>.<listcomp>  #    111Q$++a..111r=   rd   rW   s   ` r;   rg   zPatchVisitor.visit_assign_multi  $    1111"&111r=   r   c                    d S r8   rB   rW   s     r;   rj   z#PatchVisitor.visit_load_error_value
  r   r=   r   c                    d S r8   rB   rW   s     r;   rl   zPatchVisitor.visit_load_literal  r   r=   r   c                D    |                      |j                  |_        d S r8   )r   objrW   s     r;   rn   zPatchVisitor.visit_get_attr  r   r=   r'   c                    |                      |j                  |_        |                      |j                  |_        d S r8   )r   r   rd   rW   s     r;   rp   zPatchVisitor.visit_set_attr  0    RV$$RV$$r=   r    c                    d S r8   rB   rW   s     r;   rr   zPatchVisitor.visit_load_static  r   r=   r   c                D    |                      |j                  |_        d S r8   r   rW   s     r;   rt   zPatchVisitor.visit_init_static  r   r=   r+   c                D    |                      |j                  |_        d S r8   r   rW   s     r;   rv   zPatchVisitor.visit_tuple_get  r   r=   r,   c                8      fd|j         D             |_         d S )Nc                :    g | ]}                     |          S rB   r   )rC   itemr:   s     r;   rF   z0PatchVisitor.visit_tuple_set.<locals>.<listcomp>!  s%    ;;;$DKK%%;;;r=   )itemsrW   s   ` r;   rx   zPatchVisitor.visit_tuple_set   s$    ;;;;"(;;;r=   r   c                D    |                      |j                  |_        d S r8   r   rW   s     r;   rz   zPatchVisitor.visit_inc_ref#  r   r=   r   c                D    |                      |j                  |_        d S r8   r   rW   s     r;   r|   zPatchVisitor.visit_dec_ref&  r   r=   r   c                8      fd|j         D             |_         d S )Nc                :    g | ]}                     |          S rB   r   rC   argr:   s     r;   rF   z+PatchVisitor.visit_call.<locals>.<listcomp>*  %    7774;;s##777r=   argsrW   s   ` r;   r~   zPatchVisitor.visit_call)  $    7777rw777r=   r!   c                v                           |j                  |_         fd|j        D             |_        d S )Nc                :    g | ]}                     |          S rB   r   r   s     r;   rF   z2PatchVisitor.visit_method_call.<locals>.<listcomp>.  r   r=   )r   r   r   rW   s   ` r;   r   zPatchVisitor.visit_method_call,  s9    RV$$7777rw777r=   r   c                D    |                      |j                  |_        d S r8   r   rW   s     r;   r   zPatchVisitor.visit_cast0  r   r=   r	   c                D    |                      |j                  |_        d S r8   r   rW   s     r;   r   zPatchVisitor.visit_box3  r   r=   r.   c                D    |                      |j                  |_        d S r8   r   rW   s     r;   r   zPatchVisitor.visit_unbox6  r   r=   r%   c                |    t          |j        t                    r!|                     |j                  |_        d S d S r8   )
isinstancer   r0   r   rW   s     r;   r   z'PatchVisitor.visit_raise_standard_error9  s9    bh&& 	-{{28,,BHHH	- 	-r=   r   c                8      fd|j         D             |_         d S )Nc                :    g | ]}                     |          S rB   r   r   s     r;   rF   z-PatchVisitor.visit_call_c.<locals>.<listcomp>>  r   r=   r   rW   s   ` r;   r   zPatchVisitor.visit_call_c=  r   r=   r$   c                8      fd|j         D             |_         d S )Nc                :    g | ]}                     |          S rB   r   r   s     r;   rF   z3PatchVisitor.visit_primitive_op.<locals>.<listcomp>A  r   r=   r   rW   s   ` r;   r   zPatchVisitor.visit_primitive_op@  r   r=   r*   c                D    |                      |j                  |_        d S r8   r   rW   s     r;   r   zPatchVisitor.visit_truncateC  r   r=   r   c                D    |                      |j                  |_        d S r8   r   rW   s     r;   r   zPatchVisitor.visit_extendF  r   r=   r   c                    d S r8   rB   rW   s     r;   r   zPatchVisitor.visit_load_globalI  r   r=   r   c                    |                      |j                  |_        |                      |j                  |_        d S r8   r   lhsrhsrW   s     r;   r   zPatchVisitor.visit_int_opL  r   r=   r   c                    |                      |j                  |_        |                      |j                  |_        d S r8   r   rW   s     r;   r   z PatchVisitor.visit_comparison_opP  r   r=   r   c                    |                      |j                  |_        |                      |j                  |_        d S r8   r   rW   s     r;   r   zPatchVisitor.visit_float_opT  r   r=   r   c                D    |                      |j                  |_        d S r8   r   rW   s     r;   r   zPatchVisitor.visit_float_negX  r   r=   r   c                    |                      |j                  |_        |                      |j                  |_        d S r8   r   rW   s     r;   r   z&PatchVisitor.visit_float_comparison_op[  r   r=   r   c                D    |                      |j                  |_        d S r8   r   rW   s     r;   r   zPatchVisitor.visit_load_mem_  r   r=   r)   c                    |                      |j                  |_        |                      |j                  |_        d S r8   )r   destrd   rW   s     r;   r   zPatchVisitor.visit_set_memb  s0    ++bg&&RV$$r=   r   c                D    |                      |j                  |_        d S r8   r   rW   s     r;   r   z"PatchVisitor.visit_get_element_ptrf  r   r=   r(   c                D    |                      |j                  |_        d S r8   r   rW   s     r;   r   zPatchVisitor.visit_set_elementi  r   r=   r   c                    t          |j        t                    rB|                     |j                  }t          |t                    s
J |            ||_        d S d S r8   )r   rd   r    r   r   s      r;   r   zPatchVisitor.visit_load_addressl  s\    bfj)) 	++bf%%Cc:..33333BFFF	 	r=   r   c                8      fd|j         D             |_         d S )Nc                :    g | ]}                     |          S rB   r   r   s     r;   rF   z1PatchVisitor.visit_keep_alive.<locals>.<listcomp>s  r   r=   r   rW   s   ` r;   r   zPatchVisitor.visit_keep_aliver  r   r=   r-   c                D    |                      |j                  |_        d S r8   r   rW   s     r;   r   zPatchVisitor.visit_unborrowu  r   r=   N)r9   r   rP   r   r5   r6   )rR   r0   r5   r0   )rD   r   r5   r   r   r   r   r   )rR   r   r5   r6   )rR   r   r5   r6   )rR   r   r5   r6   )rR   r   r5   r6   )rR   r   r5   r6   )rR   r'   r5   r6   )rR   r    r5   r6   )rR   r   r5   r6   )rR   r+   r5   r6   )rR   r,   r5   r6   )rR   r   r5   r6   )rR   r   r5   r6   )rR   r   r5   r6   )rR   r!   r5   r6   )rR   r   r5   r6   )rR   r	   r5   r6   )rR   r.   r5   r6   )rR   r%   r5   r6   )rR   r   r5   r6   )rR   r$   r5   r6   )rR   r*   r5   r6   )rR   r   r5   r6   )rR   r   r5   r6   )rR   r   r5   r6   )rR   r   r5   r6   )rR   r   r5   r6   )rR   r   r5   r6   )rR   r   r5   r6   )rR   r   r5   r6   )rR   r)   r5   r6   )rR   r   r5   r6   )rR   r(   r5   r6   )rR   r   r5   r6   )rR   r   r5   r6   )rR   r-   r5   r6   )-r   r   r   r<   r   r   rZ   r]   r_   ra   re   rg   rj   rl   rn   rp   rr   rt   rv   rx   rz   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rB   r=   r;   rN   rN      s\       * * * *   
0 0 0 0, , , ,, , , ,
) ) ) )   % % % %2 2 2 2      % % % %% % % %   ) ) ) )% % % %< < < <% % % %% % % %8 8 8 88 8 8 8% % % %% % % %% % % %- - - -8 8 8 88 8 8 8% % % %% % % %   % % % %% % % %% % % %% % % %% % % %% % % %% % % %% % % %% % % %   2 2 2 2% % % % % %r=   rN   NrD   r   r5   boolc                r    t          | j                  dk    ot          | j        d         t                    S )N   r   )lenrJ   r   r/   )rD   s    r;   rL   rL   y  s*    uy>>QH:eilK#H#HHr=   )rD   r   r5   r	  )7r   
__future__r   typingr   r   mypyc.ir.opsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   mypyc.irbuild.ll_builderr1   r3   rN   rL   rB   r=   r;   <module>r     s   ; ; " " " " " " " " " " " " " ", , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,Z 7 6 6 6 6 6m m m m m)HUO, m m m`O% O% O% O% O%9T? O% O% O%dI I I I I Ir=   