
    hi5                    @   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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJ  G d d          ZKddZL G d deM          ZNddZOddZPeCjQ        eAjQ        eIjQ        eBjQ        eFjQ        eHjQ        eJjQ        eGjQ        h eRe;          z  ZSddZT G d de(d                   ZUdS )z@Utilities for checking that internal ir is valid and consistent.    )annotations)FUNC_STATICMETHODFuncIR)1AssignAssignMulti
BaseAssign
BasicBlockBoxBranchCallCallCCastComparisonOp	ControlOpDecRefExtendFloatFloatComparisonOpFloatNegFloatOpGetAttrGetElementPtrGotoIncRef
InitStaticIntegerIntOp	KeepAliveLoadAddressLoadErrorValue
LoadGlobalLoadLiteralLoadMem
LoadStatic
MethodCallOp	OpVisitorPrimitiveOpRaiseStandardErrorRegisterReturnSetAttr
SetElementSetMemTruncateTupleGetTupleSetUnborrowUnboxUndefUnreachableValue)format_func)KNOWN_NATIVE_TYPESRArray	RInstance
RPrimitiveRTypeRUnionbytes_rprimitivedict_rprimitiveint_rprimitiveis_float_rprimitiveis_object_rprimitivelist_rprimitiverange_rprimitiveset_rprimitivestr_rprimitivetuple_rprimitivec                  &    e Zd ZddZddZddZdS )FnErrorsourceOp | BasicBlockdescstrreturnNonec                "    || _         || _        d S NrJ   rL   selfrJ   rL   s      f/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/mypyc/analysis/ircheck.py__init__zFnError.__init__O   s    			    otherobjectboolc                l    t          |t                    o| j        |j        k    o| j        |j        k    S rQ   )
isinstancerI   rJ   rL   )rT   rX   s     rU   __eq__zFnError.__eq__S   s2    ug&&b4;%,+Fb49X]XbKb	
rW   c                (    d| j          d| j         dS )NzFnError(source=z, desc=)rR   )rT   s    rU   __repr__zFnError.__repr__X   s    AAATYAAAArW   N)rJ   rK   rL   rM   rN   rO   )rX   rY   rN   rZ   )rN   rM   )__name__
__module____qualname__rV   r]   r`    rW   rU   rI   rI   N   sV           
 
 
 

B B B B B BrW   rI   fnr   rN   list[FnError]c                   g }t                      }| j        D ]}|j        s8|                    t	          |j        r|j        d         n|d                     |j        dd         D ]x}t          |t                    r$|                    t	          |d                     ||v r$|                    t	          |d                     |                    |           y|	                    t          |                      |r|S t          |           }| j        D ]!}|j        D ]}|                    |           "|j        S )zNApplies validations to a given function ir and returns a list of errors found.zBlock not terminatedrR   Nz%Block has operations after control opzFunc has a duplicate op)setblocks
terminatedappendrI   opsr\   r   addextendcheck_op_sources_valid	OpCheckeraccepterrors)re   rs   op_setblockop
op_checkers         rU   check_func_irrx   \   sm   FUUF   	MM	Duy}}uKabbb   )CRC. 	 	B"i(( `gR6]^^^___V||gR6OPPPQQQJJrNNNN	 MM(,,--- 2J " ") 	" 	"BIIj!!!!	" rW   c                      e Zd ZdS )IrCheckExceptionN)ra   rb   rc   rd   rW   rU   rz   rz   {   s        DrW   rz   rO   c           
         t          |           }|r=t          dd                    t          | d |D                                 z             d S )Nz'Internal error: Generated invalid IR: 

c                *    g | ]}|j         |j        fS rd   rR   ).0es     rU   
<listcomp>z(assert_func_ir_valid.<locals>.<listcomp>   s!    (L(L(L!(AF);(L(L(LrW   )rx   rz   joinr7   )re   rs   s     rU   assert_func_ir_validr      sd    2F 
6iiB(L(LV(L(L(LMMNNO
 
 	

 
rW   c                   g }t                      }t                      }| j        D ]}|                    |j                   |j        D ]{}t	          |t
                    r|                    |j                   2t	          |t                    r4t	          |j	        t                    r|                    |j	                   ||                    | j                   | j        D ]}|j        D ]}|                                D ]}t	          |t          t          t          f          r%t	          |t                     r>||vr9|                    t%          |dt'          |          j                              xt	          |t                    r0||vr,|                    t%          |d|j                             Ռ|S )Nz#Invalid op reference to op of type rR   z!Invalid op reference to register )ri   rj   updaterm   r\   r   rn   destr   srcr*   arg_regssourcesr   r   r4   r&   rl   rI   typera   name)re   rs   	valid_opsvalid_registersru   rv   rJ   s          rU   rp   rp      s   FI%(UUO , ,###) 	, 	,B"j)) ,##BG,,,,B,, ,BFH1M1M ,##BF+++		, 2;'''  ) 	 	B**,,  fwu&=>> ++ Y..#')%b4PV<<K`%b%b      11 _44#')0cTZT_0c0c    	( MrW   r   r<   r   rZ   c                    t          t                    r t           fdj        D                       S t          t                    rt           t                    r< j        t          v rj        t          v r j        j        k    S  j        j        k    S t           t                    rt                    S t           t                    r t          fd j        D                       S dS dS )z]Check if src can be assigned to dest_rtype.

    Currently okay to have false positives.
    c              3  8   K   | ]}t          |          V  d S rQ   can_coerce_to)r~   dr   s     rU   	<genexpr>z can_coerce_to.<locals>.<genexpr>   s-      ==Q=a((======rW   c              3  8   K   | ]}t          |          V  d S rQ   r   )r~   sr   s     rU   r   z can_coerce_to.<locals>.<genexpr>   s-      AA!}Q--AAAAAArW   FT)
r\   r=   anyitemsr;   r   disjoint_typessizer:   rB   )r   r   s   ``rU   r   r      s    
 $ >====$*======$
## c:&& 	)x>))di>.I.Ix49,,8ty((c9%% 	.'---c6"" 	B AAAAsyAAAAAAu4rW   c                     e Zd ZdldZdmd
ZdndZdodZdpdZdqdZdqdZ	drdZ
dsdZdtdZdud Zdvd"Zdwd$Zdxd&Zdyd)Zdzd+Zd{d,Zd|d.Zd}d0Zd~d2Zdd4Zdd6Zdd8Zdd:Zdd<Zdd>Zdd@ZddBZddDZddFZ ddHZ!ddJZ"ddLZ#ddNZ$ddPZ%ddRZ&ddTZ'ddVZ(ddXZ)ddZZ*dd\Z+dd^Z,dd`Z-ddbZ.dddZ/ddfZ0ddhZ1ddjZ2dkS )rq   	parent_fnr   rN   rO   c                "    || _         g | _        d S rQ   )r   rs   )rT   r   s     rU   rV   zOpChecker.__init__   s    "%'rW   rJ   r&   rL   rM   c                X    | j                             t          ||                     d S )NrR   )rs   rl   rI   rS   s      rU   failzOpChecker.fail   s+    7&t<<<=====rW   rv   r   c                    |                                 D ]/}|| j        j        vr|                     |d|j                    0d S )Nz"Invalid control operation target: rR   )targetsr   rj   r   label)rT   rv   targets      rU   check_control_op_targetsz"OpChecker.check_control_op_targets   sY    jjll 	_ 	_FT^222		*]v|*]*]	^^^	_ 	_rW   r   r<   r   c                x    t          ||          s)|                     |d|j         d|j                    d S d S )NzCannot coerce source type z to dest type rR   r   r   r   )rT   rv   r   r   s       rU   check_type_coercionzOpChecker.check_type_coercion   s_    S$'' 	II `SX ` `UYU^ ` `      	 	rW   tr   c                    t          ||          rt          ||          s)|                     ||j         d|j         d           d S d S )Nz and z are not compatiblerR   r   )rT   rv   r   r   s       rU   check_compatibilityzOpChecker.check_compatibility   sd    Q"" 	S-1*=*= 	SIIR&Q&Qaf&Q&Q&QIRRRRR	S 	SrW   vr6   c                p    t          |j                  s!|                     |d|j         d           d S d S )NzFloat expected (actual type is r_   rA   r   r   rT   rv   r   s      rU   expect_floatzOpChecker.expect_float   sI    "16** 	GIIbEAFEEEFFFFF	G 	GrW   c                ^    t          |j                  r|                     |d           d S d S )NzFloat not expectedr   r   s      rU   expect_non_floatzOpChecker.expect_non_float   s9    qv&& 	0IIb./////	0 	0rW   r   c                0    |                      |           d S rQ   r   rT   rv   s     rU   
visit_gotozOpChecker.visit_goto       %%b)))))rW   r   c                0    |                      |           d S rQ   r   r   s     rU   visit_branchzOpChecker.visit_branch   r   rW   r+   c                p    |                      ||j        j        | j        j        j        j                   d S rQ   )r   valuer   r   declsigret_typer   s     rU   visit_returnzOpChecker.visit_return   s/      RX]DN4G4K4TUUUUUrW   r5   c                    d S rQ   rd   r   s     rU   visit_unreachablezOpChecker.visit_unreachable   s	     	rW   r   c                \    |                      ||j        j        |j        j                   d S rQ   )r   r   r   r   r   s     rU   visit_assignzOpChecker.visit_assign  s(      RV["',?????rW   r   c                    |j         D ]N}t          |j        j        t                    sJ |                     ||j        |j        j        j                   Od S rQ   )r   r\   r   r   r9   r   	item_type)rT   rv   r   s      rU   visit_assign_multizOpChecker.visit_assign_multi  s_    6 	K 	KCbglF33333$$R27<3IJJJJ	K 	KrW   r    c                    d S rQ   rd   r   s     rU   visit_load_error_valuez OpChecker.visit_load_error_value
  s	     	rW   r"   tuple[object, ...]c                ,   |D ]}|at          |t          t          t          t          t
          t          t          f          s'|                     |dt          |           d           t          |t                    r| 
                    ||           d S )Nz(Invalid type for item of tuple literal: r_   )r\   rM   bytesrZ   intfloatcomplextupler   r    check_tuple_items_valid_literals)rT   rv   r   xs       rU   r   z*OpChecker.check_tuple_items_valid_literals  s     	= 	=A}ZCc5RY[`3a%b%b}		"SaSSSTTT!U## =55b!<<<		= 	=rW   frozenset[object]c           
     $   |D ]}|4t          |t          t          t          t          t
          t          f          r9t          |t                    r|                     ||           e| 	                    |dt          |           d           d S )Nz,Invalid type for item of frozenset literal: r_   )r\   rM   r   rZ   r   r   r   r   r   r   r   )rT   rv   r   r   s       rU   $check_frozenset_items_valid_literalsz.OpChecker.check_frozenset_items_valid_literals  s     	Y 	YAyJq3tS%*QRRyAu%% Y55b!<<<<		"WTRSWWWWWXXXX	Y 	YrW   c                   d }|j         d}nt          |j         t                    rd}n t          |j         t                    rd}nt          |j         t                    rd}nt          |j         t
                    rd}nt          |j         t                    rd}nt          |j         t                    rd}not          |j         t                    rd}| 	                    ||j                    n7t          |j         t                    rd}|                     ||j                    |
J d            |j        j        |dfvr(|                     |d	| d
|j        j                    d S d S )Nzbuiltins.objectzbuiltins.intzbuiltins.strzbuiltins.byteszbuiltins.floatzbuiltins.tuplezbuiltins.setz#Missed a case for LoadLiteral checkz/Invalid literal value for type: value has type z, but op has type )r   r\   r   rM   r   rZ   r   r   r   r   	frozensetr   r   r   r   )rT   rv   expected_types      rU   visit_load_literalzOpChecker.visit_load_literal   s   8-MM#&& 	D*MM#&& 	D*MM%(( 	D,MM$'' 	D-MM%(( 	D,MM'** 		D-MM%(( 	D,M11"bh????),, 	D +M55b"(CCC((*O(((7</@AAAIIH%H H9;H H     BArW   r   c                    d S rQ   rd   r   s     rU   visit_get_attrzOpChecker.visit_get_attrB      rW   r,   c                    d S rQ   rd   r   s     rU   visit_set_attrzOpChecker.visit_set_attrF  r   rW   r$   c                    d S rQ   rd   r   s     rU   visit_load_staticzOpChecker.visit_load_staticK      rW   r   c                    d S rQ   rd   r   s     rU   visit_init_staticzOpChecker.visit_init_staticN  r   rW   r0   c                    d S rQ   rd   r   s     rU   visit_tuple_getzOpChecker.visit_tuple_getQ  r   rW   r1   c                    d S rQ   rd   r   s     rU   visit_tuple_setzOpChecker.visit_tuple_setU  r   rW   r   c                    d S rQ   rd   r   s     rU   visit_inc_refzOpChecker.visit_inc_refY  r   rW   r   c                    d S rQ   rd   r   s     rU   visit_dec_refzOpChecker.visit_dec_ref]  r   rW   r   c                    t          |j        |j        j        j                  D ]&\  }}|                     ||j        |j                   'd S rQ   )zipargsre   r   r   r   )rT   rv   	arg_valuearg_runtimes       rU   
visit_callzOpChecker.visit_calla  sX     '*"'259>&B&B 	K 	K"I{$$R9IJJJJ	K 	KrW   r%   c                   |j         j                            |j                  }|j        t
          k    rd}nd}t          |j                  |z   t          |j        j                  k    r| 	                    |d           t          |j        |j        j        |d                    D ]&\  }}|                     ||j        |j                   'd S )Nr      z)Incorrect number of args for method call.)receiver_typeclass_irmethod_declmethodkindr   lenr   r   r   r   r   r   )rT   rv   r   
decl_indexr   r   s         rU   visit_method_callzOpChecker.visit_method_callg  s    &/;;BIFF000JJJrw<<*$KO,@(A(AAAIIbEFFF '*"';?3G
3T&U&U 	K 	K"I{$$R9IJJJJ	K 	KrW   r   c                    d S rQ   rd   r   s     rU   
visit_castzOpChecker.visit_castv  r   rW   r
   c                    d S rQ   rd   r   s     rU   	visit_boxzOpChecker.visit_boxy  r   rW   r3   c                    d S rQ   rd   r   s     rU   visit_unboxzOpChecker.visit_unbox|  r   rW   r)   c                    d S rQ   rd   r   s     rU   visit_raise_standard_errorz$OpChecker.visit_raise_standard_error  r   rW   r   c                    d S rQ   rd   r   s     rU   visit_call_czOpChecker.visit_call_c  r   rW   r(   c                    d S rQ   rd   r   s     rU   visit_primitive_opzOpChecker.visit_primitive_op  r   rW   r/   c                    d S rQ   rd   r   s     rU   visit_truncatezOpChecker.visit_truncate  r   rW   r   c                    d S rQ   rd   r   s     rU   visit_extendzOpChecker.visit_extend  r   rW   r!   c                    d S rQ   rd   r   s     rU   visit_load_globalzOpChecker.visit_load_global  r   rW   r   c                r    |                      ||j                   |                      ||j                   d S rQ   )r   lhsrhsr   s     rU   visit_int_opzOpChecker.visit_int_op  s8    b"&)))b"&)))))rW   r   c                    |                      ||j        j        |j        j                   |                     ||j                   |                     ||j                   d S rQ   )r   r  r   r  r   r   s     rU   visit_comparison_opzOpChecker.visit_comparison_op  sX      RV["&+>>>b"&)))b"&)))))rW   r   c                r    |                      ||j                   |                      ||j                   d S rQ   r   r  r  r   s     rU   visit_float_opzOpChecker.visit_float_op  8    "bf%%%"bf%%%%%rW   r   c                <    |                      ||j                   d S rQ   )r   r   r   s     rU   visit_float_negzOpChecker.visit_float_neg  s     "bf%%%%%rW   r   c                r    |                      ||j                   |                      ||j                   d S rQ   r  r   s     rU   visit_float_comparison_opz#OpChecker.visit_float_comparison_op  r  rW   r#   c                    d S rQ   rd   r   s     rU   visit_load_memzOpChecker.visit_load_mem  r   rW   r.   c                    d S rQ   rd   r   s     rU   visit_set_memzOpChecker.visit_set_mem  r   rW   r   c                    d S rQ   rd   r   s     rU   visit_get_element_ptrzOpChecker.visit_get_element_ptr  r   rW   r-   c                    d S rQ   rd   r   s     rU   visit_set_elementzOpChecker.visit_set_element  r   rW   r   c                    d S rQ   rd   r   s     rU   visit_load_addresszOpChecker.visit_load_address  r   rW   r   c                    d S rQ   rd   r   s     rU   visit_keep_alivezOpChecker.visit_keep_alive  r   rW   r2   c                    d S rQ   rd   r   s     rU   visit_unborrowzOpChecker.visit_unborrow  r   rW   N)r   r   rN   rO   )rJ   r&   rL   rM   rN   rO   )rv   r   rN   rO   )rv   r&   r   r<   r   r<   rN   rO   )rv   r&   r   r<   r   r<   rN   rO   )rv   r&   r   r6   rN   rO   )rv   r   rN   rO   )rv   r   rN   rO   )rv   r+   rN   rO   )rv   r5   rN   rO   )rv   r   rN   rO   )rv   r   rN   rO   )rv   r    rN   rO   )rv   r"   r   r   rN   rO   )rv   r"   r   r   rN   rO   )rv   r"   rN   rO   )rv   r   rN   rO   )rv   r,   rN   rO   )rv   r$   rN   rO   )rv   r   rN   rO   )rv   r0   rN   rO   )rv   r1   rN   rO   )rv   r   rN   rO   )rv   r   rN   rO   )rv   r   rN   rO   )rv   r%   rN   rO   )rv   r   rN   rO   )rv   r
   rN   rO   )rv   r3   rN   rO   )rv   r)   rN   rO   )rv   r   rN   rO   )rv   r(   rN   rO   )rv   r/   rN   rO   )rv   r   rN   rO   )rv   r!   rN   rO   )rv   r   rN   rO   )rv   r   rN   rO   )rv   r   rN   rO   )rv   r   rN   rO   )rv   r   rN   rO   )rv   r#   rN   rO   )rv   r.   rN   rO   )rv   r   rN   rO   )rv   r-   rN   rO   )rv   r   rN   rO   )rv   r   rN   rO   )rv   r2   rN   rO   )3ra   rb   rc   rV   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  r  r  r  r!  r#  r%  rd   rW   rU   rq   rq      s       ( ( ( (> > > >_ _ _ _
   S S S SG G G G0 0 0 0* * * ** * * *V V V V   
@ @ @ @K K K K
   = = = =Y Y Y Y       D      
                  K K K KK K K K                           * * * ** * * *
& & & && & & && & & &                       rW   rq   N)re   r   rN   rf   )re   r   rN   rO   )r   r<   r   r<   rN   rZ   )V__doc__
__future__r   mypyc.ir.func_irr   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   r1   r2   r3   r4   r5   r6   mypyc.ir.pprintr7   mypyc.ir.rtypesr8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rI   rx   	Exceptionrz   r   rp   r   ri   r   r   rq   rd   rW   rU   <module>r-     s7   F F " " " " " " 6 6 6 6 6 6 6 62 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2f ( ' ' ' ' '                                   (B B B B B B B B   >	 	 	 	 	y 	 	 	
 
 
 
% % % %R 	 C	   2c c c c c	$ c c c c crW   