
    N j                      % 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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!  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+J,r,J-r-  SS
K.J/r/  SSK0J1r1  SSK2J3r3  SSK4J5r5J6r6J7r7Jr8J9r9J:r:  SSK;J<r<J=r=J>r>J?r?  SSK@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrO  SSKPJPrP  SSKQJRrR  SSK6JSrSJTrTJUrUJVrVJWrWJXrXJYrYJZrZJ[r[  SSK\J]r]  SSK^J_r_J`r`  SSKaJbrbJcrcJdrd  SSKeJfrfJgrgJhrhJiriJjrj  SSKkJlrlJmrm  SSKnJoroJprpJqrqJrrr  SSKsJtrtJuruJvrvJwrwJxrxJyryJzrzJ{r{  SSK9J|r|J}r}  SSK~JrJrJrJrJrJrJrJrJr  SSKJrJrJr  SSKJrJrJr  SSKJr  SS KJrJr  SS!KJrJrJrJr  SS"KJrJr  SS#KJrJrJrJrJrJrJr  SS$KJr  SS%KJr  SS&KJrJrJrJrJrJr  SS'KJrJrJrJrJrJrJr  SS(KJrJr  SS)KJr  SS*KJrJr  SS+KJrJr  SS,KJrJrJrJrJr  \(       a  SS-KJrJrJr  SS.KJr  SS/KJr  \GR                  " \5      r\"GR                  GR                  \S05      r\"GR                  GR                  \S15      r\"GR                  GR                  \S25      r\"GR                  GR                  \S35      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 rS4\S5'   \" \GR                  5      GR                  r\" \GR                  5      GR                  rS6 \S7'   S8 \S9'   \\:GRd                  \\4   rS:\S;'   \	GR                  SpS< 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                  SqSG j5       r\GR                      SrSI j5       r\GR                      SrSJ j5       r\GR                   " SK SL5      5       r " SM SN\5      r " SO SP\5      r " SQ SR\5      rSsSS jrStST jr\	GR                  SuSU j5       r\	GR                  SvSV j5       r\	GR                  SwSW j5       r\GR                   " SX SY5      5       r        SxSZ jrS[r      SyS\ jr        SzS] jr      S{S^ jGr  " S_ S`G\5      Gr\GR                   " Sa Sb5      5       Gr " Sc SHG\Sd9Gr " Se SfG\5      Gr\GR                  Sg:  a=  \GR                   VVs/ s H!  u  p#G\" G\ShU;   a  USiS OSjUSiS  35      PM#     snnGr	\GR                          S|Sk j5       Gr
 " Sl SmG\5      Gr " Sn SoG\5      Grgs  snn f s  snnf )}a  
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)deque)AnycastNoReturnOptionalTYPE_CHECKING	TypeAliasUnion)TypeIs)DynamoProfilerStateFunctionTraceTiming)ObservedExceptionTensorifyScalarRestartAnalysis)InlinedCodeCache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_call_function_ex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)	!augment_exc_message_with_hop_nameBackendCompilerFailedcollapse_resume_framesformat_frame_infoget_stack_above_dynamoResumePrologueTracingErrorStepUnsupportedunimplementedUnsupported)get_funcname)GuardBuilderinstall_guard)GraphCompileReasonOutputGraphStackLocalsMetadata)impl_CONTAINS_OP_fallbackimpl_IS_MAPPINGimpl_MATCH_CLASSimpl_MATCH_KEYSimpl_MATCH_SEQUENCE)DummyModuleExecutionRecorder)ContinueExecutionCache"IS_TRACING_RESUME_PROLOGUE_VARNAMEReenterWithTORCH_DYNAMO_RESUME_IN_PREFIX)
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)CONSTANT_VARIABLE_NONEConstantVariable)ContextWrappingVariableGenericContextWrappingVariableWithEnterFunctionVariable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TracebackVariableUnknownVariable)NNModuleVariableUnspecializedNNModuleVariable)SymbolicStreamState)supported_comparison_opsSymNodeVariable)SymbolicTorchFunctionStateTorchFunctionModeVariable)RemovableHandleVariableUserDefinedClassVariable!UserDefinedExceptionClassVariable"UserDefinedExceptionObjectVariableUserDefinedObjectVariable)Callable	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      o/root/GenerationalWealth/GenerationalWealth/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 inr
   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	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   indexFr   graph_break_on_autograd_gradc                    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   r     sl     '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)	
LocalStateiV  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>]  s'      
-KTQqcAHHJ< -Ks   $&)joinr   itemsr   s    r   r   LocalState.render\  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   V  s#    8C8I8I95 
r   r   c                  8    \ rS rSr% S\S'   S\S'   SrS\S'   S	rg)
DistributedStateic  r   
compile_pgr   local_stateNzOptional[list[LocalState]]
all_statesr   )r   r   r   r   r   r  r   r   r   r   r  r  c  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	)TensorifyStateij  zset[str]force_specializationsc                :    U R                   R                  U5        g r   )r  addclsr   s     r   
specializeTensorifyState.specializep  s    !!%%e,r   c                    XR                   ;   $ r   )r  r  s     r   should_specialize TensorifyState.should_specializet  s    1111r   c                8    U R                   R                  5         g r   )r  r   r  s    r   r   TensorifyState.clearx  s    !!'')r   c                2    [        U R                  5      S:H  $ r   )r   r  r  s    r   emptyTensorifyState.empty|  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  j  s_     '*e8+- - 2 2 * * 3 3r   r  c                 6    [         R                  " [        5      $ r   )torchdynamo_loggingget_step_loggerlogr   r   r   _step_loggerr%    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(    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                  l    \ 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   zInstruction | Nonetargetr   stack_indexNzHOptional[Union[ContextWrappingVariable, GenericContextWrappingVariable]]with_contextc                    U R                   S L$ r   )r3  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   )r2  r3  hasattrr8  rK   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   )r3  exit_on_graph_breakexit)r   r   is_graph_breaks      r   r?  BlockStackEntry.exit  sJ       ,,,t00DDFF$$))"--r   r   r  )r   rK   )r   r   r@  r   r   zVariableTracker | None)
r   r   r   r   r   r3  r5  r;  r?  r   r   r   r   r0  r0    sQ      	   -5+=A	r   r0  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   NrC  r   r   r   rF  rF    rD  r   rF  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   rH  rH    s    r   rH  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
parametersrf   	functoolswraps)fnrP  rN  rO  s     @@r   stack_oprY    sL    !!"%001ER F__RD D Kr   c                    [        U [        R                  5      (       d  gU R                  R	                  S5      S   [
        R                  ;   $ )NF.r   )
isinstancetypes
ModuleTyper   splitsysstdlib_module_names)mods    r   	is_stdlibrc    s=    c5++,,<<c"1%)@)@@@r   c                    U (       a  SS jnOSS jn[         R                  " U5       Vs/ s H  o"R                  PM     nn[        S [	        U5       5       5      nUR                  S5      nX4S-   US-    $ s  snf )Nc                     U (       d   S5       eg )Nmsgr   xs    r   rX  (get_assert_bytecode_sequence.<locals>.fn  s    OeO1r   c                    U (       d   eg r   r   rg  s    r   rX  ri    s	    H1r   c              3  Z   #    U  H!  u  pUR                  S 5      (       d  M  Uv   M#     g7f)POP_JUMPN)
startswith)r   ir   s      r   r   /get_assert_bytecode_sequence.<locals>.<genexpr>  s!     V&671$//*:UQQ&6s   +	+RAISE_VARARGSr   )rh  r   r   r   )disget_instructionsr   r   	enumerater   )with_msgrX  r   insts	begin_idxend_idxs         r   get_assert_bytecode_sequencerx    sq    		 &)%9%9"%=>%=T[[%=E> Vi&6VVIkk/*GQ1-- ?s   A8c                    [         R                  S:  d   eSS jn [        R                  " U 5       Vs/ s H  oR                  PM     nn[        U5      S-
  USSS2   R                  S5      -
  nUR                  S5      nX#U $ s  snf )	zNGet the bytecode instructions that precede BUILD_LIST in a list comprehension.      c                 B    [        S5       V s/ s H  o PM     sn $ s  sn f Nr   rangern  s    r   rX  ._get_comprehension_bytecode_prefix.<locals>.fn       8$8a8$$$   r   NLOAD_FAST_AND_CLEAR
BUILD_LISTr   z	list[int])r`  version_inforq  rr  r   r   r   )rX  r   ru  	start_idxrw  s        r   "_get_comprehension_bytecode_prefixr    s     w&&&% &)%9%9"%=>%=T[[%=E>E
Qtt!2!23H!IIIkk,'G7## ?s   Bc                     [         R                  S:  d   eSS jn SS jnSS jnSS jnSS jnU" U 5      nU" U5      nU" U5      nU" U5      nUS   US   S	.US   US   S	.US   US   S	.US   / S	.S
.$ )a  Discover bytecode patterns for comprehension result handling.

Analyzes sample functions to extract the opcode sequences that appear
after END_FOR for each result disposition (stored, discarded, returned, consumed).

Returns patterns with:
    - pre_store_ops: opcodes between END_FOR and first STORE_FAST
    - post_store_op: first opcode after all STORE_FASTs (for disambiguation)
rz  c                 D    [        S5       V s/ s H  o PM     nn U$ s  sn f r~  r  )rn  results     r   	fn_stored5_get_comprehension_result_patterns.<locals>.fn_stored  s$    "1X&X!X& 's   c                 B    [        S5       V s/ s H  o PM       n gs  sn f r~  r  r  s    r   fn_discarded8_get_comprehension_result_patterns.<locals>.fn_discarded!  s     !HHqH 	r  c                 B    [        S5       V s/ s H  o PM     sn $ s  sn f r~  r  r  s    r   fn_returned7_get_comprehension_result_patterns.<locals>.fn_returned%  r  r  c                 T    [        [        S5       V s/ s H  o PM     sn 5      $ s  sn f r~  )sumr  r  s    r   fn_consumed7_get_comprehension_result_patterns.<locals>.fn_consumed(  s#    uQx(x!Ax())(s   %c                   [        [        R                  " U R                  5      5      S   S   n/ nSn[        R                  " U 5       H}  nU(       a  UR
                  (       a    OdUR                  nU(       d  M2  UR                  U:X  d  MD  U=(       d    [        UR
                  5      nUR                  UR                  5        M     X"R                  S5      S-   S nSn/ nU[        U5      :  a9  Xg   S:w  a1  UR                  Xg   5        US-  nU[        U5      :  a
  Xg   S:w  a  M1  U[        U5      :  a&  Xg   S:X  a  US-  nU[        U5      :  a
  Xg   S:X  a  M  X[        U5      :  a  Xg   4$ S4$ )zCExtract (pre_store_ops, post_store_op) from comprehension bytecode.r   FEND_FORNr   
STORE_FAST)r   rq  findlinestarts__code__rr  starts_line	positionsr   r   r   r   r   r   )	rX  target_lineru  startedinstrposopsidxpre_store_opss	            r   extract_pattern;_get_comprehension_result_patterns.<locals>.extract_pattern+  sL   3--bkk:;A>qA))"-E5,,//Csszz[0!<T%*;*;%<U\\* . KK	*Q.01CHn\!9  *1HC CHn\!9 CHn\!91HC CHn\!9 C.chBBdBBr   r   r   )r  post_store_op)stored	discardedreturnedconsumedr  r   r   )rX  Callable[..., Any]r   ztuple[list[str], Optional[str]])r`  r  )	r  r  r  r  r  r  r  r  r  s	            r   "_get_comprehension_result_patternsr    s     w&&&%*C4 Y'F-I{+H{+H %+1Iq	J'0|iPQlS&.qkHQKP&.qkBG	 r   c                  V    \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   S	\S'   S	\S'   Srg)ComprehensionAnalysisiR  a  Metadata about a comprehension's bytecode structure.

Attributes:
    end_ip: Instruction pointer after all comprehension bytecode
    result_var: Name of result variable, or None if result stays on stack
    result_on_stack: True if result stays on stack (discarded, returned, or in expression)
    iterator_vars: Variables from LOAD_FAST_AND_CLEAR (need restoration)
    walrus_vars: Variables assigned via walrus operator (:=) inside comprehension
    captured_vars: Variables read from outer scope via LOAD_FAST inside comprehension
r   end_ipzOptional[str]
result_varr   result_on_stack	list[str]iterator_varswalrus_varscaptured_varsr   N)r   r   r   r   r   r   r   r   r   r   r  r  R  s,    	 Kr   r  c                   U[         R                  Ld  U(       a  g[        U R                  [        5      (       d   eU R                  nS H  n[        U5      nU R                  X3[        U5      -    nU Vs/ s H  owR                  PM     nnXe:X  d  MJ  U(       a-  UR                  S5      nU R                  X8-      R                  n	OSn	U R                  [        R                  " U	5      5          g   gs  snf )NF)FT
LOAD_CONSTzassertion errorT)operatortruthr\  r   r   rx  instructionsr   r   r   argvalrK  rh   create)
r   truth_fnrK  current_instruction_pointerrt  assert_insts	cur_instsr   load_const_idx	error_msgs
             r   &_detect_and_normalize_assert_statementr  g  s     	&4d..4444"&":":!3H=%%',+ 
	 .77YT[[Y	7$!-!3!3L!A --/@&  .	II&--i89! "$  8s   7C5Fc                X   ^ ^^^ SS jm S         SUU4S jjjmSUUUU 4S jjnU$ )Nc                F    [        SSU  3S/ [        R                  QSPS9  g )NzData-dependent branchingzattempted to jump with zyDetected data-dependent branching (e.g. `if my_tensor.sum() > 0:`). Dynamo does not support tracing dynamic control flow.z1Use `torch.cond` to express dynamic control flow.gb_typecontextexplanationhints)r:   r   FUNDAMENTALvalues    r   raise_jump_graph_break,generic_jump.<locals>.raise_jump_graph_break  s8    .-eW5D"..C		
r   c           	       > U R                  5       (       d   eS n T" U5        Uc   eU R                  5       (       a  U R                  U R                  U5        U R                  U R                  [        U5      US9  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5      nT
(       a  U R                  U5        UR&                  c   eU R#                  UR&                  U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 ! [         a  nUn S nAGNS nAff = f)
Nr   r   zgeneric_jump triggered compilezgeneric_jump r   r   
stack_popsr{     TO_BOOLr   )r1  )should_compile_partial_graphr;   maybe_has_backedgeraise_loop_graph_breakf_codelog_graph_breakcode_optionsr   rK  r$  debugr+  compile_subgraphr?   r`   frame_summarypopcreate_call_resume_atnext_instructionr1  r`  r  add_output_instructionsr(   r   copy_positions)r   r   r  	extra_msgr   eall_stack_locals_metadataif_nextif_jump	jump_instrK  r  s             r   jump_graph_break&generic_jump.<locals>.jump_graph_break  s    002222	"5)  ""$$''S9s8 	 	
 			%		23$(KK$@$@%/	{;d>P>P>R=S  %A %
! 	
,,!!%
 IIe{{&&&,,KK%

 w&KK//1CI1N0OP&t{{71:F	  &++YK',AG,KLY  	C	s   G 
G0#G++G0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R                  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R                  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a   URW                  U S5      n	[%        U	[^        5      (       Gav  U	Ra                  U / 0 5      n[c        [c        U	SS 5      SS 5      n
UR	                  5       (       a  UR                  5       nU
S:X  ad  [%        U[
        5      (       dO  [d        Rf                  Ri                  S[k        U5      Rl                   35      n[X        Rn                  " [p        X/S9  [%        U[
        [r        45      (       a8  T" U5      (       a*  T(       a  U RM                  U5        U R                  U5        g g g [%        U[&        5      (       a@  URu                  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R                  5       (       df  URw                  U 5      (       aP  T" [y        UR{                  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Ru                  U R                  5      nO[}        UR(                  S	:g  5      n T" U5      (       a*  T(       a  U RM                  U5        U R                  U5        g g [%        U[d        R                  5      (       a8  T" S5      (       a*  T(       a  U RM                  U5        U R                  U5        g g SSK!JAn  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 T" U5        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N+f = ff = f! [X        R~                   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  rL  r   z#Assertion failed on symbolic shapesr   )example_value__bool____len__rX  r   z&__bool__ should return bool, returned r   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_source)Cr  r    rewrite_assert_with_torch_assertr  is_python_constantr   as_python_constantjumpr  r:   r   r  	is_tensorr+  create_proxytorch_assert_asyncr_   r\  r   sym_numSymBoolfxexperimentalsymbolic_shapesexpect_truer   
USER_ERRORscalar_tensorre   rY   noderm   sourcer>   
make_guardr=   SEQUENCE_LENGTHrK  r   get_submodule
module_keyr   var_getattrr   ObservedAttributeErrorhandle_observed_exceptionru   rL  getattrr   rh   r  typer   raise_observed_exception	TypeErrorr   evaluate_exprhas_unpack_var_sequencer   unpack_var_sequencer   	UserErrorBackwardHookVariabler  get_real_value)r   r   r  r  sym_exprr  scalar_to_tensor_proxyscalar_to_tensorrb  rh  method_nameresult_valuerf  eval_resultr  r  r  rK  r  r  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*   ((#'' ''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 __4#D#D#F#FT//00++++E,<,<=C}}IIe$		$  899	%%dJ7 !/00r26%gat&<j$O,,..#)#<#<#>L"j0LRV9W9W'88??DT,EWE`E`Dab 44Y5Q!,s<<,AWAW IIe,		$ BX<  88++-- IIe,		$ .
 " U"*1#Zx @%X  D>>		%(IIdO " ""u'D'DT'J'J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
 'u-c -- --d3))$	:A11 11$7Av == 4466+D2aSRRsU   6_ A`; "`; *`8.`,`4/`83`44`8;a:a5.a:4a55a:)r  rb   r   r   )r   )
r   r   r   r-   r  rb   r  r   r   r   r   r   r   r-   r   r   r   )r  rK  r"  r  r  s   `` @@r   generic_jumpr%    sa    

  	7M'7M7M 7M 	7M
 
7M 7Mrw. w.r Lr   c                \   / nU nUb"  UR                  U5        UR                  nUb  M"  [        U5       H  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     M     g)zoGenerates bytecode to restore the block stack for running the unsupported instruction
in the compiled bytecode.N)r   parentr   block_stackr\  r3  r   extend_outputr;  try_except_torch_function_moder  ri   reconstruct_typetry_finally)r   cgcleanupall_txescur_txbs         r   _reconstruct_block_stackr2    s     13H24F

 
 x A !..*CDD  KKM@@
 >>---ann/FHHHHNN++B/Q[[]66rPQ   !r   c                $   ^ ^     SUU 4S jjnU$ )Nc                t   >^ ^ [         R                  " T 5      SUU UU4S jj5       n        SU4S jjmU$ )Nc           	       > U R                   nTU l         U R                  5       nUR                  U 5      (       a"  UR                  c   eT" XUR                  5      $  T" X5      X l         $ ! [         GaA  nU R
                  (       a^  U R                  (       d  U R                  (       a  e UR                  5         [        SSU R
                   3SS/[        R                  QUS9  UR                  (       a  e U R                  5       (       d  e U R                  5       (       a  U R                  U R                   U5        U R#                  U R$                  T S['        U5       3US9  UR                  5         UR)                  S5        [+        UR,                  UR.                  5      Ul         S nAOS nAff = f X l         O! X l         f = fUR1                  U R                  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_excz:

r  graph_break)current_instruction_push	speculater   r   r;   active_generic_context_managers	one_graphr   remove_from_statsr:   r   CAUSED_BY_EARLIER_GRAPH_BREAK
skip_framer  r  r  r  r  r  r   add_to_statsr?   rf  
real_stackr   )	r   r   	prev_pushspeculationexcphandle_graph_breakinner_fn
msg_prefixrK  s	        r   wrapper>break_graph_if_unsupported.<locals>.decorator.<locals>.wrapper  s   55I,0D)..*K!!$''"))555)$k6H6HII):+P 1:-O  %S77~~)B)B **,! R"CDDhDhCi j %Dc.LL "&	 ??88::**,,//TB$$%%(\s4yk: %  &&(!!-0%7$//%R""K%SJ #09-	-11$2K2KLs+   A, ,F87D7F3.G 3F88G Gc                R  > [         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[        R                  SUR                  5        U R                  R                  X[        T
5      U-
  S9n[        U R                  R                  5      n/ n[        XU5        U R                  R!                  UR#                  5       5        A[         R                  S:  a  UR                  S:X  a  U R$                  b  U R$                  R'                  5       OSn[)        U5      S:  a:  [         R                  S	:  d   eU R                  R!                  [+        S
US9/5        UR                  c   e[-        UR                  S5      nUS   R/                  U5        U R                  R!                  U5        OHUR0                  b   e[2        R2                  " U5      n	S U	l        U R                  R!                  U	/5        U R                  R!                  U5        U R7                  [        T
5      U-
  5        T
(       a  U R9                  [;        5       5        U R                  R!                  U R=                  U R>                  U5      5        g )Nr{     rz  CALLPRECALLz%s triggered compiler  r   r   r  KW_NAMESr  Fr  ) r`  r  r   rq  stack_effectopmapargopcoder$  r  r+  r  r   r2   root_txr2  r  rr  kw_namesr  r   r(   r$   r  r1  copyexn_tab_entryrM  rK  r   r  r  )r   r   r   rQ  r  r-  r.  rV  
call_insts	inst_copyrK  s             r   rE  Ibreak_graph_if_unsupported.<locals>.decorator.<locals>.handle_graph_break  su      G+$$w.KK6)  #//IIi($(( $$SYYv%6A B  #//TXXFII,dkk:(,(D(DD	L0H )E )% 4;;../B)+G$Tw7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IIc$i,./		/+,KK//**))-r   r$  )r   r   r   r-   r   r?   r   r   )rV  rW  )rF  rH  rE  rG  rK  s   ` @r   	decorator-break_graph_if_unsupported.<locals>.decorator  sZ     
	"2	M 2	M 
#2	Mh<	+<	<	 '<	 	<	| r   )rF  Callable[..., None]r   8Callable[[InstructionTranslatorBase, Instruction], None]r   )rK  rG  r\  s   `` r   break_graph_if_unsupportedr`    s*    
v%v	Av vp r   c                  0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )BytecodeDispatchTableMetaiW  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  )r:   r   SUPPORTABLE)r   r   s     r   _missing4BytecodeDispatchTableMeta.__init__.<locals>._missing]  sS    2!(+dV4[\b[ccef;F8 D_ _ '22		r      )r   r   r   r   r   r   )super__init__rq  rR  r  r  rV  partialr  getdispatch_table)
r  r   basesdctrg  r   oprn  rn  	__class__s
            r   rk  "BytecodeDispatchTableMeta.__init__Z  s    c*
	 "iioo/
/
 Y%6%6x%HII/ 	 

 >C4[I[003[I

 Js   -B5Br   )
r  r  r   r   ro  r   rp  r   r   r   )r   r   r   r   r   rk  r   __classcell__rr  s   @r   rb  rb  W  s    ^J Jr   rb  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)ExceptionStackiq  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   rz  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_cyclerz  r   vals     r   set_current_exception$ExceptionStack.set_current_exception  s    ;;C@"%r   c                x    U R                   c   eU R                  U R                   5        U R                  5         g r   )rz  r   r}  r   s    r   move_current_exception_to_stack.ExceptionStack.move_current_exception_to_stack  s2    &&222D++,$$&r   c                8    U R                   c   eU R                   $ r   r|  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  rh   r   rx  _set_context_recursiveset_context)r   r  prev_idxctxprevs        r   r  %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                  [        5        g UnX#L a  g U(       a  UR                   nU(       + nM\  r*  )r  r  rh   r  rg   )r   r  oslow_oslow_update_toggler  s         r   _break_context_reference_cycle-ExceptionStack._break_context_reference_cycle  sn    
 "mmGG} 00~45A{ !++%7!7% r   c                v    U R                  U[        U R                  5      S-
  5        U R                  U5        g r~  )r  r   rx  r  r  s     r   r  =ExceptionStack._set_context_and_break_context_reference_cycle  s0     	##CT__)=)AB++C0r   c                6    U R                   R                  5       $ r   )rx  r  r   s    r   r  ExceptionStack.pop  s    ""$$r   c                :    U R                   R                  U5        g r   )rx  r   r  s     r   r   ExceptionStack.append  s    s#r   c                ,    [        U R                  5      $ r   )r   rx  r   s    r   r  ExceptionStack.__len__  s    4??##r   c                     U R                   U   $ r   )rx  )r   r   s     r   __getitem__ExceptionStack.__getitem__  s    u%%r   c                >    SU R                   < SU R                  < 3$ )Nzself._exc_stack=z - self._current_exception=)rx  rz  r   s    r   __str__ExceptionStack.__str__  s"    "$//##?t'>'>&@AAr   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   rx  r   rz  r}  r  r  r  r  r  r  r  r   r  r  r  __repr__r   r   r   r   rw  rw  q  s     '2&7&7&MJ#M2=2C2CD2Q/Q'&'
'	 	,/			861 1	1%$$&B Hr   rw  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-'   S\S.'   S/\S0'   S1\S2'   S3\S4'   SS5 jrSS6 jrSS7 jrSS8 jrSS9 jr	SS: jr
        SS; jr        SS< jr        SS= jrGS GSS> jjrGSS? jrGSS@ jrSSA jr\R&                  SB:  a  GSSC jrOGSSD jr\GSSE j5       rGSSF jrGSSG jrSSH jrGSSI jrGS	SJ jrGS
SK jrGSSL jrGSSM jrGSSN jrGSSO jr GSSP jr!GSSQ jr"\r#GSSR jr$GSSS jr%GSST jr&\'RP                  GS
SU j5       r)GSSV jr*GSSW jr+\,GSSX j5       r-GSSY jr.GSSZ jr/GSS[ jr0\0r1GSS\ jr2\,GSS] j5       r3GSS^ jr4GSS_ jr5\5r6\5r7\8" \9Rt                  S`5      r;\8" \9Rx                  S`5      r=\8" \9Rt                  Sa5      r>\8" \9Rx                  Sa5      r?GSSb jr@GSSc jrAGSSd jrBGSSe jrCGSSf jrDGSSg jrEGSSh jrFGSSi jrGGSSj jrHGSSk jrIGSSl jrJGSSm jrKGSSn jrLGSSo jrMGSSp jrNGSSq jrOGSSr jrPGSSs jrQGSSt jrRGSSu jrSSSv jrTGSSw jrUGSSx jrVGSSy jrWGSSz jrX\Y" SaS{S|9GSS} j5       rZ\Y" SaS~S|9GSS j5       r[\Y" SaSS|9GSS j5       r\GSS jr]GSS jr^GSS jr_GSS jr`GSS jraGSS jrb\Y" S`SS|9GSS j5       rcGSS jrd\e      GSS j5       rf                GSS jrg      GSS jrh\e        GSS j5       riSS jrj\Y" S`SS|9GSS j5       rkGSS jrlGSS jrmGSS jrnSS jroGSS jrpGSS jrqGSS jrr\s4GSS jjrtGSS jru\urvGSS jrwGSS jrx\xryGSS jrzGSS jr{GSS jr|GSS jr}GSS jr~GSS jrGSS jrGSS jr\Y" S`SS|9GSS j5       rGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jr\rGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jr\" \9GR<                  5      r\" \9GR@                  5      r\" \9Rt                  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Rd                  5      r\" \9GRh                  5      r\Y" SaSS|9" \" \9GRl                  5      5      r\" \9GRp                  5      r\" \9GRt                  5      r\" \9GRx                  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      r\" \9GR                  5      r\" \9GR                  5      r\" \9GR                  5      r\" \9GR                  5      rGSS jr\R&                  SB:  a  GSS jrGSS jrGSS jrGSS jrGSGS S jjr\Y" SaSS|9GSS j5       rGSS jrGSS jr\5r\5r\8" \9Rx                  S`5      r\8" \9Rx                  S`5      r\8" \9Rt                  S`5      r\8" \9Rt                  S`5      rGSS jrGSS jr      GS!S jr\eGS"S j5       rGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jrGSS jr\Y" SaSS|9GSS j5       rGSS jrGSS jrGSS jrGSS jrGSS jGr \Gr\Gr\GrSGrGSS jGrGSS jGrSGrGSS jGrSS jGr	 GS    GS#S jjGr
GS$S jGrSS jGrGS%S jGr\GS&S j5       GrG\GR                       GS'S j5       GrGS(S jGrSS jGrGS)S jGrGS*S jGrGSS jGr              GS+S jGr      GS,S jGr        GS-S jGr    GS.S jGr        GS/S jGr\eGS0S j5       Gr   GS1                                       GS2U 4S jjjGrSGrU =Gr$ (3  r   i  r@   r+  dict[str, VariableTracker]symbolic_localssymbolic_globalsr   symbolic_torch_function_stater   symbolic_stream_statez$Optional[dict[str, VariableTracker]]post_prune_cell_and_freevarslist[VariableTracker]stackOptional[int]r   r-   current_instructionr   r9  zlist[BlockStackEntry]r(  r   r   zOptional[ConstantVariable]rV  accept_prefix_instlist[Instruction]prefix_instsinline_depthinconsistent_side_effectszOptional[SpeculationEntry]current_speculationz	list[Any]rn  rw  exn_vt_stackzOptional[ExecutionRecorder]exec_recorderz+Optional[Callable[[VariableTracker], bool]]strict_checks_fnstart_pointhas_no_inlined_callsz#Optional[InstructionTranslatorBase]r'  is_child_tracer_activez3list[tuple[VariableTracker, list[VariableTracker]]]debug_localsOptional[CompilePackage]packagez
deque[str]latest_bytecode_queuec                    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)r  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)r  offsetr   r  r   r   r  r'  )r   r0  
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)r9  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   )r  r  r  r  r    r  r  )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   )r\  rb   )r   rh  s     r   r   :InstructionTranslatorBase.call_function.<locals>.<genexpr>E  s!      
; q/**;s   r  rX  z$Attempt to trace forbidden callable )r\  rb   r   r  all	itertoolschainvaluesr9  r  rX  callablerV   AssertionErrorrK  rL  )r   rX  r   kwargsrF  s        r   rL  '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"
)r\  rp   rL  r   rX  r   r  s       r   inline_generator_function3InstructionTranslatorBase.inline_generator_functionR  s/     "<==/3BF33r   c                    [         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.
)r   "enable_faithful_generator_behaviorr.   get_coder  InliningInstructionTranslatorinline_callr  s       r   inline_user_function_return5InstructionTranslatorBase.inline_user_function_return_  sC     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   r  r<   r  co_filenameco_name)r   r   inline_depth_strfuncnamefuncname_strs        r   get_line_of_code_header1InstructionTranslatorBase.get_line_of_code_headerm  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  r  r   rstrip)r   log_strlines      r   get_log_starts_line_log_str5InstructionTranslatorBase.get_log_starts_line_log_strw  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  r  r  is_trace_source_log_enabledtrace_source_logr  r^   r  )r   r   s     r   r  %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                  (       a?  [        R                  SUR                   UR"                  [%        U R                  5      5        [&        R(                  (       aW   [%        U R                  5      nU R,                  R/                  SUR                    S[%        UR"                  5       SU 35        U R1                  U5         U R2                  UR4                     " X5        U R6                  R8                  (       + $ ! [*         a    Sn Nf = f! [:         a    e [<        R>                   a  nU RA                  U5         SnAgSnAf[B        [D        4 a     g[F        [H        4 Ga5  nU RJ                  (       dH  U R                  (       d7  U RL                  (       d&  [O        U[F        5      (       aE  URP                  (       a4  [O        U[H        5      (       a  [S        S	S
SSS/[T        RV                  QS9  e U R                  ch  [X        R                  S5        [O        U[H        5      (       a  [S        SS
SSS/[T        RV                  QSS9  [O        U[F        5      (       d   eSUl(        e S[[        U5       3nU R]                  U R^                  UUS9   SnAOSnAff = fU R                  Ra                  U R                  5        g)z<Process exactly one instruction, return False we should exitNFr   zTRACE %s %s %sz0<self.stack repr truncated due to large integer>zTRACE  Tz3cannot resume from torch._dynamo.step_unsupported()r   ztraced torch._dynamo.step_unsupported(), but Dynamo is instructed to error on graph break. This graph break is used for debugging only.z1Remove the torch._dynamo.step_unsupported() call.z9Make sure fullgraph=False and error_on_graph_break=False.r  z1empty checkpoint - cannot resume from graph breakz6torch._dynamo.step_unsupported() with empty checkpointztraced torch._dynamo.step_unsupported(), but there is no checkpoint to step_graph_break from. This graph break is used for debugging only.zInclude at least one checkpoint: (1) include at least 2 ops and (2) make sure there is some line of code that is not in a try/with block, and has an empty Python stack.)r  r  r  r  r?  zEncountered graph break that we cannot resume from. Compiling up to the previous resumable state, then skipping the rest of the function. Graph break encountered:

r  )1rW   r   r   r  r  r  r  r  is_non_empty_graphr:  r  r   step_graph_breakis_trace_bytecode_log_enabledtrace_bytecode_logr  r   r  reprr   verbose
ValueErrorr  r   update_block_stackrn  rT  r+  r,  r   r   r   exception_handlerrF  rH  r;   r9   r<  is_tracing_resume_prologuer\  r?  r:   r   
DYNAMO_BUGr$  r   r  r  r   )r   ipr   
stack_reprr  r   s         r   stepInstructionTranslatorBase.step  s@   $=$?!%%:*.*;*;B*?? 4#%6 T--. 

1133''))'+~~'7D$''..t44%%d+--$$ $++t{{D<L >>P!$**-
 &&--QtDKK'8&9:,G 	%B	,T8{{....  PO
P . 	$$ 	""1%|, 	_- 8	 ,,22q+..1<<a11! U "%` PW /99
 ''/		MNa11! X "%a Pk /99	 $( "![1111#/ 031vh8    !! ! i8	t 	  ::4;T;TUs=   G6 <9H 6HHN&H<<NN!D+NNrK  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   r  )NOPJUMP_BACKWARD	NOT_TAKENr   )rX  r   r(  r1  r  r   )r   r   r   s      r   r  ,InstructionTranslatorBase.update_block_stack  s     &&E (()Q.D,<,<R,@,G,GG(8(8(<(C(CC $$((* D H /" ## < ) t//0A555$$((*)#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   r  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[        R                  S5        U R                   R                  U [        SU R                  5       /5      S9nU R                  (       GaE  SSK
Jn  [        R                  (       d   e[        U R                   R                  5      nUR!                  / [#        S5      QUR%                  S5      PUR'                  5       P[)        SSS	9P[#        S5      QUR%                  S5      PUR'                  5       P[)        SSS	9P5        U R+                  SXS   / US
S5      u  pVU" U5        / n[-        U R                  XG5        U R/                  U/U/U5        UR!                  U5        UR!                  / [#        S5      QUR%                  S5      P[)        S5      P[#        S5      QUR%                  S5      P[)        S5      P5        US   R0                  nUR!                  / [#        S5      QUR%                  S5      PUR'                  5       P[3        SU5      Q5        UR!                  / [5        S5      Q[)        SSS	9P5        U R                  R7                  [9        5       5        US   =R0                  S-  sl        US:  az  UR!                  / [#        S5      QUR%                  S5      PUR'                  5       P[;        5       P[3        US 5      Q[5        S5      QUR%                  S5      P[)        S5      P5        UR!                  [)        SUS-   S	9[)        SUS-   S	9[)        SUS-   S	9/5        U R                   R=                  UR?                  5       U R                  RA                  U R                  RB                  USS  5      -   5        g U R                   R=                  / [5        S5      Q[)        S5      P5        [        U R                   R                  5      nU R                   R=                  UR%                  S5      UR'                  5       /5        US   RD                  RG                  5        HX  u  pU R                   R=                  [;        5       UR%                  U
5      UR'                  5       URI                  U	5      /5        MZ     U R                   R=                  [)        S5      [K        U5      /U RL                  Q5        g )Nzstep triggered compilestep_unsupported)r   r   	skip_coder  r   r  rS  TFDELETE_SUBSCRr{  LIST_APPENDSTORE_SUBSCRUNPACK_SEQUENCEPOP_TOPr  )'r+  output_instructionsr  r  r$  r  r  r?   r  r'  
eval_framer,  r   nested_graph_breaksr2   rU  r)  r&   create_load_constcreate_binary_subscrr(   create_resumer2  codegen_call_resume	num_stackr#   r+   rK  r   r'   r  rr  r  r  locals_namesr  create_storer)   r  )r   continue_instr  r,  r-  leaf_resume_codeleaf_resume_namer.  r:  localr  s              r   r  *InstructionTranslatorBase.step_graph_break1  s:   ;;2222''333 ::~ 			*+$(KK$@$@%&84;M;M;O:PQ %A %
! ;;;- ----4;;../B 	 ^	((+	 ++-	 '|;		
 !^	 ((+	 ++-	 '|;	 261C1C=A">Be2. &')+G$T[["> $$&6%7:J9KRPW%  ^((+ '7 !^	
 ((+ '7	 2!4>>I ^((+ ++- )I6	  ^&}!< KK_./%a(22a72
 1}  	$Q	,,Q/	 //1	 '(		
 -Y=	 %Q	 ,,Q/	 +>:	" &'8i!mL&|QG&'8i!mL" KK//##%++33KK002KAB2O KK// ^&y1 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           
     l   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                  RO                  5         [)        U [,        5      (       a4  U R                  RQ                  5         U R                  RS                  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[*        5      (       a`  [)        U [,        5      (       aK  U R.                  (       d:  U R0                  (       d)  S[        U5       3nU R3                  U R4                  UUS9  [7        US5      (       an  SUR8                  ;   a^  [:        R<                  R?                  U R                  R@                  U R                  RB                  5      RE                  SSSS	9nX1l#        e e S nAf[         a6  nU RH                  (       a  U RH                  RK                  5       Ul&        e S nAff = f! U R                  RO                  5         [)        U [,        5      (       a5  U R                  RQ                  5         U R                  RS                  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   ztFailed to handle graph break gracefully. Skipping the function and falling back to eager. Graph break encountered:

r  rf  zData-dependentFT)print_outputinclude_strideinclude_device)*rD  r   r  r  r+  push_txr   r  r  	Exceptionr  r8   r  r   r   with_traceback__traceback__r   r4   RuntimeErrorr\  r;   rR  r   r<  r  r  r9  rf  r  r  GraphModule
nn_modulesgraphprint_readablepartial_fx_graphr  
get_recordexec_recordpop_txr.  mark_bytecode_tracing_stop)r   r  r   readable_graphs       r   runInstructionTranslatorBase.run  s   dkk--.E=##D)#'#;#; 
))++ ))++j ""$ d$9::KK'')
 KK::<O   ! 668_#Aw334Bs1vh@ ).9t	D
  2 (    q+.."4)>?? 55 NN77:1vh@ 
 (())% )  1e$$)9QUU)B%*XX%9%9..0A0A&$n%*4PT %  #
 *8& %%$($6$6$A$A$CAM	 ""$ d$9::KK'')
 KK::< ;C  sh    L%,E#+C8A#L%8
E AEE  E##J9C5I66J91J44J99J<<A&L""L%%
L3c                    Ub(  [        U[        5      (       d   S[        U5       35       eU R                  R	                  U5        g )Nz"push expects VariableTracker, got )r\  rb   r`   r  r   r  s     r   rK  InstructionTranslatorBase.pushE  sB    {jo>> 	
0?	
> 	

#r   c                8    U H  nU R                  U5        M     g r   rK  )r   valsr  s      r   	push_many#InstructionTranslatorBase.push_manyK  s    CIIcN r   c                6    U R                   R                  5       $ r   )r  r  r   s    r   r  InstructionTranslatorBase.popO  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   rM  InstructionTranslatorBase.popnR  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)Nr[  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)r  r  f_localsadd_local_varrK  r  unwrapKeyErrorrm  replacer:   r   r  r  )r   r   r   new_names       r   	LOAD_FAST#InstructionTranslatorBase.LOAD_FASTU  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   )
r  r  r  r+  side_effects	load_cellrK  r  rk  rl  )r   r   cellcontents_vars       r   
LOAD_DEREF$InstructionTranslatorBase.LOAD_DEREFx  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   )	r  r  set_name_hintr  rJ   r  r  r   r  )r   r   r   	loaded_vtr  s        r   r  $InstructionTranslatorBase.STORE_FAST  sf    {{HHJ	%%.T"55..0C9$$$.1+ 6r   c                2    U R                   UR                  	 g r   )r  r  r&  s     r   DELETE_FAST%InstructionTranslatorBase.DELETE_FAST  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   )r  r  r  r  r+  rt  
store_cellr\  r~   
local_namer{  )r   r   rv  r  s       r   STORE_DEREF%InstructionTranslatorBase.STORE_DEREF  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$ )Nr  )rS  rh   r  r  _constants_cache)r   r   rn  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   )rK  r  r&  s     r   r  $InstructionTranslatorBase.LOAD_CONST  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   )r  r  	f_globalsadd_global_var
f_builtinsbuiltinsload_builtinr  r+  rt  rK  load_globalrb   buildrO   )r   r   r   variabler  s        r   _load_global&InstructionTranslatorBase._load_global  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   rb   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 )NrK  r  r  )rS  r`  r  	PUSH_NULLr  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  r  rO   r  objectr+  rt  track_global_existingr\  r   r:   store_global)r   r   r  r   r
  r  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   <r[  _dot_	__import_)r  r  package_importer_package_imported_modulesro  r   add_import_sourcer+  import_sourcesglobal_scopeupdate_co_namesrO   )r   r  r  aliasr  s        r   r  '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
r[  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)r{  )
stacklevelzYcan't resolve package from __spec__ or __package__, falling back on __name__ and __path__r   __path__r[  r   )r  rm  r'  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   )fromlistr  globalszImport failurezmodule_name: z, fromlist: z, level=z"Failure when attempting to import.r  r   r[  r
  zBad import resultz%Import result is not a Python module.)rM  r  r  rH   LOCAL_MOD_PREFIXr  rO   
__import__r  r:   r   r  r  r  	partitionr  r  add_local_modr]   r]  r^  rG   rK  r   r`   )
r   r   r  r  r  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A  ,+K=XJhW\V]^ D9-889	s   F /F65F6c                \    U R                  U5        U R                  UR                  5        g r   )DUP_TOP
_load_attrr  r&  s     r   IMPORT_FROM%InstructionTranslatorBase.IMPORT_FROM`  s    T$r   c                l   XR                   ;  a   [        SSSU S3/ [        R                  QS9  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%failed to find name in frame builtinsr   zFailed to find name `z` in frame's builtins.r  r  )r  r:   r   r  r  rO   r+  %name_of_builtins_dict_key_in_fglobalsrN   rb   r  rU   rh   r  )r   r  r  builtins_source
var_sources        r   load_builtin_from_argval2InstructionTranslatorBase.load_builtin_from_argvalf  s    (?3F8;QR&11	 oof%C==*AAO +?CJ"((J??&s++++#**55r   c                X    U R                  U R                  UR                  5      5        g r   )rK  r  r  r&  s     r   r  &InstructionTranslatorBase.load_builtin}  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   r  r1  r[   	incrementindexofr&  s     r   r  InstructionTranslatorBase.jump  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   r1  r(  r   r0  r   r  r&  s     r   
SETUP_LOOP$InstructionTranslatorBase.SETUP_LOOP  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_EXCEPT  r  r   c                8    U R                   R                  5         g r   )r(  r  r&  s     r   	POP_BLOCK#InstructionTranslatorBase.POP_BLOCK  s    r   c                &    U R                  U5        g r   setup_or_before_withr&  s     r   
SETUP_WITH$InstructionTranslatorBase.SETUP_WITH      !!$'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 [        /S-  0 5      5        g )Nr  r{  )rM  rK  rL  rg   )r   r   r?  r   s       r   WITH_CLEANUP_START,InstructionTranslatorBase.WITH_CLEANUP_START  sJ    IIaL	{{		#		$$$T,B+Ca+GLMr   c                H    U R                  S5        U R                  S 5        g Nr  )rM  rK  r&  s     r   WITH_CLEANUP_FINISH-InstructionTranslatorBase.WITH_CLEANUP_FINISH  s    		!		$r   c                   U R                  5       R                  5       nU R                  U5         UR                  U 5      nU R                  U5        g ! [        [
        R                  4 a  n[        U[
        R                  5      (       a  [
        R                  " U 5        [        R                  S:  a  U R                  [        5        OU R                  5         U R                  U5         S nAg S nAff = fNrz  )r  realizerK  next_variableStopIterationr   ObservedUserStopIterationr\  r  r`  r  rg   r  )r   r   itr  r  s        r   FOR_ITER"InstructionTranslatorBase.FOR_ITER  s    XXZ!		"	""4(CIIcNs<<= 	!S::;;--d37*
 		01 
IIdOO	s   "A C8.B C33C8c                v    [        U[        R                  [        45      (       a  UR	                  U / 0 5      nU$ r   )r\  r   rf   r   rL  r  s     r   _create_exception_type0InstructionTranslatorBase._create_exception_type  s;    )++-NO
 

 ##D"b1C
r   c                    U R                  5       nUR                  " U S5      n[        U[        [        45      (       d   e[        R
                  " X#5      nUR                  " U S[        S5      U/0 5        g )NrM  __setattr__)r  r  r\  rh   r   from_frame_summarycall_method)r   r   r  tbnew_tbs        r   _attach_traceback_to_exception8InstructionTranslatorBase._attach_traceback_to_exception  s}    **,__

 !#45
 
 	
 
 #55mHo.7	
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                  U5      (       a;  [        USS 5      c-  [        R                  R                  R!                  5       Ul        U R                  U5      (       aR  U R$                  R'                  U5        [(        R*                  " UR                  5      n[        USS 5      nU" SU 3US9e[-        S[/        [(        5      S/ [0        R2                  QS9  g )Npython_stackraised exception )rA  zFailed to raise exceptionz.Attempted to raise a non-Exception type/value.r  )r  r.   r  r\  r   r   exc_typer
  rf   rN  rL  _isinstance_exceptionr  r  _guardsr   extract_stackr  r  r  r   get_dynamo_observed_exceptionr:   r   r   r  )r   r  observed_exception_typer  s       r   _raise_exception_variable3InstructionTranslatorBase._raise_exception_variable  s*    ))#.
 %%3	 ; ;<<-++L9GGbRTUC &&s++^T2:$}};;IIKC %%c**33C8&)&G&G&U#"3=L)#C5)l  	/HH1%001		
r   c                >   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  aM  U R                  S   n U R                  U5        U R                  R                  5       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        U R                  U5      nUR                  U [        S5      U5        g ! U R                  R                  5       nU R                  U5        f = f! U R                  R                  5       nU R                  U5        U R                  U5      nUR                  U [        S5      U5        f = f)Nr   zNo active exception to reraiser  r  r   	__cause__)rS  r   r  rh   r   r  rN  r  r#  r  r  r  r  r  call_setattr)r   r   rf  r  curr_excfrom_vtcauses          r   rp  'InstructionTranslatorBase.RAISE_VARARGS	  s   88q=t(())&'GH,,\4eL t(())))##B'C--c227C72**3/XX]**R.C>..s3  ,,BBD33H= hhjG((*CR..s3  ,,BBD33H=33G<%%d,<[,I5Q  ,,BBD33H=  ,,BBD33H=33G<%%d,<[,I5Qs   
F (G -F?AHc                    U R                   S   n[        U[        5      (       d   eUR                  [        L a  [        SSS/ S9  g U R                  U5        g )Nr  z CLEANUP_THROW with StopIterationr   zRReceived StopIteration when handling generator.throw/close. This is not supported.r  )r  r\  r   r  r
  r:   RERAISEr   r   toss      r   CLEANUP_THROW'InstructionTranslatorBase.CLEANUP_THROW7	  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 )NrK  )r`  r  r  r  r#  rK  )r   r   r  r   _exc_tbs         r   r-  !InstructionTranslatorBase.RERAISEE	  s     w&((*C{{HHJ..s3 		#..s388:D((*C((*C**3/r   c                "    [        U[        5      $ r   )r\  r   r  s     r   r  /InstructionTranslatorBase._isinstance_exception\	  s    #}--r   c                   / n[         R                  S:  a  [         R                  S:  a  SOSn[        U R                  5      U:  d   eU R                  U*    nU R                  S   nU R	                  U5      (       d   e[        UR                  5      nUR                  U S5      n[         R                  S:  a@  [        U R                  S   [        5      (       d  UR                  U R                  S   5        Ox[        U R                  5      S:  d   eU R                  S	   nU R                  S
   nU R	                  U5      (       d   e[        UR                  5      nUR                  U S5      nX&XW/-  nU R                  XB0 5        g )NrK  r{           r  rM     ir   )r`  r  r   r  r  rf   r  r  r\  r   r   rL  )r   r   r   fn_locrX  r  typr  s           r   WITH_EXCEPT_START+InstructionTranslatorBase.WITH_EXCEPT_START_	  sR   &(w&**W4Q!F tzz?f,,,VG$B**R.C--c2222!#,,/CB
 7*!$**R.,??KK

2/tzz?a'''BB**R.C--c2222!#,,/C7Bc2R(r   c           	      
  ^ ^^	 Sm	SU	UU 4S jjn[         R                  S:  GaZ  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 R                  R                  5       nT R#                  U5        [%        T 5      [&        L a  U" 5         Te[	        T R(                  5      (       GaA  T R(                  R                  5       nUR*                  R,                  S:X  a  T R/                  S5        T R                  R                  5         [	        T R(                  5      S:X  aW  T R
                  R!                  5         [%        T 5      [&        L a)  [1        S[3        T5      T	S-   / [4        R6                  QTS	9  TeT R(                  R                  5       nUR*                  R,                  S:X  a  M  T R                  R                  5       nT R                  R9                  5         [	        T R
                  5      UR:                  :  a5  T R                  5         [	        T R
                  5      UR:                  :  a  M5  [=        [?        S
5      SS S5      nT R(                  RA                  [C        US [	        T R
                  5      5      5        [	        T R                  5      S:  at  T R                  S   nT R                  [        RD                  " 5       5        T R                  U5        T R                  [        RF                  " URH                  5      5        O]T R                  [        RJ                  5        T R                  [        RJ                  5        T R                  [        RJ                  5        T R                  [        RD                  " 5       5        T R                  U5        T R                  [        RF                  " URH                  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TS9  g )NzObserved exceptionr  r   r  r6  )r  r  r   r!  python_typer\  r:   python_type_namer   r   r  rf  )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   rK  EXCEPT_HANDLERr{  r   z#Observed exception (EXCEPT_HANDLER)z  This graph break is unexpected.r6  g    .Ar  r   r   )&r`  r  r  rX  r   r  depthr  lastirK  r   rh   r  r  r  r  r   r  r  rR  r(  r   r   rM  r:   r   r   r  r  r2  r-   r   r   r0  r   rf   r  rg   )
r   rI  rJ  rX  r(  block_stack_entryexception_varexcept_handler_instold_exceptionrH  s
   ``       @r   r  +InstructionTranslatorBase.exception_handler	  s   d 	$
	 	  w& 44BBM
 $**o(;(;;HHJ $**o(;(;; !&&II!2243K3K3R3RS
 		$++AACD 		-( 

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

((*:)>>)(M(+,<(=,G"D-E&E(9(D(D&E)9 /.(,(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#c(<LdTU&V#  ''#$7s4::O
 t(()Q.$($5$5b$9M IIi779:IIm,IIi778N8NOP IIi>>?IIi>>?IIi>>? 		)3356		-(		)33M4J4JKL 		+, 

  ":!6635&&r   c                    U R                  5       n[        U R                  5      S:X  a  [        nOU R                  S   nU R	                  U5        U R	                  U5        U R                  R                  5         g )Nr   r  )r  r   r  rg   rK  r  )r   r   r  prev_excs       r   PUSH_EXC_INFO'InstructionTranslatorBase.PUSH_EXC_INFO
  s`    ( hhjt  !Q&(>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 )NrK  r   r  rL  zYBug in Dynamo tracing of exception handling.Top of the block stack is not EXCEPT_HANDLER.r{  )
r`  r  r  r   r  r(  r   r   r  rM  )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  rK  r  z Exception with bad expected typez"`except ...` has unsupported type r[  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   r  r  r`  r  r\  rf   r}   r   r   r:   r   r   r  r  r  
issubclassr  rX  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  J J
 3 ,6 r   c                j    U R                  [        R                  " U R                  5       5      5        g r   )rK  r   rh   ra  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   )ra  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  )r  rd  rK  r   rM  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   )rL  rf   iterr  r&  s     r   GET_ITER"InstructionTranslatorBase.GET_ITER
  s!    ?40488:,Cr   zjEncountered graph break when attempting to trace CALL_FUNCTION: a call to a regular function, e.g. f(x, y))rK  rG  c                ~    U R                  UR                  5      nU R                  5       nU R                  X20 5        g r   rM  r  r  rL  )r   r   r   rX  s       r   CALL_FUNCTION'InstructionTranslatorBase.CALL_FUNCTION
  s1    
 yy%XXZ2R(r   zjEncountered graph break when attempting to trace CALL_FUNCTION_EX: a variadic function call, e.g. f(*args)c           	        UR                   S:X  a  [        0 5      nU R                  5       nOUR                   S:X  d  [        R                  S:  aA  U R                  5       n[        U[        5      (       a  [        0 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   r9  z%Variadic function call with bad flagszflags: zHAttempted to call a variadic function (CALL_FUNCTION_EX) with bad flags r  r  rK  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)r  rm   r  r`  r  r\  r   r:   r   r  rx   has_force_unpack_var_sequencer}   force_unpack_var_sequencer   rf   call_custom_dictr  r`   r  keys_as_python_constantrL  r  )r   r   
kwargsvarsargsvarsnullrX  s         r   CALL_FUNCTION_EX*InstructionTranslatorBase.CALL_FUNCTION_EX
  s    ;;!*2.JxxzH[[A!1!1W!<J*l33.r2
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   zyEncountered graph break when attempting to trace CALL_FUNCTION_KW: a function call with keyword arguments, e.g. f(x=True)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  rM  r  r\  r}   r  r  r   r  ziprL  )r   r   argnamesr   rX  kwargs_listr  s          r   CALL_FUNCTION_KW*InstructionTranslatorBase.CALL_FUNCTION_KW
  s     88:yy%XXZ(M22x7R7R7T7TTT..0 !1CM>2D#h-9I4Jkc(016{c(m+++2V,r   c                    U R                  [        R                  " USS95        UR                  S   nU R                  S   U   n[
        R                  S:  a  U R                  U5        g U R                  [        R                  " XS95        g )Nr  rP  r   co_namesrK  )	rr  r   ro  r  r  r`  r  r  LOAD_METHODr   r   rS  r  s       r   LOAD_METHOD_SUPER+InstructionTranslatorBase.LOAD_METHOD_SUPER
  sr    ;..tA>?kk!n"":.s3g%OOF#[00EFr   c                    U R                  [        R                  " USS95        UR                  S   nU R                  S   U   nU R                  U5        g )Nr  rP  r   r  )rr  r   ro  r  r  r  r  s       r   LOAD_ATTR_SUPER)InstructionTranslatorBase.LOAD_ATTR_SUPER  sK    ;..tA>?kk!n"":.s3r   c                z   U R                  UR                  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  rK  )r  r  r  r`  r  rK  r  r   r   objs      r   r  %InstructionTranslatorBase.LOAD_METHOD	  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   rq  )r   r   r   dummyrX  s        r   CALL_METHOD%InstructionTranslatorBase.CALL_METHOD  sD    yy%
}}XXZ2R(r   c                    U R                  5       n[        [        5      R                  U U[        R
                  " U5      /0 5      nU R                  U5        g r   )r  rf   r  rL  rh   r  rK  )r   attrr  r  s       r   r  $InstructionTranslatorBase._load_attr   sJ    hhj )77"))$/0

 			&r   c                    [         R                  S:  a&  UR                  S-  (       a  U R                  U5        g U R	                  UR
                  5        g )Nrz  r  )r`  r  rS  r  r  r  r&  s     r   	LOAD_ATTR#InstructionTranslatorBase.LOAD_ATTR)  s<    w&xx!|  &$r   zkEncountered graph break when attempting to trace STORE_ATTR: storing an object's attribute, e.g. x.attr = yc                    U R                  S5      u  p#[        [        5      R                  U U[        R
                  " UR                  5      U/0 5        g r  )rM  rf   setattrrL  rh   r  r  )r   r   r  r  s       r   
STORE_ATTR$InstructionTranslatorBase.STORE_ATTR1  sF    
 99Q< .."))$++6<	
r   c                    U R                  5       n[        [        5      R                  U U[        R
                  " UR                  5      /0 5        g r   )r  rf   delattrrL  rh   r  r  r  s      r   DELETE_ATTR%InstructionTranslatorBase.DELETE_ATTR=  s>    hhj .."))$++67	
r   c                   / nUS::  d   eUS:X  a  UR                  [        S5      5        U R                  S:X  a  [        S5      O[        SU R                  S9nUR                  [        S5      [        S5      U/5        U$ )a  
Debug CPython expects the stack to be empty after the return.
Calling compile_subgraph will push cells and frame values to TOS.
This function will pop those 2 values from the stack before actually returning.

Expects the stack to be:
    cells, frame values, current frame stack (0 or 1 values)

Pops cells and frame values, leaving the current frame stack as TOS.
A return instruction is included.
r   r{  r  r  rP  r2  )extendr+   r   r(   r  )r   r:  ru  return_insts       r   codegen_return_with_pops2InstructionTranslatorBase.codegen_return_with_popsE  s      A~~>LLQ( {{n, ~.#N4;;G 	
 		*,>y,I;W	
 r   c                $  ^ ^^ U(       Ga  [        UR                  UR                  5       H  u  u  pn
[        [        T R
                  U
   5      nUR                  [        5       5        UR                  U5        UR                  / [        S5      QUR                  U5      PUR                  5       PUR                  U5      P[        S5      P5        M     UR                   H  u  p[        [        T R                  U   5      nUR                  [        5       5        UR                  U5        UR                  / [        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     [%        U5      (       a  UR&                  (       d   eUR&                  n[)        SUR*                   35      nU(       Gan  [-        T R.                  U5      m[1        UU 4S jT R                   5       5      n[3        UR4                  5      m[1        U4S jU 5       5      n[1        U4S jU 5       5      nUR                  [        5       UR                  U5      UR                  5       [        5       /5        U Ha  nUR                  [        5       UR                  UR                   UR"                  U   -   5      UR                  5       /[        S5      Q5        Mc     UR                  [        S5      [        S[7        U5      S	9/[        S5      Q[9        UR                   S
S5      Q5        O8[1        UR"                  R;                  5       5      n[1        UR4                  5      n[<        R>                  S:  a  [7        U5      S:X  d   S5       e[7        T R
                  5      [7        UR@                  5      -
  nT RB                  R*                  c   e[D        RF                  " T RH                  T RJ                  T RB                  R*                  UR*                  [1        S T RL                   5       5      UUU[1        S T RL                   5       5      U[1        UR                  5      [1        UR                  5      [1        UR@                  5      [1        U5      T RN                  (       + 5      n[P        RR                  " T RH                  5      RU                  SS 5      " 5       nUb-  [V        RX                  " U5      [P        RR                  " U5      S'   URZ                  (       a  T R\                  R_                  UU5        S
nO>T R\                  R_                  U[`        Rb                  " UT Rd                  U5      5        UnT Rf                  b*  T Rf                  Ri                  UT Rd                  S   U5        [j        S   URl                  ==   S-  ss'   UU4$ )a~  
Creates the resume function for the frame corresponding to `self`.

Expects the TOS to be:
    [frame N cells, ..., frame 1 cells],
    [
        frame N stack + locals,
        ...,
        frame 1 stack + locals
    ]

Some additional codegen may happen to prepare the frame stack + locals values for the generated resume function:
- inactive context variables in the stack and locals will be replaced by their types
- if the frame is a leaf frame, prune dead locals

Regardless of codegen, the stack will be left in the same state as before.

Args:
    - idx: depth of this frame: 0 corresponds to the leaf frame (frame N), N-1 to the root frame (frame 1).
    - resume_inst: the instruction that this frame should resume at
    - meta: metadata for this frame returned from OutputGraph.compile_subgraph
    - resume_codes: nested resume code objects generated from previous create_resume calls.
    - cg: codegen object to output to
    - is_leaf: True if `self` corresponds to the leaf frame.
    - handle_inactive_ctx: If True, handles inactive context variables as described above. This is necessary
        iff the resume function is traced
r  r0  __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   :InstructionTranslatorBase.create_resume.<locals>.<genexpr>  s7      !-A: "#4+A+A+C"C -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   r    s     S1AR8RQQ   		c              3  6   >#    U  H  oT;   d  M
  Uv   M     g 7fr   r   r  s     r   r   r    s     !T\BS=S!!\r  r2  r  r-  NTrz  r   z&variables should not be NULL in < 3.12c              3  L   #    U  H  oR                   R                  v   M     g 7fr   )r1  r  r   r1  s     r   r   r    s     <+;a((//+;s   "$c              3  @   #    U  H  oR                  5       v   M     g 7fr   )r;  r  s     r   r   r    s     :)9A++--)9   orig_graphmodulec                     g r   r   r   r   r   r   9InstructionTranslatorBase.create_resume.<locals>.<lambda>  s    r   r   resumesr   )7r  stack_ctx_argsstack_ctx_idxes_origr   ri   r  append_outputr'   r+  r)  r+   r6  r7  r(   locals_ctx_argsr  r:  r;  r/   r1  r0   r  r    r  r:  r  locals_null_keysr   r#   keysr`  r  stack_null_idxesr  rI   lookupr  r   r(  r9  r1   get_contextrm  weakrefrefr  r+  install_global_unsafer]  FunctionTyper  r  add_resume_functionrX   r  )r   r  resume_instmetaresume_codesr-  is_leafhandle_inactive_ctxjr   j_origr  r   resume_nameall_argnamesr  argnames_nullrS  	stack_lennew_codeorig_graphmodule_maybepackage_namer  r  s   `                     @@r   r8  'InstructionTranslatorBase.create_resumee  s[   T "%d&9&94;T;T"U2DJJv4FG  !12$$R(  $Q,,S1 //1 ,,Q/	
 +>: #V   //2D4H4H4NO  !12$$R(  $Q,,S1 //1 ,,T^^d>O>OPT>U-UV	
 +>: 0( K((%%%%%,,K,{/A/A.B CD %d&7&7EE  !--! L
 !$D$9$9 :SSSH!!T\!TTM "$((-++-"$	    &(,,T^^d>O>OPS>T-TU//1 %Q	   &y1&|XG !^
 )tD	 T..3356H!$"7"78Mg%}%*T,TT* 

Oc$*?*?&@@	''..:::#9#@#@KKKK$$++<4+;+;<<:)9)9::$%%&$&&'$''(,---!$
* ".!9!9$++!F!J!J"
 " "-EL[[&FL$$X./AB
 KK--k8DL KK--""8T^^[I 'L<<#LL,,$..4l 	H,,-2-$$r   c           
        SU l         [        U R                  R                  5      n/ n/ n/ nU nSnUbl  XpL a  Un	OUR                  n	U	R
                  S:w  a3  UR                  U5        UR                  U5        UR                  U	5        UR                  nUS-  nUb  Ml  [        U R                  5      [        US   R                  5      -
  n
U(       d~  U
S:  d   eUR                  [        U
S-   5      5        [        U
S-   5       H  nUR                  [        S5      5        M     UR                  [        S5      5        UR!                  5       $ US   U L a%  UR                  [        SU
S95        SnXS   l        OUR                  [        U
5      5        [        U
S-
  5       H  nUR                  [        S5      5        M     UR                  [        SSS95        X%S      R"                  nX%S      =R"                  S-  sl        US   R%                  ['        5       5        UR                  / [)        S5      QUR+                  US   5      PUR-                  5       P[/        XS	5      Q5        / nU HG  nUR1                  [3        5       UR+                  U5      UR-                  5       /[        S5      Q5        MI     UR1                  [        S5      [        S[        U5      S9/5        UR                  U5        UR                  / [        S5      Q[4        R6                  " U5      Q[        S5      Q5        / n/ n[9        U5       HK  u  nnUR;                  UUU   X%U      UUXpL S	5      u  nnUR                  U5        UR                  U5        MM     U R=                  XU5        UR                  [        S5      5        UR!                  5       $ )
a  
Codegen all resume function(s) from the frame stack starting at `self`, call them,
and return the result.
Assumes that the unsupported instruction has already been run.

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

Leaves the result of calling the resume functions on the stack and returns it
(empty stack after return).

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.
Nr   r  r   r  r2  r  r-  T)r   r2   r+  rU  r  r   r   r'  r   r  r  r)  r+   r  r  r(   rr  r:  rK  r   r&   r6  r7  r#   r  r'   rW  deepcopyrs  r8  r9  )r   r   r  r-  txesidxesresume_instsr0  r  r  current_num_stackr   stack_insert_idxfilter_instsr  resume_namesrn  resume_coder  s                      r   r  /InstructionTranslatorBase.create_call_resume_at(  s   6 $( t{{**+ 13*,6: ~"$55!!^3F#S!##K0]]F1HC    

Oc%a(99/
 

 
 %)))[):Q)>?@,q01  !3I!>? 2/?@&&(( 7d? /BSTU 5Fa(2
 [):;<,q01  !3I!>? 2/!DE8qBLL%Ah/99Q>9GLL*+ 	Q $$U1X. '')	
 %%5N
	
 C"$((-++- !^	  	"9-"<SZ@	
 	& 	Q|, Q	
 .0"4IAv'-';';Q)(3($K ,, ) 	  R@
+N;<""$$r   c           	     J   UR                  [        S5      5        [        [        X5      5       H  u  nu  pEU[	        U5      S-
  :X  a    OUR
                  (       aK  UR                  [        5       UR                  U5      UR                  5       /5        UR                  XE5        O"UR                  UR                  USS5      5        UR                  [        S5      5        M     UR                  [        S5      [        S[	        U 5      S-
  S9/5        UR                  [        S5      5        U S	   R
                  (       ae  UR                  UR                  S	5      UR                  5       /5        UR                  US	   U S	   5        UR                  / [        S5      Q5        O;UR                  [        S5      /UR                  US	   S5      Q[        S5      Q5        UR                  [        5       [        5       UR                  S	5      UR                  5       /[        S5      QUR                  S	5      P[        S
5      P5        UR                  / [        S5      Q[        SSS9P[        S5      Q[        SSS9P5        UR                  [        SS5      5        g)a  
Calls the provided resume functions.

Expects the TOS to be in the state:
    [frame N cells, ..., frame 1 cells],
    [
        frame N stack + locals,
        frame N-1 stack + locals,
        ...,
        frame 1 stack + locals
    ]

Pops the cells and frame values, leaving the result of calling the resume functions on TOS.

Args:
    - resume_codes: list of resume function code objects to call
    - resume_names: list of the corresponding names of the resume functions
    - cg: PyCodegen object to output instructions to
r  r   Fr   r2  r  r-  r{  r  r.  LIST_EXTENDTN)r)  r&   rs  r  r   r  r'   r6  r7  make_function_with_closureload_function_namer+   r(   r*   r%   )r  r  r-  rn  r   codes         r   r9  -InstructionTranslatorBase.codegen_call_resume  s   4 	Q((\)HIOA|C%))  &(,,Q///1 --d9  !6!6tUA!FG[^,  J  	"9-"<S5F5JK	
 	Q(''((,++- )),r*:L<LM!!_ &y1**<+;UC "!_( 	  $$R('') Q $$R( #?3	
  	a"<Q7 Q
 #=a8	
 	0=>r   c                D   [         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      =(       a    U R                  (       + =(       a}    U R                  =(       d    U R                  (       + =(       aR    U R                  (       + =(       a:    U R                  (       + =(       a"    U R                  R                  R                  S L $ )NrK  r  Fc              3  @   #    U  H  oR                  5       v   M     g 7fr   r5  r  s     r   r   IInstructionTranslatorBase.should_compile_partial_graph.<locals>.<genexpr>N       :)9A)9r  )r`  r  r  rX  r(  r1  r  r<  r  r   r  r;  r+  current_tracerr'  )r   r   s     r   r  6InstructionTranslatorBase.should_compile_partial_graphE  s    w&,,::E$$D<L<LR<P<W<W(W:)9)9:: :NN": ,,MD4M4M0M: 333	:
 888: **11T9		
r   ziEncountered graph break when attempting to trace STORE_SUBSCR: trying to store subscript, e.g. x[key] = yc                V    U R                  S5      u  p#nUR                  U SXB/0 5        g )Nr{  __setitem__rM  r  )r   r   r  r  keys        r   r0  &InstructionTranslatorBase.STORE_SUBSCRX  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   r.  'InstructionTranslatorBase.DELETE_SUBSCR`  s%    99Q<mcUB7r   c                n    U R                  UR                  5      nU R                  [        U5      5        g r   )rM  r  rK  r}   r   r   r  s      r   BUILD_TUPLE%InstructionTranslatorBase.BUILD_TUPLEd  s%    		$++&		-&'r   c                j    U R                  UR                  5      nU R                  [        X S95        g )N)r   )rM  r  rK  r|   r  s      r   BUILD_SLICE%InstructionTranslatorBase.BUILD_SLICEh  s%    		$++&		-/0r   c                    g)zCheck if comprehension speculation is allowed in nested context.

For the base class (non-inlined), this always returns False.
Fr   r   s    r   #_can_speculate_comprehension_nested=InstructionTranslatorBase._can_speculate_comprehension_nestedl  s    
 r   c                F   [         R                  S:  a  UR                  S:X  d  gU R                  5       (       d  g[	        S U R
                   5       5      =(       a    U R                  (       + =(       aj    U R                  (       + =(       aR    U R                  (       + =(       a:    U R                  (       + =(       a"    U R                  R                  R                  SL nU(       a  U R                  b  U R                  5       nU(       aN  U R                  S:X  a>  U R                  5       nUR!                  U 5      (       a  U R#                  U5        gX0l        U R'                  5       nUS:  d   eU R(                  R+                  U5        U =R                  S-  sl        g)z
Handle comprehension start for Python 3.12+ BUILD_LIST/BUILD_MAP with argval 0.
Returns True if a graph break was triggered and the caller should return early.
rz  r   Fc              3  @   #    U  H  oR                  5       v   M     g 7fr   r  r  s     r   r   SInstructionTranslatorBase._maybe_setup_comprehension_speculation.<locals>.<genexpr>  r  r  NTr   )r`  r  r  _is_comprehension_startr  r(  r<  r   r  r;  r+  r  r'  r  _comprehension_depthr:  r   !_handle_comprehension_graph_breakr  _find_comprehension_end_for_ip_comprehension_end_for_ipsr  )r   r   can_speculaterC  
end_for_ips        r   &_maybe_setup_comprehension_speculation@InstructionTranslatorBase._maybe_setup_comprehension_speculations  sT   
   G+q0@++-- :)9)9:: :NN":---: 333: 888	:
 **11T9 	 T[[4 DDFMT66!;..*K!!$''66t<'2$88:
Q''++J7!!Q&!r   c                    U R                  U5      (       a  g U R                  UR                  5      nU R                  [	        U[        5       S95        g Nmutation_type)r  rM  r  rK  r{   ra   r  s      r   r  $InstructionTranslatorBase.BUILD_LIST  s?    66t<<		$++&		,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_ONLYr:   rM  r  rn   ra   rK  )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  )rM  r  r  rv  NotImplementedErrorr:   r   r   r  rK  ra   )r   r   r  seqsr  seqs         r   BUILD_LIST_UNPACK+InstructionTranslatorBase.BUILD_LIST_UNPACK  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  r}   r&  s     r   BUILD_TUPLE_UNPACK,InstructionTranslatorBase.BUILD_TUPLE_UNPACK  s    t7r   c           	         U R                  U5      (       a  g 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  rM  r  r  r  rK  rm   ra   )r   r   r  ds       r   	BUILD_MAP#InstructionTranslatorBase.BUILD_MAP  sg    66t<<		$++/*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  )rM  r  rf   r  rL  r\  rm   updater  rK  ra   )r   r   r  rh  r  s        r   BUILD_MAP_UNPACK*InstructionTranslatorBase.BUILD_MAP_UNPACK  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  rM  r  r\  r}   r  rv  r   rK  rm   r  r  ra   )r   r   r  r  s       r   BUILD_CONST_KEY_MAP-InstructionTranslatorBase.BUILD_CONST_KEY_MAP  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  )rM  r  rS  r  r  r\  rm   r  )r   r   r   r   r  s        r   MAP_ADD!InstructionTranslatorBase.MAP_ADD  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  r  rS  r  r\  rn   
is_mutabler  r   r   r   r  s       r   SET_ADD!InstructionTranslatorBase.SET_ADD  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/  r1  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  r  rS  r  r  r\  r{   r0  r+  rt  mutationr  r   r1  s       r   r/  %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 )	NrK  co_qualnamer  r     r;  r  r   )rS  r`  r  r  r9  r  rh   r  r<  rK  rr   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R                  5       (       a$  UR                  U [        UR                  5      S9nO[        U[        5      (       a  UR                  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)r  z+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  r  r  r  r  r\  r   r  r  as_proxyr   re   ru  rv  r:   r   r   r  r   r  r   rK  )r   r   r  r  proxyrn  s         r   r1  )InstructionTranslatorBase.UNPACK_SEQUENCE2  sa   hhj==??))$eDKK6H)IC_--#''2C2C2E2E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  )r  r  ru  r   rv  r   r   rK  r}   r:   r   r   r  )
r   r   prefixsuffixr  r_  vals_prefix	vals_listvals_suffixitems
             r   	UNPACK_EX#InstructionTranslatorBase.UNPACK_EXR  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   z-Encountered intentional debugging graph breakc                B    U R                   (       a  [        SSSS/S9  g g )Nz#Forced graph break on leaf functionr   zSForced graph break on non-inlining function for nested graph break testing purposeszGSet torch._dynamo.config.debug_force_graph_break_on_leaf_return = Falser  )r  r:   r&  s     r   graph_break_on_leaf_function6InstructionTranslatorBase.graph_break_on_leaf_functionj  s0     $$=6 ^ %r   c                H    UR                   S:X  a  U R                  U5        g g )NGRAPH_BREAK_IF_LEAF)r  rT  r&  s     r   r!  InstructionTranslatorBase.NOPy  s"    ;;//--d3 0r   c                $    U R                  5         g r   r  r&  s     r   r2  !InstructionTranslatorBase.POP_TOP~      
r   c                    U R                  5       nU R                  5       nU R                  U5        U R                  U5        g r   r  rK  r   r   ar1  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`  r1  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`  r1  rd  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  r{  )rf   r   rL  r  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   )LazySymNodeFormatStringrw   r  r{  z{:})r  r\  r   torch._dynamo.variables.lazyru  rw   r  r
  rK  rr  rh   r  rL  rf   r   format)r   fmt_specr>  r  ru  rw   fmt_vars          r   _format_value'InstructionTranslatorBase._format_value  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   )rS  r  rh   r  r{  )r   r   r>  ry  s       r   FORMAT_VALUE&InstructionTranslatorBase.FORMAT_VALUE  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R                  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   )rS  rM  r  r   r\  r   StringFormatVariableformat_stringr  sym_argsr  r  
sym_kwargsr:   r   r  r%  r   rK  r  r  )r   r   format_string_partsr   r  parts         r   BUILD_STRING&InstructionTranslatorBase.BUILD_STRING  st   )+&(-/xx###IIdhh'D&&((#**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 notrj  rP  )r  r(   rj  )r   r   
new_argvalnew_insts       r   IS_OPInstructionTranslatorBase.IS_OP  sM    {{a4;;!#333;;!J!J%l:F!r   c           	     4   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 a}  n[        U[        5      (       a"  UR                  (       a  e 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__)r  rM  rK  r  r   ObservedTypeErrorr;   r\  r?  r=  r  rb   r  rB   	UNARY_NOT)r   r   leftrightrq  rD  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A3D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  r  rS  r  r\  r{   r0  r  r1  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   )rK  rf   r:  rL  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 )Nr  zgenerator raised StopIterationr  r&  )
r  r  r  r
  r   rf   rN  rL  rh   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 r5  )	r  r  rS  r  r  r\  rm   r0  r  r1  s       r   
DICT_MERGE$InstructionTranslatorBase.DICT_MERGE2  s    HHJ{{Qxx###jj$((#++-#01111~~hR0r   c                $    U R                  5         g r   rZ  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 )Nr  r  )r  r  rK  rh   r  r   r  r  r.  s      r   GET_LEN!InstructionTranslatorBase.GET_LEN@  s_    jjn!!##II&--c#2H2H2J.KLMIIcoodIr2>?r   c                    U R                   S   nU R                  U R                  [        R                  " U [
        5      U/0 5      5        g)zZ
If STACK[-1] is an instance of collections.abc.Mapping, push True.
Otherwise, push False
r  N)r  rK  r  rb   r  rC   r.  s      r   MATCH_MAPPING'InstructionTranslatorBase.MATCH_MAPPINGG  sC    
 jjn		,,%%dO<	
r   c                    U R                   S   nU R                  U R                  [        R                  " U [
        5      U/0 5      5        g Nr  )r  rK  r  rb   r  rF   r.  s      r   MATCH_SEQUENCE(InstructionTranslatorBase.MATCH_SEQUENCEU  sB    jjn		,,%%d,?@	
r   c           	        U R                  S5      u  p#n[        R                  " UR                  5      nU R	                  U R                  [        R                  " U [        5      X#XT/0 5      5        [        R                  S:  aH  U R                  S   nU R	                  [        R                  " [        U[        5      (       + 5      5        g g )Nr{  rK  r  )rM  rh   r  rS  rK  r  rb   r  rD   r`  r  r  r]   )r   r   subjectr  namesrS  r/  s          r   MATCH_CLASS%InstructionTranslatorBase.MATCH_CLASS_  s    "iile%%dhh/		,,%%d,<=s*	
 g%**R.CII&--&>N2O.OPQ &r   c                   U R                   S   nU R                   S   n[        U[        5      (       d   eU R                  U R	                  [
        R                  " U [        5      X2/0 5      5        [        R                  S:  aH  U R                   S   nU R                  [        R                  " [        U[        5      (       + 5      5        g g )Nr  r   rK  )r  r\  r}   rK  r  rb   r  rE   r`  r  rh   r  r]   )r   r   r  r  r/  s        r   
MATCH_KEYS$InstructionTranslatorBase.MATCH_KEYSo  s    zz"~jjn$....		,,%%dO<sk2	
 g%**R.CII&--&>N2O.OPQ &r   c                D    U R                  U R                  S5      5        g )Nr  rK  r  r&  s     r   LOAD_ASSERTION_ERROR.InstructionTranslatorBase.LOAD_ASSERTION_ERROR  s    		$//0@ABr   c                D    U R                  U R                  S5      5        g )N__build_class__r  r&  s     r   LOAD_BUILD_CLASS*InstructionTranslatorBase.LOAD_BUILD_CLASS  s    		$//0ABCr   z`Encountered graph break when attempting to trace BINARY_SUBSCR: a binary subscript, e.g. x[attr]c                |    UR                   S:X  a  U R                  U5        SU l        g U R                  (       a   eg )Nr   F)rS  append_prefix_instr  r&  s     r   RESUME InstructionTranslatorBase.RESUME  s5    88q=##D)&+D#.....r   c                R    UR                   c   e[        UR                      " X5      $ r   )rS  _binary_op_lookupr&  s     r   	BINARY_OP#InstructionTranslatorBase.BINARY_OP  s&    88'''$TXX.t::r   c                    g r   r   r&  s     r   rN  !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_constsr  )r  rS  r\  r:  r   rV  rh   r  )r   r   rV  r   s       r   rO  "InstructionTranslatorBase.KW_NAMES  sm    $$[1$((;(E****DdC(((( }}$$$(//h?r   c                6    U R                  [        5       5        g r   )rK  r   r&  s     r   r  #InstructionTranslatorBase.PUSH_NULL  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   )r`  r  r  r\  r}   r  r  rV  r  rS  rM  r   r   r  r  rL  )	r   r   call_kwrV  contentsrX  r   r  r  s	            r   _callInstructionTranslatorBase._call  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)zTEncountered graph break when attempting to trace CALL: a function call, e.g. f(x, y)c                &    U R                  U5        g r   r  r&  s     r   rM  InstructionTranslatorBase.CALL  s    
 	

4r   c                t    UR                   c   eU R                  U R                  UR                   *    5        g r   )rS  rK  r  r&  s     r   COPYInstructionTranslatorBase.COPY  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 r  )rS  r  r&  s     r   SWAPInstructionTranslatorBase.SWAP  sM    xx###04

DHH90EtzzRT~-

2

DHH9-r   c                    g r   r   r&  s     r   CACHEInstructionTranslatorBase.CACHE  r  r   c                &    U R                  U5        g r   r  r&  s     r   BEFORE_WITH%InstructionTranslatorBase.BEFORE_WITH  r  r   c           	     R   [        U[        5      (       a0  UR                  5       (       d  U R                  R	                  U5        [
        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(       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 5      $ )NrK  r  )r\  rj   supports_graph_breaksr;  r   r`  r  rX  r(  r1  r  rR  r   r5  r0  r   r  enter)r   r  r   r1  s       r   	enter_ctx#InstructionTranslatorBase.enter_ctx  s-    s:;;--//0077<w&
 !!$$%%,,D4D4DR4H4O4OO,,::FFF..<<CC[[F$ 566&:T:T  ''#D#djj/3G   ''c$**o(VWyyr   c                J    [        SSU  3SU R                  5        S3/ SQS9  g )NzUnsupported context managerz1Attempted SETUP_WITH/BEFORE_WITH/LOAD_SPECIAL 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:   rF  )r  s    r   unsupported_ctx_graph_break5InstructionTranslatorBase.unsupported_ctx_graph_break:  s3    1GuM?@T@T@V?WWij		
r   c                >   U R                  5       n[        U[        [        45      (       d  U R	                  U5        [        U[        [        45      (       d   eU R                  [        X!R                  5      5        U R                  U R                  X!5      5        g r   )	r  r\  ri   rj   r  rK  rl   r1  r  )r   r   r  s      r   r  .InstructionTranslatorBase.setup_or_before_withK  s    hhj)+IJ
 
 ,,S1 )+IJ
 
 	
 
 			*3<=		$..+,r   c                `    U R                   (       d   eU R                  R                  U5        g r   )r  r  r   r&  s     r   r  ,InstructionTranslatorBase.append_prefix_instZ  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  )r`  r  r  r\  r  r  r   r+  rt  track_cell_newr  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   r  r&  s     r   COPY_FREE_VARS(InstructionTranslatorBase.COPY_FREE_VARSi      %r   c                &    U R                  U5        g r   r  r&  s     r   RETURN_GENERATOR*InstructionTranslatorBase.RETURN_GENERATORl  r  r   c                8   [         R                  S:  a  U R                  5         OU R                  S5        [         R                  S:  aP  U R                  U   nX R
                  ;   a1  U R
                  R                  U5        U =R                  S-  sl        g g g )Nr  r  rz  r   )r`  r  r  rM  r  r  discardr  )r   r   
current_ips      r   r  !InstructionTranslatorBase.END_FORs  s}    w&HHJIIaL w&d+J<<<//77
C))Q.) = 'r   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  )	r]   r  rm  r  r   r:   r   r  rq  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   )r  r  rK  r   rq  r&  s     r   r  -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R                  5        g )Nr  rP  r   )rr  r   ro  rS  r  r  r  r&  s     r   LOAD_SUPER_ATTR)InstructionTranslatorBase.LOAD_SUPER_ATTR  sV    ;..tA>?xx###88a<T"OODKK(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 )	Nr{  r<     z Missing CALL_INTRINSIC_1 handlerzCALL_INTRINSIC_1 operand: z,No handler implemented for CALL_INTRINSIC_1 z instruction.r  )
r  r  UNARY_POSITIVErK  r}   r  rv  r:   r   rf  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   zpEncountered graph break when attempting to trace CALL_KW: a function call with keyword arguments, e.g. f(x=True)c                $    U R                  USS9  g )NT)r  r  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-  (       aE  [        R
                  S:  d   eUR                  U [        R                  " S5      /0 5      nXCl	        OUS-  (       a  XCl
        OUS-  (       aZ  [        U[        5      (       d   eUR                  n[        [        [        US S S2   USS S2   SS95      [!        5       S	9nXcl	        O!US-  (       a  XCl        OUS-  (       a  XCl        U R'                  U5        g )
N   r9  r   r=  r;  r  T)strictr  )rS  r  r\  rr   r`  r  rL  rh   r  r   rA  r}   r  rm   r  r  ra   rB  r@  rK  )r   r   r>  rX  r  r  anns          r   SET_FUNCTION_ATTRIBUTE0InstructionTranslatorBase.SET_FUNCTION_ATTRIBUTE  s      XXZ"89999xxz4<##w... %%d-=-D-DQ-G,H"MD!NT\JT\dM2222 JJE#SssU14a4[>?.0C !NT\ MT\K		"r   c                v    U R                  U R                  U R                  5       UR                  5      5        g r   )rK  rr  r  r  r&  s     r   CONVERT_VALUE'InstructionTranslatorBase.CONVERT_VALUE  s%    		$%%dhhj$++>?r   c                P    U R                  [        R                  " S5      S5        g )Nr   r   )r{  rh   r  r&  s     r   FORMAT_SIMPLE'InstructionTranslatorBase.FORMAT_SIMPLE  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_SPEC  s    488:q)r   )	__enter____exit__
__aenter__	__aexit__c                   [        UR                  [        5      (       d   S5       eU R                  UR                     nUS;   a  U R	                  5       n[        U[
        [        45      (       d  U R                  U5        [        U[
        [        45      (       d   eUS:X  a,  U R                  [        U5      5        U R                  U5        g U R                  [        US 5      5        U R                  U5        g U R                  U5        U R	                  5       nU R                  U5        U R                  U5        g )Nz*expected LOAD_SPECIAL arg to be set to int)r&  r'  r&  )r\  rS  r   _load_special_namesr  ri   rj   r  rK  rk   r  rl   r  )r   r   r  r  r  s        r   LOAD_SPECIAL&InstructionTranslatorBase.LOAD_SPECIAL  s   $((C((V*VV(''1,,((*C-/MN  005 -/MN    {"		3C89t$ 		23=>t$ OOD!((*CIIcNNN4 r   c                b    U R                  [        R                  " UR                  5      5        g r   )rK  rh   r  r  r&  s     r   LOAD_SMALL_INT(InstructionTranslatorBase.LOAD_SMALL_INT  s    		"))$++67r   )r  r  r:  r  anyc                    [        UR                  [        5      (       d   S5       eU R                  U R	                  U R
                  UR                     5      5        g )Nz2expected LOAD_COMMON_CONSTANT arg to be set to int)r\  rS  r   rK  r  _common_constantsr&  s     r   LOAD_COMMON_CONSTANT.InstructionTranslatorBase.LOAD_COMMON_CONSTANT)  sK    $((C(( 	
@	
( 			$//0F0Ftxx0PQRr   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>2  s    dr   TF)r+  count_callsr  r   s    r   r  ,InstructionTranslatorBase.is_non_empty_graph/  s%    ;;""$q(&2D#r   c           
         Uc  / nSR                  [        R                  " U R                  5       /[	        [        U5      5      -   5      5      $ )Nr   )r  	tracebackformat_listr  r   r   )r   additional_stack_framess     r   format_frame_summary.InstructionTranslatorBase.format_frame_summary6  sN     #*&(#ww!!##%&h7N.O)PP
 	
r   c           	         [         R                  " [        U R                  SS5      U R                  [        U R                  SS5      SS9$ )Nr  	<unknown>r  F)lookup_line)r=  FrameSummaryr  r  r   r   s    r   r  'InstructionTranslatorBase.frame_summaryA  s?    %%DKK<KKDKKK8	
 	
r   c                    [        U R                  SS5      n[        R                  " S5      nUR	                  U5      S L$ )Nr  rC  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_modulesI  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_idr  r  r>   rP   r  r=   WEAKREF_ALIVE)r   rK  r  global_names       r   store_global_weakref_by_id4InstructionTranslatorBase.store_global_weakref_by_idN  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   rV  #InstructionTranslatorBase.fake_modeU  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)r  )r   check_fnpriors      r   strict_translation_mode1InstructionTranslatorBase.strict_translation_modeY  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      $ r  )r   r'  r   r  r  r   r  r   s    r   r:  #InstructionTranslatorBase.speculateg  s|    ''333''!+++##((KK##KK$$q(d66:;	
 	
r   c                    [         R                  S:  d   eU R                  c   eU R                  S-
  n[        5       nU R                  U[        U5      -
  U  Vs/ s H  o3R                  PM     nnXB:H  $ s  snf )zDetect if we're at the start of a list/dict comprehension in 3.12+.

In Python 3.12+, comprehensions are inlined with a bytecode pattern that
precedes BUILD_LIST/BUILD_MAP.
rz  r   )r`  r  r   r  r  r   r   )r   r  patternr   rK  s        r   r  1InstructionTranslatorBase._is_comprehension_startq  s     7***''333%%)46*.*;*;BW<MPR*ST*S$++*ST   Us   A7c                @   [         R                  S:  d   eU R                  c   eSn[        U R                  [	        U R
                  5      5       HJ  nU R
                  U   nUR                  S:X  a  US-  nM)  UR                  S:X  d  M;  US-  nUS:X  d  MH  Us  $    g)zPFind the instruction pointer of the outermost END_FOR for current comprehension.rz  r   r  r   r  r  )r`  r  r   r  r   r  r   )r   nesting_depth	search_ipr   s       r   r  8InstructionTranslatorBase._find_comprehension_end_for_ip  s    7***''333t77T=N=N9OPI$$Y/D{{j("	)" A%$$ Q r   c           	       ^ ^^^ [         R                  S:  d   eT R                  c   e[        5       mT R                  S-
  n/ n/ n/ n[	        5       nUS-
  nUS:  a`  T R
                  U   nUR                  S:X  a"  UR                  SUR                  5        US-  nOUR                  S;   a  US-  nOOUS:  a  M`  UR                  U5        T R                  5       nUS:X  a  [        SS	S
/ S9  [        U 4S j[        X5       5       5      n	[        U	S-   U5       GHE  n
T R
                  U
   nUR                  S:X  as  UR                  S:X  ac  U
S-   U:  aZ  T R
                  U
S-      nUR                  S:X  a8  UR                  nX;  a'  X;  a"  UR                  U5        UR!                  U5        UR                  S:X  a  UR!                  UR                  5        M  UR                  R#                  S5      (       d  M  [%        UR                  [&        5      (       a  UR                  OUR                  4nU H"  nX;  d  M
  X;  d  M  UR                  U5        M$     GMH     / mUS-   nU[)        T R
                  5      :  a  T R
                  U   R                  S:w  ae  TR                  T R
                  U   R                  5        US-  nU[)        T R
                  5      :  a  T R
                  U   R                  S:w  a  Me  UnU[)        T R
                  5      :  aZ  T R
                  U   R                  S:X  a=  US-  nU[)        T R
                  5      :  a  T R
                  U   R                  S:X  a  M=  U[)        T R
                  5      :  a  T R
                  U   R                  OSmSUUU4S jjnSnU" S5      (       a  T R
                  U   R                  nSnOVU" S5      (       a  SnSnTS   S   (       a  US-   OUnO0U" S5      (       d  TTS   S   :X  a  SnSnO[        SST ST 3S/ S9  [+        UUWUUUS9$ )zDAnalyze comprehension bytecode to determine result handling pattern.rz  Nr   r   r  )r  rn  r  z)Comprehension analysis failed: No END_FORr   z=Could not find END_FOR instruction in comprehension bytecode.r  c              3  f   >#    U  H&  nTR                   U   R                  S :X  d  M"  Uv   M(     g7f)r  N)r  r   )r   rn  r   s     r   r   CInstructionTranslatorBase._analyze_comprehension.<locals>.<genexpr>  s3      
0  #**j8 A0s   !1	1r  r  rq  c                ^   > TU    nTUS   :H  =(       a    TUS   :H  =(       d
    US   (       + $ )Nr  r  r   )r   patpatternsr  r  s     r   matchesAInstructionTranslatorBase._analyze_comprehension.<locals>.matches  s=    4.C C$88 _!55QS=Q9Qr   r  Fr  r  r  r  r  Tz)Comprehension analysis failed: No matcheszpre_store_ops=z, post_store_op=z8Comprehension does not match any known bytecode pattern.)r  r  r  r  r  r  )r   r   r   r   )r`  r  r   r  r  r  r   insertr  r%  r  r:   r   r  rS  r   r  rm  r\  r:  r   r  )r   start_ipr  r  r  defined_insideiter_scan_ipr   r
  for_iter_ipbody_ip	next_instvar_name	var_namesscan_ipstore_fast_iprl  r  r  rk  r  r  s   `                  @@@r   _analyze_comprehension0InstructionTranslatorBase._analyze_comprehension  s>   7***''33357++a/#%!##%#&5  !|a$$\2D{{33$$Q4! 44! a 	m,88:
C[	  
80
 
 [1_j9G$$W-D {{f$Q7Q;;S --gk:	##|3(//H49T#**84&**84 {{l*""4;;/ ''44#-dkk5#A#ADKK~  !*H5(:W%,,X6 !*+ :4 $&q.c$++,,!!'*11\A  !2!27!;!B!BCqLG	 c$++,,!!'*11\A
   c$++,,!!'*11\AqLG c$++,,!!'*11\A T..// g&-- 		 	 %)
8**=9@@J#O[!!J#O%-k%:?%KgkQXGJ 4_ EEJ"OC(7GWV	 %!+'#'
 	
r   c           	        [         R                  S:  d   eU R                  5       nU R                  R                  R                  [        5      (       a0  UR                  (       a  [        S[        UR                  5      S/ S9  U R                  c   eU R                  S-
  nS[        UR                  5      -   n[        SU R                  5       /5      n[        R!                  S5        U R"                  R%                  U UUS	9n['        U5       Vs/ s H9  n[)        U R*                  [        U R*                  5      U-
  U-      [,        5      PM;     nnU R/                  U5        US
   n	[1        U R"                  R2                  5      n
[5        S U 5       5      n[        U R*                  5      [        U	R6                  5      -
  nU
R9                  / [;        X-   S-   5      QU
R=                  S
5      PU
R?                  5       P5        [A        ['        U5      5       Ha  nU
R9                  [C        S5      5        X   (       a!  U
R9                  U
RE                  5       5        MG  U
R9                  [G        SSS9/5        Mc     U
R9                  [G        S5      /5        U RI                  UUUUUU	5      u  pU
R9                  / [;        US-   5      QU
R=                  S
5      PU
R?                  5       P[G        SSS9P[;        US-   5      QU
R=                  S
5      PU
R?                  5       P[G        SSS9P5        U RK                  U/U/U
5        US
:  a  US-   S-   nU
R9                  / [;        U5      QU
R=                  S
5      PU
R?                  5       P[M        5       PU
R=                  U* 5      PU
R=                  S5      P[G        SSS9P[G        S5      P[G        S5      P5        URN                  URP                  (       a  URP                  /O/ -   n0 nU H`  n[S        5       U RT                  U'   UU	RV                  ;   a  U	RV                  U   UU'   M>  [        U	RV                  5      U	RV                  U'   Mb     US-   nURN                  (       Ga3  U
R9                  / [;        U5      QU
R=                  S
5      PU
R?                  5       P5        [Y        URN                  5       H  u  nnU
R9                  / [;        S5      QU
R=                  US-   5      PU
R?                  5       P5        UU;   a=  U
R9                  / [;        S5      QU
R=                  UU   5      P[G        S5      P5        M  U
R9                  [G        SSS9/5        M     U
R9                  [G        S5      U
R=                  S
5      U
R?                  5       /5        URZ                  (       a  U R]                  [S        5       5        OURP                  (       a  U
R9                  / [;        U5      QU
R=                  S
5      PU
R?                  5       P5        URP                  U;   a9  U
R9                  U
R=                  UURP                     5      [G        S5      /5        OMU
R9                  / [C        S5      Q[G        SSS9P[G        S5      P5        OU
R9                  [G        S5      /5        U R"                  R_                  U
Ra                  5       5        U Rb                  URd                     nU R"                  R_                  U Rg                  UU5      5        SU l
        gs  snf )zHandle list/dict comprehension graph break.

Builds a synthetic function wrapping the comprehension bytecode,
calls it via codegen_call_resume, then chains into the resume
function for the post-comprehension code.
rz  zDComprehension graph break in resume function with captured variableszCannot use comprehension optimization inside a resume function when there are captured variables. This can cause issues with deeply nested source chains.r  Nr   comprehension_graph_breakzcomprehension triggered compiler  r   c              3  6   #    U  H  o(       a  M  S v   M     g7f)r   Nr   )r   ms     r   r   NInstructionTranslatorBase._handle_comprehension_graph_break.<locals>.<genexpr>G  s     E';!1AA';s   
	r  r/  r-  r2  r  r  r.  r0  )4r`  r  ry  r  r  rm  rL   r  r:   r   r   r   r  r?   r  r$  r  r+  r  r  r\  r  r   rM  r2   rU  r  r  r)  r&   r6  r7  r   r+   pop_nullr(   _build_comprehension_fnr9  r'   r  r  r   r  r;  rs  r  rK  r  rr  r  r  r  )r   r   analysisro  r  r   r  rn  stack_pops_null_maskr  r-  nonnull_countlive_stack_depthr  r?  frame_values_posvars_to_passexisting_varsru  fv_depthr  
walrus_varr  s                          r   r  ;InstructionTranslatorBase._handle_comprehension_graph_break  su    7***..0 ;;))*GHH%%b 6 67!8  ''333++a/X3344
#$?$BTBTBVAWX		34 %)KK$@$@! %A %
! :& 
& tzz#djj/J">"BC\R& 	  

 			*(+t{{**+ E';EE tzz?S1F1F-GG 	-:Q>? $$Q' '')		
 %
+,A[^,#&  /  "4]"J!KL - 	,Y789
 !88 
 		-12	$$Q'	 '')	 #<Q7		
 -12	 $$Q'	 '')	 #<Q7		
  	  (gY;
 1/!3a7 !12((+ ++-
 #$ ((-8 ((. '}!< '7 'y1&  ++%-%8%8X  !b
 )+$H-<->D  *4,,,*.*;*;H*Eh'.1$2C2C.D!!(+ % $a'  *((+ ++- "+8+?+?!@:  $Q,,QU3 //1 .$$(^00z1JK /~> $$&8A&N%OP' "A* &y1((+++-	 ##IIo'(   *((+ ++- ""m3  ,,]8;N;N-OP*>:   $Q*=a@ +95 0;<= 	++B,?,?,AB ''8++&&{4MN	
 $( } 
s   A ]c                8  ^ ^^^^^^^^^^^^ SSK Jn  SSKJn  SSKJmJm  [        U 4S jUR                   5       5      n	SS/[        U	5      -   [        T5       V
s/ s H  n
SU
 3PM
     sn
-   m[        [        [        T R                  R                  =(       d    / 5      [        T R                  R                  =(       d    / 5      -   5      5      mT R                  b  T R                  OT R                  R                   m[#        S	T R                  R$                   S
T 35      mTR&                  TR(                  -   TR*                  (       a  TR*                  /O/ -   TR,                  -   m      SUUUUUUUUUU UUU4S jjnU" T R                  U5      u  pU" U5        UR                  (       a   T R.                  R1                  TU5        UT4$ T R.                  R1                  T[2        R4                  " UT R6                  T5      5        UT4$ s  sn
f )ar  Build a synthetic function wrapping comprehension bytecode.

Uses the same calling convention as resume functions created by
create_resume / ContinueExecutionCache.generate: the first two args
are __nested_resume_fns and __nested_frame_values (ignored here),
followed by stack items and live locals.

Returns (code, name) where name is the global name for the function.
r   )transform_code_objectr+  )
CO_VARARGSCO_VARKEYWORDSc              3  R   >#    U  H  oTR                  5       ;  d  M  Uv   M     g 7fr   r  )r   r   r   s     r   r   DInstructionTranslatorBase._build_comprehension_fn.<locals>.<genexpr>  s%      
(!T5K5K5M,MAA(s   '	'__nested_resume_fns__nested_frame_values___stack__comprehension__at_c           	     h  > TUS'   [         R                  S:  a  TUS'   TUS'   SUS'   TUS'   [        T5      US'   S	US
'   S	US'   [        TT Vs/ s H  o"T;  d  M
  UPM     sn-   5      US'   US   T	T
-  ) -  US'   / nT(       a"  UR	                  [        S[        T5      S95        UR	                  [        SS	S95        TS-
  n[        T5       HJ  nTU   (       a  UR	                  [        S5      5        M)  UR	                  [        SSU 3S95        US-  nML     TR                  TTR                  5      n/ nTR                  (       dN  TR                  (       a$  UR	                  [        STR                  S95        OUR	                  [        SS S95        TR                  (       a[  TR                   H  nUR	                  [        SUS95        M     UR	                  [        SS[        TR                  5      -   S95        UR	                  [        S5      5        X6-   U-   U S S & g s  snf )Nr  rK  r<  co_firstlinenor   r  r  co_argcountr   co_posonlyargcountco_kwonlyargcountco_varnamesco_flagsr  r-  r  r   r  rq  r  rP  r  r  r  )r`  r  r   r:  r   r(   r  _copy_comprehension_bytecoder  r  r  r  )r  r  r   rK  	nonnull_irn  
comp_instsepilogueru  r  r  r  r   comprehension_body_varsr?  r  r   r  r   r  r  ro  s            r   r%  AInstructionTranslatorBase._build_comprehension_fn.<locals>.update-  s5    '.L#7*.5]+-3L)**,L'*2L'*-d)L'12L-.01L,-*/#:L#:atm#:LL+L' (4J'?^+C (L$ )+F01As8}UVMM,X1=> &)I:&'*MM"4["ABMM*;)?UV NI ' ::8X__UJ +-H++&&OO*;x?R?RS OO$6|D$QR## ( 4 4HOO$6{8$TU !5&%H$8$8 99 OO.~>?$1H<LOa Ms   	H/
H/
)r  r  r  r   r   r   )bytecode_transformationr  r4  r,  resume_executionr  r  r:  r;  r   r  sortedr  r  r  r   r  r0   r  r  r  r  r  r+  r  r]  r  r  )r   r  ro  r  r  r  r  r  r,  r  rn  r%  r  r   r  r  r   r  r?  r  r   s   ``````        @@@@@@@r   r  1InstructionTranslatorBase._build_comprehension_fn  s   $ 	C)@
  
((
 
 #$;<8n',]';<';!!~';<= 	 T[[,,23t{{..4"56
 !% 7T[[=W=W.t{{/B/B.C4xPQ """"#(0(;(;##$E $$% 	 =	=+=	=;I=	==	= =	= =	=~ ,DKK@( KK--gx@    KK--""8T^^WE
    =s   Hc                .   0 n/ n[        X5       HD  nU R                  U   n[        R                  " U5      nSUl        XsU'   UR	                  U5        MF     U H7  nUR
                  c  M  UR
                  U;   d  M$  X7R
                     Ul        M9     U$ )z@Copy comprehension bytecode instructions, updating jump targets.N)r  r  rW  rX  r   r1  )r   ro  r  inst_mapcopied_instsr  original_instcopied_insts           r   r  6InstructionTranslatorBase._copy_comprehension_bytecodez  s     46*,)B --b1M))M2K(,K%&1]#, * (K!!-+2D2D2P%-.@.@%A" ( r   c                     Ub  US:  a  X4$ X4$ r   r   )r   r   r   fallback_linenos       r   _make_frame_loc)InstructionTranslatorBase._make_frame_loc  s!     >VaZ..!!r   c                t   / n[         R                  (       av  U R                  nUbg  U R                  UR                  R
                  UR                  UR                  R                  5      nUR                  U5        UR                  nUb  Mg  UR                  5         UR                  U5        [        U5      $ r   )r   r5  r'  r  r  r  r   r  r   reverser:  )r   	frame_locframe_loc_chain_list
current_txparent_frame_locs        r   _get_frame_loc_chain.InstructionTranslatorBase._get_frame_loc_chain  s     79%%>BkkJ(#'#7#7%%11%%%%44$ 
 %++,<='..
 ( 	$$&##I.)**r   c                  ^ UR                   (       a  g [        USS 5      nUc(  [        R                  R                  R                  5       n [        R                  (       aS  U R                  bF  U R                  U R                  R                  U R                  U R                  R                  5      nO.U R                  US   R                  US   R                  S5      n U R!                  U5      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	Ub  [/        X25      nSUS    SUS	    S
U S3m[        R"                  (       a  TU SU	 S3-  mOT[1        U	5      -  m[        R2                  R5                  SS U4S jS9  [7        U[8        5      (       a  UR:                  O
[=        U5      n
[>        RA                  [B        RD                  5      (       ax  [F        (       dm  [H        RJ                  " X45      (       aQ  [        R"                  (       a&  TS-  mTSR'                  U RL                  5      S-   -  m[>        RO                  T5        O[>        RO                  SUS   US	   U5        SUl         g ! [         a    US   US   4n GNf = f)NrA  r  r   r  r  r   zGraph break in user code at 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   ;InstructionTranslatorBase.log_graph_break.<locals>.<lambda>  s    3$!r   c                 8   > T  S[         R                  " 5        3$ )Nr   )r=  
format_exc)user_stack_traces   r   r   r    s    "2!32i6J6J6L5MNr   )metadata_fn
payload_fnz4
Most recent bytecode instructions traced (max 20):
r   zmGraph break (user stack suppressed due to duplicate graph break) in user code at %s:%s
Graph Break Reason: %sT)(loggedr  r  r  r   r   r   r5  r'  r  r  r  r   r  r   
IndexErrorr  r  r7   r  r=  r>  r5   r3   r   _loggingtrace_structuredr\  r;   r  r  graph_break_logisEnabledForr   DEBUGexplainr\   r  r  r  )r   r  r   r   
user_stackr  frame_loc_chainstack_above_dynamo_formattedstack_above_dynamouser_stack_formattedr  r  s              @r   r  )InstructionTranslatorBase.log_graph_break  s    ::S,5
55CCEJ	))dkk.E 00KK++KKKK..	 !00rN++rN))	 33I>')$>>!7!9+-77%%&89,( 01J>J/
;J!wwy'<'<Z'HI ?6sCF +9Q<.)A, H##)( +'' 	 >>/0 1e'( )LL $8 99'' O 	( 	
 ",C!=!=#++49((77G/33W4NOO
 ~~ L  !DIId.H.H$ID$PP !!  !! A!!	 
c  	 ]+-.I	s   A'K 5-K K54K5c           	     X    [        SS[        U 5       3S/ [        R                  QUSS9  g )Nzgraph break in loopzframe skipped: ztorch.compile detected a graph break in a for/while loop. Skipping the frame and falling back to eager, as graph breaks in loops are not supported.T)r  r  r  r  r7  r?  )r:   r6   r   r>  )r  r   s     r   r  0InstructionTranslatorBase.raise_loop_graph_break  s9    )%&7&=%>?hD%CCD	
r   c                  > [         TU ]  5         Xl        UU l        Xl        Xpl        Xl        Xl        Xl        S U l	        / U l
        SU l        S U l        [        S5      U l        SU l        / U l        / U l        SU l        S U l        SU l        / U l        Xl        [/        SS9U l        SU l        [5        5       U l        X l        Ub  UO[;        U R8                  5      U l        UU l        X@l         XPl!        X`l"        Xl#        UU l$        Ub&  [J        RL                  (       a  [O        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 l0        SU l1        S U l2        SU l3        / U l4        UU l5        S	S
K6J7nJ8nJ9nJ:n  URv                  UU-  U-  U-  -  (       a  U Ry                  [{        S 5      5        Xl>        SU l?        S /[        UR                  5      -  U lB        [        R                  [        R                  5      U lG        [        R                  [        R                  5      U lI        [        R                  " UR                  U5        g )Nr   r!  Tr     )maxlen)r  rA  r  Fr   )CO_ASYNC_GENERATORCO_COROUTINECO_GENERATORCO_ITERABLE_COROUTINE)Mrj  rk  r'  distributed_stater+  r  r  r  r  r  r  r   r  r(   r  r9  r(  r;  r   rV  r  r  r  r   r  r  r  r  r  r   r  rk  r  r  r  r  rA  r   replay_record_enabledrH   r  nn_module_stack	num_callsexportr<  r   r  r  r  r  r'  r  r  r  r  r  r  r  r  r  rK  rf   r  r  r   r  r  r  r  r   r  r  r  r
  r   	lazycacher  )r   r+  r  rk  r  r  r  r  r  r  r  r  r  r  r'  r  r  rA  r  r  r  r  r  r  rr  s                           r   rk  "InstructionTranslatorBase.__init__#  se   0 	.!2 . 0-J*%:" -1),.
#$ #5e#< (,%UW,"&(%*"%5"$%!47E' 0<*GD<M<M0N 	  	 *3*4,8&, 6#?#?!2W<"D "&D BD)+ $)!*/'#'  $$(!&+#	
 	
 ??<'*??BTT
 IIod+,().& FS))** 	
 ++GMM: 	* ))'--8 	( 	F..	:r   )4r  r  r  r  r  r;  r(  rA  r  r  r9  r  r  r  r   r  r  r  r  r  r  rk  r  r  r  r  r   r  r  r  r  r
  r  rV  r  r   r  r  r<  r+  r  r'  r  r  r'  r  r  r  r  r  r  r  r   r  r   r  )rX  rb   r   r  r  r  r   r   )rX  ro   r   Sequence[VariableTracker]r  r  r   rb   )rX  ro   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  Optional[VariableTracker]r   r   )r_  r  r   r   r   rb   )re  r   r   r  )r   r-   r   rb   )r  r   r   rO   )r   r   r  r   r  r   r   r   )r  r   r   rb   )r   zInstruction | BlockStackEntryr   r   )r  rb   r   rb   )r   r   r   r   )r  rb   r   r   )r  rb   r   zTypeIs[ExceptionVals])rI  r   r   r   )r  r   r   r   )r   r-   r:  r   r   r  )r  r   r  r-   r  rA   r  list[types.CodeType]r-  r2   r  r   r  r   r   tuple[types.CodeType, str]r   r-   r  zlist[StackLocalsMetadata]r   r  )r  r  r  r  r-  r2   r   r   )r   r-   r   r   )r   r-   r  r  r   r   )r  rb   rq  r   r   rb   )ry  rb   r>  r   r   r   )F)r   r-   r  r   r   r   )r  z>Union[ContextWrappingVariable, GenericContextWrappingVariable]r   r-   r   rb   )r  rb   r   r   )r?  zOptional[list[Any]]r   r   )r   ztraceback.FrameSummary)rK  r   r  r   r   r   r   zOptional[FakeTensorMode])rY  z!Callable[[VariableTracker], bool]r   r   )r   r   r  )r   r  )r  r  ro  r   r  r   r  z
list[bool]r  r   r  rA   r   r  )ro  r   r  r   r   r  )r   r   r   r  r  r   r   tuple[str, int])r  r  r   ztuple[tuple[str, int], ...])r  r   r   r   r   zUnsupported | StepUnsupportedr   r   )r  types.CodeTyper   r;   r   r   )NNN)(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  r   r'  r   r  rw  r  Optional[DistributedState]rA  zOptional[tuple[types.CellType]]r  r  r  z Optional[dict[Instruction, int]]r   r   (   r   r   r   r   r   r  r  r  r  r  r  rL  r  r  r  r  r  r  r`  r  r  propertyr  r  rD  rY  rK  r`  r  rM  rq  rx  r  r  r  LOAD_CLOSUREr  r  r  rV  cached_propertyr  r  r  r   r  r  r  r  EAGER_IMPORT_NAMEr  r  r  r  JUMP_FORWARDJUMP_ABSOLUTEr%  r  not_r  r  r  JUMP_IF_FALSE_OR_POPJUMP_IF_TRUE_OR_POPr  r  r  r  r  r  r   r  r  r  r  r#  rp  r0  r-  r  rA  r  rV  rY  ra  rd  rg  rj  rn  r`  rr  r|  r  r  r  r  r  r  r  r  r  staticmethodr  r8  r  r9  r  r0  r.  r  r  r  r  r  r  r{   r  r  BUILD_TUPLE_UNPACK_WITH_CALLr"  r&  BUILD_MAP_UNPACK_WITH_CALLr)  r,  r2  r6  r/  rC  r1  rQ  rT  r!  r2  ra  re  rh  r  rm  rr  r{  r~  r  r  r  r  r  r  r  DICT_UPDATEr  r  r  r  r  r  r  r  rY  r  r
  negUNARY_NEGATIVEr  invertUNARY_INVERTpowBINARY_POWERmulBINARY_MULTIPLYmatmulBINARY_MATRIX_MULTIPLYfloordivBINARY_FLOOR_DIVIDEtruedivBINARY_TRUE_DIVIDErb  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_ORr  r  rN  rO  r  r  rM  r  r  r"  JUMP_BACKWARD_NO_INTERRUPTPOP_JUMP_FORWARD_IF_TRUEPOP_JUMP_BACKWARD_IF_TRUEPOP_JUMP_FORWARD_IF_FALSEPOP_JUMP_BACKWARD_IF_FALSEr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r$  LOAD_FAST_BORROWr#  POP_ITERr+  r,  r/  r3  r4  r  r@  r  rL  rR  rV  
contextlibcontextmanagerr[  r:  r  r  ry  r  r  r  r  r  r  r  rk  r   rt  ru  s   @r   r   r     s4    //00#==.."FF  &&$$""&&K((####33  ..AA// ! EE%%%%.!F00'

88 $8 +	8
 
8,4$4 (4 +	4
 
4U$U (U +	U
 
Un n	Wob 7"*	+\	 ; ;BH2H=T ;!+FV2./ L	*J* J J!E( # #,
2:;| $% 6 6,>4 LM$X]]E:#HNNE:'t<&x~~t<U
U
(UN*
(-
^ RD0..$)LA'F<:$*QfKPD  )	)
  >;	>;@  A
	-
	-G  )%   A
	

 &)	 >A%A% !A% "	A%
 +A% A% A% "A% 
$A%Fg%g% $=g% 
	g%R q?*q?:Cq?IRq?	q? q?f
&  ~=	=8(1!FI
 @L @ 8 $6 J
 "2
 9.1%
N@0  N

4

N(3
B"!:1P%$1 K@

R R"CD 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.u x "M 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"	;@"-! -!^  i	)V M!%+HNNEB ,X^^U C ,X]]E B!-hmmU!C(#K# # 
	#J 
 
 -'	*&&/;)$  A
'
'
B@;* !IH
!88S >B	
':	
		

>
 5 5 *9*	* *
!  A
Fd(L~!'~! ~! 	~!
 )~! ~! "~! 
$~!@%(	(""%2"EH"	"+(+	$+(l$l l +	l
 
l\ 	
 	
< 48,048-@;@; (@; !	@;
 "@; #@; %@; 4@; 5@; (B@;  3@; @; @; @; (@;  %!@;" 6#@;& 1'@;( *)@;, 2-@;. 
/@; @; @;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$ )rR  i  c                 "    [         R                  $ r   )tlsr  r   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  rD  r  )r   rZ  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
US9UUUUUU0 0 S 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'        [Q        5       U l)        U(       a.  [F        R,                  RU                  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 r  r  r   r  )local_scoper  r  torch_function_mode_stackr<  r  r   )r+  r  rk  r  r  rA  r  r  r  r  r  r  r  r  r'  r  r  r  z4Export without one graph - something has gone wrong.dynamismT)is_inputrL  )rM  is_derefed_cell_contents)rN  )+r%  r   INFOr  rj  rk  r@   _throw_if_in_functorchr   r+  rU  rG  r<  r  r  r  r  r1   r  rm  r  	frozensetrw   r  rR   rt  r  r  r  r  r  r  rQ   cell_contentsr  r   DeletedVariabletrack_cell_existingr   r  r   r  realize_all)r   r  r  rk  r  r  rA  rK  r  compiler_fnr<  r  export_constraintsframe_stater'  r  r  r  r  rL  r   r  local_dynamismvarrt  contents_sourcerw  cell_varrv  cell_sourcerr  s                                 r   rk  InstructionTranslator.__init__  s   ( 	LL((8,}:U9VVWXdeuXvWwx	
 	"$&*C# &!%*."&+%/A 	 !	
F 	##% 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!%15'O
 5H4N4N5L  ,::<H ++HlC+::<H&*#-5$$T*K (R &&&!$--/7;
d-d3"-dT"R?#6#=#=**O$L (;;| '+#-5$$T* <  2L)2D. *=)>D& (1'D'D'P'P((($E 4I11` " ?#,#<#<#>L?a 4I3H11sQ   M0*BMEM!L:(BM)M0:M	MM	M
M-	)M00
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eagerrV  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  )r  _dynamolookup_backendrS  getattr_staticr+  rV  _C
_functorchpeek_interpreter_stackTransformTypeVmapGradJvpr  r   lowerr:   )r   r`  rV  ciforbidden_keysr   rf  s          r   rP  ,InstructionTranslator._throw_if_in_functorchY  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   )r\  rR   rk  r  rO   r  rQ  rn  )r   r
  s     r   get_example_value'InstructionTranslator.get_example_valuex  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   )	r  r  r\  r   r\  r  r  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 )Nr  r  )r   r  r\  rq   rz   rv  ra   )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           	     d   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                  (       d  U R                  5       (       dp  U R                  (       d_  U R                  (       dN  U R                  (       d=  U R                  (       d,  [        R                   " S[#        U R$                  5       35      eS U l        ['        5       " [(        R*                  SU R$                  R,                   SUR.                   S35        [0        R3                  S5        U R                  R5                  U [7        SU R9                  5       /S	S
9UR.                  S:X  a  SOSS9n[;        U5      S:X  d   eUS   R<                  (       a   eU R                  R?                  U RA                  XS   RB                  5      5        [D        e)Nr  r   zhNo ops traced for the FX graph. `torch.compile` will skip the frame and fall back to eager.
Frame info: ztorchdynamo done tracing r   r  zreturn triggered compilereturn_valueF)r8  r  r   r  )#rx  r   r  r[   r  r   allow_empty_graphsr+  r:  r  ru  r  r<  r   r  r   	SkipFramer6   r  r%  r   rO  r  r   r$  r  r  r?   r  r   r  r  r  r:  rF  )r   r   r  s      r   _returnInstructionTranslator._return  s   //1''333+++''0043C3CC	

 ))'')Q.22==??KKNN--33 --0=>@ 
 $( LL'(;(;'<Bt{{m1M	
 			,-$(KK$@$@%!3!3!5 6E !KK>9qq %A %
! ,-222,Q/@@@@++))$!0L0V0VW	
 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<  r  r  r  )r   rR  r  )$r  r  r  r  rk  r   r  r   r  r   rA  zOptional[tuple[Any, ...]]rK  r   r  r   rV  r   r<  r   r  r   rW  r   rX  r   r'  r   r  rw  r  r  r  r  r   r   r   )r
  rT   r   r   r  r  )r   r   r   r   r  r  r?  r@  rG  rk  rP  rp  ru  rx  r~  r  r  r   rt  ru  s   @r   rR  rR    s#     # #c'c c !	c
 "c #c +c $'c %c c c c  c c (c  %!c" 6#c$ *%c& 
'cJ>	-^ r   rR  rK  INPLACEr{  BINARY_c              #    #    [         R                  (       d  Sv   gU R                  c  [        5       U l        U R                  R	                  5       nU R                  R                  5       nU R                  R                  UR                  UR                  UR                  [        R                  " 5       5        Sn Sv   SnU R                  R                  5       n[        R                  " 5       nU(       a  Ub  U" 5       nXvR                  -
  n	XR                  -
  n
[        UR                   UR"                  UR$                  U	U
['        UR(                  5      UU(       a  US   OSU(       a  US   OSU(       a  US   OSUR*                  US9nU R                  R-                  U5        U R                  R/                  U	5        ggg! U R                  R                  5       n[        R                  " 5       nU(       a  Ub  U" 5       nXvR                  -
  n	XR                  -
  n
[        UR                   UR"                  UR$                  U	U
['        UR(                  5      UU(       a  US   OSU(       a  US   OSU(       a  US   OSUR*                  US9nU R                  R-                  U5        U R                  R/                  U	5        f f f = f7f)a;  
Context manager for profiling inline calls.

Args:
    output: The OutputGraph containing profiler_state
    code: The code object being inlined (for timing metadata)
    get_inline_depth: Callable that returns inline_depth (called after work completes)

Yields:
    None (profiling happens around the with block)
NFTr   r   r  )	func_namer   firstlineno
cumtime_ns
tottime_nsbytecode_countr  caller_func_namecaller_filenamecaller_firstlinenois_primitive_call
call_stack)r   dynamo_profilerprofiler_stater   get_current_callerget_call_stackrK  r  r  r  timetime_nsr  start_time_nschild_time_nsr   r  r   r  r   co_coder  record_timingadd_child_time)r+  r  get_inline_depthcaller_infor  trace_successstack_entrytrace_end_nsr  r  r  timings               r   profile_inline_callr    se    " !!$ 3 5''::<K&&557J
d&&(;(;T\\^ M=++//1||~[4+-L%(A(AAJ#&?&??J(%//$--'33%%"4<<0)3>QD2=A45@;q>d"-"?"?%F !!//7!!00<) 5= ++//1||~[4+-L%(A(AAJ#&?&??J(%//$--'33%%"4<<0)3>QD2=A45@;q>d"-"?"?%F !!//7!!00<) 5=s    B<K?G DKD	KKc                  v  ^  \ 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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   r'  c                   ^ S n[        TR                  UR                  5       U4S j5         U R                  TX#U5      nUR	                  5       sS S S 5        $ ! , (       d  f       g = f)Nc                 "   > T R                   S-   $ r~  r  )r'  s   r   r   ;InliningInstructionTranslator.inline_call.<locals>.<lambda>!  s    F4G4G!4Kr   )r  r+  r  build_inline_tracerinline_call_)r  r'  funcr   r  tracers    `    r   r  )InliningInstructionTranslator.inline_call  sV      MM4==?,K
 ,,VTHF&&(	
 
 
s   #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5      (       aK  [        U R                  S5      (       a0  U R                  R                  UL 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_applyrX  _originz"allowlist in dynamo known functionr   zAvoid calling the function `re  ra  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_selfr:   r   r\  rt   rS  rc  get_functionr   check_verboseskippedtorch._dynamo.variables.miscr  r9  rX  r  
SkipResultr   get_filenameget_namer   )r  rf  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
 d##DGGY//GGOO'HH #--?  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                8
  ^ ^^^ [        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cP  [        R                  U5      nUR                  SL d   e[        R                  (       d  U(       a  XER                  T'   S n UR                  T X#5      nUc   e[.        R0                  " UR3                  5       5       H<  n
[        U
[4        5      (       a  M  [!        SSU SU
 3S/ [*        R6                  QS9  M>     TR8                  S;   aS  U(       a"  [        US   [:        R<                  5      (       d*  [!        SSTR8                   SU 3STR8                   S3/ S9  Sn[>        R@                  RB                  RD                  RG                  S5      (       a'  S[H        RJ                  " T5      RI                  5        3n[L        RN                  S:  aB  T RP                  mT RR                  mSUUU U4S jjn[T        RW                  S[Y        U5      5        [Z        RW                  STXR\                  5        U(       a  [        US   [^        5      (       a  T R
                  Ra                  US   Rb                  5      n[        U[>        Rd                  Rf                  5      (       aA  [h        Rj                  " U5      [l        Rn                  " URp                  Rr                  5      S'   U(       a  [        US   [t        5      (       ay  US   Rv                  n[        U[>        Rd                  Rf                  5      (       aA  [h        Rj                  " U5      [l        Rn                  " URp                  Rr                  5      S'   [        U[x        5      (       a   e[{        T5      (       a1  [}        T TUT R~                  T R                  T R                  U5      nU$ [        T TUT R~                  T R                  T R                  U5      nU$ ! [         a  n[!        SSUR#                  5        SUR%                  5        SUR	                  5       R&                   SU V	s/ s H  oR)                  5       PM     Os  sn	f sn	 SU 3
SUR#                  5        S	3/ [*        R,                  QUS
9   S nAGNS nAff = f) NFz2failed to bind arguments when attempting to inlinezfunc='z' r   z	; args = z; kwargs = z4Argument mismatch when attempting to trace function r[  r6  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  )r  r  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   rK  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  r  r   rZ   r  r  )headerr  r  cur_instr'  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, %sr  r  )Br\  rt   rr   rp   r  r+  rU  r   dont_skip_tracingpreviously_inlined_functionsrm  r  r  r  	bind_argsr  r:   r  r  r  rE  r   r  r  r  r  rb   r  r  r   r   r  r  	_internal	log_stateis_artifact_enabledrq  Bytecoder`  r  r  r  trace_call_logr  r^   r$  r   r   r  r  r  rO  r  r  r1   r  forwardr  r   r  rs   r.   &InliningGeneratorInstructionTranslatorr  r  r  )r'  r  r   r  r  tracing_ctxprevious_result
sub_localsr  rS  r   rL  r  moduler  r  r  r  s   `              @@@r   r  1InliningInstructionTranslator.build_inline_tracerh  sl    $*.
 
 	
 
  $}}mm33
 ''K"-"J"J"N"Nd#   )>2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& JtAw(EFF!W]]F&%(("6"677
 KK' (()@)@A& d$89999;''44,,F&  3''44,,F }  
	L  1D4E4E4G3H$--/JhJhIi j8<=??,=>k&SRSWS`S`SbRccde&11 	 	
	s%   &Q. .
T8AT S5TTc                   U R                   nSUl        SUl        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        SUl        U R"                  R$                  (       a  [&        $ U R(                  c   eU R*                  UR*                  L a%  UR,                  R/                  U R,                  5        U=R0                  U R0                  -  sl        [        R                  SU5        U R"                  R2                  R4                  R7                  U5        [8        R:                  (       d&  [=        U [>        5      (       a  U R@                  (       a  [C        U5      (       a  [=        U [>        5      (       ap  U RD                  (       a_  [=        U [>        5      (       d   e/ nU R(                  RG                  5       (       d  U R(                  /n[        RH                  " [J        XS9  g U R(                  $ [C        U5      (       aT  [=        U [>        5      (       d   eU R(                  RG                  5       (       d   e[M        U RN                  [Q        5       S9$ U R(                  $ ! , (       d  f       GNE= f! [        R                   a#  nSU SU 3n[        R                  U5        e S nAf[         a  nSUl        e S nAf[         a    [        R                  SU5        e f = f! U R                   Ul        SUl        f = f)	NFTz!Observed exception DURING INLING z : zFAILED INLINING %szDONE INLINING %sr  r  ))r'  r  r  r  r?  nullcontextr  r[  rY  r   r   r$  r  r;   r?  rK  r   r+  r,  rg   r  r  r  r%  r  rU  traced_coder   r   r  r\  r  is_generator_from_ctx_managerr.   generator_exhaustedis_constant_noner  r
  rz   generated_itemsra   )r   r'  r  
strict_ctxr  rf  r   s          r   r  *InliningInstructionTranslator.inline_call_  s   &+#(,%{{$002
""55f6M6MNJ	2
 & +/*C*CF',1F);;""))##///>>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 ++<<>> 001D,,]DL+++D!!!$(NOOOO++<<>>>>+(("2"4 
 +++A $$ 	5dV3qcBCIIcN 	 !AL 	II*D1	 +/*C*CF',1F)sT   )K +J:<K :
K	K L; 	K L8 K>>L8L%L88L; ;Mc                |  > UR                  5       nUS   n	[        U	[        5      (       d  U	R                  n	UR                  R
                  n
U
(       a  U
R                  R                  U5      OS nUb%  UR                  nUR                  nUR                  nOc[        U5      n[        U5        [        U5      n[        5        Vs0 s H  o[        X/5      _M     nnU
(       a  [!        UUUS9U
R                  U'   ["        TU ]I  UR                  0 UU	UUUUUUUUR&                  UR(                  S-   UR*                  UR,                  UR.                  UR0                  US9  Xpl        Xl        UR6                  U l        S U l        UR:                  R=                  5       U l        UR>                  U l        g s  snf )N__builtins__)r  r  r  r   )r+  rk  r  r  r  r  r  r  r  r  r  r  r  r'  r  r  r  r  ) get_globalsr\  r  __dict__r+  rU  inlined_code_cacherm  r  r  r  r"   r!   r   r,   r  r   rj  rk  r  r  r'  r  r  r  funcvarr'  r  r  r  rW  r<  )r   r'  r  r  r  r  r  r  r  r  r  cachedr  r  r  r   rr  s                   r   rk  &InliningInstructionTranslator.__init__;  s    '')	~.
*d++#,,J mm33=H//33D9d!..LnnG!..L/5L-!,/G9FIAwt//LI7G!-#!-8..t4 	==!+-*G"7%%==,,q0"22,,$66NN% 	 	
( ))#%55::<))C Js   F9c                .    U R                   R                  $ r   )r'  rV  r   s    r   rV  'InliningInstructionTranslator.fake_modez  s    {{$$$r   c                ^    [         R                  " U R                  R                  5       5      $ r   )r   rC  r'  r  r   s    r   rD  )InliningInstructionTranslator.run_ctx_mgr~  s     ++DKK,E,E,GHHr   c                    [         R                  (       d  gU R                  R                  5       (       d  gU R                  R                  5       (       d  gg)zCheck if comprehension speculation is allowed in this inlined context.

Unlike should_compile_partial_graph(), this skips the exception table entry check.
FT)r   r5  r   should_allow_nested_graph_breaksr'  r  r   s    r   r  AInliningInstructionTranslator._can_speculate_comprehension_nested  s?    
 ))||<<>>{{7799r   c                   > [         R                  (       aN  U R                  R                  5       (       d  gU R                  R                  5       (       d  g[        TU ]  5       $ gr*  )r   r5  r  r  r'  r  rj  r   rr  s    r   r  :InliningInstructionTranslator.should_compile_partial_graph  sI    %%<<@@BB;;;;==7799r   c                f   > [         R                  (       a  [        TU ]  X5      $ [	        SSS/ S9  g )NzGraph break in inlined functionr   z2Graph breaks in an inlined call are not supported.r  )r   r5  rj  r  r:   )r   r   r  rr  s      r   r  3InliningInstructionTranslator.create_call_resume_at  s2    
 %%70QQ5L		
r   c                F    U R                  5       U l        S U l        [        er   )r  r  r   rF  r&  s     r   r  *InliningInstructionTranslator.RETURN_VALUE  s    #xxz#' r   c                H    U R                  U5      U l        S U l        [        er   )r  r  r   rF  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_r  ___unnamed_scope)r  rm  r  r  r  r  r  r   rd   rM   r+  rO  rO   rN   rc  rS   )	r   r   r  r  r  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   )r  r  r  r+  r  rj  r  r   rt  has_pending_mutation_of_attrrK  	load_attrrb   r  )r   r   r   r   r  r  r  rr  s          r   r  *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)r  r  )r+  r  r  rj  r  r  r\  r   r:   r  r   rt  
store_attr)r   r   r  r   _fglobals_valuer  r   rr  s          r   r  *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<  r'  r  )
r'  r   r  ro   r   r  r  r  r   rb   )r  ro   r   ztrace_rules.SkipResult)
r'  r   r  ro   r   r  r  r  r   r  r  )r'  r   r  r  r  r  r  r  r  r   r  r   r  z7BaseUserFunctionVariable | LocalGeneratorObjectVariabler   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  rk  r  rV  rD  r  r  r  r  r  r   r  r  r   rt  ru  s   @r   r  r    s   *..%%)) ') (	)
 +) 
) ) ?&?	? ?B CC&C (C +	C
 
'C CJK,Z=*)=* =* 4	=*
 5=* (B=*  3=* I=* 
=*~ % %I

 $=
 
	


(:(:	,(:TM"J Jr   r  c                     ^  \ rS rSr% S\S'   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S jrSS jrSrU =r$ )r  i  r  r  c                P   > [         TU ]  " U0 UD6  / U l        SU l        SU l        g r*  )rj  rk  r  r  r  )r   r   r  rr  s      r   rk  /InliningGeneratorInstructionTranslator.__init__  s-    $)&)!#( -2*r   c                   >^  [        T R                  T R                  U 4S j5         [        TT ]  5       sS S S 5        $ ! , (       d  f       g = f)Nc                    > T R                   $ r   r  r   s   r   r   EInliningGeneratorInstructionTranslator.inline_call_.<locals>.<lambda>  s    4CTCTr   )r  r+  r  rj  r  r  s   `r   r  3InliningGeneratorInstructionTranslator.inline_call_  s0     dkk;TU7') VUUs   A  
Ac                    gr*  r   r   s    r   r  CInliningGeneratorInstructionTranslator.should_compile_partial_graph  s    r   c                B   U R                  5       nU R                  R                  U5        [        U R                  5      [        :  a  [
        R                  eU R                  [        5        [        R                  (       d  U R                  (       a  X l        [        eg r   )r  r  r   r   rv   r   InfiniteGeneratorErrorrK  rg   r   r  r  r  rH  )r   r   tops      r   YIELD_VALUE2InliningGeneratorInstructionTranslator.YIELD_VALUE  sq    hhj##C(t##$'99,,,		()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 r  )r  r\  rz   r  rf   rm  rL  rK  )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      $ r8  )r  rj  r  r   r   rr  s     r   r  3InliningGeneratorInstructionTranslator.RETURN_VALUE$      #' w#D))r   c                0   > SU l         [        TU ]	  U5      $ r8  )r  rj  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R                  5       (       d  [	        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  r  Unreachable sub-generator coder   @Should only be encountered while implementing generator support.r  r   r   )r   r  r  r  r:   r	  r\  r   r   rK  r  r
  r   r  r  rh   r  r  r   r   r  r/  exs        r   
YIELD_FROM1InliningGeneratorInstructionTranslator.YIELD_FROM,  s+   4::!###hhjjjn##%% 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/1A4E**E/c                *   [        U R                  5      S:  d   eU R                  5       nU R                  S   n[        U[        [
        45      (       dH  [        U[        5      (       ay  [        UR                  [        R                  R                  5      (       aF  UR                  5       (       a$   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  r  rz  r#  r   r$  r  zSEND with bad typez
TOS type: z(Attempted to SEND with unsupported type r[  )r   r  r  r\  ry   rq   r   r  collectionsabcIteratorr  r	  rK  r
  r   r  r`  r  rh   r  r  r:   r`   r%  s        r   SEND+InliningGeneratorInstructionTranslator.SENDR  sB   4::!###hhjjjnc,.JKLLs566399koo&>&>??##%%#++D1C IIcN < b	 ,$WS\N3Fws|nTUV	5 &s'D'DE 
$ '''1
II.55bhh?@IIdOO
$s   4D
 
F$A$FF)r  r  r  r  )r   r   r  r   r   r   r  r  r  )r   r   r   r   r   rk  r  r  r  r  r  r  r'  r-  r   rt  ru  s   @r   r  r    s<    **3***$#L* *r   r  )r   r   r   ztypes.ModuleType)r   r^  )r   r   r   Generator[None, None, None])rX  zCallable[..., object]r   r  )rb  r  r   r   )rt  r   r   r  r  )r   zdict[str, dict[str, Any]])r   r   r  Callable[[object], bool]rK  r   r   r   )r  r0  rK  r   r   r_  )r   r   r-  r2   r.  r  r   r   )rK  r   rG  r   r   zYCallable[[Callable[..., None]], Callable[[InstructionTranslatorBase, Instruction], None]])r+  r@   r  r  r  zCallable[[], int]r   r/  (  r   
__future__r   r*  collections.abcr?  rW  r   rq  rV  r   rS  r  r   r   r  rH  r`  	threadingr  r=  r]  r  r   typingr   r   r   r   r	   r
   r   typing_extensionsr   r  torch._loggingtorch._dynamo.dynamo_profilerr   r   torch._dynamo.excr   r   torch._guardsr   r   r   torch._logging.structuredr   %torch.fx.experimental.symbolic_shapesr   torch.utils._functoolsr   r   r   r   r   r"  r   r   bytecode_analysisr   r   r    r!   r  r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   codegenr2   r3   r4   r5   r6   r7   r8   r9   r:   r;   funcname_cacher<   guardsr=   r>   output_graphr?   r@   rA   	polyfillsrB   rC   rD   rE   rF   replay_recordrG   rH   r  rI   rJ   rK   rL   r
  rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   utilsrW   rX   rY   rZ   r[   r\   r]   r^   r_   variables.baser`   ra   rb   variables.builderrc   rd   re   variables.builtinrf   variables.constantrg   rh   variables.ctx_managerri   rj   rk   rl   variables.dictsrm   rn   variables.functionsro   rp   rq   rr   rs   rt   ru   variables.iterrv   variables.lazyrw   variables.listsrx   ry   rz   r{   r|   r}   variables.miscr~   r   r   r   r   r   r   variables.nn_moduler   r   variables.streamsr   variables.tensorr   r   variables.torch_functionr   r   variables.user_definedr   r   r   r   r   r   r   r   torch._subclasses.fake_tensorr   r  r   	getLoggerr   r$  r  getArtifactLoggerr  r  r  r  r@  rD  r  rL  r   r   containsr   r  r   r   cacher   	dataclassr   r   r   r  r  r%  r@  r(  r.  r0  r  r   rK  rF  rH  rY  rc  rx  r  r  r  r  r  r%  r2  r`  r  rb  rw  r   rR  r  _nb_opsr  r  r  r  r  )r   r   r   r   s   0000r   <module>r\     s-  0 #      
        	 
       Q Q Q $   R O C C / < /      " ' 
 
 
 ) / N N  : 	 	 	 ;
 
 
 G F R R . H  <   / /    Q 2 G  ==<'!..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  !%&(y  ) )   < C C CL 
 
 
 2 2 23 3. 4 4 )!) ) )& $!$ $ $ ! ! !H	~ 		I 	9 A . .& $ $  > >B   ('
#'&' ' 
	'T BA&A.2A=AHR!R'0R;LR	RB}}"}}@J J4 _ _ _DO?;'O?;d~_5 _D	 w 
 %IF	 	!#v-F12JWVABZL3I	
 % :=:=
:= (:= !	:= :=zjJ$= jJZ-J Uy'lgs   ) W2(W