
    ɯwg*"                        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	j                  ej                  d          ej                  dk\  r=e	j                  ej                  d	          e	j                  ej                  d          ne	j                  ej                  d
          ej                  dk\  re	j                  ej                  d           eej                  ej                  z         ZeD  ch c]  } ej                   |     c} Z eej$                        Z eej(                        Zej,                  Zd Zd Zd Zd Zd Zej8                   G d d             Zd Zej8                   G d d             Zej8                   G d d             Z dee!e"f   fdZ#yc c} w )    N)AnySetUnionRETURN_VALUEJUMP_FORWARDRAISE_VARARGS   	   RERAISEr
      JUMP_BACKWARDJUMP_ABSOLUTE)r
      RETURN_CONSTc                 F    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       d/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/torch/_dynamo/bytecode_analysis.pyget_indexofr       s?    
 GU# 47""" N    c                     t               t                fd d       t        j                  dk\  rt	              }t               D ]  \  }}|v s|j                  st        j                  ||j                  j                           }|t        |      k  sJ t        j                  ||j                  j                           dz
  }|dk\  sJ ||   |cxk  r	||   k  sJ  J  ||      |j                  _	         ||      |j                  _         t               D cg c]  \  }}|v s| c}}S c c}}w )zDead code eliminationc                 >   t        | t                    D ]  }|v r y j                  |       |   }|j                  r |j                  j                            |j
                  t        v r |j                            |j
                  t        v s y  y N)rangelenaddexn_tab_entrytargetopcode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 
	AI~MM!?D!!wt'9'9'@'@AB{{l*wt{{34{{..
	r   r   r      )r   setsysversion_infosortedr   r"   bisectbisect_leftr'   r    bisect_rightend)	r)   live_idxr   r   	start_idxend_idxr(   r   r*   s	   `     @@@r   remove_dead_coder7   ,   sT   ,'GI 1 7")$ . 	IGAtI~$"4"4"..gd&8&8&>&>?	 !3x=000 '''$:L:L:P:P2QRUVV  !|#|	*aD8G3DDDDDD+78K+L""()5hw6G)H""&	I  !*, 7JWQ1	>DJJJs   3E Ec                     t        | | dd       D ch c]-  \  }}|j                  dk(  r|j                  |u rt        |      / }}}| D cg c]  }t        |      |vs| c}S c c}}w c c}w )z'Eliminate jumps to the next instructionr+   Nr   )zipopnamer#   id)r)   abpointless_jumpsr   s        r   remove_pointless_jumpsr?   Y   sv     l12&67Aq88&188q= 	1O 
 *MTRX_-LDMM
 Ns   2A&A,A,c                 2    dfd}| D ]
  } ||        y)zEEnsure every instruction has line number set in case some are removedNc                 D    | j                   r| j                   | _         y r   starts_liner   cur_line_nos    r   populate_line_numz.propagate_line_nums.<locals>.populate_line_numg   s    **K&r    )r)   rF   r   rE   s      @r   propagate_line_numsrH   c   s&    K'   $ r   c                 2    dfd}| D ]
  } ||        y)z;Remove extra starts line properties before packing bytecodeNc                 f    | j                   y | j                   k(  rd | _         y | j                   y r   rB   rD   s    r   remove_line_numz/remove_extra_line_nums.<locals>.remove_line_numw   s3    #,#D**Kr   rG   )r)   rK   r   rE   s      @r   remove_extra_line_numsrL   r   s(     K+  r   c                   >    e Zd ZU ee   ed<   ee   ed<   ee   ed<   y)ReadsWritesreadswritesvisitedN)__name__
__module____qualname__r   r   __annotations__rG   r   r   rN   rN      s    s8OHXr   rN   c                     t               t        t               t               t                     t        t               t               t                      fd |          j                  j                  z  S )Nc                 $   || j                   v ry | j                   j                  |       t        |t                    D ]L  }|   }|j                  t
        v s|j                  t        v rd|j                  v sd|j                  v r>|j                  j                  vr| j                  j                  |j                         n\d|j                  v r&| j                  j                  |j                         n(|j                  dk(  rnt        d|j                         |j                  r  |j                  j                            |j                  t        v r |j                            } |j                  t        v sM y  y )NLOADDELETESTORE	MAKE_CELLz
unhandled )rQ   r!   r   r    r$   HASLOCALHASFREEr:   argvalrP   rO   NotImplementedErrorr"   r#   r%   r&   )	stater'   r   r   r   r)   maymustwalks	       r   rc   zlivevars_analysis.<locals>.walk   s9   EMM!% uc,/0 	A?D{{h&$++*@T[[(H,C{{$++54+LL$$T[[1[[K/-
4;;-.HII!!S'$"4"4";";<={{l*S'$++./{{..%	r   )r   rN   r,   rO   )r)   instructionr   ra   rb   rc   s   ` @@@@r   livevars_analysisre      sc    ,'GsuceSU+D
ceSUCE
*C 2 	w{#$::		!!r   c                       e Zd ZU dZeed<   y)FixedPointBoxTvalueN)rR   rS   rT   rh   boolrU   rG   r   r   rg   rg      s    E4r   rg   c                   R    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
y)	StackSizelowhighfixed_pointc                 B    d| _         d| _        d| j                  _        y )Nr   F)rl   rm   rn   rh   )selfs    r   zerozStackSize.zero   s    	!&r   c                 .   | j                   | j                  f}t        | j                   |j                   |z         | _         t        | j                  |j                  |z         | _        | j                   | j                  f|k7  rd| j                  _        y y NFrl   rm   minmaxrn   rh   )rp   othernpriors       r   	offset_ofzStackSize.offset_of   sp    499%txxQ/		5::>2	HHdii E)%*D" *r   c                     | j                   | j                  f}t        | j                   |      | _         t        | j                  |      | _        | j                   | j                  f|k7  rd| j                  _        y y rs   rt   )rp   depthry   s      r   exn_tab_jumpzStackSize.exn_tab_jump   s`    499%txx'		5)	HHdii E)%*D" *r   N)rR   rS   rT   r   intfloatrU   rg   rq   rz   r}   rG   r   r   rk   rk      s5    	sEz	
U

'
++r   rk   returnc           
         | sJ t               }| D ci c]"  }|t        t        d      t        d      |      $ }}|| d      j                          t	        d      D ]  }|j
                  r n{d|_        t        | | dd  d gz         D ]Z  \  }}||   }t        j                  dk  xr  |j                  t        j                  d   k(  }|j                  t        vrG|
J d	|        |rdn!t        |j                  |j                  d
      }||   j                  ||       |j                  t         v rA|s?||j"                     j                  |t        |j                  |j                  d             |j$                  s|j$                  j&                  t)        |j$                  j*                        z   dz   }	||j$                  j"                     j-                  |	       ]  	 t5        d |j7                         D              }
t9        d |j7                         D              }|j
                  sJ d       |
dk\  sJ |S c c}w )Ninfz-infr   d   Tr+   r	   CALL_FINALLYzmissing next inst: F)jumpc              3   4   K   | ]  }|j                     y wr   )rl   .0xs     r   	<genexpr>z%stacksize_analysis.<locals>.<genexpr>   s     2aee2   c              3   4   K   | ]  }|j                     y wr   )rm   r   s     r   r   z%stacksize_analysis.<locals>.<genexpr>   s     4!qvv4r   zfailed to reach fixed point)rg   rk   r   rq   r   rh   r9   r-   r.   r$   disopmapr&   stack_effectargrz   r%   r#   r"   r|   r~   lastir}   printrl   rm   ru   valuesrv   )r)   rn   r   stack_sizes_	next_inst
stack_sizeis_call_finallyeffr|   rl   rm   s               r   stacksize_analysisr      sA   </K ! 	ieeFm[AAK  Q %%'3Z  K "<ab1ATF1JK 	KOD)$T*J   6)VdkkSYY~=V.V  {{"22 ,J0CD6.JJ, ' %dkk488%H 
 I&00SA{{l*?DKK(22T[[$(( N !! **003t7I7I7O7O3PPSTTD..556CCEJ7	K KD 
 2[//12
2C4{11344D;;;!8O8Kes   'I)$r0   dataclassesr   r-   typingr   r   r   r   r&   r.   r!   r,   hasjrelhasjabsr%   r:   JUMP_OPNAMEShaslocalr\   hasfreer]   r   r   r7   r?   rH   rL   	dataclassrN   re   rg   rk   r~   r   r   )r$   s   0r   <module>r      s     
 
 " " IInIInIIo  v9-.w?34>23?34w>233;;,-1=>v

6">s||
ckk
	*KZN $   "D    + + +25c5j(9 5g ?s   .G 