
    X-Ph,                    F   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/m0Z0 ddl1m2Z2  G d de$ee0                            Z3 G d d	e$d
                   Z4ddZ5d
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SetMemTruncateTupleGetTupleSetUnborrowUnboxUnreachableValue)LowLevelIRBuilderc                  Z   e Zd ZdZd\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dod0Zdpd2Zdqd4Zdrd6Zdsd8Zdtd:Zdud<Zdvd>Zdwd@ZdxdBZ dydDZ!dzdFZ"d{dHZ#d|dJZ$d}dLZ%d~dNZ&ddPZ'ddRZ(ddTZ)ddVZ*ddXZ+ddZ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.
    builderr0   returnNonec                "    || _         i | _        d S N)r3   op_map)selfr3   s     \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypyc/transform/ir_transform.py__init__zIRTransform.__init__G   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  rA   ).0blockemptiess     r:   
<listcomp>z0IRTransform.transform_blocks.<locals>.<listcomp>a   s$    ^^^V]I]I]uI]I]I]r<   N)r8   setr   r3   activate_blockerror_handleropsacceptis_empty_blockaddr=   PatchVisitorget)
r9   r=   	block_mapr8   rC   	new_blockopnew_oppatcherrD   s
            @r:   transform_blockszIRTransform.transform_blocksM   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<   rQ   r"   r/   c                6    | j                             |          S r7   )r3   rL   r9   rQ   s     r:   rL   zIRTransform.addj   s    |###r<   r   c                0    |                      |           d S r7   rL   rV   s     r:   
visit_gotozIRTransform.visit_gotom       r<   r
   c                0    |                      |           d S r7   rX   rV   s     r:   visit_branchzIRTransform.visit_branchp   rZ   r<   r&   c                0    |                      |           d S r7   rX   rV   s     r:   visit_returnzIRTransform.visit_returns   rZ   r<   r.   c                0    |                      |           d S r7   rX   rV   s     r:   visit_unreachablezIRTransform.visit_unreachablev   rZ   r<   r   Value | Nonec                p    |j         | j        v r| j        |j                  d S |                     |          S r7   )srcr8   rL   rV   s     r:   visit_assignzIRTransform.visit_assigny   s4    6T[  T[%8%@4xx||r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_assign_multizIRTransform.visit_assign_multi       xx||r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_load_error_valuez"IRTransform.visit_load_error_value   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_load_literalzIRTransform.visit_load_literal   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_get_attrzIRTransform.visit_get_attr   rg   r<   r'   c                ,    |                      |          S r7   rX   rV   s     r:   visit_set_attrzIRTransform.visit_set_attr   rg   r<   r    c                ,    |                      |          S r7   rX   rV   s     r:   visit_load_staticzIRTransform.visit_load_static   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_init_staticzIRTransform.visit_init_static   rg   r<   r*   c                ,    |                      |          S r7   rX   rV   s     r:   visit_tuple_getzIRTransform.visit_tuple_get   rg   r<   r+   c                ,    |                      |          S r7   rX   rV   s     r:   visit_tuple_setzIRTransform.visit_tuple_set   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_inc_refzIRTransform.visit_inc_ref   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_dec_refzIRTransform.visit_dec_ref   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   
visit_callzIRTransform.visit_call   rg   r<   r!   c                ,    |                      |          S r7   rX   rV   s     r:   visit_method_callzIRTransform.visit_method_call   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   
visit_castzIRTransform.visit_cast   rg   r<   r	   c                ,    |                      |          S r7   rX   rV   s     r:   	visit_boxzIRTransform.visit_box   rg   r<   r-   c                ,    |                      |          S r7   rX   rV   s     r:   visit_unboxzIRTransform.visit_unbox   rg   r<   r%   c                ,    |                      |          S r7   rX   rV   s     r:   visit_raise_standard_errorz&IRTransform.visit_raise_standard_error   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_call_czIRTransform.visit_call_c   rg   r<   r$   c                ,    |                      |          S r7   rX   rV   s     r:   visit_primitive_opzIRTransform.visit_primitive_op   rg   r<   r)   c                ,    |                      |          S r7   rX   rV   s     r:   visit_truncatezIRTransform.visit_truncate   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_extendzIRTransform.visit_extend   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_load_globalzIRTransform.visit_load_global   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_int_opzIRTransform.visit_int_op   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_comparison_opzIRTransform.visit_comparison_op   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_float_opzIRTransform.visit_float_op   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_float_negzIRTransform.visit_float_neg   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_float_comparison_opz%IRTransform.visit_float_comparison_op   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_load_memzIRTransform.visit_load_mem   rg   r<   r(   c                ,    |                      |          S r7   rX   rV   s     r:   visit_set_memzIRTransform.visit_set_mem   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_get_element_ptrz!IRTransform.visit_get_element_ptr   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_load_addresszIRTransform.visit_load_address   rg   r<   r   c                ,    |                      |          S r7   rX   rV   s     r:   visit_keep_alivezIRTransform.visit_keep_alive   rg   r<   r,   c                ,    |                      |          S r7   rX   rV   s     r:   visit_unborrowzIRTransform.visit_unborrow   rg   r<   N)r3   r0   r4   r5   )r=   r>   r4   r5   )rQ   r"   r4   r/   rQ   r   r4   r5   rQ   r
   r4   r5   rQ   r&   r4   r5   rQ   r.   r4   r5   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r'   r4   ra   )rQ   r    r4   ra   )rQ   r   r4   ra   )rQ   r*   r4   ra   )rQ   r+   r4   ra   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r!   r4   ra   )rQ   r   r4   ra   )rQ   r	   r4   ra   )rQ   r-   r4   ra   )rQ   r%   r4   ra   )rQ   r   r4   ra   )rQ   r$   r4   ra   )rQ   r)   r4   ra   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r(   r4   ra   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r   r4   ra   )rQ   r,   r4   ra   )-__name__
__module____qualname____doc__r;   rT   rL   rY   r\   r^   r`   rd   rf   ri   rk   rm   ro   rq   rs   ru   rw   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rA   r<   r:   r2   r2   6   sV         4 4 4 4^ ^ ^ ^:$ $ $ $                                                                                                                    r<   r2   c                  V   e Zd Zd[dZd\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dod1Zdpd3Zdqd5Zdrd7Zdsd9Zdtd;Zdud=Zdvd?ZdwdAZdxdCZ dydEZ!dzdGZ"d{dIZ#d|dKZ$d}dMZ%d~dOZ&ddQZ'ddSZ(ddUZ)ddWZ*ddYZ+dZS )rM   r8   dict[Value, Value | None]rO   dict[BasicBlock, BasicBlock]r4   r5   c                "    || _         || _        d S r7   )r8   rO   )r9   r8   rO   s      r:   r;   zPatchVisitor.__init__   s     $ )r<   rQ   r/   c                T    | j                             ||          }|
J d            |S )Nzuse of removed op)r8   rN   r9   rQ   news      r:   fix_opzPatchVisitor.fix_op   s,    koob"%% 3
r<   rC   r   c                8    | j                             ||          S r7   )rO   rN   )r9   rC   s     r:   	fix_blockzPatchVisitor.fix_block   s    ~!!%///r<   r   c                D    |                      |j                  |_        d S r7   )r   labelrV   s     r:   rY   zPatchVisitor.visit_goto   s    >>"(++r<   r
   c                    |                      |j                  |_        |                     |j                  |_        |                     |j                  |_        d S r7   )r   valuer   truefalserV   s     r:   r\   zPatchVisitor.visit_branch   sE    ;;rx((..))>>"(++r<   r&   c                D    |                      |j                  |_        d S r7   r   r   rV   s     r:   r^   zPatchVisitor.visit_return       ;;rx((r<   r.   c                    d S r7   rA   rV   s     r:   r`   zPatchVisitor.visit_unreachable       r<   r   c                D    |                      |j                  |_        d S r7   r   rc   rV   s     r:   rd   zPatchVisitor.visit_assign       RV$$r<   r   c                8      fd|j         D             |_         d S )Nc                :    g | ]}                     |          S rA   r   rB   sr9   s     r:   rE   z3PatchVisitor.visit_assign_multi.<locals>.<listcomp>  #    111Q$++a..111r<   rc   rV   s   ` r:   rf   zPatchVisitor.visit_assign_multi  $    1111"&111r<   r   c                    d S r7   rA   rV   s     r:   ri   z#PatchVisitor.visit_load_error_value  r   r<   r   c                    d S r7   rA   rV   s     r:   rk   zPatchVisitor.visit_load_literal	  r   r<   r   c                D    |                      |j                  |_        d S r7   )r   objrV   s     r:   rm   zPatchVisitor.visit_get_attr  r   r<   r'   c                    |                      |j                  |_        |                      |j                  |_        d S r7   )r   r   rc   rV   s     r:   ro   zPatchVisitor.visit_set_attr  0    RV$$RV$$r<   r    c                    d S r7   rA   rV   s     r:   rq   zPatchVisitor.visit_load_static  r   r<   r   c                D    |                      |j                  |_        d S r7   r   rV   s     r:   rs   zPatchVisitor.visit_init_static  r   r<   r*   c                D    |                      |j                  |_        d S r7   r   rV   s     r:   ru   zPatchVisitor.visit_tuple_get  r   r<   r+   c                8      fd|j         D             |_         d S )Nc                :    g | ]}                     |          S rA   r   )rB   itemr9   s     r:   rE   z0PatchVisitor.visit_tuple_set.<locals>.<listcomp>  s%    ;;;$DKK%%;;;r<   )itemsrV   s   ` r:   rw   zPatchVisitor.visit_tuple_set  s$    ;;;;"(;;;r<   r   c                D    |                      |j                  |_        d S r7   r   rV   s     r:   ry   zPatchVisitor.visit_inc_ref  r   r<   r   c                D    |                      |j                  |_        d S r7   r   rV   s     r:   r{   zPatchVisitor.visit_dec_ref"  r   r<   r   c                8      fd|j         D             |_         d S )Nc                :    g | ]}                     |          S rA   r   rB   argr9   s     r:   rE   z+PatchVisitor.visit_call.<locals>.<listcomp>&  %    7774;;s##777r<   argsrV   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 rA   r   r   s     r:   rE   z2PatchVisitor.visit_method_call.<locals>.<listcomp>*  r   r<   )r   r   r   rV   s   ` r:   r   zPatchVisitor.visit_method_call(  s9    RV$$7777rw777r<   r   c                D    |                      |j                  |_        d S r7   r   rV   s     r:   r   zPatchVisitor.visit_cast,  r   r<   r	   c                D    |                      |j                  |_        d S r7   r   rV   s     r:   r   zPatchVisitor.visit_box/  r   r<   r-   c                D    |                      |j                  |_        d S r7   r   rV   s     r:   r   zPatchVisitor.visit_unbox2  r   r<   r%   c                |    t          |j        t                    r!|                     |j                  |_        d S d S r7   )
isinstancer   r/   r   rV   s     r:   r   z'PatchVisitor.visit_raise_standard_error5  s9    bh&& 	-{{28,,BHHH	- 	-r<   r   c                8      fd|j         D             |_         d S )Nc                :    g | ]}                     |          S rA   r   r   s     r:   rE   z-PatchVisitor.visit_call_c.<locals>.<listcomp>:  r   r<   r   rV   s   ` r:   r   zPatchVisitor.visit_call_c9  r   r<   r$   c                8      fd|j         D             |_         d S )Nc                :    g | ]}                     |          S rA   r   r   s     r:   rE   z3PatchVisitor.visit_primitive_op.<locals>.<listcomp>=  r   r<   r   rV   s   ` r:   r   zPatchVisitor.visit_primitive_op<  r   r<   r)   c                D    |                      |j                  |_        d S r7   r   rV   s     r:   r   zPatchVisitor.visit_truncate?  r   r<   r   c                D    |                      |j                  |_        d S r7   r   rV   s     r:   r   zPatchVisitor.visit_extendB  r   r<   r   c                    d S r7   rA   rV   s     r:   r   zPatchVisitor.visit_load_globalE  r   r<   r   c                    |                      |j                  |_        |                      |j                  |_        d S r7   r   lhsrhsrV   s     r:   r   zPatchVisitor.visit_int_opH  r   r<   r   c                    |                      |j                  |_        |                      |j                  |_        d S r7   r   rV   s     r:   r   z PatchVisitor.visit_comparison_opL  r   r<   r   c                    |                      |j                  |_        |                      |j                  |_        d S r7   r   rV   s     r:   r   zPatchVisitor.visit_float_opP  r   r<   r   c                D    |                      |j                  |_        d S r7   r   rV   s     r:   r   zPatchVisitor.visit_float_negT  r   r<   r   c                    |                      |j                  |_        |                      |j                  |_        d S r7   r   rV   s     r:   r   z&PatchVisitor.visit_float_comparison_opW  r   r<   r   c                D    |                      |j                  |_        d S r7   r   rV   s     r:   r   zPatchVisitor.visit_load_mem[  r   r<   r(   c                    |                      |j                  |_        |                      |j                  |_        d S r7   )r   destrc   rV   s     r:   r   zPatchVisitor.visit_set_mem^  s0    ++bg&&RV$$r<   r   c                D    |                      |j                  |_        d S r7   r   rV   s     r:   r   z"PatchVisitor.visit_get_element_ptrb  r   r<   r   c                    t          |j        t                    r:|                     |j                  }t          |t                    sJ ||_        d S d S r7   )r   rc   r    r   r   s      r:   r   zPatchVisitor.visit_load_addresse  sT    bfj)) 	++bf%%Cc:.....BFFF	 	r<   r   c                8      fd|j         D             |_         d S )Nc                :    g | ]}                     |          S rA   r   r   s     r:   rE   z1PatchVisitor.visit_keep_alive.<locals>.<listcomp>l  r   r<   r   rV   s   ` r:   r   zPatchVisitor.visit_keep_alivek  r   r<   r,   c                D    |                      |j                  |_        d S r7   r   rV   s     r:   r   zPatchVisitor.visit_unborrown  r   r<   N)r8   r   rO   r   r4   r5   )rQ   r/   r4   r/   )rC   r   r4   r   r   r   r   r   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r'   r4   r5   )rQ   r    r4   r5   )rQ   r   r4   r5   )rQ   r*   r4   r5   )rQ   r+   r4   r5   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r!   r4   r5   )rQ   r   r4   r5   )rQ   r	   r4   r5   )rQ   r-   r4   r5   )rQ   r%   r4   r5   )rQ   r   r4   r5   )rQ   r$   r4   r5   )rQ   r)   r4   r5   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r(   r4   r5   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r   r4   r5   )rQ   r,   r4   r5   ),r   r   r   r;   r   r   rY   r\   r^   r`   rd   rf   ri   rk   rm   ro   rq   rs   ru   rw   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rA   r<   r:   rM   rM      sH       * * * *   
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<   rM   NrC   r   r4   boolc                r    t          | j                  dk    ot          | j        d         t                    S )N   r   )lenrI   r   r.   )rC   s    r:   rK   rK   r  s*    uy>>QH:eilK#H#HHr<   )rC   r   r4   r  )6r   
__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/   mypyc.irbuild.ll_builderr0   r2   rM   rK   rA   r<   r:   <module>r     s   ; ; " " " " " " " " " " " " " "+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +X 7 6 6 6 6 6j j j j j)HUO, j j jZL% L% L% L% L%9T? L% L% L%^I I I I I Ir<   