U
    ªÊ¹j>  ã                   @   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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%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„ d7e0ƒƒZ1ejdd�G d8d9„ d9e0ƒƒ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?eƒƒZ5ejdd�G d@dA„ dAe
ƒƒZ6ddBœe
dœdCdD„Z7dS )Eé    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   úS/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/_dynamo/source.pyÚis_constant_source(   s    

r   c                 C   s$   |   ¡ tjtjtjtjtjtjfkS ©N)r   r   ÚLOCALÚGLOBALÚLOCAL_NN_MODULEÚGLOBAL_NN_MODULEÚLOCAL_FSDP_MODULEÚGLOBAL_FSDP_MODULEr   r   r   r   Úis_input_source4   s    úr   )ÚGetItemSourceÚODictGetItemSourcer   c                 C   sj   | j  |¡}t| jtƒr,| | j |¡¡ n:|rTt| tƒs>t‚| | 	|  
¡ ¡¡ n| | 	| j¡¡ |S r   )ÚbaseÚreconstructr   Úindexr   Úextendr   ÚAssertionErrorÚappendÚcreate_load_constÚunpack_slice)r   ÚcodegenÚindex_is_sliceÚinstrsr   r   r   Úreconstruct_getitem?   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¡gS r   )Úcreate_loadr/   ©Úselfr)   r   r   r   r"   U   s    zLocalSource.reconstructc                 C   s   t jS r   )r   r   ©r3   r   r   r   r   X   s    zLocalSource.guard_sourcec                 C   s   dt | jƒ› d�S )NúL[ú])Úreprr/   r4   r   r   r   Úname[   s    zLocalSource.nameN)
Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r0   Úboolr"   r   r8   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 )	ÚRandomValueSourceÚrandom_call_indexc                 C   s   t jS r   ©r   ZRANDOM_VALUEr4   r   r   r   r   c   s    zRandomValueSource.guard_sourcec                 C   s"   |  |jjj¡| | j¡tdƒgS ©NÚBINARY_SUBSCR)r1   ZtxÚoutputZrandom_values_varr'   r@   r   r2   r   r   r   r"   f   s    
ýzRandomValueSource.reconstructc                 C   s   d| j › �S )NZrandom_value_)r@   r4   r   r   r   r8   m   s    zRandomValueSource.nameN)r9   r:   r;   Úintr=   r   r"   r8   r   r   r   r   r?   _   s   
r?   c                   @   s6   e Zd ZU eed< eed< dd„ Zdd„ Zdd„ Zd	S )
ÚGeneratorStateSourceÚdeviceÚinitial_seedc                 C   s   t jS r   rA   r4   r   r   r   r   v   s    z!GeneratorStateSource.guard_sourcec                 C   s
   t ƒ ‚d S r   ©r   r2   r   r   r   r"   y   s    z GeneratorStateSource.reconstructc                 C   s    d| j › d| j› �}d|› d�S )NZgenerator_state_Ú_r5   r6   )rG   rH   )r3   r8   r   r   r   r8   }   s    zGeneratorStateSource.nameN)	r9   r:   r;   r<   r=   rE   r   r"   r8   r   r   r   r   rF   q   s
   
rF   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�gS )NFT©Úadd)Úcreate_load_globalrL   r2   r   r   r   r"   †   s    zGlobalSource.reconstructc                 C   s   t jS r   ©r   r   r4   r   r   r   r   ‰   s    zGlobalSource.guard_sourcec                 C   s   dt | jƒ› d�S )NúG[r6   ©r7   rL   r4   r   r   r   r8   Œ   s    zGlobalSource.nameN©r9   r:   r;   r<   r=   r"   r   r8   r   r   r   r   rK   ‚   s   
rK   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚDummyGlobalSourcec                 C   s
   t ƒ ‚d S r   rI   r2   r   r   r   r"   ’   s    zDummyGlobalSource.reconstructc                 C   s   t jS r   rP   r4   r   r   r   r   •   s    zDummyGlobalSource.guard_sourcec                 C   s   dS ©NÚ r   r4   r   r   r   r8   ˜   s    zDummyGlobalSource.nameN©r9   r:   r;   r"   r   r8   r   r   r   r   rT   �   s   rT   c                   @   s.   e Zd ZU eed< dd„ Zdd„ Zdd„ ZdS )	ÚGlobalWeakRefSourcerL   c                 C   s   |j | jddd�ftddƒ•S )NTrM   r   F)rO   rL   r
   r2   r   r   r   r"       s    ÿþzGlobalWeakRefSource.reconstructc                 C   s   t jS r   rP   r4   r   r   r   r   ¦   s    z GlobalWeakRefSource.guard_sourcec                 C   s   dt | jƒ› d�S )NrQ   z]()rR   r4   r   r   r   r8   ©   s    zGlobalWeakRefSource.nameNrS   r   r   r   r   rX   œ   s   
rX   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!   éÿÿÿÿrZ   )r!   r%   rZ   ÚsplitÚobjectÚ__setattr__rY   Újoin)r3   Zmember_partsr   r   r   Ú__post_init__±   s    
  ÿzAttrSource.__post_init__c                 C   s   | j  |¡| | j¡ S r   )r!   r"   Úcreate_load_attrsrZ   r2   r   r   r   r"   º   s    zAttrSource.reconstructc                 C   s
   | j  ¡ S r   ©r!   r   r4   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(ú, ú)r[   )rZ   Úisidentifierr!   r8   r4   r   r   r   r8   À   s    
zAttrSource.nameN)	r9   r:   r;   r<   r=   ra   r"   r   r8   r   r   r   r   rY   ­   s
   
	rY   c                   @   s   e Zd Zdd„ ZdS )ÚParamBufferSourcec                 C   s   t | j ¡  S r   ©Ú_GUARD_SOURCE_NN_MODULEr!   r   r4   r   r   r   r   È   s    zParamBufferSource.guard_sourceN©r9   r:   r;   r   r   r   r   r   rg   Æ   s   rg   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)rk   ÚSIZEÚSTRIDEÚSTORAGE_OFFSETr4   r   r   r   Úmethod_nameÑ   s    


zTensorProperty.method_nameN)r9   r:   r;   rn   ro   rp   rq   r   r   r   r   rk   Ì   s   rk   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%   rs   rk   rp   rt   r4   r   r   r   ra   ß   s    z"TensorPropertySource.__post_init__c                 C   s\   | j  |¡| | j ¡ ¡f•}| jd k	r:| | | j¡¡ | t	| jd k	rNdnddƒ¡ |S )Nr   r   T)
r!   r"   Zcreate_load_attrrs   rq   rt   r&   r'   r$   r
   )r3   r)   Zinstructionsr   r   r   r"   æ   s    
þ
ÿz TensorPropertySource.reconstructc                 C   s
   | j  ¡ S r   rc   r4   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()[r6   z
.stride()[z.storage_offset()z
unhandled )	rs   rk   rn   r!   r8   rt   ro   rp   r%   r4   r   r   r   r8   õ   s    zTensorPropertySource.name)r9   r:   r;   rk   r=   rt   r   rE   ra   r"   r   r8   r   r   r   r   rr   Ú   s   
rr   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%   r4   r   r   r   ra     s    zNegateSource.__post_init__c                 C   s
   t ƒ ‚d S r   rI   r2   r   r   r   r"     s    zNegateSource.reconstructc                 C   s
   | j  ¡ S r   rc   r4   r   r   r   r   	  s    zNegateSource.guard_sourcec                 C   s   | j  ¡ › d�S )Nz
.__neg__()©r!   r8   r4   r   r   r   r8     s    zNegateSource.nameN©r9   r:   r;   ra   r"   r   r8   r   r   r   r   ru     s   ru   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)Úinitr7   Ú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   r[   z['z']Ú__defaults__ú[r6   )r!   r%   r{   r   rz   r<   r^   r_   r8   r~   rE   r4   r   r   r   ra     s&    ÿþ  ÿ  ÿzDefaultsSource.__post_init__c                 C   s<   | j  |¡}| | | j¡¡ | | | j¡tdƒg¡ |S rB   )r!   r"   r$   rb   r~   r'   rz   r   )r3   r)   r+   r   r   r   r"   )  s    
þÿzDefaultsSource.reconstructc                 C   s
   | j  ¡ S r   rc   r4   r   r   r   r   4  s    zDefaultsSource.guard_sourcec                 C   s   | j S r   )r   r4   r   r   r   r8   7  s    zDefaultsSource.nameN)r9   r:   r;   r   rE   r<   r=   r{   r>   Údataclassesr~   r   ra   r"   r   r8   r   r   r   r   ry     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Úsuperr_   Ú
__reduce__r4   ©Ú	__class__r   r   ra   @  s    zGetItemSource.__post_init__c                 C   s   t | || jd�tdƒf•S )N©r*   rC   )r,   r*   r   r2   r   r   r   r"   G  s    þzGetItemSource.reconstructc                 C   s
   | j  ¡ S r   rc   r4   r   r   r   r   M  s    zGetItemSource.guard_sourcec                 C   s   | j s
t‚| j\}}||Ž S r   )r*   r%   r#   )r3   Zslice_classZ
slice_argsr   r   r   r(   P  s    

zGetItemSource.unpack_slicec                 C   s˜   t | jtƒr(| j ¡ › d| j ¡ › d�S | jrH| j ¡ › d|  ¡ ›d�S t | jtjƒr|| j ¡ › dt	| j|  
¡  ¡ ƒ› d�S | j ¡ › d| j›d�S d S )Nr‚   r6   )r   r#   r   r!   r8   r*   r(   ÚenumÚEnumr   r   Úis_localr4   r   r   r   r8   U  s    &zGetItemSource.name)r9   r:   r;   r   r=   r*   r>   ra   r"   r   r(   r8   Ú__classcell__r   r   r‡   r   r   ;  s   
r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTupleIteratorGetItemSourcec                 C   s0   |  tjd¡ | j |¡| | j¡ftddƒ•S )NZtuple_iterator_getitemrl   T)Úload_import_fromr	   r9   r!   r"   r'   r#   r
   r2   r   r   r   r"   c  s    

þýz&TupleIteratorGetItemSource.reconstructc                 C   s   d| j  ¡ › d| j›d�S )Nz___tuple_iterator_getitem(rd   re   )r!   r8   r#   r4   r   r   r   r8   k  s    zTupleIteratorGetItemSource.nameN)r9   r:   r;   r"   r8   r   r   r   r   rŽ   a  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   rv   r4   r   r   r   ra   q  s    zTypeSource.__post_init__c                 C   s"   |  dd¡ | j |¡tddƒ S )NÚbuiltinsÚtyper   T©r�   r!   r"   r
   r2   r   r   r   r"   t  s    zTypeSource.reconstructc                 C   s
   | j  ¡ S r   rc   r4   r   r   r   r   x  s    zTypeSource.guard_sourcec                 C   s   d| j  ¡ › d�S )Nztype(re   rw   r4   r   r   r   r8   {  s    zTypeSource.nameNrx   r   r   r   r   r�   o  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 )ÚSuperSourcer’   c                 C   s    | j d k	st‚| jd k	st‚d S r   )r’   r%   r!   r4   r   r   r   ra   Š  s    zSuperSource.__post_init__c                 C   s.   |  dd¡ | j |¡| j |¡ tddƒ S )Nr‘   r…   rl   T)r�   r’   r"   r!   r
   r2   r   r   r   r"   Ž  s    

ÿþÿzSuperSource.reconstructc                 C   s
   | j  ¡ S r   rc   r4   r   r   r   r   –  s    zSuperSource.guard_sourcec                 C   s   d| j  ¡ › d| j ¡ › d�S )Nzsuper(rd   re   )r’   r8   r!   r4   r   r   r   r8   ™  s    zSuperSource.nameN)	r9   r:   r;   r   r=   ra   r"   r   r8   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   rv   r4   r   r   r   ra   ¡  s    z ODictGetItemSource.__post_init__c                 C   s&   |  tjj¡ft| |dd�tddƒ•S )NFr‰   rl   T)Z_create_load_constÚcollectionsÚOrderedDictÚ__getitem__r,   r
   r2   r   r   r   r"   ¤  s
    ÿýzODictGetItemSource.reconstructc                 C   s
   | j  ¡ S r   rc   r4   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(rd   re   )r   r#   r’   r:   r;   r!   r8   r   )r3   Úrepr   r   r   r8   ®  s    zODictGetItemSource.nameN)	r9   r:   r;   r   r=   ra   r"   r   r8   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  |¡S r   )r!   r"   r2   r   r   r   r"   º  s    zNNModuleSource.reconstructc                 C   s   t | j ¡  S r   rh   r4   r   r   r   r   ½  s    zNNModuleSource.guard_sourcec                 C   s
   | j  ¡ S r   rw   r4   r   r   r   r8   À  s    zNNModuleSource.nameNrW   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   r4   r   r   r   r   Æ  s    zNotNNModuleSource.guard_sourceNrj   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   r4   r   r   r   r   Ì  s    zFSDPNNModuleSource.guard_sourceNrj   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 rU   r   r4   r   r   r   r8   Ò  s    zGlobalStateSource.namec                 C   s   t jS r   rP   r4   r   r   r   r   Õ  s    zGlobalStateSource.guard_sourceN©r9   r:   r;   r8   r   r   r   r   r   rž   Ð  s   rž   c                   @   s8   e Zd ZU eed< dd„ Zdd„ Zdd„ Zdd	d
„ZdS )r   Úsource_namec                 C   s   |j | jddd�gS )NFrM   )rO   r    r2   r   r   r   r"   Ý  s    zConstantSource.reconstructc                 C   s   t jS r   )r   r   r4   r   r   r   r   à  s    zConstantSource.guard_sourcec                 C   s   | j S r   )r    r4   r   r   r   r8   ã  s    zConstantSource.nameFc                 C   s
   t ƒ ‚d S r   rI   )r3   ÚfnZis_volatiler   r   r   Ú
make_guardæ  s    zConstantSource.make_guardN)F)	r9   r:   r;   r<   r=   r"   r   r8   r¢   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__as_tensor(re   rw   r4   r   r   r   r8   ì  s    zNumpyTensorSource.namec                 C   s
   | j  ¡ S r   rc   r4   r   r   r   r   ï  s    zNumpyTensorSource.guard_sourcec                 C   s"   |  dd¡ | j |¡tddƒ S )NZtorchZ	as_tensorr   Tr“   r2   r   r   r   r"   ò  s    zNumpyTensorSource.reconstructN)r9   r:   r;   r<   r8   r   r"   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 rU   r   r4   r   r   r   r8   ü  s    zShapeEnvSource.namec                 C   s   t jS r   )r   Z	SHAPE_ENVr4   r   r   r   r   ÿ  s    zShapeEnvSource.guard_sourceNrŸ   r   r   r   r   r¥   ú  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.   r0   )r   r§   r   r   r   r¨     s    
 ÿ

r¨   )8r•   rƒ   rŠ   Útypingr   r   r   Ztorch._guardsr   r   r   rV   r	   Zbytecode_transformationr
   r   r   r   r   r   r   ri   r   r   r�   r›   r   r   r,   Ú	dataclassr.   r?   rF   rK   rT   rX   rY   rg   r‹   rk   rr   ru   ry   r   rŽ   r�   r”   r    r™   rš   rœ   rž   r   r£   r¥   r¨   r   r   r   r   Ú<module>   s¼       ü      ú
      ú
ÿ








&

)
%










