
    9i                   
   % S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJr  SSKJrJrJrJrJrJrJr  SSKJ r J!r!  SSK"J#r#  SSK$r$SSK%r$SSK&J'r'J(r(  SS	K)J*r*J+r+  SS
K,J-r-  SSK.J/r/  SSK0J1r1  SSK2J3r3J4r4J5r5Jr6J7r7J8r8  SSK9J:r:J;r;J<r<J=r=  SSK>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrL  SSKMJMrM  SSKNJOrO  SSK4JPrPJQrQJRrRJSrSJTrTJUrUJVrVJWrW  SSKXJYrY  SSKZJ[r[J\r\  SSK]J^r^J_r_  SSK`Jara  SSKbJcrcJdrd  SSKeJfrfJgrgJhrh  SSKiJjrjJkrkJlrlJmrmJnrnJoroJprpJqrq  SSK7JrrrJsrs  SSKtJuruJvrvJwrwJxrxJyryJzrzJ{r{J|r|J}r}  SSK~JrJrJr  SSKJrJrJr  SSKJr  SS KJr  SS!KJrJrJr  SS"KJrJr  SS#KJrJrJrJrJrJrJr  SS$KJr  SS%KJr  SS&KJrJrJrJrJrJr  SS'KJrJrJrJrJrJr  SS(KJr  SS)KJrJrJr  SS*KJrJr  SS+KJrJrJrJrJr  \(       a  SS,KJrJr  SS-KJr  SS.KJr  \GR                  " \5      r\$GR                  GR                  \S/5      r\$GR                  GR                  \S05      r\$GR                  GR                  \S15      r\$GR                  GR                  \S25      r\GR                  " 5       r\GR                  " 5        V Vs0 s H  u  pU \" U5      GR                  _M     snn rS3\S4'   \" \GR                  5      GR                  r\" \GR                  5      GR                  rS5 \S6'   S7 \S8'   S9r\\8GRL                  \\4   rS:\S;'   \	GR                  SjS< j5       r\GR                   " S= S>5      5       r\GR                   " S? S@5      5       r\GR                   " SA SB5      5       r\GR                   " SC SD5      5       r " SE SF5      r\	GR                  SkSG j5       r\GR                      SlSI j5       r\GR                      SlSJ j5       r\GR                   " SK SL5      5       r " SM SN\5      r " SO SP\5      r " SQ SR\5      rSmSS jrSnST jr        SoSU jrSVr   Sp         SqSW jjr      SrSX jr    SsSY jr " SZ S[\5      r\GR                   " S\ S]5      5       r " S^ SH\S_9r " S` Sa\5      r\GR                  Sb:  a:  \GR                   VVs/ s H  u  p#\" \ScU;   a  USdS OSeUSdS  35      PM!     snnr " Sf Sg\5      r " Sh Si\5      rgs  snn f s  snnf )ta  
Core module responsible for converting Python bytecode into TorchDynamo's symbolic execution format.

This module implements the bytecode-level tracing system that allows TorchDynamo to analyze
and transform Python code. It converts Python bytecode instructions into a symbolic format
that tracks the flow of tensors and other values through the program.

Key components:
- InstructionTranslatorBase: Base class for converting bytecode to symbolic execution
- InstructionTranslator: Main translator for function bytecode
- InliningInstructionTranslator: Handles inlining of called functions
- SpeculationLog: Manages state for speculative execution and rollback

The symbolic conversion process handles:
- Control flow (loops, conditionals, etc.)
- Function inlining and call stack management
- Tracking of program values and side effects
- Graph breaks and resumption points
- Exception handling and stack frame management

This is a core part of TorchDynamo's tracing system that enables ahead-of-time
optimization of PyTorch programs.
    )annotationsN)StackSummary)AnyCallablecastNoReturnOptionalTYPE_CHECKINGUnion)	TypeAliasTypeIs)patch)ObservedExceptionTensorifyScalarRestartAnalysis)tracingTracingContext)	dump_file)
guard_bool)cache_method   )configexcgraph_break_hintsloggingtrace_rules	variables)get_indexofJUMP_OPNAMESlivevars_analysispropagate_line_nums)cleaned_instructionscreate_binary_slicecreate_call_functioncreate_copycreate_dup_topcreate_instructioncreate_jump_absolutecreate_rot_ncreate_swapget_code_keysInstructionis_generatoris_jump_absolute	unique_id)code_context)	PyCodegen)ArgsMismatchErrorBackendCompilerFailedcollapse_resume_framesformat_graph_break_messageget_stack_above_dynamoResumePrologueTracingErrorunimplemented_v2Unsupported)get_funcname)GuardBuilderinstall_guard)GraphCompileReasonOutputGraph)impl_CONTAINS_OP_fallback)DummyModuleExecutionRecorder)ContinueExecutionCache"IS_TRACING_RESUME_PROLOGUE_VARNAMEReenterWith)
AttrSourceDictGetItemSourceGlobalSourceGlobalWeakRefSourceLocalCellSourceLocalSourceSkipGuardSourceSource)is_builtin_constantis_forbidden)	_get_error_on_graph_breakcountersget_fake_valueget_instruction_source_311get_metrics_contextgraph_break_dup_warning_checkeristype
LazyStringproxy_args_kwargs)typestrValueMutationNewVariableTracker)FrameStateSizeEntryVariableBuilderwrap_fx_proxy)BuiltinVariable)ConstantVariable)ContextWrappingVariableGenericContextWrappingVariableWithExitFunctionVariable)ConstDictVariableSetVariable)BaseUserFunctionVariableLocalGeneratorFunctionVariableLocalGeneratorObjectVariableNestedUserFunctionVariableSkipFunctionVariableUserFunctionVariableUserMethodVariable)MAX_ITERATOR_LIMIT)LazyVariableTracker)BaseListVariableIteratorVariableListIteratorVariableListVariableSliceVariableTupleVariable)CellVariableExceptionVariableGetAttrVariableNullVariablePythonModuleVariableUnknownVariable)NNModuleVariable)supported_comparison_opsSymNodeVariableTensorVariable)SymbolicTorchFunctionStateTorchFunctionModeVariable)RemovableHandleVariableUserDefinedClassVariable!UserDefinedExceptionClassVariable"UserDefinedExceptionObjectVariableUserDefinedObjectVariable)	GeneratorSequence)FakeTensorMode)CompilePackagegraph_breaks
trace_calltrace_sourcetrace_bytecodedict[str, Any]compare_op_handlersc                2    [        U / [        U5      Q0 5      $ N)handle_containsreversedtxargs_s      ^/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/torch/_dynamo/symbolic_convert.py<lambda>r      s    (4.21    inc           
     J    [        U [        U / [        U5      Q0 5      /0 5      $ r   )
handle_notr   r   r   s      r   r   r      s&    J.x~.	34b5r   znot inzihttps://github.com/pytorch/pytorch/issues/new?&labels=oncall%3A+pt2&projects=&template=pt2-bug-report.ymlr   ExceptionValsc                .    [         R                  " U 5      $ )z
Import the named module and cache the result. importlib.import_module()
seems to do some filesystem checking to validate the name so not caching
this can be slow.
)	importlibimport_module)names    r   _import_moduler      s     ""4((r   c                  |    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	rS
\S'   SrS\S'   SrS\S'   SS jrSS jr	Sr
g)SpeculationEntry   strfilenameintlinenoinstruction_pointerr+   instFbool_failedNzOptional[bool]error_on_graph_breakzOptional[GraphCompileReason]reasonc                    SU l         Xl        U R                  b  U R                  R                  nOSn[        R                  " US9e)zL
Start tracing of the current frame over again, and don't take this branch.
Tz!Unknown fail_and_restart_analysis)restart_reason)r   r   r   r   SpeculationRestartAnalysis)selfr   r   s      r   fail_and_restart_analysis*SpeculationEntry.fail_and_restart_analysis   s@     $8!;;"![[//N@N,,NKKr   c                h    U R                   (       a!  U R                  c   eU R                  Ul        ggNTFr   r   )r   r   s     r   failedSpeculationEntry.failed   s/    <<,,888&*&?&?B#r   r   )r   r   returnNone)r   InstructionTranslatorBaser   r   )__name__
__module____qualname____firstlineno____annotations__r   r   r   r   r   __static_attributes__ r   r   r   r      sC    MK
GT+/./+/F(/
Lr   r   c                      \ rS rSr% Sr\R                  " \S9rS\	S'   Sr
S\	S'   SS	 jrSS
 jr          SS jrSrg)SpeculationLogi  a  
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_factoryzlist[SpeculationEntry]entriesr   r   indexc                    SU l         g Nr   r   r   s    r   restartSpeculationLog.restart  s	    
r   c                F    U R                   R                  5         SU l        g r   )r   clearr   r   s    r   r   SpeculationLog.clear  s    
r   c                <   [        U R                  5      U R                  :X  a%  U R                  R                  [	        XX45      5        U R                  U R                     nSnU R                  S:w  a]  U R                  U R                  S-
     nSUR
                   SUR                   SUR                  R                   SUR                   S3	nUR                  U:X  a   UR
                  U:X  a  UR                  U:X  d  [        S	U R                   S
[        U R                  5       SUR
                   SUR                   SUR                  R                   SUR                   SU SU SUR                   SU SU S35      eU =R                  S-  sl        U$ )zz
Lookup or create a SpeculationEntry() that is shared across
RestartAnalysis calls.  Args are used only for debug checks.
 r   r   zPrevious instruction: :(z @ z)
z"
SpeculationLog diverged at index z
 (log had z entries):
- Expected:  (z at ip=z)
- Actual: a  
There are two usual reasons why this may have occurred:
- When Dynamo analysis restarted, the second run took a different path than
  the first.  If this occurred, the previous instruction is the critical instruction that
  behaved differently.
- Speculation entries are only added under certain conditions (as seen in
  step()), e.g., there must exist operators in the graph; those conditions may
  have changed on restart.

If this divergence was intentional, clear the speculation log before restarting (do NOT
do this for graph breaks, you will infinite loop).

Otherwise, please submit a bug report, ideally including the contents of TORCH_LOGS=+dynamo
)lenr   r   appendr   r   r   r   opnamer   SpeculationLogDivergence)r   r   r   r   r   entryprev_entry_msg
prev_entrys           r   nextSpeculationLog.next  s    t||

*LL 3FM TZZ(::?djj1n5J()<)<(=Qz?P?P>QJOO**+3z/M/M.NcS 
 %%)<<(*&*""&**ZDLL8I7J K^^Aell^2ejj.?.?-@HaHaGb c*AfXR}G4G3H I  	 ( 	

a
r   r   Nr   r   )
r   r   r   r   r   r   r   r+   r   r   )r   r   r   r   __doc__dataclassesfieldlistr   r   r   r   r   r   r   r   r   r   r   r     s_     '2&7&7&MG#ME3N--%(-?B-JU-	-r   r   c                  J    \ rS rSr% \R
                  " \S9rS\S'   SS jr	Sr
g)	
LocalStateiG  r   zdict[str, FrameStateSizeEntry]automatic_dynamicc                b    SR                  S U R                  R                  5        5       5      $ )N
c              3  P   #    U  H  u  pU S UR                  5        3v   M     g7f): N)render).0kvs      r   	<genexpr>$LocalState.render.<locals>.<genexpr>N  s'      
-KTQqcAHHJ< -Ks   $&)joinr   itemsr   s    r   r   LocalState.renderM  s/    yy 
-1-C-C-I-I-K
 
 	
r   r   Nr   r   )r   r   r   r   r   r   dictr   r   r   r   r   r   r   r   r   G  s#    8C8I8I95 
r   r   c                  8    \ rS rSr% S\S'   S\S'   SrS\S'   S	rg)
DistributedStateiT  r   
compile_pgr   local_stateNzOptional[list[LocalState]]
all_statesr   )r   r   r   r   r   r   r   r   r   r   r   r   T  s    O-1J*1r   r   c                  ~    \ rS rSr% \" 5       rS\S'   \S
S j5       r\SS j5       r	\SS j5       r
\SS j5       rSrg	)TensorifyStatei[  zset[str]force_specializationsc                :    U R                   R                  U5        g r   )r   addclsr   s     r   
specializeTensorifyState.specializea  s    !!%%e,r   c                    XR                   ;   $ r   )r   r  s     r   should_specialize TensorifyState.should_specializee  s    1111r   c                8    U R                   R                  5         g r   )r   r   r  s    r   r   TensorifyState.cleari  s    !!'')r   c                2    [        U R                  5      S:H  $ r   )r   r   r
  s    r   emptyTensorifyState.emptym  s    3,,-22r   r   N)r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   setr   r   classmethodr  r  r   r  r   r   r   r   r   r   [  s_     '*e8+- - 2 2 * * 3 3r   r   c                 6    [         R                  " [        5      $ r   )torchdynamo_loggingget_step_loggerlogr   r   r   _step_loggerr  r  s    ..s33r   r   c              #  <  #    U R                   R                  nU R                   R                  n / U R                   l        SU R                   l        S v   XR                   l        X R                   l        g ! XR                   l        X R                   l        f = f7fr   )speculation_logr   r   )r   r   r   s      r    save_and_restart_speculation_logr  w  s        ((G$$E)%'"#$ %,"#(  &-"#( s   -B&A7 !B7"BBc              #     #     U R                   R                  nSU R                   l        S v   XR                   l        g ! WU R                   l        f = f7fNF)outputshould_exit)r   tmps     r   (temporarely_allow_writes_to_output_graphr    s>     $ii## %		 #				s   A+A  A AAc                  `    \ rS rSr% S\S'   S\S'   S\S'   SrS\S	'   SS
 jrSS jrSS jrSr	g)BlockStackEntryi  r+   r   targetr   stack_indexNzHOptional[Union[ContextWrappingVariable, GenericContextWrappingVariable]]with_contextc                    U R                   S L$ r   )r$  r   s    r   can_restoreBlockStackEntry.can_restore  s      ,,r   c                J   U R                   c   eU R                  (       al  [        U R                  S5      (       aQ  U R                  R                  (       a6  [	        U R                   S-
  [        U R                  R                  5      5      $ [	        U R                   S-
  5      $ )Ntarget_valuesr   )r#  r$  hasattrr)  rC   tupler   s    r   	resume_fnBlockStackEntry.resume_fn  s    +++))?;;!!//  1$eD,=,=,K,K&L  t//!344r   c                    U R                   c   eU(       a  U R                   R                  5       (       d  U(       d  U R                   R                  U5      $ g r   )r$  exit_on_graph_breakexit)r   r   is_graph_breaks      r   r0  BlockStackEntry.exit  sJ      ,,,t00DDFF$$))"--  r   r   r  )r   rC   )r   r   r1  r   r   r   )
r   r   r   r   r   r$  r&  r,  r0  r   r   r   r   r!  r!    s9      	   -5.r   r!  c                      \ rS rSrSrg)r   i  r   Nr   r   r   r   r   r   r   r   r   r         r   r   c                      \ rS rSrSrg)ReturnValueOpi  r   Nr4  r   r   r   r7  r7    r5  r   r7  c                      \ rS rSrSrSrg)YieldValueOpi  zM
Signal to the symbolic tracer to stop and return control flow to the
caller
r   N)r   r   r   r   r   r   r   r   r   r9  r9    s    r   r9  c                   ^^ [        [        R                  " U 5      R                  5      m[	        U 5      m[
        R                  " U 5      SUU4S jj5       nU$ )Nc                f   > U R                  TR                  X R                  T5      0 5      5        g r   )pushcall_functionpopn)r   r   fn_varnargss     r   implstack_op.<locals>.impl  s%    		&&&tYYu-=rBCr   )r   InstructionTranslatorr   r+   r   r   )r   inspect	signature
parametersr]   	functoolswraps)fnrA  r?  r@  s     @@r   stack_oprJ    sL    !!"%001ER F__RD D Kr   c                    [         R                  S:  a  g[        U [        R                  5      (       d  gU R
                  R                  S5      S   [         R                  ;   $ )N   
   F.r   )sysversion_info
isinstancetypes
ModuleTyper   splitstdlib_module_names)mods    r   	is_stdlibrX    sN    
'!c5++,,<<c"1%)@)@@@r   c                   U[         R                  Ld  U(       a  g[        U R                  [        5      (       d   eU R                  nU R
                  U   nUR                  S:w  a  gUS-  nSnU R
                  U   nUR                  S:X  az  [        UR                  [        5      (       d  gUR                  nUS-  nU R
                  U   nUR                  S;  a  gUS-  nUR                  S:X  a  US-  nU R
                  U   nUR                  S:w  a  gU R                  [        R                  " U5      5        g	)
NFLOAD_ASSERTION_ERRORr   zassertion error
LOAD_CONST)CALL_FUNCTIONPRECALLCALLr]  RAISE_VARARGST)operatortruthrR  r   r   instructionsr   argvalr   r<  r^   create)r   truth_fnr<  current_instruction_pointerr   	error_msgs         r   &_detect_and_normalize_assert_statementrh    s4   , 	&4d..4444"&":":89D{{,,1$ "I89D{{l"$++s++KK	 	$q(#  !<=;;BB 	$q(#;;)#'1,'  !<={{o%II%%i01r   Fc                  ^^ Uc(  [         R                  R                  R                  5       n US   R                  US   R
                  4nSn[        R                  (       a0  [        5       nSR                  [        R                  " U5      5      nO[        5       U-   n[        U5      nSR                  [        R                  " U5      5      nSUS    SUS    S	U S
3m[        R                  (       a  TU SU S3-  mOT[        U5      -  m[         R                  R!                  SS UU4S jS9  ["        R%                  [&        R(                  5      (       a<  [*        (       d1  [,        R.                  " U5      (       a  ["        R1                  T5        g ["        R1                  SUS   US   U5        g ! [         a    U S   U S   4n GNf = f)Nco_filenameco_firstlinenor   zGraph break in user code at r   r   r   z
Graph Break Reason: z
User code traceback:
zQ
========== most recent `torch.compile` tracing attempt started here ==========

a}  
NOTE: the most recent `torch.compile` tracing attempt might not be where you applied `torch.compile`! This is due to how graph breaks are implemented - the optimized code object returned by Dynamo will call another Dynamo-generated resume function and tracing is re-enabled by calling the resume function as a normal Python function, which Dynamo intercepts as a top-level frame.
artifactc                     SSS.$ )Ndynamo_graph_break_reasonstring)r   encodingr   r   r   r   r   !log_graph_break.<locals>.<lambda>R  s    / 
r   c                 N   > T ST (       a  [         R                  " 5        3$ S 3$ )Nr   r   )	traceback
format_exc)exc_infouser_stack_traces   r   r   rr  V  s'    ./rH)2F2F2H1]^Z\1]^r   )metadata_fn
payload_fnzmGraph break (user stack suppressed due to duplicate graph break) in user code at %s:%s
Graph Break Reason: %s)torch_guardsr   extract_stackr   r   
IndexErrorr   verboser5   r   rt  format_listr3   r   _loggingtrace_structuredgraph_break_logisEnabledForr   DEBUGexplainrS   r  debug)	code_optionsr   rv  
user_stack	frame_locstack_above_dynamo_formattedstack_above_dynamouser_stack_formattedrw  s	     `     @r   log_graph_breakr  !  s    ]]11??A

^,,jn.C.CD	 $& ~~35')ww!!"45(
$ ,-
:
+J7
779#8#8#DE
&y|nAil^ D%h '!	!  ~~+, -a#$ %HH	
 	C 455	NN##
 _ $  	$$W]]33+//	::
 		
 	|aLaL		
}  
 ')*
	
s   F: :GGc                   ^ ^^^^^ SmSm/ [         R                  QSPm S         SUUUU4S jjjmSUUUU 4S jjnU$ )	NData-dependent branchingzyDetected data-dependent branching (e.g. `if my_tensor.sum() > 0:`). Dynamo does not support tracing dynamic control flow.1Use `torch.cond` to express dynamic control flow.c           
       > [        U R                  [        T
SU 3T	TS9S9  U R                  5       (       d   eU R	                  5       (       a>  SU R                  5        3n[        R                  U5        [        R                  " U5      eU R                  U5        [        R                  S5        U R                  R                  U [        S[        U5       U 3U R                  5       /5      SS9nU R!                  5         U R#                  U R$                  US	5      nT(       a  U R                  U5        UR&                  c   eU R#                  UR&                  US	5      n[(        R*                  S
:  a%  U R                  R-                  [/        S5      /5        [/        UR0                  US   S9nUR3                  U5        U R                  R-                  U/U-   U-   5        g )Nattempted to jump with gb_typecontextexplanationhintsr   BSkipping frame because there is a graph break in a for/while loop
zgeneric_jump triggered compilezgeneric_jump r   r   
stack_popsFrM     TO_BOOLr   )r"  )r  r  r4   should_compile_partial_graphmaybe_has_backedgeframe_summaryr  infor   	SkipFramer<  r  r  compile_subgraphr<   rW   popcreate_call_resume_atnext_instructionr"  rP  rQ  add_output_instructionsr&   r   copy_positions)r   r   value	extra_msgmsgall_stack_locals_metadataif_nextif_jump	jump_inst_explanation_gb_type_hintsr<  s            r   jump_graph_break&generic_jump.<locals>.jump_graph_break  s    	- 1%9(		
 002222""$$U%%'(*  HHSM--$$		%		23$(KK$@$@%/	{;d>P>P>R=S  %A %
! 	
,,!!#<e
 IIe{{&&&,,KK2E
 w&KK//1CI1N0OP&t{{71:F	  &++YK',AG,KLr   c                ,  > U R                  5       n[        R                  (       Ga^  [        U TT5      (       GaK  U R                  5       nUR	                  5       (       as  [        UR                  5       5      (       a  U R                  U5      $ U R                  5       (       a
  T" XU5        O%[        SSU 3S/ [        R                  QSPSPSPS9  [        U[        5      (       aI  U R                  R                  " S[         R"                  /[%        X#40 5      Q76   U R                  U5        g [        U[&        5      (       a  UR(                  n[        U[         R*                  5      (       d  US	:g  n[         R,                  R.                  R0                  R3                  U5      nU(       d%  [        S
[5        U5      S/ [        R6                  QS9  U R                  U5        g U R                  R                  " S[         R8                  /[%        U40 5      Q76 n[;        U U[=        UR>                  U 5      S9nU R                  R                  " S[         R"                  /[%        Xs40 5      Q76   U R                  U5        g UR	                  5       (       a  [        U[@        5      (       aC  URB                  (       a2  [E        URB                  RG                  [H        RJ                  5      5        T" UR                  5       5      (       a*  T(       a  U RM                  U5        U R                  U5        g g [        U[        5      (       a  U R                  5       (       a
  T" XU5        g [        U[N        5      (       a]  U R                  RQ                  URR                  5      nT" U5      (       a*  T(       a  U RM                  U5        U R                  U5        g g [        U[T        5      (       GaW   URW                  U S5      n	[        U	[^        5      (       a  U	Ra                  U / 0 5      n[        U[b        5      (       ag  [        URd                  [
        [f        45      (       aB  T" URd                  5      (       a*  T(       a  U RM                  U5        U R                  U5        g g [        U[&        5      (       a@  URi                  5       (       a*  T(       a  U RM                  U5        U R                  U5        g g [        SSU	 SU 3S/ S9  g T" S5      (       a*  T(       a  U RM                  U5        U R                  U5        g g [        U[        5      (       df  URk                  U 5      (       aP  T" [m        URo                  U 5      5      5      (       a*  T(       a  U RM                  U5        U R                  U5        g g [        U[&        5      (       a   [        UR(                  [         R*                  5      (       a  URi                  U R                  5      n
O[q        UR(                  S	:g  5      n
 T" U
5      (       a*  T(       a  U RM                  U5        U R                  U5        g g [        U[t        Rv                  5      (       a8  T" S5      (       a*  T(       a  U RM                  U5        U R                  U5        g g SSK!J<n  URB                  b]  U" URB                  5      (       aF  T" UR{                  5       5      (       a*  T(       a  U RM                  U5        U R                  U5        g g [        SSU 3T/ [        R                  QSPS9  g ! [X        RZ                   aa    [X        R\                  " U 5         URW                  U S5      n	 GN! [X        RZ                   a    [X        R\                  " U 5        S n	  GNf = ff = f! [X        Rr                   a+  nU R                  5       (       a  T" XUSU 3S9s S nA$ e S nAff = f)Nz>Data-dependent assertion failed (cannot compile partial graph)zvalue: zuDynamo has determined when encountering a data-dependent assert failure that it should not compile the partial graph.zUse `torch._assert()` to raise a hard AssertionError when the check fails. This error will propagate back the user code that called the compiled function (i.e. Dynamo will not trace any exception handling).zRemove the assert statement.zMove the assert statement outside of any context managers in order to graph break with partial graph compilation (if fullgraph=False).r  r=  r   z#Assertion failed on symbolic shapesr   )example_value__bool____len__z3Data-dependent branching with non-constant __bool__zmethod: z
, result: z}Attempted to perform data-dependent branching on a user-defined object with a __bool__ method that did not return a constant.Tr   )r  r   )is_constant_sourcer  r  r  )>r  r    rewrite_assert_with_torch_assertrh  is_python_constantr   as_python_constantjumpr  r7   r   FUNDAMENTALrR  r|   r  create_proxyrz  _assert_asyncrV   r{   sym_numSymBoolfxexperimentalsymbolic_shapesexpect_truer   
USER_ERRORscalar_tensorr\   rP   noderb   sourcer;   
make_guardr:   SEQUENCE_LENGTHr<  ry   get_submodule
module_keyr   var_getattrr   ObservedAttributeErrorhandle_observed_exceptionrj   r=  r^   r  r   evaluate_exprhas_unpack_var_sequencer   unpack_var_sequencer   	UserErrorr   BackwardHookVariabler  get_real_value)r   r   r  rg  sym_exprresultscalar_to_tensor_proxyscalar_to_tensorrW  xeval_resulter  r  r  r<  re  s                r   innergeneric_jump.<locals>.inner  s   !%3336tXtLL)-I''))0023399T?*6688$T7$ `")% 1%H.::u
 ;N* %00((#'' ''92>
 		$%11 !==!(EMM::'1}H..>>JJ8T$ E #H$&= 1 < <=	 		$%)[[%=%=!4!4&7H%SU7V&"  -&,-C-H-H$O  KK$$## #$4#@"E
 IIdO##%% %!233ell55l6R6RST00233IIe$		$ 4
 u~//D4U4U4W4WT//00++++E,<,<=C}}IIe$		$  899	%%dJ7 !/00r26f&677JLL4+= =  -- IIe,		$ .  88++-- IIe,		$ .
 % U"*1#Zx @%X  D>>		%(IIdO " E>22u7T7T8
 8
 E55d;<==IIe$		$ > // emmU]];;"'"5"5dkk"BK",U]]a-?"@K
 $$IIe$		$ % y==>>~~IIe$		$ 
 3||',>u||,L,LE00233		%(IIdO 4
 !65eW= ,*66K	] -- --d3))$	:A11 11$7Ap == 4466+D2aSRRsU   6] A_ "_ *_^,____`(````)r   )
r   r   r   r+   r  rY   r  r   r   r   r   r   r   r+   r   r   )r   r  )re  r<  r  r  r  r  r  s   `` @@@@r   generic_jumpr  r  s     *H	@ 		&	&;F 	4M'4M4M 4M 	4M
 
4M 4Ml~ ~@ Lr   c                    ^      SU 4S jjnU$ )Nc                p   >^ ^ [         R                  " T 5      SUU 4S jj5       n        SU4S jjmU$ )Nc           	       > U R                  5       nUR                  U 5      (       a"  UR                  c   eT" XUR                  5      $  T" X5      $ ! [         GaO  nU R                  (       a;  UR                  5         [        SSU R                   3SS/[        R                  QUS9  [        U[        R                  5      (       a  e U R                  5       (       d  e [        U R                  S[        U5      UR                   S9  U R#                  5       (       a?  SU R%                  5        3n[&        R)                  U5        [        R*                  " U5      UeUR                  5         UR-                  S	5        [/        UR0                  UR                   5      Ul         S nAOS nAff = fUR3                  U R4                  5        g )
Nz0Graph break under GenericContextWrappingVariablez!Active generic context managers: z]Attempted to graph break in an active context manager(s) that doesn't support graph breaking.zEMove the offending context manager(s) to outside the compiled region.)r  r  r  r  from_excT)rv  r   r  r  graph_break)	speculater   r   r8   active_generic_context_managersremove_from_statsr7   r   CAUSED_BY_EARLIER_GRAPH_BREAKrR  r   UncapturedHigherOrderOpErrorr  r  r  r   
real_stackr  r  r  r  r  add_to_statsr<   r  r   r   )r   r   speculationexcpr  handle_graph_breakinner_fns        r   wrapper>break_graph_if_unsupported.<locals>.decorator.<locals>.wrapper  s   ..*K!!$''"))555)$k6H6HII)S++ 'S77 **,$ R"CDDhDhCi j %Dc.LL "&	 dC$D$DEE88::%%!t9#	 **,,]--/02  HHSM--,$6&&(!!-0%7$//%R""O'SP 11$2K2KLs   A F-EF((F-c                  > [         R                  S:  a  [         R                  S:  av  UR                  S:X  af  [        R                  " [        R
                  S   UR                  5      [        R                  " [        R
                  S   UR                  5      -   nO+[        R                  " UR                  UR                  5      nU R                  R                  XTU-
  S9n[        U 5      n/ nU R                   H  n[        UR                  [        5      (       a;  UR                  UR!                  5       R#                  UR$                  U5      5        M]  UR                  c   e[        UR                  [&        5      (       d   eUR                  R)                  U5        UR                  UR!                  5       R+                  UR$                  U5      5        M     U R                  R-                  UR/                  5       5        A[         R                  S:  a  UR                  S:X  a  U R0                  b  U R0                  R3                  5       OSn[5        U5      S:  a:  [         R                  S:  d   eU R                  R-                  [7        S	US
9/5        UR                  c   e[9        UR                  S5      n	U	S   R;                  U5        U R                  R-                  U	5        OHUR<                  b   e[>        R>                  " U5      n
S U
l         U R                  R-                  U
/5        U R                  R-                  U5        U RC                  TU-
  5        [E        T5       H  nU RG                  [I        5       5        M     U R                  R-                  U RK                  U RL                  US5      5        g )NrM     rM     r^  r]  r  r   r   r  KW_NAMESrc  Frj  )'rP  rQ  r   disstack_effectopmapargopcoder  r  r0   block_stackrR  r$  r~   extend_outputr,  try_except_torch_function_moder  r_   reconstruct_typetry_finallyr  get_instructionskw_namesr  r   r&   r#   r  r"  copyexn_tab_entryr>  ranger<  rx   r  r  )r   r   r   r  r  cgcleanupbr  
call_insts	inst_copyr   r<  s               r   r  Ibreak_graph_if_unsupported.<locals>.decorator.<locals>.handle_graph_break  s      G+$$w.KK6)  #//IIi($(( $$SYYv%6A B  #//TXXF(,(D(D|0C )E )% 4B)+G%% ann.GHH$$DDOOW
 ~~111!!..3JLLLL//3  !:!:2??G!TU & KK//0C0C0EF7*t{{f/D }}0 MM446 
 x=1$++g555KK77+JxHI xx+++1$((EB
2--d333J? {{*** IIdO	*.	'33YK@KK//8IId\)*4[		/+, !KK//**))+Der   r  )r   r   r   r+   r   r<   r   r   )rG  rH  )r  r  r  r<  s   ` @r   	decorator-break_graph_if_unsupported.<locals>.decorator~  sY     
	"/	M 
#/	MbH	+H	H	 'H	 	H	T r   )r  Callable[..., None]r   8Callable[[InstructionTranslatorBase, Instruction], None]r   )r<  r  s   ` r   break_graph_if_unsupportedr  y  s$    
%	AB r   c                  0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )BytecodeDistpatchTableMetai  zTInstalls a `cls.dispatch_table` on every subclass to speed up calls to self.OPCODE()c                F  > [         T	U ]  XU5        SS jn[        R                  R	                  5        VVs0 s H&  u  pVU[        X[        R                  " XE5      5      _M(     nnn[        S5       Vs/ s H  oR                  U5      PM     snU l
        g s  snnf s  snf )Nc                X    [        SU  SU 3SU  S3SU  S3/[        R                  QS9  g )NzMissing bytecode handlerz with args z=Dynamo does not know how to handle the bytecode instruction ``.z%Do not trace code that produces the `z_` bytecode instruction (see https://docs.python.org/3/library/dis.html for bytecode semantics).r  r7   r   SUPPORTABLE)r   r   s     r   _missing5BytecodeDistpatchTableMeta.__init__.<locals>._missing  sS    2!(+dV4[\b[ccef;F8 D_ _ '22		r      )r   r   r   r   r   r   )super__init__r  r  r   getattrrG  partialr  getdispatch_table)
r  r   basesdctr  r   opr&  i	__class__s
            r   r"  #BytecodeDistpatchTableMeta.__init__  s    c*
	 "iioo/
/
 Y%6%6x%HII/ 	 
 >C4[I[003[I	
 Js   -B5Br   )
r  typer   r   r'  r   r(  r   r   r   )r   r   r   r   r   r"  r   __classcell__r+  s   @r   r  r    s    ^J Jr   r  c                      \ rS rSr% Sr\R                  " \S9rS\	S'   \R                  " SS9r
S\	S	'   SS
 jrSS jrSS jrSS jr      SS jrSS jr    SS jrSS jrSS jrSS jrSS jrSS jr\rSrg)ExceptionStacki  zM
Exception stack that it is shared among all InstructionTranslator instances
r   zlist[ExceptionVals]
_exc_stackN)defaultzOptional[ExceptionVals]_current_exceptionc                    S U l         g r   r4  r   s    r   clear_current_exception&ExceptionStack.clear_current_exception/  s
    "&r   c                2    U R                  U5        Xl        g r   )._set_context_and_break_context_reference_cycler4  r   vals     r   set_current_exception$ExceptionStack.set_current_exception2  s    ;;C@"%r   c                x    U R                   c   eU R                  U R                   5        U R                  5         g r   )r4  r   r7  r   s    r   move_current_exception_to_stack.ExceptionStack.move_current_exception_to_stack6  s2    &&222D++,$$&r   c                8    U R                   c   eU R                   $ r   r6  r   s    r   get_current_exception$ExceptionStack.get_current_exception;  s     &&222&&&r   c                    UR                   =n(       a  [        U5      [        La  U$ [        U R                  5      U-   S:  a4  U R                  U   nU R                  XBS-
  5        UR                  U5        U$ Nr   r   )__context__r-  r^   r   r2  _set_context_recursiveset_context)r   r<  prev_idxctxprevs        r   rH  %ExceptionStack._set_context_recursive?  sk     ??"C"S	9I(IJt(*Q.??8,D''l;OOD!
r   c                    U=p#Sn UR                   n[        U5      [        L a  g XQL a  UR                  [        S 5      5        g UnX#L a  g U(       a  UR                   nU(       + nMa  r  )rG  r-  r^   rI  )r   r<  oslow_oslow_update_toggler  s         r   _break_context_reference_cycle-ExceptionStack._break_context_reference_cycleJ  ss    
 "mmGG} 00~.t45A{ !++%7!7% r   c                v    U R                  U[        U R                  5      S-
  5        U R                  U5        g )Nr   )rH  r   r2  rR  r;  s     r   r:  =ExceptionStack._set_context_and_break_context_reference_cyclee  s0     	##CT__)=)AB++C0r   c                6    U R                   R                  5       $ r   )r2  r  r   s    r   r  ExceptionStack.popl  s    ""$$r   c                :    U R                   R                  U5        g r   )r2  r   r;  s     r   r   ExceptionStack.appendo  s    s#r   c                ,    [        U R                  5      $ r   )r   r2  r   s    r   r  ExceptionStack.__len__r  s    4??##r   c                     U R                   U   $ r   )r2  )r   r   s     r   __getitem__ExceptionStack.__getitem__u  s    u%%r   c                >    SU R                   < SU R                  < 3$ )Nzself._exc_stack=z - self._current_exception=)r2  r4  r   s    r   __str__ExceptionStack.__str__x  s"    "$//##?t'>'>&@AAr   r6  r   )r<  r   r   r   )r   r   )r<  r   rJ  r   r   r   )r   r   )r   r   r   r   r   )r   r   r   r   r   r   r   r   r2  r   r4  r7  r=  r@  rC  rH  rR  r:  r  r   r  r]  r`  __repr__r   r   r   r   r1  r1    s     '2&7&7&MJ#M2=2C2CD2Q/Q'&'
'	 	,/			861 1	1%$$&B Hr   r1  c                    ^  \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S '   S!\S"'   S#\S$'   S%\S&'   S\S''   S\S('   S)\S*'   S+\S,'   S-\S.'   SS/ jrSS0 jrSS1 jrSS2 jrSS3 jr	SS4 jr
        SS5 jr        SS6 jr        SS7 jrSSS8 jjrSS9 jrSS: jrSS; jr\R&                  S<:  a  SS= jrOSS> jr\SS? j5       rSS@ jrSSA jrSSB jrSSC jrSSD jrSSE jrSSF jrSSG jrSSH jrSSI jr SSJ jr!SSK jr"\r#SSL jr$SSM jr%SSN jr&\'RP                  SSO j5       r)SSP jr*SSQ jr+\,SSR j5       r-SSS jr.SST jr/SSU jr0\0r1SSV jr2\,SSW j5       r3SSX jr4SSY jr5\5r6\5r7\8" \9Rt                  SZ5      r;\8" \9Rx                  SZ5      r=\8" \9Rt                  S[5      r>\8" \9Rx                  S[5      r?SS\ jr@SS] jrASS^ jrBSS_ jrCSS` jrDSSa jrESSb jrFSSc jrGSSd jrHSSe jrISSf jrJSSg jrKSSh jrLSSi jrMSSj jrNSSk jrOSSl jrPSSm jrQSSn jrRSSo jrSSSp jrTSSq jrUSSr jrVSSs jrW\X" StSu9SSv j5       rY\X" StSu9SSw j5       rZ\X" StSu9SSx j5       r[SSy jr\SSz jr]SS{ jr^SS| jr_SS} jr`SS~ jraSS jrbSS jrcSS jrd        SS jreSS jrf\X" SSu9SS j5       rgSS jrhSS jriSS jrjSS jrkSS jrl\m4SS jjrnSS jro\orpSS jrqSS jrr\rrsSS jrtSS jruSS jrvSS jrwSS jrxSS jrySS jrzSS jr{\X" SSu9SS j5       r|SS jr}SS jr~SS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jr\rSS jrSS jrSS jrSS jrSS jrSS jrSS jr\" \9GR.                  5      r\" \9GR2                  5      r\" \9Rt                  5      r\" \9GR8                  5      r\" \9GR<                  5      r\" \9GR@                  5      r\" \9GRD                  5      r\" \9GRH                  5      r\" \9GRL                  5      r\" \9GRP                  5      r\" \9GRP                  5      r\" \9GRV                  5      r\" \9GRZ                  5      r\X" StSu9" \" \9GR^                  5      5      r\" \9GRb                  5      r\" \9GRf                  5      r\" \9GRj                  5      r\" \9GRn                  5      r\" \9GRr                  5      r\" \9GRv                  5      r\" \9GRz                  5      r\" \9GR~                  5      r\" \9GR                  5      r\" \9GR                  5      r\" \9GR                  5      r\" \9GR                  5      r\" \9GR                  5      r\" \9GR                  5      r\" \9GR                  5      r\" \9GR                  5      r\" \9GR                  5      r\" \9GR                  5      r\" \9GR                  5      rSS jr\R&                  S<:  a  SS jrSS jrSS jrSS jrSSS jjr\X" StSu9SS j5       rSS jrSS jr\5r\5r\8" \9Rx                  SZ5      r\8" \9Rx                  SZ5      r\8" \9Rt                  SZ5      r\8" \9Rt                  SZ5      rSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jr\X" StSu9SS j5       rSS jrSS jrSS jrSS jrSS jrSS jr S   SS jjrSS jrSS jrSS jr\SS j5       r\GR                      SS j5       Gr SS jGr  S                                   SU 4S jjjGrSGrU =Gr$ )r   i~  r=   r  dict[str, VariableTracker]symbolic_localssymbolic_globalsr}   symbolic_torch_function_statez$Optional[dict[str, VariableTracker]]post_prune_cell_and_freevarslist[VariableTracker]stackOptional[int]r   r+   current_instructionzlist[BlockStackEntry]r  r   r   zOptional[ConstantVariable]r  r   accept_prefix_instlist[Instruction]prefix_instsinline_depthinconsistent_side_effectszOptional[SpeculationEntry]current_speculationz	list[Any]r&  r1  exn_vt_stackzOptional[ExecutionRecorder]exec_recorderz+Optional[Callable[[VariableTracker], bool]]strict_checks_fnstart_pointis_leaf_tracerz#Optional[InstructionTranslatorBase]parentz3list[tuple[VariableTracker, list[VariableTracker]]]debug_localsOptional[CompilePackage]packagec                    SU l         g)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)rq  r   s    r   mark_inconsistent_side_effects8InstructionTranslatorBase.mark_inconsistent_side_effects  s     *.&r   c                0   U nUb  UR                   R                  nUR                  c   eUR                  UR                  S   H>  nUR                  S;   a    O-UR                  [
        ;   d  M+  UR                  nXB:  d  M>    g   UR                  nUb  M  g)N)RETURN_VALUERETURN_CONSTTF)rl  offsetr   rb  r   r   rc  rx  )r   cur_tx
cur_offsetr   jump_offsets        r   r  ,InstructionTranslatorBase.maybe_has_backedge  s    * 7; 33::J--999++F,F,F,HI;;"BB;;,."&++K"/# J ]]F   r   c                     U R                   S   $ )Nco_cellvarsr  r   s    r   cellvars"InstructionTranslatorBase.cellvars        //r   c                     U R                   S   $ )Nco_freevarsr  r   s    r   freevars"InstructionTranslatorBase.freevars  r  r   c                    [        U S5      (       d&  U R                  5       U R                  5       -   U l        U R                  $ )N_cell_and_freevars)r*  r  r  r  r   s    r   cell_and_freevars+InstructionTranslatorBase.cell_and_freevars  s5    t122&*mmo&GD#&&&r   c                d   U R                   R                  5        VVs0 s H  u  pXR                  5       ;   d  M  X_M     snnU l        [	        U R
                  U R                  5      nU R                   R                  5        VVs0 s H  u  pX;   d  M  X_M     snnU l         g s  snnf s  snnf r   )re  r   r  rh  r   rb  rl  )r   r   r   readss       r   prune_dead_locals+InstructionTranslatorBase.prune_dead_locals  s     ,,224-
4**,, AD4-
) "$"3"3T5M5MN!11779 
9TQQZDAD9 
-
 
s   B&B&B,B,c                (   [        U[        5      (       d   e[        U[        5      (       d   e[        U[        5      (       d   e[	        S [
        R                  " X#R                  5       5       5       5      (       d   eS n[        US5      (       a  UR                  n[        US5      (       a  UR                  nU(       a.  [        U5      (       a  [        U5      (       a  [        SU 35      eU R                  UR                  XU5      5        g )Nc              3  B   #    U  H  n[        U[        5      v   M     g 7fr   )rR  rY   )r   r  s     r   r   :InstructionTranslatorBase.call_function.<locals>.<genexpr>  s!      
; q/**;s   r  rI  z$Attempt to trace forbidden callable )rR  rY   r   r   all	itertoolschainvaluesr*  r  rI  callablerM   AssertionErrorr<  r=  )r   rI  r   kwargsr  s        r   r=  'InstructionTranslatorBase.call_function  s     "o....$%%%%&$'''' 
__T==?;
 
 
 	
 
 2wxxH2tuuH**|H/E/E #Gz!RSS		"""4v67r   c                f    [        U[        5      (       d  [        U5      nUR                  XU5      $ )z4
Redirect the call to the generator "call_function"
)rR  re   r=  r   rI  r   r  s       r   inline_generator_function3InstructionTranslatorBase.inline_generator_function  s/     "<==/3BF33r   c                    SU l         [        R                  (       a0  [        UR	                  5       5      (       a  U R                  XU5      $ [        R                  XX#5      $ )z6
A call to some user defined function by inlining it.
F)rw  r   "enable_faithful_generator_behaviorr,   get_coder  InliningInstructionTranslatorinline_callr  s       r   inline_user_function_return5InstructionTranslatorBase.inline_user_function_return  sK     $44bkkm9T9T11"FCC0<<TtTTr   c                &   Uc  U R                   nU R                  S:  a  SU R                   S3OSn[        U R                  R                  U5      nUc  SOSU S3nU R                  R                   SU SU R                  R
                   U U 3$ )Nr   z (inline depth: )r   r   r   z in )r   rp  r9   f_coderk  co_name)r   r   inline_depth_strfuncnamefuncname_strs        r   get_line_of_code_header1InstructionTranslatorBase.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                    SU R                  5        S3n[        R                  " U R                  R                  U R
                  5      R                  5       nUSU 3-  nU$ )NzTRACE starts_line r   z    )r  	linecachegetliner  rk  r   rstrip)r   log_strlines      r   get_log_starts_line_log_str5InstructionTranslatorBase.get_log_starts_line_log_str  sX    &t'C'C'E&FbI  !8!8$++FMMOT$= r   c                &   U R                   U:X  a  g Xl         [        R                  " U R                  R                  XR                  R
                  5        U R                  (       a*  [        R                  S[        U R                  5      5        g g )N%s)r   r   set_current_locr  rk  r  is_trace_source_log_enabledtrace_source_logr  rU   r  )r   r   s     r   starts_line%InstructionTranslatorBase.starts_line  sh    ;;& &&KK##V[[-@-@	
 ++""4D4T4T)UV ,r   c                   [        5       U l        U R                  nUc  gU R                  U   =U l        nUS-   U l        UR
                  (       a  U R                  UR
                  5        U R                  (       dq  U R                  5       (       a\  U R                  5       (       aG  U R                  5       U l
        U R                  R                  U 5      (       a  U R                  U5        gU R                  (       a6  [        R                  SUR                   UR"                  U R                  5        U R%                  U5         U R&                  UR(                     " X5        U R*                  R,                  (       + $ ! [.         a    e [0        R2                   a  nU R5                  U5         SnAgSnAf[6        [8        4 a     g[:         an    U R<                  (       d"  U R                  (       d  U R>                  (       a  e U R                  c  [@        R                  S5        e [@        R                  SSS9   Of = fU R                  RC                  U R                  5        g)	z<Process exactly one instruction, return False we should exitNFr   zTRACE %s %s %sTzempty checkpointzstep triggered compilerv  )"rN   r   r   rb  rl  r  rj  r  is_non_empty_graphr  rr  r   step_graph_breakis_trace_bytecode_log_enabledtrace_bytecode_logr  r   rc  update_block_stackr&  r  r  r  r   r   r   exception_handlerr7  r9  r8   	one_graphis_tracing_resume_prologuer  r   )r   ipr   r  s       r   stepInstructionTranslatorBase.step%  s   $=$?!%%:*.*;*;B*?? 4#%6 T--. 

1133''))'+~~'7D$''..t44%%d+--$$ $++t{{DJJ 	%	?,T8{{....- 	$$ 	""1%|, 	 	? ,,22''/		,-II.I>#	?& 	  ::4;T;TUs%   9F IF55I
A4I Ir  c                   UR                   nU(       a  [        U R                  5      S:  ai  UR                  U R                  S   R                  LaB  UR                  U R                  S   R                  L a  U R                  R	                  5         g g g g U R                  (       aG  UR
                  S;  a6  [        U R                  5      S:X  d   eU R                  R	                  5         g g g )N   rj  )NOPJUMP_BACKWARDr   )r
  r   r  r"  r  r   )r   r   r   s      r   r  ,InstructionTranslatorBase.update_block_stacke  s     &&E (()Q.D,<,<R,@,G,GG(8(8(<(C(CC $$((* D H /  ##;S(S t//0A555$$((* )T#r   c                    g r   r   r   r   s     r   r  r    s    r   c                R    U R                   c   eU R                  U R                      $ r   )r   rb  r   s    r   r  *InstructionTranslatorBase.next_instruction  s+    ''333  !9!9::r   c           	        U R                   R                  (       a   eU R                  c   eU R                  (       a   eU R                   R	                  U S[        SU R                  5       /5      S9nU R                  (       aC  [        R                  (       d   eU R                   R                  U R                  XS5      5        g [        U 5      nU R                   R                  UR                  S5      UR                  5       /5        US   R                  R!                  5        HX  u  pEU R                   R                  [#        5       UR                  U5      UR                  5       UR%                  U5      /5        MZ     U R                   R                  ['        S5      [)        U5      /U R*                  Q5        g )NTstep_unsupported)partial_convertr   rj  POP_TOP)r  output_instructionsrr  rj  r  r<   r  rx  r   nested_graph_breaksr  r  r0   create_load_constcreate_binary_subscrlocals_namesr   r%   create_storer&   r'   rb  )r   continue_instr  r  localidxs         r   r  *InstructionTranslatorBase.step_graph_break  s   ;;2222''333 ::~ %)KK$@$@ %&84;M;M;O:PQ %A %
!
 ;;----KK//**!d 4BKK//((,++- 8;HHNNP
33&(,,S1//1.	 Q KK//&y1(7 &&r   c                .    [         R                  " S 5      $ r   )r   current_framer   s    r   run_ctx_mgr%InstructionTranslatorBase.run_ctx_mgr  s     ++D11r   c           
        U R                  5          [        U R                  R                  5         U R                  R                  U 5        U R                  U l         U R                  5       (       a   U R                  5       (       a  M  U R                  RA                  5         [C        U [D        5      (       a4  U R                  RG                  5         U R                  RI                  5         S S S 5        g ! [         a^  nU R                  (       aG  [        S[        U5      R                   S[        U5       35      R                  UR                   5      S ee S nAff = f! ["         a    e [$         a    e [&         a  n[)        US5      (       an  SUR*                  ;   a^  [,        R.                  R1                  U R                  R2                  U R                  R4                  5      R7                  SSSS9nX!l        e e S nAf[         a6  nU R:                  (       a  U R:                  R=                  5       Ul        e S nAff = f! U R                  RA                  5         [C        U [D        5      (       a5  U R                  RG                  5         U R                  RI                  5         f f = f! , (       d  f       g = f)NzError while tracing through a Dynamo-generated resume function prologue. Errors are not allowed when tracing resume function prologues.
r   r  zData-dependentFT)print_outputinclude_strideinclude_device)%r  r   r  rk  r  push_txr   rv  r  	Exceptionr  r6   r-  r   r   with_traceback__traceback__r   r2   RuntimeErrorr*  r  rz  r  GraphModule
nn_modulesgraphprint_readablepartial_fx_graphrt  
get_recordexec_recordpop_txrR  rC  r  mark_bytecode_tracing_stop)r   r  readable_graphs      r   runInstructionTranslatorBase.run  s,   dkk--./=##D)#'#;#; 
))++ ))++> ""$ d$9::KK'')
 KK::<c   ! 668_#Aw334Bs1vh@ ).9t	D
  2 (  
1e$$)9QUU)B%*XX%9%9..0A0A&$n%*4PT %  #
 *8& %%$($6$6$A$A$CAM	 ""$ d$9::KK'')
 KK::< ;W  sh    J0,E#+C8A#J08
E AEE  E##IB HI1H??IIA&J--J00
J>c                    Ub(  [        U[        5      (       d   S[        U5       35       eU R                  R	                  U5        g )Nz"push expects VariableTracker, got )rR  rY   rW   rj  r   r;  s     r   r<  InstructionTranslatorBase.push	  sB    {jo>> 	
0?	
> 	

#r   c                8    U H  nU R                  U5        M     g r   r<  )r   valsr<  s      r   	push_many#InstructionTranslatorBase.push_many  s    CIIcN r   c                6    U R                   R                  5       $ r   )rj  r  r   s    r   r  InstructionTranslatorBase.pop  s    zz~~r   c                t    / [        [        U5       Vs/ s H  o R                  5       PM     sn5      Q$ s  snf r   )r   r  r  )r   nr   s      r   r>  InstructionTranslatorBase.popn  s,    :uQx8x!88:x89::8s   5
c           	        UR                   nU R                  (       a7  X R                  ;   a(  U R                  R                  X R                  U   5         U R	                  U R
                  U   R                  5       5        UR                  S5      (       a  U R
                  R                  U5        g g ! [         a    UR                  S5      (       ah   UR                  SS5      nU R	                  U R
                  U   5         N! [         a(    [        SSU 3SU S3S/[        R                  QS9    Nf = f[        S	SU 3S
U S3/ [        R                  QS9   Nf = f)NrO  implicitz5Attempted to read undefined local variable (implicit)z
LOAD_FAST z5Could not find an implicit local variable with name ``z(This happens in dict/list comprehensionsr  z*Attempted to read undefined local variablez+Could not find a local variable with name `__stack)rc  rt  f_localsadd_local_varr<  re  unwrapKeyError
startswithreplacer7   r   r  r  )r   r   r   new_names       r   	LOAD_FAST#InstructionTranslatorBase.LOAD_FAST  sQ   {{$--"7,,T==3FG	IId**40779:4 ??9%%  $$T* &3  	s###||C<HIId228<= 	$ W",TF 3&[\`[aab$cF.99		 !H(/"MdVST U9-889	#	s0   ,B5 5 E#0D.D:6E#9D::&E#"E#c                   UR                   U R                  5       ;   d   eU R                  UR                      nU R                  R                  R                  U5      nU R                  U5        U R                  (       aY  UR                   U R                  ;   a>  U R                  R                  UR                   U R                  UR                      5        g g g r   )
rc  r  re  r  side_effects	load_cellr<  rt  r  r  )r   r   cellcontents_vars       r   
LOAD_DEREF$InstructionTranslatorBase.LOAD_DEREF<  s    {{d446666##DKK0{{//99$?		,$++">,,T[[$--:TU #?r   c                    UR                   nU R                  5       nUR                  U5        X0R                  U'   U[        :X  a+  UR                  5       n[        U5      [        L d   eX@l        g g r   )	rc  r  set_name_hintre  rB   r  r-  r   r  )r   r   r   	loaded_vtr<  s        r   
STORE_FAST$InstructionTranslatorBase.STORE_FASTE  sf    {{HHJ	%%.T"55..0C9$$$.1+ 6r   c                2    U R                   UR                  	 g r   )re  rc  r  s     r   DELETE_FAST%InstructionTranslatorBase.DELETE_FASTO  s      -r   c                `   UR                   U R                  5       ;   d   eU R                  UR                      nU R                  5       nU R                  R
                  R                  X#5        [        U[        5      (       d   eUR                  b  UR                  UR                  5        g g r   )rc  r  re  r  r  r  
store_cellrR  rs   
local_namer&  )r   r   r!  r<  s       r   STORE_DEREF%InstructionTranslatorBase.STORE_DEREFR  s    {{d446666##DKK0hhj  ++D6$----??&doo. 'r   c                
   UR                   nUc  [        R                  " UR                  S9$ U R                  U   nU(       d:  [        R                  " UR                  S9U R                  U'   U R                  U   nUc   eU$ )Nr  )r   r^   rd  rc  _constants_cache)r   r   r*  r<  s       r   _load_const%InstructionTranslatorBase._load_const^  sv    HH9#**==##A&'7'>'>T[['QD!!!$''*C
r   c                D    U R                  U R                  U5      5        g r   )r<  r5  r  s     r   r[  $InstructionTranslatorBase.LOAD_CONSTi  s    		$""4()r   c           	        UR                   nU R                  (       ao  X R                  ;   a)  U R                  R                  X R                  U   5        O7X R                  ;   d   eU R                  U   U R                  R
                  U'   X R                  ;  a  U R                  U5      $ X R                  ;   a[  U R                  R                  U R                  U      nU R                  U R                  R                  R                  X25      5        g U R                  U   nU R                  [        R                  " X[        U5      5      5        g r   )rc  rt  	f_globalsadd_global_var
f_builtinsbuiltinsload_builtinrf  r  r  r<  load_globalrY   buildrF   )r   r   r   variabler  s        r   _load_global&InstructionTranslatorBase._load_globall  s    {{~~%""11$t8LM...48OOD4I""++D1~~%$$T**((({{//0E0Ed0KLHIIdkk..::8JKt$		/''\$5GHIr   c                l    SnU R                  U5      n[        U5      n[        R                  " XU5      $ )Nztorch.nn.modules.module)import_sourcer   rY   r@  )r   module_namemodule_sourcefglobals_values       r   nn_modules_globals_vt/InstructionTranslatorBase.nn_modules_globals_vt  s4    /**;7'4$$T=IIr   c                T   UR                   c   e[        R                  S:  a9  [        R                  S:  a%  UR                   S-  (       a  U R                  U5        U R	                  U5        [        R                  S:  a'  UR                   S-  (       a  U R                  U5        g g g )Nr  r  r  )r   rP  rQ  	PUSH_NULLrB  r  s     r   LOAD_GLOBAL%InstructionTranslatorBase.LOAD_GLOBAL  s~    xx###w&3+;+;g+E$((UV,NN4 $w&488a<NN4  ,8&r   c                   U R                  5       nUR                  n[        U5      nX0R                  ;  a  [	        5       U R                  U'   U R
                  R                  R                  X@R                  U   5      n[        U[        5      (       a  [        SUS/ S9  U R
                  R                  R                  XSU5        g )Nz%Storing Tensor hook handle in globalsThis is not supported.r  )r  rc  rF   rf  objectr  r  track_global_existingrR  r   r7   store_global)r   r   r  r   r  rA  s         r   STORE_GLOBAL&InstructionTranslatorBase.STORE_GLOBAL  s    
{{d#,,,*0(D!!$';;++AA))$/
 e455?4	 	  --heDr   c                   SU;   aZ  [         R                  R                  R                  U   nUR	                  SS5      R	                  SS5      R	                  SS5      nO [        U5      nSUR	                  SS5       3nU R                  b  U R                  R                  X15        XR                  R                  U'   U R                  R                  nX4;  d	  XC   UL d   eX$U'   U R                  R                  U5        [        U5      $ )z-Create an alias to a module for use in guardstorch_package>r   <rO  _dot_	__import_)rz  r{  package_importer_package_imported_modulesr  r   add_import_sourcer  import_sourcesglobal_scopeupdate_co_namesrF   )r   rF  r  aliasr:  s        r   rE  'InstructionTranslatorBase.import_source  s     k)MM22LLE ##C-55c3?GGWU  #;/E 3 3C ABCE<<#LL**5>,7""5)KK,,	%)9U)BBB %##E*E""r   c                    UR                  SUS-
  5      n[        U5      U:  a  [        S5      eUS   nU(       a  U SU 3$ U$ )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
rO  r   z2attempted relative import beyond top-level packager   )rsplitr   ImportError)r   r   r{  levelbitsbases         r   resolve_name&InstructionTranslatorBase.resolve_name  sQ     ~~c519-t9uRSSAw#'$q1T1r   c                   U R                   R                  S5      nU R                   R                  S5      nUb4  Ub/  XR                  :w  a   [        R	                  SUUR                  SS9  U$ Ub  UR                  $ [        R	                  SSS9  U R                   S   nSU R                   ;  a  UR                  S	5      S
   nU$ )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)rM  )
stacklevelzYcan't resolve package from __spec__ or __package__, falling back on __name__ and __path__r   __path__rO  r   )r:  r%  rx  r  warning
rpartition)r   r{  specs      r   calc_package&InstructionTranslatorBase.calc_package  s    
 ..$$]3~~!!*-G{{$:?KK 	   N;;KK8  
 nnZ0G/!,,S1!4r   c           
     r   U R                  S5      u  p#UR                  5       nUR                  5       nUR                  n[        R                   SU SU SU 3nXPR
                  ;   a  U R
                  U   n[        U5      nO} [        UUUU R
                  S9nUS
:w  a"  U R                  5       nU R                  XHU5      nU(       d&  UR                  S5      S
   n	U R                  U	5      nOU R                  U5      nU R                   (       a  U R                   R#                  UW5        [%        W[&        R(                  [*        45      (       a  U R-                  [/        XgS95        g [        S[1        U5      S/ S	9  g ! [         a)    [        SSU SU SU 3S/ [        R                  QS	9   GNf = f)Nr  r   )fromlistrg  globalszImport failurezmodule_name: z, fromlist: z, level=z"Failure when attempting to import.r  r   rO  r  zBad import resultz%Import result is not a Python module.)r>  r  rc  r@   LOCAL_MOD_PREFIXr:  rF   
__import__rf  r7   r   r  rt  rj  	partitionrE  rt  add_local_modrT   rS  rT  r?   r<  rw   rW   )
r   r   rg  rw  rF  recorded_namer  r  pkgtop_level_module_names
             r   IMPORT_NAME%InstructionTranslatorBase.IMPORT_NAME  s   ))A,((*..0kk !112!E7!H:Q{mT 	 NN*NN=1E!-0F"% NN	 z'')"//%H (3(=(=c(B1(E%++,AB++K8,,]EB%%**K899II*5@A+C	;   ,+K=XJhW\V]^ D9-889	s   F /F65F6c                H    U R                  U5        U R                  U5        g r   )DUP_TOP
_load_attrr  s     r   IMPORT_FROM%InstructionTranslatorBase.IMPORT_FROM   s    Tr   c                J   XR                   ;  a  [        SU S35      eU R                   U   n[        U5      (       aA  [        U R                  R
                  5      n[        X15      n[        R                  " XU5      $ [        U5      (       d   e[        R                  " US9$ )Nzname 'z' is not definedr3  )r<  r8   r  rF   r  %name_of_builtins_dict_key_in_fglobalsrE   rY   r@  rL   r^   rd  )r   rc  r<  builtins_source
var_sources        r   load_builtin_from_argval2InstructionTranslatorBase.load_builtin_from_argval&  s    (vh.>?@@oof%C==*AAO +?CJ"((J??&s++++#**55r   c                X    U R                  U R                  UR                  5      5        g r   )r<  r  rc  r  s     r   r>  &InstructionTranslatorBase.load_builtin6  s    		$//<=r   c                   U R                   c   eU R                  c   eUR                  c   e[        5       R	                  SU R                   U R                  -
  5        U R
                  UR                     U l         U R                   U l        g )Nir_count)r   rv  r"  rR   	incrementindexofr  s     r   r  InstructionTranslatorBase.jump9  s    ''333+++{{&&&''0043C3CC	
 $(<<#< 33r   FTc           	         UR                   c   eU R                  R                  [        XR                   [	        U R
                  5      5      5        g r   r"  r  r   r!  r   rj  r  s     r   
SETUP_LOOP$InstructionTranslatorBase.SETUP_LOOPK  9    {{&&&kk3tzz? STr   c           	         UR                   c   eU R                  R                  [        XR                   [	        U R
                  5      5      5        g r   r  r  s     r   SETUP_EXCEPT&InstructionTranslatorBase.SETUP_EXCEPTP  r  r   c                8    U R                   R                  5         g r   )r  r  r  s     r   	POP_BLOCK#InstructionTranslatorBase.POP_BLOCKU  s    r   c                &    U R                  U5        g r   setup_or_before_withr  s     r   
SETUP_WITH$InstructionTranslatorBase.SETUP_WITHX      !!$'r   c           	         UR                   c   eU R                  R                  [        XR                   [	        U R
                  5      5      5        g r   r  r  s     r   SETUP_FINALLY'InstructionTranslatorBase.SETUP_FINALLY[  s9    {{&&&kk3tzz? STr   c                &    U R                  S 5        g r   r  r  s     r   BEGIN_FINALLY'InstructionTranslatorBase.BEGIN_FINALLY_  s    		$r   c                    U R                  S5      u  p#Ub   eU R                  U5        U R                  UR                  U [        R                  " S 5      /S-  0 5      5        g )Nr  rM  )r>  r<  r=  r^   rd  )r   r   r0  r   s       r   WITH_CLEANUP_START,InstructionTranslatorBase.WITH_CLEANUP_STARTb  sV    IIaL	{{		#		$$$T,<,C,CD,I+JQ+NPRSTr   c                H    U R                  S5        U R                  S 5        g )Nr  )r>  r<  r  s     r   WITH_CLEANUP_FINISH-InstructionTranslatorBase.WITH_CLEANUP_FINISHh  s    		!		$r   c                   U R                  5       R                  5       n UR                  U 5      nU R                  U5        U R                  U5        g ! [        [
        R                  4 a  n[        U[
        R                  5      (       a  [
        R                  " U 5        [        R                  S:  a6  U R                  U5        U R                  [        R                  " S 5      5        U R                  U5         S nAg S nAff = fNr  )r  realizenext_variabler<  StopIterationr   ObservedUserStopIterationrR  r  rP  rQ  r^   rd  r  )r   r   itr<  r  s        r   FOR_ITER"InstructionTranslatorBase.FOR_ITERl  s    XXZ!	""4(CIIbMIIcNs<<= 	!S::;;--d3 7*
 		"		*11$78IIdOO	s   3A D.BDDc                v    [        U[        R                  [        45      (       a  UR	                  U / 0 5      nU$ r   )rR  r   r]   r   r=  r;  s     r   _create_exception_type0InstructionTranslatorBase._create_exception_type  s;    )++-NO
 

 ##D"b1C
r   c                   U R                  U5      n[        U R                  5      (       a]  [        U[        R
                  5      (       a>  UR                  [        L a+  [        R                  " [        5      R                  U / 0 5      nU R                  R                  U5        U R                  U5      (       a+  [        R                  " UR                  5      nU" SU 35      e[!        S[#        [        5      S/ [$        R&                  QS9  g )Nraised exception zFailed to raise exceptionz.Attempted to raise a non-Exception type/value.r  )r  r,   r  rR  r   rt   exc_typer  r]   r  r=  rs  r=  _isinstance_exceptionr   get_dynamo_observed_exceptionr7   r   r   r  )r   r<  observed_exception_types      r   _raise_exception_variable3InstructionTranslatorBase._raise_exception_variable  s     ))#.
 %%3	 ; ;<<-++L9GGbRTUC 	//4 %%c**&)&G&G&U#),=cU*CDD/HH1%001		
r   c                B   UR                   S:X  a  [        U R                  5      (       d%  [        S5      n[        R
                  " [        X/S9  [        U R                  5      (       d   eU R                  S   nU R                  U5      (       d   U5       eU R                  U5        g UR                   S:X  a!  U R                  S   nU R                  U5        g U R                  5       nU R                  5       n U R                  U5        U R                  R                  5       nU R                  U5      nUR                  U [        S5      U5        g ! U R                  R                  5       nU R                  U5      nUR                  U [        S5      U5        f = f)Nr   zNo active exception to reraiser   rj  r   	__cause__)r   r   rs  r^   r   raise_observed_exceptionr  r  r  rj  r  rC  r  call_setattr)r   r   r  r<  from_vtcurr_exccauses          r   r_  'InstructionTranslatorBase.RAISE_VARARGS  s^   88q=t(())&'GH,,\4eL t(())))##B'C--c227C72**3/XX]**R.C**3/ hhjG((*CR..s3  ,,BBD33G<%%d,<[,I5Q  ,,BBD33G<%%d,<[,I5Qs   <E A	Fc                    U R                   S   n[        U[        5      (       d   eUR                  [        L a  [        SSS/ S9  g U R                  U5        g )Nrj  z CLEANUP_THROW with StopIterationr   zRReceived StopIteration when handling generator.throw/close. This is not supported.r  )rj  rR  rt   r  r  r7   RERAISEr   r   toss      r   CLEANUP_THROW'InstructionTranslatorBase.CLEANUP_THROW  sQ    jjn#01111<<=(:p	 LLr   c                z   [         R                  S:  af  U R                  5       nUR                  (       a"  U R                  5       nU R	                  U5        g U R                  U5        U R	                  U5        g U R                  5       nU R                  5       nU R                  5       nU R	                  U5        g )Nr  )rP  rQ  r  rc  r  r<  )r   r   r<  r   _exc_tbs         r   r  !InstructionTranslatorBase.RERAISE  s     w&((*C{{HHJ..s3 		#..s388:D((*C((*C**3/r   c                L    [        U[        R                  [        [        45      $ r   )rR  r   rt   r   r   r;  s     r   r  /InstructionTranslatorBase._isinstance_exception  s&    ++12
 	
r   c                   [         R                  S:  ar  [        U R                  5      S:  d   eU R                  S   nU R                  S   nU R	                  U5      (       d   e[        UR                  5      n[        S 5      nOq[        U R                  5      S:  d   eU R                  S   nU R                  S   nU R	                  U5      (       d   e[        UR                  5      n[        S 5      nU R                  X$X5/0 5        g )Nr     rj     ir  )	rP  rQ  r   rj  r  r]   r  r^   r=  )r   r   rI  r<  typtbs         r   WITH_EXCEPT_START+InstructionTranslatorBase.WITH_EXCEPT_START  s    w& tzz?a'''BB**R.C--c2222!#,,/C!$'Btzz?a'''BB**R.C--c2222!#,,/C!$'B2S~r2r   c           	     	  ^ ^^ SmSUUU 4S jjn[         R                  S:  Ga/  T R                  R                  nU(       a  [	        T R
                  5      UR                  :  a5  T R                  5         [	        T R
                  5      UR                  :  a  M5  UR                  (       a9  T R                  [        R                  " T R                  R                  5      5        T R                  T R                  R                  5       5        T R                  U5        g T R
                  R!                  5         [#        T 5      [$        L a  U" 5         Te[	        T R&                  5      (       GaI  T R&                  R                  5       nUR(                  R*                  S:X  a  T R-                  S5        T R                  R                  5         [	        T R&                  5      S:X  aV  T R
                  R!                  5         [#        T 5      [$        L a(  [/        S[1        T5      TS-   / [2        R4                  QS	9  TeT R&                  R                  5       nUR(                  R*                  S:X  a  M  T R                  R                  5       nT R                  R7                  5         [	        T R
                  5      UR8                  :  a5  T R                  5         [	        T R
                  5      UR8                  :  a  M5  [;        S
SS S5      nT R&                  R=                  [?        US [	        T R
                  5      5      5        [	        T R                  5      S:  at  T R                  S   nT R                  [        R@                  " 5       5        T R                  U5        T R                  [        RB                  " URD                  5      5        OoT R                  [        R                  " S 5      5        T R                  [        R                  " S 5      5        T R                  [        R                  " S 5      5        T R                  [        R@                  " 5       5        T R                  U5        T R                  [        RB                  " URD                  5      5        T R                  U5        g T R
                  R!                  5         [#        T 5      [$        L a  U" 5         Te)NzDynamo found no exception handler at the top-level compiled function when encountering an exception. Exception will propagate outside the compiled region.c                 >  > TR                   R                  5       n [        R                  " U R	                  5       5      n[        TU5      (       d   e[        SSU R                  5        SU R                   S3T/ [        R                  Q[        R                  QS9  g )NzObserved exceptionr  r   r  r  )rs  rC  r   r  python_typerR  r7   python_type_namer   r   r  r  )r  
dynamo_excobserved_exn_gb_explanationraised_exceptionr   s     r   bubble_exception_to_interpreterTInstructionTranslatorBase.exception_handler.<locals>.bubble_exception_to_interpreter  s    ((>>@H::8;O;O;QRJ.
;;;;,+H,E,E,G+H(--XYZ7&11&22	r   r  EXCEPT_HANDLERrM  r   z#Observed exception (EXCEPT_HANDLER)z  This graph break is unexpected.r  g    .Ar  r  r   )#rP  rQ  rl  r
  r   rj  depthr  lastir<  r   r^   r  rs  rC  r  r   r-  rC  r  r   r   r>  r7   r   r   
DYNAMO_BUGr@  r#  r+   r   r!  rx   r]   r  )	r   r  r  r
  block_stack_entryexception_varexcept_handler_instold_exceptionr  s	   ``      @r   r  +InstructionTranslatorBase.exception_handler  s   d 	$
	 	 w& 44BBM
 $**o(;(;;HHJ $**o(;(;; !&&II!2243K3K3R3RS
 		$++AACD 		-( 

  ":!6635&&4##$$ %)$4$4$8$8$:!',,337GG IIaL%%))+4++,1 

((*:)>>,(M(+,<(=,G"D-E&E(9(D(D&E /.(,(8(8(<(<(>%' (,,337GG* !% 1 1 G G I!!AAC $**o(9(E(EEHHJ $**o(9(E(EE
 '2#7Gq&Q#  ''#$7s4::O
 t(()Q.$($5$5b$9M IIi779:IIm,IIi778N8NOP IIi88>?IIi88>?IIi88>? 		)3356		-(		)33M4J4JKL 		+, 

  ":!6635&&r   c                   U R                  5       n[        U R                  5      S:X  a  [        S 5      nOU R                  S   nU R	                  U5        U R	                  U5        U R                  R                  5         g )Nr   rj  )r  r   rs  r^   r<  r@  )r   r   r<  prev_excs       r   PUSH_EXC_INFO'InstructionTranslatorBase.PUSH_EXC_INFO  se    ( hhjt  !Q&(8(>H((,H		(		#99;r   c                   [         R                  S:  aG  U R                  5       n[        U R                  5      (       d   eU R                  R                  5         g [        U R
                  5      S:  d   eU R
                  S   R                  R                  S:w  a  [        S5      eU R
                  R                  5         U R                  S5        [        U R                  5      (       d   eU R                  R                  5         g )Nr  r   rj  r  zYBug in Dynamo tracing of exception handling.Top of the block stack is not EXCEPT_HANDLER.rM  )
rP  rQ  r  r   rs  r  r   r   r  r>  )r   r   r   s      r   
POP_EXCEPT$InstructionTranslatorBase.POP_EXCEPT  s    w&
At(())))!!#t''(1,,,#((//3CC$D    "IIaL t(())))!!#r   c                   [        U R                  5      S:  d   eU R                  5       n[        R                  S:  a  U R                  S   nOU R                  R                  5       n[        U[        [        [        [        45      (       d)  [        S[        U5      SU S3/ [        R                  QS9  [        R                  S:  a?  U R                  U5      (       d)  [        S[        U5      S	U S3/ [        R                  QS9  [        U[        5      (       a  UR                  nOU/nU H  n[        U[        [        [        45      (       d)  [        S
[        U5      SU S3/ [        R                  QS9  U R                  U5      (       a'  [!        UR"                  UR$                  5      (       a    g[        U[&        R                  5      (       d  M  [!        UR$                  UR$                  5      (       d  M    g   g)Nr  r  rj  z Exception with bad expected typez"`except ...` has unsupported type rO  r  zCaught non-Exception valuezCExcept expects to receive an object of Exception type but received z#Exception with non-type expectationz!`except ...` expects a non-type: TF)r   rj  r  rP  rQ  rR  r]   rr   r   r   r7   r   r   r  r  r   
issubclassr  rI  r   )r   expected_exc_typesexc_instanceexpected_typesexpected_types        r   check_if_exc_matches.InstructionTranslatorBase.check_if_exc_matches  s   4::!###!XXZw&  ::b>L
  ::>>+L 12	
 
 :./@AS@TTUV5)445	 w&--l;; 8-"efresst u9-889	 (-88/55N #N ,M#65  !A."CM?RS T9-889	 )),77J%%  = = L)*C*CDD!1!1J J / ,2 r   c                j    U R                  [        R                  " U R                  5       5      5        g r   )r<  r   r^   r  r  s     r   CHECK_EXC_MATCH)InstructionTranslatorBase.CHECK_EXC_MATCH		  s"    		),,T-F-F-HIJr   c                R    U R                  5       (       d  U R                  U5        g g r   )r  r  r  s     r   JUMP_IF_NOT_EXC_MATCH/InstructionTranslatorBase.JUMP_IF_NOT_EXC_MATCH	  s!    ((**IIdO +r   c                    UR                   S:X  a  U R                  U5        g U R                  [        UR                      " X R	                  S5      0 5      5        g )Nzexception matchr  )rc  r  r<  r   r>  r  s     r   
COMPARE_OP$InstructionTranslatorBase.COMPARE_OP	  sB    ;;++  &II)$++6tYYq\2NOr   c                b    U R                  [        [        5      U R                  5       /0 5        g r   )r=  r]   iterr  r  s     r   GET_ITER"InstructionTranslatorBase.GET_ITER	  s!    ?40488:,Cr   r   r  c                ~    U R                  UR                  5      nU R                  5       nU R                  X20 5        g r   r>  rc  r  r=  )r   r   r   rI  s       r   r\  'InstructionTranslatorBase.CALL_FUNCTION	  s/    yy%XXZ2R(r   c           	     ^   UR                   S:X  a  [        0 5      nU R                  5       nOgUR                   S:X  a!  U R                  5       nU R                  5       nO6[        SSUR                    3SUR                    3/ [        R
                  QS9  [        R                  S:  a'  U R                  5       n[        U[        5      (       d   eU R                  5       n[        R                  S:  a;  [        R                  S:  a'  U R                  5       n[        U[        5      (       d   e[        W[        5      (       d0  UR                  U 5      (       a  [        UR                  U 5      5      n[        W[        5      (       a  [        R                   " U ["        U5      n[        U[        5      (       a  [        U[        5      (       d4  [        S	S
[%        U5       S[%        U5       3S/ [        R&                  QS9  UR)                  5       nU R+                  XSR,                  U5        g )Nr   r   z%Variadic function call with bad flagszflags: zHAttempted to call a variadic function (CALL_FUNCTION_EX) with bad flags r  r  r  z0Variadic function call with bad args/kwargs typezargs type: z, kwargs type: z2Expected args to be a list and kwargs to be a dict)rc  rb   r  r7   r   r  rP  rQ  rR  rv   rm   has_force_unpack_var_sequencerr   force_unpack_var_sequencer   r]   call_custom_dictr   rW   r  keys_as_python_constantr=  r   )r   r   
kwargsvarsargsvarsnullrI  s         r   CALL_FUNCTION_EX*InstructionTranslatorBase.CALL_FUNCTION_EX	  s    ;;!*2.JxxzH[[AJxxzH?!$++/fgkgrgrfst5)445	 w&88:DdL1111XXZw&3+;+;g+E88:DdL1111&
 
44T::$X%G%G%MNH j";<<(99$jQJ($455Z)>
 >
 J%gh&7%8PZH[G\]P5)445	  779
2~~z:r   c                   U R                  5       nU R                  UR                  5      nU R                  5       n[        U[        5      (       a  UR                  5       (       d   eUR                  5       nUS [        U5      *  U[        U5      * S  pS[        [        X%5      5      n[        U5      [        U5      :X  d   eU R                  XCU5        g r   )r  r>  rc  rR  rr   r  r  r   r   zipr=  )r   r   argnamesr   rI  kwargs_listr  s          r   CALL_FUNCTION_KW*InstructionTranslatorBase.CALL_FUNCTION_KWR	  s    88:yy%XXZ(M22x7R7R7T7TTT..0 !1CM>2D#h-9I4Jkc(016{c(m+++2V,r   c                D   U R                  [        R                  " USS95        UR                  S   nU R                  S   U   n[
        R                  S:  a$  U R                  [        R                  " XS95        g U R                  [        R                  " XS95        g )Nr  r  r   co_namesr  )	r\  r   r  rc  r  rP  rQ  r  LOAD_METHODr   r   r   rc  s       r   LOAD_METHOD_SUPER+InstructionTranslatorBase.LOAD_METHOD_SUPER^	  s}    ;..tA>?kk!n"":.s3g%OOK//DE[00EFr   c                    U R                  [        R                  " USS95        UR                  S   nU R                  S   U   nU R                  [        R                  " XS95        g )Nr  r  r   r%  )r\  r   r  rc  r  r  r'  s       r   LOAD_ATTR_SUPER)InstructionTranslatorBase.LOAD_ATTR_SUPERg	  sV    ;..tA>?kk!n"":.s3++D@Ar   c                f   U R                  U5        U R                  5       n[        R                  S:  a#  U R	                  U5        U R                  U5        g [        R                  S:  a#  U R                  U5        U R	                  U5        g U R	                  U5        U R	                  S 5        g )Nr  r  )r  r  rP  rQ  r<  rL  r   r   objs      r   r&  %InstructionTranslatorBase.LOAD_METHODm	  s{    hhjw&IIcNNN4 ( NN4 IIcNIIcNIIdOr   c                    U R                  UR                  5      nU R                  5       nUb   eU R                  5       nU R                  XB0 5        g r   r  )r   r   r   dummyrI  s        r   CALL_METHOD%InstructionTranslatorBase.CALL_METHOD}	  sD    yy%
}}XXZ2R(r   c                    U R                  5       n[        [        5      R                  U U[        R
                  " UR                  5      /0 5      nU R                  U5        g r   )r  r]   r#  r=  r^   rd  rc  r<  )r   r   r/  r  s       r   r  $InstructionTranslatorBase._load_attr	  sN    hhj )77"))$++67

 			&r   c                    [         R                  S:  a&  UR                  S-  (       a  U R                  U5        g U R	                  U5        g )Nr  r  )rP  rQ  r   r&  r  r  s     r   	LOAD_ATTR#InstructionTranslatorBase.LOAD_ATTR	  s8    w&xx!|  &r   c                   U R                  5       nUR                  U 5      (       a  U R                  U5      $ U R                  S5      u  p4[	        U[
        5      (       a;  [	        U[        5      (       d&  U R                  (       a   SUR                   S35       e [        [        5      R                  U U[        R                  " UR                  5      U/0 5        g ! [         aU  nU R                  5       (       d  e [        R!                  SSS9  UR#                  5         UR%                  S5         S nAOS nAff = fUR'                  U R(                  5        g )Nr  zMutating module attribute z during export.zSTORE_ATTR triggered compileTr  r  )r  r   store_attr_graph_breakr>  rR  ry   r^   exportrc  r]   setattrr=  rd  r8   r  r  r  r  r  r   r   )r   r   r  r<  r/  r  s         r   
STORE_ATTR$InstructionTranslatorBase.STORE_ATTR	  s    nn&d##..t4499Q<c+,,ZEU5V5V {{ ,T[[MI?	*G$22&--dkk:C@
  	*4466II4tID!NN=))	* 	--d.G.GHs   AC 
D=(AD88D=c                   [        U R                  SS9  U R                  5       (       d  [        SSS/ S9  U R                  R                  U [        SU R                  5       /5      SS	9n[        R                  " U5      nS Ul	        U R                  R                  U/5        U R                  S5        U R                  R                  U R                  U R                  US
5      5        g )NzSTORE_ATTR-caused graph breakr  z-Should not compile partial graph (STORE_ATTR)r   zDynamo has determined when encountering an unsupported STORE_ATTR instruction (i.e. `obj.attr = val`) that it should not compile the partial graph.r  
store_attrr  r  F)r  r  r  r7   r  r  r<   r  r	  r
  r  r>  r  r  )r   r   r  r  s       r   r;  0InstructionTranslatorBase.store_attr_graph_break	  s    ))2QR0022Go %)KK$@$@%lT5G5G5I4JK %A %
!
 IIdO	"&	++YK8		!++&&%%'@%	
r   c                    U R                  5       n[        [        5      R                  U U[        R
                  " UR                  5      /0 5        g r   )r  r]   delattrr=  r^   rd  rc  r.  s      r   DELETE_ATTR%InstructionTranslatorBase.DELETE_ATTR	  s>    hhj .."))$++67	
r   c                  ^^^ SU l         UR                  S:X  a  [        S5      /$ UR                  S:X  a  [        SUR                  S9/$ [	        U R
                  R                  5      n[        U R                  5      [        US   R                  5      -
  nXRS   l
        UR                  [        SUS9/[        S5      QUR                  S5      PUR                  5       P[        SSS	5      Q5        / nU mTb"  UR!                  T5        TR"                  mTb  M"  [        U5      [        U5      :X  d   e[%        U5       GH  u  pxUS:X  a	  U(       a  M  ['        UR(                  UR*                  5       H  u  u  pn[-        [.        Xg   R                  U   5      nUR1                  [3        5       5        UR5                  U5        UR                  / [7        S5      QUR                  U5      PUR                  5       PUR                  U	5      P[        S
5      P5        M     UR8                   H  u  p[-        [.        Xg   R:                  U   5      nUR1                  [3        5       5        UR5                  U5        UR                  / [7        S5      QUR                  U5      PUR                  5       PUR                  UR                  UR<                  U   -   5      P[        S
5      P5        M     GM     / n/ n[%        U5       GH  u  pxXg   mTU L a  UnOTR>                  n[A        U5      (       a  URB                  (       d   eURB                  n[E        SURF                   35      nUR!                  U5        TU L Ga|  [I        TRJ                  U5      m[M        UU4S jTR:                  RO                  5        5       5      n[Q        URR                  5      m[M        U4S jU 5       5      n[M        U4S jU 5       5      nUR                  [3        5       UR                  U5      UR                  5       [3        5       /5        U Ha  nUR                  [3        5       UR                  UR                  UR<                  U   -   5      UR                  5       /[7        S5      Q5        Mc     UR                  [        S5      [        S[        U5      S9/[7        S5      Q[        UR                  SS	5      Q5        O8[M        UR<                  RO                  5       5      n[M        URR                  5      n[T        RV                  S:  a  [        U5      S:X  d   S5       eTRX                  RF                  c   e[        TR                  5      [        UR                  5      -
  n[Z        R\                  " TR^                  TR`                  TRX                  RF                  URF                  [M        S TRb                   5       5      UUU[M        S TRb                   5       5      [M        UR(                  5      [M        UR8                  5      [M        UR                  5      [M        U5      5      nUR!                  U5        [d        Rf                  " TR^                  5      Ri                  SS 5      " 5       nUb-  [j        Rl                  " U5      [d        Rf                  " U5      S'   URn                  (       a  TR
                  Rq                  UU5        SnO>TR
                  Rq                  U[r        Rt                  " UTRv                  U5      5        UnTRx                  c  GM]  TRx                  R{                  UTRv                  S   U5        GM     U(       a  SSK>J?n  U" US   5        US   Rn                  (       a  UR                  US   US   US   S	S5        O%UR                  UR                  US   S	S5      5        UR                  5         UR                  5         ['        XnU5       HQ  u  nnnURn                  (       a  UR                  UUUSS5        M/  UR                  UR                  USS5      5        MS     UR                  [        S[        U5      S9/[7        S5      Q5        UR                  [3        5       [3        5       UR                  S5      UR                  5       /[7        S5      QUR                  S5      P[        S5      P5        UR                  / [        S5      Q[        SSS9P[7        S5      Q[        SSS9P5        UR                  [        SSS9[        S5      /5        UR                  5       $ )a  
Codegen resume function(s) and call it.
Assumes that the unsupported instruction has already been run.

Expects the stack to be in the state:
    [
        frame N locals,
        frame N-1 stack + locals,
        ...,
        frame 1 stack + locals
    ], frame N stack (post-instruction)

Args:
    - inst: the instruction of the current (deepest) frame to resume at
    - all_stack_locals_metadata: metadata returned from OutputGraph.compile_subgraph - contains
        metadata such as local names, NULL positions, stack length, etc.
    - disable_current_frame_resume: If True, disable tracing on the current frame's resume function.
        Used for implementing nested step_graph_break.
Nr  r  r  r   
BUILD_LIST)r   r  TSTORE_SUBSCR__resume_at_c              3  d   >#    U  H%  nUT;   d  M  UTR                  5       ;  d  M!  Uv   M'     g 7fr   )r  )r   r   r  r  s     r   r   BInstructionTranslatorBase.create_call_resume_at.<locals>.<genexpr>W
  s7      %:Ez &'v/G/G/I&I A:s   
00	0c              3  6   >#    U  H  oT;  d  M
  Uv   M     g 7fr   r   r   r   argnames_null_sets     r   r   rL  ]
  s      WLqEV<VL   		c              3  6   >#    U  H  oT;   d  M
  Uv   M     g 7fr   r   rN  s     r   r   rL  ^
  s     %XAFWAWaarP  r  r  z&variables should not be NULL in < 3.12c              3  L   #    U  H  oR                   R                  v   M     g 7fr   )r"  r  r   r  s     r   r   rL  
  s     B/A!hhoo/As   "$c              3  @   #    U  H  oR                  5       v   M     g 7fr   )r,  rS  s     r   r   rL  
  s     @-?kkmm-?   orig_graphmodulec                     g r   r   r   r   r   r   AInstructionTranslatorBase.create_call_resume_at.<locals>.<lambda>
  s    Dr   r   r   )	skip_coderj  FDELETE_SUBSCRrM  LIST_EXTENDr  )Er   r   r&   rc  r0   r  root_txr   rj  stack_null_idxes	num_stackr  r$   r  r  r"   r   rx  	enumerater  stack_ctx_argsstack_ctx_idxes_origr   r_   append_outputr%   r  r)   locals_ctx_argsre  r  r  r-   r"  r.   r  r   rb  r+  keysr  locals_null_keysrP  rQ  rl  rA   lookupr  r   r  r/   get_contextr%  weakrefrefr  install_global_unsaferS  FunctionTyper:  r{  add_resume_function
eval_framerY  make_function_with_closureload_function_namer  r(   r  ) r   r   r  disable_current_frame_resumer  current_num_stacktxesr*  metajr   j_origrK  r   resume_namesresume_codesresume_instresume_nameall_argnamesr   argnames_nullr   	stack_lennew_codeorig_graphmodule_maybepackage_namerY  r   coderO  r  r  s                                 @@@r   r  /InstructionTranslatorBase.create_call_resume_at	  s   4 $( ;;.(&~677[[N*&~dkkJKKt{{**+  

Oc%a(99/
 
 2C!$.
"<5FG	Q	 $$Q'		
 '')	 %Q40		
* 6: KK]]F   4yC 9:::: !!:;GAAv6"%d&9&94;T;T"U2DGMM&4IJ  !12$$R(  $Q,,Q/ //1 ,,Q/	
 +>: #V   //2DG4K4KD4QR  !12$$R(  $Q,,Q/ //1 ,,T^^d>O>OPT>U-UV	
 +>: 0) <J -/ !:;GAWF~"$55
  ,,")))))00#l;3E3E2F$GHK, ~)&*=*={K$ %#3388:%  
 %((=(=$>!  WL WW %%X%X X   &(,,Q///1&(	 $C$$*,00 $1B1B31G G 335 )^	 $   *95*<S]K %Q
 -T^^T4H	 !!2!2!7!7!9: %d&;&; <')=)Q.X0XX.--44@@@ FLL)C0E0E,FFI'='D'D**11""Bv/A/ABB@V-?-?@@d))*d**+d++,l#(H ) &2%=%=fmm%L%P%P"L& &" &1IP*J((23EF
 ##33KJ# 33&&x1A1A;O  +~~)22f..z:Lm <t (-l1o& ''))R,r*L,<dA R22<3CT1MN 	!$lCNBd--b$eQG  !6!6tUA!FG	 D
 	"<S5FGQ	
& 	  $$R('') Q $$R( #?3	
  	a"<Q7 Q
 #=a8	
 	"#51=">2	
 ""$$r   c                   [         R                  S:  aU  U R                  R                  nU(       a8  U R                  (       a&  UR
                  U R                  S   R
                  La  g[        S U R                   5       5      =(       aY    U R                  (       + =(       aA    U R                  (       + =(       a)    U R                  (       + =(       a    U R                  (       + $ )Nr  rj  Fc              3  @   #    U  H  oR                  5       v   M     g 7fr   )r&  rS  s     r   r   IInstructionTranslatorBase.should_compile_partial_graph.<locals>.<genexpr>  s     :)9A)9rU  )rP  rQ  rl  r
  r  r"  r  r  r   r  r  )r   r   s     r   r  6InstructionTranslatorBase.should_compile_partial_graph  s    w&,,::E$$D<L<LR<P<W<W(W:)9)9:: 9NN"9---9 3339 888	
r   r   c                V    U R                  S5      u  p#nUR                  U SXB/0 5        g )NrM  __setitem__r>  call_method)r   r   r<  r/  keys        r   rI  &InstructionTranslatorBase.STORE_SUBSCR  s'    		!#mcZ<r   c                T    U R                  S5      u  p#UR                  U SU/0 5        g )Nr  __delitem__r  )r   r   r/  r  s       r   rZ  'InstructionTranslatorBase.DELETE_SUBSCR  s%    99Q<mcUB7r   c                n    U R                  UR                  5      nU R                  [        U5      5        g r   )r>  rc  r<  rr   r   r   r   s      r   BUILD_TUPLE%InstructionTranslatorBase.BUILD_TUPLE  %    		$++&		-&'r   c                n    U R                  UR                  5      nU R                  [        U5      5        g r   )r>  rc  r<  rq   r  s      r   BUILD_SLICE%InstructionTranslatorBase.BUILD_SLICE#  r  r   c                |    U R                  UR                  5      nU R                  [        U[	        5       S95        g Nmutation_type)r>  rc  r<  rp   rX   r  s      r   rH  $InstructionTranslatorBase.BUILD_LIST'  s+    		$++&		,u4D4FGHr   c                    [         R                  (       a  [        SSS/ S9  U R                  UR                  5      n[        U[        5       S9nU R                  U5        g )Nzmissing BUILD_SET handlerr   z:Missing BUILD_SET bytecode handler (for testing purposes).r  r  )r   +inject_BUILD_SET_unimplemented_TESTING_ONLYr7   r>  rc  rc   rX   r<  )r   r   r   new_sets       r   	BUILD_SET#InstructionTranslatorBase.BUILD_SET+  sO    ==3X	 		$++&e3C3EF		'r   c           	     @   U R                  UR                  5      n/ nU H$  n UR                  UR                  U 5      5        M&     U R                  U" U[        5       S95        g ! [         a,    [        S[        U5      U S3/ [        R                  QS9   M|  f = f)Nz-Failed to unpack object for BUILD_LIST_UNPACKzU cannot be unpacked into a list for the BUILD_LIST_UNPACK bytecode (`[*x, *y, ...]`).r  r  )r>  rc  extendr  NotImplementedErrorr7   r   r   r  r<  rX   )r   r   r  seqsr   seqs         r   BUILD_LIST_UNPACK+InstructionTranslatorBase.BUILD_LIST_UNPACK7  s    yy%C	S::4@A  			#e+;+=>? '  KH#&% (2 !29-889s    A''2BBc                ,    U R                  U[        S9  g )Nr
  )r  rr   r  s     r   BUILD_TUPLE_UNPACK,InstructionTranslatorBase.BUILD_TUPLE_UNPACKG  s    t7r   c           	         U R                  UR                  S-  5      n[        [        US S S2   USS S2   5      5      nU R	                  [        U[        5       S95        g )Nr  r   r  )r>  rc  r   r  r<  rb   rX   )r   r   r   ds       r   	BUILD_MAP#InstructionTranslatorBase.BUILD_MAPL  sS    		$++/*U3Q3Zqt!t-.		#A5E5GHIr   c                `   U R                  UR                  5      nU Vs/ s H#  n[        [        5      R	                  X/0 5      PM%     nn0 nU H5  n[        U[        5      (       d   eUR                  UR                  5        M7     U R                  [        U[        5       S95        g s  snf r  )r>  rc  r]   r   r=  rR  rb   updater   r<  rX   )r   r   r   r  r  s        r   BUILD_MAP_UNPACK*InstructionTranslatorBase.BUILD_MAP_UNPACKQ  s    		$++&MRSU&44T3CUS!#Aa!23333MM!''"  			.0	
 Ts   *B+c           
     r   U R                  5       nU R                  UR                  5      n[        U[        5      (       d   eUR                  5       (       d   eUR                  U 5      n[        U5      [        U5      :X  d   eU R                  [        [        [        X#5      5      [        5       S95        g r  )r  r>  rc  rR  rr   r  r  r   r<  rb   r   r  rX   )r   r   rd  r  s       r   BUILD_CONST_KEY_MAP-InstructionTranslatorBase.BUILD_CONST_KEY_MAPb  s    xxz4;;'$....&&((((--d34yCK'''		S&'.0	
r   c                   U R                  S5      u  p#UR                  S:  d   eUR                  c   eU R                  UR                  *    R	                  5       n[        U[        5      (       d   eUR                  U SX#40 5        g )Nr  r   r  )r>  rc  r   rj  r  rR  rb   r  )r   r   r   r   r/  s        r   MAP_ADD!InstructionTranslatorBase.MAP_ADDr  sv    yy|{{Qxx###jj$((#++-#01111maVR8r   c                    U R                  5       nUR                  S:  d   eUR                  c   eU R                  UR                  *    n[	        U[
        5      (       d   eUR                  5       (       d   eUR                  U SU/0 5        g )Nr   r  r  rc  r   rj  rR  rc   
is_mutabler  r   r   r   r/  s       r   SET_ADD!InstructionTranslatorBase.SET_ADDz  s{    HHJ{{Qxx###jj$((##{++++~~eaS"-r   c                    U R                  5       nUR                  S:  d   eUR                  c   eU R                  UR                  *    n[	        U[
        5      (       d   eUR                  5       (       d   eUR                  U SU/0 5        g Nr   r  r  r  s       r   
SET_UPDATE$InstructionTranslatorBase.SET_UPDATE  s{    HHJ{{Qxx###jj$((##{++++~~hR0r   c                   U R                  5       nUR                  S:  d   eUR                  c   eU R                  UR                  *    R	                  5       n[        U[        5      (       d   eUR                  5       (       d   eU R                  R                  R                  U5        UR                  R                  U5        g r   )r  rc  r   rj  r  rR  rp   r  r  r  mutationr   r   r  s       r   LIST_APPEND%InstructionTranslatorBase.LIST_APPEND  s    HHJ{{Qxx###jj$((#++-#|,,,,~~  ))#.		r   c                   UR                   n[        R                  S:  a  U R                  5       nU R                  5       n[        R                  S:  aE  [	        UR
                  S5      (       d   e[        R                  " UR
                  R                  S9nS nS nS nS n[        R                  S:  ak  Ubh  US-  (       a  U R                  5       nUS-  (       a  U R                  5       nUS-  (       a  U R                  5       nUS-  (       a  U R                  5       nU R                  [        WUU R                  UUUU5      5        g )	Nr  co_qualnamer3  r     r  r  r   )r   rP  rQ  r  r*  r  r^   rd  r  r<  rg   r:  )	r   r   flagsfn_namer  defaultsclosurer   
kwdefaultss	            r   MAKE_FUNCTION'InstructionTranslatorBase.MAKE_FUNCTION  s   g%hhjGxxzw& 4::}5555&--DJJ4J4JKG
g% 4<"hhjG4<"&((*K4<!%J4<#xxzH		&
	
r   c           	     P   U R                  5       n[        U[        5      (       a$  UR                  U [	        UR
                  5      S9nO[        U[        5      (       a  [        UR                  [        5      (       a`  [        UR                  R                  5       UR                  5      n[	        UR
                  5       Vs/ s H  n[        XU   5      PM     nnOPUR                  U 5      (       a  UR                  U 5      nO([        S[        U5      U S3/ [         R"                  QS9  [%        W5      UR
                  :w  a8  [        SSUR
                   S[%        U5       3U S3/ [         R&                  QS9  [)        U5       H  nU R+                  U5        M     g s  snf )	N)idxesz+Failed to unpack object for UNPACK_SEQUENCEzV cannot be unpacked into a list for the UNPACK_SEQUENCE bytecode (i.e. `a, b, c = d`).r  z9Length mismatch when unpacking object for UNPACK_SEQUENCEzexpected length: z
, actual: za unpacked to a list for the UNPACK_SEQUENCE bytecode (i.e. `a, b, c = d`) with unexpected length.)r  rR  r|   r  r  rc  ru   r/  r#  as_proxyr   r\   r  r  r7   r   r   r  r   r  r   r<  )r   r   r  r<  proxyr*  s         r   UNPACK_SEQUENCE)InstructionTranslatorBase.UNPACK_SEQUENCE  sa   hhjc>**))$eDKK6H)IC_--*SWWn2U2UCGG,,.9E:?:LM:LQ=Qx0:LCMC..t44//5CEC"e $( (5)445 s8t{{"S+DKK=
3s8*M"e $? ?5)445 #AIIaL ' Ns   F#c                |   SUR                   s=::  a  S::  d   e   eUR                   S-  nUR                   S-	  nU R                  5       nUR                  U 5      (       a  [        UR	                  U 5      5      n[        U5      X#-   :  d   eUS U nXR[        U5      U-
   nU[        U5      U-
  S  n[        U5       H  n	U R                  U	5        M     U R                  [        U5      5        [        U5       H  n	U R                  U	5        M     g [        S[        U5      U S3/ [        R                  QS9  g )Nr   i     r  z%Failed to unpack object for UNPACK_EXz; cannot be unpacked into a list for the UNPACK_EX bytecode.r  )rc  r  r  r   r  r   r   r<  rr   r7   r   r   r  )
r   r   prefixsuffixr  r	  vals_prefix	vals_listvals_suffixitems
             r   	UNPACK_EX#InstructionTranslatorBase.UNPACK_EX  s'   DKK)6)))))t#!hhj,,T2255d;<Dt9///w-Kc$i&&89Is4y6134K -		$ .IImI./ -		$ . ?C"e#^_5)445	r   c                B    U R                   (       a  [        SSSS/S9  g g )Nz#Forced graph break on leaf functionr   z:Forced graph break for nested graph break testing purposeszGSet torch._dynamo.config.debug_force_graph_break_on_leaf_return = Falser  )rw  r7   r  s     r   graph_break_on_leaf_function6InstructionTranslatorBase.graph_break_on_leaf_function  s)    =X]	 r   c                H    UR                   S:X  a  U R                  U5        g g )NGRAPH_BREAK_IF_LEAF)rc  r  r  s     r   r  InstructionTranslatorBase.NOP  s"    ;;//--d3 0r   c                $    U R                  5         g r   r  r  s     r   r  !InstructionTranslatorBase.POP_TOP      
r   c                    U R                  5       nU R                  5       nU R                  U5        U R                  U5        g r   r  r<  r   r   ar  s       r   ROT_TWO!InstructionTranslatorBase.ROT_TWO  s.    HHJHHJ		!		!r   c                    U R                  5       nU R                  5       nU R                  5       nU R                  U5        U R                  U5        U R                  U5        g r   r  )r   r   r  r  cs        r   	ROT_THREE#InstructionTranslatorBase.ROT_THREE  sD    HHJHHJHHJ		!		!		!r   c                   U R                  5       nU R                  5       nU R                  5       nU R                  5       nU R                  U5        U R                  U5        U R                  U5        U R                  U5        g r   r  )r   r   r  r  r  r  s         r   ROT_FOUR"InstructionTranslatorBase.ROT_FOUR  sZ    HHJHHJHHJHHJ		!		!		!		!r   c                h    U R                  5       nU R                  U5        U R                  U5        g r   r  )r   r   r  s      r   r  !InstructionTranslatorBase.DUP_TOP  s#    HHJ		!		!r   c                    U R                  5       nU R                  5       nU R                  U5        U R                  U5        U R                  U5        U R                  U5        g r   r  r  s       r   DUP_TOP_TWO%InstructionTranslatorBase.DUP_TOP_TWO#  sD    HHJHHJ		!		!		!		!r   c                    US:X  a   [        [        5      R                  X/0 5      $ US:X  a   [        [        5      R                  X/0 5      $ US:X  a   [        [        5      R                  X/0 5      $ U$ )Nr   r  rM  )r]   r   r=  reprascii)r   r  flags      r   _convert_value(InstructionTranslatorBase._convert_value+  sj    19"3'55dGRHHQY"4(66tWbIIQY"5)77grJJr   c                   U R                  5       n[        U[        5      (       a;  SSKJnJn  UR                  " U" X15      UR                  S9nU R                  U5        g U R                  X2S-  5      n[        R                  " SUR                  5       -   S-   5      nU R                  [        [        R                  5      Xc/0 5        g )Nr   )LazySymNodeFormatStringrl   ry  rM  z{:})r  rR  r{   torch._dynamo.variables.lazyr  rl   rd  r  r<  r  r^   r  r=  r]   r   format)r   fmt_specr  r  r  rl   fmt_vars          r   _format_value'InstructionTranslatorBase._format_value4  s    
e_--
 (..'8E IIe##E4<8"))$1L1L1N*NQT*TU?3::68H"Mr   c                    UR                   nUc   eUS-  S:X  a  U R                  5       nO[        R                  " S5      nU R	                  X25      $ )Nr  r   )r   r  r^   rd  r
  )r   r   r  r  s       r   FORMAT_VALUE&InstructionTranslatorBase.FORMAT_VALUEH  sO       DLT!xxzH'..r2H!!(22r   c           
     v   / n/ n0 nUR                   c   eU R                  UR                   5       GHF  n[        U[        5      (       a$  UR	                  S5        UR	                  U5        M=  [        U[
        R                  5      (       a  UR	                  UR                  5        UR                  UR                  5        [        UR                  5       5      [        UR                  R                  5       5      -  (       a/  [        SSU SU SUR                   3S/ [        R                  QS9  UR!                  UR                  5        GM!  [        S[#        U5      S	/ [        R                  QS9  GMI     U R%                  [
        R                  R'                  S
R)                  U5      X45      5        g )Nz{}zBUILD_STRING key conflictzformat_string_parts: z
, kwargs: z, part.sym_kwargs: z1Failed to build format string due to key conflictr  zBUILD_STRING type errorzLFormat string part type is not correct - expected constant or format string.r   )r   r>  rR  r^   r   r   StringFormatVariableformat_stringr  sym_argsr  rd  
sym_kwargsr7   r   r  r  r   r<  rd  r   )r   r   format_string_partsr   r  parts         r   BUILD_STRING&InstructionTranslatorBase.BUILD_STRINGR  ss   )+&(-/xx###IIdhh'D$ 011#**40D!D)"@"@AA#**4+=+=>DMM*v{{}%DOO,@,@,B(CC$ ;"78K7LJW]V^^qrv  sB  sB  rC  !D$W= 1 < <=	 doo. 5I n9-889	! (, 			**11+,d	
r   c                    UR                   S:X  d  UR                   S:X  d   eUR                   S:X  a  SnOSn[        SUS9nU R                  U5        g )Nr   r   iszis notr  r  )rc  r&   r  )r   r   
new_argvalnew_insts       r   IS_OPInstructionTranslatorBase.IS_OPs  sM    {{a4;;!#333;;!J!J%l:F!r   c           	        UR                   S:X  d  UR                   S:X  d   eU R                  S5      u  p#UR                   n U R                  UR                  U SU/0 5      5        US:X  a  U R                  U5        g g ! [        R
                  [        4 ak  n[        U[        5      (       a  UR                  5         U R                  U R                  [        R                  " U [        5      X#/0 5      5         S nANS nAff = f)Nr   r   r  __contains__)rc  r>  r<  r  r   ObservedTypeErrorr8   rR  r  r  rY   r@  r>   	UNARY_NOT)r   r   leftrightr)  r  s         r   CONTAINS_OP%InstructionTranslatorBase.CONTAINS_OP|  s    {{a4;;!#333iil[[	IIe''ntfbIJ$ 7NN4   !! 
 	 $,,&&(II00#))$0IJM 	s   $B   DA!D  Dc                    U R                  5       nUR                  S:  d   eUR                  c   eU R                  UR                  *    n[	        U[
        5      (       d   eUR                  5       (       d   eUR                  U SU/0 5        g )Nr   r  )r  rc  r   rj  rR  rp   r  r  r  s       r   r[  %InstructionTranslatorBase.LIST_EXTEND  s{    HHJ{{Qxx###jj$((##|,,,,~~hR0r   c                ~    U R                  [        [        5      R                  X R	                  5       /0 5      5        g r   )r<  r]   r+  r=  r  r  s     r   LIST_TO_TUPLE'InstructionTranslatorBase.LIST_TO_TUPLE  s(    		/%(66thhj\2NOr   c                p   U R                   S   nU R                  U5      (       d   eUR                  [        L a|  [        R
                  " [        5      R                  U [        S5      /0 5      nUR                  U [        S5      U5        UR                  U [        S5      U5        X0R                   S'   g g )Nrj  zgenerator raised StopIterationrG  r  )
rj  r  r  r  r   r]   r  r=  r^   r  )r   r   r<  new_vals       r   STOPITERATION_ERROR-InstructionTranslatorBase.STOPITERATION_ERROR  s     jjn))#....<<=(//=KK!"BCDG
   '7'FL  '7'DcJ$JJrN )r   c                <   U R                  5       nUR                  S:  d   eUR                  c   eU R                  UR                  *    R	                  5       n[        U[        5      (       d   eUR                  5       (       d   eUR                  U SU/0 5        g r  )	r  rc  r   rj  r  rR  rb   r  r  r  s       r   
DICT_MERGE$InstructionTranslatorBase.DICT_MERGE  s    HHJ{{Qxx###jj$((#++-#01111~~hR0r   c                $    U R                  5         g r   r  r  s     r   	GEN_START#InstructionTranslatorBase.GEN_START  r  r   c                   U R                   S   nUR                  5       (       a=  U R                  [        R                  " [        UR                  5       5      5      5        g U R                  UR                  U S/ 0 5      5        g )Nrj  r  )rj  r  r<  r^   rd  r   r  r  r  s      r   GET_LEN!InstructionTranslatorBase.GET_LEN  s_    jjn!!##II&--c#2H2H2J.KLMIIcoodIr2>?r   c                L   U R                   S   n[        U[        5      (       d   e[        UR                  [        R
                  R                  5      (       a&  U R                  [        R                  " S5      5        g U R                  [        R                  " S5      5        g Nrj  TF)
rj  rR  rb   r   collectionsabcMappingr<  r^   rd  r  s      r   MATCH_MAPPING'InstructionTranslatorBase.MATCH_MAPPING  sn    jjn#01111cii!8!899II&--d34II&--e45r   c                   U R                   S   nUR                  5       (       d   eUR                  5       n[        U[        R
                  R                  5      (       aF  [        U[        [        [        45      (       d&  U R                  [        R                  " S5      5        g U R                  [        R                  " S5      5        g r9  )rj  r  r  rR  r:  r;  r   r   bytes	bytearrayr<  r^   rd  )r   r   r  	tos_values       r   MATCH_SEQUENCE(InstructionTranslatorBase.MATCH_SEQUENCE  s    jjn%%''''**,	i!9!9:::UI.D
 D
 II&--d34II&--e45r   c                V  ^ U R                   S   nU R                   S   m[        T[        5      (       d   e[        U4S jU 5       5      (       au  U R	                  [        U Vs/ s H  nTR                  X5      PM     sn5      5        [        R                  S:  a&  U R	                  [        R                  " S5      5        g g U R	                  [        R                  " S 5      5        [        R                  S:  a&  U R	                  [        R                  " S5      5        g g s  snf )Nrj  r  c              3  ,   >#    U  H	  oT;   v   M     g 7fr   r   )r   r   tos1s     r   r   7InstructionTranslatorBase.MATCH_KEYS.<locals>.<genexpr>  s     &#QDy#s   r  TF)rj  rR  rb   r  r<  rr   getitem_constrP  rQ  r^   rd  )r   r   r  r   rG  s       @r   
MATCH_KEYS$InstructionTranslatorBase.MATCH_KEYS  s    jjnzz"~$ 12222&#&&&IIm#$N#QT%7%7%@#$NOP')		*11$78 * II&--d34')		*11%89 * %Os   %D&c                D    U R                  U R                  S5      5        g )Nr  )r<  r  r  s     r   rZ  .InstructionTranslatorBase.LOAD_ASSERTION_ERROR  s    		$//0@ABr   c                >    [        SSSS/[        R                  QS9  g )Nz'LOAD_BUILD_CLASS bytecode not supportedr   zPDynamo does not support tracing classes that are defined in the compiled region.z5Move the class definition out of the compiled region.r  r  r  s     r   LOAD_BUILD_CLASS*InstructionTranslatorBase.LOAD_BUILD_CLASS  s)    =jG"..		
r   c                |    UR                   S:X  a  U R                  U5        SU l        g U R                  (       a   eg )Nr   F)r   append_prefix_instrm  r  s     r   RESUME InstructionTranslatorBase.RESUME  s5    88q=##D)&+D#.....r   c                R    UR                   c   e[        UR                      " X5      $ r   )r   _binary_op_lookupr  s     r   	BINARY_OP#InstructionTranslatorBase.BINARY_OP&  s&    88'''$TXX.t::r   c                    g r   r   r  s     r   r]  !InstructionTranslatorBase.PRECALL*      r   c                    U R                   S   UR                     n[        U[        5      (       d   eU H  n[        U[        5      (       a  M   e   U R
                  b   e[        R                  " US9U l        g )N	co_constsr3  )r  r   rR  r+  r   r  r^   rd  )r   r   r  r   s       r   r  "InstructionTranslatorBase.KW_NAMES-  sm    $$[1$((;(E****DdC(((( }}$$$(//h?r   c                6    U R                  [        5       5        g r   )r<  rv   r  s     r   rL  #InstructionTranslatorBase.PUSH_NULL5  s    		,.!r   c                X   U(       ac  [         R                  S:  d   eU R                  5       n[        U[        5      (       a  UR                  5       (       d   eUR                  5       nO)U R                  (       a  U R                  R                  OSnUR                  c   eU R                  UR                  S-   5      n[         R                  S:  a&  US   n[        US   [        5      (       a  / OUS   /nO+[        US   [        5      (       a  US   n/ nOUS   nUS   /nU(       aO  XdS[        U5      *  -   nU[        U5      * S  n[        [        X75      5      n[        U5      [        U5      :X  d   eO	XdSS  -   n0 n U R                  XVU5        S U l        g ! S U l        f = f)Nr  r   r  r   r   )rP  rQ  r  rR  rr   r  r  r  r  r   r>  rv   r   r   r  r=  )	r   r   call_kwr  contentsrI  r   r!  r  s	            r   _callInstructionTranslatorBase._call8  s    ##w...xxzHh668;V;V;X;XXX224H.2mmt}}**Hxx###99TXX\*w&!B#HQK>>2Xa[MD(1+|44a[a[ }1H~66D"CM>#34K#h45Fv;#h-///12,&DF	! r0 DMDDMs   F   	F)c                &    U R                  U5        g r   rd  r  s     r   r^  InstructionTranslatorBase.CALLb  s    

4r   c                t    UR                   c   eU R                  U R                  UR                   *    5        g r   )r   r<  rj  r  s     r   COPYInstructionTranslatorBase.COPYf  s-    xx###		$**dhhY'(r   c                    UR                   c   eU R                  UR                   *    U R                  S   sU R                  S'   U R                  UR                   * '   g Nrj  )r   rj  r  s     r   SWAPInstructionTranslatorBase.SWAPj  sM    xx###04

DHH90EtzzRT~-

2

DHH9-r   c                    g r   r   r  s     r   CACHEInstructionTranslatorBase.CACHEv  r[  r   c                &    U R                  U5        g r   r  r  s     r   BEFORE_WITH%InstructionTranslatorBase.BEFORE_WITHy  r  r   c           	        U R                  5       n[        U[        [        45      (       d#  [	        SSU 3SUR                  5        S3/ SQS9  [        U[        5      (       a0  UR                  5       (       d  U R                  R                  U5        [        U[        [        45      (       d   e[        UUR                  5      n[        R                  S:  a  UR                  (       aD  U R                  (       a0  UR                  R                  U R                  S   R                  La  S nOFU R                  R                  c   eU R                  R                  R                  nOUR                  nU R!                  U5        U(       a  [        U ["        5      (       d  [$        R&                  (       a:  U R                  R                  [)        X[+        U R,                  5      U5      5        O8U R                  R                  [)        X[+        U R,                  5      5      5        U R!                  UR/                  U 5      5        g )	NzUnsupported context managerz$Attempted SETUP_WITH/BEFORE_WITH on z%Dynamo does not know how to enter a `z` context manager.)z,Avoid using the unsupported context manager.aE  If the context manager seems like it should be supported (e.g. torch.set_grad_enabled), then it may be the case that it was created outside the compiled region, which Dynamo does not support. Supported context managers can cross graph break boundaries only if they are local non-closure variables, or are intermediate values.zFile an issue to PyTorch. Simple context managers can potentially be supported, but note that context managers can't be supported in generalr  r  rj  )r  rR  r_   r`   r7   r  supports_graph_breaksr  r   ra   r"  rP  rQ  r
  r  r  r<  rC  r   r  r!  r   rj  enter)r   r   rK  r0  r"  s        r   r  .InstructionTranslatorBase.setup_or_before_with|  s   hhj)+IJ
 
 5>seDCCDXDXDZC[[mn	  s:;;--//0077< )+IJ
 
 	
 
 (KK

 w&
 !!$$%%,,D4D4DR4H4O4OO,,::FFF..<<CC[[F		$$ 566&:T:T  ''#D#djj/3G   ''c$**o(VW		#))D/"r   c                `    U R                   (       d   eU R                  R                  U5        g r   )rm  ro  r   r  s     r   rR  ,InstructionTranslatorBase.append_prefix_inst  s%    &&&&  &r   c                D   [         R                  S:  a{  U R                  (       dj  [        U R                  UR
                     [        5      (       d   eU R                  R                  R                  5       U R                  UR
                  '   g U R                  U5        g r  )rP  rQ  rm  rR  re  rc  rv   r  r  track_cell_newrR  r  s     r   	MAKE_CELL#InstructionTranslatorBase.MAKE_CELL  sv    w&t/F/F d224;;?NNNN((779   - ##D)r   c                &    U R                  U5        g r   rR  r  s     r   COPY_FREE_VARS(InstructionTranslatorBase.COPY_FREE_VARS      %r   c                &    U R                  U5        g r   r  r  s     r   RETURN_GENERATOR*InstructionTranslatorBase.RETURN_GENERATOR  r  r   c                p    [         R                  S:  a  U R                  5         g U R                  S5        g )Nr  r  )rP  rQ  r  r>  r  s     r   END_FOR!InstructionTranslatorBase.END_FOR  s$    w&HHJIIaLr   c                    [        U R                  R                  UR                  S 5      [        5      (       a3  [        SUR                  SUR                   3/ [        R                  QS9  U R                  U5        g )Nz)LOAD_FAST_CHECK on uninitialized variablez/Attempted to load uninitialized local variable r  )	rT   re  r%  rc  rv   r7   r   r  r  r  s     r   LOAD_FAST_CHECK)InstructionTranslatorBase.LOAD_FAST_CHECK  sc    $&&**4;;=|LLCMdkk][5)445	 	tr   c                    UR                   U R                  ;  a  U R                  [        5       5        OU R	                  U5        [        5       U R                  UR                   '   g r   )rc  re  r<  rv   r  r  s     r   LOAD_FAST_AND_CLEAR-InstructionTranslatorBase.LOAD_FAST_AND_CLEAR  sD    ;;d222IIln%NN4 ,8NT[[)r   c                    U R                  [        R                  " USS95        UR                  c   eUR                  S-  (       a  U R	                  U5        g U R                  U5        g )Nr  r  r   )r\  r   r  r   r&  r  r  s     r   LOAD_SUPER_ATTR)InstructionTranslatorBase.LOAD_SUPER_ATTR  sR    ;..tA>?xx###88a<T"OOD!r   c                   UR                   S:X  a  U R                  U5        g UR                   S:X  a  U R                  U5        g UR                   S:X  a8  U R                  [	        U R                  5       R                  U 5      5      5        g [        SSUR                    3SUR                    S3/ [        R                  QS9  g )	NrM        z Missing CALL_INTRINSIC_1 handlerzCALL_INTRINSIC_1 operand: z,No handler implemented for CALL_INTRINSIC_1 z instruction.r  )
rc  r-  UNARY_POSITIVEr<  rr   r  r  r7   r   r  r  s     r   CALL_INTRINSIC_1*InstructionTranslatorBase.CALL_INTRINSIC_1  s    ;;!$$T*[[A%[[AIImDHHJ$H$H$NOP:4T[[MBJ4;;-Wde6)556	r   c                f    U R                  5       nU R                  5         U R                  U5        g r   r  r  s      r   END_SEND"InstructionTranslatorBase.END_SEND  s!    hhj
		#r   c                $    U R                  USS9  g )NT)rb  rg  r  s     r   CALL_KW!InstructionTranslatorBase.CALL_KW  s    

4
&r   c                <    U R                   R                  S;   d   eg )N)POP_JUMP_IF_TRUEPOP_JUMP_IF_FALSEr!  )r  r   r  s     r   r  !InstructionTranslatorBase.TO_BOOL  s'     $$++ 0
 
 	
 
r   c                <   UR                   nUc   eU R                  5       n[        U[        5      (       d   eU R                  5       nUS-  (       a  XCl        O2US-  (       a  XCl        O!US-  (       a  XCl        OUS-  (       a  XCl        U R                  U5        g )Nr  r  r  r   )	r   r  rR  rg   r  r   r  r  r<  )r   r   r  rI  attrs        r   SET_FUNCTION_ATTRIBUTE0InstructionTranslatorBase.SET_FUNCTION_ATTRIBUTE  s|       XXZ"89999xxz4<JT\!NT\ MT\K		"r   c                v    U R                  U R                  U R                  5       UR                  5      5        g r   )r<  r  r  rc  r  s     r   CONVERT_VALUE'InstructionTranslatorBase.CONVERT_VALUE.  s%    		$%%dhhj$++>?r   c                P    U R                  [        R                  " S5      S5        g )Nr   r   )r
  r^   rd  r  s     r   FORMAT_SIMPLE'InstructionTranslatorBase.FORMAT_SIMPLE1  s    +2226:r   c                D    U R                  U R                  5       S5        g r   )r
  r  r  s     r   FORMAT_WITH_SPEC*InstructionTranslatorBase.FORMAT_WITH_SPEC4  s    488:q)r   c                R    U R                   R                  5       S:  a	  S U l        gg)Nr   c                     gNTr   r   r   r   r   >InstructionTranslatorBase.is_non_empty_graph.<locals>.<lambda>:  s    dr   TF)r  count_callsr  r   s    r   r  ,InstructionTranslatorBase.is_non_empty_graph7  s%    ;;""$q(&2D#r   c           
         Uc  / nSR                  [        R                  " U R                  5       /[	        [        U5      5      -   5      5      $ )Nr   )r   rt  r  r  r   r   )r   additional_stack_framess     r   format_frame_summary.InstructionTranslatorBase.format_frame_summary>  sN     #*&(#ww!!##%&h7N.O)PP
 	
r   c           	         [         R                  " [        U R                  SS5      U R                  [        U R                  SS5      SS9$ )Nrk  	<unknown>r  F)lookup_line)rt  FrameSummaryr#  r  r   r   s    r   r  'InstructionTranslatorBase.frame_summaryI  s?    %%DKK<KKDKKK8	
 	
r   c                    [        U R                  SS5      n[        R                  " S5      nUR	                  U5      S L$ )Nrk  r  z.*torch/nn/modules.*)r#  r  recompilematch)r   r   nn_modules_patterns      r   is_co_filename_from_nn_modules8InstructionTranslatorBase.is_co_filename_from_nn_modulesQ  s:    4;;{CZZ(?@!''1==r   c                    U R                   R                  U[        R                  " U5      5      n[	        [        U5      R                  [        R                  5      5        U$ r   )	r  install_global_by_idrh  ri  r;   rG   r  r:   WEAKREF_ALIVE)r   r  r  global_names       r   store_global_weakref_by_id4InstructionTranslatorBase.store_global_weakref_by_idV  sJ    kk66vw{{5?QR,778R8RS	
 r   c                B    U R                   R                  R                  $ r   )r  tracing_context	fake_moder   s    r   r  #InstructionTranslatorBase.fake_mode]  s    {{**444r   c              #  \   #    U R                   nXl          Sv   X l         g! X l         f = f7f)zh
Strict mode is enabled on a per-VariableTracker level depending on the return value of check_fn(node).
N)ru  )r   check_fnpriors      r   strict_translation_mode1InstructionTranslatorBase.strict_translation_modea  s,      %% (	*$)!E!s   ,! ,),c                
   U R                   c   eU R                   S:  d   eU R                  R                  U R                  R                  U R
                  U R                   S-
  U R                  U R                   S-
     5      $ rF  )r   r  r   r  rk  r   rb  r   s    r   r  #InstructionTranslatorBase.speculateo  s|    ''333''!+++##((KK##KK$$q(d66:;	
 	
r   c                  > [         TU ]  5         Xl        Xl        Xl        Xpl        Xl        Xl        S U l        / U l	        SU l
        S U l        [        S5      U l        / U l        / U l        SU l        S U l        SU l        / U l        Xl        X l        [-        U R*                  5      U l        UU l        X@l        XPl        X`l        Xl        Ub&  [:        R<                  (       a  [?        U
UUS9U l         OS U l         0 U l!        0 U l"        Xl#        SU l$        SU l%        SU l&        S U l'        S U l(        SU l)        S U l*        / U l+        UU l,        [Z        R\                  S:  aC  SS	K/J0nJ1nJ2nJ3n  U
Rh                  UU-  U-  U-  -  (       a  U Rk                  [m        S 5      5        Xl7        SU l8        S /[s        U
Rt                  5      -  U l;        [x        R{                  [|        R~                  5      U l@        [        R{                  [|        R~                  5      U lB        [        R                  " U
R                  U5        g )
Nr   r  rj  T)r  r  r  FrL  r   )CO_ASYNC_GENERATORCO_COROUTINECO_GENERATORCO_ITERABLE_COROUTINE)Fr!  r"  r  distributed_stater  re  rf  rg  rh  rj  r   rv  r&   rl  r  r  r   r  rm  ro  rs  rb  r   r  r  r:  r<  r  r  r   replay_record_enabledr@   rt  nn_module_stack	num_callsr<  r  r   r  rr  ru  rw  rx  ry  r{  rP  rQ  resume_executionr  r  r  r  co_flagsr<  r]   rp  rq  r   r]  r4  r  r  r   r  r  r  r  r  	lazycacherk  )r   r  rb  r  r:  r<  r  re  rf  rg  r  r<  rp  r  rs  r  r  r{  r  r  r  r  r+  s                         r   r"  "InstructionTranslatorBase.__init__y  s+   * 	.!2 . 0-J* -1),.
#$ #5e#< UW,"&( 0</:4;L;L/M 	 *3*4,8&, 6#?#?!2W<"D "&D BD)+ $)!*/'#'  $"w&  |+.CCFXX 		/$/0().&CG&3L
 C

 ++GMM: 	* ))'--8 	( 	F..	:r   )-r  r4  rm  r  r  r  rl  rr  ry  r  r   rt  rs  r<  r<  r  r:  r  rq  r  rp  r   rb  rw  r  r  r  r  r  r   r  r  r  r  r{  rx  rh  ro  r  rj  rv  ru  rf  re  rg  r   r  )r   z	list[str])rI  rY   r   ri  r  rd  r   r   )rI  rY   r   zSequence[Any]r  r   r   r   r   )r   rk  r   r   r   )r   r   r   r   r   r+   r   r   )r   r+   )r  r+   r   r   r   r   )r<  Optional[VariableTracker]r   r   )r	  ri  r   r   r   rY   )r  r   r   ri  )r   r+   r   r^   )rF  r   r   rF   )r   r   r{  r   rg  r   r   r   )rc  r   r   rY   )r<  rY   r   rY   )r<  rY   r   r   )r<  rY   r   zTypeIs[ExceptionVals])r  r   r   r   r   r+   r  r   rp  r   r   rn  )r   r+   r  r-  r   r   )r  rY   r   r   r   rY   )r  rY   r  r   r   r   )F)r   r+   rb  r   r   r   )r  zOptional[list[Any]]r   r   )r   ztraceback.FrameSummary)r  r   r  r   r   r   r   zOptional[FakeTensorMode])r  z!Callable[[VariableTracker], bool]r   r   )r   r   )NN)$r  r=   rb  rn  r  r   r:  r   r<  r   r  r   re  rd  rf  rd  rg  r}   r  types.CodeTyper<  r   rp  r   r  r   rs  r1  r  Optional[DistributedState]r  zOptional[tuple[types.CellType]]r{  rz  r   r   (  r   r   r   r   r   r}  r  r  r  r  r  r=  r  r  r  r  r  r  rP  rQ  r  propertyr  r  r  r  r<  r
  r  r>  r  r#  r(  r+  r0  LOAD_CLOSUREr5  r[  rB  rG  cached_propertyrI  rM  rT  r   rE  rj  rt  r  EAGER_IMPORT_NAMEr  r  r>  r  JUMP_FORWARDJUMP_ABSOLUTEr  r`  not_r  ra  r  JUMP_IF_FALSE_OR_POPJUMP_IF_TRUE_OR_POPr  r  r  r  r  r  r  r  r  r  r  r_  r  r  r  r  r  r  r  r  r  r  r  r  r  r\  r  r"  r(  r+  r&  r3  r  r8  r>  r;  rE  r  r  rI  rZ  r  r  rH  r  rp   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  r$  r[  r)  r-  r0  DICT_UPDATEr3  r6  r=  rC  rJ  rZ  rO  rJ  posr  negUNARY_NEGATIVEr!  invertUNARY_INVERTpowBINARY_POWERmulBINARY_MULTIPLYmatmulBINARY_MATRIX_MULTIPLYfloordivBINARY_FLOOR_DIVIDEtruedivBINARY_TRUE_DIVIDErW  BINARY_MODULOBINARY_REMAINDERr  
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_ORrS  rW  r]  r  rL  rd  r^  rj  rn  r  JUMP_BACKWARD_NO_INTERRUPTPOP_JUMP_FORWARD_IF_TRUEPOP_JUMP_BACKWARD_IF_TRUEPOP_JUMP_FORWARD_IF_FALSEPOP_JUMP_BACKWARD_IF_FALSErq  rt  r  rR  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  
contextlibcontextmanagerr  r  r"  r   r.  r/  s   @r   r   r   ~  sQ	    //00#=="FF  &&$$&&K((####33  ..AA//EE%%.!F00'

88 $8 +	8
 
8,4!4)64@N4	4
U!
U)6
U@N
U	
Un	W<| 7"%	+R	 ; ;7r22=h ;!+FV2./ L	*J* J J!E( # #,
2:7t $ 6 6>4 LM$X]]E:#HNNE:'t<&x~~t<U
U
(UU(
>R80.
32x't<:$*ObKPD  Q') ()
  Q'0; (0;d  Q'	- (	-GB )I8
2
s%s% $'s% '+	s%
 
s%j	
   Q'= (=8((I
 @L @ 8 $6 J

 "2
 9.1%
N:0  Q'	 (	4

N(3
B"!41P%$1 K@6	6:C	
 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.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/ 7"	;@"(!T  Q' ()V M!%+HNNEB ,X^^U C ,X]]E B!-hmmU!C(>#@'	*&&;"$  Q'' ('
$@;* >B	
':	
		

>
 5 5 *9*	* *
8 48,0'u;u; (u; !	u;
 "u; #u; %u; 4u; 5u; (Bu; u; u; u; (u; %u;  6!u;$ 1%u;& *'u;( 
)u; u; u;r   )	metaclassc                     ^  \ rS rSr\SS j5       r\R                  SS j5       r                                    SU 4S jjr	SS jr
SS jrSS jrSS jrSS	 jrSS
 jrSS jrSrU =r$ )rC  i  c                 "    [         R                  $ r   )tls
current_txr   r   r   r?   InstructionTranslator.current_tx  s    ~~r   c              #     #    [        [        SS 5      nU [        l         S v   U[        l        g ! U[        l        f = f7f)Nr?  )r#  r>  r?  )r   r  s     r   set_current_tx$InstructionTranslator.set_current_tx  s0     \40	#"CNUCNs   A 0 A =A c                  > [        5       " [        R                  SUR                   SUS    SUS    35        [        TU ]  [        UU	U UUUUUUUUS9UUUUUU0 0 S UUSUUUUS9  U R                  5         [        U R                  R                  5         U R                  5          Xl        Xl        U R                  (       a  U R                  (       d   S	5       e0 U l        [        U R!                  5       5      n["        R$                  " U5      R'                  S
S 5      nUR)                  5        Ho  u  nnUU;  d  M  S nU(       a)  [+        UR'                  U0 5      R)                  5       5      n[,        R.                  " U[1        USUS95      nUU R                  U'   Mq     U R                  R2                  nU R5                  5        Hy  nUU;   aJ  UU   n[1        USSS9n[,        R.                  " UU5      nUR7                  5       nUR9                  UU5        OUR7                  5       nUUl        UU R                  U'   M{     Uc   e[=        U R?                  5       U5       Hf  u  nn[A        U5      n[1        USS9n [,        R.                  " URB                  U5      nURK                  UUU5      nUUl        UU R                  U'   Mh     [M        U5      U l'        U(       a.  [F        R,                  RQ                  U R                  5      U l        S S S 5        S S S 5        g ! [D         a    [F        RH                  " 5       n Nf = f! , (       d  f       N<= f! , (       d  f       g = f)Nztorchdynamo start tracing  rk  r   rl  )local_scoper`  r  torch_function_mode_stackr{  r   )r  rb  r  r:  r<  r  r  re  rf  rg  r  r<  rp  r  rs  r  r{  z4Export without one graph - something has gone wrong.dynamismT)is_inputrH  )rI  is_derefed_cell_contents)rJ  ))r  r   INFOr  r!  r"  r=   _throw_if_in_functorchr   r  r  rB  r  r<  re  r  r  r/   rg  r%  r   	frozensetrl   rd  rI   r  r  r}  r.  r/  r  r  rH   cell_contents
ValueErrorr   DeletedVariabletrack_cell_existingr}   rg  realize_all)r   rb  r  r  r:  r<  r  rG  r  compiler_fnr  r<  export_constraintsframe_stater  rs  r  r{  r  rH  r   r  local_dynamismvarr  contents_sourcer"  cell_varr!  cell_sourcer+  s                                 r   r"  InstructionTranslator.__init__  sk   ( 	LL((8,}:U9VVWXdeuXvWwx	
 	"$&*C &!%*.+%/= 	 	
B 	##% T[[00143F3F3H#,N K{{~~ J~ $&D *-d.D.D.F*G#//7;;JMH'~~/e00%)N)28<<b3I3O3O3Q)R-44# %)%3C 25D((.  0"  ;;33L8#$TNE* '2td'O 5H4N4N5L  ,::<H ++HlC+::<H&*#-5$$T*G (N &&&!$--/7;
d-d3"-dT"R?#6#=#=**O$L (;;| '+#-5$$T* <  2L)2D.  (1'D'D'P'P((($} 4I11\ " ?#,#<#<#>L?] 4I3H11sQ   M(BMEM!L)&A2MM)M	M
M	M
M	M
M-c                   [         R                  R                  S5      n[        R                  " U R
                  R                  SU R
                  R                  5      n[         R                  R                  R                  5       n[         R                  R                  R                  R                  [         R                  R                  R                  R                  [         R                  R                  R                  R                  4nUb[  UR                  5       U;   aF  X!LaA  UR                  5       R                  R!                  5       nSU SU SU S3n[#        SSU/ S	9  g g g g )
NeagerrS  zhIf you are reaching here, it means dynamo failed for one of the following reasons:
- Calling torch.func.zP(compiled_fn) function from eager mode is not supported. Ensure that torch.func.zp is also wrapped within a torch.compile function. For more information, see PyTorch issue #128711.
- torch.func.z2(fn) requires the function to be inlined by dynamoz%Unsupported functorch tracing attemptr   r  )rz  _dynamolookup_backendrD  getattr_staticr  rS  _C
_functorchpeek_interpreter_stackTransformTypeVmapGradJvpr  r   lowerr7   )r   r]  rS  ciforbidden_keysr   r  s          r   rL  ,InstructionTranslator._throw_if_in_functorch  s-   ,,W5,,KK##]DKK4K4K
 XX  779HH--22HH--22HH--11
 >bffh.8[=U668==&&(D((,v .**. 0  !%v%WY  ?	 >V8>r   c                    [        U[        5      (       a  U R                  UR                     $ [        U[        5      (       a  U R
                  UR                     $ [        er   )rR  rI   r  r/  rF   r:  r  r  )r   r  s     r   get_example_value'InstructionTranslator.get_example_value  sK    fk**==!2!233fl++>>&"4"455r   c                    U R                   R                  5        HS  n[        U[        5      (       d  M  [	        UR                  5       [        R                  R                  5      (       d  MS    g   gr   )	re  r  rR  r   r  r  rz  nnModule)r   r   s     r   $symbolic_locals_contain_module_class:InstructionTranslator.symbolic_locals_contain_module_class  sU    %%,,.A!566:$$&< < 	 /
 r   c                    [        U R                  5      (       a\  U R                  S   =n(       aE  [        U[        5      (       a/  [	        UR                  U 5      [        5       S9U R                  S'   g g g g )Nrj  r  )r   rj  rR  rf   ro   r  rX   )r   r  s     r   "replace_tos_if_return_is_generator8InstructionTranslator.replace_tos_if_return_is_generator  se    

OO

2&&3 <==1--d3.0DJJrN > ' r   c           	     v   U R                  5         U R                  c   eU R                  c   e[        5       R	                  SU R                  U R                  -
  5        [
        R                  (       d  U R                  R                  5       S:X  a  U R                  (       do  U R                  5       (       dZ  U R                  (       dI  U R                  (       d8  U R                  (       d'  U R                  (       d  [        R                   " S5      eS U l        [#        5       " [$        R&                  SU R(                  R*                   SUR,                   S35        [.        R1                  SUR,                  5        U R                  R3                  U [5        SU R7                  5       /S	S
9UR,                  S:X  a  SOSS9n[9        U5      S:X  d   eUS   R:                  (       a   eUR,                  S:X  a  [=        S5      O[=        SUR>                  S9nU R                  RA                  U/5        [B        e)Nr  r   z#because no content in function callztorchdynamo done tracing r   r  z%s triggered compilereturn_valueF)r  r  r   r  r  r  )"ru  r   rv  rR   r  r   allow_empty_graphsr  r  rq  rr  r<  r  r   r  r   r  r  r   rK  r  r  r   r  r  r  r<   r  r   r]  r&   rc  r  r7  )r   r   r  return_insts       r   _returnInstructionTranslator._return  s   //1''333+++''0043C3CC	

 ))'')Q.22==??KKNN--33-- EFF#' LL'(;(;'<Bt{{m1M	
 			($++6$(KK$@$@%!3!3!5 6E !KK>9qq %A %
! ,-222,Q/@@@@ {{n, ~.#N4;;G 	 	++[M:r   c                &    U R                  U5        g r   r{  r  s     r   r  "InstructionTranslator.RETURN_VALUE      Tr   c                &    U R                  U5        g r   r~  r  s     r   r  "InstructionTranslator.RETURN_CONST	  r  r   )r<  r   r  re  rg  )r   rC  r  )$rb  rn  r  r  r  r   r:  r   r<  r   r  zOptional[tuple[Any, ...]]rG  r   r  r   rS  r   r  r   r<  r   rT  r   rU  r   r  r   rs  r1  r  r  r{  rz  r   r   r   )r  rK   r   r   r  r  )r   r   r   r   staticmethodr?  r9  r:  rB  r"  rL  rm  rr  ru  r{  r  r  r   r.  r/  s   @r   rC  rC    s#     # #]'] ] !	]
 "] #] +] $'] %] ] ] ]  ] ] (]  %!]" 6#]$ *%]& 
']~>	-^ r   rC  r  INPLACErM  BINARY_c                  P  ^  \ rS rSr% SrS\S'   S\S'   \SS j5       r\SS j5       r	\          SS	 j5       r
SS
 jr              SU 4S jjr\SS j5       rSS jrSU 4S jjr        SU 4S jjrSS jrSS jr    S S jrSU 4S jjrSU 4S jjrSrU =r$ )!r  i  z Trace and inline a called methodr  symbolic_resultr   rx  c                    [         R                  " [        S[        S   05         U R                  XX45      nUR	                  5       sS S S 5        $ ! , (       d  f       g = f)Nunimplementedr  )r   r   rO   build_inline_tracerinline_call_)r  rx  funcr   r  tracers         r   r  )InliningInstructionTranslator.inline_call  sE    ZZ?H]4K"LM,,V4HF&&( NMMs   "A
Ac                   U R                  5       (       a  [        S[        U 5      S/ S9  [        U [        5      (       a  [
        R                  " U R                  5       SS5      (       a_  [
        R                  " U R                  5       SS 5      n[        S[        U R                  5       5      SU R                  5        S	U S
3S/S9  [        R                  " U SS9nUR                  (       a  SSKJn  [        [        U SS 5      S5      (       a2  U R                  R                   U4;   a  [        R"                  " SS5      $ [        U S5      (       a  U R                  R$                  OSnSU S3/nSU R'                  5       ;  a  USU S3S/-  n[        SSU SU R)                  5        SU R'                  5        SUR*                   3SU S 3US9  U$ )!NzInline attempt with __self__zAttempted to inline a function with the `__self__` attribute. Dynamo is expected to decompose method calls into function calls with a `self` argument.r  _torchdynamo_disableF_torchdynamo_disable_msgz2Skip inlining `torch.compiler.disable()`d functionzSkip inlining function z= since it was wrapped with `torch.compiler.disable` (reason: r  z(Remove the `torch.compiler.disable` callT)is_inlined_callr   )!produce_trampoline_autograd_applyrI  _originz"allowlist in dynamo known functionr   zAvoid calling the function `r  r^  z:Apply `@torch._dynamo.dont_skip_tracing` to the function `zw` to force tracing into the function. More graph breaks may occur as a result of attempting to trace into the function.z Please file an issue to PyTorch.z.Attempted to inline function marked as skippedz
qualname: z, name: z, filename: `z`, skip reason: z?Dynamo developers have intentionally marked that the function `z` should not be traced.)has_selfr7   r   rR  ri   rD  r`  get_functionr   check_verboseskippedtorch._dynamo.variables.miscr  r*  r#  rI  r  
SkipResultr   get_filenameget_namer   )r  r  r  r  fn_qualnamer  s         r   check_inlineable.InliningInstructionTranslator.check_inlineable#  s   ==??6D	k d011g6L6L!77
 7
 ((!!#%?C LD--/05d6G6G6I5J K::=aA ? **4F>>V wtT40)<<1U B #--?  3:$2E2E$''..2K.{m2>E  1 1 33PQ\P] ^h h 7	  H$[M$--/9J K"//122B6==/S]^i]j k( ( r   c                  ^ ^^^ [        U[        [        [        [        45      (       d   eUR                  5       mS nT R                  R                  n[        R                  (       d,  U(       a%  UR                  R                  TS 5      =n(       a  UnUct  [        U[        5      (       a  [        SSU 3S/ S9  [        R                  U5      nUR                   SL d   e[        R                  (       d  U(       a  XER                  T'    UR#                  T X#5      n[4        R6                  " UR9                  5       5       H<  n
[        U
[:        5      (       a  M  [        SSU SU
 3S/ [<        R>                  QS9  M>     TR@                  S;   aS  U(       a"  [        US   [B        RD                  5      (       d*  [        SSTR@                   SU 3STR@                   S3/ S9  Sn[F        RH                  RJ                  RL                  RO                  S5      (       a'  S[P        RR                  " T5      RQ                  5        3n[T        RV                  S:  aB  T RX                  mT RZ                  mSUUU U4S jjn[\        R_                  S[a        U5      5        [b        R_                  STXRd                  5        U(       a  [        US   [f        5      (       a  T R                  Ri                  US   Rj                  5      n[        U[F        Rl                  Rn                  5      (       aA  [p        Rr                  " U5      [t        Rv                  " URx                  Rz                  5      S'   [}        T5      (       a&  [        T TUT R                  T R                  U5      nU$ [        U[        5      (       a   e[        T TUT R                  T R                  U5      nU$ ! [$         a  n['        SR)                  [+        U5      SUR-                  5        SUR/                  5        S	UR                  5       R0                   3U V	s/ s H  oR3                  5       PM     Os  sn	f sn	US
95      eS nAff = f)NzEAttempted to inline function marked as skipped (SkipFunctionVariable)z+Attempted to inline a SkipFunctionVariable zdAttempted to inline a function that was previously determined to be marked as intentionally skipped.r  Fz;{reason}.
  func = {func}, args = {args}, kwargs = {kwargs}'z' r   )r   r  r   r  z:Encountered unconverted argument when attempting to inlinezfunc: z, arg: zWAn argument to an inlined function was not successfully converted to a VariableTracker.)r  __setattr__r   z2Unsupported __setitem__/__setattr__ inline attemptzcode name: z, args: zAttempted to inline z: where first argument (self) is not a user-defined object.r   bytecoder   r  c                    > TR                  TR                  R                  S9n [        TT5      R	                  5       nSTR
                   SU  SU 3$ )N)r   zTRACE inlined call z from r   )r  	positionsr   rQ   r  r  )headerr  r  cur_instrx  parent_codes     r   get_trace_call_log_strQInliningInstructionTranslator.build_inline_tracer.<locals>.get_trace_call_log_str  s[    77#--44 8  2+xHOOQ,T\\N&4&QQr   r  zINLINING %s%s, %srV  r   )BrR  ri   rg   re   rf   r  r  r  r   dont_skip_tracingpreviously_inlined_functionsr%  rh   r7   r  r  r  	bind_args	TypeErrorr1   r  r   r  r  rl  r  r  r  r  rY   r   r  r  r   r   rz  r  	_internal	log_stateis_artifact_enabledr  BytecoderP  rQ  rl  r  trace_call_logr  rU   r  r   ry   r  r  r  r  rh  ri  r/   rg  forward__code__r,   &InliningGeneratorInstructionTranslatorrf  rg  )rx  r  r   r  r  tracing_ctxprevious_result
sub_localsr  r   r   r  r  moduler  r  r  r  s   `              @@@r   r  1InliningInstructionTranslator.build_inline_tracera  s    $*.,	
 
 	
 
  $}}mm33
 ''K"-"J"J"N"Nd#   )>$ 455 cI$P~ 3CCDIF>>U***++AG88>	=J !2!2!45Aa11 X$TF'!5 y9-889	 6 <<99ZQ)L)LMML%dll^8D6B24<<.@z{	  >>##--AA*MM#,,t,00234Fw&11H --KR R   z2H'IJ		%tV]]C JtAw(899]]00a1C1CDF&%(("6"677
 KK' (()@)@A&
 ;''44F&  "$(DEEEE2''44F c  		#NUUq6T]]_-R0A0A0C/DAdmmoFdFdEef7;<t//+t<!	 V  		s%   O" "
Q6,AQ1Q"!Q11Q6c                   U R                   nU R                  n[        R                  " 5       nUR                  (       a  U R                  UR                  5      n U   U R                  5         S S S 5        U R                  Ul        U R                  R                   (       a  ["        R$                  " S 5      $ U R&                  c   eU R(                  UR(                  L a%  UR*                  R-                  U R*                  5        U=R.                  U R.                  -  sl        [        R                  SU5        U R                  R0                  R2                  R5                  U5        [6        R8                  (       d&  [;        U [<        5      (       a  U R>                  (       a  [A        U5      (       a  [;        U [<        5      (       a  U RB                  (       av  [;        U [<        5      (       d   e/ n[;        U R&                  ["        5      (       a  U R&                  RD                  b  U R&                  /n[        RF                  " [H        XS9  g U R&                  $ [A        U5      (       aP  [;        U [<        5      (       d   eU R&                  RK                  5       b   e[M        U RN                  [Q        5       S9$ U R&                  $ ! , (       d  f       GNa= f! [        R                   a#  nSU SU 3n[        R                  U5        e S nAf[        R                   a.  nSU SU 3n[        R                  U5        [        U5      UeS nAf[         a    [        R                  SU5        e f = f! U R                  Ul        f = f)	Nz!Observed exception DURING INLING z : zSKIPPED INLINING r   zFAILED INLINING %szDONE INLINING %sr  r  ))rx  r  r9  nullcontextru  r  r  r   r   r  r  r  r8   r  r   r  r  r^   rd  r  r:  rf  r  rq  r  traced_coder   r   r  rR  r  is_generator_from_ctx_managerr,   generator_exhaustedr  r  r  r  ro   generated_itemsrX   )r   rx  r  
strict_ctxr  r  r   s          r   r  *InliningInstructionTranslator.inline_call_  s   {{$002
""55f6M6MNJ	D
  +/*C*CF';;""#**400##///>>V---##**4+@+@A((D,J,JJ(		$d+##//66t<44tCDD22 T""t%KLL,,!$(NOOOOt335EFF,,22: 001D,,]DL+++D!!!$(NOOOO++>>@HHH+(("2"4 
 +++{ $$ 	5dV3qcBCIIcN}} 	*%dV2aS1CIIcNc") 	II*D1	 +/*C*CF'sT   K K.K 
KK M4 K M1.LM1#)M%M11M4 4Nc                *  > UR                  5       nUS   n[        U[        5      (       d  UR                  nUR                  R
                  n	S n
U	(       a/  U	R                  R                  U5      (       a  U	R                  U   n
U
c+  [        U5      n
[        U
5        U	(       a  XR                  U'   [        TU ]-  UR                  0 UUUUUU
[        5        Vs0 s H  o[        X+5      _M     snUUR                  UR                  S-   UR                   UR"                  UR$                  UR&                  S9  X`l        Xl        UR,                  U l        S U l        UR0                  R3                  5       U l        UR4                  U l        g s  snf )N__builtins__r   )r  r  r:  r<  re  rf  rg  rb  r  r  r<  rp  r  rs  r  r{  )get_globalsrR  r   __dict__r  r  previously_cleaned_instructionsr%  r!   r    r!  r"  r*   r#  r<  rp  r  rs  r  r{  funcvarrx  r  r  r  r	  r  )r   rx  r  re  rf  rg  r  r:  r<  r  rb  r   r+  s               r   r"  &InliningInstructionTranslator.__init__*  sm    '')	~.
*d++#,,J mm33::>>tDD*JJ4P/5L-DP;;DA==!+-*G%7DG!WT--G==,,q0"22,,$66NN! 	 	
$ ))#%55::<)) Hs   Fc                .    U R                   R                  $ r   )rx  r  r   s    r   r  'InliningInstructionTranslator.fake_modec  s    {{$$$r   c                ^    [         R                  " U R                  R                  5       5      $ r   )r   r  rx  r  r   s    r   r  )InliningInstructionTranslator.run_ctx_mgrg  s     ++DKK,E,E,GHHr   c                   > [         R                  (       a.  U R                  R                  5       (       d  g[        TU ]  5       $ gr  )r   r  rx  r  r!  )r   r+  s    r   r  :InliningInstructionTranslator.should_compile_partial_graphj  s3    %%;;;;==7799r   c                h   > [         R                  (       a  [        TU ]  XU5      $ [	        SSS/ S9  g )NzGraph break in inlined functionr   z2Graph breaks in an inlined call are not supported.r  )r   r  r!  r  r7   )r   r   r  rp  r+  s       r   r  3InliningInstructionTranslator.create_call_resume_atq  s<     %%701M  	5L		
r   c                F    U R                  5       U l        S U l        [        er   )r  r  r   r7  r  s     r   r  *InliningInstructionTranslator.RETURN_VALUE  s    #xxz#' r   c                H    U R                  U5      U l        S U l        [        er   )r5  r  r   r7  r  s     r   r  *InliningInstructionTranslator.RETURN_CONST  s#    #//5#' r   c                D   SU R                   ;   a  U R                   S   R                  S5      (       dv  U R                   S   nU R                  U5      nSU;   a(  [        R                  R
                  R                  U   nO[        U5      n[        X5      " U5      n[        X15      nOYU R                  R                  SU R                   5      n[        U5      nU R                   n[        X5      " U5      n[        X5      n[        U5      (       a  [        U5      nXEU4$ )Nr   namedtuple_rW  ___unnamed_scope)r:  r  rE  rz  r{  r\  r]  r   r[   rD   r  r  rF   rE   rX  rJ   )	r   r   rF  rG  rH  fglobals_vtglobal_sourceglobals_nameglobals_sources	            r   get_globals_source_and_value:InliningInstructionTranslator.get_globals_source_and_value  s    'z0J0U0U1
 1
 ..4K ..{;M+-MM22LL#  "0!<)$>~NK&};M;;;;"DNNL *,7N!^^N)$?OK-nCM^$$ ,M:MM99r   c                  > UR                   nX R                  ;  a  U R                  U5      $ U R                  R                  U R                  L a  [
        TU ]  U5        g U R                  U5      u  p4nU R                  R                  R                  XB5      (       a5  U R                  U R                  R                  R                  XB5      5        g U R                  U   nU R                  [        R                  " XU5      5        g r   )rc  r:  r>  r  r`  r!  rB  r  r  has_pending_mutation_of_attrr<  	load_attrrY   r@  )r   r   r   r   r  r  r  r+  s          r   rB  *InliningInstructionTranslator._load_global  s    {{~~%$$T**;;##t~~5 G &,0,M,Md,S)AM{{''DD[WW		$++22<<[OPt,		///]KLr   c                n  > U R                   R                  U R                  L a  [        TU ]  U5        g U R                  5       n[        U[        5      (       a  [        SUR                  S/ S9  UR                  nU R                  U5      u  pEnU R                   R                  R                  XSU5        g )Nz3Storing Tensor hook handle in globals (inline call)rP  r  )r  r`  r:  r!  rT  r  rR  r   r7   rc  r  r  rA  )r   r   r  r   _fglobals_valuer  r   r+  s          r   rT  *InliningInstructionTranslator.STORE_GLOBAL  s    ;;##t~~5 G &HHJE%!899 Q KK 8	 ;;D.2.O.OPT.U+O!KK$$//5Ir   )r  r   r  r  r  rx  r  )
rx  r   r  r   r   r   r  r   r   r   )r  r   r   ztrace_rules.SkipResult)
rx  r   r  rY   r   ri  r  r   r   r  r  )rx  r   r  r  re  rd  rf  rd  rg  r}   r  rd   r   r   r  r  r  r  r  )r   r   r   z#tuple[Any, VariableTracker, Source])r   r   r   r   r   r   r  r  r  r  r  r  r"  r  r  r  r  r  r  r  r  rB  rT  r   r.  r/  s   @r   r  r    sQ   *..%%) )
 ; ;z  $ 	
 
' BE,N7*)7* 7* 4	7*
 57* (B7* *7* 
7*r % %I

 $'
 '+	

 

"

%:%:	,%:NM"J Jr   r  c                     ^  \ rS rSr% S\S'   SU 4S jjrSS jrSS jrSU 4S jjrSU 4S jjr	SS	 jr
SS
 jrSrU =r$ )r  i  ri  r  c                P   > [         TU ]  " U0 UD6  / U l        SU l        SU l        g r  )r!  r"  r  r  r  )r   r   r  r+  s      r   r"  /InliningGeneratorInstructionTranslator.__init__  s-    $)&)!#( -2*r   c                |   U R                  5       nU R                  R                  U5        [        U R                  5      [        :  a  [
        R                  " S[         35      eU R                  [        R                  " S 5      5        [        R                  (       d  U R                  (       a  X l        [        eg )NzqToo many yield values in generator. Maybe you are inlining an infinite generator. If not, please report a bug at )r  r  r   r   rk   r   InfiniteGeneratorErrorPT2_ISSUE_TRACKER_URLr<  r^   rd  r   r  r  r  r9  )r   r   tops      r   YIELD_VALUE2InliningGeneratorInstructionTranslator.YIELD_VALUE  s    hhj##C(t##$'99,,22G1HJ  			"))$/05511#& 	 2r   c                    U R                   S   n[        U[        5      (       dB  U R                  5         [	        [
        5      R                  X/0 5      nU R                  U5        g g rm  )rj  rR  ro   r  r]   r  r=  r<  )r   r   r  ress       r   GET_YIELD_FROM_ITER:InliningGeneratorInstructionTranslator.GET_YIELD_FROM_ITER  sO    jjn#344HHJ!$'55dE2FCIIcN 5r   c                0   > SU l         [        TU ]	  U5      $ r  )r  r!  r  r   r   r+  s     r   r  3InliningGeneratorInstructionTranslator.RETURN_VALUE      #' w#D))r   c                0   > SU l         [        TU ]	  U5      $ r  )r  r!  r  r  s     r   r  3InliningGeneratorInstructionTranslator.RETURN_CONST  r  r   c                   [        U R                  5      S:  d   eU R                  5       nU R                  S   n[        U[        5      (       a  UR
                  b  [        SSS/ S9   UR                  U 5      n[        U R                  [        5      (       a  U R                  S:  d   eU =R                  S-  sl        U R                  U5        U R                  U5        g ! [        [        R                  4 a~  n[        U[        R                  5      (       a  [        R                  " U 5        U R                  5         U R                  [        R                   " UR
                  5      5         S nAg S nAff = f)	Nr  rj  Unreachable sub-generator coder   @Should only be encountered while implementing generator support.r  r   r   )r   rj  r  rR  r^   r  r7   r  r   r   r<  r  r  r   r  r  rd  r   r   r<  r  exs        r   
YIELD_FROM1InliningGeneratorInstructionTranslator.YIELD_FROM  s3   4::!###hhjjjn3 011cii6G 8^		###D)C 433S99,,q01 $$)$IIcNT"# s<<= 	9"c;;<<--d3 HHJII&--bhh788	9s   *C$ $E<>A4E77E<c                D   [        U R                  5      S:  d   eU R                  5       nU R                  S   n[        U[        [
        45      (       dH  [        U[        5      (       a  [        UR                  [        R                  R                  5      (       aS  [        U[        5      (       a1  UR                  c$   UR                  U 5      nU R                  U5        g [+        SSS/ S9  g [+        SS	[-        U5       3S
[-        U5       S3/ S9  g ! [        [        R                   4 an  n["        R$                  S:  a  U R                  5         U R                  [        R&                  " UR                  5      5        U R)                  U5         S nAg S nAff = f)Nr  rj  r  r  r   r  r  zSEND with bad typez
TOS type: z(Attempted to SEND with unsupported type rO  )r   rj  r  rR  rn   rf   r   r  r:  r;  Iteratorr^   r  r<  r  r   r  rP  rQ  rd  r  r7   rW   r  s        r   SEND+InliningGeneratorInstructionTranslator.SEND'  sJ   4::!###hhjjjnc,.JKLLs566399koo&>&>??#/00SYY5F#++D1C IIcN !< b	 ,$WS\N3Fws|nTUV	5 &s'D'DE 
$ '''1
II.55bhh?@IIdOO
$s   D F1A$FF)r  r  r  r  )r   r   r  r   r   r   r  )r   r   r   r   r   r"  r  r  r  r  r  r  r   r.  r/  s   @r   r  r    s2    **3"**$#L* *r   r  )r   r   r   ztypes.ModuleType)r   r  )r   r   r   zGenerator[None, None, None])rI  zCallable[..., object]r   zCallable[..., Any])rW  rQ  r   r   )r   r   re  Callable[[object], bool]r<  r   r   r   )r   FN)
r  r   r   r   rv  r   r  zOptional[StackSummary]r   r   )re  r  r<  r   r   r  )r<  r   r   zYCallable[[Callable[..., None]], Callable[[InstructionTranslatorBase, Instruction], None]])r   
__future__r   r:  collections.abcr9  r	  r   r  rG  r   rD  r  r  r   r`  r  rP  	threadingrt  rS  rh  r   typingr   r   r   r   r	   r
   r   typing_extensionsr   r   unittest.mockr   rz  torch._loggingtorch._dynamo.excr   r   torch._guardsr   r   torch._logging.structuredr   %torch.fx.experimental.symbolic_shapesr   torch.utils._functoolsr   r   r   r   r   r  r   r   bytecode_analysisr   r   r   r    bytecode_transformationr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   codegenr0   r1   r2   r3   r4   r5   r6   r7   r8   funcname_cacher9   guardsr:   r;   output_graphr<   r=   	polyfillsr>   replay_recordr?   r@   r  rA   rB   rC   r  rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   utilsrN   rO   rP   rQ   rR   rS   rT   rU   rV   variables.baserW   rX   rY   variables.builderrZ   r[   r\   variables.builtinr]   variables.constantr^   variables.ctx_managerr_   r`   ra   variables.dictsrb   rc   variables.functionsrd   re   rf   rg   rh   ri   rj   variables.iterrk   variables.lazyrl   variables.listsrm   rn   ro   rp   rq   rr   variables.miscrs   rt   ru   rv   rw   rx   variables.nn_modulery   variables.tensorrz   r{   r|   variables.torch_functionr}   r~   variables.user_definedr   r   r   r   r   r   r   torch._subclasses.fake_tensorr   r{  r   	getLoggerr   r  r  getArtifactLoggerr  r  r  r  r  r>  r   r=  r   r   containsr   r  r   r  r   cacher   	dataclassr   r   r   r   r   r  r:  r  r  r!  r  r   r  r7  r9  rJ  rX  rh  r  r  r  r  r-  r  r1  r   rC  rQ  _nb_opsr#  rV  r  r  )r   r   r   r   s   0000r   <module>r1     s}  0 #      
        	 
     " P P P /    O 1 / < /       ' 	 	 	 ) / 9 0 9 
	 	 	 ;
 
 
 G F R R . 0 
 <   / /   2 W W  3<'!..228^L11(LI>>33HnM ^^55h@PQ oo4L4R4R4T'4TDAAq'''4T' ^  "("3"34BBX]]+99
 D ! H  D  %&(y  ) )   : @ @ @F 
 
 
 2 2 23 3. 4 4 )!) ) )& $!$ $ $ . . .B	~ 		I 	9 A?
#?&? ? 
	?D 
 )-	N
 N
N
 N
 '	N

 
N
bD&D.2D=DNFFFRJ J2 _ _ _Dp);(p);fSY5 Yx w 
 %IF	 	!#v-F12JWVABZL3I	
 %}J$= }J@z-J zcH'Pzs    T43&T: