
    Ph("                     p   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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_ABSOLUTEc                 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       jC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\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_code-   s    uc,/0AI~MM!?D!!wt'9'9'@'@AB{{l*wt{{34{{.. 1r   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_coder5   (   sS   ,'GI 1 7")$ .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""& /  !*, 7J 7WQ1	>D 7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=   U   s}     l12&677DAq88&188q= 	17  
 *M\TR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_numc   s    **K&r    )r'   rD   r   rC   s      @r   propagate_line_numsrF   _   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   r@   rB   s    r   remove_line_numz/remove_extra_line_nums.<locals>.remove_line_nums   s3    #,#D**Kr   rE   )r'   rI   r   rC   s      @r   remove_extra_line_numsrJ   n   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__rE   r   r   rL   rL      s    s8OHXr   rL   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 )rO   r   r   r   r"   HASLOCALHASFREEr8   argvalrN   rM   NotImplementedErrorr    r!   r#   r$   )	stater%   r   r   r   r'   maymustwalks	       r   ra   zlivevars_analysis.<locals>.walk   s4   EMM!% uc,/0A?D{{h&$++*@T[[(H,C{{$++54+LL$$T[[1[[K/-
4;;-.HII!!S'$"4"4";";<={{l*S'$++./{{..% 1r   )r   rL   r*   rM   )r'   instructionr   r_   r`   ra   s   ` @@@@r   livevars_analysisrc      sc    ,'GsuceSU+D
ceSUCE
*C 2 	w{#$::		!!r   c                       e Zd ZU dZeed<   y)FixedPointBoxTvalueN)rP   rQ   rR   rf   boolrS   rE   r   r   re   re      s    E4r   re   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)rj   rk   rl   rf   )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rj   rk   minmaxrl   rf   )rn   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 rq   rr   )rn   depthrw   s      r   exn_tab_jumpzStackSize.exn_tab_jump   s`    499%txx'		5)	HHdii E)%*D" *r   N)rP   rQ   rR   r   intfloatrS   re   ro   rx   r{   rE   r   r   ri   ri      s5    	sEz	
U

'
++r   ri   returnc           
         | sJ t               }| D ci c]"  }|t        t        d      t        d      |      $ }}|| d      j                          t	        d      D ]  }|j
                  r nud|_        t        | | dd  d gz         D ]T  \  }}||   }t        j                  dk  xr  |j                  t        j                  d   k(  }|j                  t        vrA|
J d	|        ||   j                  |t        |j                  |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-                  |       W  	 t5        |j7                         D 	cg c]  }	|	j0                   c}	      }
t9        |j7                         D 	cg c]  }	|	j2                   c}	      }|j
                  sJ d       |
dk\  sJ |S c c}w c c}	w c c}	w )Ninfz-infr   d   Tr)   r	   CALL_FINALLYzmissing next inst: )jumpzfailed to reach fixed point)re   ri   r}   ro   r   rf   r7   r+   r,   r"   disopmapr$   rx   stack_effectargr#   r!   r    rz   r|   lastir{   printrj   rk   rs   valuesrt   )r'   rl   r   stack_sizes_	next_inst
stack_sizeis_call_finallyrz   xrj   rk   s               r   stacksize_analysisr      sO   </K ! D 	ieeFm[AA    Q %%'3Z "<ab1ATF1JKOD)$T*J   6)VdkkSYY~=V.V  {{"22 ,J0CD6.JJ,I&00 dhh_M {{l*?DKK(22T[[$(( N !! **003t7I7I7O7O3PPSTTD..556CCEJ1  L > 
 k00232quu23
4C 2 2 45 41 456D;;;!8O8K_T 45s   'I$=I).I.)$r.   dataclassesr   r+   typingr   r   r   r   r$   r,   r   r*   hasjrelhasjabsr#   r8   JUMP_OPNAMEShaslocalrZ   hasfreer[   r   r   r5   r=   rF   rJ   	dataclassrL   rc   re   ri   r|   r}   r   )r"   s   0r   <module>r      s     
 
 " " IInIInIIo  v9-.w?34>23?343;;,-1=>v

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