U
    ªÊ¹jµ„  ã                   @   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mZmZ d dl	Z
d dlmZ ddlmZmZ ddlmZmZ ddlmZ ddlmZmZ ddlmZmZmZ d	d
lmZmZ d	dl m!Z! d	dl"m#Z#m$Z$m%Z% d	dl&m'Z' G dd„ deƒZ(G dd„ deƒZ)G dd„ de)ƒZ*G dd„ deƒZ+G dd„ de)ƒZ,G dd„ de)ƒZ-G dd„ deƒZ.G dd„ deƒZ/G dd„ deƒZ0d d!„ Z1d"d#„ Z2d$d%„ Z3G d&d'„ d'eƒZ4G d(d)„ d)e'ƒZ5G d*d+„ d+eƒZ6G d,d-„ d-eƒZ7G d.d/„ d/eƒZ8G d0d1„ d1eƒZ9G d2d3„ d3eƒZ:ej;d	d4�d5d6„ ƒZ<G d7d8„ d8eƒZ=G d9d:„ d:eƒZ>G d;d<„ d<eƒZ?dS )=é    N)ÚDictÚListé   )ÚconfigÚ	variables)Úcreate_call_functionÚcreate_instruction©Úunimplemented)Ú
AttrSourceÚODictGetItemSource)Úcheck_constant_argsÚidentityÚproxy_args_kwargsé   )ÚMutableLocalÚVariableTracker)ÚDefaultDictVariable)ÚNestedUserFunctionVariableÚUserFunctionVariableÚUserMethodVariable)ÚUserDefinedObjectVariablec                       sH   e Zd Zd‡ fdd„	Z‡ fdd„Z‡ fdd„Zd	d
ddœdd„Z‡  ZS )ÚSuperVariableNFc                    s$   t ƒ jf |Ž || _|| _|| _d S ©N)ÚsuperÚ__init__ÚtypevarÚobjvarÚspecialized)Úselfr   r   r   Úkwargs©Ú	__class__© ú[/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/_dynamo/variables/misc.pyr      s    zSuperVariable.__init__c                    sD   |t  t¡ƒ || jƒ | jd k	r6|| jƒ tddƒS tddƒS d S )Nr   Tr   )r   ÚBuiltinVariabler   r   r   r   ©r   Zcodegenr!   r#   r$   Úreconstruct!   s    



zSuperVariable.reconstructc                    sZ   | j stdƒ‚| jr$t| j ¡ |ƒS | j ¡ }| j  ¡ }t|tƒrJ| j j	}tt
||ƒ|ƒS )Nz1-arg super not implemented)r   ÚAssertionErrorr   Úgetattrr   Úas_python_constantÚpython_typeÚ
issubclassÚtypeÚvaluer   )r   ÚtxÚnameZsearch_typeZtype_to_user!   r#   r$   Úconst_getattr*   s    


zSuperVariable.const_getattrúList[VariableTracker]úDict[str, VariableTracker]r   ©Úargsr    Úreturnc                 C   sè  t  | || ¡ | j| j¡}|  | |¡}| jd kr4d n
t| j|ƒ}|tj	krVt
tf|ŽS |tjjj	krÜ| j}ddlm}	 t|tjƒrÐt|j|	ƒrÐ|sÐ|sÐ|jj | dtƒ ¡¡ |jj |dt d¡¡ t d ¡S tdƒ �nt|tjƒ�rtj|fd|i|—Ž  || jg| |¡S t|tj!ƒ�rFtj"|j#| jfd|i|—Ž  |||¡S |t$j%j&k�rÖt| jtjƒ�rÖ| jj�rÖt'|ƒdk�rÖt'|ƒd	k�rÖ|d	  (¡ �rÖdd
l)m*}
 |d	  +¡ }|
|t,| jj|ƒƒt$j% &| jj-|¡ƒS td|› �ƒ d S )Nr   )ÚAttributeMutationNewÚguardsZ__call_nn_module_initTzsuper() nn.Module.__init__Úsourcer   r   )ÚVariableBuilderznon-function or method super: ).r   Ú	propagateÚvaluesr   r   r1   r9   r   Úobjectr   ÚLambdaVariabler   ÚtorchÚnnÚModuleÚside_effectsr7   Ú
isinstancer   r   Úmutable_localÚoutputr8   ÚupdateÚgetÚsetZ
store_attrÚConstantVariabler
   ÚtypesÚFunctionTyper   Úcall_functionÚ
MethodTyper   Ú__func__ÚcollectionsÚOrderedDictÚ__getitem__ÚlenÚis_python_constantÚbuilderr:   r*   r   r.   )r   r/   r0   r5   r    ÚoptionsZinner_fnr9   r   r7   r:   Úkeyr#   r#   r$   Úcall_method:   s’        ÿ

ÿ
þýý  ÿ
ÿÿÿ 
 þ ÿÿÿ  þ
ÿþý
ü
û
úÿzSuperVariable.call_method)NF)Ú__name__Ú
__module__Ú__qualname__r   r'   r1   rW   Ú__classcell__r#   r#   r!   r$   r      s   	úr   c                   @   s   e Zd ZdZdS )ÚUnknownVariablez
    It could be anything!
    N©rX   rY   rZ   Ú__doc__r#   r#   r#   r$   r\   r   s   r\   c                   @   s   e Zd ZdZdS )ÚDelayGraphBreakVariablez^
    Used to insert a dummy variable in the stack to do the graph break at CALL_FUNCTION.
    Nr]   r#   r#   r#   r$   r_   x   s   r_   c                   @   s:   e Zd ZdZdd„ Zeddœdd„Zdd	dd
œdd„ZdS )ÚComptimeVariableza
    This variable is special, it lets you execute arbitrary code at
    Dynamo compile time
    c                 C   s   t dƒ‚d S )Nzcomptime is special form)ÚNotImplementedErrorr&   r#   r#   r$   r'   „   s    zComptimeVariable.reconstructr   )r0   r6   c                 C   s2   ddl m } ddlm} |t||ƒt| j|ƒd�S )Nr   )Úcomptimer   )r   ©r9   )rb   Ú	functionsr   r)   r   r9   )r   r/   r0   rb   r   r#   r#   r$   Úvar_getattr‡   s     
ÿzComptimeVariable.var_getattrr2   r3   r4   c                 C   sÈ   ddl m} |rt‚t|ƒdks$t‚|d }t|tƒrH| ¡ ||ƒƒ nvt|tƒr¬| ¡ }|j	rptd|j
› �ƒ‚t ||j|j ¡ |jr”t|jjƒnd tƒ ¡}|||ƒƒ ntdt|ƒ› �ƒ‚t d ¡S )Nr   )ÚComptimeContextr   r   zOcomptime function must not have free variables, but these variables were free: z"unsupported argument to comptime: )rb   rf   r(   rR   rC   r   Zget_functionr   Úget_codeÚclosureÚco_freevarsrJ   rK   Ú	f_globalsÚfn_namer*   ÚdefaultsÚtupleÚitemsÚRuntimeErrorr-   r   rI   )r   r/   r5   r    rf   ÚfnÚcodeÚfuncr#   r#   r$   rL   ‘   s*    


ÿözComptimeVariable.call_functionN)rX   rY   rZ   r^   r'   Ústrre   rL   r#   r#   r#   r$   r`   ~   s    þr`   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚClosureVariablec                    s   t ƒ jf |Ž || _d S r   ©r   r   r0   ©r   r0   r    r!   r#   r$   r   ¸   s    zClosureVariable.__init__c                 C   s   |  | j¡gS r   ©Zcreate_load_closurer0   r&   r#   r#   r$   r'   ¼   s    zClosureVariable.reconstruct©rX   rY   rZ   r   r'   r[   r#   r#   r!   r$   rt   ·   s   rt   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚInlinedClosureVariablec                    s   t ƒ jf |Ž || _d S r   ru   rv   r!   r#   r$   r   Â   s    zInlinedClosureVariable.__init__c                 C   s   |  | j¡gS r   rw   r&   r#   r#   r$   r'   Æ   s    z"InlinedClosureVariable.reconstructrx   r#   r#   r!   r$   ry   Á   s   ry   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚNewCellVariablec                    s   t ƒ jf |Ž d S r   ©r   r   ©r   r    r!   r#   r$   r   Ë   s    zNewCellVariable.__init__©rX   rY   rZ   r   r[   r#   r#   r!   r$   rz   Ê   s   rz   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚNewGlobalVariablec                    s   t ƒ jf |Ž d S r   r{   r|   r!   r#   r$   r   Ð   s    zNewGlobalVariable.__init__r}   r#   r#   r!   r$   r~   Ï   s   r~   c                       s,   e Zd ZdZedd„ ƒZ‡ fdd„Z‡  ZS )ÚInspectSignatureVariablez!represents inspect.signature(...)c                 K   s   |rt d|› �ƒ t| ƒS )Nzinspect.signature with )r
   r   )Úcallabler    r#   r#   r$   Úcreate×   s    zInspectSignatureVariable.createc                    s   t ƒ jf |Ž || _d S r   )r   r   Ú	inspected)r   r‚   r    r!   r#   r$   r   Ý   s    z!InspectSignatureVariable.__init__)rX   rY   rZ   r^   Ústaticmethodr�   r   r[   r#   r#   r!   r$   r   Ô   s   
r   c                    s   ‡ fdd„}t |_|S )Nc                     s   ˆ j | |ŽS r   )Úforward©r5   r    ©Úfn_clsr#   r$   Útrampoline_autograd_fwdã   s    z@produce_trampoline_autograd_fwd.<locals>.trampoline_autograd_fwd)Úproduce_trampoline_autograd_fwdÚ_origin)r‡   rˆ   r#   r†   r$   r‰   â   s    r‰   c                    s   ‡ fdd„}t |_|S )Nc                     s   ˆ j | |ŽS r   )Úbackwardr…   r†   r#   r$   Útrampoline_autograd_bwdë   s    z@produce_trampoline_autograd_bwd.<locals>.trampoline_autograd_bwd)Úproduce_trampoline_autograd_bwdrŠ   )r‡   rŒ   r#   r†   r$   r�   ê   s    r�   c                    s   ‡ fdd„}t |_|S )Nc                     s   ˆ j | |ŽS r   )Úapplyr…   r†   r#   r$   Útrampoline_autograd_applyó   s    zDproduce_trampoline_autograd_apply.<locals>.trampoline_autograd_apply)Ú!produce_trampoline_autograd_applyrŠ   )r‡   r�   r#   r†   r$   r�   ò   s    r�   c                       s@   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	d
œdd„Z‡  ZS )ÚAutogradFunctionVariablez-represents a torch.autograd.Function subclassc                    s   t ƒ jf |Ž || _d S r   )r   r   r‡   )r   r‡   r    r!   r#   r$   r   ý   s    z!AutogradFunctionVariable.__init__c              	      s  d‰ ‡ ‡fdd„}t  |||f¡ t ˆ¡}|f|•}ˆ �rht ¡ �rhtj�rh| jj	tj
jjj	krjtdƒ | jj}|tj
jjk	rˆtdƒ | jj}|tj
jjk	r¦tdƒ ddlm}m}	 t| jƒ}
t| jƒ}t| jƒ}ˆjjˆ ¡  }}tˆ | jj¡| jjƒ}|	j|t|d	ƒd
�}| ˆ||¡}||g}|ˆ|||	j|t|dƒd
�|ƒ |dd … }|	 |
¡ ˆ||¡S t   | || !¡ ¡}tt| j"dƒd	ƒ|d< | jj#}t$|t%j&ƒ�r¾t'j(|f|Ž ˆ||¡S t$|t%j)ƒ�rðt'j*|j+t' ,| j¡f|Ž ˆ||¡S td|› �ƒ d S )NFc                    s8   t | tjƒr| jdk	rd‰ t | tjƒr4|  ˆ¡r4d‰ | S )NFT)rC   r   ZTensorVariableÚrequires_gradÚNNModuleVariableZis_training)Únode©r’   r/   r#   r$   Úvisit  s    

z2AutogradFunctionVariable.call_apply.<locals>.visitz8NYI - autograd.Function with custom setup_context methodzNYI - User defind vjpzNYI - User defind jvpr   )Úsafe_or_raise_always_restoreÚ TorchHigherOrderOperatorVariabler„   rc   r‹   r"   r9   z?non-function or method in subclass of torch.autograd.Function: )-r   rŽ   ÚAutogradFunctionContextVariabler�   r?   Zis_grad_enabledr   Zcapture_autograd_functionr‡   Zsetup_contextÚautogradÚfunctionZ_SingleLevelFunctionr
   ZvjpÚFunctionZjvpZhigher_order_opsr—   r˜   r�   r‰   r�   rE   ÚgraphZcopy_graphstater   Zimport_sourcerY   rX   ÚmakerL   r;   r<   r9   r„   rC   rJ   rK   r   r   rM   r   rN   ÚUserDefinedClassVariable)r   r/   r5   r    r–   ÚctxZvjp_fnZjvp_fnr—   r˜   r�   rˆ   rŒ   Zgraph_checkpointÚ
checkpointZmodule_sourceZhigher_order_autograd_fnZspeculated_fwd_resultZbwd_argsrU   rp   r#   r•   r$   Ú
call_apply  s¨    


ÿþý
ÿÿÿ


 ÿ ÿ  ÿþøÿ  þ  ÿ 
ÿÿ  þÿz#AutogradFunctionVariable.call_applyc                 C   s*   t  | || ¡ ¡}t| jfd| ji|—ŽS )Nr9   )r   r;   r<   r‘   r‡   r9   )r   r/   r5   r    rU   r#   r#   r$   rL   s  s    z&AutogradFunctionVariable.call_functionr2   r3   r…   c              
   C   s.  |dkrœ|  ¡ �„ t| jjtjƒr0t| jjƒ}nHt| jjtjƒrft| jjj	t
 | j¡ƒ}|jg| }ntd| jj› �ƒ | ||||¡W  5 Q R £ S Q R X nŽ|dk�rt| jjtjƒrÄt| jjƒ}nHt| jjtjƒrút| jjj	t
 | j¡ƒ}|jg| }ntd| jj› �ƒ | ||||¡S td|› �ƒ d S )Nr‹   z&backward is a non-function or method: r„   z%forward is a non-function or method: zUnsupported method: )Zstrict_translation_moderC   r‡   r‹   rJ   rK   r   rM   r   rN   r   rŸ   Úobjr
   Zinline_callr„   )r   r/   r0   r5   r    r‹   r„   r#   r#   r$   rW   w  s8    

þÿ$

þÿz$AutogradFunctionVariable.call_method)	rX   rY   rZ   r^   r   r¢   rL   rW   r[   r#   r#   r!   r$   r‘   ú   s   rûr‘   c                       sT   e Zd ZdZd‡ fdd„	Zedd„ ƒZdd	„ Zd
dddœdd„Z‡ fdd„Z	‡  Z
S )r™   zZ
    Tracks an autograd.Function() context using mutation tracking in side_effects.py
    NFc                    s4   |  dg ¡}tƒ jf ||dœ|—Ž || _|| _d S )NÚ_saved_tensors)r.   Ú
value_type)Úpopr   r   r¤   Ú	inference)r   r.   r¥   r§   r    Úsaved_tensorsr!   r#   r$   r   ¨  s    z(AutogradFunctionContextVariable.__init__c                 C   sV   | j j d tjjjtjt	dd�i ¡}| j  
dtjjjtƒ i ¡}|j|jjd< ||_|S )NT)r§   rL   Zexample_value)rE   rB   Ztrack_object_newr?   rš   r›   ZFunctionCtxÚ	functoolsÚpartialr™   Úcreate_proxyrm   r.   r”   ÚmetaÚproxy)r/   Úoutr­   r#   r#   r$   r�   ®  s    ü   ÿz&AutogradFunctionContextVariable.createc                 C   s   | j S r   )r­   ©r   r#   r#   r$   Úas_proxy¾  s    z(AutogradFunctionContextVariable.as_proxyr2   r3   r   r4   c                 C   s    |dkrt d|› �ƒ | js:| jr&|r*t‚|jj | |¡ t | || 	¡ ¡}t
| dƒs\g | _|D ]2}t| ¡ tjjƒr†d| ¡ jjd< | j |¡ q`tjd|ŽS )NÚsave_for_backwardz"autograd.Function context method: r¤   TZsaved_tensor_marked)N)r
   r§   r9   r(   rE   rB   Ztrack_save_for_backwardr   r;   r<   Úhasattrr¤   rC   r°   r?   ÚfxÚProxyr”   r¬   Úappendr   rI   )r   r/   r0   r5   r    rU   Úargr#   r#   r$   rW   Á  s    
z+AutogradFunctionContextVariable.call_methodc                    sH   ˆ dkr"t ‡ ‡‡fdd„ƒ ˆ¡S ˆ dkr:t tˆjƒ¡S tƒ  ˆˆ ¡S )Nr±   c                     s   ˆ  ˆˆ | |¡S r   )rW   r…   ©r0   r   r/   r#   r$   Ú<lambda>Ü  ó    z=AutogradFunctionContextVariable.var_getattr.<locals>.<lambda>r¨   )r>   Úadd_optionsr   ÚTupleVariableÚlistr¤   r   re   )r   r/   r0   r!   r·   r$   re   Ù  s    ÿþz+AutogradFunctionContextVariable.var_getattr)NF)rX   rY   rZ   r^   r   rƒ   r�   r°   rW   re   r[   r#   r#   r!   r$   r™   £  s   
úr™   c                       s.   e Zd Z‡ fdd„Zddddœdd„Z‡  ZS )	r>   c                    s   t ƒ jf |Ž || _d S r   )r   r   rp   )r   rp   r    r!   r#   r$   r   ä  s    zLambdaVariable.__init__r2   r3   r   r4   c                 C   s   | j ||Ž | ¡S r   )rp   rº   )r   r/   r5   r    r#   r#   r$   rL   è  s    zLambdaVariable.call_function)rX   rY   rZ   r   rL   r[   r#   r#   r!   r$   r>   ã  s
    þr>   c                       sz   e Zd Z‡ fdd„Zdd„ Zeejjdœdd„ƒZ	dd	„ Z
d
d„ Zdd„ Zddddœdd„Zddddœ‡ fdd„Z‡  ZS )ÚGetAttrVariablec                    s:   t ƒ jf |Ž t|tƒst‚t|tƒs*t‚|| _|| _d S r   )r   r   rC   r   r(   rs   r£   r0   )r   r£   r0   r    r!   r#   r$   r   ï  s
    zGetAttrVariable.__init__c                 C   s   | j j› d| j› d| j› d�S )Nú(z, ú))r"   rX   r£   r0   r¯   r#   r#   r$   Ú__str__ö  s    zGetAttrVariable.__str__)Ú
base_proxyc                 C   s
   t | |ƒS r   )r)   )rÁ   Úattrr#   r#   r$   Úcreate_getattr_proxyù  s    z$GetAttrVariable.create_getattr_proxyc                 C   s   t  | j ¡ | j¡S r   )r½   rÃ   r£   r°   r0   r¯   r#   r#   r$   r°   ý  s    zGetAttrVariable.as_proxyc                 C   s`   t | jtjƒstƒ ‚|j | jj¡}| j|j	kr6tƒ ‚t
 || j¡}||j	krTtƒ ‚t
 ||¡S r   )rC   r£   r   r“   ra   rE   Zget_submoduleZ
module_keyr0   Ú__dict__ÚinspectÚgetattr_static)r   r/   r0   Zstep1Zstep2r#   r#   r$   r1      s    
zGetAttrVariable.const_getattrc                 C   s   || j ƒ | | j¡S r   )r£   Zcreate_load_attrsr0   r&   r#   r#   r$   r'     s    
zGetAttrVariable.reconstructr2   r3   r   r4   c              
   C   sæ  ddl m} | jdkoJt| jtƒoJt| jjjj	ƒdkoJ| jjjj	d t
jk}|�r>ddlm} |d }|d j}|d j}	t | ||	 ¡ ¡}
t
j ¡ �¢ t|d |ƒrÞ|f ||jjd|jft||	ƒžŽ d	œ|
—ŽW  5 Q R £ S t|d tƒ�r&|f ||jjd
|jft||	ƒžŽ d	œ|
—ŽW  5 Q R £ S td|› �ƒ W 5 Q R X t| jtƒ�rn| jdk�rn| j |||¡ | ¡S t| jtjƒ�rÌt|ƒdk�rÌt|d  ¡ | jjƒ�rÌt| j|d dƒ  || j|dd … |¡S | j  || j||¡ | ¡S )Nr   )Úwrap_fx_proxyZ__torch_function__)ÚTorchVariabler   r   é   rL   )r/   r­   rW   z:GetAttrVariable.call_function original __torch_function__ rŽ   T)!rT   rÇ   r0   rC   r£   r   rR   r   r.   Ú__mro__r?   ZTensorÚ rÈ   rn   r   r;   r<   Z_CZDisableTorchFunctionSubclassrE   r«   r   r½   r
   r‘   r¢   rº   r   rŸ   r,   r+   rW   )r   r/   r5   r    rÇ   Z!is_original_tensor_torch_functionrÈ   Z"original_torch_or_getattr_variableÚnew_argsZ
new_kwargsrU   r#   r#   r$   rL     sr    	

ÿýû

þýþù	þýþù
ÿÿ
þý  
 ÿzGetAttrVariable.call_functionc                    sV   |dkrDt | jtƒrD| jdkrDtj| jj ¡ ft 	| | j| jj¡ŽS t
ƒ  ||||¡S )NÚ__len__Ú
parameters)rC   r£   r   r0   r   rI   r‚   Znum_parametersr   r;   r   rW   ©r   r/   r0   r5   r    r!   r#   r$   rW   T  s    ÿ
þý
ÿþzGetAttrVariable.call_method)rX   rY   rZ   r   rÀ   rƒ   r?   r³   r´   rÃ   r°   r1   r'   rL   rW   r[   r#   r#   r!   r$   r½   î  s    þIúr½   c                       s,   e Zd Zejdœ‡ fdd„Zdd„ Z‡  ZS )ÚPythonModuleVariable©r.   c                    s   t ƒ jf |Ž || _d S r   ©r   r   r.   ©r   r.   r    r!   r#   r$   r   h  s    zPythonModuleVariable.__init__c                 C   s   t jS r   )rJ   Ú
ModuleTyper¯   r#   r#   r$   r+   l  s    z PythonModuleVariable.python_type)rX   rY   rZ   rJ   rÔ   r   r+   r[   r#   r#   r!   r$   rÐ   g  s   rÐ   c                       sT   e Zd Z‡ fdd„Zdd„ Zdd„ Zee d¡dd	„ ƒƒZ	d
dddœdd„Z
‡  ZS )ÚSkipFilesVariablec                    s   t ƒ jf |Ž || _d S r   rÒ   rÓ   r!   r#   r$   r   q  s    zSkipFilesVariable.__init__c                 C   s
   t | jƒS r   ©r-   r.   r¯   r#   r#   r$   r+   u  s    zSkipFilesVariable.python_typec                 C   s   | j S r   rÑ   r¯   r#   r#   r$   r*   x  s    z$SkipFilesVariable.as_python_constantNc                   C   s   t jtjiS r   )rO   Ú
namedtupler   rŸ   r#   r#   r#   r$   Ú fold_through_function_to_wrapper{  s     ÿz2SkipFilesVariable.fold_through_function_to_wrapperr2   r3   r   r4   c                    s
  ddl m} t | ˆ | ¡ ¡}t | jdd¡rBtd| j› �ƒ �nÄ| jt	j
kr°tˆ ƒdksvtˆ ƒdkr°| ˆˆ d ¡r°tˆ ƒdkr”|rŽt|ƒnd ‰ nˆ d ‰ |jˆt	j
ˆ f|ŽS | jt	jkrötˆ ƒdkröt ˆ d ¡röti t	jˆ d fdtƒ i|—ŽS | j|  ¡  ¡ k�r\tˆ |ƒ�r\| jdd	„ ˆ D ƒd
d„ | ¡ D ƒŽ}|  ¡  | j¡|fdtƒ i|—ŽS | jtjk�rà|�sàt‡fdd„ˆ D ƒƒ�rà‡fdd	„ˆ D ƒ}g }tj|Ž D ]}	| tjt|	ƒf|Ž¡ �q¨tj|fdtƒ i|—ŽS | jtj k�rV|�sVt‡fdd„ˆ D ƒƒ�rV‡fdd	„ˆ D ƒ}g }tj |Ž D ]}	| |	¡ �q,tj|fdtƒ i|—ŽS | jtj!k�rø|�søtˆ ƒdk�røˆ d  "ˆ¡�røˆ d  #¡ �røˆ d  $ˆ¡}
ˆ d  %¡ }g }t !|
|¡D ]}	| tjt|	ƒf|Ž¡ �qÀtj|fdtƒ i|—ŽS | jt&j'k�r@|�s@tˆ ƒdk�r@ˆ d j(�r@‡ fdd„}tj)|f|ŽS | jt	j*k�r¸|�s¸tˆ ƒdk�rhg }n6tˆ ƒdk�r–ˆ d  "ˆ¡�r–ˆ d  $ˆ¡}ntdƒ tj+j,|fdtƒ i|—ŽS zt -| j¡}W n$ t.k
�rì   d| jj/› �}Y nX td| jj0› d|› �ƒ d S )Nr   )r%   Z_torchdynamo_disableFz.call torch._dynamo.disable() wrapped function r   rD   c                 S   s   g | ]}|  ¡ ‘qS r#   ©r*   )Ú.0Úxr#   r#   r$   Ú
<listcomp>¯  s     z3SkipFilesVariable.call_function.<locals>.<listcomp>c                 S   s   i | ]\}}||  ¡ “qS r#   rÙ   )rÚ   ÚkÚvr#   r#   r$   Ú
<dictcomp>°  s      z3SkipFilesVariable.call_function.<locals>.<dictcomp>c                 3   s   | ]}|  ˆ ¡V  qd S r   ©Úhas_unpack_var_sequence©rÚ   r¶   ©r/   r#   r$   Ú	<genexpr>¸  s     z2SkipFilesVariable.call_function.<locals>.<genexpr>c                    s   g | ]}|  ˆ ¡‘qS r#   ©Úunpack_var_sequencerâ   rã   r#   r$   rÜ   º  s     c                 3   s   | ]}|  ˆ ¡V  qd S r   rà   râ   rã   r#   r$   rä   Ä  s     c                    s   g | ]}|  ˆ ¡‘qS r#   rå   râ   rã   r#   r$   rÜ   Æ  s     r   c                    s2   t | tjƒr| jˆ d jd�S td| › d�ƒ d S )Nr   )Zwraps_sourcezfunctools.wraps(r¿   )rC   r   r   Úcloner9   r
   )rp   )r5   r#   r$   Úwrapsä  s    z.SkipFilesVariable.call_function.<locals>.wrapsz*deque() with more than 1 arg not supportedzBuiltin zcall_function z in skip_files )1Úbuiltinr%   r   r;   r<   rÅ   rÆ   r.   r
   rO   rP   rR   Zis_supported_call_dict_argÚdictZcall_dict_helperÚdefaultdictr   Zis_supported_argr   rØ   Úkeysr   rn   rG   Ú	itertoolsÚproductÚallrµ   r   r»   r¼   ZListIteratorVariableÚchainÚcombinationsrá   rS   ræ   r*   r©   rè   r9   r>   ÚdequeÚlistsZDequeVariableÚgetfileÚ	TypeErrorrX   rZ   )r   r/   r5   r    r%   rU   r.   Zseqsrn   ÚitemÚiterableÚrrè   Úpathr#   )r5   r/   r$   rL   ‚  s   
ÿ
þýýü
ÿ
þýýüû
ÿþþÿÿÿ
ÿþýÿÿÿ
ÿþýÿÿÿ
ÿþ
ýü
ûÿÿÿ
ÿþ
ýüÿÿÿÿzSkipFilesVariable.call_function)rX   rY   rZ   r   r+   r*   rƒ   r©   Ú	lru_cacherØ   rL   r[   r#   r#   r!   r$   rÕ   p  s    þrÕ   c                       s>   e Zd Z‡ fdd„Zddddœdd„Zd	d
„ Zdd„ Z‡  ZS )ÚTypingVariablec                    s   t ƒ jf |Ž || _d S r   rÒ   rÓ   r!   r#   r$   r   ÿ  s    zTypingVariable.__init__r2   r3   r   r4   c                 C   sD   |dkr8t |ƒdkr8tj| j|d  ¡  ft | |¡ŽS tdƒ d S )NrQ   r   r   Útyping)rR   r   rI   r.   r*   r   r;   r
   rÏ   r#   r#   r$   rW     s    ÿ
þzTypingVariable.call_methodc                 C   s
   t | jƒS r   rÖ   r¯   r#   r#   r$   r+     s    zTypingVariable.python_typec                 C   s   | j S r   rÑ   r¯   r#   r#   r$   r*     s    z!TypingVariable.as_python_constant)rX   rY   rZ   r   rW   r+   r*   r[   r#   r#   r!   r$   rû   þ  s   úrû   )Úmaxsizec                  C   sZ   ddl m}  i }|  ¡ D ]<\}}|j ¡ D ](\}}t|ƒr*t||d ƒ }r*|||< q*q|S )Nr   )ÚNP_TO_TNP_MODULE)Úutilsrþ   rn   rÄ   r€   r)   )rþ   Znp_fn_to_tnp_fnZnp_modZtnp_modrk   Ztnp_fnZnp_fnr#   r#   r$   Úget_np_to_tnp_map  s    r   c                       s`   e Zd ZdZ‡ fdd„Zddddœdd	„Zddddœd
d„Zdd„ Zdd„ Z‡ fdd„Z	‡  Z
S )ÚNumpyVariablezz
    Wrapper around `numpy.*`. Currently, is able to trace a small subset of numpy functions as well as numpy dtypes.
    c                    s   t ƒ jf |Ž || _d S r   rÒ   rÓ   r!   r#   r$   r   .  s    zNumpyVariable.__init__r2   r3   r   r4   c           	      C   sÌ   t jstd| j› d�ƒ ddlm} ddlm} t 	| gg|gt
| ¡ ƒg¡}| jjdkrrtdt| jƒ› d	�ƒ nVtƒ  | j¡}|d krštd
| j› d�ƒ |jjd||ƒft||ƒžŽ }|j||f|ŽS d S )Nznumpy.z()r   )Únumpy_to_tensor_wrapperr   )ÚNumpyNdarrayVariableÚdtypez4numpy dtype function is not supported yet. Got type Ú.zCan't find numpy function zM in torch._numpy.  Please file an issue to request support for this function.rL   )r   Útrace_numpyr
   r.   rÿ   r  Ztensorr  r   r;   r¼   r<   rX   r-   r   rG   rE   r«   r   r�   )	r   r/   r5   r    r  r  rU   rr   r­   r#   r#   r$   rL   2  s*    ÿÿþýzNumpyVariable.call_functionc                 C   s   t dƒ d S )NÚnumpyr	   rÏ   r#   r#   r$   rW   S  s    zNumpyVariable.call_methodc                 C   s
   t | jƒS r   rÖ   r¯   r#   r#   r$   r+   \  s    zNumpyVariable.python_typec                 C   s   | j S r   rÑ   r¯   r#   r#   r$   r*   _  s    z NumpyVariable.as_python_constantc                    s4   t jr*t| jtƒr*| jj}t |¡}|jS t	ƒ  
¡ S r   )r   r  rC   r.   r-   rX   Útnpr  r0   r   r°   )r   rÂ   Z	tnp_dtyper!   r#   r$   r°   b  s
    
zNumpyVariable.as_proxy)rX   rY   rZ   r^   r   rL   rW   r+   r*   r°   r[   r#   r#   r!   r$   r  )  s    þ%ú	r  c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )ÚNullVariablec                    s   t ƒ jf |Ž d S r   r{   r|   r!   r#   r$   r   u  s    zNullVariable.__init__c                 C   s   dS )Nr	  r#   r¯   r#   r#   r$   rÀ   x  s    zNullVariable.__str__c                 C   s   t jdk rtdƒ tdƒgS )N)rÉ   é   z0cannot reconstruct NullVariable in < Python 3.11Z	PUSH_NULL)ÚsysÚversion_infor
   r   r&   r#   r#   r$   r'   {  s    
zNullVariable.reconstruct)rX   rY   rZ   r   rÀ   r'   r[   r#   r#   r!   r$   r	  t  s   r	  c                   @   s   e Zd ZdZdS )ÚDeletedVariablez"Marker used to implement delattr()Nr]   r#   r#   r#   r$   r  �  s   r  )@rO   r©   rÅ   rí   r  rJ   rü   r   r   Ztorch._Cr?   Ztorch._numpyZ_numpyr  rË   r   r   Zbytecode_transformationr   r   Úexcr
   r9   r   r   rÿ   r   r   r   Úbaser   r   Zdictsr   rd   r   r   r   Zuser_definedr   r   r\   r_   r`   rt   ry   rz   r~   r   r‰   r�   r�   r‘   r™   r>   r½   rÐ   rÕ   rû   rú   r   r  r	  r  r#   r#   r#   r$   Ú<module>   sV   X9
	 *@y	 

K