
    Ph}                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZ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mZmZmZ d dlmZ d dlZd dlZd dl m!Z!m"Z"m#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. ddl/m0Z0m1Z1m2Z2m3Z3 dd	l4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; dd
l<m<Z< ddl=m>Z> ddl?m?Z? ddl&m@Z@mAZAmBZBmCZC ddlDmEZE ddlFmGZGmHZH ddlImJZJmKZKmLZL ddlMmNZNmOZO ddlPmQZQmRZR ddlSmTZTmUZUmVZVmWZWmXZXmYZY ddlZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZa ddlbmcZcmdZdmeZemfZfmgZg ddlhmiZimjZj ddlkmlZl ddlmmnZnmoZo ddlpmqZqmrZrmsZs ddltmuZumvZv ddlwmxZxmyZymzZzm{Z{ ddl|m}Z}m~Z~mZmZmZ ddlmZmZmZmZmZmZ ddlmZ ddlmZmZmZmZ dd lmZ dd!lmZmZmZmZ  e
j.                  e      Zej4                  j7                  ed"      Zej4                  j7                  ed#      Zej4                  j7                  ed$      Z ej>                         ZejB                   G d% d&             ZejB                   G d' d(             Z ejH                  d      d)        ZejB                   G d* d+             Z G d, d-e      Zd.ej(                  d/ef   fd0Zd1d2d3ej(                  egef   d4efd5Zd3ej(                  egef   d4efd6Zd7Zd8 Z G d9 d2e!e         Z G d: d;e      Z G d< d=e      Z G d> d?e      Zy)@    N)	AnyCallableDictList
NamedTupleOptionalSetTupleType)patch)CheckpointabletracingTracingContext   )configexcloggingside_effects	skipfiles	variables)
is_allowedis_builtin_constantis_forbidden)get_indexofJUMP_OPNAMESlivevars_analysispropagate_line_nums)cleaned_instructionscreate_call_functioncreate_instructioncreate_jump_absoluteInstructionis_generator	unique_id)code_context)	PyCodegen)current_scope_id)ArgsMismatchErrorBackendCompilerFailedunimplementedUnsupported)get_funcname)GuardBuilderinstall_guard)GraphCompileReasonOutputGraphOutputGraphState)DummyModuleExecutionRecorder)ContinueExecutionCacheReenterWith)
AttrSourceGetItemSourceGlobalSourceGlobalWeakRefSourceLocalSourceSource)countersget_fake_valueget_instruction_source_311graph_break_dup_warning_checkeristype
LazyStringproxy_args_kwargs)_is_top_level_scopeis_side_effect_safeMutableLocaltypestrVariableTracker)VariableBuilderwrap_fx_proxy)BuiltinVariable)ConstantVariableEnumVariable)ContextWrappingVariableGenericContextWrappingVariableWithExitFunctionVariable)ConstDictVariableSetVariable)BaseUserFunctionVariableNestedUserFunctionVariableUserFunctionVariableUserMethodVariable)BaseListVariableListIteratorVariableListVariableSliceVariableTupleVariable)ClosureVariableGetAttrVariableInlinedClosureVariableNullVariablePythonModuleVariableUnknownVariable)NNModuleVariable)supported_const_comparison_opssupported_tensor_comparison_opsSymNodeVariableTensorVariable)TorchVariable)RemovableHandleVariableUserDefinedClassVariableUserDefinedObjectVariableUserDefinedVariablegraph_breaks
trace_calltrace_sourcec                   T    e Zd ZU eed<   eed<   eed<   dZeed<   dZe	e
   ed<   d Zy)	SpeculationEntryfilenamelinenoinstruction_pointerFfailedNreasonc                 8    d| _         t        j                         )z\
        Start tracing of the current frame over again, and don't take this branch.
        T)rs   r   SpeculationRestartAnalysisselfs    iC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_dynamo/symbolic_convert.pyfail_and_restart_analysisz*SpeculationEntry.fail_and_restart_analysis   s     ,,..    )__name__
__module____qualname__str__annotations__intrs   boolrt   r   r/   rz    r{   ry   ro   ro      s1    MKFD+/FH'(//r{   ro   c                   v    e Zd ZU dZ ej
                  e      Zee	   e
d<   dZee
d<   d Zd Zded	ed
e	fdZy)SpeculationLoga3  
    SpeculationLog replaces the prior copy_graphstate/restore_graphstate
    checkpointing.  Rather than saving/restoring state, we restart the
    dynamo conversion process over from the beginning -- but when we
    hit the start of the speculation that failed, we instead generate
    a graph break.
    )default_factoryentriesr   indexc                     d| _         y Nr   )r   rw   s    ry   restartzSpeculationLog.restart   s	    
r{   c                 F    | j                   j                          d| _        y r   )r   clearr   rw   s    ry   r   zSpeculationLog.clear   s    
r{   rp   rq   returnc                 (   t        | j                        | j                  k(  r&| j                  j                  t	        |||             | j                  | j                     }| xj                  dz  c_        |j
                  |k(  r|j                  |k(  r|j                  |k(  snJ t        j                  d| j                   dt        | j                         d|j                   d|j                   d|j
                   d| d| d| d             |S )	z
        Lookup or create a SpeculationEntry() that is shared across
        RestartAnalysis calls.  Args are used only for debug checks.
        r   z'
            SpecuationLog diverged at z of z:
            - Run1: :z (ip=z)
            - Run2: z6)
            Please submit a bug report.
            )
lenr   r   appendro   rr   rp   rq   textwrapdedent)rx   rp   rq   rr   entrys        ry   nextzSpeculationLog.next   s	   
 t||

*LL 06CV WXTZZ(

a
%%)<<(*&	
 ??''+zzl$s4<<7H6I J^^$Aell^59R9R8S TJaxu-@,A B
		
' r{   N)r|   r}   r~   __doc__dataclassesfieldlistr   r   ro   r   r   r   r   r   r   r   r   r{   ry   r   r      sT     '8k&7&7&MGT"#ME3NS # GW r{   r   c                  4    t        j                  t              S N)torchdynamo_loggingget_step_loggerlogr   r{   ry   _step_loggerr      s    ..s33r{   c                   R    e Zd ZU eed<   dZee   ed<   dZee	   ed<   d Z
d Zd Zy)BlockStackEntrytargetNstack_indexwith_contextc                     | j                   d uS r   )r   rw   s    ry   can_restorezBlockStackEntry.can_restore   s      ,,r{   c                     | j                   J | j                  rI| j                  j                  r3t        | j                   t	        | j                  j                              S t        | j                         S r   )r   r   target_valuesr5   tuplerw   s    ry   	resume_fnzBlockStackEntry.resume_fn   s`    +++!2!2!@!@t//t7H7H7V7V1WXXt//00r{   c                 T    | j                   J | j                   j                  |      S r   )r   exit)rx   txs     ry   r   zBlockStackEntry.exit   s+      ,,,  %%b))r{   )r|   r}   r~   r"   r   r   r   r   r   rM   r   r   r   r   r{   ry   r   r      s5    !%K#%6:L(23:-1*r{   r   c                       e Zd ZU eed<   eeef   ed<   ee   ed<   ee	   ed<   e
e   ed<   eed<   e
e   ed<   eed<   d	d d
e
e   fdZy)InstructionTranslatorGraphStateoutputsymbolic_localsstackblock_stackrr   current_instructionnext_instructionrq   otherr   c                     | j                   D ]\  }|dk(  r,| j                  j                  |j                  | d      c S t        | |      }t        ||      }||k7  sR| d| d| c S  y )Nr   .)prefixz mismatch: z != )_fieldsr   diffgetattr)rx   r   ksvovs        ry   r   z$InstructionTranslatorGraphState.diff   sv    AH}{{''s!W'EEq!B"BRxKt4t44  r{   N)r|   r}   r~   r1   r   r   r   rG   r   r   r   r   r"   r   r   r{   ry   r   r      sf    #.//  o&&!#&$${++K;  r{   r   fn.c                     t        t        j                  |       j                        t	        |       t        j                  |       dddt        ffd       }|S )Nrx   InstructionTranslatorBaseinstc                 h    | j                  j                  | | j                        i              y r   )pushcall_functionpopn)rx   r   fn_varnargss     ry   implzstack_op.<locals>.impl   s'    		&&&tTYYu-=rBCr{   )r   inspect	signature
parametersrJ   	functoolswrapsr"   )r   r   r   r   s     @@ry   stack_opr      s]    !!"%001ER F__RD. Dk D D Kr{   rx   r   truth_fnr   c                    |t         j                  us|ryt        | j                  t              sJ | j                  }| j
                  |   }t        j                  dk  r|j                  dk7  s|j                  dk7  ry|j                  dk7  ry|dz  }d}| j
                  |   }|j                  dk(  rrt        |j                  t              sy|j                  }|dz  }| j
                  |   }|j                  d	vry|dz  }|j                  d
k(  r|dz  }| j
                  |   }|j                  dk7  ry| j                  t        j                  |             y)NF)   	   LOAD_GLOBALAssertionErrorLOAD_ASSERTION_ERRORr   zassertion error
LOAD_CONST)CALL_FUNCTIONPRECALLr   RAISE_VARARGST)operatortruth
isinstancerr   r   instructionssysversion_infoopnameargvalr   r   rK   create)rx   r   r   current_instruction_pointerr   	error_msgs         ry   &_detect_and_normalize_assert_statementr      sW   , 	&4d..444"&":":89D
& ;;-'4;;:J+J;;001$ "I89D{{l"$++s+KK	 	$q(#  !<=;;:: 	$q(#;;)#'1,'  !<={{o%II%%i01r{   c                 (     dddt         f fd}|S )Nrx   r   r   c           	      4   | j                         }t        j                  rVt        |       rH| j                         }|j	                         r+t        |j                               r| j                  |       y t        |t              rJ | j                  j                  dt        j                  gt        ||fi         | j                  |       y  | j                  j                  dt        j                  gt        |fi        }t!        | |t#        |j$                  |             } | j                  j                  dt        j                  gt        ||fi         | j                  |       y |j	                         r> |j                               r'xr | j'                  |       | j                  |       y y t        |t              r\| j)                         rK| j+                         r=d| j-                          }t.        j1                  |       t3        j4                  |      | j'                  |       t.        j7                  d       | j                  j9                  | t;        dt=        |       | j-                         g             | j                          | j?                  | j@                        }xr | j'                  |       | j?                  |jB                        }| j                  jE                  tG        |jH                  |d         g|z   |z          y t        |tJ              rU| j                  jM                  |jN                        }	 |	      r'xr | j'                  |       | j                  |       y y t        |tP              r|jS                  | d	      }
t        |
tT              r|jS                  | d
      }
t        |
tV              r|
jY                  | g i       }t        |tZ              rYt        |j\                  t
        t^        f      r9 |j\                        rcxr | j'                  |       | j                  |       y ta        d       y  d      r'xr | j'                  |       | j                  |       y y y t        |t              sY|jc                  |       rH te        |jg                  |                   r'xr | j'                  |       | j                  |       y y t        |th              rK|jk                  | j                        } |      r'xr | j'                  |       | j                  |       y y t3        jl                  t2        jn                  jp                  dd      )Nr   )example_valueBSkipping frame because there is a graph break in a for/while loop
zgeneric_jump triggered compilezgeneric_jump rt   r   )r   __bool____len__z@generic_jump on UserDefined with __bool__ returning non-constantTzDynamic control flow is not supported at the moment. Please use functorch.experimental.control_flow.cond to explicitly capture the control flow.cond_operands)	case_name)9popr    rewrite_assert_with_torch_assertr   is_python_constantr   as_python_constantjumpr   re   r   create_proxytorch_assert_asyncrB   scalar_tensorrI   r=   noder   should_compile_partial_graphhas_backedgeframe_summaryr   infor   	SkipFramedebugcompile_subgraphr/   rF   create_call_resume_atr   r   add_output_instructionsr    r   ra   get_submodule
module_keyri   var_getattrr\   rU   r   rK   valuer   r*   has_unpack_var_sequencer   unpack_var_sequencerd   evaluate_expr	UserErrorUserErrorTypeDYNAMIC_CONTROL_FLOW)rx   r   r  r   scalar_to_tensor_proxyscalar_to_tensormsgif_nextif_jumpmodxresulteval_resultr   r   s                ry   innerzgeneric_jump.<locals>.innerE  s   !%336tXtL)-I'')d53K3K3M.N		$ %0(((#'' 'y'92>
 		$%=T[[%=%=!4!4&7H%SU7V&"  -&,-C-H-H$O  %DKK$$## #$4i#@"E
 IIdO##%0023)5)		$ 4 u~/D4U4U4W   "Y))+,.  mmC((IIeII67KK(()#GEN#34t7I7I7K6L )  HHJ001F1FGG%TYYu%00=GKK//#DKK
CDwNQXX /0++++E,<,<=C})5)		$  89!!$
3A!_-%%dI6 !/0r26f&67JLL4+=  -15!1		$!Z
 D>-TYYu-IIdO " . E>2u7T7T8
 E55d;<=)5)		$ > /--dkk:K$)5)		$ %
 --!!66c)	 r{   )r"   )r   r   r  s   `` ry   generic_jumpr  D  s"    }/ }{ }~ Lr{   Fc                       fd}|S )Nc                      t        j                         dddt        f fd       }dddt        dt        ffd|S )Nrx   r   r   c                    | j                         }|j                  r"|j                  J  | ||j                        S 	 t        j                  | j
                  j                  | j                  | j
                  j                          	| |      S # t        $ r}| j                         rN| j                         r>d| j                          }t        j                  |       t        j                   |      || j"                  dkD  r|j%                          t'        d       t)        |t        j*                        r | j                         s t        j-                  dd       |j.                  }dj1                  t3        j4                  |            }|d   j6                  |d   j                  f}t8        j;                  t<        j>                        r2t@        s,tC        jD                  |      rt8        j-                  d	||       |j%                          |jG                  d
       tI        |jJ                  |      |_        Y d }~nd }~ww xY w|jM                          y )Nr   r   z0Graph break under GenericContextWrappingVariablez,break_graph_if_unsupported triggered compileTexc_info z%Graph break: %s from user code at:
%sgraph_break)'	speculaters   rt   r   set_current_locf_codeco_filenamerq   co_namer+   r   r   r   r   r   r   r   generic_context_manager_depthremove_from_statsr*   r   UncapturedHigherOrderOpErrorr  
real_stackjoin	tracebackformat_listrp   graph_break_logisEnabledForr   DEBUGexplainr?   addadd_to_statsr/   r  rz   )
rx   r   speculationexcpr  
user_stackuser_stack_formatted	frame_lochandle_graph_breakinner_fns
           ry   wrapperz>break_graph_if_unsupported.<locals>.decorator.<locals>.wrapper  s   ..*K!!"))555)$k6H6HII/N..KK++T[[$++:M:M  d++ *N4464;L;L;N]--/02  HHSM--,$6559 **,!"TUdC$D$DE88:		HSW	X!__
')wwy/D/DZ/P'Q$'^44jn6K6KL	 $00?#7;;IF#))@, &&(!!-0%7*%M""U*NV 113s   AB 
IF*IIrt   c                    | j                   j                  | |       t        |       }g }| j                  D ]p  }|j                  J | j                   j                  g |j                  j                  |      |j                         j                  |j                  |             r t        j                  dk\  r|j                  dk(  r| j                  | j                  j                         nd}t        |      dkD  r'| j                   j                  t!        d|      g       | j                   j                  t#        |j$                  d             nF|j&                  J t)        j(                  |      }d |_        | j                   j                  |g       | j                   j                  |       t        j                  dk\  rs|j                  dk(  rdt-        j.                  t,        j0                  d	   |j$                        t-        j.                  t,        j0                  d   |j$                        z   }n*t-        j.                  |j2                  |j$                        }| j5                  
|z
         t7        
      D ]  }	| j9                  t;                       | j                   j                  | j=                  | j>                               y )
Nr   r      CALLr   r   KW_NAMESr   Fr   ) r   r  r&   r   r   r  reconstructr   
try_exceptcode_optionsr   r   r   kw_namesr   r   r    r   argr   copyexn_tab_entrydisstack_effectopmapopcoder   ranger   r`   r  r   )rx   r   rt   cgcleanupbrE  	inst_copyrJ  _r   s             ry   r9  zIbreak_graph_if_unsupported.<locals>.decorator.<locals>.handle_graph_break  sB   
 KK((f(=4B)+G%%~~1113333B711"//7K & 7*t{{f/D }}0 MM446 
 x=1$KK77+JxHI 33(59
 {{*** IIdO	*.	'33YK@KK//87*t{{f/D"//IIi($(( $$SYYv%6A B  #//TXXFIId\)*4[		/+, !KK//**4+@+@Ar{   )r   r   r"   r/   )r:  r;  r9  r   s   ` @ry   	decoratorz-break_graph_if_unsupported.<locals>.decorator  sU    		"5	45 5	4[ 5	4 
#5	4n5	-5	5	 '5	n r{   r   )r   rS  s   ` ry   break_graph_if_unsupportedrT    s    pd r{   c                       e Zd ZU eed<   eeef   ed<   eeef   ed<   ee   ed<   e	e
   ed<   eed<   e	e   ed<   ee   ed<   e
ed	<   e	e   ed
<   eed<   ee   ed<   e
ed<   eed<   e	e   ed<   eeedef   eedf   eeef   f      ed<   d Zd Zd Zd Zdedee   deeef   fdZdedefdZdedefdZd ZddZd  Zd! Zd" Zd# Zd$ Z d% Z!d&e	e   fd'Z"d(ee   fd)Z#d*efd+Z$d,e
d*ee   fd-Z%d. Z&d/ Z'd0 Z(d1 Z)e(Z*d2 Z+d3 Z,d4 Z-d5 Z.d6 Z/d7 Z0d8 Z1d9 Z2d: Z3d; Z4d< Z5d= Z6e6Z7e6Z8 e9e:jv                  d>      Z< e9e:jz                  d>      Z> e9e:jv                  d?      Z? e9e:jz                  d?      Z@d@ ZAdA ZBdB ZCdC ZDdD ZEdE ZFdF ZGdG ZHdH ZIdI ZJdJ ZKdK ZLdL ZM eNdMN      dO        ZO eNdMN      dP        ZP eNdMN      dQ        ZQdR ZRdS ZSdT ZTdU ZUdV ZVdW ZWdX ZXdY ZYdZ ZZd*efd[Z[ eNd\N      d]        Z\d^ Z]d_ Z^d` Z_da Z`eafdbZbdc ZcecZddd Zede ZfefZgdf Zhdg Zidh Zjdi Zkdj Zldk Zmdl Zndm Zodn Zpdo Zqdp Zrdq Zsdr Ztds Zudt Zvdu Zwdv Zxdw Zydx Zzdy Z{dz Z|e|Z}d{ Z~d| Zd} Zd~ Zd Zd Z ee:j
                        Z ee:j                        Z ee:jv                        Z ee:j                        Z ee:j                        Z ee:j                        Z ee:j                         Z ee:j$                        Z ee:j(                        Z ee:j,                        Z ee:j,                        Z ee:j2                        Z ee:j6                        Z  eNdMN       ee:j:                              Z ee:j>                        Z ee:jB                        Z ee:jF                        Z ee:jJ                        Z ee:jN                        Z ee:jR                        Z ee:jV                        Z ee:jZ                        Z ee:j^                        Z ee:jb                        Z ee:jf                        Z ee:jf                        Z ee:jl                        Z ee:jp                        Z ee:jt                        Z ee:jx                        Z ee:j|                        Z ee:j                        Z ee:j                        Zd Zd Zd Zd Zd Z eNdMN      d        Zd Zd Ze6Ze6Z e9e:jz                  d>      Z e9e:jz                  d>      Z e9e:jv                  d>      Z e9e:jv                  d>      Zd Zd Zd Zd Zd Zd Zd Zd*efdZdefdZd ZddZd Zd Zed        Zd Zej                  d        Zd*efdZdedee   deeef   deeef   deeef   deeef   deeef   deeef   dej                  dede
def fdZ xZS )r   r   r   symbolic_globalsr   rr   r   r   r   rq   rE  accept_prefix_instprefix_instsinline_depthinconsistent_side_effectscurrent_speculation.random_callsc                     d| _         y)z
        InstructionTranslator has encountered instructions which may cause
        dynamo to see a different version of history from eager
        See: https://github.com/pytorch/pytorch/issues/110765
        TN)rZ  rw   s    ry   mark_inconsistent_side_effectsz8InstructionTranslatorBase.mark_inconsistent_side_effectsT  s     *.&r{   c                     | j                   j                  }| j                  J | j                  | j                  d  D ](  }|j                  t
        v s|j                  }||k  s( y yNTF)r   offsetrr   r   r   r   r   )rx   
cur_offsetr   jump_offsets       ry   r   z&InstructionTranslatorBase.has_backedge\  si    --44
''333%%d&>&>&@AD{{l*"kk+	 B
 r{   c                     t        | d      s>t        | j                  d   xs g       t        | j                  d   xs g       z   | _        | j                  S )N_cell_and_freevarsco_cellvarsco_freevars)hasattrr   rD  re  rw   s    ry   cell_and_freevarsz+InstructionTranslatorBase.cell_and_freevarsf  sX    t12&+!!-06B'd''6<"='>D# &&&r{   c                 B   t        | j                  | j                        }|t        | j	                               z  }| j
                  j                         D ci c]  \  }}||v s|| c}}| _        | j                  j                  j                  |        y c c}}w r   )
r   r   r   setri  r   itemsr   r   prune_dead_object_new)rx   readsr   vs       ry   prune_dead_localsz+InstructionTranslatorBase.prune_dead_localsm  s    !$"3"3T5M5MN D22455!11779 
9TQQ%ZAqD9 
 	  66t< 
s   B'Br   argskwargsc                    t        |t              sJ t        |t              sJ t        |t              sJ t	        d t        j                  ||j                               D              sJ d }t        |d      r|j                  }t        |d      r|j                  }|r$t        |      rt        |      rt        d|       | j                  |j                  | ||             y )Nc              3   <   K   | ]  }t        |t                y wr   )r   rG   ).0r  s     ry   	<genexpr>z:InstructionTranslatorBase.call_function.<locals>.<genexpr>  s      
; q/*;   r  r   z$Attempt to trace forbidden callable )r   rG   r   dictall	itertoolschainvaluesrh  r  r   callabler   r   r   r   )rx   r   rq  rr  r:  s        ry   r   z'InstructionTranslatorBase.call_functionx  s     "o...$%%%&$''' 
__T6==?;
 
 	
 
 2wxxH2tuuH*|H/E #Gz!RSS		"""4v67r{   oldvarnewvarc           	         dt         ffd}j                  j                         dt         ffd}t               }| j                  j
                  j                  |||       | j                  D cg c]  }t        j                  ||||       c}| _        | j                  j                         D ]+  \  }}t        j                  ||||      | j                  |<   - y c c}w )Nro  c                 <    | j                   j                   u rS | S r   mutable_local)ro  r  r~  s    ry   replz?InstructionTranslatorBase.update_locals_and_stack.<locals>.repl  s    &"6"66Hr{   c                      | j                   vS r   )parents_tracker)ro  recursive_parentss    ry   skipz?InstructionTranslatorBase.update_locals_and_stack.<locals>.skip  s    $$,===r{   )skip_fn)
rG   r  r  rx  r   r   applyr   r   rl  )	rx   r~  r  r  r  cacher  r   r  s	    ``     @ry   update_locals_and_stackz1InstructionTranslatorBase.update_locals_and_stack  s    	O 	
 #22DDF	>O 	> 37&  &&tUD&AIM
ISAO!!$5$?

 ((..0DAq&5&;&;a'D  # 1
s   7 C(c                 |   t        |j                  t        j                        r'| j                  j                  j                  ||      }n^t        |j                  t        j                  j                        sJ |j                  t        j                  j                               }| j                  ||       |S Nr  )r   r  r   MutableSideEffectsr   mutationr   baserE   cloner  )rx   r~  r  s      ry   replace_allz%InstructionTranslatorBase.replace_all  s    f**L,K,KL[[--66vvFFf22INN4O4OPPP\\	0K0K0M\NF$$VV4r{   c                 2    t         j                  | |||      S )zF
        A call to some user defined function by inlining it.
        )InliningInstructionTranslatorinline_call)rx   r   rq  rr  s       ry   inline_user_function_returnz5InstructionTranslatorBase.inline_user_function_return  s     -88r4PPr{   c                     || j                   }| j                  dkD  rd| j                   dnd}t        | j                  j                  |      }|dnd| d}| j                  j                   d| d| j                  j
                   | | S )Nr   z (inline depth: )r  z (r   z in )rq   rY  r,   r$  r%  r&  )rx   rq   inline_depth_strfuncnamefuncname_strs        ry   get_line_of_code_headerz1InstructionTranslatorBase.get_line_of_code_header  s    >[[F7;7H7H17Lt0013RT 	   7 7@%-rRz3C++))*!F848K8K7L\N[kZlmmr{   c                     d| j                          d}t        j                  | j                  j                  | j
                        j                         }|d| z  }|S )NzTRACE starts_line 
z    )r  	linecachegetliner$  r%  rq   rstrip)rx   log_strlines      ry   get_log_starts_line_log_strz5InstructionTranslatorBase.get_log_starts_line_log_str  sX    &t'C'C'E&FbI  !8!8$++FMMOT$= r{   c                 V    t         j                  dt        | j                               y )N%s)trace_source_logr  rA   r  rw   s    ry   log_starts_linez)InstructionTranslatorBase.log_starts_line  s    tZ0P0P%QRr{   c                    t        | j                  t              sJ | j                  | j                     }|| _        | xj                  dz  c_        | j                  t        | j                        k  r| j                  | j                     | _        nd| _        d| _        |j                  r:| j                  |j                  k7  r!|j                  | _        | j                          t        | j                        dk(  r\| j                         rL| j                         r<| j                         | _        | j                  j                  r| j!                  |      S t"        j%                  d|j&                  |j(                  | j                         t*        j,                  dk\  r+|j.                  }| j0                  r'|r%| j0                  d   j2                  |j2                  u s|sP| j0                  r|j&                  dk7  rt        | j0                        dk(  sJ | j0                  j5                          nt        | j0                        dkD  r@| j0                  d   j2                  |j2                  u r| j0                  j5                          nB| j0                  j7                  t9        |j2                  t        | j                                     	 t;        | |j&                        st=        d	|j&                          t?        j@                  | jB                  jD                  | j                  | jB                  jF                          tI        | |j&                        |       |j&                  d
k7  S # tJ        $ r< | j                  t"        j%                  d        t"        j%                  dd       Y nw xY w| j                  jM                          y)z<Process exactly one instruction, return False we should exitr   Nr   zTRACE %s %s %sr=  r   NOPz	missing: RETURN_VALUEzempty checkpointzstep triggered compileTr  )'r   rr   r   r   r   r   r   starts_linerq   r  r   r   is_non_empty_graphr"  r[  rs   step_graph_breakr   r  r   r   r   r   rH  r   r   r   r   r   rh  r*   r   r#  r$  r%  r&  r   r+   rz   )rx   r   r   s      ry   stepzInstructionTranslatorBase.step  s   $22C888  !9!9:#'   A% ##c$*;*;&<<$($5$5d6N6N$OD!'+D$$(D!t/?/? ?**DK  " 

Oq 113'')'+~~'7D$''..,,T22		"DKKdjjI w&&&E   $$R(//5<<? ''DKK5,@  #4#3#34999((,,. (()A-((,33u||C $$((* $$++'c$**oF	?4-	$++78**''dkk6I6I 'GD$++&t,;;.00 	?''/		,-II.I>		? 	  ::<s   B!M3 3AN87N8c           	      "   | j                   j                  rJ | j                  J | j                   j                  | dt	        d| j                         g             | j                   j                  t        |      g| j                  z          y )NTstep_unsupported)partial_convertrt   )	r   output_instructionsr[  r  r/   r   r  r!   r   )rx   continue_insts     ry   r  z*InstructionTranslatorBase.step_graph_break  s    ;;2222''333$$ %&84;M;M;O:PQ 	% 	

 	++!-01D4E4EE	
r{   c                 ,    t        j                  d       S r   )r   current_framerw   s    ry   run_ctx_mgrz%InstructionTranslatorBase.run_ctx_mgr%  s     ++D11r{   c                    | j                         5  	 | j                  j                  |        | j                  Z| j                  j                  sD| j                         r4	 | j                  '| j                  j                  s| j                         r4| j                  j                          t        | t              r| j                  j!                          	 d d d        y # t        $ r  t        $ r5}t        j                  r| j                  j                         |_         d }~ww xY w# | j                  j                          t        | t              r| j                  j!                          w w xY w# 1 sw Y   y xY wr   )r  r   push_txrr   should_exitr  r)   	Exceptionr   replay_record_enabledexec_recorder
get_recordexec_recordpop_txr   InstructionTranslatorrO  )rx   es     ry   runzInstructionTranslatorBase.run+  s"   *##D),,8 KK33			 ,,8 KK33		 ""$ d$9:KK'')/   )  //$($6$6$A$A$CAM
 ""$ d$9:KK'') ;-  s=   E6B C"AE6"D)40D$$D))D,,AE33E66E?valc                     |#t        |t              sJ dt        |              | j                  j	                  |       y )Nz"push expects VariableTracker, got )r   rG   rF   r   r   )rx   r  s     ry   r   zInstructionTranslatorBase.pushE  sD    {j
 	?/~>	? 
 	

#r{   valsc                 4    |D ]  }| j                  |        y r   r   )rx   r  r  s      ry   	push_manyz#InstructionTranslatorBase.push_manyK  s    CIIcN r{   r   c                 6    | j                   j                         S r   )r   r   rw   s    ry   r   zInstructionTranslatorBase.popO  s    zz~~r{   nc           	          |dk\  sJ t        t        t        |      D cg c]  }| j                          c}            S c c}w r   )r   reversedrM  r   )rx   r  rR  s      ry   r   zInstructionTranslatorBase.popnR  s9    AvvH%(;(Qdhhj(;<==;s   Ac                    |j                   }|| j                  v r9t        j                  r)| j                  j                  || j                  |          |j                  d      r || j                  vr|j                  dd      }|| j                         vsJ || j                  vrt        d       | j                  | j                  |          |j                  d      r| j                  j                  |       y y )Nr   implicitzundefined LOAD_FAST___stack)r   f_localsr   r  r  add_local_var
startswithr   replaceri  r*   r   r   )rx   r   names      ry   	LOAD_FASTz#InstructionTranslatorBase.LOAD_FASTV  s    {{4== V%A%A,,T4==3FG??3D0D0D$D<<Z0D4113333t+++/0		$&&t,-??:&  $$T* 'r{   c                    |j                   | j                         v sJ |j                   | j                  v rMt        j                  r=| j
                  j                  |j                   | j                  |j                             |j                   | j                  vrt        d|j                           | j                  | j                  |j                             y )Nzundefined LOAD_DEREF )
r   ri  r  r   r  r  r  r   r*   r   rx   r   s     ry   
LOAD_DEREFz$InstructionTranslatorBase.LOAD_DEREFf  s    {{d446666;;$--'F,H,H,,T[[$--:TU;;d2221$++?@		$&&t{{34r{   c                     | j                         }|j                  }t        t                     r|j	                  | |      }|| j
                  |<   y r   )r   r   rC   r'   renamer   )rx   r   	loaded_vtr  s       ry   
STORE_FASTz$InstructionTranslatorBase.STORE_FASTp  sF    HHJ	{{ /12!((t4I%.T"r{   c                 2    | j                   |j                  = y r   )r   r   r  s     ry   DELETE_FASTz%InstructionTranslatorBase.DELETE_FASTz  s      -r{   c                 N    | j                  t        |j                               y N)r  )r   r[   r   r  s     ry   LOAD_CLOSUREz&InstructionTranslatorBase.LOAD_CLOSURE  s    		/t{{34r{   c                     t        |j                  t              r'|j                  s| j                  t	        g              y | j                  t        j                  |j                               y )Nr  )r   r   r   r   rZ   rK   r   r  s     ry   r   z$InstructionTranslatorBase.LOAD_CONST  sC    dkk5)$++IImB'(II&--DKK@Ar{   c                    | j                   j                  | j                  u rt        |      }|S d| j                  v r*t	        | j                  | j                  d         |      }|S dt        | j                         }|| j                   j                  vr&| j                   j                  || j                         t        t        |      |      }|S )Nr|   ___unnamed_scope_)	r   global_scope	f_globalsr8   r6   import_sourceidinstall_globalr7   )rx   r  sourcemangled_names       ry   get_global_sourcez+InstructionTranslatorBase.get_global_source  s    ;;##t~~5!$'F  T^^+#&&t~~j'ABD 	 "32dnn3E2FGt{{'?'??KK..|T^^L&|L'A4Hr{   c                 J   t         j                  dk\  r |j                  dz  r| j                  |       |j                  }t
        j                  rn|| j                  v r*| j                  j                  || j                  |          n6|| j                  v sJ | j                  |   | j                  j                  |<   |j                  dk(  rt        d       || j                  v r\| j                  j                  | j                  |      }| j!                  | j                  j                  j#                  ||             y 	 | j                  |   }| j)                  |      }| j!                   t+        | |      |             y # t$        $ r | j'                  |      cY S w xY w)Nr=     r   assert with non-string message)r   r   rF  	PUSH_NULLr   r   r  r  r  add_global_var
f_builtinsbuiltinsr*   rV  r   r   r   load_globalKeyErrorload_builtinr  rH   )rx   r   r  variabler  r  s         ry   r   z%InstructionTranslatorBase.LOAD_GLOBAL  s`   w&xx!|t${{''t~~%""11$t8LMt...48OOD4I""++D1;;**:;4((({{//0E0Ed0KLHIIdkk..::8TJK	+NN4(E ''-		//$/67	  	+$$T**	+s   F F"!F"c                    | j                         }|j                  }| j                  |      }|| j                  vrt	               | j                  |<   | j
                  j                  j                  || j                  |         }t        |t              rt        d       | j
                  j                  j                  |||       y )Nz Storing handles in globals - NYI)r   r   r  rV  objectr   r   track_global_existingr   rg   r*   store_global)rx   r   r  r  r  r  s         ry   STORE_GLOBALz&InstructionTranslatorBase.STORE_GLOBAL  s    
{{''-t,,,*0(D!!$';;++AAD))$/
 e45<=  --heDr{   c                    d|v rZt         j                  j                  j                  |   }|j	                  dd      j	                  dd      j	                  dd      }n*t        j                  |      }d|j	                  dd       }| j                  j                  }||vs	||   |u sJ |||<   | j                  j                  |       t        |      S )z-Create an alias to a module for use in guardstorch_package>rR  <r   _dot_	__import_)r   packagepackage_importer_package_imported_modulesr  	importlibimport_moduler   r  update_co_namesr8   )rx   module_namer  aliasr  s        ry   r  z'InstructionTranslatorBase.import_source  s    k)MM22LLE ##C-55c3?GGWU  ++K8E 3 3C ABCEKK,,	I%5)9U)BBB 	%##E*E""r{   c                 ~    |j                  d|dz
        }t        |      |k  rt        d      |d   }|r| d| S |S )z
        Copied from the Cpython implementation of __import__
        Resolve a relative module name to an absolute one.
        https://github.com/python/cpython/blob/5a094f0255eea1db58fb2cf14c200971e64ec36e/Lib/importlib/_bootstrap.py#L902
        r   r   z2attempted relative import beyond top-level packager   )rsplitr   ImportError)rx   r  r  levelbitsr  s         ry   resolve_namez&InstructionTranslatorBase.resolve_name  sQ     ~~c519-t9uRSSAw#'$q1T1r{   c                    | j                   j                  d      }| j                   j                  d      }|6|2||j                  k7  r#t        j	                  d||j                  d       |S ||j                  S t        j	                  dd       | j                   d   }d| j                   vr|j                  d	      d
   }|S )z
        Copied from the Cpython implementation of __import__
        https://github.com/python/cpython/blob/5a094f0255eea1db58fb2cf14c200971e64ec36e/Lib/importlib/_bootstrap.py#L1090
        __package____spec__z)__package__ != __spec__.parent (%r != %r)r   )
stacklevelzYcan't resolve package from __spec__ or __package__, falling back on __name__ and __path__r|   __path__r   r   )r  getparentr   warning
rpartition)rx   r  specs      ry   calc_packagez&InstructionTranslatorBase.calc_package  s    
 ..$$]3~~!!*-Gt{{$:?KK 	   N;;KK8  
 nnZ0G/!,,S1!4r{   c                 P   | j                  d      \  }}|j                         }|j                         }|j                  }t        j                   d| d| d| }|| j
                  v r| j
                  |   }t        |      }nzt        |||| j
                        }|dk7  r#| j                         }| j                  |||      }|s&|j                  d      d   }	| j                  |	      }n| j                  |      }t        j                  r| j                  j                  ||       t!        |      r| j#                  t%        ||             y t'        |t(        j*                  t,        f      r| j#                  t/        ||             y t1        dt3        |              y )Nr  rR  )fromlistr  globalsr   r   r  zIMPORT_NAME )r   r   r   r3   LOCAL_MOD_PREFIXr  r8   
__import__r  r  	partitionr  r   r  r  add_local_modr   r   rf   r@   types
ModuleTyper2   r_   r*   rF   )
rx   r   r  r!  r  recorded_namer  r  pkgtop_level_module_names
             ry   IMPORT_NAMEz%InstructionTranslatorBase.IMPORT_NAME  s~   ))A,x((*..0kk !112!E7!H:Q{mT 	 DNN*NN=1E!-0F!	E z'')"//S%H (3(=(=c(B1(E%++,AB++K8'',,]EBeIImE&9:EE,,k:;II*5@AL(89:r{   c                 H    | j                  |       | j                  |       y r   )DUP_TOP	LOAD_ATTRr  s     ry   IMPORT_FROMz%InstructionTranslatorBase.IMPORT_FROM-  s    Ttr{   c           	      |   |j                   | j                  vrt        d|j                    d      | j                  |j                      }t        |      r5| j	                   t        | t        |j                               |             y t        |      sJ | j	                  t        j                  |             y )Nzname 'z' is not definedr  )
r   r  	NameErrorr}  r   rH   r8   r   rK   r   )rx   r   r  s      ry   r  z&InstructionTranslatorBase.load_builtin1  s    ;;doo-fT[[M1ABCCoodkk*C=IIFodL,EFsKL&s+++II&--C89r{   c                 @    | j                   |j                     | _        y r   )indexofr   rr   r  s     ry   r   zInstructionTranslatorBase.jump<  s    #'<<#< r{   FTc                 `    | j                   j                  t        |j                               y r   r   r   r   r   r  s     ry   
SETUP_LOOPz$InstructionTranslatorBase.SETUP_LOOPG       <=r{   c                 `    | j                   j                  t        |j                               y r   r7  r  s     ry   SETUP_EXCEPTz&InstructionTranslatorBase.SETUP_EXCEPTK  r9  r{   c                 8    | j                   j                          y r   )r   r   r  s     ry   	POP_BLOCKz#InstructionTranslatorBase.POP_BLOCKO  s    r{   c                 &    | j                  |       y r   setup_or_before_withr  s     ry   
SETUP_WITHz$InstructionTranslatorBase.SETUP_WITHR      !!$'r{   c                 `    | j                   j                  t        |j                               y r   r7  r  s     ry   SETUP_FINALLYz'InstructionTranslatorBase.SETUP_FINALLYU  s     <=r{   c                 &    | j                  d        y r   r  r  s     ry   BEGIN_FINALLYz'InstructionTranslatorBase.BEGIN_FINALLYX  s    		$r{   c                     | j                  d      \  }}|J | j                  |       | j                  |j                  | t        j                  d       gdz  i              y )Nr  r   )r   r   r   rK   r   )rx   r   r   r   s       ry   WITH_CLEANUP_STARTz,InstructionTranslatorBase.WITH_CLEANUP_START[  sX    IIaL	c{{		#		$$$T,<,C,CD,I+JQ+NPRSTr{   c                 H    | j                  d       | j                  d        y )Nr  )r   r   r  s     ry   WITH_CLEANUP_FINISHz-InstructionTranslatorBase.WITH_CLEANUP_FINISHa  s    		!		$r{   c                 ,    | j                         }|J y r   r   rx   r   toss      ry   END_FINALLYz%InstructionTranslatorBase.END_FINALLYe  s    hhj{{r{   c                     |j                   }|r| j                         }| j                         J |r| j                         y y r   )r   r   r   )rx   r   preserve_tosrN  s       ry   POP_FINALLYz%InstructionTranslatorBase.POP_FINALLYi  s>    {{((*Cxxz!!!IIcN r{   c                 r   | j                         j                         }t        |t        j                  t        j
                  f      r8	 |j                  |       \  }}| j                  |       | j                  |       y t        dt        |              y # t        $ r | j                  |       Y y w xY w)Nz	FOR_ITER )r   realizer   r   rW   IteratorVariablenext_variablesr   StopIterationr   r*   rF   )rx   r   itr  	next_iters        ry   FOR_ITERz"InstructionTranslatorBase.FOR_ITERq  s    XXZ!b9999;U;UVW !#!2!24!8Y		)$		# Igbk]34 !  		$ s   
6B B65B6c           
         | j                  d      \  }}|j                  }t        t        j                  t        j                         t        j                                     }t        |t        t        t        t        t        t        t        f      rht        |t               rX|j"                  L|t        v rD| j%                  t!        j&                  t        |   t)               |j"                                     y |j+                         r_|j+                         rO||v rK| j%                  t!        j&                   ||   |j-                         |j-                                            y |dv r<| j%                  |j/                  | d|gi              |dk(  r| j1                  |       y y | j%                  t3        ||         j5                  | ||gi              y )Nr  )innot in__contains__r]  )r   r   rx  rz  r{  rc   rl  rb   r   re   rd   ra   rV   rj   rR   rP   rK   r  r   r   r  r   r   call_method	UNARY_NOTrJ   r   )rx   r   leftrightopsupported_anys         ry   
COMPARE_OPz$InstructionTranslatorBase.COMPARE_OP}  s   iile[[OO/557.446
 "#$$',% 5"23#44 II ''226vxM ##%((*m# II ''%M"%//153K3K3M ##IIe''ntfbIJX~t$  IIb 12@@4-r{   c                 b    | j                  t        t              | j                         gi        y r   )r   rJ   iterr   r  s     ry   GET_ITERz"InstructionTranslatorBase.GET_ITER  s!    ?40488:,Cr{   r   r  c                     | j                  |j                        }| j                         }| j                  ||i        y r   r   r   r   r   )rx   r   rq  r   s       ry   r   z'InstructionTranslatorBase.CALL_FUNCTION  s1    yy%XXZ2tR(r{   c                 d   |j                   dk(  r!t        i t              }| j                         }n;|j                   dk(  r!| j                         }| j                         }nt	        d       | j                         }t
        j                  dk\  r"| j                         }t        |t              sJ t        |t              rKt        |j                  t              r1|j                  dk(  r"t        t        t        f      rt        |g      }t        t              s+|j!                  |       rt        |j#                  |             }t        |t              rt        t              s#t	        dt%        |       dt%                      | j'                  ||j(                  |j(                         y )Nr   r   CALL_FUNCTION_EXr=  viewznon-static call  )r   rP   rx  r   r*   r   r   r   r^   r\   objre   r  rK   rZ   rV   r	  r
  rF   r   rl  )rx   r   
kwargsvarsargsvarsr   nulls         ry   rl  z*InstructionTranslatorBase.CALL_FUNCTION_EX  sS    ;;!*2t4JxxzH[[AJxxzH,-XXZw&88:DdL111 r?+266>26!8&6%GH
 %hZ0H&
..t4$X%A%A$%GHH($45Z)>
 ,WX->,?qAT@UVW2x~~z/?/?@r{   c                    | j                         }| j                  |j                        }| j                         }t        |t              r|j                         sJ |j                         }|d t        |        |t        |       d  }}t        t        ||            }t        |      t        |      k(  sJ | j                  |||       y r   )r   r   r   r   rZ   r   r   r   rx  zipr   )rx   r   argnamesrq  r   kwargs_listrr  s          ry   CALL_FUNCTION_KWz*InstructionTranslatorBase.CALL_FUNCTION_KW  s    88:yy%XXZ(M2x7R7R7TTT..0 !1CM>2D#h-9I4Jkc(K016{c(m+++2tV,r{   c                 R   | j                  t        j                  |d             |j                  d   }| j                  d   |   }t
        j                  dk  r'| j                  t        j                  ||             y | j                  t        j                  ||             y )Nr  rA  r   co_namesr=  )	r   r   r  r   rD  r   r   r0  LOAD_METHODrx   r   rF  r   s       ry   LOAD_METHOD_SUPERz+InstructionTranslatorBase.LOAD_METHOD_SUPER  s    ;..tA>?kk!n"":.s3g%NN;..tFCD[00fEFr{   c                     | j                  t        j                  |d             |j                  d   }| j                  d   |   }| j                  t        j                  ||             y )Nr  rA  r   ry  )r   r   r  r   rD  r0  r{  s       ry   LOAD_ATTR_SUPERz)InstructionTranslatorBase.LOAD_ATTR_SUPER  sX    ;..tA>?kk!n"":.s3{**4?@r{   c                     | j                  |       | j                         }t        j                  dk\  r#| j	                  |       | j                  |       y | j                  |       | j                  d        y )Nr=  )r0  r   r   r   r  r   rx   r   ro  s      ry   rz  z%InstructionTranslatorBase.LOAD_METHOD  sV    thhjw& NN4 IIcNIIcNIIdOr{   c                     | j                  |j                        }| j                         }|J | j                         }| j                  ||i        y r   rj  )rx   r   rq  dummyr   s        ry   CALL_METHODz%InstructionTranslatorBase.CALL_METHOD  sF    yy%
}}XXZ2tR(r{   c                     | j                         }t        t              j                  | |t	        j
                  |j                        gi       }| j                  |       y r   )r   rJ   r   r   rK   r   r   r   )rx   r   ro  r  s       ry   r0  z#InstructionTranslatorBase.LOAD_ATTR  sL    hhj )773(//<=r
 			&r{   c                 J   | j                         }|j                  r| j                  |      S | j                  d      \  }}t	        |t
              r!| j                  rJ d|j                   d       	 t        t              j                  | |t        j                  |j                        |gi        y # t        $ rS}| j                         s t        j!                  dd       |j#                          |j%                  d       Y d }~nd }~ww xY w|j'                          y )Nr  zMutating module attribute z during export.zSTORE_ATTR triggered compileTr  r!  )r"  rs   store_attr_graph_breakr   r   ra   exportr   rJ   setattrr   rK   r   r+   r   r   r  r(  r3  rz   )rx   r   r4  r  ro  r  s         ry   
STORE_ATTRz$InstructionTranslatorBase.STORE_ATTR  s    nn&..t4499Q<Sc+, KKI+DKK=HI
	*G$22s,33DKK@#F  	*446II4tID!NN=))	* 	--/s   4A B5 5	D>A	DDc                 X   | j                   j                  | t        d| j                         g             | j                   j	                  t        j
                  |      g       | j                  d       | j                   j	                  | j                  | j                               y )N
store_attrr   r  )	r   r  r/   r   r  rG  r   r  r   r  s     ry   r  z0InstructionTranslatorBase.store_attr_graph_break6  s    $$+L4;M;M;O:PQ 	% 	
 	++TYYt_,=>		!++&&t'<'<=	
r{   c                     | j                         }t        t              j                  | |t	        j
                  |j                        gi        y r   )r   rJ   delattrr   rK   r   r   r  s      ry   DELETE_ATTRz%InstructionTranslatorBase.DELETE_ATTR@  s<    hhj ..3(//<=r	
r{   c                 0    t        dt        |              )Nz1create_call_resume_at not overridden by subclass r   typerx   ra  s     ry   r  z/InstructionTranslatorBase.create_call_resume_atF  s    ?T
|L
 	
r{   c                 0    t        dt        |              )Nz8should_compile_partial_graph not overridden by subclass r  rw   s    ry   r   z6InstructionTranslatorBase.should_compile_partial_graphK  s    FtDzlS
 	
r{   r   c                 Z    | j                  d      \  }}}|j                  | d||gi       }y )Nr   __setitem__)r   r_  )rx   r   r  ro  keyr  s         ry   STORE_SUBSCRz&InstructionTranslatorBase.STORE_SUBSCRP  s-    		!S#}sCj"Er{   c                 n    | j                  |j                        }| j                  t        |             y r   )r   r   r   rZ   rx   r   rl  s      ry   BUILD_TUPLEz%InstructionTranslatorBase.BUILD_TUPLEU  %    		$++&		-&'r{   c                 n    | j                  |j                        }| j                  t        |             y r   )r   r   r   rY   r  s      ry   BUILD_SLICEz%InstructionTranslatorBase.BUILD_SLICEY  r  r{   c                     | j                  |j                        }| j                  t        |t	                            y r  )r   r   r   rX   rE   r  s      ry   
BUILD_LISTz$InstructionTranslatorBase.BUILD_LIST]  s)    		$++&		,uLNCDr{   c                     t         j                  rt        d       | j                  |j                        }t        |t                     }| j                  |       y )Nzmissing: BUILD_SETr  )r   +inject_BUILD_SET_unimplemented_TESTING_ONLYr*   r   r   rQ   rE   r   )rx   r   rl  new_sets       ry   	BUILD_SETz#InstructionTranslatorBase.BUILD_SETa  s@    ==./		$++&e<>B		'r{   c                    | j                  |j                        }t               }|D ]#  }	 |j                  |j	                  |              % | j                   ||t                            y # t
        $ r t        d|        Y aw xY w)NzBUILD_LIST_UNPACK r  )	r   r   r   extendr
  NotImplementedErrorr*   r   rE   )rx   r   clsseqsrl  seqs         ry   BUILD_LIST_UNPACKz+InstructionTranslatorBase.BUILD_LIST_UNPACKh  sy    yy%C:S44T:; 
 			#e<>:; ' : 23%89:s    A00B
	B
c                 2    | j                  |t               y )N)r  )r  rZ   r  s     ry   BUILD_TUPLE_UNPACKz,InstructionTranslatorBase.BUILD_TUPLE_UNPACKr  s    t7r{   c                    | j                  |j                  dz        }t               }t        |d d d   |dd d         D ]f  \  }}t	        |t
        t        t        f      s.t	        |t              r|j                  |j                         sJ ||t        j                  |      <   h t        |      t        |      dz  k(  sJ | j                  t        |t        t                            y )Nr  r   r  )r   r   rx  rt  r   rK   rL   rJ   re   specialized_valuer   rP   get_keyr   r   rE   )rx   r   rl  r  r   ro  s         ry   	BUILD_MAPz#InstructionTranslatorBase.BUILD_MAPw  s    		$++/*cc
E!$Q$K0DAq1/OPq.1a6I6I6U'')*
 45F$,,Q/0 1 6{c%j1n,,,		#FDOPr{   c                 n   | j                  |j                        }|D cg c]#  }t        t              j	                  | |gi       % }}t               }|D ]/  }t        |t              sJ |j                  |j                         1 | j                  t        |t        t                            y c c}w r  )r   r   rJ   rx  r   r   rP   updaterl  r   rE   )rx   r   rl  r  r  s        ry   BUILD_MAP_UNPACKz*InstructionTranslatorBase.BUILD_MAP_UNPACK  s    		$++&MRSU&44TA3CUSAa!2333MM!''"  			*n	
 Ts   (B2c           
         | j                         }| j                  |j                        }t        |t              sJ |j                         sJ |j                         }t        |t              sJ t        |      t        |      k(  sJ | j                  t        t        t        ||            t        t                            y r  )r   r   r   r   rZ   r   r   r@   r   r   r   rP   rx  rt  rE   )rx   r   keysr|  s       ry   BUILD_CONST_KEY_MAPz-InstructionTranslatorBase.BUILD_CONST_KEY_MAP  s    xxz4;;'$...&&(((&&(dE"""4yCK'''		Sv&'*n	
r{   c                 z   | j                  d      \  }}|j                  dkD  sJ | j                  |j                      j	                         }t        |t              sJ |j                  sJ t        |j                        }|||j                         <   | j                  |t        ||j                               y )Nr  r   )r   r   r   rF  rT  r   rP   r  rx  rl  r   r  user_cls)rx   r   r   ro  ro  rl  s         ry   MAP_ADDz!InstructionTranslatorBase.MAP_ADD  s    yy|1{{Qjj$((#++-#0111    SYY()a""$%	
r{   c                     | j                         }|j                  dkD  sJ | j                  |j                      }t	        |t
              sJ |j                  sJ |j                  | d|gi       S )Nr   r2  )r   r   r   rF  r   rQ   r  r_  rx   r   ro  ro  s       ry   SET_ADDz!InstructionTranslatorBase.SET_ADD  sg    HHJ{{Qjj$((##{+++    tUQC44r{   c                 (   | j                         }|j                  dkD  sJ | j                  |j                      j	                         }t        |t              sJ |j                  sJ | j                  |t        |j                  |gz                y r   )
r   r   r   rF  rT  r   rX   r  r  rl  r  s       ry   LIST_APPENDz%InstructionTranslatorBase.LIST_APPEND  s    HHJ{{Qjj$((#++-#|,,,    		QC	
r{   c                 f   |j                   }t        | j                        }t        j                  dk  r| j                         }| j                         }t        j                  dk\  rBt        |j                  d      sJ t        j                  |j                  j                        }d }d }d }d }	|dz  r| j                         }|dz  r| j                         }|dz  r| j                         }	|dz  r| j                         }| j                  t        || j                  ||	|||              y )	Nr=  co_qualnamer        r  r   )closure_scope)rF  r   r   r   r   r   rh  r  rK   r   r  r   rS   r  )
rx   r   flags	old_stackfn_namecodedefaultsclosureannotations
kwdefaultss
             ry   MAKE_FUNCTIONz'InstructionTranslatorBase.MAKE_FUNCTION  s   $	g%hhjGxxzw& 4::}555&--DJJ4J4JKG
4<hhjG4<((*K4<J4<xxzH		&"		
r{   c                    | j                         }t        |t              r'|j                  | t	        |j
                              }nt        |t              rxt        |j                  t              r^t        |j                  j                         |j                        }t	        |j
                        D cg c]  }t        | ||          }}n1|j                  |       r|j                  |       }nt        d|        t              |j
                  k(  sJ t        |      D ]  }| j!                  |        y c c}w )N)idxeszUNPACK_SEQUENCE )r   r   re   r
  rM  r   r\   ro  r   as_proxyr  rI   r	  r*   r   r  r   )rx   r   r  r  proxyis         ry   UNPACK_SEQUENCEz)InstructionTranslatorBase.UNPACK_SEQUENCE  s    hhjc>*))$eDKK6H)IC_-*SWWn2UCGG,,.9E:?:LM:LQ=uQx0:LCM((.))$/C,SE233x4;;&&&#AIIaL  Ns   7D=c                 4   d|j                   cxk  rdk  sJ  J |j                   dz  }|j                   dz	  }| j                         }|j                  |       rt        |j	                  |             }t        |      ||z   k\  sJ |d | }||t        |      |z
   }|t        |      |z
  d  }t        |      D ]  }	| j                  |	        | j                  t        |             t        |      D ]  }	| j                  |	        y t        d|        y )Nr   i     r  z
UNPACK_EX )
r   r   r	  r   r
  r   r  r   rZ   r*   )
rx   r   r   suffixr  r  vals_prefix	vals_listvals_suffixitems
             ry   	UNPACK_EXz#InstructionTranslatorBase.UNPACK_EX  s   DKK)6)))))t#!hhj&&t,//56Dt9///w-KVc$i&&89Is4y6134K -		$ .IImI./ -		$ . Jse,-r{   c                      y r   r   r  s     ry   r  zInstructionTranslatorBase.NOP      r{   c                 $    | j                          y r   rL  r  s     ry   POP_TOPz!InstructionTranslatorBase.POP_TOP      
r{   c                     | j                         }| j                         }| j                  |       | j                  |       y r   r   r   rx   r   arP  s       ry   ROT_TWOz!InstructionTranslatorBase.ROT_TWO  s.    HHJHHJ		!		!r{   c                     | j                         }| j                         }| j                         }| j                  |       | j                  |       | j                  |       y r   r  )rx   r   r  rP  cs        ry   	ROT_THREEz#InstructionTranslatorBase.ROT_THREE!  sD    HHJHHJHHJ		!		!		!r{   c                    | j                         }| j                         }| j                         }| j                         }| j                  |       | j                  |       | j                  |       | j                  |       y r   r  )rx   r   r  rP  r  ds         ry   ROT_FOURz"InstructionTranslatorBase.ROT_FOUR)  sZ    HHJHHJHHJHHJ		!		!		!		!r{   c                 h    | j                         }| j                  |       | j                  |       y r   r  )rx   r   r  s      ry   r/  z!InstructionTranslatorBase.DUP_TOP3  s#    HHJ		!		!r{   c                     | j                         }| j                         }| j                  |       | j                  |       | j                  |       | j                  |       y r   r  r  s       ry   DUP_TOP_TWOz%InstructionTranslatorBase.DUP_TOP_TWO8  sD    HHJHHJ		!		!		!		!r{   c                    |j                   }|dz  dk(  r| j                         }nt        j                  d      }| j                         }t	        |t
              r(t        j                  t        |j                              }|dz  dk(  r"t        t              j                  | |gi       }nS|dz  dk(  r"t        t              j                  | |gi       }n)|dz  dk(  r!t        t              j                  | |gi       }t        j                  d|j                         z   dz         }| j                  t        t        j                        ||gi        y )Nr  r  r   r   r  z{:})rF  r   rK   r   r   rd   r   sym_numrJ   r   reprasciir   format)rx   r   r  fmt_specr  fmt_vars         ry   FORMAT_VALUEz&InstructionTranslatorBase.FORMAT_VALUE@  s   DLT!xxzH'..r2H
e_-$++C,>?EDLT!#C(66teWbIEdlt##D)77ugrJEdlt##E*88wKE"))$1L1L1N*NQT*TU?3::6%8H"Mr{   c                     d}t        |j                        D ]3  }| j                         }t        |t              sJ |j
                  |z   }5 | j                  t	        j                  |             y )Nr  r  )rM  rF  r   r   rK   r  r   r   )rx   r   r  rR  str_vars        ry   BUILD_STRINGz&InstructionTranslatorBase.BUILD_STRINGU  s]    txxAhhjGg'7888]]V+F ! 			"))78r{   c                     |j                   dk(  s|j                   dk(  sJ |j                   dk(  rd}nd}t        d|      }| j                  |       y )Nr   r   iszis notre  rA  )r   r    re  )rx   r   
new_argvalnew_insts       ry   IS_OPzInstructionTranslatorBase.IS_OP]  sM    {{a4;;!#333;;!J!J%l:F!r{   c                     |j                   dk(  s|j                   dk(  sJ | j                  d      \  }}|j                   }| j                  |j                  | d|gi              |dk(  r| j	                  |       y y )Nr   r   r  r^  )r   r   r   r_  r`  )rx   r   ra  rb  rc  s        ry   CONTAINS_OPz%InstructionTranslatorBase.CONTAINS_OPf  sp    {{a4;;!#333iile[[		%##D.4&"EF7NN4  r{   c                     | j                         }|j                  dkD  sJ | j                  |j                      }t	        |t
              sJ |j                  sJ |j                  | d|gi        y )Nr   r  )r   r   r   rF  r   rX   r  r_  r  s       ry   LIST_EXTENDz%InstructionTranslatorBase.LIST_EXTENDn  sd    HHJ{{Qjj$((##|,,,    hR0r{   c                     | j                  t        t              j                  | | j	                         gi              y r   )r   rJ   r   r   r   r  s     ry   LIST_TO_TUPLEz'InstructionTranslatorBase.LIST_TO_TUPLEv  s*    		/%(66tdhhj\2NOr{   c                     | j                         }|j                  dkD  sJ | j                  |j                      }t	        |t
              sJ |j                  sJ |j                  | d|gi        y )Nr   r  )r   r   r   rF  r   rP   r  r_  r  s       ry   
DICT_MERGEz$InstructionTranslatorBase.DICT_MERGEy  se    HHJ{{Qjj$((##0111    hR0r{   c                 $    | j                          y r   rL  r  s     ry   	GEN_STARTz#InstructionTranslatorBase.GEN_START  r  r{   c                     | j                   d   }|j                         r<| j                  t        j                  t        |j                                            y | j                  |j                  | dg i              y )Nr   r   )r   r   r   rK   r   r   r   r_  rM  s      ry   GET_LENz!InstructionTranslatorBase.GET_LEN  s\    jjn!!#II&--c#2H2H2J.KLMIIcoodIr2>?r{   c                 4   | j                   d   }t        |t              sJ t        |j                  t        j
                  j                        r%| j                  t        j                  d             y | j                  t        j                  d             y Nr   TF)
r   r   rP   rl  collectionsabcMappingr   rK   r   rM  s      ry   MATCH_MAPPINGz'InstructionTranslatorBase.MATCH_MAPPING  sh    jjn#0111cii!8!89II&--d34II&--e45r{   c                 v   | j                   d   }|j                         sJ |j                         }t        |t        j
                  j                        r@t        |t        t        t        f      s%| j                  t        j                  d             y | j                  t        j                  d             y r  )r   r   r   r   r  r  Sequencer   bytes	bytearrayr   rK   r   )rx   r   rN  	tos_values       ry   MATCH_SEQUENCEz(InstructionTranslatorBase.MATCH_SEQUENCE  s    jjn%%'''**,	i!9!9::UI.D
 II&--d34II&--e45r{   c           	      t   | j                   d   }|j                         sJ |j                         }| j                   d   }t        |t              sJ |j
                  t        fd|D              rd| j                  t        |D cg c]  }|   	 c}             t        j                  dk  r%| j                  t        j                  d             y y | j                  t        j                  d              t        j                  dk  r%| j                  t        j                  d             y y c c}w )Nr   r  c              3   &   K   | ]  }|v  
 y wr   r   )ru  r  	match_objs     ry   rv  z7InstructionTranslatorBase.MATCH_KEYS.<locals>.<genexpr>  s     04Csi4s   r=  TF)r   r   r   r   rP   rl  ry  r   rZ   r   r   rK   r   )rx   r   rN  r  tos1r  r  s         @ry   
MATCH_KEYSz$InstructionTranslatorBase.MATCH_KEYS  s    jjn%%'''%%'zz"~$ 1222JJ	0400IImt$DtYs^t$DEF')		*11$78 * II&--d34')		*11%89 * %Es   D5c                     t        d       y )Nr  r*   r  s     ry   r   z.InstructionTranslatorBase.LOAD_ASSERTION_ERROR  s    67r{   c                 p    |j                   dk(  r| j                  |       d| _        y | j                  rJ y )Nr   F)rF  append_prefix_instrW  r  s     ry   RESUMEz InstructionTranslatorBase.RESUME  s5    88q=##D)&+D#.....r{   c                    t         j                  dk\  rat        j                  |j                     d   dd  }|j                  d      r t        | d|dd  z         |      S  t        | d|z         |      S t        d       y )	Nr=  r   r   INPLACEINPLACE_r  BINARY_zBINARY_OP requires Python 3.11+)r   r   rI  _nb_opsrF  r  r   r*   )rx   r   r   s      ry   	BINARY_OPz#InstructionTranslatorBase.BINARY_OP  s}    w&[[*1-ab1F  +=wtZ&*%<=dCC474V!34T::;<r{   c                      y r   r   r  s     ry   r   z!InstructionTranslatorBase.PRECALL  r  r{   c                     | j                   d   |j                     }t        |t              sJ |D ]  }t        |t              rJ  | j
                  J t        j                  |      | _        y )N	co_constsr  )rD  rF  r   r   r   rE  rK   r   )rx   r   rE  r  s       ry   r@  z"InstructionTranslatorBase.KW_NAMES  sg    $$[1$((;(E***DdC((( }}$$$(//h?r{   c                 6    | j                  t                      y r   )r   r^   r  s     ry   r  z#InstructionTranslatorBase.PUSH_NULL  s    		,.!r{   c                    | j                  |j                  dz         }t        |d   t              r|d   }g }n|d   }|d   g}| j                  r| j                  j
                  nd}|rO||dt        |        z   }|t        |       d  }t        t        ||            }t        |      t        |      k(  sJ ||dd  z   }i }| j                  |||       d | _        y )Nr  r   r   r   )
r   rF  r   r^   rE  r  r   rx  rt  r   )rx   r   contentsr   rq  rE  rv  rr  s           ry   r?  zInstructionTranslatorBase.CALL  s     99TXX\*hqk<0!BD!BQK=D*.--4==&&R(1H~66D"CM>#34K#h45Fv;#h-///(12,&DF2tV,r{   c                 V    | j                  | j                  |j                             y r   )r   r   rF  r  s     ry   COPYzInstructionTranslatorBase.COPY  s    		$**dhhY'(r{   c                     | j                   |j                      | j                   d   c| j                   d<   | j                   |j                   <   y Nr   )r   rF  r  s     ry   SWAPzInstructionTranslatorBase.SWAP  s=    04

DHH90EtzzRT~-

2

DHH9-r{   c                      y r   r   r  s     ry   CACHEzInstructionTranslatorBase.CACHE  r  r{   c                 &    | j                  |       y r   r?  r  s     ry   BEFORE_WITHz%InstructionTranslatorBase.BEFORE_WITH  rB  r{   c                    | j                         }t        |t              st        |j                   d|        t        |t
              r| xj                  dz  c_        t        ||j                        }t        j                  dk\  rG| j                  sJ | j                  j                  sJ | j                  j                  j                  }n|j                  }t        | t              r:| j                  j                  t!        |t#        | j$                        |             n$| j                  j                  t!        |             | j'                  |       | j'                  |j)                  |              y )Nrn  r   r=  )r   r   rM   r*   r   rN   r'  rO   r   r   r   r   rH  r  r   r   r   r   r   r   enter)rx   r   ctxr   r   s        ry   r@  z.InstructionTranslatorBase.setup_or_before_with!  s   hhj#67T[[M3%01c9:..!3.'KK
 w&((((((6666**88??F[[Fd12##OFC

OS$QR##OF$;<		$		#))D/"r{   c                 V    | j                   sJ | j                  j                  |       y r   )rW  rX  r   r  s     ry   r  z,InstructionTranslatorBase.append_prefix_inst<  s%    &&&&  &r{   c                 &    | j                  |       y r   r  r  s     ry   	MAKE_CELLz#InstructionTranslatorBase.MAKE_CELL@      %r{   c                 &    | j                  |       y r   r;  r  s     ry   COPY_FREE_VARSz(InstructionTranslatorBase.COPY_FREE_VARSC  r=  r{   c                 &    | j                  |       y r   r;  r  s     ry   RETURN_GENERATORz*InstructionTranslatorBase.RETURN_GENERATORF  r=  r{   c           
         t        | j                  j                         t        | j                        t        | j                        t        | j                        | j                  | j                  | j                  | j                        S )z>Create a checkpoint of the current state by copying everything)r   r   copy_graphstaterx  r   r   r   r   rr   r   r   rq   rw   s    ry   rC  z)InstructionTranslatorBase.copy_graphstateI  si    .KK'')%%&!!"$$$$!!KK	
 		
r{   statec                     |\  }| _         | _        | _        | _        | _        | _        | _        | j                  j                  |       y)z6Restore a checkpoint created by self.copy_graphstate()N)	r   r   r   rr   r   r   rq   r   restore_graphstate)rx   rD  output_states      ry   rF  z,InstructionTranslatorBase.restore_graphstateV  sI     		
 J$$!K&&|4r{   c                 P    | j                   j                         dkD  r	d | _        yy)Nr   c                       y)NTr   r   r{   ry   <lambda>z>InstructionTranslatorBase.is_non_empty_graph.<locals>.<lambda>g  s    dr{   TF)r   count_callsr  rw   s    ry   r  z,InstructionTranslatorBase.is_non_empty_graphd  s%    ;;""$q(&2D#r{   c           
          |g }dj                  t        j                  | j                         gt	        t        |            z               S )Nr  )r+  r,  r-  r   r   r  )rx   additional_stack_framess     ry   format_frame_summaryz.InstructionTranslatorBase.format_frame_summaryk  sL    "*&(#ww!!##%&h7N.O)PP
 	
r{   c           	          t        j                  t        | j                  dd      | j                  t        | j                  dd      d      S )Nr%  z	<unknown>r&  F)lookup_line)r,  FrameSummaryr   r$  rq   rw   s    ry   r   z'InstructionTranslatorBase.frame_summaryt  s?    %%DKK<KKDKKK8	
 	
r{   c                     t        t        |      j                  t        j                               || j
                  j                  vr0| j
                  j                  |t        j                  |             y y r   )
r.   r9   
make_guardr-   WEAKREF_ALIVEr   r  r  weakrefref)rx   r  r  s      ry   store_global_weakrefz.InstructionTranslatorBase.store_global_weakref|  sU    )$/::<;U;UVWt{{///KK&&tW[[-?@ 0r{   c                 B    | j                   j                  j                  S r   )r   tracing_context	fake_moderw   s    ry   rZ  z#InstructionTranslatorBase.fake_mode  s    {{**444r{   c                 X    | j                   j                         D ]  \  }}||u s|c S  y r   )r   rl  )rx   tensor_variabler  r  s       ry   find_symbolic_locals_namez3InstructionTranslatorBase.find_symbolic_locals_name  s1    ..446JC'
 7 r{   c              #   J   K   d| _         	 d  d| _         y # d| _         w xY wwr`  )strict_checks_enabledrw   s    ry   strict_translation_modez1InstructionTranslatorBase.strict_translation_mode  s&     %)"	/).D&D&s   # #	 #c                     | j                   j                  | j                  j                  | j                  | j
                        S r   )speculation_logr   r$  r%  rq   rr   rw   s    ry   r"  z#InstructionTranslatorBase.speculate  s6    ##((KK##T[[$2J2J
 	
r{   r   r  r  r  rD  r$  r  rb  c                    t         |           || _        || _        || _        || _        g | _        d| _        t        d      | _	        d | _
        g | _        d| _        |d   | _        d | _        d| _        g | _        || _        t%        | j"                        | _        || _        || _        || _        || _        |	| _        t3        |	|      | _        i | _        |
| _        d | _        g | _        d| _        t@        jB                  dk\  r>dd	l"m#}m$}m%}m&} |	jN                  ||z  |z  |z  z  r| jQ                  tS        d              || _*        d| _+        tY        jZ                  |	j\                  |       | j_                          y )
Nr   r  co_firstlinenoT)r  rD  F)r   
   r   )CO_ASYNC_GENERATORCO_COROUTINECO_GENERATORCO_ITERABLE_COROUTINE)0super__init__rb  r   r   rV  r   rr   r    r   r   r   r'  rq   rE  rW  rX  r   r   r5  r  r  r  rD  r$  r3   r  nn_module_stackr  r[  r\  r_  r   r   resume_executionrf  rg  rh  ri  co_flagsr   rJ   rY  rZ  r  	lazycacher%  r  )rx   r   r   r  r  r  rD  r   rV  r$  r  rY  rb  rf  rg  rh  ri  	__class__s                    ry   rk  z"InstructionTranslatorBase.__init__  s    	. . 0
#$ #5e#<  $-.*"#34"& 0</:4;L;L/M  	 *3*4,8&, /FV BD#' %*"w&  |+.CCFXX 		/$/0().&F..	:r{   r   )r|   r}   r~   r0   r   r   r   rG   r   r   r   r"   r   rK   r   ro   r
   r   r  r^  r   ri  rp  r   r  r  r  r  r  r  r  r  r  r  r   r  r   r   r  r  r  r  STORE_DEREFr  r   r  r   r   r  r  r  r-  r1  r  r   JUMP_FORWARDJUMP_ABSOLUTEr  r   not_POP_JUMP_IF_FALSEr   POP_JUMP_IF_TRUEJUMP_IF_FALSE_OR_POPJUMP_IF_TRUE_OR_POPr8  r;  r=  rA  rD  rF  rH  rJ  rO  rR  rZ  re  rh  rT  r   rl  rw  r|  r~  rz  r  r0  r  r  r  r  r   r  r  r  r  r  rX   r  r  BUILD_TUPLE_UNPACK_WITH_CALLr  r  BUILD_MAP_UNPACK_WITH_CALLr  r  r  r  r  r  r  r  r  r  r  r  r/  r  r  r  r  r   r  r  r  DICT_UPDATEr  r
  r  r  r  r   r   posUNARY_POSITIVEnegUNARY_NEGATIVEr`  invertUNARY_INVERTpowBINARY_POWERmulBINARY_MULTIPLYmatmulBINARY_MATRIX_MULTIPLYfloordivBINARY_FLOOR_DIVIDEtruedivBINARY_TRUE_DIVIDEr  BINARY_MODULOBINARY_REMAINDERr2  
BINARY_ADDsubBINARY_SUBTRACTgetitemBINARY_SUBSCRlshiftBINARY_LSHIFTrshiftBINARY_RSHIFTand_
BINARY_ANDor_	BINARY_ORxor
BINARY_XORipowINPLACE_POWERimulINPLACE_MULTIPLYimatmulINPLACE_MATRIX_MULTIPLY	ifloordivINPLACE_FLOOR_DIVIDEitruedivINPLACE_TRUE_DIVIDEimodINPLACE_MODULOINPLACE_REMAINDERiaddINPLACE_ADDisubINPLACE_SUBTRACTilshiftINPLACE_LSHIFTirshiftINPLACE_RSHIFTiandINPLACE_ANDixorINPLACE_XORior
INPLACE_ORr   r&  r   r@  r  r?  r.  r1  JUMP_BACKWARDJUMP_BACKWARD_NO_INTERRUPTPOP_JUMP_FORWARD_IF_TRUEPOP_JUMP_BACKWARD_IF_TRUEPOP_JUMP_FORWARD_IF_FALSEPOP_JUMP_BACKWARD_IF_FALSEr3  r5  r@  r  r<  r?  rA  r   rC  rF  r  rN  r   rW  propertyrZ  r]  
contextlibcontextmanagerr`  r"  r   r(  CodeTyper   rk  __classcell__rp  s   @ry   r   r   @  s   #.//3/00  !#&$${++o&&K'(({####!"233hsF{#U63;%7c6k9JJK .'	=88 ?#8 S/)*	8,o  */ ? QnSQ=f
2*41 d?3  _  >c >d?3 >+ 5/. K5B 8<E#$
2:,;\	:= LM$X]]E:#HNNE:'t<&x~~t<>>(>U
57rD  Q') ()
  Q'$A ($AL  Q'	- (	-GA)04




d 

  Q'F (F((E +7 <8 $6 Q
  "2
 
 5
$
L .&
N*9"!1P1 K@6	6: 8 hll+Nhll+N'IHOO,LHLL)Lx||,O%hoo6"8#4#45!("2"23X\\*M-(,,'Jx||,O6.A6x@P@P7QRMX__-MX__-M(--(J&I(,,'JX]]+M.&x'7'78#H$6$67"8#4#45hmm,N /8==)K.h../Nh../N8==)K8==)K(,,'J/=@"  Q' (,)V M!%+HNNEB ,X^^U C ,X]]E B!-hmmU!C(#6'&&&
!@ 
5(G 5

A
 5 5 / /
+ 

KK ;'K sCx.	K
 S>K cNK 38nK c?23K sO34K K K K (K Kr{   c                        e Zd ZU ee   ed<   edd       Zej                  d        Z
dee   dee   def fdZdefdZ fd	Zd
 Zd Zd Zd Zd Z xZS )r  mutated_closure_cell_contentsc                  "    t         j                  S r   )tls
current_txr   r{   ry   r  z InstructionTranslator.current_tx  s    ~~r{   c              #      K   t        t        dd       }| t        _        	 d  |t        _        y # |t        _        w xY ww)Nr  )r   r  r  )rx   priors     ry   set_current_txz$InstructionTranslator.set_current_tx  s1     \40	#"CNUCNs   A 0 A =A r   rb  c                      t               t        j                  d|j                   d|d    d|d           t        |   t        ||| |	|
||||	      |||||i i ||	d|       t        | j                  j                        5  | j                         5  || _        |	| _        || _        | j                  r| j                  sJ d	       t        |d
         }| j                         D cg c]	  }||vs| }}|j!                  |       t#        |      }|D ci c]8  }||v r2|t$        j&                  j)                  ||   t+        |||v             : c}| _        |	r&t/        j0                  d | j,                        | _        t3               | _        | j6                  d   D ]"  }||v st9        ||         | j4                  |<   $ 	 d d d        d d d        y c c}w c c}w # 1 sw Y   xY w# 1 sw Y   y xY w)Nztorchdynamo start tracing rn  r%  r   rd  )local_scoper  r$  r   )r   r   r  r  r  rD  r   rV  r$  r  rY  rb  z4Export without one graph - something has gone wrong.co_varnames)cell_or_freevarr#  c                 "    | j                         S r   )rT  )r  s    ry   rJ  z0InstructionTranslator.__init__.<locals>.<lambda>@  s
    aiikr{   rg  )r   r   INFOr&  rj  rk  r0   r   r   rY  r  	one_graphr  r  r   ri  r  rk  r   LazyVariableTrackerr   r:   r   rG   r  rx  _freevars_idsrD  r  )rx   r   r$  r  r  r  rD  compiler_fnr  r  export_constraintsr  frame_staterb  varsr  cells_and_freevarscells_and_freevars_setr   r  rp  s                       ry   rk  zInstructionTranslator.__init__  s2     	LL((8,}:U9VVWXdeuXvWwx	
 	"$&
 &!%+/ 	 	
8 T[[00143F3F3H#,DN DK1ND.{{NNJIJ" ]34D-1-C-C-E!W-ERV!-E!WKK*+%();%<" $
 A= 90077QK&q!?U:UV 8   $D   (7'<'<)4+?+?($ "&D))-88#/1(4./AD&&t, 9= 4I11 "X$ 4I3H11sP   G4AG(,	G6G:"G(=G#AG(/G(G4
G((G1	-G44G=r  c                     t        |t              r| j                  |j                     S t        |t              r| j
                  |j                     S t               r   )r   r:   r  
local_namer8   r  global_namer  )rx   r  s     ry   get_example_valuez'InstructionTranslator.get_example_valueH  sH    fk*==!2!233fl+>>&"4"455jr{   c                 "    t         |           y r   )rj  r  )rx   rp  s    ry   r  zInstructionTranslator.runO  s    r{   c                     |j                   }t        |      | j                  j                  |      k7  ry| j                  |   S )z@Match a cell in this method to one in a function we are inliningN)cell_contentsr  r  r  r   )rx   r  cellr  s       ry   match_nested_cellz'InstructionTranslator.match_nested_cellR  s>    ""e9**..t44##D))r{   c                 z    t        d | j                  D              xr | j                   xr | j                  dk(  S )Nc              3   <   K   | ]  }|j                           y wr   )r   ru  rP  s     ry   rv  zEInstructionTranslator.should_compile_partial_graph.<locals>.<genexpr>\  s     :)9A)9rw  r   )ry  r   r  r'  rw   s    ry   r   z2InstructionTranslator.should_compile_partial_graphZ  s=    :)9)9:: 8NN"822a7	
r{   c                     d  _         |j                  dk(  rt        d      gS t         j                  |      t         fd j                  j                         D              }t               }g }t        j                  dk\  rt         j                        D ]'  \  }}t        |t              s|j                  |       ) d}t        t!         j                              D ]m  \  }}t        |t              st#        d|dz   |z
        D ]  }|j%                  t        d|               |j'                  |j)                                |dz  }o t+         j                        t+        |      z
  }	|	t+        |      z   }
t-        d	|j.                         }t1        j2                   j4                   j6                  |j.                  t        d
  j8                  D              |	|t        d  j8                  D              t        |            }t;        j<                   j4                        j?                  dd       }||t;        j<                  |      d<   |j@                  r|jC                  ||d|	       n] jD                  jG                  |tI        jJ                  | jL                  |             |j'                  |jO                  |d|	             |j'                  |D cg c]  }|jQ                  |       c}       |j'                  tS        |
d             |j%                  t        d             |jU                         S c c}w )Nr  c              3   N   K   | ]  }|v r|j                         vr|  y wr   )ri  )ru  r   rn  rx   s     ry   rv  z>InstructionTranslator.create_call_resume_at.<locals>.<genexpr>h  s0      
0Ezat'='='?? 0s   "%r=  r   r  r1  )rF  r   __resume_at_c              3   H   K   | ]  }|j                   j                    y wr   )r   ra  r  s     ry   rv  z>InstructionTranslator.create_call_resume_at.<locals>.<genexpr>  s     <+;a!((//+;s    "c              3   <   K   | ]  }|j                           y wr   )r   r  s     ry   rv  z>InstructionTranslator.create_call_resume_at.<locals>.<genexpr>  s     :)9A!++-)9rw  orig_graphmoduleTF)+rr   r   r    r   r   r   r   r  r&   r   r   	enumerater   r   r^   r   r  rM  append_outputextend_outputpop_nullr   r$   ra  r4   lookupr$  rq   r   r%   get_contextr  rg  make_function_with_closurer   r  r(  FunctionTyper  load_function_namecreate_loadr   get_instructions)rx   r   ru  rN  
null_idxesr  varnull_cntj	stack_lenr   r  new_codeorig_graphmodule_mayber   rn  s   `              @ry   r  z+InstructionTranslator.create_call_resume_ata  s   #' ;;.(&~677!$"3"3T: 
))..0
 
 t_ !#
w&#DJJ/3c<0%%a( 0 H#HTZZ$893c<0"1a!eh&67(();F)JK 8$$R[[]3MH : 

Oc*o5	CM)<}56#9#@#@KKKKKK<4+;+;<<:)9)9::*	$
 ".!9!9$++!F!J!J"
 "- ' $$X." ))$$	JKK&&e((4>>4H R224yIJ
X>X"..+X>?
-eU;<
+N;<""$$ ?s   +Mc                     | j                   j                         D ]G  }t        |t              st	        |j                         t        j                  j                        sG y yr`  )	r   r|  r   rh   
issubclassr   r   nnModule)rx   ro  s     ry   $symbolic_locals_contain_module_classz:InstructionTranslator.symbolic_locals_contain_module_class  sM    %%,,.A!56:$$&< 	 /
 r{   c                    | j                   j                         dk(  r=| j                  s1| j                         s!| j                  st        j                  d      d | _         t               t        j                  d| j                  j                   d       t        j                  d       | j                   j                  | t!        d| j#                         gd      d	
       | j                   j%                  t'        d      g       y )Nr   z#because no content in function callztorchdynamo done tracing z (RETURN_VALUE)zRETURN_VALUE triggered compilereturn_valueF)r!  T)rt   compile_return_valuer  )r   rK  rZ  r  r  r   r   rr   r   r   r  r$  r&  r   r  r  r/   r   r  r    r  s     ry   r  z"InstructionTranslator.RETURN_VALUE  s    KK##%*22==?KK-- EFF#' LL'(;(;'<OL	
 			23$$%!3!3!5 6E "& 	% 	
 	++-?-O,PQr{   )r   r  )r|   r}   r~   r	   r   r   staticmethodr  r  r  r  r   r"   r   rk  r;   r  r  r  r   r  r  r  r  r  s   @ry   r  r    s    #&s8+  # #PB;'PB (+3xPB (PBd *
J%XRr{   r  c                       e Zd ZU dZee   ed<   ed        Ze	d        Z
e	dedee   fd       Zded	ej                   d
eeef   deeef   deeef   def fdZed        Zd Zd Z fdZd Zd Zdedef fdZd Zd Zd Z xZ S )r  z Trace and inline a called methodsymbolic_resultc                     t        j                  t        dt        d   i      5  | j                  ||||      cd d d        S # 1 sw Y   y xY w)Nr*   r  )r   rx  r<   inline_call_)r  r  funcrq  rr  s        ry   r  z)InliningInstructionTranslator.inline_call  s;    ZZ?H]4K"LM##FD$? NMMs   AAc                 l   | j                         rt        d       t        j                  | d      }|j                  rddlm}m}m} t        | j                  d      r1| j                  j                  |||fv rt        j                  dd      S t        d	| j                  j                   d
| j                          d| j                          d|j                    d	       t#        | t$              rBt'        j(                  | j+                         dd      rt        d| j+                                 y |S )Nzinline with __self__T)is_inlined_callr   )!produce_trampoline_autograd_applyproduce_trampoline_autograd_bwdproduce_trampoline_autograd_fwd_originFz"allowlist in dynamo known functionz'inline in skipfiles: z | rn  z, '_torchdynamo_disablez.call torch._dynamo.disable() wrapped function )has_selfr*   r   check_verboseskippedtorch._dynamo.variables.miscr  r  r  rh  r   r  
SkipResultr~   get_nameget_filenamert   r   rT   r   getattr_staticget_function)r  r  r  r  r  s        ry   check_inlineablez.InliningInstructionTranslator.check_inlineable  s   ==?01((tD>>  tww	*tww/1/C 0 !++E3WXX()=)=(>c$--/ARRSTXTeTeTgShhjkqkxkxjyyz{ d01g6L6L!77
 @ARARAT@UV Mr{   r  rq  c                 B
   t        |t        t        f      sJ t        j	                  |      }|j
                  du sJ 	 |j                  | ||      \  }}t!        j"                  |j%                         |j%                               D ]!  }	t        |	t&              rt)        d|	        # |j                         j*                  dv rE|+t-        |      d	kD  rt        |d	   t.        j0                        st)        d
j*                          d}
t2        j4                  j6                  j8                  j;                  d      r&dt=        j>                        j=                          }
t@        jB                  dk\  re| jD                  | jF                  | jI                  jJ                  jL                        fd}tN        jQ                  dtS        |             tT        jQ                  d|
|jV                         |rt        |d	   tX              rx| jZ                  j]                  |d	   j^                        }t        |t2        j`                  jb                        r,|te        jf                  |jh                  jj                        d<   tm              rto        | || jp                  ||      }nt        | || jp                  ||      }ts        jt                         }| jv                  r|jy                         }	 |5  |j{                          d d d        |j                  J |j                  | |       |j                  | j                  u r%| jp                  j                  |jp                         | xj                  |j                  z  c_F        tT        jQ                  d       tm              rMt        |tn              sJ |j                  j                         J t        |j                  t                     S |j                  S # t        $ r}t        dj                  t        |      d|j                          d|j                          d|j                         j                   |D cg c]  }|j                          nc c}w c}|            d }~ww xY w# 1 sw Y   xY w# t|        j~                  $ r.}d d| }tT        jQ                  |       t        |      |d }~wt        $ r}tT        jQ                  d        d }~ww xY w)NFz;{reason}.
  func = {func}, args = {args}, kwargs = {kwargs}r  z' r   )rt   r  rq  rr  zunconverted arg )r  __setattr__r   zinline r  output_coder  r=  )rq   c                  b    t              j                         } dj                   d d|  S )NzTRACE inlined call z from r  )r>   r  r&  )r  r  cur_instheaderparent_codes    ry   get_trace_call_log_strzJInliningInstructionTranslator.inline_call_.<locals>.get_trace_call_log_str'	  s5    1+xHOOQ,T\\N&4&QQr{   r  zINLINING %s%s, %sr  zSKIPPED INLINING z: zFAILED INLINING %szDONE INLINING %sr  )Kr   rT   rS   r  r  r  	bind_args	TypeErrorr(   r  r   r  r  get_coderd  python_typerz  r{  r|  rG   r*   r&  r   r   CustomizedDictVariabler   _logging	_internal	log_stateis_artifact_enabledrI  Bytecoder   r   r   r$  r  	positionsrq   trace_call_logr  rA   r   rt   ra   r   r  r  fxGraphModuler%   r  forward__code__r#   &InliningGeneratorInstructionTranslatorrV  r  nullcontextr_  r`  r  r   r   r+   r  r	  export_freevarsr  r  rZ  r   rW   generated_itemsrE   )r  r  rq  rr  r  
sub_localsclosure_cellsr  rF  ro  r  r&  moduletracer
strict_ctxr  r  r#  r$  r%  s                   @@@@ry   r  z*InliningInstructionTranslator.inline_call_  se    !#=>
 	
 
 /??E~~&&&	(,vtV(L%J !2!2!4m6J6J6LMAa1 045 N  $}}<<99D	A47I$D$DEGDLL>23 >>##--AA-P#,,t,00234Fw&11H --K338;M;M;T;T3UFR   z2H'IJ		%tVV]]C JtAw(89]]00a1C1CDF&%(("6"67
  (()@)@A&
 ;j&*A*A=RVF 3j&*A*A=RVF %002
''779J		

  %%111VV,v///##**6+B+BC((F,L,LL(		$d+f&LMMM))<<>FFF'&&*n 
 ))){  		#NUUq6T]]_-R0A0A0C/DAdmmoFdFdEef7;<t#//+t<!	 V  		B }} 	*%dV2aS1CIIcNc") 	II*D1	sa   P R: R-R: 	R*AR%;RR%%R*-R72R: :T)S66TTTr  r  r   rV  r<  funcvarc                    |j                         }|d   }t        |t              s|j                  }t	        |      }	t        |	       t        |   |j                  i |||||	t        |      D 
ci c]  }
|
t        ||
       c}
||j                  |j                  dz   |j                         || _        d | _        || _        |j"                  j%                         | _        y c c}
w )N__builtins__r   )r   r  r  r  r   rV  r   rD  r$  r  rY  rb  )get_globalsr   rx  __dict__r   r   rj  rk  r   dirr   r  rY  rb  r  r	  r<  rl  rG  )rx   r  r  r   rV  r<  r@  r  r  r   r   rp  s              ry   rk  z&InliningInstructionTranslator.__init__e	  s     '')	~.
*d+#,,J+D1L)==!+-%7:4yAy!!WT1--yA==,,q0"22 	 	
 #*%55::< Bs   0C&c                 .    | j                   j                  S r   )r  rZ  rw   s    ry   rZ  z'InliningInstructionTranslator.fake_mode	  s    {{$$$r{   c                 \    t        j                  | j                  j                               S r   )r   r  r  r   rw   s    ry   r  z)InliningInstructionTranslator.run_ctx_mgr	  s     ++DKK,E,E,GHHr{   c                    |j                   | j                  v r| j                  |j                      }| j                         }t        |t              rS| j
                  j                         st        d       || j
                  j                  j                  |j                  <   y | j
                  j                  j                  ||       y | j                  j                  |j                         }t        |t        j                        rL| j
                  j                  j                  | j                  |j                      | j                                y ||j                   j                         | j
                  j                  j"                  vr[| j
                  j                  j"                  j%                  |j                   j                                t'        j(                         t        d       y )NzSHigherOrderOperator: Mutating a variable not in the current scope (ClosureVariable)z#write to __closure__ while inlining)r   r<  r   r   r[   r   is_root_tracerr*   root_txr   r  r   
store_cellr  r   NewCellVariabler  r  r2  r   UnspecializeRestartAnalysis)rx   r   r  r  
maybe_cells        ry   rq  z)InliningInstructionTranslator.STORE_DEREF	  su   ;;$,,,%%dkk2D((*C$0{{113!m BE##33DII>((33D#>--11$++>J)) ((33((5txxz
 *"))..0;;..LLM KK''EEII"))..0 99;;CDr{   c                 t   |j                   | j                  v r| j                  |j                      }t        |t              r=| j	                  | j
                  j                  j                  |j                            y | j	                  | j
                  j                  j                  |             y | j                  j                  |j                   d       }t        |t        j                        r5| j	                  | j
                  j                  j                  |             y t        | =  |       y r   )r   r<  r   r[   r   r   rJ  r   r  r   	load_cellr  r   rL  rj  r  )rx   r   r  maybe_sym_localrp  s       ry   r  z(InliningInstructionTranslator.LOAD_DEREF	  s    ;;$,,,%%dkk2D$0		$++--==diiHI		$++22<<TBC"2266t{{DIO/9+D+DE		$++22<<_MN"4(r{   c                    |j                   | j                         v sJ |j                   | j                  v r)| j                  | j                  |j                             y | j                  t	        |j                                y r  )r   ri  r<  r   r]   r  s     ry   r  z*InliningInstructionTranslator.LOAD_CLOSURE	  s`    {{d446666;;$,,,IId((56II,$++>?r{   c                 F    t        |j                        st        d       y y )NzOHigherOrderOperator: Mutating a variable not in the current scope (replace_all))rD   r  r*   )rx   r~  s     ry   check_replace_is_safez3InliningInstructionTranslator.check_replace_is_safe	  s     "6#7#78a 9r{   r~  r  c                     | j                  |       t        | 	  ||      }| }t        |d      r+|j                  }|j                  ||       t        |d      r+|S )Nr  )rT  rj  r  rh  r  r  )rx   r~  r  
translatorrp  s       ry   r  z)InliningInstructionTranslator.replace_all	  s_    ""6*$VV404
j(+#**J..vv> j(+ r{   c                      y)NFr   rw   s    ry   r   z:InliningInstructionTranslator.should_compile_partial_graph	  s    r{   c                     t        d       y )Nzcant resume while inliningr  r  s     ry   r  z3InliningInstructionTranslator.create_call_resume_at	  s    23r{   c                 <    | j                         | _        d | _        y r   )r   r	  rr   r  s     ry   r  z*InliningInstructionTranslator.RETURN_VALUE	  s    #xxz#' r{   )!r|   r}   r~   r   r   re   r   classmethodr  r  r  rG   r   r  r   r(  r  r   r   rR   rk  r  rZ  r  rq  r  r  rT  r  r   r  r  r  r  s   @ry   r  r    s   *n--@ @    D h*%h*-1/-Bh* h*T =) = nn = c?23	 =
 sO34 = C01 = * =D % %I%EN)@/ ? 4(r{   r  c                   N     e Zd ZU ee   ed<    fdZdefdZd Z	d Z
d Z xZS )r7  r:  c                 2    t        |   |i | g | _        y r   )rj  rk  r:  )rx   rq  rr  rp  s      ry   rk  z/InliningGeneratorInstructionTranslator.__init__	  s    $)&)!r{   r   c                     | j                   j                  | j                                | j                  t	        j
                  d              y r   )r:  r   r   r   rK   r   r  s     ry   YIELD_VALUEz2InliningGeneratorInstructionTranslator.YIELD_VALUE	  s4    ##DHHJ/		"))$/0r{   c                     | j                   d   }t        |t              sB| j                          t	        t
              j                  | |gi       }| j                  |       | j                  |      S r0  )	r   r   rW   r   rJ   rg  r   r   
YIELD_FROM)rx   r   rN  ress       ry   GET_YIELD_FROM_ITERz:InliningGeneratorInstructionTranslator.GET_YIELD_FROM_ITER	  sX    jjn#34HHJ!$'55dSE2FCIIcNt$$r{   c                    	 | j                   d   j                         }t        |t              r|j                  | j                          y t        |t        j                  t        j                  f      rY	 |j                  |       \  }}| j                  |       | j                  |       | j                          | j                  |       nt        dt        |              # t        $ r Y y w xY w)Nr   zYIELD_FROM )r   rT  r   rK   r  r   r   rW   rU  rV  r   r^  rW  r*   rF   )rx   r   rN  r  rY  s        ry   r`  z1InliningGeneratorInstructionTranslator.YIELD_FROM	  s    **R.((*C#/0SYY5F
i44i6P6PQ%(%7%7%=NCIIcN$$T*HHJIIi( GCL>:;%  % s   7AC' '	C32C3c                 t   t        | j                        dk\  sJ | j                         }| j                  d   }t        |t              rXt        |t
              r<|j                  0| j                  |       | j                  |j                     | _
        y t        d       y t        dt        |              y )Nr  r   zUnreachable sub-generator codezSEND )r   r   r   r   rW   rK   r  r   r5  r   rr   r*   rF   )rx   r   r  rN  s       ry   SENDz+InliningGeneratorInstructionTranslator.SEND
  s    4::!###hhjjjnc/0#/0SYY5F		#+/<<+D( >?E'#,01r{   )r|   r}   r~   r   rG   r   rk  r"   r^  rb  r`  re  r  r  s   @ry   r7  r7  	  s.    /**"1 1
%<*2r{   r7  )r  r  rG  r   rI  r   r
  r   rz  r  r   r   r   r   	threadingr,  r(  typingrU  r   r   r   r   r   r   r	   r
   r   unittest.mockr   r   torch._loggingtorch._guardsr   r   r   r  r   r   r   r   r   r   allowed_functionsr   r   r   bytecode_analysisr   r   r   r   bytecode_transformationr   r   r    r!   r"   r#   r$   r%   codegenr&   r'   r(   r)   r*   r+   funcname_cacher,   guardsr-   r.   output_graphr/   r0   r1   replay_recordr2   r3   rm  r4   r5   r  r6   r7   r8   r9   r:   r;   utilsr<   r=   r>   r?   r@   rA   rB   variables.baserC   rD   rE   rF   rG   variables.builderrH   rI   variables.builtinrJ   variables.constantrK   rL   variables.ctx_managerrM   rN   rO   variables.dictsrP   rQ   variables.functionsrR   rS   rT   rU   variables.listsrV   rW   rX   rY   rZ   variables.miscr[   r\   r]   r^   r_   r`   variables.nn_modulera   variables.tensorrb   rc   rd   re   variables.torchrf   variables.user_definedrg   rh   ri   rj   	getLoggerr|   r   r,  getArtifactLoggerr.  r2  r  localr  	dataclassro   r   	lru_cacher   r   r   r  r   r   r   r  r1  rT  r   r  r  r7  r   r{   ry   <module>r     s       
        
       T T T    A A  M L    '  . U U ( / K K 9 A     > . > 
 <    2  +  g!..228^L11(LI>>33HnM ioo / / / ( ( (V T4 4 * * *(j *f- C
%Coovhn-C CL@6??F8T>: @$ @F slc/N O cL-dR5 dRNU($= U(p92-J 92r{   