
    קgn                     V   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mZ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 ddlmZ dZdZdZdZd	Zd
ZdZdZdZ dZ!dZ"d Z# ej$        d           G d d                      Z%ej$         G d d                      Z&d Z'd Z( G d d          Z)dS )    N)AnycastDictListOptionalTuple   )
create_call_functioncreate_call_methodcreate_dup_topcreate_instructioncreate_jump_absolutecreate_load_methodInstructionInstructionExnTabEntrytransform_code_object	unique_id)ExactWeakKeyDictionary                @         i   torch_dynamo_resume_inc                     t           j        dk    rX|                     t          d                     t           j        dk     r(|                     t          dd                     d S d S d S )N      	PUSH_NULL)r       SWAPr   arg)sysversion_infoappendr   )instss    Z/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_dynamo/resume_execution.py_initial_push_nullr,   '   sm    
7""'44555g%%LL+F:::;;;;; #"%%    T)frozenc                   b    e Zd ZU eed<   dZeeedf                  ed<   de	e
         fdZd ZdS )ReenterWithstack_indexN.target_valuescleanupc                    g }| j         rd | j         D             }t          d| j                   |d         vr|dxx         fz  cc<   dD ]}||d         vr|dxx         |fz  cc<   t          t          j        dk     rdnd          }t          d          }g }t          |           |                    g |t          t          |          d	          t          d
          t          d          t          d          t          d          t          d                     t          j        dk     r%|                    t          d|                     nSt          d          }t          d          }	t          ||	|| j        dz   d	          |_        |                    |           fd}
t          j        dk     r9t          d          t          d          |g |
            t          d          }nt          j        dk     rIt          d          g |
            t          d|          | |
            t          d          |}nt          dd          }t          dd          }t          |||| j        dz   d          |_        |	g |
            t          d|          | |
            ||t          d          t          dd          |}||z   |d d <   |S )!z
        Codegen based off of:
        load args
        enter context
        try:
            (rest)
        finally:
            exit context
        c                 0    g | ]}t          d |          S 
LOAD_CONSTargvalr   .0vals     r+   
<listcomp>z*ReenterWith.try_except.<locals>.<listcomp>B   5        #<<<<  r-   ___context_manager_co_varnames)	__enter____exit__co_namesr   NOPPUSH_EXC_INFOF
STORE_FASTr8   	LOAD_FASTrB   r   POP_TOPSETUP_FINALLYtargetr	   c                      t          d           t          d          t          dd           t                      t                      gt          d          t          d          S )NrH   r8   rC   r7   r    rI   )r   r   r   r   )ctx_names   r+   create_resetz,ReenterWith.try_except.<locals>.create_resetr   sn    ";x@@@":.."<===     $A&& #9-- r-   r    	   	POP_BLOCKBEGIN_FINALLYEND_FINALLYJUMP_FORWARDRERAISEr%   COPYr    r   T
POP_EXCEPTN)r2   r   r1   r   r'   r(   r,   extendr
   lenr   r   r)   r   exn_tab_entry)selfcode_optionsr3   	load_argsnameexcept_jump_targetcleanup_complete_jump_targetsetup_finallyexn_tab_beginexn_tab_endrO   epiloguefinally_exn_tab_endfinally_exn_tab_targetrN   s                 @r+   
try_exceptzReenterWith.try_except5   s,    	 	 -  I E43CEEFF<666'''H;6'''- 	4 	4D<
333Z(((TG3(((/%//EE_
 
 (:%'@'@$+-=))) 	%c)nne<< #<AAA #;x@@@	
 #;// $A&& #9--
	
 
	
 
	
 g%%  "?;MNNN    /u55M,U33K*@" 1$+ +M'   ///		 		 		 		 		 f$$";//"?33" 	
 #=11HH ''";// #>:VWWW #	
  #9-- -HH #5YA"F"F"F%7A%F%F%F"/E"#& 1$0 0,  #>:VWWW #	
  $ ' #<00 #9!444 -H '
r-   c                 2   g }| j         rd | j         D             }t          j        dk     rt          d          }t          d          }t          d          ||t          d          t          d          g|z   |dd<   g |t          d	t	          |          
          t          d|          t          d          dfS t          j        dk     r<t          d          }t          d          }t          d          }t          d          t          dd          t          d          t          d          t          d	d
          t          d          t          d|          |t          d|          t          d          |t          d          t          d          t          d          t          d          |g|z   |dd<   g |t          d	t	          |          
          t          d|          t          d          dfS t          d          }t          d          }d }	t          d          }
t          d          }t          d          }t          dd
          }t          dd
          }t          |
||| j        dz   d          |
_        t          |||| j        dz   d          |_        t          |||| j        dz   d          |_        | |	             |	             |	            gt          dd          t          d          t          d|          |t          d          t          t          j        d k     rd!nd|          ||t          d          t          dd
          |t          d          t          d          t          d          ||z   |dd<   g }t          |           |
                    g |t          t	          |          d          t          d"          |
           ||fS )#zR
        Codegen based off of:
        with ctx(args):
            (rest)
        c                 0    g | ]}t          d |          S r6   r:   r;   s     r+   r>   z(ReenterWith.__call__.<locals>.<listcomp>   r?   r-   rP   WITH_CLEANUP_STARTrS   rR   WITH_CLEANUP_FINISHrT   NCALL_FUNCTIONr%   
SETUP_WITHrK   rI   r   WITH_EXCEPT_STARTrE   r7   r8   DUP_TOPr    rU   POP_JUMP_IF_TRUErV   rX   c                  $    t          dd           S )Nr7   r8   r:    r-   r+   create_load_nonez.ReenterWith.__call__.<locals>.create_load_none   s    ),tDDDDr-   rF   r   rW   r	   TFr       POP_JUMP_FORWARD_IF_TRUEBEFORE_WITH)r2   r'   r(   r   rZ   r   r1   r[   r
   r,   rY   )r\   r]   r3   r^   with_cleanup_startbegin_finallywith_except_startpop_top_after_with_except_startra   rt   exn_tab_1_beginexn_tab_1_endexn_tab_1_targetexn_tab_2_endexn_tab_2_targetrets                   r+   __call__zReenterWith.__call__   sG    	 	 -  I f$$!34H!I!I.??M";//""#899"=11 GAAAJ"?IGGG #<8JKKK #9--	
   '' 23F G G.@.K.K++=e+D+D( #;//"<==="9--"9--"?:::"9--">:VWWW!"&/N   #9--/"9--"9--"<00"9--,%& 'GAAAJ*"?IGGG #<8IJJJ #9--	
   /A.K.K++=e+D+D(E E E 1;;O.u55M1/BB.ya@@@M1&a@@@,B  1$- -O) .D   1$. .* =S//  1$= =+9   ""  ""  ""	
 &a// #9-- #>:VWWW ! ##677 #''11 /.+:	    !" !#$ #<00%& #9!444'( 0)* #<00+, #9---. #9--/0 -12 3GAAAJ6 &(Cs###JJ)#i..%@@ '}55 $	   (((r-   )__name__
__module____qualname__int__annotations__r2   r   r   r   r   r   rh   r   rs   r-   r+   r0   r0   .   sy         /3M8E#s(O,333r[0A r r r rhG) G) G) G) G)r-   r0   c                       e Zd ZU ej        ed<    ej        e          Z	e
e         ed<    ej        e          Ze
e         ed<   dZeeeef                  ed<   dS )ResumeFunctionMetadatacode)default_factoryinstructions prefix_block_target_offset_remapNblock_target_offset_remap)r   r   r   typesCodeTyper   dataclassesfieldlistr   r   r   r   r   r   r   r   rs   r-   r+   r   r   3  s         
.&7k&7&M&M&ML${#MMM 3D+2C3 3 3$d3i    ;?xS#X7>>>>>r-   r   c                     t          |          }g }	 t          |          }| D ]2} |||          r$|                    |           t          |          }3n# t          $ r Y nw xY w|S )z
    Two-pointer conditional filter.
    e.g. _filter_iter(insts, sorted_offsets, lambda i, o: i.offset == o)
    returns the instructions with offsets in sorted_offsets
    )iternextr)   StopIteration)l1l2conditrescurr=   s          r+   _filter_iterr   C  s     
bBC2hh 	 	CtC~~ 

32hh	    Js   AA 
A%$A%c                     g }t          |           | D ]&}|                    t          d|                     '|                    t	          t          |           d                     |S )Nr7   r8   F)r,   r)   r   rY   r
   rZ   )tupr*   r=   s      r+   _load_tuple_and_callr   V  sq    !Eu C C'SAAABBBB	LL%c#hh66777Lr-   c                   b   e Zd Z e            Z e            Zed             Zedede	e         dede	e
         de	e
         de	e         de	ee	e         f         d	e	e
e	e         f         d
e	e         dej        fd            Zedee         fd            Zedede	edf         fd            ZdS )ContinueExecutionCachec                     || j         vr
i | j         |<   t          |          }|| j         |         vr | j        ||g|R  | j         |         |<   | j         |         |         S N)cachetuplegenerate)clsr   linenokeys       r+   lookupzContinueExecutionCache.lookupc  sm    sy   CIdOCjjcio%%#/3<f#Cs#C#C#CCIdOC ys##r-   offsetsetup_fn_target_offsetsnstackargnamesargnames_null	setup_fnsstack_ctx_varsargnames_ctx_vars
null_idxesreturnc                    	
 J |j         t          t          z  t          z  t          z  z  rJ |j         t
          z  sJ |t          j        v r                     |	
          S t          j
        dk    t          |          dt          t                   dt          t          t           f         f
 	fd}t#          ||          }t          j        |<   |S )Nr   r   r]   c                    t          j        |           !_        d t          "          D                                 fdD                        t          |d         pg           t          |d         pg           z   }t          t          |                    }t           d|d          d  |d<   rk|d                             d	d
          }t          |          d
k    r|d         |d<   n/t          |          dk    sJ |\  }}| d	t           d| d  |d<    |d<   d|d<   ||d<   t                    |d<   d|d<   d|d<   t          fdD             z   fd|d         D             z             |d<   |d         t          t          z   z  |d<   t          $fd| D                       }g }rW|r1|                    t          dt          |                               |                    t          dd                     g }d &D             }	%fdt          &          D             }
d | D             }i }d}t!          '          }t          "          D ]A}|t          #          k     rX#|         ||z   k    rI|                    t          d                     |d
z  }|t          #          k     r#|         ||z   k    I|                    t          dd | !                     ||	v rw|	                    |          } |||          \  }}|                    |           r<|
                    |          }||         }!j                            |           |||<   ||z   }||v r(|                    t'          ||                              Cr&t)          t+          !j                            !_        |	rJ D ]o\  }}|                    t          d|!                     |                    t'          |                     |                    t          d"|!                     prPt,          j        d#k    sJ D ];}|vsJ |                    t          d          t          d"|!          g           <|                    t1          |                     | D ]2}|j        |j        k    r nd |_        t,          j        d$k    rd |_        3|r=|                    |           |                                        |                     |r:sJ | D ]3}|j        r*|j        j        |v r||j        j                 |j        _        4|| z   | d d <   d S )%Nc                     g | ]}d | S )___stackrs   )r<   is     r+   r>   zCContinueExecutionCache.generate.<locals>.update.<locals>.<listcomp>  s    :::qNqNN:::r-   c              3   $   K   | ]
}|v|V  d S r   rs   r<   vargss     r+   	<genexpr>zBContinueExecutionCache.generate.<locals>.update.<locals>.<genexpr>  s'      ==aq}}}}}}==r-   co_cellvarsco_freevars_co_name_at_co_qualname.r	   )maxsplitr   co_firstlinenors   co_argcountr   co_posonlyargcountco_kwonlyargcountc                     g | ]}|v|	S rs   rs   r   s     r+   r>   zCContinueExecutionCache.generate.<locals>.update.<locals>.<listcomp>  s    ===q}}1}}}r-   c                     g | ]}|v|	S rs   rs   r   s     r+   r>   zCContinueExecutionCache.generate.<locals>.update.<locals>.<listcomp>  s    KKKQd]]1]]]r-   rA   co_flagsc              3   2   K   | ]}|j         k    |V  d S r   r   r<   r   r   s     r+   r   zBContinueExecutionCache.generate.<locals>.update.<locals>.<genexpr>  s/      HHQX5G5G!5G5G5G5GHHr-   COPY_FREE_VARSr%   RESUMEc                     i | ]
}|j         |S rs   r1   )r<   fns     r+   
<dictcomp>zCContinueExecutionCache.generate.<locals>.update.<locals>.<dictcomp>  s    <<<BR^R<<<r-   c                 2    i | ]\  }}|j         |         S rs   r   )r<   r   r   r   s      r+   r   zCContinueExecutionCache.generate.<locals>.update.<locals>.<dictcomp>  s7     # # #Ar  7 :# # #r-   c                     i | ]
}|j         |S rs   r   )r<   insts     r+   r   zCContinueExecutionCache.generate.<locals>.update.<locals>.<dictcomp>  s    IIIDdk4IIIr-   r"   rH   r   r8   rG   ru   r   )copydeepcopyr   rangerY   r   sortedTORCH_DYNAMO_RESUME_IN_PREFIXrsplitrZ   
CO_VARARGSCO_VARKEYWORDSr   r)   r   	enumeratedictpopr   r   r   reversedr'   r(   r   r   starts_line	positionsunreachable_codesr[   rL   )(r   r]   freevarsqualified_pathmodule_namer   rL   prefixr3   hookshook_target_offsetsoffset_to_instold_hook_target_remapnull_idxes_istack_ctx_vars_dr   hook
hook_insts
exn_targethook_target_offsetold_hook_targetreal_ir_   valsr   r   r   r   r   r   r   is_py311_plusr   metar   r   r   r   r   r   s(                             @r+   updatez/ContinueExecutionCache.generate.<locals>.update  s    $l ; ;D::E&MM:::DKK====8======\-8>B??%]+1rC C H VH--..H 1XX<	3JXXPVXX   	_!-m!<!C!CCRS!C!T!T~&&!++2>y2IL//~..!3333+9(K '^^)F^^^^V\^^ !% .4L)**,L'*2L'*-d))L'12L-.01L,-*/====m===>KKKKl=9KKKL+ +L'
 (4J'?^+C (L$ HHHH\HHHHHFF C MM*+;XOOO   0qAAABBB)+G<<)<<<E# # # #&y11# # # JILIIIN$&!L#N336]] R R 3z??22"<0A4DDDMM"4["A"ABBB A%L	 !3z??22"<0A4DDD 0^PQ^^TTTUUU:: 99Q<<D-1T,-H-H*J
MM*---$ L-@-D-DQ-G-G**89K*L=DDEWXXXAK-o>\)--- MM"67G7O"P"PQQQ  9=TBCC9 95  0 M M
d0TJJJKKK24889990dKKKLLLL  	'72222&  AD====MM.{;;.|AFFF    MM.v66777
 % * *;&-//E#' #w..%)DN Cg&&&c33LAABBB % 	$$$$(  D* .59NNN4I .55*1
 %|3LOOOr-   )r   CO_GENERATORCO_COROUTINECO_ITERABLE_COROUTINECO_ASYNC_GENERATORCO_OPTIMIZEDr   generated_code_metadata&generate_based_on_original_code_objectr'   r(   r   r   r   r   strr   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   new_coder   r   s   ` ``````````  @@r+   r   zContinueExecutionCache.generatel  sr    !!!Ml*-BBEWWY	
 	
 	
 }|++++)AAA=='!   (G3%d++I	4k!2 I	4$sCx. I	4 I	4 I	4 I	4 I	4 I	4 I	4 I	4 I	4 I	4 I	4 I	4 I	4 I	4 I	4 I	4 I	4 I	4V )v66CG6x@r-   c                 F    t          dd          t          dd          gS )zACodegen a `raise None` to make analysis work for unreachable coder7   Nr8   RAISE_VARARGSr	   r%   r:   )r]   s    r+   r   z(ContinueExecutionCache.unreachable_codes"  s.     |D999A666
 	
r-   .c                   	
 t           j        |         	d
dt          t                   dt          t
          t          f         f	
fd}t          ||           t          j	        dk    rn	j
        sLi x	_
        dt          t                   dt          t
          t          f         f	fd}t          ||           t          	fdD                       t          j        	j        |
g|R  S )a>  
        This handles the case of generating a resume into code generated
        to resume something else.  We want to always generate starting
        from the original code object so that if control flow paths
        converge we only generated 1 resume function (rather than 2^n
        resume functions).
        Nr   r]   c                     fd| D             \  fdt          t          |           t          j                            D             \  }j        |j        k    sJ |j        d S )Nc              3   2   K   | ]}|j         k    |V  d S r   r   r   s     r+   r   ziContinueExecutionCache.generate_based_on_original_code_object.<locals>.find_new_offset.<locals>.<genexpr>?  s/      GGqAH4F4F4F4F4F4FGGr-   c              3   *   K   | ]\  }}|u 	|V  d S r   rs   )r<   i1i2rL   s      r+   r   ziContinueExecutionCache.generate_based_on_original_code_object.<locals>.find_new_offset.<locals>.<genexpr>A  s9        B<< <<< r-   )zipr   r   opcoder   )r   r]   
new_targetrL   r   
new_offsetr   s      @r+   find_new_offsetzVContinueExecutionCache.generate_based_on_original_code_object.<locals>.find_new_offset;  s     HGGGLGGGIV   !(<"8"8(4CT:U:UVV  MZ
 =J$55555#*JJJr-   r   c                   
 g }| D ]I}t          |          t          j                  k    r n!|j        dk    r|                    |           Jt	          |j                  D ]"\  }}|t          t          |j                  <   #|r t          t          |d         j                  nd
t          
fdD                       }t          | |d           }t          t	          t          |           t          j                            |d           }t	          ||          D ]\  }}	|d         j        |	j        <   d S )NrF   c              3   (   K   | ]}|k    |V  d S r   rs   )r<   nold_start_offsets     r+   r   zmContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets.<locals>.<genexpr>o  s7       . .aBR>R>R>R>R>R>R. .r-   c                     | j         |k    S r   r   )r   os     r+   <lambda>zlContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets.<locals>.<lambda>s  s    WXHX r-   c                     | d         |u S )Nr   rs   )v1v2s     r+   r  zlContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets.<locals>.<lambda>x  s    r!u{ r-   r	   )rZ   r   opnamer)   r  r   r   r   r   r   r   r   )r   r]   prefix_blocksr   r  old_inst_offsetstargetsnew_targetsnewoldr  r   r   r   s             @r+   remap_block_offsetszZContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsetsS  s    8:M , 7 7}-- A2 2   "E;/99)00666 $'%t'L$ $ N Na MN1$sDK2H2HII @MTS-"3":;;;RT % (. . . . .#:. . . ( ($ +$&68X8X G #/H\22HT=N4O4OPP22# #K
 %(W$=$= N NS@CA1#*==N Nr-   c              3   2   K   | ]}j         |         V  d S r   )r   )r<   r  r   s     r+   r   zPContinueExecutionCache.generate_based_on_original_code_object.<locals>.<genexpr>  s<       , ,67.q1, , , , , ,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  s      ``   @@@r+   r  z=ContinueExecutionCache.generate_based_on_original_code_object*  sl    (>'U(
 
	+{+	+;?S>	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	dO444w&&
 1 -AMOO)D,J(N"&{"3(NCGS>(N (N (N (N (N (N (N (NT &d,?@@@ ', , , , ,;R, , , ' '# &,Ivz+B
EI
 
 
 	
r-   N)r   r   r   r   r   r  classmethodr   r   r   r  r0   r   r   r   r   staticmethodr   r   r   r  rs   r-   r+   r   r   _  sz       ""$$E4466$ $ [$ s 	s
 "'ss s *s Szs %s c5:o.s !eCj1s #Js 
s s s [sj 
4+< 
 
 
 \
 Z
#&Z
AFsCxZ
 Z
 Z
 [Z
 Z
 Z
r-   r   )*r   r   r'   r   typingr   r   r   r   r   r   bytecode_transformationr
   r   r   r   r   r   r   r   r   r   utilsr   r  CO_NEWLOCALSr   r   	CO_NESTEDr   	CO_NOFREEr  r  r  r   r,   	dataclassr0   r   r   r   r   rs   r-   r+   <module>r3     s        



  9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9                        * ) ) ) ) ) 
		   !9 < < < d###A) A) A) A) A) A) A) $#A)H ? ? ? ? ? ? ? ?  &  f
 f
 f
 f
 f
 f
 f
 f
R	H Hr-   