
    %Vjiw                   <	   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mZ ddlmZmZmZmZmZmZmZ ddl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- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5mZ6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z= ddl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZL ddlMmMZM ddlNmOZO ddl4mPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZW ddlXmYZY ddlZm[Z[m\Z\ ddl]m^Z^m_Z_ ddl`maZa ddlbmcZcmdZd ddlemfZfmgZgmhZh ddlimjZjmkZkmlZlmmZmmnZnmoZompZpmqZq ddl7mrZrmsZs ddltmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z} ddl~mZmZmZ ddlmZmZmZ ddlmZ dd lmZ dd!lmZmZmZ dd"lmZmZ dd#lmZmZmZmZmZmZmZ dd$lmZ dd%lmZ dd&lmZmZmZmZmZmZ dd'lmZmZmZmZmZmZ dd(lmZ dd)lmZmZmZ dd*lmZmZ dd+lmZmZmZmZmZ erdd,lmZmZ dd-lmZ dd.lmZ  ej        e          Ze$j                            ed/          Ze$j                            ed0          Ze$j                            ed1          Ze$j                            ed2          Z ej                    Zd3  ej                    D             Zd4ed5<    eej                  j        Z eej                  j        Zd6 ed7<   d8 ed9<   d:Zee8j        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ZddgZdhZ	 	 	 dddpZddrZdduZ G dv dwe          Zej         G dx dy                      Z G dz dOe{          Z G d| d}e          Zej        d~k    rd ej        D             Z G d de          Z G d de          Zd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)StackSummary)AnyCallablecastNoReturnOptionalTYPE_CHECKINGUnion)	TypeAliasTypeIs)patch)ObservedExceptionTensorifyScalarRestartAnalysis)tracingTracingContext)	dump_file)
guard_bool)cache_method   )configexcgraph_break_hintsloggingtrace_rules	variables)get_indexofJUMP_OPNAMESlivevars_analysispropagate_line_nums)cleaned_instructionscreate_binary_slicecreate_call_functioncreate_copycreate_dup_topcreate_instructioncreate_jump_absolutecreate_rot_ncreate_swapget_code_keysInstructionis_generatoris_jump_absolute	unique_id)code_context)	PyCodegen)ArgsMismatchErrorBackendCompilerFailedcollapse_resume_framesformat_graph_break_messageget_stack_above_dynamoResumePrologueTracingErrorunimplemented_v2Unsupported)get_funcname)GuardBuilderinstall_guard)GraphCompileReasonOutputGraph)impl_CONTAINS_OP_fallback)DummyModuleExecutionRecorder)ContinueExecutionCache"IS_TRACING_RESUME_PROLOGUE_VARNAMEReenterWith)
AttrSourceDictGetItemSourceGlobalSourceGlobalWeakRefSourceLocalCellSourceLocalSourceSkipGuardSourceSource)is_builtin_constantis_forbidden)	_get_error_on_graph_breakcountersget_fake_valueget_instruction_source_311get_metrics_contextgraph_break_dup_warning_checkeristype
LazyStringproxy_args_kwargs)typestrValueMutationNewVariableTracker)FrameStateSizeEntryVariableBuilderwrap_fx_proxy)BuiltinVariable)ConstantVariable)ContextWrappingVariableGenericContextWrappingVariableWithExitFunctionVariable)ConstDictVariableSetVariable)BaseUserFunctionVariableLocalGeneratorFunctionVariableLocalGeneratorObjectVariableNestedUserFunctionVariableSkipFunctionVariableUserFunctionVariableUserMethodVariable)MAX_ITERATOR_LIMIT)LazyVariableTracker)BaseListVariableIteratorVariableListIteratorVariableListVariableSliceVariableTupleVariable)CellVariableExceptionVariableGetAttrVariableNullVariablePythonModuleVariableUnknownVariable)NNModuleVariable)supported_comparison_opsSymNodeVariableTensorVariable)SymbolicTorchFunctionStateTorchFunctionModeVariable)RemovableHandleVariableUserDefinedClassVariable!UserDefinedExceptionClassVariable"UserDefinedExceptionObjectVariableUserDefinedObjectVariable)	GeneratorSequence)FakeTensorMode)CompilePackagegraph_breaks
trace_calltrace_sourcetrace_bytecodec                >    i | ]\  }}|t          |          j        S  )r]   call_function.0kvs      X/root/voice-cloning/.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 inzihttps://github.com/pytorch/pytorch/issues/new?&labels=oncall%3A+pt2&projects=&template=pt2-bug-report.ymlr   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                  f    e Zd ZU dZ ej        e          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   indexr   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     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>N  sM       
 
%)Qq  AHHJJ  
 
 
 
 
 
r   )joinr   itemsr   s    r   r   zLocalState.renderM  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   G  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   T  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.specializea  s    !%%e,,,,,r   r   c                    || j         v S r   )r   r   s     r   should_specializez TensorifyState.should_specializee  s    111r   c                8    | j                                          d S r   )r   r   r   s    r   r   zTensorifyState.cleari  s    !'')))))r   c                2    t          | j                  dk    S r   )r   r   r  s    r   emptyzTensorifyState.emptym  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   [  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  r  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  w  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   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   rC   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  rC   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_breakr   c                    | j         J |r| j                                         s|s| j                             |          S d S r   )r  exit_on_graph_breakexit)r   r   r#  s      r   r&  zBlockStackEntry.exit  s[     ,,,	.#0DDFF	.	. $))"---	. 	.r   r  )r   rC   )r   r   r#  r   r   r   )r   r   r   r   r  r  r"  r&  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 )ReturnValueOpNr(  r   r   r   r+  r+    r)  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   r2  r   r+   r   r   )r   inspect	signature
parametersr]   	functoolswraps)r.  r8  r6  r7  s     @@r   stack_opr>    sr    !"%%011ER  F_RD D D D D D D Kr   modobjectr   c                    t           j        dk     rdS t          | t          j                  sdS | j                            d          d         t           j        v S )N   
   F.r   )sysversion_info
isinstancetypes
ModuleTyper   splitstdlib_module_names)r?  s    r   	is_stdlibrM    sR    
'!!uc5+,, u<c""1%)@@@r   r   truth_fnCallable[[object], bool]r4  c                   |t           j        us|rdS t          | j        t                    sJ | j        }| j        |         }|j        dk    rdS |dz  }d}| j        |         }|j        dk    rbt          |j        t                    sdS |j        }|dz  }| j        |         }|j        dvrdS |dz  }|j        dk    r|dz  }| j        |         }|j        dk    rdS | 	                    t          j        |                     d	S )
NFLOAD_ASSERTION_ERRORr   zassertion error
LOAD_CONST)CALL_FUNCTIONPRECALLCALLrT  RAISE_VARARGST)operatortruthrH  r   r   instructionsr   argvalr   r4  r^   create)r   rN  r4  current_instruction_pointerr   	error_msgs         r   &_detect_and_normalize_assert_statementr^    sA   , 	&&4&ud.44444"&":89D{,,,u1$ "I89D{l""$+s++ 	5K	 	$q(# !<=;BBB5 	$q(#;)##'1,' !<={o%%uII%i001114r   Fr   code_optionsr   exc_info
user_stackOptional[StackSummary]r   c                   |#t           j        j                                        }	 |d         j        |d         j        f}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        |                    }d|d          d|d          d	| d
t          j        r| d| dz  nt          |          z  t           j                            dd fd           t"                              t&          j                  r7t*          s0t-          j        |          rt"                                         d S t"                              d|d         |d         |           d S )Nco_filenameco_firstlinenor   zGraph break in user code at r   r   r   z
Graph Break Reason: z
User code traceback:
zQ
========== most recent `torch.compile` tracing attempt started here ==========

a}  
NOTE: the most recent `torch.compile` tracing attempt might not be where you applied `torch.compile`! This is due to how graph breaks are implemented - the optimized code object returned by Dynamo will call another Dynamo-generated resume function and tracing is re-enabled by calling the resume function as a normal Python function, which Dynamo intercepts as a top-level frame.
artifactc                     dddS )Ndynamo_graph_break_reasonstring)r   encodingr   r   r   r   r   z!log_graph_break.<locals>.<lambda>R  s    / 
 
 r   c                 <     d rt          j                    nd S )Nr   r   )	traceback
format_exc)r`  user_stack_traces   r   r   z!log_graph_break.<locals>.<lambda>V  s*    .^^H2\)2F2H2H2HZ\^^ r   )metadata_fn
payload_fnzmGraph break (user stack suppressed due to duplicate graph break) in user code at %s:%s
Graph Break Reason: %s)torch_guardsr   extract_stackr   r   
IndexErrorr   verboser5   r   rm  format_listr3   r   _loggingtrace_structuredgraph_break_logisEnabledForr   DEBUGexplainrS   r   debug)	r_  r   r`  ra  	frame_locstack_above_dynamo_formattedstack_above_dynamouser_stack_formattedro  s	     `     @r   log_graph_breakr  !  s^    ]1??AA

^,jn.CD		 
 
 
 ')*
			
 $& ~ 8355')ww!"455(
 (
$$ ,--
:
+J77
779#8#D#DEE	!y| 	! 	!il 	! 	!%	! 	! 	!  ~ 6+ H H#H H H	
 	C 4555	N##
 
 _^^^^ $    	$$W]33

 ,/	::
 		
 	
 	
 	
 	
 	|aLaL		
 	
 	
 	
 	
s   A A! A!8Callable[[InstructionTranslatorBase, Instruction], None]c                b     ddg t           j        d	 ddfdd fd}|S )NData-dependent branchingzyDetected data-dependent branching (e.g. `if my_tensor.sum() > 0:`). Dynamo does not support tracing dynamic control flow.1Use `torch.cond` to express dynamic control flow.r   r   r   r   r+   valuerY   	extra_msgr   r   r   c           	     $   t          | j        t          
d| 	                     |                                 sJ |                                 rEd|                                  }t                              |           t          j	        |          | 
                    |           t                              d           | j                            | t          dt          |           | |                                 g          d          }|                                  |                     | j        |d	          }r| 
                    |           |j        J |                     |j        |d	          }t(          j        d
k    r(| j                            t/          d          g           t/          |j        |d                   }|                    |           | j                            |g|z   |z              d S )Nattempted to jump with gb_typecontextexplanationhintsr   BSkipping frame because there is a graph break in a for/while loop
zgeneric_jump triggered compilezgeneric_jump r   r   
stack_popsFrC     TO_BOOLr   )r  )r  r_  r4   should_compile_partial_graphmaybe_has_backedgeframe_summaryr  infor   	SkipFramer4  r~  r  compile_subgraphr<   rW   popcreate_call_resume_atnext_instructionr  rF  rG  add_output_instructionsr&   r   copy_positions)r   r   r  r  msgall_stack_locals_metadataif_nextif_jump	jump_inst_explanation_gb_type_hintsr4  s            r   jump_graph_breakz&generic_jump.<locals>.jump_graph_break  s7    	- 9%99(	  	
 	
 	
 	
 0022222""$$ 	%*%%''* *  HHSMMM-$$$		%		2333$(K$@$@%;;	;;d>P>P>R>R=S   %A %
 %
! 	


,,!#<e
 
  	IIe{&&&,,K2E
 
 w&&K//1CI1N1N0OPPP&t{71:FFF	  &&&++YK',AG,KLLLLLr   c                   |                                  }t          j        rUt          |           rC|                                  }|                                rt          |                                          r|                     |          S |                                 r | ||           n(t          dd| dg t          j        ddd           t          |t                    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 t          |t                    r#|                                 r | ||           d S t          |tN                    rZ| j        (                    |j)                  } |          r.r| &                    |           |                     |           d S d S t          |tT                    r	 |+                    | 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           }t          |tb                    rat          |j2        t
          tf          f          r@ |j2                  r.r| &                    |           |                     |           d S d S t          |t&                    rD|4                                r.r| &                    |           |                     |           d S d S t          dd|	 d| dg            d S  d          r.r| &                    |           |                     |           d S d S t          |t                    sp|5                    |           r[ tm          |7                    |                               r.r| &                    |           |                     |           d S d S t          |t&                    r	 t          |j        t           j                  r|4                    | j                  }
ntq          |j        d	k              }
nC# tX          j9        $ r1}|                                 r | ||d|           cY d }~S  d }~ww xY w |
          r.r| &                    |           |                     |           d S d S t          |tt          j;                  r; d          r.r| &                    |           |                     |           d S d S ddl!m<} |j!        ] ||j!                  rM |=                                          r.r| &                    |           |                     |           d S d S t          dd| g t          j        d           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__z3Data-dependent branching with non-constant __bool__zmethod: z
, result: z}Attempted to perform data-dependent branching on a user-defined object with a __bool__ method that did not return a constant.Tr   )r  r   )is_constant_sourcer  r  r  )>r  r    rewrite_assert_with_torch_assertr^  is_python_constantr   as_python_constantjumpr  r7   r   FUNDAMENTALrH  r|   r  create_proxyrr  _assert_asyncrV   r{   sym_numSymBoolfxexperimentalsymbolic_shapesexpect_truer   
USER_ERRORscalar_tensorr\   rP   noderb   sourcer;   
make_guardr:   SEQUENCE_LENGTHr4  ry   get_submodule
module_keyr   var_getattrr   ObservedAttributeErrorhandle_observed_exceptionrj   r   r^   r  r   evaluate_exprhas_unpack_var_sequencer   unpack_var_sequencer   	UserErrorr   BackwardHookVariabler  get_real_value)r   r   r  r]  sym_exprresultscalar_to_tensor_proxyscalar_to_tensorr?  xeval_resulter  r  r  r4  rN  s                r   innerzgeneric_jump.<locals>.inner  sN	   !%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   * %00 ((#' '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##%% n	 %!233 U Uel55l6RSSTTTx002233   %IIe$$$		$   
 u~//d	484U4U4W4Wd	 T4//////00 `	+++E,<==Cx}}   %IIe$$$		$    899 Y		%%dJ77-   -d333))$	::AA1   1$777AAA !/00 $r266f&677 JL4+= =   x-- ( - IIe,,,		$( (  88 ++-- ( - IIe,,,		$( (
 % U @1 @ @ @ @%X       8D>> $ )		%(((IIdOOOOO$ $ E>22 0	u7T7T8
 8
 0	 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$ $
 !6=e== ,*6K	     s[   $O; ;#Q$P65Q$6%QQ$QQ$#Q$AZ' '['6%["['![""[')r   )
r   r   r   r+   r  rY   r  r   r   r   r   r   r   r+   r   r   )r   r  )rN  r4  r  r  r  r  r  s   `` @@@@r   generic_jumpr  r  s     *H	@ 		&;F 	4M 4M 4M 4M 4M 4M 4M 4M 4M 4Ml~ ~ ~ ~ ~ ~ ~ ~ ~@ Lr   r   YCallable[[Callable[..., None]], Callable[[InstructionTranslatorBase, Instruction], None]]c                     d fd}|S )Ninner_fnr  r   r  c                Z     t          j                   d fd            }dfd
|S )Nr   r   r   r+   r   r   c                   |                                  }|                    |           r|j        J  | ||j                  S 	  | |          S # t          $ rJ}| j        r=|                                 t          dd| j         ddgt          j        |           t          |t          j                  r |                                 s t          | j        dt          |          |j                   |                                 rFd|                                  }t&                              |           t          j        |          ||                                 |                    d	           t/          |j        |j                  |_        Y d }~nd }~w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_excT)r`  r   ra  r  graph_break)	speculater   r   r8   active_generic_context_managersremove_from_statsr7   r   CAUSED_BY_EARLIER_GRAPH_BREAKrH  r   UncapturedHigherOrderOpErrorr  r  r_  r   
real_stackr  r  r  r  r  add_to_statsr<   r  r   r   )r   r   speculationexcpr  handle_graph_breakr  s        r   wrapperz>break_graph_if_unsupported.<locals>.decorator.<locals>.wrapper  s   ..**K!!$'' J")555))$k6HIII)Sxd+++ 'S 'S 'S7  **,,,$ R jDDh j j %Dc.L "&	 	 	 	 dC$DEE 88:: %!t99#	    **,, 72--//2 2  HHSMMM-,,$6&&(((!!-000%7$/%R%R""""""O'SP 11$2KLLLLLs   A F(E 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                  }| j        	                    | ||z
            }t          |           }g }| j        D ]}t          |j        t                    rA|                    |                                                    |j        |                     ]|j        J t          |j        t&                    sJ |j                            |           |                    |                                                    |j        |                     | j                            |                                           ~t           j        dk    r|j        dk    r| j        | j                                        nd}t5          |          dk    r<t           j        dk     sJ | j                            t7          d	|
          g           |j        J t9          |j        d          }	|	d                             |           | j                            |	           n?|j        J t?          j        |          }
d |
_         | j                            |
g           | j                            |           | !                    |z
             tE                    D ]#}| #                    tI                                 $| j                            | %                    | j&        |d                     d S )NrC     rC     rU  rT  r  r   r   r  KW_NAMESrZ  Frd  )'rF  rG  r   disstack_effectopmapargopcoder  r  r0   block_stackrH  r  r~   extend_outputr"  try_except_torch_function_moder_  r_   reconstruct_typetry_finallyr  get_instructionskw_namesr  r   r&   r#   r  r  copyexn_tab_entryr5  ranger4  rx   r  r  )r   r   r   r  r  cgcleanupbr  
call_insts	inst_copyr   r4  s               r   r  zIbreak_graph_if_unsupported.<locals>.decorator.<locals>.handle_graph_break  s     G++$w..K6))  #/Ii($(   $SYv%6AA B  #/TXFF(,(D(DV|0C )E ) )% 4B)+G% V V an.GHH $$DDOW   
 ~111!!.3JLLLLL//333  !:!:2?G!T!TUUUU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IId\)***4[[ - -		/++,,,,K//**)+De     r   r  )r   r   r   r+   r   r<   r   r   )r<  r=  )r  r  r  r4  s   ` @r   	decoratorz-break_graph_if_unsupported.<locals>.decorator~  ss     
	"	"/	M /	M /	M /	M /	M /	M 
#	"/	MbH	 H	 H	 H	 H	 H	T r   )r  r  r   r  r   )r4  r  s   ` r   break_graph_if_unsupportedr  y  s0    
     B r   c                  $     e Zd ZdZd fdZ xZS )BytecodeDistpatchTableMetazTInstalls a `cls.dispatch_table` on every subclass to speed up calls to self.OPCODE()r   typer   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  r7   r   SUPPORTABLE)r   r   s     r   _missingz5BytecodeDistpatchTableMeta.__init__.<locals>._missing  sr    2!44d44f\bfff_F _ _ _ '2		 	 	 	 	 	r   c                `    i | ]*\  }}|t          |t          j        |                    +S r   )getattrr<  partial)r   r   opr  r   s      r   r   z7BytecodeDistpatchTableMeta.__init__.<locals>.<dictcomp>  sH     
 
 
 VY%6x%H%HII
 
 
r   c                :    g | ]}                     |          S r   )get)r   idispatch_tables     r   
<listcomp>z7BytecodeDistpatchTableMeta.__init__.<locals>.<listcomp>  s'    IIIn0033IIIr      )r   r   r   r   r   r   )super__init__r  r  r   r   r  )r   r   r  r  r  r  	__class__s   `   @@r   r  z#BytecodeDistpatchTableMeta.__init__  s    uc***
	 
	 
	 
	
 
 
 
 
!ioo//
 
 
 JIIIU4[[IIIr   )
r   r
  r   r   r  r   r  r   r   r   )r   r   r   r   r  __classcell__r  s   @r   r	  r	    sM        ^^J J J J J J J J J Jr   r	  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   r&  r   s    r   clear_current_exceptionz&ExceptionStack.clear_current_exception/  s    "&r   valr   c                >    |                      |           || _        d S r   )._set_context_and_break_context_reference_cycler&  r   r*  s     r   set_current_exceptionz$ExceptionStack.set_current_exception2  s$    ;;C@@@"%r   c                t    | j         J |                     | j                    |                                  d S r   )r&  r   r)  r   s    r   move_current_exception_to_stackz.ExceptionStack.move_current_exception_to_stack6  s>    &222D+,,,$$&&&&&r   c                "    | j         J | j         S r   r(  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
  r^   r   r$  _set_context_recursiveset_context)r   r*  r3  ctxprevs        r   r7  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                      d S |}||u rd S |r|j         }| }\r  )r6  r
  r^   r8  )r   r*  oslow_oslow_update_toggler  s         r   _break_context_reference_cyclez-ExceptionStack._break_context_reference_cycleJ  s    
 F"	8mGG}} 000#~~.t44555AF{{ ! ,+%7!7%	8r   c                    |                      |t          | j                  dz
             |                     |           d S )Nr   )r7  r   r$  r?  r-  s     r   r,  z=ExceptionStack._set_context_and_break_context_reference_cyclee  sC     	##CT_)=)=)ABBB++C00000r   c                4    | j                                         S r   )r$  r  r   s    r   r  zExceptionStack.popl  s    ""$$$r   c                :    | j                             |           d S r   )r$  r   r-  s     r   r   zExceptionStack.appendo  s    s#####r   c                *    t          | j                  S r   )r   r$  r   s    r   r  zExceptionStack.__len__r  s    4?###r   r   c                    | j         |         S r   )r$  )r   r   s     r   __getitem__zExceptionStack.__getitem__u  s    u%%r   r   c                &    d| j         d| j        S )Nzself._exc_stack=z - self._current_exception=)r$  r&  r   s    r   __str__zExceptionStack.__str__x  s    A$/AAt'>AAAr   r   )r*  r   r   r   )r   r   )r*  r   r3  r   r   r   )r   r   )r   r   r   r   r   )r   r   r   r   r   r   r   r$  r   r&  r)  r.  r0  r2  r7  r?  r,  r  r   r  rE  rG  __repr__r   r   r   r#  r#    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   r#  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d0Zdd1Zdd3Zdd4Zdd5Zdd6Z	dd;Z
dd?Zdd@ZdddCZddDZddEZddFZej        dGk    rddIZnddJZeddK            ZddMZddNZddOZddRZddTZddUZddWZddXZddYZddZZdd[Z dd\Z!eZ"d d^Z#dd_Z$dd`Z%e&j'        dda            Z(ddbZ)ddcZ*e+d!df            Z,d"diZ-ddjZ.ddkZ/e/Z0ddlZ1e+d#dn            Z2ddoZ3ddpZ4e4Z5e4Z6 e7e8j9        dq          Z: e7e8j;        dq          Z< e7e8j9        dr          Z= e7e8j;        dr          Z>ddsZ?ddtZ@dduZAddvZBddwZCddxZDddyZEddzZFdd{ZGd$d|ZHd%d~ZIddZJddZKddZLd&dZMddZNd'dZOddZPddZQddZRddZSddZTddZUddZV eWd          dd            ZX eWd          dd            ZY eWd          dd            ZZddZ[ddZ\ddZ]ddZ^ddZ_ddZ`ddZaddZbddZcd(dZdddZe eWd          dd            ZfddZgddZhddZiddZjddZkelfd)dZmddZnenZoddZpddZqeqZrddZsddZtddZuddZvddZwddZxddZyddZz eWd          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ddƄZddǄZddȄZddɄZddʄZdd˄ZeZdd̄Zdd̈́Zdd΄ZddτZddЄZddфZdd҄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  eWd           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ԐddӄZej        dGk    rddԄZ֐ddՄZאddքZؐddׄZِd,d-dلZ eWd          ddڄ            ZېddۄZܐdd܄Ze4Ze4Z e7e8j;        dq          Z e7e8j;        dq          Z e7e8j9        dq          Z e7e8j9        dq          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ddZddZ eWd          dd            ZddZddZddZddZddZddZ	 dd.dZd/dZddZd0dZed1d            Zej        d2d            Zd3dZ 	 	 d4d5 fdZ xZS (6  r   r=   r  dict[str, VariableTracker]symbolic_localssymbolic_globalsr}   symbolic_torch_function_statez$Optional[dict[str, VariableTracker]]post_prune_cell_and_freevarslist[VariableTracker]stackOptional[int]r   r+   current_instructionzlist[BlockStackEntry]r  r   r   zOptional[ConstantVariable]r  r   accept_prefix_instlist[Instruction]prefix_instsinline_depthinconsistent_side_effectszOptional[SpeculationEntry]current_speculationz	list[Any]r  r#  exn_vt_stackzOptional[ExecutionRecorder]exec_recorderz+Optional[Callable[[VariableTracker], bool]]strict_checks_fnstart_pointis_leaf_tracerz#Optional[InstructionTranslatorBase]parentz3list[tuple[VariableTracker, list[VariableTracker]]]debug_localsOptional[CompilePackage]packager   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)rW  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)rR  offsetr   rY  r   r   rZ  r^  )r   cur_tx
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   	list[str]c                    | j         d         S )Nco_cellvarsr_  r   s    r   cellvarsz"InstructionTranslatorBase.cellvars       //r   c                    | j         d         S )Nco_freevarsrn  r   s    r   freevarsz"InstructionTranslatorBase.freevars  rp  r   c                    t          | d          s.|                                 |                                 z   | _        | j        S )N_cell_and_freevars)r   ro  rs  ru  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   rv  )r   r   r   r   s      r   r   z?InstructionTranslatorBase.prune_dead_locals.<locals>.<dictcomp>  s@     -
 -
 -
1D**,,,, q,,,r   c                $    i | ]\  }}|v 	||S r   r   )r   r   r   readss      r   r   z?InstructionTranslatorBase.prune_dead_locals.<locals>.<dictcomp>  s+      
  
  
QQ%ZZAqZZZr   )rK  r   rN  r   rY  rR  )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.  rY   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   )rH  rY   )r   r  s     r   r   z:InstructionTranslatorBase.call_function.<locals>.<genexpr>  s@       
 
 q/**
 
 
 
 
 
r   r  r.  z$Attempt to trace forbidden callable )rH  rY   r   r   all	itertoolschainvaluesr   r  r.  callablerM   AssertionErrorr4  r   )r   r.  r   r}  r  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   Sequence[Any]r   r   c                x    t          |t                    st          |          }|                    | ||          S )zD
        Redirect the call to the generator "call_function"
        )rH  re   r   r   r.  r   r}  s       r   inline_generator_functionz3InstructionTranslatorBase.inline_generator_function  s<     "<== 	4/33BdF333r   c                    d| _         t          j        r8t          |                                          r|                     |||          S t                              | |||          S )zF
        A call to some user defined function by inlining it.
        F)r]  r   "enable_faithful_generator_behaviorr,   get_coder  InliningInstructionTranslatorinline_callr  s       r   inline_user_function_returnz5InstructionTranslatorBase.inline_user_function_return  sb     $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   rV  r9   f_codere  co_name)r   r   inline_depth_strfuncnamefuncname_strs        r   get_line_of_code_headerz1InstructionTranslatorBase.get_line_of_code_header
  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  re  r   rstrip)r   log_strlines      r   get_log_starts_line_log_strz5InstructionTranslatorBase.get_log_starts_line_log_str  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  re  r  is_trace_source_log_enabledtrace_source_logr~  rU   r  )r   r   s     r   starts_linez%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        r,t                              d|j        |j        | j                   |                     |           	  | j        |j                 | |           | j        j         S # t.          $ r  t0          j        $ r }|                     |           Y d}~dS d}~wt6          t8          f$ r Y dS t:          $ rA | j
        t<                              d            t<                              dd           Y nw xY w| j
                            | j                   dS )	z<Process exactly one instruction, return False we should exitNFr   zTRACE %s %s %sTzempty checkpointzstep triggered compiler`  ) rN   r   r   rY  rR  r  rP  r  is_non_empty_graphr  rX  r   step_graph_breakis_trace_bytecode_log_enabledtrace_bytecode_logr~  r   rZ  update_block_stackr  r  r  r  r   r   r   exception_handlerr+  r-  r8   r  r   )r   ipr   r  s       r   stepzInstructionTranslatorBase.step%  s=   $=$?$?!%:5*.*;B*?? 4#%6  	/T-... 
	1133	 ''))	
 (,~~'7'7D$'..t44 %%d+++u- 	$$ $+t{DJ   	%%%	?,D,T4888{...- 	 	 	$ 	 	 	""1%%%44444|, 	 	 	55 	? 	? 	?'/		,---II.I>>>>>		? 	 ::4;TUUUus%    (E	 	G"E==GAGGr  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   rd  )NOPJUMP_BACKWARDr   )r  r   r  r  r  r   )r   r   r   s      r   r  z,InstructionTranslatorBase.update_block_stackX  s     &E + ())Q..D,<R,@,GGG(8(<(CCC $((***** /.GGCC # +;S(S(S t/00A5555$((*****+ +(S(Sr   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   rY  r   s    r   r  z*InstructionTranslatorBase.next_instruction  s"    '333 !9::r   continue_instc           	     v   | j         j        rJ | j        J | j        rJ | j                             | dt          d|                                 g                    }| j        r?t          j	        sJ | j         
                    |                     ||d                     d S t          |           }| j         
                    |                    d          |                                g           |d         j                                        D ]g\  }}| j         
                    t#                      |                    |          |                                |                    |          g           h| j         
                    t'          d          t)          |          g| j                   d S )NTstep_unsupported)partial_convertr   rd  POP_TOP)r  output_instructionsrX  rP  r  r<   r  r^  r   nested_graph_breaksr  r  r0   create_load_constcreate_binary_subscrlocals_namesr   r%   create_storer&   r'   rY  )r   r  r  r  localidxs         r   r  z*InstructionTranslatorBase.step_graph_break  s   ;2222'333 :~ %)K$@$@ %&84;M;M;O;O:PQQ %A %
 %
!
 ; '	----K//**!#<d      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&          $ rq}t)          |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                                          tC          | tD                    r2| j        #                                 | j        $                                 nf# | j                                          tC          | tD                    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   r  zData-dependentFT)print_outputinclude_strideinclude_device)%r  r   r  re  r  push_txr   r\  r  	Exceptionis_tracing_resume_prologuer6   r
  r   r   with_traceback__traceback__r   r2   RuntimeErrorr   r  rr  r  GraphModule
nn_modulesgraphprint_readablepartial_fx_graphrZ  
get_recordexec_recordpop_txrH  r2  r  mark_bytecode_tracing_stop)r   r  readable_graphs      r   runzInstructionTranslatorBase.run  s    1	= 1	=dk-.../=##D)))#'#; 
))++  ))++     6 D8@#Aww3@ @7:1vv@ @  ).99t	D
  2   (    
 
 
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::<<<<=W1	= 1	= 1	= 1	= 1	= 1	= 1	= 1	= 1	= 1	= 1	= 1	= 1	= 1	= 1	= 1	= 1	= 1	=sz   J&C))B C)
C%AC  C%%C)(H)F+A,E33F+ &F&&F++H.A!JA#I22JJ	Jr*  Optional[VariableTracker]c                    |/t          |t                    sJ dt          |                       | j                            |           d S )Nz"push expects VariableTracker, got )rH  rY   rW   rP  r   r-  s     r   r4  zInstructionTranslatorBase.push  sP    {jo>>{{??? {> 	
#r   valsc                :    |D ]}|                      |           d S r   r4  )r   r  r*  s      r   	push_manyz#InstructionTranslatorBase.push_many  s,     	 	CIIcNNNN	 	r   c                4    | j                                         S r   )rP  r  r   s    r   r  zInstructionTranslatorBase.pop  s    z~~r   nc                X     g t           fdt          |          D                       S )Nc                8    g | ]}                                 S r   r  )r   r   r   s     r   r  z2InstructionTranslatorBase.popn.<locals>.<listcomp>
  s!    888!488::888r   )r   r   )r   r  s   ` r   r5  zInstructionTranslatorBase.popn	  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 )NrE  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)rZ  rZ  f_localsadd_local_varr4  rK  unwrapKeyError
startswithreplacer7   r   r  r  )r   r   r   new_names       r   	LOAD_FASTz#InstructionTranslatorBase.LOAD_FAST  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   )
rZ  rv  rK  r  side_effects	load_cellr4  rZ  r  r  )r   r   cellcontents_vars       r   
LOAD_DEREFz$InstructionTranslatorBase.LOAD_DEREF/  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   )	rZ  r  set_name_hintrK  rB   r  r
  r   r  )r   r   r   	loaded_vtr*  s        r   
STORE_FASTz$InstructionTranslatorBase.STORE_FAST8  s    {HHJJ	%%%%.T"555..00C99$$$$.1D+++ 65r   c                     | j         |j        = d S r   )rK  rZ  r  s     r   DELETE_FASTz%InstructionTranslatorBase.DELETE_FASTB  s     ---r   c                @   |j         |                                 v sJ | j        |j                  }|                                 }| j        j                            ||           t          |t                    sJ |j	        |
                    |j	                   d S d S r   )rZ  rv  rK  r  r  r  
store_cellrH  rs   
local_namer  )r   r   r  r*  s       r   STORE_DEREFz%InstructionTranslatorBase.STORE_DEREFE  s    {d44666666#DK0hhjj ++D#666$-----?&do..... '&r   r^   c                    |j         }|t          j        |j                  S | j        |         }|s/t          j        |j                  | j        |<   | j        |         }|J |S )Nr  )r  r^   r[  rZ  _constants_cache)r   r   r  r*  s       r   _load_constz%InstructionTranslatorBase._load_constQ  sq    H9#*====#A& 	+'7'>T['Q'Q'QD!!$'*C
r   c                V    |                      |                     |                     d S r   )r4  r  r  s     r   rR  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   )rZ  rZ  	f_globalsadd_global_var
f_builtinsbuiltinsload_builtinrL  r  r  r4  load_globalrY   buildrF   )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   rY   r  )r   module_namemodule_sourcefglobals_values       r   nn_modules_globals_vtz/InstructionTranslatorBase.nn_modules_globals_vtt  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 )Nr  r  r  )r  rF  rG  	PUSH_NULLr  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  rZ  rF   rL  r@  r  r  track_global_existingrH  r   r7   store_global)r   r   r  r   r  r  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   r  rF   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   <rE  _dot_	__import_)rr  ra  package_importer_package_imported_modulesr  r   add_import_sourcer  import_sourcesglobal_scopeupdate_co_namesrF   )r   r  r  aliasr	  s        r   r  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
        rE  r   z2attempted relative import beyond top-level packager   )rsplitr   ImportError)r   r   ra  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)rC  )
stacklevelzYcan't resolve package from __spec__ or __package__, falling back on __name__ and __path__r   __path__rE  r   )r	  r  r^  r  warning
rpartition)r   ra  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   rE  r  zBad import resultz%Import result is not a Python module.)r5  r  rZ  r@   LOCAL_MOD_PREFIXr	  rF   
__import__r0  r7   r   r  r<  r3  	partitionr  rZ  add_local_modrT   rI  rJ  r?   r4  rw   rW   )
r   r   r-  r>  r  recorded_namer  r  pkgtop_level_module_names
             r   IMPORT_NAMEz%InstructionTranslatorBase.IMPORT_NAME  s?   ))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                Z    |                      |           |                     |           d S r   )DUP_TOP
_load_attrr  s     r   IMPORT_FROMz%InstructionTranslatorBase.IMPORT_FROM  s,    Tr   rZ  c                <   || j         vrt          d| d          | j         |         }t          |          r?t          | j        j                  }t          ||          }t          j        | ||          S t          |          sJ t          j        |          S )Nzname 'z' is not definedr  )r  r8   r  rF   r  %name_of_builtins_dict_key_in_fglobalsrE   rY   r  rL   r^   r[  )r   rZ  r*  builtins_source
var_sources        r   load_builtin_from_argvalz2InstructionTranslatorBase.load_builtin_from_argval  s    ((?v???@@@of%C== 	6*A O +?FCCJ"(sJ???&s+++++#*5555r   c                `    |                      |                     |j                             d S r   )r4  rQ  rZ  r  s     r   r  z&InstructionTranslatorBase.load_builtin)  s*    		$//<<=====r   c                    | j         J | j        J |j        J t                                          d| j         | j        z
             | j        |j                 | _         | j         | _        d S )Nir_count)r   r\  r  rR   	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   rP  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   rX  r  s     r   SETUP_EXCEPTz&InstructionTranslatorBase.SETUP_EXCEPTC  rZ  r   c                8    | j                                          d S r   )r  r  r  s     r   	POP_BLOCKz#InstructionTranslatorBase.POP_BLOCKH  s    r   c                0    |                      |           d S r   setup_or_before_withr  s     r   
SETUP_WITHz$InstructionTranslatorBase.SETUP_WITHK      !!$'''''r   c           	         |j         J | j                            t          ||j         t	          | j                                       d S r   rX  r  s     r   SETUP_FINALLYz'InstructionTranslatorBase.SETUP_FINALLYN  sC    {&&&dk3tz?? S STTTTTr   c                0    |                      d            d S r   r  r  s     r   BEGIN_FINALLYz'InstructionTranslatorBase.BEGIN_FINALLYR  s    		$r   c                    |                      d          \  }}|J |                     |           |                     |                    | t          j        d           gdz  i                      d S )Nr  rC  )r5  r4  r   r^   r[  )r   r   r&  r   s       r   WITH_CLEANUP_STARTz,InstructionTranslatorBase.WITH_CLEANUP_STARTU  sl    IIaLL	c{{{		#		$$$T,<,CD,I,I+JQ+NPRSSTTTTTr   c                Z    |                      d           |                     d            d S )Nr  )r5  r4  r  s     r   WITH_CLEANUP_FINISHz-InstructionTranslatorBase.WITH_CLEANUP_FINISH[  s$    		!		$r   c                8   |                                                                  }	 |                    |           }|                     |           |                     |           d S # t          t
          j        f$ r}t          |t
          j                  rt          j        |            t          j
        dk    r<|                     |           |                     t          j        d                      |                     |           Y d }~d S d }~ww xY wNr  )r  realizenext_variabler4  StopIterationr   ObservedUserStopIterationrH  r  rF  rG  r^   r[  r  )r   r   itr*  r  s        r   FOR_ITERz"InstructionTranslatorBase.FOR_ITER_  s    XXZZ!!	""4((CIIbMMMIIcNNNNNs<= 	 	 	!S:;; 4-d333 7**
 		"		*1$77888IIdOOOOOOOOO	s   ?A) )D?BDDc                v    t          |t          j        t          f          r|                    | g i           }|S r   )rH  r   r]   r   r   r-  s     r   _create_exception_typez0InstructionTranslatorBase._create_exception_types  s@    )+-NO
 
 	2
 ##D"b11C
r   r   c                   |                      |          }t          | j                  rVt          |t          j                  r<|j        t          u r.t	          j        t                    
                    | g i           }| j                            |           |                     |          r't          j        |j                  } |d|           t!          dt#          t                    dg t$          j                   d S )Nraised exception zFailed to raise exceptionz.Attempted to raise a non-Exception type/value.r  )ru  r,   r  rH  r   rt   exc_typerp  r]   r  r   rY  r.  _isinstance_exceptionr   get_dynamo_observed_exceptionr7   r   r   r  )r   r*  observed_exception_types      r   _raise_exception_variablez3InstructionTranslatorBase._raise_exception_variable|  s    ))#..
 %%	V3	 ;<<	V --+L99GGbRTUUC 	//444 %%c** 	E&)&G&U&U#))*Cc*C*CDDD/HHH1%01		
 	
 	
 	
 	
 	
r   c                z   |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         }|                     |           d S | 
                                }| 
                                }	 |                     |           | j                                        }|                     |          }|                    | t          d          |           d S # | j                                        }|                     |          }|                    | t          d          |           w xY w)Nr   zNo active exception to reraiser   rd  r   	__cause__)r  r   rY  r^   r   raise_observed_exceptionr  ry  r|  rP  r  r2  ru  call_setattr)r   r   r  r*  from_vtcurr_exccauses          r   rV  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**3///// hhjjG((**CR..s333  ,BBDD33G<<%%d,<[,I,I5QQQQQ  ,BBDD33G<<%%d,<[,I,I5QQQQs   =E& &AF:c                    | j         d         }t          |t                    sJ |j        t          u rt          dddg            d S |                     |           d S )Nrd  z CLEANUP_THROW with StopIterationr   zRReceived StopIteration when handling generator.throw/close. This is not supported.r  )rP  rH  rt   rx  rp  r7   RERAISEr   r   toss      r   CLEANUP_THROWz'InstructionTranslatorBase.CLEANUP_THROW  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 )Nr  )rF  rG  r  rZ  r|  r4  )r   r   r*  r   _exc_tbs         r   r  z!InstructionTranslatorBase.RERAISE  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                P    t          |t          j        t          t          f          S r   )rH  r   rt   r   r   r-  s     r   ry  z/InstructionTranslatorBase._isinstance_exception  s(    +12
 
 	
r   c                   t           j        dk    rot          | j                  dk    sJ | j        d         }| j        d         }|                     |          sJ t          |j                  }t          d           }nnt          | j                  dk    sJ | j        d         }| j        d         }|                     |          sJ t          |j                  }t          d           }|                     ||||gi            d S )Nr     rd     ir  )	rF  rG  r   rP  ry  r]   rx  r^   r   )r   r   r.  r*  typtbs         r   WITH_EXCEPT_STARTz+InstructionTranslatorBase.WITH_EXCEPT_START  s   w&& tz??a''''BB*R.C--c22222!#,//C!$''BBtz??a''''BB*R.C--c22222!#,//C!$''B2S"~r22222r   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                                         t#                     t$          u r
 |             t	           j                  rE j                                        }|j        j        dk    rω                     d            j                                         t	           j                  dk    r` j                                         t#                     t$          u r/t/          d	t1                    d
z   g t2          j                    j                                        }|j        j        dk    ω j                                        } j                                         t	           j                  |j        k    r1                                  t	           j                  |j        k    1t;          ddd d          } j                            t?          |d t	           j                                       t	           j                  dk    ru j        d         } 	                    t          j                                 	                    |            	                    t          j!        |j"                             nu 	                    t          j        d                       	                    t          j        d                       	                    t          j        d                       	                    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 exceptionrw  r   r  r  )rY  r2  r   rz  python_typerH  r7   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   r  EXCEPT_HANDLERrC  r   z#Observed exception (EXCEPT_HANDLER)z  This graph break is unexpected.r  g    .Ar  r  r   )#rF  rG  rR  r  r   rP  depthr  lastir4  r   r^   rg  rY  r2  r  r   r
  r2  r  r   r   r5  r7   r   r   
DYNAMO_BUGr0  r  r+   r   r  rx   r]   rx  )	r   r  r  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 		-((((( 
  """::!66633555&&4#$$ F' %)$4$8$8$:$:!',37GGG IIaLLL%))+++4+,,11 
((***::)>>>,(M(+,<(=(=,G"D-E&E(9(D&E    /.(,(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#7Gq&Q&Q# ''#$7s4:OO  
 t())Q..$($5b$9M IIi799:::IIm,,,IIi78NOOPPPP IIi8>>???IIi8>>???IIi8>>??? 		)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          d           }n| j        d         }|                     |           |                     |           | j                                         d S )Nr   rd  )r  r   rY  r^   r4  r0  )r   r   r*  prev_excs       r   PUSH_EXC_INFOz'InstructionTranslatorBase.PUSH_EXC_INFOy  s    ( hhjjt !!Q&&(8(>(>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 )Nr  r   rd  r  zYBug in Dynamo tracing of exception handling.Top of the block stack is not EXCEPT_HANDLER.rC  )
rF  rG  r  r   rY  r  r   r   r  r5  )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  r  rd  z Exception with bad expected typez"`except ...` has unsupported type rE  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   rP  r  rF  rG  rH  r]   rr   r   r   r7   r   r   r  ry  r   
issubclassrx  r.  r   )r   expected_exc_typesexc_instanceexpected_typesexpected_types        r   check_if_exc_matchesz.InstructionTranslatorBase.check_if_exc_matches  sI   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 !1J J  ttur   c                x    |                      t          j        |                                                      d S r   )r4  r   r^   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  )rZ  r  r4  r   r5  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   r]   iterr  r  s     r   GET_ITERz"InstructionTranslatorBase.GET_ITER		  s2    ?400488::,CCCCCr   r   r  c                    |                      |j                  }|                                 }|                     ||i            d S r   r5  rZ  r  r   )r   r   r   r.  s       r   rS  z'InstructionTranslatorBase.CALL_FUNCTION	  s@    yy%%XXZZ2tR(((((r   c           	        |j         dk    r$t          i           }|                                 }nc|j         dk    r)|                                 }|                                 }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   z%Variadic function call with bad flagszflags: zHAttempted to call a variadic function (CALL_FUNCTION_EX) with bad flags r  r  r  z0Variadic function call with bad args/kwargs typezargs type: z, kwargs type: z2Expected args to be a list and kwargs to be a dict)rZ  rb   r  r7   r   r  rF  rG  rH  rv   rm   has_force_unpack_var_sequencerr   force_unpack_var_sequencer   r]   call_custom_dictr   rW   r  keys_as_python_constantr   r   )r   r   
kwargsvarsargsvarsnullr.  s         r   CALL_FUNCTION_EXz*InstructionTranslatorBase.CALL_FUNCTION_EX	  s9    ;!*2..JxxzzHH[AJ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   c                   |                                  }|                     |j                  }|                                  }t          |t                    r|                                sJ |                                }|d t          |                    |t          |           d          }}t          t          ||                    }t          |          t          |          k    sJ | 
                    |||           d S r   )r  r5  rZ  rH  rr   r  r  r   r   zipr   )r   r   argnamesr   r.  kwargs_listr}  s          r   CALL_FUNCTION_KWz*InstructionTranslatorBase.CALL_FUNCTION_KWE	  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                `   |                      t          j        |d                     |j        d         }| j        d         |         }t
          j        dk     r+|                     t          j        ||                     d S |                     t          j        ||                     d S )Nr  r  r   co_namesr  )	rS  r   r  rZ  r_  rF  rG  rK  LOAD_METHODr   r   r  rZ  s       r   LOAD_METHOD_SUPERz+InstructionTranslatorBase.LOAD_METHOD_SUPERQ	  s    ;.tA>>>???k!n":.s3g%%OOK/VDDDEEEEE[0fEEEFFFFFr   c                    |                      t          j        |d                     |j        d         }| j        d         |         }|                     t          j        ||                     d S )Nr  r  r   r  )rS  r   r  rZ  r_  rK  r  s       r   LOAD_ATTR_SUPERz)InstructionTranslatorBase.LOAD_ATTR_SUPERZ	  sk    ;.tA>>>???k!n":.s3+D@@@AAAAAr   c                   |                      |           |                                 }t          j        dk    r,|                     |           |                     |           d S t          j        dk    r,|                     |           |                     |           d S |                     |           |                     d            d S )Nr  r  )rK  r  rF  rG  r4  r  r   r   objs      r   r  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_METHODp	  sV    yy%%

}}}XXZZ2tR(((((r   c                    |                                  }t          t                                        | |t	          j        |j                  gi           }|                     |           d S r   )r  r]   r  r   r^   r[  rZ  r4  )r   r   r  r  s       r   rK  z$InstructionTranslatorBase._load_attrw	  sb    hhjj ))77")$+667
 

 			&r   c                    t           j        dk    r!|j        dz  r|                     |           d S |                     |           d S )Nr  r  )rF  rG  r  r  rK  r  s     r   	LOAD_ATTRz#InstructionTranslatorBase.LOAD_ATTR	  sO    w&&x!|   &&&r   c                   |                                  }|                    |           r|                     |          S |                     d          \  }}t	          |t
                    r/t	          |t                    s| j        rJ d|j         d            	 t          t                                        | |t          j        |j                  |gi            d S # t          $ rd}|                                 s t                              dd           |                                 |                    d           Y d }~nd }~ww xY w|                    | j                   d S )Nr  zMutating module attribute z during export.zSTORE_ATTR triggered compileTr  r  )r  r   store_attr_graph_breakr5  rH  ry   r^   exportrZ  r]   setattrr   r[  r8   r  r  r~  r  r  r   r   )r   r   r  r*  r  r  s         r   
STORE_ATTRz$InstructionTranslatorBase.STORE_ATTR	  s   nn&&d## 	5..t44499Q<<Sc+,, 	ZEU5V5V 	 {  IT[III ?	*G$$22&-dk::C@  
 F 	* 	* 	*4466 II4tIDDD!!!NN=))))))))	* 	--d.GHHHHHs   AC! !
E+AE

Ec                   t          | j        d           |                                 st          dddg            | j                            | t          d|                                 g          d	          }| j                            t          j	        |          g           | 
                    d           | j                            |                     | j        |d
                     d S )NzSTORE_ATTR-caused graph breakr  z-Should not compile partial graph (STORE_ATTR)r   zDynamo has determined when encountering an unsupported STORE_ATTR instruction (i.e. `obj.attr = val`) that it should not compile the partial graph.r  
store_attrr  r  F)r  r_  r  r7   r  r  r<   r  r  r  r5  r  r  )r   r   r  s      r   r  z0InstructionTranslatorBase.store_attr_graph_break	  s	   )2QRRRR0022 	Go    %)K$@$@%lT5G5G5I5I4JKK %A %
 %
!
 	++TYt__,=>>>		!++&&%'@% 	
 	
 	
 	
 	
r   c                    |                                  }t          t                                        | |t	          j        |j                  gi            d S r   )r  r]   delattrr   r^   r[  rZ  r  s      r   DELETE_ATTRz%InstructionTranslatorBase.DELETE_ATTR	  sU    hhjj  ..")$+667	
 	
 	
 	
 	
r   r  disable_current_frame_resumec                p   d| _         |j        dk    rt          d          gS |j        dk    rt          d|j                  gS t	          | j        j                  }t          | j                  t          |d         j	                  z
  }||d         _
        |                    t          d|          gt          d          |                    d          |                                t          ddd	                     g }| |                               j        t          |          t          |          k    sJ t%          |          D ]\  }}|dk    r|rt'          |j        |j                  D ]\  \  }	}
}t-          t.          ||         j        |                   }|                    t3                                 |                    |           |                    g t7          d          |                    |          |                                |                    |	          t          d
                     |j        D ]\  }}
t-          t.          ||         j        |                   }|                    t3                                 |                    |           |                    g t7          d          |                    |          |                                |                    |j
        |j        |         z             t          d
                     g }g }t%          |          D ]b\  }}||         | u r|}nj        }tA          |          r|j!        sJ |j!        }tE          d|j#                   }|                    |           | u rtI          j%        |          tM          fdj        '                                D                       }tQ          |j)                  tM          fd|D                       }tM          fd|D                       }|                    t3                      |                    |          |                                t3                      g           |D ]m}|                    t3                      |                    |j
        |j        |         z             |                                gt7          d                     n|                    t          d          t          dt          |                    gt7          d          t          |j
        dd	                     n:tM          |j        '                                          }tM          |j)                  }tT          j+        dk     rt          |          dk    s
J d            t          j                  t          |j	                  z
  }tY          j-        j.        j/        |j#        tM          d j0        D                       |||tM          d j0        D                       tM          |j                  tM          |j                  tM          |j	                  tM          |                    }|                    |            tc          j2        j.                  3                    dd                       }|)ti          j5        |          tc          j2        |          d<   |j6        rj        7                    ||           d}n6j        7                    |tq          j9        |j:        |                     |}j;        'j;        <                    |j:        d         |           d|rddl=m>}  ||d                    |d         j6        r,|?                    |d         |d         |d         d	d           n0|                    |@                    |d         d	d                     |A                                 |A                                 t'          |||          D ]Q\  }}}|j6        r|?                    |||dd           '|                    |@                    |dd                     R|                    t          dt          |                    gt7          d                     |                    t3                      t3                      |                    d          |                                gt7          d          |                    d          t          d                     |                    g t          d          t          dd          t7          d          t          dd                     |                    t          dd          t          d          g           |C                                S )a7  
        Codegen resume function(s) and call it.
        Assumes that the unsupported instruction has already been run.

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

        Args:
            - inst: the instruction of the current (deepest) frame to resume at
            - all_stack_locals_metadata: metadata returned from OutputGraph.compile_subgraph - contains
                metadata such as local names, NULL positions, stack length, etc.
            - disable_current_frame_resume: If True, disable tracing on the current frame's resume function.
                Used for implementing nested step_graph_break.
        Nre  rf  r  r   
BUILD_LIST)r  r  TSTORE_SUBSCR__resume_at_c              3  P   K   | ] }|v |                                 v|V  !d S r   ry  )r   r   rh  r{  s     r   r   zBInstructionTranslatorBase.create_call_resume_at.<locals>.<genexpr>H
  sN       % %Ezzav/G/G/I/I&I&I &I&I&I&I% %r   c              3  $   K   | ]
}|v|V  d S r   r   r   r   argnames_null_sets     r   r   zBInstructionTranslatorBase.create_call_resume_at.<locals>.<genexpr>N
  s.       W WqAEV<V<V<V<V<V<V W Wr   c              3  $   K   | ]
}|v |V  d S r   r   r  s     r   r   zBInstructionTranslatorBase.create_call_resume_at.<locals>.<genexpr>O
  s.      %X%XAFWAWAWaAWAWAWAW%X%Xr   r  r  z&variables should not be NULL in < 3.12c              3  .   K   | ]}|j         j        V  d S r   )r  rg  r   r  s     r   r   zBInstructionTranslatorBase.create_call_resume_at.<locals>.<genexpr>
  s&      BB!ahoBBBBBBr   c              3  >   K   | ]}|                                 V  d S r   )r"  r  s     r   r   zBInstructionTranslatorBase.create_call_resume_at.<locals>.<genexpr>
  s*      @@akkmm@@@@@@r   orig_graphmodulec                     d S r   r   r   r   r   r   zAInstructionTranslatorBase.create_call_resume_at.<locals>.<lambda>
  s    D r   r   r   )	skip_coderd  FDELETE_SUBSCRrC  LIST_EXTENDr  )Dr   r   r&   rZ  r0   r  root_txr   rP  stack_null_idxes	num_stackr  r$   r  r  r"   r   r^  	enumerater  stack_ctx_argsstack_ctx_idxes_origr   r_   append_outputr%   r  r)   locals_ctx_argsrK  r  r  r-   r  r.   rg  r   rY  r!  keysr  locals_null_keysrF  rG  rA   lookupr  r   r  r/   get_contextr  weakrefrefrr  install_global_unsaferI  FunctionTyper	  ra  add_resume_function
eval_framer  make_function_with_closureload_function_namer  r(   r  ) r   r   r  r  r  current_num_stacktxesr  metajr   j_origr9  r   resume_namesresume_codesresume_instresume_nameall_argnamesr  argnames_nullr  	stack_lennew_codeorig_graphmodule_maybepackage_namer  r   coder  rh  r{  s                                 @@@r   r  z/InstructionTranslatorBase.create_call_resume_at	  s.   4 $( ;.((&~6677[N**&~dkJJJKKt{*++  
OOc%a(9/
 /
 
 2C!!$.
"<5FGGG	Q	 $$Q''		
 ''))	 %Q400		
 	
 	
* 6: KK]F   4yyC 9:::::: !!:;; "	 "	GAtAvv6v"%d&94;T"U"U  A2DGM&4IJJ  !1!1222$$R(((  $Q,,Q// //11 ,,Q//	
 +>::     /  a2DG4KD4QRR  !1!1222$$R(((  $Q,,Q// //11 ,,T^d>OPT>U-UVV	
 +>::   " -/ !:;; v	 v	GAt!WF~~"$5
  ,, 1")))))0#$G;3E$G$GHHK,,, ~~)&*={KK$ % % % % %#388::% % %    
 %((=$>$>!  W W W WL W W WWW %%X%X%X%X%X%X%X X X   &((,,Q////11&((	   $  C$$*,,00 $1B31G G  3355 )^^	 	 	 	   *955*<S]]KKK %Q
 -T^T4HH	 	 	 	 !!2!7!7!9!9:: %d&; < <'))=))Q...0X... FL))C0E,F,FFI'='D"BBv/ABBBBB@@V-?@@@@@d)**d*++d+,,l##( (H )))&\%=fm%L%L%P%P"LL& & & &" &1IP*J J(223EF
 # 
+33KJJJ# 33&x1A;OO    +~)22f.z:L   ( 	'------Il1o&&& ' 	O))R,r*L,<dA    R22<3CT1MMNNN 	!$lCC 	H 	HNBd H--b$eQGGGG  !6!6tUA!F!FGGGG
"<S5F5FGGGQ	
 	
 	
& 	    $$R(('')) Q $$R(( #?33	
 	
 	
  	a"<Q777 Q
 #=a888	
 	
 	
 	"#51===">22	
 	
 	
 ""$$$r   c                    t           j        dk    r0| j        j        }|r"| j        r|j        | j        d         j        urdS t          d | j        D                       o| j         o| j         o| j	         o| j
         S )Nr  rd  Fc              3  >   K   | ]}|                                 V  d S r   )r  r  s     r   r   zIInstructionTranslatorBase.should_compile_partial_graph.<locals>.<genexpr>
  s*      ::A::::::r   )rF  rG  rR  r  r  r  r  	one_graphr   r  r  )r   r   s     r   r  z6InstructionTranslatorBase.should_compile_partial_graph
  s    w&&,:E $(-D<LR<P<W(W(Wu::)9::::: 9N"9--9 339 88	
r   r   c                l    |                      d          \  }}}|                    | d||gi            d S )NrC  __setitem__r5  call_method)r   r   r*  r  keys        r   r  z&InstructionTranslatorBase.STORE_SUBSCR  s9    		!S#mc3Z<<<<<r   c                h    |                      d          \  }}|                    | d|gi            d S )Nr  __delitem__r   )r   r   r  r"  s       r   r  z'InstructionTranslatorBase.DELETE_SUBSCR
  s5    99Q<<SmcUB77777r   c                ~    |                      |j                  }|                     t          |                     d S r   )r5  rZ  r4  rr   r   r   r   s      r   BUILD_TUPLEz%InstructionTranslatorBase.BUILD_TUPLE  5    		$+&&		-&&'''''r   c                ~    |                      |j                  }|                     t          |                     d S r   )r5  rZ  r4  rq   r&  s      r   BUILD_SLICEz%InstructionTranslatorBase.BUILD_SLICE  r(  r   c                    |                      |j                  }|                     t          |t	                                           d S Nmutation_type)r5  rZ  r4  rp   rX   r&  s      r   r  z$InstructionTranslatorBase.BUILD_LIST  sA    		$+&&		,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_ONLYr7   r5  rZ  rc   rX   r4  )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-  )r5  rZ  extendr  NotImplementedErrorr7   r   r   r  r4  rX   )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  )r8  rr   r  s     r   BUILD_TUPLE_UNPACKz,InstructionTranslatorBase.BUILD_TUPLE_UNPACK6  s!    t77777r   c           	         |                      |j        dz            }t          t          |d d d         |dd d                             }|                     t          |t                                           d S )Nr  r   r-  )r5  rZ  r   r  r4  rb   rX   )r   r   r   ds       r   	BUILD_MAPz#InstructionTranslatorBase.BUILD_MAP;  sq    		$+/**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   )r]   r   r   )r   r  r   s     r   r  z>InstructionTranslatorBase.BUILD_MAP_UNPACK.<locals>.<listcomp>C  s5    SSS&&44TA3CCSSSr   r-  )r5  rZ  rH  rb   updater   r4  rX   )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  r5  rZ  rH  rr   r  r  r   r4  rb   r   r  rX   )r   r   r  r  s       r   BUILD_CONST_KEY_MAPz-InstructionTranslatorBase.BUILD_CONST_KEY_MAPQ  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  )r5  rZ  r  rP  rn  rH  rb   r!  )r   r   r   r   r  s        r   MAP_ADDz!InstructionTranslatorBase.MAP_ADDa  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  rZ  r  rP  rH  rc   
is_mutabler!  r   r   r   r  s       r   SET_ADDz!InstructionTranslatorBase.SET_ADDi  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@  rG  rI  s       r   
SET_UPDATEz$InstructionTranslatorBase.SET_UPDATEr  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  rZ  r  rP  rn  rH  rp   rH  r  r  mutationr   r   rI  s       r   LIST_APPENDz%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 )	Nr  co_qualnamer  r     r  r  r   )r  rF  rG  r  r   r  r^   r[  rR  r4  rg   r	  )	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           	     P                                      }t          |t                    r*|                     t	          |j                            }nt          |t                    rht          |j        t                    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)idxesc                <    g | ]}t          |                   S r   )r\   )r   r  proxyr   s     r   r  z=InstructionTranslatorBase.UNPACK_SEQUENCE.<locals>.<listcomp>  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  rH  r|   r  r   rZ  ru   r  r  as_proxyr   r  r  r7   r   r   r  r   r  r   r4  )r   r   r7  r*  r  r]  s   `    @r   UNPACK_SEQUENCEz)InstructionTranslatorBase.UNPACK_SEQUENCE  s   hhjjc>** 	))$eDK6H6H)IICC_-- 	*SWn2U2U 	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     rS  z%Failed to unpack object for UNPACK_EXz; cannot be unpacked into a list for the UNPACK_EX bytecode.r  )rZ  r  r  r   r  r   r   r4  rr   r7   r   r   r  )
r   r   prefixsuffixr7  r  vals_prefix	vals_listvals_suffixitems
             r   	UNPACK_EXz#InstructionTranslatorBase.UNPACK_EX  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   c                @    | j         rt          ddddg           d S d S )Nz#Forced graph break on leaf functionr   z:Forced graph break for nested graph break testing purposeszGSet torch._dynamo.config.debug_force_graph_break_on_leaf_return = Falser  )r]  r7   r  s     r   graph_break_on_leaf_functionz6InstructionTranslatorBase.graph_break_on_leaf_function  sI     	=X]	     	 	r   c                J    |j         dk    r|                     |           d S d S )NGRAPH_BREAK_IF_LEAF)rZ  rj  r  s     r   r  zInstructionTranslatorBase.NOP  s2    ;///--d33333 0/r   c                .    |                                   d S r   r  r  s     r   r  z!InstructionTranslatorBase.POP_TOP      




r   c                    |                                  }|                                  }|                     |           |                     |           d S r   r  r4  r   r   ar  s       r   ROT_TWOz!InstructionTranslatorBase.ROT_TWO  s>    HHJJHHJJ		!		!r   c                    |                                  }|                                  }|                                  }|                     |           |                     |           |                     |           d S r   rp  )r   r   rr  r  cs        r   	ROT_THREEz#InstructionTranslatorBase.ROT_THREE  sZ    HHJJHHJJHHJJ		!		!		!r   c                N   |                                  }|                                  }|                                  }|                                  }|                     |           |                     |           |                     |           |                     |           d S r   rp  )r   r   rr  r  ru  r<  s         r   ROT_FOURz"InstructionTranslatorBase.ROT_FOUR  sv    HHJJHHJJHHJJHHJJ		!		!		!		!r   c                    |                                  }|                     |           |                     |           d S r   rp  )r   r   rr  s      r   rJ  z!InstructionTranslatorBase.DUP_TOP  s1    HHJJ		!		!r   c                    |                                  }|                                  }|                     |           |                     |           |                     |           |                     |           d S r   rp  rq  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  rC  )r]   r   r   repr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_specrT  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   )LazySymNodeFormatStringrl   r@  rC  z{:})r  rH  r{   torch._dynamo.variables.lazyr  rl   r[  r  r4  r  r^   r  r   r]   r   format)r   r  rT  r  r  rl   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   )r  r  r^   r[  r  )r   r   rT  r  s       r   FORMAT_VALUEz&InstructionTranslatorBase.FORMAT_VALUE7  sY       DLT!!xxzzHH'.r22H!!(E222r   c           
        g }g }i }|j         J |                     |j                   D ]N}t          |t                    r+|                    d           |                    |           Ct          |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                   P|                     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   )r  r5  rH  r^   r   r   StringFormatVariableformat_stringr4  sym_argsr  r  
sym_kwargsr7   r   r  r@  r   r4  r[  r   )r   r   format_string_partsr   r}  parts         r   BUILD_STRINGz&InstructionTranslatorBase.BUILD_STRINGA  s   )+&(-/x###IIdh'' 	 	D$ 011 #**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  r  )rZ  r&   r  )r   r   
new_argvalnew_insts       r   IS_OPzInstructionTranslatorBase.IS_OPb  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$ rw}t          |t                    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__)rZ  r5  r4  r!  r   ObservedTypeErrorr8   rH  r  r  rY   r  r>   	UNARY_NOT)r   r   leftrightr  r  s         r   CONTAINS_OPz%InstructionTranslatorBase.CONTAINS_OPk  sF   {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& &C3<A-C..C3c                   |                                  }|j        dk    sJ |j        J | j        |j                  }t	          |t
                    sJ |                                sJ |                    | d|gi            d S )Nr   r4  )r  rZ  r  rP  rH  rp   rH  r!  rI  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   )r4  r]   r!  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 )Nrd  zgenerator raised StopIterationr6  r  )
rP  ry  rx  rp  r   r]   r  r   r^   r  )r   r   r*  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 rL  )	r  rZ  r  rP  rn  rH  rb   rH  r!  rI  s       r   
DICT_MERGEz$InstructionTranslatorBase.DICT_MERGE  s    HHJJ{Qx###j$(#++--#011111~~hR00000r   c                .    |                                   d S r   r  r  s     r   	GEN_STARTz#InstructionTranslatorBase.GEN_START  rn  r   c                .   | j         d         }|                                rH|                     t          j        t          |                                                               d S |                     |                    | dg i                      d S )Nrd  r  )rP  r  r4  r^   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                6   | j         d         }t          |t                    sJ t          |j        t          j        j                  r)|                     t          j	        d                     d S |                     t          j	        d                     d S Nrd  TF)
rP  rH  rb   r   collectionsabcMappingr4  r^   r[  r  s      r   MATCH_MAPPINGz'InstructionTranslatorBase.MATCH_MAPPING  s    jn#011111ci!899 	6II&-d3344444II&-e4455555r   c                   | j         d         }|                                sJ |                                }t          |t          j        j                  rKt          |t          t          t          f          s)| 
                    t          j        d                     d S | 
                    t          j        d                     d S r  )rP  r  r  rH  r  r  r   r   bytes	bytearrayr4  r^   r[  )r   r   r  	tos_values       r   MATCH_SEQUENCEz(InstructionTranslatorBase.MATCH_SEQUENCE  s    jn%%'''''**,,	i!9:: 	6:UI.D
 D
 	6 II&-d3344444II&-e4455555r   c                6     j         d         } j         d         t          t                    sJ t          fd|D                       rj                     t           fd|D                                  t          j        dk     r)                     t          j	        d                     d S d S                      t          j	        d                      t          j        dk     r)                     t          j	        d                     d S d S )Nrd  r  c              3      K   | ]}|v V  	d S r   r   )r   r   tos1s     r   r   z7InstructionTranslatorBase.MATCH_KEYS.<locals>.<genexpr>  s'      &&QqDy&&&&&&r   c                <    g | ]}                     |          S r   )getitem_const)r   r   r   r  s     r   r  z8InstructionTranslatorBase.MATCH_KEYS.<locals>.<listcomp>  s)    $N$N$NQT%7%7a%@%@$N$N$Nr   r  TF)
rP  rH  rb   r  r4  rr   rF  rG  r^   r[  )r   r   r  r  s   `  @r   
MATCH_KEYSz$InstructionTranslatorBase.MATCH_KEYS  s   jnz"~$ 122222&&&&#&&&&& 	:IIm$N$N$N$N$N#$N$N$NOOPPP'))		*1$7788888 *) II&-d33444'))		*1%8899999 *)r   c                V    |                      |                     d                     d S )Nr  )r4  rQ  r  s     r   rQ  z.InstructionTranslatorBase.LOAD_ASSERTION_ERROR  s)    		$//0@AABBBBBr   c                F    t          ddddgt          j                   d S )Nz'LOAD_BUILD_CLASS bytecode not supportedr   zPDynamo does not support tracing classes that are defined in the compiled region.z5Move the class definition out of the compiled region.r  r  r  s     r   LOAD_BUILD_CLASSz*InstructionTranslatorBase.LOAD_BUILD_CLASS  s?    =jG".		
 	
 	
 	
 	
 	
r   c                j    |j         dk    r|                     |           d| _        d S | j        rJ d S )Nr   F)r  append_prefix_instrS  r  s     r   RESUMEz InstructionTranslatorBase.RESUME  sD    8q==##D)))&+D###......r   c                J    |j         J t          |j                  | |          S r   )r  _binary_op_lookupr  s     r   	BINARY_OPz#InstructionTranslatorBase.BINARY_OP  s'    8'''$TX.tT:::r   c                    d S r   r   r  s     r   rT  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_  r  rH  r!  r   r  r^   r[  )r   r   r  r   s       r   r  z"InstructionTranslatorBase.KW_NAMES  s{    $[1$(;(E***** 	) 	)DdC((((((}$$$(/h???r   c                H    |                      t                                 d S r   )r4  rv   r  s     r   r  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   )rF  rG  r  rH  rr   r  r  r  r  r  r5  rv   r   r   r  r   )	r   r   r  r  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c                0    |                      |           d S r   r  r  s     r   rU  zInstructionTranslatorBase.CALLQ  s    

4r   c                d    |j         J |                     | j        |j                              d S r   )r  r4  rP  r  s     r   COPYzInstructionTranslatorBase.COPYU  s3    x###		$*dhY'(((((r   c                    |j         J | j        |j                   | j        d         c| j        d<   | j        |j          <   d S Nrd  )r  rP  r  s     r   SWAPzInstructionTranslatorBase.SWAPY  sE    x###04
DH90EtzRT~-
2
DH9---r   c                    d S r   r   r  s     r   CACHEzInstructionTranslatorBase.CACHEe  r  r   c                0    |                      |           d S r   r`  r  s     r   BEFORE_WITHz%InstructionTranslatorBase.BEFORE_WITHh  rc  r   c           	     *   |                                  }t          |t          t          f          s.t	          dd| d|                                 dg d           t          |t                    r.|                                s| j                            |           t          |t          t          f          sJ t          ||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                                       |                     |                    |                      d S )	NzUnsupported context managerz$Attempted SETUP_WITH/BEFORE_WITH on z%Dynamo does not know how to enter a `z` context manager.)z,Avoid using the unsupported context manager.aE  If the context manager seems like it should be supported (e.g. torch.set_grad_enabled), then it may be the case that it was created outside the compiled region, which Dynamo does not support. Supported context managers can cross graph break boundaries only if they are local non-closure variables, or are intermediate values.zFile an issue to PyTorch. Simple context managers can potentially be supported, but note that context managers can't be supported in generalr  r  rd  )r  rH  r_   r`   r7   r  supports_graph_breaksr  r   ra   r  rF  rG  r  r  r  r4  r2  r   r  r  r   rP  enter)r   r   r9  r&  r  s        r   ra  z.InstructionTranslatorBase.setup_or_before_withk  s7   hhjj)+IJ
 
 	 5DsDDnCDXDXDZDZnnn  	     s:;;	=--//	= 077<<< )+IJ
 
 	
 	
 
 (K
 

 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		#))D//"""""r   c                L    | j         sJ | j                            |           d S r   )rS  rU  r   r  s     r   r  z,InstructionTranslatorBase.append_prefix_inst  s.    &&&&  &&&&&r   c                   t           j        dk    r[| j        sTt          | j        |j                 t                    sJ | j        j        	                                | j        |j        <   d S | 
                    |           d S rm  )rF  rG  rS  rH  rK  rZ  rv   r  r  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_VARS      %%%%%r   c                0    |                      |           d S r   r  r  s     r   RETURN_GENERATORz*InstructionTranslatorBase.RETURN_GENERATOR  r  r   c                |    t           j        dk    r|                                  d S |                     d           d S )Nr  r  )rF  rG  r  r5  r  s     r   END_FORz!InstructionTranslatorBase.END_FOR  s4    w&&HHJJJJJIIaLLLLLr   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  )	rT   rK  r  rZ  rv   r7   r   r  r  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   )rZ  rK  r4  rv   r  r  s     r   LOAD_FAST_AND_CLEARz-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 |                     |           d S )Nr  r  r   )rS  r   r  r  r  rK  r  s     r   LOAD_SUPER_ATTRz)InstructionTranslatorBase.LOAD_SUPER_ATTR  st    ;.tA>>>???x###8a< 	"T"""""OOD!!!!!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 )	NrC        z Missing CALL_INTRINSIC_1 handlerzCALL_INTRINSIC_1 operand: z,No handler implemented for CALL_INTRINSIC_1 z instruction.r  )
rZ  r  UNARY_POSITIVEr4  rr   r  r  r7   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   rp  r  s      r   END_SENDz"InstructionTranslatorBase.END_SEND  s/    hhjj


		#r   c                4    |                      |d           d S )NT)r  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  r||_        n&|dz  r||_        n|dz  r||_        n|dz  r||_        |                     |           d S )NrS  r  r  r   )	r  r  rH  rg   rW  r   rX  rV  r4  )r   r   rT  r.  attrs        r   SET_FUNCTION_ATTRIBUTEz0InstructionTranslatorBase.SET_FUNCTION_ATTRIBUTE  s       XXZZ"899999xxzz4< 	BJJT\ 	!BNNT\ 	 BMMT\ 	BK		"r   c                    |                      |                     |                                 |j                             d S r   )r4  r  r  rZ  r  s     r   CONVERT_VALUEz'InstructionTranslatorBase.CONVERT_VALUE  s4    		$%%dhhjj$+>>?????r   c                V    |                      t          j        d          d           d S )Nr   r   )r  r^   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   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>)  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   rm  rw  r  r   r   )r   r  s     r   format_frame_summaryz.InstructionTranslatorBase.format_frame_summary-  s^     #*&(#ww!##%%&h7N.O.O)P)PP 
 
 	
r   traceback.FrameSummaryc           	         t          j        t          | j        dd          | j        t          | j        dd          d          S )Nre  	<unknown>r  F)lookup_line)rm  FrameSummaryr  r  r   r   s    r   r  z'InstructionTranslatorBase.frame_summary8  sF    %DK<<KDKK88	
 
 
 	
r   c                    t          | j        dd          }t          j        d          }|                    |          d uS )Nre  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_modules@  s?    4;{CCZ(?@@!''11==r   rb  c                    | j                             |t          j        |                    }t	          t          |                              t          j                             |S r   )	r  install_global_by_idr  r  r;   rG   r  r:   WEAKREF_ALIVE)r   rb  r  global_names       r   store_global_weakref_by_idz4InstructionTranslatorBase.store_global_weakref_by_idE  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_modeL  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_modeP  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 r5  )r   r  r   r  re  r   rY  r   s    r   r  z#InstructionTranslatorBase.speculate^  sk    '333'!++++#((K#K$q(d6:;	
 
 	
r   rY  r  r	  r  r_  r  types.CodeTyper  r  r   distributed_stateOptional[DistributedState]rW  Optional[tuple[types.CellType]]c                   t                                                       || _        || _        || _        || _        || _        |	| _        d | _        g | _	        d| _
        d | _        t          d          | _        g | _        g | _        d| _        d | _        d| _        g | _        || _        || _        t-          | j                  | _        || _        || _        || _        || _        |
| _        |$t:          j        rt?          |
||          | _         nd | _         i | _!        i | _"        || _#        d| _$        d| _%        d| _&        d | _'        d | _(        d| _)        d | _*        g | _+        || _,        tZ          j.        dk    rAdd	l/m0}m1}m2}m3} |
j4        ||z  |z  |z  z  r"| 5                    tm          d                      || _7        d| _8        d gts          |
j:                  z  | _;        tx          =                    t|          j?                  | _@        t          =                    t|          j?                  | _B        t          jD        |
jE        |           d S )
Nr   r  rd  T)r  rW  r_  FrB  r   )CO_ASYNC_GENERATORCO_COROUTINECO_GENERATORCO_ITERABLE_COROUTINE)Fr  r  r  r&  r  rK  rL  rM  rN  rP  r   r\  r&   rR  r  r  r   r  rS  rU  rY  rY  r   rV  r  r	  r  r_  r  r   replay_record_enabledr@   rZ  nn_module_stack	num_callsr  r  r   r  rX  r[  r]  r^  r_  ra  rF  rG  resume_executionr*  r+  r,  r-  co_flagsr4  r]   rV  rW  r   r  r  r  r{  r   r|  r  r  r  r  	lazycachere  )r   r  rY  r  r	  r  r_  rK  rL  rM  r  r  rV  r  rY  r&  rW  ra  r*  r+  r,  r-  r  s                         r   r  z"InstructionTranslatorBase.__init__h  s   * 	.!2 . 0-J* -1),.
#$ #5e#<#< UW,"&( 0</:4;L/M/M 	 *3*4,8&, 6#?!2W<" " "D "&D BD)+ $)!*/'#'  $"w&&            |+.CCFXX 1 		/$//000().&CG&3L
 L
 C

 ++GM:: 	* ))'-88 	( 	F.	:::::r   r   r  )r   rk  )r.  rY   r   rO  r}  rJ  r   r   )r.  rY   r   r  r}  r   r   r   r   )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  rO  r   r   r   rY   )r  r   r   rO  )r   r+   r   r^   )r  r   r   rF   )r   r   ra  r   r-  r   r   r   )rZ  r   r   rY   )r*  rY   r   rY   )r*  rY   r   r   )r*  rY   r   r  )r  r   r   r   r   r+   r  r   r  r   r   rT  )r   r+   r   r
  r   r   )r  rY   r|  r   r   rY   )r  rY   rT  r   r   r   )F)r   r+   r  r   r   r   )r  r  r   r   )r   r  )rb  r   r  r   r   r   r   r  )r  r   r   r   )r   r   )NN)$r  r=   rY  rT  r  r   r	  r   r  r   r_  r   rK  rJ  rL  rJ  rM  r}   r  r%  r  r   rV  r   r  r   rY  r#  r&  r'  rW  r(  ra  r`  r   r   (  r   r   r   r   rc  r  ro  rs  rv  r|  r   r  r  r  r  r  r  rF  rG  r  propertyr  r  r  r  r4  r  r  r5  r  r  r  r  r  LOAD_CLOSUREr  rR  r  r<  cached_propertyr  r  r  r   r  r3  r<  rH  EAGER_IMPORT_NAMErL  rQ  r  r  JUMP_FORWARDJUMP_ABSOLUTEr  rW  not_r  rX  r  JUMP_IF_FALSE_OR_POPJUMP_IF_TRUE_OR_POPrY  r\  r^  rb  re  rg  ri  rk  rs  ru  r|  rV  r  r  ry  r  r  r  r  r  r  r  r  r  r  rS  r  r  r  r  r  r  rK  r  r  r  r  r  r  r  r  r'  r*  r  r2  rp   r8  r:  BUILD_TUPLE_UNPACK_WITH_CALLr=  rA  BUILD_MAP_UNPACK_WITH_CALLrC  rE  rJ  rM  rP  rY  r_  rh  rj  r  r  rs  rv  rx  rJ  r{  r  r  r  r  r  r  r  r  r  r  DICT_UPDATEr  r  r  r  r  rQ  r  r>  posr  negUNARY_NEGATIVEr  invertUNARY_INVERTpowBINARY_POWERmulBINARY_MULTIPLYmatmulBINARY_MATRIX_MULTIPLYfloordivBINARY_FLOOR_DIVIDEtruedivBINARY_TRUE_DIVIDEr?  BINARY_MODULOBINARY_REMAINDERr   
BINARY_ADDsubBINARY_SUBTRACTgetitemBINARY_SUBSCRlshiftBINARY_LSHIFTrshiftBINARY_RSHIFTand_
BINARY_ANDor_	BINARY_ORxor
BINARY_XORipowINPLACE_POWERimulINPLACE_MULTIPLYimatmulINPLACE_MATRIX_MULTIPLY	ifloordivINPLACE_FLOOR_DIVIDEitruedivINPLACE_TRUE_DIVIDEimodINPLACE_MODULOINPLACE_REMAINDERiaddINPLACE_ADDisubINPLACE_SUBTRACTilshiftINPLACE_LSHIFTirshiftINPLACE_RSHIFTiandINPLACE_ANDixorINPLACE_XORior
INPLACE_ORr  r  rT  r  r  r  rU  r  r  r  JUMP_BACKWARD_NO_INTERRUPTPOP_JUMP_FORWARD_IF_TRUEPOP_JUMP_BACKWARD_IF_TRUEPOP_JUMP_FORWARD_IF_FALSEPOP_JUMP_BACKWARD_IF_FALSEr  r  ra  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r
  r  r  r  r  
contextlibcontextmanagerr#  r  r  r   r!  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/ / / /b 7""%	+ %	+ %	+ %	+ %	+R	 	 	 	 ; ; ; X;7 7 7 7r2 2 2 22= 2= 2= 2=h             ; ; ; ;!+ !+ !+ !+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   :7 7 7 7t $    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   U U U U      (   
 
 
 
>R R R R8   0 0 0 0.
 
 
 
3 3 3 32x' x' x' x't< < < <:$ $ $ $*O O O ObK K K K   P P P PD D D D  Q''') ) ) (')
  Q'''0; 0; 0; ('0;d  Q'''	- 	- 	- ('	-G G G GB B B B    ) ) ) )      I I I I8
 
 
 
.
 
 
 
q% q% q% q%f	
 
 
 
   Q'''= = = ('=8 8 8 8( ( ( (( ( ( (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  Q'''	 	 	 ('	4 4 4 4
               
      N N N N(3 3 3 3
 
 
 
B" " " "! ! ! !41 1 1 1P P P P% % % %$1 1 1 1 K   @ @ @ @6 6 6 6	6 	6 	6 	6: : : :C C C C	
 	
 	
 	
 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6..A666xx@P7Q7QRRM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""	; 	; 	; 	;   @ @ @ @" " " "(! (! (! (! (!T  Q'''   (') ) ) )V V V V M!%+|HNEBB ,X^U C C ,X]E B B!-hmU!C!C   ( ( ( (># ># ># >#@' ' ' '	* 	* 	* 	*& & & && & & &      ; ; ; ;" " " "   $     Q'''' ' ' (''
 
 
 
   $@ @ @ @; ; ; ;* * * *    >B	
 	
 	
 	
 	

 
 
 
> > > >
    5 5 5 X5 * * * *
 
 
 
8 48,0'u; u; u; u; u; u; u; u; u; u; u;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 )3r2  r   c                     t           j        S r   )tls
current_txr   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rY  rT  r  r%  r  r   r	  r  rW  Optional[tuple[Any, ...]]torch_function_mode_stackr_  compiler_fnr  r   r  export_constraintsframe_stater  r   rY  r#  r&  r'  ra  r`  r   c                     t                      t          j        d|j         d|d          d|d                     t	                                          t          ||	| ||||||||          ||||||i i 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          |          | _'        |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  re  r   rf  )local_scoper*  r  r  ra  r   )r  rY  r  r	  r  rW  r_  rK  rL  rM  r  r  rV  r  rY  r&  ra  z4Export without one graph - something has gone wrong.dynamismT)is_inputr  )r  is_derefed_cell_contents)r  ))r  r   INFOr  r  r  r=   _throw_if_in_functorchr   r  r  r  r  r  rK  r  rv  r/   r  r  r   	frozensetrl   r[  rI   r  ro  r  r   r  r  rs  rH   cell_contents
ValueErrorr   DeletedVariabletrack_cell_existingr}   rM  realize_all)r   rY  r  r  r	  r  rW  r  r_  r  r  r  r  r  r  rY  r&  ra  rv  r  r   r  local_dynamismvarr  contents_sourcer  cell_varr  cell_sourcer  s                                 r   r  zInstructionTranslator.__init__  s   ( 	Lxxx,}:UxxXdeuXvxx	
 	
 	
 	"$&*C   &!%*.+%/= 	 	
 	
 	
B 	##%%% T[011 `	 `	43F3F3H3H `	 `	#,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td' ' '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.   (1'D'P'P(( ($}`	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	 `	s\   5N
G.M+9KM+K4	1M+3K4	4A+M+N+M/	/N2M/	3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  )rr  _dynamolookup_backendr9  getattr_staticr  r  _C
_functorchpeek_interpreter_stackTransformTypeVmapGradJvpr"  r   lowerr7   )r   r  r  ciforbidden_keysr   r  s          r   r  z,InstructionTranslator._throw_if_in_functorch  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  rK   c                    t          |t                    r| j        |j                 S t          |t                    r| j        |j                 S t          r   )rH  rI   r  r  rF   r	  r  r  )r   r  s     r   get_example_valuez'InstructionTranslator.get_example_value  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   )	rK  r  rH  r   r  r  rr  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 )Nrd  r-  )r   rP  rH  rf   ro   r  rX   )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        sh| j                                        dk    rK| j	        sD| 
                                s0| j        s)| j        s"| j        s| j        st          j        d          d | _         t#                      t$          j        d| j        j         d|j         d           t.                              d|j                   | j                            | t5          d|                                 gd	
          |j        dk    rdnd          }t9          |          dk    sJ |d         j        rJ |j        dk    rt=          d          nt=          d|j                  }| j                             |g           tB          )NrT  r   z#because no content in function callztorchdynamo done tracing r   r  z%s triggered compilereturn_valueF)r  re  r   r  rf  r  )"r  r   r\  rR   rU  r   allow_empty_graphsr  r  rW  r  r  r  r   r  r   r  r  r   r  r  r  r   r  r~  r  r<   r  r   r  r&   rZ  r  r+  )r   r   r  return_insts       r   _returnzInstructionTranslator._return  s*   //111'333+++''043CC	
 	
 	

 )
	G''))Q..2 /==?? / K / N	 /
 - / 3 / - EFFF#' LM(;MMt{MMM	
 	
 	
 			($+666$(K$@$@%!3!3!5!5 6E   !K>99qqq %A %
 %
! ,--2222,Q/@@@@ {n,, ~...#N4;GGG 	 	++[M:::r   c                0    |                      |           d S r   r  r  s     r   re  z"InstructionTranslator.RETURN_VALUE      Tr   c                0    |                      |           d S r   r  r  s     r   rf  z"InstructionTranslator.RETURN_CONST  r  r   )r   r2  r5  )$rY  rT  r  r%  r  r   r	  r   r  r   rW  r  r  r   r_  r   r  r   r  r   r  r   r  r   r  r   r  r   rY  r#  r&  r'  ra  r`  r   r   r   )r  rK   r   r   r  r4  )r   r   r   staticmethodr  r  r  r  r  r  r  r  r  r  re  rf  r   r!  s   @r   r2  r2    s          \ # # # #] ] ] ] ] ]~   >      	 	 	 	- - - -^          r   r2  r  c           	     p    g | ]3\  }}t          t          d |v r
|dd         nd|dd                    4S )INPLACErC  NBINARY_)r  r2  )r   r   r   s      r   r  r    se       
 FA	 	!#v--F122JJ3IVABBZ3I3I	
 	
  r   c                       e Zd ZU dZded<   ded<   ed0d            Zed1d            Zed2d            Z	d3dZ
d4 fdZed5d            Zd6dZd7 fd!Zd8 fd'Zd9d(Zd9d)Zd:d-Zd9 fd.Zd9 fd/Z xZS );r  z Trace and inline a called methodr  symbolic_resultr   r^  r   funcr   r}  r   c                    t          j        t          dt          d         i          5  |                     ||||          }|                                cd d d            S # 1 swxY w Y   d S )Nunimplementedr  )r   r   rO   build_inline_tracerinline_call_)r   r^  r  r   r}  tracers         r   r  z)InliningInstructionTranslator.inline_call  s    Z?H]4K"LMM 	) 	),,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          t          | dd           d          r$| j        j        |fv 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_selfr7   r   rH  ri   r9  r  get_functionr   check_verboseskippedtorch._dynamo.variables.miscr  r   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 wtT400)<< 1U B B #-?   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   rY   rO  c                    t          |t          t          t          t          f          sJ |                                d } j        j        }t          j	        s!|r|j
                            d           x}r|}|ht          |t                    rt          dd| dg            t                              |          }|j        du sJ t          j	        s|r
||j
        <   	 |                     ||          }n# t$          $ r}t'          d                    t+          |          d|                                 d|                                 d	|                                j         d
 |D             |                    d }~ww xY wt3          j        |                                          D ]<}	t          |	t8                    s%t          dd| d|	 dg t:          j                   =j        dv rI|r t          |d         t@          j!                  s't          ddj         d| dj         dg            d}
tD          j#        j$        j%        &                    d          r)dtO          j(                  '                                 }
tR          j*        dk    r? j+         j,        d! fd}tZ          .                    dt_          |                     t`          .                    d|
|j1                   |rt          |d         td                    rw j        3                    |d         j4                  }t          |tD          j5        j6                  r3to          j8        |          ts          j:        |j;        j<                  d <   t{                    rt}           | j?         j@        |          }n5t          |t                    rJ t           | j?         j@        |          }|S )"NzEAttempted to inline function marked as skipped (SkipFunctionVariable)z+Attempted to inline a SkipFunctionVariable zdAttempted to inline a function that was previously determined to be marked as intentionally skipped.r  Fz;{reason}.
  func = {func}, args = {args}, kwargs = {kwargs}'z' r   c                6    g | ]}|                                 S r   )r  )r   r  s     r   r  zEInliningInstructionTranslator.build_inline_tracer.<locals>.<listcomp>  s"    <<<#//++<<<r   )r   r  r   r}  z:Encountered unconverted argument when attempting to inlinezfunc: z, arg: zWAn argument to an inlined function was not successfully converted to a VariableTracker.)r  __setattr__r   z2Unsupported __setitem__/__setattr__ inline attemptzcode name: z, args: zAttempted to inline z: where first argument (self) is not a user-defined object.r   bytecoder   r  r   r   c                                          j        j                  } t                                                    }dj         d|  d| S )N)r   zTRACE inlined call z from r   )r  	positionsr   rQ   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   )ArH  ri   rg   re   rf   r  r  r  r   dont_skip_tracingpreviously_inlined_functionsr  rh   r7   r  r  r  	bind_args	TypeErrorr1   r  r   r  r  rf  r  r  r  rY   r   r  r  r   r   rr  rx  	_internal	log_stateis_artifact_enabledr  BytecoderF  rG  rR  r  trace_call_logr~  rU   r  r   ry   r  r  r  r  r  r  r/   r  forward__code__r,   &InliningGeneratorInstructionTranslatorrL  rM  )r^  r  r   r}  r  tracing_ctxprevious_result
sub_localsr  r   rc  r  moduler  r  r  r  s   `             @@@r   r  z1InliningInstructionTranslator.build_inline_tracerP  s    $*.,	
 
 	
 	
 
  $}}m3
 ' 	)K 	)"-"J"N"Nd# #  ) )>$ 455  cP$PP~    3CCDIIF>U****+ H HAG8>	f==JJ 		 		 		#NUUq66fT]]__ff0A0A0C0CffdmmooFdff<<t<<<!	 V    		 !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&
  	;'4 FF "$(DEEEEE2'4 F s   )D 
FBFFc                   | j         }| j        }t          j                    }|j        r|                     |j                  }	 |5  |                                  d d d            n# 1 swxY w Y   n# t          j        $ r(}d| d| }t          
                    |            d }~wt          j        $ r7}d| d| }t          
                    |           t          |          |d }~wt          $ r t          
                    d|            w xY w| j        |_        n# | j        |_        w xY w| j        j        rt#          j        d           S | j        J | j        |j        u r|j                            | j                   |xj        | j        z  c_        t          
                    d|           | j        j        j                            |           t6          j        st;          | t<                    r| j        rtA          |          rt;          | t<                    rl| j!        ret;          | t<                    sJ g }t;          | j        t"                    r| j        j"        | j        g}t          j#        tH          | |           d S | j        S tA          |          rTt;          | t<                    sJ | j        %                                J tM          | j'        tQ                                S | j        S )	Nz!Observed exception DURING INLING z : zSKIPPED INLINING r   zFAILED INLINING %szDONE INLINING %sr~  r-  ))r^  r  r  nullcontextr[  r#  r  r   r   r  r~  r  r8   r  r   r  r  r^   r[  r  r	  rL  r@  rW  r  traced_coder   r   r  rH  r  is_generator_from_ctx_managerr,   generator_exhaustedr  r  rp  r  ro   generated_itemsrX   )r   r^  r  
strict_ctxr  r  r   s          r   r  z*InliningInstructionTranslator.inline_call_  st   {$022
" 	O55f6MNNJ	D  


              $ 	 	 	BdBBqBBCIIcNNN} 	* 	* 	*1d11a11CIIcNNNc"") 	 	 	II*D111	 +/*CF''$*CF'CCCC;" 	1#*4000#///>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t35EFF2,2: 01D,]DtLLLLLL++D!! ,!$(NOOOOO+>>@@HHH+("2"4"4   
 ++sZ   A3 A'A3 'A++A3 .A+/A3 2D# 3D#B%%D72C))*DD# #D1r  r%  rK  rJ  rL  rM  r}   funcvarrd   r   c                   |                                 }|d         }t          |t                    s|j        }|j        j        }	d }
|	r'|	j                                      r|	j                 }
|
*t                    }
t          |
           |	r
|
|	j        <   t                                          |j        i ||||||
fdt                      D             |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>B  s%    GGG!!WT1--GGGr   r   )r  r  r	  r  rK  rL  rM  rY  r_  r  r  rV  r  rY  r&  ra  )get_globalsrH  r   __dict__r  r  previously_cleaned_instructionsr  r!   r    r  r  r*   r  rV  r  rY  r&  ra  r  r^  r0  r  r/  r  r  )r   r^  r  rK  rL  rM  r  r	  r  r  rY  r  s     `        r   r  z&InliningInstructionTranslator.__init__  sz    ''))	~.
*d++ 	-#,J m3 	Q:>>tDD Q*J4P/55L--- QDP;DA=!+-*G%GGGG}GGG=,q0"2,$6N! 	 	
 	
 	
$ )#%5::<<)r   r  c                    | j         j        S r   )r^  r  r   s    r   r  z'InliningInstructionTranslator.fake_modeR  s    {$$r   c                X    t          j        | j                                                  S r   )r   r  r^  r  r   s    r   r  z)InliningInstructionTranslator.run_ctx_mgrV  s!    +DK,E,E,G,GHHHr   r   c                    t           j        r;| j                                        sdS t	                                                      S dS r  )r   r  r^  r  r  )r   r  s    r   r  z:InliningInstructionTranslator.should_compile_partial_graphY  sD    % 	:;;;== u7777999ur   r   r+   r  r  rT  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  r  r  r7   )r   r   r  r  r  s       r   r  z3InliningInstructionTranslator.create_call_resume_at`  sd     % 	7700/1M   	5L		
 	
 	
 	
 	
 	
r   c                P    |                                  | _        d | _        t          r   )r  r  r   r+  r  s     r   re  z*InliningInstructionTranslator.RETURN_VALUEq  s     #xxzz#' r   c                R    |                      |          | _        d | _        t          r   )r  r  r   r+  r  s     r   rf  z*InliningInstructionTranslator.RETURN_CONSTv  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_r!  ___unnamed_scope)r	  r  r  rr  ra  r&  r'  r   r[   rD   r  r  rF   rE   rM  rJ   )	r   r   r  r  r  fglobals_vtglobal_sourceglobals_nameglobals_sources	            r   get_globals_source_and_valuez:InliningInstructionTranslator.get_globals_source_and_value{  s7    ''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   )rZ  r	  r  r  r*  r  r  r  r  has_pending_mutation_of_attrr4  	load_attrrY   r  )r   r   r   r   r  r  r  r  s          r   r  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)r  r  )r  r*  r	  r  r  r  rH  r   r7   rZ  r  r  r  )r   r   r  r   _fglobals_valuer  r   r  s          r   r  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  r   r   r   r}  r   r   r   )r  r   r   r  )
r^  r   r  rY   r   rO  r}  r   r   r  r6  )r^  r   r  r%  rK  rJ  rL  rJ  rM  r}   r  rd   r   r   r8  r5  r  r7  r4  )r   r   r   r  )r   r   r   r   r   r  r  r  r  r  r  r  r9  r  r  r  r  re  rf  r  r  r  r   r!  s   @r   r  r    s        **....%%%%) ) ) [)
 ; ; ; \;z    \BE, E, E, E,N7* 7* 7* 7* 7* 7*r % % % X%I I I I     
 
 
 
 
 
"   
   
%: %: %: %:NM M M M M M"J J J J J J J J J Jr   r  c                  d     e Zd ZU ded<   d f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  rO  r  r   r   r}  r   r   c                d     t                      j        |i | g | _        d| _        d| _        d S r  )r  r  r  r  r  )r   r   r}  r  s      r   r  z/InliningGeneratorInstructionTranslator.__init__  s=    $)&)))!#( -2***r   r   r+   c                d   |                                  }| j                            |           t          | j                  t          k    rt          j        dt                     |                     t          j
        d                      t          j        s| j        r|| _        t          d S )NzqToo many yield values in generator. Maybe you are inlining an infinite generator. If not, please report a bug at )r  r  r   r   rk   r   InfiniteGeneratorErrorPT2_ISSUE_TRACKER_URLr4  r^   r[  r   r  r  r  r-  )r   r   tops      r   YIELD_VALUEz2InliningGeneratorInstructionTranslator.YIELD_VALUE  s    hhjj##C(((t#$$'999,J2GJ J   			")$//0005	1	 $'D 	 	r   c                    | j         d         }t          |t                    sU|                                  t	          t
                                        | |gi           }|                     |           d S d S r  )rP  rH  ro   r  r]   r  r   r4  )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  r  re  r   r   r  s     r   re  z3InliningGeneratorInstructionTranslator.RETURN_VALUE  #    #' ww##D)))r   c                T    d| _         t                                          |          S r  )r  r  rf  r+  s     r   rf  z3InliningGeneratorInstructionTranslator.RETURN_CONST  r,  r   c                   t          | j                  dk    sJ |                                 }| j        d         }t          |t                    r|j        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  rd  Unreachable sub-generator coder   @Should only be encountered while implementing generator support.r  r   r   )r   rP  r  rH  r^   r  r7   ro  r   r   r4  r&  rp  r   rq  r  r[  r   r   r*  r  exs        r   
YIELD_FROMz1InliningGeneratorInstructionTranslator.YIELD_FROM  s   4:!####hhjjjn3 011 	ci6G 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$ $E3:A.E..E3c                ^   t          | j                  dk    sJ |                                 }| j        d         }t          |t          t
          f          s:t          |t                    rt          |j        t          j	        j
                  rt          |t                    r|j        	 |                    |           }|                     |           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  rd  r  r/  r   r0  r  zSEND with bad typez
TOS type: z(Attempted to SEND with unsupported type rE  )r   rP  r  rH  rn   rf   r   r  r  r  Iteratorr^   ro  r4  rp  r   rq  rF  rG  r[  r  r7   rW   r1  s        r   SENDz+InliningGeneratorInstructionTranslator.SEND  s   4:!####hhjjjnc,.JKLL &	s566&	39ko&>??&	 #/00 SY5F#++D11C IIcNNNNN &s'DE 
$ 
$ 
$ ''11


II.5bh??@@@IIdOOOOOOOOO
$& !< b	      ,3WS\\33Vws||VVV	     s   /C E!1A%EE!)r   r   r}  r   r   r   r4  )r   r   r   r   r  r&  r)  re  rf  r3  r6  r   r!  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   r0  )r?  r@  r   r   )r   r   rN  rO  r4  r   r   r   )r   FN)
r_  r   r   r   r`  r   ra  rb  r   r   )rN  rO  r4  r   r   r  )r4  r   r   r  )r   
__future__r   r  collections.abcr  r  r   r  r<  r   r9  r  r  r   rW  r  rF  	threadingrm  rI  r  r   typingr   r   r   r   r	   r
   r   typing_extensionsr   r   unittest.mockr   rr  torch._loggingtorch._dynamo.excr   r   torch._guardsr   r   torch._logging.structuredr   %torch.fx.experimental.symbolic_shapesr   torch.utils._functoolsr   r   r   r   r   r	  r   r   bytecode_analysisr   r   r   r    bytecode_transformationr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   codegenr0   r1   r2   r3   r4   r5   r6   r7   r8   funcname_cacher9   guardsr:   r;   output_graphr<   r=   	polyfillsr>   replay_recordr?   r@   r1  rA   rB   rC   r  rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   utilsrN   rO   rP   rQ   rR   rS   rT   rU   rV   variables.baserW   rX   rY   variables.builderrZ   r[   r\   variables.builtinr]   variables.constantr^   variables.ctx_managerr_   r`   ra   variables.dictsrb   rc   variables.functionsrd   re   rf   rg   rh   ri   rj   variables.iterrk   variables.lazyrl   variables.listsrm   rn   ro   rp   rq   rr   variables.miscrs   rt   ru   rv   rw   rx   variables.nn_modulery   variables.tensorrz   r{   r|   variables.torch_functionr}   r~   variables.user_definedr   r   r   r   r   r   r   torch._subclasses.fake_tensorr   ra  r   	getLoggerr   r  rx  getArtifactLoggerrz  r  r  r  r  r  r   r   r   containsr   r   r?  r   r$  r   cacher   	dataclassr   r   r   r   r   r  r  r  r  r  r  r   r  r+  r-  r>  rM  r^  r}  r  r  r  r
  r	  r#  r   r2  rG  _nb_opsr  r  r  r   r   r   <module>rb     s    0 # " " " " "                  



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



           " " " " " " P P P P P P P P P P P P P P P P P P / / / / / / / /            O O O O O O O O 1 1 1 1 1 1 1 1 / / / / / / < < < < < < / / / / / /                                                           ' & & & & &      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ) ( ( ( ( ( / / / / / / / / 9 9 9 9 9 9 9 9 0 0 0 0 0 0 9 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 . . . . . . 0 0 0 0 0 0         
 < ; ; ; ; ; ; ;                  / . . . . . / / / / / /                               2 1 1 1 1 1 W W W W W W W W W W                      (33333333<<<<<<''''''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  D  %&(     ) ) ) )        : @ @ @ @ @ @ @ @F 
 
 
 
 
 
 
 
 2 2 2 2 2 2 2 23 3 3 3 3 3 3 3. 4 4 4 4 ) ) ) )& $ $ $ $ . . . . . . . .B	 	 	 	 	~ 	 	 		 	 	 	 	I 	 	 	    9      A A A A? ? ? ?D 
 )-	N
 N
 N
 N
 N
bD D D DNF F F FRJ J J J J J J J2 _ _ _ _ _ _ _ _D_); _); _); _); _);(_); _); _); _);DSY Y Y Y Y5 Y Y Yx w 
   }J }J }J }J }J$= }J }J }J@z z z z z-J z z z z zr   