U
    ªÊ¹j»h ã                   @   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-m.Z. dd	l/m0Z0m1Z1m2Z2 dd
l3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< ddl'm=Z=m>Z>m?Z?m@Z@ ddlAmBZB ddlCmDZDmEZEmFZF ddlGmHZHmIZI ddlJmKZKmLZL ddlMmNZNmOZOmPZPmQZQmRZR ddlSmTZTmUZUmVZVmWZWmXZXmYZYmZZZ ddl[m\Z\m]Z]m^Z^m_Z_ ddl`maZambZb ddlcmdZd ddlemfZfmgZg ddlhmiZimjZjmkZk ddllmmZm ddlnmoZompZpmqZqmrZr ddlsmtZtmuZumvZvmwZwmxZxmyZy ddlzm{Z{m|Z|m}Z}m~Z~mZm€Z€ ddl�m‚Z‚ ddlƒm„Z„m…Z…m†Z†m‡Z‡ ddlˆm‰Z‰ ddlŠm‹Z‹mŒZŒ e
 �eŽ¡Z�ej� ‘eŽd ¡Z’ej� ‘eŽd!¡Z“ej� ‘eŽd"¡Z”e •d¡d#d$„ ƒZ–ej—G d%d&„ d&ƒƒZ˜G d'd(„ d(eƒZ™ejd)ešf d*œd+d,„Z›d-eješgeœf eœd.œd/d0„Z�eješgeœf eœd1œd2d3„Zžd4ZŸd5d6„ Z G d7d-„ d-e!e™ ƒZ¡G d8d9„ d9e¡ƒZ¢G d:d;„ d;e¡ƒZ£G d<d=„ d=e£ƒZ¤d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Úis_forbidden)Ú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ÚUserDefinedVariableZgraph_breaksZ
trace_callZtrace_sourcec                   C   s
   t  t¡S ©N)Útorchdynamo_loggingZget_step_loggerÚlog© rf   rf   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/_dynamo/symbolic_convert.pyÚ_step_loggert   s    rh   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 k	S rc   )rl   ©Úselfrf   rf   rg   Úcan_restore   s    zBlockStackEntry.can_restorec                 C   s>   | j d k	st‚| jr0| jjr0t| j t| jjƒƒS t| j ƒS d S rc   )rk   ÚAssertionErrorrl   Ztarget_valuesr1   Útuplerm   rf   rf   rg   Ú	resume_fn‚   s    zBlockStackEntry.resume_fnc                 C   s   | j  |¡S rc   )rl   Úexit)rn   Ztxrf   rf   rg   rs   ‰   s    zBlockStackEntry.exit)Ú__name__Ú
__module__Ú__qualname__r"   Ú__annotations__rk   r   Úintrl   rG   ro   rr   rs   rf   rf   rf   rg   ri   y   s   
ri   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 )Nrz   Ú.)Úprefixz mismatch: z != )Ú_fieldsrz   ÚdiffÚgetattr)rn   r‚   ÚkÚsvÚovrf   rf   rg   r‡   —   s    


z$InstructionTranslatorGraphState.diffN)rt   ru   rv   r-   rw   r   ÚstrrA   r   ri   r   rx   r"   r‡   rf   rf   rf   rg   ry   �   s   
ry   .)Úfnc                    s<   t t | ¡jƒ‰t| ƒ‰ t | ¡dtdœ‡ ‡fdd„ƒ}|S )NÚInstructionTranslatorBase©rn   Úinstc                    s   |   ˆ  | |  ˆ¡i ¡¡ d S rc   )ÚpushÚcall_functionÚpopnr�   ©Zfn_varÚnargsrf   rg   Úimpl¦   s    zstack_op.<locals>.impl)ÚlenÚinspectÚ	signatureÚ
parametersrD   Ú	functoolsÚwrapsr"   )r�   r–   rf   r”   rg   Ústack_op¢   s
    r�   rŽ   )rn   Útruth_fnr‘   c                 C   sþ   |t jk	s|rdS t| jtƒs"t‚| j}| j| }tjdk rV|j	dksP|j
dkrddS n|j	dkrddS |d7 }d}| j| }|j	dkrÞt|j
tƒs”dS |j
}|d7 }| j| }|j	d	krºdS |d7 }|j	d
krÔ|d7 }| j| }|j	dkrìdS |  t|ƒ¡ dS )NF)é   é	   ÚLOAD_GLOBALrp   ÚLOAD_ASSERTION_ERRORr   zassertion errorÚ
LOAD_CONST)ÚCALL_FUNCTIONÚPRECALLr¥   ÚRAISE_VARARGST)ÚoperatorÚtruthÚ
isinstancer~   rx   rp   ÚinstructionsÚsysÚversion_infoÚopnameÚargvalrŒ   r‘   rE   )rn   rž   r‘   Zcurrent_instruction_pointerr�   Ú	error_msgrf   rf   rg   Ú&_detect_and_normalize_assert_statement­   s:    









r°   )rž   r‘   c                    s   dt dœ‡ ‡fdd„}|S )NrŽ   r�   c                    sæ  |   ¡ }| jj |j¡ tj�rt| ˆˆ ƒ�r|   ¡ }| jj |j¡ | ¡ rht| 	¡ ƒrh|  
|¡ d S t|tƒr | jjdtjft||fi ƒžŽ  |  
|¡ d S | jjdtjft|fi ƒžŽ }t| |fdt|j| ƒit |g¡—Ž}| jjdtjft||fi ƒžŽ  |  
|¡ d S | ¡ �rHˆ| 	¡ ƒ�râˆ �o8|  |¡ |  
|¡ �nšt|tƒ�r|  ¡ �r|  ¡ �rŠd|  ¡ › �}t |¡ t |¡‚|  |¡ t d¡ | jj | t!dt"|ƒ› �|  ¡ gƒd� |   ¡  |  #| j$¡}ˆ �oæ|  |¡ |  #|j%¡}| j &t'|j(|d d�g| | ¡ �nÆt|t)ƒ�r^| j *|j+¡}	ˆ|	ƒ�râˆ �oN|  |¡ |  
|¡ �n„t|t,ƒ�rL| -| d	¡}
|
 ¡ �rš|
 	¡ d k�rš| -| d
¡}
t|
t.ƒ�r&|  /¡ }|
 0| g i ¡}t|t1ƒ�rt|j2tt3fƒ�r| jj |j¡ ˆ|j2ƒ�r$ˆ �o|  |¡ |  
|¡ n|  4|¡ t5dƒ n$ˆdƒ�râˆ �o>|  |¡ |  
|¡ n–t|tƒ�s”| 6| ¡�r”ˆt7| 8| ¡ƒƒ�râˆ �o†|  |¡ |  
|¡ nNt|t9ƒ�rÒ| :| j¡}ˆ|ƒ�râˆ �oÄ|  |¡ |  
|¡ nt ;tj<j=d¡‚d S )Nr’   Zexample_valueúBSkipping frame because there is a graph break in a for/while loop
zgeneric_jump triggered compilezgeneric_jump ©Úreasonr   )rj   Ú__bool__Ú__len__z@generic_jump on UserDefined with __bool__ returning non-constantTz�Dynamic control flow is not supported at the moment. Please use functorch.experimental.control_flow.cond to explicitly capture the control flow)>Úpoprz   ÚguardsÚupdater   Z rewrite_assert_with_torch_assertr°   Úis_python_constantÚboolÚas_python_constantÚjumpr©   r_   Zcreate_proxyÚtorchZ_assert_asyncr=   Zscalar_tensorrC   r8   ÚnoderA   Ú	propagater‘   Úshould_compile_partial_graphÚhas_backedgeÚframe_summaryre   Úinfor   Ú	SkipFrameÚdebugÚcompile_subgraphr+   r@   Úcreate_call_resume_atr€   rj   Úadd_output_instructionsr    r­   r[   Zget_submoduleZ
module_keyra   Zvar_getattrrN   Úcopy_graphstater’   rE   Úvaluerx   Úrestore_graphstater(   Úhas_unpack_var_sequencer—   Úunpack_var_sequencer^   Zevaluate_exprZ	UserErrorZUserErrorTypeZDYNAMIC_CONTROL_FLOW)rn   r�   rÊ   r¯   Zscalar_to_tensor_proxyZscalar_to_tensorÚmsgZif_nextZif_jumpÚmodÚxÚstateÚresultZeval_result©r‘   rž   rf   rg   Úinnerô   sâ    ÿ
þ

þý
 ÿ
ÿþ
ý
üþý

ÿÿ
ÿ



 ÿþÿ
 ÿ
ÿ
ÿ
þzgeneric_jump.<locals>.inner)r"   )rž   r‘   rÔ   rf   rÓ   rg   Úgeneric_jumpó   s     rÕ   Fc                    s   ‡ fdd„}|S )Nc                    s$   t  ˆ ¡dtdœ‡ ‡fdd„ƒ}|S )NrŽ   r�   c              
      sü  |   ¡ }d }z$t | jj| j| jj¡ ˆ | |ƒW S  tk
�rh } �z|  ¡ rz|  	¡ rzd|  
¡ › �}t |¡ t |¡|‚t| jƒdkrÊ| ¡  | j ¡ }|  |¡ |jd }t|tƒs¼t‚td|› �ƒ |  	¡ sÔ‚ tjddd� |j}d t |¡¡}|d j|d jf}	t  t!j"¡�r:t#�s:t$ %|	¡�r:t d	||¡ | ¡  | &d
¡ t'|j(|ƒ}W 5 d }~X Y nX |  |¡ | j)j*| |d� t+| ƒ}
g }| j,D ],}| j) -|j. /|
¡| 0¡  1|
j2|¡•¡ �q–t3j4dk�r.|j5dk�r.| j6d k	�rð| j6j7nd}t|ƒdk�r| j) -t8d|d�g¡ | j) -t9|j:dƒ¡ n.|j;d k�s>t‚t< <|¡}d |_=| j) -|g¡ | j) -|¡ t3j4dk�rª|j5dk�rªt> ?t>j@d |j:¡t> ?t>j@d |j:¡ }nt> ?|jA|j:¡}|  Bˆ| ¡ tCˆƒD ]}|  DtEƒ ¡ �qÐ| j) -|  F| jG¡¡ 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Ÿ   é   ÚCALLrf   ÚKW_NAMES©r®   Fr¥   )HrÉ   r   Úset_current_locÚf_codeÚco_filenamer�   Úco_namer)   rÁ   rÀ   rÂ   re   rÃ   r   rÄ   r—   Ústates_before_blockÚremove_from_statsr¶   rË   r|   r©   rH   rp   r(   rÅ   Z
real_stackÚjoinÚ	tracebackÚformat_listÚfilenameÚgraph_break_logÚisEnabledForr   ÚDEBUGÚexplainr:   ÚaddÚadd_to_statsr+   rÎ   rz   rÆ   r%   r}   rÈ   rl   Zreconstructrr   Z
try_exceptÚcode_optionsr«   r¬   r­   Úkw_namesrÊ   r    r   Úargrj   ÚcopyÚexn_tab_entryÚdisÚstack_effectÚopmapÚopcoder“   Úranger‘   rZ   rÇ   r€   )rn   r�   rÑ   r³   ZexcprÎ   ÚctxZ
user_stackZuser_stack_formattedZ	frame_locÚcgÚcleanupÚbrñ   Z	inst_copyrö   Ú_)Úinner_fnr‘   rf   rg   Úwrapper€  s       ÿÿ




ÿþýý



þÿÿ
ÿ
 ÿþ
ÿz>break_graph_if_unsupported.<locals>.decorator.<locals>.wrapper)r›   rœ   r"   )rÿ   r   ©r‘   )rÿ   rg   Ú	decorator  s    cz-break_graph_if_unsupported.<locals>.decoratorrf   )r‘   r  rf   r  rg   Úbreak_graph_if_unsupported~  s    gr  c                       sl  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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"d#„Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Ze	e d.œd/d0„Z ee d1œd2d3„Z!ed4œd5d6„Z"e
ee d7œd8d9„Z#d:d;„ Z$d<d=„ Z%d>d?„ Z&d@dA„ Z'e&Z(dBdC„ Z)dDdE„ Z*dFdG„ Z+dHdI„ Z,dJdK„ Z-dLdM„ Z.dNdO„ Z/dPdQ„ Z0dRdS„ Z1dTdU„ Z2dVdW„ Z3dXdY„ Z4e4Z5e4Z6e7e8j9dZƒZ:e7e8j;dZƒZ<e7e8j9d[ƒZ=e7e8j;d[ƒZ>d\d]„ Z?d^d_„ Z@d`da„ ZAdbdc„ ZBddde„ ZCdfdg„ ZDdhdi„ ZEdjdk„ ZFdldm„ ZGdndo„ ZHdpdq„ ZIdrds„ ZJdtdu„ ZKeLdvdw�dxdy„ ƒZMeLdvdw�dzd{„ ƒZNeLdvdw�d|d}„ ƒZOd~d„ ZPd€d�„ ZQd‚dƒ„ ZRd„d…„ ZSd†d‡„ ZTdˆd‰„ ZUed4œdŠd‹„ZVeLdŒdw�d�dŽ„ ƒZWd�d�„ ZXd‘d’„ ZYd“d”„ ZZd•d–„ Z[e\fd—d˜„Z]d™dš„ Z^e^Z_d›dœ„ Z`d�dž„ ZaeaZbdŸd „ Zcd¡d¢„ Zdd£d¤„ Zed¥d¦„ Zfd§d¨„ Zgd©dª„ Zhd«d¬„ Zid­d®„ Zjd¯d°„ Zkd±d²„ Zld³d´„ Zmdµd¶„ Znd·d¸„ Zod¹dº„ Zpd»d¼„ Zqd½d¾„ Zrd¿dÀ„ ZsdÁdÂ„ ZtdÃdÄ„ ZudÅdÆ„ ZvdÇdÈ„ ZwewZxdÉdÊ„ ZydËdÌ„ ZzdÍdÎ„ Z{dÏdÐ„ Z|dÑdÒ„ Z}dÓdÔ„ Z~ee8j€ƒZ�ee8j‚ƒZƒee8j9ƒZ„ee8j…ƒZ†ee8j‡ƒZˆee8j‰ƒZŠee8j‹ƒZŒee8j�ƒZŽee8j�ƒZ�ee8j‘ƒZ’ee8j‘ƒZ“ee8j”ƒZ•ee8j–ƒZ—eLdvdw�ee8j˜ƒƒZ™ee8jšƒZ›ee8jœƒZ�ee8jžƒZŸee8j ƒZ¡ee8j¢ƒZ£ee8j¤ƒZ¥ee8j¦ƒZ§ee8j¨ƒZ©ee8jªƒZ«ee8j¬ƒZ­ee8j®ƒZ¯ee8j®ƒZ°ee8j±ƒZ²ee8j³ƒZ´ee8jµƒZ¶ee8j·ƒZ¸ee8j¹ƒZºee8j»ƒZ¼ee8j½ƒZ¾dÕdÖ„ Z¿d×dØ„ ZÀdÙdÚ„ ZÁdÛdÜ„ ZÂdÝdÞ„ ZÃeLdvdw�dßdà„ ƒZÄdádâ„ ZÅdãdä„ ZÆe4ZÇe4ZÈe7e8j;dZƒZÉe7e8j;dZƒZÊe7e8j9dZƒZËe7e8j9dZƒZÌdådæ„ ZÍdçdè„ ZÎdédê„ ZÏdëdì„ ZÐdídî„ ZÑdïdð„ ZÒdñdò„ ZÓed4œdódô„ZÔedõœdöd÷„ZÕdødù„ ZÖ�d
dúdû„Z×düdý„ ZØdþdÿ„ ZÙeÚ�d �d„ ƒZÛ�d�d„ ZÜeÝjÞ�d�d„ ƒZßeee eeeàf eeeàf eeeàf eeeàf eeef eeef eájâee
�dœ‡ f�d�d„Zã‡  ZäS (  rŽ   rz   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 k	st‚| j| jd … D ]"}|jtkr&|j}||k r& dS q&dS ©NTF)r   Úoffsetr~   rp   rª   r­   r   r®   )rn   Z
cur_offsetr�   Zjump_offsetrf   rf   rg   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)Úhasattrrq   rð   r  rm   rf   rf   rg   Ú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 | ]\}}|ˆ kr||f‘qS rf   rf   )Ú.0r‰   Úv©Úreadsrf   rg   Ú
<listcomp>  s      z?InstructionTranslatorBase.prune_dead_locals.<locals>.<listcomp>)r   rª   r   Úsetr  ÚcollectionsÚOrderedDictr{   Úitemsrz   r   Zprune_dead_object_newrm   rf   r  rg   Úprune_dead_locals  s    ÿz+InstructionTranslatorBase.prune_dead_locals)r�   ÚargsÚkwargsc                 C   sª   t |tƒst‚t |tƒst‚t |tƒs*t‚tdd„ t || ¡ ¡D ƒƒsLt‚d }t	|dƒr`|j
}t	|dƒrp|j}|r’t|ƒr’t|ƒr’td|› �ƒ‚|  | | ||¡¡ d S )Nc                 s   s   | ]}t |tƒV  qd S rc   )r©   rA   ©r  rÐ   rf   rf   rg   Ú	<genexpr>"  s   ÿz:InstructionTranslatorBase.call_function.<locals>.<genexpr>rÊ   r�   z$Attempt to trace forbidden callable )r©   rA   rp   ÚlistÚdictÚallÚ	itertoolsÚchainÚvaluesr  rÊ   r�   Úcallabler   r‘   r’   )rn   r�   r  r  rÿ   rf   rf   rg   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 krˆ S | S rc   ©Úmutable_localr)  )r(  r'  rf   rg   Úrepl0  s    z?InstructionTranslatorBase.update_locals_and_stack.<locals>.replc                    s   ˆ j | jkS rc   )r+  Úrecursively_containsr)  )r'  rf   rg   Úskip5  s    z?InstructionTranslatorBase.update_locals_and_stack.<locals>.skip©Zskip_fnc                    s   g | ]}t jˆ|ˆ ˆd �‘qS )r/  )rA   Úapplyr  )Úcacher,  r.  rf   rg   r  :  s    zEInstructionTranslatorBase.update_locals_and_stack.<locals>.<listcomp>)rA   r   rz   r   r0  r|   r{   r  )rn   r'  r(  r‰   rÐ   rf   )r1  r(  r'  r,  r.  rg   Ú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ƒs4t	‚|j
tj ¡ d�}|  ||¡ |S )Nr*  )r©   r+  r   ZMutableSideEffectsrz   Zmutationr   Úbaser?   rp   Úcloner2  )rn   r'  r(  rf   rf   rg   Úreplace_allB  s    z%InstructionTranslatorBase.replace_allc                 C   sT   |   ¡ }z&t | |||¡}| jj |j¡ |W S  tk
rN   |  |¡ ‚ Y nX dS )zF
        A call to some user defined function by inlining it.
        N)rÉ   ÚInliningInstructionTranslatorÚinline_callrz   r·   r¸   Ú	ExceptionrË   )rn   r�   r  r  rÑ   rÒ   rf   rf   rg   Úinline_user_function_returnK  s    
z5InstructionTranslatorBase.inline_user_function_returnNc                 C   sJ   |d k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â   )rn   r�   Zinline_depth_strrf   rf   rg   Úget_line_of_code_headerX  s
    ÿz1InstructionTranslatorBase.get_line_of_code_headerc                 C   s8   d|   ¡ › d�}t | jj| j¡ ¡ }|d|› �7 }|S )NzTRACE starts_line Ú
z    )r=  Ú	linecacheÚgetlinerá   râ   r�   Úrstrip)rn   Zlog_strÚlinerf   rf   rg   Úget_log_starts_line_log_str`  s    z5InstructionTranslatorBase.get_log_starts_line_log_strc                 C   s   t  dt| jƒ¡ d S )Nú%s)Útrace_source_logrÅ   r<   rC  rm   rf   rf   rg   Úlog_starts_linef  s    z)InstructionTranslatorBase.log_starts_linec                 C   sf  t | jtƒst‚| j| j }|| _|  jd7  _| jt| jƒk rP| j| j | _nd| _d| _|jr~| j	|jkr~|j| _	|  
¡  t| jƒdkr¢|  ¡ r¢||  ¡ f| _t d|j|j| j¡ tjdk�rl|j}| jrè|rè| jd j|jk�sl|�s"| j�rl|jdk�rlt| jƒdk�st‚| j ¡  nJt| jƒdk�rR| jd j|jk�rR| j ¡  n| j t|jt| jƒƒ¡ zRt| |jƒ�sŒtd	|j› �ƒ t | jj | j	| jj!¡ t"| |jƒ|ƒ |jd
kW S  t#k
�rø   |  $¡ �ræt d¡ ‚ tjddd� Y nX | j%j&�rt‚| jdk	�st‚| 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Ö   ÚNOPéþÿÿÿz	missing: ÚRETURN_VALUEzempty checkpointzstep triggered compileTr×   Zstep_unsupported)Zpartial_convertr³   )-r©   r~   rx   rp   rª   r   r—   r€   Ústarts_liner�   rF  r|   rÀ   rÉ   r  re   rÅ   r­   r®   r«   r¬   rô   r}   rj   r¶   Úappendri   r  r(   r   rà   rá   râ   rã   rˆ   r)   Úempty_checkpointrz   Zoutput_instructionsrË   rÆ   r+   rÂ   rÈ   r!   )rn   r�   ÚentryZcontinue_instrÑ   rf   rf   rg   Ústepi  sz    þýüþýÿ  ÿ



ýÿzInstructionTranslatorBase.stepc                 C   s
   t  d ¡S rc   )r   Úcurrent_framerm   rf   rf   rg   Úrun_ctx_mgrÂ  s    z%InstructionTranslatorBase.run_ctx_mgrc                 C   s¶   |   ¡ �¤ z|z,| j | ¡ | jd k	r6| jjs6|  	¡ r6qW nJ t
k
rN   ‚ Y n6 tk
r‚ } ztjrp| j ¡ |_‚ W 5 d }~X Y nX W 5 | j ¡  t| tƒr¦| j ¡  X W 5 Q R X d S rc   )rP  rz   Zpop_txr©   ÚInstructionTranslatorrü   Zpush_txr~   Zshould_exitrN  r'   r8  r   Úreplay_record_enabledÚexec_recorderZ
get_recordZexec_record)rn   Úerf   rf   rg   ÚrunÈ  s&    
ÿþý

zInstructionTranslatorBase.run)Úvalc                 C   s4   |d ks$t |tƒs$tdt|ƒ› �ƒ‚| j |¡ d S )Nz"push expects VariableTracker, got )r©   rA   rp   r@   r|   rK  )rn   rV  rf   rf   rg   r‘   â  s    
 ÿþzInstructionTranslatorBase.push)Úvalsc                 C   s   |D ]}|   |¡ qd S rc   r  )rn   rW  rV  rf   rf   rg   Ú	push_manyè  s    z#InstructionTranslatorBase.push_many)rƒ   c                 C   s
   | j  ¡ S rc   )r|   r¶   rm   rf   rf   rg   r¶   ì  s    zInstructionTranslatorBase.pop)Únrƒ   c                    s*   |dkst ‚tt‡ fdd„t|ƒD ƒƒƒS )Nr   c                    s   g | ]}ˆ   ¡ ‘qS rf   ©r¶   )r  rþ   rm   rf   rg   r  ñ  s     z2InstructionTranslatorBase.popn.<locals>.<listcomp>)rp   r  Úreversedrù   )rn   rY  rf   rm   rg   r“   ï  s    zInstructionTranslatorBase.popnc                 C   s–   |j }|| jkr*tjr*| j || j| ¡ | d¡rJ|| jkrJ| dd¡}||  	¡ ksZt
‚|| jkrltdƒ |  | j| ¡ | d¡r’| j |¡ d S )Nr„   Zimplicitzundefined LOAD_FASTZ___stack)r®   Úf_localsr   rR  rS  Úadd_local_varÚ
startswithr{   Úreplacer  rp   r(   r‘   r¶   )rn   r�   Únamerf   rf   rg   Ú	LOAD_FASTó  s    

z#InstructionTranslatorBase.LOAD_FASTc                 C   sn   |j |  ¡ kst‚|j | jkr<tjr<| j |j | j|j  ¡ |j | jkrXt	d|j › �ƒ |  
| j|j  ¡ d S )Nzundefined LOAD_DEREF )r®   r  rp   r\  r   rR  rS  r]  r{   r(   r‘   r�   rf   rf   rg   Ú
LOAD_DEREF  s    z$InstructionTranslatorBase.LOAD_DEREFc                 C   s   |   ¡ | j|j< d S rc   )r¶   r{   r®   r�   rf   rf   rg   Ú
STORE_FAST  s    z$InstructionTranslatorBase.STORE_FASTc                 C   s   | j |j= d S rc   )r{   r®   r�   rf   rf   rg   ÚDELETE_FAST  s    z%InstructionTranslatorBase.DELETE_FASTc                 C   s   |   t|jd�¡ d S ©N)r`  )r‘   rU   r®   r�   rf   rf   rg   ÚLOAD_CLOSURE  s    z&InstructionTranslatorBase.LOAD_CLOSUREc                 C   s8   t |jtƒr"|js"|  tg ƒ¡ n|  t|jd�¡ d S )N©rÊ   )r©   r®   rq   r‘   rT   rE   r�   rf   rf   rg   r£     s    z$InstructionTranslatorBase.LOAD_CONSTc                 C   sx   | j j| jkrt|ƒ}n\d| jkr:t|  | jd ¡|ƒ}n:dt| jƒ› �}|| j jkrf| j  || j¡ tt|ƒ|ƒ}|S )Nrt   Z___unnamed_scope_)	rz   Úglobal_scopeÚ	f_globalsr4   r2   Úimport_sourceÚidÚinstall_globalr3   )rn   r`  ÚsourceZmangled_namerf   rf   rg   Úget_global_source  s    

 ÿz+InstructionTranslatorBase.get_global_sourcec                 C   s  t jdkr|jd r|  |¡ |j}tjrj|| jkrJ| j 	|| j| ¡ n || j
ksXt‚| j
| | jj|< |jdkr|tdƒ || jkr²| jj| j|  }|  | jj ||¡¡ d S z| j| }W n tk
rÞ   |  |¡ Y S X |  |¡}|  t| |ƒ|ƒ¡ d S )NrÛ   é   rp   úassert with non-string message)r«   r¬   rò   Ú	PUSH_NULLr®   r   rR  ri  rS  Zadd_global_varÚ
f_builtinsrp   Úbuiltinsr(   r  rz   r   r‘   Úload_globalÚKeyErrorÚload_builtinrn  rB   )rn   r�   r`  ÚvariablerÊ   rm  rf   rf   rg   r¡   .  s*    






z%InstructionTranslatorBase.LOAD_GLOBALc                 C   sZ   |   ¡ }|j}|  |¡}|| jkr.tƒ | j|< | jj || j| ¡}| jj |||¡ d S rc   )	r¶   r®   rn  r  Úobjectrz   r   Ztrack_global_existingZstore_global)rn   r�   rÊ   r`  rm  rw  rf   rf   rg   ÚSTORE_GLOBALL  s    

 ÿz&InstructionTranslatorBase.STORE_GLOBALc                 C   sŒ   d|kr4t jjj| }| dd¡ dd¡ dd¡}nt |¡}d| dd¡› �}| jj}||ksp|| |kspt	‚|||< | j 
|¡ t|ƒS )z-Create an alias to a module for use in guardsZtorch_packageú>rþ   ú<r„   Z_dot_Z	__import_)r½   ÚpackageZpackage_importerZ_package_imported_modulesr_  Ú	importlibÚimport_modulerz   rh  rp   Zupdate_co_namesr4   )rn   Úmodule_namerÊ   Úaliasri  rf   rf   rg   rj  W  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)rn   r`  r|  ÚlevelÚbitsr3  rf   rf   rg   Úresolve_namei  s
    z&InstructionTranslatorBase.resolve_namec                 C   sŒ   | j  d¡}| j  d¡}|dk	rJ|dk	rF||jkrFtjd||jdd� |S |dk	rX|jS tjddd� | j d }d	| j krˆ| d
¡d }|S )zÀ
        Copied from the Cpython implementation of __import__
        https://github.com/python/cpython/blob/5a094f0255eea1db58fb2cf14c200971e64ec36e/Lib/importlib/_bootstrap.py#L1090
        Ú__package__Ú__spec__Nz)__package__ != __spec__.parent (%r != %r)rŸ   )Ú
stacklevelzYcan't resolve package from __spec__ or __package__, falling back on __name__ and __path__rt   Ú__path__r„   r   )ri  ÚgetÚparentre   ÚwarningÚ
rpartition)rn   r|  Úspecrf   rf   rg   Úcalc_packageu  s*    üý

z&InstructionTranslatorBase.calc_packagec           
      C   s"  |   d¡\}}| ¡ }| ¡ }|j}tj› d|› d|› d|› �}|| jk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 )Nro  rþ   )Úfromlistrƒ  Úglobalsr   r„   )rm  zIMPORT_NAME )r“   r»   r®   r/   ZLOCAL_MOD_PREFIXri  r4   Ú
__import__r�  r…  Ú	partitionrj  r   rR  rS  Zadd_local_modr   r‘   r`   r;   ÚtypesÚ
ModuleTyper.   rY   r(   r@   )
rn   r�   rƒ  r�  r  Zrecorded_namerÊ   rm  ÚpkgZtop_level_module_namerf   rf   rg   ÚIMPORT_NAME’  s:    ÿ


ü
z%InstructionTranslatorBase.IMPORT_NAMEc                 C   s   |   |¡ |  |¡ d S rc   )ÚDUP_TOPÚ	LOAD_ATTRr�   rf   rf   rg   ÚIMPORT_FROMÀ  s    
z%InstructionTranslatorBase.IMPORT_FROMc                 C   sn   |j | jkrtd|j › d�ƒ‚| j|j  }t|ƒrN|  t| t|j ƒƒ|ƒ¡ nt|ƒsZt‚|  t	|d�¡ d S )Nzname 'z' is not definedrg  )
r®   rr  Ú	NameErrorr%  r‘   rB   r4   r   rp   rE   )rn   r�   rV  rf   rf   rg   rv  Ä  s    z&InstructionTranslatorBase.load_builtinc                 C   s   | j |j | _d S rc   )Úindexofrj   r~   r�   rf   rf   rg   r¼   Ï  s    zInstructionTranslatorBase.jumpFTc                 C   s   | j  t|jƒ¡ d S rc   ©r}   rK  ri   rj   r�   rf   rf   rg   Ú
SETUP_LOOPÚ  s    z$InstructionTranslatorBase.SETUP_LOOPc                 C   s   | j  t|jƒ¡ d S rc   r�  r�   rf   rf   rg   ÚSETUP_EXCEPTÞ  s    z&InstructionTranslatorBase.SETUP_EXCEPTc                 C   s   | j  ¡  d S rc   )r}   r¶   r�   rf   rf   rg   Ú	POP_BLOCKâ  s    z#InstructionTranslatorBase.POP_BLOCKc                 C   s   |   |¡ d S rc   ©Úsetup_or_before_withr�   rf   rf   rg   Ú
SETUP_WITHå  s    z$InstructionTranslatorBase.SETUP_WITHc                 C   s   | j  t|jƒ¡ d S rc   r�  r�   rf   rf   rg   ÚSETUP_FINALLYè  s    z'InstructionTranslatorBase.SETUP_FINALLYc                 C   s   |   d ¡ d S rc   r  r�   rf   rf   rg   ÚBEGIN_FINALLYë  s    z'InstructionTranslatorBase.BEGIN_FINALLYc                 C   sF   |   d¡\}}|d kst‚|  |¡ |  | | td ƒgd i ¡¡ d S )Nro  rŸ   )r“   rp   r‘   r’   rE   )rn   r�   rs   r   rf   rf   rg   ÚWITH_CLEANUP_STARTî  s    
z,InstructionTranslatorBase.WITH_CLEANUP_STARTc                 C   s   |   d¡ |  d ¡ d S )Nro  )r“   r‘   r�   rf   rf   rg   ÚWITH_CLEANUP_FINISHô  s    
z-InstructionTranslatorBase.WITH_CLEANUP_FINISHc                 C   s   |   ¡ }|d kst‚d S rc   )r¶   rp   ©rn   r�   Útosrf   rf   rg   ÚEND_FINALLYø  s    z%InstructionTranslatorBase.END_FINALLYc                 C   s4   |j }|r|  ¡ }|  ¡ d ks"t‚|r0|  |¡ d S rc   )r®   r¶   rp   r‘   )rn   r�   Zpreserve_tosr©  rf   rf   rg   ÚPOP_FINALLYü  s    z%InstructionTranslatorBase.POP_FINALLYc                 C   sŠ   |   ¡ }t|tƒrt| jj |j¡ z0| ¡ \}}|  ||¡ |  |¡ |  |¡ W q† t	k
rp   |  
|¡ Y q†X ntdt|ƒ› �ƒ d S )Nz	FOR_ITER )r¶   r©   rP   rz   r·   r¸   Únext_variablesr5  r‘   ÚStopIterationr¼   r(   r@   )rn   r�   ÚitrV  Ú	next_iterrf   rf   rg   ÚFOR_ITER  s    

z"InstructionTranslatorBase.FOR_ITERc              	   C   sB  |   d¡\}}| | ¡}| | ¡}t ||g¡}|j}tt t 	¡ t
 	¡ ¡ƒ}t|tttttttfƒr¤t|tƒr¤|jd kr¤|t
kr¤|  tt
| tƒ |jƒf|Ž¡ nš| ¡ râ| ¡ râ||krâ|  t|| | ¡ | ¡ ƒf|Ž¡ n\|dk�r|  | | d|gi ¡¡ |dk�r>|  |¡ n$|  t|| f|Ž | ||gi ¡¡ d S )Nro  )Úinúnot inÚ__contains__r²  )r“   Úas_specializedrA   r¿   r®   r   r"  r#  r]   r  r\   r©   r_   r^   r[   rO   rb   rK   rJ   rE   rÊ   r‘   rx  r¹   r»   Úcall_methodÚ	UNARY_NOTrD   r’   )rn   r�   ÚleftÚrightÚoptionsÚopZsupported_anyrf   rf   rg   Ú
COMPARE_OP  s~    

þÿùþÿóòñÿÿÿÿþý ÿÿüÿ

  ÿÿz$InstructionTranslatorBase.COMPARE_OPc                 C   s   |   ttƒ|  ¡ gi ¡ d S rc   )r’   rD   Úiterr¶   r�   rf   rf   rg   ÚGET_ITERO  s    z"InstructionTranslatorBase.GET_ITERr   r  c                 C   s&   |   |j¡}|  ¡ }|  ||i ¡ d S rc   )r“   r®   r¶   r’   )rn   r�   r  r�   rf   rf   rg   r¤   R  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rj|  ¡ }t|tƒsjt	‚| j
j |j¡ | j
j |j¡ t|tƒrÂt|jtƒrÂ|jdkrÂt|ttfƒrÂt|gƒ}t|tƒsä| | ¡rät| | ¡ƒ}t|tƒrút|tƒ�stdt|ƒ› dt|ƒ› �ƒ |  ||j|j¡ d S )Nr   r   ÚCALL_FUNCTION_EXrÛ   Úviewznon-static call r;  )r®   rJ   r   r¶   r(   r«   r¬   r©   rX   rp   rz   r·   r¸   rV   Úobjr_   r`  rE   rT   rO   rÌ   rÍ   r@   r’   r  )rn   r�   Z
kwargsvarsZargsvarsr�   Únullrf   rf   rg   r¾  X  sF    





ÿ
þýü	
 ÿþ ÿz*InstructionTranslatorBase.CALL_FUNCTION_EXc                 C   sŠ   |   ¡ }|  |j¡}|   ¡ }t|tƒs*t‚|j}|d t|ƒ … |t|ƒ d …  }}tt	||ƒƒ}t|ƒt|ƒksxt‚|  
|||¡ d S rc   )r¶   r“   r®   r©   rE   rp   rÊ   r—   r   Úzipr’   )rn   r�   Úargnamesr  r�   Úkwargs_listr  rf   rf   rg   ÚCALL_FUNCTION_KW€  s    &z*InstructionTranslatorBase.CALL_FUNCTION_KWc                 C   sJ   |   |¡ |  ¡ }tjdkr2|  |¡ |  |¡ n|  |¡ |  d ¡ d S )NrÛ   )r™  r¶   r«   r¬   rq  r‘   ©rn   r�   rÀ  rf   rf   rg   ÚLOAD_METHODŒ  s    



z%InstructionTranslatorBase.LOAD_METHODc                 C   s:   |   |j¡}|  ¡ }|d ks t‚|  ¡ }|  ||i ¡ d S rc   )r“   r®   r¶   rp   r’   )rn   r�   r  Údummyr�   rf   rf   rg   ÚCALL_METHOD™  s
    z%InstructionTranslatorBase.CALL_METHODc                 C   s2   |   ¡ }ttƒ | |t|jƒgi ¡}|  |¡ d S rc   )r¶   rD   rˆ   r’   rE   r®   r‘   )rn   r�   rÀ  rÒ   rf   rf   rg   r™     s      ÿz#InstructionTranslatorBase.LOAD_ATTRc              
   C   s  |   ¡ }|  d¡\}}t|tƒr8| jr8td|j› d�ƒ‚z0| jj 	t
tƒ | |t|jƒ|gi ¡j¡ W d S  tk
r¾ } z8|  ¡ s„‚ tjddd� | ¡  | d¡ |  |¡ W 5 d }~X Y nX | jj| td|  ¡ gƒd	� | j t |¡g¡ |  d¡ | j |  | j¡¡ d S )
Nro  zMutating module attribute z during export.zSTORE_ATTR triggered compileTr×   rÚ   Z
store_attrr²   )rÉ   r“   r©   r[   Úexportrp   r®   rz   r·   r¸   rD   Úsetattrr’   rE   r)   rÀ   re   rÅ   rå   rï   rË   rÆ   r+   rÂ   rÈ   ró   rÇ   r€   )rn   r�   ZpriorrV  rÀ  rT  rf   rf   rg   Ú
STORE_ATTR§  s@    
ÿþ  ÿÿ
 ÿ

ÿz$InstructionTranslatorBase.STORE_ATTRc                 C   s4   |   ¡ }| jj ttƒ | |t|jƒgi ¡j¡ d S rc   )	r¶   rz   r·   r¸   rD   Údelattrr’   rE   r®   rÆ  rf   rf   rg   ÚDELETE_ATTRË  s      ÿÿz%InstructionTranslatorBase.DELETE_ATTRc                 C   s   t dt| ƒ› �ƒ‚d S )Nz1create_call_resume_at not overridden by subclass ©rp   Útype©rn   r  rf   rf   rg   rÇ   Ó  s    ÿz/InstructionTranslatorBase.create_call_resume_atc                 C   s   t dt| ƒ› �ƒ‚d S )Nz8should_compile_partial_graph not overridden by subclass rÏ  rm   rf   rf   rg   rÀ   Ø  s    ÿz6InstructionTranslatorBase.should_compile_partial_graphr   c                 C   s8   |   d¡\}}}| | d||gi ¡}| jj |j¡ d S )NrŸ   Ú__setitem__)r“   rµ  rz   r·   r¸   )rn   r�   rV  rÀ  ÚkeyrÒ   rf   rf   rg   ÚSTORE_SUBSCRÝ  s    z&InstructionTranslatorBase.STORE_SUBSCRc                 C   s,   |   |j¡}t |¡}|  t|f|Ž¡ d S rc   )r“   r®   rA   r¿   r‘   rT   ©rn   r�   r  r¹  rf   rf   rg   ÚBUILD_TUPLEä  s    
z%InstructionTranslatorBase.BUILD_TUPLEc                    s:   ˆ   |j¡}t |¡}ˆ  t‡ fdd„|D ƒf|Ž¡ d S )Nc                    s   g | ]}|  ˆ ¡‘qS rf   )r´  r  rm   rf   rg   r  î  s     z9InstructionTranslatorBase.BUILD_SLICE.<locals>.<listcomp>)r“   r®   rA   r¿   r‘   rS   rÕ  rf   rm   rg   ÚBUILD_SLICEé  s    
ÿþÿz%InstructionTranslatorBase.BUILD_SLICEc                 C   s6   |   |j¡}t |¡}|  t|fdtƒ i|—Ž¡ d S ©Nr+  )r“   r®   rA   r¿   r‘   rQ   r?   rÕ  rf   rf   rg   Ú
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_SETr+  )
r   Z+inject_BUILD_SET_unimplemented_TESTING_ONLYr(   r“   r®   rA   r¿   rR   r?   r‘   )rn   r�   r  r¹  Znew_setrf   rf   rg   Ú	BUILD_SETø  s    
z#InstructionTranslatorBase.BUILD_SETc              	   C   s~   |   |j¡}t |¡}tƒ }|D ]<}z| | | ¡¡ W q  tk
rZ   td|› �ƒ Y q X q |  	||fdt
ƒ i|—Ž¡ d S )NzBUILD_LIST_UNPACK r+  )r“   r®   rA   r¿   r  ÚextendrÍ   ÚNotImplementedErrorr(   r‘   r?   )rn   r�   ÚclsZseqsr¹  r  Úseqrf   rf   rg   ÚBUILD_LIST_UNPACK   s    
z+InstructionTranslatorBase.BUILD_LIST_UNPACKc                 C   s   | j |td� d S )N)rÝ  )rß  rT   r�   rf   rf   rg   Ú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t	fƒsnt|t
ƒrj|jd k	snt‚||t |¡< q>t|ƒt|ƒd ks–t‚|  t|tfdtƒ i|—Ž¡ d S )Nro  r   r+  )r“   r®   rA   r¿   r   rÂ  r©   rE   rF   rD   r_   Zspecialized_valuerp   rJ   Úget_keyr—   r‘   r?   )rn   r�   r  r¹  rÒ   r‰   r  rf   rf   rg   Ú	BUILD_MAP  s    
&ÿÿÿz#InstructionTranslatorBase.BUILD_MAPc                    sp   ˆ   |j¡}‡ fdd„|D ƒ}tƒ }|D ]}t|tƒs:t‚| |j¡ q(ˆ  t|tfdt	ƒ it
 |¡—Ž¡ d S )Nc                    s    g | ]}t tƒ ˆ |gi ¡‘qS rf   )rD   r   r’   r  rm   rf   rg   r  "  s     z>InstructionTranslatorBase.BUILD_MAP_UNPACK.<locals>.<listcomp>r+  )r“   r®   r   r©   rJ   rp   r¸   r  r‘   r?   rA   r¿   )rn   r�   r  rÒ   rÐ   rf   rm   rg   ÚBUILD_MAP_UNPACK  s     þýüÿz*InstructionTranslatorBase.BUILD_MAP_UNPACKc                 C   s†   |   ¡ }|  |j¡}t |g| ¡}t|tƒs2t‚|j}t	|t
ƒsFt‚t|ƒt|ƒksZt‚|  ttt||ƒƒtfdtƒ i|—Ž¡ d S rØ  )r¶   r“   r®   rA   r¿   r©   rE   rp   rÊ   r;   rq   r—   r‘   rJ   r   rÂ  r?   )rn   r�   Úkeysr$  r¹  rf   rf   rg   ÚBUILD_CONST_KEY_MAP2  s"    þýüÿz-InstructionTranslatorBase.BUILD_CONST_KEY_MAPc              
   C   s€   |   d¡\}}|jdkst‚| j|j  }t|tƒs8t‚|jsBt‚t|j	ƒ}||| 
¡ < |  |t||jft |||g¡Ž¡ d S )Nro  r   )r“   r®   rp   r|   rò   r©   rJ   r+  r   r  r»   r5  Zuser_clsrA   r¿   )rn   r�   r‰   r  rÀ  r  rf   rf   rg   ÚMAP_ADDC  s     

þýþz!InstructionTranslatorBase.MAP_ADDc                 C   sN   |   ¡ }|jdkst‚| j|j  }t|tƒs2t‚|js<t‚| | d|gi ¡S )Nr   rî   )	r¶   r®   rp   r|   rò   r©   rR   r+  rµ  ©rn   r�   r  rÀ  rf   rf   rg   ÚSET_ADDT  s    
z!InstructionTranslatorBase.SET_ADDc              
   C   s¢   |   ¡ }|jdkst‚| j|j  }t|tƒs2t‚|js<t‚|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®   rp   r|   rò   r©   rQ   r+  r-  Úunionrî   r5  r  rA   r¿   )rn   r�   r  rÀ  Znew_rec_containsrf   rf   rg   ÚLIST_APPEND\  s*    

ÿýüþz%InstructionTranslatorBase.LIST_APPENDc              
   C   sæ   |j }t| jƒ}tjdk r"|  ¡ }|  ¡ }tjdkrRt|jdƒsDt‚t	|jj
d�}d }d }d }d }	|d@ rr|  ¡ }|d@ r‚|  ¡ }|d@ r’|  ¡ }	|d@ r¢|  ¡ }t |t| jƒd … ¡}
|  t||| j||	||fd| i|
—Ž¡ d S )	NrÛ   Úco_qualnamerg  é   é   ro  r   Zclosure_scope)rò   r  r|   r«   r¬   r¶   r  rÊ   rp   rE   rë  rA   r¿   r—   r‘   rL   ri  )rn   r�   ÚflagsZ	old_stackÚfn_nameÚcodeÚdefaultsÚclosureÚannotationsÚ
kwdefaultsr¹  rf   rf   rg   ÚMAKE_FUNCTIONt  sH    


ùø	÷ÿz'InstructionTranslatorBase.MAKE_FUNCTIONc                    sü   ˆ  ¡ }t|ttfƒr2ˆjj |j¡ | ˆ¡}nœ| ¡ rPt|t	ƒrP| ˆ¡}n~t|t
ƒrp|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sàt‚t|ƒD ]}ˆ |¡ qèd S )N)Zidxesc                    s   g | ]}t ˆˆ| fˆ Ž‘qS rf   )rC   )r  Úi©r¹  Úproxyrn   rf   rg   r  ©  s     z=InstructionTranslatorBase.UNPACK_SEQUENCE.<locals>.<listcomp>zUNPACK_SEQUENCE )r¶   r©   rO   rR   rz   r·   r¸   rÍ   r¹   rE   r_   rù   r®   rV   rÀ  rˆ   Zas_proxyr`  rA   r¿   r(   r—   rp   r[  r‘   )rn   r�   rÞ  rV  rö  rf   r÷  rg   ÚUNPACK_SEQUENCEœ  s     

z)InstructionTranslatorBase.UNPACK_SEQUENCEc                 C   s  d|j   krdksn t‚|j d@ }|j d? }|  ¡ }t |¡}| | ¡ròt| | ¡ƒ}t|ƒ|| ksnt‚|d |… }||t|ƒ| … }|t|ƒ| d … }	t	|	ƒD ]}
|  
|
 |¡¡ qª|  
t|f|Ž¡ t	|ƒD ]}
|  
|
 |¡¡ qÚntd|› �ƒ d S )Nr   iÿÿ  éÿ   rì  z
UNPACK_EX )r®   rp   r¶   rA   r¿   rÌ   r  rÍ   r—   r[  r‘   Úadd_optionsrT   r(   )rn   r�   r…   ÚsuffixrÞ  r¹  rW  Zvals_prefixZ	vals_listZvals_suffixÚitemrf   rf   rg   Ú	UNPACK_EX°  s"    



z#InstructionTranslatorBase.UNPACK_EXc                 C   s   d S rc   rf   r�   rf   rf   rg   rG  Ä  s    zInstructionTranslatorBase.NOPc                 C   s   |   ¡  d S rc   rZ  r�   rf   rf   rg   ÚPOP_TOPÇ  s    z!InstructionTranslatorBase.POP_TOPc                 C   s(   |   ¡ }|   ¡ }|  |¡ |  |¡ d S rc   ©r¶   r‘   ©rn   r�   Úarý   rf   rf   rg   ÚROT_TWOÊ  s    
z!InstructionTranslatorBase.ROT_TWOc                 C   s:   |   ¡ }|   ¡ }|   ¡ }|  |¡ |  |¡ |  |¡ d S rc   r   )rn   r�   r  rý   Úcrf   rf   rg   Ú	ROT_THREEÐ  s    

z#InstructionTranslatorBase.ROT_THREEc                 C   sL   |   ¡ }|   ¡ }|   ¡ }|   ¡ }|  |¡ |  |¡ |  |¡ |  |¡ d S rc   r   )rn   r�   r  rý   r  Údrf   rf   rg   ÚROT_FOURØ  s    


z"InstructionTranslatorBase.ROT_FOURc                 C   s    |   ¡ }|  |¡ |  |¡ d S rc   r   )rn   r�   r  rf   rf   rg   r˜  â  s    
z!InstructionTranslatorBase.DUP_TOPc                 C   s<   |   ¡ }|   ¡ }|  |¡ |  |¡ |  |¡ |  |¡ d S rc   r   r  rf   rf   rg   Ú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rˆtt	ƒ | |gi ¡}n |d@ dkr¨tt
ƒ | |gi ¡}td| ¡  d ƒ |¡}|  ttjƒ||gi ¡ d S )Nrí  rÙ   rŸ   r   ro  z{:Ú})rò   r¶   rE   r©   r^   rŒ   Zsym_numrD   r’   ÚreprÚasciir»   rû  Úformat)rn   r�   rî  Úfmt_specrÊ   Zfmt_varrf   rf   rg   ÚFORMAT_VALUEï  s&    

ÿþz&InstructionTranslatorBase.FORMAT_VALUEc                 C   sH   d}t |jƒD ]$}|  ¡ }t|tƒs(t‚|j| }q|  t|d�¡ d S )NrÙ   rg  )rù   rò   r¶   r©   rE   rp   rÊ   r‘   )rn   r�   rÒ   rþ   Zstr_varrf   rf   rg   ÚBUILD_STRING  s    z&InstructionTranslatorBase.BUILD_STRINGc                 C   sF   |j dks|j dkst‚|j dkr(d}nd}td|d�}|  |¡ d S )Nr   r   Úiszis notr»  rß   )r®   rp   r    r»  )rn   r�   Z
new_argvalZnew_instrf   rf   rg   ÚIS_OP  s    
zInstructionTranslatorBase.IS_OPc                 C   sZ   |j dks|j dkst‚|  d¡\}}|j }|  | | d|gi ¡¡ |dkrV|  |¡ d S )Nr   r   ro  r³  )r®   rp   r“   r‘   rµ  r¶  )rn   r�   r·  r¸  rº  rf   rf   rg   ÚCONTAINS_OP  s    z%InstructionTranslatorBase.CONTAINS_OPc                 C   sR   |   ¡ }|jdkst‚| j|j  }t|tƒs2t‚|js<t‚| | d|gi ¡ d S )Nr   rÛ  )	r¶   r®   rp   r|   rò   r©   rQ   r+  rµ  rç  rf   rf   rg   ÚLIST_EXTEND  s    
z%InstructionTranslatorBase.LIST_EXTENDc                 C   s"   |   ttƒ | |  ¡ gi ¡¡ d S rc   )r‘   rD   rq   r’   r¶   r�   rf   rf   rg   ÚLIST_TO_TUPLE'  s    z'InstructionTranslatorBase.LIST_TO_TUPLEc                 C   sR   |   ¡ }|jdkst‚| j|j  }t|tƒs2t‚|js<t‚| | d|gi ¡ d S )Nr   r¸   )	r¶   r®   rp   r|   rò   r©   rJ   r+  rµ  rç  rf   rf   rg   Ú
DICT_MERGE*  s    
z$InstructionTranslatorBase.DICT_MERGEc                 C   s   |   ¡  d S rc   rZ  r�   rf   rf   rg   Ú	GEN_START4  s    z#InstructionTranslatorBase.GEN_STARTc                 C   sD   | j d }| ¡ r*|  tt| ¡ ƒƒ¡ n|  | | dg i ¡¡ d S )NrÖ   rµ   )r|   r¹   r‘   rE   r—   r»   rµ  r¨  rf   rf   rg   ÚGET_LEN7  s    
z!InstructionTranslatorBase.GET_LENc                 C   sJ   | j d }t|tƒst‚t|jtjjƒr8|  t	dƒ¡ n|  t	dƒ¡ d S ©NrÖ   TF)
r|   r©   rJ   rp   r  r  ÚabcÚMappingr‘   rE   r¨  rf   rf   rg   ÚMATCH_MAPPING>  s
    
z'InstructionTranslatorBase.MATCH_MAPPINGc                 C   s^   | j d }| ¡ st‚| ¡ }t|tjjƒrLt|tt	t
fƒsL|  tdƒ¡ n|  tdƒ¡ d S r  )r|   r¹   rp   r»   r©   r  r  ÚSequencerŒ   ÚbytesÚ	bytearrayr‘   rE   )rn   r�   r©  Z	tos_valuerf   rf   rg   ÚMATCH_SEQUENCEF  s    
 ÿz(InstructionTranslatorBase.MATCH_SEQUENCEc                    s²   | j d }| ¡ st‚| ¡ }| j d }t|tƒs6t‚|j‰ t‡ fdd„|D ƒƒrˆ|  t	‡ fdd„|D ƒƒ¡ t
jdk r®|  tdƒ¡ n&|  td ƒ¡ t
jdk r®|  td	ƒ¡ d S )
NrÖ   rH  c                 3   s   | ]}|ˆ kV  qd S rc   rf   ©r  rÓ  ©Z	match_objrf   rg   r  X  s     z7InstructionTranslatorBase.MATCH_KEYS.<locals>.<genexpr>c                    s   g | ]}ˆ | ‘qS rf   rf   r   r!  rf   rg   r  Y  s     z8InstructionTranslatorBase.MATCH_KEYS.<locals>.<listcomp>rÛ   TF)r|   r¹   rp   r»   r©   rJ   r  r!  r‘   rT   r«   r¬   rE   )rn   r�   r©  rä  Ztos1rf   r!  rg   Ú
MATCH_KEYSQ  s    



z$InstructionTranslatorBase.MATCH_KEYSc                 C   s   t dƒ d S )Nrp  ©r(   r�   rf   rf   rg   r¢   a  s    z.InstructionTranslatorBase.LOAD_ASSERTION_ERRORc                 C   s*   |j dkr|  |¡ d| _n
| jr&t‚d S )Nr   F)rò   Úappend_prefix_instr  rp   r�   rf   rf   rg   Ú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 )	NrÛ   r   rŸ   ZINPLACEZINPLACE_rì  ZBINARY_zBINARY_OP requires Python 3.11+)r«   r¬   rõ   Z_nb_opsrò   r^  rˆ   r(   )rn   r�   r­   rf   rf   rg   Ú	BINARY_OP�  s    

z#InstructionTranslatorBase.BINARY_OPc                 C   s   d S rc   rf   r�   rf   rf   rg   r¥   ™  s    z!InstructionTranslatorBase.PRECALLc                 C   sT   | j d |j }t|tƒst‚|D ]}t|tƒs"t‚q"| jd ksDt‚t|d�| _d S )NÚ	co_constsrg  )rð   rò   r©   rq   rp   rŒ   rñ   rE   )rn   r�   rñ   r`  rf   rf   rg   rÞ   œ  s    z"InstructionTranslatorBase.KW_NAMESc                 C   s   |   tƒ ¡ d S rc   )r‘   rX   r�   rf   rf   rg   rq  ¤  s    z#InstructionTranslatorBase.PUSH_NULLc                 C   sÌ   |   |jd ¡}t|d tƒr,|d }g }n|d }|d g}| jrL| jjnd}|r ||dt|ƒ …  }|t|ƒ d … }tt||ƒƒ}t|ƒt|ƒks´t	‚n||dd …  }i }|  
|||¡ d | _d S )Nro  r   r   rf   )r“   rò   r©   rX   rñ   rÊ   r—   r   rÂ  rp   r’   )rn   r�   Úcontentsr�   r  rñ   rÄ  r  rf   rf   rg   rÝ   §  s     
zInstructionTranslatorBase.CALLc                 C   s   |   | j|j  ¡ d S rc   )r‘   r|   rò   r�   rf   rf   rg   ÚCOPY¾  s    zInstructionTranslatorBase.COPYc                 C   s.   | j |j  | j d  | j d< | j |j < d S ©NrÖ   )r|   rò   r�   rf   rf   rg   ÚSWAPÁ  s    zInstructionTranslatorBase.SWAPc                 C   s   d S rc   rf   r�   rf   rf   rg   ÚCACHEÌ  s    zInstructionTranslatorBase.CACHEc                 C   s   |   |¡ d S rc   r¡  r�   rf   rf   rg   ÚBEFORE_WITHÏ  s    z%InstructionTranslatorBase.BEFORE_WITHc                 C   sð   |   ¡ }|  ¡ }t|tƒs.t|j› d|› �ƒ t|tƒrD| j |¡ | j	j
 |j
¡ t||jft |¡Ž}tjdkr–| js~t‚| jjsŠt‚| jjj}n|j}t| tƒrÂ| j t|t| jƒ|ƒ¡ n| j t|ƒ¡ |  |¡ |  | | ¡¡ d S )Nr;  rÛ   )rÉ   r¶   r©   rG   r(   r­   rH   rä   rK  rz   r·   r¸   rI   rj   rA   r¿   r«   r¬   r€   rp   rô   rQ  r}   ri   r—   r|   r‘   Zenter)rn   r�   rÑ   rú   rs   rj   rf   rf   rg   r¢  Ò  s.    

þý



z.InstructionTranslatorBase.setup_or_before_withc                 C   s   | j s
t‚| j |¡ d S rc   )r  rp   r  rK  r�   rf   rf   rg   r$  ó  s    
z,InstructionTranslatorBase.append_prefix_instc                 C   s   |   |¡ d S rc   ©r$  r�   rf   rf   rg   Ú	MAKE_CELL÷  s    z#InstructionTranslatorBase.MAKE_CELLc                 C   s   |   |¡ d S rc   r.  r�   rf   rf   rg   ÚCOPY_FREE_VARSú  s    z(InstructionTranslatorBase.COPY_FREE_VARSc                 C   s   |   |¡ d S rc   r.  r�   rf   rf   rg   ÚRETURN_GENERATORý  s    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)ry   rz   rÉ   r  r  r{   r  r|   r}   r~   r   r€   r�   rm   rf   rf   rg   rÉ      s    
øz)InstructionTranslatorBase.copy_graphstate)rÑ   c                 C   s2   |\}| _ | _| _| _| _| _| _| j |¡ dS )z6Restore a checkpoint created by self.copy_graphstate()N)	r{   r|   r}   r~   r   r€   r�   rz   rË   )rn   rÑ   Zoutput_staterf   rf   rg   rË     s    ÷z,InstructionTranslatorBase.restore_graphstatec                 C   s`   | j d krdS | j d d }| j d dd … }||˜}|D ] }t|tƒr:t|ƒdkr: dS q:dS )NTr   r   F)r  r©   r   r—   )rn   Zoutput_graphstateZ
graphstaterÑ   rÀ  rf   rf   rg   rL    s    

z*InstructionTranslatorBase.empty_checkpointc                 C   s.   |d krg }d  t |  ¡ gtt|ƒƒ ¡¡S )NrÙ   )ræ   rç   rè   rÂ   r  r[  )rn   Zadditional_stack_framesrf   rf   rg   Ú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�   rm   rf   rf   rg   rÂ   0  s    üz'InstructionTranslatorBase.frame_summaryc                 C   s>   | j j t|ƒ tj¡¡ || j jkr:| j  |t	 
|¡¡ d S rc   )rz   r·   rî   r5   Z
make_guardr*   ZWEAKREF_ALIVErh  rl  ÚweakrefÚref)rn   r`  rÊ   rf   rf   rg   Ústore_dict_key8  s
    ÿz(InstructionTranslatorBase.store_dict_keyc                 C   s   | j S rc   )Ú
_fake_moderm   rf   rf   rg   Ú	fake_mode?  s    z#InstructionTranslatorBase.fake_modec                 C   s(   | j  ¡ D ]\}}||kr
|  S q
d S rc   )r{   r  )rn   Ztensor_variablerÓ  rÊ   rf   rf   rg   Úfind_symbolic_locals_nameC  s    
z3InstructionTranslatorBase.find_symbolic_locals_namec                 c   s   d| _ z
d V  W 5 d| _ X d S r
  )Ústrict_checks_enabledrm   rf   rf   rg   Ústrict_translation_modeI  s    
z1InstructionTranslatorBase.strict_translation_mode©rz   rª   r\  ri  rr  rð   r{   r  rá   rÊ  r  c                    s0  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�rdd	l$m%}m&}m'}m(} |	j)||B |B |B @ �r|  *t+d ƒ¡ || _,t- .|	j/|¡ |  0¡  d S )
Nr   rG  Úco_firstlinenoT)rð  rð   F)rŸ   é
   r   )ÚCO_ASYNC_GENERATORÚCO_COROUTINEÚCO_GENERATORÚCO_ITERABLE_COROUTINE)1ÚsuperÚ__init__rz   r{   r  r|   r~   r    r   r€   r}   rä   r�   rñ   r  r  rª   r   rœ  r\  ri  rr  rð   rá   r/   rS  Únn_module_stackrÊ  Útracing_contextr9  r8  r  r	  r;  r«   r¬   Úresume_executionr@  rA  rB  rC  Úco_flagsr‘   rD   r  r?  Ú	lazycacherâ   rF  )rn   rz   rª   r\  ri  rr  rð   r{   r  rá   rÊ  r  r@  rA  rB  rC  ©Ú	__class__rf   rg   rE  Q  sL    


þ
ÿz"InstructionTranslatorBase.__init__)N)N)årt   ru   rv   r,   rw   r   rŒ   rA   r   r   rx   r"   ri   rE   rº   r
   ry   r   rx  rÁ   r  r  r’   r2  r5  r9  r=  rC  rF  rN  rP  rU  r‘   rX  r¶   r“   ra  rb  rc  rd  ÚSTORE_DEREFrf  r£   rn  r¡   ry  rj  r…  r�  r—  rš  rv  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×  rÙ  rÚ  rQ   rß  rà  ÚBUILD_TUPLE_UNPACK_WITH_CALLrâ  rã  ÚBUILD_MAP_UNPACK_WITH_CALLrå  ræ  rè  rê  rõ  rù  rþ  rG  rÿ  r  r  r  r˜  r  r  r  r  r  r  r  r  Z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_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Þ   rq  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,  r-  r¢  r$  r/  r0  r1  rÉ   rË   rL  r2  rÂ   r7  Úpropertyr9  r:  Ú
contextlibÚcontextmanagerr<  r   r”  ÚCodeTyperE  Ú__classcell__rf   rf   rK  rg   rŽ   é  s˜  
$ÿ

ü	Y
.=

'
$

(
	































	
!		





ôc                       sn   e Zd ZU ee ed< ee ee dœ‡ 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 )rQ  Úmutated_closure_cell_contents)rª   r–  c                    s<  t ƒ tjd|j› d|d › d|d › �ƒ tƒ jt||ˆ|	|
|ˆ||d�	|ˆ|||t ¡ t ¡ ||	dd� t	ˆj
jƒ�¼ |ˆ_|	ˆ_|ˆ_ˆjržˆjsžtd	ƒ‚t|d
 ƒ‰‡fdd„ˆ ¡ D ƒ}ˆ |¡ t|ƒ‰ t ‡ ‡‡fdd„ˆD ƒ¡ˆ_ˆ ¡  tƒ ˆ_ˆjd D ]"}|ˆk�r
tˆ| ƒˆj|< �q
W 5 Q R X d S )Nztorchdynamo start tracing r;  râ   r<  r>  )Zlocal_scoperh  rá   r   r=  z4Export without one graph - something has gone wrong.Úco_varnamesc                    s   g | ]}|ˆ kr|‘qS rf   rf   r  )Úvarsrf   rg   r  Ù  s      z2InstructionTranslator.__init__.<locals>.<listcomp>c                 3   s8   | ]0}|ˆkr|t ˆt||ˆ kd �ƒˆ| ƒfV  qdS ))Zcell_or_freevarN)rB   r6   ©r  r‰   )Úcells_and_freevars_setr\  rn   rf   rg   r  Ý  s   ùþýþz1InstructionTranslator.__init__.<locals>.<genexpr>r  )rh   r   ÚINFOrã   rD  rE  r,   r  r  r   rz   rG  Ú	one_graphrÊ  r–  rp   r  r  rÛ  r  r{   Úinit_local_index_guards_hackr   Ú_freevars_idsrð   rk  )rn   rª   rá   r\  ri  rr  rð   Zcompiler_fnrœ  rÊ  Zexport_constraintsr–  Zframe_stateZcells_and_freevarsr`  rK  )rš  r\  rn   r˜  rg   rE  ¡  s`    þ÷êÿþ
ø

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kr|‘qS rf   )Z	create_fnr*   ZLIST_LENGTHZ	DICT_KEYSZ
ODICT_KEYSZTUPLE_ITERATOR_LEN)r  Úguardrf   rf   rg   r    s   üÿþzFInstructionTranslator.init_local_index_guards_hack.<locals>.<listcomp>)r{   r$  r©   rP   rO   rJ   rA   r¿   rz   r·   r¸   )rn   rV  Zlocal_guardsZindex_guardsrf   rf   rg   r�  ð  s     ÿþz2InstructionTranslator.init_local_index_guards_hackc                    s   t ƒ  ¡  d S rc   )rD  rU  rm   rK  rf   rg   rU    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_contentsrk  rž  rŠ  r{   )rn   r`  ÚcellrÊ   rf   rf   rg   Ú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 rc   )ro   ©r  rý   rf   rf   rg   r     s     zEInstructionTranslator.should_compile_partial_graph.<locals>.<genexpr>)r!  r}   rœ  rm   rf   rf   rg   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ˆƒ‰ g }t	j
dkrètˆjƒD ]\}}t|tƒrd| |¡ qdd}ttˆjƒƒD ]R\}}t|tƒr”td|d | ƒD ]}ˆ  td|d�¡ q¸ˆ  ˆ  ¡ ¡ |d	7 }q”tˆjƒt|ƒ }|t|ƒ }	td
|j› �ƒ}
t ˆjˆj|jtdd„ ˆjD ƒƒ||tdd„ ˆjD ƒƒt|ƒ¡}|j�rrˆ  |
|d|¡ n.ˆj  |
t! "|ˆj#|
¡¡ ˆ  ˆ  $|
d|¡¡ ˆ  ‡ fdd„|D ƒ¡ ˆ  t%|	dƒ¡ ˆ  tdƒ¡ ˆ  &¡ S )NrI  c                 3   s&   | ]}|ˆ kr|ˆ  ¡ kr|V  qd S rc   )r  r™  )r  rn   rf   rg   r  )  s    þz>InstructionTranslator.create_call_resume_at.<locals>.<genexpr>rÛ   r   ro  r+  )rò   r   Z__resume_at_c                 s   s   | ]}|j jV  qd S rc   )rj   r  r£  rf   rf   rg   r  P  s     c                 s   s   | ]}|  ¡ V  qd S rc   )rr   r£  rf   rf   rg   r  S  s     Tc                    s   g | ]}ˆ   |¡‘qS rf   )Zcreate_loadr™  )rû   rf   rg   r  _  s     z?InstructionTranslator.create_call_resume_at.<locals>.<listcomp>F)'r~   r­   r    r   rª   rq   r{   rä  r%   r«   r¬   Ú	enumerater|   r©   rX   rK  r[  rù   Zappend_outputZextend_outputZpop_nullr—   r$   r  r0   Úlookuprá   r�   r}   r  Zmake_function_with_closurerz   rl  r”  ÚFunctionTyperi  Zload_function_namer   Úget_instructions)rn   r�   rÃ  Z
null_idxesrö  ÚvarZnull_cntÚjZ	stack_lenr•   r`  Znew_coderf   )rû   r  rn   rg   rÇ   "  sX    

þ



ø ÿ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 compileZreturn_valueF)rÚ   r²   rI  )rz   Zcount_callsrÊ  r   rÄ   r~   rh   r   r›  rá   rã   re   rÅ   rÆ   r+   rÂ   rÈ   r    r�   rf   rf   rg   rI  d  s"    
þ
  ÿþz"InstructionTranslator.RETURN_VALUE)rt   ru   rv   r	   rŒ   rw   r   r"   rE  r�  rU  r¢  rÀ   rÇ   rI  r•  rf   rf   rK  rg   rQ  ž  s   

ôO$BrQ  c                       sì   e Zd ZU dZee ed< edd„ ƒZe	dd„ ƒZ
e	eee dœ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dd„ Z‡ fdd„Zdd„ Zdd„ Zeedœ‡ fdd„Zdd„ Zdd„ Zd d!„ Z‡  Z S )"r6  z Trace and inline a called methodÚsymbolic_resultc              
   C   s<   t  tdtd i¡� |  ||||¡W  5 Q R £ S Q R X d S )Nr(   r7  )r   r   r7   Úinline_call_)rÝ  r‹  Úfuncr  r  rf   rf   rg   r7  {  s    z)InliningInstructionTranslator.inline_callc                 C   s  |   ¡ rtdƒ |  ¡ dkr$tdƒ z(t|  ¡ ƒtjkrJtd|  ¡ › �ƒ W n tk
r`   Y nX t 	|  
¡ ¡rÚt |  
¡ ¡sÚddlm}m}m} t| jdƒr´| jj|||fkr´d S td| jj› d	|  ¡ › d
|  
¡ › �ƒ t| tƒ�rt |  ¡ dd¡�rtd|  ¡ › �ƒ d S )Nzinline with __self__Z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  | r;  Z_torchdynamo_disableFz.call torch._dynamo.disable() wrapped function )Zhas_selfr(   Úget_namerk  Zget_functionr   Z_disallowed_function_idsrÜ  r   ÚcheckÚget_filenameZis_torch_inline_allowedZtorch._dynamo.variables.miscr­  r®  r¯  r  r�   r°  rv   r©   rM   r˜   Úgetattr_static)r¬  r­  r®  r¯  rf   rf   rg   Úcheck_inlineable€  s@    ÿþý ÿ  ÿÿz.InliningInstructionTranslator.check_inlineable)r¬  r  c                    sð  t |ttfƒst‚t |¡ z| | ||¡\}}W nf tk
r˜ } zHtdj	t
|ƒd| ¡ › d| ¡ › d| ¡ j› �dd„ |D ƒ|d�ƒ‚W 5 d }~X Y nX t | ¡ | ¡ ¡D ]}t |tƒs®td|› �ƒ q®| ¡ ‰ ˆ jd	krîtd
ˆ j› �ƒ d}tjjj d¡�rdt ˆ ¡ ¡ › �}tjdk�rb| j‰| j‰| j ˆj!j"d�‰‡ ‡‡‡fdd„}	t# $dt%|	ƒ¡ t& $dˆ |¡ t'ˆ ƒ�r�t(| ˆ || j)||ƒ}
nt| ˆ || j)||ƒ}
t* +¡ }| j,�r¼|
 -¡ }z|� |
 .¡  W 5 Q R X W nz t/j0k
�r" } z(dˆ › d|› �}t& $|¡ t1|ƒ|‚W 5 d }~X Y n2 t2k
�rR } zt& $dˆ ¡ ‚ W 5 d }~X Y nX |
j3d k	�sdt‚| 4| |
¡ |
j5| j5k�rŒ| j) 6|
j)¡ t& $dˆ ¡ t'ˆ ƒ�ræt |
t(ƒ�s²t‚|
j3 7¡ d k�sÆt‚t8|
j9fdt:ƒ it ;|
j3¡—ŽS |
j3S d S )Nz;{reason}.
  func = {func}, args = {args}, kwargs = {kwargs}ú'z' r<  c                 S   s   g | ]}|  ¡ ‘qS rf   )Zpython_type)r  rò   rf   rf   rg   r  ¼  s     z>InliningInstructionTranslator.inline_call_.<locals>.<listcomp>)r³   r¬  r  r  zunconverted arg )rÒ  Ú__setattr__zinline rÙ   Zoutput_coder>  rÛ   )r�   c                     s&   t ˆˆƒ ¡ } dˆ j› dˆ› d| › �S )NzTRACE inlined call z from r>  )r9   rA  rã   )rB  ©rð  Zcur_instÚheaderZparent_coderf   rg   Úget_trace_call_log_strÓ  s    zJInliningInstructionTranslator.inline_call_.<locals>.get_trace_call_log_strrD  zINLINING %s%szSKIPPED INLINING z: zFAILED INLINING %szDONE INLINING %sr+  )<r©   rM   rL   rp   r6  rµ  Z	bind_argsÚ	TypeErrorr&   r  rŒ   r±  r³  Úget_coder>  r"  r#  r$  rA   r(   rã   r½   Ú_loggingÚ	_internalZ	log_stateZis_artifact_enabledrõ   ÚBytecoder«   r¬   r   rá   r=  Z	positionsr�   Útrace_call_logrÅ   r<   re   r#   Ú&InliningGeneratorInstructionTranslatorr  r’  Únullcontextr;  r<  rU  r   rÄ   r)   r8  rª  Zexport_freevarsri  r¸   r»   rP   Úgenerated_itemsr?   r¿   )r‹  r¬  r  r  Z
sub_localsÚclosure_cellsrT  r  rü  rº  ZtracerZ
strict_ctxrÎ   rf   r¸  rg   r«  «  sœ    þ
"üÿ	


     ÿ     ÿ

ÿþ
ýz*InliningInstructionTranslator.inline_call_)r‹  rð  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 rf   )rˆ   r™  ©rð  rf   rg   Ú
<dictcomp>	  s      z:InliningInstructionTranslator.__init__.<locals>.<dictcomp>r   )rz   r\  ri  rr  r{   r  rª   rð   rá   rÊ  r  )Zget_globalsr©   r   Ú__dict__rD  rE  rz   r   ÚdirrÊ  r  r‹  rª  rÄ  rF  ró   )	rn   r‹  rð  r{   r  rÄ  rÅ  ri  rr  rK  rÇ  rg   rE  	  s*    	
õz&InliningInstructionTranslator.__init__c                 C   s   | j jS rc   )r‹  r9  rm   rf   rf   rg   r9  $	  s    z'InliningInstructionTranslator.fake_modec                 C   s   t  | j ¡ ¡S rc   )r   rO  r‹  rÂ   rm   rf   rf   rg   rP  (	  s    z)InliningInstructionTranslator.run_ctx_mgrc                 C   sÞ   |j | jkr`| j|j  }|  ¡ }t|tƒrN| j ¡ s<tdƒ || jjj	|j
< qÚ| jj ||¡ nz| j	 |j ¡}t|tjƒr˜| jj | j	|j  |  ¡ ¡ nB|d k	rÒ|j 
¡ | jjjkrÒ| 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©   rU   rz   Zis_root_tracerr(   Úroot_txr{   r`  r   Z
store_cellrŠ  r   ÚNewCellVariablerm  r–  rî   r   ZRestartAnalysis)rn   r�   r¡  rV  Z
maybe_cellrf   rf   rg   rM  +	  s<    

ÿþ
 ÿÿÿþ
ÿz)InliningInstructionTranslator.STORE_DEREFc                    s’   |j | jk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 rc   )r®   rÄ  r©   rU   r‘   rz   rË  r{   r`  r   Z	load_cellrŠ  r   rÌ  rD  rb  )rn   r�   r¡  Zmaybe_sym_localrK  rf   rg   rb  R	  s    
z(InliningInstructionTranslator.LOAD_DEREFc                 C   sH   |j |  ¡ kst‚|j | jkr2|  | j|j  ¡ n|  t|j d�¡ d S re  )r®   r  rp   rÄ  r‘   rW   r�   rf   rf   rg   rf  `	  s    z*InliningInstructionTranslator.LOAD_CLOSUREc                 C   s   t |jƒstdƒ d S )NzOHigherOrderOperator: Mutating a variable not in the current scope (replace_all))r>   r+  r(   )rn   r'  rf   rf   rg   Úcheck_replace_is_safeg	  s    
ÿz3InliningInstructionTranslator.check_replace_is_safer&  c                    s>   |   |¡ tƒ  ||¡}| }t|dƒr:|j}| ||¡ q|S )Nr‹  )rÍ  rD  r5  r  r‹  r2  )rn   r'  r(  Z
translatorrK  rf   rg   r5  m	  s    

z)InliningInstructionTranslator.replace_allc                 C   s   dS )NFrf   rm   rf   rf   rg   rÀ   w	  s    z:InliningInstructionTranslator.should_compile_partial_graphc                 C   s   t dƒ d S )Nzcant resume while inliningr#  rÑ  rf   rf   rg   rÇ   z	  s    z3InliningInstructionTranslator.create_call_resume_atc                 C   s   |   ¡ | _d | _d S rc   )r¶   rª  r~   r�   rf   rf   rg   rI  }	  s    
z*InliningInstructionTranslator.RETURN_VALUE)!rt   ru   rv   Ú__doc__r   r_   rw   Úclassmethodr7  Ústaticmethodrµ  rA   r   r«  rŽ   r”  r”  r   rŒ   rK   rE  r‘  r9  rP  rM  rb  rf  rÍ  r5  rÀ   rÇ   rI  r•  rf   rf   rK  rg   r6  v  s8   


* ÿ[


ù
'
r6  c                       sP   e Zd ZU ee ed< ‡ fdd„Zedœdd„Zdd„ Z	d	d
„ Z
dd„ Z‡  ZS )rÁ  rÃ  c                    s   t ƒ j||Ž g | _d S rc   )rD  rE  rÃ  )rn   r  r  rK  rf   rg   rE  …	  s    z/InliningGeneratorInstructionTranslator.__init__)r�   c                 C   s"   | j  |  ¡ ¡ |  td ƒ¡ d S rc   )rÃ  rK  r¶   r‘   rE   r�   rf   rf   rg   ÚYIELD_VALUE‰	  s    z2InliningGeneratorInstructionTranslator.YIELD_VALUEc                 C   sD   | j d }t|tƒs:|  ¡  ttƒ | |gi ¡}|  |¡ |  |¡S r*  )	r|   r©   rP   r¶   rD   r¼  r’   r‘   Ú
YIELD_FROM)rn   r�   r©  Úresrf   rf   rg   ÚGET_YIELD_FROM_ITERŽ	  s    


z:InliningGeneratorInstructionTranslator.GET_YIELD_FROM_ITERc                 C   s¸   | j d }t|tƒr*|jd kr*|  ¡  d S t|tƒr | jj |j¡ zB| 	¡ \}}|  
||¡ |  |¡ |  |¡ |  ¡  |  |¡ W q² tk
rœ   Y d S X q tdt|ƒ› �ƒ q d S )NrÖ   zYIELD_FROM )r|   r©   rE   rÊ   r¶   rP   rz   r·   r¸   r¬  r5  r‘   rÑ  r­  r(   r@   )rn   r�   r©  rV  r¯  rf   rf   rg   rÒ  –	  s     




z1InliningGeneratorInstructionTranslator.YIELD_FROMc                 C   s|   t | jƒdkst‚|  ¡ }| jd }t|tƒrft|tƒr\|jd kr\|  |¡ | j	|j
 | _qxtdƒ ntdt|ƒ› �ƒ d S )Nro  rÖ   zUnreachable sub-generator codezSEND )r—   r|   rp   r¶   r©   rP   rE   rÊ   r‘   rœ  rj   r~   r(   r@   )rn   r�   rV  r©  rf   rf   rg   ÚSEND«	  s    



z+InliningGeneratorInstructionTranslator.SEND)rt   ru   rv   r   rA   rw   rE  r"   rÑ  rÔ  rÒ  rÕ  r•  rf   rf   rK  rg   rÁ  ‚	  s   
rÁ  )¥r  r’  ró   Údataclassesrõ   r›   r}  r˜   r"  r?  r   r§   r«   rç   r”  Útypingr5  Úcollections.abcr   r   r   r   r   r   r   r	   r
   r   Zunittest.mockr   r½   Ztorch._loggingZtorch._guardsr   r   r   rÙ   r   r   r   rd   r   r   r   r   r   r   Zbytecode_analysisr   r   r   Zbytecode_transformationr   r   r    r!   r"   r#   r$   Zcodegenr%   r&   r'   r(   r)   r·   r*   Zoutput_graphr+   r,   r-   Zreplay_recordr.   r/   rH  r0   r1   rm  r2   r3   r4   r5   r6   Úutilsr7   r8   r9   r:   r;   r<   r=   Zvariables.baser>   r?   r@   rA   Zvariables.builderrB   rC   Zvariables.builtinrD   Zvariables.constantrE   rF   Zvariables.ctx_managerrG   rH   rI   Zvariables.dictsrJ   Zvariables.functionsrK   rL   rM   rN   Zvariables.listsrO   rP   rQ   rR   rS   rT   Zvariables.miscrU   rV   rW   rX   rY   rZ   Zvariables.nn_moduler[   Zvariables.tensorr\   r]   r^   r_   Zvariables.torchr`   Zvariables.user_definedra   rb   Ú	getLoggerrt   re   r½  ZgetArtifactLoggerrê   rÀ  rE  Ú	lru_cacherh   Ú	dataclassri   ry   rx  r�   rº   r°   rÕ   rí   r  rŽ   rQ  r6  rÁ  rf   rf   rf   rg   Ú<module>   s¦   ,$	$	$	  

ýF 	k           @ Y  