U
    zhM                     @   s  d dl 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
 ddlmZ ddlmZmZ ddlmZ e	je	je	je	je	je	je	je	jiZe	je	je	je	je	je	je	je	je	je	je	je	jiZe	je	je	je	je	je	je	je	je	je	je	je	jiZdd	 Zed
 dddZejddG dd de
ZejddG dd de
ZejddG dd de
ZejddG dd de
Z ejddG dd de
Z!ejddG dd deZ"ejddG dd deZ#ejddG dd de"Z$ejddG d d! d!e
Z%G d"d# d#ej&Z'ejddG d$d% d%eZ(ejddG d&d' d'eZ)ejddG d(d) d)eZ*ejddG d*d+ d+eZ+ejddG d,d- d-eZ,ejddG d.d/ d/eZ-ejddG d0d1 d1eZ.ejddG d2d3 d3e.Z/ejddG d4d5 d5e.Z0ejddG d6d7 d7eZ1ejddG d8d9 d9eZ2ejddG d:d; d;eZ3ejddG d<d= d=eZ4ejddG d>d? d?e4Z5ejddG d@dA dAe4Z6ejddG dBdC dCe
Z7ejddG dDdE dEe
Z8ejddG dFdG dGeZ9ejddG dHdI dIeZ:ejddG dJdK dKeZ;ejddG dLdM dMe
Z<ejddG dNdO dOe
Z=ddPe
ddQdRZ>e
ddSdTZ?e
ddUdVZ@e
ddWdXZAe
ddYdZZBdS )[    N)AnyOptionalUnion)ChainedSourceGuardSourceSource   )utils)create_call_functioncreate_instruction)	enum_reprc                 C   s@   t | trdS z|  tjkr$W dS W n tk
r:   Y nX dS NTF)
isinstanceConstantSourceguard_sourcer   CONSTANTNotImplementedErrorsource r   F/var/www/html/venv/lib/python3.8/site-packages/torch/_dynamo/source.pyis_constant_source)   s    

r   )GetItemSourceODictGetItemSourcer   c                 C   sd   | j | t| jtr&| j| n:|rNt| ts8t||| 	  n||| j d S N)
basereconstructr   indexr   r   AssertionErrorappend_outputcreate_load_constunpack_slice)r   codegenindex_is_slicer   r   r   reconstruct_getitem5   s    r$   T)frozenc                   @   s:   e Zd ZU eed< dZeed< dd Zdd Zdd	 Z	d
S )LocalSource
local_nameFcell_or_freevarc                 C   s   | || j d S r   r   create_loadr'   selfr"   r   r   r   r   H   s    zLocalSource.reconstructc                 C   s   t jS r   )r   LOCALr,   r   r   r   r   K   s    zLocalSource.guard_sourcec                 C   s   dt | j dS )NzL[])reprr'   r.   r   r   r   nameN   s    zLocalSource.nameN)
__name__
__module____qualname__str__annotations__r(   boolr   r   r1   r   r   r   r   r&   C   s
   
r&   c                   @   s.   e Zd ZU eed< dd Zdd Zdd ZdS )	SyntheticLocalSourcer'   c                 C   s   | || j d S r   r)   r+   r   r   r   r   V   s    z SyntheticLocalSource.reconstructc                 C   s   t jS r   )r   ZSYNTHETIC_LOCALr.   r   r   r   r   Y   s    z!SyntheticLocalSource.guard_sourcec                 C   s   d| j dS )NzSYNTHETIC_LOCAL[r/   )r'   r.   r   r   r   r1   \   s    zSyntheticLocalSource.nameNr2   r3   r4   r5   r6   r   r   r1   r   r   r   r   r8   R   s   
r8   c                   @   s.   e Zd ZU eed< dd Zdd Zdd ZdS )	RandomValueSourcerandom_call_indexc                 C   s   t jS r   )r   ZRANDOM_VALUEr.   r   r   r   r   d   s    zRandomValueSource.guard_sourcec                 C   s:   | ||jjj | || j | td d S NBINARY_SUBSCR)r   r*   ZtxoutputZrandom_values_varr    r;   r   r+   r   r   r   r   g   s    zRandomValueSource.reconstructc                 C   s   d| j  S )NZrandom_value_)r;   r.   r   r   r   r1   l   s    zRandomValueSource.nameN)r2   r3   r4   intr6   r   r   r1   r   r   r   r   r:   `   s   
r:   c                   @   s.   e Zd ZU eed< dd Zdd Zdd ZdS )	GlobalSourceglobal_namec                 C   s   | |j| jddd d S )NFTadd)r   create_load_globalrA   r+   r   r   r   r   t   s    zGlobalSource.reconstructc                 C   s   t jS r   r   GLOBALr.   r   r   r   r   y   s    zGlobalSource.guard_sourcec                 C   s   dt | j dS )NG[r/   r0   rA   r.   r   r   r   r1   |   s    zGlobalSource.nameNr9   r   r   r   r   r@   p   s   
r@   c                   @   s.   e Zd ZU eed< dd Zdd Zdd ZdS )	GlobalWeakRefSourcerA   c                 C   s,   | |j| jddd |tdd d S )NTrB   r   F)r   rD   rA   extend_outputr
   r+   r   r   r   r      s    zGlobalWeakRefSource.reconstructc                 C   s   t jS r   rE   r.   r   r   r   r      s    z GlobalWeakRefSource.guard_sourcec                 C   s   dt | j dS )NrG   z]()rH   r.   r   r   r   r1      s    zGlobalWeakRefSource.nameNr9   r   r   r   r   rI      s   
rI   c                   @   s6   e Zd ZU eed< dd Zdd Zdd Zdd	 Zd
S )
AttrSourcememberc                 C   s^   | j stdd| jkrZ| jd}t| dt| j d|d d  t| d|d  d S )Nz9Can't construct an AttrSource without a valid base source.r   rL   )r   r   rL   splitobject__setattr__rK   join)r,   Zmember_partsr   r   r   __post_init__   s    
  zAttrSource.__post_init__c                 C   s"   | j | ||| j d S r   r   r   rJ   create_load_attrsrL   r+   r   r   r   r      s    zAttrSource.reconstructc                 C   s
   | j  S r   r   r   r.   r   r   r   r      s    zAttrSource.guard_sourcec                 C   s:   | j  s$d| j  d| j dS | j  d| j  S )Nzgetattr(, )rM   )rL   isidentifierr   r1   r.   r   r   r   r1      s    
zAttrSource.nameN)	r2   r3   r4   r5   r6   rS   r   r   r1   r   r   r   r   rK      s
   
	rK   c                   @   s2   e Zd ZU dZeed< dd Zdd Zdd Zd	S )

GradSourceZgradrL   c                 C   s"   | j | ||| j d S r   rT   r+   r   r   r   r      s    zGradSource.reconstructc                 C   s
   | j  S r   rV   r.   r   r   r   r      s    zGradSource.guard_sourcec                 C   s   | j   d| j S )NrM   )r   r1   rL   r.   r   r   r   r1      s    zGradSource.nameN)	r2   r3   r4   rL   r5   r6   r   r   r1   r   r   r   r   rZ      s   
rZ   c                   @   s   e Zd Zdd ZdS )ParamBufferSourcec                 C   s   t | j  S r   _GUARD_SOURCE_NN_MODULEr   r   r.   r   r   r   r      s    zParamBufferSource.guard_sourceNr2   r3   r4   r   r   r   r   r   r[      s   r[   c                   @   s>   e Zd ZU dZee ed< dd Zdd Zdd Z	d	d
 Z
dS )EphemeralSourceNdescc                 C   s   t jS r   )r   Z	EPHEMERALr.   r   r   r   r      s    zEphemeralSource.guard_sourcec                 C   s    d| j d k	rd| j  nd dS )Nz
<ephemeralz:  >)r`   r.   r   r   r   r1      s    zEphemeralSource.namec                 C   s   t d S r   r   r.   r   r   r   
make_guard   s    zEphemeralSource.make_guardc                 C   s   dS NTr   r.   r   r   r   is_ephemeral   s    zEphemeralSource.is_ephemeral)r2   r3   r4   r`   r   r5   r6   r   r1   rd   rf   r   r   r   r   r_      s
   
r_   c                   @   s    e Zd ZdZdZdZdd ZdS )TensorPropertyr   r      c                 C   s.   | t jkrdS | t jkrdS | t jkr*dS d S )NsizeZstrideZstorage_offset)rg   SIZESTRIDESTORAGE_OFFSETr.   r   r   r   method_name   s    


zTensorProperty.method_nameN)r2   r3   r4   rj   rk   rl   rm   r   r   r   r   rg      s   rg   c                   @   sF   e Zd ZU eed< dZee ed< dd Zdd Z	dd	 Z
d
d ZdS )TensorPropertySourcepropNidxc                 C   s<   | j d k	st| jtjkr*| jd ks8tn| jd k	s8td S r   )r   r   ro   rg   rl   rp   r.   r   r   r   rS      s    z"TensorPropertySource.__post_init__c                 C   s`   | j | ||| j  | jd k	r>||| j |t	| jd k	rRdndd d S )Nr   r   T)
r   r   r   Zcreate_load_attrro   rm   rp   r    rJ   r
   r+   r   r   r   r      s    
z TensorPropertySource.reconstructc                 C   s
   | j  S r   rV   r.   r   r   r   r     s    z!TensorPropertySource.guard_sourcec                 C   s   | j tjkr$| j  d| j dS | j tjkrH| j  d| j dS | j tjkrr| jd ksbt| j  dS td| j  d S )Nz.size()[r/   z
.stride()[z.storage_offset()z
unhandled )	ro   rg   rj   r   r1   rp   rk   rl   r   r.   r   r   r   r1     s    zTensorPropertySource.name)r2   r3   r4   rg   r6   rp   r   r?   rS   r   r   r1   r   r   r   r   rn      s   
	rn   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
NegateSourcec                 C   s   | j d k	std S r   r   r   r.   r   r   r   rS     s    zNegateSource.__post_init__c                 C   s   t d S r   rc   r+   r   r   r   r     s    zNegateSource.reconstructc                 C   s
   | j  S r   rV   r.   r   r   r   r     s    zNegateSource.guard_sourcec                 C   s   | j   dS )Nz
.__neg__()r   r1   r.   r   r   r   r1     s    zNegateSource.nameNr2   r3   r4   rS   r   r   r1   r   r   r   r   rq     s   rq   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ConvertIntSourcec                 C   s   | j d k	std S r   rr   r.   r   r   r   rS   "  s    zConvertIntSource.__post_init__c                 C   s   | j | d S r   r   r   r+   r   r   r   r   %  s    zConvertIntSource.reconstructc                 C   s
   | j  S r   rV   r.   r   r   r   r   (  s    zConvertIntSource.guard_sourcec                 C   s   d| j   dS )Nz!cast_symbool_to_symint_guardless(rX   rs   r.   r   r   r   r1   +  s    zConvertIntSource.nameNrt   r   r   r   r   ru      s   ru   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
FlattenScriptObjectSourcec                 C   s   | j d k	std S r   rr   r.   r   r   r   rS   1  s    z'FlattenScriptObjectSource.__post_init__c                 C   s   | j | d S r   rv   r+   r   r   r   r   4  s    z%FlattenScriptObjectSource.reconstructc                 C   s
   | j  S r   rV   r.   r   r   r   r   7  s    z&FlattenScriptObjectSource.guard_sourcec                 C   s   | j   dS )Nz.__obj_flatten__()rs   r.   r   r   r   r1   :  s    zFlattenScriptObjectSource.nameNrt   r   r   r   r   rw   /  s   rw   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ScriptObjectQualifiedNameSourcec                 C   s   | j d k	std S r   rr   r.   r   r   r   rS   @  s    z-ScriptObjectQualifiedNameSource.__post_init__c                 C   s   | j | d S r   rv   r+   r   r   r   r   C  s    z+ScriptObjectQualifiedNameSource.reconstructc                 C   s
   | j  S r   rV   r.   r   r   r   r   F  s    z,ScriptObjectQualifiedNameSource.guard_sourcec                 C   s   | j   dS )Nz._type().qualified_name()rs   r.   r   r   r   r1   I  s    z$ScriptObjectQualifiedNameSource.nameNrt   r   r   r   r   rx   >  s   rx   c                   @   sz   e Zd ZU eeef ed< dZeed< e	j
ddddZ
eed< e	j
ddddZeed< dd Zd	d
 Zdd Zdd ZdS )DefaultsSourceidx_keyFis_kw)initr0   comparefield_namec              
   C   s   | j std| jr^t| jts$tt| dd t| d| j   d| j	 d| j d nHt| jt
sntt| dd t| d| j   d| j	 d	| j d
 d S )Nz]Base must be a valid source in order to properly track and guard this Defaults to its origin.r~   __kwdefaults__r   rM   z['z']__defaults__[r/   )r   r   r{   r   rz   r5   rP   rQ   r1   r~   r?   r.   r   r   r   rS   T  s&        zDefaultsSource.__post_init__c                 C   sB   | j | ||| j ||| j |td d S r<   )	r   r   rJ   rU   r~   r   r    rz   r   r+   r   r   r   r   e  s    zDefaultsSource.reconstructc                 C   s
   | j  S r   rV   r.   r   r   r   r   k  s    zDefaultsSource.guard_sourcec                 C   s   | j S r   )r   r.   r   r   r   r1   n  s    zDefaultsSource.nameN)r2   r3   r4   r   r?   r5   r6   r{   r7   dataclassesr~   r   rS   r   r   r1   r   r   r   r   ry   M  s   
ry   c                       sR   e Zd ZU eed< dZeed<  fddZdd Zdd	 Z	d
d Z
dd Z  ZS )r   r   Fr#   c                    s@   | j d k	stt| jtr<t d| j  t dd d S )Nr   r#   T)r   r   r   r   slicesuperrQ   
__reduce__r.   	__class__r   r   rS   w  s    zGetItemSource.__post_init__c                 C   s"   t | || jd |td d S )Nr#   r=   )r$   r#   r   r   r+   r   r   r   r   ~  s    zGetItemSource.reconstructc                 C   s
   | j  S r   rV   r.   r   r   r   r     s    zGetItemSource.guard_sourcec                 C   s   | j s
t| j\}}|| S r   )r#   r   r   )r,   Zslice_classZ
slice_argsr   r   r   r!     s    

zGetItemSource.unpack_slicec                 C   s   t | jtr<t | jts td| j  d| j  dS | jr\| j  d|  dS t | jt	j
r| j  dt| j|    dS | j  d| jdS d S )NzBGetItemSource index must be a constant, enum or ConstDictKeySourcer   r/   )r   r   r   ConstDictKeySource
ValueErrorr   r1   r#   r!   enumEnumr   r   is_localr.   r   r   r   r1     s    &zGetItemSource.name)r2   r3   r4   r   r6   r#   r7   rS   r   r   r!   r1   __classcell__r   r   r   r   r   r  s   
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 C   s   dS re   r   r.   r   r   r   is_dict_key  s    zConstDictKeySource.is_dict_keyc                 C   s@   | tjd | j| ||| j |t	dd d S )NZdict_keys_getitemrh   T
load_import_fromr	   r2   r   r   r   r    r   rJ   r
   r+   r   r   r   r     s    zConstDictKeySource.reconstructc                 C   s   d| j   d| jdS )Nzlist(z	.keys())[r/   r   r1   r   r.   r   r   r   r1     s    zConstDictKeySource.nameN)r2   r3   r4   r   r   r1   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )TupleIteratorGetItemSourcec                 C   s@   | tjd | j| ||| j |t	dd d S )NZtuple_iterator_getitemrh   Tr   r+   r   r   r   r     s    z&TupleIteratorGetItemSource.reconstructc                 C   s   d| j   d| jdS )Nz___tuple_iterator_getitem(rW   rX   r   r.   r   r   r   r1     s    zTupleIteratorGetItemSource.nameN)r2   r3   r4   r   r1   r   r   r   r   r     s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )

TypeSourcec                 C   s   | j d k	std S r   rr   r.   r   r   r   rS     s    zTypeSource.__post_init__c                 C   s,   | dd | j| |tdd d S )Nbuiltinstyper   Tr   r   r   rJ   r
   r+   r   r   r   r     s    zTypeSource.reconstructc                 C   s
   | j  S r   rV   r.   r   r   r   r     s    zTypeSource.guard_sourcec                 C   s   d| j   dS )Nztype(rX   rs   r.   r   r   r   r1     s    zTypeSource.nameNrt   r   r   r   r   r     s   r   c                   @   s6   e Zd ZU eed< dd Zdd Zdd Zdd	 Zd
S )r   r   c                 C   s   | j d k	std S r   rr   r.   r   r   r   rS     s    z ODictGetItemSource.__post_init__c                 C   s6   | |tjj t| |dd |tdd d S )NFr   rh   T)r   Z_create_load_constcollectionsOrderedDict__getitem__r$   rJ   r
   r+   r   r   r   r     s
    zODictGetItemSource.reconstructc                 C   s
   | j  S r   rV   r.   r   r   r   r     s    zODictGetItemSource.guard_sourcec                 C   s   t | jtr<d| jj d| jj }d| j  d| dS t | jtrfd| j  d| j  dS d| j  d| jdS d S )Nz__load_module("z").z___odict_getitem(rW   rX   )r   r   r   r3   r4   r   r1   r   )r,   repr   r   r   r1     s    zODictGetItemSource.nameN)	r2   r3   r4   r   r6   rS   r   r   r1   r   r   r   r   r     s
   
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )OptimizerSourcec                 C   s   | j | d S r   rv   r+   r   r   r   r     s    zOptimizerSource.reconstructc                 C   s
   | j  S r   rV   r.   r   r   r   r     s    zOptimizerSource.guard_sourcec                 C   s
   | j  S r   rs   r.   r   r   r   r1     s    zOptimizerSource.nameNr2   r3   r4   r   r   r1   r   r   r   r   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )NNModuleSourcec                 C   s   | j | d S r   rv   r+   r   r   r   r     s    zNNModuleSource.reconstructc                 C   s   t | j  S r   r\   r.   r   r   r   r     s    zNNModuleSource.guard_sourcec                 C   s
   | j  S r   rs   r.   r   r   r   r1     s    zNNModuleSource.nameNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )NotNNModuleSourcec                 C   s   t | j  S r   )_GUARD_SOURCE_NOT_NN_MODULEr   r   r.   r   r   r   r      s    zNotNNModuleSource.guard_sourceNr^   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )FSDPNNModuleSourcec                 C   s   t | j  S r   )_GUARD_SOURCE_FSDP_MODULEr   r   r.   r   r   r   r     s    zFSDPNNModuleSource.guard_sourceNr^   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )GlobalStateSourcec                 C   s   dS Nra   r   r.   r   r   r   r1     s    zGlobalStateSource.namec                 C   s   t jS r   rE   r.   r   r   r   r     s    zGlobalStateSource.guard_sourceNr2   r3   r4   r1   r   r   r   r   r   r   
  s   r   c                   @   s6   e Zd ZU eed< dd Zdd Zdd Zdd	 Zd
S )r   source_namec                 C   s   | |j| jddd d S )NFrB   )r   rD   r   r+   r   r   r   r     s    zConstantSource.reconstructc                 C   s   t jS r   )r   r   r.   r   r   r   r     s    zConstantSource.guard_sourcec                 C   s   | j S r   )r   r.   r   r   r   r1     s    zConstantSource.namec                 C   s   t d S r   rc   )r,   fnr   r   r   rd   "  s    zConstantSource.make_guardN)	r2   r3   r4   r5   r6   r   r   r1   rd   r   r   r   r   r     s
   
r   c                   @   s*   e Zd ZedddZdd Zdd ZdS )	NumpyTensorSourcereturnc                 C   s   d| j   dS )Nz___from_numpy(rX   rs   r.   r   r   r   r1   (  s    zNumpyTensorSource.namec                 C   s
   | j  S r   rV   r.   r   r   r   r   +  s    zNumpyTensorSource.guard_sourcec                 C   s,   | dd | j| |tdd d S )NZtorchZ	as_tensorr   Tr   r+   r   r   r   r   .  s    zNumpyTensorSource.reconstructN)r2   r3   r4   r5   r1   r   r   r   r   r   r   r   &  s   r   c                   @   s"   e Zd ZedddZdd ZdS )FloatTensorSourcer   c                 C   s   d| j   dS )Nz___as_tensor(rX   rs   r.   r   r   r   r1   8  s    zFloatTensorSource.namec                 C   s
   | j  S r   rV   r.   r   r   r   r   ;  s    zFloatTensorSource.guard_sourceNr2   r3   r4   r5   r1   r   r   r   r   r   r   6  s   r   c                   @   s"   e Zd ZedddZdd ZdS )CallMethodItemSourcer   c                 C   s   | j   dS )Nz.item()rs   r.   r   r   r   r1   A  s    zCallMethodItemSource.namec                 C   s
   | j  S r   rV   r.   r   r   r   r   D  s    z!CallMethodItemSource.guard_sourceNr   r   r   r   r   r   ?  s   r   c                   @   s   e Zd Zdd Zdd ZdS )ShapeEnvSourcec                 C   s   dS r   r   r.   r   r   r   r1   M  s    zShapeEnvSource.namec                 C   s   t jS r   )r   Z	SHAPE_ENVr.   r   r   r   r   P  s    zShapeEnvSource.guard_sourceNr   r   r   r   r   r   K  s   r   c                   @   s   e Zd Zdd Zdd ZdS )BackwardStateSourcec                 C   s   dS r   r   r.   r   r   r   r1   V  s    zBackwardStateSource.namec                 C   s   t jS r   )r   ZBACKWARD_STATEr.   r   r   r   r   Y  s    z BackwardStateSource.guard_sourceNr   r   r   r   r   r   T  s   r   allow_cell_or_freevarc                C   s8   t | trt| j|dS t | ts&dS |s4| jr4dS dS )Nr   FT)r   r   is_from_local_sourcer   r&   r(   )r   r   r   r   r   r   ]  s    
 

r   c                 C   s&   t | trdS t | tr"t| jS dS r   )r   rw   r   $is_from_flatten_script_object_sourcer   r   r   r   r   r   i  s
    


r   c                 C   s&   t | trdS t | tr"t| jS dS r   )r   r   r   is_from_optimizer_sourcer   r   r   r   r   r   q  s
    


r   c                 C   s&   t | trdS t | tr"t| jS dS r   )r   ry   r   is_from_defaultsr   r   r   r   r   r   {  s
    


r   c                 C   s   t | to| jdkS )Ncell_contents)r   rK   rL   r   r   r   r   is_cell_contents  s    r   )Cr   r   r   typingr   r   r   Ztorch._guardsr   r   r   ra   r	   Zbytecode_transformationr
   r   r   r-   ZLOCAL_NN_MODULErF   ZGLOBAL_NN_MODULEr]   ZLOCAL_FSDP_MODULEZGLOBAL_FSDP_MODULEr   r   r   r$   	dataclassr&   r8   r:   r@   rI   rK   rZ   r[   r_   r   rg   rn   rq   ru   rw   rx   ry   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   <module>   s             
      










#




$
+















