a
    dq                     @   s8  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	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZmZmZmZ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&Z(d d! Z)d"d# 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Z0G d0d1 d1eZ1G d2d3 d3eZ2G d4d5 d5eZ3G d6d7 d7eZ4G d8d9 d9eZ5G d:d; d;eZ6G d<d= d=eZ7G d>d? d?eZ8dS )@    N)DictList)GuardGuardSource   )	variables)create_instructionunimplemented)GuardBuilder)
AttrSource)identityproxy_args_kwargs   )VariableTracker)NestedUserFunctionVariableUserFunctionVariableUserMethodVariableWrappedUserFunctionVariableWrappedUserMethodVariablec                       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 i | || _|| _|| _d S N)super__init__typevarobjvarspecialized)selfr   r   r   kwargs	__class__ e/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_dynamo/variables/misc.pyr      s    zSuperVariable.__init__c                    sH   |t t || j | jd ur8|| j tddgS tddgS d S )NCALL_FUNCTIONr   r   )r   ZBuiltinVariabler   r   r   r   r   codegenr   r!   r"   reconstruct    s    


zSuperVariable.reconstructc                    sZ   | j sJ d| jr$t| j |S | j }| j  }t|trJ| j j}tt	|||S )Nz1-arg super not implemented)
r   r   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 u r4d n
t| j|}|tj	u rZt
tfi |S t|tjrtj|fd|i||| jg| |S t|tjrtj|j| jfd|i||||S td|  d S )Nsourceznon-function or method super: )r   	propagatevaluesr   r   r/   r5   r   objectr   LambdaVariabler   
isinstancetypesFunctionTyper   r   call_function
MethodTyper   __func__r
   )r   r-   r.   r3   r   optionsZinner_fnr5   r!   r!   r"   call_method9   s8    
zSuperVariable.call_method)NF)__name__
__module____qualname__r   r&   r/   rA   __classcell__r!   r!   r   r"   r      s   	r   c                   @   s   e Zd ZdZdS )UnknownVariablez
    It could be anything!
    NrB   rC   rD   __doc__r!   r!   r!   r"   rF   S   s   rF   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   )r.   r4   c                 C   s2   ddl m } ddlm} |t||t| j|dS )Nr   )comptimer   )r   )r5   )rL   	functionsr   r'   r   r5   )r   r-   r.   rL   r   r!   r!   r"   var_getattrb   s
    zComptimeVariable.var_getattrr0   r1   r2   c                 C   s   ddl m} |rJ t|dks$J |d }t|trH| || nvt|tr| }|jrpJ d|j	 t
||j|j |jrt|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: )rL   rO   lenr:   r   get_functionr   get_codeclosureco_freevarsr;   r<   	f_globalsfn_namer(   defaultstupleitemsRuntimeErrorr+   r   ConstantVariable)r   r-   r3   r   rO   fncodefuncr!   r!   r"   r=   l   s.    

zComptimeVariable.call_functionN)rB   rC   rD   rH   r&   strrN   r=   r!   r!   r!   r"   rI   Y   s   rI   c                       s$   e Zd Z fddZdd Z  ZS )ClosureVariablec                    s   t  jf i | || _d S r   )r   r   r.   )r   r.   r   r   r!   r"   r      s    zClosureVariable.__init__c                 C   s   | | jgS r   )Zcreate_load_closurer.   r$   r!   r!   r"   r&      s    zClosureVariable.reconstruct)rB   rC   rD   r   r&   rE   r!   r!   r   r"   r`      s   r`   c                       s   e Zd Z fddZ  ZS )NewCellVariablec                    s   t  jf i | d S r   r   r   r   r   r   r!   r"   r      s    zNewCellVariable.__init__rB   rC   rD   r   rE   r!   r!   r   r"   ra      s   ra   c                       s   e Zd Z fddZ  ZS )NewGlobalVariablec                    s   t  jf i | d S r   rb   rc   r   r!   r"   r      s    zNewGlobalVariable.__init__rd   r!   r!   r   r"   re      s   re   c                       sb   e Zd Zd fdd	Zdd Zdd Zddd	Zd
d Zdd Zdd Z	ddddddZ
  ZS )ContextWrappingVariableNc                    s*   t  jf i | || _|| _t | _d S r   )r   r   target_valuesinitial_valuessetZrecursively_containsr   rg   rh   r   r   r!   r"   r      s
    z ContextWrappingVariable.__init__c                 C   s$   |  || j tjdi t| S N)N)
_call_funcrg   r   r[   r   r6   r   r-   r!   r!   r"   enter   s    zContextWrappingVariable.enterc                 G   s$   |  || j tjdi t| S rk   )rl   rh   r   r[   r   r6   r   r-   r3   r!   r!   r"   exit   s    zContextWrappingVariable.exitc           
         s   j jkrg g fS  fdd}|j }|j}td|d d}||g }tjdk rxtd  g|td}n0|j}	tdg|	td	|d|td
}||fS )a  
        Generate following Python Bytecode, with a `torch._C._set_grad_enable` call
        Python 3.8
             0 LOAD_GLOBAL              0 (torch)
             2 LOAD_ATTR                1 (_C)
             4 LOAD_METHOD              2 (_set_grad_enable)
             6 LOAD_CONST               1 (False)
             8 CALL_METHOD              1
            10 POP_TOP

            12 SETUP_FINALLY           10 (to 24)

            14 LOAD_GLOBAL              3 (user_inst)
            16 CALL_FUNCTION            0
            18 POP_TOP
            20 POP_BLOCK
            22 BEGIN_FINALLY

            24 LOAD_GLOBAL              0 (torch)
            26 LOAD_ATTR                1 (_C)
            28 LOAD_METHOD              2 (_set_grad_enable)
            30 LOAD_CONST               2 (True)
            32 CALL_METHOD              1
            34 POP_TOP
            36 END_FINALLY
            38 LOAD_CONST               0 (None)
            40 RETURN_VALUE

        Instructions 0-10 and 24-34 call torch._C.set_grad_enable(True/False)

        Python 3.9, 3.10
             0 LOAD_GLOBAL              0 (torch)
             2 LOAD_ATTR                1 (_C)
             4 LOAD_METHOD              2 (_set_grad_enable)
             6 LOAD_CONST               1 (False)
             8 CALL_METHOD              1
            10 POP_TOP

            12 SETUP_FINALLY           22 (to 36)

            14 LOAD_GLOBAL              3 (user_inst)
            16 CALL_FUNCTION            0
            18 POP_TOP
            20 POP_BLOCK

            22 LOAD_GLOBAL              0 (torch)
            24 LOAD_ATTR                1 (_C)
            26 LOAD_METHOD              2 (_set_grad_enable)
            28 LOAD_CONST               2 (True)
            30 CALL_METHOD              1
            32 POP_TOP

            34 JUMP_FORWARD            14 (to 50)

            36 LOAD_GLOBAL              0 (torch)
            38 LOAD_ATTR                1 (_C)
            40 LOAD_METHOD              2 (_set_grad_enable)
            42 LOAD_CONST               2 (True)
            44 CALL_METHOD              1
            46 POP_TOP
            48 RERAISE

            50 LOAD_CONST               0 (None)
            52 RETURN_VALUE

        c                    sb   t  j  }| }| r< fdd| D }ng }g ||tdt|tdS )Nc                    s   g | ]}  |qS r!   Zcreate_load_const.0valr%   r!   r"   
<listcomp>      zRContextWrappingVariable.reconstruct.<locals>.set_context_insts.<locals>.<listcomp>r#   POP_TOP)r   r-   import_sourcemodule_namerV   r&   r   rP   )r7   Zattr_sourceZload_set_context_enabling_instsloadsr%   r   r!   r"   set_context_insts   s     
z>ContextWrappingVariable.reconstruct.<locals>.set_context_instsSETUP_FINALLYr   target)   	   	POP_BLOCKZEND_FINALLYJUMP_FORWARDRERAISE)rg   rh   r   sysversion_infoZcreate_begin_finally)
r   r%   Ztarget_instr}   Z
init_blockZfinally_blockZsetup_final_instZprologueepilogueZexcept_blockr!   r|   r"   r&      s6    C





z#ContextWrappingVariable.reconstructc                 C   s   t dd S )Nz_call_func called on baserJ   )r   r-   rh   r!   r!   r"   rl   )  s    z"ContextWrappingVariable._call_funcc                 C   s   t dd S )Nzmodule_name called on baserJ   r   r!   r!   r"   rz   ,  s    z#ContextWrappingVariable.module_namec                 C   s   t dd S )Nzfn_name called on baserJ   r   r!   r!   r"   rV   /  s    zContextWrappingVariable.fn_namer0   r1   r   r2   c                 C   s   t |dksJ t|d tr2t|d  |d< t|d tsRt|d tsRJ t|d trnt|d | S t|d trt|d | S d S )Nr   r   )rP   r:   r   r   rQ   r   r   r   r   r-   r3   r   r!   r!   r"   r=   2  s    z%ContextWrappingVariable.call_function)N)N)rB   rC   rD   r   rn   rp   r&   rl   rz   rV   r=   rE   r!   r!   r   r"   rf      s   	
rrf   c                       s`   e Zd ZdZedejejhZ	e
dd Zd fdd	Zdd	 Zd
d Zdd Zdd Z  ZS )GradModeVariablez6represents torch.{no_grad,enable_grad,set_grad_mode}() c                 K   s.   t f |gt gd|}|| |g |S Nrg   rh   )r   torchis_grad_enabledrl   )r-   target_valuer   varr!   r!   r"   createH  s    zGradModeVariable.createNc                    s*   t  jf ||d| | j| jB | _d S r   )r   r   guards_guards_singletonrj   r   r!   r"   r   R  s    zGradModeVariable.__init__c                 C   s   t jdi t| S rk   r   r[   r   r6   rm   r!   r!   r"   rn   X  s    zGradModeVariable.enterc                 C   sB   t |dksJ |d }|jdtjj|fi f tj| d S )Nr   r   r=   )rP   outputcreate_noder   _CZ_set_grad_enabled)r   r-   r7   r,   r!   r!   r"   rl   [  s    zGradModeVariable._call_funcc                 C   s   dS )Nr   r!   r   r!   r!   r"   rz   c  s    zGradModeVariable.module_namec                 C   s   dS )NZset_grad_enabledr!   r   r!   r!   r"   rV   f  s    zGradModeVariable.fn_name)N)rB   rC   rD   rH   r   r   GLOBALr   Z	GRAD_MODEr   staticmethodr   r   rn   rl   rz   rV   rE   r!   r!   r   r"   r   C  s   
	r   c                       sJ   e Zd Zedd Zd fdd	Zdd Zdd	 Zd
d Zdd Z	  Z
S )AutocastModeVariablec                 C   s   t tjj| i |}|  g } |  dD ]>}|j| }t|t	r^| 
|j|   q0| 
|j|  q0t| fdd i|}|S )N)Zdevice_typeZdtypeZenabledZcache_enabledrh   )inspect	signaturer   autocastbindapply_defaultsclear	argumentsr:   r   appendr(   r   )rg   r   Z
bound_argskeyargr   r!   r!   r"   r   k  s    

zAutocastModeVariable.createNc                    s4   | dd }t jf ||d| || _|| _d S )Nmoder   )popr   r   rg   r   )r   rg   rh   r   r   r   r!   r"   r     s    zAutocastModeVariable.__init__c                 G   s   |j dt| jfi | _d S Nr=   )r   r   exit_functional_autocastr   ro   r!   r!   r"   rp     s    zAutocastModeVariable.exitc                 C   s    |j dtg | jR i | _d S r   )r   r   enter_functional_autocastrg   r   rm   r!   r!   r"   rn     s    zAutocastModeVariable.enterc                 C   s   dS )Nztorch.amp.autocast_moder!   r   r!   r!   r"   rz     s    z AutocastModeVariable.module_namec                 C   s   dS )Nr   r!   r   r!   r!   r"   rV     s    zAutocastModeVariable.fn_name)N)rB   rC   rD   r   r   r   rp   rn   rz   rV   rE   r!   r!   r   r"   r   j  s   
r   c                  G   s   t jj|  }|  |S r   )r   ampr   	__enter__)valsr   r!   r!   r"   r     s    r   c                 C   s   |  d d d  d S r   )__exit__)r   r!   r!   r"   r     s    r   c                       sB   e Zd ZdZd fdd	Zdd Zdd Zd	d
 Zdd Z  Z	S )NullContextVariablez
    This class represents Python contextlib.nullcontext.
    It's used as a placeholder for other context managers that Dynamo doesn't
    support yet, e.g, torch.autograd.profiler.record_function.
    Nc                    s   t  jf d|i| d S )Nrg   rb   )r   rg   r   r   r!   r"   r     s    zNullContextVariable.__init__c                 C   s   t jdi t| S rk   r   rm   r!   r!   r"   rn     s    zNullContextVariable.enterc                 G   s   t jdi t| S rk   r   ro   r!   r!   r"   rp     s    zNullContextVariable.exitc                 C   s   dS )N
contextlibr!   r   r!   r!   r"   rz     s    zNullContextVariable.module_namec                 C   s   dS )Nnullcontextr!   r   r!   r!   r"   rV     s    zNullContextVariable.fn_name)N)
rB   rC   rD   rH   r   rn   rp   rz   rV   rE   r!   r!   r   r"   r     s   r   c                       sB   e Zd Zedd Zd fdd	Zdd Zdd	 Zd
d Z  Z	S )CUDAStreamContextVariablec              	   K   sB   ddl m} |t| | jdtjjdi }tf |g|gd|S )Nr   )wrap_fx_proxy_clsr=   r   r   )	builderr   CUDAStreamVariabler   create_proxyr   cudacurrent_streamr   )r-   r   r   r   r   r!   r!   r"   r     s"    
z CUDAStreamContextVariable.createNc                    s   t  jf ||d| d S r   rb   rj   r   r!   r"   r     s
    z"CUDAStreamContextVariable.__init__c                 C   s:   |j dtjj| jd  fi  tj| jd j d S Nr=   r   )r   r   r   r   
set_streamrg   as_proxyr,   rm   r!   r!   r"   rn     s    zCUDAStreamContextVariable.enterc                 G   s:   |j dtjj| jd  fi  tj| jd j d S r   )r   r   r   r   r   rh   r   r,   ro   r!   r!   r"   rp     s    zCUDAStreamContextVariable.exitc                 C   s   dS )Nzcuda.streamr!   r   r!   r!   r"   rV     s    z!CUDAStreamContextVariable.fn_name)N)
rB   rC   rD   r   r   r   rn   rp   rV   rE   r!   r!   r   r"   r     s   
		r   c                       s6   e Zd Z fddZddddddZd	d
 Z  ZS )r   c                    sB   d|j jv r |j jd |ks J t jf i | || _|| _d S )NZexample_value)nodemetar   r   proxyr,   )r   r   r,   r   r   r!   r"   r     s
    zCUDAStreamVariable.__init__r0   r1   r   r2   c                 C   s   t d d S )Nzcuda streamr	   r   r-   r.   r3   r   r!   r!   r"   rA     s    zCUDAStreamVariable.call_methodc                 C   s   | j S r   )r   r   r!   r!   r"   r     s    zCUDAStreamVariable.as_proxy)rB   rC   rD   r   rA   r   rE   r!   r!   r   r"   r     s   	r   c                       s<   e Zd Zed fddZdddddd	Zd
d Z  ZS )WithExitFunctionVariable)ctxc                    s0   t  jf i | t|ts J || _|| _d S r   )r   r   r:   rf   r   r   )r   r   r   r   r   r!   r"   r      s    z!WithExitFunctionVariable.__init__r0   r1   r   r2   c                 C   s   |rJ | j j|g|R  S r   )r   rp   r   r!   r!   r"   r=     s    z&WithExitFunctionVariable.call_functionc                    sz   t  j| j | j  } jjjrv fdd| jj	D }|
| |
tdt|td| jdtdg |S )Nc                    s   g | ]}  |qS r!   rq   rr   ru   r!   r"   rv     rw   z8WithExitFunctionVariable.reconstruct.<locals>.<listcomp>r#   
SETUP_WITHr   rx   )r   r-   ry   r   rz   rV   r&   r   Zpartial_convertrg   extendr   rP   r   )r   r%   r   r{   r!   ru   r"   r&     s    

z$WithExitFunctionVariable.reconstruct)rB   rC   rD   rf   r   r=   r&   rE   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"   r   $  s    zInspectSignatureVariable.createc                    s   t  jf i | || _d S r   )r   r   	inspected)r   r   r   r   r!   r"   r   *  s    z!InspectSignatureVariable.__init__)rB   rC   rD   rH   r   r   r   rE   r!   r!   r   r"   r   !  s   
r   c                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )AutogradFunctionVariablez-represents a torch.autograd.Function subclassc                    s   t  jf i | || _d S r   )r   r   fn_cls)r   r   r   r   r!   r"   r   2  s    z!AutogradFunctionVariable.__init__c                    s   d  fdd}t |||f  r6t r6td t gt| }t | || }t	t	| j
dd|d< | jj}t|tjrtj|fi |||S t|tjrtj|jt| jfi |||S td|  d S )	NFc                    s8   t | tjr| jdurd t | tjr4| r4d | S )NFT)r:   r   ZTensorVariablerequires_gradNNModuleVariableZis_training)r   r   r-   r!   r"   visit9  s    

z2AutogradFunctionVariable.call_apply.<locals>.visitz$autograd.Function with requires_gradr    forwardr5   z?non-function or method in subclass of torch.autograd.Function: )r   applyr   r   r
   BlackHoleVariablelistr6   r7   r   r5   r   r   r:   r;   r<   r   r   r=   r>   r   r?   UserDefinedClassVariable)r   r-   r3   r   r   r@   r\   r!   r   r"   
call_apply6  s0    
z#AutogradFunctionVariable.call_applyc                 C   s*   t | || }t| jfd| ji|S )Nr5   )r   r6   r7   r   r   r5   )r   r-   r3   r   r@   r!   r!   r"   r=   Z  s    z&AutogradFunctionVariable.call_function)rB   rC   rD   rH   r   r   r=   rE   r!   r!   r   r"   r   /  s   $r   c                   @   s"   e Zd ZdZddddddZdS )	r   zQA autograd.function context that just ignores everything (for forward extraction)r0   r1   r   r2   c              	   C   s.   |dv sJ |t jdi t| || S )N)__setattr__Zsave_for_backward)N)r   r[   r   r6   r7   r   r!   r!   r"   rA   b  s     zBlackHoleVariable.call_methodN)rB   rC   rD   rH   rA   r!   r!   r!   r"   r   _  s
   r   c                   @   s   e Zd ZdZdS )AutogradFunctionContextVariablez
    A autograd.function context used after graph break in forward.
    Any call method on this context object will be graph break.
    The is different from BlackHoleVariable which is only used in inference mode.
    NrG   r!   r!   r!   r"   r   o  s   r   c                       s.   e Zd Z fddZddddddZ  ZS )	r9   c                    s   t  jf i | || _d S r   )r   r   r\   )r   r\   r   r   r!   r"   r   z  s    zLambdaVariable.__init__r0   r1   r   r2   c                 C   s   | j |i || S r   )r\   add_optionsr   r!   r!   r"   r=   ~  s    zLambdaVariable.call_function)rB   rC   rD   r   r=   rE   r!   r!   r   r"   r9   y  s   r9   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 i | t|ts J t|ts.J || _|| _d S r   )r   r   r:   r   r_   objr.   )r   r   r.   r   r   r!   r"   r     s
    zGetAttrVariable.__init__c                 C   s   | j j d| j d| j dS )N(z, ))r    rB   r   r.   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   r.   r   r!   r!   r"   r     s    zGetAttrVariable.as_proxyc                 C   s`   t | jtjst |j| jj}| j|j	vr6t t
|| j}||j	vrTt t
||S r   )r:   r   r   r   rK   r   Zget_submoduleZ
module_keyr.   __dict__r   getattr_static)r   r-   r.   Zstep1Zstep2r!   r!   r"   r/     s    
zGetAttrVariable.const_getattrc                 C   s   || j  || jS r   )r   Zcreate_load_attrsr.   r$   r!   r!   r"   r&     s    
zGetAttrVariable.reconstructr0   r1   r   r2   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gt||	R  d	|
W  d    S t|d tr.|f ||jjd
|jgt||	R  d	|
W  d    S td|  W d    n1 sR0    Y  t| jtr| jdkr| j|||| S t| jtjrt|dkrt|d  | jjrt| j|d d || j|dd  |S | j || j||| S )Nr   )wrap_fx_proxyZ__torch_function__)TorchVariabler   r   r   r=   )r-   r   rA   z:GetAttrVariable.call_function original __torch_function__ r   T)!r   r   r.   r:   r   r   rP   r   r,   __mro__r   ZTensorr   r   rY   r   r6   r7   r   ZDisableTorchFunctionSubclassr   r   r   r   r
   r   r   r   r   r   r*   r)   rA   )r   r-   r3   r   r   Z!is_original_tensor_torch_functionr   Z"original_torch_or_getattr_variablenew_argsZ
new_kwargsr@   r!   r!   r"   r=     sl    	



	
$
zGetAttrVariable.call_functionc                    sZ   |dkrHt | jtrH| jdkrHtj| jj fi t	| | j| jjS t
 ||||S )N__len__
parameters)r:   r   r   r.   r   r[   r   Znum_parametersr   r6   r   rA   r   r   r!   r"   rA     s    

zGetAttrVariable.call_method)rB   rC   rD   r   r   r   r   ZfxZProxyr   r   r/   r&   r=   rA   rE   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 i | || _d S r   r   r   r,   r   r,   r   r   r!   r"   r     s    zPythonModuleVariable.__init__c                 C   s   t jS r   )r;   
ModuleTyper   r!   r!   r"   r)     s    z PythonModuleVariable.python_type)rB   rC   rD   r;   r   r   r)   rE   r!   r!   r   r"   r     s   r   c                       s>   e Zd Z fddZdd Zdd Zddd	d
ddZ  ZS )SkipFilesVariablec                    s   t  jf i | || _d S r   r   r   r   r!   r"   r     s    zSkipFilesVariable.__init__c                 C   s
   t | jS r   r+   r,   r   r!   r!   r"   r)     s    zSkipFilesVariable.python_typec                 C   s   | j S r   r   r   r!   r!   r"   r(     s    z$SkipFilesVariable.as_python_constantr0   r1   r   r2   c                 C   sp   t | jddr"td| j  nJzt | j}W n  tyR   d| jj }Y n0 td| jj d|  d S )NZ_torchdynamo_disableFz.call torch._dynamo.disable() wrapped function zBuiltin zcall_function z in skip_files )r   r   r,   r
   getfile	TypeErrorrB   rD   )r   r-   r3   r   pathr!   r!   r"   r=     s    zSkipFilesVariable.call_function)rB   rC   rD   r   r)   r(   r=   rE   r!   r!   r   r"   r     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 i | || _d S r   r   r   r   r!   r"   r   !  s    zTypingVariable.__init__r0   r1   r   r2   c                 C   sH   |dkr<t |dkr<tj| j|d   fi t| |S td d S )N__getitem__r   r   typing)rP   r   r[   r,   r(   r   r6   r
   r   r!   r!   r"   rA   %  s    
zTypingVariable.call_methodc                 C   s
   t | jS r   r   r   r!   r!   r"   r)   3  s    zTypingVariable.python_typec                 C   s   | j S r   r   r   r!   r!   r"   r(   6  s    z!TypingVariable.as_python_constant)rB   rC   rD   r   rA   r)   r(   rE   r!   r!   r   r"   r      s   r   c                       sT   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  Z	S )NumpyVariablez=
    Wrapper around `numpy.*` for better error messages.
    c                    s   t  jf i | || _d S r   r   r   r   r!   r"   r   ?  s    zNumpyVariable.__init__r0   r1   r   r2   c                 C   s   t d d S Nnumpyr	   r   r!   r!   r"   r=   C  s    zNumpyVariable.call_functionc                 C   s   t d d S r   r	   r   r!   r!   r"   rA   H  s    zNumpyVariable.call_methodc                 C   s
   t | jS r   r   r   r!   r!   r"   r)   Q  s    zNumpyVariable.python_typec                 C   s   | j S r   r   r   r!   r!   r"   r(   T  s    z NumpyVariable.as_python_constant)
rB   rC   rD   rH   r   r=   rA   r)   r(   rE   r!   r!   r   r"   r   :  s   		r   )9r   r   r;   r   r   r   Ztorch._Cr   Ztorch._guardsr   r   r   r   Zbytecode_transformationr   excr
   r   r   r5   r   utilsr   r   baser   rM   r   r   r   r   r   r   rF   rI   r`   ra   re   rf   r   r   r   r   r   r   r   r   r   r   r   r   r9   r   r   r   r   r   r!   r!   r!   r"   <module>   sN   	:9	 '/0"0
y	