
    קg*"                     |   d dl Z d dlZd dlZd dlZd dlmZmZmZ ej        d         ej        d         ej        d         hZ	ej
        dk    r e	                    ej        d                    ej
        dk    rAe	                    ej        d	                    e	                    ej        d                    n e	                    ej        d
                    ej
        dk    r e	                    ej        d                     eej        ej        z             Zd eD             Z eej                  Z eej                  Zej        Zd Zd Zd Zd Zd Zej         G d d                      Zd Zej         G d d                      Zej         G d d                      Zdee e!f         fdZ"dS )    N)AnySetUnionRETURN_VALUEJUMP_FORWARDRAISE_VARARGS   	   RERAISEr
      JUMP_BACKWARDJUMP_ABSOLUTE)r
      RETURN_CONSTc                 2    h | ]}t           j        |         S  )disopname).0opcodes     [/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_dynamo/bytecode_analysis.py	<setcomp>r      s    >>>v
6">>>    c                 J    i }t          |           D ]\  }}||vsJ |||<   |S )z
    Get a mapping from instruction memory address to index in instruction list.
    Additionally checks that each instruction only appears once in the list.
    )	enumerate)instsindexofiinsts       r   get_indexofr"       sE    
 GU##  47""""Nr   c                     t                     t                       fd d           t          j        dk    rt	                    }t                     D ]\  }}|v r|j        rt          j        ||j        j	                           }|t          |          k     sJ t          j        ||j        j                           dz
  }|dk    sJ ||         |cxk    r||         k    sn J  ||                  |j        _	         ||                  |j        _        Ȉfdt                     D             S )zDead code eliminationc                 >   t          | t                              D ]}}|v r d S                     |           |         }|j        r |j        j                            |j        t          v r |j                            |j        t          v r d S ~d S N)rangelenaddexn_tab_entrytargetr   JUMP_OPCODESTERMINAL_OPCODES)startr    r!   find_live_coder   instructions	live_codes      r   r.   z(remove_dead_code.<locals>.find_live_code1   s    uc,//00 
	 
	AI~~MM!?D! Cwt'9'@ABBB{l**wt{3444{... /
	 
	r   r   r      c                 "    g | ]\  }}|v 	|S r   r   )r   r    r!   r0   s      r   
<listcomp>z$remove_dead_code.<locals>.<listcomp>V   s"    JJJWQ1	>>D>>>r   )r"   setsysversion_infosortedr   r)   bisectbisect_leftr-   r'   bisect_rightend)	r/   live_idxr    r!   	start_idxend_idxr.   r   r0   s	   `     @@@r   remove_dead_coder?   ,   s   ,''GI        N1 7"")$$ .. 	I 	IGAtI~~$"4~".gd&8&>? 	 !3x==0000 ''$:L:P2QRRUVV  !||||	*aDDDD8G3DDDDDDD+78K+L"()5hw6G)H"&JJJJ	, 7 7JJJJr   c                 d    d t          | | dd                   D             fd| D             S )z'Eliminate jumps to the next instructionc                 Z    h | ](\  }}|j         d k    |j        |u t          |          )S )r   )r   r*   id)r   abs      r   r   z)remove_pointless_jumps.<locals>.<setcomp>[   sA       Aq8&&18q== 	1+8==r   r1   Nc                 6    g | ]}t          |          v|S r   )rB   )r   r!   pointless_jumpss     r   r3   z*remove_pointless_jumps.<locals>.<listcomp>`   s)    MMMTRXX_-L-LD-L-L-Lr   )zip)r/   rF   s    @r   remove_pointless_jumpsrH   Y   sQ     l122&677  O
 NMMM\MMMMr   c                 6    dfd}| D ]} ||           dS )zEEnsure every instruction has line number set in case some are removedNc                 2    | j         r| j         | _         d S r%   starts_liner!   cur_line_nos    r   populate_line_numz.propagate_line_nums.<locals>.populate_line_numg   s$     	+*K&r   r   )r/   rO   r!   rN   s      @r   propagate_line_numsrP   c   sP    K' ' ' ' '     $   r   c                 6    dfd}| D ]} ||           dS )z;Remove extra starts line properties before packing bytecodeNc                 P    | j         d S | j         k    r	d | _         d S | j         d S r%   rK   rM   s    r   remove_line_numz/remove_extra_line_nums.<locals>.remove_line_numw   s9    #F,,#D*KKKr   r   )r/   rS   r!   rN   s      @r   remove_extra_line_numsrT   r   sQ     K+ + + + +    r   c                   R    e Zd ZU ee         ed<   ee         ed<   ee         ed<   dS )ReadsWritesreadswritesvisitedN)__name__
__module____qualname__r   r   __annotations__r   r   r   rV   rV      s?         s8OOOHXr   rV   c                 R    t                     t          t                      t                      t                                t          t                      t                      t                                 fd |                    j        j        z  S )Nc                    || j         v rd S | j                             |           t          |t                              D ]}|         }|j        t
          v s|j        t          v rd|j        v s	d|j        v r.|j        j	        vr| j
                            |j                   nLd|j        v r | j	                            |j                   n#|j        dk    rnt          d|j                   |j        r |j        j                            |j        t          v r |j                            } |j        t          v r d S d S )NLOADDELETESTORE	MAKE_CELLz
unhandled )rY   r(   r&   r'   r   HASLOCALHASFREEr   argvalrX   rW   NotImplementedErrorr)   r*   r+   r,   )	stater-   r    r!   r   r/   maymustwalks	       r   rk   zlivevars_analysis.<locals>.walk   su   EM!!F%   uc,//00 	 	A?D{h&&$+*@*@T[((H,C,C{$+55444++L$$T[1111[K//-.H4;.H.HIII! >S'$"4";<==={l**S'$+.///{... /#	 	r   )r"   rV   r4   rW   )r/   instructionr   ri   rj   rk   s   ` @@@@r   livevars_analysisrm      s    ,''GsuuceeSUU++D
ceeSUUCEE
*
*C        2 	Dw{#$$$:	!!r   c                       e Zd ZU dZeed<   dS )FixedPointBoxTvalueN)rZ   r[   r\   rp   boolr]   r   r   r   ro   ro      s"         E4r   ro   c                   `    e Zd ZU eeef         ed<   eeef         ed<   eed<   d Zd Z	d Z
dS )	StackSizelowhighfixed_pointc                 :    d| _         d| _        d| j        _        d S )Nr   F)rt   ru   rv   rp   )selfs    r   zerozStackSize.zero   s!    	!&r   c                     | j         | j        f}t          | j         |j         |z             | _         t          | j        |j        |z             | _        | j         | j        f|k    rd| j        _        d S d S NFrt   ru   minmaxrv   rp   )rx   othernpriors       r   	offset_ofzStackSize.offset_of   so    49%txQ//	5:>22	Hdi E))%*D""" *)r   c                     | j         | j        f}t          | j         |          | _         t          | j        |          | _        | j         | j        f|k    rd| j        _        d S d S r{   r|   )rx   depthr   s      r   exn_tab_jumpzStackSize.exn_tab_jump   sc    49%tx''	5))	Hdi E))%*D""" *)r   N)rZ   r[   r\   r   intfloatr]   ro   ry   r   r   r   r   r   rs   rs      sy         	sEz	
U

' ' '
+ + ++ + + + +r   rs   returnc           
      R   | sJ t                      fd| D             }|| d                                                   t          d          D ]d}j        r nYd_        t	          | | dd          d gz             D ]2\  }}||         }t
          j        dk     o|j        t          j	        d         k    }|j        t          vrK|J d|             |rdnt          |j        |j        d	
          }||                             ||           |j        t          v r=|s;||j                                     |t          |j        |j        d
                     |j        rN|j        j        t%          |j        j                  z   dz   }||j        j                                     |           4f	 t1          d |                                D                       }	t5          d |                                D                       }
j        s
J d            |	dk    sJ |
S )Nc           	      h    i | ].}|t          t          d           t          d                    /S )infz-inf)rs   r   )r   r!   rv   s     r   
<dictcomp>z&stacksize_analysis.<locals>.<dictcomp>   sC        	ieeFmm[AA  r   r   d   Tr1   r	   CALL_FINALLYzmissing next inst: F)jumpc              3   $   K   | ]}|j         V  d S r%   )rt   r   xs     r   	<genexpr>z%stacksize_analysis.<locals>.<genexpr>   s$      22ae222222r   c              3   $   K   | ]}|j         V  d S r%   )ru   r   s     r   r   z%stacksize_analysis.<locals>.<genexpr>   s$      44!qv444444r   zfailed to reach fixed point)ro   ry   r&   rp   rG   r5   r6   r   r   opmapr,   stack_effectargr   r+   r*   r)   r   r   lastir   printrt   ru   r}   valuesr~   )r/   stack_sizes_r!   	next_inst
stack_sizeis_call_finallyeffr   rt   ru   rv   s              @r   stacksize_analysisr      s   //K      K Q %%'''3ZZ  K  K 	E "<abb1ATF1JKK 	K 	KOD)$T*J  6)VdkSY~=V.V  {"222 ,,.JD.J.J,,, 'IAA%dk48%HHH 
 I&00SAAA{l**?*DK(22T[$( N N N   ! K *03t7I7O3P3PPSTTD.56CCEJJJ7	K:9
 22[//11222
2
2C44{113344444D;;;;;;!8888Kr   )#r8   dataclassesr   r5   typingr   r   r   r   r,   r6   r(   r4   hasjrelhasjabsr+   JUMP_OPNAMEShaslocalrd   hasfreere   r   r"   r?   rH   rP   rT   	dataclassrV   rm   ro   rs   r   r   r   r   r   r   <module>r      s        



 



 " " " " " " " " " " InInIo  v9-...w?3444>23333?3444w>2333s3;,-->>>>>3s|
#ck

	 	 	*K *K *KZN N N       $        " " "D         + + + + + + + +25c5j(9 5 5 5 5 5 5r   