
    Phc                     0   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 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  ejB                  d       G d d             Z"ejB                   G d d             Z#d Z$ G d d      Z%y)    N)AnycastDictListOptionalTuple   )	create_call_functioncreate_call_methodcreate_dup_topcreate_instructioncreate_jump_absoluteInstructionInstructionExnTabEntrytransform_code_object	unique_id)ExactWeakKeyDictionary                @         i   T)frozenc                   N    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y)ReenterWithstack_indexN.target_valuescleanupc                    g }| j                   r$| j                   D cg c]  }t        d|       }}t        d| j                         |d   vr|dxx   fz  cc<   dD ]  }||d   vs|dxx   |fz  cc<    t        t        j
                  dk  rdnd	      }t        d      }g |t        t        |      d
      t        d      t        d      t        dd      t        d      t        d      }t        j
                  dk  r|j                  t        d|             nHt        d      }	t        d      }
t        |	|
|| j                  dz   d      |	_        |j                  |	       fd}t        j
                  dk  r*t        d      t        d      |g |       t        d      }nt        j
                  dk  r7t        d      g |       t        d|      | |       t        d      |}nyt        dd      }t        dd      }t        |||| j                  dz   d
      |_        
g |       t        d|      | |       ||t        d       t        dd      |}||z   |d!d! |S c c}w )"z
        Codegen based off of:
        load args
        enter context
        try:
            (rest)
        finally:
            exit context
        
LOAD_CONSTargval___context_manager_co_varnames)	__enter____exit__co_names      NOPPUSH_EXC_INFOT
STORE_FAST	LOAD_FASTLOAD_METHODr(   r   POP_TOPSETUP_FINALLYtargetr	   Fc                      t        d       t        dd      t        dd       t               t               gt        d      t        d      S )Nr1   r$   r2   r)   r#   r,   r3   )r   r   r   )ctx_names   iC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_dynamo/resume_execution.pycreate_resetz,ReenterWith.try_except.<locals>.create_reset^   sU    ";x@"=D"<=   $A& #9-     r,   	   	POP_BLOCKBEGIN_FINALLYEND_FINALLYJUMP_FORWARDRERAISEargCOPYr,   r   
POP_EXCEPTN)r    r   r   r   sysversion_infor
   lenr   appendr   exn_tab_entry)selfcode_optionsr!   	load_argsvalnameexcept_jump_targetcleanup_complete_jump_targetsetup_finallyexn_tab_beginexn_tab_endr:   epiloguefinally_exn_tab_endfinally_exn_tab_targetr8   s                  @r9   
try_exceptzReenterWith.try_except(   sJ    	  ---C #<<-   243C3C2DEF<66'H;6'-D<
33Z(TG3( . 0%%/E_
 (:%'@$

!#i.$7
 |H=
 {8<	

 }[A
  "
 y)
 g%  "?;MN /u5M,U3K*@"  1$+M'   /		 f$";/"?3" 	
 #=1H '";/ #>:VW #	
  #9- -H #5YA"F%7A%F"/E"#&  1$0,  #>:VW #	
  $ ' #<0 #9!4 -H '
s   Jc                 f   g }| j                   r$| j                   D cg c]  }t        d|       }}t        j                  dk  rrt        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  rt        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        d|      ||t        d      t        dd      |t        d      t        d      t        d      |	|z   |d	d	 g |t        t	        |      d      t        d       ||fS c c}w )!zR
        Codegen based off of:
        with ctx(args):
            (rest)
        r#   r$   r<   WITH_CLEANUP_STARTr?   r>   WITH_CLEANUP_FINISHr@   NCALL_FUNCTIONrC   
SETUP_WITHr5   r3   r+   WITH_EXCEPT_STARTr.   DUP_TOPr,   rA   POP_JUMP_IF_TRUErB   rF   c                      t        dd       S )Nr#   r$   r    r;   r9   create_load_nonez.ReenterWith.__call__.<locals>.create_load_none   s    ),tDDr;   r/   r   rE   r	   TFPOP_JUMP_FORWARD_IF_TRUEBEFORE_WITH)	r    r   rG   rH   rI   r   r   rK   r
   )rL   rM   r!   rN   rO   with_cleanup_startbegin_finallywith_except_startpop_top_after_with_except_startrR   re   exn_tab_1_beginexn_tab_1_endexn_tab_1_targetexn_tab_2_endexn_tab_2_targets                   r9   __call__zReenterWith.__call__   s*    	  ---C #<<-   f$!34H!I.?M";/""#89"=1 GAJ"?IG #<8JK #9-	
   ' 23F G.@.K++=e+D( #;/"<="9-"9-"?:"9-">:VW!"&/N #9-/"9-"9-"<0"9-,%& 'GAJ*"?IG #<8IJ #9-	
   /A.K++=e+D(E 1;O.u5M1/B.ya@M1&a@,B   1$-O) .D    1$.* =S//   1$=+9  " " "	
 &a/ #9- #>:VW ! ##67 #.:  !  #<0!" #9!4#$ 0%& #<0'( #9-)* #9-+, --. /GAJ2%c)nd; #=1  	
     es   L.)__name__
__module____qualname__int__annotations__r    r   r   r   r   r   rY   rq   rd   r;   r9   r   r   !   s9    /3M8E#s(O,3k[0A kZ r;   r   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<   y)ResumeFunctionMetadatacode)default_factoryinstructions prefix_block_target_offset_remapNblock_target_offset_remap)rr   rs   rt   typesCodeTyperv   dataclassesfieldlistr{   r   r   r|   ru   r}   r   r   rd   r;   r9   rx   rx     sf    
..&7k&7&7&ML${#M 3D+2C2C3$d3i  ;?xS#X7>r;   rx   c                     t        |      }g }	 t        |      }| D ](  } |||      s|j                  |       t        |      }* 	 |S # t        $ r Y |S w xY w)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nextrJ   StopIteration)l1l2conditrescurrO   s          r9   _filter_iterr   '  sg     
bB
C2hCC~

32h  J  Js   A
 A
 
	AAc                       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j                  fd	       Zedee   fd
       Zedede	edf   fd       Zy)ContinueExecutionCachec                     || j                   vrt               | j                   |<   t        |      }|| j                   |   vr$ | j                  ||g| | j                   |   |<   | j                   |   |   S N)cachedicttuplegenerate)clsry   linenokeys       r9   lookupzContinueExecutionCache.lookup>  sm    syy "fCIIdOCjciio%#/3<<f#Cs#CCIIdOC yys##r;   offsetsetup_fn_target_offsetsnstackargnames	setup_fns
null_idxesreturnc	                     J |j                   t        t        z  t        z  t        z  z  rJ |j                   t
        z  sJ |t        j                  v r j                  |      S t        j                  dk\  t        |      dt        t           dt        t        t         f   f f
d}	t#        ||	      }
t        j                  |
<   |
S )Nr+   r{   rM   c                   
 t        j                  |       _        t              D cg c]  }d| 	 c}j	                  fdD               t        |d   xs g       t        |d   xs g       z   }d|d    |d<   rd|d    |d<   |d<   t               |d<   ||d<   t              |d	<   d
|d<   d
|d<   t        |d   D cg c]	  }|vs| c}z         |d<   |d   t        t        z   z  |d<   t        fd| D              }g }rC|r%|j                  t        dt        |                   |j                  t        dd
             g }D ci c]  }|j                  | }	}t              D ci c]  \  }}|j                  |    }
}}| D ci c]  }|j                  | }}i }d
}t              D ]  }|t              k  rD|   ||z   k(  r9|j                  t        d             |dz  }|t              k  r|   ||z   k(  r9|j                  t        dd|              ||	v sy|	j                  |      } |||      \  }}|j	                  |       s|
j                  |      }||   }j                   j                  |       |||<    r#t#        t%        j                               _        |	rJ |j                  t'        |             | D ]?  }|j                  |j                  k(  r n$d |_        t*        j,                  dk\  s9d |_        A |r1|j	                  |       |j	                  j1                  |             |rYsJ | D ]P  }|j2                  s|j2                  j4                  |v s)||j2                  j4                     |j2                  _        R || z   | d d  y c c}w c c}w c c}w c c}}w c c}w )N___stackc              3   ,   K   | ]  }|vs|  y wr   rd   ).0vargss     r9   	<genexpr>zBContinueExecutionCache.generate.<locals>.update.<locals>.<genexpr>l  s     =8aq}8s   	co_cellvarsco_freevars
resume_in_co_nameco_qualnameco_firstlinenoco_argcountr   co_posonlyargcountco_kwonlyargcountr'   co_flagsc              3   B   K   | ]  }|j                   k(  s|  y wr   r   r   ir   s     r9   r   zBContinueExecutionCache.generate.<locals>.update.<locals>.<genexpr>  s     H\QXX5G!\   COPY_FREE_VARSrC   RESUME	PUSH_NULLr	   r1   r$   r+   )copydeepcopyr{   rangeextendr   rI   
CO_VARARGSCO_VARKEYWORDSr   rJ   r   r   	enumerater   popr|   r   reversedr   starts_linerG   rH   	positionsunreachable_codesrK   r6   )r{   rM   r   freevarsr   r6   prefixr!   fnhookshook_target_offsetsinstoffset_to_instold_hook_target_remapnull_idxes_ihook
hook_insts
exn_targethook_target_offsetold_hook_targetr   r   r   is_py311_plusr   metar   r   r   r   r   s                       @r9   updatez/ContinueExecutionCache.generate.<locals>.updateh  s0    $l ;D,1&M:MqhqcNM:DKK=8==\-8>B?%]+1rC H )3<	3J2K&LL#0:<;V:W.X]+-3L)**/'L'*2L'*-d)L'12L-.01L,-*/<#>P#>a!4-#>PP+L' (4J'?^+C (L$ H\HHFFMM*+;XO 0qAB)+G2;<)BR^^R')E< 'y1#1EAr  7 ::1   # =IILDdkk4/LNI$&!L6] 3z?2"<0A4DDMM"4["AB A%L	 !3z?2"<0A4DD 0xPQs^TU: 99Q<D-1,-H*J
MM*-$-@-D-DQ-G**89K*L==DDEWXAK-o>! #"  9=TBBC95 9MM.v67
 %;;&--/#' ##w.%)DN % g&c33LAB %$$}(D** ..559NN4I ..555**1 ) %|3LO ; Q  =# Js#   O	O
O
OO#O)r   CO_GENERATORCO_COROUTINECO_ITERABLE_COROUTINECO_ASYNC_GENERATORCO_OPTIMIZEDr   generated_code_metadata&generate_based_on_original_code_objectrG   rH   rx   r   r   r   strr   r   )r   ry   r   r   r   r   r   r   r   r   new_coder   r   s   ` ```````  @@r9   r   zContinueExecutionCache.generateG  s     !!!MMl*-BBEWWY	
 
 }}|+++)AAA=='	 	 ((G3%d+b	4k!2 b	4$sCx. b	4 b	4H )v6CG66x@r;   c                 6    t        dd      t        dd      gS )zACodegen a `raise None` to make analysis work for unreachable coder#   Nr$   RAISE_VARARGSr	   rC   rc   )rM   s    r9   r   z(ContinueExecutionCache.unreachable_codes  s"     |D9A6
 	
r;   .c                   	
 t         j                  |   	d
dt        t           dt        t
        t        f   f	
fd}t        ||       t        j                  dk\  r]	j                  s=i x	_
        dt        t           dt        t
        t        f   f	fd}t        ||       t        fdD              t        j                  	j                  |
g| 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{   rM   c                     fd| D        \  fdt        t        |       t        j                              D        \  }j                  |j                  k(  sJ |j                  y )Nc              3   B   K   | ]  }|j                   k(  s|  y wr   r   r   s     r9   r   ziContinueExecutionCache.generate_based_on_original_code_object.<locals>.find_new_offset.<locals>.<genexpr>  s     GLqAHH4FLr   c              3   0   K   | ]  \  }}|u r|  y wr   rd   )r   i1i2r6   s      r9   r   ziContinueExecutionCache.generate_based_on_original_code_object.<locals>.find_new_offset.<locals>.<genexpr>  s$      VFB< Vs   )zipr   r{   opcoder   )r{   rM   
new_targetr6   r   
new_offsetr   s      @r9   find_new_offsetzVContinueExecutionCache.generate_based_on_original_code_object.<locals>.find_new_offset  s_     HLGIV!(<"8(4CTCT:UVMZ
 ==J$5$5555#**Jr;   r+   c                 f  
 g }| D ]F  }t        |      t        j                        k(  r n#|j                  dk(  s6|j                  |       H t	        |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                  <   # y )Nr/   c              3   .   K   | ]  }|kD  s	|  y wr   rd   )r   nold_start_offsets     r9   r   zmContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets.<locals>.<genexpr>  s      .#:aaBR>R#:s   
c                      | j                   |k(  S r   r   )r   os     r9   <lambda>zlContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets.<locals>.<lambda>!  s    WXHXr;   c                     | d   |u S )Nr   rd   )v1v2s     r9   r   zlContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets.<locals>.<lambda>&  s    r!u{r;   r	   )rI   r|   opnamerJ   r   r   ru   r   sortedr   r   r{   )r{   rM   prefix_blocksr   r   old_inst_offsetstargetsnew_targetsnewoldr   r}   r   r   s             @r9   remap_block_offsetszZContinueExecutionCache.generate_based_on_original_code_object.<locals>.remap_block_offsets  s6    8:M ,}- AA2  ";;/9)006 !- $'%t'L'L$a MN1$sDKK2HI$ @MS-"3":":;RT % (. .#:. ($ +$&68XG #/H\2HT=N=N4OP2#K
 %(W$=S@CA1#**= %>r;   c              3   (   K   | ]	  }|     y wr   rd   )r   r   r}   s     r9   r   zPContinueExecutionCache.generate_based_on_original_code_object.<locals>.<genexpr>.  s      ,6M)!,6Ms   )r   r   r   r   r   r   r   r   rG   rH   r}   r   r   ry   )r   ry   r   r   r   r   r   r  r}   r   r   s      ``   @@@r9   r   z=ContinueExecutionCache.generate_based_on_original_code_object  s     (>'U'U(
 
	+{+	+;?S>	+ 	dO4w&
 11MOO)D,J(N"&{"3(NCGS>(NT &d,?@ ', ,6M, '# &,,IIvz+B
EI
 	
r;   N)rr   rs   rt   r   r   r   classmethodr   ru   r   r   r   r~   r   r   staticmethodr   r   r   r   rd   r;   r9   r   r   :  s    "$E46$ $ F 	F
 "'sF F *F %F #JF 
F FP 
4+< 
 
 Z
#&Z
AFsCxZ
 Z
r;   r   )&r   r   rG   r~   typingr   r   r   r   r   r   bytecode_transformationr
   r   r   r   r   r   r   r   r   utilsr   r   CO_NEWLOCALSr   r   	CO_NESTEDr   	CO_NOFREEr   r   r   	dataclassr   rx   r   r   rd   r;   r9   <module>r     s      
  9 9
 
 
 * 
		   d#r  r  $r j ? ? ?&y
 y
xHr;   