o
    "i                    @   s  U 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mZmZmZ d dlmZ d dlZd dl Zd dl!m"Z"m#Z# ddl$m%Z%m&Z&mZ'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 dd	l9m9Z9 dd
l:m;Z; ddl&m<Z<m=Z=m>Z>m?Z? ddl@mAZA ddlBmCZCmDZD ddlEmFZFmGZG ddlHmIZImJZJ ddlKmLZLmMZM ddlNmOZOmPZPmQZQmRZRmSZSmTZT ddl(mUZUmVZV ddlWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^ ddl_m`Z`maZambZbmcZc ddldmeZemfZf ddlgmhZh ddlimjZj ddlkmlZlmmZmmnZn ddlompZpmqZq ddlrmsZsmtZtmuZumvZvmwZw ddlxmyZymzZzm{Z{m|Z|m}Z} ddl~mZmZmZmZmZmZ ddlmZ ddlmZmZmZ ddlmZmZmZ eeZejed Zejed!Zejed"Zejed#Ze Zd$d% e D Zeeef ed&< ehejjZehejjZd'd( ed)< d*d( ed+< ejG d,d- d-ZejG d.d/ d/Zedd0d1 ZejG d2d3 d3ZG d4d5 d5eZd6ejd7ef fd8d9Zd:d;d<ejegef d=efd>d?Zd<ejegef d=efd@dAZdBZdCdD ZG dEdF dFeZG dGd; d;edHZG dIdJ dJeZejdKkrcdLdM ejD ZG dNdO dOeZG dPdQ dQeZdS )R    N)	AnyCallablecastDictListOptionalSetTupleType)patch)tracingTracingContext   )configexc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unimplementedUnsupported)get_funcname)GuardBuilderinstall_guard)GraphCompileReasonOutputGraph)DummyModuleExecutionRecorder)ContinueExecutionCacheReenterWith)
AttrSourceGetItemSourceGlobalSourceGlobalWeakRefSourceLocalSourceSource)is_builtin_constantis_forbidden)countersget_fake_valueget_instruction_source_311graph_break_dup_warning_checkeristype
LazyStringproxy_args_kwargs)is_side_effect_safeMutableLocaltypestrVariableTracker)VariableBuilderwrap_fx_proxy)BuiltinVariable)ConstantVariable)ContextWrappingVariableGenericContextWrappingVariableWithExitFunctionVariable)ConstDictVariableSetVariable)BaseUserFunctionVariableNestedUserFunctionVariableSkipFunctionVariableUserFunctionVariableUserMethodVariable)BaseListVariableListIteratorVariableListVariableSliceVariableTupleVariable)ClosureVariableGetAttrVariableInlinedClosureVariableNullVariablePythonModuleVariableUnknownVariable)NNModuleVariable)supported_comparison_opsSymNodeVariableTensorVariable)RemovableHandleVariableUserDefinedClassVariableUserDefinedObjectVariablegraph_breaks
trace_calltrace_sourcetrace_bytecodec                 C   s   i | ]
\}}|t |jqS  )rE   call_function.0kvrg   rg   \/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/torch/_dynamo/symbolic_convert.py
<dictcomp>w   s    rn   compare_op_handlersc                 C   s   t | g t|i S N)handle_containsreversedtxargs_rg   rg   rm   <lambda>|   s    rw   inc                 C   s   t | t| g t|i gi S rp   )
handle_notrq   rr   rs   rg   rg   rm   rw      s    znot inc                   @   sJ   e Zd ZU eed< eed< eed< dZeed< dZe	e
 ed< dd	 ZdS )
SpeculationEntryfilenamelinenoinstruction_pointerFfailedNreasonc                 C   s*   d| _ | jdur| jj}nd}tj|d)z\
        Start tracing of the current frame over again, and don't take this branch.
        TNz!Unknown fail_and_restart_analysis)restart_reason)r~   r   r   SpeculationRestartAnalysis)selfr   rg   rg   rm   fail_and_restart_analysis   s
   

z*SpeculationEntry.fail_and_restart_analysis)__name__
__module____qualname__str__annotations__intr~   boolr   r   r*   r   rg   rg   rg   rm   rz      s   
 rz   c                   @   s\   e Zd ZU dZejedZee	 e
d< dZee
d< dd Zdd	 Zd
edede	fddZdS )SpeculationLoga3  
    SpeculationLog replaces the prior copy_graphstate/restore_graphstate
    checkpointing.  Rather than saving/restoring state, we restart the
    dynamo conversion process over from the beginning -- but when we
    hit the start of the speculation that failed, we instead generate
    a graph break.
    )default_factoryentriesr   indexc                 C   s
   d| _ d S Nr   )r   r   rg   rg   rm   restart      
zSpeculationLog.restartc                 C   s   | j   d| _d S r   )r   clearr   r   rg   rg   rm   r      s   

zSpeculationLog.clearr{   r|   returnc                 C   s   t | j| jkr| jt||| | j| j }|  jd7  _|j|kr.|j|kr.|j|ksUJ t	d| j dt | j d|j d|j d|j d| d| d| d|S )	z
        Lookup or create a SpeculationEntry() that is shared across
        RestartAnalysis calls.  Args are used only for debug checks.
        r   z'
            SpecuationLog diverged at z of z:
            - Run1: :z (ip=z)
            - Run2: z6)
            Please submit a bug report.
            )
lenr   r   appendrz   r}   r{   r|   textwrapdedent)r   r{   r|   r}   entryrg   rg   rm   next   s8   

	zSpeculationLog.nextN)r   r   r   __doc__dataclassesfieldlistr   r   rz   r   r   r   r   r   r   r   rg   rg   rg   rm   r      s   
 r   c                   C   s
   t tS rp   )torchdynamo_loggingget_step_loggerlogrg   rg   rg   rm   _step_logger      
r   c                   @   sV   e Zd ZU eed< eed< dZee ed< dZee	 ed< dd Z
dd	 Zd
d ZdS )BlockStackEntryinsttargetNstack_indexwith_contextc                 C   s
   | j d uS rp   )r   r   rg   rg   rm   can_restore   r   zBlockStackEntry.can_restorec                 C   s:   | j d usJ | jr| jjrt| j t| jjS t| j S rp   )r   r   target_valuesr/   tupler   rg   rg   rm   	resume_fn   s   
zBlockStackEntry.resume_fnc                 C   s   | j d usJ | j |S rp   )r   exit)r   rt   rg   rg   rm   r      s   zBlockStackEntry.exit)r   r   r   r   r   r   r   r   r   rG   r   r   r   rg   rg   rg   rm   r      s   
 r   c                   @   s   e Zd ZdS )ReturnValueOpN)r   r   r   rg   rg   rg   rm   r      s    r   fn.c                    s>   t t| jt|  t| dddtf fdd}|S )Nr   InstructionTranslatorBaser   c                    s   |   | | i  d S rp   )pushrh   popnr   r   fn_varnargsrg   rm   impl   s   zstack_op.<locals>.impl)r   inspect	signature
parametersrE   	functoolswrapsr   )r   r   rg   r   rm   stack_op   s
   r   r   r   truth_fnr   c                 C   s   |t jus|r	dS t| jtsJ | j}| j| }tjdk r+|jdks(|j	dkr*dS n|jdkr2dS |d7 }d}| j| }|jdkrot|j	t
sJdS |j	}|d7 }| j| }|jd	vr]dS |d7 }|jd
krj|d7 }| j| }|jdkrvdS | t| dS )NF)   	   LOAD_GLOBALAssertionErrorLOAD_ASSERTION_ERRORr   zassertion error
LOAD_CONST)CALL_FUNCTIONPRECALLCALLr   RAISE_VARARGST)operatortruth
isinstancer}   r   instructionssysversion_infoopnameargvalr   r   rF   create)r   r   r   current_instruction_pointerr   	error_msgrg   rg   rm   &_detect_and_normalize_assert_statement   s<   









r   c                    s,   d	fdd	 dddt f fdd}|S )
N c                    s   |   std |  rd|   }t| t|| | t	d | j
j| tdt| | |  gd |   | | j} rM| | | |j}| j
t|j|d dg| |  d S )N"should_compile_partial_graph=FalseBSkipping frame because there is a graph break in a for/while loop
zgeneric_jump triggered compilezgeneric_jump r   r   )r   )should_compile_partial_graphr%   maybe_has_backedgeframe_summaryr   infor   	SkipFramer   debugoutputcompile_subgraphr*   rA   popcreate_call_resume_atnext_instructionr   add_output_instructionsr   r   )r   r   value	extra_msgmsgif_nextif_jumpr   rg   rm   jump_graph_break6  s2   




z&generic_jump.<locals>.jump_graph_breakr   r   r   c              
      s   |   }tjrt| r|   }| r&t| r | |S  | || t|t	rC| j
jdtjgt||fi R   | | d S t|trj|j}t|tjsU|dk}tjjj|}|sctd | | d S | j
jdtjgt|fi R  }t| |t|j| d}| j
jdtjgt||fi R   | | d S | r| rr| | | | d S d S t|t	r|  rȈ | || d S t|tr| j
|j}|rr| | | | d S d S t|t rN|!| d}	t|	t"r|!| d}	t|	t#r8|	$| g i }t|t%r2t|j&tt'fr2|j&r0r)| | | | d S d S td d S drLrE| | | | d S d S t|t	su|(| rut)|*| rsrl| | | | d S d S t|trz|+| j
}
W n% t,j-y } z|  r | ||d	| d
W  Y d }~S  d }~ww |
rr| | | | d S d S t|t.j/r܈drڈr| | | | d S d S ddl0m1} |j0d ur||j0r|2 rr| | | | d S d S t,j-t,j3j4ddd)Nrh   r   zKAssertion failed on symbolic shapes. Did you make sure eager mode succeeds?)example_value__bool____len__z@generic_jump on UserDefined with __bool__ returning non-constantT
)r   r   )is_constant_sourcezDynamic control flow is not supported at the moment. Please use functorch.experimental.control_flow.cond to explicitly capture the control flow.cond_operands)	case_name)5r   r    rewrite_assert_with_torch_assertr   is_python_constantr   as_python_constantjumpr   r_   r   create_proxytorch_assert_asyncr>   r^   sym_numSymBoolfxexperimentalsymbolic_shapesexpect_truer%   scalar_tensorrD   r9   noder   r   r\   get_submodule
module_keyrb   var_getattrrW   rP   rh   rF   r   r   has_unpack_var_sequencer   unpack_var_sequenceevaluate_exprr   	UserErrorr   BackwardHookVariablesourcer   get_real_valueUserErrorTypeDYNAMIC_CONTROL_FLOW)r   r   r   r   sym_exprresultscalar_to_tensor_proxyscalar_to_tensormodxeval_resulter   r   r   r   rg   rm   innerU  s   


















"




zgeneric_jump.<locals>.inner)r   )r   )r   r   r  rg   r  rm   generic_jump5  s    r  Fc                    s    fdd}|S )Nc                    s@   t dddtf fdd}dddtdtffdd |S )	Nr   r   r   c           	         s|  |   }|jr|jd usJ  | ||jS z| |W S  ty } z| jdkr0|  td t|tj	r7 | 
 s< |j}z|d j|d jf}W n ty_   | j}|d |d f}Y nw ttjr~ts~t|r~dt|}tjd|dd	 n	tjd
g|R   |  rd|   }t| t|||  | d t!|j"||_W Y d }~nd }~ww |#  d S )Nr   z0Graph break under GenericContextWrappingVariableco_filenameco_firstlinenor   z"Graph break: from user code at:
%sTexc_infoz<Unsupported break in user code at %s:%s (details suppressed)r   graph_break)$	speculater~   r   r&   generic_context_manager_depthremove_from_statsr%   r   r   UncapturedHigherOrderOpErrorr   
real_stackr{   r|   
IndexErrorcode_optionsgraph_break_logisEnabledForr   DEBUGexplainr;   addjoin	tracebackformat_listr   r   r   r   r   r   add_to_statsr*   r   r   )	r   r   speculationexcp
user_stack	frame_locr&  user_stack_formattedr   handle_graph_breakinner_fnrg   rm   wrapper  sj   


	

;z>break_graph_if_unsupported.<locals>.decorator.<locals>.wrapperr   c           
         s  | j j| |d t| }g }| jD ]}|jd usJ |j| || |j	| q| j 
|  ~tjdkrh|jdkrh| jd urJ| j nd}t|dkr]| j 
td|dg | j 
t|jd n|jd u soJ t|}d |_| j 
|g | j 
| tjdkrtjd	k r|jdkrttjd
 |jttjd |j }nt|j|j}|  |  t D ]}	| t  q| j 
|  | j! d S )Nr   r      r   rg   r   KW_NAMESr   Fr      r   )"r   r   r"   block_stackr   reconstruct_typeextend_outputr   
try_exceptr&  r   get_instructionsr   r   r   kw_namesr   r   r   r   argr   copyexn_tab_entrydisstack_effectopmapopcoder   ranger   r[   r   r   )
r   r   r   cgcleanupbrD  	inst_copyrI  rv   r   rg   rm   r6  1  sR   








zIbreak_graph_if_unsupported.<locals>.decorator.<locals>.handle_graph_break)r   r   r   r*   )r7  r8  r   r5  rm   	decorator  s   D9z-break_graph_if_unsupported.<locals>.decoratorrg   )r   rQ  rg   r   rm   break_graph_if_unsupported  s    rR  c                       s    e Zd ZdZ fddZ  ZS )BytecodeDistpatchTableMetazTInstalls a `cls.dispatch_table` on every subclass to speed up calls to self.OPCODE()c                    sN   t  ||| dd   fddtj D fddtdD _d S )Nc                 W   s   t d|   d S )Nz	missing: r%   )r   ru   rg   rg   rm   _missingu     z5BytecodeDistpatchTableMeta.__init__.<locals>._missingc              
      s&   i | ]\}}|t |t |qS rg   )getattrr   partial)rj   r   op)rU  clsrg   rm   rn   x  s    z7BytecodeDistpatchTableMeta.__init__.<locals>.<dictcomp>c                       g | ]}  |qS rg   )getrj   i)dispatch_tablerg   rm   
<listcomp>|      z7BytecodeDistpatchTableMeta.__init__.<locals>.<listcomp>   )super__init__rH  rJ  itemsrL  r_  )rZ  namebasesdct	__class__)rU  rZ  r_  rm   rd  r  s   z#BytecodeDistpatchTableMeta.__init__)r   r   r   r   rd  __classcell__rg   rg   ri  rm   rS  o  s    rS  c                       s  e Zd ZU eed< eeef ed< eeef 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 ed< e	e ed< e	eegef  ed< dd Zdd Zdd Zdd Zdedee deeef fddZd d! ZdAd#d$Zd%d& Zd'd( Zd)d* Zejd+krd,d- Znd.d- Ze d/d0 Z!d1d2 Z"d3d4 Z#d5d6 Z$d7e	e fd8d9Z%d:ee fd;d<Z&d=efd>d?Z'd@e
d=ee fdAdBZ(dCdD Z)dEdF Z*dGdH Z+dIdJ Z,e+Z-dKdL Z.dMdN Z/dOdP Z0dQdR Z1dSdT Z2dUdV Z3dWdX Z4dYdZ Z5d[d\ Z6d]d^ Z7d_d` Z8dadb Z9dcdd Z:e:Z;e:Z<e=e>j?deZ@e=e>jAdeZBe=e>j?dfZCe=e>jAdfZDdgdh ZEdidj ZFdkdl ZGdmdn ZHdodp ZIdqdr ZJdsdt ZKdudv ZLdwdx ZMdydz ZNd{d| ZOd}d~ ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYeZdddd Z[eZdddd Z\eZdddd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgd=efddZheZdddd Zidd Zjdd Zkdd Zldd Zmdd ZneofddZpdd ZqeqZrdd ZsddÄ ZtetZuddń ZvddǄ ZwddɄ Zxdd˄ Zydd̈́ Zzddτ Z{ddф Z|ddӄ Z}ddՄ Z~ddׄ Zddل Zddۄ Zdd݄ Zdd߄ Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZeZdd Zdd Zdd Zdd Zdd Zdd Zee>jZee>jZee>j?Zee>jZee>jZee>jZee>jZee>jZee>jZee>jZee>jZee>jZee>jZeZddee>jZee>jZee>jZee>jZee>jZee>jZee>jZee>jZee>jZee>jZee>jZee>jZee>jZee>jŃZee>jǃZee>jɃZee>j˃Zee>j̓Zee>jσZee>jуZdd Zejd+krFdd ZԐd d ZՐdd Z֐dd ZeZdddd Zؐdd	 Zِd
d Ze:Ze:Ze=e>jAdeZe=e>jAdeZe=e>j?deZe=e>j?deZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' ZdAd(d)Zd*d+ Zd,d- Ze d.d/ Zd0d1 Zejd2eegef fd3d4Zd=efd5d6Zded7ee d8eeef d9eeef d:eeef d;eeef deeef deeef d<ejd=ede
d>ef fd?d@Z  ZS (B  r   r   symbolic_localssymbolic_globalsstackr}   current_instructionr?  r|   rD  accept_prefix_instprefix_instsinline_depthinconsistent_side_effectscurrent_speculationr_  exn_vt_stackexec_recorderstrict_checks_fnc                 C   s
   d| _ dS )z
        InstructionTranslator has encountered instructions which may cause
        dynamo to see a different version of history from eager
        See: https://github.com/pytorch/pytorch/issues/110765
        TN)rs  r   rg   rg   rm   mark_inconsistent_side_effects  s   
z8InstructionTranslatorBase.mark_inconsistent_side_effectsc                 C   s^   | j j}| jd usJ | j| jd  D ]}|jdv r dS |jtv r,|j}||k r, dS qdS )N)RETURN_VALUERETURN_CONSTFT)ro  offsetr}   r   r   r   r   )r   
cur_offsetr   jump_offsetrg   rg   rm   r     s   

z,InstructionTranslatorBase.maybe_has_backedgec                 C   sT   t | ds't| jd pg t| jd pg  | _t| tr'|  j| j 7  _| jS )N_cell_and_freevarsco_cellvarsco_freevars)hasattrr   r&  r~  r   InliningInstructionTranslatorparentcell_and_freevarsr   rg   rg   rm   r    s   

z+InstructionTranslatorBase.cell_and_freevarsc                    sJ   t | j| j  t|  B   fdd| j D | _| jj	|  d S )Nc                    s   i | ]\}}| v r||qS rg   rg   ri   readsrg   rm   rn     s    z?InstructionTranslatorBase.prune_dead_locals.<locals>.<dictcomp>)
r   r   ro  setr  rl  re  r   side_effectsprune_dead_object_newr   rg   r  rm   prune_dead_locals  s   
z+InstructionTranslatorBase.prune_dead_localsr   ru   kwargsc                 C   s   t |tsJ t |tsJ t |tsJ tdd t|| D s&J d }t|dr0|j	}t|dr8|j
}|rIt|rIt|rItd| | || || d S )Nc                 s   s    | ]}t |tV  qd S rp   )r   rB   rj   r  rg   rg   rm   	<genexpr>  s
    
z:InstructionTranslatorBase.call_function.<locals>.<genexpr>r   r   z$Attempt to trace forbidden callable )r   rB   r   dictall	itertoolschainvaluesr  r   r   callabler7   r   r   rh   )r   r   ru   r  r7  rg   rg   rm   rh     s   

z'InstructionTranslatorBase.call_functionc                 C   s   t | |||S )zF
        A call to some user defined function by inlining it.
        )r  inline_call)r   r   ru   r  rg   rg   rm   inline_user_function_return  s   z5InstructionTranslatorBase.inline_user_function_returnNc                 C   st   |d u r| j }| jdkrd| j dnd}t| jj|}|d u r"dnd| d}| jj d| d| jj | | S )Nr   z (inline depth: )r    (r   z in )r|   rr  r'   f_coder  co_name)r   r|   inline_depth_strfuncnamefuncname_strrg   rg   rm   get_line_of_code_header  s   $z1InstructionTranslatorBase.get_line_of_code_headerc                 C   s8   d|    d}t| jj| j }|d| 7 }|S )NzTRACE starts_line r   z    )r  	linecachegetliner  r  r|   rstrip)r   log_strlinerg   rg   rm   get_log_starts_line_log_str  s   z5InstructionTranslatorBase.get_log_starts_line_log_strc                 C   sP   | j |krd S || _ t| jj|| jj ttj	r&t
dt| j d S d S )N%s)r|   r   set_current_locr  r  r  trace_source_logr(  r   r)  r   r=   r  )r   r|   rg   rg   rm   starts_line  s   
z%InstructionTranslatorBase.starts_linec                 C   s.  | j }|du r	dS | j|  | _}|d | _ |jr| |j | js8|  r8|  r8|  | _| jj	r8| 
|S ttjrItd|j|j| j | | z| j|j | | | jj W S  tjyl   |   Y dS  tyu   Y dS  ty   | jdu rtd  tjddd Y nw | j  dS )	z<Process exactly one instruction, return False we should exitNFr   zTRACE %s %s %sTzempty checkpointzstep triggered compiler  )r}   r   ro  r  rn  r   is_non_empty_graphr   rt  r~   step_graph_breaktrace_bytecode_logr(  r   r)  r   r   r   update_block_stackr_  rK  r   should_exitr   ObservedExceptionexception_handlerr   r&   r   r   )r   ipr   rg   rg   rm   step	  sH   





zInstructionTranslatorBase.stepr9  c                 C   s   |j }|r+t| jdkr%|j| jd jur'|j| jd ju r)| j  d S d S d S d S | jrC|jdvrEt| jdks<J | j  d S d S d S )N   r  )NOPJUMP_BACKWARDr   )rG  r   r?  r   r   r   )r   r   r   rg   rg   rm   r  6  s   	z,InstructionTranslatorBase.update_block_stackc                 C      d S rp   rg   r   rg   rg   rm   r  _     c                 C   s   | j | j S rp   )r   r}   r   rg   rg   rm   r   b  s   z*InstructionTranslatorBase.next_instructionc                 C   sT   | j jrJ | jd usJ | j j| dtd|  gd | j t|g| j  d S )NTstep_unsupported)partial_convertr   )	r   output_instructionsrt  r   r*   r   r   r   r   )r   continue_instrg   rg   rm   r  f  s   z*InstructionTranslatorBase.step_graph_breakc                 C   s
   t d S rp   )r   current_framer   rg   rg   rm   run_ctx_mgrs  s   
z%InstructionTranslatorBase.run_ctx_mgrc                 C   s   |   [ z@z| j|  |  r	 |  sW n ty     ty4 } z
| jr/| j |_ d }~ww W | j	  t
| trE| j  n| j	  t
| trV| j  w w W d    d S 1 sbw   Y  d S rp   )r  r   push_txr  r$   	Exceptionrv  
get_recordexec_recordpop_txr   InstructionTranslatorrN  )r   r  rg   rg   rm   runy  s4   





"zInstructionTranslatorBase.runvalc                 C   s4   |d u st |tsJ dt| | j| d S )Nz"push expects VariableTracker, got )r   rB   rA   rn  r   )r   r  rg   rg   rm   r     s   
zInstructionTranslatorBase.pushvalsc                 C   s   |D ]}|  | qd S rp   r   )r   r  r  rg   rg   rm   	push_many  s   z#InstructionTranslatorBase.push_manyr   c                 C   s
   | j  S rp   )rn  r   r   rg   rg   rm   r     r   zInstructionTranslatorBase.popnc                    s   g t  fddt|D S )Nc                    s   g | ]}   qS rg   r   )rj   rv   r   rg   rm   r`        z2InstructionTranslatorBase.popn.<locals>.<listcomp>)rr   rL  )r   r  rg   r   rm   r     s   zInstructionTranslatorBase.popnc                 C   s   |j }| jr|| jv r| j|| j|  z| | j|   W n. tyO   |drIz| | j|	dd  W n tyH   t
d Y nw t
d Y nw |dr]| j| d S d S )N.implicitzundefined LOAD_FAST (implicit)zundefined LOAD_FAST___stack)r   rv  f_localsadd_local_varr   rl  unwrapKeyError
startswithreplacer%   r   )r   r   rf  rg   rg   rm   	LOAD_FAST  s$   

z#InstructionTranslatorBase.LOAD_FASTc                 C   sn   |j |  v s	J | jr|j | jv r| j|j | j|j   |j | jvr,td|j   | | j|j   d S )Nzundefined LOAD_DEREF )r   r  rv  r  r  rl  r%   r   r   rg   rg   rm   
LOAD_DEREF  s   z$InstructionTranslatorBase.LOAD_DEREFc                 C   s&   |   }|j}|| || j|< d S rp   )r   r   set_name_hintrl  )r   r   	loaded_vtrf  rg   rg   rm   
STORE_FAST  s   
z$InstructionTranslatorBase.STORE_FASTc                 C   s   | j |j= d S rp   )rl  r   r   rg   rg   rm   DELETE_FAST     z%InstructionTranslatorBase.DELETE_FASTc                 C   s   |  t|jd d S N)rf  )r   rV   r   r   rg   rg   rm   LOAD_CLOSURE  s   z&InstructionTranslatorBase.LOAD_CLOSUREc                 C   sF   |j }|d u rtj|jdS | j| }|s!tj|jd | j|< }|S )Nr   )rE  rF   r   r   _constants_cache)r   r   r^  r  rg   rg   rm   _load_const  s   
z%InstructionTranslatorBase._load_constc                 C   s   |  | | d S rp   )r   r  r   rg   rg   rm   r     s   z$InstructionTranslatorBase.LOAD_CONSTc                 C   s   t jdkr|jd r| | |j}| jr5|| jv r%| j|| j|  n|| jv s,J | j| | jj	|< || j
v rP| jj| j
|  }| | jj|| d S z| j| }W n tye   | | Y S w t|}| t| || d S Nr9  r  )r   r   rE  	PUSH_NULLr   rv  	f_globalsadd_global_var
f_builtinsbuiltinsrm  r   r  r   load_globalr  load_builtinr2   rC   )r   r   rf  variabler   r  rg   rg   rm   r     s(   




z%InstructionTranslatorBase.LOAD_GLOBALc                 C   sj   |   }|j}t|}|| jvrt | j|< | jj|| j| }t|t	r*t
d | jj||| d S Nz Storing handles in globals - NYI)r   r   r2   rm  objectr   r  track_global_existingr   r`   r%   store_global)r   r   r   rf  r  r  rg   rg   rm   STORE_GLOBAL  s   


z&InstructionTranslatorBase.STORE_GLOBALc                 C   s   d|v rt jjj| }|dddddd}nt|}d|dd }| jj}||vs8|| |u s8J |||< | j	| t
|S )z-Create an alias to a module for use in guardstorch_package>rv   <r  _dot_	__import_)r   packagepackage_importer_package_imported_modulesr  	importlibimport_moduler   global_scopeupdate_co_namesr2   )r   module_namer   aliasr  rg   rg   rm   import_source  s   
z'InstructionTranslatorBase.import_sourcec                 C   sB   | d|d }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   rf  r  levelbitsbaserg   rg   rm   resolve_name  s
   z&InstructionTranslatorBase.resolve_namec                 C   s   | j d}| j d}|dur%|dur#||jkr#tjd||jdd |S |dur,|jS tjddd | j d }d	| j vrD|d
d }|S )z
        Copied from the Cpython implementation of __import__
        https://github.com/python/cpython/blob/5a094f0255eea1db58fb2cf14c200971e64ec36e/Lib/importlib/_bootstrap.py#L1090
        __package____spec__Nz)__package__ != __spec__.parent (%r != %r)r   )
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  specrg   rg   rm   calc_package  s*   

z&InstructionTranslatorBase.calc_packagec           
      C   s&  |  d\}}| }| }|j}tj d| d| d| }|| jv r/| j| }t|}n<zt|||| jd}W n tyG   t	d Y nw |dkrW| 
 }| |||}|sf|dd }	| |	}n| |}| jru| j|| t|tjtfr| t||d d S t	dt|  d S )	Nr  rv   )fromlistr  globalsz#import a module that does not existr   r  r  zIMPORT_NAME )r   r   r   r-   LOCAL_MOD_PREFIXr  r2   
__import__r  r%   r	  r  	partitionr  rv  add_local_modr<   types
ModuleTyper,   r   rZ   rA   )
r   r   r  r
  r  recorded_namer   r  pkgtop_level_module_namerg   rg   rm   IMPORT_NAME<  s>   




z%InstructionTranslatorBase.IMPORT_NAMEc                 C   s   |  | | | d S rp   )DUP_TOP
_load_attrr   rg   rg   rm   IMPORT_FROMk     
z%InstructionTranslatorBase.IMPORT_FROMc                 C   s|   || j vrtd| d| j | }t|r-t| jj}t||}| t| || d S t	|s3J | t
j|d d S )Nzname 'z' is not definedr  )r  	NameErrorr  r2   r   %name_of_builtins_dict_key_in_fglobalsr1   r   rC   r6   rF   r   )r   r   r  builtins_source
var_sourcerg   rg   rm   load_builtin_from_argvalo  s   


z2InstructionTranslatorBase.load_builtin_from_argvalc                 C   s   |  |j d S rp   )r  r   r   rg   rg   rm   r  ~     z&InstructionTranslatorBase.load_builtinc                 C   s   | j |j | _d S rp   )indexofr   r}   r   rg   rg   rm   r     rV  zInstructionTranslatorBase.jumpFTc                 C      | j t||j d S rp   r?  r   r   r   r   rg   rg   rm   
SETUP_LOOP     z$InstructionTranslatorBase.SETUP_LOOPc                 C   r"  rp   r#  r   rg   rg   rm   SETUP_EXCEPT  r%  z&InstructionTranslatorBase.SETUP_EXCEPTc                 C   s   | j   d S rp   )r?  r   r   rg   rg   rm   	POP_BLOCK  r  z#InstructionTranslatorBase.POP_BLOCKc                 C      |  | d S rp   setup_or_before_withr   rg   rg   rm   
SETUP_WITH  r  z$InstructionTranslatorBase.SETUP_WITHc                 C   r"  rp   r#  r   rg   rg   rm   SETUP_FINALLY     z'InstructionTranslatorBase.SETUP_FINALLYc                 C   s   |  d  d S rp   r   r   rg   rg   rm   BEGIN_FINALLY  r  z'InstructionTranslatorBase.BEGIN_FINALLYc                 C   sH   |  d\}}|d u sJ | | | || td gd i  d S )Nr  r   )r   r   rh   rF   r   )r   r   r   r   rg   rg   rm   WITH_CLEANUP_START  s   
$z,InstructionTranslatorBase.WITH_CLEANUP_STARTc                 C   s   |  d | d  d S Nr  )r   r   r   rg   rg   rm   WITH_CLEANUP_FINISH  r  z-InstructionTranslatorBase.WITH_CLEANUP_FINISHc                 C   s*   | j | j }| t| | | dS )z|
        pushes the address of the next instruction onto the stack and increments
        bytecode counter by delta
        N)r!  r   r   rF   r   r   )r   r   addrrg   rg   rm   CALL_FINALLY  s   z&InstructionTranslatorBase.CALL_FINALLYc                 C   s&   |   }t|tr| | _d S 	 d S rp   )r   r   rF   r   r}   r   r   tosrg   rg   rm   END_FINALLY  s   
z%InstructionTranslatorBase.END_FINALLYc                 C   s0   |j }|r	|  }|  }|r| | d S d S rp   )r   r   r   )r   r   preserve_tosr5  rv   rg   rg   rm   POP_FINALLY  s   z%InstructionTranslatorBase.POP_FINALLYc              	   C   sz   |    }z|| }| | | | W d S  ttjfy<   tjdkr4| | | t	
d  | | Y d S w Nr=  )r   realizenext_variabler   StopIterationr   UserStopIterationr   r   rF   r   r   )r   r   itr  rg   rg   rm   FOR_ITER  s   



z"InstructionTranslatorBase.FOR_ITERc                 C   s   |j dkrtd d S |j dkrQ|  }t|tr|jtu s$t|tjr't	j
t|tjr4|| g i }| j| t|tjrHt	d| tdt	  d S td d S )Nr   zre-raiser   zraised exception zraise zraise ... from ...)rE  r%   r   r   rE   r   r<  r   StopIterationVariabler   r=  rh   ru  r   ExceptionVariabler  r   r   r  rg   rg   rm   r     s"   



z'InstructionTranslatorBase.RAISE_VARARGSc                 C   s.  t jdkrX| jj}|rFt| j|jkr|   t| j|jks|jr0t	d | 
t| jj t| js7J | 
| jd  | | d S | j  t| tu rUtdtjt| jrt| jseJ | jd }| j }|jjdkr| d t| jdkrt	d | j }|jjdksu|jjd	krt	d
|j  tddd d}| jt|d  t| jdkr| jd }| 
t  | 
| | 
t|j n| 
td  | 
td  | 
td  | 
t  | 
| | 
t|j | | d S | j  t| tu rtdtj)Nr9  z#lasti=True while exception handlingr  zObserved exceptionEXCEPT_HANDLERr   r   z-exception is raised when block stack is emptyr,  zvexception is raised when top of the block stack is not exception handler (e.g. try .. with .. except). Current TOS is g    .Ar  r  ) r   r   ro  rG  r   rn  depthr   lastir%   r   r   rF   r{  ru  r   r   typer  r&   r   r  r?  r   r   r   r   r   r   r[   rE   exc_type)r   rG  exception_varblock_stack_entryexcept_handler_instold_exceptionrg   rg   rm   r    sl   










z+InstructionTranslatorBase.exception_handlerc                 C   s4   |   }t| jsJ | | jd  | | d S Nr  )r   r   ru  r   rB  rg   rg   rm   PUSH_EXC_INFOW  s   z'InstructionTranslatorBase.PUSH_EXC_INFOc                 C   s   t jdkr|  }t|tjsJ t| jsJ | j  d S t| jdks(J | jd j	j
dkr5td| j  | d t| jsFJ | j  d S )Nr9  r   r  rC  zYBug in Dynamo tracing of exception handling.Top of the block stack is not EXCEPT_HANDLER.r   )r   r   r   r   r   rA  r   ru  r?  r   r   r   r   rB  rg   rg   rm   
POP_EXCEPT]  s   


z$InstructionTranslatorBase.POP_EXCEPTc                 C   s   t | jdks	J |  }| jd }t|ttfs td|  tjdkr2t|t	j
s2td|  t|tr;|j}n|g}|D ].}t|tsNtd|  t|t	j
r^t|j|jr^ dS t|t	jrnt|j|jrn dS q@dS )	Nr  r  z+except has an unsupported types of objects r9  zCexcept expects to recieve an object of exception type but received z*except has an unsupported types of object TF)r   rn  r   r   rE   rU   r%   r   r   r   rA  re  
issubclassrG  r   )r   expected_exc_typesexc_instanceexpected_typesexpected_typerg   rg   rm   check_if_exc_matchest  s>   



z.InstructionTranslatorBase.check_if_exc_matchesc                 C   s   |  t|   d S rp   )r   r   rF   rT  r   rg   rg   rm   CHECK_EXC_MATCH  r-  z)InstructionTranslatorBase.CHECK_EXC_MATCHc                 C   s   |   s| | d S d S rp   )rT  r   r   rg   rg   rm   JUMP_IF_NOT_EXC_MATCH  s   z/InstructionTranslatorBase.JUMP_IF_NOT_EXC_MATCHc                 C   s:   |j dkr| | d S | t|j  | | di  d S )Nzexception matchr  )r   rU  r   ro   r   r   rg   rg   rm   
COMPARE_OP  s   
"z$InstructionTranslatorBase.COMPARE_OPc                 C   s   |  tt|  gi  d S rp   )rh   rE   iterr   r   rg   rg   rm   GET_ITER  s   z"InstructionTranslatorBase.GET_ITERr   r   c                 C   s&   |  |j}|  }| ||i  d S rp   r   r   r   rh   )r   r   ru   r   rg   rg   rm   r     s   z'InstructionTranslatorBase.CALL_FUNCTIONc                 C   s  |j dkrti }|  }n|j dkr|  }|  }ntd |  }tjdkr4|  }t|ts4J t|trPt|j	t
rP|jdkrPt|tt
frPt|g}t|tsa|| rat|| }t|trkt|tsytdt| dt|  | }| ||j| d S )Nr   r   CALL_FUNCTION_EXr9  viewznon-static call  )r   rJ   r   r%   r   r   r   rY   rW   objr_   rf  rF   rU   rQ   r  r  rA   keys_as_python_constantrh   re  )r   r   
kwargsvarsargsvarsr   nullrg   rg   rm   r[    s>   







z*InstructionTranslatorBase.CALL_FUNCTION_EXc                 C   s   |   }| |j}|   }t|tr| sJ | }|d t|  |t| d  }}tt	||}t|t|ksAJ | 
||| d S rp   )r   r   r   r   rU   r   r   r   r  ziprh   )r   r   argnamesru   r   kwargs_listr  rg   rg   rm   CALL_FUNCTION_KW  s   &z*InstructionTranslatorBase.CALL_FUNCTION_KWc                 C   sf   |  tj|dd |jd }| jd | }tjdk r'| tj||d d S | tj||d d S )Nr  r<  r   co_namesr9  )	r   r   r  r   r&  r   r   r  LOAD_METHODr   r   rE  r   rg   rg   rm   LOAD_METHOD_SUPER  s   

z+InstructionTranslatorBase.LOAD_METHOD_SUPERc                 C   sD   |  tj|dd |jd }| jd | }| tj||d d S )Nr  r<  r   rg  )r   r   r  r   r&  r  ri  rg   rg   rm   LOAD_ATTR_SUPER  s   
z)InstructionTranslatorBase.LOAD_ATTR_SUPERc                 C   sL   |  | |  }tjdkr| | | | d S | | | d  d S )Nr9  )r  r   r   r   r  r   r   r   r^  rg   rg   rm   rh    s   



z%InstructionTranslatorBase.LOAD_METHODc                 C   s:   |  |j}|  }|d u sJ |  }| ||i  d S rp   rZ  )r   r   ru   dummyr   rg   rg   rm   CALL_METHOD  s
   z%InstructionTranslatorBase.CALL_METHODc                 C   s4   |   }tt| |t|jgi }| | d S rp   )r   rE   rW  rh   rF   r   r   r   )r   r   r^  r  rg   rg   rm   r    s
   z$InstructionTranslatorBase._load_attrc                 C   s0   t jdkr|jd r| | d S | | d S )Nr=  r  )r   r   rE  rh  r  r   rg   rg   rm   	LOAD_ATTR  s
   


z#InstructionTranslatorBase.LOAD_ATTRc              
   C   s   |   }|jr| |S | d\}}t|tr)t|ts)| jr)J d|j dzt	t
| |t|j|gi  W d S  tyc } z|  sI tjddd |  |d W Y d }~nd }~ww |  d S )Nr  zMutating module attribute z during export.zSTORE_ATTR triggered compileTr  r  )r   r~   store_attr_graph_breakr   r   r\   rF   exportr   rE   setattrrh   r   r&   r   r   r   r"  r/  r   )r   r   r0  r  r^  r  rg   rg   rm   
STORE_ATTR  s.   
z$InstructionTranslatorBase.STORE_ATTRc                 C   sb   |   std | jj| td|  gd | jt|g | d | j| 	| j
 d S )Nr   
store_attrr   r  )r   r%   r   r   r*   r   r   rF  r   r   r   r   rg   rg   rm   rp  5  s   

z0InstructionTranslatorBase.store_attr_graph_breakc                 C   s*   |   }tt| |t|jgi  d S rp   )r   rE   delattrrh   rF   r   r   rl  rg   rg   rm   DELETE_ATTRA  s   z%InstructionTranslatorBase.DELETE_ATTRc                 C      t dt|  )Nz1create_call_resume_at not overridden by subclass r   rF  r   r{  rg   rg   rm   r   G     z/InstructionTranslatorBase.create_call_resume_atc                 C   rw  )Nz8should_compile_partial_graph not overridden by subclass rx  r   rg   rg   rm   r   L  rz  z6InstructionTranslatorBase.should_compile_partial_graphr   c                 C   s(   |  d\}}}|| d||gi }d S )Nr   __setitem__r   call_method)r   r   r  r^  keyr  rg   rg   rm   STORE_SUBSCRQ  s   z&InstructionTranslatorBase.STORE_SUBSCRc                 C   s$   |  d\}}|| d|gi  d S )Nr  __delitem__r|  )r   r   r^  r~  rg   rg   rm   DELETE_SUBSCRV  s   z'InstructionTranslatorBase.DELETE_SUBSCRc                 C      |  |j}| t| d S rp   )r   r   r   rU   r   r   re  rg   rg   rm   BUILD_TUPLEZ     z%InstructionTranslatorBase.BUILD_TUPLEc                 C   r  rp   )r   r   r   rT   r  rg   rg   rm   BUILD_SLICE^  r  z%InstructionTranslatorBase.BUILD_SLICEc                 C   s$   |  |j}| t|t d d S Nmutable_local)r   r   r   rS   r@   r  rg   rg   rm   
BUILD_LISTb  s   z$InstructionTranslatorBase.BUILD_LISTc                 C   s6   t jrtd | |j}t|t d}| | d S )Nzmissing: BUILD_SETr  )r   +inject_BUILD_SET_unimplemented_TESTING_ONLYr%   r   r   rK   r@   r   )r   r   re  new_setrg   rg   rm   	BUILD_SETf  s
   z#InstructionTranslatorBase.BUILD_SETc              	   C   sh   |  |j}t }|D ]}z
|||  W q ty'   td|  Y qw | ||t d d S )NzBUILD_LIST_UNPACK r  )	r   r   r   extendr  NotImplementedErrorr%   r   r@   )r   r   rZ  seqsre  seqrg   rg   rm   BUILD_LIST_UNPACKm  s   z+InstructionTranslatorBase.BUILD_LIST_UNPACKc                 C   s   | j |td d S )N)rZ  )r  rU   r   rg   rg   rm   BUILD_TUPLE_UNPACKw  rV  z,InstructionTranslatorBase.BUILD_TUPLE_UNPACKc                 C   sJ   |  |jd }tt|d d d |dd d }| t|t d d S )Nr  r   r  )r   r   r  rc  r   rJ   r@   )r   r   re  drg   rg   rm   	BUILD_MAP|  s   "z#InstructionTranslatorBase.BUILD_MAPc                    s`     |j} fdd|D }t }|D ]}t|tsJ ||j q t|t d d S )Nc                    s    g | ]}t t |gi qS rg   )rE   r  rh   r  r   rg   rm   r`    s     z>InstructionTranslatorBase.BUILD_MAP_UNPACK.<locals>.<listcomp>r  )	r   r   r  r   rJ   updatere  r   r@   )r   r   re  r  r  rg   r   rm   BUILD_MAP_UNPACK  s   z*InstructionTranslatorBase.BUILD_MAP_UNPACKc                 C   sn   |   }| |j}t|tsJ | sJ || }t|t|ks&J | t	t
t||t d d S r  )r   r   r   r   rU   r   r  r   r   rJ   r  rc  r@   )r   r   keysr  rg   rg   rm   BUILD_CONST_KEY_MAP  s   
z-InstructionTranslatorBase.BUILD_CONST_KEY_MAPc                 C   sT   |  d\}}|jdksJ | j|j   }t|tsJ || d||fi  d S )Nr  r   r{  )r   r   rn  rE  r:  r   rJ   r}  )r   r   rk   rl   r^  rg   rg   rm   MAP_ADD  s
   z!InstructionTranslatorBase.MAP_ADDc                 C   sN   |   }|jdksJ | j|j  }t|tsJ |jsJ || d|gi S )Nr   r+  r   r   rn  rE  r   rK   r  r}  r   r   rl   r^  rg   rg   rm   SET_ADD  s   
z!InstructionTranslatorBase.SET_ADDc                 C   R   |   }|jdksJ | j|j  }t|tsJ |jsJ || d|gi  d S Nr   r  r  r  rg   rg   rm   
SET_UPDATE     
z$InstructionTranslatorBase.SET_UPDATEc                 C   s^   |   }|jdksJ | j|j   }t|tsJ |js J | jj	
| |j| d S r   )r   r   rn  rE  r:  r   rS   r  r   r  mutationre  r   r  rg   rg   rm   LIST_APPEND  s   
z%InstructionTranslatorBase.LIST_APPENDc           
      C   s   |j }t| j}tjdk r|  }|  }tjdkr*t|jds"J tj	|jj
d}d }d }d }d }	|d@ r:|  }|d@ rB|  }|d@ rJ|  }	|d@ rR|  }| t||| j||	||| d d S )	Nr9  co_qualnamer        r  r   )closure_scope)rE  r   rn  r   r   r   r  r   rF   r   r  r   rM   r  )
r   r   flags	old_stackfn_namecodedefaultsclosureannotations
kwdefaultsrg   rg   rm   MAKE_FUNCTION  s@   


z'InstructionTranslatorBase.MAKE_FUNCTIONc                    s     }t|tr|jt|jd}n4t|tr6t|jtr6t|j	 |j
  fddt|jD }n|rA|}ntd|  t||jkrStd t|D ]}| qWd S )N)idxesc                    s   g | ]	}t  | qS rg   )rD   r]  proxyr   rg   rm   r`    s    z=InstructionTranslatorBase.UNPACK_SEQUENCE.<locals>.<listcomp>zUNPACK_SEQUENCE zUNPACK_SEQUENCE length mismatch)r   r   r_   r  rL  r   rW   r^  rW  as_proxyrf  r  r%   r   rr   r   )r   r   r  r  r^  rg   r  rm   UNPACK_SEQUENCE  s   

z)InstructionTranslatorBase.UNPACK_SEQUENCEc           
      C   s   d|j   krdksJ  J |j d@ }|j d? }|  }|| rnt|| }t||| ks3J |d | }||t||  }|t|| d  }t|D ]}	| |	 qQ| t| t|D ]}	| |	 qdd S t	d|  d S )Nr   i     r  z
UNPACK_EX )
r   r   r  r   r  r   rr   r   rU   r%   )
r   r   prefixsuffixr  r  vals_prefix	vals_listvals_suffixitemrg   rg   rm   	UNPACK_EX  s"   


z#InstructionTranslatorBase.UNPACK_EXc                 C   r  rp   rg   r   rg   rg   rm   r    r  zInstructionTranslatorBase.NOPc                 C      |    d S rp   r  r   rg   rg   rm   POP_TOP     z!InstructionTranslatorBase.POP_TOPc                 C   s(   |   }|   }| | | | d S rp   r   r   r   r   arO  rg   rg   rm   ROT_TWO  s   
z!InstructionTranslatorBase.ROT_TWOc                 C   s:   |   }|   }|   }| | | | | | d S rp   r  )r   r   r  rO  crg   rg   rm   	ROT_THREE  s   

z#InstructionTranslatorBase.ROT_THREEc                 C   sL   |   }|   }|   }|   }| | | | | | | | d S rp   r  )r   r   r  rO  r  r  rg   rg   rm   ROT_FOUR   s   


z"InstructionTranslatorBase.ROT_FOURc                 C   s    |   }| | | | d S rp   r  )r   r   r  rg   rg   rm   r  *  s   
z!InstructionTranslatorBase.DUP_TOPc                 C   s<   |   }|   }| | | | | | | | d S rp   r  r  rg   rg   rm   DUP_TOP_TWO/  s   


z%InstructionTranslatorBase.DUP_TOP_TWOc                 C   s   |j }|d@ dkr|  }ntd}|  }t|tr$tt|j}|d@ dkr5tt	| |gi }n!|d@ dkrFtt
	| |gi }n|d@ dkrVtt	| |gi }td|  d }| 	ttj||gi  d S )Nr  r   r   r   r  z{:})rE  r   rF   r   r   r^   r   r   rE   rh   reprasciir   format)r   r   r  fmt_specr   fmt_varrg   rg   rm   FORMAT_VALUE7  s   


z&InstructionTranslatorBase.FORMAT_VALUEc                 C   s   g }g }i }|  |jD ]J}t|tr|d || qt|tjrO||j ||j	 t
| t
|j @ rHtd| d|j  ||j qtd|  q| tjd||| d S )Nz{}zBUILD_STRING key conflict z & zBUILD_STRING r   )r   rE  r   rF   r   r   StringFormatVariableformat_stringr  sym_argsr  r  
sym_kwargsr%   r  r   r   r,  )r   r   format_string_partsru   r  partrg   rg   rm   BUILD_STRINGL  s*   

z&InstructionTranslatorBase.BUILD_STRINGc                 C   sF   |j dks|j dksJ |j dkrd}nd}td|d}| | d S )Nr   r   iszis notrW  r<  )r   r   rW  )r   r   
new_argvalnew_instrg   rg   rm   IS_OPd  s   
zInstructionTranslatorBase.IS_OPc                 C   s^   |j dks|j dksJ | d\}}|j }| || d|gi  |dkr-| | d S d S )Nr   r   r  __contains__)r   r   r   r}  	UNARY_NOT)r   r   leftrightrY  rg   rg   rm   CONTAINS_OPm  s   z%InstructionTranslatorBase.CONTAINS_OPc                 C   r  )Nr   r  )r   r   rn  rE  r   rS   r  r}  r  rg   rg   rm   LIST_EXTENDu  r  z%InstructionTranslatorBase.LIST_EXTENDc                 C   s"   |  tt| |  gi  d S rp   )r   rE   r   rh   r   r   rg   rg   rm   LIST_TO_TUPLE}  s   "z'InstructionTranslatorBase.LIST_TO_TUPLEc                 C   sV   |   }|jdksJ | j|j   }t|tsJ |js J || d|gi  d S r  )	r   r   rn  rE  r:  r   rJ   r  r}  r  rg   rg   rm   
DICT_MERGE  s   
z$InstructionTranslatorBase.DICT_MERGEc                 C   r  rp   r  r   rg   rg   rm   	GEN_START  r  z#InstructionTranslatorBase.GEN_STARTc                 C   sH   | j d }| r| tt|  d S | || dg i  d S )Nr  r   )rn  r   r   rF   r   r   r   r}  r4  rg   rg   rm   GET_LEN  s   
z!InstructionTranslatorBase.GET_LENc                 C   sP   | j d }t|tsJ t|jtjjr| t	d d S | t	d d S Nr  TF)
rn  r   rJ   re  collectionsabcMappingr   rF   r   r4  rg   rg   rm   MATCH_MAPPING  s
   
z'InstructionTranslatorBase.MATCH_MAPPINGc                 C   sd   | j d }| sJ | }t|tjjr(t|ttt	fs(| 
td d S | 
td d S r  )rn  r   r   r   r  r  Sequencer   bytes	bytearrayr   rF   r   )r   r   r5  	tos_valuerg   rg   rm   MATCH_SEQUENCE  s   

z(InstructionTranslatorBase.MATCH_SEQUENCEc                    s   | j d }| j d  t tsJ t fdd|D r;| t fdd|D  tjdk r9| t	d d S d S | t	d  tjdk rR| t	d	 d S d S )
Nr  r  c                 3   s    | ]}| v V  qd S rp   rg   rj   rk   tos1rg   rm   r        z7InstructionTranslatorBase.MATCH_KEYS.<locals>.<genexpr>c                    r[  rg   )getitem_constr  r  rg   rm   r`    ra  z8InstructionTranslatorBase.MATCH_KEYS.<locals>.<listcomp>r9  TF)
rn  r   rJ   r  r   rU   r   r   rF   r   r4  rg   r  rm   
MATCH_KEYS  s   



z$InstructionTranslatorBase.MATCH_KEYSc                 C      |  d d S )Nr   )r  r   rg   rg   rm   r     r  z.InstructionTranslatorBase.LOAD_ASSERTION_ERRORc                 C   s,   |j dkr| | d| _d S | jrJ d S )Nr   F)rE  append_prefix_instrp  r   rg   rg   rm   RESUME  s   


z InstructionTranslatorBase.RESUMEc                 C   s   t |j | |S rp   )_binary_op_lookuprE  r   rg   rg   rm   	BINARY_OP  r   z#InstructionTranslatorBase.BINARY_OPc                 C   r  rp   rg   r   rg   rg   rm   r     r  z!InstructionTranslatorBase.PRECALLc                 C   sV   | j d |j }t|tsJ |D ]	}t|tsJ q| jd u s"J tj|d| _d S )N	co_constsr  )r&  rE  r   r   r   rD  rF   r   )r   r   rD  rf  rg   rg   rm   r;    s   z"InstructionTranslatorBase.KW_NAMESc                 C   s   |  t  d S rp   )r   rY   r   rg   rg   rm   r    r   z#InstructionTranslatorBase.PUSH_NULLc                 C   s   |  |jd }t|d tr|d }g }n	|d }|d g}| jr&| jjnd}|rP||dt|   }|t| d  }tt||}t|t|ksOJ n
||dd   }i }| 	||| d | _d S )Nr  r   r   rg   )
r   rE  r   rY   rD  r   r   r  rc  rh   )r   r   contentsr   ru   rD  re  r  rg   rg   rm   r     s    

zInstructionTranslatorBase.CALLc                 C   s   |  | j|j   d S rp   )r   rn  rE  r   rg   rg   rm   COPY  r-  zInstructionTranslatorBase.COPYc                 C   s.   | j |j  | j d | j d< | j |j < d S rL  )rn  rE  r   rg   rg   rm   SWAP  s   .zInstructionTranslatorBase.SWAPc                 C   r  rp   rg   r   rg   rg   rm   CACHE  r  zInstructionTranslatorBase.CACHEc                 C   r(  rp   r)  r   rg   rg   rm   BEFORE_WITH  r  z%InstructionTranslatorBase.BEFORE_WITHc                 C   s   |   }t|tst|j d|  t|tr|  jd7  _t||j}t	j
dkrC|jr=| jr:|jj| jd jur=d }n	| jjj}n|j}|ret| tr\| jt||t| j| n	| jt|| | | | ||  d S )Nr]  r   r9  r  )r   r   rG   r%   r   rH   r!  rI   r   r   r   rG  r?  r   r  r   r   r   rn  r   enter)r   r   ctxr   r   rg   rg   rm   r*  "  s2   




z.InstructionTranslatorBase.setup_or_before_withc                 C   s   | j sJ | j| d S rp   )rp  rq  r   r   rg   rg   rm   r  I  s   
z,InstructionTranslatorBase.append_prefix_instc                 C   sL   t jdkr| jst| j|j tsJ | jj	 | j|j< d S | 
| d S r9  )r   r   rp  r   rl  r   rY   r   r  track_cell_newr  r   rg   rg   rm   	MAKE_CELLM  s   
z#InstructionTranslatorBase.MAKE_CELLc                 C   r(  rp   r  r   rg   rg   rm   COPY_FREE_VARSX  r  z(InstructionTranslatorBase.COPY_FREE_VARSc                 C   r(  rp   r  r   rg   rg   rm   RETURN_GENERATOR[  r  z*InstructionTranslatorBase.RETURN_GENERATORc                 C   r  r0  )r   r   rg   rg   rm   END_FORb  r  z!InstructionTranslatorBase.END_FORc                 C   s(   t | j|j trtd | | d S )Nz)LOAD_FAST_CHECK on uninitialized variable)r   rl  r   rY   r%   r  r   rg   rg   rm   LOAD_FAST_CHECKe  s   z)InstructionTranslatorBase.LOAD_FAST_CHECKc                 C   s6   |j | jvr| t  n| | t | j|j < d S rp   )r   rl  r   rY   r  r   rg   rg   rm   LOAD_FAST_AND_CLEARj  s   
z-InstructionTranslatorBase.LOAD_FAST_AND_CLEARc                 C   s:   |  tj|dd |jd@ r| | d S | | d S )Nr  r<  r   )r   r   r  rE  rh  r  r   rg   rg   rm   LOAD_SUPER_ATTRq  s   
z)InstructionTranslatorBase.LOAD_SUPER_ATTRc                 C   sR   |j dkr| | d S |j dkr| t|  |  d S td|j   d S )N      z!missing CALL_INTRINSIC_1 operand )r   UNARY_POSITIVEr   rU   r   r  r%   r   rg   rg   rm   CALL_INTRINSIC_1x  s
   

z*InstructionTranslatorBase.CALL_INTRINSIC_1c                 C   s   | j d= d S )Nr  )rn  r   rg   rg   rm   END_SEND  r  z"InstructionTranslatorBase.END_SENDc                 C   s    | j  dkrdd | _dS dS )Nr   c                   S      dS )NTrg   rg   rg   rg   rm   rw         z>InstructionTranslatorBase.is_non_empty_graph.<locals>.<lambda>TF)r   count_callsr  r   rg   rg   rm   r    s   
z,InstructionTranslatorBase.is_non_empty_graphc                 C   s.   |d u rg }d t|  gtt| S )Nr   )r,  r-  r.  r   r   rr   )r   additional_stack_framesrg   rg   rm   format_frame_summary  s   z.InstructionTranslatorBase.format_frame_summaryc                 C   s(   t jt| jdd| jt| jddddS )Nr  z	<unknown>r  F)lookup_line)r-  FrameSummaryrW  r  r|   r   rg   rg   rm   r     s   z'InstructionTranslatorBase.frame_summaryc                 C   s,   | j |t|}tt|tj |S rp   )	r   install_global_by_idweakrefrefr)   r3   
make_guardr(   WEAKREF_ALIVE)r   r  r   global_namerg   rg   rm   store_global_weakref_by_id  s
   z4InstructionTranslatorBase.store_global_weakref_by_idc                 C   s
   | j jjS rp   )r   tracing_context	fake_moder   rg   rg   rm   r    r   z#InstructionTranslatorBase.fake_modec                 C   s(   | j  D ]\}}||u r|  S qd S rp   )rl  re  )r   tensor_variabler~  r   rg   rg   rm   find_symbolic_locals_name  s
   z3InstructionTranslatorBase.find_symbolic_locals_namecheck_fnc                 c   s*    | j }|| _ z	dV  W || _ dS || _ w )zx
        Strict mode is enabled on a per-VariableTracker level depending on the return value of check_fn(node).
        N)rw  )r   r"  priorrg   rg   rm   strict_translation_mode  s   z1InstructionTranslatorBase.strict_translation_modec                 C   s   | j | jj| j| jS rp   )speculation_logr   r  r  r|   r}   r   rg   rg   rm   r     s   z#InstructionTranslatorBase.speculater   r  r  r  r&  r  rq  r%  c                    s<  t    || _|| _|| _|| _g | _d| _td| _	g | _
d| _d| _d | _d| _g | _g | _|| _t| j| _|| _|| _|| _|| _|	| _tjrTt|	|d| _nd | _i | _|
| _d | _d | _ t!j"dkrddl#m$}m%}m&}m'} |	j(||B |B |B @ r| )t*d  || _+d	| _,d gt-|	j. | _/t01|	j2| d S )
Nr   r  r  T)r  r&  )r   
   r   )CO_ASYNC_GENERATORCO_COROUTINECO_GENERATORCO_ITERABLE_COROUTINEF)3rc  rd  r%  r   rl  rm  rn  r}   r   ro  r?  r!  r|   rD  rp  rq  ru  r   r   r!  r  r  r  r&  r  r   replay_record_enabledr-   rv  nn_module_stackrq  rt  rw  r   r   resume_executionr'  r(  r)  r*  co_flagsr   rE   rr  rs  r   r  r  r  	lazycacher  )r   r   r   r  r  r  r&  rl  rm  r  rq  rr  r%  r'  r(  r)  r*  ri  rg   rm   rd    sX   



z"InstructionTranslatorBase.__init__rp   )r   r   r   r+   r   r   r   rB   r   r   r   r   r   rF   r   rz   r   r-   r   rx  r   r  r  rh   r  r  r  r  r  r   r   r  propertyr   r  r  r  r   r  r   r   r  r  r  r  STORE_DEREFr  r  r   r   r  r  r  r	  r  r  r  r  r   JUMP_FORWARDJUMP_ABSOLUTEr  r   not_POP_JUMP_IF_FALSEr   POP_JUMP_IF_TRUEJUMP_IF_FALSE_OR_POPJUMP_IF_TRUE_OR_POPr$  r&  r'  r+  r,  r.  r/  r1  r3  r6  r8  r?  r   r  rM  rN  rT  rU  rV  rW  rY  rR  r   r[  rf  rj  rk  rh  rn  r  ro  rs  rp  rv  r   r   r  r  r  r  r  r  rS   r  r  BUILD_TUPLE_UNPACK_WITH_CALLr  r  BUILD_MAP_UNPACK_WITH_CALLr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  DICT_UPDATEr  r  r  r  r  r   r   posr  negUNARY_NEGATIVEr  invertUNARY_INVERTpowBINARY_POWERmulBINARY_MULTIPLYmatmulBINARY_MATRIX_MULTIPLYfloordivBINARY_FLOOR_DIVIDEtruedivBINARY_TRUE_DIVIDEr  BINARY_MODULOBINARY_REMAINDERr+  
BINARY_ADDsubBINARY_SUBTRACTgetitemBINARY_SUBSCRlshiftBINARY_LSHIFTrshiftBINARY_RSHIFTand_
BINARY_ANDor_	BINARY_ORxor
BINARY_XORipowINPLACE_POWERimulINPLACE_MULTIPLYimatmulINPLACE_MATRIX_MULTIPLY	ifloordivINPLACE_FLOOR_DIVIDEitruedivINPLACE_TRUE_DIVIDEimodINPLACE_MODULOINPLACE_REMAINDERiaddINPLACE_ADDisubINPLACE_SUBTRACTilshiftINPLACE_LSHIFTirshiftINPLACE_RSHIFTiandINPLACE_ANDixorINPLACE_XORior
INPLACE_ORr  r  r   r;  r  r   r  r  r  JUMP_BACKWARD_NO_INTERRUPTPOP_JUMP_FORWARD_IF_TRUEPOP_JUMP_BACKWARD_IF_TRUEPOP_JUMP_FORWARD_IF_FALSEPOP_JUMP_BACKWARD_IF_FALSEr  r  r*  r  r  r  r  r  r  r	  r
  r  r  r  r  r   r  r  r!  
contextlibcontextmanagerr$  r   r  CodeTyper   rd  rk  rg   rg   ri  rm   r     s  
 




+
)

	/
		 `+

(
	

	&
	































'
	 





	
)	metaclassc                       s   e Zd ZU ee ed< ed ddZej	dd Z
dee dee def fd	d
Zdd ZdefddZ fddZdd Zdd Zdd Zdd Zdd Zdd Zdd Z  ZS )!r  mutated_closure_cell_contentsr   c                   C   s   t jS rp   )tls
current_txrg   rg   rg   rm   r  	  s   z InstructionTranslator.current_txc                 c   s0    t tdd }| t_z	d V  W |t_d S |t_w )Nr  )rW  r  r  )r   r#  rg   rg   rm   set_current_tx	  s   z$InstructionTranslator.set_current_txr   r%  c                    s  t  tjd|j d|d  d|d   t jt||| |	|
|||d	||||i i ||	d|d |   t| j	j
 |  f || _|	| _|| _| jrU| jsUJ d	t|d
 fdd|  D }| t|  fddD | _g | _|	rtj| j| _t | _| jd D ]}|v rt| | j|< qW d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nztorchdynamo start tracing r]  r  r   r  )local_scoper  r  r   )r   r   r  r  r  r&  rl  rm  r  rq  rr  r%  z4Export without one graph - something has gone wrong.co_varnamesc                    s   g | ]}| vr|qS rg   rg   r  )varsrg   rm   r`  _	      z2InstructionTranslator.__init__.<locals>.<listcomp>c              	      s6   i | ]}|v r|t jj| t|| v d dqS ))cell_or_freevarr  )r   LazyVariableTrackerr   r4   r  )cells_and_freevars_setr  rg   rm   rn   c	  s    z2InstructionTranslator.__init__.<locals>.<dictcomp>r  )r   r   INFOr  rc  rd  r+   _throw_if_in_functorchr   r   r  r  	one_graphrq  r  r   r  r  r  rl  debug_localsr   r  realize_allr  _freevars_idsr&  id)r   r   r  r  r  r  r&  compiler_fnr  rq  export_constraintsr  frame_stater%  cells_and_freevarsrf  ri  )r  r  r  rm   rd  #	  sr   
	PzInstructionTranslator.__init__c                 C   s   t jd}t| jjd| jj}t jj	 }t jjj
jt jjj
jt jjj
jf}|d urI| |v rK||urM| j }d| d}t| d S d S d S d S )Neagerr  ztorch.func.z2(fn) requires the function to be inlined by dynamo)r   _dynamolookup_backendr   getattr_staticr   r  _C
_functorchpeek_interpreter_stackTransformTypeVmapGradJvpr~  rf  lowerr%   )r   r  r  ciforbidden_keysrf  r   rg   rg   rm   r  y	  s   


z,InstructionTranslator._throw_if_in_functorchr  c                 C   s0   t |tr| j|j S t |tr| j|j S trp   )r   r4   r  
local_namer2   r  r  r  )r   r  rg   rg   rm   get_example_value	  s
   

z'InstructionTranslator.get_example_valuec                    s   t    d S rp   )rc  r  r   ri  rg   rm   r  	  r  zInstructionTranslator.runc                 C   sB   z|j }W n
 ty   Y dS w t|| j|krdS | j| S )z@Match a cell in this method to one in a function we are inliningN)cell_contents
ValueErrorr  r  r\  rl  )r   rf  cellr   rg   rg   rm   match_nested_cell	  s   

z'InstructionTranslator.match_nested_cellc                 C   sX   t jdkr| jj}|r| jr|j| jd jurdS tdd | jD o+| j o+| jdkS )Nr9  r  Fc                 s       | ]}|  V  qd S rp   )r   rj   rO  rg   rg   rm   r  	  r  zEInstructionTranslator.should_compile_partial_graph.<locals>.<genexpr>r   )	r   r   ro  rG  r?  r   r  r  r!  )r   r   rg   rg   rm   r   	  s   
z2InstructionTranslator.should_compile_partial_graphc                    s  d _ |jdkrtdgS |jdkrtd|jdgS tj|tfddj D }tfdd|D }tfdd|D }t	j
dk rTt|d	ksTJ d
t g }tjD ]<\}}tt|rtt|}|jd u rudnt|j}	|||	f |   ttj| d   td q_g }
|D ]3}ttj|  }rtt|}|jd u rdnt|j}	|
||	f |   td|d qg }t	j
dkr'tjD ]\}}tt|r|| qd	}ttjD ],\}}tt|r&td|d | D ]} td|d q    |d7 }qtjt| }|t| }td|j }t j!j"|jtdd j#D |||tdd j#D t|t|
t|}t$%j!&ddd  }|d urt'(|t$%|d< |j)rj*+||  ,||d| nj*+|t-.|j/|   0|d|   fdd|D   t1|d  td  2 S )Nry  rz  r<  c                 3   s(    | ]}| v r|  vr|V  qd S rp   )r  r  )r  r   rg   rm   r  	  s    z>InstructionTranslator.create_call_resume_at.<locals>.<genexpr>c                 3   s&    | ]}t t j| s|V  qd S rp   rF  __instancecheck__rY   rl  r  r   rg   rm   r  	      
c                 3   s&    | ]}t t j| r|V  qd S rp   r  r  r   rg   rm   r  	  r  r=  r   z&variables should not be NULL in < 3.12rg   r   r  r  r9  r  r  )rE  __resume_at_c                 s   s    | ]}|j jV  qd S rp   )r   r{  r  rg   rg   rm   r  	
  r  c                 s   r  rp   )r   r  rg   rg   rm   r  
  r  orig_graphmodulec                   S   r  rp   rg   rg   rg   rg   rm   rw   
  r  z=InstructionTranslator.create_call_resume_at.<locals>.<lambda>Tc                    r[  rg   )create_loadr  )rM  rg   rm   r`  (
  ra  z?InstructionTranslator.create_call_resume_at.<locals>.<listcomp>F)3r}   r   r   r   r   r   r   rl  r  r   r   r   r"   	enumeratern  rF  r  rG   r   r   r   r@  rA  r   append_outputrY   rr   rL  pop_nullr    r{  r.   lookupr  r|   r?  r!   get_contextr\  r  r  r  r   install_global_unsafemake_function_with_closurer  FunctionTyper  load_function_namer   rC  )r   r   all_argnamesrd  argnames_nullstack_ctx_varsr^  varr  r   argnames_ctx_varsrf  
null_idxesnull_cntj	stack_lenr   new_codeorig_graphmodule_mayberg   )rM  r  r   rm   r   	  s   









z+InstructionTranslator.create_call_resume_atc                 C   s6   | j  D ]}t|trt| tjjr dS qdS )NTF)	rl  r  r   ra   rO  r   r   nnModule)r   rl   rg   rg   rm   $symbolic_locals_contain_module_class-
  s   z:InstructionTranslator.symbolic_locals_contain_module_classc                 C   s   | j  dkr| js|  s| jstdd | _t t	j
d| jj d|j d td|j | j j| td|  gdd	d
 |jdkrJtdntd|jd}| j |g t)Nr   z#because no content in function callztorchdynamo done tracing r  r  z%s triggered compilereturn_valueF)r  r   ry  rz  r<  )r   r  rs  r  rq  r   r   r}   r   r   r  r  r  r   r   r   r   r*   r   r   r   r   r   )r   r   return_instrg   rg   rm   _return5
  s4   

zInstructionTranslator._returnc                 C   r(  rp   r  r   rg   rg   rm   ry  Q
  r  z"InstructionTranslator.RETURN_VALUEc                 C   r(  rp   r  r   rg   rg   rm   rz  T
  r  z"InstructionTranslator.RETURN_CONST)r   r  )r   r   r   r   r   r   staticmethodr  r|  r}  r  r   r   r   rd  r  r5   r  r  r  r   r   r  r  ry  rz  rk  rg   rg   ri  rm   r  	  s.   
 
Vr  r9  c                 C   s<   g | ]\}}t td |v r|dd nd|dd  qS )INPLACEr   NBINARY_)rW  r  )rj   r   rv   rg   rg   rm   r`  Y
  s    $r`  c                       s  e Zd ZU dZee ed< edd Ze	dd Z
e	dedee fd	d
Zdedejdeeef deeef deeef def fddZedd Zdd Zdd Z fddZdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Z  fd)d*Z! fd+d,Z"  Z#S )-r  z Trace and inline a called methodsymbolic_resultc                 C   sH   t tdtd i | ||||W  d    S 1 sw   Y  d S )Nr%   r  )r   r  r8   inline_call_)rZ  r  funcru   r  rg   rg   rm   r  g
  s   $z)InliningInstructionTranslator.inline_callc              
   C   s   |   rtd tj| dd}|jrOddlm} tt| dd dr.| j	j
|fv r.tdd	S t| dr7| j	jnd
}td| d|   d|   d|j d	 t| trht|  ddrhtd|    d S |S )Nzinline with __self__T)is_inlined_callr   )!produce_trampoline_autograd_applyr   _originFz"allowlist in dynamo known functionr   z'inline in skipfiles: z | r]  z, '_torchdynamo_disablez.call torch._dynamo.disable() wrapped function )has_selfr%   r   check_verboseskippedtorch._dynamo.variables.miscr  r  rW  r   r  
SkipResultr   get_nameget_filenamer   r   rO   r   r  get_function)r  r  r  fn_qualnamerg   rg   rm   check_inlineablel
  s,   &
z.InliningInstructionTranslator.check_inlineabler  ru   c                    s  t |tr	td t |ttfsJ t|}|jdu sJ z|| ||\}}W n. t	yW } z"t
djt|d|  d|  d| j dd |D |d	d }~ww t| | D ]}t |tsptd
|  qb|   jdv r|rt |d tjtjfstd j  d}	tjjjdrdt   }	t j!dkr| j"| j#| j$j%j&d fdd}
t'(dt)|
 t*(d |	|j+ |rt |d t,r| j-.|d j/}t |tj0j1rt23|t45|j6j7d< t8 rt9|  || j:||}n
t|  || j:||}t;< }| j=r|>| j=}z| |?  W d    n	1 s0w   Y  W nU t@jAyY } zd  d| }| jBC|jB t*(|  d }~w t@jDyx } zd  d| }t*(| tE||d }~w tFy } zt*(d   d }~ww |jGd usJ |H| | |jI| jIu r| j:J|j: |  jK|jKO  _Kt*(d  t8 rt |t9sJ |jGL d u sJ tM|jNtO dS |jGS )Nz#inline with functions in skip filesFz;{reason}.
  func = {func}, args = {args}, kwargs = {kwargs}r  z' r   c                 S   s   g | ]}|  qS rg   )python_type)rj   rE  rg   rg   rm   r`  
  r  z>InliningInstructionTranslator.inline_call_.<locals>.<listcomp>)r   r  ru   r  zunconverted arg )r{  __setattr__r   zinline r   bytecoder   r9  )r|   c                     s&   t  } d j d d|  S )NzTRACE inlined call z from r   )r:   r  r  )r  r  cur_instheaderparent_coderg   rm   get_trace_call_log_str
  s   zJInliningInstructionTranslator.inline_call_.<locals>.get_trace_call_log_strr  zINLINING %s%s, %sr  z!Observed exception DURING INLING z : zSKIPPED INLINING z: zFAILED INLINING %szDONE INLINING %sr  )Pr   rN   r%   rO   rM   r  r  r  	bind_args	TypeErrorr#   r  r   r  r  get_coder  r  r  r  rB   r  r   CustomizedDictVariablerb   r   _logging	_internal	log_stateis_artifact_enabledrH  Bytecoder   r   ro  r  r  	positionsr|   trace_call_logr   r=   r   r   r\   r   r  r  r   GraphModuler  r  r!   r  forward__code__r   &InliningGeneratorInstructionTranslatorrm  r|  nullcontextrw  r$  r  r   r  ru  r  r   r&   r  r  export_freevarsr  r  rs  r   rR   generated_itemsr@   )r  r  ru   r  r  
sub_localsclosure_cellsr  rl   r  r  moduletracer
strict_ctxr   rg   r  rm   r  
  s   

"









z*InliningInstructionTranslator.inline_call_r  r  rl  rm  r  funcvarc           
         s   |  }|d }t|ts|j}t }	t|	 t j|ji |||||	 fddt	 D  |j
|jd |jd || _d | _|| _|j | _d S )N__builtins__c                    s   i | ]}|t  |qS rg   )rW  r  r  rg   rm   rn     r  z:InliningInstructionTranslator.__init__.<locals>.<dictcomp>r   )r   r  r  r  rl  rm  r   r&  r  rq  rr  r%  )get_globalsr   r  __dict__r   r   rc  rd  r   r   rq  rr  r%  r  r  r  r,  rF  )
r   r  r  rl  rm  r  r  r  r  r   ri  r  rm   rd    s0   	
z&InliningInstructionTranslator.__init__c                 C   s   | j jS rp   )r  r  r   rg   rg   rm   r  %  s   z'InliningInstructionTranslator.fake_modec                 C   s   t | j S rp   )r   r  r  r   r   rg   rg   rm   r  )  r   z)InliningInstructionTranslator.run_ctx_mgrc                 C   s   |j | jv r2| j|j  }|  }t|tr(| j std || jjj	|j
< d S | jj|| d S | j	|j }t|tjrO| jj| j	|j  |   d S |d urk|j
 | jjjvrk| jjj|j
  tjtd d S )NzSHigherOrderOperator: Mutating a variable not in the current scope (ClosureVariable)z#write to __closure__ while inlining)r   r  r   r   rV   r   is_root_tracerr%   root_txrl  rf  r  
store_cellr\  r   NewCellVariabler  r  r+  r   UnspecializeRestartAnalysis)r   r   r  r  
maybe_cellrg   rg   rm   r1  ,  s6   


	z)InliningInstructionTranslator.STORE_DEREFc                    s   |j | jv r*| j|j  }t|tr| | jjj|j  d S | | jj	
| d S | j|j d }t|tjrD| | jj	
| d S t | d S rp   )r   r  r   rV   r   r   r  rl  rf  r  	load_cellr\  r   r	  rc  r  )r   r   r  maybe_sym_localri  rg   rm   r  S  s   
z(InliningInstructionTranslator.LOAD_DEREFc                 C   sJ   |j |  v s	J |j | jv r| | j|j   d S | t|j d d S r  )r   r  r  r   rX   r   rg   rg   rm   r  a  s   z*InliningInstructionTranslator.LOAD_CLOSUREc                 C   s   t |jstd d S d S )NzOHigherOrderOperator: Mutating a variable not in the current scope (replace_all))r?   r  r%   )r   oldvarrg   rg   rm   check_replace_is_safeh  s
   
z3InliningInstructionTranslator.check_replace_is_safec                 C   r  )NFrg   r   rg   rg   rm   r   n  r  z:InliningInstructionTranslator.should_compile_partial_graphc                 C   s   t d d S )Nzcant resume while inliningrT  ry  rg   rg   rm   r   q  r  z3InliningInstructionTranslator.create_call_resume_atc                 C   s   |   | _d | _trp   )r   r  r}   r   r   rg   rg   rm   ry  t  s   
z*InliningInstructionTranslator.RETURN_VALUEc                 C   s   |  || _d | _trp   )r  r  r}   r   r   rg   rg   rm   rz  y  s   z*InliningInstructionTranslator.RETURN_CONSTc           	      C   s   d| j v r-| j d }| |}d|v rtjjj| }nt|}t| ||}t	||}n| j
d| j }t|}| j }t| ||}t||}|||fS )Nr   r  ___unnamed_scope)r  r  r   r  r  r  r  r  rC   r0   r   r  r2   r1   )	r   rf  r  module_sourcefglobals_valuefglobals_vtglobal_sourceglobals_nameglobals_sourcerg   rg   rm   get_globals_source_and_value~  s    





z:InliningInstructionTranslator.get_globals_source_and_valuec                    s   | j j| ju rt | d S tjdkr|jd r| | |j	}| 
|\}}}| j j||r>| | j j|| d S z| j| }W n tyS   | | Y S w | t| || d S r  )r   r  r  rc  r   r   r   rE  r  r   r  r  has_pending_mutation_of_attrr   	load_attrr  r  rC   )r   r   rf  rv   r  r  r   ri  rg   rm   r     s   


z)InliningInstructionTranslator.LOAD_GLOBALc                    st   | j | jj u rt | d S |  }t|trtd |j}| 	|\}}}| j
j||}| j
j||| d S r  )r  r  rc  r  r   r   r`   r%   r   r  r   r  track_object_existingrt  )r   r   r   rf  r  r  rv   ri  rg   rm   r    s   
z*InliningInstructionTranslator.STORE_GLOBAL)$r   r   r   r   r   r_   r   classmethodr  r  r  rB   r   r  r   r  r~  r   r   rL   rd  r0  r  r  r1  r  r  r  r   r   ry  rz  r  r   r  rk  rg   rg   ri  rm   r  b
  sP   
 

v


"
'r  c                       sP   e Zd ZU ee ed<  fddZdefddZdd Z	d	d
 Z
dd Z  ZS )r  r  c                    s   t  j|i | g | _d S rp   )rc  rd  r  )r   ru   r  ri  rg   rm   rd    s   
z/InliningGeneratorInstructionTranslator.__init__r   c                 C   s$   | j |   | td  d S rp   )r  r   r   r   rF   r   r   rg   rg   rm   YIELD_VALUE  s   z2InliningGeneratorInstructionTranslator.YIELD_VALUEc                 C   sB   | j d }t|ts|   tt| |gi }| | d S d S rL  )rn  r   rR   r   rE   rX  rh   r   )r   r   r5  resrg   rg   rm   GET_YIELD_FROM_ITER  s   

z:InliningGeneratorInstructionTranslator.GET_YIELD_FROM_ITERc              
   C   s   t | jdks	J |  }| jd }t|tr|jd u s td z|| }W n# tt	j
fyJ } z|   | t|j W Y d }~d S d }~ww | | | | t| jtr`| jdksbJ |  jd8  _d S )Nr  r  Unreachable sub-generator coder   r   )r   rn  r   r   rF   r   r%   r;  r<  r   r=  r   r   r  r}   r   r   r   r  r5  exrg   rg   rm   
YIELD_FROM  s$   
 


z1InliningGeneratorInstructionTranslator.YIELD_FROMc              
   C   s   t | jdks	J |  }| jd }t|ts$t|trpt|jtjj	rpt|t
rj|jd u rjz|| }W n- ttjfyb } ztjdk rI|   | t
|j | | W Y d }~d S d }~ww | | d S td d S tdt|  d S )Nr  r  r=  r  zSEND )r   rn  r   r   rR   rb   r   r  r  IteratorrF   r;  r<  r   r=  r   r   r   r   r   r%   rA   r   rg   rg   rm   SEND  s*   


z+InliningGeneratorInstructionTranslator.SEND)r   r   r   r   rB   r   rd  r   r  r  r"  r$  rk  rg   rg   ri  rm   r    s   
 r  )r  collections.abcr|  rF  r   rH  r   r  r   r  r  r   r   r   r   	threadingr-  r  typingr  r   r   r   r   r   r   r   r	   r
   unittest.mockr   r   torch._loggingtorch._guardsr   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&   funcname_cacher'   guardsr(   r)   output_graphr*   r+   replay_recordr,   r-   r-  r.   r/   r  r0   r1   r2   r3   r4   r5   r6   r7   utilsr8   r9   r:   r;   r<   r=   r>   variables.baser?   r@   rA   rB   variables.builderrC   rD   variables.builtinrE   variables.constantrF   variables.ctx_managerrG   rH   rI   variables.dictsrJ   rK   variables.functionsrL   rM   rN   rO   rP   variables.listsrQ   rR   rS   rT   rU   variables.miscrV   rW   rX   rY   rZ   r[   variables.nn_moduler\   variables.tensorr]   r^   r_   variables.user_definedr`   ra   rb   	getLoggerr   r   r  getArtifactLoggerr'  r  r  r  localr  re  ro   r   r   containsrh   rq   r4  ry   	dataclassrz   r   	lru_cacher   r   r  r   r  r   r   r   r  r*  rR  rF  rS  r   r  r   _nb_opsr  r  r  rg   rg   rg   rm   <module>   s   
,, $	 
+

F 3 
             !  G	  V