o
    Zh,N                    @  sd  d dl mZ 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	 d dlm
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZ d dlZd dlmZ d d	lm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d d
l+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 erd dlm3Z3 d dl4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z:m;Z; doddZ<e=Z>eddej?Z@edZAedej?dZBedej?ddZCdpd"d#ZDdqd%d&ZEdrd'd(ZFdsd,d-ZGd.d.d/dtd6d7ZHdud9d:ZIdvd=d>ZJdud?d@ZKdudAdBZLdwdFdGZMdxdJdKZNdydMdNZOedOePZQedPePZRedQePZSeSd aTG dRdS dSZUeddTG dUdV dVZVeddTG dWdX dXeeB ZWeddTG dYdZ dZeWd[ ZXeddTG d\d] d]eWeB eeB ZYG d^d_ d_eeeC ZZG d`da daed.dbZ[G dcdd ddeeeC Z\eddTG ded deeB Z]dzdidjZ^d{dkdlZ_G dmdn dneeB Z`d dlambZc dS )|    )annotationsN)abstractmethod)AbstractContextManager)	dataclass)
AnyCallableClassVarGenericNewTypeOptionalProtocolTYPE_CHECKINGTypeVarUnion)override	TypedDict	TypeGuardTypeIsUnpack)CreationMeta)_add_batch_dim_unwrap_functional_tensor_wrap_functional_tensorget_unwrappedis_batchedtensoris_functorch_wrapped_tensoris_gradtrackingtensoris_legacy_batchedtensormaybe_get_bdimmaybe_get_levelpeek_interpreter_stack)trace_structured)no_dispatch)is_traceable_wrapper_subclass)WeakIdKeyDictionary)CInterpreter)Source)
FakeTensorFakeTensorMode)ShapeEnvSymbolicContexttobjectreturnTypeIs[FakeTensor]c                 C  s   ddl m} t| |S )Nr   )r'   )torch._subclasses.fake_tensorr'   
isinstance)r+   r'    r1   K/var/www/auris/lib/python3.10/site-packages/torch/_subclasses/meta_utils.py_is_fake_tensor:   s   
r3   _TensorLikeTMetaTensorDesc_T_TensorT)bound_TensorT_covT)r8   	covariant#Union[MetaTensorDesc, torch.Tensor]boolc                 C  s   z| j W S  ty   Y dS w )NF)is_leafRuntimeErrorr+   r1   r1   r2   safe_is_leafG   s
   r@   Optional[_TensorLikeT]c                 C  s>   t   t dd | jW  d    S 1 sw   Y  d S )NignorezThe .grad attribute of a Tensor)warningscatch_warningsfilterwarningsgradr?   r1   r1   r2   	safe_gradO   s   
$rG   c                 C  s   t | }|d us
J |S N)rG   )r+   rF   r1   r1   r2   _expect_safe_gradU   s   rI   abNonec                 C  s   | |ksJ |  d| d S )Nz != r1   )rJ   rK   r1   r1   r2   	assert_eq[   s   rM   Fskip_symbolic	skip_leaf Callable[[object, object], None]m1m2torch.TensorrO   rP   c                  s:   t |tjrt |n|}d	 fdd||S )
NrR   r5   rS   rT   r-   rL   c                   s   | j |j  s | j|j  | j|j s  | j|j  | j|j  | j|   | j|   | j|   | jd ut	|d u | jd urX| jt
| | jr| | j|j  | j|   | j|   | j|  d S t| r | j|j  | j|   | j|  d S s | j|   | j|   | j|  | jr| jd usJ |jd usJ | j|j d S d S rH   )dtypeshaperequires_gradr=   	is_sparseis_inferenceis_conjis_negrF   rG   rI   layout	dense_dim
sparse_dimis_coalescedis_sparse_compressedstridestorage_offsetis_view_is_viewbase_base)rR   rS   rM   gorP   rO   r1   r2   rh   m   s>   
zassert_metadata_eq.<locals>.go)rR   r5   rS   rT   r-   rL   )r0   torchTensorMetaTensorDescriberdescribe_tensor)rM   rR   rS   rO   rP   r1   rg   r2   assert_metadata_eq_   s   


(rm   TypeGuard[torch.Tensor]c                 C  s   t | tjo| jtju S rH   )r0   ri   rj   r\   
sparse_coor?   r1   r1   r2   is_sparse_coo   s   rp   r\   torch.layoutc                 C  s   | t jt jt jt jhv S rH   )ri   
sparse_csr
sparse_csc
sparse_bsr
sparse_bsc)r\   r1   r1   r2   is_sparse_compressed_layout   s   rv   c                 C  s   t | tjo
t| jS rH   )r0   ri   rj   rv   r\   r?   r1   r1   r2   r`      s   r`   c                 C  s   t | pt| S rH   )rp   r`   r?   r1   r1   r2   is_sparse_any      rw   tytype[_T]objc                 C  s&   t || sJ d|  dt| |S )Nz	expected z	 but got )r0   type)ry   r{   r1   r1   r2   _checked_cast   s   "r}   re   torch.UntypedStoragec                 C     | j S rH   real_storage)re   r1   r1   r2   _get_real_storage   s   r   r   c                 C  s
   || _ d S rH   r   )re   r   r1   r1   r2   _set_real_storage   s   
r   MetaStorageIdMetaTensorId_DescriberIdc                   @  sV   e Zd ZdZddd dd	Zd!ddZd"ddZddd#ddZdddd$ddZdS )%rk   a  
    Given a Tensor/Storage, generate a MetaTensorDesc/MetaStorageDesc
    for it, which is enough information to reconstruct a meta tensor/fake tensor
    corresponding to a Tensor as faithfully as possible.

    This is a stateful conversion object because we keep track of the IDs
    of the tensors/storages passed to us, so we can consistently give
    the same ID when we see the same tensor/storage.
    F	copy_datar   r<   r-   rL   c                C  sP   t | _tt d a td| _td| _t | _t | _	|| _
t | _t | _d S )N   r   )DESCRIBER_NEXT_IDidr   r   next_tensor_idr   next_storage_idr$   lookup_tensorlookup_storager   settraced_tensorstraced_storagesselfr   r1   r1   r2   __init__   s   

zMetaTensorDescriber.__init__r+   rT   r   c                 C  0   || j vr| j| j |< t| jd | _| j | S Nr   )r   r   r   r   r+   r1   r1   r2   get_tensor_id      

z!MetaTensorDescriber.get_tensor_idsr~   r   c                 C  r   r   )r   r   r   r   r   r1   r1   r2   get_storage_id   r   z"MetaTensorDescriber.get_storage_idtracer   MetaStorageDescc                  sZ   t || jr|nd d |r+ jjvr+td fddd j j  S )N)r   sizedatadescribe_storagec                          jS rH   as_jsonr   r1   rr   r1   r2   <lambda>       z6MetaTensorDescriber.describe_storage.<locals>.<lambda>Zmetadata_fn)r   r   r   r   r   r   r!   add)r   r   r   r1   r   r2   r      s   z$MetaTensorDescriber.describe_storageTrecurser   r   r5   c             	     sf  t } }j}j}j}t}	t}
j}t}t	}t
}t}d }d}|sNt|sN|r;|	rN|sN|
sN|sNj d} }d }|s^t|s^|rZ|	r^ }d }d }d }|sh|rrjtd}n9|rjjdvr rtd|
st jtd}}ntj }jt|d}tjj }d }|
rtjj }W d    n1 sw   Y  d }d }d }|	rt dsJ ! \}}fdd|D }t}ddl"m#} t$%}t&dBi d	'd
|d( d|dj)d* dj+d|d|d|
d|d|d|d|d, d- dt.tj/j0d|	d|d|v rO| j12 nd d|d|djd 3 d!|d"|d#t4t5d$t6 d%jszt7r~8 nd d&jst7r9 nd d'jr: nd d(|rjtj;tj<hv rj= d)d*nd d+|r͈jtj;tj<hv r͈j> d)d*nd d,|rjtj?tj@hv rjA d)d*nd d-|rjtj?tj@hv rjB d)d*nd d.|rt7rjC d)d*nd d/tD }d ur)j|dnd d0 r8tjjEFnd d1|d2|sD|rHtGnd d3|rRtHnd d4|rk rkjId urkjjIdnd d5tjJjKLd6|d7|d8|d9|d:|d;|d<|d=jMrnd  r jNjOvrtPd> fd?d@dA jOQ jN  S )CNr   r   ZxlalazyzVCannot safely fakify a view because this process drops the view information right now.__tensor_flatten__c                   s"   i | ]}| j t|d qS )r   )rl   getattr).0attr)r   r+   r   r1   r2   
<dictcomp>Y  s    z7MetaTensorDescriber.describe_tensor.<locals>.<dictcomp>)_tensor_symint_registryr   storagerY   r=   rW   ndimrU   rX   	is_mkldnnis_functorch_wrappedr   r   r   rc   rZ   r[   is_parameterr#   	is_nested
nested_intis_functionalr\   devicer   ra   rb   dynamo_dynamic_indicesZ_dynamo_dynamic_indicesr^   r]   r_   crow_indicesFr   col_indicesccol_indicesrow_indicesvaluesrF   creation_meta	unwrappedlevelbdimre   	fake_mode	view_funcattrsctxr|   functorch_stackautograd_meta_fromcurrent_levelr   rl   c                     r   rH   r   r1   r   r1   r2   r     r   z5MetaTensorDescriber.describe_tensor.<locals>.<lambda>r   r1   )Rr@   rd   rX   r\   r   r#   r   r   r   r   r   ri   Z_is_functional_tensorrv   r   untyped_storagerb   ra   rl   r   r   r|   r>   Z_syncZ_from_functional_tensor_CZ$_functionalization_reapply_views_tlsr   
_functorchr   pyfunctorch#temporarily_clear_interpreter_stackhasattrr   Z$torch.nested._internal.nested_tensorr   ViewFuncfrom_tensorr5   r   rY   rW   dimrU   rZ   r[   r0   nn	Parameternoder   r   listr   r   r`   r^   r]   r_   rr   rt   r   r   rs   ru   r   r   r   rG   	_autogradZ_get_creation_metar   r   rf   _subclassesfake_tensormaybe_get_fake_moder   r   r   r!   r   )r   r+   r   r   r=   rc   rX   r\   r   Zis_traceable_wrapper_subclass_vr   r   Zis_batchedtensor_vZis_legacy_batchedtensor_vZis_gradtrackingtensor_vr   r   rb   ra   r   r   r   Zreapply_viewsZmaybe_functorch_stackr   r   Ztype_vZ	raw_attrsr   r   rF   r1   )r   r   r+   r   r2   rl      s  







 !"#$%')*05:?DIMORUX[\]^_cdefhz#MetaTensorDescriber.describe_tensorNr   r<   r-   rL   )r+   rT   r-   r   )r   r~   r-   r   )r   r~   r   r<   r-   r   )r+   rT   r   r<   r   r<   r-   r5   )	__name__
__module____qualname____doc__r   r   r   r   rl   r1   r1   r1   r2   rk      s    


rk   )frozenc                   @  s0   e Zd ZU ded< ded< ded< dddZdS )r   r   r   intr   Optional[torch.UntypedStorage]r   describer_idr   r-   dict[str, object]c                 C  s*   | j |t| jtr| jdS t| jdS )N)r   r   r   )r   r0   r   r   repr)r   r   r1   r1   r2   r     s   zMetaStorageDesc.as_jsonNr   r   r-   r   )r   r   r   __annotations__r   r1   r1   r1   r2   r     s
   
 r   c                   @  s.   e Zd Ze		ddd
dZedddZdS )r   Nr+   r7   new_basesymint_visitor_fnOptional[Callable[[int], int]]tensor_visitor_fn,Optional[Callable[[torch.Tensor], _TensorT]]r-   c                 C     d S rH   r1   r   r+   r   r   r   r1   r1   r2   apply  s   zViewFunc.applyrT   c                 C  s   t | rt S t| jS rH   )r3   _FakeTensorViewFunc_CustomViewFunc_view_func_unsafer?   r1   r1   r2   r     s   
zViewFunc.from_tensorNN)
r+   r7   r   r7   r   r   r   r   r-   r7   )r+   rT   r-   r   )r   r   r   r   r   staticmethodr   r1   r1   r1   r2   r     s    	r   c                   @  s    e Zd Ze		ddddZdS )r   Nr+   rT   r   r   r   r   .Optional[Callable[[torch.Tensor], FakeTensor]]r-   r'   c                 C  s   t jjj||||S rH   )ri   r   r   r'   r   r   r1   r1   r2   r     s   
z_FakeTensorViewFunc.applyr   )
r+   rT   r   rT   r   r   r   r   r-   r'   )r   r   r   r   r   r1   r1   r1   r2   r     s
    r   r'   c                   @  s*   e Zd ZU ded< e		ddddZdS )r   zpCallable[[torch.Tensor, Optional[Callable[[int], int]], Optional[Callable[[torch.Tensor], _TensorT]]], _TensorT]funcNr+   rT   r   r   r   r   r   r-   r7   c                 C  s   |  |||S rH   )r   r   r1   r1   r2   r     s   	z_CustomViewFunc.applyr   )
r+   rT   r   rT   r   r   r   r   r-   r7   )r   r   r   r   r   r   r1   r1   r1   r2   r   	  s   
 	r   c                   @     e Zd Zd
ddZd	S )_MetaTensorCallbackargCallable[[], torch.Tensor]r   Union[torch.device, str]r-   r9   c               C  r   rH   r1   )r   r   r   r1   r1   r2   __call__&  s   z_MetaTensorCallback.__call__N)r   r  r   r  r-   r9   r   r   r   r  r1   r1   r1   r2   r   %      r   c                   @  s   e Zd ZU ded< dS )_MetaTensorCallbackKwargsr  r   N)r   r   r   r   r1   r1   r1   r2   r  ,  s   
 r  )totalc                   @  r   )_MetaTensorCallbackOptDevicer   r  kwargs!Unpack[_MetaTensorCallbackKwargs]r-   r9   c                K  r   rH   r1   )r   r   r	  r1   r1   r2   r  5  s   z%_MetaTensorCallbackOptDevice.__call__N)r   r  r	  r
  r-   r9   r  r1   r1   r1   r2   r  4  r  r  c                   @  sx  e Zd ZU ded< ded< ded< ded< d	ed
< ded< ejZded< dZded< dZded< dZ	ded< dZ
ded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded< dZded < dZded!< dZded"< dZded#< dZd$ed%< d&Zded'< dZd(ed)< dZded*< dZded+< dZd,ed-< dZd.ed/< dZd.ed0< dZ d.ed1< dZ!d.ed2< dZ"d.ed3< dZ#d.ed4< dZ$ded5< dZ%d.ed6< dZ&d7ed8< dZ'd9ed:< dZ(d.ed;< h d<Z)d=ed>< dZ*d?ed@< dZ+dAedB< dZ,dCedD< dZ-dEedF< dZ.dedG< dZ/dedH< dZ0dIedJ< dZ1dKedL< dZ2dKedM< dVdRdSZ3e4dWdTdUZ5dS )Xr5   r   r   r   r   torch.dtyperU   ztorch.devicer   tuple[int, ...]r   z	list[int]r   rq   r\   Fr<   rY   r=   rW   rX   r   r   r   r   r   rc   r   NzOptional[int]r   r#   r   rZ   r[   r   Optional[tuple[int, ...]]ra   r   rb   zOptional[MetaStorageDesc]r   r^   r]   zOptional[bool]r_   zOptional[MetaTensorDesc]r   r   r   r   r   r   r   re   z#Optional[dict[str, MetaTensorDesc]]r   zOptional[CreationMeta]r   rF   >
   r   r   r   r   r   r   r   r   r|   r   zClassVar[set[str]]_UNSERIALIZABLEzOptional[object]r   zOptional[type]r|   zOptional[FakeTensorMode]r   zOptional[ViewFunc]r   r   r   zOptional[list[CInterpreter]]r   Optional[torch.Tensor]r   r   r   r   r-   r   c                   s:   d fdd  fdd	t D }|d
|i |S )Nkstrvr,   r-   c                   s    dv rd S  t jv rt|S t|tjtjtjfrt|S t|tjr(t|S t|t	t
fr9 fdd|D S t|tt frC|jS t|trLt|S  dkr^t|tr^dd | D S |S )N)r   r   c                   s   g | ]} |qS r1   r1   )r   v1)jsonr  r1   r2   
<listcomp>      z8MetaTensorDesc.as_json.<locals>.json.<locals>.<listcomp>r   c                 S  s   i | ]\}}||j qS r1   )r   )r   Zk1r  r1   r1   r2   r     s    z8MetaTensorDesc.as_json.<locals>.json.<locals>.<dictcomp>)r5   r  r   r0   ri   r   rU   r\   ZSymInttupler   r   r   r   r  dictitems)r  r  )r  )r  r2   r    s"   

z$MetaTensorDesc.as_json.<locals>.jsonc                   sL   i | ]"}t |j|ju s$|jd krt |jr|j |jt |jqS r   )r   namedefault)r   fieldr  r   r1   r2   r     s    

z*MetaTensorDesc.as_json.<locals>.<dictcomp>r   )r  r  r  r,   r-   r,   )dataclassesfieldsupdate)r   r   r   r1   r  r2   r     s   zMetaTensorDesc.as_jsonc                 C  r   rH   )r   r   r1   r1   r2   rV     s   zMetaTensorDesc.shaper   )r-   r  )6r   r   r   r   ri   Zstridedr\   rY   r=   rW   rX   r   r   r   r   r   rc   r   r   r#   r   rZ   r[   r   ra   rb   r   r^   r]   r_   r   r   r   r   r   r   r   re   r   r   rF   r  r   r|   r   r   r   r   r   r   r   r   propertyrV   r1   r1   r1   r2   r5   >  sn   
 
$dstsrcr  c                 C  s    t |tjur	d S | | d S rH   )r|   ri   rj   Zcopy_)r$  r%  r1   r1   r2   
_safe_copy  s   r&  c                 C  s   t | tjur	d S |  S rH   )r|   ri   rj   clone)r%  r1   r1   r2   _safe_clone  s   r(  c                   @  s   e Zd Zddd=ddZd>d	d
Zd?ddZd@ddZdAddZdBddZdCddZ	dDd d!Z
edEd#d$Ze	%dFdGd)d*ZedHd+d,ZdId5d6Z	%dFd%d%d%d7d8dJd;d<Zd%S )KMetaConverterFr   r   r<   r-   rL   c                C  sB   t  | _t  | _d| _d| _d | _d| _|| _t	|d| _
d S )Nr   r   )weakrefWeakValueDictionarystorage_memotensor_memohitmissZdel_hookarg_cntr   rk   	describerr   r1   r1   r2   r     s   zMetaConverter.__init__c                 C  s   | j dko	| jdkS )Nr   )r.  r/  r"  r1   r1   r2   
successful	  s   zMetaConverter.successfulr+   r5   r  c                 C     | j |jd S rH   r-  getr   r   r1   r1   r2   get_tensor_memo  rx   zMetaConverter.get_tensor_memor7   c                 C  s    | j |jd }|d usJ |S rH   r4  )r   r+   r   r1   r1   r2   _checked_get_tensor_memo  s   z&MetaConverter._checked_get_tensor_memor  c                 C     || j |j< d S rH   )r-  r   )r   r+   r  r1   r1   r2   set_tensor_memo  rx   zMetaConverter.set_tensor_memor   r   r   c                 C  r3  rH   )r,  r5  r   r   r1   r1   r2   get_storage_memo  rx   zMetaConverter.get_storage_memor~   c                 C  r8  rH   )r,  r   )r   r   r  r1   r1   r2   set_storage_memo  rx   zMetaConverter.set_storage_memocallback0Callable[[Callable[[], torch.Tensor]], _TensorT]c              	     s   |    }d u rT| fdd }| jrLt * t   jd us&J t| j  W d    n1 s8w   Y  W d    n1 sGw   Y  | 	 | |S |S )Nc                     s   t j jt jddS NmetarU   r   )ri   emptyr   Zuint8r1   r   r1   r2   r   &  s    z,MetaConverter.meta_storage.<locals>.<lambda>)
r:  r   r   ri   no_gradr"   r   r   r'  r;  )r   r   r<  memor_sr1   rB  r2   meta_storage  s    
 zMetaConverter.meta_storagerT   c                 C  s   t t|S rH   )typingcastr7   )clsr+   r1   r1   r2   _checked_cast_tensor_t3  s   z$MetaConverter._checked_cast_tensor_tNr  r   "Optional[Union[torch.device, str]]c                 C  s   |  | S rH   )rJ  )rI  r+   r   r1   r1   r2   _identity_callable8  s   z MetaConverter._identity_callablec                 C  s$   t jjdd}||}tt|S )Nz9Internal error: Tried to backward() through example inputr   )ri   r   Z
_functionsZDelayedErrorrG  rH  r7   )rI  r+   Zerrfnerrr1   r1   r2   _backward_error@  s   zMetaConverter._backward_error	shape_envOptional[ShapeEnv]	callback__MetaTensorCallback[_TensorT]sourceOptional[Source]symbolic_contextOptional[SymbolicContext]c                   s  t j|jdd u rddlm} |dtj tj	 
tjjjr)J  jd7  _tj	d ur:	jfdI	fddfdJfdd}fdK	fdddLfd"d#	fdMfd%d&}d u rVd' tj| jrj}	fd(d)}
jr͈jd usJ t ' t  t|
sJ tj|
_W d    n1 sw   Y  W d    n1 sw   Y  t|
sJ d*|
tj  j!rd+|
_!j!r|	s"|
# }
t$  |
tj  W d    n	1 s	w   Y  nt%j&rj}	j&tj'tj(hv rQj)d us+J j*d us3J j+d us;J j,j) j* }j+j-|d |d,  nd-j&tj.tj'hv rjj/d useJ j/j0nj1d usrJ j1j0fd.d)}
jrjd usJ t ) t  t|
sJ tj|
_W d    n	1 sw   Y  W d    n	1 sw   Y  t|
sJ d*j!rd+|
_!j!r|	sވ2|
}
nj3rj4sdd/l5m6} |d0 n׈j7rj}	\
}
fd1d)}
jrnt P t < j8d us"J j9d us*J t|
s1J tj:j8j9j0jd2|
_jd usGJ t;|
jj W d    n	1 sYw   Y  W d    n	1 siw   Y  t|
swJ d*j!r~d+|
_!j!r|	s2|
}
n?j<rj=rdd/l5m6} |d3 dN 	fd4d5}
nj>rjj?d6vrj@d usJ j<rJ Aj@	}"tB|}
tCjD|
 nj=rjEd usJ d }	rd urdd7lFmG} tH|s	J jId urjI}AjE	tjJjKLd8|}dOd=d>}tjMtjjjN}tjOtjjjNd? z|j0j0krCn+||j0j0rT"tP|}n|j0|j0re"tQ|}n	"|Rj0}jrt  ||}
W d    n	1 sw   Y  j!|
_!nejEj!j!krt$  ||}
W d    n	1 sw   Y  nBj!sJ t  "|R|j-}W d    n	1 sw   Y  j!|_!t$  ||}
W d    n	1 sw   Y  jSd usJ tjjTU|
jS W tjOtjjjN| ntjOtjjjN| w j}	jVs.jWs.j<s2jXr;tYW  d    S \
}j4rP
d@}
nc
fdAd)}
jrt H t 4 j8d usoJ j9d uswJ t|
s~J tj:j8j9j0jd2|
_t;|
jj W d    n	1 sw   Y  W d    n	1 sw   Y  t|
sJ d*j!r̈j!|
_!|	s̈2|
}
jZ}|d usJ |j[j\vr|
j3s|
9 kr|
] |kr^||
_  jrt|
sJ |
jd us
J t`|
_ |
j_  nja|dB}t }ddClbmc}md} ||
}|d ur5||}t   u | |
e||
 W d    n	1 sTw   Y  jrt A t - t|
smJ |
jd usuJ j9d us}J |
jetf|j]j8j9 W d    n	1 sw   Y  W d    n	1 sw   Y  W d    n	1 sw   Y  W d    n	1 sw   Y  jgd urddDlmL} Ajg	|dE|
_gtjh|
ji tjj|
jk W d    n	1 s w   Y  jWojl k}tmtn|
d+|dF ddGlFmo} jZd ur3|jZj8dkr3|
_ pd jqr:d+|
_rjsd urPt|
sGJ |
jtjujsdH|
_vw|
 xS )PNr   r   )ConstantSourceZ__meta_utils_unknown_tensorr   r+   r5   r%  torch._guards.SourcerU  ?Optional[torch.fx.experimental.symbolic_shapes.SymbolicContext]r-   ,tuple[tuple[int, ...], tuple[int, ...], int]c                   s    j d usJ d urR j}|d ur|ju r j j  jfS tfdd jD }tfdd j D } j}j||| fddt j	D ||dS  j j  jfS )Nc                 3      | ]}  |V  qd S rH   #_maybe_specialize_sym_int_with_hint)r   szrO  r1   r2   	<genexpr>  
    
zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>c                 3  r\  rH   r]  )r   sdr`  r1   r2   ra    rb  c                   s   g | ]}| j v qS r1   r  )r   dr?   r1   r2   r    r  zWMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<listcomp>)rU  )
ra   r   rO  r   rb   r  r^  Z-_create_symbolic_sizes_strides_storage_offsetranger   )r+   r%  rU  r   Zt_sizeZt_strideZt_storage_offsetr`  r?   r2    sym_sizes_strides_storage_offset  s.   	zCMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offsetinner_t	inner_srcrT   c                   s&    | ||\}}}t j||| jddS r>  ri   empty_stridedrU   )rg  rh  rU  Zinner_sizesZinner_stridesZ_inner_storage_offset)rf  r1   r2   empty_create  s   
z/MetaConverter.meta_tensor.<locals>.empty_create
outer_sizer  outer_striderS  Optional[torch._guards.Source]r7   c                   s   ddl m  ddlm | jd usJ | jd usJ |d ur |n| j}|d ur)|n| j}|d u s7t|s7J d fdd|d usHJ | ||||}|j	|kseJ d| j d| d|j	 | |ks{J d| j d| d|  |S )Nr   
AttrSource)SubclassSymbolicContextr+   r5   rl  r  rm  rU  rZ  r<  &_MetaTensorCallbackOptDevice[_TensorT]rS  rY  r-   r7   c                   s   | j d u r| |||S i }| j  D ]?\}}d }	|d ur8t|s&J |j|  }
d ur8ttjjj	j
|
}	 ||}tj||jd}||j|j|	||}|||< q| jd us\J | j|| j||S )NrW  )r   meta_tensorr  r0   inner_contextsr}   ri   ZfxZexperimentalZsymbolic_shapesr*   	functoolspartialr   r   ra   r|   Z__tensor_unflatten__r   )r+   rl  rm  rU  r<  rS  Zinner_tensorsr   Zmeta_tensor_descZcurrent_contextZcurrent_context_Zcurrent_sourceZinner_callbackZnew_empty_tensor)rp  rq  _empty_create_subclassr   rO  r1   r2   rw    sJ   




zXMetaConverter.meta_tensor.<locals>.empty_create_subclass.<locals>._empty_create_subclasszExpected return value from z.__tensor_unflatten__() to have shape equal to z, but got: z/__tensor_unflatten__() to have stride equal to )r+   r5   rl  r  rm  r  rU  rZ  r<  rr  rS  rY  r-   r7   )
torch._dynamo.sourcerp  %torch.fx.experimental.symbolic_shapesrq  r   r|   r   ra   r0   rV   )r+   rl  rm  rU  rS  sub)r<  r   rO  )rp  rq  rw  r2   empty_create_subclass  s:   	
5

z8MetaConverter.meta_tensor.<locals>.empty_create_subclassrO  8Optional[torch.fx.experimental.symbolic_shapes.ShapeEnv]r<  rR  5torch.fx.experimental.symbolic_shapes.SymbolicContextc                   s   ddl m} ddlm}m}m} d }| jr'| jd usJ  | j||d||}|jg| j	 }	| j
rf| jd us8J i }
| j D ]\}}t|tsJJ  |||||||
|< q?||	d g| j	 |
||d}|S ||	d g| j	 |d}|S )Nr   ro  )
DimDynamicStatelessSymbolicContextrq  rf   )dynamic_sizesconstraint_sizesrt  Ztensor_sourceview_base_context)r  r  r  )rx  rp  ry  r~  r  rq  rc   re   ZDYNAMICr   r#   r   r  r0   r  )r+   rS  rO  r<  rp  r~  r  rq  r  Zt_dynamic_sizesrt  r   innerZt_symbolic_context)all_dynamic_symbolic_contextr1   r2   r  /  sB   


z?MetaConverter.meta_tensor.<locals>.all_dynamic_symbolic_contextre   c                   sb  
|	\}}}|j s,t | s,  | |||W  d    S 1 s'w   Y  ddlm  ddlmm} d fdd}i |j rt|jd usPJ |j	d usWJ |||d	}|
 \}	}
|	D ]}t|||j| j< qffd fdd}|jd usJ |j|| ||}t|| | t|| | t|| | |S )Nr   )EphemeralSource)r  sym_eqr   r   r-   c                   sn   ddl m  d uotot fddjD }|s!d u r#| S d}j| |d d}j|| |dS )Nr   r~  c                 3  s    | ]}| j u V  qd S rH   )ZSTATIC)r   xr  r1   r2   ra    s    

z_MetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fn.<locals>.<genexpr>r   )Zpositive)hintrS  )ry  r~  r0   allr  Zcreate_symbolZcreate_symintnode)r   Zall_static_sizesZ
sym_sourcesymbol)r  r  rO  rU  r  r2   r     s   	zLMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fnrl  rm  	visited_trT   rO  r|  r<  rr  c                   s`   | d u rd S j | }|d }|d ur|S j | } d}||||||||S )Nr   )r1  r   r5  rl   rs  )r  rO  r<  Z
visited_idZfake_visited_tZvisited_descZtemp_source)r  r  real_to_fake_mappingr   r1   r2   r     s"   
zLMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.tensor_visitor_fn)r   r   r-   r   )r  rT   rO  r|  r<  rr  r-   rT   )r#   rJ  Z
as_stridedrx  r  ry  r  r  r   r|   r   r   r   r   r   ri   _checkr   ra   rb   )re   r+   rO  sizesstridesrb   r  r   Zfake_tr   _r   r   )r  r<  r{  maybe_suppressr   rS  rf  rU  )r  r  r  rO  r2   view_from_base~  sD   
 +z1MetaConverter.meta_tensor.<locals>.view_from_basec                     s$   t jjj j j j jt jddS )Nr?  )rU   r\   r   )	ri   opsatenZ_sparse_coo_tensor_with_dimsr^   r]   r   rU   ro   r1   r?   r1   r2   r     s    z+MetaConverter.meta_tensor.<locals>.<lambda>z)the callback you passed in doesn't detachT   r1   c                
     s&   t jjjdjj jjddS )Nr   r?  )r\   rU   r   )ri   r  r  Z#_sparse_compressed_tensor_with_dimsr]   rV   r\   rU   r1   )	blocksizeindex_dtyper+   r1   r2   r   D  s    )unimplementedz;strided nested tensors are not supported by meta conversionc                        t j jddS r>  ri  r1   r  r  r+   r1   r2   r   m  s    
r@  z;view functorch tensors are not supported by meta conversionc              	     s  j rGjd us
J jd usJ jd usJ j}j}j}tjjj 	t
|||}W d    |S 1 s@w   Y  |S jrjd usQJ jd usXJ tjj}|  j}W d    n1 sow   Y  j}|kr~|}n#tjjj 	tjj||}W d    n1 sw   Y  j}jrt|rd|_|S jr|s|}|S jrjd usJ jd usJ j	}	t|j}|S jd usJ j j fdd}jrLt B t % tjjjjjd|_j d usJ t!|jj  W d    n1 s.w   Y  W d    |S W d    |S 1 sGw   Y  |S )NTc                     r  r>  ri  r1   r  r1   r2   r         zDMetaConverter.meta_tensor.<locals>._to_fake_tensor.<locals>.<lambda>r@  )"r   r   r   r   ri   r   r   Z%temporarily_restore_interpreter_stackr   rJ  r   r   r   Z_DisableFuncTorchZ_wrap_for_gradr=   rW   r@   rN  r   r   rs  r   ra   r   r   rC  r"   rj  rU   r   real_tensorr   r&  )r+   ftZlvlr   r   Zdisable_functorchr=   )GRAD_TENSOR_SENTINEL_VALUE_to_fake_tensorr<  r   rO  rS  rU  r  r2   r    s   


FF-

+
	*			z2MetaConverter.meta_tensor.<locals>._to_fake_tensorr   )r  rf   complex_dtyper  
real_dtyper<   c                 S  s   t | ot | |kS rH   )utilsZis_complex_dtypeZcorresponding_real_dtype)r  r  r1   r1   r2   	is_c_of_r  s
   
z,MetaConverter.meta_tensor.<locals>.is_c_of_rFr  c                     r  r>  ri  r1   r  r1   r2   r     r  )r<  )in_kernel_invocation_managerr   ro  rF   rN   )guard_size_oblivious)Znt_tensor_id)r+   r5   r%  rY  rU  rZ  r-   r[  )rg  r5   rh  rY  rU  rZ  r-   rT   )r+   r5   rl  r  rm  r  rU  rZ  rS  rn  r-   r7   )
r+   r5   rS  rY  rO  r|  r<  rR  r-   r}  )re   r7   r+   r5   rO  r|  r-   r7   r+   r5   r-   r7   )r  r  r  r  r-   r<   )yru  rv  r   rx  rX  lenr-  ri   r   Z_dispatch_tls_local_exclude_sethasZDispatchKeyPythonr0  
contextlibnullcontextZsuppress_guardsr6  Zinference_moderY   rX   r=   r   r   rC  r"   r3   r(  r  r@   Z_coalesced_r<   r_   rW   rJ  r'  Zenable_gradrv   r\   rt   ru   r^   r]   r   r   rV   rr   r   rU   r   rN  r   r#   Ztorch._dynamo.excr  r   r   ra   rj  r&  r   rc   r   r|   r   rs  Z_to_functional_tensorZ_mirror_autograd_meta_tor   re   ry  r  r0   r  Z_dynamorS  rp  Z&_dispatch_tls_is_dispatch_key_excludedZADInplaceOrViewZ'_dispatch_tls_set_dispatch_key_excludedZview_as_realZview_as_complexviewr   r   Z_set_creation_metar   r   r   NotImplementedr   r   r,  rb   r;  r   r   rF  r/   r  r   set_r   rF   Z	_set_conjrZ   Z_set_negr[   r   rm   rM   r  Zresize_r   	_is_paramr   r   Zcreate_symbolic_nested_intZnested_int_memor9  r7  )r   r+   rO  rQ  rS  rU  rX  rk  r  r=   r   Z	batch_dimr  Z_storage_offsetr   Zbase_symbolic_contextr  re   r  Zold_excludemidrb   r   rE  Zmaybe_fake_mgrr  r   Zmb_fake_moderp  rP   r  r1   )r  r  r  r  r<  r{  r  r  r   rO  r  rS  r  rf  rU  r+   r2   rs  O  s~  
+mT 	

 

 
 	
W









    
q 	


        t
zMetaConverter.meta_tensorT)r<  rS  rU  r   'Optional[_MetaTensorCallback[_TensorT]]r   c                  sZ  |d u r j }n|}t|tjr7|jjdks&|js&| r/|jd ur/|jj	r/  j
d7  _
tS   jd7  _ntj|rF  j
d7  _
tS |S d u rNd} jj||d|rjd us^J td fddd t *}|tjj  t }	|	d ur|tjj   |||}
W d    n1 sw   Y  t|tjju rd	|
_|
S )
Nr   r   Fr   Zdescribe_sourcec                     s    j jj dS )N)r   r   rS  )r1  r   r  r1   r   rS  Zt_descr1   r2   r   O  s   z(MetaConverter.__call__.<locals>.<lambda>r   T) rL  r0   ri   rj   r   r|   Zis_quantizedrd   rf   rX   r/  r  r.  Z	overridesZis_tensor_liker1  rl   r!   r  	ExitStackenter_context	_dispatchpythonZsuspend_functionalizationr    r   r   r   rs  r   r   r  )r   r+   rO  r<  rS  rU  r   rQ  Z
exit_stackstr   r1   r  r2   r    sX   

zMetaConverter.__call__r   )r-   r<   )r+   r5   r-   r  r  )r+   r5   r  r7   r-   rL   )r   r   r-   r   )r   r   r  r~   r-   rL   )r   r   r<  r=  r-   r~   )r+   rT   r-   r7   rH   )r+   r  r   rK  r-   r7   )r+   r7   r-   r7   )r+   r5   rO  rP  rQ  rR  rS  rT  rU  rV  r-   r7   )r+   rT   rO  rP  r<  r  rS  rT  rU  rV  r   r<   r-   r7   )r   r   r   r   r2  r6  r7  r9  r:  r;  rF  classmethodrJ  rL  rN  rs  r  r1   r1   r1   r2   r)    s>    







       Nr)  )r+   r,   r-   r.   )r+   r;   r-   r<   )r+   r4   r-   rA   )r+   r4   r-   r4   )rJ   r6   rK   r6   r-   rL   )rM   rQ   rR   r;   rS   rT   rO   r<   rP   r<   r-   rL   )r+   r,   r-   rn   )r\   rq   r-   r<   )ry   rz   r{   r,   r-   r6   )re   r~   r-   r~   )re   r~   r   r~   r-   rL   )r$  rT   r%  r  r-   rL   )r%  rT   r-   r  )d
__future__r   r  r  ru  rG  rC   r*  abcr   r   r   r   r   r   r	   r
   r   r   r   r   r   Ztyping_extensionsr   r   r   r   r   ri   Ztorch._C._autogradr   Ztorch._C._functorchr   r   r   r   r   r   r   r   r   r   r    Ztorch._loggingr!   Ztorch.utils._mode_utilsr"   Ztorch.utils._python_dispatchr#   Ztorch.utils.weakr$   r%   Ztorch._guardsr&   r/   r'   r(   ry  r)   r*   r3   r   ZDimListrj   r4   r6   r7   r9   r@   rG   rI   rM   rm   rp   rv   r`   rw   r}   r   r   r   r   r   r   r   rk   r   r   r   r   r   r  r  r5   r&  r(  r)  Ztorch._prims_commonZ_prims_commonr  r1   r1   r1   r2   <module>   s    04




	
:









  
 
"
         