
    Vh                    	   U d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZmZmZmZmZmZ ddlmZ ddlZddlZddlm Z  ddl!m"Z"m#Z# ddl$m%Z% ddl&m'Z' d	d
l(m)Z)m*Z*m+Z+mZ,m-Z-m.Z. d	dl/m0Z0m1Z1m2Z2m3Z3 d	dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= d	dl>m>Z> d	dl?m@Z@ d	dl*mAZAmBZBmCZCmDZDmEZEmFZFmGZG d	dlHmIZI d	dlJmKZKmLZL d	dlMmNZNmOZO d	dlPmQZQmRZR d	dlSmTZTmUZU d	dlVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z] d	dl-m^Z^m_Z_ d	dl`maZambZbmcZcmdZdmeZemfZfmgZgmhZh d	dlimjZjmkZkmlZl d	dlmmnZnmoZo d	dlpmqZq d	dlrmsZs d	dltmuZumvZvmwZw d	dlxmyZymzZz d	dl{m|Z|m}Z}m~Z~mZmZmZmZ d	dlmZ d	d lmZ d	d!lmZmZmZmZmZ d	d"lmZmZmZmZmZmZ d	d#lmZ d	d$lmZmZmZ d	d%lmZmZ d	d&lmZmZmZmZmZ  ejF                  e      ZejL                  jO                  ed'      ZejL                  jO                  ed(      ZejL                  jO                  ed)      ZejL                  jO                  ed*      Z ejX                         Z ej\                         D  ci c]  \  } }|  eq|      j^                   c}} Zeeef   ed+<    eqejh                        j^                  Z eqejl                        j^                  Zd, ed-<   d. ed/<   d0Zejr                  d1ed2ejt                  fd3       Zejx                   G d4 d5             Zejx                   G d6 d7             Zejx                   G d8 d9             Zejx                   G d: d;             Z G d< d=      Z ej                  d      d>        Zej                  ded@       Zej                  dedA       Zejx                   G dB dC             Z G dD dEeȫ      Z G dF dGeʫ      Z G dH dIeʫ      ZdJej,                  dKef   fdLZdMd?dNej,                  egef   dOefdPZdQZdfdRZdNej,                  egef   dOefdSZdT Z G dU dVeի      Zejx                   G dW dX             Z G dY d?e֬Z      Z G d[ d\eث      Zej                  d]k\  r6ej                  D cg c]  \  }} eed^|v r|d_d nd`|d_d         c}}Z G da dbeث      Z G dc ddeޫ      Zyc c}} w c c}}w )ga  
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.
    N)AnyCallablecastNoReturnOptionalUnion)patch)TensorifyScalarRestartAnalysis)tracingTracingContext)
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_call_functioncreate_instructioncreate_jump_absolutecreate_swapget_code_keysInstructionis_generator	unique_id)code_context)	PyCodegen)ArgsMismatchErrorBackendCompilerFailedcollapse_resume_framesformat_graph_break_messageget_stack_above_dynamounimplemented_v2Unsupported)get_funcname)GuardBuilderinstall_guard)GraphCompileReasonOutputGraph)DummyModuleExecutionRecorder)ContinueExecutionCacheReenterWith)
AttrSourceDictGetItemSourceGlobalSourceGlobalWeakRefSourceLocalCellSourceLocalSourceSource)is_builtin_constantis_forbidden)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wrap_fx_proxy)BuiltinVariable)ConstantVariable)ContextWrappingVariableGenericContextWrappingVariableWithExitFunctionVariable)ConstDictVariableSetVariable)BaseUserFunctionVariableLocalGeneratorFunctionVariableLocalGeneratorObjectVariableNestedUserFunctionVariableSkipFunctionVariableUserFunctionVariableUserMethodVariable)MAX_ITERATOR_LIMIT)LazyVariableTracker)BaseListVariableListIteratorVariableListVariableSliceVariableTupleVariable)CellVariableExceptionVariableGetAttrVariableNullVariablePythonModuleVariableUnknownVariable)NNModuleVariable)supported_comparison_opsSymNodeVariableTensorVariable)SymbolicTorchFunctionStateTorchFunctionModeVariable)RemovableHandleVariableUserDefinedClassVariable!UserDefinedExceptionClassVariable"UserDefinedExceptionObjectVariableUserDefinedObjectVariablegraph_breaks
trace_calltrace_sourcetrace_bytecodecompare_op_handlersc                 2    t        | g t        |      i       S N)handle_containsreversedtxargs_s      N/home/dcms/DCMS/lib/python3.12/site-packages/torch/_dynamo/symbolic_convert.py<lambda>r      s    (4.21     inc           
      J    t        | t        | g t        |      i       gi       S rw   )
handle_notrx   ry   rz   s      r~   r   r      s(    J.x~.	34b5 r   znot inzihttps://github.com/pytorch/pytorch/issues/new?&labels=oncall%3A+pt2&projects=&template=pt2-bug-report.ymlnamereturnc                 ,    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                   ^    e Zd ZU eed<   eed<   eed<   eed<   dZeed<   dZ	e
e   ed<   d	 Zy)
SpeculationEntryfilenamelinenoinstruction_pointerinstFfailedNreasonc                     d| _         | j                  | j                  j                  }nd}t        j                  |      )z\
        Start tracing of the current frame over again, and don't take this branch.
        Tz!Unknown fail_and_restart_analysis)restart_reason)r   r   r   SpeculationRestartAnalysis)selfr   s     r~   fail_and_restart_analysisz*SpeculationEntry.fail_and_restart_analysis   s:     ;;"![[//N@N,,NKKr   )__name__
__module____qualname__str__annotations__intr    r   boolr   r   r/   r    r   r~   r   r      s8    MK
FD+/FH'(/	Lr   r   c                   v    e Zd ZU dZ ej
                  e      Zee   e	d<   dZ
ee	d<   d Zd Zded	ed
efdZy)SpeculationLoga3  
    SpeculationLog replaces the prior copy_graphstate/restore_graphstate
    checkpointing.  Rather than saving/restoring state, we restart the
    dynamo conversion process over from the beginning -- but when we
    hit the start of the speculation that failed, we instead generate
    a graph break.
    default_factoryentriesr   indexc                     d| _         y Nr   )r   r   s    r~   restartzSpeculationLog.restart   s	    
r   c                 F    | j                   j                          d| _        y r   )r   clearr   r   s    r~   r   zSpeculationLog.clear   s    
r   r   r   r   c                 6   t        | j                        | j                  k(  r'| j                  j                  t	        ||||             | j                  | j                     }d}| j                  dk7  r]| j                  | j                  dz
     }d|j
                   d|j                   d|j                  j                   d|j                   d	}|j                  |k(  r|j
                  |k(  r|j                  |k(  st        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 occured:
- 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||

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

a
r   N)r   r   r   __doc__dataclassesfieldlistr   r   r   r   r   r   r   r   r   r   r   r~   r   r      sV     '8k&7&7&MGT"#ME3N--%(-	-r   r   c                   T    e Zd ZU  ej                  e      Zeeef   e	d<   defdZ
y)
LocalStater   automatic_dynamicr   c                 b    dj                  d | j                  j                         D              S )N
c              3   L   K   | ]  \  }}| d |j                            yw): N)render).0kvs      r~   	<genexpr>z$LocalState.render.<locals>.<genexpr>)  s*      
%)QqcAHHJ< 
s   "$)joinr   itemsr   s    r~   r   zLocalState.render(  s/    yy 
-1-C-C-I-I-K
 
 	
r   N)r   r   r   r   r   dictr   r   rI   r   r   r   r   r~   r   r   "  s6    8I8I8I9tC!445 
 
r   r   c                   <    e Zd ZU eed<   eed<   dZeee      ed<   y)DistributedState
compile_pglocal_stateN
all_states)	r   r   r   r   r   r   r   r   r   r   r   r~   r   r   /  s!    O-1Jj)*1r   r   c                       e Zd ZU  e       Zee   ed<   ededdfd       Zedede	fd       Z
ed	d       Zede	fd       Zy)
TensorifyStateforce_specializationsr   r   Nc                 :    | j                   j                  |       y rw   )r   addclsr   s     r~   
specializezTensorifyState.specialize<  s    !!%%e,r   c                     || j                   v S rw   )r   r   s     r~   should_specializez TensorifyState.should_specialize@  s    1111r   c                 8    | j                   j                          y rw   )r   r   r   s    r~   r   zTensorifyState.clearD  s    !!'')r   c                 2    t        | j                        dk(  S r   )r   r   r   s    r~   emptyzTensorifyState.emptyH  s    3,,-22r   r   N)r   r   r   setr   r   r   classmethodr   r   r   r   r   r   r   r~   r   r   6  s     '*e3s8+-s -t - - 2c 2d 2 2 * * 3d 3 3r   r   c                  4    t        j                  t              S rw   )torchdynamo_loggingget_step_loggerlogr   r   r~   _step_loggerr   M  s    ..s33r   InstructionTranslatorBasec              #   D  K   | j                   j                  }| j                   j                  }	 g | j                   _        d| j                   _        d  || j                   _        || j                   _        y # || j                   _        || j                   _        w xY wwr   )speculation_logr   r   )r{   r   r   s      r~    save_and_restart_speculation_logr   R  s        ((G$$E)%'"#$ %,"#(  &-"#( s   -B &A9 #B 9$BB c              #      K   	 | j                   j                  }d| j                   _        d  || j                   _        y # | j                   _        w xY wwNF)outputshould_exit)r{   tmps     r~   (temporarely_allow_writes_to_output_graphr   d  sA     $ii## %		 #				s   A+A AAAc                   \    e Zd ZU eed<   eed<   eed<   dZeee	e
f      ed<   d Zd Zd Zy)	BlockStackEntryr   targetstack_indexNwith_contextc                     | j                   d uS rw   )r   r   s    r~   can_restorezBlockStackEntry.can_restorex  s      ,,r   c                 *   | j                   J | j                  rbt        | j                  d      rL| j                  j                  r6t	        | j                   dz
  t        | j                  j                              S t	        | j                   dz
        S )Ntarget_valuesr   )r   r   hasattrr   r4   tupler   s    r~   	resume_fnzBlockStackEntry.resume_fn{  s    +++))?;!!//  1$eD,=,=,K,K&L  t//!344r   c                     | j                   J |r| j                   j                         s|s| j                   j                  |      S y rw   )r   exit_on_graph_breakexit)r   r{   is_graph_breaks      r~   r   zBlockStackEntry.exit  sG      ,,,t00DDF$$))"--  r   )r   r   r   r    r   r   r   r   r   rM   rN   r   r   r   r   r   r~   r   r   n  sJ      	 (%'EEF -5.r   r   c                       e Zd Zy)r   Nr   r   r   r   r   r~   r   r         r   r   c                       e Zd Zy)ReturnValueOpNr  r   r   r~   r  r    r  r   r  c                       e Zd ZdZy)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.c                     t        t        j                  |       j                        t	        |       t        j                  |       dddt        ffd       }|S )Nr   InstructionTranslatorr   c                 h    | j                  j                  | | j                        i              y rw   )pushcall_functionpopn)r   r   fn_varnargss     r~   implzstack_op.<locals>.impl  s'    		&&&tTYYu-=rBCr   )r   inspect	signature
parametersrK   	functoolswrapsr    )r  r  r  r  s     @@r~   stack_opr    s]    !!"%001ER F__RD* D+ D D Kr   r   truth_fnr  c                 R   |t         j                  us|ryt        | j                  t              sJ | j                  }| j
                  |   }|j                  dk7  ry|dz  }d}| j
                  |   }|j                  dk(  rrt        |j                  t              sy|j                  }|dz  }| j
                  |   }|j                  dvry|dz  }|j                  dk(  r|dz  }| j
                  |   }|j                  dk7  ry| j                  t        j                  |             y	)
NFLOAD_ASSERTION_ERRORr   zassertion error
LOAD_CONST)CALL_FUNCTIONPRECALLCALLr  RAISE_VARARGST)operatortruth
isinstancer   r   instructionsr   argvalr   r  rL   create)r   r  r  current_instruction_pointerr   	error_msgs         r~   &_detect_and_normalize_assert_statementr'    s.   , 	&4d..444"&":":89D{{,,1$ "I89D{{l"$++s+KK	 	$q(#  !<=;;BB 	$q(#;;)#'1,'  !<={{o%II%%i01r   Fc                 r   |(t         j                  j                  j                         }	 |d   j                  |d   j
                  f}d}t        j                  r/t               }dj                  t        j                  |            }nt               |z   }t        |      }dj                  t        j                  |            }d|d    d|d    d	| d
t        j                  r| d| dz  nt        |      z  t         j                  j!                  dd fd       t"        j%                  t&        j(                        r1t*        s+t-        j.                  |      rt"        j1                         y t"        j1                  d|d   |d   |       y # t        $ r | d   | d   f}Y iw xY w)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>  s    / 
 r   c                  B     d rt        j                          S d S )Nr   r   )	traceback
format_exc)exc_infouser_stack_traces   r~   r   z!log_graph_break.<locals>.<lambda>  s+    ./rH)2F2F2H1]^ Z\1]^ r   )metadata_fn
payload_fnzmGraph break (user stack suppressed due to duplicate graph break) in user code at %s:%s
Graph Break Reason: %s)torch_guardsr   extract_stackr   r   
IndexErrorr   verboser)   r   r2  format_listr'   r   _loggingtrace_structuredgraph_break_logisEnabledForr   DEBUGexplainrB   r   debug)	code_optionsr   r4  
user_stack	frame_locstack_above_dynamo_formattedstack_above_dynamouser_stack_formattedr5  s	     `     @r~   log_graph_breakrK    s   ]]11??A

^,,jn.C.CD	 $& ~~35')ww!!"45(
$ ,-
:
+J7
779#8#8#DE
&y|nAil^ D%h '!	!  ~~+, -a#$ %HH	
 	C 455	NN##
 _ $  	$$W]]3+//	:
 		
 	|aLaL		
}  
 ')*
	
s   F F65F6c                 z     ddg t         j                  dd	fd	dddt        f fd}|S )
NzData-dependent branchingzyDetected data-dependent branching (e.g. `if my_tensor.sum() > 0:`). Dynamo does not support tracing dynamic control flow.z1Use `torch.cond` to express dynamic control flow.c           	         t        | j                  t        	d| 
             | j                         st	        dddg        | j                         r=d| j                          }t        j                  |       t        j                  |      | j                  |       t        j                  d       | j                  j                  | t        d	t!        |       | | j                         g             | j#                          | j%                  | j&                        }r| j                  |       | j%                  |j(                        }t*        j,                  d
k\  r%| j                  j/                  t1        d      g       t1        |j2                  |d         }|j5                  |       | j                  j/                  |g|z   |z          y )Nattempted to jump with gb_typecontextexplanationhintsr   z;Should not compile partial graph (data-dependent branching)r   zDynamo has determined when encountering data-dependent branching (e.g. `if my_tensor.item() > 0:`) that it should not compile the partial graph.BSkipping frame because there is a graph break in a for/while loop
zgeneric_jump triggered compilezgeneric_jump       TO_BOOLr   )r   )rK  rE  r(   should_compile_partial_graphr*   maybe_has_backedgeframe_summaryr   infor   	SkipFramer  rD  r   compile_subgraphr/   rF   popcreate_call_resume_atnext_instructionr   sysversion_infoadd_output_instructionsr   r   copy_positions)r   r   value	extra_msgmsgif_nextif_jump	jump_inst_explanation_gb_type_hintsr  s           r~   jump_graph_breakz&generic_jump.<locals>.jump_graph_breakG  s   - 1%9(		
 002U-  ""$U%%'(*  HHSM--$$		%		23$$%/	{;d>P>P>R=S 	% 	
 	
,,T-B-BCIIe,,T[[9w&KK//1CI1N0OP&t{{71:F	  &++YK',AG,KLr   r   r   r   c                    | j                         }t        j                  r	t        |       r| j                         }|j	                         r4t        |j                               r| j                  |      S  | ||       t        |t              rJ | j                  j                  dt        j                  gt        ||fi         | j                  |       y t        |t              r|j                   }t        |t        j"                        s|dk7  }t        j$                  j&                  j(                  j+                  |      }|s(t-        dt/        |      dg t0        j2                         | j                  |       y  | j                  j                  dt        j4                  gt        |fi        }t7        | |t9        |j:                  |             } | j                  j                  dt        j                  gt        ||fi         | j                  |       y |j	                         rt        |t<              r>|j>                  r2tA        |j>                  jC                  tD        jF                                |j                               r%r| jI                  |       | j                  |       y y t        |t              r| jK                         r | ||       y t        |tL              rS| j                  jO                  |jP                        } |      r%r| jI                  |       | j                  |       y y t        |tR              r(	 |jU                  | d      }	t        |	t\              r|	j_                  | g i       }t        |t`              rWt        |jb                  t
        td        f      r7 |jb                        rr| jI                  |       | j                  |       y t        |t              r5|jg                         rir| jI                  |       | j                  |       y t-        d	d
|	 d| dg        y  d      r%r| jI                  |       | j                  |       y y y y t        |t              sW|ji                  |       rF tk        |jm                  |                   r%r| jI                  |       | j                  |       y y t        |t              r	 t        |j                   t        j"                        r|jg                  | j                        }
nto        |j                   dk7        }
 |
      r%r| jI                  |       | j                  |       y y t        |tr        jt                        r. d      r%r| jI                  |       | j                  |       y y ddlm;} |j>                  N ||j>                        r< |jy                               r%r| jI                  |       | j                  |       y y t-        d|        y # tV        jX                  $ r] tW        jZ                  |        	 |jU                  | d      }	n0# tV        jX                  $ r tW        jZ                  |        d }	Y nw xY wY =w xY w# tV        jp                  $ r*}| jK                         r | ||d|       cY d }~S  d }~ww xY w)Nr  r   z#Assertion failed on symbolic shapesr   rO  )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   )rh  r   )is_constant_sourcerN  )=r`  r    rewrite_assert_with_torch_assertr'  is_python_constantr   as_python_constantjumpr!  ri   r   create_proxyr8  _assert_asyncrE   rh   sym_numSymBoolfxexperimentalsymbolic_shapesexpect_truer*   r   r   
USER_ERRORscalar_tensorrJ   r?   noderP   sourcer.   
make_guardr-   SEQUENCE_LENGTHr  rZ  rf   get_submodule
module_keyrp   var_getattrr   ObservedAttributeErrorhandle_observed_exceptionrX   r  rL   rg  r   evaluate_exprhas_unpack_var_sequencer   unpack_var_sequencer   	UserErrorr   BackwardHookVariableru  get_real_value)r   r   rg  r&  sym_exprresultscalar_to_tensor_proxyscalar_to_tensormodxeval_resulteru  rm  rn  ro  rp  r  r  s                r~   innerzgeneric_jump.<locals>.innerz  s   !%336tXtL)-I'')002399T?*$T47 %0(((#'' 'y'92>
 		$%1 !==!(EMM:'1}H..>>JJ8T$ E #H$&= 1 < <=	 		$%=T[[%=%=!4!4&7H%SU7V&"  -&,-C-H-H$O  %DKK$$## #$4i#@"E
 IIdO##% %!23ell55l6R6RST0023IIe$		$ 4
 u~/D4U4U4WT4//0++++E,<,<=C}IIe$		$  89	%%dJ7 !/0r26f&67JLL4+=  - IIe,		$8++- IIe,		$$ U"*1#Zx @%X  D>		%(IIdO " . .. E>2u7T7T8
 E55d;<=IIe$		$ > / emmU]];"'"5"5dkk"BK",U]]a-?"@K
 $IIe$		$ % y==>~IIe$		$ 
 3||',>u||,LE0023		%(IIdO 4
 !$5eW= , 	] -- --d3))$	:A11 11$7Ap == 446+D$2aSRRs[   &Y AZ9 (Z6/ZZ6*Z/,Z6.Z//Z65Z69[6[1*[60[11[6)r   )r   FUNDAMENTALr    )r  r  r  rm  rn  ro  rp  s   `` @@@@r~   generic_jumpr  ;  sb    )H	@ 		&	&;F
1M 1Mfk/ k{ k kZ Lr   c                       fd}|S )Nc                      t        j                         dddt        f fd       }dddt        dt        ffd|S )Nr   r   r   c                 P   | j                         }|j                  r"|j                  J  | ||j                        S 	  | |      S # t        $ r@}| j                  r>|j                          t        dd| j                   ddgt        j                  |       t        |t        j                        r | j                         s t        | j                  dt        |      |j                          | j#                         r>d| j%                          }t&        j)                  |       t        j*                  |      ||j                          |j-                  d	       t/        |j0                  |j                         |_        Y d }~nd }~ww xY w|j3                          y )
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.)rP  rQ  rR  rS  from_excT)r4  r   rF  rU  graph_break)	speculater   r   r+   active_generic_context_managersremove_from_statsr*   r   CAUSED_BY_EARLIER_GRAPH_BREAKr!  r   UncapturedHigherOrderOpErrorrZ  rK  rE  r   
real_stackr[  r\  r   r]  r^  add_to_statsr/   ri  r   )r   r   speculationexcpri  handle_graph_breakinner_fns        r~   wrapperz>break_graph_if_unsupported.<locals>.decorator.<locals>.wrapper,  s   ..*K!!"))555)$k6H6HII)Sd++ 'S77 **,$ R"CDDhDhCi j %Dc.LL "&	 dC$D$DE88:%%!t9#	 **,]--/02  HHSM--,$6&&(!!-0%7$//%R""O'SP 113s   A
 

FD6FFr   c                 R   | j                   j                  | |       t        |       }g }| j                  D ]  }t	        |j
                  t              r:|j                  |j                         j                  |j                  |             W|j
                  J t	        |j
                  t              sJ |j
                  j                  |       |j                  |j                         j                  |j                  |              | j                   j                  |j                                ~t         j"                  dk\  r|j$                  dk(  r| j&                  | j&                  j)                         nd}t+        |      dkD  r<t         j"                  dk  sJ | j                   j                  t-        d|      g       t/        |j0                  d	      }|d
   j3                  |       | j                   j                  |       nF|j4                  J t7        j6                  |      }d |_        | j                   j                  |g       | j                   j                  |       t         j"                  dk\  rt         j"                  dk  rs|j$                  dk(  rdt;        j<                  t:        j>                  d   |j0                        t;        j<                  t:        j>                  d   |j0                        z   }	n*t;        j<                  |j@                  |j0                        }	| jC                  |	z
         tE              D ]  }
| jG                  tI                       | j                   j                  | jK                  | jL                               y )NrT  rW     r  r   r   rV  KW_NAMESr#  Fr)  rW     r  )'r   r_  r$   block_stackr!  r   rk   extend_outputr   try_except_torch_function_moderE  rM   reconstruct_typetry_finallyre  get_instructionsrc  rd  r   kw_namesrx  r   r   r   argrf  r   copyexn_tab_entrydisstack_effectopmapopcoder  ranger  re   ra  rb  )r   r   r   cgcleanupbr  
call_insts	inst_copyr  r}   r  s              r~   r  zIbreak_graph_if_unsupported.<locals>.decorator.<locals>.handle_graph_break^  s   
 KK((f(=4B)+G%% V ann.GH$$DDOOW
 ~~111!!..3JLLL//3  !:!:2??G!TUV KK//0C0C0EF7*t{{f/D }}0 MM446 
 x=1$++g555KK77+JxHI 2$((EB
2--d333J? {{*** IIdO	*.	'33YK@KK//8   G+$$w.KK6)  #//IIi($(( $$SYYv%6A B  #//TXXFIId\)*4[ -		/+,-KK//**4+@+@Ar   )r  r  r    r/   )r  r  r  r  s   ` @r~   	decoratorz-break_graph_if_unsupported.<locals>.decorator+  sY    		"/	45 /	4[ /	4 
#/	4bC	-C	C	 'C	J r   r   )r  r  s   ` r~   break_graph_if_unsupportedr  *  s    xt 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()c                 >   t         	|   |||       d }t        j                  j	                         D ci c]'  \  }}|t        | |t        j                  ||            ) }}}t        d      D cg c]  }|j                  |       c}| _
        y c c}}w c c}w )Nc                 ^    t        d|  d| d|  dd|  dgt        j                         y )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).rO  )r*   r   SUPPORTABLE)r   r|   s     r~   _missingz5BytecodeDistpatchTableMeta.__init__.<locals>._missing  sS    2!(+dV4[\b[ccef;F8 D_ _ '22		r      )super__init__r  r  r   getattrr  partialr  getdispatch_table)
r   r   basesdctr  r   opr  i	__class__s
            r~   r  z#BytecodeDistpatchTableMeta.__init__  s    uc*
	 "iioo/
 VY%6%6x%HII
 
 >C4[In003I	
 Js   ,B3Br   )r   r   r   r   r  __classcell__r  s   @r~   r  r    s    ^J Jr   r  c                       e Zd ZU dZ ej
                  e      Zee   e	d<    ej
                  d      Z
ee   e	d<   d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZeZy)ExceptionStackzU
    Exception stack that it is shared among all InstructionTranslator instances
    r   
_exc_stackN)default_current_exceptionc                     d | _         y rw   r  r   s    r~   clear_current_exceptionz&ExceptionStack.clear_current_exception  s
    "&r   c                 4    | j                  |       || _        y rw   )._set_context_and_break_context_reference_cycler  r   vals     r~   set_current_exceptionz$ExceptionStack.set_current_exception  s    ;;C@"%r   c                 v    | j                   J | j                  | j                          | j                          y rw   )r  r   r  r   s    r~   move_current_exception_to_stackz.ExceptionStack.move_current_exception_to_stack  s2    &&222D++,$$&r   c                 6    | j                   J | j                   S rw   r  r   s    r~   get_current_exceptionz$ExceptionStack.get_current_exception  s     &&222&&&r   c                     |j                   x}rt        |      t        ur|S t        | j                        |z   dkD  r5| j                  |   }| j                  ||dz
         |j                  |       |S Nr   r   )__context__typerL   r   r  _set_context_recursiveset_context)r   r  prev_idxctxprevs        r~   r  z%ExceptionStack._set_context_recursive  sk    ??"C"S	9I(IJt(*Q.??8,D''hl;OOD!
r   c                     |x}}d}	 |j                   }t        |      t        u ry ||u r|j                  t        d              y |}||u ry |r|j                   }| }Vr   )r  r  rL   r  )r   r  oslow_oslow_update_togglerQ  s         r~   _break_context_reference_cyclez-ExceptionStack._break_context_reference_cycle  sy    
 F"mmGG} 00#~.t45AF{ !++%7!7# r   c                 v    | j                  |t        | j                        dz
         | j                  |       y )Nr   )r  r   r  r  r  s     r~   r  z=ExceptionStack._set_context_and_break_context_reference_cycle  s.    ##CT__)=)AB++C0r   c                 6    | j                   j                         S rw   )r  r`  r   s    r~   r`  zExceptionStack.pop  s    ""$$r   c                 :    | j                   j                  |       y rw   )r  r   r  s     r~   r   zExceptionStack.append  s    s#r   c                 ,    t        | j                        S rw   )r   r  r   s    r~   rt  zExceptionStack.__len__  s    4??##r   c                      | j                   |   S rw   )r  )r   r   s     r~   __getitem__zExceptionStack.__getitem__  s    u%%r   c                 :    d| j                   d| j                  S )Nzself._exc_stack=z - self._current_exception=)r  r  r   s    r~   __str__zExceptionStack.__str__  s"    "$//##?t'>'>&@AAr   )r   r   r   r   r   r   r   r  rH   r   r  r   r  r  r  r  r  r  r  r`  r   rt  r  r  __repr__r   r   r~   r  r    s     ):(9(9$(OJ_%O4EK4E4Ed4S1S'&'
'841
%$$&B Hr   r  c            #           e Zd ZU eed<   eeef   ed<   eeef   ed<   eed<   e	e   ed<   e
e   ed<   eed<   e	e   ed<   eed	<   e
e   ed
<   eed<   e	e   ed<   eed<   eed<   e
e   ed<   e	e   ed<   eed<   e
e   ed<   e
eegef      ed<   e
e   ed<   d Zd Zd Zd Zd Zd Zdede	e   deeef   fdZd Zd  Zdd"Zd# Zd$ Z d% Z!e"jF                  d&k\  rd' Z$nd( Z$e%d)        Z&d* Z'd+ Z(d, Z)d-e
e   fd.Z*d/e	e   fd0Z+d1efd2Z,d3ed1e	e   fd4Z-d5 Z.d6 Z/d7 Z0d8 Z1d9 Z2e.Z3d: Z4d; Z5d< Z6e7jp                  d=        Z9d> Z:d? Z;e<d@        Z=dA Z>dB Z?dC Z@dD ZAdE ZBdF ZCdG ZDeDZEeDZF eGeHj                  dH      ZJ eGeHj                  dH      ZL eGeHj                  dI      ZM eGeHj                  dI      ZNdJ ZOdK ZPdL ZQdM ZRdN ZSdO ZTdP ZUdQ ZVdR ZWdS ZXdT ZYdU ZZd1e[fdVZ\dW Z]dX Z^dY Z_dZ Z`d[ Zad\ Zbd] Zcd^ Zdd_ Zed` Zfda Zgdb Zhdc Zi ejdde      df        Zk ejdde      dg        Zl ejdde      dh        Zmdi Zndj Zodk Zpdl Zqdm Zrdn Zsdo Ztdp Zudq Zvdr Zwd1efdsZx ejdte      du        Zydv Zzdw Z{dx Z|dy Z}dz Z~efd{Zd| ZeZd} Zd~ ZeZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZeZd Zd Zd Zd Zd Zd Z eeHjN                        Z eeHjR                        Z eeHj                        Z eeHjX                        Z eeHj\                        Z eeHj`                        Z eeHjd                        Z eeHjh                        Z eeHjl                        Z eeHjp                        Z eeHjp                        Z eeHjv                        Z eeHjz                        Z  ejdde       eeHj~                              Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Z eeHj                        Zd Ze"jF                  d&k\  rd Zd Zd Zd ZddZ ejdde      d        Zd Zd ZeDZeDZ eGeHj                  dH      Z eGeHj                  dH      Z eGeHj                  dH      Z eGeHj                  dH      Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z ejdde      d        Zd Zd Zd Zd Zd Zd ZddZ	d Z
d Zd Ze%d        Zej                  deegef   fd       Zd1efdZ	 ddede	e   deeef   deeef   deeef   deeef   deeef   deeef   dedȐej&                  dededʐedede
e   de
eej.                        d1d!f" fd̈́Z xZS )r   r   symbolic_localssymbolic_globalssymbolic_torch_function_statestackr   current_instructionr  r   r  accept_prefix_instprefix_instsinline_depthinconsistent_side_effectscurrent_speculationr  exn_vt_stackexec_recorderstrict_checks_fnstart_pointc                     d| _         y)z
        InstructionTranslator has encountered instructions which may cause
        dynamo to see a different version of history from eager
        See: https://github.com/pytorch/pytorch/issues/110765
        TN)r  r   s    r~   mark_inconsistent_side_effectsz8InstructionTranslatorBase.mark_inconsistent_side_effects7  s     *.&r   c                     | j                   j                  }| j                  J | j                  | j                  d  D ]8  }|j                  dv r y|j                  t
        v s&|j                  }||k  s8 y y)N)RETURN_VALUERETURN_CONSTFT)r  offsetr   r"  r   r   r#  )r   
cur_offsetr   jump_offsets       r~   r[  z,InstructionTranslatorBase.maybe_has_backedge?  s    ( --44
''333%%d&>&>&@A 	 D{{>>{{l*"kk+	  r   c                     t        | d      s^t        | j                  d   xs g       | _        t	        | t
              r-| xj                  | j                  j                         z  c_        | j                  S )N	_cellvarsco_cellvars)r   r   rE  r!  r!  InliningInstructionTranslatorparentcellvarsr   s    r~   r%  z"InstructionTranslatorBase.cellvars^  Z    t[)"4#4#4]#C#IrJDN $ =>$++"6"6"88~~r   c                     t        | d      s^t        | j                  d   xs g       | _        t	        | t
              r-| xj                  | j                  j                         z  c_        | j                  S )N	_freevarsco_freevars)r   r   rE  r(  r!  r#  r$  freevarsr   s    r~   r*  z"InstructionTranslatorBase.freevarsg  r&  r   c                 ~    t        | d      s&| j                         | j                         z   | _        | j                  S )N_cell_and_freevars)r   r%  r*  r,  r   s    r~   cell_and_freevarsz+InstructionTranslatorBase.cell_and_freevarsp  s2    t12&*mmo&GD#&&&r   c                 
   t        | j                  | j                        }| j                  j	                         D ci c]  \  }}||v s|| c}}| _        | j
                  j                  j                  |        y c c}}w rw   )r   r"  r  r
  r   r   side_effectsprune_dead_object_new)r   readsr   r   s       r~   prune_dead_localsz+InstructionTranslatorBase.prune_dead_localsu  sn    !$"3"3T5M5MN!11779 
QQ%ZAqD 
 	  66t<	 
s   A?A?r  r|   kwargsc                    t        |t              sJ t        |t              sJ t        |t              sJ t	        d t        j                  ||j                               D              sJ d }t        |d      r|j                  }t        |d      r|j                  }|r$t        |      rt        |      rt        d|       | j                  |j                  | ||             y )Nc              3   <   K   | ]  }t        |t                y wrw   )r!  rH   )r   r  s     r~   r   z:InstructionTranslatorBase.call_function.<locals>.<genexpr>  s      
 q/*
   rg  r  z$Attempt to trace forbidden callable )r!  rH   r   r   all	itertoolschainvaluesr   rg  r  callabler=   AssertionErrorr  r  )r   r  r|   r3  r  s        r~   r  z'InstructionTranslatorBase.call_function~  s     "o...$%%%&$''' 
__T6==?;
 
 	
 
 2wxxH2tuuH*|H/E #Gz!RSS		"""4v67r   c                 ^    t        |t              st        |      }|j                  | ||      S )zD
        Redirect the call to the generator "call_function"
        )r!  rS   r  r   r  r|   r3  s       r~   inline_generator_functionz3InstructionTranslatorBase.inline_generator_function  s.     "<=/3BdF33r   c                     t         j                  r,t        |j                               r| j	                  |||      S t
        j                  | |||      S )zF
        A call to some user defined function by inlining it.
        )r   "enable_faithful_generator_behaviorr!   get_coder?  r#  inline_callr>  s       r~   inline_user_function_returnz5InstructionTranslatorBase.inline_user_function_return  sF     44bkkm9T11"dFCC0<<T2tVTTr   Nc                     || j                   }| j                  dkD  rd| j                   dnd}t        | j                  j                  |      }|dnd| d}| j                  j                   d| d| j                  j
                   | | S )Nr   z (inline depth: )r   r   r   z in )r   r  r,   f_coder*  co_name)r   r   inline_depth_strfuncnamefuncname_strs        r~   get_line_of_code_headerz1InstructionTranslatorBase.get_line_of_code_header  s    >[[F7;7H7H17Lt0013RT 	   7 7@%-rRz3C++))*!F848K8K7L\N[kZlmmr   c                     d| j                          d}t        j                  | j                  j                  | j
                        j                         }|d| z  }|S )NzTRACE starts_line r   z    )rL  	linecachegetlinerG  r*  r   rstrip)r   log_strlines      r~   get_log_starts_line_log_strz5InstructionTranslatorBase.get_log_starts_line_log_str  sX    &t'C'C'E&FbI  !8!8$++FMMOT$= r   c                    | j                   |k(  ry || _         t        j                  | j                  j                  || j                  j
                         ddlm}  || j                  j                         t        j                  t        j                        r*t        j                  dt        | j                               y y )Nr   )	dump_file%s)r   r   set_current_locrG  r*  rH  torch._logging.structuredrU  trace_source_logrA  r   rB  rD  rD   rS  )r   r   rU  s      r~   starts_linez%InstructionTranslatorBase.starts_line  s    ;;& &&KK##VT[[-@-@	
 	8$++))*((7""4D4T4T)UV 8r   c                    | j                   }|y| j                  |   x| _        }|dz   | _         |j                  r| j                  |j                         | j                  s\| j                         rL| j                         r<| j                         | _        | j                  j                  r| j                  |      S t        j                  t        j                        r6t        j                  d|j                   |j"                  | j                         | j%                  |       	  | j&                  |j(                     | |       | j*                  j,                   S # t.        $ r  t0        j2                  $ r}| j5                  |       Y d}~yd}~wt6        t8        f$ r Y yt:        $ r< | j                  t<        j                  d        t<        j                  dd       Y nw xY w| j                  j?                          y)	z<Process exactly one instruction, return False we should exitNFr   zTRACE %s %s %sTzempty checkpointzstep triggered compiler4  ) r   r"  r  rZ  r  rZ  is_non_empty_graphr  r  r   step_graph_breaktrace_bytecode_logrA  r   rB  rD  r   r#  update_block_stackr  r  r   r   r
   r   ObservedExceptionexception_handlerr  r  r+   r   r   )r   ipr   r  s       r~   stepzInstructionTranslatorBase.step  s   %%:*.*;*;B*?? 4#%6 T--. 

113'')'+~~'7D$''..,,T22**7==9$$ $++t{{DJJ 	%	?,D,T48{{....- 	$$ 	""1%|, 	 	?''/		,-II.I>		? 	  ::<s%   *6E! !G+=FG+'AG+*G+r  c                    |j                   }|rt        | j                        dk\  rg|j                  | j                  d   j                  urA|j                  | j                  d   j                  u r| j                  j	                          y y y y | j                  rD|j
                  dvr5t        | j                        dk(  sJ | j                  j	                          y y y )N   r)  )NOPJUMP_BACKWARDr   )r  r   r  r   r`  r   )r   r   r   s      r~   r`  z,InstructionTranslatorBase.update_block_stack  s     &&E (()Q.D,<,<R,@,G,GG(8(8(<(C(CC $$((* D H /  ##;S(S t//0A555$$((* )T#r   c                      y rw   r   r   r   s     r~   r`  z,InstructionTranslatorBase.update_block_stack  s    r   c                 4    | j                   | j                     S rw   )r"  r   r   s    r~   rb  z*InstructionTranslatorBase.next_instruction  s      !9!9::r   c           	      "   | j                   j                  rJ | j                  J | j                   j                  | dt	        d| j                         g             | j                   j                  t        |      g| j                  z          y )NTstep_unsupported)partial_convertr   )	r   output_instructionsr  r_  r/   r\  re  r   r"  )r   continue_insts     r~   r^  z*InstructionTranslatorBase.step_graph_break!  s    ;;2222''333$$ %&84;M;M;O:PQ 	% 	

 	++!-01D4E4EE	
r   c                 ,    t        j                  d       S rw   )r   current_framer   s    r~   run_ctx_mgrz%InstructionTranslatorBase.run_ctx_mgr.  s     ++D11r   c                    | j                         5  	 | j                  j                  |        | j                  | _        | j                         r	 | j                         r| j                  j-                          t/        | t0              r| j                  j3                          	 d d d        y # t        $ r  t        $ r  t        $ r}t        |d      rpd|j                  v rbt        j                  j                  | j                  j                  | j                  j                        j!                  ddd      }||_          d }~wt$        $ r1}| j&                  r| j&                  j)                         |_         d }~ww xY w# | j                  j-                          t/        | t0              r| j                  j3                          w w xY w# 1 sw Y   y xY w)Nri  zData-dependentFT)print_outputinclude_strideinclude_device)rt  r   push_txr   r  rd  r
   r&   RuntimeErrorr   ri  r8  r~  GraphModule
nn_modulesgraphprint_readablepartial_fx_graph	Exceptionr  
get_recordexec_recordpop_txr!  r	  r  )r   r  readable_graphs      r~   runzInstructionTranslatorBase.run4  s    "	*!*##D)#'#;#; iik iik. ""$ d$9:KK'')E"	* "	* 2 (  
1e$)9QUU)B%*XX%9%9..0A0A&$n%*4PT %  #
 *8A& %%$($6$6$A$A$CAM	 ""$ d$9:KK'') ;C"	* "	*sJ   GAB/!AG/F
A=EF,E??FFAGGGr  c                     |#t        |t              sJ dt        |              | j                  j	                  |       y )Nz"push expects VariableTracker, got )r!  rH   rF   r  r   r  s     r~   r  zInstructionTranslatorBase.pushY  s?    {jo> 	
0?	
> 	

#r   valsc                 4    |D ]  }| j                  |        y rw   r  )r   r  r  s      r~   	push_manyz#InstructionTranslatorBase.push_many_  s     	CIIcN	r   r   c                 6    | j                   j                         S rw   )r  r`  r   s    r~   r`  zInstructionTranslatorBase.popc  s    zz~~r   nc                 p    g t        t        |      D cg c]  }| j                          c}      S c c}w rw   )ry   r  r`  )r   r  r}   s      r~   r  zInstructionTranslatorBase.popnf  s*    :uQx8!488:89::8s   3
c           	         |j                   }| j                  r7|| j                  v r)| j                  j                  || j                  |          	 | j	                  | j
                  |   j                                |j                  d      r| j
                  j                  |       y y # t        $ r |j                  d      rh	 |j                  dd      }| j	                  | 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 w xY w)N.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 comprehensionsrO  z*Attempted to read undefined local variablez+Could not find a local variable with name `___stack)r#  r  f_localsadd_local_varr  r
  unwrapKeyError
startswithreplacer*   r   r  r`  )r   r   r   new_names       r~   	LOAD_FASTz#InstructionTranslatorBase.LOAD_FASTi  sP   {{$$--"7,,T4==3FG	IId**40779:4 ??:&  $$T* '3  	s##||C<HIId228<= 	$ W",TF 3&[\`[aab$cF.99		 !H(/"MdVST U9-889	#	s6   ,B+ +E0C76E70D*'E)D**)EEc                    |j                   | j                         v sJ | j                  |j                      }| j                  j                  j                  |      }| j                  |       | j                  rW|j                   | j                  v r>| j                  j                  |j                   | j                  |j                             y y y rw   )
r#  r-  r
  r   r/  	load_cellr  r  r  r  )r   r   cellcontents_vars       r~   
LOAD_DEREFz$InstructionTranslatorBase.LOAD_DEREF  s    {{d446666##DKK0{{//99$?		,$++">,,T[[$--:TU #?r   c                 |    |j                   }| j                         }|j                  |       || j                  |<   y rw   )r#  r`  set_name_hintr
  )r   r   r   	loaded_vts       r~   
STORE_FASTz$InstructionTranslatorBase.STORE_FAST  s4    {{HHJ	%%.T"r   c                 2    | j                   |j                  = y rw   )r
  r#  rk  s     r~   DELETE_FASTz%InstructionTranslatorBase.DELETE_FAST  s      -r   c                 R   |j                   | j                         v sJ | j                  |j                      }| j                         }| j                  j
                  j                  ||       t        |t              sJ |j                  |j                  |j                         y y rw   )r#  r-  r
  r`  r   r/  
store_cellr!  r`   
local_namer  )r   r   r  r  s       r~   STORE_DEREFz%InstructionTranslatorBase.STORE_DEREF  s    {{d446666##DKK0hhj  ++D#6$---??&doo. 'r   c                     |j                   }| t        j                  |j                        S | j                  |   }|s/t        j                  |j                        x| j                  |<   }|S )Nrg  )r  rL   r$  r#  _constants_cache)r   r   r  r  s       r~   _load_constz%InstructionTranslatorBase._load_const  sa    HH9#**==##A&-=-D-D4;;-WWD!!!$s
r   c                 D    | j                  | j                  |             y rw   )r  r  rk  s     r~   r  z$InstructionTranslatorBase.LOAD_CONST  s    		$""4()r   c           	         |j                   }| j                  rn|| j                  v r*| j                  j                  || j                  |          n6|| j                  v sJ | j                  |   | j                  j
                  |<   || j                  v r\| j                  j                  | j                  |      }| j                  | j                  j                  j                  ||             y 	 | j                  |   }| j                  t        j                  | |t        |                   y # t        $ r | j                  |      cY S w xY wrw   )r#  r  	f_globalsadd_global_var
f_builtinsbuiltinsr  r   r/  r  load_globalr  load_builtinrH   buildr7   )r   r   r   variablerg  s        r~   _load_globalz&InstructionTranslatorBase._load_global  s   {{t~~%""11$t8LMt...48OOD4I""++D14((({{//0E0Ed0KLHIIdkk..::8TJK	+NN4(E 			/''e\$5GHI  	+$$T**	+s   2D1 1EEc                 l    d}| j                  |      }t        |      }t        j                  | ||      S )Nztorch.nn.modules.module)import_sourcer   rH   r  )r   module_namemodule_sourcefglobals_values       r~   nn_modules_globals_vtz/InstructionTranslatorBase.nn_modules_globals_vt  s6    /**;7'4$$T>=IIr   c                    t         j                  dk\  r3t         j                  dk  r |j                  dz  r| j                  |       | j	                  |       t         j                  dk\  r"|j                  dz  r| j                  |       y y y )Nr  rV  rf  )rc  rd  r  	PUSH_NULLr  rk  s     r~   LOAD_GLOBALz%InstructionTranslatorBase.LOAD_GLOBAL  sn    w&3+;+;g+E$((UV,NN4 $w&488a<NN4  ,8&r   c                    | j                         }|j                  }t        |      }|| j                  vrt	               | j                  |<   | j
                  j                  j                  || j                  |         }t        |t              rt        d|dg        | j
                  j                  j                  |||       y )Nz%Storing Tensor hook handle in globalsThis is not supported.rO  )r`  r#  r7   r  objectr   r/  track_global_existingr!  rl   r*   store_global)r   r   rg  r   r  r  s         r~   STORE_GLOBALz&InstructionTranslatorBase.STORE_GLOBAL  s    
{{d#t,,,*0(D!!$';;++AAD))$/
 e45?4	 	  --heDr   c                    d|v rZt         j                  j                  j                  |   }|j	                  dd      j	                  dd      j	                  dd      }n t        |      }d|j	                  dd       }| j                  j                  }||vs	||   |u sJ |||<   | j                  j                  |       t        |      S )z-Create an alias to a module for use in guardstorch_package>r}   <r  _dot_	__import_)
r8  packagepackage_importer_package_imported_modulesr  r   r   global_scopeupdate_co_namesr7   )r   r  rg  aliasr  s        r~   r  z'InstructionTranslatorBase.import_source  s     k)MM22LLE ##C-55c3?GGWU  #;/E 3 3C ABCEKK,,	I%5)9U)BBB 	%##E*E""r   c                 ~    |j                  d|dz
        }t        |      |k  rt        d      |d   }|r| d| S |S )z
        Copied from the Cpython implementation of __import__
        Resolve a relative module name to an absolute one.
        https://github.com/python/cpython/blob/5a094f0255eea1db58fb2cf14c200971e64ec36e/Lib/importlib/_bootstrap.py#L902
        r  r   z2attempted relative import beyond top-level packager   )rsplitr   ImportError)r   r   r  levelbitsbases         r~   resolve_namez&InstructionTranslatorBase.resolve_name  sQ     ~~c519-t9uRSSAw#'$q1T1r   c                    | j                   j                  d      }| j                   j                  d      }|6|2||j                  k7  r#t        j	                  d||j                  d       |S ||j                  S t        j	                  dd       | j                   d   }d| j                   vr|j                  d	      d
   }|S )z
        Copied from the Cpython implementation of __import__
        https://github.com/python/cpython/blob/5a094f0255eea1db58fb2cf14c200971e64ec36e/Lib/importlib/_bootstrap.py#L1090
        __package____spec__z)__package__ != __spec__.parent (%r != %r)rW  )
stacklevelzYcan't resolve package from __spec__ or __package__, falling back on __name__ and __path__r   __path__r  r   )r  r  r$  r   warning
rpartition)r   r  specs      r~   calc_packagez&InstructionTranslatorBase.calc_package  s    
 ..$$]3~~!!*-Gt{{$:?KK 	   N;;KK8  
 nnZ0G/!,,S1!4r   c           
      l   | j                  d      \  }}|j                         }|j                         }|j                  }t        j                   d| d| d| }|| j
                  v r| j
                  |   }t        |      }n{	 t        |||| j
                        }|d
k7  r#| j                         }| j                  |||      }|s&|j                  d      d
   }	| j                  |	      }n| j                  |      }| j                   r| j                   j#                  |       t%        t&        j(                  t*        f      r| j-                  t/        ||             y t        dt1        |      dg 	       y # t        $ r, t        dd| d| d| dg t        j                  	       Y w xY w)Nrf  r}   )fromlistr  globalszImport failurezmodule_name: z, fromlist: z, level=z"Failure when attempting to import.rO  r   r  r  zBad import resultz%Import result is not a Python module.)r  rx  r#  r2   LOCAL_MOD_PREFIXr  r7   
__import__r  r*   r   r  r  r  	partitionr  r  add_local_modrC   types
ModuleTyper1   r  rd   rF   )
r   r   r  r  r  recorded_namerg  r  pkgtop_level_module_names
             r~   IMPORT_NAMEz%InstructionTranslatorBase.IMPORT_NAME*  s   ))A,x((*..0kk !112!E7!H:Q{mT 	 DNN*NN=1E!-0F"% NN	 z'')"//S%H (3(=(=c(B1(E%++,AB++K8,,]EB%%**K89II*5@A+C	;   ,+K=XJhW\V]^ D9-889	 s   E> >1F32F3c                 H    | j                  |       | j                  |       y rw   )DUP_TOP
_load_attrrk  s     r~   IMPORT_FROMz%InstructionTranslatorBase.IMPORT_FROMc  s    Tr   c                 z   || j                   vrt        d| d      | j                   |   }t        |      rRt        | j                  j
                        }t        ||      }| j                  t        j                  | ||             y t        |      sJ | j                  t        j                  |             y )Nzname 'z' is not definedr  )r  r+   r;  r7   r   %name_of_builtins_dict_key_in_fglobalsr6   r  rH   r  r<   rL   r$  )r   r#  r  builtins_source
var_sources        r~   load_builtin_from_argvalz2InstructionTranslatorBase.load_builtin_from_argvalg  s    (vh.>?@@oof%C=*AAO +?FCJIIo++D#zBC&s+++II&--C89r   c                 :    | j                  |j                         y rw   )r  r#  rk  s     r~   r  z&InstructionTranslatorBase.load_builtinv  s    %%dkk2r   c                     | j                   J | j                  J t               j                  d| j                   | j                  z
         | j                  |j
                     | _         | j                   | _        y )Nir_count)r   r  rA   	incrementindexofr   rk  s     r~   ry  zInstructionTranslatorBase.jumpy  sr    ''333+++''0043C3CC	
 $(<<#< 33r   FTc           	          | j                   j                  t        ||j                  t	        | j
                                     y rw   r  r   r   r   r   r  rk  s     r~   
SETUP_LOOPz$InstructionTranslatorBase.SETUP_LOOP  +    dkk3tzz? STr   c           	          | j                   j                  t        ||j                  t	        | j
                                     y rw   r  rk  s     r~   SETUP_EXCEPTz&InstructionTranslatorBase.SETUP_EXCEPT  r  r   c                 8    | j                   j                          y rw   )r  r`  rk  s     r~   	POP_BLOCKz#InstructionTranslatorBase.POP_BLOCK  s    r   c                 &    | j                  |       y rw   setup_or_before_withrk  s     r~   
SETUP_WITHz$InstructionTranslatorBase.SETUP_WITH      !!$'r   c           	          | j                   j                  t        ||j                  t	        | j
                                     y rw   r  rk  s     r~   SETUP_FINALLYz'InstructionTranslatorBase.SETUP_FINALLY  s+    dkk3tzz? STr   c                 &    | j                  d        y rw   r  rk  s     r~   BEGIN_FINALLYz'InstructionTranslatorBase.BEGIN_FINALLY  s    		$r   c                     | j                  d      \  }}|J | j                  |       | j                  |j                  | t        j                  d       gdz  i              y )Nrf  rW  )r  r  r  rL   r$  )r   r   r   r   s       r~   WITH_CLEANUP_STARTz,InstructionTranslatorBase.WITH_CLEANUP_START  sX    IIaL	c{{		#		$$$T,<,C,CD,I+JQ+NPRSTr   c                 H    | j                  d       | j                  d        y )Nrf  )r  r  rk  s     r~   WITH_CLEANUP_FINISHz-InstructionTranslatorBase.WITH_CLEANUP_FINISH  s    		!		$r   c                     | j                   | j                     }| j                  t        j                  |             | j                  |       y)z|
        pushes the address of the next instruction onto the stack and increments
        bytecode counter by delta
        N)r  rb  r  rL   r$  ry  )r   r   addrs      r~   CALL_FINALLYz&InstructionTranslatorBase.CALL_FINALLY  s;     ||D112		"))$/0		$r   c                 p    | j                         }t        |t              r|j                         | _        y y rw   )r`  r!  rL   rx  r   r   r   toss      r~   END_FINALLYz%InstructionTranslatorBase.END_FINALLY  s.     hhjc+,'*'='='?D$r   c                     |j                   }|r| j                         }| j                         }|r| j                         y y rw   )r#  r`  r  )r   r   preserve_tosr  r}   s        r~   POP_FINALLYz%InstructionTranslatorBase.POP_FINALLY  s7    {{((*CHHJIIcN r   c                    | j                         j                         }	 |j                  |       }| j                  |       | j                  |       y # t        t
        j                  f$ r}t        |t
        j                        rt        j                  |        t        j                  dk\  r5| j                  |       | j                  t        j                  d              | j                  |       Y d }~y d }~ww xY wNr  )r`  realizenext_variabler  StopIterationr   ObservedUserStopIterationr!  r  rc  rd  rL   r$  ry  )r   r   itr  r  s        r~   FOR_ITERz"InstructionTranslatorBase.FOR_ITER  s    XXZ!	""4(CIIbMIIcNs<<= 	!S::;--d3 7*
 		"		*11$78IIdOO	s   3A C?-BC::C?c                 D   t        |t        j                  t        f      r|j	                  | g i       }t        | j                        rVt        |t        j                        r<|j                  t        u r*t        j                  t              j	                  | g i       }| j                  j                  |       | j                  |      r*t        j                  |j                        } |d|       t!        dt#        t              dg t$        j&                         y )Nzraised exception zFailed to raise exceptionz.Attempted to raise a non-Exception type/value.rO  )r!  r   rK   rn   r  r!   rG  ra   exc_typer#  rz  r  r  _isinstance_exceptionr   get_dynamo_observed_exceptionr*   r   r   r  )r   r  observed_exception_types      r~   _raise_exception_variablez3InstructionTranslatorBase._raise_exception_variable  s     )++-NO

 ##D"b1C
 %3	 ; ;<-++L9GGbRTUC 	//4 %%c*&)&G&G&U#),=cU*CDD/HH1%001		
r   c           	         |j                   dk(  rPt        | j                        sJ | j                  d   }| j                  |      sJ |       | j	                  |       y |j                   dk(  r!| j
                  d   }| j	                  |       y | j                         }t        |t              rm|j                  a| j                         }	 | j	                  |       | j                  j                         }|j                  | t        d      t        d              t        dt        |      dg        y # | j                  j                         }|j                  | t        d      t        d              w xY w)Nr   r)  r   	__cause__zRe-raise with 2 argumentsz3Dynamo does not support `raise ... from [not-None]`rO  )r  r   r  r)  r,  r  r`  r!  rL   rg  r  call_setattrr*   r   )r   r   r  from_vtcurr_excs        r~   r  z'InstructionTranslatorBase.RAISE_VARARGS  sI   88q= t(()))##B'C--c27C72**3/XX]**R.C**3/ hhjG'#349Nhhj2237  $00FFHH)).{;=Md=S 3GQ		  $00FFHH)).{;=Md=Ss   D6 6AE7c                     | j                   d   }t        |t              sJ |j                  t        u rt        dddg        y | j                  |       y )Nr)  z CLEANUP_THROW with StopIterationr   zRReceived StopIteration when handling generator.throw/close. This is not supported.rO  )r  r!  ra   r(  r#  r*   RERAISEr  s      r~   CLEANUP_THROWz'InstructionTranslatorBase.CLEANUP_THROW  sN    jjn#0111<<=(:p	 LLr   c                 n   t         j                  dk\  ra| j                         }|j                  r"| j                         }| j	                  |       y | j                  |       | j	                  |       y | j                         }| j                         }| j                         }| j	                  |       y )Nr  )rc  rd  r`  r#  r,  r  )r   r   r  r}   _exc_tbs         r~   r3  z!InstructionTranslatorBase.RERAISE*  s     w&((*C{{HHJ..s3 		#..s388:D((*C((*C**3/r   c                 L    t        |t        j                  t        t        f      S rw   )r!  r   ra   rn   ro   r  s     r~   r)  z/InstructionTranslatorBase._isinstance_exceptionA  s&    ++12
 	
r   c                    t         j                  dk\  rlt        | j                        dk\  sJ | j                  d   }| j                  d   }| j	                  |      sJ t        |j                        }t        d       }nkt        | j                        dk\  sJ | j                  d   }| j                  d   }| j	                  |      sJ t        |j                        }t        d       }| j                  ||||gi        y )Nr     r)     irg  )	rc  rd  r   r  r)  rK   r(  rL   r  )r   r   r  r  typtbs         r~   WITH_EXCEPT_STARTz+InstructionTranslatorBase.WITH_EXCEPT_STARTK  s    w& tzz?a'''BB**R.C--c222!#,,/C!$'Btzz?a'''BB**R.C--c222!#,,/C!$'B2S"~r2r   c           	      >
   d}t         j                  dk\  rQ| j                  j                  }|rt	        | j
                        |j                  kD  r3| j                          t	        | j
                        |j                  kD  r3|j                  r8| j                  t        j                  | j                  j                               | j                  | j                  j                                | j                  |       y | j
                  j!                          t#        |       t$        u r8t'        dt)        |      |g t*        j,                  t*        j.                         |t	        | j0                        r<| j0                  j                         }|j2                  j4                  dk(  r| j7                  d       | j                  j                          t	        | j0                        dk(  rX| j
                  j!                          t#        |       t$        u r+t'        dt)        |      |d	z   g t*        j8                         || j0                  j                         }|j2                  j4                  dk(  r| j                  j                         }| j                  j;                          t	        | j
                        |j<                  kD  r3| j                          t	        | j
                        |j<                  kD  r3t?        d
dd d      }| j0                  jA                  tC        |d t	        | j
                                     t	        | j                        dk\  rr| j                  d   }| j                  t        jD                                | j                  |       | j                  t        jF                  |jH                               nl| j                  t        j                  d              | j                  t        j                  d              | j                  t        j                  d              | j                  t        jD                                | j                  |       | j                  t        jF                  |jH                               | j                  |       y | j
                  j!                          t#        |       t$        u r8t'        dt)        |      |g t*        j,                  t*        j.                         |)NzDynamo found no exception handler at the top-level compiled function when encountering an exception. Exception will propagate outside the compiled region.r  zObserved exceptionrO  EXCEPT_HANDLERrW  r   z#Observed exception (EXCEPT_HANDLER)z  This graph break is unexpected.g    .Arf  rg  )%rc  rd  r  r  r   r  depthr`  lastir  r   rL   r  r  r  ry  r   r  r	  r*   r   r   r  r  r  r   r   r  
DYNAMO_BUGr  r   r    r   r   re   rK   r(  )r   raised_exceptionobserved_exn_gb_explanationr  block_stack_entryexception_varexcept_handler_instold_exceptions           r~   rb  z+InstructionTranslatorBase.exception_handlerd  s   d 	$
 w& 44BBM
 $**o(;(;;HHJ $**o(;(;; !&&II!2243K3K3R3RS
 		$++AACD 		-( 

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

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

  ":!66$ 4 #$4 5$?.99.::	 '&r   c                    | j                         }t        | j                        dk(  rt        d       }n| j                  d   }| j	                  |       | j	                  |       | j                  j                          y )Nr   r)  )r`  r   r  rL   r  r  )r   r   r  prev_excs       r~   PUSH_EXC_INFOz'InstructionTranslatorBase.PUSH_EXC_INFO  se    ( hhjt  !Q&'-H((,H		(		#99;r   c                    t         j                  dk\  rB| j                         }t        | j                        sJ | j                  j                          y t        | j
                        dkD  sJ | j
                  d   j                  j                  dk7  rt        d      | j
                  j                          | j                  d       t        | j                        sJ | j                  j                          y )Nr  r   r)  rA  zYBug in Dynamo tracing of exception handling.Top of the block stack is not EXCEPT_HANDLER.rW  )
rc  rd  r`  r   r  r  r   r   r<  r  )r   r   r}   s      r~   
POP_EXCEPTz$InstructionTranslatorBase.POP_EXCEPT  s    w&
At(()))!!#t''(1,,,#((//3CC$D    "IIaL t(()))!!#r   c                    t        | j                        dk\  sJ | j                         }t        j                  dk\  r| j                  d   }n| j                  j                         }t        |t        t        t        t        f      s,t        dt        |      d| dg t        j                         t        j                  dk\  r=| j                  |      s,t        dt        |      d	| dg t        j                         t        |t              r|j                  }n|g}|D ]  }t        |t        t        t        f      s,t        d
t        |      d| dg t        j                         | j                  |      r"t!        |j"                  |j$                        r yt        |t&        j                        st!        |j$                  |j$                        s y y)Nrf  r  r)  z Exception with bad expected typez"`except ...` has unsupported type r  rO  zCaught non-Exception valuezCExcept expects to recieve an object of Exception type but received z#Exception with non-type expectationz!`except ...` expects a non-type: TF)r   r  r`  rc  rd  r!  rK   r_   rn   ro   r*   r   r   r  r)  r   
issubclassr(  r  r   )r   expected_exc_typesexc_instanceexpected_typesexpected_types        r~   check_if_exc_matchesz.InstructionTranslatorBase.check_if_exc_matches  s   4::!###!XXZw&  ::b>L
  ::>>+L 12	
 :./@AS@TTUV5)445	 w&--l; 8-"efresst u9-889	 (-8/55N #N , 	M#65 !A."CM?RS T9-889	 )),7J%%  = L)*C*CD!1!1J /	2 r   c                 h    | j                  t        j                  | j                                      y rw   )r  r   rL   rV  rk  s     r~   CHECK_EXC_MATCHz)InstructionTranslatorBase.CHECK_EXC_MATCHb  s"    		),,T-F-F-HIJr   c                 H    | j                         s| j                  |       y y rw   )rV  ry  rk  s     r~   JUMP_IF_NOT_EXC_MATCHz/InstructionTranslatorBase.JUMP_IF_NOT_EXC_MATCHe  s    ((*IIdO +r   c                     |j                   dk(  r| j                  |       y | j                  t        |j                      | | j	                  d      i              y )Nzexception matchrf  )r#  rX  r  ru   r  rk  s     r~   
COMPARE_OPz$InstructionTranslatorBase.COMPARE_OPi  sD    ;;++  &II)$++6tTYYq\2NOr   c                 b    | j                  t        t              | j                         gi        y rw   )r  rK   iterr`  rk  s     r~   GET_ITERz"InstructionTranslatorBase.GET_ITERo  s!    ?40488:,Cr   r   r  c                     | j                  |j                        }| j                         }| j                  ||i        y rw   r  r#  r`  r  )r   r   r|   r  s       r~   r  z'InstructionTranslatorBase.CALL_FUNCTIONr  s1    yy%XXZ2tR(r   c           	         |j                   dk(  rt        i       }| j                         }ni|j                   dk(  r!| j                         }| j                         }n9t        dd|j                    d|j                    g t        j
                         t        j                  dk\  r"| j                         }t        |t              sJ | j                         }t        j                  dk\  r5t        j                  dk  r"| j                         }t        |t              sJ t        |t              r8t        |j                  t              rj                         }|j                  d	k(  r#t        t        t        f      rt!        |g      }n|j                  d
k(  r_t        t               rOt#        |j$                        dk(  r7t        |t              r't        j&                  d      |v rt        dddg        nm|j                  dk(  r^t        t               rNt#        |j$                        dk(  r6t        |t              r&t        j&                  d      |v rt        dddg        t        t(              s+|j+                  |       rt!        |j-                  |             }t        t.              rt1        j2                  | t4        |      }t        |t(              rt        |t              s7t        ddt7        |       dt7        |       dg t        j8                         |j;                         }| j=                  ||j$                  |       y )Nr   r   z%Variadic function call with bad flagszflags: zHAttempted to call a variadic function (CALL_FUNCTION_EX) with bad flags rO  rV  r  viewrandom_fromz,Tensor.random_ op called with `from` keywordr   r  uniform_z-Tensor.uniform_ op called with `from` keywordz0Variadic function call with bad args/kwargs typezargs type: z, kwargs type: z2Expected args to be a list and kwargs to be a dict)r#  rP   r`  r*   r   rD  rc  rd  r!  rc   rb   objri   r!  r   rL   r_   r   r   r$  r[   has_force_unpack_var_sequenceforce_unpack_var_sequencerp   rK   call_custom_dictr   rF   r  keys_as_python_constantr  )r   r   
kwargsvarsargsvarsnullr  s         r~   CALL_FUNCTION_EXz*InstructionTranslatorBase.CALL_FUNCTION_EXx  s    ;;!*2.JxxzH[[AJxxzH?!$++/fgkgrgrfst5)445	 w&88:DdL111XXZw&3+;+;g+E88:DdL111b/*z"&&./Q#++-Jww& Z+^<& )(49$x7'1,z+<=$++F3zA !J 8	 :%x7'1,z+<=$++F3zA !K 8	 &
44T:$X%G%G%MNH j";<(99$jQJ($45Z)>
 J%gh&7%8PZH[G\]P5)445	  779
2x~~z:r   c                    | j                         }| j                  |j                        }| j                         }t        |t              r|j                         sJ |j                         }|d t        |        |t        |       d  }}t        t        ||            }t        |      t        |      k(  sJ | j                  |||       y rw   )r`  r  r#  r!  r_   rw  rx  r   r   zipr  )r   r   argnamesr|   r  kwargs_listr3  s          r~   CALL_FUNCTION_KWz*InstructionTranslatorBase.CALL_FUNCTION_KW  s    88:yy%XXZ(M2x7R7R7TTT..0 !1CM>2D#h-9I4Jkc(K016{c(m+++2tV,r   c                 R   | j                  t        j                  |d             |j                  d   }| j                  d   |   }t
        j                  dk  r'| j                  t        j                  ||             y | j                  t        j                  ||             y )Nrf  r  r   co_namesr  )	r  r   r  r#  rE  rc  rd  r  LOAD_METHODr   r   r  r#  s       r~   LOAD_METHOD_SUPERz+InstructionTranslatorBase.LOAD_METHOD_SUPER  s    ;..tA>?kk!n"":.s3g%OOK//VDE[00fEFr   c                     | j                  t        j                  |d             |j                  d   }| j                  d   |   }| j                  t        j                  ||             y )Nrf  r  r   rv  )r  r   r  r#  rE  r  rx  s       r~   LOAD_ATTR_SUPERz)InstructionTranslatorBase.LOAD_ATTR_SUPER  sX    ;..tA>?kk!n"":.s3++D@Ar   c                 b   | j                  |       | j                         }t        j                  dk\  r#| j	                  |       | j                  |       y t        j                  dk\  r#| j                  |       | j	                  |       y | j	                  |       | j	                  d        y )NrV  r  )r  r`  rc  rd  r  r  r   r   rg  s      r~   rw  z%InstructionTranslatorBase.LOAD_METHOD  s{    hhjw&IIcNNN4 ( NN4 IIcNIIcNIIdOr   c                     | j                  |j                        }| j                         }|J | j                         }| j                  ||i        y rw   ra  )r   r   r|   dummyr  s        r~   CALL_METHODz%InstructionTranslatorBase.CALL_METHOD	  sF    yy%
}}XXZ2tR(r   c                     | j                         }t        t              j                  | |t	        j
                  |j                        gi       }| j                  |       y rw   )r`  rK   r  r  rL   r$  r#  r  )r   r   rg  r  s       r~   r  z$InstructionTranslatorBase._load_attr	  sN    hhj )77"))$++67

 			&r   c                     t         j                  dk\  r!|j                  dz  r| j                  |       y | j	                  |       y )Nr  rf  )rc  rd  r  rw  r  rk  s     r~   	LOAD_ATTRz#InstructionTranslatorBase.LOAD_ATTR	  s8    w&xx!|  &r   c                 j   | j                         }|j                  r| j                  |      S | j                  d      \  }}t	        |t
              r1t	        |t              s!| j                  rJ d|j                   d       	 t        t              j                  | |t        j                  |j                        |gi        y # t        $ rS}| j                         s t        j!                  dd       |j#                          |j%                  d       Y d }~nd }~ww xY w|j'                          y )Nrf  zMutating module attribute z during export.zSTORE_ATTR triggered compileTr\  r  )r  r   store_attr_graph_breakr  r!  rf   rL   exportr#  rK   setattrr  r$  r+   rZ  r   rD  r  r  r   )r   r   r  r  rg  r  s         r~   
STORE_ATTRz$InstructionTranslatorBase.STORE_ATTR	  s	   nn&..t4499Q<Sc+,ZEU5V {{ ,T[[MI?	*G$22&--dkk:C@
  	*446II4tID!NN=))	* 	--/s   A C 	D!A	DD!c                    t        | j                  d       | j                         st        dddg        | j                  j                  | t        d| j                         g             | j                  j                  t        j                  |      g       | j                  d       | j                  j                  | j                  | j                               y )	NzSTORE_ATTR-caused graph breakrT  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.rO  
store_attrrf  )rK  rE  rZ  r*   r   r_  r/   r\  re  r  r  ra  rb  rk  s     r~   r  z0InstructionTranslatorBase.store_attr_graph_break8	  s    ))2QR002Go 	$$+L4;M;M;O:PQ 	% 	
 	++TYYt_,=>		!++&&t'<'<=	
r   c                     | j                         }t        t              j                  | |t	        j
                  |j                        gi        y rw   )r`  rK   delattrr  rL   r$  r#  r}  s      r~   DELETE_ATTRz%InstructionTranslatorBase.DELETE_ATTRK	  s>    hhj .."))$++67	
r   c                 0    t        dt        |              )Nz1create_call_resume_at not overridden by subclass r<  r  r   r  s     r~   ra  z/InstructionTranslatorBase.create_call_resume_atS	  s    ?T
|L
 	
r   c                 0    t        dt        |              )Nz8should_compile_partial_graph not overridden by subclass r  r   s    r~   rZ  z6InstructionTranslatorBase.should_compile_partial_graphX	  s    FtDzlS
 	
r   r   c                 Z    | j                  d      \  }}}|j                  | d||gi        y )NrW  __setitem__r  call_method)r   r   r  rg  keys        r~   STORE_SUBSCRz&InstructionTranslatorBase.STORE_SUBSCR]	  s+    		!S#mc3Z<r   c                 V    | j                  d      \  }}|j                  | d|gi        y )Nrf  __delitem__r  )r   r   rg  r  s       r~   DELETE_SUBSCRz'InstructionTranslatorBase.DELETE_SUBSCRb	  s'    99Q<SmcUB7r   c                 n    | j                  |j                        }| j                  t        |             y rw   )r  r#  r  r_   r   r   r   s      r~   BUILD_TUPLEz%InstructionTranslatorBase.BUILD_TUPLEf	  %    		$++&		-&'r   c                 n    | j                  |j                        }| j                  t        |             y rw   )r  r#  r  r^   r  s      r~   BUILD_SLICEz%InstructionTranslatorBase.BUILD_SLICEj	  r  r   c                     | j                  |j                        }| j                  t        |t	                            y Nmutation_type)r  r#  r  r]   rG   r  s      r~   
BUILD_LISTz$InstructionTranslatorBase.BUILD_LISTn	  s+    		$++&		,u4D4FGHr   c                     t         j                  rt        dddg        | j                  |j                        }t        |t                     }| j                  |       y )Nzmissing BUILD_SET handlerr   z:Missing BUILD_SET bytecode handler (for testing purposes).rO  r  )r   +inject_BUILD_SET_unimplemented_TESTING_ONLYr*   r  r#  rQ   rG   r  )r   r   r   new_sets       r~   	BUILD_SETz#InstructionTranslatorBase.BUILD_SETr	  sO    ==3X	 		$++&e3C3EF		'r   c           	      D   | j                  |j                        }g }|D ]#  }	 |j                  |j                  |              % | j                   ||t                            y # t        $ r. t        dt        |      | dg t        j                         Y ~w xY w)Nz-Failed to unpack object for BUILD_LIST_UNPACKzU cannot be unpacked into a list for the BUILD_LIST_UNPACK bytecode (`[*x, *y, ...]`).rO  r  )r  r#  extendri  NotImplementedErrorr*   r   r   r  r  rG   )r   r   r   seqsr   seqs         r~   BUILD_LIST_UNPACKz+InstructionTranslatorBase.BUILD_LIST_UNPACK~	  s    yy% 
	C	S::4@A
	 			#e+;+=>? '  KH#&% (2 !29-889s    A((4BBc                 2    | j                  |t               y )Nr   )r  r_   rk  s     r~   BUILD_TUPLE_UNPACKz,InstructionTranslatorBase.BUILD_TUPLE_UNPACK	  s    t7r   c           	          | j                  |j                  dz        }t        t        |d d d   |dd d               }| j	                  t        |t                            y )Nrf  r   r  )r  r#  r   rq  r  rP   rG   )r   r   r   ds       r~   	BUILD_MAPz#InstructionTranslatorBase.BUILD_MAP	  sS    		$++/*U3Q3Zqt!t-.		#A5E5GHIr   c                 T   | j                  |j                        }|D cg c]#  }t        t              j	                  | |gi       % }}i }|D ]/  }t        |t              sJ |j                  |j                         1 | j                  t        |t                            y c c}w r  )r  r#  rK   r   r  r!  rP   updater   r  rG   )r   r   r   r  r  s        r~   BUILD_MAP_UNPACKz*InstructionTranslatorBase.BUILD_MAP_UNPACK	  s    		$++&MRS&44TA3CSS 	#Aa!2333MM!''"	# 			.0	
 Ts   (B%c           
      d   | j                         }| j                  |j                        }t        |t              sJ |j                         sJ |j                  |       }t        |      t        |      k(  sJ | j                  t        t        t        ||            t                            y r  )r`  r  r#  r!  r_   rw  ri  r   r  rP   r   rq  rG   )r   r   keysr:  s       r~   BUILD_CONST_KEY_MAPz-InstructionTranslatorBase.BUILD_CONST_KEY_MAP	  s    xxz4;;'$...&&(((--d34yCK'''		Sv&'.0	
r   c                     | j                  d      \  }}|j                  dkD  sJ | j                  |j                      j	                         }t        |t              sJ |j                  | d||fi        y )Nrf  r   r  )r  r#  r  r  r!  r!  rP   r  )r   r   r   r   rg  s        r~   MAP_ADDz!InstructionTranslatorBase.MAP_ADD	  sg    yy|1{{Qjj$((#++-#0111maVR8r   c                     | j                         }|j                  dkD  sJ | j                  |j                      }t	        |t
              sJ |j                         sJ |j                  | d|gi       S )Nr   r   r`  r#  r  r  r!  rQ   
is_mutabler  r   r   r   rg  s       r~   SET_ADDz!InstructionTranslatorBase.SET_ADD	  sh    HHJ{{Qjj$((##{+++~~tUQC44r   c                     | j                         }|j                  dkD  sJ | j                  |j                      }t	        |t
              sJ |j                         sJ |j                  | d|gi        y Nr   r  r  r  s       r~   
SET_UPDATEz$InstructionTranslatorBase.SET_UPDATE	  se    HHJ{{Qjj$((##{+++~~hR0r   c                 ^   | j                         }|j                  dkD  sJ | j                  |j                      j	                         }t        |t              sJ |j                         sJ | j                  j                  j                  |       |j                  j                  |       y r   )r`  r#  r  r  r!  r!  r]   r  r   r/  mutationr   r   r  s       r~   LIST_APPENDz%InstructionTranslatorBase.LIST_APPEND	  s    HHJ{{Qjj$((#++-#|,,,~~  ))#.		r   c                 ^   |j                   }t        j                  dk  r| j                         }| j                         }t        j                  dk\  rBt	        |j
                  d      sJ t        j                  |j
                  j                        }d }d }d }d }t        j                  dk  rT|dz  r| j                         }|dz  r| j                         }|dz  r| j                         }|dz  r| j                         }| j                  t        || j                  ||||             y )	Nr  co_qualnamer  rV     r:  rf  r   )r  rc  rd  r`  r   rg  rL   r$  r  r  rU   r  )	r   r   flagsfn_namecodedefaultsclosureannotations
kwdefaultss	            r~   MAKE_FUNCTIONz'InstructionTranslatorBase.MAKE_FUNCTION	  s   g%hhjGxxzw& 4::}555&--DJJ4J4JKG
g%t|((*t|"hhjt|!XXZ
t|88:		&
	
r   c           	      0   | j                         }t        |t              r'|j                  | t	        |j
                              }nt        |t              rxt        |j                  t              r^t        |j                  j                         |j                        }t	        |j
                        D cg c]  }t        | ||          }}nN|j                  |       r|j                  |       }n+t        dt        |      | dg t         j"                         t%              |j
                  k7  r;t        dd|j
                   dt%        |       | dg t         j&                         t)        |      D ]  }| j+                  |        y c c}w )	N)idxesz+Failed to unpack object for UNPACK_SEQUENCEzV cannot be unpacked into a list for the UNPACK_SEQUENCE bytecode (i.e. `a, b, c = d`).rO  z9Length mismatch when unpacking object for UNPACK_SEQUENCEzexpected length: z
, actual: za unpacked to a list for the UNPACK_SEQUENCE bytecode (i.e. `a, b, c = d`) with unexpected length.)r`  r!  ri   r  r  r#  rb   rg  r  as_proxyr   rJ   rh  ri  r*   r   r   r  r   rD  ry   r  )r   r   r  r  proxyr  s         r~   UNPACK_SEQUENCEz)InstructionTranslatorBase.UNPACK_SEQUENCE	  sW   hhjc>*))$eDKK6H)IC_-*SWWn2UCGG,,.9E:?:LMQ=uQx0MCM..t4//5CEC"e $( (5)445 s8t{{"S+DKK=
3s8*M"e $? ?5)445 # 	AIIaL	' Ns   7Fc                 n   d|j                   cxk  rdk  sJ  J |j                   dz  }|j                   dz	  }| j                         }|j                  |       rt        |j	                  |             }t        |      ||z   k\  sJ |d | }||t        |      |z
   }|t        |      |z
  d  }t        |      D ]  }	| j                  |	        | j                  t        |             t        |      D ]  }	| j                  |	        y t        dt        |      | dg t        j                         y )Nr   i     r  z%Failed to unpack object for UNPACK_EXz; cannot be unpacked into a list for the UNPACK_EX bytecode.rO  )r#  r`  rh  r   ri  r   ry   r  r_   r*   r   r   r  )
r   r   prefixsuffixr  r  vals_prefix	vals_listvals_suffixitems
             r~   	UNPACK_EXz#InstructionTranslatorBase.UNPACK_EX
  s2   DKK)6)))))t#!hhj,,T255d;<Dt9///w-KVc$i&&89Is4y6134K -  		$ IImI./ -  		$  ?C"e#^_5)445	r   c                      y rw   r   rk  s     r~   rh  zInstructionTranslatorBase.NOP4
      r   c                 $    | j                          y rw   r`  rk  s     r~   POP_TOPz!InstructionTranslatorBase.POP_TOP7
      
r   c                     | j                         }| j                         }| j                  |       | j                  |       y rw   r`  r  r   r   ar  s       r~   ROT_TWOz!InstructionTranslatorBase.ROT_TWO:
  s.    HHJHHJ		!		!r   c                     | j                         }| j                         }| j                         }| j                  |       | j                  |       | j                  |       y rw   r  )r   r   r  r  cs        r~   	ROT_THREEz#InstructionTranslatorBase.ROT_THREE@
  sD    HHJHHJHHJ		!		!		!r   c                    | j                         }| j                         }| j                         }| j                         }| j                  |       | j                  |       | j                  |       | j                  |       y rw   r  )r   r   r  r  r  r  s         r~   ROT_FOURz"InstructionTranslatorBase.ROT_FOURH
  sZ    HHJHHJHHJHHJ		!		!		!		!r   c                 h    | j                         }| j                  |       | j                  |       y rw   r  )r   r   r  s      r~   r  z!InstructionTranslatorBase.DUP_TOPR
  s#    HHJ		!		!r   c                     | j                         }| j                         }| j                  |       | j                  |       | j                  |       | j                  |       y rw   r  r  s       r~   DUP_TOP_TWOz%InstructionTranslatorBase.DUP_TOP_TWOW
  sD    HHJHHJ		!		!		!		!r   c                     |dk(  r!t        t              j                  | |gi       S |dk(  r!t        t              j                  | |gi       S |dk(  r!t        t              j                  | |gi       S |S )Nr   rf  rW  )rK   r   r  reprascii)r   rg  flags      r~   _convert_valuez(InstructionTranslatorBase._convert_value_
  sp    19"3'55dUGRHHQY"4(66teWbIIQY"5)77ugrJJr   c                    | j                         }t        |t              r?ddlm}m}  |j                   |||      |j                        }| j                  |       y | j                  ||dz        }t        j                  d|j                         z   dz         }| j                  t        t        j                        ||gi        y )Nr   )LazySymNodeFormatStringrZ   r  rW  z{:})r`  r!  rh   torch._dynamo.variables.lazyr  rZ   r$  r  r  r  rL   rx  r  rK   r   format)r   fmt_specr  rg  r  rZ   fmt_vars          r~   _format_valuez'InstructionTranslatorBase._format_valueh
  s    
e_-
 /'..'x8E IIe##E54<8"))$1L1L1N*NQT*TU?3::6%8H"Mr   c                     |j                   }|dz  dk(  r| j                         }nt        j                  d      }| j	                  ||      S )Nr:  r   )r  r`  rL   r$  r   )r   r   r  r  s       r~   FORMAT_VALUEz&InstructionTranslatorBase.FORMAT_VALUE|
  sE    DLT!xxzH'..r2H!!(E22r   c           
      @   g }g }i }| j                  |j                        D ]:  }t        |t              r#|j	                  d       |j	                  |       7t        |t
        j                        r|j	                  |j                         |j                  |j                         t        |j                               t        |j                  j                               z  r2t        dd| d| d|j                   dg t        j                         |j!                  |j                         t        dt#        |      d	g t        j                         = | j%                  t
        j                  j'                  d
j)                  |      ||             y )Nz{}zBUILD_STRING key conflictzformat_string_parts: z
, kwargs: z, part.sym_kwargs: z1Failed to build format string due to key conflictrO  zBUILD_STRING type errorzLFormat string part type is not correct - expected constant or format string.r   )r  r  r!  rL   r   r   StringFormatVariableformat_stringr  sym_argsr   r  
sym_kwargsr*   r   r  r  r   r  r$  r   )r   r   format_string_partsr|   r3  parts         r~   BUILD_STRINGz&InstructionTranslatorBase.BUILD_STRING
  sd   )+&(-/IIdhh' 	D$ 01#**40D!D)"@"@A#**4+=+=>DMM*v{{}%DOO,@,@,B(CC$ ;"78K7LJW]V^^qrv  sB  sB  rC  !D$W= 1 < <=	 doo. 5I n9-889	!	, 			**11+,dF	
r   c                     |j                   dk(  s|j                   dk(  sJ |j                   dk(  rd}nd}t        d|      }| j                  |       y )Nr   r   iszis notr\  r  )r#  r   r\  )r   r   
new_argvalnew_insts       r~   IS_OPzInstructionTranslatorBase.IS_OP
  sM    {{a4;;!#333;;!J!J%l:F!r   c                     |j                   dk(  s|j                   dk(  sJ | j                  d      \  }}|j                   }| j                  |j                  | d|gi              |dk(  r| j	                  |       y y )Nr   r   rf  __contains__)r#  r  r  r  	UNARY_NOT)r   r   leftrightr  s        r~   CONTAINS_OPz%InstructionTranslatorBase.CONTAINS_OP
  sp    {{a4;;!#333iile[[		%##D.4&"EF7NN4  r   c                     | j                         }|j                  dkD  sJ | j                  |j                      }t	        |t
              sJ |j                         sJ |j                  | d|gi        y )Nr   r  )r`  r#  r  r  r!  r]   r  r  r  s       r~   LIST_EXTENDz%InstructionTranslatorBase.LIST_EXTEND
  se    HHJ{{Qjj$((##|,,,~~hR0r   c                     | j                  t        t              j                  | | j	                         gi              y rw   )r  rK   r   r  r`  rk  s     r~   LIST_TO_TUPLEz'InstructionTranslatorBase.LIST_TO_TUPLE
  s*    		/%(66tdhhj\2NOr   c                     | j                   d   }| j                  |      sJ |j                  t        u r:t	        j
                  t              j                  | g i       }|| j                   d<   y y Nr)  )r  r)  r(  r#  r   rK   rz  r  )r   r   r  new_vals       r~   STOPITERATION_ERRORz-InstructionTranslatorBase.STOPITERATION_ERROR
  si     jjn))#...<<=(//=KKG
 %DJJrN )r   c                    | j                         }|j                  dkD  sJ | j                  |j                      j	                         }t        |t              sJ |j                         sJ |j                  | d|gi        y r  )	r`  r#  r  r  r!  r!  rP   r  r  r  s       r~   
DICT_MERGEz$InstructionTranslatorBase.DICT_MERGE
  so    HHJ{{Qjj$((#++-#0111~~hR0r   c                 $    | j                          y rw   r  rk  s     r~   	GEN_STARTz#InstructionTranslatorBase.GEN_START
  r  r   c                     | j                   d   }|j                         r<| j                  t        j                  t        |j                                            y | j                  |j                  | dg i              y )Nr)  rt  )r  rw  r  rL   r$  r   rx  r  r  s      r~   GET_LENz!InstructionTranslatorBase.GET_LEN
  s\    jjn!!#II&--c#2H2H2J.KLMIIcoodIr2>?r   c                 4   | j                   d   }t        |t              sJ t        |j                  t        j
                  j                        r%| j                  t        j                  d             y | j                  t        j                  d             y Nr)  TF)
r  r!  rP   r   collectionsabcMappingr  rL   r$  r  s      r~   MATCH_MAPPINGz'InstructionTranslatorBase.MATCH_MAPPING
  sh    jjn#0111cii!8!89II&--d34II&--e45r   c                 v   | j                   d   }|j                         sJ |j                         }t        |t        j
                  j                        r@t        |t        t        t        f      s%| j                  t        j                  d             y | j                  t        j                  d             y r%  )r  rw  rx  r!  r&  r'  Sequencer   bytes	bytearrayr  rL   r$  )r   r   r  	tos_values       r~   MATCH_SEQUENCEz(InstructionTranslatorBase.MATCH_SEQUENCE
  s    jjn%%'''**,	i!9!9::UI.D
 II&--d34II&--e45r   c                 2   | j                   d   }| j                   d   t        t              sJ t        fd|D              rq| j	                  t        |D cg c]  }j                  | |       c}             t        j                  dk  r%| j	                  t        j                  d             y y | j	                  t        j                  d              t        j                  dk  r%| j	                  t        j                  d             y y c c}w )Nr)  rg  c              3   &   K   | ]  }|v  
 y wrw   r   )r   r   tos1s     r~   r   z7InstructionTranslatorBase.MATCH_KEYS.<locals>.<genexpr>
  s     &QqDy&s   r  TF)r  r!  rP   r7  r  r_   getitem_constrc  rd  rL   r$  )r   r   r  r   r2  s       @r~   
MATCH_KEYSz$InstructionTranslatorBase.MATCH_KEYS
  s    jjnzz"~$ 1222&#&&IIm#$NQT%7%7a%@$NOP')		*11$78 * II&--d34')		*11%89 * %Os   Dc                 &    | j                  d       y )Nr<  )r  rk  s     r~   r  z.InstructionTranslatorBase.LOAD_ASSERTION_ERROR  s    %%&67r   c                 p    |j                   dk(  r| j                  |       d| _        y | j                  rJ y )Nr   F)r  append_prefix_instr  rk  s     r~   RESUMEz InstructionTranslatorBase.RESUME.  s5    88q=##D)&+D#.....r   c                 4    t        |j                     | |      S rw   )_binary_op_lookupr  rk  s     r~   	BINARY_OPz#InstructionTranslatorBase.BINARY_OP7  s    $TXX.tT::r   c                      y rw   r   rk  s     r~   r  z!InstructionTranslatorBase.PRECALL:  r  r   c                     | j                   d   |j                     }t        |t              sJ |D ]  }t        |t              rJ  | j
                  J t        j                  |      | _        y )N	co_constsr  )rE  r  r!  r   r   r  rL   r$  )r   r   r  r   s       r~   r  z"InstructionTranslatorBase.KW_NAMES=  sl    $$[1$((;(E*** 	)DdC(((	)}}$$$(//h?r   c                 6    | j                  t                      y rw   )r  rc   rk  s     r~   r  z#InstructionTranslatorBase.PUSH_NULLE  s    		,.!r   c                    |rXt         j                  dk\  sJ | j                         }t        |t              r|j                         sJ |j                         }n$| j                  r| j                  j                  nd}| j                  |j                  dz         }t         j                  dk\  r!|d   }t        |d   t              rg n|d   g}n&t        |d   t              r|d   }g }n|d   }|d   g}|rO||dt        |        z   }|t        |       d  }t        t        ||            }t        |      t        |      k(  sJ ||dd  z   }i }	 | j                  |||       d | _        y # d | _        w xY w)NrV  r   rf  r   r   )rc  rd  r`  r!  r_   rw  rx  r  rg  r  r  rc   r   r   rq  r  )	r   r   call_kwr  contentsr  r|   rs  r3  s	            r~   _callzInstructionTranslatorBase._callH  sn    ##w...xxzHh68;V;V;XXX224H.2mmt}}**H99TXX\*w&!B#HQK>2Xa[MD(1+|4a[a[ }(1H~66D"CM>#34K#h45Fv;#h-///(12,&DF	! r40 DMDDMs   E. .	E7c                 &    | j                  |       y rw   rC  rk  s     r~   r  zInstructionTranslatorBase.CALLq  s    

4r   c                 V    | j                  | j                  |j                             y rw   )r  r  r  rk  s     r~   COPYzInstructionTranslatorBase.COPYu  s    		$**dhhY'(r   c                     | j                   |j                      | j                   d   c| j                   d<   | j                   |j                   <   y r  )r  r  rk  s     r~   SWAPzInstructionTranslatorBase.SWAPx  s=    04

DHH90EtzzRT~-

2

DHH9-r   c                      y rw   r   rk  s     r~   CACHEzInstructionTranslatorBase.CACHE  r  r   c                 &    | j                  |       y rw   r	  rk  s     r~   BEFORE_WITHz%InstructionTranslatorBase.BEFORE_WITH  r  r   c           	         | j                         }t        |t        t        f      s&t	        dd| d|j                          dddg       t        |t              r+|j                         s| j                  j                  |       t        |t        t        f      sJ t        ||j                        }t        j                  dk\  rk|j                  r>| j                  r/|j                  j                  | j                  d	   j                  urd }n-| j                  j                  j                  }n|j                  }| j!                  |       |rt        | t"              r;| j                  j                  t%        ||t'        | j(                        |             n9| j                  j                  t%        ||t'        | j(                                     | j!                  |j+                  |              y )
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.zFile an issue to PyTorch. Simple context managers can potentially be supported, but note that context managers can't be supported in generalrO  r  r)  )r`  r!  rM   rN   r*   python_type_namesupports_graph_breaksr  r   rO   r   rc  rd  r  r  rb  r  r	  r   r   r  enter)r   r   r  r   r   s        r~   r
  z.InstructionTranslatorBase.setup_or_before_with  s   hhj)+IJ
 5>seDCCDXDXDZC[[mnBS		 s:;--/0077< )+IJ
 	
 
 (KK

 w&
 !!$$%%,,D4D4DR4H4O4OO..<<CC[[F		$$ 56  ''#D&#djj/3G   ''fc$**o(VW		#))D/"r   c                 V    | j                   sJ | j                  j                  |       y rw   )r  r  r   rk  s     r~   r7  z,InstructionTranslatorBase.append_prefix_inst  s%    &&&&  &r   c                 .   t         j                  dk\  rq| j                  set        | j                  |j
                     t              sJ | j                  j                  j                         | j                  |j
                  <   y | j                  |       y r   )rc  rd  r  r!  r
  r#  rc   r   r/  track_cell_newr7  rk  s     r~   	MAKE_CELLz#InstructionTranslatorBase.MAKE_CELL  ss    w&t/F/F d224;;?NNN((779   - ##D)r   c                 &    | j                  |       y rw   r7  rk  s     r~   COPY_FREE_VARSz(InstructionTranslatorBase.COPY_FREE_VARS      %r   c                 &    | j                  |       y rw   rW  rk  s     r~   RETURN_GENERATORz*InstructionTranslatorBase.RETURN_GENERATOR  rY  r   c                 n    t         j                  dk\  r| j                          y | j                  d       y )NrV  rf  )rc  rd  r`  r  rk  s     r~   END_FORz!InstructionTranslatorBase.END_FOR  s$    w&HHJIIaLr   c                     t        | j                  |j                     t              r6t	        d|j                  d|j                   g t
        j                         | j                  |       y )Nz)LOAD_FAST_CHECK on uninitialized variablez/Attempted to load uninitialized local variable rO  )r!  r
  r#  rc   r*   r   r  r  rk  s     r~   LOAD_FAST_CHECKz)InstructionTranslatorBase.LOAD_FAST_CHECK  sX    d**4;;7FCMdkk][5)445	 	tr   c                     |j                   | j                  vr| j                  t                      n| j	                  |       t               | j                  |j                   <   y rw   )r#  r
  r  rc   r  rk  s     r~   LOAD_FAST_AND_CLEARz-InstructionTranslatorBase.LOAD_FAST_AND_CLEAR  sD    ;;d222IIln%NN4 ,8NT[[)r   c                     | j                  t        j                  |d             |j                  dz  r| j	                  |       y | j                  |       y )Nrf  r  r   )r  r   r  r  rw  r  rk  s     r~   LOAD_SUPER_ATTRz)InstructionTranslatorBase.LOAD_SUPER_ATTR  sB    ;..tA>?88a<T"OOD!r   c                    |j                   dk(  r| j                  |       y |j                   dk(  r| j                  |       y |j                   dk(  r8| j                  t	        | j                         j                  |                    y t        dd|j                    d|j                    dg t        j                         y )	NrW        z Missing CALL_INTRINSIC_1 handlerzCALL_INTRINSIC_1 operand: z,No handler implemented for CALL_INTRINSIC_1 z instruction.rO  )
r#  r  UNARY_POSITIVEr  r_   r`  ri  r*   r   r  rk  s     r~   CALL_INTRINSIC_1z*InstructionTranslatorBase.CALL_INTRINSIC_1  s    ;;!$$T*[[A%[[AIImDHHJ$H$H$NOP:4T[[MBJ4;;-Wde6)556	r   c                 f    | j                         }| j                          | j                  |       y rw   r  r  s      r~   END_SENDz"InstructionTranslatorBase.END_SEND  s!    hhj
		#r   c                 *    | j                  |d       y )NT)rA  rE  rk  s     r~   CALL_KWz!InstructionTranslatorBase.CALL_KW  s    

4
&r   c                 8    | j                   j                  dv sJ y )N)POP_JUMP_IF_TRUEPOP_JUMP_IF_FALSEr  )rb  r   rk  s     r~   rY  z!InstructionTranslatorBase.TO_BOOL  s'     $$++ 0
 
 	
 
r   c                    |j                   }| j                         }t        |t              sJ | j                         }|dz  r||_        n&|dz  r||_        n|dz  r||_        n|dz  r||_        | j                  |       y )Nr  r:  rf  r   )	r  r`  r!  rU   r  r  r  r  r  )r   r   r  r  attrs        r~   SET_FUNCTION_ATTRIBUTEz0InstructionTranslatorBase.SET_FUNCTION_ATTRIBUTE#  su    XXZ"8999xxz4<BJT\!BNT\ BMT\BK		"r   c                 v    | j                  | j                  | j                         |j                               y rw   )r  r  r`  r#  rk  s     r~   CONVERT_VALUEz'InstructionTranslatorBase.CONVERT_VALUE4  s%    		$%%dhhj$++>?r   c                 N    | j                  t        j                  d      d       y )Nr   r   )r   rL   r$  rk  s     r~   FORMAT_SIMPLEz'InstructionTranslatorBase.FORMAT_SIMPLE7  s    +2226:r   c                 D    | j                  | j                         d       y r   )r   r`  rk  s     r~   FORMAT_WITH_SPECz*InstructionTranslatorBase.FORMAT_WITH_SPEC:  s    488:q)r   c                 P    | j                   j                         dkD  r	d | _        yy)Nr   c                       yNTr   r   r   r~   r   z>InstructionTranslatorBase.is_non_empty_graph.<locals>.<lambda>@      r   TF)r   count_callsr]  r   s    r~   r]  z,InstructionTranslatorBase.is_non_empty_graph=  s%    ;;""$q(&2D#r   c           
          |g }dj                  t        j                  | j                         gt	        t        |            z               S )Nr   )r   r2  r=  r\  r   ry   )r   additional_stack_framess     r~   format_frame_summaryz.InstructionTranslatorBase.format_frame_summaryD  sL    "*&(#ww!!##%&h7N.O)PP
 	
r   c           	          t        j                  t        | j                  dd      | j                  t        | j                  dd      d      S )Nr*  	<unknown>rH  F)lookup_line)r2  FrameSummaryr  rG  r   r   s    r~   r\  z'InstructionTranslatorBase.frame_summaryM  s?    %%DKK<KKDKKK8	
 	
r   c                     t        | j                  dd      }t        j                  d      }|j	                  |      d uS )Nr*  r  z.*torch/nn/modules.*)r  rG  recompilematch)r   r   nn_modules_patterns      r~   is_co_filename_from_nn_modulesz8InstructionTranslatorBase.is_co_filename_from_nn_modulesU  s:    4;;{CZZ(?@!''1==r   c                     | j                   j                  |t        j                  |            }t	        t        |      j                  t        j                               |S rw   )	r   install_global_by_idweakrefrefr.   r8   r  r-   WEAKREF_ALIVE)r   r  rg  global_names       r~   store_global_weakref_by_idz4InstructionTranslatorBase.store_global_weakref_by_idZ  sJ    kk66vw{{5?QR,778R8RS	
 r   c                 B    | j                   j                  j                  S rw   )r   tracing_context	fake_moder   s    r~   r  z#InstructionTranslatorBase.fake_modea  s    {{**444r   check_fnc              #   b   K   | j                   }|| _         	 d || _         y# || _         w xY w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_modee  s3     
 %% (	*$)D!ED!s   /# /	,/c                    | j                   J | j                   dkD  sJ | j                  j                  | j                  j                  | j
                  | j                   dz
  | j                  | j                   dz
           S r  )r   r   r   rG  r*  r   r"  r   s    r~   r  z#InstructionTranslatorBase.speculateq  s|    ''333''!+++##((KK##KK$$q(d66:;	
 	
r   r"  r  r  r  rE  rG  r  r   distributed_stater  c                    t         |           || _        || _        || _        || _        || _        |	| _        g | _        d| _	        d | _
        t        d      | _        g | _        g | _        d| _        d | _        d| _        g | _        || _        || _        t+        | j(                        | _        || _        || _        || _        || _        |
| _        |$t8        j:                  rt=        |
||      | _        nd | _        i | _         i | _!        || _"        d| _#        d | _$        d | _%        tL        jN                  dk\  r>dd	l(m)}m*}m+}m,} |
jZ                  ||z  |z  |z  z  r| j]                  t_        d              || _0        d| _1        d gte        |
jf                        z  | _4        tk        jl                  |
jn                  |       y )
Nr   rh  r)  T)r  r  rE  F)rW  
   r   )CO_ASYNC_GENERATORCO_COROUTINECO_GENERATORCO_ITERABLE_COROUTINE)8r  r  r   r  r   r
  r  r  r  r   r  r   r  r  r  r   r  r  r  r  r"  r   r  r  r  r  rE  rG  r   replay_record_enabledr2   r  nn_module_stack	num_callsr  	one_graphr  r  rc  rd  resume_executionr  r  r  r  co_flagsr  rK   r  r  r   r>  r  rN  	lazycacher*  )r   r   r"  r  r  r  rE  r
  r  r  rG  r  r  r   r  r  r  r  r  r  r  r  s                        r~   r  z"InstructionTranslatorBase.__init__{  s   ( 	.!2 . 0-J*
#$ #5e#< UW,"&( 0</:4;L;L/M 	 *3*4,8&, 6#?#?!2W<"D "&D BD)+#'  $w&  |+.CCFXX 		/$/0().&BF#K
 B
 	F..	:r   rw   )F(  r   r   r   r0   r   r   r   rH   rj   r   r   r   r    r   rL   r   r   r   r  r2   r   r  r[  r%  r*  r-  r2  r  r?  rD  rL  rS  rZ  rd  rc  rd  r`  propertyrb  r^  rt  r  r  r  r`  r  r  r  r  r  r  LOAD_CLOSUREr  r  r  r  cached_propertyr  r  r  r   r  r  r  r  r  r  r  ry  JUMP_FORWARDJUMP_ABSOLUTEr  r  not_ro  r   rn  JUMP_IF_FALSE_OR_POPJUMP_IF_TRUE_OR_POPr  r  r  r  r  r  r  r  r  r  r  r&  r   r,  r  r4  r3  r)  r?  rb  rM  rO  rV  rX  rZ  r\  r_  r  r  ro  rt  ry  r{  rw  r  r  r  r  r  r  ra  rZ  r  r  r  r  r  r  r]   r  r  BUILD_TUPLE_UNPACK_WITH_CALLr  r  BUILD_MAP_UNPACK_WITH_CALLr  r  r  r  r  r  r  r  rh  r  r  r  r  r  r  r  r   r  r
  r  r  r  r  r  r  DICT_UPDATEr!  r#  r)  r/  r4  r  r  posrg  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_ORr8  r;  r  r  r  rC  r  rG  rI  ri  JUMP_BACKWARD_NO_INTERRUPTPOP_JUMP_FORWARD_IF_TRUEPOP_JUMP_BACKWARD_IF_TRUEPOP_JUMP_FORWARD_IF_FALSEPOP_JUMP_BACKWARD_IF_FALSErK  rM  r
  r7  rU  rX  r[  r]  r_  ra  rc  rh  rj  rl  rY  rr  rt  rv  rx  r]  r  r\  r  r  r  
contextlibcontextmanagerr  r  r  CodeTyper   r   r   CellTyper  r  r  s   @r~   r   r     sc	    #.//3/00#==  !#&$$o&&K'(({####!"233I  -..x(94(?@AA#.>'
=88 ?#8 S/)*	8,4UnW+=Z 7"%	+R	 ; ;
2#*J1 d?3  _  ;c ;d?3 ;!+FV/./ L*J, J J!E( # #$
2:7r:34 LM$X]]E:#HNNE:'t<&x~~t<UU(UU("
 "
H@0.
32y'v<:$*ObKPD  Q') ()
  Q'_; (_;B  Q'	- (	-GB )08
&



d 

  Q'= (=8((I
 +7 @ 8 $6 J

 "2
 951$
L:0
N(3
@"!1P% 1 K@6	6:8 hll+Nhll+N'IHOO,LHLL)Lx||,O%hoo6"8#4#45!("2"23X\\*M-(,,'Jx||,O6.A6x@P@P7QRMX__-MX__-M(--(J&I(,,'JX]]+M.&x'7'78#H$6$67"8#4#45hmm,N /8==)K.h../Nh../N8==)K8==)K(,,'J/ 7"	;@"'!R  Q' ()V M!%+HNNEB ,X^^U C ,X]]E B!-hmmU!C(9#v'	*&&;"$  Q'' ('
"@;*

>
 5 5 	*/9JD9P0Q 	* 	*
+ 
8 48%[;[; ;'[; sCx.	[;
 S>[; cN[; 38n[; c?23[; sO34[; (B[; [; [; [; ([; %[;  $$45![;$ %/0%[;& 
'[; [;r   )	metaclassc            
            e Zd Zedd       Zej                  d        Zdee	   de
dedee   ddf
 fd	Zd
 ZdefdZ fdZd Zd Zd Zd Zd Zd Zd Z xZS )r	  r   c                  "    t         j                  S rw   )tls
current_txr   r   r~   r  z InstructionTranslator.current_tx  s    ~~r   c              #      K   t        t        dd       }| t        _        	 d  |t        _        y # |t        _        w xY ww)Nr  )r  r  r  )r   r  s     r~   set_current_txz$InstructionTranslator.set_current_tx  s1     \40	#"CNUCNs   A 0 A =A r"  r   r  r  Nc                     t               t        j                  d|j                   d|d    d|d           t        |   t        ||	| |||||||
      ||||||i i d ||d|||       | j                          t        | j                  j                        5  | j                         5  |
| _        || _        | j                  r| j                  sJ d	       i | _        t        | j!                               }t#        j$                  |      j'                  d
d       }|j)                         D ]h  \  }}||vsd }|r)t+        |j'                  |i       j)                               }t-        j.                  |t1        |d|            }|| j                  |<   j | j                  j2                  }| j5                         D ]x  }||v rL||   }t1        |dd      }t-        j.                  ||      }|j7                         }|j9                  ||       n|j7                         }||_        || j                  |<   z t=        | j?                         |      D ]g  \  }}tA        |      }t1        |d      }	 t-        j.                  |jB                  |      }|jK                  |||      }||_        || j                  |<   i tM        |      | _'        g | _(        |r.tF        j,                  jS                  | j                        | _        d d d        d d d        y # tD        $ r tG        jH                         }Y w xY w# 1 sw Y   5xY w# 1 sw Y   y xY w)Nztorchdynamo start tracing  r*  r   r+  )local_scoper  rG  torch_function_mode_stackr   )r   r"  r  r  r  r  rE  r
  r  r  rG  r  r  r   r  r  z4Export without one graph - something has gone wrong.dynamismT)is_inputr  )r  is_derefed_cell_contents)r  )*r   r   INFOrH  r  r  r0   _throw_if_in_functorchr   r   r  r  r  r  r
  r   r-  r#   get_contextr  r   	frozensetrZ   r$  r:   r/  r%  rT  r  r  rq  r*  r9   cell_contents
ValueErrorr   DeletedVariabletrack_cell_existingrj   r  debug_localsrealize_all)r   r"  rG  r  r  r  r  r  rE  compiler_fnr  r  export_constraintsframe_stater   r  r  r-  r  r   rg  local_dynamismvarr/  contents_sourcer  cell_varr  cell_sourcer  s                                r~   r  zInstructionTranslator.__init__  s   & 	LL((8,}:U9VVWXdeuXvWwx	
 	"$&*C &!%*.+%/9 	 	
> 	##% T[[001 `	43F3F3H `	#,DN DK{{~~ J~ $&D *-d.D.D.F*G#//7;;JMH'~~/ 5e00%)N)28<<b3I3O3O3Q)R-44# %)%3C 25D((.5"  ;;33L #68#$TNE* '2td'O 5H4N4N5L  ,::<H ++HlC+::<H&*#-5$$T*G#6N "$--/7; 6
d-d3"-dT"R?#6#=#=**O$L (;;| '+#-5$$T*6  2L)2D. VXD (1'D'D'P'P((($}`	 `	 `	Z " ?#,#<#<#>L?[`	 `	 `	 `	sQ   M,BL::D9L:4 LA2L:ML7	4L:6L7	7L::M	?MMc                    t         j                  j                  d      }t        j                  | j
                  j                  d| j
                  j                        }t         j                  j                  j                         }t         j                  j                  j                  j                  t         j                  j                  j                  j                  t         j                  j                  j                  j                  f}|\|j                         |v rI||urD|j                         j                  j!                         }d| d| d| d}t#        dd|g 	       y y y y )
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   rO  )r8  _dynamolookup_backendr  getattr_staticr   r  _C
_functorchpeek_interpreter_stackTransformTypeVmapGradJvpr  r   lowerr*   )r   r  r  ciforbidden_keysr   ri  s          r~   r  z,InstructionTranslator._throw_if_in_functorch  s0   ,,W5,,KK##]DKK4K4K
 XX  779HH--22HH--22HH--11
 >bffh.8[PU=U668==&&(D((,v .**. 0  !%v%WY  ?	 >V8>r   r  c                     t        |t              r| j                  |j                     S t        |t              r| j
                  |j                     S t        rw   )r!  r:   r  r  r7   r  r  r  )r   r  s     r~   get_example_valuez'InstructionTranslator.get_example_value  sE    fk*==!2!233fl+>>&"4"455r   c                 "    t         |           y rw   )r  r  )r   r  s    r~   r  zInstructionTranslator.run  s    r   c                 0   t         j                  dk\  rJ| j                  j                  }|r2| j                  r%|j
                  | j                  d   j
                  uryt        d | j                  D              xr | j                   xr | j                   S )Nr  r)  Fc              3   <   K   | ]  }|j                           y wrw   )r   r   r  s     r~   r   zEInstructionTranslator.should_compile_partial_graph.<locals>.<genexpr>  s     :A:r6  )	rc  rd  r  r  r  r   r7  r  r  )r   r   s     r~   rZ  z2InstructionTranslator.should_compile_partial_graph  s    w&,,::E$$D<L<LR<P<W<W(W:)9)9:: 9NN"9888	
r   c                 Z    d  _         |j                  dk(  rt        d      gS |j                  dk(  rt        d|j                        gS t	         j
                  |      t         fd j                  j                         D              }t         fd|D              }t         fd|D              }t        j                  dk  rt        |      dk(  sJ d	       t               }g }t         j                        D ]  \  }}t        j!                  t"        |      s!t%        t"        |      }	|	j&                  d
nt        |	j&                        }
|j)                  ||
f       |	j+                  |       |j-                  t/        t         j                        |z
  dz                |j1                  t        d              g }|D ]  }t        j!                  t"         j                  |   x}      s-t%        t"        |      }	|	j&                  d
nt        |	j&                        }
|j)                  ||
f       |	j+                  |       |j1                  t        d|              g }t        j                  dk\  rt         j                        D ]1  \  }}t        j!                  t2        |      s!|j)                  |       3 d}t        t5         j                              D ]w  \  }}t        j!                  t2        |      s!t7        d|dz   |z
        D ]  }|j1                  t        d|               |j-                  |j9                                |dz  }y t         j                        t        |      z
  }|t        |      z   }t;        d|j<                         }t?        j@                   jB                   jD                  |j<                  t        d  jF                  D              |||t        d  jF                  D              t        |      t        |      t        |            } tI        jJ                   jB                        jM                  dd              }|+tO        jP                  |      tI        jJ                  |      d<   |jR                  r1 jT                  jW                  ||       |jY                  ||d|       n] jT                  jW                  |t[        j\                  | j^                  |             |j-                  |ja                  |d|             |j-                  |D cg c]  }|jc                  |       c}       |j-                  te        |d             |j1                  t        d             |jg                         S c c}w )Nr  r  r  c              3   N   K   | ]  }|v r|j                         vr|  y wrw   )r-  )r   r   r1  r   s     r~   r   z>InstructionTranslator.create_call_resume_at.<locals>.<genexpr>  s0      
Ezat'='='?? 
s   "%c              3   p   K   | ]-  }t         j                  t        j                  |         s| / y wrw   r  __instancecheck__rc   r
  r   r   r   s     r~   r   z>InstructionTranslator.create_call_resume_at.<locals>.<genexpr>  s4      
)),8L8LQ8OP 
   36c              3   p   K   | ]-  }t         j                  t        j                  |         r| / y wrw   r/  r1  s     r~   r   z>InstructionTranslator.create_call_resume_at.<locals>.<genexpr>  s4      
%%lD4H4H4KL 
r2  r  r   z&variables should not be NULL in < 3.12r   r   r  r  r  rf  rI  )r  __resume_at_c              3   H   K   | ]  }|j                   j                    y wrw   )r   r  r+  s     r~   r   z>InstructionTranslator.create_call_resume_at.<locals>.<genexpr>  s     <a!((//<s    "c              3   <   K   | ]  }|j                           y wrw   )r   r+  s     r~   r   z>InstructionTranslator.create_call_resume_at.<locals>.<genexpr>  s     :A!++-:r6  orig_graphmodulec                       y rw   r   r   r   r~   r   z=InstructionTranslator.create_call_resume_at.<locals>.<lambda>"  r|  r   TF)4r   r   r   r#  r   r"  r   r
  r  rc  rd  r   r$   	enumerater  r  r0  rM   r   r   r   r  r  r   append_outputrc   ry   r  pop_nullr"   r  r3   lookuprG  r   r  r#   r  r  r  r  r)  r   install_global_unsafemake_function_with_closurer  FunctionTyper  load_function_namecreate_loadr   r  )r   r   all_argnamesrr  argnames_nullr  stack_ctx_varsr  r  r  r   argnames_ctx_varsr   
null_idxesnull_cntj	stack_lenr  new_codeorig_graphmodule_mayber   r1  s   `                    @r~   ra  z+InstructionTranslator.create_call_resume_at  s    #' ;;.(&~677[[N*&~dkkJKK!$"3"3T: 
))..0
 
  
!
 

  
!
 

 g%}%*T,TT*t_
 

+ 
	@FAs%%&=sC2C8++3Bs?P?P9Q  %%q-&89$$R(  S_q-@1-D!EF  !3I!>?
	@  	PD%%'0D0DT0J)J 2C8++3Bs?P?P9Q  "(($)>?$$R(  !3L!NO	P$ !#
w&#DJJ/ )3)),<%%a() H#HTZZ$89 "3)),<"1a!eh&67 L(();F)JKL$$R[[]3MH" 

Oc*o5	CM)<}56#9#@#@KKKKKK<4+;+;<<:)9)9::.!#$*$
 "
!9!9$++!F!J!J"
 " "-EL[[&FL$$X./AB KK--dH=))$$	J KK--e((4>>4H R224yIJ
X>"..+>?
-eU;<
+N;<""$$ ?s   V(c                     | j                   j                         D ]G  }t        |t              st	        |j                         t        j                  j                        sG y y)NTF)	r
  r:  r!  rm   rQ  rx  r8  nnModule)r   r   s     r~   $symbolic_locals_contain_module_classz:InstructionTranslator.symbolic_locals_contain_module_class9  sR    %%,,. 	A!56:$$&< 		
 r   c                     t        | j                        rU| j                  d   x}rCt        |t              r2t	        |j                  |       t                     | j                  d<   y y y y )Nr)  r  )r   r  r!  rT   r\   ri  rG   )r   r  s     r~   "replace_tos_if_return_is_generatorz8InstructionTranslator.replace_tos_if_return_is_generatorA  s`    

O

2&&3 <=1--d3.0DJJrN > ' r   c                    | j                          | j                  J | j                  J t               j	                  d| j                  | j                  z
         t
        j                  sf| j                  j                         dk(  rI| j                  s=| j                         s-| j                  s!| j                  st        j                  d      d | _         t               t         j"                  d| j$                  j&                   d|j(                   d       t*        j-                  d|j(                         | j                  j/                  | t1        d| j3                         gd	
             |j(                  dk(  rt5        d      nt5        d|j6                        }| j                  j9                  |g       t:        )Nr  r   z#because no content in function callztorchdynamo done tracing r   rF  z%s triggered compilereturn_valueF)r  rT  r  r  r  )rQ  r   r  rA   r  r   allow_empty_graphsr   r}  r  rO  r  r  r   r^  r   r   r  rG  rH  r   r   rD  r_  r/   r\  r   r#  re  r  )r   r   return_insts      r~   _returnzInstructionTranslator._returnL  sy   //1''333+++''0043C3CC	

 ))'')Q.22==?KKNN-- EFF#' LL'(;(;'<Bt{{m1M	
 			($++6$$%!3!3!5 6E 	% 	
 {{n, ~.#N4;;G 	
 	++[M:r   c                 &    | j                  |       y rw   rV  rk  s     r~   r  z"InstructionTranslator.RETURN_VALUEr      Tr   c                 &    | j                  |       y rw   rX  rk  s     r~   r  z"InstructionTranslator.RETURN_CONSTu  rY  r   )r   r	  )r   r   r   staticmethodr  r  r  r  r   r    r   r  r   r   r  r  r;   r'  r  rZ  ra  rO  rQ  rV  r  r  r  r  s   @r~   r	  r	    s      # #Z;'Z (Z  %!Z" $$45#Z$ 
%Zx> 
}%~	$Lr   r	  r  INPLACErW  BINARY_c                       e Zd ZU dZee   ed<   ed        Ze	d        Z
e	dedee   fd       Zd Zd	ed
ej                   deeef   deeef   dededdf fdZed        Zd Zd Zd Zd Zd Zd Z fdZ fdZ xZ S )r#  z Trace and inline a called methodsymbolic_resultc                     t        j                  t        dt        d   i      5  | j                  ||||      }|j	                         cd d d        S # 1 sw Y   y xY w)NunimplementedrC  )r	   r   r>   build_inline_tracerinline_call_)r   r$  funcr|   r3  tracers         r~   rC  z)InliningInstructionTranslator.inline_call  sQ    ZZ?H]4K"LM 	),,VT4HF&&(	) 	) 	)s   $AAc                 N   | j                         rt        dt        |       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| j                         vr|d| d| j                          ddgz  }t        dd| d| j                          d| j                          d|j                    d| d|       t#        | t$              r_t'        j(                  | j+                         dd
      r:t        dt        | j+                               d| j+                          ddg       y |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.rO  T)is_inlined_callr   )!produce_trampoline_autograd_applyr  _originFz"allowlist in dynamo known functionr   zAvoid calling the function `r  r  zRemove the function `z` or the file `zv` from torch/_dynamo/trace_rules.py. 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._torchdynamo_disablez2Skip inlining `torch.compiler.disable()`d functionzSkip inlining function z3 since it was wrapped with `torch.compiler.disable`z(Remove the `torch.compiler.disable` call)has_selfr*   r   r   check_verboseskippedtorch._dynamo.variables.miscrh  r   r  r  ri  
SkipResultr   get_filenameget_namer   r!  rW   r  r  get_function)rd  r  rh  fn_qualnamerS  s        r~   check_inlineablez.InliningInstructionTranslator.check_inlineable  s   ==?6D	k **4F>>V wtT40)<1U B #--?  3:$2E$''..2K.{m2>E  1 1 33+K=HYHYH[G\ ]= = 7	  H$[M$--/9J K"//122B6==/S]^i]j k( ( d01g6L6L!77
 LD--/05d6G6G6I5JJ}~>	 Mr   rd  r|   c                    t        |t              rt        dd| dg        t        |t        t        t
        t        f      sJ t        j                  |      }|j                  du sJ 	 |j                  | ||      }t)        j*                  |j-                               D ]8  }t        |t.              rt        dd| d| dg t0        j2                         : |j#                         j4                  dv rL|rt        |d   t6        j8                        s-t        ddj4                   d| dj4                   dg        d}	t:        j<                  j>                  j@                  jC                  d      r&dtE        jF                        jE                          }	tH        jJ                  dk\  re| jL                  | jN                  | jQ                  jR                  jT                        fd}
tV        jY                  dt[        |
             t\        jY                  d|	|j^                         |rt        |d   t`              r| jb                  je                  |d   jf                        }t        |t:        jh                  jj                        r?tm        jn                  |      tq        jr                  |jt                  jv                        d<   ty              r&t{        | || j|                  | j~                  |      }|S t        |t              rJ t        | || j|                  | j~                  |      }|S # t        $ r}t        dj                  t        |      d|j                          d|j!                          d	|j#                         j$                   |D cg c]  }|j'                          nc c}w c}|
            d }~ww xY w)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.rO  Fz;{reason}.
  func = {func}, args = {args}, kwargs = {kwargs}'z' r   )r   rd  r|   r3  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   c                  b    t              j                         } dj                   d d|  S )NzTRACE inlined call z from r   )r@   rP  rH  )rR  r  cur_instheaderparent_codes    r~   get_trace_call_log_strzQInliningInstructionTranslator.build_inline_tracer.<locals>.get_trace_call_log_str  s5    1+xHOOQ,T\\N&4&QQr   rV  zINLINING %s%s, %sr7  )@r!  rV   r*   rW   rU   rS   rT   r#  rt  rm  	bind_args	TypeErrorr%   r  r   rq  rp  rB  r+  python_typer8  r9  r:  rH   r   rD  rH  r   rp   r8  r>  	_internal	log_stateis_artifact_enabledr  Bytecoderc  rd  r  rG  rL  	positionsr   trace_call_logrD  rD   r   r   rf   r   r  r  r~  r{  r  r  r#   r  forward__code__r!   &InliningGeneratorInstructionTranslatorr  r  )r$  rd  r|   r3  r  
sub_localsr  r  r   r  r}  modulere  r  rz  r{  r|  s                @@@@r~   rb  z1InliningInstructionTranslator.build_inline_tracer  s    d01_EdVL C	 $*.,	
 	
 
 /??E~~&&&	f=J !2!2!45 	Aa1 X$TF'!5 y9-889		  $}}<<99ZQ)L)LML%dll^8D6B24<<.@z{	  >>##--AA*M#,,t,00234Fw&11H --K338;M;M;T;T3UFR   z2H'IJ		%tVV]]C JtAw(89]]00a1C1CDF&%(("6"67
 KK' (()@)@A&
 ;''44F&  "$(DEEE2''44F a  		#NUUq6T]]_-R0A0A0C/DAdmmoFdFdEef7;<#//+<<!	 V  		s%   /M 	OAO-OOOc                    | j                   }| j                  }t        j                         }|j                  r| j                  |j                        }	 |5  | j                          d d d        | j                  J | j                  |j                  u r%|j                   j#                  | j                          |xj$                  | j$                  z  c_        t        j                  d|       t&        j(                  st+        | t,              rl| j.                  r`t1        |      rIt+        | t,              r9| j2                  r-t+        | t,              sJ t        j4                  t6        |        y | j                  S t1        |      rMt+        | t,              sJ | j                  j9                         J t;        | j<                  t?                     S | j                  S # 1 sw Y   zxY w# t        j                  $ r#}d| d| }t        j                  |        d }~wt        j                  $ r.}d| d| }t        j                  |       t        |      |d }~wt        $ r t        j                  d|        w xY w)Nz!Observed exception DURING INLING z : zSKIPPED INLINING r   zFAILED INLINING %szDONE INLINING %sr  ) r$  rG  r  nullcontextr  r  r  r   ra  r   rD  r^  r+   r  r_  r  r  r  r  r   rA  r!  r  is_generator_from_ctx_managerr!   generator_exhaustedraise_observed_exceptionr#  rx  r\   generated_itemsrG   )r   r$  r  
strict_ctxr  ri  s         r~   rc  z*InliningInstructionTranslator.inline_call_6  s   {{$002
""55f6M6MNJ	 
 ##///>>V---##**4+@+@A((D,J,JJ(		$d+44tCD22 T"t%KL,,!$(NOOO,,]DA+++D!!$(NOOO++>>@HHH+(("2"4 
 +++_ $$ 	5dV3qcBCIIcN}} 	*%dV2aS1CIIcNc") 	II*D1	s<   G- G (G-  G*%G- -J HJ4)I$Jr$  r  r
  r  r  funcvarr   Nc                 F   |j                         }|d   }t        |t              s|j                  }t	        |      }	t        |	       t        |   |j                  i ||||||	t               D 
ci c]  }
|
t        ||
       c}
||j                  |j                  dz   |j                  |j                  |j                         || _        || _        |j$                  | _        d | _        |j(                  j+                         | _        |j,                  | _        y c c}
w )N__builtins__r   )r   r  r  r  r
  r  r  r"  rE  rG  r  r  r   r  r  )get_globalsr!  r   __dict__r   r   r  r  r   r   r  r  r  r   r  r  r  r$  r  r_  r  r  r  )r   r$  r  r
  r  r  r  r  r  r"  r   r  s              r~   r  z&InliningInstructionTranslator.__init__o  s    '')	~.
*d+#,,J+D1L)==!+-*G%7DG!!WT1--G==,,q0"22,,$66 	 	
" ))#%55::<)) Hs   0Dc                 .    | j                   j                  S rw   )r$  r  r   s    r~   r  z'InliningInstructionTranslator.fake_mode  s    {{$$$r   c                 \    t        j                  | j                  j                               S rw   )r   rs  r$  r\  r   s    r~   rt  z)InliningInstructionTranslator.run_ctx_mgr  s     ++DKK,E,E,GHHr   c                      yr   r   r   s    r~   rZ  z:InliningInstructionTranslator.should_compile_partial_graph  s    r   c                 "    t        dddg        y )NzGraph break in inlined functionr   z2Graph breaks in an inlined call are not supported.rO  )r*   r  s     r~   ra  z3InliningInstructionTranslator.create_call_resume_at  s    5L		
r   c                 F    | j                         | _        d | _        t        rw   )r`  r_  r   r  rk  s     r~   r  z*InliningInstructionTranslator.RETURN_VALUE  s    #xxz#' r   c                 H    | j                  |      | _        d | _        t        rw   )r  r_  r   r  rk  s     r~   r  z*InliningInstructionTranslator.RETURN_CONST  s#    #//5#' r   c                    d| j                   v r{| j                   d   }| j                  |      }d|v r(t        j                  j                  j
                  |   }nt        |      }t        j                  | ||      }t        ||      }n`| j                  j                  d| j                         }t        |      }| j                   }t        j                  | ||      }t        ||      }|||fS )Nr   r  ___unnamed_scope)r  r  r8  r  r  r  r   rH   r  r5   r   r  r7   r6   )	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  s    '..4K ..{;M+-MM22LL#  "0!<)//nmTK&}d;M;;;;"DNNL *,7N!^^N)//nnUK-ndCM{M99r   c                    | j                   j                  | j                  u rt        |   |       y |j
                  }| j                  |      \  }}}| j                   j                  j                  ||      r6| j                  | j                   j                  j                  ||             y 	 | j                  |   }| j                  t        j                  | ||             y # t        $ r | j                  |      cY S w xY wrw   )r   r  r  r  r  r#  r  r/  has_pending_mutation_of_attrr  	load_attrr  r  rH   r  )r   r   r   r}   r  r  rg  r  s          r~   r  z*InliningInstructionTranslator._load_global  s    ;;##t~~5 G &;;D,0,M,Md,S)A{M{{''DD[RVW		$++22<<[$OP3 NN40E 		///e]KL   3,,T223s   2C( (DDc                 l   | j                   j                  | j                  u rt        |   |       y | j                         }t        |t              rt        d|j                  dg        |j                  }| j                  |      \  }}}| j                   j                  j                  |||       y )Nz3Storing Tensor hook handle in globals (inline call)r  rO  )r   r  r  r  r  r`  r!  rl   r*   r#  r  r/  r  )r   r   rg  r   _fglobals_valuer  r}   r  s          r~   r  z*InliningInstructionTranslator.STORE_GLOBAL  s    ;;##t~~5 G &HHJE%!89 Q KK 8	 ;;D.2.O.OPT.U+O[!KK$$//T5Ir   )!r   r   r   r   r   rH   r   r   rC  r[  rt  r   rb  rc  r   r  r  r   r   rj   rR   r  r  r  rt  rZ  ra  r  r  r  r  r  r  r  s   @r~   r#  r#    s   *o..) )
 8 8t jj ?#j jX7,r%*)%* nn%* c?23	%*
 sO34%* (B%* *%* 
%*N % %I


:0M&J Jr   r#  c                   d     e Zd ZU ee   ed<   d
 fdZdefdZd Z	 fdZ
 fdZd Zd	 Z xZS )r  r  c                 N    t        |   |i | g | _        d| _        d| _        y r   )r  r  r  r  r  )r   r|   r3  r  s      r~   r  z/InliningGeneratorInstructionTranslator.__init__  s-    $)&)!#( -2*r   r   c                 d   | j                         }| j                  j                  |       t        | j                        t        kD  rt        j                  dt               | j                  t        j                  d              t        j                  s| j                  r|| _        t        y )NzqToo many yield values in generator. Maybe you are inlining an infinite generator. If not, please report a bug at )r`  r  r   r   rY   r   InfiniteGeneratorErrorPT2_ISSUE_TRACKER_URLr  rL   r$  r   rA  r  r_  r  )r   r   tops      r~   YIELD_VALUEz2InliningGeneratorInstructionTranslator.YIELD_VALUE  s    hhj##C(t##$'99,,22G1HJ  			"))$/05511#&D 	 2r   c                     | j                   d   }t        |t              sC| j                          t	        t
              j                  | |gi       }| j                  |       y y r  )r  r!  r\   r`  rK   r^  r  r  )r   r   r  ress       r~   GET_YIELD_FROM_ITERz:InliningGeneratorInstructionTranslator.GET_YIELD_FROM_ITER  sN    jjn#34HHJ!$'55dSE2FCIIcN 5r   c                 0    d| _         t        | 	  |      S r{  )r  r  r  r   r   r  s     r~   r  z3InliningGeneratorInstructionTranslator.RETURN_VALUE      #' w#D))r   c                 0    d| _         t        | 	  |      S r{  )r  r  r  r  s     r~   r  z3InliningGeneratorInstructionTranslator.RETURN_CONST  r  r   c                    t        | j                        dk\  sJ | j                         }| j                  d   }t        |t              r|j
                  t        dddg        	 |j                  |       }t        | j                  t              r| j                  dkD  sJ | xj                  dz  c_        | j                  |       | j                  |       y # t        t        j                  f$ rw}t        |t        j                        rt        j                  |        | j                          | j                  t	        j                   |j
                               Y d }~y d }~ww xY w)	Nrf  r)  Unreachable sub-generator coder   @Should only be encountered while implementing generator support.rO  r   r   )r   r  r`  r!  rL   rg  r*   r"  r   r   r  r  r#  r   r$  r  r$  r   r   r  r  exs        r~   
YIELD_FROMz1InliningGeneratorInstructionTranslator.YIELD_FROM  s*   4::!###hhjjjn3 01cii6G 8^		###D)C 433S9,,q01 $$)$IIcNT"# s<<= 	9"c;;<--d3 HHJII&--bhh788	9s   &C E*3A-E%%E*c                    t        | j                        dk\  sJ | j                         }| j                  d   }t        |t        t
        f      s>t        |t              r~t        |j                  t        j                  j                        rPt        |t              r0|j                  $	 |j                  |       }| j                  |       y t+        dddg        y t+        dd	t-        |       d
t-        |       dg        y # t        t        j                   f$ rl}t"        j$                  dk  r| j                          | j                  t        j&                  |j                               | j)                  |       Y d }~y d }~ww xY w)Nrf  r)  r  r  r   r  rO  zSEND with bad typez
TOS type: z(Attempted to SEND with unsupported type r  )r   r  r`  r!  r\   rT   rp   rg  r&  r'  IteratorrL   r"  r  r#  r   r$  rc  rd  r$  ry  r*   rF   r  s        r~   SENDz+InliningGeneratorInstructionTranslator.SEND@  s>   4::!###hhjjjnc02NOPs56399koo&>&>?#/0SYY5F#++D1C IIcN !< b	 ,$WS\N3Fws|nTUV	5 &s'D'DE 
$ '''1
II.55bhh?@IIdOO
$s   +D F A"FFr   )r   r   r   r   rH   r   r  r    r  r  r  r  r  r  r  r  s   @r~   r  r    s9    /**3 "**$#L*r   r  )r{   r   )r   FN)r   r&  collections.abcr  r  r   r  r  r   r  r8  rN  r   r  r  rc  	threadingr2  r  typingr  r   r   r   r   r   r   unittest.mockr	   r8  torch._loggingtorch._dynamo.excr
   torch._guardsr   r   %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#   codegenr$   r%   r&   r'   r(   r)   r*   r+   funcname_cacher,   guardsr-   r.   output_graphr/   r0   replay_recordr1   r2   r  r3   r4   r  r5   r6   r7   r8   r9   r:   r;   r<   r=   utilsr>   r?   r@   rA   rB   rC   rD   rE   variables.baserF   rG   rH   variables.builderrI   rJ   variables.builtinrK   variables.constantrL   variables.ctx_managerrM   rN   rO   variables.dictsrP   rQ   variables.functionsrR   rS   rT   rU   rV   rW   rX   variables.iterrY   variables.lazyrZ   variables.listsr[   r\   r]   r^   r_   variables.miscr`   ra   rb   rc   rd   re   variables.nn_modulerf   variables.tensorrg   rh   ri   variables.torch_functionrj   rk   variables.user_definedrl   rm   rn   ro   rp   	getLoggerr   r   r>  getArtifactLoggerr@  r  rY  r_  localr  r   r  ru   r   r   r   containsrx   r  r   r  cacher  r   	dataclassr   r   r   r   r   	lru_cacher   r  r   r   r   r<  r   r  r  r  r  r  r   r'  rC  rK  r  r  r  r  r  r   r	  rd  _nb_opsr  r:  r#  r  )r   r   r   r}   s   0000r~   <module>r     s  0      
        	 
      A A    < 1 < /  
 
 
 '    ) / 9 9 A   ;	 	 	 G F A . 0 
 <   / /   2 W W  g!..228^L11(LI>>33HnM ^^55h@PQ ioo4R4L4R4R4T',0AqAq'''' T#s(^  "("3"34BBX]]+99
 D ! H 
 D  ) )!1!1 ) ) L L L( @ @ @F 
 
 
 2 2 23 3. T4 4 ) )" $ $ . . .B	~ 		I 	9 f- ?
%?oovhn-? ?D I
Xl6??F8T>: l$ l^{|J J2 Z Z Zzw";(w";tE]5 ]@ w 
 FA	 	!#v-F12JWVABZL3I	
jJ$= jJZz-J zCz'Vns   4S$'"S*