o
    "i"                    @  s   U d dl m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	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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(m)Z) d dl*m+Z+ erd dlm,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 eZ4dd Z5dd Z6dd Z7dddd7ddZ8dd Z9d d! Z:d"d# Z;d$d% Z<e=Z>d&e?d'< e=Z@d&e?d(< d aAG d)d* d*ZBed+d,G d-d. d.ZCed+d,G d/d0 d0ZDd1d2 ZEd3d4 ZFG d5d6 d6ZGd dlHmIZJ dS )8    )annotationsN)	dataclass)AnyCallableClassVarContextManagerDictListOptionalTupleTypeTYPE_CHECKINGUnion)	TypeAlias)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)FakeTensorMode)ShapeEnvSymbolicContextc                 C  s   z| j W S  ty   Y dS w )NF)is_leafRuntimeErrort r)   Z/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/torch/_subclasses/meta_utils.pysafe_is_leaf<   s
   r+   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'   r)   r)   r*   	safe_gradD   s   
$r1   c                 C  s   | |ksJ |  d| d S )Nz != r)   )abr)   r)   r*   	assert_eqJ   s   r4   Fskip_symbolic	skip_leafm1#Union[MetaTensorDesc, torch.Tensor]m2torch.Tensorc                  s4   t |tjrt |} fdd||S )Nc                   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ru | j
|
   | j|   | j|  d S s | j|   | j|   | j|  | jr| j|j d S d S N)dtypeshaperequires_gradr%   	is_sparseis_inferenceis_conjis_negr0   r1   	dense_dim
sparse_dimis_coalescedstridestorage_offsetis_view_is_viewbase_base)r8   r:   r4   gor7   r6   r)   r*   rN   Y   s0   
zassert_metadata_eq.<locals>.go)
isinstancetorchTensorMetaTensorDescriberdescribe_tensor)r4   r8   r:   r6   r7   r)   rM   r*   assert_metadata_eqN   s   
rT   c                 C  s   t | tjo| jtju S r<   )rO   rP   rQ   layout
sparse_coor'   r)   r)   r*   is_sparse_coo{   s   rW   c                 C  s   | t jt jt jt jhv S r<   )rP   
sparse_csr
sparse_csc
sparse_bsr
sparse_bsc)rU   r)   r)   r*   is_sparse_compressed_layout   s   r\   c                 C  s   t | tjo
t| jS r<   )rO   rP   rQ   r\   rU   r'   r)   r)   r*   is_sparse_compressed   s   r]   c                 C  s   t | pt| S r<   )rW   r]   r'   r)   r)   r*   is_sparse_any      r^   r   MetaStorageIdMetaTensorIdc                   @  sT   e Zd ZdZ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 )rR   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_datac                C  sD   t | _t d7 a d| _d| _t | _t | _|| _t | _	t | _
d S )N   r   )DESCRIBER_NEXT_IDidnext_tensor_idnext_storage_idr   lookup_tensorlookup_storagerc   settraced_tensorstraced_storagesselfrc   r)   r)   r*   __init__   s   zMetaTensorDescriber.__init__r(   r;   c                 C  .   || j vr| j| j |< |  jd7  _| j | S Nrd   )ri   rg   ro   r(   r)   r)   r*   get_tensor_id      

z!MetaTensorDescriber.get_tensor_idstorch.UntypedStoragec                 C  rq   rr   )rj   rh   ro   rv   r)   r)   r*   get_storage_id   ru   z"MetaTensorDescriber.get_storage_idtracer{   boolc                  sZ   t || jr|nd d |r+ jjvr+td fddd j j  S )N)rf   sizedatadescribe_storagec                          jS r<   as_jsonrf   r)   rro   r)   r*   <lambda>       z6MetaTensorDescriber.describe_storage.<locals>.<lambda>metadata_fn)MetaStorageDescry   r}   rc   rf   rm   r   add)ro   rv   r{   r)   r   r*   r      s   z$MetaTensorDescriber.describe_storageTrecurser{   r   c             	     s<  t } }j}j}j}t}	t}
j}t}t	}t
}|p+|}t}d }d}|sRt|sR|r?|	rR|sR|
sR|sRj d} }d }|sbt|sb|r^|	rb }d }d }d }|sl|rv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}t"d@i d#d	|d
$ d|dj%d& dj'd|d|d|
d|d|d|d|d( d) dt*tj+j,d|	d|d|d|djd- d|d |d!t.t/d"t0 d#jsdt1rh2 nd d$jstt1rx3 nd d%jr4 nd d&|rjtj5tj6hv rj7 d'd(nd d)|rjtj5tj6hv rj8 d'd(nd d*|rшjtj9tj:hv rшj; d'd(nd d+|rjtj9tj:hv rj< d'd(nd d,|r t1r j= d'd(nd d-t>d urjt>dnd d. r"tjj?@nd d/|d0|s.|r2tAnd d1|r<tBnd d2|rU rUjCd urUjjCdnd d3tjDjEFd4jGd5|d6|d7|d8|d9|d:|d;jHr|nd  r jIjJvrtKd< fd=d>d? jJL jI  S )ANr   rz   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 )rz   )rS   getattr).0attr)ro   r(   r{   r)   r*   
<dictcomp>(  s    z7MetaTensorDescriber.describe_tensor.<locals>.<dictcomp>rf   storagerA   r%   r?   ndimr=   r@   	is_mkldnnis_functorch_wrappedr   r   r   rI   rB   rC   is_parameterr   	is_nestedis_functionalrU   devicer}   rG   rH   dynamo_dynamic_indices_dynamo_dynamic_indicesrE   rD   rF   crow_indicesFr   col_indicesccol_indicesrow_indicesvaluesr0   creation_meta	unwrappedlevelbdimrK   	fake_mode	view_funcattrsctxtypefunctorch_stackautograd_meta_fromcurrent_levelr~   rS   c                     r   r<   r   r)   r   r)   r*   r     r   z5MetaTensorDescriber.describe_tensor.<locals>.<lambda>r   r)   )Mr+   rJ   r@   rU   r   r   r   r   r   r   r   rP   _is_functional_tensorr\   r   untyped_storagerH   rG   rS   r   r   r   r&   _sync_from_functional_tensor_C$_functionalization_reapply_views_tlsr   
_functorchr   pyfunctorch#temporarily_clear_interpreter_stackhasattrr   MetaTensorDescrt   rA   r?   dimr=   rB   rC   rO   nn	Parameterr}   listr   rk   r]   rE   rD   rF   rX   rZ   r   r   rY   r[   r   r   r   r1   	_autograd_get_creation_metar   r   rL   _subclassesfake_tensormaybe_get_fake_mode_view_func_unsaferc   rf   rl   r   r   )ro   r(   r   r{   r%   rI   r@   rU   r   is_traceable_wrapper_subclass_vr   r   is_batchedtensor_vis_legacy_batchedtensor_vis_gradtrackingtensor_vis_functorch_batched_or_gradr   r   rH   rG   r   r   r   reapply_viewsmaybe_functorch_stackr   r   type_v	raw_attrsr)   )r   ro   r(   r{   r*   rS      s  





 "$%,
1
6
;
>ADFHJLNOPQRVWXY[z#MetaTensorDescriber.describe_tensorN)r(   r;   )rv   rw   )rv   rw   r{   r|   )r(   r;   r   r|   r{   r|   )	__name__
__module____qualname____doc__rp   rt   ry   r   rS   r)   r)   r)   r*   rR      s    


rR   T)frozenc                   @  s.   e Zd ZU ded< ded< ded< dd Zd	S )
r   r`   rf   intr}   zOptional[torch.UntypedStorage]r~   c                 C  s*   | j |t| jtr| jdS t| jdS )N)rf   describer_idr}   )rf   rO   r}   r   repr)ro   r   r)   r)   r*   r     s   zMetaStorageDesc.as_jsonN)r   r   r   __annotations__r   r)   r)   r)   r*   r     s
   
 r   c                   @  sh  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%d6ed7< d!Z&d8ed9< d!Z'd-ed:< g d;Z(d<ed=< d!Z)d>ed?< d!Z*d@edA< d!Z+dBedC< d!Z,dDedE< d!Z-d(edF< d!Z.d(edG< d!Z/dHedI< d!Z0dJedK< d!Z1dJedL< dMdN Z2e3dOdP Z4d!S )Qr   ra   rf   r   r   ztorch.dtyper=   ztorch.devicer   zTuple[int, ...]r}   z	List[int]r   ztorch.layoutrU   Fr|   rA   r%   r?   r@   r   r   r   r   r   rI   r   r   r   rB   rC   r   NzOptional[Tuple[int, ...]]rG   r   rH   zOptional[MetaStorageDesc]r   zOptional[int]rE   rD   zOptional[bool]rF   zOptional[MetaTensorDesc]r   r   r   r   r   r   r   rK   z#Optional[Dict[str, MetaTensorDesc]]r   zOptional[CreationMeta]r   r0   )	r   r   r   r   r   r   r   r   r~   zClassVar[List[str]]_UNSERIALIZABLEzOptional[object]r   zOptional[Type]r   zOptional[FakeTensorMode]r   znOptional[Callable[[torch.Tensor, Callable[[int], int], Callable[[torch.Tensor], torch.Tensor]], torch.Tensor]]r   r   r   zOptional[List[CInterpreter]]r   zOptional[torch.Tensor]r   r~   c                   s8    fdd  fddt D }|d|i |S )Nc                   s    dv rd S  t 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r; fdd|D S t|ttfrE|jS t|trNt|S  dkr`t|tr`dd | D S |S )N)r~   r   c                   s   g | ]} |qS r)   r)   )r   v1)jsonkr)   r*   
<listcomp>!      z8MetaTensorDesc.as_json.<locals>.json.<locals>.<listcomp>r   c                 S  s   i | ]\}}||j qS r)   )rf   )r   k1r   r)   r)   r*   r   '  s    z8MetaTensorDesc.as_json.<locals>.json.<locals>.<dictcomp>)rk   r   r   r   rO   rP   r   r=   rU   SymInttupler   r   rf   r   strdictitems)r   v)r   )r   r*   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   ro   r)   r*   r   *  s    

z*MetaTensorDesc.as_json.<locals>.<dictcomp>r   )dataclassesfieldsupdate)ro   r   r   r)   r   r*   r     s   zMetaTensorDesc.as_jsonc                 C  s   | j S r<   )r}   ro   r)   r)   r*   r>   8  s   zMetaTensorDesc.shape)5r   r   r   r   rP   stridedrU   rA   r%   r?   r@   r   r   r   r   r   rI   r   r   r   rB   rC   r   rG   rH   r   rE   rD   rF   r   r   r   r   r   r   r   rK   r   r   r0   r   r   r   r   r   r   r   r   r   r~   r   propertyr>   r)   r)   r)   r*   r     sn   
 

$r   c                 C  s    t |tjur	d S | | d S r<   )r   rP   rQ   copy_)dstsrcr)   r)   r*   
_safe_copyI  s   r   c                 C  s   t | tjur	d S |  S r<   )r   rP   rQ   clone)r   r)   r)   r*   _safe_cloneO  s   r   c                   @  s   e Zd Zddd'ddZdd Zd(ddZd(ddZd)ddZd)ddZd)ddZ	ddd ddfd*d d!Z
	d+d"d ddd#d$d%d&ZdS ),MetaConverterFrb   rc   r|   c                C  sB   t  | _t  | _d| _d| _d | _d| _|| _t	|d| _
d S )Nr   rb   )weakrefWeakValueDictionarystorage_memotensor_memohitmissdel_hookarg_cntrc   rR   	describerrn   r)   r)   r*   rp   ]  s   

zMetaConverter.__init__c                 C  s   | j dko	| jdkS )Nr   )r   r   r   r)   r)   r*   
successfuln  s   zMetaConverter.successfulr(   r   c                 C     | j |jd S r<   )r   getrf   rs   r)   r)   r*   get_tensor_memoq  r_   zMetaConverter.get_tensor_memoc                 C     || j |j< d S r<   )r   rf   )ro   r(   r   r)   r)   r*   set_tensor_memot  r_   zMetaConverter.set_tensor_memorv   r   c                 C  r   r<   )r   r  rf   rx   r)   r)   r*   get_storage_memow  r_   zMetaConverter.get_storage_memoc                 C  r  r<   )r   rf   )ro   rv   r   r)   r)   r*   set_storage_memoz  r_   zMetaConverter.set_storage_memoc              	     s   |   d u rP| fdd }| jrHt ( t   jd us$J  j |_W d    n1 s4w   Y  W d    n1 sCw   Y  | 	 | |S |   S )Nc                     s   t j jt jddS Nmetar=   r   )rP   emptyr}   uint8r)   rv   r)   r*   r     s    z,MetaConverter.meta_storage.<locals>.<lambda>)
r  r   rc   rP   no_gradr   r~   r   real_storager  )ro   rv   callbackr_sr)   r  r*   meta_storage}  s    
 
zMetaConverter.meta_storageNc                 C     |  S r<   r)   r'   r)   r)   r*   r         zMetaConverter.<lambda>	shape_envOptional[ShapeEnv]sourceOptional[Source]symbolic_contextOptional[SymbolicContext]c                   s  d u rddl m} |dt	j tj tjjj	r!J 	j
}	 j
d7  _
tj
d ur5
jfd5
fd	d
fd6fddfd7	fddd7fdd
fd8	fdd}	d u rd tj/ jrj}	fdd}
	jrjd usJ t ! t  tj|
_W d    n1 sw   Y  W d    n1 sw   Y  t|
sJ d|
j jrd|
_jr|	s|
 }
t  |
j W d    n1 sw   Y  n~tj rȈj}	j tj!tj"hv r;j#d usJ j$d usJ j%d us%J j&j# j$ }j%j'|d |d  ndj tj(tj!hv rTj)d usOJ j)j*nj+d us\J j+j*fdd}
	jrjd usvJ t " t  tj|
_W d    n	1 sw   Y  W d    n	1 sw   Y  t|
sJ djrd|
_jr|	stjj,-dd|
}
nj.r܈j/sddl0m1} |d  nj2rrj}	\}fd!d}
	jrOt I t 5 j3d us
J j4d usJ tj5j3j4j*j6d"|
_jd us(J t7|
jj W d    n	1 s:w   Y  W d    n	1 sJw   Y  t|
sXJ djr_d|
_jrp|	sptjj,-dd|
}
nj8rj9rddl0m1} |d# d7 	
fd$d%}
nj:rɈj6j;d&vrɈj<d usJ j8rJ 	j=j<
d'}t>|}
t?j@|
 nj9rjAd usJ d }
rd urdd(lBmC} tD|sJ jEd urjE}	j=jA
tjFjGHd)|d*}d+d, }tjItjjjJ}tjKtjjjJd- z|j*j*kr'n"||j*j*r5tL|}n|j*|j*rCtM|}n|Nj*}jrlt  ||}
W d    n	1 sbw   Y  j|
_nbjAjjkrt  ||}
W d    n	1 sw   Y  n?jsJ t  |N|j'}W d    n	1 sw   Y  j|_t  ||}
W d    n	1 sw   Y  jOd usJ tjjPQ|
jO W tjKtjjjJ| ntjKtjjjJ| w j}	jRsjSsj8s
jTrtUW  d    S \}j/r(d.}
n\fd/d}
	jrt A t - j3d usGJ j4d usOJ tj5j3j4j*j6d"|
_t7|
jj W d    n	1 sow   Y  W d    n	1 sw   Y  t|
sJ djrj|
_|	stjj,-dd|
}
jV}|d usJ |jW	jXvr|
j.s|
4 kr|
Y |krڈ	Z||
[  	jr|
j[ |
[ _\n	j]|d0}t }dd1l^m_}m`} ||
}|d ur||}t q  ] | |
a|| W d    n	1 sw   Y  	jrXt ) t  |
ja|j\jYj3j4 W d    n	1 sCw   Y  W d    n	1 sSw   Y  W d    n	1 scw   Y  W d    n	1 ssw   Y  jbd urdd2l mH} 	j=jb
|d3d*|
_btjc|
jd tje|
jf W d    n	1 sw   Y  jSojg k}thti|
d|d4 jVd urوjVj3dkr|
[ jd jkrd|
_l	m|
 	S )9Nr   )ConstantSource__meta_utils_unknown_tensorrd   r(   r   return,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 r<   #_maybe_specialize_sym_int_with_hint)r   szr  r)   r*   	<genexpr>  
    
zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>c                 3  r  r<   r  )r   sdr"  r)   r*   r#    r$  c                   s   g | ]}| j v qS r)   r   )r   dr'   r)   r*   r     r   zWMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<listcomp>r  )
rG   r   r  r}   rH   r   r   -_create_symbolic_sizes_strides_storage_offsetranger   )r(   r   r  r   t_sizet_stridet_storage_offsetr"  r'   r*    sym_sizes_strides_storage_offset  s.   	zCMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offsetinner_tc                   s&    | ||\}}}t j||| jddS r  rP   empty_stridedr=   )r.  	inner_srcr  inner_sizesinner_stridesinner_storage_offset)r-  r)   r*   empty_create  s   
z/MetaConverter.meta_tensor.<locals>.empty_createc           	        s  ddl m  ddlm} | jd usJ | jd usJ d u s%t|s%J |d ur+|n| j}|d ur4|n| j} fddfdd| j	 D }| j
|| j||}|j|kslJ d| j d	| d
|j | |ksJ d| j d| d
|  |S )Nr   
AttrSource)SubclassSymbolicContextc              	     s    fdd}j r\t @ 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 sWw   Y  |S )Nc                     s*    d u rd dS j  dS )Nr'  )inner_contextsr)   )r7  r   r5  r.  r  r  r)   r*   r   !  s    z]MetaConverter.meta_tensor.<locals>.empty_create_subclass.<locals>.transform.<locals>.<lambda>r	  )rc   rP   r  r   r0  r}   rG   r=   r   real_tensorr~   r   )r   r.  r   )r7  r  r5  ro   r  r  )r   r.  r*   	transform  s&   (			zKMetaConverter.meta_tensor.<locals>.empty_create_subclass.<locals>.transformc                   s   i | ]
\}}| ||qS r)   r)   )r   r   r.  )r;  r)   r*   r   7  s    zLMetaConverter.meta_tensor.<locals>.empty_create_subclass.<locals>.<dictcomp>zExpected return value from z.__tensor_unflatten__() to have shape equal to z, but got: z/__tensor_unflatten__() to have stride equal to )torch._dynamo.sourcer7  %torch.fx.experimental.symbolic_shapesr8  r   r   rO   r}   rG   r   __tensor_unflatten__r   r>   )	r(   
outer_sizeouter_strider  r  r  r8  transformed_tensors_dictsub)r5  ro   )r7  r  r  r  r;  r*   empty_create_subclass  s>   




z8MetaConverter.meta_tensor.<locals>.empty_create_subclassc                   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   r6  )
DimDynamicStatelessSymbolicContextr8  rL   )dynamic_sizesconstraint_sizesr9  tensor_sourceview_base_context)rF  rG  rI  )r<  r7  r=  rD  rE  r8  rI   rK   DYNAMICr   r   r   r   rO   r   )r(   r  r  r  r7  rD  rE  r8  rI  t_dynamic_sizesr9  r   innert_symbolic_context)all_dynamic_symbolic_contextr)   r*   rN  Q  s>   


z?MetaConverter.meta_tensor.<locals>.all_dynamic_symbolic_contextrK   r;   c                   sV  	||\}}}|j s)t | s)  | |||W  d    S 1 s$w   Y  ddlm  ddlmm}  
fdd}i |j rp|jd usLJ |jd usSJ |||d}	|		 \}
}|
D ]}t
|	||j| j< qbfd fd	d
}|jd usJ || ||}	t||	 | t||	 | t||	 | |	S )Nr   )EphemeralSource)rE  sym_eqc                   sj   ddl m  d uotot fddjD }|s!d u r#| S d}| |}j|| |dS )Nr   rD  c                 3  s    | ]}| j u V  qd S r<   )STATIC)r   xrQ  r)   r*   r#    s    

z_MetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fn.<locals>.<genexpr>symint_visitor_fn)hintr  )r=  rD  rO   allrF  create_symbolcreate_symintnode)rv   all_static_sizes
sym_sourcesymbol)rO  rE  r  r  rQ  r*   rT    s   	zLMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fnr?  r@  	visited_tr;   c              
     sb   | d u rd S j | }|d }|d ur|S j | } d}j||||||||dS )Ntensor_visitor_fnr  r  )r   rt   r  rS   meta_tensor)r]  r  r  
visited_idfake_visited_tvisited_desctemp_source)rO  rN  real_to_fake_mappingro   r)   r*   r^    s"   zLMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.tensor_visitor_fn)r]  r;   )r   
as_stridedr<  rO  r=  rE  rP  r   r   r   r   rf   r   rP   _checkr}   rG   rH   )rK   r(   r  r  sizesstridesrH   rP  rT  fake_tr   _r   r^  )rN  r  rC  maybe_suppressro   r-  r  )rO  rE  re  r  r*   view_from_base  s@   
 )z1MetaConverter.meta_tensor.<locals>.view_from_basec                     s$   t jjj j j j jt jddS )Nr  )r=   rU   r   )	rP   opsaten_sparse_coo_tensor_with_dimsrE   rD   r}   r=   rV   r)   r'   r)   r*   r   #  s    z+MetaConverter.meta_tensor.<locals>.<lambda>z)the callback you passed in doesn't detachT   r)   c                
     s&   t jjjdjj jjddS )Nr   r  )rU   r=   r   )rP   ro  rp  #_sparse_compressed_tensor_with_dimsrD   r>   rU   r=   r)   )	blocksizeindex_dtyper(   r)   r*   r   U  s    9Internal error: Tried to backward() through example input)unimplementedz;strided nested tensors are not supported by meta conversionc                        t j jddS r  r/  r)   rh  ri  r(   r)   r*   r   ~  s    
r	  z;view functorch tensors are not supported by meta conversionc              	     s  j rD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sNJ jd usUJ tjj}|  j}W d    n1 slw   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|stjjdd|}|S jr߈jd usJ jd usJ jj	d}t|j}|S jd usJ j j fdd}jrIt 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 sDw   Y  |S )NTrv  rd   r  r  r  r  c                     rx  r  r/  r)   ry  r)   r*   r         zDMetaConverter.meta_tensor.<locals>._to_fake_tensor.<locals>.<lambda>r	  )"r   r   r   r   rP   r   r   %temporarily_restore_interpreter_stackr   r   r   r   _DisableFuncTorch_wrap_for_gradr%   r?   r+   
_functionsDelayedErrorr   r   r`  r   rG   r}   rc   r  r   r0  r=   r   r:  r~   r   )r(   ftlvlr   r   disable_functorchr%   )GRAD_TENSOR_SENTINEL_VALUE_to_fake_tensorr  ro   r  r  r  ry  r*   r    s   

DD/
-*			z2MetaConverter.meta_tensor.<locals>._to_fake_tensorr   rz  )rE  rL   r_  c                 S  s   t | ot | |kS r<   )utilsis_complex_dtypecorresponding_real_dtype)complex_dtype
real_dtyper)   r)   r*   	is_c_of_r  s
   
z,MetaConverter.meta_tensor.<locals>.is_c_of_rFr\  c                     rx  r  r/  r)   ry  r)   r*   r     r{  )r  )in_kernel_invocation_managerr   r6  r0   r5   )r(   r   r  r  )r.  r   r(   r   )rK   r;   r(   r   )nr<  r  lenr   rP   r   _dispatch_tls_local_exclude_sethasDispatchKeyPythonr   
contextlibnullcontextsuppress_guardsr  inference_moderA   r@   r%   rc   r~   r  r   r   r:  r+   _coalesced_rF   r?   r   enable_gradr\   rU   rZ   r[   rE   rD   r   r   r>   rX   r   r=   r   r  r  r   r   torch._dynamo.excrw  r   r}   rG   r0  r   r   r   rI   r   r   r   r`  _to_functional_tensor_mirror_autograd_meta_tor   rK   r=  rE  rO   rI  _dynamor  r7  &_dispatch_tls_is_dispatch_key_excludedADInplaceOrView'_dispatch_tls_set_dispatch_key_excludedview_as_realview_as_complexviewr   r   _set_creation_metar   r   r   NotImplementedr   rf   r   rH   r  r   r  r  torch._subclasses.fake_tensorr  r   set_r0   	_set_conjrB   _set_negrC   r   rT   r4   resize_r   	_is_paramr  )ro   r(   r  r  r  r  r  r   rm  r%   r   	batch_dimrw  _storage_offsetr   base_symbolic_contextrE  rK   r  old_excludemidrH   rv   r  maybe_fake_mgrr  r   mb_fake_moder7  r7   r)   )r  r  rN  rt  r  r5  rC  ru  rl  ro   r  rh  r  ri  r-  r  r(   r*   r`    sf  
#SI

 


 
 T








    
g 

        e
zMetaConverter.meta_tensorc                 C  r  r<   r)   r'   r)   r)   r*   r     r  T)r  r  r  r{   c          
        sD  t |tjs
t|r1|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|r@  j
d7  _
tS |S d u rHd} jj||d|r^td fddd t +}|tjj  t }|d ur||tjj   j|||d	}	W d    n1 sw   Y  t|tjju rd
|	_|	S )Nr   rd   Frz   describe_sourcec                     s    j jj dS )N)r   rf   r  )r   rf   r   r)   ro   r  t_descr)   r*   r   C  s   z(MetaConverter.__call__.<locals>.<lambda>r   rz  T) rO   rP   rQ   r   r   r   is_quantizedrJ   rL   r@   r   r  r   	overridesis_tensor_liker   rS   r   r  	ExitStackenter_context	_dispatchpythonsuspend_functionalizationr   r   r   r   r`  r   r   r  )
ro   r(   r  r  r  r  r{   
exit_stackstr   r)   r  r*   __call__  sP   

zMetaConverter.__call__)rc   r|   r  )rv   r   )r(   r   r  r  r  r  r  r  r<   )r   r   r   rp   r   r  r  r  r  r  r`  r  r)   r)   r)   r*   r   \  s6    




       r   )r8   r9   r:   r;   )K
__future__r   r  r   r-   r   r   typingr   r   r   r   r   r	   r
   r   r   r   r   typing_extensionsr   rP   torch._C._autogradr   torch._C._functorchr   r   r   r   r   r   r   r   r   r   r   torch._loggingr   torch.utils._mode_utilsr   torch.utils._python_dispatchr   torch.utils.weakr   r    torch._guardsr!   r  r"   r=  r#   r$   DimListr+   r1   r4   rT   rW   r\   r]   r^   r   r`   r   ra   re   rR   r   r   r   r   r   torch._prims_common_prims_commonr  r)   r)   r)   r*   <module>   sj   44	-	 } %        