a
    d                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZ d dlmZmZmZmZmZmZmZmZ d dlmZ d dlZd dlmZ ddlmZmZm Z mZ!m"Z"m#Z#m$Z$ ddlm%Z%m&Z&m'Z' dd	l(m)Z)m*Z* dd
l+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3 ddl m4Z4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z;m<Z< ddl=m>Z>m?Z? ddl@mAZAmBZB ddlCmDZDmEZEmFZFmGZGmHZHmIZI ddlJmKZKmLZLmMZMmNZN ddlOmPZPmQZQmRZR ddlSmTZTmUZU ddlVmWZW ddlXmYZYmZZZ ddl[m\Z\ ddl]m^Z^m_Z_m`Z`maZa ddlbmcZcmdZdmeZemfZfmgZg ddlhmiZimjZjmkZkmlZlmmZmmnZnmoZo ddlpmqZq ddlrmsZsmtZtmuZumvZv ddlwmxZx ddlymzZzm{Z{ e|e}Z~eddd  ZejG d!d" d"ZG d#d$ d$eZejd%ef d&d'd(Zd)ejegef ed*d+d,Zejegef ed-d.d/Zd0Zd1d2 Zd3d4 Zd5d6 ZG d7d) d)ee ZG d8d9 d9eZG d:d; d;eZG d<d= d=eZdS )>    N)Sized)AnyCallableDictList
NamedTupleOptionalSetTuple)patch)Checkpointable   )allowed_functionsconfigexcloggingside_effects	skipfiles	variables)
is_allowedis_builtin_callableis_builtin_constant)JUMP_OPNAMESlivevars_analysis)cleaned_instructionscreate_instructioncreate_jump_absoluteInstructionis_generator	unique_id)	PyCodegen)BackendCompilerFailedunimplementedUnsupported)GuardBuilder)GraphCompileReasonOutputGraphOutputGraphState)DummyModuleExecutionRecorder)ContinueExecutionCacheReenterWith)
AttrSourceGetItemSourceGlobalSourceGlobalWeakRefSourceLocalInputSourceLocalSource)countersgraph_break_dup_warning_checkeristypeproxy_args_kwargs)MutableLocaltypestrVariableTracker)VariableBuilderwrap_fx_proxy)BuiltinVariable)ConstantVariableEnumVariable)ConstDictVariable)BaseUserFunctionVariableNestedUserFunctionVariableUserFunctionVariableUserMethodVariable)BaseListVariableListIteratorVariableListVariableSliceVariableTupleVariable)ClosureVariableContextWrappingVariableGetAttrVariableGradModeVariablePythonModuleVariableUnknownVariableWithExitFunctionVariable)NNModuleVariable)supported_const_comparison_opssupported_tensor_comparison_opsSymNodeVariableTensorVariable)TorchVariable)UserDefinedObjectVariableUserDefinedVariablec                   C   s
   t tS N)torchdynamo_loggingZget_step_loggerlog rZ   rZ   g/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_dynamo/symbolic_convert.py_step_logger`   s    r\   c                   @   sJ   e Zd ZU eed< dZee ed< dZe	ed< dd Z
dd Zd	d
 ZdS )BlockStackEntrytargetNstack_indexwith_contextc                 C   s
   | j d uS rW   )r`   selfrZ   rZ   r[   can_restorek   s    zBlockStackEntry.can_restorec                 C   s>   | j d usJ | jr0| jjr0t| j t| jjS t| j S d S rW   )r_   r`   Ztarget_valuesr+   tuplera   rZ   rZ   r[   	resume_fnn   s    zBlockStackEntry.resume_fnc                 C   s   | j |S rW   )r`   exit)rb   ZtxrZ   rZ   r[   rf   u   s    zBlockStackEntry.exit)__name__
__module____qualname__r   __annotations__r_   r   intr`   rI   rc   re   rf   rZ   rZ   rZ   r[   r]   e   s   
r]   c                   @   sz   e Zd ZU eed< eeef ed< ee ed< ee	 ed< e
e ed< eed< e
e ed< eed< d e
e d	d
dZdS )InstructionTranslatorGraphStateoutputsymbolic_localsstackblock_stackinstruction_pointercurrent_instructionnext_instructionlineno)otherreturnc                 C   sh   | j D ]\}|dkr.| jj|j| dd  S t| |}t||}||kr| d| d|   S qd S )Nrm   .)prefixz mismatch:  != )_fieldsrm   diffgetattr)rb   ru   ksvovrZ   rZ   r[   r{      s    


z$InstructionTranslatorGraphState.diffN)rg   rh   ri   r'   rj   r   strr8   r   r]   r   rk   r   r{   rZ   rZ   rZ   r[   rl   y   s   
rl   .)fnc                    s<   t t| jt|  t| dtd fdd}|S )NInstructionTranslatorBaserb   instc                    s   |   | | i  d S rW   )pushcall_functionpopnr   Zfn_varnargsrZ   r[   impl   s    zstack_op.<locals>.impl)leninspect	signature
parametersr;   	functoolswrapsr   )r   r   rZ   r   r[   stack_op   s
    r   r   )rb   truth_fnr   c                 C   s6  |t jus|rdS t| jts"J | j}| j| }tjdk rV|jdksP|j	dkrddS n|jdkrddS |d7 }|t
| jkr~dS | j| }d}|jdkrt|j	tsdS | | d}|d7 }|t
| jkrdS | j| }|jd	krdS |d7 }|t
| jkrdS | j| }|jd
krdS |s2| td dS )NF)   	   LOAD_GLOBALAssertionErrorLOAD_ASSERTION_ERRORr   
LOAD_CONSTTCALL_FUNCTIONRAISE_VARARGSzassertion error)operatortruth
isinstancerq   rk   instructionssysversion_infoopnameargvalr   r   r   r   r<   )rb   r   r   Zcurrent_instruction_pointerr   Zhas_error_msgrZ   rZ   r[   &_detect_and_normalize_assert_statement   sF    







r   )r   r   c                    s   dt d fdd}|S )Nr   r   c                    s"  |   }| jj|j tjrt|  r|   }| jj|j | rdt|	 rd| 
| d S | jjdtjgt||fi R   | 
| d S | rĈ|	 r o| | | 
| nZt|tr|  r|  rd}t| t|| | td | jj| tdt| |  gd |    | | j} oV| | | |j}| jt |j!|d dg| |  nt|t"r|r o| | | 
| n^t|t#r|$| d}t|t%r`| & }|'| g i }	t|	t(rLt|	j)trL| jj|	j |	j)r^ o>| | | 
| n| *| t+d	 n$d
r ox| | | 
| nt|ts|,| rΈt-|.| r o| | | 
| nPt|t/r|0| j}
|
r o| | | 
| nt+dt|  d S )Nr   ASkipping frame because there is a graph break in a for/while loopzgeneric_jump triggered compilezgeneric_jump reasonr   )r^   __bool__z@generic_jump on UserDefined with __bool__ returning non-constantT)1poprm   guardsupdater   Z rewrite_assert_with_torch_assertr   is_python_constantboolas_python_constantjumpZcreate_proxytorchZ_assertr5   r   r   rS   should_compile_partial_graphhas_backedgerY   debugr   	SkipFramecompile_subgraphr%   r7   frame_summarycreate_call_resume_atrs   r^   add_output_instructionsr   r   rO   rU   Zvar_getattrrB   copy_graphstater   r<   valuerestore_graphstater"   has_unpack_var_sequencer   unpack_var_sequencerR   Zevaluate_expr)rb   r   r   	error_msgmsgZif_nextZif_jumpxstateresultZeval_resultr   r   rZ   r[   inner   s    










zgeneric_jump.<locals>.inner)r   )r   r   r   rZ   r   r[   generic_jump   s    er   Fc                    s    fdd}|S )Nc                    s$   t  dtd fdd}|S )Nr   r   c              
      s  |   }d }z | |W S  ty } z|  rT|  rTd}t| t|||  s^ tjddd |  gt	t
|j }dt|}|d j|d jf}tjrtst|rtd| d|  |  |d	 t|j|}W Y d }~n
d }~0 0 | | | jj| |d
 | t |j!|j"  t#D ]}	| $t%  qB| &| j'}
g }t(| j)dkrt*| j)d j+t,r| j)d j+}t-| }|.||
d \}}| j/| | j/|g | j/| | j/|
 d S )Nr   z,break_graph_if_unsupported triggered compileTexc_info zGraph break: z from user code at graph_breakr   r   r   )0r   r#   r   r   rY   r   r   r   r   listreversed
real_stackjoin	tracebackformat_listfilenamert   r   Zprint_graph_breaksexplainr3   addwarningremove_from_statsadd_to_statsr%   r   r   rm   r   r   disstack_effectopcodeargranger   rM   r   rs   r   rp   r   r`   rK   r    Zreconstructr   )rb   r   r   r   Zexcpr   Z
user_stackZuser_stack_formattedZ	frame_loc_Zresume_call_instscleanupZctx_variablecgZsetup_finally)inner_fnr   rZ   r[   wrapperQ  s`    

"
z>break_graph_if_unsupported.<locals>.decorator.<locals>.wrapper)r   r   r   )r   r   r   )r   r[   	decoratorP  s    Az-break_graph_if_unsupported.<locals>.decoratorrZ   )r   r   rZ   r   r[   break_graph_if_unsupportedO  s    Er   c                 C   s   | d u S rW   rZ   r   rZ   rZ   r[   is_none  s    r   c                 C   s   | d uS rW   rZ   r   rZ   rZ   r[   is_not_none  s    r   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 ed< e
ed	< ee ed
< e	eeef  ed< eeedef eedf eeef f  ed< dd Zdd Zdd Zeee eeef dddZeedddZeedddZdd Zdd Zd d! Ze	e d"d#d$Zee d%d&d'Zed(d)d*Ze
ee d+d,d-Zd.d/ Zd0d1 Z d2d3 Z!d4d5 Z"e!Z#d6d7 Z$d8d9 Z%d:d; Z&d<d= Z'd>d? Z(d@dA Z)dBdC Z*dDdE Z+dFdG Z,dHdI Z-dJdK Z.dLdM Z/e/Z0e/Z1e2e3j4dNZ5e2e3j6dNZ7e2e3j4dOZ8e2e3j6dOZ9dPdQ Z:dRdS Z;dTdU Z<dVdW Z=dXdY Z>dZd[ Z?d\d] Z@d^d_ ZAd`da ZBdbdc ZCddde ZDdfdg ZEeFdhdidjdk ZGeFdhdidldm ZHeFdhdidndo ZIdpdq ZJdrds ZKdtdu ZLdvdw ZMdxdy ZNeOd(dzd{ZPeFd|did}d~ ZQdd ZRdd ZSdd ZTeUfddZVdd ZWeWZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd Zrese3jtZuese3jvZwese3j4Zxese3jyZzese3j{Z|ese3j}Z~ese3jZese3jZese3jZese3jZese3jZese3jZese3jZeFdhdiese3jZese3jZese3jZese3jZese3jZese3jZese3jZese3jZese3jZese3jZese3jZese3jZese3jZese3jZese3jZese3jZese3jZese3jZese3jZese3jZdd Zdd Zdd ZddĄ Ze/Ze/Ze2e3j6dNZe2e3j6dNZe2e3j4dNZe2e3j4dNZe2edNZe2edNZe2edNZe2edNZddƄ Zed(ddȄZedɜdd˄Zdd̈́ ZdddЄZdd҄ ZddԄ Zeddք Zdd؄ Zeee eeef eeef eeef eeef eeef eeef ejeOdٜ
 fddۄZЇ  ZS )r   rm   rn   symbolic_globalsro   rq   rr   rs   rp   rt   mutated_closure_cell_contents
checkpoint.random_callsc                 C   sN   | j j}| jd usJ | j| jd  D ]"}|jtv r&|j}||k r& dS q&dS )NTF)rr   offsetrq   r   r   r   r   )rb   Z
cur_offsetr   Zjump_offsetrZ   rZ   r[   r     s    
z&InstructionTranslatorBase.has_backedgec                 C   s6   t | ds0t| jd pg t| jd p(g  | _| jS )N_cell_and_freevarsco_cellvarsco_freevars)hasattrrd   code_optionsr   ra   rZ   rZ   r[   cell_and_freevars  s    
z+InstructionTranslatorBase.cell_and_freevarsc                    sP   t | j| j  t|  B  t fdd| j D | _| j	j
|  d S )Nc                    s    g | ]\}}| v r||fqS rZ   rZ   ).0r}   vreadsrZ   r[   
<listcomp>      z?InstructionTranslatorBase.prune_dead_locals.<locals>.<listcomp>)r   r   rr   setr   collectionsOrderedDictrn   itemsrm   r   Zprune_dead_object_newra   rZ   r   r[   prune_dead_locals  s    z+InstructionTranslatorBase.prune_dead_locals)r   argskwargsc                 C   sd   t |tsJ t |tsJ t |ts*J tdd t|| D sLJ | |	| || d S )Nc                 s   s   | ]}t |tV  qd S rW   )r   r8   r   r   rZ   rZ   r[   	<genexpr>  s   z:InstructionTranslatorBase.call_function.<locals>.<genexpr>)
r   r8   r   dictall	itertoolschainvaluesr   r   )rb   r   r   r   rZ   rZ   r[   r     s    z'InstructionTranslatorBase.call_functionoldvarnewvarc                    s   t dfddt dfddt  | jjj d  fdd| jD | _| j D ] \}}t j| d| j|< qdd S )	Nr   c                    s   | j j u r S | S rW   mutable_localr  )r  r  rZ   r[   repl  s    z?InstructionTranslatorBase.update_locals_and_stack.<locals>.replc                    s    j | jvS rW   )r
  recursively_containsr  )r  rZ   r[   skip  s    z?InstructionTranslatorBase.update_locals_and_stack.<locals>.skipZskip_fnc                    s   g | ]}t j| d qS )r  )r8   applyr   )cacher  r  rZ   r[   r     s   zEInstructionTranslatorBase.update_locals_and_stack.<locals>.<listcomp>)r8   r   rm   r   r  ro   rn   r   )rb   r  r  r}   r   rZ   )r  r  r  r  r  r[   update_locals_and_stack  s    z1InstructionTranslatorBase.update_locals_and_stackc                 C   sV   t |jtjr | jj||}n&t |jtjjs4J |j	tj d}| 
|| |S )Nr	  )r   r
  r   ZMutableSideEffectsrm   Zmutationr   baser6   cloner  )rb   r  r  rZ   rZ   r[   replace_all  s    z%InstructionTranslatorBase.replace_allc                 C   sR   |   }z&t| |||}| jj|j |W S  tyL   | |  Y n0 dS )zF
        A call to some user defined function by inlining it.
        N)r   InliningInstructionTranslatorinline_callrm   r   r   	Exceptionr   )rb   r   r   r   r   r   rZ   rZ   r[   inline_user_function_return  s    
z5InstructionTranslatorBase.inline_user_function_returnc              
   C   s(  t | jtsJ | j| j }|| _|  jd7  _| jt| jk rP| j| j | _nd| _d| _|jr| j|jkr|j| _t	
d| jj d| j  t| jdkr|  r||  f| _t	
d|j d|j d| j  z8t| |jstd|j  t| |j| |jd	kW S  ty&    Y n tyt } z6|j|   |  rR t	j
d
dd W Y d}~nPd}~0  ty } z.t|dg }||   ||_ W Y d}~n
d}~0 0 | jjrJ | jdusJ | j\}}| | | jj | dt!d|  gd | j"t#|g| j  dS )z<Process exactly one instruction, return False we should exitr   NzTRACE starts_line :r   zTRACE  z	missing: RETURN_VALUEzstep triggered compileTr   r   Zstep_unsupported)Zpartial_convertr   )$r   rq   rk   r   rr   r   rs   starts_linert   rY   r   f_codeco_filenamero   r   r   r   r   r   r   r"   r|   r!   r#   r   appendr   empty_checkpointr  rm   Zoutput_instructionsr   r   r%   r   r   )rb   r   r   r   Zcontinue_instr   rZ   rZ   r[   step  sV    "
"

zInstructionTranslatorBase.stepc              
   C   s   zz,| j |  | jd ur,| j js,|  r,qW nJ tyB    Y n8 tyx } z tjrb| j	
 |_ W Y d }~n
d }~0 0 W | j   t| tr| j   n | j   t| tr| j   0 d S rW   )rm   Zpush_txrq   Zshould_exitr!  r!   r  r   replay_record_enabledexec_recorderZ
get_recordZexec_recordZpop_txr   InstructionTranslatorr   )rb   erZ   rZ   r[   run:  s*    



zInstructionTranslatorBase.run)valc                 C   s4   |d u s$t |ts$J dt| | j| d S )Nz"push expects VariableTracker, got )r   r8   r7   ro   r  )rb   r'  rZ   rZ   r[   r   S  s    
zInstructionTranslatorBase.push)valsc                 C   s   |D ]}|  | qd S rW   r   )rb   r(  r'  rZ   rZ   r[   	push_manyY  s    z#InstructionTranslatorBase.push_many)rv   c                 C   s
   | j  S rW   )ro   r   ra   rZ   rZ   r[   r   ]  s    zInstructionTranslatorBase.pop)nrv   c                    s*   |dksJ t t fddt|D S )Nr   c                    s   g | ]}   qS rZ   r   )r   r   ra   rZ   r[   r   b  r   z2InstructionTranslatorBase.popn.<locals>.<listcomp>)r   r   r   )rb   r*  rZ   ra   r[   r   `  s    zInstructionTranslatorBase.popnc                 C   s   |j }|| jv r*tjr*| j|| j|  |drJ|| jvrJ|dd}|| 	 vsZJ || jvrlt
d | | j|  |dr| j| d S )Nrw   Zimplicitzundefined LOAD_FASTZ___stack)r   f_localsr   r"  r#  add_local_var
startswithrn   replacer   r"   r   r   )rb   r   namerZ   rZ   r[   	LOAD_FASTd  s    

z#InstructionTranslatorBase.LOAD_FASTc                 C   sn   |j |  v sJ |j | jv r<tjr<| j|j | j|j   |j | jvrXtd|j   | 	| j|j   d S )Nzundefined LOAD_DEREF )
r   r   r,  r   r"  r#  r-  rn   r"   r   r   rZ   rZ   r[   
LOAD_DEREFt  s    z$InstructionTranslatorBase.LOAD_DEREFc                 C   s   |   | j|j< d S rW   )r   rn   r   r   rZ   rZ   r[   
STORE_FAST~  s    z$InstructionTranslatorBase.STORE_FASTc                 C   s   | j |j= d S rW   )rn   r   r   rZ   rZ   r[   DELETE_FAST  s    z%InstructionTranslatorBase.DELETE_FASTc                 C   s   |  t|jd d S )N)r0  )r   rH   r   r   rZ   rZ   r[   LOAD_CLOSURE  s    z&InstructionTranslatorBase.LOAD_CLOSUREc                 C   s   |  t|jd d S Nr   )r   r<   r   r   rZ   rZ   r[   r     s    z$InstructionTranslatorBase.LOAD_CONSTc                 C   sx   | j j| ju rt|}n\d| jv r:t| | jd |}n:dt| j }|| j jvrf| j || j tt||}|S )Nrg   Z___unnamed_scope_)	rm   root_globals	f_globalsr.   r,   import_sourceidinstall_globalr-   )rb   r0  sourceZmangled_namerZ   rZ   r[   get_global_source  s    

z+InstructionTranslatorBase.get_global_sourcec                 C   s   |j }tjrL|| jv r,| j|| j|  n || jv s:J | j| | jj|< || jv r| j	j
| j|  }| | j	j
|| d S z| j| }W n ty   | | Y S 0 | |}| t| || d S rW   )r   r   r"  r9  r#  Zadd_global_var
f_builtinsbuiltinsr   rm   r   r   load_globalKeyErrorload_builtinr>  r9   )rb   r   r0  variabler   r=  rZ   rZ   r[   r     s     


z%InstructionTranslatorBase.LOAD_GLOBALc                 C   sZ   |   }|j}| |}|| jvr.t | j|< | jj|| j| }| jj||| d S rW   )	r   r   r>  r   objectrm   r   Ztrack_global_existingZstore_global)rb   r   r   r0  r=  rD  rZ   rZ   r[   STORE_GLOBAL  s    


z&InstructionTranslatorBase.STORE_GLOBALc                 C   s   d|v r4t jjj| }|dddddd}nt|}d|dd }| jj}||vsp|| |u spJ |||< | j	| t
|S )z-Create an alias to a module for use in guardsZtorch_package>r   <rw   Z_dot_Z	__import_)r   packageZpackage_importerZ_package_imported_modulesr/  	importlibimport_modulerm   r8  Zupdate_co_namesr.   )rb   module_namer   aliasr9  rZ   rZ   r[   r:    s    
z'InstructionTranslatorBase.import_sourcec                 C   s@   | 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
        rw   r   z2attempted relative import beyond top-level packager   z{}.{})rsplitr   ImportErrorformat)rb   r0  rI  levelbitsr  rZ   rZ   r[   resolve_name  s
    z&InstructionTranslatorBase.resolve_namec                 C   s   | j d}| j d}|durV|durR||jkrRtjd|d|jdtdd |S |durd|jS tjd	tdd | j d
 }d| j vr|dd }|S )z
        Copied from the Cpython implementation of __import__
        https://github.com/python/cpython/blob/5a094f0255eea1db58fb2cf14c200971e64ec36e/Lib/importlib/_bootstrap.py#L1090
        __package____spec__Nz __package__ != __spec__.parent (ry   )r   )
stacklevelzYcan't resolve package from __spec__ or __package__, falling back on __name__ and __path__rg   __path__rw   r   )r9  getparentrY   r   ImportWarning
rpartition)rb   rI  specrZ   rZ   r[   calc_package  s2    

z&InstructionTranslatorBase.calc_packagec           
      C   s"  |  d\}}| }| }|j}tj d| d| d| }|| jv r^| j| }t|}nXt|||| jd}|dkr|  }| 	|||}|s|
dd }	| |	}n
| |}tjr| j|| t|r| t||d n8t|tjtfr| t||d ntdt|  d S )N   r   )fromlistrQ  globalsr   rw   )r=  zIMPORT_NAME )r   r   r   r)   ZLOCAL_MOD_PREFIXr9  r.   
__import__r^  rS  	partitionr:  r   r"  r#  Zadd_local_modr   r   rT   r4   types
ModuleTyper(   rL   r"   r7   )
rb   r   rQ  r`  rL  Zrecorded_namer   r=  pkgZtop_level_module_namerZ   rZ   r[   IMPORT_NAME  s:    



z%InstructionTranslatorBase.IMPORT_NAMEc                 C   s   |  | | | d S rW   )DUP_TOP	LOAD_ATTRr   rZ   rZ   r[   IMPORT_FROM'  s    
z%InstructionTranslatorBase.IMPORT_FROMc                 C   sl   |j | jv sJ | j|j  }t|rLt|s0J | t| t|j | nt|sXJ | t|d d S r6  )	r   r?  callabler   r   r9   r.   r   r<   )rb   r   r'  rZ   rZ   r[   rC  +  s    z&InstructionTranslatorBase.load_builtinc                 C   s   | j t|j | _d S rW   )indexofr;  r^   rq   r   rZ   rZ   r[   r   6  s    zInstructionTranslatorBase.jumpFTc                 C   s   | j t|j d S rW   rp   r  r]   r^   r   rZ   rZ   r[   
SETUP_LOOPA  s    z$InstructionTranslatorBase.SETUP_LOOPc                 C   s   | j t|j d S rW   rm  r   rZ   rZ   r[   SETUP_EXCEPTE  s    z&InstructionTranslatorBase.SETUP_EXCEPTc                 C   s   | j   d S rW   )rp   r   r   rZ   rZ   r[   	POP_BLOCKI  s    z#InstructionTranslatorBase.POP_BLOCKc                 C   s   |   }t|ts td|  | jj|j t| trX| j	t
|jt| j| n| j	t
|j | t||jfi t| | ||  d S )NzSETUP_WITH )r   r   rI   r"   rm   r   r   r$  rp   r  r]   r^   r   ro   r   rN   r8   	propagateZenter)rb   r   ctxrZ   rZ   r[   
SETUP_WITHL  s     

z$InstructionTranslatorBase.SETUP_WITHc                 C   s   | j t|j d S rW   rm  r   rZ   rZ   r[   SETUP_FINALLY`  s    z'InstructionTranslatorBase.SETUP_FINALLYc                 C   s   |  d  d S rW   r   r   rZ   rZ   r[   BEGIN_FINALLYc  s    z'InstructionTranslatorBase.BEGIN_FINALLYc                 C   sF   |  d\}}|d u sJ | | | || td gd i  d S )Nr_  r   )r   r   r   r<   )rb   r   rf   r   rZ   rZ   r[   WITH_CLEANUP_STARTf  s    
z,InstructionTranslatorBase.WITH_CLEANUP_STARTc                 C   s   |  d | d  d S )Nr_  )r   r   r   rZ   rZ   r[   WITH_CLEANUP_FINISHl  s    
z-InstructionTranslatorBase.WITH_CLEANUP_FINISHc                 C   s   |   }|d u sJ d S rW   r+  rb   r   tosrZ   rZ   r[   END_FINALLYp  s    z%InstructionTranslatorBase.END_FINALLYc                 C   s   |   }t|trr| jj|j z0| \}}| || | | | | W q t	yn   | 
| Y q0 ntdt|  d S )Nz	FOR_ITER )r   r   rD   rm   r   r   Znext_variablesr  r   StopIterationr   r"   r7   )rb   r   itr'  Z	next_iterrZ   rZ   r[   FOR_ITERt  s    

z"InstructionTranslatorBase.FOR_ITERc              	   C   sN  |  d\}}|| }|| }t||g}|j}ttt	 t
	 }t|tttttttfrt|tr|jd u r|t
v r| tt
| t |jfi | n| r| r||v r| t|| | | fi | n`|dv r"| || d|gi  |dkrJ| | n(| t|| fi || ||gi  d S )Nr_  )innot in__contains__r  )r   as_specializedr8   rq  r   r   r  r  rQ   r   rP   r   rS   rR   rO   rC   rV   r?   r>   r<   r   r   rE  r   r   call_method	UNARY_NOTr;   r   )rb   r   leftrightoptionsopZsupported_anyrZ   rZ   r[   
COMPARE_OP  sx    




z$InstructionTranslatorBase.COMPARE_OPc                 C   s   |  tt|  gi  d S rW   )r   r;   iterr   r   rZ   rZ   r[   GET_ITER  s    z"InstructionTranslatorBase.GET_ITERr   r   c                 C   s&   |  |j}|  }| ||i  d S rW   r   r   r   r   )rb   r   r   r   rZ   rZ   r[   r     s    z'InstructionTranslatorBase.CALL_FUNCTIONc                 C   s
  |j dkrti t}|  }n$|j dkr:|  }|  }ntd |  }| jj|j | jj|j t|t	rt|j
tr|jdkrt|ttfrt|g}t|ts|| rt|| }t|trt|tstdt| dt|  | ||j|j d S )Nr   r   CALL_FUNCTION_EXviewznon-static call r  )r   r>   r   r   r"   rm   r   r   r   rJ   objrS   r0  r<   rG   rC   r   r   r7   r   r   )rb   r   Z
kwargsvarsZargsvarsr   rZ   rZ   r[   r    s<    





	
z*InstructionTranslatorBase.CALL_FUNCTION_EXc                 C   s   |   }| |j}|   }t|ts*J |j}|d t|  |t| d   }}tt||}t|t|ksxJ | 	||| d S rW   )
r   r   r   r   r<   r   r   r   zipr   )rb   r   argnamesr   r   Zkwargs_listr   rZ   rZ   r[   CALL_FUNCTION_KW  s    &z*InstructionTranslatorBase.CALL_FUNCTION_KWc                 C   s&   |  | | |   | d  d S rW   )ri  r   r   r   rZ   rZ   r[   LOAD_METHOD  s    
z%InstructionTranslatorBase.LOAD_METHODc                 C   s:   |  |j}|  }|d u s J |  }| ||i  d S rW   r  )rb   r   r   dummyr   rZ   rZ   r[   CALL_METHOD  s
    z%InstructionTranslatorBase.CALL_METHODc                 C   s2   |   }tt| |t|jgi }| | d S rW   )r   r;   r|   r   r<   r   r   )rb   r   r  r   rZ   rZ   r[   ri    s
    z#InstructionTranslatorBase.LOAD_ATTRc              
   C   s  |   }| d\}}t|tr8| jr8J d|j dz0| jjt	t
| |t|j|gi j W d S  ty } z@|  s tjddd |  |d | | W Y d }~n
d }~0 0 | jj| td|  gd	 | j|g | d | j| | j d S )
Nr_  zMutating module attribute z during export.zSTORE_ATTR triggered compileTr   r   Z
store_attrr   )r   r   r   rO   exportr   rm   r   r   r;   setattrr   r<   r#   r   rY   r   r   r   r   r   r%   r   r   r   rs   )rb   r   Zpriorr'  r  r%  rZ   rZ   r[   
STORE_ATTR  s:    

 

z$InstructionTranslatorBase.STORE_ATTRc                 C   s   t dt|  d S )Nz1create_call_resume_at not overridden by subclass r   typerb   r   rZ   rZ   r[   r   /  s    z/InstructionTranslatorBase.create_call_resume_atc                 C   s   t dt|  d S )Nz8should_compile_partial_graph not overridden by subclass r  ra   rZ   rZ   r[   r   4  s    z6InstructionTranslatorBase.should_compile_partial_graphr   c                 C   s8   |  d\}}}|| d||gi }| jj|j d S )Nr   __setitem__)r   r  rm   r   r   )rb   r   r'  r  keyr   rZ   rZ   r[   STORE_SUBSCR9  s    z&InstructionTranslatorBase.STORE_SUBSCRc                 C   s0   |  |j}t|}| t|fi | d S rW   )r   r   r8   rq  r   rG   rb   r   r   r  rZ   rZ   r[   BUILD_TUPLE@  s    
z%InstructionTranslatorBase.BUILD_TUPLEc                    s>     |j}t|} t fdd|D fi | d S )Nc                    s   g | ]}|  qS rZ   )r  r   ra   rZ   r[   r   J  r   z9InstructionTranslatorBase.BUILD_SLICE.<locals>.<listcomp>)r   r   r8   rq  r   rF   r  rZ   ra   r[   BUILD_SLICEE  s    
z%InstructionTranslatorBase.BUILD_SLICEc                 C   s6   |  |j}t|}| t|fdt i| d S Nr
  )r   r   r8   rq  r   rE   r6   r  rZ   rZ   r[   
BUILD_LISTO  s    
z$InstructionTranslatorBase.BUILD_LISTc              	   C   s|   |  |j}t|}t }|D ]:}z|||  W q  tyX   td|  Y q 0 q | 	||fdt
 i| d S )NzBUILD_LIST_UNPACK r
  )r   r   r8   rq  r   extendr   NotImplementedErrorr"   r   r6   )rb   r   clsZseqsr  r   seqrZ   rZ   r[   BUILD_LIST_UNPACKT  s    
z+InstructionTranslatorBase.BUILD_LIST_UNPACKc                 C   s   | j |td d S )N)r  )r  rG   r   rZ   rZ   r[   BUILD_TUPLE_UNPACK_  s    z,InstructionTranslatorBase.BUILD_TUPLE_UNPACKc                 C   s   |  |jd }t|}t }t|d d d |dd d D ]<\}}t|ttfslt|t	rh|j
d uslJ ||t|< q>t|t|d ksJ | t|tfdt i| d S )Nr_  r   r
  )r   r   r8   rq  r   r  r   r<   r=   rS   Zspecialized_valuer>   get_keyr   r   r6   )rb   r   r   r  r   r}   r   rZ   rZ   r[   	BUILD_MAPd  s    
&z#InstructionTranslatorBase.BUILD_MAPc                 C   s   |   }| |j}t|g| }t|ts2J |j}t|t	sFJ t
|t
|ksZJ | ttt||tfdt i| d S r  )r   r   r   r8   rq  r   r<   r   r4   rd   r   r   r>   r   r  r6   )rb   r   keysr  r  rZ   rZ   r[   BUILD_CONST_KEY_MAPs  s"    z-InstructionTranslatorBase.BUILD_CONST_KEY_MAPc                 C   s   |  d\}}|jdksJ | j|j  }t|ts8J |jsBJ t|j}|||	 < | 
|t||jfi t|||g d S )Nr_  r   )r   r   ro   r   r   r>   r
  r   r   r   r  Zuser_clsr8   rq  )rb   r   r}   r   r  r   rZ   rZ   r[   MAP_ADD  s     

z!InstructionTranslatorBase.MAP_ADDc              
   C   s   |   }|jdksJ | j|j  }t|ts2J |js<J |j}|jsN|jrn|j|j}|jrn|	|j | 
|t|j|g f|ddt||g d S )Nr   F)r  Zregen_guards)r   r   ro   r   r   rE   r
  r  unionr   r  r   r8   rq  )rb   r   r   r  Znew_rec_containsrZ   rZ   r[   LIST_APPEND  s*    

z%InstructionTranslatorBase.LIST_APPENDc              
   C   s   |j }t| j}|  }|  }d }d }d }d }	|d@ r@|  }|d@ rP|  }|d@ r`|  }	|d@ rp|  }t|t| jd  }
| t||| j	||	||fd| i|
 d S )N      r_  r   Zclosure_scope)
r   r   ro   r   r8   rq  r   r   r@   r9  )rb   r   flagsZ	old_stackfn_namecodedefaultsclosureannotations
kwdefaultsr  rZ   rZ   r[   MAKE_FUNCTION  s@    
	z'InstructionTranslatorBase.MAKE_FUNCTIONc                    s     }t|tr.jj|j |}n| rLt|trL|}n~t|t	rl|jt
|jd}n^t|trt|jt	rt|j |jt  fddt
|jD }ntd|  t||jksJ t|D ]}| qd S )N)Zidxesc                    s"   g | ]}t | fi  qS rZ   )r:   )r   ir  proxyrb   rZ   r[   r     r   z=InstructionTranslatorBase.UNPACK_SEQUENCE.<locals>.<listcomp>zUNPACK_SEQUENCE )r   r   rC   rm   r   r   r   r   r<   rS   r   r   rJ   r  r|   Zas_proxyr0  r8   rq  r"   r   r   r   )rb   r   r  r'  r  rZ   r  r[   UNPACK_SEQUENCE  s     


z)InstructionTranslatorBase.UNPACK_SEQUENCEc                 C   s  d|j   krdksn J |j d@ }|j d? }|  }t|}|| rt|| }t||| ksnJ |d | }||t||  }|t|| d  }	t|	D ]}
| 	|

| q| 	t|fi | t|D ]}
| 	|

| qntd|  d S )Nr   i     r  z
UNPACK_EX )r   r   r8   rq  r   r   r   r   r   r   add_optionsrG   r"   )rb   r   rx   suffixr  r  r(  Zvals_prefixZ	vals_listZvals_suffixitemrZ   rZ   r[   	UNPACK_EX  s"    



z#InstructionTranslatorBase.UNPACK_EXc                 C   s   d S rW   rZ   r   rZ   rZ   r[   NOP  s    zInstructionTranslatorBase.NOPc                 C   s   |    d S rW   r+  r   rZ   rZ   r[   POP_TOP  s    z!InstructionTranslatorBase.POP_TOPc                 C   s(   |   }|   }| | | | d S rW   r   r   rb   r   abrZ   rZ   r[   ROT_TWO  s    
z!InstructionTranslatorBase.ROT_TWOc                 C   s:   |   }|   }|   }| | | | | | d S rW   r  )rb   r   r  r  crZ   rZ   r[   	ROT_THREE  s    

z#InstructionTranslatorBase.ROT_THREEc                 C   sL   |   }|   }|   }|   }| | | | | | | | d S rW   r  )rb   r   r  r  r  drZ   rZ   r[   ROT_FOUR  s    


z"InstructionTranslatorBase.ROT_FOURc                 C   s    |   }| | | | d S rW   r  )rb   r   r  rZ   rZ   r[   rh    s    
z!InstructionTranslatorBase.DUP_TOPc                 C   s<   |   }|   }| | | | | | | | d S rW   r  r  rZ   rZ   r[   DUP_TOP_TWO  s    


z%InstructionTranslatorBase.DUP_TOP_TWOc                 C   s   |j }|d@ dkr|  }ntd}|  }t|trDtt|j}|d@ dkrftt| |gi }nB|d@ dkrtt	| |gi }n |d@ dkrtt
| |gi }td|  d |}| ttj||gi  d S )Nr  r   r   r   r_  z{:})r   r   r<   r   rR   r   Zsym_numr;   r   reprasciir   r  rP  )rb   r   r  fmt_specr   Zfmt_varrZ   rZ   r[   FORMAT_VALUE"  s&    

z&InstructionTranslatorBase.FORMAT_VALUEc                 C   sH   d}t |jD ]$}|  }t|ts(J |j| }q| t|d d S )Nr   r7  )r   r   r   r   r<   r   r   )rb   r   r   r   Zstr_varrZ   rZ   r[   BUILD_STRING9  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 notr  )r   )r   r   r  )rb   r   Z
new_argvalZnew_instrZ   rZ   r[   IS_OPA  s    
zInstructionTranslatorBase.IS_OPc                 C   sZ   |j dks|j dksJ | d\}}|j }| || d|gi  |dkrV| | d S )Nr   r   r_  r  )r   r   r   r  r  )rb   r   r  r  r  rZ   rZ   r[   CONTAINS_OPJ  s    z%InstructionTranslatorBase.CONTAINS_OPc                 C   sR   |   }|jdksJ | j|j  }t|ts2J |js<J || d|gi  d S )Nr   r  )r   r   ro   r   r   rE   r
  r  rb   r   r   r  rZ   rZ   r[   LIST_EXTENDR  s    
z%InstructionTranslatorBase.LIST_EXTENDc                 C   s"   |  tt| |  gi  d S rW   )r   r;   rd   r   r   r   rZ   rZ   r[   LIST_TO_TUPLEZ  s    z'InstructionTranslatorBase.LIST_TO_TUPLEc                 C   sR   |   }|jdksJ | j|j  }t|ts2J |js<J || d|gi  d S )Nr   r   )r   r   ro   r   r   r>   r
  r  r  rZ   rZ   r[   
DICT_MERGE]  s    
z$InstructionTranslatorBase.DICT_MERGEc                 C   s   |    d S rW   r+  r   rZ   rZ   r[   	GEN_STARTe  s    z#InstructionTranslatorBase.GEN_STARTc                 C   sD   | j d }| r*| tt|  n| || dg i  d S )Nr   __len__)ro   r   r   r<   r   r   r  rx  rZ   rZ   r[   GET_LENh  s    
z!InstructionTranslatorBase.GET_LENc                 C   sJ   | j d }t|tsJ t|jtjjr8| td n| td d S Nr   TF)	ro   r   r>   r   r   abcMappingr   r<   rx  rZ   rZ   r[   MATCH_MAPPINGo  s
    
z'InstructionTranslatorBase.MATCH_MAPPINGc                 C   s^   | j d }| sJ | }t|tjjrLt|ttt	fsL| 
td n| 
td d S r  )ro   r   r   r   r   r  Sequencer   bytes	bytearrayr   r<   )rb   r   ry  Z	tos_valuerZ   rZ   r[   MATCH_SEQUENCEw  s    

z(InstructionTranslatorBase.MATCH_SEQUENCEc                    s   | j d }| sJ | }| j d }t|ts6J |j t fdd|D r~| t fdd|D  | t	d n| t	d  | t	d d S )	Nr   c                 3   s   | ]}| v V  qd S rW   rZ   r   r  Z	match_objrZ   r[   r     r   z7InstructionTranslatorBase.MATCH_KEYS.<locals>.<genexpr>c                    s   g | ]} | qS rZ   rZ   r  r  rZ   r[   r     r   z8InstructionTranslatorBase.MATCH_KEYS.<locals>.<listcomp>TF)
ro   r   r   r   r>   r   r  r   rG   r<   )rb   r   ry  r  Ztos1rZ   r  r[   
MATCH_KEYS  s    

z$InstructionTranslatorBase.MATCH_KEYSc                 C   s   d S rW   rZ   r   rZ   rZ   r[   RESUME  s    z InstructionTranslatorBase.RESUMEc                 C   sd   t jdkrXtj|j d dd  }|drFt| d|dd   |S t| d| |S td d S )	N)r      r   r   ZINPLACEZINPLACE_r  ZBINARY_zBINARY_OP requires Python 3.11+)r   r   r   Z_nb_opsr   r.  r|   r"   )rb   r   r   rZ   rZ   r[   	BINARY_OP  s    

z#InstructionTranslatorBase.BINARY_OPc                 C   s   |  | j|j   d S rW   )r   ro   r   r   rZ   rZ   r[   COPY  s    zInstructionTranslatorBase.COPYc                 C   s.   | j |j  | j d  | j d< | j |j < d S )Nr   )ro   r   r   rZ   rZ   r[   SWAP  s    zInstructionTranslatorBase.SWAPc                 C   s   d S rW   rZ   r   rZ   rZ   r[   CACHE  s    zInstructionTranslatorBase.CACHEc              	   C   s8   t | j t| jt| jt| j| j	| j
| j| jS )z>Create a checkpoint of the current state by copying everything)rl   rm   r   r   r   rn   r   ro   rp   rq   rr   rs   rt   ra   rZ   rZ   r[   r     s    
z)InstructionTranslatorBase.copy_graphstate)r   c                 C   s2   |\}| _ | _| _| _| _| _| _| j| dS )z6Restore a checkpoint created by self.copy_graphstate()N)	rn   ro   rp   rq   rr   rs   rt   rm   r   )rb   r   Zoutput_staterZ   rZ   r[   r     s    z,InstructionTranslatorBase.restore_graphstatec                 C   sf   | j d u rdS | j d d }| j d dd  }g ||R }|D ] }t|tr@t|dkr@ dS q@dS )NTr   r   F)r   r   r   r   )rb   Zoutput_graphstateZ
graphstater   r  rZ   rZ   r[   r     s    

z*InstructionTranslatorBase.empty_checkpointNc                 C   s.   |d u rg }d t|  gtt| S )Nr   )r   r   r   r   r   r   )rb   Zadditional_stack_framesrZ   rZ   r[   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>co_nameF)lookup_line)r   FrameSummaryr|   r  rt   ra   rZ   rZ   r[   r     s    z'InstructionTranslatorBase.frame_summaryc                 C   s>   | j jt|tj || j jvr:| j |t	
| d S rW   )rm   r   r   r/   Z
make_guardr$   ZWEAKREF_ALIVEr8  r<  weakrefref)rb   r0  r   rZ   rZ   r[   store_dict_key  s
    z(InstructionTranslatorBase.store_dict_keyc                 C   s   | j S rW   )
_fake_modera   rZ   rZ   r[   	fake_mode  s    z#InstructionTranslatorBase.fake_modec                 C   s(   | j  D ]\}}||u r
|  S q
d S rW   )rn   r   )rb   Ztensor_variabler  r   rZ   rZ   r[   find_symbolic_locals_name  s    
z3InstructionTranslatorBase.find_symbolic_locals_name
rm   r   r,  r9  r?  r   rn   r   r  r  c                    s   t    || _|| _|| _g | _d| _td| _d | _	g | _
|d | _|| _dd t|D | _|| _|| _|| _|| _|	| _t|	|d| _i | _|
| _|jj| _d | _g | _tjdkrdd	lm }m!}m"}m#} |	j$||B |B |B @ r| %t&d  d S )
Nr   r  co_firstlinenoc                 S   s   i | ]\}}t ||qS rZ   )r;  )r   r*  r  rZ   rZ   r[   
<dictcomp>=  r   z6InstructionTranslatorBase.__init__.<locals>.<dictcomp>)r  r   )r   
   r   )CO_ASYNC_GENERATORCO_COROUTINECO_GENERATORCO_ITERABLE_COROUTINE)'super__init__rm   rn   r   ro   rq   r   rr   rs   rp   rt   r   	enumeraterl  r,  r9  r?  r   r  r)   r#  nn_module_stackr  Ztracing_contextr  r  r   r   r   r   resume_executionr  r   r  r  co_flagsr   r;   )rb   rm   r   r,  r9  r?  r   rn   r   r  r  r  r   r  r  	__class__rZ   r[   r  !  s<    




z"InstructionTranslatorBase.__init__)N)rg   rh   ri   r&   rj   r   r   r8   r   r   rk   r   r]   r	   r
   rl   r   rE  r   r   r   r   r  r  r  r!  r&  r   r)  r   r   r1  r2  r3  r4  STORE_DEREFr5  r   r>  r   rF  r:  rS  r^  rg  rj  rC  r   JUMP_FORWARDJUMP_ABSOLUTEr   r   not_POP_JUMP_IF_FALSEr   POP_JUMP_IF_TRUEJUMP_IF_FALSE_OR_POPJUMP_IF_TRUE_OR_POPrn  ro  rp  rs  rt  ru  rv  rw  rz  r}  r  r  r   r   r  r  r  r  ri  r  r   r   r   r  r  r  r  rE   r  r  ZBUILD_TUPLE_UNPACK_WITH_CALLr  r  r  r  r  r  r  r  r  r  r  r  rh  r  r  r  r  r  r  r  r  r  r  r  r  r  r   posUNARY_POSITIVEnegUNARY_NEGATIVEr  invertUNARY_INVERTpowBINARY_POWERmulBINARY_MULTIPLYmatmulBINARY_MATRIX_MULTIPLYfloordivBINARY_FLOOR_DIVIDEtruedivBINARY_TRUE_DIVIDEmodBINARY_MODULOZ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_MODULOZ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  ZJUMP_BACKWARDZJUMP_BACKWARD_NO_INTERRUPTZPOP_JUMP_FORWARD_IF_TRUEZPOP_JUMP_BACKWARD_IF_TRUEZPOP_JUMP_FORWARD_IF_FALSEZPOP_JUMP_BACKWARD_IF_FALSEr   ZPOP_JUMP_FORWARD_IF_NOT_NONEZPOP_JUMP_BACKWARD_IF_NOT_NONEr   ZPOP_JUMP_FORWARD_IF_NONEZPOP_JUMP_BACKWARD_IF_NONEr  r   r   r   r  r   r  propertyr  r  r   rd  CodeTyper  __classcell__rZ   rZ   r	  r[   r     sf  
$

	5
.<

$
$

"
	































	




	






c                       sX   e Zd Zee ee d fddZ fddZdd Z	dd	 Z
d
d Zdd Z  ZS )r$  )r   r   c                    s  t  jt| |||| t t ||	d
 |_|	_|
_jrXjsXJ dt d 	fdd
 D  t fddD _j D ]>}t|tttfrt|d }dd	 |D }jj| qt _jd
 D ]}|v rt| j|< qd S )Nr  z4Export without one graph - something has gone wrong.co_varnamesc                 3   s   | ]}| vr|V  qd S rW   rZ   r   )varsrZ   r[   r     r   z1InstructionTranslator.__init__.<locals>.<genexpr>c              	   3   sP   | ]H}|v r|t | d  v r4t| d  |nt|| fV  qdS )rQ  N)r9   r0   indexr1   r   r}   )r   r,  rb   rZ   r[   r     s   

r   c                 S   s*   g | ]"}|j tjtjtjtjfv r|qS rZ   )Z	create_fnr$   ZLIST_LENGTHZ	DICT_KEYSZ
ODICT_KEYSZTUPLE_ITERATOR_LEN)r   ZguardrZ   rZ   r[   r     s   z2InstructionTranslator.__init__.<locals>.<listcomp>r   )r  r  r&   r   r   	one_graphr  r   r   r  r   rn   r  r   rD   rC   r>   r8   rq  rm   r   r   r   _freevars_idsr   r;  )rb   r   r  r,  r9  r?  r   Zcompiler_fnrU  r  r   r'  Zlocal_guardsZindex_guardsr0  r	  )r   r,  rb   rR  r[   r  a  sL    


zInstructionTranslator.__init__c                    s&   t  tjd| jj  t   d S )Nztorchdynamo start tracing )r\   r   INFOr  r  r  r&  ra   r	  rZ   r[   r&    s    zInstructionTranslator.runc                 C   s(   |j }t|| j|krdS | j| S )z@Match a cell in this method to one in a function we are inliningN)cell_contentsr;  rV  rY  rn   )rb   r0  cellr   rZ   rZ   r[   match_nested_cell  s    z'InstructionTranslator.match_nested_cellc                 C   s   t dd | jD o| j S )Nc                 s   s   | ]}|  V  qd S rW   )rc   r   r  rZ   rZ   r[   r     r   zEInstructionTranslator.should_compile_partial_graph.<locals>.<genexpr>)r  rp   rU  ra   rZ   rZ   r[   r     s    z2InstructionTranslator.should_compile_partial_graphc              
      s$  d _ |jdkrtdgS tj|tfddj D }tj	t| }t
d|j }tjj|jtj	|tdd jD }t |jr ||tj	 n2j|t|j|   |tj	   fdd|D   td|tdg   S )	Nr  c                 3   s&   | ]}| v r|  vr|V  qd S rW   )r   rT  )r   rb   rZ   r[   r     s   z>InstructionTranslator.create_call_resume_at.<locals>.<genexpr>Z__resume_at_c                 s   s   | ]}|  V  qd S rW   )re   r[  rZ   rZ   r[   r     r   c                    s   g | ]}  |qS rZ   )Zcreate_loadrT  )r   rZ   r[   r     r   z?InstructionTranslator.create_call_resume_at.<locals>.<listcomp>r   )rq   r   r   r   r   rd   rn   r  r   ro   r   r   r*   lookupr  rt   rp   r    r   Zmake_function_with_closurerm   r<  rd  FunctionTyper9  Zextend_outputZload_function_nameget_instructions)rb   r   r  r   r0  Znew_coderZ   )r   r   rb   r[   r     s>    

	z+InstructionTranslator.create_call_resume_atc                 C   st   | j  dkrtdd | _t tjd| jj	 d t
d | j j| td|  gd | j tdg d S )	Nr   z#because no content in function callztorchdynamo done tracing z (RETURN_VALUE)zRETURN_VALUE triggered compileZreturn_valuer   r  )rm   Zcount_callsr   r   rq   r\   r   rW  r  r  rY   r   r   r%   r   r   r   r   rZ   rZ   r[   r    s    

z"InstructionTranslator.RETURN_VALUE)rg   rh   ri   r   r   r	   r   r  r&  rZ  r   r   r  rP  rZ   rZ   r	  r[   r$  `  s   	[,r$  c                       s   e Zd ZU dZee ed< edd Ze	dd Z
eejeeef eeef eeef ed fdd	Zed
d Zdd Z fddZdd Zeed fddZdd Zdd Z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:0    Y  d S )Nr"   r  )r   r   r2   inline_call_)r  rZ  funcr   r   rZ   rZ   r[   r    s    z)InliningInstructionTranslator.inline_callc                 C   s  t |ttfsJ | r"td | dkr6td z(t| tj	v r\td|   W n t
yp   Y n0 t| rt| std|jj d|  d|   z|| ||\}}W n\ ty& } zBt|  d|  d| d| d| 	 td W Y d }~n
d }~0 0 t| | D ] }t |ts<td	|  q<| }|jd
v rtd|j  td| dt|  d t|rt| ||| j ||}	nt!| ||| j ||}	z|	"  W n t#j$y0 } z0d| d| }
t|
 t%|
|W Y d }~n@d }~0  t&yf } ztd|   W Y d }~n
d }~0 0 |	j'd usxJ |(| |	 |	j)| j)u r| j *|	j  td|  t|rt |	tsJ |	j'+ d u sJ t,|	j-fdt. it/|	j'S |	j'S d S )Nzinline with __self__Zpatched_initzPatched init cannot be inlined.zinlining disallowed: zinline in skipfiles: z  | r  zarg mismatch inliningzunconverted arg )r  __setattr__zinline z	INLINING z 
 z 
zSKIPPED INLINING z: zFAILED INLINING zDONE INLINING r
  )0r   rA   r@   Zhas_selfr"   get_namer;  Zget_functionr   Z_disallowed_function_idsr  r   checkget_filenameZis_torch_inline_allowedr   ri   Z	bind_args	TypeErrorrY   r   r  r  r  r8   get_coder  r   r   Bytecoder   &InliningGeneratorInstructionTranslatorr   r  r&  r   r   r#   r  r_  Zexport_freevarsr9  r   r   rD   generated_itemsr6   rq  )rZ  ra  r   r   Z
sub_localsclosure_cellsr%  r   r  Ztracerr   rZ   rZ   r[   r`    s     &"



z*InliningInstructionTranslator.inline_call_)rZ  r  rn   r   rk  funcvarc           	         s|   |  }|d }t|ts |j}t j|ji ||||t  fddt D  |j	d
 || _
d | _|| _|j | _d S )N__builtins__c                    s   i | ]}|t  |qS rZ   )r|   rT  r  rZ   r[   r  w  r   z:InliningInstructionTranslator.__init__.<locals>.<dictcomp>)
rm   r,  r9  r?  rn   r   r   r   r  r  )Zget_globalsr   r   __dict__r  r  rm   r   dirr  rZ  r_  rk  r  copy)	rb   rZ  r  rn   r   rk  rl  r9  r?  r	  rn  r[   r  b  s(    	
z&InliningInstructionTranslator.__init__c                 C   s   | j jS rW   )rZ  r  ra   rZ   rZ   r[   r    s    z'InliningInstructionTranslator.fake_modec                 C   s   |j | jv rN| j|j  }|  }t|tr<|| jjj|j< q| jj	
|| nv| j|j }t|tjr| jj	
| j|j  |   n>|d ur|j | jjvr| jj|j  t td d S )Nz#write to __closure__ while inlining)r   rk  r   r   rH   rm   root_txrn   r0  r   Z
store_cellrY  r   NewCellVariabler=  rZ  r   r   r   ZRestartAnalysisr"   )rb   r   rY  r'  Z
maybe_cellrZ   rZ   r[   r    s2    
z)InliningInstructionTranslator.STORE_DEREFc                    s   |j | jv rP| j|j  }t|tr:| | jjj|j  q| | jj	
| n>| j|j d }t|tjr| | jj	
| nt | d S rW   )r   rk  r   rH   r   rm   rr  rn   r0  r   Z	load_cellrY  r   rs  r  r2  )rb   r   rY  Zmaybe_sym_localr	  rZ   r[   r2    s    
z(InliningInstructionTranslator.LOAD_DEREFc                 C   s(   |j |  v sJ | | j|j   d S rW   )r   r   r   rk  r   rZ   rZ   r[   r5    s    z*InliningInstructionTranslator.LOAD_CLOSUREr  c                    s4   t  ||}| }t|dr0|j}||| q|S )NrZ  )r  r  r   rZ  r  )rb   r  r  Z
translatorr	  rZ   r[   r    s    
z)InliningInstructionTranslator.replace_allc                 C   s   dS )NFrZ   ra   rZ   rZ   r[   r     s    z:InliningInstructionTranslator.should_compile_partial_graphc                 C   s   t d d S )Nzcant resume while inlining)r"   r  rZ   rZ   r[   r     s    z3InliningInstructionTranslator.create_call_resume_atc                 C   s   |   | _d | _d S rW   )r   r_  rq   r   rZ   rZ   r[   r    s    
z*InliningInstructionTranslator.RETURN_VALUE)rg   rh   ri   __doc__r   rS   rj   classmethodr  staticmethodr`  r   rd  rO  r   r   r8   r?   r  rN  r  r  r2  r5  r  r   r   r  rP  rZ   rZ   r	  r[   r    s,   


S



#	r  c                       s8   e Zd ZU ee ed<  fddZedddZ  Z	S )ri  rj  c                    s   t  j|i | g | _d S rW   )r  r  rj  )rb   r   r   r	  rZ   r[   r    s    z/InliningGeneratorInstructionTranslator.__init__)r   c                 C   s"   | j |   | td  d S rW   )rj  r  r   r   r<   r   rZ   rZ   r[   YIELD_VALUE  s    z2InliningGeneratorInstructionTranslator.YIELD_VALUE)
rg   rh   ri   r   r8   rj   r  r   rw  rP  rZ   rZ   r	  r[   ri    s   
ri  )r   Zdataclassesr   r   rJ  r   r  r   r   r   r   rd  typingr  collections.abcr   r   r   r   r   r   r   r	   r
   Zunittest.mockr   r   Ztorch._guardsr   r   r   r   r   rX   r   r   r   r   r   r   Zbytecode_analysisr   r   Zbytecode_transformationr   r   r   r   r   r   Zcodegenr    r!   r"   r#   r   r$   Zoutput_graphr%   r&   r'   Zreplay_recordr(   r)   r  r*   r+   r=  r,   r-   r.   r/   r0   r1   utilsr2   r3   r4   r5   Zvariables.baser6   r7   r8   Zvariables.builderr9   r:   Zvariables.builtinr;   Zvariables.constantr<   r=   Zvariables.dictsr>   Zvariables.functionsr?   r@   rA   rB   Zvariables.listsrC   rD   rE   rF   rG   Zvariables.miscrH   rI   rJ   rK   rL   rM   rN   Zvariables.nn_modulerO   Zvariables.tensorrP   rQ   rR   rS   Zvariables.torchrT   Zvariables.user_definedrU   rV   	getLoggerrg   rY   	lru_cacher\   Z	dataclassr]   rl   rE  r   r   r   r   r   r   r   r   r   r$  r  ri  rZ   rZ   rZ   r[   <module>   s   ($	  $	

JiI         I ' H