o
    hi                    @   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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mZ d dlmZ d dlZd dlZd dl m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'm
Z(m)Z)m*Z*m+Z+ ddl%m,Z,m-Z- dd	l.m/Z/m0Z0m1Z1 dd
l2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z; ddl'm<Z<m=Z=m>Z>m?Z? ddl@mAZA ddlBmCZCmDZDmEZE ddlFmGZGmHZH ddlImJZJmKZK ddlLmMZMmNZNmOZOmPZPmQZQ ddlRmSZSmTZTmUZUmVZVmWZWmXZXmYZY ddlZm[Z[m\Z\m]Z]m^Z^ ddl_m`Z`maZa ddlbmcZc ddldmeZemfZf ddlgmhZhmiZimjZj ddlkmlZl ddlmmnZnmoZompZpmqZq ddlrmsZsmtZtmuZumvZvmwZwmxZx ddlymzZzm{Z{m|Z|m}Z}m~Z~mZ ddlmZ ddlmZmZmZmZ ddlmZ ddlmZmZ e
eZejed Zejed!Zejed"Zedd#d$ ZejG d%d& d&ZG d'd( d(eZd)ejd*ef fd+d,Zd-d.d/ejegef d0efd1d2Zd/ejegef d0efd3d4Zd5Zd6d7 ZG d8d. d.e!e ZG d9d: d:eZG d;d< d<eZG d=d> d>eZdS )?    N)Sized)	AnyCallableDictList
NamedTupleOptionalSetTupleType)patch)CheckpointabletracingTracingContext   )allowed_functionsconfigexcloggingside_effects	skipfiles	variables)
is_allowedis_builtin_constant)get_indexofJUMP_OPNAMESlivevars_analysis)cleaned_instructionscreate_call_functioncreate_instructioncreate_jump_absoluteInstructionis_generator	unique_id)	PyCodegen)ArgsMismatchErrorBackendCompilerFailedunimplementedUnsupported)GuardBuilder)GraphCompileReasonOutputGraphOutputGraphState)DummyModuleExecutionRecorder)ContinueExecutionCacheReenterWith)
AttrSourceGetItemSourceGlobalSourceGlobalWeakRefSourceLocalSource)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EnumVariable)ContextWrappingVariableGenericContextWrappingVariableWithExitFunctionVariable)ConstDictVariable)BaseUserFunctionVariableNestedUserFunctionVariableUserFunctionVariableUserMethodVariable)BaseListVariableListIteratorVariableListVariableSetVariableSliceVariableTupleVariable)ClosureVariableGetAttrVariableInlinedClosureVariableNullVariablePythonModuleVariableUnknownVariable)NNModuleVariable)supported_const_comparison_opssupported_tensor_comparison_opsSymNodeVariableTensorVariable)TorchVariable)UserDefinedObjectVariableUserDefinedVariablegraph_breaks
trace_calltrace_sourcec                   C   s
   t tS N)torchdynamo_loggingget_step_loggerlog ri   ri   T/var/www/html/ai/venv/lib/python3.10/site-packages/torch/_dynamo/symbolic_convert.py_step_loggert   s   
rk   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 re   )ro   selfri   ri   rj   can_restore      
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 re   )rn   ro   target_valuesr0   tuplerp   ri   ri   rj   	resume_fn   s   
zBlockStackEntry.resume_fnc                 C   s   | j |S re   )ro   exit)rq   txri   ri   rj   rw         zBlockStackEntry.exit)__name__
__module____qualname__r!   __annotations__rn   r   intro   rF   rr   rv   rw   ri   ri   ri   rj   rl   y   s   
 rl   c                   @   s|   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	d d
e
e f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r1| d| d|   S qd S )Nr   .)prefixz mismatch: z != )_fieldsr   diffgetattr)rq   r   ksvovri   ri   rj   r      s   


z$InstructionTranslatorGraphState.diffN)rz   r{   r|   r,   r}   r   strr@   r   rl   r   r~   r!   r   ri   ri   ri   rj   r      s   
 r   fn.c                    s>   t t| jt|  t| dddtf fdd}|S )Nrq   InstructionTranslatorBaseinstc                    s   |   | | i  d S re   )pushcall_functionpopnrq   r   fn_varnargsri   rj   impl   s   zstack_op.<locals>.impl)leninspect	signature
parametersrC   	functoolswrapsr!   )r   r   ri   r   rj   stack_op   s
   r   rq   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PRECALLr   RAISE_VARARGST)operatortruth
isinstancer   r~   instructionssysversion_infoopnameargvalr   r   rD   )rq   r   r   current_instruction_pointerr   	error_msgri   ri   rj   &_detect_and_normalize_assert_statement   s<   









r   c                    s   dddt f fdd}|S )Nrq   r   r   c                    s4  |   }| jj|j tjrt|  r|   }| jj|j | r2t|	 r2| 
| d S t|trO| jjdtjgt||fi R   | 
| d S | jjdtjgt|fi R  }t| |fdt|j| it|g}| jjdtjgt||fi R   | 
| d S | r|	 r o| | | 
| d S d S t|tr(|  r(|  rd|   }t| t|| | td | jj | t!dt"| |  gd |    | #| j$} o| | | #|j%}| j&t'|j(|d dg| |  d S  | #|j%}| j&t'|j(|d dg| |  d S t|t)rK| j*|j+}	|	rI oA| | | 
| d S d S t|t,r|-| d	}
|
 ri|
	 d u ri|-| d
}
t|
t.r| / }|
0| g i }t|t1rt|j2tt3fr| jj|j |j2r o| | | 
| d S d S | 4| t5d d S drǈ o| | | 
| d S d S t|ts|6| rt7|8| r o| | | 
| d S d S t|t9r|:| j}|r o| | | 
| d S d S t;tj<j=d)Nr   example_valueBSkipping frame because there is a graph break in a for/while loop
zgeneric_jump triggered compilezgeneric_jump reasonr   )rm   __bool____len__z@generic_jump on UserDefined with __bool__ returning non-constantTzDynamic control flow is not supported at the moment. Please use functorch.experimental.control_flow.cond to explicitly capture the control flow)>popr   guardsupdater    rewrite_assert_with_torch_assertr   is_python_constantboolas_python_constantjumpr   r^   create_proxytorch_assert_asyncr<   scalar_tensorrB   r7   noder@   	propagater   should_compile_partial_graphhas_backedgeframe_summaryrh   infor   	SkipFramedebugcompile_subgraphr*   r?   create_call_resume_atr   rm   add_output_instructionsr   r   rZ   get_submodule
module_keyr`   var_getattrrM   copy_graphstater   rD   valuer~   restore_graphstater'   has_unpack_var_sequencer   unpack_var_sequencer]   evaluate_expr	UserErrorUserErrorTypeDYNAMIC_CONTROL_FLOW)rq   r   r   r   scalar_to_tensor_proxyscalar_to_tensormsgif_nextif_jumpmodxstateresulteval_resultr   r   ri   rj   inner   s  
















zgeneric_jump.<locals>.inner)r!   )r   r   r   ri   r   rj   generic_jump   s    r   Fc                    s    fdd}|S )Nc                    s&   t  dddtf fdd}|S )Nrq   r   r   c              
      s  |   }d }zt| jj| j| jj  | |W S  ty } z|  r:| 	 r:d| 
  }t| t||t| jdkrb|  | j }| | |jd }t|ts[J td|  | 	 sg tjddd |j}dt|}|d j|d jf}	tt j!rt"st#$|	rtd	|| |  |%d
 t&|j'|}W Y d }~nd }~ww | | | j(j)| |d t*| }
g }| j+D ]}| j(,g |j-.|
|/ 0|
j1| qt2j3dkr|j4dkr| j5d ur| j5j6nd}t|dkr| j(,t7d|dg | j(,t8|j9d n|j:d u sJ t;;|}d |_<| j(,|g | j(,| t2j3dkrQ|j4dkrQt=>t=j?d |j9t=>t=j?d |j9 }nt=>|j@|j9}| A|  tBD ]	}| CtD  qd| j(,| E| jF d S )Nr   r   zGraph break under z,break_graph_if_unsupported triggered compileTexc_info z%Graph break: %s from user code at:
%sgraph_breakr   r      CALLri   KW_NAMESr   Fr   )Gr   r   set_current_locf_codeco_filenamer   co_namer(   r   r   r   rh   r   r   r   r   states_before_blockremove_from_statsr   r   r   r   rG   r'   r   
real_stackjoin	tracebackformat_listfilenamegraph_break_logisEnabledForr   DEBUGexplainr9   addadd_to_statsr*   r   r   r   r$   r   r   ro   reconstructrv   
try_exceptcode_optionsr   r   r   kw_namesr   r   r   argrm   copyexn_tab_entrydisstack_effectopmapopcoder   ranger   rY   r   r   )rq   r   r   r   excpr   ctx
user_stackuser_stack_formatted	frame_loccgcleanupbr  	inst_copyr  _)inner_fnr   ri   rj   wrapper  s   






,




z>break_graph_if_unsupported.<locals>.decorator.<locals>.wrapper)r   r   r!   )r!  r"  r   )r!  rj   	decorator  s   cz-break_graph_if_unsupported.<locals>.decoratorri   )r   r$  ri   r#  rj   break_graph_if_unsupported~  s   gr%  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d< ee ed< 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dedee deeef fddZdedefddZdedefd d!Zd"d# Zdd%d&Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1e	e fd2d3Z d4ee fd5d6Z!d7efd8d9Z"d:e
d7ee fd;d<Z#d=d> Z$d?d@ Z%dAdB Z&dCdD Z'e&Z(dEdF Z)dGdH Z*dIdJ Z+dKdL Z,dMdN Z-dOdP Z.dQdR Z/dSdT Z0dUdV Z1dWdX Z2dYdZ Z3d[d\ Z4e4Z5e4Z6e7e8j9d]Z:e7e8j;d]Z<e7e8j9d^Z=e7e8j;d^Z>d_d` Z?dadb Z@dcdd ZAdedf ZBdgdh ZCdidj ZDdkdl ZEdmdn ZFdodp ZGdqdr ZHdsdt ZIdudv ZJdwdx ZKeLdydzd{d| ZMeLdydzd}d~ ZNeLdydzdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUd7efddZVeLddzdd ZWdd ZXdd ZYdd ZZdd Z[e\fddZ]dd Z^e^Z_dd Z`dd ZaeaZbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd ZrddÄ Zsddń ZtddǄ ZuddɄ Zvdd˄ ZwewZxdd̈́ Zyddτ Zzddф Z{ddӄ Z|ddՄ Z}ddׄ Z~ee8jZee8jZee8j9Zee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZeLdydzee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZee8jZddل Zddۄ Zdd݄ Zdd߄ Zdd ZeLdydzdd Zdd Zdd Ze4Ze4Ze7e8j;d]Ze7e8j;d]Ze7e8j9d]Ze7e8j9d]Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd7efddZdefddZdd Z֐dddZdd  Zؐdd Zeڐdd Zېdd Zejސdd Zded	ee d
eeef deeef deeef deeef deeef deeef dejdede
f fddZ  ZS (  r   r   r   symbolic_globalsr   r   r   r   r   r   r  accept_prefix_instprefix_instsinline_depth
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)r   offsetr   r   r   r   r   )rq   
cur_offsetr   jump_offsetri   ri   rj   r     s   
z&InstructionTranslatorBase.has_backedgec                 C   s6   t | dst| jd pg t| jd pg  | _| jS )N_cell_and_freevarsco_cellvarsco_freevars)hasattrru   r  r0  rp   ri   ri   rj   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 ri   ri   ).0r   vreadsri   rj   
<listcomp>       z?InstructionTranslatorBase.prune_dead_locals.<locals>.<listcomp>)r   r   r   setr4  collectionsOrderedDictr   itemsr   r   prune_dead_object_newrp   ri   r7  rj   prune_dead_locals  s   z+InstructionTranslatorBase.prune_dead_localsr   args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
}|rMt|rMt|drM|jrMtd| | || || d S )Nc                 s   s    | ]}t |tV  qd S re   )r   r@   r5  r   ri   ri   rj   	<genexpr>"  s
    
z:InstructionTranslatorBase.call_function.<locals>.<genexpr>r   r   _dynamo_forbiddenz$Attempt to trace forbidden callable )r   r@   listdictall	itertoolschainvaluesr3  r   r   callablerE  r   r   r   )rq   r   rA  rB  r!  ri   ri   rj   r     s*   

z'InstructionTranslatorBase.call_functionoldvarnewvarc                    s   dt ffdddt ffddt  | jjj d  fdd| jD | _| j D ]\}}t j| d| j|< q2d S )	Nr6  c                    s   | j j u r S | S re   mutable_localr6  )rN  rM  ri   rj   repl5  s   z?InstructionTranslatorBase.update_locals_and_stack.<locals>.replc                    s    j | jvS re   )rP  recursively_containsrQ  )rM  ri   rj   skip:  ry   z?InstructionTranslatorBase.update_locals_and_stack.<locals>.skipskip_fnc                    s   g | ]}t j| d qS )rU  )r@   applyrC  )cacherR  rT  ri   rj   r9  ?  s    zEInstructionTranslatorBase.update_locals_and_stack.<locals>.<listcomp>)r@   rG  r   r   rW  r   r   r>  )rq   rM  rN  r   r   ri   )rX  rN  rM  rR  rT  rj   update_locals_and_stack4  s   z1InstructionTranslatorBase.update_locals_and_stackc                 C   sV   t |jtjr| jj||}nt |jtjjsJ |j	tj d}| 
|| |S )NrO  )r   rP  r   MutableSideEffectsr   mutationr   baser>   clonerY  )rq   rM  rN  ri   ri   rj   replace_allG  s   z%InstructionTranslatorBase.replace_allc                 C   sJ   |   }zt| |||}| jj|j |W S  ty$   | |  w )zF
        A call to some user defined function by inlining it.
        )r   InliningInstructionTranslatorinline_callr   r   r   	Exceptionr   )rq   r   rA  rB  r   r   ri   ri   rj   inline_user_function_returnP  s   
z5InstructionTranslatorBase.inline_user_function_returnNc                 C   sJ   |d u r| j }| jdkrd| j dnd}| jj d| jj d| | S )Nr   z (inline depth: )r    :)r   r)  r   r   r   )rq   r   inline_depth_strri   ri   rj   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 
z    )rg  	linecachegetliner   r   r   rstrip)rq   log_strlineri   ri   rj   get_log_starts_line_log_stre  s   z5InstructionTranslatorBase.get_log_starts_line_log_strc                 C   s   t dt| j d S )N%s)trace_source_logr   r;   rn  rp   ri   ri   rj   log_starts_linek     z)InstructionTranslatorBase.log_starts_linec                 C   sJ  t | jtsJ | j| j }|| _|  jd7  _| jt| jk r(| j| j | _nd| _d| _|jr?| j|jkr?|j| _| 	  t| j
dkrQ|  rQ||  f| _td|j|j| j
 tjdkr|j}| jrr|rr| jd j|ju s|s| jr|jdkrt| jdksJ | j  n#t| jdkr| jd j|ju r| j  n| jt|jt| j
 z(t| |jstd	|j  t| jj| j| jj  t!| |j| |jd
kW S  t"y   | # rtd  tjddd Y nw | 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   Nr   zTRACE %s %s %sr   r   NOPz	missing: RETURN_VALUEzempty checkpointzstep triggered compileTr   step_unsupported)partial_convertr   ),r   r   r~   r   r   r   r   starts_liner   rq  r   r   r   r*  rh   r   r   r   r   r   r  r   rm   r   appendrl   r3  r'   r   r   r   r   r   r   r(   empty_checkpointr   output_instructionsr   r   r*   r   r   r    )rq   r   entrycontinue_instr   ri   ri   rj   stepn  st   




zInstructionTranslatorBase.stepc                 C   s
   t d S re   )r   current_framerp   ri   ri   rj   run_ctx_mgr  s   
z%InstructionTranslatorBase.run_ctx_mgrc                 C   s   |   m zRz#| j|  | jd ur(| jjs(|  r(	 | jd ur(| jjs(|  sW n ty1     tyF } z
tj	rA| j
 |_ d }~ww W | j  t| trW| j  n| j  t| trh| j  w w W d    d S 1 stw   Y  d S re   )r  r   push_txr   should_exitr~  r&   ra  r   replay_record_enabledexec_recorder
get_recordexec_recordpop_txr   InstructionTranslatorr  )rq   eri   ri   rj   run  sD   







"zInstructionTranslatorBase.runvalc                 C   s4   |d u st |tsJ dt| | j| d S )Nz"push expects VariableTracker, got )r   r@   r?   r   ry  )rq   r  ri   ri   rj   r     s   
zInstructionTranslatorBase.pushvalsc                 C   s   |D ]}|  | qd S re   r#  )rq   r  r  ri   ri   rj   	push_many  s   z#InstructionTranslatorBase.push_manyr   c                 C   s
   | j  S re   )r   r   rp   ri   ri   rj   r     rs   zInstructionTranslatorBase.popnc                    s*   |dksJ t t fddt|D S )Nr   c                    s   g | ]}   qS ri   r   )r5  r   rp   ri   rj   r9        z2InstructionTranslatorBase.popn.<locals>.<listcomp>)rF  reversedr  )rq   r  ri   rp   rj   r     s   zInstructionTranslatorBase.popnc                 C   s   |j }|| jv rtjr| j|| j|  |dr%|| jvr%|dd}|| 	 vs-J || jvr6t
d | | j|  |drK| j| d S d S )Nr   implicitzundefined LOAD_FAST___stack)r   f_localsr   r  r  add_local_var
startswithr   replacer4  r'   r   r   )rq   r   nameri   ri   rj   	LOAD_FAST  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r,td|j   | 	| j|j   d S )Nzundefined LOAD_DEREF )
r   r4  r  r   r  r  r  r   r'   r   r   ri   ri   rj   
LOAD_DEREF  s   z$InstructionTranslatorBase.LOAD_DEREFc                 C   s   |   | j|j< d S re   )r   r   r   r   ri   ri   rj   
STORE_FAST  s   z$InstructionTranslatorBase.STORE_FASTc                 C   s   | j |j= d S re   )r   r   r   ri   ri   rj   DELETE_FAST     z%InstructionTranslatorBase.DELETE_FASTc                 C   s   |  t|jd d S N)r  )r   rT   r   r   ri   ri   rj   LOAD_CLOSURE  rr  z&InstructionTranslatorBase.LOAD_CLOSUREc                 C   s:   t |jtr|js| tg  d S | t|jd d S )Nr   )r   r   ru   r   rS   rD   r   ri   ri   rj   r     s   z$InstructionTranslatorBase.LOAD_CONSTc                 C   s|   | j j| ju rt|}|S d| jv rt| | jd |}|S dt| j }|| j jvr5| j || j tt||}|S )Nrz   ___unnamed_scope_)	r   global_scope	f_globalsr3   r1   import_sourceidinstall_globalr2   )rq   r  sourcemangled_nameri   ri   rj   get_global_source$  s   
z+InstructionTranslatorBase.get_global_sourcec                 C   s   t jdkr|jd r| | |j}tjr5|| jv r%| j	|| j|  n|| j
v s,J | j
| | jj|< |jdkr>td || jv rY| jj| j|  }| | jj|| d S z| j| }W n tyn   | | Y S w | |}| t| || d S )Nr      r   assert with non-string message)r   r   r  	PUSH_NULLr   r   r  r  r  add_global_var
f_builtinsbuiltinsr'   r&  r   r   r   load_globalKeyErrorload_builtinr  rA   )rq   r   r  variabler   r  ri   ri   rj   r   3  s,   






z%InstructionTranslatorBase.LOAD_GLOBALc                 C   sZ   |   }|j}| |}|| jvrt | j|< | jj|| j| }| jj||| d S re   )	r   r   r  r&  objectr   r   track_global_existingstore_global)rq   r   r   r  r  r  ri   ri   rj   STORE_GLOBALQ  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>r   <r   _dot_	__import_)r   packagepackage_importer_package_imported_modulesr  	importlibimport_moduler   r  update_co_namesr3   )rq   module_namer   aliasr  ri   ri   rj   r  \  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)rq   r  r  levelbitsr\  ri   ri   rj   resolve_namen  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__rz   __path__r   r   )r  getparentrh   warning
rpartition)rq   r  specri   ri   rj   calc_packagez  s*   

z&InstructionTranslatorBase.calc_packagec           
      C   s$  |  d\}}| }| }|j}tj d| d| d| }|| jv r/| j| }t|}n,t|||| jd}|dkrG|  }| 	|||}|sV|
dd }	| |	}n| |}tjre| j|| t|rt| t||d d S t|tjtfr| t||d d S tdt|  d S )Nr  r   )fromlistr  globalsr   r   )r  zIMPORT_NAME )r   r   r   r.   LOCAL_MOD_PREFIXr  r3   
__import__r  r  	partitionr  r   r  r  add_local_modr   r   r_   r:   types
ModuleTyper-   rX   r'   r?   )
rq   r   r  r  r  recorded_namer   r  pkgtop_level_module_nameri   ri   rj   IMPORT_NAME  s:   



z%InstructionTranslatorBase.IMPORT_NAMEc                 C   s   |  | | | d S re   )DUP_TOP	LOAD_ATTRr   ri   ri   rj   IMPORT_FROM     
z%InstructionTranslatorBase.IMPORT_FROMc                 C   sp   |j | jvrtd|j  d| j|j  }t|r(| t| t|j | d S t|s.J | t|d d S )Nzname 'z' is not definedr  )	r   r  	NameErrorrL  r   rA   r3   r   rD   )rq   r   r  ri   ri   rj   r    s   z&InstructionTranslatorBase.load_builtinc                 C   s   | j |j | _d S re   )indexofrm   r   r   ri   ri   rj   r        zInstructionTranslatorBase.jumpFTc                 C      | j t|j d S re   r   ry  rl   rm   r   ri   ri   rj   
SETUP_LOOP     z$InstructionTranslatorBase.SETUP_LOOPc                 C   r  re   r  r   ri   ri   rj   SETUP_EXCEPT  r  z&InstructionTranslatorBase.SETUP_EXCEPTc                 C   s   | j   d S re   )r   r   r   ri   ri   rj   	POP_BLOCK  r  z#InstructionTranslatorBase.POP_BLOCKc                 C      |  | d S re   setup_or_before_withr   ri   ri   rj   
SETUP_WITH  r  z$InstructionTranslatorBase.SETUP_WITHc                 C   r  re   r  r   ri   ri   rj   SETUP_FINALLY  rr  z'InstructionTranslatorBase.SETUP_FINALLYc                 C   s   |  d  d S re   r#  r   ri   ri   rj   BEGIN_FINALLY  r  z'InstructionTranslatorBase.BEGIN_FINALLYc                 C   sF   |  d\}}|d u sJ | | | || td gd i  d S )Nr  r   )r   r   r   rD   )rq   r   rw   r   ri   ri   rj   WITH_CLEANUP_START  s   
"z,InstructionTranslatorBase.WITH_CLEANUP_STARTc                 C   s   |  d | d  d S )Nr  )r   r   r   ri   ri   rj   WITH_CLEANUP_FINISH  r  z-InstructionTranslatorBase.WITH_CLEANUP_FINISHc                 C   s   |   }|d u s
J d S re   r  rq   r   tosri   ri   rj   END_FINALLY  s   z%InstructionTranslatorBase.END_FINALLYc                 C   s8   |j }|r	|  }|  d u sJ |r| | d S d S re   )r   r   r   )rq   r   preserve_tosr  ri   ri   rj   POP_FINALLY  s   z%InstructionTranslatorBase.POP_FINALLYc                 C   s   |   }t|tr:| jj|j z| \}}| || | | | | W d S  t	y9   | 
| Y d S w tdt|  d S )Nz	FOR_ITER )r   r   rO   r   r   r   next_variablesr^  r   StopIterationr   r'   r?   )rq   r   itr  	next_iterri   ri   rj   FOR_ITER	  s   

z"InstructionTranslatorBase.FOR_ITERc              	   C   sT  |  d\}}|| }|| }t||g}|j}ttt	 t
	 }t|tttttttfrUt|trU|jd u rU|t
v rU| tt
| t |jfi | d S | rw| rw||v rw| t|| | | fi | d S |dv r| || d|gi  |dkr| | d S d S | t|| fi || ||gi  d S )Nr  )innot in__contains__r   )r   as_specializedr@   r   r   rG  rI  rJ  r\   r>  r[   r   r^   r]   rZ   rN   ra   rJ   rI   rD   r   r   r  r   r   call_method	UNARY_NOTrC   r   )rq   r   leftrightoptionsopsupported_anyri   ri   rj   
COMPARE_OP  st   



z$InstructionTranslatorBase.COMPARE_OPc                 C   s   |  tt|  gi  d S re   )r   rC   iterr   r   ri   ri   rj   GET_ITERT     z"InstructionTranslatorBase.GET_ITERr   r#  c                 C   s&   |  |j}|  }| ||i  d S re   r   r   r   r   )rq   r   rA  r   ri   ri   rj   r   W  s   z'InstructionTranslatorBase.CALL_FUNCTIONc                 C   s*  |j dkrti t}|  }n|j dkr|  }|  }ntd |  }tjdkr5|  }t|ts5J | j	j
|j
 | j	j
|j
 t|trat|jtra|jdkrat|ttfrat|g}t|tsr|| rrt|| }t|tr|t|tstdt| dt|  | ||j|j d S )Nr   r   CALL_FUNCTION_EXr   viewznon-static call rd  )r   rI   rG  r   r'   r   r   r   rW   r   r   r   rU   objr^   r  rD   rS   rN   r   r   r?   r   r>  )rq   r   
kwargsvarsargsvarsr   nullri   ri   rj   r  ]  s@   








z*InstructionTranslatorBase.CALL_FUNCTION_EXc                 C   s   |   }| |j}|   }t|tsJ |j}|d t|  |t| d  }}tt||}t|t|ks<J | 	||| d S re   )
r   r   r   r   rD   r   r   rG  zipr   )rq   r   argnamesrA  r   kwargs_listrB  ri   ri   rj   CALL_FUNCTION_KW  s   &z*InstructionTranslatorBase.CALL_FUNCTION_KWc                 C   sL   |  | |  }tjdkr| | | | d S | | | d  d S )Nr   )r  r   r   r   r  r   rq   r   r  ri   ri   rj   LOAD_METHOD  s   



z%InstructionTranslatorBase.LOAD_METHODc                 C   s:   |  |j}|  }|d u sJ |  }| ||i  d S re   r  )rq   r   rA  dummyr   ri   ri   rj   CALL_METHOD  s
   z%InstructionTranslatorBase.CALL_METHODc                 C   s2   |   }tt| |t|jgi }| | d S re   )r   rC   r   r   rD   r   r   )rq   r   r  r   ri   ri   rj   r    s
   z#InstructionTranslatorBase.LOAD_ATTRc              
   C   s  |   }| d\}}t|tr| jrJ d|j dz| jjt	t
| |t|j|gi j W d S  ty` } z |  sA tjddd |  |d | | W Y d }~nd }~ww | jj| td|  gd	 | jt|g | d | j| | j d S )
Nr  zMutating module attribute z during export.zSTORE_ATTR triggered compileTr   r   
store_attrr   )r   r   r   rZ   exportr   r   r   r   rC   setattrr   rD   r(   r   rh   r   r   r
  r   r   r*   r   r   r  r   r   )rq   r   priorr  r  r  ri   ri   rj   
STORE_ATTR  s>   

	

z$InstructionTranslatorBase.STORE_ATTRc                 C   s4   |   }| jjtt| |t|jgi j d S re   )	r   r   r   r   rC   delattrr   rD   r   r  ri   ri   rj   DELETE_ATTR  s   z%InstructionTranslatorBase.DELETE_ATTRc                 C      t dt|  )Nz1create_call_resume_at not overridden by subclass r   typerq   r-  ri   ri   rj   r        z/InstructionTranslatorBase.create_call_resume_atc                 C   r$  )Nz8should_compile_partial_graph not overridden by subclass r%  rp   ri   ri   rj   r     r(  z6InstructionTranslatorBase.should_compile_partial_graphr   c                 C   s8   |  d\}}}|| d||gi }| jj|j d S )Nr   __setitem__)r   r  r   r   r   )rq   r   r  r  keyr   ri   ri   rj   STORE_SUBSCR  s   z&InstructionTranslatorBase.STORE_SUBSCRc                 C   s0   |  |j}t|}| t|fi | d S re   )r   r   r@   r   r   rS   rq   r   r>  r  ri   ri   rj   BUILD_TUPLE  s   
z%InstructionTranslatorBase.BUILD_TUPLEc                    s>     |j}t|} t fdd|D fi | d S )Nc                    s   g | ]}|  qS ri   )r  rC  rp   ri   rj   r9        z9InstructionTranslatorBase.BUILD_SLICE.<locals>.<listcomp>)r   r   r@   r   r   rR   r,  ri   rp   rj   BUILD_SLICE  s   
z%InstructionTranslatorBase.BUILD_SLICEc                 C   s6   |  |j}t|}| t|fdt i| d S NrP  )r   r   r@   r   r   rP   r>   r,  ri   ri   rj   
BUILD_LIST  s   
 z$InstructionTranslatorBase.BUILD_LISTc                 C   sJ   t jrtd | |j}t|}t| |fdt i|}| 	| d S )Nzmissing: BUILD_SETrP  )
r   +inject_BUILD_SET_unimplemented_TESTING_ONLYr'   r   r   r@   r   rQ   r>   r   )rq   r   r>  r  new_setri   ri   rj   	BUILD_SET  s   
z#InstructionTranslatorBase.BUILD_SETc              	   C   sz   |  |j}t|}t }|D ]}z
|||  W q ty,   td|  Y qw | 	||fdt
 i| d S )NzBUILD_LIST_UNPACK rP  )r   r   r@   r   rF  extendr   NotImplementedErrorr'   r   r>   )rq   r   clsseqsr  r>  seqri   ri   rj   BUILD_LIST_UNPACK  s   
 z+InstructionTranslatorBase.BUILD_LIST_UNPACKc                 C   s   | j |td d S )N)r7  )r:  rS   r   ri   ri   rj   BUILD_TUPLE_UNPACK  r  z,InstructionTranslatorBase.BUILD_TUPLE_UNPACKc                 C   s   |  |jd }t|}t }t|d d d |dd d D ]\}}t|ttt	fs7t|t
r5|jd us7J ||t|< qt|t|d ksKJ | t|tfdt i| d S )Nr  r   rP  )r   r   r@   r   rG  r  r   rD   rE   rC   r^   specialized_valuerI   get_keyr   r   r>   )rq   r   r>  r  r   r   r6  ri   ri   rj   	BUILD_MAP  s   
&z#InstructionTranslatorBase.BUILD_MAPc                    sp     |j} fdd|D }t }|D ]}t|tsJ ||j q t|tfdt it	
| d S )Nc                    s    g | ]}t t |gi qS ri   )rC   rG  r   rC  rp   ri   rj   r9  '  r:  z>InstructionTranslatorBase.BUILD_MAP_UNPACK.<locals>.<listcomp>rP  )r   r   rG  r   rI   r   r>  r   r>   r@   r   )rq   r   r>  r   r   ri   rp   rj   BUILD_MAP_UNPACK$  s    z*InstructionTranslatorBase.BUILD_MAP_UNPACKc                 C   s   |   }| |j}t|g| }t|tsJ |j}t|t	s#J t
|t
|ks-J | ttt||tfdt i| d S r0  )r   r   r   r@   r   r   rD   r   r:   ru   r   r   rI   rG  r  r>   )rq   r   keysrK  r  ri   ri   rj   BUILD_CONST_KEY_MAP7  s"   z-InstructionTranslatorBase.BUILD_CONST_KEY_MAPc                 C   s   |  d\}}|jdksJ | j|j  }t|tsJ |js!J t|j}|||	 < | 
|t||jfi t|||g d S )Nr  r   )r   r   r   r  r   rI   rP  rG  r>  r   r^  user_clsr@   r   )rq   r   r   r6  r  r>  ri   ri   rj   MAP_ADDH  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   r   r  r   rQ   rP  r  rq   r   r6  r  ri   ri   rj   SET_ADDY  s   
z!InstructionTranslatorBase.SET_ADDc              
   C   s   |   }|jdksJ | j|j  }t|tsJ |jsJ |j}|js'|jr7|j|j}|jr7|	|j | 
|t|j|g f|ddt||g d S )Nr   F)rS  regen_guards)r   r   r   r  r   rP   rP  rS  unionr	  r^  r>  r@   r   )rq   r   r6  r  new_rec_containsri   ri   rj   LIST_APPENDa  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	d}d }d }d }d }	|d@ r9|  }|d@ rA|  }|d@ rI|  }	|d@ rQ|  }t
|t| jd  }
| t||| j||	||fd| i|
 d S )	Nr   co_qualnamer        r  r   closure_scope)r  rF  r   r   r   r   r3  r   rD   rJ  r@   r   r   r   rK   r  )rq   r   flags	old_stackfn_namecodedefaultsclosureannotations
kwdefaultsr  ri   ri   rj   MAKE_FUNCTIONy  sH   


	z'InstructionTranslatorBase.MAKE_FUNCTIONc                    s     }t|ttfrjj|j |}nN| r(t|t	r(|}n?t|t
r8|jt|jd}n/t|tr`t|jt
r`t|j |jt  fddt|jD }ntd|  t||jkspJ t|D ]}| qtd S )N)idxesc                    s"   g | ]}t | fi  qS ri   )rB   )r5  ir  proxyrq   ri   rj   r9    s   " z=InstructionTranslatorBase.UNPACK_SEQUENCE.<locals>.<listcomp>zUNPACK_SEQUENCE )r   r   rN   rQ   r   r   r   r   r   rD   r^   r  r   rU   r  r   as_proxyr  r@   r   r'   r   r  r   )rq   r   r9  r  rX  ri   rY  rj   UNPACK_SEQUENCE  s"   

z)InstructionTranslatorBase.UNPACK_SEQUENCEc                 C   s  d|j   krdksJ  J |j d@ }|j d? }|  }t|}|| r}t|| }t||| ks8J |d | }||t||  }|t|| d  }	t|	D ]
}
| 	|

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

| qpd S td|  d S )Nr   i     rK  z
UNPACK_EX )r   r   r@   r   r   rF  r   r   r  r   add_optionsrS   r'   )rq   r   r   suffixr9  r  r  vals_prefix	vals_listvals_suffixitemri   ri   rj   	UNPACK_EX  s$   



z#InstructionTranslatorBase.UNPACK_EXc                 C      d S re   ri   r   ri   ri   rj   rs       zInstructionTranslatorBase.NOPc                 C      |    d S re   r  r   ri   ri   rj   POP_TOP  ry   z!InstructionTranslatorBase.POP_TOPc                 C   s(   |   }|   }| | | | d S re   r   r   rq   r   ar  ri   ri   rj   ROT_TWO  s   
z!InstructionTranslatorBase.ROT_TWOc                 C   s:   |   }|   }|   }| | | | | | d S re   ri  )rq   r   rk  r  cri   ri   rj   	ROT_THREE  s   

z#InstructionTranslatorBase.ROT_THREEc                 C   sL   |   }|   }|   }|   }| | | | | | | | d S re   ri  )rq   r   rk  r  rm  dri   ri   rj   ROT_FOUR  s   


z"InstructionTranslatorBase.ROT_FOURc                 C   s    |   }| | | | d S re   ri  )rq   r   rk  ri   ri   rj   r    s   
z!InstructionTranslatorBase.DUP_TOPc                 C   s<   |   }|   }| | | | | | | | d S re   ri  rj  ri   ri   rj   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r3tt| |gi }n!|d@ dkrDtt	| |gi }n|d@ dkrTtt
| |gi }td|  d |}| ttj||gi  d S )NrL  r   r   r   r  z{:})r  r   rD   r   r]   r   sym_numrC   r   reprasciir   r^  format)rq   r   rN  fmt_specr   fmt_varri   ri   rj   FORMAT_VALUE  s&   

z&InstructionTranslatorBase.FORMAT_VALUEc                 C   sH   d}t |jD ]}|  }t|tsJ |j| }q| t|d d S )Nr   r  )r  r  r   r   rD   r   r   )rq   r   r   r   str_varri   ri   rj   BUILD_STRING  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
  )rq   r   
new_argvalnew_instri   ri   rj   IS_OP  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  r  )r   r   r   r  r  )rq   r   r  r  r  ri   ri   rj   CONTAINS_OP  s   z%InstructionTranslatorBase.CONTAINS_OPc                 C   R   |   }|jdksJ | j|j  }t|tsJ |jsJ || d|gi  d S )Nr   r5  )r   r   r   r  r   rP   rP  r  rD  ri   ri   rj   LIST_EXTEND$     
z%InstructionTranslatorBase.LIST_EXTENDc                 C   s"   |  tt| |  gi  d S re   )r   rC   ru   r   r   r   ri   ri   rj   LIST_TO_TUPLE,  s   "z'InstructionTranslatorBase.LIST_TO_TUPLEc                 C   r  )Nr   r   )r   r   r   r  r   rI   rP  r  rD  ri   ri   rj   
DICT_MERGE/  r  z$InstructionTranslatorBase.DICT_MERGEc                 C   rg  re   r  r   ri   ri   rj   	GEN_START9  ry   z#InstructionTranslatorBase.GEN_STARTc                 C   sF   | j d }| r| tt|  d S | || dg i  d S )Nr   r   )r   r   r   rD   r   r   r  r  ri   ri   rj   GET_LEN<  s   
z!InstructionTranslatorBase.GET_LENc                 C   sL   | j d }t|tsJ t|jtjjr| td d S | td d S Nr   TF)	r   r   rI   r>  r<  abcMappingr   rD   r  ri   ri   rj   MATCH_MAPPINGC  s
   
z'InstructionTranslatorBase.MATCH_MAPPINGc                 C   s`   | j d }| sJ | }t|tjjr't|ttt	fs'| 
td d S | 
td d S r  )r   r   r   r   r<  r  Sequencer   bytes	bytearrayr   rD   )rq   r   r  	tos_valueri   ri   rj   MATCH_SEQUENCEK  s   

z(InstructionTranslatorBase.MATCH_SEQUENCEc                    s   | j d }| sJ | }| j d }t|tsJ |j t fdd|D rG| t fdd|D  t	j
dk rE| td d S d S | td  t	j
dk r\| td	 d S d S )
Nr   rt  c                 3   s    | ]}| v V  qd S re   ri   r5  r*  	match_objri   rj   rD  ]      z7InstructionTranslatorBase.MATCH_KEYS.<locals>.<genexpr>c                    s   g | ]} | qS ri   ri   r  r  ri   rj   r9  ^  r  z8InstructionTranslatorBase.MATCH_KEYS.<locals>.<listcomp>r   TF)r   r   r   r   rI   r>  rH  r   rS   r   r   rD   )rq   r   r  r@  tos1ri   r  rj   
MATCH_KEYSV  s   



z$InstructionTranslatorBase.MATCH_KEYSc                 C      t d d S )Nr  r'   r   ri   ri   rj   r   f  ry   z.InstructionTranslatorBase.LOAD_ASSERTION_ERRORc                 C   s,   |j dkr| | d| _d S | jrJ d S )Nr   F)r  append_prefix_instr'  r   ri   ri   rj   RESUME  s   


z InstructionTranslatorBase.RESUMEc                 C   sd   t jdkr,tj|j d dd  }|dr#t| d|dd   |S t| d| |S td d S )	Nr   r   r   INPLACEINPLACE_rK  BINARY_zBINARY_OP requires Python 3.11+)r   r   r  _nb_opsr  r  r   r'   )rq   r   r   ri   ri   rj   	BINARY_OP  s   

z#InstructionTranslatorBase.BINARY_OPc                 C   re  re   ri   r   ri   ri   rj   r     rf  z!InstructionTranslatorBase.PRECALLc                 C   sT   | j d |j }t|tsJ |D ]	}t|tsJ q| jd u s"J t|d| _d S )N	co_constsr  )r  r  r   ru   r   r  rD   )rq   r   r  r  ri   ri   rj   r     s   z"InstructionTranslatorBase.KW_NAMESc                 C   s   |  t  d S re   )r   rW   r   ri   ri   rj   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   ri   )
r   r  r   rW   r  r   r   rG  r  r   )rq   r   contentsr   rA  r  r  rB  ri   ri   rj   r     s    

zInstructionTranslatorBase.CALLc                 C   s   |  | j|j   d S re   )r   r   r  r   ri   ri   rj   COPY  s   zInstructionTranslatorBase.COPYc                 C   s.   | j |j  | j d | j d< | j |j < d S Nr   )r   r  r   ri   ri   rj   SWAP  s   .zInstructionTranslatorBase.SWAPc                 C   re  re   ri   r   ri   ri   rj   CACHE  rf  zInstructionTranslatorBase.CACHEc                 C   r  re   r  r   ri   ri   rj   BEFORE_WITH  r  z%InstructionTranslatorBase.BEFORE_WITHc                 C   s   |   }|  }t|tst|j d|  t|tr"| j| | j	j
|j
 t||jfi t|}tjdkrM| jsAJ | jjsGJ | jjj}n|j}t| trc| jt|t| j| n| jt| | | | ||  d S )Nrd  r   )r   r   r   rF   r'   r   rG   r   ry  r   r   r   rH   rm   r@   r   r   r   r   r  r  r   rl   r   r   r   enter)rq   r   r   r  rw   rm   ri   ri   rj   r    s.   





z.InstructionTranslatorBase.setup_or_before_withc                 C   s   | j sJ | j| d S re   )r'  r(  ry  r   ri   ri   rj   r    s   
z,InstructionTranslatorBase.append_prefix_instc                 C   r  re   r  r   ri   ri   rj   	MAKE_CELL  r  z#InstructionTranslatorBase.MAKE_CELLc                 C   r  re   r  r   ri   ri   rj   COPY_FREE_VARS  r  z(InstructionTranslatorBase.COPY_FREE_VARSc                 C   r  re   r  r   ri   ri   rj   RETURN_GENERATOR  r  z*InstructionTranslatorBase.RETURN_GENERATORc              	   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)r   r   r   r<  r=  r   rF  r   r   r   r   r   r   rp   ri   ri   rj   r     s   
z)InstructionTranslatorBase.copy_graphstater   c                 C   s2   |\}| _ | _| _| _| _| _| _| j| dS )z6Restore a checkpoint created by self.copy_graphstate()N)	r   r   r   r   r   r   r   r   r   )rq   r   output_stateri   ri   rj   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r0t|dkr0 dS q dS )NTr   r   F)r*  r   r   r   )rq   output_graphstate
graphstater   r  ri   ri   rj   rz     s   

z*InstructionTranslatorBase.empty_checkpointc                 C   s.   |d u rg }d t|  gtt| S )Nr   )r  r  r  r   rF  r  )rq   additional_stack_framesri   ri   rj   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  FrameSummaryr   r   r   rp   ri   ri   rj   r   5  s   z'InstructionTranslatorBase.frame_summaryc                 C   sB   | j jt|tj || j jvr| j |t	
| d S d S re   )r   r   r	  r4   
make_guardr)   WEAKREF_ALIVEr  r  weakrefref)rq   r  r   ri   ri   rj   store_dict_key=  s   z(InstructionTranslatorBase.store_dict_keyc                 C   s   | j S re   )
_fake_moderp   ri   ri   rj   	fake_modeD  s   z#InstructionTranslatorBase.fake_modec                 C   s(   | j  D ]\}}||u r|  S qd S re   )r   r>  )rq   tensor_variabler*  r   ri   ri   rj   find_symbolic_locals_nameH  s
   z3InstructionTranslatorBase.find_symbolic_locals_namec                 c   s$    d| _ z	d V  W d| _ d S d| _ w r,  )strict_checks_enabledrp   ri   ri   rj   strict_translation_modeN  s
   z1InstructionTranslatorBase.strict_translation_moder   r  r  r  r  r   r  c                    s,  t    || _|| _|| _g | _d| _td| _d | _	g | _
g | _|d | _d | _d| _g | _|| _t| j| _|| _|| _|| _|| _|	| _t|	|d| _i | _|
| _|jj| _d | _g | _ d| _!t"j#dkrdd	l$m%}m&}m'}m(} |	j)||B |B |B @ r| *t+d  || _,t-.|	j/| | 0  d S )
Nr   rs  co_firstlinenoT)rQ  r  F)r   
   r   )CO_ASYNC_GENERATORCO_COROUTINECO_GENERATORCO_ITERABLE_COROUTINE)1super__init__r   r   r&  r   r   r   r   r   r   r   r   r  r'  r(  r   r   r  r  r  r  r  r   r.   r  nn_module_stackr  tracing_contextr  r  r*  r+  r  r   r   resume_executionr  r  r  r  co_flagsr   rC   r)  ri  	lazycacher   rq  )rq   r   r   r  r  r  r  r   r&  r   r  r)  r  r  r  r  	__class__ri   rj   r  V  sL   




z"InstructionTranslatorBase.__init__re   )rz   r{   r|   r+   r}   r   r   r@   r   r   r~   r!   rl   rD   r   r
   r   r   r  r   r4  r@  r   rY  r^  rb  rg  rn  rq  r~  r  r  r   r  r   r   r  r  r  r  STORE_DEREFr  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  r  r  r  r  r
  r  r%  r   r  r  r  r  r  r!  r#  r   r   r+  r-  r/  r1  r4  rP   r:  r;  BUILD_TUPLE_UNPACK_WITH_CALLr>  r?  BUILD_MAP_UNPACK_WITH_CALLrA  rC  rE  rI  rV  r\  rd  rs  rh  rl  rn  rp  r  rq  ry  r{  r  r  r  r  r  DICT_UPDATEr  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_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  JUMP_BACKWARD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   rz  r  r   r  propertyr  r  
contextlibcontextmanagerr  r   r  CodeTyper  __classcell__ri   ri   r  rj   r     s  
 $


	Y
.=

'
$

(
	































	
!
	





	
c                       sp   e Zd ZU ee ed< dee dee f fddZdd Z	 fddZ
d	d
 Zdd Zdd Zdd Z  ZS )r  mutated_closure_cell_contentsr   c                    sN  t  tjd|j d|d  d|d   t jt|||	|
|||d	||||t t ||	dd t	j
jb |_|	_|_jrOjsOJ d	t|d
 fdd D }| t| t fddD _  t _jd D ]}|v rt| j|< qW d    d S 1 sw   Y  d S )Nztorchdynamo start tracing rd  r   re  r  )local_scoper  r   r   )r   r   r  r  r  r  r   r&  r   r  r)  z4Export without one graph - something has gone wrong.co_varnamesc                    s   g | ]}| vr|qS ri   ri   rC  )varsri   rj   r9        z2InstructionTranslator.__init__.<locals>.<listcomp>c                 3   s:    | ]}|v r|t t|| v d | fV  qdS ))cell_or_freevarN)rA   r5   r5  r   )cells_and_freevars_setr  rq   ri   rj   rD    s    z1InstructionTranslator.__init__.<locals>.<genexpr>r2  )rk   r   INFOr   r  r  r+   r<  r=  r   r   r  	one_graphr  r   rF  r4  r5  r;  r   init_local_index_guards_hackrG  _freevars_idsr  r  )rq   r   r   r  r  r  r  compiler_fnr)  r  export_constraintsr   frame_statecells_and_freevarsr  r  )r'  r  rq   r#  rj   r    sf   

"zInstructionTranslator.__init__c                 C   sN   | j  D ]}t|tttfr$t|d }dd |D }| jj	
| qd S )Nr   c                 S   s*   g | ]}|j tjtjtjtjfv r|qS ri   )	create_fnr)   LIST_LENGTH	DICT_KEYS
ODICT_KEYSTUPLE_ITERATOR_LEN)r5  guardri   ri   rj   r9    s    zFInstructionTranslator.init_local_index_guards_hack.<locals>.<listcomp>)r   rK  r   rO   rN   rI   r@   r   r   r   r   )rq   r  local_guardsindex_guardsri   ri   rj   r*    s   
z2InstructionTranslator.init_local_index_guards_hackc                    s   t    d S re   )r  r  rp   r  ri   rj   r    r  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  r+  r  r   )rq   r  cellr   ri   ri   rj   match_nested_cell  s   
z'InstructionTranslator.match_nested_cellc                 C   s   t dd | jD o| j S )Nc                 s       | ]}|  V  qd S re   )rr   r5  r  ri   ri   rj   rD  %  r  zEInstructionTranslator.should_compile_partial_graph.<locals>.<genexpr>)rH  r   r)  rp   ri   ri   rj   r   $  r  z2InstructionTranslator.should_compile_partial_graphc                    s  d _ |jdkrtdgS tj|tfddj D }t g }t	j
dkrttjD ]\}}t|tr@|| q2d}ttjD ])\}}t|trstd|d | D ]} td|d q\    |d	7 }qJtjt| }|t| }	td
|j }
tjj|jtdd jD ||tdd jD t|}|jr |
|d| nj |
t!"|j#|
   $|
d|   fdd|D   t%|	d  td  & S )Nru  c                 3   s(    | ]}| v r|  vr|V  qd S re   )r4  r&  )r8  rq   ri   rj   rD  .  s    z>InstructionTranslator.create_call_resume_at.<locals>.<genexpr>r   r   r  r  )r  r   __resume_at_c                 s   s    | ]}|j jV  qd S re   )rm   r-  r<  ri   ri   rj   rD  U  r  c                 s   r;  re   )rv   r<  ri   ri   rj   rD  X  r  Tc                    s   g | ]}  |qS ri   )create_loadr&  )r  ri   rj   r9  d  r.  z?InstructionTranslator.create_call_resume_at.<locals>.<listcomp>F)'r   r   r   r   r   ru   r   r@  r$   r   r   	enumerater   r   rW   ry  r  r  append_outputextend_outputpop_nullr   r#   r-  r/   lookupr   r   r   r2  make_function_with_closurer   r  r  FunctionTyper  load_function_namer   get_instructions)rq   r   r  
null_idxesrX  varnull_cntj	stack_lenr   r  new_coderi   )r  r8  rq   rj   r   '  sZ   





z+InstructionTranslator.create_call_resume_atc                 C   s~   | j  dkr| jstdd | _t tjd| j	j
 d td | j j| td|  gdd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 compilereturn_valueF)r   r   ru  )r   count_callsr  r   r   r   rk   r   r(  r   r   rh   r   r   r*   r   r   r   r   ri   ri   rj   ru  i  s   

z"InstructionTranslator.RETURN_VALUE)rz   r{   r|   r	   r   r}   r   r!   r  r*  r  r:  r   r   ru  r  ri   ri   r  rj   r    s   
 O$Br  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ed ef 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w   Y  d S )Nr'   r`  )r   rG  r6   inline_call_)r7  r  funcrA  rB  ri   ri   rj   r`    s   $z)InliningInstructionTranslator.inline_callc                 C   s  |   rtd |  dkrtd zt|  tjv r%td|    W n	 ty/   Y nw t	| 
 rlt| 
 slddlm}m}m} t| jdrY| jj|||fv rYd S td| jj d	|   d
| 
   t| trt|  ddrtd|    d S d S d S )Nzinline with __self__patched_initzPatched init cannot be inlined.zinlining disallowed: r   )!produce_trampoline_autograd_applyproduce_trampoline_autograd_bwdproduce_trampoline_autograd_fwd_originzinline in skipfiles: z  | rd  _torchdynamo_disableFz.call torch._dynamo.disable() wrapped function )has_selfr'   get_namer  get_functionr   _disallowed_function_idsr6  r   checkget_filenameis_torch_inline_allowedtorch._dynamo.variables.miscrT  rU  rV  r3  r   rW  r|   r   rL   r   getattr_static)rR  rT  rU  rV  ri   ri   rj   check_inlineable  sB    
z.InliningInstructionTranslator.check_inlineablerR  rA  c                    s  t |ttfs	J t| z|| ||\}}W n. tyG } z"tdjt	|d|
  d|  d| j dd |D |dd }~ww t| | D ]}t |ts`td|  qR|   jd	v rrt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 | t& rt'|  || j(||}
n
t|  || j(||}
t)* }| j+r|
, }z| |
-  W d    n1 sw   Y  W n3 t.j/y } zd  d| }t%#| t0||d }~w t1y  } zt%#d   d }~ww |
j2d us)J |3| |
 |
j4| j4u r=| j(5|
j( t%#d  t& rjt |
t'sPJ |
j26 d u sZJ t7|
j8fdt9 it:|
j2S |
j2S )Nz;{reason}.
  func = {func}, args = {args}, kwargs = {kwargs}'z' re  c                 S   s   g | ]}|  qS ri   )python_type)r5  r  ri   ri   rj   r9    r  z>InliningInstructionTranslator.inline_call_.<locals>.<listcomp>)r   rR  rA  rB  zunconverted arg )r)  __setattr__zinline r   output_coderh  r   )r   c                     s&   t  } d j d d|  S )NzTRACE inlined call z from rh  )r8   rk  r   )rm  rQ  cur_instheaderparent_coderi   rj   get_trace_call_log_str  s   zJInliningInstructionTranslator.inline_call_.<locals>.get_trace_call_log_strro  zINLINING %s%szSKIPPED INLINING z: zFAILED INLINING %szDONE INLINING %srP  );r   rL   rK   r_  rb  	bind_args	TypeErrorr%   rv  r   rZ  r^  get_coder  rI  rJ  rK  r@   r'   r   r   _logging	_internal	log_stateis_artifact_enabledr  Bytecoder   r   r   r   rg  	positionsr   trace_call_logr   r;   rh   r"   &InliningGeneratorInstructionTranslatorr&  r  nullcontextr  r  r  r   r   r(   ra  rP  export_freevarsr  r   r   rO   generated_itemsr>   r   )r  rR  rA  rB  
sub_localsclosure_cellsr  r6  r_  rk  tracer
strict_ctxr   ri   rg  rj   rQ    s   
"







z*InliningInstructionTranslator.inline_call_r  rQ  r   r&  r{  funcvarc           	         s   |  }|d }t|ts|j}t j|ji ||||t  fddt D  |j	|j
d d || _d | _|| _|j | _d S )N__builtins__c                    s   i | ]}|t  |qS ri   )r   r&  rQ  ri   rj   
<dictcomp>	  r$  z:InliningInstructionTranslator.__init__.<locals>.<dictcomp>r   )r   r  r  r  r   r&  r   r  r   r  r)  )get_globalsr   rG  __dict__r  r  r   r   dirr  r)  r  rP  r{  r  r  )	rq   r  rQ  r   r&  r{  r~  r  r  r  r  rj   r  
	  s*   	
z&InliningInstructionTranslator.__init__c                 C   s   | j jS re   )r  r  rp   ri   ri   rj   r  )	  s   z'InliningInstructionTranslator.fake_modec                 C   s   t | j S re   )r   r  r  r   rp   ri   ri   rj   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rl|j
 | jjjvrl| jjj|j
  t td d S )NzSHigherOrderOperator: Mutating a variable not in the current scope (ClosureVariable)z#write to __closure__ while inlining)r   r{  r   r   rT   r   is_root_tracerr'   root_txr   r  r   
store_cellr  r   NewCellVariabler  r   r	  r   RestartAnalysis)rq   r   r9  r  
maybe_cellri   ri   rj   r  0	  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 re   )r   r{  r   rT   r   r   r  r   r  r   	load_cellr  r   r  r  r  )rq   r   r9  maybe_sym_localr  ri   rj   r  W	  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   r4  r{  r   rV   r   ri   ri   rj   r  e	  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=   rP  r'   )rq   rM  ri   ri   rj   check_replace_is_safel	  s
   
z3InliningInstructionTranslator.check_replace_is_saferM  rN  c                    sF   |  | t ||}| }t|dr!|j}||| t|ds|S )Nr  )r  r  r^  r3  r  rY  )rq   rM  rN  
translatorr  ri   rj   r^  r	  s   


z)InliningInstructionTranslator.replace_allc                 C   s   dS )NFri   rp   ri   ri   rj   r   |	  rf  z:InliningInstructionTranslator.should_compile_partial_graphc                 C   r  )Nzcant resume while inliningr  r'  ri   ri   rj   r   	  ry   z3InliningInstructionTranslator.create_call_resume_atc                 C   s   |   | _d | _d S re   )r   rP  r   r   ri   ri   rj   ru  	  s   

z*InliningInstructionTranslator.RETURN_VALUE)!rz   r{   r|   __doc__r   r^   r}   classmethodr`  staticmethodrb  r@   r   rQ  r   r  r  r   r   rJ   r  r  r  r  r  r  r  r  r^  r   r   ru  r  ri   ri   r  rj   r_  {  sJ   
 

*Y



'
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 )rv  ry  c                    s   t  j|i | g | _d S re   )r  r  ry  )rq   rA  rB  r  ri   rj   r  	  s   
z/InliningGeneratorInstructionTranslator.__init__r   c                 C   s"   | j |   | td  d S re   )ry  ry  r   r   rD   r   ri   ri   rj   YIELD_VALUE	  s   z2InliningGeneratorInstructionTranslator.YIELD_VALUEc                 C   sD   | j d }t|ts|   tt| |gi }| | | |S r  )	r   r   rO   r   rC   r  r   r   
YIELD_FROM)rq   r   r  resri   ri   rj   GET_YIELD_FROM_ITER	  s   



z:InliningGeneratorInstructionTranslator.GET_YIELD_FROM_ITERc                 C   s   	 | j d }t|tr|jd u r|   d S t|trO| jj|j z!|	 \}}| 
|| | | | | |   | | W n tyN   Y d S w tdt|  q)NTr   zYIELD_FROM )r   r   rD   r   r   rO   r   r   r   r  r^  r   r  r  r'   r?   )rq   r   r  r  r  ri   ri   rj   r  	  s&   



z1InliningGeneratorInstructionTranslator.YIELD_FROMc                 C   s   t | jdks	J |  }| jd }t|tr5t|tr/|jd u r/| | | j|j	 | _
d S td d S tdt|  d S )Nr  r   zUnreachable sub-generator codezSEND )r   r   r   r   rO   rD   r   r   r  rm   r   r'   r?   )rq   r   r  r  ri   ri   rj   SEND	  s   


z+InliningGeneratorInstructionTranslator.SEND)rz   r{   r|   r   r@   r}   r  r!   r  r  r  r  r  ri   ri   r  rj   rv  	  s   
 rv  )r<  r  r  dataclassesr  r   r  r   rI  ri  r   r   r   r  r  typingr  collections.abcr   r   r   r   r   r   r   r	   r
   r   unittest.mockr   r   torch._loggingtorch._guardsr   r   r   r   r   r   r   rf   r   r   r   r   r   bytecode_analysisr   r   r   bytecode_transformationr   r   r   r    r!   r"   r#   codegenr$   r%   r&   r'   r(   r   r)   output_graphr*   r+   r,   replay_recordr-   r.   r  r/   r0   r  r1   r2   r3   r4   r5   utilsr6   r7   r8   r9   r:   r;   r<   variables.baser=   r>   r?   r@   variables.builderrA   rB   variables.builtinrC   variables.constantrD   rE   variables.ctx_managerrF   rG   rH   variables.dictsrI   variables.functionsrJ   rK   rL   rM   variables.listsrN   rO   rP   rQ   rR   rS   variables.miscrT   rU   rV   rW   rX   rY   variables.nn_modulerZ   variables.tensorr[   r\   r]   r^   variables.torchr_   variables.user_definedr`   ra   	getLoggerrz   rh   ro  getArtifactLoggerr  ru  rp  	lru_cacherk   	dataclassrl   r   r  r   r   r   r   r  r%  r   r  r_  rv  ri   ri   ri   rj   <module>   s    ,$	$	$	  


F 	k           E Y  