o
    ,hT                    @  s  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Zd dl	m
Z
 d dlmZmZ d dlmZ d dlmZmZmZmZmZ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/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 erd dl7m8Z8 d dl!m9Z9 d dl:m;Z; d dl<m=Z=m>Z> d dl?m@Z@mAZA dtddZBeCZDeddejEZFedZGedejEdZHedejEd d!ZIdud$d%ZJdvd'd(ZKdwd)d*ZLdxd.d/ZMeN ZOd0eO_Pedyd2d3ZQd0d0d4dzd;d<ZRd{d>d?ZSd|dBdCZTd{dDdEZUd{dFdGZVd}dKdLZWd~dOdPZXddRdSZYedTeZZ[edUeZZ\edVeZZ]e]d a^G dWdX dXZ_ed dYG dZd[ d[Z`ed dYG d\d] d]eeH Zaed dYG d^d_ d_ead` Zbed dYG dadb dbeaeH eeH ZcG dcdd ddeeeI ZdG dedf dfed0dgZeG dhdi dieeeI Zfed dYG djd deeH ZgddndoZhddpdqZiG drds dseeH Zjd dlkmlZm dS )    )annotationsN)abstractmethod)AbstractContextManagercontextmanager)	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)enable_python_dispatcher)trace_structured)no_dispatch)is_traceable_wrapper_subclass)WeakIdKeyDictionary)	Generator)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*    r4   W/var/www/html/scripts/venv/lib/python3.10/site-packages/torch/_subclasses/meta_utils.py_is_fake_tensor>   s   
r6   _TensorLikeTMetaTensorDesc_T_TensorT)bound_TensorT_covT)r;   	covariant#Union[MetaTensorDesc, torch.Tensor]boolc                 C  s   z| j W S  ty   Y dS w )NF)is_leafRuntimeErrorr.   r4   r4   r5   safe_is_leafK   s
   rC   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gradrB   r4   r4   r5   	safe_gradS   s   
$rJ   c                 C  s   t | }|d us
J |S N)rJ   )r.   rI   r4   r4   r5   _expect_safe_gradY   s   rL   abNonec                 C  s   | |ksJ |  d| d S )Nz != r4   )rM   rN   r4   r4   r5   	assert_eq_   s   rP   FGenerator[None, None, None]c                  c  s0    t tdd} dt_z	d V  W | t_d S | t_w )Ndisable_inference_modeFT)getattrtlsrR   )priorr4   r4   r5   $disable_inference_mode_for_fake_propj   s   rV   skip_symbolic	skip_leaf Callable[[object, object], None]m1m2torch.TensorrX   rY   c                  s:   t |tjrt |n|}d	 fdd||S )
Nr[   r8   r\   r]   r0   rO   c                   s   | j |j  s | j|j  | j|j s  | j|j  | j|j ttdds6 | j|  n | jd  | j|   | j	|	   | j
d ut|d u | j
d ure| 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 )NrR   F)dtypeshaperequires_gradr@   	is_sparserS   rT   is_inferenceis_conjis_negrI   rJ   rL   layout	dense_dim
sparse_dimis_coalescedis_sparse_compressedstridestorage_offsetis_view_is_viewbase_base)r[   r\   rP   gorY   rX   r4   r5   rq      sB   
zassert_metadata_eq.<locals>.go)r[   r8   r\   r]   r0   rO   )r3   torchTensorMetaTensorDescriberdescribe_tensor)rP   r[   r\   rX   rY   r4   rp   r5   assert_metadata_eqt   s   


+rv   TypeGuard[torch.Tensor]c                 C  s   t | tjo| jtju S rK   )r3   rr   rs   re   
sparse_coorB   r4   r4   r5   is_sparse_coo   s   ry   re   torch.layoutc                 C  s   | t jt jt jt jhv S rK   )rr   
sparse_csr
sparse_csc
sparse_bsr
sparse_bsc)re   r4   r4   r5   is_sparse_compressed_layout   s   r   c                 C  s   t | tjo
t| jS rK   )r3   rr   rs   r   re   rB   r4   r4   r5   ri      s   ri   c                 C  s   t | pt| S rK   )ry   ri   rB   r4   r4   r5   is_sparse_any      r   tytype[_T]objc                 C  s&   t || sJ d|  dt| |S )Nz	expected z	 but got )r3   type)r   r   r4   r4   r5   _checked_cast   s   "r   rn   torch.UntypedStoragec                 C     | j S rK   real_storage)rn   r4   r4   r5   _get_real_storage   s   r   r   c                 C  s
   || _ d S rK   r   )rn   r   r4   r4   r5   _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 )%rt   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?   r0   rO   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   r4   r4   r5   __init__   s   

zMetaTensorDescriber.__init__r.   r]   r   c                 C  0   || j vr| j| j |< t| jd | _| j | S Nr   )r   r   r   r   r.   r4   r4   r5   get_tensor_id      

z!MetaTensorDescriber.get_tensor_idsr   r   c                 C  r   r   )r   r   r   r   r   r4   r4   r5   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 rK   as_jsonr   r4   rr   r4   r5   <lambda>      z6MetaTensorDescriber.describe_storage.<locals>.<lambda>metadata_fn)r   r   r   r   r   r   r#   add)r   r   r   r4   r   r5   r     s   z$MetaTensorDescriber.describe_storageTrecurser   r   r8   c              	     s|  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&t'd	d
}t(dCi d)d|d|rd
n* d|dj+d, dj-d|d|d|
d|d|d|d|d. d/ dt0tj1j2d|	d|d|v rZ| j34 nd d|d |d!jd"5 d#|d$|d%t6t&d&t7 d'jst8r9 nd d(jst8r: 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jAhv rjB d
d+nd d.|rjtj@tjAhv rjC d
d+nd d/|r!t8r!jD d
d+nd d0tE }d ur4j|dnd d1 rCtjjFGnd d2|d3|sO|rStHnd d4|r]tInd d5|rv rvjJd urvjjJdnd d6tjKjLMd7|d8|d9|d:|d;|d<|d=|d>jNrnd  r jOjPvrtQd? fd@dAdB jPR jO  S )DNr   r   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   )ru   rS   ).0attr)r   r.   r   r4   r5   
<dictcomp>q  s    z7MetaTensorDescriber.describe_tensor.<locals>.<dictcomp>)_tensor_symint_registryrR   Fr   storagerb   r@   r`   ndimr^   ra   	is_mkldnnis_functorch_wrappedr   r   r   rl   rc   rd   is_parameterr%   	is_nested
nested_intis_functionalre   devicer   rj   rk   dynamo_dynamic_indices_dynamo_dynamic_indicesrg   rf   rh   crow_indicesr   col_indicesccol_indicesrow_indicesvaluesrI   creation_meta	unwrappedlevelbdimrn   	fake_mode	view_funcattrsctxr   functorch_stackautograd_meta_fromcurrent_levelr   ru   c                     r   rK   r   r4   r   r4   r5   r     r   z5MetaTensorDescriber.describe_tensor.<locals>.<lambda>r   r4   )SrC   rm   ra   re   r   r%   r   r   r   r   r   rr   _is_functional_tensorr   r   untyped_storagerk   rj   ru   r   r   r   rA   _sync_from_functional_tensor_C$_functionalization_reapply_views_tlsr   
_functorchr   pyfunctorch#temporarily_clear_interpreter_stackhasattrr   $torch.nested._internal.nested_tensorr   ViewFuncfrom_tensorrS   rT   r8   r   rb   r`   dimr^   rc   rd   r3   nn	Parameternoder   r   listr   ri   rg   rf   rh   r{   r}   r   r   r|   r~   r   r   r   rJ   	_autograd_get_creation_metar    r   ro   _subclassesfake_tensormaybe_get_fake_moder   r   r   r#   r   ) r   r.   r   r   r@   rl   ra   re   r   is_traceable_wrapper_subclass_vr   r   is_batchedtensor_vis_legacy_batchedtensor_vis_gradtrackingtensor_vr   r   rk   rj   r   r   r   reapply_viewsmaybe_functorch_stackr   r   type_v	raw_attrsr   r   is_inference_mode_disabledrI   r4   )r   r   r.   r   r5   ru     s  







 !"#$%')*05:?DIMORUX[\]^_cdefhz#MetaTensorDescriber.describe_tensorNr   r?   r0   rO   )r.   r]   r0   r   )r   r   r0   r   )r   r   r   r?   r0   r   )r.   r]   r   r?   r   r?   r0   r8   )	__name__
__module____qualname____doc__r   r   r   r   ru   r4   r4   r4   r5   rt      s    


rt   )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   r0   dict[str, object]c                 C  s*   | j |t| jtr| jdS t| jdS )N)r   r  r   )r   r3   r   r  repr)r   r  r4   r4   r5   r     s   zMetaStorageDesc.as_jsonNr  r   r0   r  )r   r   r   __annotations__r   r4   r4   r4   r5   r     s
   
 r   c                   @  s.   e Zd Ze		ddd
dZedddZdS )r   Nr.   r:   new_basesymint_visitor_fnOptional[Callable[[int], int]]tensor_visitor_fn,Optional[Callable[[torch.Tensor], _TensorT]]r0   c                 C     d S rK   r4   r   r.   r	  r
  r  r4   r4   r5   apply  s   zViewFunc.applyr]   c                 C  s   t | rt S t| jS rK   )r6   _FakeTensorViewFunc_CustomViewFunc_view_func_unsaferB   r4   r4   r5   r     s   
zViewFunc.from_tensorNN)
r.   r:   r	  r:   r
  r  r  r  r0   r:   )r.   r]   r0   r   )r   r   r   r   r  staticmethodr   r4   r4   r4   r5   r     s    	r   c                   @  s    e Zd Ze		ddddZdS )r  Nr.   r]   r	  r
  r  r  .Optional[Callable[[torch.Tensor], FakeTensor]]r0   r*   c                 C  s   t jjj||||S rK   )rr   r   r   r*   r  r  r4   r4   r5   r    s   
z_FakeTensorViewFunc.applyr  )
r.   r]   r	  r]   r
  r  r  r  r0   r*   )r   r   r   r   r  r4   r4   r4   r5   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.   r]   r	  r
  r  r  r  r0   r:   c                 C  s   |  |||S rK   )r  r  r4   r4   r5   r  -  s   	z_CustomViewFunc.applyr  )
r.   r]   r	  r]   r
  r  r  r  r0   r:   )r   r   r   r  r   r  r4   r4   r4   r5   r  "  s   
 	r  c                   @     e Zd Zd
ddZd	S )_MetaTensorCallbackargCallable[[], torch.Tensor]r   Union[torch.device, str]r0   r<   c               C  r  rK   r4   )r   r  r   r4   r4   r5   __call__?  s   z_MetaTensorCallback.__call__N)r  r  r   r  r0   r<   r   r   r   r  r4   r4   r4   r5   r  >      r  c                   @  s   e Zd ZU ded< dS )_MetaTensorCallbackKwargsr  r   N)r   r   r   r  r4   r4   r4   r5   r   E  s   
 r   )totalc                   @  r  )_MetaTensorCallbackOptDevicer  r  kwargs!Unpack[_MetaTensorCallbackKwargs]r0   r<   c                K  r  rK   r4   )r   r  r#  r4   r4   r5   r  N  s   z%_MetaTensorCallbackOptDevice.__call__N)r  r  r#  r$  r0   r<   r  r4   r4   r4   r5   r"  M  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 )Xr8   r   r   r  r   torch.dtyper^   ztorch.devicer   tuple[int, ...]r   z	list[int]r   rz   re   Fr?   rb   r@   r`   ra   r   r   r   r   r   rl   r   NzOptional[int]r   r%   r   rc   rd   r   Optional[tuple[int, ...]]rj   r   rk   zOptional[MetaStorageDesc]r   rg   rf   zOptional[bool]rh   zOptional[MetaTensorDesc]r   r   r   r   r   r   r   rn   z#Optional[dict[str, MetaTensorDesc]]r   zOptional[CreationMeta]r   rI   >
   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   r0   r  c                   s:   d fdd  fdd	t D }|d
|i |S )Nkstrvr/   r0   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 r4   r4   )r   v1)jsonr*  r4   r5   
<listcomp>      z8MetaTensorDesc.as_json.<locals>.json.<locals>.<listcomp>r   c                 S  s   i | ]\}}||j qS r4   )r   )r   k1r-  r4   r4   r5   r     s    z8MetaTensorDesc.as_json.<locals>.json.<locals>.<dictcomp>)r8   r(  r  r3   rr   r   r^   re   SymInttupler   r   r   r   r+  dictitems)r*  r,  )r.  )r*  r5   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   )rS   namedefault)r   fieldr.  r   r4   r5   r     s    

z*MetaTensorDesc.as_json.<locals>.<dictcomp>r  )r*  r+  r,  r/   r0   r/   )dataclassesfieldsupdate)r   r  r   r4   r:  r5   r     s   zMetaTensorDesc.as_jsonc                 C  r   rK   )r   r   r4   r4   r5   r_     s   zMetaTensorDesc.shaper  )r0   r&  )6r   r   r   r  rr   stridedre   rb   r@   r`   ra   r   r   r   r   r   rl   r   r   r%   r   rc   rd   r   rj   rk   r   rg   rf   rh   r   r   r   r   r   r   r   rn   r   r   rI   r(  r   r   r   r   r   r   r   r   r   r   propertyr_   r4   r4   r4   r5   r8   W  sn   
 
$dstsrcr)  c                 C  s    t |tjur	d S | | d S rK   )r   rr   rs   copy_)rA  rB  r4   r4   r5   
_safe_copy  s   rD  c                 C  s   t | tjur	d S |  S rK   )r   rr   rs   clone)rB  r4   r4   r5   _safe_clone  s   rF  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?   r0   rO   c                C  sB   t  | _t  | _d| _d| _d | _d| _|| _t	|d| _
d S )Nr   r   )weakrefWeakValueDictionarystorage_memotensor_memohitmissdel_hookarg_cntr   rt   	describerr   r4   r4   r5   r     s   zMetaConverter.__init__c                 C  s   | j dko	| jdkS )Nr   )rL  rM  r>  r4   r4   r5   
successful"  s   zMetaConverter.successfulr.   r8   r)  c                 C     | j |jd S rK   rK  getr   r   r4   r4   r5   get_tensor_memo%  r   zMetaConverter.get_tensor_memor:   c                 C  s    | j |jd }|d usJ |S rK   rS  )r   r.   r   r4   r4   r5   _checked_get_tensor_memo(  s   z&MetaConverter._checked_get_tensor_memor,  c                 C     || j |j< d S rK   )rK  r   )r   r.   r,  r4   r4   r5   set_tensor_memo-  r   zMetaConverter.set_tensor_memor   r   r  c                 C  rR  rK   )rJ  rT  r   r   r4   r4   r5   get_storage_memo0  r   zMetaConverter.get_storage_memor   c                 C  rW  rK   )rJ  r   )r   r   r,  r4   r4   r5   set_storage_memo3  r   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r^   r   )rr   emptyr   uint8r4   r   r4   r5   r   ?  s    z,MetaConverter.meta_storage.<locals>.<lambda>)
rY  r   r   rr   no_gradr$   r   r   rE  rZ  )r   r   r[  memor_sr4   rb  r5   meta_storage6  s    
 zMetaConverter.meta_storager]   c                 C  s   t t|S rK   )typingcastr:   )clsr.   r4   r4   r5   _checked_cast_tensor_tL  s   z$MetaConverter._checked_cast_tensor_tNr  r   "Optional[Union[torch.device, str]]c                 C  s   |  | S rK   )rj  )ri  r.   r   r4   r4   r5   _identity_callableQ  s   z MetaConverter._identity_callablec                 C  s$   t jjdd}||}tt|S )Nz9Internal error: Tried to backward() through example inputr   )rr   r   
_functionsDelayedErrorrg  rh  r:   )ri  r.   errfnerrr4   r4   r5   _backward_errorY  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 rjd' 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|
}
nS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=r3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!|
_!nyjEj!j!krt$  ||}
W d    n	1 sw   Y  nVj!sJ t % tS  "|R|j-}W d    n	1 sw   Y  W d    n	1 sw   Y  j!|_!t$  ||}
W d    n	1 sw   Y  jTd usJ tjjUV|
jT W tjOtjjjN| ntjOtjjjN| w j}	jWsBjXsBj<sFjYrOtZW  d    S \
}j4rd
d@}
nc
fdAd)}
jrt H t 4 j8d usJ j9d usJ t|
sJ 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|
}
j[}|d usJ |j\j]vr)|
j3s|
9 kr)|
^ |kr)_||
`  jr(t|
sJ |
jd usJ ta|
` |
j`  njb|dB}t }ddClcmd}me} ||
}|d urI||}t   u | |
f||
 W d    n	1 shw   Y  jrt A t - t|
sJ |
jd usJ j9d usJ |
jftg|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  jhd urddDlmL} Ajh	|dE|
_htji|
jj tjk|
jl W d    n	1 sw   Y  jXo!jm k}tnto|
d+|dF ddGlFmp} j[d urG|j[j8dkrG|
` qd jrrNd+|
_sjtd urdt|
s[J |
jujvjtdH|
_wx|
 yS )PNr   r   )ConstantSource__meta_utils_unknown_tensorr   r.   r8   rB  torch._guards.Sourcerx  ?Optional[torch.fx.experimental.symbolic_shapes.SymbolicContext]r0   ,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 rK   #_maybe_specialize_sym_int_with_hint)r   szrr  r4   r5   	<genexpr>  
    
zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>c                 3  r  rK   r  )r   sdr  r4   r5   r    r  c                   s   g | ]}| j v qS r4   r6  )r   drB   r4   r5   r/    r0  zWMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<listcomp>)rx  )
rj   r   rr  r   rk   r3  r  -_create_symbolic_sizes_strides_storage_offsetranger   )r.   rB  rx  r   t_sizet_stridet_storage_offsetr  rB   r5    sym_sizes_strides_storage_offset  s.   	zCMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offsetinner_t	inner_srcr]   c                   s&    | ||\}}}t j||| jddS r]  rr   empty_stridedr^   )r  r  rx  inner_sizesinner_strides_inner_storage_offset)r  r4   r5   empty_create  s   
z/MetaConverter.meta_tensor.<locals>.empty_create
outer_sizer&  outer_striderv  Optional[torch._guards.Source]r:   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.   r8   r  r'  r  rx  r~  r[  &_MetaTensorCallbackOptDevice[_TensorT]rv  r}  r0   r:   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 )Nrz  )r   meta_tensorr5  r3   inner_contextsr   rr   fxexperimentalsymbolic_shapesr-   	functoolspartialr   r   rj   r   __tensor_unflatten__r   )r.   r  r  rx  r[  rv  inner_tensorsr   meta_tensor_desccurrent_contextcurrent_context_current_sourceinner_callbacknew_empty_tensor)r  r  _empty_create_subclassr   rr  r4   r5   r    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.   r8   r  r'  r  r'  rx  r~  r[  r  rv  r}  r0   r:   )
torch._dynamo.sourcer  %torch.fx.experimental.symbolic_shapesr  r   r   r   rj   r3   r_   )r.   r  r  rx  rv  sub)r[  r   rr  )r  r  r  r5   empty_create_subclass  s:   	
5

z8MetaConverter.meta_tensor.<locals>.empty_create_subclassrr  8Optional[torch.fx.experimental.symbolic_shapes.ShapeEnv]r[  ru  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   r  )
DimDynamicStatelessSymbolicContextr  ro   )dynamic_sizesconstraint_sizesr  tensor_sourceview_base_context)r  r  r  )r  r  r  r  r  r  rl   rn   DYNAMICr   r%   r   r5  r3   r+  )r.   rv  rr  r[  r  r  r  r  r  t_dynamic_sizesr  r   innert_symbolic_context)all_dynamic_symbolic_contextr4   r5   r  H  sB   


z?MetaConverter.meta_tensor.<locals>.all_dynamic_symbolic_contextrn   c              	     s  t   
|	\}}}|js7t| s7  | |||W  d    W  d    S 1 s2w   Y  ddlm  ddlmm} d fdd}i |jr|j	d us[J |j
d usbJ |||d	}| \}	}
|	D ]}t|||j	| j< qqfd fdd}|jd usJ |j|| ||}t|| | t|| | t|| | |W  d    S 1 sw   Y  d S )Nr   )EphemeralSource)r  sym_eqr   r  r0   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 rK   )STATIC)r   xr  r4   r5   r    r  z_MetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fn.<locals>.<genexpr>r
  )positive)hintrv  )r  r  r3   allr  create_symbolcreate_symintnode)r   all_static_sizes
sym_sourcesymbol)r  r  rr  rx  r  r5   r
    s   		zLMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fnr  r  	visited_tr]   rr  r  r[  r  c                   s`   | d u rd S j | }|d }|d ur|S j | } d}||||||||S )Nr  )rP  r   rT  ru   r  )r  rr  r[  
visited_idfake_visited_tvisited_desctemp_source)r  r  real_to_fake_mappingr   r4   r5   r    s"   
zLMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.tensor_visitor_fn)r   r  r0   r  )r  r]   rr  r  r[  r  r0   r]   )r"   r%   rj  
as_stridedr  r  r  r  r  r   r   r   rS   r   r   r  rr   _checkr   rj   rk   )rn   r.   rr  sizesstridesrk   r  r
  fake_tr   _r   r  )r  r[  r  maybe_suppressr   rv  r  rx  )r  r  r  rr  r5   view_from_base  sR   
+ $z1MetaConverter.meta_tensor.<locals>.view_from_basec                     s$   t jjj j j j jt jddS )Nr^  )r^   re   r   )	rr   opsaten_sparse_coo_tensor_with_dimsrg   rf   r   r^   rx   r4   rB   r4   r5   r   0  s    z+MetaConverter.meta_tensor.<locals>.<lambda>z)the callback you passed in doesn't detachT   r4   c                
     s&   t jjjdjj jjddS )Nr   r^  )re   r^   r   )rr   r  r  #_sparse_compressed_tensor_with_dimsrf   r_   re   r^   r4   )	blocksizeindex_dtyper.   r4   r5   r   c  s    )unimplementedz;strided nested tensors are not supported by meta conversionc                        t j jddS r]  r  r4   r  r  r.   r4   r5   r     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]  r  r4   r  r4   r5   r         zDMetaConverter.meta_tensor.<locals>._to_fake_tensor.<locals>.<lambda>r_  )"r   r   r   r   rr   r   r   %temporarily_restore_interpreter_stackr   rj  r   r   r   _DisableFuncTorch_wrap_for_gradr@   r`   rC   rq  r   r   r  r   rj   r   r   rc  r$   r  r^   r   real_tensorr   rD  )r.   ftlvlr   r   disable_functorchr@   )GRAD_TENSOR_SENTINEL_VALUE_to_fake_tensorr[  r   rr  rv  rx  r  r5   r    s   


FF-

+
	*			z2MetaConverter.meta_tensor.<locals>._to_fake_tensorr   )r  ro   complex_dtyper%  
real_dtyper?   c                 S  s   t | ot | |kS rK   )utilsis_complex_dtypecorresponding_real_dtype)r  r  r4   r4   r5   	is_c_of_r.  s
   
z,MetaConverter.meta_tensor.<locals>.is_c_of_rFr  c                     r  r]  r  r4   r  r4   r5   r     r  )r[  )in_kernel_invocation_managerr   r  rI   rW   )guard_or_false)nt_tensor_id)r.   r8   rB  r}  rx  r~  r0   r  )r  r8   r  r}  rx  r~  r0   r]   )r.   r8   r  r&  r  r&  rx  r~  rv  r  r0   r:   )
r.   r8   rv  r}  rr  r  r[  ru  r0   r  )rn   r:   r.   r8   rr  r  r0   r:   r.   r8   r0   r:   )r  r%  r  r%  r0   r?   )zr  r  r   r  r{  lenrK  rr   r   _dispatch_tls_local_exclude_sethasDispatchKeyPythonrO  
contextlibnullcontextsuppress_guardsrU  inference_moderb   ra   r@   r   r   rc  r$   r6   rF  r  rC   _coalesced_r?   rh   r`   rj  rE  enable_gradr   re   r}   r~   rg   rf   r   r   r_   r{   r   r^   r   rq  r   r%   torch._dynamo.excr  r   r   rj   r  rD  r   rl   r   r   r   r  _to_functional_tensor_mirror_autograd_meta_tor   rn   r  r  r3   r  _dynamorv  r  &_dispatch_tls_is_dispatch_key_excludedADInplaceOrView'_dispatch_tls_set_dispatch_key_excludedview_as_realview_as_complexviewr"   r   r   _set_creation_metar   r   r   NotImplementedr   r   rJ  rk   rZ  r   r   rf  r2   r  r   set_r   rI   	_set_conjrc   _set_negrd   r   rv   rP   r  resize_r   	_is_paramr   r   create_symbolic_nested_intnested_int_memorX  rV  )r   r.   rr  rt  rv  rx  r{  r  r  r@   r   	batch_dimr  _storage_offsetr   base_symbolic_contextr  rn   r  old_excludemidrk   r   re  maybe_fake_mgrr  r   mb_fake_moder  rY   r  r4   )r  r  r  r  r[  r  r  r  r   rr  r  rv  r  r  rx  r.   r5   r  h  s  
+mT 

 

 
 	
W





 


    
q 	


        t
zMetaConverter.meta_tensorT)r[  rv  rx  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   describe_sourcec                     s    j jj dS )N)r  r   rv  )rP  r   r7  r4   r   rv  t_descr4   r5   r   n  s   z(MetaConverter.__call__.<locals>.<lambda>r   T) rl  r3   rr   rs   r   r   is_quantizedrm   ro   ra   rM  r  rL  	overridesis_tensor_likerP  ru   r#   r  	ExitStackenter_context	_dispatchpythonsuspend_functionalizationr!   r   r   r   r  r   r   r  )r   r.   rr  r[  rv  rx  r   rt  
exit_stackstr   r4   r!  r5   r  2  sX   

zMetaConverter.__call__r   )r0   r?   )r.   r8   r0   r)  r  )r.   r8   r,  r:   r0   rO   )r   r   r0   r  )r   r   r,  r   r0   rO   )r   r   r[  r\  r0   r   )r.   r]   r0   r:   rK   )r.   r  r   rk  r0   r:   )r.   r:   r0   r:   )r.   r8   rr  rs  rt  ru  rv  rw  rx  ry  r0   r:   )r.   r]   rr  rs  r[  r  rv  rw  rx  ry  r   r?   r0   r:   )r   r   r   r   rQ  rU  rV  rX  rY  rZ  rf  classmethodrj  rl  rq  r  r  r4   r4   r4   r5   rG    s>    







       TrG  )r.   r/   r0   r1   )r.   r>   r0   r?   )r.   r7   r0   rD   )r.   r7   r0   r7   )rM   r9   rN   r9   r0   rO   )r0   rQ   )rP   rZ   r[   r>   r\   r]   rX   r?   rY   r?   r0   rO   )r.   r/   r0   rw   )re   rz   r0   r?   )r   r   r   r/   r0   r9   )rn   r   r0   r   )rn   r   r   r   r0   rO   )rA  r]   rB  r)  r0   rO   )rB  r]   r0   r)  )n
__future__r   r  r;  r  	threadingrg  rF   rH  abcr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   typing_extensionsr   r   r   r   r   rr   torch._C._autogradr   torch._C._functorchr   r   r   r   r   r   r   r   r   r    r!   torch._dispatch.pythonr"   torch._loggingr#   torch.utils._mode_utilsr$   torch.utils._python_dispatchr%   torch.utils.weakr&   collections.abcr'   r(   torch._guardsr)   r2   r*   r+   r  r,   r-   r6   r   DimListrs   r7   r9   r:   r<   rC   rJ   rL   rP   localrT   rR   rV   rv   ry   r   ri   r   r   r   r   r  r   r   r   r   rt   r   r   r  r  r  r   r"  r8   rD  rF  rG  torch._prims_common_prims_commonr  r4   r4   r4   r5   <module>   s    04





=



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