o
    I&iu:                     @   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ded f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#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 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
Z4dd>de
fd?d@Z5dS )A    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 dS  ty   Y dS w )NTF)
isinstanceConstantSourceguard_sourcer   CONSTANTNotImplementedErrorsource r   ?C:\wamp64\www\opt\env\Lib\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v 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   r   )GetItemSourceODictGetItemSourcec                 C   sn   | j |}t| jtr|| j| |S |r,t| ts J ||| 	  |S ||| j |S r   )
basereconstructr   indexr   extendr   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      zLocalSource.reconstructc                 C      t jS r   )r   r   r2   r   r   r   r   X      zLocalSource.guard_sourcec                 C      dt | j dS )NzL[])reprr.   r5   r   r   r   name[      zLocalSource.nameN)
__name__
__module____qualname__str__annotations__r/   boolr"   r   r:   r   r   r   r   r-   P   s   
 r-   c                   @   .   e Zd ZU eed< dd Zdd Zdd ZdS )	RandomValueSourcerandom_call_indexc                 C   r4   r   )r   ZRANDOM_VALUEr5   r   r   r   r   c   r6   zRandomValueSource.guard_sourcec                 C   s"   | |jjj|| jtdgS NBINARY_SUBSCR)r0   ZtxoutputZrandom_values_varr&   rD   r   r1   r   r   r   r"   f   s   
zRandomValueSource.reconstructc                 C   s   d| j  S )NZrandom_value_)rD   r5   r   r   r   r:   m      zRandomValueSource.nameN)r<   r=   r>   intr@   r   r"   r:   r   r   r   r   rC   _   s
   
 rC   c                   @   rB   )	GlobalSourceglobal_namec                 C   s   |j | jdddgS )NFTadd)create_load_globalrK   r1   r   r   r   r"   u      zGlobalSource.reconstructc                 C   r4   r   r   r   r5   r   r   r   r   x   r6   zGlobalSource.guard_sourcec                 C   r7   )NG[r8   r9   rK   r5   r   r   r   r:   {   r;   zGlobalSource.nameNr<   r=   r>   r?   r@   r"   r   r:   r   r   r   r   rJ   q   s
   
 rJ   c                   @   rB   )	GlobalWeakRefSourcerK   c                 C   s   |j | jdddgtddS )NTrL   r   F)rN   rK   r
   r1   r   r   r   r"      s   zGlobalWeakRefSource.reconstructc                 C   r4   r   rP   r5   r   r   r   r      r6   z GlobalWeakRefSource.guard_sourcec                 C   r7   )NrQ   z]()rR   r5   r   r   r   r:      r;   zGlobalWeakRefSource.nameNrS   r   r   r   r   rT      s
   
 rT   c                   @   6   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   sb   | j sJ dd| jv r/| jd}t| dt| j d|d d  t| d|d  d S d S )Nz9Can't construct an AttrSource without a valid base source.r!   rW   )r!   rW   splitobject__setattr__rV   join)r2   Zmember_partsr   r   r   __post_init__   s   
zAttrSource.__post_init__c                 C   s   | j ||| j S r   )r!   r"   create_load_attrsrW   r1   r   r   r   r"      s   zAttrSource.reconstructc                 C   
   | j  S r   r!   r   r5   r   r   r   r         
zAttrSource.guard_sourcec                 C   s:   | j  sd| j  d| j dS | j  d| j  S )Nzgetattr(, )rX   )rW   isidentifierr!   r:   r5   r   r   r   r:      s   
zAttrSource.nameN)	r<   r=   r>   r?   r@   r^   r"   r   r:   r   r   r   r   rV      s   
 	rV   c                   @      e Zd Zdd ZdS )ParamBufferSourcec                 C      t | j  S r   _GUARD_SOURCE_NN_MODULEr!   r   r5   r   r   r   r      r3   zParamBufferSource.guard_sourceNr<   r=   r>   r   r   r   r   r   rg          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u rdS | t ju rdS | t ju rdS d S )NsizeZstrideZstorage_offset)rm   SIZESTRIDESTORAGE_OFFSETr5   r   r   r   method_name   s   


zTensorProperty.method_nameN)r<   r=   r>   rp   rq   rr   rs   r   r   r   r   rm      s
    rm   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 usJ | jtju r| jd u sJ d S | jd usJ d S r   )r!   ru   rm   rr   rv   r5   r   r   r   r^      s   z"TensorPropertySource.__post_init__c                 C   s^   g | j ||| j }| jd ur||| j |t	| jd ur(dndd |S )Nr   r   T)
r!   r"   Zcreate_load_attrru   rs   rv   r%   r&   r$   r
   )r2   r(   Zinstructionsr   r   r   r"      s   

z TensorPropertySource.reconstructc                 C   r`   r   ra   r5   r   r   r   r      rb   z!TensorPropertySource.guard_sourcec                 C   s   | j tju r| j  d| j dS | j tju r$| j  d| j dS | j tju r9| jd u s1J | j  dS td| j  )Nz.size()[r8   z
.stride()[z.storage_offset()z
unhandled )	ru   rm   rp   r!   r:   rv   rq   rr   AssertionErrorr5   r   r   r   r:      s   zTensorPropertySource.name)r<   r=   r>   rm   r@   rv   r   rI   r^   r"   r   r:   r   r   r   r   rt      s   
 rt   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
NegateSourcec                 C      | j d usJ d S r   r!   r5   r   r   r   r^      r;   zNegateSource.__post_init__c                 C      t  r   r   r1   r   r   r   r"      r6   zNegateSource.reconstructc                 C   r`   r   ra   r5   r   r   r   r      rb   zNegateSource.guard_sourcec                 C   s   | j   dS )Nz
.__neg__()r!   r:   r5   r   r   r   r:      s   zNegateSource.nameNr<   r=   r>   r^   r"   r   r:   r   r   r   r   ry      
    ry   c                   @   rx   )
ConvertIntSourcec                 C   rz   r   r{   r5   r   r   r   r^      r;   zConvertIntSource.__post_init__c                 C      | j |S r   r!   r"   r1   r   r   r   r"      rH   zConvertIntSource.reconstructc                 C   r`   r   ra   r5   r   r   r   r      rb   zConvertIntSource.guard_sourcec                 C      d| j   dS )Nz!cast_symbool_to_symint_guardless(rd   r~   r5   r   r   r   r:      r;   zConvertIntSource.nameNr   r   r   r   r   r      r   r   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)initr9   comparefield_namec              
   C   s   | j sJ d| jr0t| jtsJ t| dd t| d| j   d| j d| j d d S t| jt	s8J 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   rX   z['z']__defaults__[r8   )
r!   r   r   r   r?   r[   r\   r:   r   rI   r5   r   r   r   r^   
  s   ""zDefaultsSource.__post_init__c                 C   s<   | j |}||| j ||| jtdg |S rE   )r!   r"   r$   r_   r   r&   r   r   )r2   r(   r*   r   r   r   r"     s   
zDefaultsSource.reconstructc                 C   r`   r   ra   r5   r   r   r   r   &  rb   zDefaultsSource.guard_sourcec                 C      | j S r   )r   r5   r   r   r   r:   )  r6   zDefaultsSource.nameN)r<   r=   r>   r   rI   r?   r@   r   rA   dataclassesr   r   r^   r"   r   r:   r   r   r   r   r     s   
 r   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                    sD   | j d usJ t| jtr t d| j  t dd d S d S )Nr#   r)   T)r!   r   r#   slicesuperr\   
__reduce__r5   	__class__r   r   r^   2  s
   zGetItemSource.__post_init__c                 C   s   g t | || jdtdS )Nr)   rF   )r+   r)   r   r1   r   r   r   r"   9  s
   zGetItemSource.reconstructc                 C   r`   r   ra   r5   r   r   r   r   ?  rb   zGetItemSource.guard_sourcec                 C   s   | j sJ | j\}}|| S r   )r)   r#   )r2   Zslice_classZ
slice_argsr   r   r   r'   B  s   

zGetItemSource.unpack_slicec                 C   s   t | jtr| 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 )Nr   r8   )r   r#   r   r!   r:   r)   r'   enumEnumr   r   is_localr5   r   r   r   r:   G  s   &zGetItemSource.name)r<   r=   r>   r   r@   r)   rA   r^   r"   r   r'   r:   __classcell__r   r   r   r   r   -  s   
 r   c                   @      e Zd Zdd Zdd ZdS )TupleIteratorGetItemSourcec                 C   s4   | tjd g | j||| jtddS )NZtuple_iterator_getitemrn   T)load_import_fromr	   r<   r!   r"   r&   r#   r
   r1   r   r   r   r"   U  s   

z&TupleIteratorGetItemSource.reconstructc                 C   s   d| j   d| jdS )Nz___tuple_iterator_getitem(rc   rd   )r!   r:   r#   r5   r   r   r   r:   ]  s   zTupleIteratorGetItemSource.nameN)r<   r=   r>   r"   r:   r   r   r   r   r   S  s    r   c                   @   rx   )

TypeSourcec                 C   rz   r   r{   r5   r   r   r   r^   c  r;   zTypeSource.__post_init__c                 C   "   | dd | j|tdd S )Nbuiltinstyper   Tr   r!   r"   r
   r1   r   r   r   r"   f     zTypeSource.reconstructc                 C   r`   r   ra   r5   r   r   r   r   j  rb   zTypeSource.guard_sourcec                 C   r   )Nztype(rd   r~   r5   r   r   r   r:   m  r;   zTypeSource.nameNr   r   r   r   r   r   a  s
    r   c                   @   rU   )r    r#   c                 C   rz   r   r{   r5   r   r   r   r^   u  r;   z ODictGetItemSource.__post_init__c                 C   s(   | tjjgt| |ddtddS )NFr   rn   T)Z_create_load_constcollectionsOrderedDict__getitem__r+   r
   r1   r   r   r   r"   x  s   zODictGetItemSource.reconstructc                 C   r`   r   ra   r5   r   r   r   r     rb   zODictGetItemSource.guard_sourcec                 C   s   t | jtrd| jj d| jj }d| j  d| dS t | jtr3d| j  d| j  dS d| j  d| jdS )Nz__load_module("z").z___odict_getitem(rc   rd   )r   r#   r   r=   r>   r!   r:   r   )r2   repr   r   r   r:     s   zODictGetItemSource.nameN)	r<   r=   r>   r   r@   r^   r"   r   r:   r   r   r   r   r    q  s   
 r    c                   @   s$   e Zd Zdd Zdd Zdd ZdS )NNModuleSourcec                 C   r   r   r   r1   r   r   r   r"     rH   zNNModuleSource.reconstructc                 C   rh   r   ri   r5   r   r   r   r     r3   zNNModuleSource.guard_sourcec                 C   r`   r   r~   r5   r   r   r   r:     rb   zNNModuleSource.nameN)r<   r=   r>   r"   r   r:   r   r   r   r   r     s    r   c                   @   rf   )NotNNModuleSourcec                 C   rh   r   )_GUARD_SOURCE_NOT_NN_MODULEr!   r   r5   r   r   r   r     r3   zNotNNModuleSource.guard_sourceNrk   r   r   r   r   r     rl   r   c                   @   rf   )FSDPNNModuleSourcec                 C   rh   r   )_GUARD_SOURCE_FSDP_MODULEr!   r   r5   r   r   r   r     r3   zFSDPNNModuleSource.guard_sourceNrk   r   r   r   r   r     rl   r   c                   @   r   )GlobalStateSourcec                 C      dS N r   r5   r   r   r   r:        zGlobalStateSource.namec                 C   r4   r   rP   r5   r   r   r   r     r6   zGlobalStateSource.guard_sourceNr<   r=   r>   r:   r   r   r   r   r   r         r   c                   @   rU   )r   source_namec                 C   s   |j | jdddgS )NFrL   )rN   r   r1   r   r   r   r"     rO   zConstantSource.reconstructc                 C   r4   r   )r   r   r5   r   r   r   r     r6   zConstantSource.guard_sourcec                 C   r   r   )r   r5   r   r   r   r:     r6   zConstantSource.namec                 C   r|   r   r}   )r2   fnr   r   r   
make_guard  r6   zConstantSource.make_guardN)	r<   r=   r>   r?   r@   r"   r   r:   r   r   r   r   r   r     s   
 r   c                   @   s*   e Zd ZdefddZdd Zdd ZdS )	NumpyTensorSourcereturnc                 C   r   )Nz___from_numpy(rd   r~   r5   r   r   r   r:     r;   zNumpyTensorSource.namec                 C   r`   r   ra   r5   r   r   r   r     rb   zNumpyTensorSource.guard_sourcec                 C   r   )NZtorchZ	as_tensorr   Tr   r1   r   r   r   r"     r   zNumpyTensorSource.reconstructN)r<   r=   r>   r?   r:   r   r"   r   r   r   r   r     s    r   c                   @   r   )ShapeEnvSourcec                 C   r   r   r   r5   r   r   r   r:     r   zShapeEnvSource.namec                 C   r4   r   )r   Z	SHAPE_ENVr5   r   r   r   r     r6   zShapeEnvSource.guard_sourceNr   r   r   r   r   r     r   r   allow_cell_or_freevarc                C   s8   t | trt| j|dS t | tsdS |s| jrdS dS )Nr   FT)r   r   is_from_local_sourcer!   r-   r/   )r   r   r   r   r   r     s   


r   )6r   r   r   typingr   r   r   Ztorch._guardsr   r   r   r   r	   Zbytecode_transformationr
   r   r   r   r   r   r   rj   r   r   r   r   r   r   r+   	dataclassr-   rC   rJ   rT   rV   rg   r   rm   rt   ry   r   r   r   r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   <module>   s    










&


)
%








