
    /j                   T
   U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZ ddlmZmZmZmZmZmZmZ ddl m!Z! ddl"Z"ddl#Z"ddl$m%Z%m&Z& ddl'm(Z(m)Z) dd	l*m+Z+m,Z,m-Z- dd
l.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6m7Z7mZ8m9Z9m:Z: ddl;m<Z<m=Z=m>Z>m?Z? ddl@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZO ddlPmPZP ddlQmRZR ddl6mSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[ ddl\m]Z] ddl^m_Z_m`Z` ddlambZbmcZcmdZd ddlemfZfmgZgmhZhmiZimjZj ddlkmlZlmmZm ddlnmoZompZpmqZqmrZr ddlsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{ ddl9m|Z|m}Z} ddl~mZmZmZmZmZmZmZmZmZ ddlmZmZmZ ddlmZmZmZ ddlmZ dd lmZmZ dd!lmZmZmZmZ dd"lmZmZ dd#lmZmZmZmZmZmZmZ dd$lmZ dd%lmZ dd&lmZmZmZmZmZmZ dd'lmZmZmZmZmZmZmZ dd(lmZmZ dd)lmZ dd*lmZmZ dd+lmZmZ dd,lmZmZmZmZmZ erdd-lmZmZmZ dd.lmZ dd/lmZ  ej        eѦ          Ze"j                            ed0          Ze"j                            ed1          Ze"j                            ed2          Ze"j                            ed3          Z ej                    Zd4  ej                    D             Zd5ed6<    eej                  j        Z eej                  j        Zd7 ed8<   d9 ed:<   ee:j        eef         Zd;ed<<   e	j        ddA            Zej         G dB dC                      Zej         G dD dE                      Zej         G dF dG                      Zej         G dH dI                      Z G dJ dK          Ze	j        ddM            Zej        ddQ            Zej        ddR            Zej         G dS dT                      Z G dU dVe          Z G dW dXe          Z G dY dZe          Zdd^ZddbZe	j        dde            Ze	j        ddf            Ze	j        ddh            Zej         G di dj                      ZddoZdpZddrZddxZdd{Z  G d| d}e          Zej         G d~ d                      Z G d dOe          Z G d de          Zej        dk    rd ej        D             Zej        dd            Z	 G d de          Z
 G d de
          ZdS )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_bytecodec                >    i | ]\  }}|t          |          j        S  )rf   call_function.0kvs      c/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/torch/_dynamo/symbolic_convert.py
<dictcomp>r      s6     ' ' ',0AqAq'' ' '    dict[str, Any]compare_op_handlersc                B    t          | g t          |          i           S N)handle_containsreversedtxargs_s      r   <lambda>r      s#    (4..21 1 r   inc           
     b    t          | t          | g t          |          i           gi           S r   )
handle_notr   r   r   s      r   r   r      s2    J.x~~.	3	34b5 5 r   znot inr
   ExceptionValsnamestrreturntypes.ModuleTypec                *    t          j        |           S )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)r   s    r   _import_moduler      s     "4(((r   c                  r    e Zd ZU ded<   ded<   ded<   ded<   dZd	ed
<   dZded<   dZded<   ddZddZdS )SpeculationEntryr   filenameintlinenoinstruction_pointerr-   instFbool_failedNzOptional[bool]error_on_graph_breakzOptional[GraphCompileReason]reasonr   Nonec                t    d| _         || _        | j        | j        j        }nd}t          j        |          )z\
        Start tracing of the current frame over again, and don't take this branch.
        TNz!Unknown fail_and_restart_analysis)restart_reason)r   r   r   r   SpeculationRestartAnalysis)selfr   r   s      r   fail_and_restart_analysisz*SpeculationEntry.fail_and_restart_analysis   s@     $8!;"![/NN@N,NKKKKr   r   InstructionTranslatorBasec                B    | j         r| j        J | j        |_        dS dS NTF)r   r   )r   r   s     r   failedzSpeculationEntry.failed  s0    < 	,888&*&?B#4ur   )r   r   r   r   )r   r   r   r   )	__name__
__module____qualname____annotations__r   r   r   r   r   r   r   r   r   r      s         MMMKKKG+/////+/F////
L 
L 
L 
L     r   r   c                  t    e Zd ZU dZ ej        e          Zded<   dZ	ded<   dZ
d	ed
<   ddZddZddZdS )SpeculationLoga3  
    SpeculationLog replaces the prior copy_graphstate/restore_graphstate
    checkpointing.  Rather than saving/restoring state, we restart the
    dynamo conversion process over from the beginning -- but when we
    hit the start of the speculation that failed, we instead generate
    a graph break.
    default_factoryzlist[SpeculationEntry]entriesr   r   indexFr   graph_break_on_autograd_gradr   r   c                    d| _         d S Nr   )r   r   s    r   restartzSpeculationLog.restart  s    


r   c                F    | j                                          d| _        d S r   )r   clearr   r   s    r   r   zSpeculationLog.clear"  s!    


r   r   r   r   r   r   r-   r   c                z   t          | j                  | j        k    r*| j                            t	          ||||                     | j        | j                 }d}| j        dk    r=| j        | j        dz
           }d|j         d|j         d|j        j         d|j	         d	}|j	        |k    r|j        |k    r|j        |k    sft          d	| j         d
t          | j                   d|j         d|j         d|j        j         d|j	         d| d| d|j         d| d| d          | xj        dz  c_        |S )z
        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   nextzSpeculationLog.next&  s    t|
**L 63FMM   TZ(:??dj1n5JS)< S Sz?P S SO*S S/9/MS S S 
 %)<<<(**&&*"&* 8;DL8I8I ^ #l .3j.? HMHa      !%  5H  	    ( 	

a

r   Nr   r   )
r   r   r   r   r   r   r   r-   r   r   )r   r   r   __doc__dataclassesfieldlistr   r   r   r   r   r   r   r   r   r   r   r     s           '8k&7&M&M&MGMMMMENNNN */ ....      - - - - - -r   r   c                  D    e Zd ZU  ej        e          Zded<   ddZdS )	
LocalStater   zdict[str, FrameStateSizeEntry]automatic_dynamicr   r   c                n    d                     d | j                                        D                       S )N
c              3  N   K   | ] \  }}| d |                                  V  !dS ): N)renderr   s      r   	<genexpr>z$LocalState.render.<locals>.<genexpr>]  sM       
 
%)Qq  AHHJJ  
 
 
 
 
 
r   )joinr   itemsr   s    r   r   zLocalState.render\  sC    yy 
 
-1-C-I-I-K-K
 
 
 
 
 	
r   Nr   r   )	r   r   r   r   r   dictr   r   r   r   r   r   r   r   V  s[         8I8I9 9 9    
 
 
 
 
 
r   r   c                  2    e Zd ZU ded<   ded<   dZded<   dS )DistributedStater   
compile_pgr   local_stateNzOptional[list[LocalState]]
all_states)r   r   r   r   r  r   r   r   r  r  c  s8         OOO-1J111111r   r  c                      e Zd ZU  e            Zded<   edd            Zedd	            Zedd
            Z	edd            Z
dS )TensorifyStatezset[str]force_specializationsr   r   r   r   c                :    | j                             |           d S r   )r  addclsr   s     r   
specializezTensorifyState.specializep  s    !%%e,,,,,r   r   c                    || j         v S r   )r  r
  s     r   should_specializez TensorifyState.should_specializet  s    111r   c                8    | j                                          d S r   )r  r   r  s    r   r   zTensorifyState.clearx  s    !'')))))r   c                2    t          | j                  dk    S r   )r   r  r  s    r   emptyzTensorifyState.empty|  s    3,--22r   N)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  j  s          '*cee++++- - - [- 2 2 2 [2 * * * [* 3 3 3 [3 3 3r   r  Callable[..., None]c                 4    t          j        t                    S r   )torchdynamo_loggingget_step_loggerlogr   r   r   _step_loggerr    s    .s333r   r   r   Generator[None, None, None]c              #     K   | j         j        }| j         j        }	 g | j         _        d| j         _        d V  || j         _        || j         _        d S # || j         _        || j         _        w xY wr   )speculation_logr   r   )r   r   r   s      r    save_and_restart_speculation_logr    s        (G$E)%'"#$ %,"#(    &-"#( ((((s   A A,c              #  ~   K   	 | j         j        }d| j         _        d V  || j         _        d S # || j         _        w xY wNF)outputshould_exit)r   tmps     r   (temporarely_allow_writes_to_output_graphr%    sN      $i# %	 #		####s   . <c                  T    e Zd ZU ded<   ded<   ded<   dZded	<   ddZddZddZdS )BlockStackEntryr-   r   zInstruction | Nonetargetr   stack_indexNzHOptional[Union[ContextWrappingVariable, GenericContextWrappingVariable]]with_contextr   r   c                    | j         d uS r   )r*  r   s    r   can_restorezBlockStackEntry.can_restore  s     ,,r   rK   c                    | j         J | j        rPt          | j        d          r;| j        j        r/t	          | j         dz
  t          | j        j                            S t	          | j         dz
            S )Ntarget_valuesr   )r)  r*  hasattrr.  rK   tupler   s    r   	resume_fnzBlockStackEntry.resume_fn  s    +++		5)?;;		5 !/		5
  1$eD,=,K&L&L   t/!3444r   r   r   is_graph_breakVariableTracker | Nonec                    | j         J |r| j                                         s|s| j                             |          S d S r   )r*  exit_on_graph_breakexit)r   r   r2  s      r   r6  zBlockStackEntry.exit  sX      ,,,	.#0DDFF	.	. $))"---tr   r  )r   rK   )r   r   r2  r   r   r3  )r   r   r   r   r*  r,  r1  r6  r   r   r   r'  r'    s           	     - - - -5 5 5 5     r   r'  c                      e Zd ZdS )r   Nr   r   r   r   r   r   r   r             Dr   r   c                      e Zd ZdS )ReturnValueOpNr8  r   r   r   r;  r;    r9  r   r;  c                      e Zd ZdZdS )YieldValueOpzY
    Signal to the symbolic tracer to stop and return control flow to the
    caller
    N)r   r   r   r   r   r   r   r=  r=    s           r   r=  fnCallable[..., object]Callable[..., Any]c                    t          t          j        |           j                  t	          |           t          j        |           dfd            }|S )	Nr   InstructionTranslatorr   r-   r   r   c                    |                                          | |                               i                      d S r   )pushr   popn)r   r   fn_varnargss     r   implzstack_op.<locals>.impl  s9    		&&&tTYYu-=-=rBBCCCCCr   )r   rB  r   r-   r   r   )r   inspect	signature
parametersrf   	functoolswraps)r>  rH  rF  rG  s     @@r   stack_oprN    sr    !"%%011ER  F_RD D D D D D D Kr   modobjectr   c                    t          | t          j                  sdS | j                            d          d         t
          j        v S )NF.r   )
isinstancetypes
ModuleTyper   splitsysstdlib_module_names)rO  s    r   	is_stdlibrY    s?    c5+,, u<c""1%)@@@r   with_msg	list[str]c                    | rdd}ndd}d t          j        |          D             }t          d t          |          D                       }|                    d	          }||d
z   |d
z            S )Nxr   r   r   c                    | s
J d            d S )Nmsgr   r]  s    r   r>  z(get_assert_bytecode_sequence.<locals>.fn  s    OOeOO1OOr   c                    | sJ d S r   r   r`  s    r   r>  z(get_assert_bytecode_sequence.<locals>.fn  s    HH1HHr   c                    g | ]	}|j         
S r   r   r   r   s     r   
<listcomp>z0get_assert_bytecode_sequence.<locals>.<listcomp>      >>>TT[>>>r   c              3  J   K   | ]\  }}|                     d           |V  dS )POP_JUMPN)
startswith)r   ir   s      r   r   z/get_assert_bytecode_sequence.<locals>.<genexpr>  s7      VV71d$//*:U:UVQVVVVVVr   RAISE_VARARGSr   )r]  r   r   r   )disget_instructionsr   	enumerater   )rZ  r>  insts	begin_idxend_idxs        r   get_assert_bytecode_sequencerr    s     	 	 	 	 		 	 	 	 ?>S%9"%=%=>>>E VVi&6&6VVVVVIkk/**GQ1,--r   c                 
   t           j        dk    sJ dd} d t          j        |           D             }t	          |          dz
  |ddd                             d	          z
  }|                    d
          }|||         S )zNGet the bytecode instructions that precede BUILD_LIST in a list comprehension.      r   	list[int]c                 4    d t          d          D             S )Nc                    g | ]}|S r   r   r   rj  s     r   re  zB_get_comprehension_bytecode_prefix.<locals>.fn.<locals>.<listcomp>      $$$a$$$r   r   ranger   r   r   r>  z._get_comprehension_bytecode_prefix.<locals>.fn      $$588$$$$r   c                    g | ]	}|j         
S r   rc  rd  s     r   re  z6_get_comprehension_bytecode_prefix.<locals>.<listcomp>  rf  r   r   NLOAD_FAST_AND_CLEAR
BUILD_LISTr   rw  )rW  version_inforl  rm  r   r   )r>  ro  	start_idxrq  s       r   "_get_comprehension_bytecode_prefixr    s     w&&&&% % % % ?>S%9"%=%=>>>EE

Qttt!2!23H!I!IIIkk,''G7"##r   dict[str, dict[str, Any]]c                     t           j        dk    sJ dd} dd}dd}dd}dd} ||           } ||          } ||          } ||          }|d         |d         d|d         |d         d|d         |d         d|d         g dd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)
    rt  r   rw  c                 8    d t          d          D             } | S )Nc                    g | ]}|S r   r   rz  s     r   re  zI_get_comprehension_result_patterns.<locals>.fn_stored.<locals>.<listcomp>  s    &&&!&&&r   r   r|  )results    r   	fn_storedz5_get_comprehension_result_patterns.<locals>.fn_stored  s     &&U1XX&&&r   r   c                 8    d t          d          D              dS )Nc                    g | ]}|S r   r   rz  s     r   re  zL_get_comprehension_result_patterns.<locals>.fn_discarded.<locals>.<listcomp>"  s    qr   r   r|  r   r   r   fn_discardedz8_get_comprehension_result_patterns.<locals>.fn_discarded!  s!    E!HHqr   c                 4    d t          d          D             S )Nc                    g | ]}|S r   r   rz  s     r   re  zK_get_comprehension_result_patterns.<locals>.fn_returned.<locals>.<listcomp>&  r{  r   r   r|  r   r   r   fn_returnedz7_get_comprehension_result_patterns.<locals>.fn_returned%  r~  r   c                 N    t          d t          d          D                       S )Nc                    g | ]}|S r   r   rz  s     r   re  zK_get_comprehension_result_patterns.<locals>.fn_consumed.<locals>.<listcomp>)  s    (((!A(((r   r   )sumr}  r   r   r   fn_consumedz7_get_comprehension_result_patterns.<locals>.fn_consumed(  s%    ((uQxx((()))r   r>  r@  tuple[list[str], Optional[str]]c                   t          t          j        | j                            d         d         }g }d}t          j        |           D ]Q}|r	|j        r nE|j        }|r;|j        |k    r0|pt          |j                  }|	                    |j
                   R||                    d          dz   d         }d}g }|t          |          k     rK||         dk    r?|	                    ||                    |dz  }|t          |          k     r||         dk    ?|t          |          k     r0||         dk    r$|dz  }|t          |          k     r||         dk    $||t          |          k     r||         ndfS )zCExtract (pre_store_ops, post_store_op) from comprehension bytecode.r   FEND_FORNr   
STORE_FAST)r   rl  findlinestarts__code__rm  starts_line	positionsr   r   r   r   r   r   )	r>  target_linero  startedinstrposopsidxpre_store_opss	            r   extract_patternz;_get_comprehension_result_patterns.<locals>.extract_pattern+  s   3-bk::;;A>qA)"-- 	+ 	+E 5, /C +sz[00!<T%*;%<%<U\***EKK	**Q.001CHHnnS\!9!9  S***1HC CHHnnS\!9!9 CHHnnS\!9!91HC CHHnnS\!9!9 #C..c#hhdBBr   r   r   )r  post_store_op)stored	discardedreturnedconsumedr  r   r   )r>  r@  r   r  )rW  r  )	r  r  r  r  r  r  r  r  r  s	            r   "_get_comprehension_result_patternsr    s    w&&&&      % % % %* * * *C C C C4 _Y''F--I{++H{++H %+1Iq	JJ'0|iPQlSS&.qkHQKPP&.qkBGG	  r   c                  P    e Zd ZU dZded<   ded<   ded<   ded	<   ded
<   ded<   dS )ComprehensionAnalysisa9  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_stackr[  iterator_varswalrus_varscaptured_varsN)r   r   r   r   r   r   r   r   r  r  R  sc         	 	 KKKr   r  r   truth_fnCallable[[object], bool]rD  c                   |t           j        us|rdS t          | j        t                    sJ | j        }dD ]}t          |          }| j        ||t          |          z            }d |D             }||k    rY|r+|                    d          }| j        ||z            j	        }nd}| 
                    t          j        |                      dS dS )NF)FTc                    g | ]	}|j         
S r   rc  rd  s     r   re  z:_detect_and_normalize_assert_statement.<locals>.<listcomp>  s    777TT[777r   
LOAD_CONSTzassertion errorT)operatortruthrS  r   r   rr  instructionsr   r   argvalrD  rh   create)	r   r  rD  current_instruction_pointerrZ  assert_insts	cur_instsload_const_idx	error_msgs	            r   &_detect_and_normalize_assert_statementr  g  s    	&&4&ud.44444"&":!  3H==%'*E,+   
	 87Y777	$$ .!-!3!3L!A!A -/.@ 	 .	II&-i8899944 % 5r   F8Callable[[InstructionTranslatorBase, Instruction], None]c                :     dd	 ddfdd fd}|S )Nvaluerb   r   r   c                N    t          dd|  dg t          j        d           d S )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r  s    r   raise_jump_graph_breakz,generic_jump.<locals>.raise_jump_graph_break  sO    .5e55D".C		
 		
 		
 		
 		
 		
r   r   r   r   r   r-   	extra_msgr   r   c           	     $   |                                  sJ d }	  |           n# t          $ r}|}Y d }~nd }~ww xY w|J |                                 r|                     | j        |           |                     | j        t          |          |           |                     |           t          
                    d           | j                            | t          dt          |           | |                                 g          d          }|                                  |                     | j        |          }
r|                     |           |j        J |                     |j        |          }t(          j        dk    r(| j                            t/          d          g           t/          |j        |d         	          }	|	                    |           | j                            |	g|z   |z              d S )
Nr   r   zgeneric_jump triggered compilezgeneric_jump r   r   
stack_popsru     TO_BOOLr   )r(  )should_compile_partial_graphr;   maybe_has_backedgeraise_loop_graph_breakf_codelog_graph_breakcode_optionsr   rD  r  debugr"  compile_subgraphr?   r`   frame_summarypopcreate_call_resume_atnext_instructionr(  rW  r  add_output_instructionsr(   r   copy_positions)r   r   r  r  r   eall_stack_locals_metadataif_nextif_jump	jump_instrD  r  s             r   jump_graph_breakz&generic_jump.<locals>.jump_graph_break  sL    0022222	""5)))) 	 	 	CCCCCC	  ""$$ 	:''S999s88 	 	
 	
 	
 			%		2333$(K$@$@%;;	;;d>P>P>R>R=S   %A %
 %
! 	


,,!%
 
  	IIe{&&&,,K%
 

 w&&K//1CI1N1N0OPPP&t{71:FFF	  &&&++YK',AG,KLLLLLs   ' 
=8=c                
   |                                  }t          j        rTt          |           rB|                                  }|                                rt          |                                          r|                     |          S |                                 r | ||           n(t          dd| dg t          j        ddd           |                                rE | j        j        dt          j        gt#          ||fi           R   |                     |           d S t%          |t&                    r|j        }t%          |t          j                  s|d	k    }t          j        j        j                            |          }|s,t          d
t5          |          dg t          j                   |                     |           d S  | j        j        dt          j        gt#          |fi           R  }t;          | |t=          |j        |                     } | j        j        dt          j        gt#          ||fi           R   |                     |           d S |                                rt%          |t@                    r8|j!        r1tE          |j!        #                    tH          j%                              |                                          r.r| &                    |           |                     |           d S d S |                                r#|                                 r | ||           d S t%          |tN                    rZ| j        (                    |j)                  } |          r.r| &                    |           |                     |           d S d S t%          |tT                    rm	 |+                    | d          }	nl# tX          j-        $ rZ tY          j.        |            	 |+                    | d          }	n+# tX          j-        $ r tY          j.        |            d }	Y nw xY wY nw xY wt%          |	t^                    r|	0                    | g i           }tc          tc          |	dd           dd           }
|                                r|                                }|
dk    rft%          |t
                    sQtd          j3        4                    dtk          |          j6                   }tY          j7        tp          | |g           t%          |t
          tr          f          r9 |          r0r| &                    |           |                     |           d S d S d S t%          |t&                    rD|:                                r.r| &                    |           |                     |           d S d S t          dd|	 d| dg            d S  d          r.r| &                    |           |                     |           d S d S |                                sp|;                    |           r[ ty          |=                    |                               r.r| &                    |           |                     |           d S d S t%          |t&                    r	 t%          |j        t          j                  r|:                    | j                  }nt}          |j        d	k              }nC# tX          j?        $ r1}|                                 r | ||d|           cY d }~S  d }~ww xY w |          r.r| &                    |           |                     |           d S d S t%          |td          j@                  r; d          r.r| &                    |           |                     |           d S d S ddl!mA} |j!        ] ||j!                  rM |B                                          r.r| &                    |           |                     |           d S d S  |           d S )Nz>Data-dependent assertion failed (cannot compile partial graph)zvalue: zuDynamo has determined when encountering a data-dependent assert failure that it should not compile the partial graph.zUse `torch._assert()` to raise a hard AssertionError when the check fails. This error will propagate back the user code that called the compiled function (i.e. Dynamo will not trace any exception handling).zRemove the assert statement.zMove the assert statement outside of any context managers in order to graph break with partial graph compilation (if fullgraph=False).r  r   r   z#Assertion failed on symbolic shapesr   )example_value__bool____len__r>  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_   rS  r   sym_numSymBoolfxexperimentalsymbolic_shapesexpect_truer   
USER_ERRORscalar_tensorre   rY   noderm   sourcer>   
make_guardr=   SEQUENCE_LENGTHrD  r   get_submodule
module_keyr   var_getattrr   ObservedAttributeErrorhandle_observed_exceptionru   r   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_tensorrO  r]  method_nameresult_valuer_  eval_resultr  r  r  rD  r  r  s                   r   innerzgeneric_jump.<locals>.inner  s	   !%3L	6tXtLLL	 *.I'')) 002233 99T??*6688 $$T47777! ` 1% 1 1%H.:u
 ;N   *    ((#' 'y'92>>   
 		$%11  !=!(EM:: -'1}H.>JJ8TT ! E #H$&= 1 <=	    		$%=T[%=!4&7H%SU7V7V& & &"  -&,-C-H$OO      %DK$# #$4i#@"EE   
 IIdOOOF##%% g	. %!233 U Uel55l6RSSTTTx002233   %IIe$$$		$    __ ]	.4#D#D#F#F ]	.T4//////00 [	.+++E,<==Cx}}   %IIe$$$		$    899 T	.	%%dJ77-   -d333))$	::AA1   1$777AAA !/00  $r266%gat&<&<j$OO,,.. #)#<#<#>#>L"j00LRV9W9W0'8??bT,EWEWE`bb  4YC5QQQQ!,s<< (,AWAW ( - IIe,,,		$( ( ( (  88 ++-- ( - IIe,,,		$( (
 " U @1 @ @ @ @%X       8D>> $ )		%(((IIdOOOOO$ $ "" &	.u'D'DT'J'J &	.xE55d;;<<==   %IIe$$$		$    // !	. emU];; A"'"5"5dk"B"BKK",U]a-?"@"@K=   4466 S++D$aRRRRRRRRR x$$   %IIe$$$		$    y=>> 	.x~~   %IIe$$$		$   
 322222|',>,>u|,L,L'8E002233 $ )		%(((IIdOOOOO$ $
 '&u-----s[   "O9 9#Q"P43Q"4%QQ"QQ"!Q"(A\; ;];
%]6/];5]66];)r  rb   r   r   )r   )
r   r   r   r-   r  rb   r  r   r   r   r   r   r   r-   r   r   r   )r  rD  r  r  r  s   `` @@r   generic_jumpr    s    

 

 

 

  	7M 7M 7M 7M 7M 7M 7M 7Mrw. w. w. w. w. w. w. w. w.r Lr   cgr2   cleanuplist[Instruction]r   c                :   g }| }||                     |           |j        }|t          |          D ]} | j        D ]}t	          |j        t                    rA|                    |                                	                    |j
        |                     ]|j        J t	          |j        t                    sJ |j                            |           |                    |                                                    |j
        |                     ݌dS )zsGenerates bytecode to restore the block stack for running the unsupported instruction
    in the compiled bytecode.N)r   parentr   block_stackrS  r*  r   extend_outputr1  try_except_torch_function_moder  ri   reconstruct_typetry_finally)r   r   r!  all_txescur_txbs         r   _reconstruct_block_stackr-    s9    13H24F

 
 x   R R 	R 	RA !.*CDD   KKMM@@   
 >---an/FHHHHHN++B///Q[[]]66rPPQQQQ	RR Rr   
msg_prefixYCallable[[Callable[..., None]], Callable[[InstructionTranslatorBase, Instruction], None]]c                     d fd}|S )Ninner_fnr  r   r  c                ^     t          j                   d fd            }dfd
|S )Nr   r   r   r-   r   r   c           	        | j         }| _         |                                 }|                    |           r|j        J  | ||j                  S 	  | |          || _         S # t          $ r }| j        rL| j        s| j        r |                                 t          dd| j         ddgt          j        |           |j        r |                                 s |                                 r|                     | j        |           |                     | j         dt'          |           |           |                                 |                    d           t+          |j        |j                  |_        Y d }~nd }~ww xY w	 || _         n# || _         w xY w|                    | j                   d S )	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?   r_  
real_stackr   )	r   r   	prev_pushspeculationexcphandle_graph_breakr1  r.  rD  s	        r   wrapperz>break_graph_if_unsupported.<locals>.decorator.<locals>.wrapper  sD   5I,0D)..**K!!$'' J")555))$k6HIII):xd++P 1:--O  %S %S %S7 ~ )B  **,,,! R jDDh j j %Dc.L "&	 	 	 	 ? 88:: **,, C//TBBB$$%(::s4yy:: %    &&(((!!-000%7$/%R%R""""""K%SJ #09--	-999911$2KLLLLLs+   A( (F3DF	F FF 	F(r   r?   c                   t           j        dk    rqt           j        dk     ra|j        dk    rVt          j        t          j        d         |j                  t          j        t          j        d         |j                  z   }nt          j        |j        |j                  }t          	                    d|j                   | j
                            | |t          
          |z
            }t          | j
        j                  }g }t          | ||           | j
                            |                                           ~t           j        dk    r|j        dk    r| j        | j                                        nd}t)          |          dk    r<t           j        d	k     sJ | j
                            t+          d
|          g           |j        J t-          |j        d          }|d                             |           | j
                            |           n?|j        J t3          j        |          }	d |	_        | j
                            |	g           | j
                            |           |                     t          
          |z
             
r!|                     t;                                 | j
                            |                     | j        |                     d S )Nru     rt  CALLPRECALLz%s triggered compiler  r   r   r  KW_NAMESr  Fr  ) rW  r  r   rl  stack_effectopmapargopcoder  r  r"  r  r   r2   root_txr-  r  rm  kw_namesr  r   r(   r$   r  r(  copyexn_tab_entryrE  rD  r   r  r  )r   r   r   rL  r  r   r!  rQ  
call_insts	inst_copyrD  s             r   rC  zIbreak_graph_if_unsupported.<locals>.decorator.<locals>.handle_graph_break  s     G++$w..K6))  #/Ii($(   $SYv%6AA B  #/TXFFII,dk:::(,(D(DVD		L0H )E ) )% 4;.//B)+G$T2w777K//0C0C0E0EFFF7**t{f/D/D }0 M44666 
 x==1$$+g5555K77+JxHHHI   x+++1$(EBB
2--d33333J???? {*** IdOO	*.	'33YK@@@K//888IIc$ii,./// -		/++,,,K//**)-     r   r  )r   r   r   r-   r   r?   r   r   )rL  rM  )r1  rD  rC  r.  rD  s   ` @r   	decoratorz-break_graph_if_unsupported.<locals>.decorator  sy     
	"	"2	M 2	M 2	M 2	M 2	M 2	M 2	M 2	M 
#	"2	Mh<	 <	 <	 <	 <	 <	| r   )r1  r  r   r  r   )rD  r.  rV  s   `` r   break_graph_if_unsupportedrW    s7    
v v v v v v vp r   c                  $     e Zd ZdZd fdZ xZS )BytecodeDispatchTableMetazTInstalls a `cls.dispatch_table` on every subclass to speed up calls to self.OPCODE()r  r  r   r   basesr   dctr   r   c                     t                                          |||           dd fdt          j                                        D             fd	t          d
          D              _        d S )Nr   r   r   r   r   r   c                `    t          d|  d| d|  dd|  dgt          j                   d S )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   _missingz4BytecodeDispatchTableMeta.__init__.<locals>._missing]  sr    2!44d44f\bfff_F _ _ _ '2		 	 	 	 	 	r   c                `    i | ]*\  }}|t          |t          j        |                    +S r   )r  rL  partial)r   r   opr`  r  s      r   r   z6BytecodeDispatchTableMeta.__init__.<locals>.<dictcomp>i  sH     
 
 
 VY%6x%H%HII
 
 
r   c                :    g | ]}                     |          S r   )get)r   rj  dispatch_tables     r   re  z6BytecodeDispatchTableMeta.__init__.<locals>.<listcomp>n  s'    IIIn0033IIIr      )r   r   r   r   r   r   )super__init__rl  rM  r   r}  rf  )r  r   rZ  r[  r`  rf  	__class__s   `   @@r   ri  z"BytecodeDispatchTableMeta.__init__Z  s    uc***
	 
	 
	 
	
 
 
 
 
!ioo//
 
 

 JIIIU4[[IIIr   )
r  r  r   r   rZ  r   r[  r   r   r   )r   r   r   r   ri  __classcell__rj  s   @r   rY  rY  W  sM        ^^J J J J J J J J J Jr   rY  c                      e Zd ZU dZ ej        e          Zded<    ej        d          Z	ded<   ddZ
ddZddZddZd dZddZddZddZddZd!dZd"dZd#dZeZdS )$ExceptionStackzU
    Exception stack that it is shared among all InstructionTranslator instances
    r   zlist[ExceptionVals]
_exc_stackN)defaultzOptional[ExceptionVals]_current_exceptionr   r   c                    d | _         d S r   rq  r   s    r   clear_current_exceptionz&ExceptionStack.clear_current_exception  s    "&r   valr   c                >    |                      |           || _        d S r   )._set_context_and_break_context_reference_cyclerq  r   ru  s     r   set_current_exceptionz$ExceptionStack.set_current_exception  s$    ;;C@@@"%r   c                t    | j         J |                     | j                    |                                  d S r   )rq  r   rt  r   s    r   move_current_exception_to_stackz.ExceptionStack.move_current_exception_to_stack  s>    &222D+,,,$$&&&&&r   c                "    | j         J | j         S r   rs  r   s    r   get_current_exceptionz$ExceptionStack.get_current_exception  s    &222&&r   prev_idxr   c                    |j         x}rt          |          t          ur|S t          | j                  |z   dk    r;| j        |         }|                     ||dz
             |                    |           |S Nr   r   )__context__r  rh   r   ro  _set_context_recursiveset_context)r   ru  r~  ctxprevs        r   r  z%ExceptionStack._set_context_recursive  s     ?"C 	S		9I(I(IJt(*Q..?8,D''hl;;;OOD!!!
r   c                    |x}}d}	 |j         }t          |          t          u rd S ||u r|                    t                     d S |}||u rd S |r|j         }| }Tr!  )r  r  rh   r  rg   )r   ru  oslow_oslow_update_toggler  s         r   _break_context_reference_cyclez-ExceptionStack._break_context_reference_cycle  s    
 F"	8mGG}} 000#~~4555AF{{ ! ,+%7!7%	8r   c                    |                      |t          | j                  dz
             |                     |           d S Nr   )r  r   ro  r  rx  s     r   rw  z=ExceptionStack._set_context_and_break_context_reference_cycle  sC     	##CT_)=)=)ABBB++C00000r   c                4    | j                                         S r   )ro  r  r   s    r   r  zExceptionStack.pop  s    ""$$$r   c                :    | j                             |           d S r   )ro  r   rx  s     r   r   zExceptionStack.append  s    s#####r   c                *    t          | j                  S r   )r   ro  r   s    r   r  zExceptionStack.__len__  s    4?###r   r   c                    | j         |         S r   )ro  )r   r   s     r   __getitem__zExceptionStack.__getitem__  s    u%%r   r   c                &    d| j         d| j        S )Nzself._exc_stack=z - self._current_exception=)ro  rq  r   s    r   __str__zExceptionStack.__str__  s    A$/AAt'>AAAr   r   )ru  r   r   r   )r   r   )ru  r   r~  r   r   r   r  )r   r   r   r   r   )r   r   r   r   r   r   r   ro  r   rq  rt  ry  r{  r}  r  r  rw  r  r   r  r  r  __repr__r   r   r   rn  rn  q  sZ          '8k&7&M&M&MJMMMM2C+2CD2Q2Q2QQQQQ' ' ' '& & & &' ' ' '
' ' ' '	 	 	 	8 8 8 861 1 1 1% % % %$ $ $ $$ $ $ $& & & &B B B B HHHr   rn  c                      e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded <   d!ed"<   d#ed$<   d%ed&<   d'ed(<   ded)<   ded*<   d+ed,<   ded-<   d.ed/<   d0ed1<   d2ed3<   dYd6ZdZd7Zd[d9Zd[d:Zd[d;ZdYd<Z	d\dAZ
d]dDZd^dFZd_d`dIZdadJZdbdKZdZdLZej        dMk    rdcdOZndcdPZedddQ            ZdedSZdfdTZdYdUZdgdXZdhdZZdid[Zdjd]Zdcd^Zdcd_Zdcd`ZdcdaZ dcdbZ!eZ"dkdcZ#dcddZ$dcdeZ%e&j'        didf            Z(dcdgZ)dcdhZ*e+dldk            Z,dmdnZ-dadoZ.dcdpZ/e/Z0dcdqZ1e+dnds            Z2dcdtZ3dodvZ4e4Z5e4Z6 e7e8j9        dw          Z: e7e8j;        dw          Z< e7e8j9        dx          Z= e7e8j;        dx          Z>dcdyZ?dcdzZ@dcd{ZAdcd|ZBdcd}ZCdcd~ZDdcdZEdcdZFdcdZGdpdZHdqdZIdrdZJdcdZKdcdZLdcdZMdsdZNdcdZOdtdZPdcdZQdcdZRdZdZSdcdZTdcdZUdcdZVdcdZW eXdxd          dcd            ZY eXdxd          dcd            ZZ eXdxd          dcd            Z[dcdZ\dcdZ]dcdZ^dcdZ_dudZ`dcdZa eXdwd          dcd            ZbdcdZceddvd            ZedwdZfdxdZgeddyd            ZhdZdZi eXdwd          dcd            ZjdcdZkdcdZldcdZmdZdZndzdÄZodcdĄZpdcdńZqerfd{dȄZsdcdɄZtetZudcdʄZvdcd˄ZwewZxdcd̄Zydcd̈́Zzdcd΄Z{dcdτZ|dcdЄZ}dcdфZ~dcd҄ZdcdӄZ eXdwdԬ          dcdՄ            ZdcdքZdcdׄZdcd؄ZdcdلZdcdڄZdcdۄZdcd܄Zd|d߄Zd}dZdcdZdcdZdcdZdcdZdcdZdcdZdcdZdcdZeZdcdZdcdZdcdZdcdZdcdZdcdZdcdZdcdZ ee8j                  Z ee8j                  Z ee8j9                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z  eXdxd󬙦           ee8j                            Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  Z ee8j                  ZېdcdZej        dMk    rdcdZݐdcdZސdcdZߐdcdZd~ddZ eXdxd          dcd            ZdcdZdcdZe4Ze4Z e7e8j;        dw          Z e7e8j;        dw          Z e7e8j9        dw          Z e7e8j9        dw          ZdcdZdcd ZddZeddd            ZdcdZdcdZdcdZdcdZdcd	Zdcd
ZdcdZdcdZdcdZdcdZdcdZ eXdxd          dcd            ZdcdZdcdZdcdZdcdZdcdZeZ eZeZdZdcdZdcdZdZdcdZdZdZ	 d_ddZ	dd!Z
dZd"Zdd$Zedd&            Zej        dd)            Zdd+ZdZd,Zdd-Zdd/Zdcd0Zdd7Zdd9Zdd=Zdd@ZddEZedddI            Z	 	 	 dd fdXZ xZS (  r   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   r7  zlist[BlockStackEntry]r%  r   r   zOptional[ConstantVariable]rQ  accept_prefix_instr"  prefix_instsinline_depthinconsistent_side_effectszOptional[SpeculationEntry]current_speculationz	list[Any]rf  rn  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_queuer   r   c                    d| _         dS )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_effectsz8InstructionTranslatorBase.mark_inconsistent_side_effects  s     *.&&&r   c                    | }|^|j         j        }|j        J |j        |j        d          D ]+}|j        dv r n|j        t
          v r|j        }||k     r dS ,|j        }|^dS )N)RETURN_VALUERETURN_CONSTTF)r  offsetr   r  r   r   r  r$  )r   r+  
cur_offsetr   jump_offsets        r   r  z,InstructionTranslatorBase.maybe_has_backedge  s    * 7; 3:J-999+F,F,H,HI $ $;"BBBE;,.."&+K"Z//#tt]F   ur   r[  c                    | j         d         S )Nco_cellvarsr  r   s    r   cellvarsz"InstructionTranslatorBase.cellvars$       //r   c                    | j         d         S )Nco_freevarsr  r   s    r   freevarsz"InstructionTranslatorBase.freevars'  r  r   c                    t          | d          s.|                                 |                                 z   | _        | j        S )N_cell_and_freevars)r/  r  r  r  r   s    r   cell_and_freevarsz+InstructionTranslatorBase.cell_and_freevars*  s<    t122 	H&*mmoo&GD#&&r   c                      fd j                                         D              _        t           j         j                  fd j                                         D              _         d S )Nc                H    i | ]\  }}|                                 v ||S r   r  )r   r   r   r   s      r   r   z?InstructionTranslatorBase.prune_dead_locals.<locals>.<dictcomp>1  s@     -
 -
 -
1D**,,,, q,,,r   c                $    i | ]\  }}|v 	||S r   r   )r   r   r   readss      r   r   z?InstructionTranslatorBase.prune_dead_locals.<locals>.<dictcomp>8  s+      
  
  
QQ%ZZAqZZZr   )r  r   r  r    r  r  )r   r  s   `@r   prune_dead_localsz+InstructionTranslatorBase.prune_dead_locals/  s    -
 -
 -
 -
,2244-
 -
 -
) "$"3T5MNN 
  
  
  
!17799 
  
  
r   r>  rb   r   kwargsc                (   t          |t                    sJ t          |t                    sJ t          |t                    sJ t	          d t          j        ||                                          D                       sJ d }t          |d          r|j	        }t          |d          r|j
        }|r0t          |          r!t          |          rt          d|           |                     |                    | ||                     d S )Nc              3  @   K   | ]}t          |t                    V  d S r   )rS  rb   )r   r]  s     r   r   z:InstructionTranslatorBase.call_function.<locals>.<genexpr>E  s@       
 
 q/**
 
 
 
 
 
r   r  r>  z$Attempt to trace forbidden callable )rS  rb   r   r   all	itertoolschainvaluesr/  r  r>  callablerV   AssertionErrorrD  r   )r   r>  r   r  r1  s        r   r   z'InstructionTranslatorBase.call_function<  s5    "o.....$%%%%%&$''''' 
 
_T6==??;;
 
 
 
 
 	
 	
 
 2w 	 xH2t 	uH 	T** 	T|H/E/E 	T !R!R!RSSS		"""4v6677777r   ro   Sequence[VariableTracker]c                x    t          |t                    st          |          }|                    | ||          S )zD
        Redirect the call to the generator "call_function"
        )rS  rp   r   r   r>  r   r  s       r   inline_generator_functionz3InstructionTranslatorBase.inline_generator_functionR  s<     "<== 	4/33BdF333r   r   c                    t           j        r8t          |                                          r|                     |||          S t
                              | |||          S )zF
        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_returnz5InstructionTranslatorBase.inline_user_function_return_  sZ     4 	Ubkkmm9T9T 	U11"dFCCC0<<T2tVTTTr   Nr   c                    || j         }| j        dk    rd| j         dnd}t          | j        j        |          }|dnd| d}| j        j         d| d| j        j         | | S )Nr   z (inline depth: )r   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_headerz1InstructionTranslatorBase.get_line_of_code_headerm  s    >[F7;7H17L7L3t03333RT 	   7@@%-rr3C3C3C3C+)mmFmm8Km\m[kmmmr   c                    d|                                   d}t          j        | j        j        | j                                                  }|d| z  }|S )NzTRACE starts_line r   z    )r  	linecachegetliner  r  r   rstrip)r   log_strlines      r   get_log_starts_line_log_strz5InstructionTranslatorBase.get_log_starts_line_log_strw  sX    It'C'C'E'EIII !8$+FFMMOO=$== r   c                    | j         |k    rd S || _         t          j        | j        j        || j        j                   | j        r/t                              dt          | j
                             d S d S )N%s)r   r   set_current_locr  r  r  is_trace_source_log_enabledtrace_source_logr  r^   r  )r   r   s     r   r  z%InstructionTranslatorBase.starts_line}  s    ;&  F&K#VT[-@	
 	
 	
 + 	W""4D4T)U)UVVVVV	W 	Wr   c                   t                      | _        | j        }|dS | j        |         x| _        }|dz   | _        |j        r|                     |j                   | j        sr|                                 r^|                                 rJ| 	                                | _
        | j
                            |           r|                     |           dS | j        r9t                              d|j        |j        t%          | j                             t&          j        rb	 t%          | j                  }n# t*          $ r d}Y nw xY w| j                            d|j         dt%          |j                   d|            |                     |           	  | j        |j                 | |           | j        j         S # t:          $ r  t<          j        $ r }|                      |           Y d}~dS d}~wtB          tD          f$ r Y dS tF          tH          f$ r}| j%        s*| j        s#| j&        stO          |tF                    r>|j(        r7tO          |tH                    r!tS          d	d
dddgtT          j+                    | j
        ptX                              d           tO          |tH                    r"tS          dd
dddgtT          j+        d           tO          |tF                    sJ d|_(         dt[          |           }| .                    | j/        ||           Y d}~nd}~ww xY w| j
        0                    | j                   dS )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_graphr8  r  r   step_graph_breakis_trace_bytecode_log_enabledtrace_bytecode_logr  r   r  reprr   verbose
ValueErrorr  r   update_block_stackrf  rO  r"  r#  r   r   r   exception_handlerr;  r=  r;   r9   r:  is_tracing_resume_prologuerS  r=  r:   r   
DYNAMO_BUGr  r   r  r  r   )r   ipr   
stack_reprr  r   s         r   stepzInstructionTranslatorBase.step  s8   $=$?$?!%:5*.*;B*?? 4#%6  	/T-... 
	1133	 ''))	
 (,~~'7'7D$'..t44 %%d+++u- 	$$ $+t{D<L<L   > 	P!$*--

 P P PO


P &--GGGtDK'8'8GG:GG   	%%%B	,D,T4888{...- 	 	 	$ 	 	 	""1%%%44444|, 	 	 	55_- 8	 8	 8	 , 2 q+..	 45<	 a11 ! U "%` PW /9
 
 
 
 '/		MNNNa11 ! X "%a Pk /9	 $(    "![11111#8 031vv8 8    ! !        i8	t 	 ::4;TUUUus=   $D9 9EE(G L8G88L8L8 DL33L8rF  r   c                |   |j         }|rkt          | j                  dk    rM|j        | j        d         j        ur6|j        | j        d         j        u r| j                                         d S d S d S d S | j        r>|j        dvr7t          | j                  dk    sJ | j                                         d S d S d S )N   r  )NOPJUMP_BACKWARD	NOT_TAKENr   )rS  r   r%  r(  r  r   )r   r   r   s      r   r  z,InstructionTranslatorBase.update_block_stack  s     &E  + ())Q..D,<R,@,GGG(8(<(CCC $((***** /.GGCC # 	+ < ) ) t/00A5555$((*****	+ 	+ ) )r   c                    d S r   r   r   r   s     r   r  z,InstructionTranslatorBase.update_block_stack)  s    Dr   c                8    | j         J | j        | j                  S r   )r   r  r   s    r   r  z*InstructionTranslatorBase.next_instruction,  s"    '333 !9::r   continue_instc           	        | j         j        rJ | j        J | j        rJ t                              d           | j                             | t          d|                                 g                    }| j	        rddl
m} t          j        sJ t          | j         j                  }|                    g t#          d          |                    d          |                                t)          dd	          t#          d          |                    d          |                                t)          dd	                     |                     d||d         g |d
d          \  }} ||           g }t-          | j	        ||           |                     |g|g|           |                    |           |                    g t#          d          |                    d          t)          d          t#          d          |                    d          t)          d                     |d         j        }|                    g t#          d          |                    d          |                                t3          d|                     |                    g t5          d          t)          dd	                     | j	                            t9                                 |d         xj        dz  c_        |dk    r|                    g t#          d          |                    d          |                                t;                      t3          |d           t5          d          |                    d          t)          d                     |                    t)          d|dz   	          t)          d|dz   	          t)          d|dz   	          g           | j                             |                                | j	                             | j	        j!        |dd                    z              d S | j                             g t5          d          t)          d                     t          | j         j                  }| j                             |                    d          |                                g           |d         j"        #                                D ]g\  }	}
| j                             t;                      |                    |
          |                                |$                    |	          g           h| j                             t)          d          tK          |          g| j&                   d S )Nzstep triggered compilestep_unsupported)r   r   	skip_coder   r   r  rN  TFDELETE_SUBSCRru  LIST_APPENDSTORE_SUBSCRUNPACK_SEQUENCEPOP_TOPr  )'r"  output_instructionsr  r  r  r  r  r?   r  r$  
eval_framer  r   nested_graph_breaksr2   rP  r&  r&   create_load_constcreate_binary_subscrr(   create_resumer-  codegen_call_resume	num_stackr#   r+   rD  r   r'   r  rm  r  r  locals_namesr   create_storer)   r  )r   r  r  r  r   leaf_resume_codeleaf_resume_namer!  r  localr  s              r   r  z*InstructionTranslatorBase.step_graph_break1  s   ;2222'333 :~ 			*+++$(K$@$@%&84;M;M;O;O:PQQ %A %
 %
! ; j	------ ----4;.//B 	 ^^	((++	 ++--	 '|;;;		
 !^^	 ((++	 ++--	 '|;;;	   261C1C=";A">Be2 2.. I&''')+G$T["g>>> $$&6%7:J9KRPPPW%%%  ^^((++ '77 !^^	
 ((++ '77	 	 	 2!4>I ^^((++ ++-- )I66	    ^^&}!<<<   K_..///%a(22a722
 1}}  	$Q	,,Q//	 //11	 '((		
 -Y==	 %Q	 ,,Q//	 +>::	  " &'8i!mLLL&|QGGG&'8i!mLLL  " K//##%%+33K02KABB2O      K// ^^&y11   4;.//BK//((,,++--   8;HNNPP  
s33&((,,S11//11..	    K//&y11(77 &    r   c                *    t          j        d           S r   )r   current_framer   s    r   run_ctx_mgrz%InstructionTranslatorBase.run_ctx_mgr  s     +D111r   c           
        |                                  5  t          | j        j                   	 | j                            |            | j        | _        	 |                                 r	 |                                 ng# t          $ rZ}| j
        rMt          dt          |          j         dt          |                                         |j                  d  d }~ww xY wn,# t"          $ r  t$          $ r  t&          $ r}t)          |t*                    rRt)          | t,                    r=| j        s6| j        s/dt          |           }|                     | j        ||           t7          |d          r[d|j        v rRt:          j                            | j        j         | j        j!                  "                    ddd	          }||_#          d }~wt          $ r+}| j$        r| j$        %                                |_&         d }~ww xY w| j        '                                 t)          | t,                    r2| j        (                                 | j        )                                 nf# | j        '                                 t)          | t,                    r3| j        (                                 | j        )                                 w w xY wd d d            d S # 1 swxY w Y   d S )
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  r_  zData-dependentFT)print_outputinclude_strideinclude_device)*r"  r   r  r  r"  push_txr   r  r  	Exceptionr  r8   r  r   r   with_traceback__traceback__r   r4   RuntimeErrorrS  r;   rB  r   r:  r  r  r/  r_  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   runzInstructionTranslatorBase.run  s    G	= G	=dk-...E=##D)))#'#; 
))++  ))++     6 D8@#Aww3@ @7:1vv@ @  ).99t	D
  2   (          q+.."4)>?? !5 !N	@7:1vv@ @ 
 (()% )    1e$$ )9QU)B)B%*X%9%9.0A& &$n%*4PT %   #
 *8A&   % D$($6$A$A$C$CAM	 ""$$$ d$9:: =K'')))
 K::<<< ""$$$ d$9:: =K'')))
 K::<<<<=CG	= G	= G	= G	= G	= G	= G	= G	= G	= G	= G	= G	= G	= G	= G	= G	= G	= G	=sz   K*&C*)B C*
C%AC  C%%C*(I7*HCGH(&HHI7A!K*7A#KK**K.1K.ru  Optional[VariableTracker]c                    |/t          |t                    sJ dt          |                       | j                            |           d S )Nz"push expects VariableTracker, got )rS  rb   r`   r  r   rx  s     r   rD  zInstructionTranslatorBase.pushE  sP    {jo>>{{??? {> 	
#r   valsc                :    |D ]}|                      |           d S r   rD  )r   r9  ru  s      r   	push_manyz#InstructionTranslatorBase.push_manyK  s,     	 	CIIcNNNN	 	r   c                4    | j                                         S r   )r  r  r   s    r   r  zInstructionTranslatorBase.popO  s    z~~r   nc                X     g t           fdt          |          D                       S )Nc                8    g | ]}                                 S r   r  )r   r   r   s     r   re  z2InstructionTranslatorBase.popn.<locals>.<listcomp>S  s!    888!488::888r   )r   r}  )r   r>  s   ` r   rE  zInstructionTranslatorBase.popnR  s1    :8888uQxx88899::r   c           	        |j         }| j        r/|| j        v r&| j                            || j        |                    	 |                     | j        |                                                    n# t          $ r |                    d          ro	 |	                    dd          }|                     | j        |                    n]# t          $ r* t          dd| d| ddgt          j                   Y n*w xY wt          d	d| d
| dg t          j                   Y nw xY w|                    d          r| j                            |           d S d S )NrR  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_varrD  r  unwrapKeyErrorri  replacer:   r   r  r  )r   r   r   new_names       r   	LOAD_FASTz#InstructionTranslatorBase.LOAD_FASTU  s   { 	H$$-"7"7,,T4=3FGGG	IId*407799:::: 	 	 	s## #||C<<HIId28<==== 	 	 	! W 3T 3 3$c\`$c$c$cF.9	     	 H/// Ud U U U9-89	   #	2 ??9%% 	+ $$T*****	+ 	+s5   2A2 2D)6C	D)	1C=:D)<C==)D)(D)c                ^   |j         |                                 v sJ | j        |j                  }| j        j                            |          }|                     |           | j        r@|j         | j        v r4| j        	                    |j         | j        |j                             d S d S d S r   )
r  r  r  r"  side_effects	load_cellrD  r  rF  rG  )r   r   cellcontents_vars       r   
LOAD_DEREFz$InstructionTranslatorBase.LOAD_DEREFx  s    {d44666666#DK0{/99$??		, 	V$+">">,,T[$-:TUUUUU	V 	V">">r   c                    |j         }|                                 }|                    |           || j        |<   |t          k    r5|                                }t          |          t          u sJ || _        d S d S r   )	r  r  set_name_hintr  rJ   r  r  r   r  )r   r   r   	loaded_vtru  s        r   r  z$InstructionTranslatorBase.STORE_FAST  s    {HHJJ	%%%%.T"555..00C99$$$$.1D+++ 65r   c                     | j         |j        = d S r   )r  r  r  s     r   DELETE_FASTz%InstructionTranslatorBase.DELETE_FAST  s     ---r   c                @   |j         |                                 v sJ | j        |j                  }|                                 }| j        j                            ||           t          |t                    sJ |j	        |
                    |j	                   d S d S r   )r  r  r  r  r"  rN  
store_cellrS  r~   
local_namerT  )r   r   rP  ru  s       r   STORE_DEREFz%InstructionTranslatorBase.STORE_DEREF  s    {d44666666#DK0hhjj ++D#666$-----?&do..... '&r   c                    |j         }|t          j        |j                  S | j        |         }|s/t          j        |j                  | j        |<   | j        |         }|J |S )Nr  )rN  rh   r  r  _constants_cache)r   r   rj  ru  s       r   _load_constz%InstructionTranslatorBase._load_const  sq    H9#*====#A& 	+'7'>T['Q'Q'QD!!$'*C
r   c                V    |                      |                     |                     d S r   )rD  r^  r  s     r   r  z$InstructionTranslatorBase.LOAD_CONST  s(    		$""4(()))))r   c           	     D   |j         }| j        rU|| j        v r'| j                            || j        |                    n%|| j        v sJ | j        |         | j        j        |<   || j        vr|                     |          S || j        v rR| j        j	        | j        |                  }| 
                    | j        j	                            ||                     d S | j        |         }| 
                    t          j        | |t          |                               d S r   )r  r  	f_globalsadd_global_var
f_builtinsbuiltinsload_builtinr  r"  rN  rD  load_globalrb   buildrO   )r   r   r   variabler  s        r   _load_globalz&InstructionTranslatorBase._load_global  s   { 	Jt~%%"11$t8LMMMMt....48OD4I"+D1t~%%$$T***4((({/0Ed0KLHIIdk.::8TJJKKKFt$		/'e\$5G5GHHIIIIIr   c                z    d}|                      |          }t          |          }t          j        | ||          S )Nztorch.nn.modules.module)import_sourcer   rb   rg  )r   module_namemodule_sourcefglobals_values       r   nn_modules_globals_vtz/InstructionTranslatorBase.nn_modules_globals_vt  s<    /**;77'44$T>=IIIr   c                &   |j         J t          j        dk    r/t          j        dk     r|j         dz  r|                     |           |                     |           t          j        dk    r!|j         dz  r|                     |           d S d S d S )NrF  r  r   )rN  rW  r  	PUSH_NULLri  r  s     r   LOAD_GLOBALz%InstructionTranslatorBase.LOAD_GLOBAL  s    x###w&&3+;g+E+E$(UV,+ENN4   $w&&48a<&NN4      '&&&r   c                   |                                  }|j        }t          |          }|| j        vrt	                      | j        |<   | j        j                            || j        |                   }t          |t                    rt          d|dg            | j        j                            |||           d S )Nz%Storing Tensor hook handle in globalsThis is not supported.r  )r  r  rO   r  rP  r"  rN  track_global_existingrS  r   r:   store_global)r   r   r  r   r  rh  s         r   STORE_GLOBALz&InstructionTranslatorBase.STORE_GLOBAL  s    

{d##t,,,*0((D!$';+AAD)$/
 
 e455 	?4	    	 --heDDDDDr   rl  rO   c                   d|v r[t           j        j        j        |         }|                    dd                              dd                              dd          }n(t          |          }d|                    dd           }| j        | j                            ||           || j        j        |<   | j        j	        }||vs||         |u sJ |||<   | j        
                    |           t          |          S )z-Create an alias to a module for use in guardstorch_package>r   <rR  _dot_	__import_)r  r  package_importer_package_imported_modulesrJ  r   add_import_sourcer"  import_sourcesglobal_scopeupdate_co_namesrO   )r   rl  r  aliasra  s        r   rk  z'InstructionTranslatorBase.import_source  s    k))M2LE ##C--55c3??GGWUU E #;//EC 3 3C A ACCE<#L**5+>>>,7"5)K,	I%%5)9U)B)B)BB 	%##E***E"""r   r   levelc                    |                     d|dz
            }t          |          |k     rt          d          |d         }|r| d| n|S )z
        Copied from the Cpython implementation of __import__
        Resolve a relative module name to an absolute one.
        https://github.com/python/cpython/blob/5a094f0255eea1db58fb2cf14c200971e64ec36e/Lib/importlib/_bootstrap.py#L902
        rR  r   z2attempted relative import beyond top-level packager   )rsplitr   ImportError)r   r   r  r  bitsbases         r   resolve_namez&InstructionTranslatorBase.resolve_name  sb     ~~c519--t99uRSSSAw#'1$T1r   c                   | j                             d          }| j                             d          }|2|.||j        k    r#t                              d||j        d           |S ||j        S t                              dd           | j         d         }d	| j         vr|                    d
          d         }|S )z
        Copied from the Cpython implementation of __import__
        https://github.com/python/cpython/blob/5a094f0255eea1db58fb2cf14c200971e64ec36e/Lib/importlib/_bootstrap.py#L1090
        __package____spec__Nz)__package__ != __spec__.parent (%r != %r)ru  )
stacklevelzYcan't resolve package from __spec__ or __package__, falling back on __name__ and __path__r   __path__rR  r   )ra  re  r$  r  warning
rpartition)r   r  specs      r   calc_packagez&InstructionTranslatorBase.calc_package  s    
 .$$]33~!!*--Gt{$:$:?K 	     N;KK8    
 nZ0G//!,,S11!4r   c           
        |                      d          \  }}|                                }|                                }|j        }t          j         d| d| d| }|| j        v r| j        |         }t          |          }n	 t          |||| j                  }n8# t          $ r+ t          dd| d| d| dg t          j        	           Y nw xY w|d
k    r+|                                 }|                     |||          }|s1|                    d          d
         }	|                     |	          }n|                     |          }| j        r| j                            ||           t%          |t&          j        t*          f          r&|                     t/          ||                     d S t          dt1          |          dg 	           d S )Nr   r   )fromlistr  globalszImport failurezmodule_name: z, fromlist: z, level=z"Failure when attempting to import.r  r   rR  r  zBad import resultz%Import result is not a Python module.)rE  r  r  rH   LOCAL_MOD_PREFIXra  rO   
__import__r  r:   r   r  r  r  	partitionrk  r  add_local_modr]   rT  rU  rG   rD  r   r`   )
r   r   r  r  rl  recorded_namer  r  pkgtop_level_module_names
             r   IMPORT_NAMEz%InstructionTranslatorBase.IMPORT_NAME   sA   ))A,,x((**..00k !1TTETTHTT{TT 	 DN**N=1E!-00FF"% N	      ,^K^^X^^W\^^ D9-89	      zz''))"//S%HH  9(3(=(=c(B(B1(E%++,ABB++K88 	C,,]EBBB %%*K899 
	II*5@@@AAAAA+C     s   B 2CCc                d    |                      |           |                     |j                   d S r   )DUP_TOP
_load_attrr  r  s     r   IMPORT_FROMz%InstructionTranslatorBase.IMPORT_FROM`  s.    T$$$$$r   r  c                \   || j         vr#t          ddd| dg t          j                   | j         |         }t	          |          r?t          | j        j                  }t          ||          }t          j
        | ||          S t          |          sJ t          j        |          S )Nz%failed to find name in frame builtinsr   zFailed to find name `z` in frame's builtins.r  r  )rc  r:   r   r  r  rO   r"  %name_of_builtins_dict_key_in_fglobalsrN   rb   rg  rU   rh   r  )r   r  ru  builtins_source
var_sources        r   load_builtin_from_argvalz2InstructionTranslatorBase.load_builtin_from_argvalf  s    ((?RFRRR&1	    of%C== 	6*A O +?FCCJ"(sJ???&s+++++#*5555r   c                `    |                      |                     |j                             d S r   )rD  r  r  r  s     r   re  z&InstructionTranslatorBase.load_builtin}  s*    		$//<<=====r   Instruction | BlockStackEntryc                    | j         J | j        J |j        J t                                          d| j         | j        z
             | j        |j                 | _         | j         | _        d S )Nir_count)r   r  r(  r[   	incrementindexofr  s     r   r  zInstructionTranslatorBase.jump  s    '333+++{&&&''043CC	
 	
 	
 $(<#< 3r   FTc           	         |j         J | j                            t          ||j         t	          | j                                       d S r   r(  r%  r   r'  r   r  r  s     r   
SETUP_LOOPz$InstructionTranslatorBase.SETUP_LOOP  C    {&&&dk3tz?? S STTTTTr   c           	         |j         J | j                            t          ||j         t	          | j                                       d S r   r  r  s     r   SETUP_EXCEPTz&InstructionTranslatorBase.SETUP_EXCEPT  r  r   c                8    | j                                          d S r   )r%  r  r  s     r   	POP_BLOCKz#InstructionTranslatorBase.POP_BLOCK  s    r   c                0    |                      |           d S r   setup_or_before_withr  s     r   
SETUP_WITHz$InstructionTranslatorBase.SETUP_WITH      !!$'''''r   c           	         |j         J | j                            t          ||j         t	          | j                                       d S r   r  r  s     r   SETUP_FINALLYz'InstructionTranslatorBase.SETUP_FINALLY  sC    {&&&dk3tz?? S STTTTTr   c                0    |                      d            d S r   r;  r  s     r   BEGIN_FINALLYz'InstructionTranslatorBase.BEGIN_FINALLY  s    		$r   c                    |                      d          \  }}|J |                     |           |                     |                    | t          gdz  i                      d S )Nr   ru  )rE  rD  r   rg   )r   r   r6  r   s       r   WITH_CLEANUP_STARTz,InstructionTranslatorBase.WITH_CLEANUP_START  s`    IIaLL	c{{{		#		$$$T,B+Ca+GLLMMMMMr   c                Z    |                      d           |                     d            d S Nr   )rE  rD  r  s     r   WITH_CLEANUP_FINISHz-InstructionTranslatorBase.WITH_CLEANUP_FINISH  s$    		!		$r   c                   |                                                                  }|                     |           	 |                    |           }|                     |           d S # t          t
          j        f$ r}t          |t
          j                  rt          j        |            t          j
        dk    r|                     t                     n|                                   |                     |           Y d }~d S d }~ww xY wNrt  )r  realizerD  next_variableStopIterationr   ObservedUserStopIterationrS  r  rW  r  rg   r  )r   r   itru  r  s        r   FOR_ITERz"InstructionTranslatorBase.FOR_ITER  s    XXZZ!!		"	""4((CIIcNNNNNs<= 	 	 	!S:;; 4-d3337**
 		01111 


IIdOOOOOOOOO	s   *A) )D?BDDc                v    t          |t          j        t          f          r|                    | g i           }|S r   )rS  r   rf   r   r   rx  s     r   _create_exception_typez0InstructionTranslatorBase._create_exception_type  s@    )+-NO
 
 	2
 ##D"b11C
r   r   r   c                    |                                  } |j        | d          }t          |t          t          f          sJ t	          j        ||          } |j        | dt          d          |gi            d S )Nr*  __setattr__)r  r
  rS  rh   r   from_frame_summarycall_method)r   r   r  tbnew_tbs        r   _attach_traceback_to_exceptionz8InstructionTranslatorBase._attach_traceback_to_exception  s    **,,S_
 

 !#45
 
 	
 	
 
 #5mRHHo..7	
 	
 	
 	
 	
r   r   c                   |                      |          }t          | j                  rVt          |t          j                  r<|j        t          u r.t	          j        t                    
                    | g i           }|                     |          r9t          |dd           (t          j        j                                        |_        |                     |          rT| j                            |           t)          j        |j                  }t          |dd           } |d| |          t-          dt/          t(                    dg t0          j                   d S )Npython_stackraised exception )r?  zFailed to raise exceptionz.Attempted to raise a non-Exception type/value.r  )r  r.   r  rS  r   r   exc_typer  rf   r+  r   _isinstance_exceptionr  r  _guardsr   extract_stackr  r  ry  r   get_dynamo_observed_exceptionr:   r   r   r  )r   ru  observed_exception_typer  s       r   _raise_exception_variablez3InstructionTranslatorBase._raise_exception_variable  sp    ))#..
 %%	V3	 ;<<	V --+L99GGbRTUUC &&s++	L^T22:$};IIKKC %%c** 		33C888&)&G&U&U#"3==L)))C))l    	/HHH1%01		
 	
 	
 	
 	
 	
r   c                   |j         dk    rt          | j                  s,t          d          }t	          j        t          | |g           t          | j                  sJ | j        d         }|                     |          s
J |            |                     |           d S |j         dk    r| j	        d         }	 |                     |           | j        
                                }|                     |           d S # | j        
                                }|                     |           w xY w|                                 }|                                 }	 |                     |           | j        
                                }|                     |           |                     |          }|                    | t          d          |           d S # | j        
                                }|                     |           |                     |          }|                    | t          d          |           w xY w)Nr   zNo active exception to reraiser  r  r   	__cause__)rN  r   r  rh   r   r  r+  r  r  r  r}  r  r  r  call_setattr)r   r   r_  ru  curr_excfrom_vtcauses          r   rk  z'InstructionTranslatorBase.RAISE_VARARGS	  s:   8q==t()) M&'GHH,\4seLLLL t()))))#B'C--c2277C772**3/////X]]*R.C>..s333  ,BBDD33H=====  ,BBDD33H==== hhjjG((**CR..s333  ,BBDD33H===33G<<%%d,<[,I,I5QQQQQ  ,BBDD33H===33G<<%%d,<[,I,I5QQQQs   >D 0D3G A)Ic                    | j         d         }t          |t                    sJ |j        t          u rt          dddg            d S |                     |           d S )Nr  z CLEANUP_THROW with StopIterationr   zRReceived StopIteration when handling generator.throw/close. This is not supported.r  )r  rS  r   r  r  r:   RERAISEr   r   toss      r   CLEANUP_THROWz'InstructionTranslatorBase.CLEANUP_THROW7	  sx    jn#011111<=((:p	      LLr   c                   t           j        dk    rr|                                 }|j        r+|                                 }|                     |           d S |                     |           |                     |           d S |                                 }|                                 }|                                 }|                     |           d S )NrF  )rW  r  r  r  r  rD  )r   r   ru  r   _exc_tbs         r   r  z!InstructionTranslatorBase.RERAISEE	  s     w&&((**C{ 4HHJJ..s33333 		#..s3333388::D((**C((**C**3/////r   TypeIs[ExceptionVals]c                ,    t          |t                    S r   )rS  r   rx  s     r   r  z/InstructionTranslatorBase._isinstance_exception\	  s    #}---r   c                   g }t           j        dk    rt           j        dk     rdnd}t          | j                  |k    sJ | j        |          }| j        d         }|                     |          sJ t          |j                  }|                    | d          }t           j        dk    r@t          | j        d         t                    s |
                    | j        d                    nut          | j                  dk    sJ | j        d	         }| j        d
         }|                     |          sJ t          |j                  }|                    | d          }||||gz  }|                     ||i            d S )NrF  ru           r  r*     ir  )rW  r  r   r  r  rf   r  r
  rS  r   r   r   )r   r   r   fn_locr>  ru  typr  s           r   WITH_EXCEPT_STARTz+InstructionTranslatorBase.WITH_EXCEPT_START_	  s{   &(w&&*W44QQ!F tz??f,,,,VG$B*R.C--c22222!#,//C B
 7**!$*R.,?? 0KK
2///tz??a''''BB*R.C--c22222!#,//C77Bc22tR(((((r   raised_exceptionr   c           	     	   	 d	d	 fd}t           j        dk    r@ j        j        }|rt	           j                  |j        k    r1                                  t	           j                  |j        k    1|j        r1 	                    t          j         j        j                              	                     j                                                                        |           d S  j                                          j                                        }                     |           t%                     t&          u r
 |             t	           j                  r; j                                        }|j        j        dk    rЉ                     d            j                                         t	           j                  dk    ra j                                         t%                     t&          u r0t1          d	t3                    	d
z   g t4          j                    j                                        }|j        j        dk    Љ j                                        } j                                         t	           j                  |j        k    r1                                  t	           j                  |j        k    1t=          t?          d          dd d          } j                             tC          |d t	           j                                       t	           j                  dk    ru j        d         } 	                    t          j"                                	                    |            	                    t          j#        |j$                             n] 	                    t          j%                    	                    t          j%                    	                    t          j%                    	                    t          j"                                	                    |            	                    t          j#        |j$                                                  |           d S  j                                         t%                     t&          u r
 |             )NzDynamo found no exception handler at the top-level compiled function when encountering an exception. Exception will propagate outside the compiled region.r   r   c                 >   j                                         } t          j        |                                           }t          |          sJ t          dd|                                  d| j         dg t          j
        t          j                   d S )NzObserved exceptionr  r   r  r4  )r  r}  r   r  python_typerS  r:   python_type_namer   r   r  r_  )r  
dynamo_excobserved_exn_gb_explanationr  r   s     r   bubble_exception_to_interpreterzTInstructionTranslatorBase.exception_handler.<locals>.bubble_exception_to_interpreter	  s    (>>@@H:8;O;O;Q;QRRJ.
;;;;;,ZH,E,E,G,GZZ(-ZZZ7&1&2 *	 	 	 	 	 	r   rF  EXCEPT_HANDLERru  r   z#Observed exception (EXCEPT_HANDLER)z  This graph break is unexpected.r4  g    .Ar   r  r   )&rW  r  r  rS  r   r  depthr  lastirD  r   rh   r  r  r}  r  r   r  r  rB  r%  r   r   rE  r:   r   r   r  r{  r)  r-   r   r   r'  r   rf   r  rg   )
r   r  r  rS  r  block_stack_entryexception_varexcept_handler_instold_exceptionr  s
   ``       @r   r  z+InstructionTranslatorBase.exception_handler	  s   d 	$
	 	 	 	 	 	 	 	  w&& 4BM '
 $*oo(;;;HHJJJ $*oo(;;; !& II!243K3RSS  
 		$+AACCDDD 		-((((( 
  """  ,BBDD33H===::!66633555&&4#$$ I' %)$4$8$8$:$:!',37GGG IIaLLL%))+++4+,,11 
((***::)>>>)(M(+,<(=(=,G"D-E&E(9(D&E)9    /.(,(8(<(<(>(>%) (,37GGG, !% 1 G G I I!AACCC $*oo(9(EEEHHJJJ $*oo(9(EEE
 '2#c((<LdTU&V&V# ''#$7s4:OO  
 t())Q..$($5b$9M IIi799:::IIm,,,IIi78NOOPPPP IIi>???IIi>???IIi>??? 		)355666		-(((		)3M4JKKLLL 		+,,,,, 
  """::!66633555&&r   c                   |                                  }t          | j                  dk    rt          }n| j        d         }|                     |           |                     |           | j                                         d S )Nr   r  )r  r   r  rg   rD  r{  )r   r   ru  prev_excs       r   PUSH_EXC_INFOz'InstructionTranslatorBase.PUSH_EXC_INFO
  sw    ( hhjjt !!Q&&(>HH(,H		(		#99;;;;;r   c                   t           j        dk    rE|                                 }t          | j                  sJ | j                                         d S t          | j                  dk    sJ | j        d         j        j        dk    rt          d          | j                                         | 	                    d           t          | j                  sJ | j                                         d S )NrF  r   r  r  zYBug in Dynamo tracing of exception handling.Top of the block stack is not EXCEPT_HANDLER.ru  )
rW  r  r  r   r  r%  r   r   r  rE  )r   r   r   s      r   
POP_EXCEPTz$InstructionTranslatorBase.POP_EXCEPT%
  s    w&&

At()))))!!#####t'((1,,,,#(/3CCC$D     """IIaLLL t()))))!!#####r   c                   t          | j                  dk    sJ |                                 }t          j        dk    r| j        d         }n| j                                        }t          |t          t          t          t          f          s0t          dt          |          d| dg t          j                   t          j        dk    rE|                     |          s0t          dt          |          d	| dg t          j                   t          |t                    r|j        }n|g}|D ]}t          |t          t          t          f          s0t          d
t          |          d| dg t          j                   |                     |          rt!          |j        |j                  r dS t          |t&          j                  rt!          |j        |j                  r dS dS )Nr   rF  r  z Exception with bad expected typez"`except ...` has unsupported type rR  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  rW  r  rS  rf   r}   r   r   r:   r   r   r  r  r   
issubclassr  r>  r   )r   expected_exc_typesexc_instanceexpected_typesexpected_types        r   check_if_exc_matchesz.InstructionTranslatorBase.check_if_exc_matches:
  sJ   4:!####!XXZZw&&  :b>LL
  :>>++L 12	
 
 	 :.//VASVVV5)45	    w&&--l;; 8-- ufr u u u9-89	    (-88 	/5NN #N , 	 	M#65   A.. TM T T T9-89	    )),77 
J% = = 
 ttL)*CDD  J J 
 ttur   c                x    |                      t          j        |                                                      d S r   )rD  r   rh   r  r  s     r   CHECK_EXC_MATCHz)InstructionTranslatorBase.CHECK_EXC_MATCH
  s1    		),T-F-F-H-HIIJJJJJr   c                \    |                                  s|                     |           d S d S r   )r  r  r  s     r   JUMP_IF_NOT_EXC_MATCHz/InstructionTranslatorBase.JUMP_IF_NOT_EXC_MATCH
  s3    ((** 	IIdOOOOO	 	r   c                    |j         dk    r|                     |           d S |                     t          |j                  | |                     d          i                      d S )Nzexception matchr   )r  r  rD  r   rE  r  s     r   
COMPARE_OPz$InstructionTranslatorBase.COMPARE_OP
  s`    ;+++  &&&&&II)$+6tTYYq\\2NNOOOOOr   c                ~    |                      t          t                    |                                 gi            d S r   )r   rf   iterr  r  s     r   GET_ITERz"InstructionTranslatorBase.GET_ITER
  s2    ?400488::,CCCCCr   zjEncountered graph break when attempting to trace CALL_FUNCTION: a call to a regular function, e.g. f(x, y))rD  r.  c                    |                      |j                  }|                                 }|                     ||i            d S r   rE  r  r  r   )r   r   r   r>  s       r   CALL_FUNCTIONz'InstructionTranslatorBase.CALL_FUNCTION
  sB    
 yy%%XXZZ2tR(((((r   zjEncountered graph break when attempting to trace CALL_FUNCTION_EX: a variadic function call, e.g. f(*args)c           	        |j         dk    r$t          i           }|                                 }n|j         dk    st          j        dk    rM|                                 }t          |t                    rt          i           }|                                 }n/t          dd|j          d|j          g t          j	                   t          j        dk    r+|                                 }t          |t                    sJ |                                 }t          j        d	k    r;t          j        dk     r+|                                 }t          |t                    sJ t          |t                    s7|                    |           r"t          |                    |                     }t          |t                    rt          j        | t"          |          }t          |t                    rt          |t                    s?t          d
dt%          |           dt%          |           dg t          j                   |                                }|                     ||j        |           d S )Nr   r   r  z%Variadic function call with bad flagszflags: zHAttempted to call a variadic function (CALL_FUNCTION_EX) with bad flags r  r  rF  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  rW  r  rS  r   r:   r   r  rx   has_force_unpack_var_sequencer}   force_unpack_var_sequencer   rf   call_custom_dictr   r`   r  keys_as_python_constantr   r   )r   r   
kwargsvarsargsvarsnullr>  s         r   CALL_FUNCTION_EXz*InstructionTranslatorBase.CALL_FUNCTION_EX
  si    ;!*2..JxxzzHH[A!1W!<!<J*l33 3.r22
xxzzHH?/$+//tgkgrtt5)45	    w&&88::DdL11111XXZZw&&3+;g+E+E88::DdL11111
 
 	O
 44T::	O %X%G%G%M%MNNH j";<< 	R(9$jQQJ ($455 	Z>
 >
 	
 J]gh&7&7]]PZH[H[]]P5)45     7799
2x~z:::::r   zyEncountered graph break when attempting to trace CALL_FUNCTION_KW: a function call with keyword arguments, e.g. f(x=True)c                   |                                  }|                     |j                  }|                                  }t          |t                    r|                                sJ |                                }|d t          |                    |t          |           d          }}t          t          ||                    }t          |          t          |          k    sJ | 
                    |||           d S r   )r  rE  r  rS  r}   r  r  r   r   zipr   )r   r   argnamesr   r>  kwargs_listr  s          r   CALL_FUNCTION_KWz*InstructionTranslatorBase.CALL_FUNCTION_KW
  s     88::yy%%XXZZ(M22Tx7R7R7T7TTTT..00 !1CMM>!12D#h--9I9I4Jkc(K00116{{c(mm++++2tV,,,,,r   c                8   |                      t          j        |d                     |j        d         }| j        d         |         }t
          j        dk     r|                     |           d S |                     t          j        ||                     d S )Nr   rK  r   co_namesrF  )	r!  r   rJ  r  r  rW  r  r  LOAD_METHODr   r   rN  r  s       r   LOAD_METHOD_SUPERz+InstructionTranslatorBase.LOAD_METHOD_SUPER
  s    ;.tA>>>???k!n":.s3g%%OOF#####[0fEEEFFFFFr   c                    |                      t          j        |d                     |j        d         }| j        d         |         }|                     |           d S )Nr   rK  r   r1  )r!  r   rJ  r  r  r  r3  s       r   LOAD_ATTR_SUPERz)InstructionTranslatorBase.LOAD_ATTR_SUPER  s[    ;.tA>>>???k!n":.s3r   c                   |                      |j                   |                                 }t          j        dk    r,|                     |           |                     |           d S t          j        dk    r,|                     |           |                     |           d S |                     |           |                     d            d S )Nr  rF  )r  r  r  rW  r  rD  rq  r   r   objs      r   r2  z%InstructionTranslatorBase.LOAD_METHOD	  s    $$$hhjjw&&IIcNNNNN4     (( NN4   IIcNNNNNIIcNNNIIdOOOOOr   c                    |                      |j                  }|                                 }|J |                                 }|                     ||i            d S r   r   )r   r   r   dummyr>  s        r   CALL_METHODz%InstructionTranslatorBase.CALL_METHOD  sV    yy%%

}}}XXZZ2tR(((((r   attrc                    |                                  }t          t                                        | |t	          j        |          gi           }|                     |           d S r   )r  rf   r  r   rh   r  rD  )r   r=  r9  r  s       r   r  z$InstructionTranslatorBase._load_attr   s`    hhjj ))77")$//0
 

 			&r   c                    t           j        dk    r!|j        dz  r|                     |           d S |                     |j                   d S )Nrt  r   )rW  r  rN  r2  r  r  r  s     r   	LOAD_ATTRz#InstructionTranslatorBase.LOAD_ATTR)  sQ    w&&x!|   &&&$$$$$r   zkEncountered graph break when attempting to trace STORE_ATTR: storing an object's attribute, e.g. x.attr = yc                    |                      d          \  }}t          t                                        | |t	          j        |j                  |gi            d S r  )rE  rf   setattrr   rh   r  r  )r   r   ru  r9  s       r   
STORE_ATTRz$InstructionTranslatorBase.STORE_ATTR1  s_    
 99Q<<S  ..")$+66<	
 	
 	
 	
 	
r   c                    |                                  }t          t                                        | |t	          j        |j                  gi            d S r   )r  rf   delattrr   rh   r  r  r8  s      r   DELETE_ATTRz%InstructionTranslatorBase.DELETE_ATTR=  sU    hhjj  ..")$+667	
 	
 	
 	
 	
r   r  c                .   g }|dk    sJ |dk    r"|                     t          d                     | j        dk    rt          d          nt          d| j                  }|                     t          d          t          d          |g           |S )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   ru  r  r  rK  r  )extendr+   r   r(   r  )r   r  ro  return_insts       r   codegen_return_with_popsz2InstructionTranslatorBase.codegen_return_with_popsE  s      A~~~~>>LLQ((( {n,, ~...#N4;GGG 	
 		**,>y,I,I;W	
 	
 	
 r   r  resume_instmetarA   resume_codeslist[types.CodeType]r   r2   is_leafhandle_inactive_ctxtuple[types.CodeType, str]c                J    |rt          |j        |j                  D ]\  \  }}	}
t          t           j        |
                   }|                    t                                 |                    |           |	                    g t          d          |                    |          |                                |                    |          t          d                     |j        D ]\  }}	t          t           j        |                   }|                    t                                 |                    |           |	                    g t          d          |                    |          |                                |                    |j        |j        |         z             t          d                     t%          |          r|j        sJ |j        }t)          d|j                   }|rt-           j        |          t1           fd j        D                       }t3          |j                  t1          fd|D                       }t1          fd|D                       }|	                    t                      |                    |          |                                t                      g           |D ]m}|	                    t                      |                    |j        |j        |         z             |                                gt          d                     n|	                    t          d          t          dt7          |          	          gt          d          t9          |j        d
d                     n:t1          |j                                                  }t1          |j                  }t<          j        dk     rt7          |          dk    s
J d            t7           j                  t7          |j                   z
  } j!        j        J tE          j#         j$         j%         j!        j        |j        t1          d  j&        D                       |||t1          d  j&        D                       |t1          |j                  t1          |j                  t1          |j                   t1          |           j'                   } tQ          j)         j$                  *                    dd                       }|)tW          j,        |          tQ          j)        |          d<   |j-        r j.        /                    ||           d
}n6 j.        /                    |ta          j1        | j2        |                     |} j3        ' j3        4                    | j2        d         |           tj          d         |j6        xx         dz  cc<   ||fS )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   r  __resume_at_c              3  P   K   | ] }|v |                                 v|V  !d S r   r  )r   r   r  r   s     r   r   z:InstructionTranslatorBase.create_resume.<locals>.<genexpr>  sN       ! !::!4+A+A+C+C"C"C "C"C"C"C! !r   c              3  $   K   | ]
}|v|V  d S r   r   r   r   argnames_null_sets     r   r   z:InstructionTranslatorBase.create_resume.<locals>.<genexpr>  s.      SS1AR8R8RQ8R8R8R8RSSr   c              3  $   K   | ]
}|v |V  d S r   r   rV  s     r   r   z:InstructionTranslatorBase.create_resume.<locals>.<genexpr>  s.      !T!TQBS=S=S!=S=S=S=S!T!Tr   r  r  r  NTrt  r   z&variables should not be NULL in < 3.12c              3  .   K   | ]}|j         j        V  d S r   )r(  r  r   r,  s     r   r   z:InstructionTranslatorBase.create_resume.<locals>.<genexpr>  s&      <<a!(/<<<<<<r   c              3  >   K   | ]}|                                 V  d S r   )r1  rZ  s     r   r   z:InstructionTranslatorBase.create_resume.<locals>.<genexpr>  s*      ::A!++--::::::r   orig_graphmodulec                     d S r   r   r   r   r   r   z9InstructionTranslatorBase.create_resume.<locals>.<lambda>  s     r   r   resumesr   )7r,  stack_ctx_argsstack_ctx_idxes_origr   ri   r  append_outputr'   r(  r&  r+   r  r  r(   locals_ctx_argsr  r  r  r/   r(  r0   r  r    r  r0  r  locals_null_keysr   r#   keysrW  r  stack_null_idxesr  rI   lookupr  r   r%  r7  r1   get_contextre  weakrefrefr  r"  install_global_unsaferT  FunctionTypera  r  add_resume_functionrX   r  )r   r  rK  rL  rM  r   rO  rP  jr   j_origr  r   resume_nameall_argnamesr-  argnames_nullrN  	stack_lennew_codeorig_graphmodule_maybepackage_namerW  r  s   `                     @@r   r  z'InstructionTranslatorBase.create_resumee  s   T  	"%d&94;T"U"U  A2DJv4FGG  !1!1222$$R(((  $Q,,S11 //11 ,,Q//	
 +>::     /  a2D4H4NOO  !1!1222$$R(((  $Q,,S11 //11 ,,T^d>OPT>U-UVV	
 +>::    K(( 	-%%%%%,K C{/A C CDD  -	9%d&7EEE  ! ! ! ! !-! ! !  L
 !$D$9 : :SSSSSSSSSH!!T!T!T!T\!T!T!TTTM "$$((--++--"$$	     	 	  &((,,T^d>OPS>T-TUU//11 %Q	    &y11&|XGGG !^^
 )tDD	 	 	 	 T.335566H!$"788Mg%%}%%***,T*** 
OOc$*?&@&@@	'.:::#9#@KK$+<<4+;<<<<<::)9:::::$%&&$&''$'((,--!$
 $
*"
!9$+!F!F!J!J"
 "
 " " "-EL[&F FL$X../AB
  
	'K--k8DDDLL K--"8T^[II   'L<#L,,$.4l   	H,---2---$$r   r  list[StackLocalsMetadata]c           
      	   d| _         t          | j        j                  }g }g }g }| }d}|f|| u r|}	n|j        }	|	j        dk    r?|                    |           |                    |           |                    |	           |j        }|dz  }|ft          | j	                  t          |d         j
                  z
  }
|s|
dk    sJ |                    t          |
dz                        t          |
dz             D ]$}|                    t          d                     %|                    t          d                     |                                S |d         | u r4|                    t          d|
                     d}|
|d         _        n|                    t          |
                     t          |
dz
            D ]$}|                    t          d                     %|                    t          dd                     ||d                  j        }||d                  xj        dz  c_        |d                             t'                                 |                    g t)          d          |                    |d                   |                                t/          ||d	                     g }|D ]Z}|                    t3                      |                    |          |                                gt          d                     [|                    t          d          t          dt          |                    g           |                    |           |                    g t          d          t5          j        |          t          d                     g }g }t9          |          D ]a\  }}|                    |||         |||                  |||| u d	          \  }}|                    |           |                    |           b|                     |||           |                    t          d                     |                                S )
aP  
        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   r  r  r  T)r   r2   r"  rP  r  r   r   r$  r   r  re  r&  r+   r}  ra  r(   rm  r  rD  r   r&   r  r  r#   rH  r'   rR  deepcopyrn  r  r  )r   r   r  r   txesidxesresume_instsr+  r  rK  current_num_stackr   stack_insert_idxfilter_instsrM  resume_namesrj  resume_codero  s                      r   r  z/InstructionTranslatorBase.create_call_resume_at(  s
   6 $( t{*++ 13*,6: ~~"$5!^33F###S!!!##K000]F1HC    
OOc%a(9/
 /
 

  	)
 %))))[):Q)>??@@@,q011 @ @  !3I!>!>????/??@@@&&((( 7d?? /BSTTTUUU 5F%a(22
 [):;;<<<,q011 @ @  !3I!>!>????/!DDDEEE8qBL%eAh/99Q>99GLL**+++ 	Q $$U1X.. ''))	
 %%57GNN
	
 
	
 
	
  	 	C"$$((--++-- !^^	    	"9--"<SZZ@@@	
 	
 	
 	&&& 	Q|,, Q	
 	
 	
 .0"4 	- 	-IAv'-';';Q)%(3$( ($K ,,,,,,,  |R@@@
+N;;<<<""$$$r   r  c           	        |                     t          d                     t          t          ||                     D ]\  }\  }}|t	          |          dz
  k    r n|j        r`|                     t                      |                    |          |                                g           |	                    ||           n*|                     |
                    |dd                     |                     t          d                     |                     t          d          t          dt	          |           dz
            g           |                     t          d                     | d	         j        r|                     |                    d	          |                                g           |	                    |d	         | d	                    |                     g t          d                     nN|                     t          d          g|
                    |d	         d          t          d                     |                     t                      t                      |                    d	          |                                gt          d          |                    d	          t          d
                     |                     g t          d          t          dd          t          d          t          dd                     |                     t          dd                     dS )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   r  r  r  ru  r  r  LIST_EXTENDTN)r&  r&   rn  r,  r   r  r'   r  r  make_function_with_closureload_function_namer+   r(   r*   r%   )rM  r  r   rj  r   codes         r   r  z-InstructionTranslatorBase.codegen_call_resume  s   4 	Q((((\<)H)HII 	- 	-OA|dC%%))) 
H  &((,,Q////11   --dD9999  !6!6tUA!F!FGGG[^^,,,,
"9--"<S5F5F5JKKK	
 	
 	
 	Q(((' 	((,,++--   )),r*:L<LMMM!!__    &y11**<+;UCC "!__  ( 	    $$R(('')) Q $$R(( #?33	
 	
 	
  	a"<Q777 Q
 #=a888	
 	
 	
 	0==>>>>>r   c                2   t           j        dk    r0| j        j        }|r"| j        r|j        | j        d         j        urdS t          d | j        D                       o9| j         o1| j        p| j	         o"| j
         o| j         o| j        j        j        d u S )NrF  r  Fc              3  >   K   | ]}|                                 V  d S r   r,  rZ  s     r   r   zIInstructionTranslatorBase.should_compile_partial_graph.<locals>.<genexpr>N  *      ::A::::::r   )rW  r  r  rS  r%  r(  r  r:  r  r   r  r9  r"  current_tracerr$  )r   r   s     r   r  z6InstructionTranslatorBase.should_compile_partial_graphE  s    w&&,:E $(-D<LR<P<W(W(Wu::)9::::: :N": ,MD4M0M: 33	:
 88: *1T9		
r   ziEncountered graph break when attempting to trace STORE_SUBSCR: trying to store subscript, e.g. x[key] = yc                l    |                      d          \  }}}|                    | d||gi            d S )Nru  __setitem__rE  r  )r   r   ru  r9  keys        r   r  z&InstructionTranslatorBase.STORE_SUBSCRX  s;    
 		!S#mc3Z<<<<<r   c                h    |                      d          \  }}|                    | d|gi            d S )Nr   __delitem__r  )r   r   r9  r  s       r   r  z'InstructionTranslatorBase.DELETE_SUBSCR`  s5    99Q<<SmcUB77777r   c                ~    |                      |j                  }|                     t          |                     d S r   )rE  r  rD  r}   r   r   r   s      r   BUILD_TUPLEz%InstructionTranslatorBase.BUILD_TUPLEd  s5    		$+&&		-&&'''''r   c                    |                      |j                  }|                     t          ||                      d S )N)r   )rE  r  rD  r|   r  s      r   BUILD_SLICEz%InstructionTranslatorBase.BUILD_SLICEh  s:    		$+&&		-$///00000r   c                    dS )zCheck 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_nestedz=InstructionTranslatorBase._can_speculate_comprehension_nestedl  s	    
 ur   c                |   t           j        dk    r|j        dk    sdS |                                 sdS t	          d | j        D                       o2| j         o*| j         o"| j         o| j	         o| j
        j        j        du }|r| j        |                                 }|rR| j        dk    rG|                                 }|                    |           r|                     |           dS || _        |                                 }|dk    sJ | j                            |           | xj        dz  c_        dS )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.
        rt  r   Fc              3  >   K   | ]}|                                 V  d S r   r  rZ  s     r   r   zSInstructionTranslatorBase._maybe_setup_comprehension_speculation.<locals>.<genexpr>  r  r   NTr   )rW  r  r  _is_comprehension_startr  r%  r:  r   r  r9  r"  r  r$  r  _comprehension_depthr8  r   !_handle_comprehension_graph_breakr  _find_comprehension_end_for_ip_comprehension_end_for_ipsr	  )r   r   can_speculaterA  
end_for_ips        r   &_maybe_setup_comprehension_speculationz@InstructionTranslatorBase._maybe_setup_comprehension_speculations  s~   
  G++q0@0@5++-- 	5 ::)9::::: :N":--: 33: 88	:
 *1T9 	  	GT[4 DDFFM 	3T6!;;..**K!!$'' 66t<<<t'2D$88::
Q'++J777!!Q&!!ur   c                    |                      |          rd S |                     |j                  }|                     t	          |t                                           d S Nmutation_type)r  rE  r  rD  r{   ra   r  s      r   r  z$InstructionTranslatorBase.BUILD_LIST  s\    66t<< 	F		$+&&		,u4D4F4FGGGHHHHHr   c                    t           j        rt          dddg            |                     |j                  }t          |t                                }|                     |           d S )Nzmissing BUILD_SET handlerr   z:Missing BUILD_SET bytecode handler (for testing purposes).r  r  )r   +inject_BUILD_SET_unimplemented_TESTING_ONLYr:   rE  r  rn   ra   rD  )r   r   r   new_sets       r   	BUILD_SETz#InstructionTranslatorBase.BUILD_SET  sv    = 	3X	    		$+&&e3C3E3EFFF		'r   r  r  c           	     p   |                      |j                  }g }|D ]j}	 |                    |                    |                      ,# t          $ r2 t          dt          |          | dg t          j                   Y gw xY w| 	                     ||t                                           d S )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  )rE  r  rH  r$  NotImplementedErrorr:   r   r   r  rD  ra   )r   r   r  seqsr   seqs         r   BUILD_LIST_UNPACKz+InstructionTranslatorBase.BUILD_LIST_UNPACK  s    yy%% 
	 
	C	S::4@@AAAA&   KHH#& !2 !2 !29-89      			##e+;+=+=>>>?????s   (A9BBc                >    |                      |t                     d S )Nr  )r  r}   r  s     r   BUILD_TUPLE_UNPACKz,InstructionTranslatorBase.BUILD_TUPLE_UNPACK  s!    t77777r   c           	     ,   |                      |          rd S |                     |j        dz            }t          t	          |d d d         |dd d                             }|                     t          |t                                           d S )Nr   r   r  )r  rE  r  r   r,  rD  rm   ra   )r   r   r   ds       r   	BUILD_MAPz#InstructionTranslatorBase.BUILD_MAP  s    66t<< 	F		$+/**U33Q3Zqt!t--..		#A5E5G5GHHHIIIIIr   c                (                          |j                  } fd|D             }i }|D ]3}t          |t                    sJ |                    |j                   4                     t          |t                                           d S )Nc                d    g | ],}t          t                                        |gi           -S r   )rf   r   r   )r   r]  r   s     r   re  z>InstructionTranslatorBase.BUILD_MAP_UNPACK.<locals>.<listcomp>  s5    SSS&&44TA3CCSSSr   r  )rE  r  rS  rm   updater   rD  ra   )r   r   r   r  r]  s   `    r   BUILD_MAP_UNPACKz*InstructionTranslatorBase.BUILD_MAP_UNPACK  s    		$+&&SSSSUSSS!# 	# 	#Aa!233333MM!'""""		.00  	
 	
 	
 	
 	
r   c           
        |                                  }|                     |j                  }t          |t                    sJ |                                sJ |                    |           }t          |          t          |          k    sJ |                     t          t          t          ||                    t                                           d S r  )r  rE  r  rS  r}   r  r$  r   rD  rm   r   r,  ra   )r   r   rd  r  s       r   BUILD_CONST_KEY_MAPz-InstructionTranslatorBase.BUILD_CONST_KEY_MAP  s    xxzz4;''$.....&&(((((--d334yyCKK''''		Sv&&''.00  	
 	
 	
 	
 	
r   c                   |                      d          \  }}|j        dk    sJ |j        J | j        |j                                                  }t          |t                    sJ |                    | d||fi            d S )Nr   r   r  )rE  r  rN  r  r  rS  rm   r  )r   r   r   r   r9  s        r   MAP_ADDz!InstructionTranslatorBase.MAP_ADD  s    yy||1{Qx###j$(#++--#011111maVR88888r   c                   |                                  }|j        dk    sJ |j        J | j        |j                  }t	          |t
                    sJ |                                sJ |                    | d|gi            d S )Nr   r	  r  r  rN  r  rS  rn   
is_mutabler  r   r   r   r9  s       r   SET_ADDz!InstructionTranslatorBase.SET_ADD  s    HHJJ{Qx###j$(##{+++++~~eaS"-----r   c                   |                                  }|j        dk    sJ |j        J | j        |j                  }t	          |t
                    sJ |                                sJ |                    | d|gi            d S Nr   r  r  r  s       r   
SET_UPDATEz$InstructionTranslatorBase.SET_UPDATE  s    HHJJ{Qx###j$(##{+++++~~hR00000r   c                p   |                                  }|j        dk    sJ |j        J | j        |j                                                  }t          |t                    sJ |                                sJ | j        j	        
                    |           |j                            |           d S r   )r  r  rN  r  r  rS  r{   r  r"  rN  mutationr   r   r  s       r   r  z%InstructionTranslatorBase.LIST_APPEND  s    HHJJ{Qx###j$(#++--#|,,,,,~~ ))#...	r   c                f   |j         }t          j        dk     r|                                 }|                                 }t          j        dk    r6t	          |j        d          sJ t          j        |j        j                  }d }d }d }d }t          j        dk     rf|d|dz  r|                                 }|dz  r|                                 }|dz  r|                                 }|dz  r|                                 }| 	                    t          ||| j        ||||                     d S )	NrF  co_qualnamer  r     r  r   r   )rN  rW  r  r  r/  r  rh   r  r  rD  rr   ra  )	r   r   flagsfn_namer  defaultsclosurer   
kwdefaultss	            r   MAKE_FUNCTIONz'InstructionTranslatorBase.MAKE_FUNCTION  sA   g%%hhjjGxxzzw&& 4:}55555&-DJ4JKKKG
g%% 4< )"hhjjG4< -"&((**K4< ,!%J4< *#xxzzH		& 
	
 
	
 
	
 
	
 
	
r   c           	     L                                      }|                                r*|                     t          |j                            }nt          |t                    rg|j                                        rNt          |j        	                                |j
                   fdt          |j                  D             }nZ|                               r|                               }n/t          dt          |          | dg t          j                   t#          |          |j        k    r:t          dd|j         dt#          |           | d	g t          j                   t'          |          D ]}                     |           d S )
N)rz  c                <    g | ]}t          |                   S r   )re   )r   rj  proxyr   s     r   re  z=InstructionTranslatorBase.UNPACK_SEQUENCE.<locals>.<listcomp>9  s'    MMMQ=uQx00MMMr   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  rS  r   r9  r  as_proxyr   r#  r$  r:   r   r   r  r   r  r   rD  )r   r   r  ru  rj  r  s   `    @r   r  z)InstructionTranslatorBase.UNPACK_SEQUENCE2  s   hhjj==?? 	))$eDK6H6H)IICC_-- 	#'2C2C2E2E 	CG,,..99EMMMMM%:L:LMMMCC..t44 		//55CCEC" ( ( (5)45    s88t{""SMDKMM3s88MM" ? ? ?5)45    # 	 	AIIaLLLL	 	r   c                   d|j         cxk    rdk    sn J |j         dz  }|j         dz	  }|                                 }|                    |           rt          |                    |                     }t          |          ||z   k    sJ |d |         }||t          |          |z
           }|t          |          |z
  d          }t          |          D ]}	|                     |	           |                     t          |                     t          |          D ]}	|                     |	           d S t          dt          |          | dg t          j                   d S )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  r#  r   r$  r   r   rD  r}   r:   r   r   r  )
r   r   prefixsuffixr  r9  vals_prefix	vals_listvals_suffixitems
             r   	UNPACK_EXz#InstructionTranslatorBase.UNPACK_EXR  s   DK))))6))))))t#!hhjj,,T22 	55d;;<<Dt99////ww-KVc$ii&&889Is4yy61334K --    		$IImI../// --    		$    ?C"___5)45	     r   z-Encountered intentional debugging graph breakc                @    | j         rt          ddddg           d S d S )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_functionz6InstructionTranslatorBase.graph_break_on_leaf_functionj  sP     $ 		=6 ^     		 		r   c                J    |j         dk    r|                     |           d S d S )NGRAPH_BREAK_IF_LEAF)r  r  r  s     r   r  zInstructionTranslatorBase.NOPy  s2    ;///--d33333 0/r   c                .    |                                   d S r   rA  r  s     r   r  z!InstructionTranslatorBase.POP_TOP~      




r   c                    |                                  }|                                  }|                     |           |                     |           d S r   r  rD  r   r   ar,  s       r   ROT_TWOz!InstructionTranslatorBase.ROT_TWO  s>    HHJJHHJJ		!		!r   c                    |                                  }|                                  }|                                  }|                     |           |                     |           |                     |           d S r   r  )r   r   r  r,  cs        r   	ROT_THREEz#InstructionTranslatorBase.ROT_THREE  sZ    HHJJHHJJHHJJ		!		!		!r   c                N   |                                  }|                                  }|                                  }|                                  }|                     |           |                     |           |                     |           |                     |           d S r   r  )r   r   r  r,  r  r  s         r   ROT_FOURz"InstructionTranslatorBase.ROT_FOUR  sv    HHJJHHJJHHJJHHJJ		!		!		!		!r   c                    |                                  }|                     |           |                     |           d S r   r  )r   r   r  s      r   r  z!InstructionTranslatorBase.DUP_TOP  s1    HHJJ		!		!r   c                    |                                  }|                                  }|                     |           |                     |           |                     |           |                     |           d S r   r  r  s       r   DUP_TOP_TWOz%InstructionTranslatorBase.DUP_TOP_TWO  s\    HHJJHHJJ		!		!		!		!r   r  flagc                &   |dk    r*t          t                                        | |gi           S |dk    r*t          t                                        | |gi           S |dk    r*t          t                                        | |gi           S |S )Nr   r   ru  )rf   r   r   r  ascii)r   r  r  s      r   _convert_valuez(InstructionTranslatorBase._convert_value  s    199"3''55dUGRHHHQYY"4((66teWbIIIQYY"5))77ugrJJJr   fmt_specr  c                   |                                  }t          |t                    r@ddlm}m}  |j         |||          |j                  }|                     |           d S | 	                    ||dz            }t          j        d|                                z   dz             }|                     t          t          j                  ||gi            d S )Nr   )LazySymNodeFormatStringrw   r  ru  z{:})r  rS  r   torch._dynamo.variables.lazyr  rw   r  r  rD  r  rh   r  r   rf   r   format)r   r  r  r  r  rw   fmt_vars          r   _format_valuez'InstructionTranslatorBase._format_value  s    

e_-- 
	       
 /'.''x88  E IIeF##E54<88")$1L1L1N1N*NQT*TUU?3:66%8H"MMMMMr   c                    |j         }|J |dz  dk    r|                                 }nt          j        d          }|                     ||          S )Nr  r   )rN  r  rh   r  r  )r   r   r  r  s       r   FORMAT_VALUEz&InstructionTranslatorBase.FORMAT_VALUE  sY       DLT!!xxzzHH'.r22H!!(E222r   c           
        g }g }i }|j         J |                     |j                   D ]M}|                                r+|                    d           |                    |           Bt	          |t
          j                  r|                    |j                   |                    |j	                   t          |                                          t          |j                                                  z  r-t          dd| d| d|j         dg t          j                   |                    |j                   !t          dt#          |          d	g t          j                   O|                     t
          j                            d
                    |          ||                     d S )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   )rN  rE  r  r   rS  r   StringFormatVariableformat_stringrH  sym_argsr  rd  
sym_kwargsr:   r   r  r  r   rD  r  r   )r   r   format_string_partsr   r  parts         r   BUILD_STRINGz&InstructionTranslatorBase.BUILD_STRING  s   )+&(-/x###IIdh'' 	 	D&&(( #**4000D!!!!D)"@AA #**4+=>>>DM***v{{}}%%DO,@,@,B,B(C(CC ! ; !D8K  !D  !DW]  !D  !Drv  sB  !D  !D$W= 1 <=	    do....5II n9-89	     			*11+,,dF 	
 	
 	
 	
 	
r   c                    |j         dk    s|j         dk    sJ |j         dk    rd}nd}t          d|          }|                     |           d S )Nr   r   iszis notr  rK  )r  r(   r  )r   r   
new_argvalnew_insts       r   IS_OPzInstructionTranslatorBase.IS_OP  sd    {a4;!#3#3#33;!JJ!J%l:FFF!!!!!r   c           	     :   |j         dk    s|j         dk    sJ |                     d          \  }}|j         }	 |                     |                    | d|gi                      n# t          j        t          f$ r}t          |t                    r|j        r |	                                 |                     | 
                    t          j        | t                    ||gi                      Y d }~nd }~ww xY w|dk    r|                     |           d S d S )Nr   r   r   __contains__)r  rE  rD  r  r   ObservedTypeErrorr;   rS  r=  r;  r  rb   rg  rB   	UNARY_NOT)r   r   leftrightrc  rB  s         r   CONTAINS_OPz%InstructionTranslatorBase.CONTAINS_OP  sS   {a4;!#3#3#33iille[	IIe''ntfbIIJJJJ ! 
 	 	 	 $,, )? &&(((II00#)$0IJJ5M        	( 77NN4      7s   ,A& &C;<A5C66C;c                   |                                  }|j        dk    sJ |j        J | j        |j                  }t	          |t
                    sJ |                                sJ |                    | d|gi            d S )Nr   rH  )r  r  rN  r  rS  r{   r  r  r  s       r   r  z%InstructionTranslatorBase.LIST_EXTEND  s    HHJJ{Qx###j$(##|,,,,,~~hR00000r   c                    |                      t          t                                        | |                                 gi                      d S r   )rD  rf   r0  r   r  r  s     r   LIST_TO_TUPLEz'InstructionTranslatorBase.LIST_TO_TUPLE  s>    		/%((66tdhhjj\2NNOOOOOr   c                   | j         d         }|                     |          sJ |j        t          u rt	          j        t                                        | t          d          gi           }|	                    | t          d          |           |	                    | t          d          |           || j         d<   d S d S )Nr  zgenerator raised StopIterationr  r  )
r  r  r  r  r   rf   r+  r   rh   r  )r   r   ru  new_vals       r   STOPITERATION_ERRORz-InstructionTranslatorBase.STOPITERATION_ERROR   s     jn))#.....<=((/==KK!"BCCD G
   '7'F'FLLL  '7'D'DcJJJ$DJrNNN )(r   c                0   |                                  }|j        dk    sJ |j        J | j        |j                                                  }t          |t                    sJ |                                sJ |                    | d|gi            d S r  )	r  r  rN  r  r  rS  rm   r  r  r  s       r   
DICT_MERGEz$InstructionTranslatorBase.DICT_MERGE2  s    HHJJ{Qx###j$(#++--#011111~~hR00000r   c                .    |                                   d S r   rA  r  s     r   	GEN_STARTz#InstructionTranslatorBase.GEN_START=  r  r   c                .   | j         d         }|                                rH|                     t          j        t          |                                                               d S |                     |                    | dg i                      d S )Nr  r  )r  r  rD  rh   r  r   r  r  r  s      r   GET_LENz!InstructionTranslatorBase.GET_LEN@  s    jn!!## 	@II&-c#2H2H2J2J.K.KLLMMMMMIIcoodIr2>>?????r   c                    | j         d         }|                     |                     t          j        | t
                    |gi                      dS )zr
        If STACK[-1] is an instance of collections.abc.Mapping, push True.
        Otherwise, push False
        r  N)r  rD  r  rb   rg  rC   r  s      r   MATCH_MAPPINGz'InstructionTranslatorBase.MATCH_MAPPINGG  sZ    
 jn		,,%dO<< 	
 	
 	
 	
 	
r   c                    | j         d         }|                     |                     t          j        | t
                    |gi                      d S Nr  )r  rD  r  rb   rg  rF   r  s      r   MATCH_SEQUENCEz(InstructionTranslatorBase.MATCH_SEQUENCEU  sY    jn		,,%d,?@@ 	
 	
 	
 	
 	
r   c           	        |                      d          \  }}}t          j        |j                  }|                     |                     t          j        | t                    ||||gi                      t          j
        dk     rJ| j        d         }|                     t          j        t          |t                                          d S d S )Nru  rF  r  )rE  rh   r  rN  rD  r  rb   rg  rD   rW  r  r  r]   )r   r   subjectr  namesrN  r  s          r   MATCH_CLASSz%InstructionTranslatorBase.MATCH_CLASS_  s    "iille%dh//		,,%d,<==#sE* 	
 	
 	
 g%%*R.CII&-&>N2O2O.OPPQQQQQ &%r   c                   | j         d         }| j         d         }t          |t                    sJ |                     |                     t          j        | t                    ||gi                      t          j	        dk     rJ| j         d         }|                     t          j        t          |t                                          d S d S )Nr  r  rF  )r  rS  r}   rD  r  rb   rg  rE   rW  r  rh   r  r]   )r   r   rd  r9  r  s        r   
MATCH_KEYSz$InstructionTranslatorBase.MATCH_KEYSo  s    z"~jn$.....		,,%dO<<sDk2 	
 	
 	
 g%%*R.CII&-&>N2O2O.OPPQQQQQ &%r   c                V    |                      |                     d                     d S )Nr  rD  r  r  s     r   LOAD_ASSERTION_ERRORz.InstructionTranslatorBase.LOAD_ASSERTION_ERROR  s)    		$//0@AABBBBBr   c                V    |                      |                     d                     d S )N__build_class__r)  r  s     r   LOAD_BUILD_CLASSz*InstructionTranslatorBase.LOAD_BUILD_CLASS  s)    		$//0ABBCCCCCr   z`Encountered graph break when attempting to trace BINARY_SUBSCR: a binary subscript, e.g. x[attr]c                j    |j         dk    r|                     |           d| _        d S | j        rJ d S )Nr   F)rN  append_prefix_instr  r  s     r   RESUMEz InstructionTranslatorBase.RESUME  sD    8q==##D)))&+D###......r   c                J    |j         J t          |j                  | |          S r   )rN  _binary_op_lookupr  s     r   	BINARY_OPz#InstructionTranslatorBase.BINARY_OP  s'    8'''$TX.tT:::r   c                    d S r   r   r  s     r   rI  z!InstructionTranslatorBase.PRECALL      r   c                    | j         d         |j                 }t          |t                    sJ |D ]}t          |t                    sJ | j        J t          j        |          | _        d S )N	co_constsr  )r  rN  rS  r0  r   rQ  rh   r  )r   r   rQ  r   s       r   rJ  z"InstructionTranslatorBase.KW_NAMES  s{    $[1$(;(E***** 	) 	)DdC((((((}$$$(/h???r   c                H    |                      t                                 d S r   )rD  r   r  s     r   rq  z#InstructionTranslatorBase.PUSH_NULL  s    		,..!!!!!r   call_kwc                   |rft           j        dk    sJ |                                 }t          |t                    r|                                sJ |                                }n| j        r| j        j        nd}|j	        J | 
                    |j	        dz             }t           j        dk    r/|d         }t          |d         t                    rg n|d         g}n7t          |d         t                    r|d         }g }n|d         }|d         g}|rs||dt          |                    z   }|t          |           d          }t          t          ||                    }t          |          t          |          k    sJ n||dd          z   }i }	 |                     |||           d | _        d S # d | _        w xY w)Nr  r   r   r   r   )rW  r  r  rS  r}   r  r  rQ  r  rN  rE  r   r   r   r,  r   )	r   r   r9  rQ  contentsr>  r   r.  r  s	            r   _callzInstructionTranslatorBase._call  s     	D#w....xxzzHh66X8;V;V;X;XXXX2244HH.2mCt}**Hx###99TX\**w&&!B#HQK>>Q22Xa[MDD(1+|44 %a[a[ } 	(1H~#566D"CMM>#3#34K#h4455Fv;;#h--/////(122,&DF	! r4000 DMMMDDM    s   F? ?	GzTEncountered graph break when attempting to trace CALL: a function call, e.g. f(x, y)c                0    |                      |           d S r   r<  r  s     r   rH  zInstructionTranslatorBase.CALL  s    
 	

4r   c                d    |j         J |                     | j        |j                              d S r   )rN  rD  r  r  s     r   COPYzInstructionTranslatorBase.COPY  s3    x###		$*dhY'(((((r   c                    |j         J | j        |j                   | j        d         c| j        d<   | j        |j          <   d S r   )rN  r  r  s     r   SWAPzInstructionTranslatorBase.SWAP  sE    x###04
DH90EtzRT~-
2
DH9---r   c                    d S r   r   r  s     r   CACHEzInstructionTranslatorBase.CACHE  r5  r   c                0    |                      |           d S r   r  r  s     r   BEFORE_WITHz%InstructionTranslatorBase.BEFORE_WITH  r  r   r  >Union[ContextWrappingVariable, GenericContextWrappingVariable]c           	        t          |t                    r.|                                s| j                            |           t
          j        dk    rO|j        r(| j        r|j        j	        | j        d         j	        urd }n'| j
        j        J | j
        j        j	        }n|j	        }|rt          | t                    st          j        r=| j                            t          ||t          | j                  |                     n;| j                            t          ||t          | j                                       |                    |           S )NrF  r  )rS  rj   supports_graph_breaksr9  r   rW  r  rS  r%  r(  r  rB  r   r  r'  r   r  enter)r   r  r   r(  s       r   	enter_ctxz#InstructionTranslatorBase.enter_ctx  sV    s:;;	=--//	= 077<<<w&&
 ! D$D%,D4DR4H4OOO,:FFF.<C[F 	X$ 566 X&:T X ''#D&#dj//3GG     ''fc$*oo(V(VWWWyyr   c                b    t          dd|  d|                                  dg d           d S )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:   r  )r  s    r   unsupported_ctx_graph_breakz5InstructionTranslatorBase.unsupported_ctx_graph_break:  sZ    1MMMj@T@T@V@Vjjj  		
 	
 	
 	
 	
 	
r   c                n   |                                  }t          |t          t          f          s|                     |           t          |t          t          f          sJ |                     t          ||j                             |                     |                     ||                     d S r   )	r  rS  ri   rj   rM  rD  rl   r(  rK  )r   r   r  s      r   r  z.InstructionTranslatorBase.setup_or_before_withK  s    hhjj)+IJ
 
 	2 ,,S111 )+IJ
 
 	
 	
 
 			*3<<===		$..d++,,,,,r   c                L    | j         sJ | j                            |           d S r   )r  r  r   r  s     r   r/  z,InstructionTranslatorBase.append_prefix_instZ  s.    &&&&  &&&&&r   c                   t           j        dk    r[| j        sTt          | j        |j                 t                    sJ | j        j        	                                | j        |j        <   d S | 
                    |           d S r  )rW  r  r  rS  r  r  r   r"  rN  track_cell_newr/  r  s     r   	MAKE_CELLz#InstructionTranslatorBase.MAKE_CELL^  s    w&&t/F& d24;?NNNNN(7799  --- ##D)))))r   c                0    |                      |           d S r   r/  r  s     r   COPY_FREE_VARSz(InstructionTranslatorBase.COPY_FREE_VARSi      %%%%%r   c                0    |                      |           d S r   rT  r  s     r   RETURN_GENERATORz*InstructionTranslatorBase.RETURN_GENERATORl  rV  r   c                "   t           j        dk    r|                                  n|                     d           t           j        dk    rB| j        |         }|| j        v r.| j                            |           | xj        dz  c_        d S d S d S )Nr  r   rt  r   )rW  r  r  rE  r  r  discardr  )r   r   
current_ips      r   r  z!InstructionTranslatorBase.END_FORs  s    w&&HHJJJJIIaLLL w&&d+JT<<</77
CCC))Q.))))	 '&<<r   c                    t          | j                            |j        d           t                    r,t          d|j        d|j         g t          j                   |                     |           d S )Nz)LOAD_FAST_CHECK on uninitialized variablez/Attempted to load uninitialized local variable r  )	r]   r  re  r  r   r:   r   r  rL  r  s     r   LOAD_FAST_CHECKz)InstructionTranslatorBase.LOAD_FAST_CHECK  s{    $&**4;==|LL 	C[dk[[5)45	    	tr   c                    |j         | j        vr"|                     t                                 n|                     |           t                      | j        |j         <   d S r   )r  r  rD  r   rL  r  s     r   r  z-InstructionTranslatorBase.LOAD_FAST_AND_CLEAR  sV    ;d222IIlnn%%%%NN4   ,8NNT[)))r   c                    |                      t          j        |d                     |j        J |j        dz  r|                     |           d S |                     |j                   d S )Nr   rK  r   )r!  r   rJ  rN  r2  r  r  r  s     r   LOAD_SUPER_ATTRz)InstructionTranslatorBase.LOAD_SUPER_ATTR  sv    ;.tA>>>???x###8a< 	)T"""""OODK(((((r   c                   |j         dk    r|                     |           d S |j         dk    r|                     |           d S |j         dk    rI|                     t	          |                                                     |                                d S t          dd|j          d|j          dg t          j	                   d S )	Nru  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_POSITIVErD  r}   r  r$  r:   r   r_  r  s     r   CALL_INTRINSIC_1z*InstructionTranslatorBase.CALL_INTRINSIC_1  s    ;!$$T*****[A%%%%%[AIImDHHJJ$H$H$N$NOOPPPPP:BT[BBe4;eee6)56	     r   c                    |                                  }|                                   |                     |           d S r   r  r  s      r   END_SENDz"InstructionTranslatorBase.END_SEND  s/    hhjj


		#r   zpEncountered graph break when attempting to trace CALL_KW: a function call with keyword arguments, e.g. f(x=True)c                4    |                      |d           d S )NT)r9  r>  r  s     r   CALL_KWz!InstructionTranslatorBase.CALL_KW  s      	

4
&&&&&r   c                &    | j         j        dv sJ d S )N)POP_JUMP_IF_TRUEPOP_JUMP_IF_FALSEr  )r  r   r  s     r   r  z!InstructionTranslatorBase.TO_BOOL  s0     $+ 0
 
 
 
 
 
 
r   c                   |j         }|J |                                 }t          |t                    sJ |                                 }|dz  rDt          j        dk    sJ |                    | t          j        d          gi           }||_	        n|dz  r||_
        n|dz  rrt          |t                    sJ |j        }t          t          t          |d d d         |dd d         d                    t!                      	          }||_	        n|dz  r||_        n|dz  r||_        |                     |           d S )
N   r  r   r  r  r   T)strictr  )rN  r  rS  rr   rW  r  r   rh   r  r   r  r}   r   rm   r   r,  ra   r  r  rD  )r   r   r  r>  r=  r   anns          r   SET_FUNCTION_ATTRIBUTEz0InstructionTranslatorBase.SET_FUNCTION_ATTRIBUTE  sh      XXZZ"899999xxzz4< 	#w.... %%d-=-DQ-G-G,H"MMD!BNNT\ 	BJJT\ 	dM22222 JE#SsssU14a4[>>>??.00  C !BNNT\ 	 BMMT\ 	BK		"r   c                    |                      |                     |                                 |j                             d S r   )rD  r  r  r  r  s     r   CONVERT_VALUEz'InstructionTranslatorBase.CONVERT_VALUE  s4    		$%%dhhjj$+>>?????r   c                V    |                      t          j        d          d           d S )Nr   r   )r  rh   r  r  s     r   FORMAT_SIMPLEz'InstructionTranslatorBase.FORMAT_SIMPLE  s*    +2266:::::r   c                V    |                      |                                 d           d S r   )r  r  r  s     r   FORMAT_WITH_SPECz*InstructionTranslatorBase.FORMAT_WITH_SPEC  s&    488::q)))))r   )	__enter____exit__
__aenter__	__aexit__c                   t          |j        t                    s
J d            | j        |j                 }|dv r|                                 }t          |t
          t          f          s|                     |           t          |t
          t          f          sJ |dk    r9|                     t          |                     | 
                    |           d S |                     t          |d                      | 
                    |           d S |                     |           |                                 }|                     |           | 
                    |           d S )Nz*expected LOAD_SPECIAL arg to be set to int)rw  rx  rw  )rS  rN  r   _load_special_namesr  ri   rj   rM  rD  rk   rq  rl   r  )r   r   r=  r  r9  s        r   LOAD_SPECIALz&InstructionTranslatorBase.LOAD_SPECIAL  sh   $(C((VV*VVV('1,,,((**C-/MN  6 00555 -/MN     {""		3C88999t$$$$$ 		23==>>>t$$$$$ OOD!!!((**CIIcNNNNN4     r   c                ^    |                      t          j        |j                             d S r   )rD  rh   r  r  r  s     r   LOAD_SMALL_INTz(InstructionTranslatorBase.LOAD_SMALL_INT  s(    		")$+6677777r   )r  r  r0  r  anyc                    t          |j        t                    s
J d            |                     |                     | j        |j                                      d S )Nz2expected LOAD_COMMON_CONSTANT arg to be set to int)rS  rN  r   rD  r  _common_constantsr  s     r   LOAD_COMMON_CONSTANTz.InstructionTranslatorBase.LOAD_COMMON_CONSTANT)  s]    $(C(( 	
 	
@	
 	
( 			$//0Ftx0PQQRRRRRr   c                T    | j                                         dk    r
d | _        dS dS )Nr   c                     dS NTr   r   r   r   r   z>InstructionTranslatorBase.is_non_empty_graph.<locals>.<lambda>2  s    d r   TF)r"  count_callsr  r   s    r   r  z,InstructionTranslatorBase.is_non_empty_graph/  s/    ;""$$q((&2lD#4ur   additional_stack_framesOptional[list[Any]]c           
         |g }d                     t          j        |                                 gt	          t          |                    z                       S )Nr   )r   	tracebackformat_listr  r   r   )r   r  s     r   format_frame_summaryz.InstructionTranslatorBase.format_frame_summary6  s^     #*&(#ww!##%%&h7N.O.O)P)PP 
 
 	
r   traceback.FrameSummaryc           	         t          j        t          | j        dd          | j        t          | j        dd          d          S )Nr  	<unknown>r  F)lookup_line)r  FrameSummaryr  r  r   r   s    r   r  z'InstructionTranslatorBase.frame_summaryA  sF    %DK<<KDKK88	
 
 
 	
r   c                    t          | j        dd          }t          j        d          }|                    |          d uS )Nr  r  z.*torch/nn/modules.*)r  r  recompilematch)r   r   nn_modules_patterns      r   is_co_filename_from_nn_modulesz8InstructionTranslatorBase.is_co_filename_from_nn_modulesI  s?    4;{CCZ(?@@!''11==r   r  c                    | j                             |t          j        |                    }t	          t          |                              t          j                             |S r   )	r"  install_global_by_idrh  ri  r>   rP   r  r=   WEAKREF_ALIVE)r   r  r  global_names       r   store_global_weakref_by_idz4InstructionTranslatorBase.store_global_weakref_by_idN  sY    k66vw{5?Q?QRR,,778RSS	
 	
 	
 r   Optional[FakeTensorMode]c                $    | j         j        j        S r   )r"  tracing_context	fake_moder   s    r   r  z#InstructionTranslatorBase.fake_modeU  s    {*44r   check_fn!Callable[[VariableTracker], bool]c              #  V   K   | j         }|| _         	 dV  || _         dS # || _         w xY w)zx
        Strict mode is enabled on a per-VariableTracker level depending on the return value of check_fn(node).
        N)r  )r   r  priors      r   strict_translation_modez1InstructionTranslatorBase.strict_translation_modeY  sH       % (	*EEE$)D!!!ED!))))s    	(r   c                    | j         J | j         dk    sJ | j                            | j        j        | j        | j         dz
  | j        | j         dz
                     S r  )r   r  r   r  r  r   r  r   s    r   r8  z#InstructionTranslatorBase.speculateg  sk    '333'!++++#((K#K$q(d6:;	
 
 	
r   c                    t           j        dk    sJ | j        J | j        dz
  }t                      }d | j        |t          |          z
  |         D             }||k    S )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.
        rt  Nr   c                    g | ]	}|j         
S r   rc  rd  s     r   re  zEInstructionTranslatorBase._is_comprehension_start.<locals>.<listcomp>}  s    TTT$$+TTTr   )rW  r  r   r  r  r   )r   r  patternr  s       r   r  z1InstructionTranslatorBase._is_comprehension_startq  sv     7****'333%)466TT$*;BW<MPR<R*STTT  r   c                   t           j        dk    sJ | j        J d}t          | j        t	          | j                            D ]:}| j        |         }|j        dk    r|dz  } |j        dk    r|dz  }|dk    r|c S ;dS )zPFind the instruction pointer of the outermost END_FOR for current comprehension.rt  Nr   r  r   r  r  )rW  r  r   r}  r   r  r   )r   nesting_depth	search_ipr   s       r   r  z8InstructionTranslatorBase._find_comprehension_end_for_ip  s    7****'333t7T=N9O9OPP 	% 	%I$Y/D{j(("	))" A%%$$$$rr   r  c                    t           j        dk    sJ  j        J t                       j        dz
  }g }g }g }t	                      }|dz
  }|dk    rO j        |         }|j        dk    r!|                    d|j                   |dz  }n|j        dv r|dz  }nn|dk    O|	                    |            
                                }|dk    rt          dd	d
g            t           fdt          ||          D                       }	t          |	dz   |          D ]}
 j        |
         }|j        dk    rh|j        dk    r]|
dz   |k     rT j        |
dz            }|j        dk    r9|j        }||vr.||vr*|                    |           |                    |           |j        dk    r|                    |j                   |j                            d          rKt%          |j        t&                    r|j        n|j        f}|D ]}||vr||vr|                    |            g |dz   }|t)           j                  k     rn j        |         j        dk    rX                     j        |         j                   |dz  }|t)           j                  k     r j        |         j        dk    X|}|t)           j                  k     rI j        |         j        dk    r3|dz  }|t)           j                  k     r j        |         j        dk    3|t)           j                  k     r j        |         j        ndd"fd}d} |d          r j        |         j        }d}n` |d          rd}d}d         d         r|dz   n|}n; |d          sd         d         k    rd}d}nt          dd d d g            t+          ||||||!          S )#zDAnalyze comprehension bytecode to determine result handling pattern.rt  Nr   r   r  )rB  r  r  z)Comprehension analysis failed: No END_FORr   z=Could not find END_FOR instruction in comprehension bytecode.r  c              3  H   K   | ]}j         |         j        d k    |V  dS )r  N)r  r   )r   rj  r   s     r   r   zCInstructionTranslatorBase._analyze_comprehension.<locals>.<genexpr>  sE       
 
 #*j88 8888
 
r   r@  r  rL  r   r   r   r   c                V    |          }|d         k    o|d         k    p|d          S )Nr  r  r   )r   patpatternsr  r  s     r   matcheszAInstructionTranslatorBase._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   )rW  r  r   r  r  r  r   insertr  r  r  r:   r   r}  rN  r   r	  ri  rS  r0  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_ipr  r  r  r  r  r  s   `                  @@@r   _analyze_comprehensionz0InstructionTranslatorBase._analyze_comprehension  s   7****'333577+a/#%!##%#&55  !|a$\2D{333$$Q444! 444! a 	m,,,88::
C[	     
 
 
 
8Z00
 
 
 
 
 [1_j99 	7 	7G$W-D {f$$Q7Q;;S;S -gk:	#|33(/H}449T9T#**8444&**8444 {l**""4;//// ''44 7#-dk5#A#AUDKK~  !* 7 7H~55(-:W:W%,,X666 $&q.c$+,,,,!'*1\AA  !27!;!BCCCqLG	 c$+,,,,!'*1\AA
   c$+,,,,!'*1\AAqLG c$+,,,,!'*1\AA T.//// g&-- 		 	 	 	 	 	 	 	 %)
78 	*=9@J#OOW[!! 	J#O%-k%:?%KXgkkQXGGGJ	 4_ EEEJ"OOCWWWWWV	    %!+'#'
 
 
 	
r   c                    t           j        dk    sJ                                  } j        j                            t                    r,|j        r%t          dt          |j                  dg             j
        J  j
        dz
  }dt          |j                  z   t          d                                 g          }t                              d            j                             |	          } fd
t'                    D             }                                |d         }t+           j        j                  }t/          d |D                       }	t           j                  t          |j                  z
  }
|                    g t7          |
z   dz             |                    d          |                                           t=          t'                              D ]y}|                    t?          d                     ||         r(|                    |                                            T|                    tC          dd          g           z|                    tC          d          g            "                    ||||	|          \  }}|                    g t7          |
dz             |                    d          |                                tC          dd          t7          |
dz             |                    d          |                                tC          dd                      #                    |g|g|           |	dk    r|
dz   dz   }|                    g t7          |          |                    d          |                                tI                      |                    |	           |                    d          tC          dd          tC          d          tC          d                     |j%        |j&        r|j&        gng z   }i }|D ]N}tO                       j(        |<   ||j)        v r|j)        |         ||<   2t          |j)                  |j)        |<   O|
dz   }|j%        ry|                    g t7          |          |                    d          |                                           tU          |j%                  D ]\  }}|                    g t7          d          |                    |dz             |                                           ||v rO|                    g t7          d          |                    ||                   tC          d                     |                    tC          dd          g           |                    tC          d          |                    d          |                                g           |j+        r# ,                    tO                                 n|j&        r|                    g t7          |          |                    d          |                                           |j&        |v rC|                    |                    ||j&                           tC          d          g           nh|                    g t?          d          tC          dd          tC          d                     n#|                    tC          d          g            j        -                    |.                                            j/        |j0                 } j        -                     1                    ||                     d _
        dS )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.
        rt  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  c                    g | ]:}t          j        t          j                  z
  |z            t                    ;S r   )rS  r  r   r   )r   rj  r   r  s     r   re  zOInstructionTranslatorBase._handle_comprehension_graph_break.<locals>.<listcomp>:  sL      
  
  
 tz#dj//J">"BC\RR 
  
  
r   r   c              3     K   | ]}|d V  	dS )r   Nr   )r   ms     r   r   zNInstructionTranslatorBase._handle_comprehension_graph_break.<locals>.<genexpr>G  s'      EE!1EAEEEEEEr   r   r  r  r  r  r  r  r  )2rW  r  r  r  r  ri  rL   r  r:   r   r   r   r  r?   r  r  r  r"  r  r}  rE  r2   rP  r  r  re  r&  r&   r  r  r   r+   pop_nullr(   _build_comprehension_fnr  r'   r  r  r   r  r  rn  r  rD  r  rm  r  r  r  )r   r   analysisr  r   r  stack_pops_null_maskrL  r   nonnull_countlive_stack_depthrj  rs  r  frame_values_posvars_to_passexisting_varsr  fv_depthrm  
walrus_varrK  r  s   `                     @r   r  z;InstructionTranslatorBase._handle_comprehension_graph_break  s	    7****..00 ;))*GHH 		% b 677!8     '333+a/X3444
#$?$BTBTBVBVAWXX		3444 %)K$@$@! %A %
 %
! 
  
  
  
  
:&& 
  
  

 			*(+t{*++ EE';EEEEE tz??S1F-G-GG 	-
:Q>?? $$Q'' ''))		
 	
 	
 %
++,, 	M 	MA[^^,,,#A& M  ////  "4]"J"J"J!KLLLL
,Y778999
 !88 
 
' 		-122	$$Q''	 ''))	 #<Q777		
 -122	 $$Q''	 ''))	 #<Q777		
 	
 	
  	  (gY;;;
 1/!3a7 !122((++ ++--
 #$$ ((-88 ((.. '}!<<< '77 'y11  &  +%-%8@X !!b
 )+$ 	E 	EH-<->->D *4,,,*.*;H*Eh''.1$2C.D.D!(++#a'  &	 **((++ ++--   "+8+?!@!@ Q Q:  $Q,,QU33 //11   ..$$(^^00z1JKK /~>>    $$&8A&N&N&N%OPPPP&y11((++++--	   # 	>IIo''((((  	> **((++ ++--   "m33  ,,]8;N-OPP*>::      $Q*=a@@@ +955    0;;<=== 	++B,?,?,A,ABBB '8++&&{4MNN	
 	
 	
 $(   r   r  r  r  r  
list[bool]r  c                ^    ddl m} ddlm} ddlmm t           fd|j        D                       }	ddgt          |	          z   d t                    D             z   t          t          t           j        j        pg           t           j        j        pg           z                        j         j        n j        j        t#          d
 j        j         d           j        j        z   j        rj        gng z   j        z   d fd}
 | j        |
          \  }} ||           |j        r j                            |           n4 j                            t3          j        | j                             |fS )a  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  H   K   | ]}|                                 v|V  d S r   r  )r   r   r   s     r   r   zDInstructionTranslatorBase._build_comprehension_fn.<locals>.<genexpr>  sB       
 
AT5K5K5M5M,M,MA,M,M,M,M
 
r   __nested_resume_fns__nested_frame_valuesc                    g | ]}d | S )___stackr   rz  s     r   re  zEInstructionTranslatorBase._build_comprehension_fn.<locals>.<listcomp>  s    <<<!~!~~<<<r   N__comprehension__at_r  r"  r  r   r   r   c           	        |d<   t           j        dk    r|d<   |d<   d|d<   |d<   t                    |d<   d	|d
<   d	|d<   t          fdD             z             |d<   |d         	z   z  |d<   g }r1|                    t          dt                                         |                    t          dd	                     dz
  }t                    D ]Y}|         r#|                    t          d                     -|                    t          dd|                      |dz  }Z                    
j                  }g }
j	        sU
j
        r*|                    t          d
j
                             n$|                    t          dd                      
j        rg
j        D ]&}|                    t          d|                     '|                    t          ddt          
j                  z                        |                    t          d                     ||z   |z   | d d <   d S )Nr  rF  r  co_firstlinenor   r  r  co_argcountr   co_posonlyargcountco_kwonlyargcountc                    g | ]}|v|	S r   r   )r   r   r   s     r   re  zUInstructionTranslatorBase._build_comprehension_fn.<locals>.update.<locals>.<listcomp>:  s    LLLaatmmmmmr   co_varnamesco_flagsrU  r  r0  r   rq  rL  r  rK  r  r  r  )rW  r  r   r0  r   r(   r}  _copy_comprehension_bytecoder  r  r  r  )r  r  r  	nonnull_irj  
comp_instsepiloguer  r  r  r  r   comprehension_body_varsr  r  r   r  r   r  r  r  s           r   r  zAInstructionTranslatorBase._build_comprehension_fn.<locals>.update-  s    '.L#7**.5]+-3L)**,L'*2L'*-d))L'12L-.01L,-*/LLLL#:LLLL+ +L' (4J'?^+C (L$ )+F W01As8}}UUUVVVMM,X1===>>> &)I:&& # #'* #MM"4["A"ABBBBMM*;?U)?U?UVVV   NII::8X_UUJ +-H+ S& SOO*;x?RSSS    OO$6|D$Q$Q$QRRR#  ( 4 V VHOO$6{8$T$T$TUUUU&%H$8 9 99     OO.~>>???$z1H<LOOOr   )r  r"  r  r   r   r   )bytecode_transformationr  r  r  resume_executionr  r  r0  r  r   r}  sortedr  r  r  r   r  r0   r  r  r  r  r  r"  rj  rT  rk  ra  )r   r  r  r  r  r  rL  r  r  r-  r  rs  r   r  r  r   r  r  r  r   s   ``````       @@@@@@@r   r  z1InstructionTranslatorBase._build_comprehension_fn  sy   $ 	CBBBBB))))))@@@@@@@@
  
 
 
 
(
 
 
 
 
 #$;<8nn<<u]';';<<<= 	 T[,233t{.4"556 
 
 !% 7T[=WPt{/BPPPPQQ ""#(0(;C#$$E $% 	 =	= =	= =	= =	= =	= =	= =	= =	= =	= =	= =	= =	= =	= =	= =	= =	= =	= =	=~ ,+DK@@!	(  	K--gx@@@@K--"8T^WEE  
   r   r  c                   i }g }t          ||          D ]D}| j        |         }t          j        |          }d|_        |||<   |                    |           E|D ]$}|j        |j        |v r||j                 |_        %|S )z@Copy comprehension bytecode instructions, updating jump targets.N)r}  r  rR  rS  r   r(  )r   r  r  inst_mapcopied_instsr  original_instcopied_insts           r   r  z6InstructionTranslatorBase._copy_comprehension_bytecodez  s     46*,&)) 	- 	-B -b1M)M22K(,K%&1H]#,,,,' 	B 	BK!-+2D2P2P%-k.@%A"r   r   fallback_linenotuple[str, int]c                "    ||dk     r||fS ||fS r   r   )r   r   r   r  s       r   _make_frame_locz)InstructionTranslatorBase._make_frame_loc  s'     >VaZZo..&!!r   	frame_loctuple[tuple[str, int], ...]c                <   g }t           j        rW| j        }|N|                     |j        j        |j        |j        j                  }|                    |           |j        }|N|	                                 |                    |           t          |          S r   )r   r  r$  r  r  r  r   r  r   reverser0  )r   r  frame_loc_chain_list
current_txparent_frame_locs        r   _get_frame_loc_chainz.InstructionTranslatorBase._get_frame_loc_chain  s     79% 		/>BkJ(#'#7#7%1%%4$ $ 
 %++,<==='.
 ( 	$$&&&##I...)***r   r  r   r   Unsupported | StepUnsupportedc                   |j         rd S t          |dd           }|#t          j        j                                        }	 t          j        r8| j        1| 	                    | j
        j        | j        | j
        j                  }n-| 	                    |d         j        |d         j        d          }n # t          $ r |d         |d         f}Y nw xY w|                     |          }d}t          j        r6t%                      }d                    t)          j        |                    }n t%                      |z   }t-          |          }d                    t)          j        |                    }	|t/          ||          }d|d          d|d	          d
| dt          j        r| d|	 dz  nt1          |	          z  t          j                            dd fd           t7          |t8                    r|j        nt=          |          }
t>                               tB          j"                  ritF          sbtI          j%        |
|f          rLt          j        r%dz  d                    | j&                  dz   z  t>          '                               n)t>          '                    d|d         |d	         |           d|_         d S )Nr?  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                     dddS )Ndynamo_graph_break_reasonstring)r   encodingr   r   r   r   r   z;InstructionTranslatorBase.log_graph_break.<locals>.<lambda>  s    3$! ! r   c                 4      dt          j                     S )Nr   )r  
format_exc)user_stack_traces   r   r   z;InstructionTranslatorBase.log_graph_break.<locals>.<lambda>  s    "2NNi6J6L6LNN r   )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   r  r$  r  r  r  r   r  r   
IndexErrorr  r  r7   r   r  r  r5   r3   r   _loggingtrace_structuredrS  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  z)InstructionTranslatorBase.log_graph_break  sX    : 	FS,55
5CCEEJ	) dk.E 00K+KK. 		 !00rN+rN) 	
  	 	 	 ]+-.III	 33I>>')$> 	<!7!9!9+-77%&899, ,(( 011J>J/
;;J!wwy'<Z'H'HII ?6sFCCF'9Q< ' ')A, ' '#)' ' ' 	 > 	:/ L L'L L L $8 9 99''  ONNN 	( 	
 	
 	
 ",C!=!=L#++499((77		 03Wo4NOO	 ~ Q L  !DIId.H$I$ID$PP !!     !! A!!	   


s   A1B4 4CCr  types.CodeTyper;   c                h    t          ddt          |            dg t          j        |d           d S )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  r5  r=  )r:   r6   r   r<  )r  r   s     r   r  z0InstructionTranslatorBase.raise_loop_graph_break  sR    )?&7&=&=??hD%CD	
 	
 	
 	
 	
 	
r   r  rF  ra  rc  r  exportr  r   distributed_stateOptional[DistributedState]r  Optional[tuple[types.CellType]]r   Optional[dict[Instruction, int]]c                4   t                                                       || _        || _        || _        || _        || _        |	| _        |
| _        d | _	        g | _
        d| _        d | _        t          d          | _        d| _        g | _        g | _        d| _        d | _        d| _        g | _        || _        t/          d          | _        d| _        t5                      | _        || _        ||nt;          | j                  | _        || _        || _         || _!        || _"        || _#        || _$        |$tJ          j&        rtO          |||          | _(        nd | _(        i | _)        i | _*        || _+        d| _,        d| _-        d| _.        d | _/        d | _0        d| _1        d | _2        d| _3        g | _4        || _5        d	d
l6m7}m8}m9}m:} |j;        ||z  |z  |z  z  r"| <                    t{          d                      || _>        d| _?        d gt          |jA                  z  | _B        t          D                    t          jF                  | _G        t          D                    t          jF                  | _I        t          jK        |jL        |           d S )Nr   r  Tr     )maxlen)r  r  r  Fr   )CO_ASYNC_GENERATORCO_COROUTINECO_GENERATORCO_ITERABLE_COROUTINE)Mrh  ri  r  r  r"  r  r  r  r  r  r  r   r  r(   r  r7  r%  r9  r   rQ  r  r  r  r   r  r  r  r  r  r   r  rF  ra  rc  r  r  r  r   replay_record_enabledrH   r  nn_module_stack	num_callsr  r:  r   r  r  r  r  r$  r  r  r  r  r   r!  r"  r#  r  rD  rf   r  r  r   r7  r]  r  r  r   r  r  r  r  r  	lazycacher  )r   r"  r  rF  ra  rc  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  rj  s                           r   ri  z"InstructionTranslatorBase.__init__#  s   0 	.!2 . 0-J*%:" -1),.
#$ #5e#<#< (,%UW,"&(%*"%5%5%5"$%!47EE' 0<*GGD<M0N0N 	  	 *3*4,8&, 6#?!2W<" " "D "&D BD)+ $)!*/'#'  $$(!&+#	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 ?<'*??BTT
 	- IIod++,,,().& FS)*** 	
 ++GM:: 	* ))'-88 	( 	F.	:::::r   r   r  r   r[  )r>  rb   r   r  r  r  r   r   )r>  ro   r   r  r  r  r   rb   )r>  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   )ru  r7  r   r   )r9  r  r   r   r   rb   )r>  r   r   r  )r   r-   r   rb   )rl  r   r   rO   )r   r   r  r   r  r   r   r   )r  r   r   rb   )r   r  r   r   )ru  rb   r   rb   )r   r   r   r   )ru  rb   r   r   )ru  rb   r   r  )r  r   r   r   )r=  r   r   r   )r   r-   r  r   r   r"  )r  r   rK  r-   rL  rA   rM  rN  r   r2   rO  r   rP  r   r   rQ  r   r-   r  rv  r   r"  )rM  rN  r  r[  r   r2   r   r   )r   r-   r   r   )r   r-   r  r  r   r   )r  rb   r  r   r   rb   )r  rb   r  r   r   r   )F)r   r-   r9  r   r   r   )r  rG  r   r-   r   rb   )r  rb   r   r   )r  r  r   r   )r   r  )r  r   r  r   r   r   r   r  )r  r  r   r   )r   r   r  )r   r  )r  r  r  r   r  r   r  r  r  r   rL  rA   r   rQ  )r  r   r  r   r   r"  )r   r   r   r  r  r   r   r  )r  r  r   r  )r  r   r   r   r   r  r   r   )r  r  r   r;   r   r   )NNN)(r"  r@   r  r"  rF  r   ra  r   rc  r   r  r   r  r  r  r  r  r   r  r   r  r  r  r   r  r   r  r   r  rn  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  rW  r  r  propertyr  r  r"  r6  rD  r<  r  rE  rL  rR  r  rW  r[  LOAD_CLOSUREr^  r  ri  rL  cached_propertyro  rr  rw  r   rk  r  r  r  EAGER_IMPORT_NAMEr  r  re  r  JUMP_FORWARDJUMP_ABSOLUTEr  r  not_rk  r  rj  JUMP_IF_FALSE_OR_POPJUMP_IF_TRUE_OR_POPr  r  r  r  r  r  r  r  r  r  r  r  rk  r  r  r  r  r  r  r  r  r  r  r  r  rW  r!  r*  r/  r4  r6  r2  r<  r  r@  rC  rF  staticmethodrJ  r  r  r  r  r  r  r  r  r  r  r  r  r{   r  r  BUILD_TUPLE_UNPACK_WITH_CALLr  r  BUILD_MAP_UNPACK_WITH_CALLr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  DICT_UPDATEr  r  r  r!  r%  r'  r*  r-  rN  r  rc  negUNARY_NEGATIVEr  invertUNARY_INVERTpowBINARY_POWERmulBINARY_MULTIPLYmatmulBINARY_MATRIX_MULTIPLYfloordivBINARY_FLOOR_DIVIDEtruedivBINARY_TRUE_DIVIDErO  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_ORr0  r3  rI  rJ  rq  r<  rH  r@  rB  r  JUMP_BACKWARD_NO_INTERRUPTPOP_JUMP_FORWARD_IF_TRUEPOP_JUMP_BACKWARD_IF_TRUEPOP_JUMP_FORWARD_IF_FALSEPOP_JUMP_BACKWARD_IF_FALSErD  rF  rK  rM  r  r/  rR  rU  rX  r  r]  r  r`  rd  rf  rh  r  rp  rr  rt  rv  LOAD_FAST_BORROWr  POP_ITERr|  r}  r  r  r  r  r  r  r  r  r  
contextlibcontextmanagerr  r8  r  r  r  r  r  r  r  r  r  r  ri  rk  rl  s   @r   r   r     s         ////0000====....FFFF    &&&&$$$$""""&&&&KKK((((########3333    ....AAAA//// !   EEEE%%%%%%%%. . . .! ! ! !F0 0 0 00 0 0 0' ' ' '

 
 
 
8 8 8 8,4 4 4 4U U U Un n n n n   	W 	W 	W 	Wo o o ob 7""*	+ *	+ *	+ *	+ *	+\	 	 	 	 ; ; ; X;B B B BH2 2 2 2H= H= H= H=T             ; ; ; ;!+ !+ !+ !+FV V V V2 2 2 2. . . ./ / / / L	 	 	 	* * * *J J J J* J J J J! ! ! !E E E E( # # # \#,
2 
2 
2 
2   :; ; ; ;| $% % % % 6 6 6 \6,> > > >4 4 4 4 LM$X]E::#|HNE::'<t<<&,x~t<<U U U U
U U U U
   ( ( ( (U U U U   N N N N      *   
 
 
 
(-
 -
 -
 -
^ R  R  R  RD   0 0 0 0.. . . .$) $) $) $)LA' A' A' A'F< < < <:$ $ $ $*Q Q Q QfK K K K   P P P PD D D D    ) ) )	 )
    >; >; >;	 >;@  A  
	- 	- 	- 
	-G G G G           ) ) ) )   % % % %   A  
 
 
	 

 
 
 
    \>A% A% A% A%Fg% g% g% g%R q? q? q? \q?f
 
 
 
&  ~  = = =	 =8 8 8 8( ( ( (1 1 1 1   ! ! ! !FI I I I
 
 
 
 @L @ @ @ @ @ 8 8 8 8 $6 J J J J
 
 
 
 "2
 
 
 
 9 9 9 9. . . .1 1 1 1   %
 %
 %
 %
N   @   0  N  
 
 
 
4 4 4 4
               
      N N N N(3 3 3 3
 
 
 
B" " " "! ! ! !:1 1 1 1P P P P% % % %$1 1 1 1 K   @ @ @ @
 
 
 

 
 
 
R R R R R R R R"C C C CD D D D Xhl++NXhl++N''I8HO,,L8HL))Lhx|,,O%Xho66"(8#455!("233HX\**Mx--(,''Jhx|,,O..u   hx  " "M HX_--MHX_--M(-((J&&I(,''JHX]++Mx..&hx'788#8H$677"(8#455Xhm,,N //(8=))Kx..Xh.//NXh.//N(8=))K(8=))K(,''J/ / / / 7""	; 	; 	; 	;   @ @ @ @" " " "-! -! -! -! -!^  i    	 ) ) ) )V V V V M!%+|HNEBB ,X^U C C ,X]E B B!-hmU!C!C   ( ( ( (# # # #J 
 
 
 \
 - - - -' ' ' '	* 	* 	* 	*& & & && & & &/ / / /   ; ; ; ;) ) ) )   $     A  
' ' ' 
'
 
 
 
   B@ @ @ @; ; ; ;* * * * !IH
! ! ! !88 8 8 8S S S S    >B	
 	
 	
 	
 	

 
 
 
> > > >
    5 5 5 X5 * * * *
 
 
 
! ! ! !     A
 A
 A
 A
Fd( d( d( d(L~! ~! ~! ~!@   (" " " "+ + + +(l l l l\ 	
 	
 	
 \	
< 48,048-@; @; @; @; @; @; @; @; @; @; @;r   )	metaclassc                       e Zd Zed,d            Zej        d-d            Zd. fd Zd/d!Z	d0d$Z
d1d%Zd/d&Zd2d)Zd2d*Zd2d+Z xZS )3rB  r   c                     t           j        S r   )tlsr  r   r   r   r  z InstructionTranslator.current_tx  s
    ~r   r   c              #     K   t          t          dd           }| t          _        	 d V  |t          _        d S # |t          _        w xY w)Nr  )r  r  r  )r   r  s     r   set_current_txz$InstructionTranslator.set_current_tx  sJ      \400	#EEE"CNNNUCN""""s	   8 Ar  r"  r  r  rF  r   ra  rc  r  Optional[tuple[Any, ...]]torch_function_mode_stackr  compiler_fnr:  r   r  export_constraintsframe_stater  r   r  rn  r  r  r  r  r   c                J    t                      t          j        d|j         d|d          d|d                     t	                                          t          ||	| ||||||||
|          ||||||i i d d ||d||||           |                                  t          | j	        j
                  5  |                                 5  |
| _        || _        | j        r| j        s
J d	            i | _        t          |                                           }t#          j        |                              d
d           }|                                D ]q\  }}||vrhd }|r5t+          |                    |i                                                     }t-          j        |t1          |d|                    }|| j        |<   r| j	        j        }|                                 D ]}||v rZ||         }t1          |dd          }t-          j        ||          }|                                }|                    ||           n|                                }||_        || j        |<   |J t=          |                                 |          D ]\  }}tA          |          }t1          |d          }	 t-          j        |j!        |          }n## tD          $ r tG          j$                    }Y nw xY w|%                    |||          }||_        || j        |<   tM          |          | _'        tQ                      | _)        |r)tF          j        *                    | j                  | _        d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nztorchdynamo start tracing r  r  r   r  )local_scoper  r  r  r:  r  r   )r"  r  rF  ra  rc  r  r  r  r  r  r  r  r  r  r  r  r  r  z4Export without one graph - something has gone wrong.dynamismT)is_inputr  )r  is_derefed_cell_contents)r  )+r  r   INFOr  rh  ri  r@   _throw_if_in_functorchr   r"  r  r  r:  r  r  r  r  r1   rg  re  r   	frozensetrw   r  rR   rN  r  rQ  rY  rZ  r,  r  rQ   cell_contentsr  r   DeletedVariabletrack_cell_existingr   r  r   r  realize_all)r   r  r  rF  ra  rc  r  r  r  r  r:  r  r  r  r  r  r  r  r  r  r   r  local_dynamismvarrN  contents_sourcerQ  cell_varrP  cell_sourcerj  s                                 r   ri  zInstructionTranslator.__init__  s   ( 	Lxxx,}:UxxXdeuXvxx	
 	
 	
 	"$&*C#   &!%*."&+%/A 	 !	
 !	
 !	
F 	##%%% T[011 d	 d	43F3F3H3H d	 d	#,DN DK{ ~  J ~ $&D *-d.D.D.F.F*G*G#/77;;JMMH'~~// 5 5e000%)N S)28<<b3I3I3O3O3Q3Q)R)R-4# %)%3   C 25D(.  ;3L %6 %68##$TNE* '2!%15' ' 'O
 5H4N5 5L  ,::<<H ++HlCCCC+::<<H&*#-5$T** &&&!$--//7;; 6 6
d-d33"-dT"R"R"R?#6#=*O$ $LL " ? ? ?#,#<#>#>LLL? (;;|  '+#-5$T**1K)2 2D. *=)>)>D&  (1'D'P'P(( ($Ed	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	 d	s\   7NG.N ;KN K6	3N 5K6	6A>N 4N N	NN	NNNc                V   t           j                            d          }t          j        | j        j        d| j        j                  }t           j        j        	                                }t           j        j        j
        j        t           j        j        j
        j        t           j        j        j
        j        f}|f|                                |v rR||urP|                                j                                        }d| d| d| d}t#          dd|g 	           d S d S d S d S )
Neagerr  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_backendrI  getattr_staticr"  r  _C
_functorchpeek_interpreter_stackTransformTypeVmapGradJvpr  r   lowerr:   )r   r  r  ciforbidden_keysr   r_  s          r   r  z,InstructionTranslator._throw_if_in_functorchY  sF   ,,W55,K#]DK4K
 
 X 7799H-2H-2H-1
 >bffhh.88[PU=U=U6688=&&((DY(,Y Y +/Y Y !%Y Y Y  ?	      >88=U=Ur   r  rT   c                    t          |t                    r| j        |j                 S t          |t                    r| j        |j                 S t          r   )rS  rR   rF  rZ  rO   ra  r  rI  )r   r  s     r   get_example_valuez'InstructionTranslator.get_example_valuex  sK    fk** 	4=!233fl++ 	6>&"455r   c                    | j                                         D ]K}t          |t                    r4t	          |                                t          j        j                  r dS LdS r   )	r  r  rS  r   r  r  r  nnModule)r   r   s     r   $symbolic_locals_contain_module_classz:InstructionTranslator.symbolic_locals_contain_module_class  sh    %,,.. 	 	A!566 :$$&&< <  ttur   c                    t          | j                  r^| j        d         x}rQt          |t                    r>t	          |                    |           t                                | j        d<   d S d S d S d S )Nr  r  )r   r  rS  rq   rz   r$  ra   )r   r  s     r   "replace_tos_if_return_is_generatorz8InstructionTranslator.replace_tos_if_return_is_generator  s    
OO	
2&	 3 <==	
 2--d33.00  DJrNNN	 	 	 	 	 	r   r   r-   c                   |                                   | j        J | j        J t                                          d| j        | j        z
             t
          j        s}| j                                        dk    r`| j	        sY| 
                                sE| j        s>| j        s7| j        s0| j        s)t          j        dt#          | j                             d | _         t'                      t(          j        d| j        j         d|j         d           t0                              d           | j                            | t7          d|                                 gd	
          |j        dk    rdnd          }t;          |          dk    sJ |d         j        rJ | j                            |                      ||d         j!                             tD          )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)r6  r  r   r  )#r  r   r  r[   r  r   allow_empty_graphsr"  r  r  r  r  r:  r   r  r   	SkipFramer6   r  r  r   r  r  r   r  r  r  r?   r  r   re  r  rJ  r  r;  )r   r   r  s      r   _returnzInstructionTranslator._return  s1   //111'333+++''043CC	
 	
 	

 )	''))Q..2 /==?? / K / N	 /
 - / 3 / -@0==@ @  
 $( LM(;MMt{MMM	
 	
 	
 			,---$(K$@$@%!3!3!5!5 6E   !K>99qqq %A %
 %
! ,--2222,Q/@@@@++))$0I!0L0VWW	
 	
 	
 r   c                0    |                      |           d S r   r  r  s     r   r  z"InstructionTranslator.RETURN_VALUE      Tr   c                0    |                      |           d S r   r  r  s     r   r  z"InstructionTranslator.RETURN_CONST  r  r   )r   rB  r*  )$r  r"  r  r  rF  r   ra  r   rc  r   r  r  r  r   r  r   r  r   r:  r   r  r   r  r   r  r   r  r   r  rn  r  r  r  r  r   r   r   )r  rT   r   r   r  r)  )r   r   r   r7  r  r|  r}  r  ri  r  r  r  r  r  r  r  rk  rl  s   @r   rB  rB    s          \ # # # #c c c c c cJ   >      	 	 	 	- - - -^          r   rB  rF  c           	     p    g | ]3\  }}t          t          d |v r
|dd         nd|dd                    4S )INPLACEru  NBINARY_)r  rB  )r   r   r   s      r   re  re    se       
 FA	 	!#v--F122JJ3IVABBZ3I3I	
 	
  r   r"  r@   r  r  get_inline_depthCallable[[], int]c              #    K   t           j        sdV  dS | j        t                      | _        | j                                        }| j                                        }| j                            |j        |j        |j	        t          j                               d}	 dV  d}| j                                        }t          j                    }|r| |            }||j        z
  }	|	|j        z
  }
t          |j        |j        |j        |	|
t'          |j                  ||r|d         nd|r|d         nd|r|d         nd|j        |          }| j                            |           | j                            |	           dS dS dS # | j                                        }t          j                    }|r| |            }||j        z
  }	|	|j        z
  }
t          |j        |j        |j        |	|
t'          |j                  ||r|d         nd|r|d         nd|r|d         nd|j        |          }| j                            |           | j                            |	           w w w xY w)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_stackrD  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  r  caller_infor  trace_successstack_entrytrace_end_nsr  r  r  timings               r   profile_inline_callr    s     " ! $ 3 5 5'::<<K&5577J
d&(;T\^^   M=+//11|~~ 	=[4++--L%(AAJ#k&??J(%/$-'3%%"4<00)3>!HQD2= GA45@#J;q>>d"-"?%  F !//777!00<<<<<)	= 	=44 +//11|~~ 	=[4++--L%(AAJ#k&??J(%/$-'3%%"4<00)3>!HQD2= GA45@#J;q>>d"-"?%  F !//777!00<<<<)	=4s   !F C%I3c                       e Zd ZU dZded<   ded<   ed4d            Zed5d            Zed6d            Z	d7dZ
d8 fdZed9d!            Zd:d"Zd;d$Zd; fd%Zd< fd+Zd=d,Zd=d-Zd>d1Zd= fd2Zd= fd3Z xZS )?r  z Trace and inline a called methodr7  symbolic_resultr   r$  r   funcro   r   r  r  r  r   rb   c                    d }t          j        |                                fd          5  |                     |||          }|                                cd d d            S # 1 swxY w Y   d S )Nc                      j         dz   S r  r  )r$  s   r   r   z;InliningInstructionTranslator.inline_call.<locals>.<lambda>!  s    F4G!4K r   )r  r"  r  build_inline_tracerinline_call_)r  r$  r  r   r  tracers    `    r   r  z)InliningInstructionTranslator.inline_call  s      M4==??,K,K,K,K
 
 	) 	) ,,VT4HHF&&((		) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   ,A((A,/A,trace_rules.SkipResultc                   |                                  r t          dt          |           dg            t          | t                    rt          j        |                                 dd          rtt          j        |                                 dd           }t          dt          |                                           d|                                  d	| d
dg           t          j	        | d          }|j
        rddlm} t          | d          r8t          | j        d          r#| j        j        |u rt          j        dd          S t          | d          r| j        j        nd}d| dg}d|                                 vr|d| ddgz  }t          dd| d|                                  d|                                  d|j         d| d |           |S )!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_applyr>  _originz"allowlist in dynamo known functionr   zAvoid calling the function `r^  r  z:Apply `@torch._dynamo.dont_skip_tracing` to the function `zw` to force tracing into the function. More graph breaks may occur as a result of attempting to trace into the function.z Please file an issue to PyTorch.z.Attempted to inline function marked as skippedz
qualname: z, name: z, filename: `z`, skip reason: z?Dynamo developers have intentionally marked that the function `z` should not be traced.)has_selfr:   r   rS  rt   rI  r  get_functionr   check_verboseskippedtorch._dynamo.variables.miscr  r/  r>  r  
SkipResultr   get_filenameget_namer   )r  r_  r  r  fn_qualnamer  s         r   check_inlineablez.InliningInstructionTranslator.check_inlineable&  s    ==?? 	6D		k    d011 	g6L!77
 7
 	 (!!##%? C LD--//00Ad6G6G6I6I A A:=A A A ?    *4FFF>  	VVVVVV
 d##DGY// GO'HHH #-?   3:$2E2EM$'..2K>{>>>E  1 1 3 333hQ\ h h h 7	  HS[ S S$--// S S"//11S SCI=S S(^i ( ( (    r   c                    t          |t          t          t          f          sJ |                                d } j        j        }t          j        s!|r|j	        
                    d           x}r|}|=t                              |          }|j        du sJ t          j        s|r
||j	        <   d }	 |                     ||          }n# t          $ r}t!          dd|                                 d|                                 d|                                j         dd |D              d| 
d	|                                 d
g t(          j        |           Y d }~nd }~ww xY w|J t-          j        |                                          D ]<}	t          |	t2                    s%t!          dd| d|	 dg t(          j                   =j        dv rI|r t          |d         t8          j                  s't!          ddj         d| dj         dg            d}
t<          j        j         j!        "                    d          r)dtG          j$                  #                                 }
tJ          j&        dk    r? j'         j(        d" fd}tR          *                    dtW          |                     tX          *                    d |
|j-                   |rt          |d         t\                    rw j        /                    |d         j0                  }t          |t<          j1        j2                  r3tg          j4        |          tk          j6        |j7        j8                  d!<   |rzt          |d         tr                    r_|d         j:        }t          |t<          j1        j2                  r3tg          j4        |          tk          j6        |j7        j8                  d!<   t          |tv                    rJ ty                    r%t{           | j>         j?         j@        |          }n$t           | j>         j?         j@        |          }|S )#NFz2failed to bind arguments when attempting to inlinezfunc='z' r   z	; args = c                6    g | ]}|                                 S r   )r  )r   rN  s     r   re  zEInliningInstructionTranslator.build_inline_tracer.<locals>.<listcomp>  s"    ===3??,,===r   z; kwargs = z4Argument mismatch when attempting to trace function rR  r4  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   rF  r   r   c                                          j        j                  } t                                                    }dj         d|  d| S )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_strzQInliningInstructionTranslator.build_inline_tracer.<locals>.get_trace_call_log_str  sc    77#-4 8   2+xHHOOQQQT\QQQQ4QQQr   r  zINLINING %s%s, %sr\  r   )ArS  rt   rr   rp   r  r"  r  r   dont_skip_tracingpreviously_inlined_functionsre  r  r  r  	bind_argsr  r:   r  r  r  r   r  r  r  r  rb   r  r  r   r   r  r  	_internal	log_stateis_artifact_enabledrl  BytecoderW  r  r  r  trace_call_logr  r^   r  r   r   r  r	  r  r,  rh  ri  r1   rg  forwardr  r   r  rs   r.   &InliningGeneratorInstructionTranslatorr  r  r  )r$  r  r   r  r  tracing_ctxprevious_result
sub_localsr  r   r  r  moduler  r  r  r  s   `             @@@r   r  z1InliningInstructionTranslator.build_inline_tracerh  sJ    $*.
 
 	
 	
 
  $}}m3
 ' 	)K 	)"-"J"N"Nd# #  ) )>2CCDIIF>U****+ H HAG8>
	f==JJ 
	 
	 
	LS S SD4E4E4G4G S S$--//Jh S S=====S SJPS SeSWS`S`SbSbeee&1 	 	 	 	 	 	 	 	 	
	 %%%!2!2!4!455 	 	Aa11 X5T55!55 y9-89	    <999 :Q)LMM : LBdlBBDBB{4<{{{	     >#-AA*MM 	54#,t,,002244Fw&&1H -KR R R R R R R R R   z2H'I'IJJJ		%tVV]CCC  	(JtAw(899 	(]00a1CDDF&%("677 (
 K'' ()@AA&  	(JtAw(EFF 	(!W]F&%("677 (
 K'' ()@AA& d$899999 	;'4, FF 3'4, F s   :C 
E0B
E++E0c                   | j         }d|_        d|_        | j        }t	          j                    }|j        r|                     |j                  }	 |5  |                                  d d d            n# 1 swxY w Y   nt# t          j
        $ r(}d| d| }t                              |            d }~wt          $ r}d|_         d }~wt          $ r t                              d|            w xY w| j        |_        d|_        n# | j        |_        d|_        w xY w| j        j        rt&          S | j        J | j        |j        u r|j                            | j                   |xj        | j        z  c_        t                              d|           | j        j        j                            |           t8          j        st=          | t>                    r| j         rtC          |          rtt=          | t>                    r_| j"        rXt=          | t>                    sJ g }| j        #                                s| j        g}t          j$        tJ          | |           d S | j        S tC          |          rTt=          | t>                    sJ | j        #                                sJ tM          | j'        tQ                                S | j        S )	NFTz!Observed exception DURING INLING z : zFAILED INLINING %szDONE INLINING %sr  r  ))r$  r  r  r  r|  nullcontextr  r  r6  r   r   r  r  r;   r=  r(  r   r"  r#  rg   r  ra  r  r  r  r  traced_coder   r   r  rS  r  is_generator_from_ctx_managerr.   generator_exhaustedis_constant_noner  r  rz   generated_itemsra   )r   r$  r  
strict_ctxr  r_  r   s          r   r  z*InliningInstructionTranslator.inline_call_  sX   &+#(,%{$022
" 	O55f6MNNJ	2  


              $ 	 	 	BdBBqBBCIIcNNN 	 	 	 !AL 	 	 	II*D111	 +/*CF',1F)) +/*CF',1F)1111;" 	*))#///>V---#**4+@AAA((D,JJ((		$d+++#/66t<<<4 	,tCDD	,2	,
 T"",t%KLL, ,,
 "$(NOOOOO +<<>> 2 01D,]DtLLLLLL++D!! ,!$(NOOOOO+<<>>>>>+("2"4"4   
 ++sZ   B A5)B 5A99B <A9=B  D	 C2#B33C2 C*C22D	 	Dr  r  r  r  r  r   r  r   funcvar7BaseUserFunctionVariable | LocalGeneratorObjectVariabler   c                   |                                 }|d         }	t          |	t                    s|	j        }	|j        j        }
|
r|
j                                      nd }||j        }|j	        }|j
        }nct                    }t          |           t          |          }fdt                      D             }|
rt          |||          |
j        <   t!                                          |j        i ||	|||||||j        |j        dz   |j        |j        |j        |j        |           || _        || _        |j        | _        d | _        |j                                        | _        |j        | _        d S )N__builtins__c                2    i | ]}|t          |          S r   )r  )r   r   r  s     r   r   z:InliningInstructionTranslator.__init__.<locals>.<dictcomp>W  s%    IIIAAwtQ//IIIr   )r  r  r  r   )r"  rF  ra  rc  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )get_globalsrS  r   __dict__r"  r  inlined_code_cachere  r  r  r  r"   r!   r   r,   r   rh  ri  r  r  r  r  r  r  r  r$  r&  r  r%  rR  r:  )r   r$  r  r  r  r  r  r  ra  rc  r  cachedr  r  r  rj  s     `            r   ri  z&InliningInstructionTranslator.__init__;  s    ''))	~.
*d++ 	-#,J m3=HR/33D999d!.LnG!.LL/55L---!,//GIIIIIIIL 7G!-#!-8 8 8.t4 	=!+-*G"7%%=,q0"2,$6N% 	 	
 	
 	
( )#%5::<<)r   r  c                    | j         j        S r   )r$  r  r   s    r   r  z'InliningInstructionTranslator.fake_modez  s    {$$r   c                X    t          j        | j                                                  S r   )r   r!  r$  r  r   s    r   r"  z)InliningInstructionTranslator.run_ctx_mgr~  s!    +DK,E,E,G,GHHHr   r   c                    t           j        sdS | j                                        sdS | j                                        sdS dS )zCheck if comprehension speculation is allowed in this inlined context.

        Unlike should_compile_partial_graph(), this skips the exception table entry check.
        FT)r   r  r   should_allow_nested_graph_breaksr$  r  r   s    r   r  zAInliningInstructionTranslator._can_speculate_comprehension_nested  sO    
 ) 	5|<<>> 	5{7799 	5tr   c                    t           j        rV| j                                        sdS | j                                        sdS t                                                      S dS r!  )r   r  r  r  r$  r  rh  r   rj  s    r   r  z:InliningInstructionTranslator.should_compile_partial_graph  s_    % 	:<@@BB u;;;== u7777999ur   r   r-   r  rv  r"  c                    t           j        r"t                                          ||          S t	          dddg            d S )NzGraph break in inlined functionr   z2Graph breaks in an inlined call are not supported.r  )r   r  rh  r  r:   )r   r   r  rj  s      r   r  z3InliningInstructionTranslator.create_call_resume_at  sY    
 % 	R77007PQQQ5L		
 	
 	
 	
 	
 	
r   c                P    |                                  | _        d | _        t          r   )r  r  r   r;  r  s     r   r  z*InliningInstructionTranslator.RETURN_VALUE  s     #xxzz#' r   c                R    |                      |          | _        d | _        t          r   )r^  r  r   r;  r  s     r   r  z*InliningInstructionTranslator.RETURN_CONST  s&    #//55#' r   r   r   #tuple[Any, VariableTracker, Source]c                P   d| j         v r| j         d                             d          s|| j         d         }|                     |          }d|v rt          j        j        j        |         }nt          |          } t          | |          |          }t          ||          }n_| j
                            d| j                   }t          |          }| j         } t          | |          |          }t          ||          }t          |          rt          |          }|||fS )Nr   namedtuple_ry  ___unnamed_scope)ra  ri  rk  r  r  r~  r  r   rd   rM   r"  r  rO   rN   rY  rS   )	r   r   rl  rm  rn  fglobals_vtglobal_sourceglobals_nameglobals_sources	            r   get_globals_source_and_valuez:InliningInstructionTranslator.get_globals_source_and_value  s<    ''z0J0U0U1
 1
' .4K ..{;;M+--M2L#  "0!<!< ?/$>>~NNK&}d;;MM;;;"DN L *,77N!^N @/$??OOK-ndCCM^$$ 	; ,M::M{M99r   c                   |j         }|| j        vr|                     |          S | j        j        | j        u r#t                                          |           d S |                     |          \  }}}| j        j        	                    ||          r5| 
                    | j        j                            ||                     d S | j        |         }| 
                    t          j        | ||                     d S r   )r  ra  re  r"  r  rh  ri  r-  rN  has_pending_mutation_of_attrrD  	load_attrrb   rg  )r   r   r   r   r)  r*  r  rj  s          r   ri  z*InliningInstructionTranslator._load_global  s    {t~%%$$T***;#t~55 GG  &&&&&,0,M,Md,S,S)A{M{'DD[RVWW M		$+2<<[$OOPPPPPt,		//e]KKLLLLLr   c                x   | j         j        | j        u r#t                                          |           d S |                                 }t          |t                    rt          d|j	        dg            |j	        }| 
                    |          \  }}}| j         j                            |||           d S )Nz3Storing Tensor hook handle in globals (inline call)rt  r  )r"  r  ra  rh  rw  r  rS  r   r:   r  r-  rN  
store_attr)r   r   r  r   _fglobals_valuer)  r   rj  s          r   rw  z*InliningInstructionTranslator.STORE_GLOBAL  s    ;#t~55 GG  &&&&&HHJJE%!899 Q K 8	    ;D.2.O.OPT.U.U+O[!K$//T5IIIIIr   )
r$  r   r  ro   r   r  r  r  r   rb   )r  ro   r   r  )
r$  r   r  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   r   r   r%  )r   r   r   r   r   r  r  r7  r  r  r  ri  r.  r  r"  r  r  r  r  r  r-  ri  rw  rk  rl  s   @r   r  r    s        **....%%%%) ) ) [) ? ? ? \?B C C C \CJK, K, K, K,Z=* =* =* =* =* =*~ % % % X%I I I I        
 
 
 
 
 
   
   
(: (: (: (:TM M M M M M"J J J J J J J J J Jr   r  c                  x     e Zd ZU ded<   d fdZd fd
ZddZddZddZd fdZ	d fdZ
ddZddZ xZS )r  r  r  r   r   r  r   r   c                d     t                      j        |i | g | _        d| _        d| _        d S r!  )rh  ri  r  r  r  )r   r   r  rj  s      r   ri  z/InliningGeneratorInstructionTranslator.__init__  s=    $)&)))!#( -2***r   rb   c                     t           j         j         fd          5  t                                                      cd d d            S # 1 swxY w Y   d S )Nc                      j         S r   r  r   s   r   r   zEInliningGeneratorInstructionTranslator.inline_call_.<locals>.<lambda>  s
    4CT r   )r  r"  r  rh  r  r!  s   `r   r  z3InliningGeneratorInstructionTranslator.inline_call_  s     dk;T;T;T;TUU 	* 	*77''))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s    AAAr   c                    dS r!  r   r   s    r   r  zCInliningGeneratorInstructionTranslator.should_compile_partial_graph  s    ur   r   r-   c                *   |                                  }| j                            |           t          | j                  t          k    rt
          j        |                     t                     t          j
        s| j        r|| _        t          d S r   )r  r  r   r   rv   r   InfiniteGeneratorErrorrD  rg   r   r  r  r  r=  )r   r   tops      r   YIELD_VALUEz2InliningGeneratorInstructionTranslator.YIELD_VALUE  s    hhjj##C(((t#$$'999,,		()))5	1	 $'D 	 	r   c                    | j         d         }t          |t                    sU|                                  t	          t
                                        | |gi           }|                     |           d S d S r   )r  rS  rz   r  rf   r  r   rD  )r   r   r  ress       r   GET_YIELD_FROM_ITERz:InliningGeneratorInstructionTranslator.GET_YIELD_FROM_ITER  sk    jn#344 	HHJJJ!$''55dSE2FFCIIcNNNNN	 	r   c                T    d| _         t                                          |          S r  )r  rh  r  r   r   rj  s     r   r  z3InliningGeneratorInstructionTranslator.RETURN_VALUE$  #    #' ww##D)))r   c                T    d| _         t                                          |          S r  )r  rh  r  rA  s     r   r  z3InliningGeneratorInstructionTranslator.RETURN_CONST(  rB  r   c                   t          | j                  dk    sJ |                                 }| j        d         }|                                st	          dddg            	 |                    |           }t          | j        t                    r| j        dk    sJ | xj        dz  c_        | 	                    |           | 
                    |           d S # t          t          j        f$ ry}t          |t          j                  rt          j        |            |                                  | 	                    t          j        |j                             Y d }~d S d }~ww xY w)	Nr   r  Unreachable sub-generator coder   @Should only be encountered while implementing generator support.r  r   r   )r   r  r  r  r:   r  rS  r   r   rD  r<  r  r   r  r  rh   r  r  r   r   ru  r  exs        r   
YIELD_FROMz1InliningGeneratorInstructionTranslator.YIELD_FROM,  s   4:!####hhjjjn##%% 	 8^	   	###D))C 43S99,q0001 $$)$$IIcNNNT"""""# s<= 	9 	9 	9"c;<< 4-d333 HHJJJII&-bh77888888888	9s   $C E+2A.E&&E+c                N   t          | j                  dk    sJ |                                 }| j        d         }t          |t          t
          f          s:t          |t                    rt          |j        t          j	        j
                  r|                                r	 |                    |           }|                     |           d S # t          t          j        f$ rp}t"          j        dk     r|                                  |                     t'          j        |j                             |                     |           Y d }~d S d }~ww xY wt-          dddg            d S t-          dd	t/          |           d
t/          |           dg            d S )Nr   r  rt  rE  r   rF  r  zSEND with bad typez
TOS type: z(Attempted to SEND with unsupported type rR  )r   r  r  rS  ry   rq   r   r  collectionsabcIteratorr  r  rD  r  r   r  rW  r  rh   r  r  r:   r`   rG  s        r   SENDz+InliningGeneratorInstructionTranslator.SENDR  s   4:!####hhjjjnc,.JKLL &	s566&	39ko&>??&	 ##%% #++D11C IIcNNNNN &s'DE 
$ 
$ 
$ ''11


II.5bh??@@@IIdOOOOOOOOO
$& < b	      ,3WS\\33Vws||VVV	     s   'C E)A%EE)r   r   r  r   r   r   r+  r  r)  )r   r   r   r   ri  r  r  r<  r?  r  r  rI  rN  rk  rl  s   @r   r  r    s
        ****3 3 3 3 3 3* * * * * *         * * * * * ** * * * * *$# $# $# $#L* * * * * * * *r   r  )r   r   r   r   )r   r  )r   r   r   r  )r>  r?  r   r@  )rO  rP  r   r   )rZ  r   r   r[  r(  )r   r  )r   r   r  r  rD  r   r   r   )r  r  rD  r   r   r  )r   r   r   r2   r!  r"  r   r   )rD  r   r.  r   r   r/  )r"  r@   r  r  r  r  r   r  (  r   
__future__r   rK  collections.abcr|  rR  r   rl  rL  r   rI  r  r  r   r  r  rW  	threadingr  r  rT  rh  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  r  r   r   r   containsr   r   r4  r   r   cacher   	dataclassr   r   r   r  r  r  r}  r  r%  r'  r  r   r(  r;  r=  rN  rY  rr  r  r  r  r  r  r  r-  rW  r  rY  rn  r   rB  r  _nb_opsr2  r  r  r  r   r   r   <module>rz     s    0 # " " " " "                  



                    				 



                  Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q $ $ $ $ $ $      R R R R R R R R O O O O O O O O C C C C C C C C C C / / / / / / < < < < < < / / / / / /                                                           " ' & & & & &      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ) ( ( ( ( ( / / / / / / / / N N N N N N N N N N              : 9 9 9 9 9 9 9           	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ; : : : : : : :
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 G F F F F F F F F F R R R R R R R R R R . . . . . . H H H H H H H H            < ; ; ; ; ; ; ;                  / . . . . . / / / / / /                                 Q P P P P P P P 2 2 2 2 2 2 G G G G G G G G                      (==========<<<<<<''''''g!!.228^LL11(LII>33HnMM ^55h@PQQ io' '4R4L4R4T4T' ' '      "/("344B_X]++9
  D ! ! H  !%&(     ) ) ) )        < C C C C C C C CL 
 
 
 
 
 
 
 
 2 2 2 2 2 2 2 23 3 3 3 3 3 3 3. 4 4 4 4 ) ) ) )& $ $ $ $ ! ! ! ! ! ! ! !H	 	 	 	 	~ 	 	 		 	 	 	 	I 	 	 	    9      A A A A . . . .& $ $ $ $  > > > >B        (' ' ' 'T BA A A AHR R R RB} } } }@J J J J J J J J4 _ _ _ _ _ _ _ _DO?; O?; O?; O?; O?;'O?; O?; O?; O?;d~_ _ _ _ _5 _ _ _D	 w 
    := := := :=zjJ jJ jJ jJ jJ$= jJ jJ jJZ    -J     r   