
    Vh,N                   p   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rd dlm3Z3 d dl4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z:m;Z; dDdZ<e=Z> eddej~                        Z@ ed      ZA edej~                        ZB edej~                  d      ZCdEdZDdFdZEdGdZFdHdZGddd 	 	 	 	 	 	 	 	 	 	 	 dId!ZHdJd"ZIdKd#ZJdJd$ZKdJd%ZLdLd&ZMdMd'ZN	 	 	 	 	 	 dNd(ZO ed)eP      ZQ ed*eP      ZR ed+eP      ZS eSd       aT G d, d-      ZU ed.       G d/ d0             ZV ed.       G d1 d2eeB                ZW ed.       G d3 d4eWd5                ZX ed.       G d6 d7eWeB   eeB                ZY G d8 d9eeeC         ZZ G d: d;ed<      Z[ G d= d>eeeC         Z\ ed.       G d? deeB                Z]dOd@Z^dPdAZ_ G dB dCeeB         Z`d dlambZc y)Q    )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SymbolicContextc                &    ddl m} t        | |      S )Nr   )r(   )torch._subclasses.fake_tensorr(   
isinstance)tr(   s     L/home/dcms/DCMS/lib/python3.12/site-packages/torch/_subclasses/meta_utils.py_is_fake_tensorr1   :   s    8a$$    _TensorLikeTMetaTensorDesc_T_TensorT)bound_TensorT_covT)r7   	covariantc                :    	 | j                   S # t        $ r Y yw xY w)NF)is_leafRuntimeErrorr/   s    r0   safe_is_leafr>   G   s#    yy s    	c                    t        j                         5  t        j                  dd       | j                  cd d d        S # 1 sw Y   y xY w)NignorezThe .grad attribute of a Tensor)warningscatch_warningsfilterwarningsgradr=   s    r0   	safe_gradrE   O   s;    		 	 	" *KLvv  s   "AA
c                $    t        |       }|J |S N)rE   )r/   rD   s     r0   _expect_safe_gradrH   U   s    Q<DKr2   c                &    | |k(  sJ |  d|        y )Nz !=  )abs     r0   	assert_eqrM   [   s    6 aSQC= 6r2   Fskip_symbolic	skip_leafc                    t        |t        j                        rt               j	                  |      n|}d fd ||      S )Nc                    | j                   |j                          s | j                  |j                          | j                  |j                         s | j                  |j                          | j                  |j                          | j
                  |j                                 | j                  |j                                 | j                  |j                                 | j                  d ut        |      d u       | j                   | j                  t        |             | j                  r | j                  |j                          | j                  |j                                 | j                  |j                                 | j                  |j                                y t        |       r` | j                  |j                          | j                  |j                                 | j                  |j                                y sB | j                   |j!                                 | j"                  |j#                                 | j$                  |j'                                | j$                  r:| j(                  J |j*                  J  | j(                  |j*                         y y rG   )dtypeshaperequires_gradr;   	is_sparseis_inferenceis_conjis_negrD   rE   rH   layout	dense_dim
sparse_dimis_coalescedis_sparse_compressedstridestorage_offsetis_view_is_viewbase_base)m1m2rM   gorP   rO   s     r0   rg   zassert_metadata_eq.<locals>.gom   s   "((BHH%bhh)"""B$4$45bjj"**- 	",,-"//2??#45"**bjjl+"))RYY[)"''%y}D'@A77rww)"-. <<bii+bllBLLN3bmmR]]_5boor'89!"%bii+bllBLLN3bmmR]]_5 "))RYY[1"++R->->-@Abjj"++-0zzww***xx+++277BHH% r2   )re   r4   rf   torch.TensorreturnNone)r.   torchTensorMetaTensorDescriberdescribe_tensor)rM   re   rf   rO   rP   rg   s   `  ``@r0   assert_metadata_eqro   _   sG     b%,,' 	--b1 #& #&P b":r2   c                r    t        | t        j                        xr | j                  t        j                  u S rG   )r.   rk   rl   rZ   
sparse_coor=   s    r0   is_sparse_coorr      s'    a&G188u7G7G+GGr2   c                    | t         j                  t         j                  t         j                  t         j                  hv S rG   )rk   
sparse_csr
sparse_csc
sparse_bsr
sparse_bsc)rZ   s    r0   is_sparse_compressed_layoutrx      s8    	  r2   c                d    t        | t        j                        xr t        | j                        S rG   )r.   rk   rl   rx   rZ   r=   s    r0   r^   r^      s"    a&P+Fqxx+PPr2   c                2    t        |       xs t        |       S rG   )rr   r^   r=   s    r0   is_sparse_anyr{      s    63A66r2   c                J    t        ||       sJ d|  dt        |              |S )Nz	expected z	 but got )r.   type)tyobjs     r0   _checked_castr      s-    c2D)B4yc DDJr2   c                    | j                   S rG   real_storage)rc   s    r0   _get_real_storager      s    r2   c                    || _         y rG   r   )rc   r   s     r0   _set_real_storager      s     %Dr2   MetaStorageIdMetaTensorId_DescriberIdc                  d    e Zd ZdZddddZddZddZdd	 	 	 	 	 ddZd	dd
	 	 	 	 	 	 	 ddZy)rm   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                  t         | _        t        t         dz         a t        d      | _        t        d      | _        t               | _        t               | _	        || _
        t               | _        t               | _        y )N   r   )DESCRIBER_NEXT_IDidr   r   next_tensor_idr   next_storage_idr%   lookup_tensorlookup_storager   settraced_tensorstraced_storagesselfr   s     r0   __init__zMetaTensorDescriber.__init__   sd    #():Q)>?,8O.;A.>0213"(+),r2   c                    || j                   vr6| j                  | j                   |<   t        | j                  dz         | _        | j                   |   S Nr   )r   r   r   r   r/   s     r0   get_tensor_idz!MetaTensorDescriber.get_tensor_id   sO    D&&&$($7$7Dq!".t/B/BQ/F"GD!!!$$r2   c                    || j                   vr6| j                  | j                   |<   t        | j                  dz         | _        | j                   |   S r   )r   r   r   r   ss     r0   get_storage_idz"MetaTensorDescriber.get_storage_id   sO    D'''%)%9%9D"#01E1E1I#JD ""1%%r2   tracec                   t         j                  |      |j                          j                  r|nd       |rNj                   j
                  vr6t        d fd        j
                  j                  j                         S )N)r   sizedatadescribe_storagec                 :     j                  j                        S rG   as_jsonr   rr   s   r0   <lambda>z6MetaTensorDescriber.describe_storage.<locals>.<lambda>       AIIdgg$6 r2   metadata_fn)MetaStorageDescr   r   r   r   r   r"   add)r   r   r   r   s   `  @r0   r   z$MetaTensorDescriber.describe_storage   sv     ""1% nn$
 QTT!5!55"6   $$QTT*r2   Trecurser   c                    t        |      }|j                         }|j                  }|j                  }|j                  }t        |      }	t        |      }
|j                  }t        |      }t        |      }t        |      }t        j                  |      }d }d}|sFt        |      s;|r|	r7|s5|
s3|s1 j                  |j                         |      }|j!                         }d }|st        |      s|r|	r|j#                         }d }d }d }|s|r j%                  t'        |      |      }n|r|j(                  j*                  dvr|j                         rt-        d      |
s>t        j.                  |        j%                  t        j0                  |      |      }|}nct        j2                  j5                         } j%                  t7        ||      |      }t        j2                  j8                  j;                         }d }|
r2t        j8                  j<                  j?                         5 }	 d d d        d }d }d }|	rWtA        |d      sJ |jC                         \  }}|D ci c]   }| j%                  tE        ||      |      " }}t+        |      }ddl#m$} tJ        jM                  |      }tO        d?i d jQ                  |      d|d	|jS                         d
|d|jT                  d|jW                         d|jX                  d|d|d|
d|d|d|d|d|j[                         d|j]                         dt_        |t        j`                  jb                        d|	d|d||v r||   jd                  jg                         nd d|d|d|j(                  d|ji                         d|d |d!tk        tE        |d"tm                           d#|j                  sto        |      r|jq                         nd d$|j                  sto        |      r|js                         nd d%|j                  r|ju                         nd d&|rN|j                  t        jv                  t        jx                  hv r" j%                  |j{                         d'|(      nd d)|rN|j                  t        jv                  t        jx                  hv r" j%                  |j}                         d'|(      nd d*|rN|j                  t        j~                  t        j                  hv r" j%                  |j                         d'|(      nd d+|rN|j                  t        j~                  t        j                  hv r" j%                  |j                         d'|(      nd d,|r-to        |      r" j%                  |j                         d'|(      nd d-t        |      x} j%                  ||      nd d.|j                         r)t        j2                  j                  j                  |      nd d/|d0|s|rt        |      nd d1|rt        |      nd d2|r9|j                         r)|j                   j%                  |j                  |      nd d3t        j                  j                  j                  |      d4|d5|d6|d7|d8|d9|d:|d; j                  r|nd  |rN j                   j                  vr6t        d<  fd=>        j                  j                   j                          S # 1 sw Y   xY wc c}w )@Nr   r   xlalazyzVCannot safely fakify a view because this process drops the view information right now.__tensor_flatten__)_tensor_symint_registryr   storagerW   r;   rU   ndimrS   rV   	is_mkldnnis_functorch_wrappedr   r   r   ra   rX   rY   is_parameterr$   	is_nested
nested_intis_functionalrZ   devicer   r_   r`   dynamo_dynamic_indices_dynamo_dynamic_indicesr\   r[   r]   crow_indicesFr   col_indicesccol_indicesrow_indicesvaluesrD   creation_meta	unwrappedlevelbdimrc   	fake_mode	view_funcattrsctxr}   functorch_stackautograd_meta_fromcurrent_levelr   rn   c                 :     j                  j                        S rG   r   r   s   r0   r   z5MetaTensorDescriber.describe_tensor.<locals>.<lambda>  r   r2   r   rJ   )Rr>   rb   rV   rZ   r   r$   r   r   r   r   r   rk   _is_functional_tensorrx   r   untyped_storager`   r_   rn   r   r   r}   r<   _sync_from_functional_tensor_C$_functionalization_reapply_views_tlsr   
_functorchr   pyfunctorch#temporarily_clear_interpreter_stackhasattrr   getattr$torch.nested._internal.nested_tensorr   ViewFuncfrom_tensorr4   r   rW   rU   dimrS   rX   rY   r.   nn	Parameternoder   r   listr   r^   r\   r[   r]   rt   rv   r   r   ru   rw   r   r   r   rE   	_autograd_get_creation_metar    r   rd   _subclassesfake_tensormaybe_get_fake_moder   r   r   r"   r   )!r   r/   r   r   r;   ra   rV   rZ   r   is_traceable_wrapper_subclass_vr   r   is_batchedtensor_vis_legacy_batchedtensor_vis_gradtrackingtensor_vr   r   r`   r_   r   r   r   reapply_viewsmaybe_functorch_stackr   r   type_v	raw_attrsattrr   r   rD   r   s!   `                               @r0   rn   z#MetaTensorDescriber.describe_tensor   s    q/**,KK	KK	*G*J':1=KK	-a0$;A$>!"7":33A6 *62"A $( ++A,=,=,?u+MG--/N*62"A
 XXZF
 	!!8,,]1-=U,KI qxx}}OCzz|"l  (A 0011!4E 1 	 &'" % M M O 00-a?u 1 	 !& 3 3 A A C $!!--QQS Wl *12333113NIs & d**71d+;5*IIE  !WFP((+	 + g
!!!$g
g
 )g
 	g

 //g
 g
 ''g
  g
  g
  "6!g
" 0#g
$ %>%g
& #:'g
( )g
* IIK+g
, 88:-g
. $Auxx'9'9:/g
0 +J1g
2  3g
8 // (*//::<;g
> (?g
@ Ag
B 88Cg
D Eg
F Gg
H *Ig
J $(3Lce(T#UKg
N #$++1Ea1HdOg
R (){{6J16MakkmSWSg
T ./[[)dUg
` qxxE,<,<e>N>N+OO $$Q^^%5uE$Rcg
j qxxE,<,<e>N>N+OO $$Q]]_e5$Qmg
t qxxE,<,<e>N>N+OO $$Q^^%5uE$Rwg
~ qxxE,<,<e>N>N+OO $$Q]]_e5$QAg
H 3A6 $$QXXZe$LKg
R &aL(D5 $$T$7Ug
Z =>JJL""55a8d[g
^  _g
d &)@  "gg
j '9"dkg
p qzz|0C $$QWWE$:sg
v ''33GGJwg
x  yg
z {g
| }g
~ g
F 2Gg
H  2Ig
J (Kg
L nn$Mg
P QTT!4!44!6 ##ADD)G s   4\9+%]9]Nr   boolri   rj   )r/   rh   ri   r   )r   torch.UntypedStorageri   r   )r   r   r   r   ri   r   )r/   rh   r   r   r   r   ri   r4   )	__name__
__module____qualname____doc__r   r   r   r   rn   rJ   r2   r0   rm   rm      sn     -2 /%& 9>%15	& 37eTT+/T?CT	Tr2   rm   )frozenc                  4    e Zd ZU ded<   ded<   ded<   d	dZy)
r   r   r   intr   Optional[torch.UntypedStorage]r   c                    | j                   |t        | j                  t              r| j                  dS t	        | j                        dS )N)r   describer_idr   )r   r.   r   r  repr)r   r  s     r0   r   zMetaStorageDesc.as_json  sC    ''(!+DIIs!;DII
 	
 BFdii
 	
r2   Nr  r   ri   zdict[str, object])r   r   r   __annotations__r   rJ   r2   r0   r   r     s    
I )(
r2   r   c                  H    e Zd Ze	 	 d	 	 	 	 	 	 	 	 	 dd       Zedd       Zy)r   Nc                     y rG   rJ   r   r/   new_basesymint_visitor_fntensor_visitor_fns        r0   applyzViewFunc.apply  s     	r2   c                V    t        |       r
t               S t        | j                        S rG   )r1   _FakeTensorViewFunc_CustomViewFunc_view_func_unsafer=   s    r0   r   zViewFunc.from_tensor  s$    1&(("1#6#677r2   NN)
r/   r6   r  r6   r  Optional[Callable[[int], int]]r  ,Optional[Callable[[torch.Tensor], _TensorT]]ri   r6   )r/   rh   ri   r   )r   r   r   r   r  staticmethodr   rJ   r2   r0   r   r     sb    
 =AJN  :	
 H 
  8 8r2   r   c                  6    e Zd Ze	 	 d	 	 	 	 	 	 	 	 	 dd       Zy)r  Nc                n    t         j                  j                  j                  j	                  ||||      S rG   )rk   r   r   r(   r  r  s        r0   r  z_FakeTensorViewFunc.apply  s4       ,,77IIx*,=
 	
r2   r  )
r/   rh   r  rh   r  r  r  z.Optional[Callable[[torch.Tensor], FakeTensor]]ri   r(   )r   r   r   r   r  rJ   r2   r0   r  r    sN    
 =ALP	
	
 	
 :		

 J	
 
	
 	
r2   r  r(   c                  B    e Zd ZU ded<   e	 	 d	 	 	 	 	 	 	 	 	 dd       Zy)r  zpCallable[[torch.Tensor, Optional[Callable[[int], int]], Optional[Callable[[torch.Tensor], _TensorT]]], _TensorT]funcNc                (    | j                  |||      S rG   )r  r  s        r0   r  z_CustomViewFunc.apply  s     yy#46GHHr2   r  )
r/   rh   r  rh   r  r  r  r  ri   r6   )r   r   r   r  r   r  rJ   r2   r0   r  r  	  sa      
 =AJNII I :	I
 HI 
I Ir2   r  c                       e Zd Z	 	 	 	 	 	 ddZy)_MetaTensorCallbackc                   y rG   rJ   )r   argr   s      r0   __call__z_MetaTensorCallback.__call__&  s     	r2   N)r   Callable[[], torch.Tensor]r   Union[torch.device, str]ri   r8   r   r   r   r!  rJ   r2   r0   r  r  %  s    -=U	r2   r  c                      e Zd ZU ded<   y)_MetaTensorCallbackKwargsr#  r   N)r   r   r   r  rJ   r2   r0   r&  r&  ,  s    $$r2   r&  )totalc                       e Zd Z	 	 	 	 	 	 ddZy)_MetaTensorCallbackOptDevicec                    y rG   rJ   )r   r   kwargss      r0   r!  z%_MetaTensorCallbackOptDevice.__call__5  s     	r2   N)r   r"  r+  z!Unpack[_MetaTensorCallbackKwargs]ri   r8   r$  rJ   r2   r0   r)  r)  4  s#    ' 4	
 
r2   r)  c                     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<   dPdNZ3e4dQdO       Z5y)Rr4   r   r   r  r   torch.dtyperS   ztorch.devicer   tuple[int, ...]r   z	list[int]r   torch.layoutrZ   Fr   rW   r;   rU   rV   r   r   r   r   r   ra   r   NzOptional[int]r   r$   r   rX   rY   r   Optional[tuple[int, ...]]r_   r   r`   zOptional[MetaStorageDesc]r   r\   r[   zOptional[bool]r]   zOptional[MetaTensorDesc]r   r   r   r   r   r   r   rc   z#Optional[dict[str, MetaTensorDesc]]r   zOptional[CreationMeta]r   rD   >
   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   c                v   dfdt        j                  |       D ci c]{  }t        | |j                        |j                  u sW|j                  dk(  rt        | |j                        r2|j                   |j                  t        | |j                              } }}|j                  d|i       |S c c}w )Nc                   | dv ry | 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|D cg c]  } | |       c}S t        |t        t         f      r|j                  S t        |t              rt        |      S | dk(  r>t        |t              r.|j!                         D ci c]  \  }}||j                   c}}S |S c c}w c c}}w )N)r   r   r   )r4   r1  r  r.   rk   r   rS   rZ   SymInttupler   r   r   r   strdictitems)kvv1k1jsons       r0   r>  z$MetaTensorDesc.as_json.<locals>.json  s     22N222Aw!ellEKKFGAw!U\\*Aw!eT]+./0Q00!o~>?tt!\*1vG|
1d 301	:fb"BEE	::H 1 ;s   'D<Er   r  )r:  r7  r;  objectri   r?  )dataclassesfieldsr   namedefaultupdate)r   r  fieldr   r>  s       @r0   r   zMetaTensorDesc.as_json  s    	. %++D1

ejj)U]]:JJ"::#D%**5 JJUZZuzz)BCC

 

 	
.,/0

s   B B6c                    | j                   S rG   )r   r   s    r0   rT   zMetaTensorDesc.shape  s    yyr2   r  )ri   r.  )6r   r   r   r  rk   stridedrZ   rW   r;   rU   rV   r   r   r   r   r   ra   r   r   r$   r   rX   rY   r   r_   r`   r   r\   r[   r]   r   r   r   r   r   r   r   rc   r   r   rD   r1  r   r}   r   r   r   r   r   r   r   r   propertyrT   rJ   r2   r0   r4   r4   >  s.   
I %% ==FL(L$GTM4ItIt!&$&"d"$)T)"'4'GTIt !%J$*/!4/M4GTFDL$(,F%,NC
 *.G&- $J$#I}##'L.'-1L*1,0K)0-1L*1,0K)0'+F$+*.I'.D-%)D
")15E.5,0M)0%)D
")+O'  !C	 D.*.I'.$(I!(  E=#'M='48O1815.5
 $(D
 '"H  r2   c                ^    t        |      t        j                  ury | j                  |       y rG   )r}   rk   rl   copy_)dstsrcs     r0   
_safe_copyrN    s     Cy$IIcNr2   c                Z    t        |       t        j                  ury | j                         S rG   )r}   rk   rl   clone)rM  s    r0   _safe_clonerQ    s!    Cy$99;r2   c                      e Zd ZddddZddZddZddZddZddZdd	Z		 	 	 	 	 	 dd
Z
edd       Ze	 d	 	 	 	 	 dd       Zedd       Z	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 dddddd	 	 	 	 	 	 	 	 	 	 	 	 	 d dZy)!MetaConverterFr   c                   t        j                         | _        t        j                         | _        d| _        d| _        d | _        d| _        || _        t        |      | _
        y )Nr   r   )weakrefWeakValueDictionarystorage_memotensor_memohitmissdel_hookarg_cntr   rm   	describerr   s     r0   r   zMetaConverter.__init__  sa     '') 	 '') 	 	
 #,yAr2   c                B    | j                   dkD  xr | j                  dk(  S )Nr   )rY  rZ  rG  s    r0   
successfulzMetaConverter.successful	  s    xx!|.		Q.r2   c                N    | j                   j                  |j                  d       S rG   rX  getr   r   s     r0   get_tensor_memozMetaConverter.get_tensor_memo  s    ##ADD$//r2   c                Z    | j                   j                  |j                  d       }|J |S rG   ra  )r   r/   r   s      r0   _checked_get_tensor_memoz&MetaConverter._checked_get_tensor_memo  s-      t,}}r2   c                6    || j                   |j                  <   y rG   )rX  r   )r   r/   r;  s      r0   set_tensor_memozMetaConverter.set_tensor_memo  s    !"r2   c                N    | j                   j                  |j                  d       S rG   )rW  rb  r   r   s     r0   get_storage_memozMetaConverter.get_storage_memo  s      $$QTT400r2   c                6    || j                   |j                  <   y rG   )rW  r   )r   r   r;  s      r0   set_storage_memozMetaConverter.set_storage_memo  s    "#!$$r2   c                   | j                        x} |fd      j                         }| j                  rbt        j                         5  t               5  j                  J t        |j                  j                                d d d        d d d        | j                  |       |S |S # 1 sw Y   'xY w# 1 sw Y   +xY w)Nc                 d    t        j                   j                  t         j                  d      S NmetarS   r   )rk   emptyr   uint8)r   s   r0   r   z,MetaConverter.meta_storage.<locals>.<lambda>&  s    AFF%++fM r2   )
ri  r   r   rk   no_gradr#   r   r   rP  rk  )r   r   callbackmemor_ss    `   r0   meta_storagezMetaConverter.meta_storage  s     ))!,,D5Mo  ~~ ]]_ ;km ;66---%c166<<>:; ; !!!S)JK; ; ; ;s$   B>3B2B>2B;	7B>>Cc                6    t        j                  t        |      S rG   )typingcastr6   )clsr/   s     r0   _checked_cast_tensor_tz$MetaConverter._checked_cast_tensor_t3  s     {{8Q''r2   Nc                .    | j                   |             S rG   )r|  )r{  r/   r   s      r0   _identity_callablez MetaConverter._identity_callable8  s     ))!#..r2   c                    t         j                  j                  j                  dd      } ||      }t	        j
                  t        |      S )Nz9Internal error: Tried to backward() through example inputr   )rk   r   
_functionsDelayedErrorry  rz  r6   )r{  r/   errfnerrs       r0   _backward_errorzMetaConverter._backward_error@  s>    ##00G
 Ah{{8S))r2   c                "    !"#$%&'() t        j                  |j                        #$ddlm}  |dt         j                               t        j                  j                         j                  t        j                  j                  j                        rJ  xj                  dz  c_        t        j                  &j                   &f	 	 	 	 	 	 	 d&fd)f	 	 	 	 	 	 	 d')fd}f	 	 	 	 	 	 	 	 	 	 	 d(# fd$	 	 	 	 	 	 	 	 	 	 d)!fd	!f	 	 	 	 	 	 	 d*!#$& )fd
} j#                        odt        j$                  j&                        5  j(                  rCj*                  }	 #fd      }
 j,                  rej.                  J t        j0                         5  t3               5  t5        |
      sJ t7        j.                        |
_        d d d        d d d        t;        |
      sJ d       |
j=                  t?        j@                               jB                  rd|
_!        jB                  r|	s܉ jE                  |
jG                               }
t        jH                         5  |
j=                  t?        j@                               d d d        nztK        jL                        rj*                  }	jL                  t        jN                  t        jP                  hv rpjR                  J jT                  J jV                  J jX                  jR                  z
  jT                  z
  }jV                  jZ                  |dz   |dz    "nd"jL                  t        j\                  t        jN                  hv r%j^                  J j^                  j`                  %n$jb                  J jb                  j`                  % #"%fd      }
 j,                  rej.                  J t        j0                         5  t3               5  t5        |
      sJ t7        j.                        |
_        d d d        d d d        t;        |
      sJ d       jB                  rd|
_!        jB                  	r|		s je                  |
      }
	njf                  rjh                  sddl5m6}  |d       	nWjn                  rGj*                  }	 )      \  '(} #'(fd      }
 j,                  rt        j0                         5  t3               5  jp                  J jr                  J t5        |
      sJ t        jt                  jp                  jr                  j`                  j                        |
_        j.                  J tw        |
j8                  j.                         d d d        d d d        t;        |
      sJ d       jB                  rd|
_!        jB                  r|	s je                  |
      }
njx                  r0jz                  rddl5m6}  |d       d+ # fd         }
nǉj|                  rj                  j~                  dvrj                  J jx                  rJ  j                  j                  #      } jE                  t        j                  |            }
t        j                  j                  |
       n"jz                  r}j                  J d }r.,ddlFmG} t        |      sJ j                  j                  } j                  j                  #t        j                  j                  j                  d      |      }	 	 	 	 	 	 d,d}t        j                  j                  t        j                  j                  j                        }t        j                  j                  t        j                  j                  j                  d       	 |j`                  j`                  k(  rn ||j`                  j`                        r% jE                  t        j                  |            }nl |j`                  |j`                        r% jE                  t        j                  |            }n* jE                  |j                  j`                              }j*                  r8t        j0                         5   ||      }
d d d        jB                  
_!        n։j                  jB                  jB                  k(  r't        jH                         5   ||      }
d d d        njB                  sJ t        j0                         5   jE                  |j                  |jZ                              }d d d        jB                  _!        t        jH                         5   ||      }
d d d        j                  J t        j                  j                  j                  
j                         t        j                  j                  t        j                  j                  j                  |       nj*                  }	j                  sj                  sjx                  sj                  rt        cd d d        S  )      \  '(}jh                  r $'(      }
n #'(fd      }
 j,                  rt        j0                         5  t3               5  jp                  J jr                  J t5        |
      sJ t        jt                  jp                  jr                  j`                  j                        |
_        tw        |
j8                  j.                         d d d        d d d        t;        |
      sJ d       jB                  r$jB                  |
_!        |	s je                  |
      }
j                  }|J |j                   j                  vr|
jf                  s&|
js                         (k(  r|
j                         |k(  r| j                  ||
j                                 j,                  rt5        |
      sJ |
j8                  J t        |
j                         |
j8                  j                                n7 j                  |#      }t        j                         }dd lbmc}md}  ||
      }| ||      }t        j0                         5   &       5  |5  |
j                  ||'(       d d d         j,                  rt        j0                         5  t3               5  t5        |
      sJ |
j8                  J jr                  J |
j8                  j                  t        |      j                  jp                  jr                         d d d        d d d        d d d        d d d        j                  1dd!lmL}  j                  j                  # |d"            
_g        t        j                  j                  
j                         t        j                  j                  |
j                         d d d        j                  xr j                  k(  }t        t        
d|#       dd$lFmo} j                  > |j                  jp                  dk(        r|
j                         j                  d       j                  rd|
_r        j                  8t5        |
      sJ |
j                  j                  j                  %      |
_v         j                  |
        j                        S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   
2xY w# 1 sw Y   
7xY w# 1 sw Y   xY w# 1 sw Y   $xY w# 1 sw Y   hxY w# 1 sw Y   >xY w# t        j                  j                  t        j                  j                  j                  |       w xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   HxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   6xY w)-Nr   r   )ConstantSource__meta_utils_unknown_tensorr   c           
     (   | j                   J | j                  }|1|j                  u r#| j                  | j                   | j                  fS t        fd| j                  D              }t        fd| j                   D              }j                  | j                        }j                  |||t        | j                        D cg c]  }|| j                  v  c}||      S | j                  | j                   | j                  fS c c}w )Nc              3  @   K   | ]  }j                  |        y wrG   #_maybe_specialize_sym_int_with_hint).0sz	shape_envs     r0   	<genexpr>zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>  s$      # "EEbI#   c              3  @   K   | ]  }j                  |        y wrG   r  )r  sdr  s     r0   r  zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>  s$      % "EEbI%r  )symbolic_context)r_   r   r  r   r`   r6  r  -_create_symbolic_sizes_strides_storage_offsetranger   r   )	r/   rM  r  r   t_sizet_stridet_storage_offsetdr  s	           r0    sym_sizes_strides_storage_offsetzCMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset  s    88'''$KK	(Y-@-@I-M FFAHHa.>.>?? # #"#&&# F  % %"#((%  H (1'T'T((($ %RR (@EaffN1a666N)9 S   !*:*:;; Os   Dc                f     | ||      \  }}}t        j                  ||| j                  d      S rn  rk   empty_stridedrS   )inner_t	inner_srcr  inner_sizesinner_strides_inner_storage_offsetr  s         r0   empty_createz/MetaConverter.meta_tensor.<locals>.empty_create  sC     1)EUV	%&&mm	 r2   c                   ddl m ddlm | j                  J | j
                  J ||n| j                  }||n| j                  }|t        |      sJ 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	
fd|J  | |||	|      }|j                  |k(  s$J d| j
                   d| d|j                          |j                         |k(  s(J d| j
                   d| d|j                                 |S )
Nr   
AttrSource)SubclassSymbolicContextc           	     R   | j                   j                  | |||      S i }| j                   j                         D ]  \  }}d }	|Xt        |      sJ |j                  |   x}
	 8t        t        j                  j                  j                  j                  |
      }	 ||      }t        j                  ||j                        } ||j                  |j                  |	||      }|||<    | j                   J | j                   j#                  || j$                  ||      S )Nr  )r   meta_tensorr9  r.   inner_contextsr   rk   fxexperimentalsymbolic_shapesr+   	functoolspartialr   r   r_   r}   __tensor_unflatten__r   )r/   
outer_sizeouter_strider  rt  sourceinner_tensorsr   meta_tensor_desccurrent_contextcurrent_context_current_sourceinner_callbacknew_empty_tensorr  r  _empty_create_subclassr   r  s                 r0   r  zXMetaConverter.meta_tensor.<locals>.empty_create_subclass.<locals>._empty_create_subclass  sO    77?++! (  !#./ggmmo ;*D*&*O'3)*:<STTT0@0O0OPT0UU,!%& /< % 5 5 E E U U 0/O
 &0%=N%.%6%6 )9)@)@&N (>((--(//'&&($ +;M$'1;4 vv)))vv22!155*l r2   zExpected return value from z.__tensor_unflatten__() to have shape equal to z, but got: z/__tensor_unflatten__() to have stride equal to )r/   r4   r  r0  r  r0  r  ?Optional[torch.fx.experimental.symbolic_shapes.SymbolicContext]rt  &_MetaTensorCallbackOptDevice[_TensorT]r  torch._guards.Sourceri   r6   )
torch._dynamo.sourcer  %torch.fx.experimental.symbolic_shapesr  r   r}   r   r_   r.   rT   )r/   r  r  r  r  subr  r  r  rt  r   r  s         @@@r0   empty_create_subclassz8MetaConverter.meta_tensor.<locals>.empty_create_subclass  si    8U77&&&66%%% (2'=166J+7+C<L#+z "90  3!353 83#	3 A3 -3 3 3j %%%(:|-=xC 99
* -affX 6"",[E* ::<</ -affX 6##/.CJJL>K/
 Jr2   c                   ddl m} ddlm}m}m} d }| j                  r*| j                  J  | j                   ||d      ||      }|j                  g| j                  z  }	| j                  rv| j                  J i }
| j                  j                         D ],  \  }}t        |t              sJ  | |||      ||      |
|<   .  ||	d g| j                  z  |
||      }|S  ||	d g| j                  z  |      }|S )Nr   r  )
DimDynamicStatelessSymbolicContextr  rd   )dynamic_sizesconstraint_sizesr  tensor_sourceview_base_context)r  r  r  )r  r  r  r  r  r  ra   rc   DYNAMICr   r$   r   r9  r.   r7  )r/   r  r  rt  r  r  r  r  r  t_dynamic_sizesr  r   innert_symbolic_contextall_dynamic_symbolic_contexts                 r0   r  z?MetaConverter.meta_tensor.<locals>.all_dynamic_symbolic_context/  s4    8    yyvv)))$@FFJvw7H%!
  *112QVV;O..ww***   $%77==? KD%%dC000+Gz&$7H,N4(
 &="1&*Vaff_#1"(&7&" &% &>"1&*Vaff_&7&" &%r2   c                j    |      \  }}}|j                   s>t        |       s3        5  j                  | j                  |||            cd d d        S ddlm ddlmm} dfd}i |j                   rg|j                  J |j                  J  |||      }|j                         \  }	}
|	D ](  }t        ||      |j                  |   j                  <   * f	 	 	 	 	 	 	 dfd}|j                  J |j                  j                  || ||      }t        j                    ||j#                         |             t        j                    ||j%                         |             t        j                    ||j'                         |             |S # 1 sw Y   UxY w)	Nr   )EphemeralSource)r  sym_eqc                    ddl m d uxr, t              xr t        fdj                  D              }|s| S  d      }j                  | |d       }j                  || |      S )Nr   )r  c              3  :   K   | ]  }|j                   u   y wrG   )STATIC)r  xr  s     r0   r  z_MetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fn.<locals>.<genexpr>  s!      34Z...s   r  )positive)hintr  )r  r  r.   allr  create_symbolcreate_symintnode)	r   all_static_sizes
sym_sourcesymbolr  r  r  r  r  s	       @r0   r  zLMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fn  s    L %D0 "#35MN 8H8V8V  ! $y'8H --@A
"00J0N 226*2UUr2   r  r  c                    | y 
j                   j                  |       }	j                  |d       }||S 
j                   j                  |       } d      }
j	                  |||| ||||            S )Nr  )r]  r   rb  rn   r  )	visited_tr  rt  
visited_idfake_visited_tvisited_desctemp_sourcer  r  real_to_fake_mappingr   s          r0   r  zLMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.tensor_visitor_fn  s     $ "^^99)D
!5!9!9*d!K!-))#~~==iH ..AB'' 0$k9h r2   )r   r  ri   r  )r  rh   r  8Optional[torch.fx.experimental.symbolic_shapes.ShapeEnv]rt  r  ri   rh   )r$   r|  
as_stridedr  r  r  r  r  r   r}   r   r   r   r   r  rk   _checkr   r_   r`   )rc   r/   r  sizesstridesr`   r  r  fake_tr   _r   r  r  r  r  r  rt  r  maybe_suppressr   r  r  r  s     `          @@@r0   view_from_basez1MetaConverter.meta_tensor.<locals>.view_from_base~  s    0P60,UG^ 335d;
 $% 66wG 
 =
V V6 $& ..ww*** vv))) $9%g$ "446q! SD=DVT=R()9)9:S CK'''	' A' ' 'V ;;*** [[&&q$0ACTUF
 LLu56LL9:LL 5 5 7HIMi s   "F((F2c                     t         j                  j                  j                   j                   j
                   j                   j                  t         j                  d      S )Nro  )rS   rZ   r   )	rk   opsaten_sparse_coo_tensor_with_dimsr\   r[   r   rS   rq   r=   s   r0   r   z+MetaConverter.meta_tensor.<locals>.<lambda>  sH    		 K KLLKKFF"#''#(#3#3#) !L ! r2   z)the callback you passed in doesn't detachT   rJ   c            
         t         j                  j                  j                  dj                  j
                   j                  j                  d      S )Nr   ro  )rZ   rS   r   )rk   r  r  #_sparse_compressed_tensor_with_dimsr[   rT   rZ   rS   )	blocksizeindex_dtyper/   s   r0   r   z+MetaConverter.meta_tensor.<locals>.<lambda>D  sH    		 R RKKGG%'#$88"#''#) !S 	! r2   )unimplementedz;strided nested tensors are not supported by meta conversionc                 J    t        j                   j                  d      S rn  r  r  r  r/   s   r0   r   z+MetaConverter.meta_tensor.<locals>.<lambda>m  s     3 3!7!''&! r2   rp  z;view functorch tensors are not supported by meta conversionc                     j                   r j                  J  j                  J  j                  J  
 j                        } j                  } j                  }t        j
                  j                  j                   j                        5  j                  t        |||            }d d d        |S  j                  r. j                  J  j                  J t        j                  j                  } |       5   
 j                        }d d d         j                  }|	k(  r}nut        j
                  j                  j                   j                        5  j                  t        j                  j
                  j                  |            }d d d         j                  } j                   rt#              r	d|_        |S  j                   r|sj%                        }S  j&                  rb j                  J  j(                  J j+                   j                        }j                  t-        | j(                              }|S  j.                  J  j0                   j.                    fd      }j2                  rt	        j4                         5  t7               5  t	        j8                   j0                   j.                   j:                   j<                        |_         j@                  J tC        |j>                   j@                         d d d        d d d        |S |S # 1 sw Y   S xY w# 1 sw Y   BxY w# 1 sw Y   xY w# 1 sw Y   <xY w# 1 sw Y   |S xY w)NTc                 J    t        j                   j                  d      S rn  r  r  s   r0   r   zDMetaConverter.meta_tensor.<locals>._to_fake_tensor.<locals>.<lambda>  s"    (;(;$)$+*+''+1	)" r2   rp  )"r   r   r   r   rk   r   r   %temporarily_restore_interpreter_stackr   r|  r   r   r   _DisableFuncTorch_wrap_for_gradr;   rU   r>   r  r   r   r  r   r_   r   r   rs  r#   r  rS   r   real_tensorr   rN  )r/   ftlvlr   r   disable_functorchr;   r  r  GRAD_TENSOR_SENTINEL_VALUE_to_fake_tensorrt  r   r  r  r  s   `      @@r0   r  z2MetaConverter.meta_tensor.<locals>._to_fake_tensor  sB    --#$;;#::#:#$77#66#6#$66#55#5!0!=B"#''C#$66D
 "'!1!1!=!=!c!c ! 1 1" " %)$?$?$22tS$A%""L  !A 44#$;;#::#:#$77#66#6050J0J-!2!4 B%4Q[[%AB"#''C"&@@$&%*%5%5%A%A%g%g$%$5$5&" !& )-(C(C(-(;(;(J(J2s(S)&A!& '(iiG <?26Z  !Y "#$($8$8$;V  !U __#$;;#::#:#$??#>>#>!%!1!1 ! ) (
 !' 0
"B !% ; ; 7AOO L!A8  !/ $%88#77#7$%FFE&'hhG (!"!A  $~~%*]]_ !Fkm !F494G4G()()./gg/0xx	5&AM ,-66+=$=+=$.q}}aff$E!F !F  !qM"L  !yB B!& !&Z!F !F !F  !sI   M	M+:M);NA5M6;NMM&)M36M?	;NNr   )r  rd   c                `    t        j                  |       xr t        j                  |       |k(  S rG   )utilsis_complex_dtypecorresponding_real_dtype)complex_dtype
real_dtypes     r0   	is_c_of_rz,MetaConverter.meta_tensor.<locals>.is_c_of_r  s2     "22=A * % > >} M)!*r2   Fr  c                 J    t        j                   j                  d      S rn  r  r  s   r0   r   z+MetaConverter.meta_tensor.<locals>.<lambda>  s"    E$7$7 % '&'gg'-	% r2   )rt  )in_kernel_invocation_managerr   r  rD   rN   )guard_size_oblivious)nt_tensor_id)r/   r4   rM  r  r  r  ri   z,tuple[tuple[int, ...], tuple[int, ...], int])r  r4   r  r  r  r  ri   rh   )r/   r4   r  r.  r  r.  r  r  r  zOptional[torch._guards.Source]ri   r6   )
r/   r4   r  r  r  r  rt  _MetaTensorCallback[_TensorT]ri   z5torch.fx.experimental.symbolic_shapes.SymbolicContext)rc   r6   r/   r4   r  r  ri   r6   r/   r4   ri   r6   )r  r-  r  r-  ri   r   )yr  r  r   r  r  lenrX  rk   r   _dispatch_tls_local_exclude_sethasDispatchKeyPythonr\  
contextlibnullcontextsuppress_guardsrc  inference_moderW   rV   r;   r   r   rs  r#   r1   rQ  r  r>   _coalesced_r   r]   rU   r|  rP  enable_gradrx   rZ   rv   rw   r\   r[   r   r   rT   rt   r   rS   r   r  r   r$   torch._dynamo.excr  r   r   r_   r  rN  r   ra   r   r}   r   r  _to_functional_tensor_mirror_autograd_meta_tor   rc   r  r  r.   r  _dynamor  r  &_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   r   rW  r`   rk  r   r   rw  r-   r  r   set_r   rD   	_set_conjrX   _set_negrY   r   ro   rM   r  resize_r   	_is_paramr   r   create_symbolic_nested_intnested_int_memorg  re  )*r   r/   r  	callback_r  r  r  r  r  r;   r   	batch_dimr  _storage_offsetr   base_symbolic_contextr  rc   r  old_excludemidr`   r   rv  maybe_fake_mgrr  r   mb_fake_moder  rP   r  r  r  r  r  rt  r  r  r  r  r  r  s*   ``` ``                         @@@@@@@@@@@r0   r  zMetaConverter.meta_tensorO  s    2;1B1Bahh2
 >; $-c$2B2B.C-DEF 88;;=AAHH  ''
 	
 
 	4 -7,B,B &66N !$	<$	<%$	<$	< :$	<V !	#	+		 	6 !5;g	g	'g	 *g		g	 3g	 g	Z0	&0	&(0	& P0	& 4	0	&
 C0	&h F	F	F	F	 F	 F	P "*)+&%%ann5 n/;;iiG
 !	A ~~ vv111"]]_ @km @#21#55#5,7,?AM@ @ (?W,WW? MM$q~~"67*.w
 !77	B"..0 @MM$q~~*>?@ @0:iiGxxE$4$4e6F6F#GG ||777 {{666 xx333$%FFQ\\$9AKK$G	$%HHNN9q=9q=$Q	$&	xxE$4$4e6F6F#GG ~~999&'nn&:&: ~~999&'nn&:&: 	A ~~ vv111"]]_ @km @#21#55#5,7,?AM@ @ (?W,WW?*.w 003[[)H)H @!U [[iiG
 9FC	' !A
 ~~"]]_ >km >#$66#55#5#$88#77#7#21#55#5,1,?,? !-AM $%66#55#5&q}}aff=> > (?W,WW?*.w 003++yyC%YU! U!n (*A__o)M;;222 5555 $ 0 0! (!I 3333I>A 2213G3GKYY 66---,0) %5%A  **:<TUUU ,==I4D4V4V1++! ,,77H-D'2@K #((("Q"Q,,<<#K HHDD,,<<eE::0 &tzz177;#'#>#>u?Q?QRV?W#XD&qww

;#'#>#> % 5 5d ;$D $(#>#>tyy?Q#RD& 99 "' <$24$;< /0ooAO vv33qF%*%6%6%8 !@(6tQ(?A!@ !@ () 6%*]]_ !&*.*E*E(,		$**(=+&C!& 56OO 1%*%6%6%8 !?(6sA(>A!?
  !:::**==aQHH!HH00@@+
  iiG //13J3J2222-Sn/ n/^ 9FDTU	&
 661%g %  >>!& B+- B'(vv'9 9'9'(xx'; ;';'6q'9 9'9050C0C$%FFAHHAGGAHH1" !+1==!&& AB B (?W,WW?*+//& !% 4 4Q 7A		A=(=tt4#4#44HHJ'1 ! 0 0 2n D --a1B1B1DE>>#21#55#5#$==#<<#<- ! 1 1 3Q]]5R5R5T #//H/E. '224 '
 (;1'='3-I,-WN"]]_ &n.> &!/ L !sNE7 KL#~~%*]]_ 	!&km 	!&+:1+=$=+=+,==+D$D+D+,88+?$?+?$%MM$6$6(9#(>()(8(8()()	%&		!& 	!&	& & 66%? "--! "662(AF ""1aii0!!!QXX.]n/b ''QAGG7Q,Q  y!QdiX Syy$)=aiinnPQ>Q)R!!#++A.~~" ||'&q)))$%KK$J$J!" %K %!   A&,,Q//i@ @ @ @$@ @F@ @ @ @@> > > >h< <!@ !@!& !&
!? !? HH!HH00@@+HB B B BdL L	!& 	!& 	!& 	!&	& & & &en/ n/sJ  )AAC9<(/7BAC9%"0E:AC9*<5(/<%CAC90A@;BA@	A@!IAC94C(AA
A@#&AAA7
A@0+AA,+A@=-AA
AA
A
AABAC9'AAC9:AB+BABAB+E5AC9AC,ACAB8	2(ACAC	%A/ACAC	AC$AC,,BAC9	AC9",	'AC9/94<<A@	@AC9@	A@@A@@A@ 	@AC9@#A@-	@(AA@0A@:	@5AA@=AA	AAAA
AA	AAAAAABBAC9BAB(B#AB+B+AB5	B0AC9B8ACB=ACCACC
AC	CACCACCAC)C$AC,C,AC6	C1AC9C9ADT)rt  r  r  r   c               $    | j                   }n|}t        |t        j                        r|j                  j
                  dk(  s>|j                  s2|j                         r=|j                  1|j                  j                  r xj                  dz  c_
        t        S  xj                  dz  c_        n<t        j                  j                  |      r xj                  dz  c_
        t        S |S d} j                  j!                  ||      |rJ t#        d fd       t%        j&                         5 }|j)                  t        j*                  j,                  j/                                t1               }	|	7|j)                  t        j2                  j4                  j7                                 j9                  |||      }
d d d        t        |      t        j:                  j<                  u rd
_        
S # 1 sw Y   7xY w)	Nr   r   Fr   describe_sourcec                 h     j                   j                  j                  j                         dS )N)r  r   r  )r]  r   rB  )r   r  t_descs   r0   r   z(MetaConverter.__call__.<locals>.<lambda>O  s'    $(NN$5$5 ))$kkm% r2   r   T) r~  r.   rk   rl   r   r}   is_quantizedrb   rd   rV   rZ  r+  rY  	overridesis_tensor_liker]  rn   r"   r  	ExitStackenter_context	_dispatchpythonsuspend_functionalizationr!   r   r   r   r  r   r   r0  )r   r/   r  rt  r  r  r   r3  
exit_stackstr   r>  s   `   `      @r0   r!  zMetaConverter.__call__  s    //I I a& '  !''"5!'':K:K		Q	%%A__++A.IINI!! H>E ///?%%%! !!# 	z$$U__%;%;%U%U%WX')B~(($$00TTV    A	  7ehh((( AK -	 	s    BHHr   )ri   r   )r/   r4   ri   r2  r  )r/   r4   r;  r6   ri   rj   )r   r   ri   r  )r   r   r;  r   ri   rj   )r   r   rt  z0Callable[[Callable[[], torch.Tensor]], _TensorT]ri   r   )r/   rh   ri   r6   rG   )r/   r"  r   z"Optional[Union[torch.device, str]]ri   r6   )r/   r6   ri   r6   )r/   r4   r  Optional[ShapeEnv]r3  r  r  Optional[Source]r  Optional[SymbolicContext]ri   r6   )r/   rh   r  rI  rt  z'Optional[_MetaTensorCallback[_TensorT]]r  rJ  r  rK  r   r   ri   r6   )r   r   r   r   r_  rc  re  rg  ri  rk  rw  classmethodr|  r~  r  r  r!  rJ   r2   r0   rS  rS    s\   ,1 B*/0
#1$ C 
	, ( (  6:/%/ 3/ 
	/ / * *B0B0 &B0 1	B0
 !B0 4B0 
B0N )-\
 =A#'6: \\ &\
 :\ !\ 4\ \ 
\r2   rS  )r/   r?  ri   zTypeIs[FakeTensor])r/   #Union[MetaTensorDesc, torch.Tensor]ri   r   )r/   r3   ri   zOptional[_TensorLikeT])r/   r3   ri   r3   )rK   r5   rL   r5   ri   rj   )rM   z Callable[[object, object], None]re   rM  rf   rh   rO   r   rP   r   ri   rj   )r/   r?  ri   zTypeGuard[torch.Tensor])rZ   r/  ri   r   )r~   ztype[_T]r   r?  ri   r5   )rc   r   ri   r   )rc   r   r   r   ri   rj   )rL  rh   rM  r2  ri   rj   )rM  rh   ri   r2  )d
__future__r   r  r@  r  ry  rA   rU  abcr   r   r   r   r   r	   r
   r   r   r   r   r   r   typing_extensionsr   r   r   r   r   rk   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*   r+   r1   r   DimListrl   r3   r5   r6   r8   r>   rE   rH   rM   ro   rr   rx   r^   r{   r   r   r   r  r   r   r   r   rm   r   r   r  r  r  r&  r)  r4   rN  rQ  rS  torch._prims_common_prims_commonr	  rJ   r2   r0   <module>r[     s   "        - !   M L  +    , / F 0 0$H
 P% ~'7FT]:U\\2~U\\TJ!  6/6+6 	6
 6 6 
6tHQ
7
%
%.B%	% -~s+ ~s+ O K K\ $
 
 
 $8wx  8 8& $
(<0 
 
 $Ihx('(*; I I6(GL$9 %	 %8W\-B  $RWX& R RB|GH% |~# $r2   