
    9j;                      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
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 d dl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-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 er*d dl5m6Z6m7Z7 d dlm8Z8 d dl9m:Z: d dl;m<Z<m=Z= d dl>m?Z?m@Z@ d dlAmBZB dKdZCeDZE eddej                        ZG ed      ZH edej                        ZI edej                  d      ZJdLdZKdMd ZLdNd!ZMdOd"ZN ej                         ZPd#eP_Q        edPd$       ZRd#d#d%	 	 	 	 	 	 	 	 	 	 	 dQd&ZSdRd'ZTdSd(ZUdRd)ZVdRd*ZWdTd+ZXdUd,ZY	 	 	 	 	 	 dVd-ZZ ed.e[      Z\ ed/e[      Z] ed0e[      Z^ e^d       a_ G d1 d2      Z` ed3       G d4 d5             Za ed3       G d6 d7eeI                Zb ed3       G d8 d9ebd:                Zc ed3       G d; d<ebeI   eeI                Zd G d= d>eeeJ         Ze G d? d@ed#A      Zf G dB dCeeeJ         Zg ed3       G dD dEeeI                ZhdWdFZidXdGZj	 	 	 	 	 	 dYdHZk G dI dJeeI         Zld dlmmnZo y)Z    )annotationsN)abstractmethod)AbstractContextManagercontextmanager)	dataclass)AnyClassVarGenericNewTypeProtocolTYPE_CHECKING	TypeGuardTypeVar)override	TypedDict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)
OpaqueBase)no_dispatch)is_traceable_wrapper_subclass)WeakIdKeyDictionary)Callable	Generator)CInterpreter)Source)
FakeTensorFakeTensorMode)ShapeEnvSymbolicContext)IntLikeTypec                &    ddl m} t        | |      S )Nr   )r*   )torch._subclasses.fake_tensorr*   
isinstance)tr*   s     \/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/_subclasses/meta_utils.py_is_fake_tensorr4   =   s    8a$$    _TensorLikeTMetaTensorDesc[Any]_T_TensorT)bound_TensorT_covT)r:   	covariantc                :    	 | j                   S # t        $ r Y yw xY w)NF)is_leafRuntimeErrorr2   s    r3   safe_is_leafrA   J   s#    yy s    	c                    t         j                  j                  t         j                  j                  j                        5  | j
                  cd d d        S # 1 sw Y   y xY wN)torch_logginghide_warnings	_internalsafe_grad_filtergradr@   s    r3   	safe_gradrJ   R   s@    		%	%enn&>&>&O&O	P vv  s   AA!c                6    t        |       }|t        d      |S )Nz3Expected tensor to have a gradient but grad is None)rJ   AssertionError)r2   rI   s     r3   _expect_safe_gradrM   X   s!    Q<D|RSSKr5   c                .    | |k7  rt        |  d|       y )Nz != )rL   )abs     r3   	assert_eqrQ   _   s#    Avs$qc]++ r5   Fc               #     K   t        t        dd      } dt        _        	 d  | t        _        y # | t        _        w xY ww)Ndisable_inference_modeFT)getattrtlsrS   )priors    r3   $disable_inference_mode_for_fake_proprW   k   s5     C159E!%C+%*"U"s   A 0 A =A 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                         t        t        dd      s" | j                  |j                                n | j                  d        | 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(                  rL| j,                  t/        d      |j0                  t/        d       | j,                  |j0                         y y )NrS   Fz*m1.base must not be None for a view tensorz+m2._base must not be None for a view tensor)dtypeshaperequires_gradr>   	is_sparserT   rU   is_inferenceis_conjis_negrI   rJ   rM   layout	dense_dim
sparse_dimis_coalescedis_sparse_compressedstridestorage_offsetis_view_is_viewbaserL   _base)m1m2rQ   gorZ   rY   s     r3   rq   zassert_metadata_eq.<locals>.go   s"   "((BHH%bhh)"""B$4$45bjj"**- 	",,-s4e<boor'89boou-"**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77?()UVV88#()VWW277BHH% r5   )ro   r7   rp   torch.TensorreturnNone)r1   rD   TensorMetaTensorDescriberdescribe_tensor)rQ   ro   rp   rY   rZ   rq   s   `  ``@r3   assert_metadata_eqrx   u   sG     b%,,' 	--b1 (& (&Z b":r5   c                r    t        | t        j                        xr | j                  t        j                  u S rC   )r1   rD   ru   rd   
sparse_coor@   s    r3   is_sparse_coor{      s'    a&G188u7G7G+GGr5   c                    | t         j                  t         j                  t         j                  t         j                  hv S rC   )rD   
sparse_csr
sparse_csc
sparse_bsr
sparse_bsc)rd   s    r3   is_sparse_compressed_layoutr      s8    	  r5   c                d    t        | t        j                        xr t        | j                        S rC   )r1   rD   ru   r   rd   r@   s    r3   rh   rh      s"    a&P+Fqxx+PPr5   c                2    t        |       xs t        |       S rC   )r{   rh   r@   s    r3   is_sparse_anyr      s    63A66r5   c                R    t        ||       st        d|  dt        |             |S )Nz	expected z	 but got )r1   rL   type)tyobjs     r3   _checked_castr      s-    c2yId3i[ABBJr5   c                    | j                   S rC   real_storage)rm   s    r3   _get_real_storager      s    r5   c                    || _         y rC   r   )rm   r   s     r3   _set_real_storager      s     %Dr5   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)rv   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     r3   __init__zMetaTensorDescriber.__init__   sd    #():Q)>?,8O.;A.>0213"(+),r5   c                    || j                   vr6| j                  | j                   |<   t        | j                  dz         | _        | j                   |   S Nr   )r   r   r   r   r2   s     r3   get_tensor_idz!MetaTensorDescriber.get_tensor_id   sO    D&&&$($7$7Dq!".t/B/BQ/F"GD!!!$$r5   c                    || j                   vr6| j                  | j                   |<   t        | j                  dz         | _        | j                   |   S r   )r   r   r   r   ss     r3   get_storage_idz"MetaTensorDescriber.get_storage_id  sO    D'''%)%9%9D"#01E1E1I#JD ""1%%r5   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 rC   as_jsonr   rr   s   r3   <lambda>z6MetaTensorDescriber.describe_storage.<locals>.<lambda>      AIIdgg$6 r5   metadata_fn)MetaStorageDescr   r   r   r   r   r!   add)r   r   r   r   s   `  @r3   r   z$MetaTensorDescriber.describe_storage	  sv     ""1% nn$
 QTT!5!55"6   $$QTT*r5   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 }d }|	rtA        |d      stC        d      |jE                         \  }}i }i }|D ]s  }tG        ||      }|xt        jH                  d x\     j%                  ||      ||<   > tJ        d x\   ddl&m'}  ||      ||<   \ 	 tC        d	t+        |              t+        |      }dd
l(m)}  tT        jW                  |      }!tG        tX        dd      }"t[        di d j]                  |      d|d|"rdn|j_                         d|d|j`                  d|jc                         d|jd                  d|d|d|
d|d|d|d|d|jg                         d|ji                         dtk        |t        jl                  jn                        d|	d|d || v r| |   jp                  js                         nd d!|d"|d#|j(                  d$|ju                         d%|d&|d'tw        tG        |d(ty                           d)tG        |d*i       d+|j                  st{        |      r|j}                         nd d,|j                  st{        |      r|j                         nd d-|j                  r|j                         nd d.|rN|j                  t        j                  t        j                  hv r" j%                  |j                         d|/      nd d0|rN|j                  t        j                  t        j                  hv r" j%                  |j                         d|/      nd d1|rN|j                  t        j                  t        j                  hv r" j%                  |j                         d|/      nd d2|rN|j                  t        j                  t        j                  hv r" j%                  |j                         d|/      nd d3|r-t{        |      r" j%                  |j                         d|/      nd d4t        |      x}# j%                  |#|      nd d5|j                         r)t        j2                  j                  j                  |      nd d6|d7|s|rt        |      nd d8|rt        |      nd d9|r9|j                         r)|j                   j%                  |j                  |      nd d:t        j                  j                  j                  |      d;|!d<|d=|r|nd d>|d?|d@|dA|dB|dC j                  r|nd $|rN$j                   j                  vr6t        dD$ fdEF        j                  j                  $j                         $S # 1 sw Y   xY w)GNr   r   xlalazyzVCannot safely fakify a view because this process drops the view information right now.__tensor_flatten__z>Traceable wrapper subclass must have __tensor_flatten__ method )maybe_unwrap_fake_script_objectz#expected Tensor or OpaqueBase, got )_tensor_symint_registryrS   Fr   storagera   r>   r_   ndimr]   r`   	is_mkldnnis_functorch_wrappedr   r   r   rk   rb   rc   is_parameterr$   	is_nested
nested_intis_functionalrd   devicer   ri   rj   dynamo_dynamic_indices_dynamo_dynamic_indicesdynamo_hint_overrides_dynamo_hint_overridesrf   re   rg   crow_indicesr   col_indicesccol_indicesrow_indicesvaluesrI   creation_meta	unwrappedlevelbdimrm   	fake_mode	view_funcattrsopaque_attrsctxr   functorch_stackautograd_meta_fromcurrent_levelr   rw   c                 :     j                  j                        S rC   r   r   s   r3   r   z5MetaTensorDescriber.describe_tensor.<locals>.<lambda>  r   r5   r   )XrA   rl   r`   rd   r   r$   r   r   r   r   r   rD   _is_functional_tensorr   r   untyped_storagerj   ri   rw   r   r   r   r?   _sync_from_functional_tensor_C$_functionalization_reapply_views_tlsr   
_functorchr   pyfunctorch#temporarily_clear_interpreter_stackhasattrrL   r   rT   ru   r"   "torch._library.fake_class_registryr   $torch.nested._internal.nested_tensorr   ViewFuncfrom_tensorrU   MetaTensorDescr   ra   r_   dimr]   rb   rc   r1   nn	Parameternoder   r   listr   rh   rf   re   rg   r}   r   r   r   r~   r   r   r   r   rJ   	_autograd_get_creation_metar   r   rn   _subclassesfake_tensormaybe_get_fake_moder   r   r   r!   r   )%r   r2   r   r   r>   rk   r`   rd   r   is_traceable_wrapper_subclass_vr   r   is_batchedtensor_vis_legacy_batchedtensor_vis_gradtrackingtensor_vr   r   rj   ri   r   r   r   reapply_viewsmaybe_functorch_stackr   r   r   type_v	raw_attrsattrinnerr   r   r   is_inference_mode_disabledrI   r   s%   `                                   @r3   rw   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 $  ,,PPR&
 *123$T  113NIsEL! 4('&*&:&:5&:&Nd (# .MU-ST* & ,A$u+O  !WFP((+	 &-S2JE%R"!/ k"
!!!$k"
k"
 #=!..BRk"
 	k"

 //k"
 k"
 ''k"
  k"
  k"
  "6!k"
" 0#k"
$ %>%k"
& #:'k"
( )k"
* IIK+k"
, 88:-k"
. $Auxx'9'9:/k"
0 +J1k"
2  3k"
8 // (*//::<;k"
> (?k"
@ Ak"
B 88Ck"
D Ek"
F Gk"
J *Kk"
L $(3Lce(T#UMk"
N #*!-Er"JOk"
R #$++1Ea1HdSk"
V (){{6J16MakkmSWWk"
X ./[[)dYk"
d qxxE,<,<e>N>N+OO $$Q^^%5uE$Rgk"
n qxxE,<,<e>N>N+OO $$Q]]_e5$Qqk"
x qxxE,<,<e>N>N+OO $$Q^^%5uE$R{k"
B qxxE,<,<e>N>N+OO $$Q]]_e5$QEk"
L 3A6 $$QXXZe$LOk"
V &aL(D5 $$T$7Yk"
^ =>JJL""55a8d_k"
b  ck"
h &)@  "kk"
n '9"dok"
t qzz|0C $$QWWE$:wk"
z ''33GGJ{k"
|  }k"
@ Ak"
B *64Ck"
D Ek"
F Gk"
N 2Ok"
P  2Qk"
R (Sk"
T nn$Uk"
X QTT!4!44!6 ##ADD)w s   4^??_	Nr   boolrs   rt   )r2   rr   rs   r   )r   torch.UntypedStoragers   r   )r   r  r   r  rs   r   )r2   rr   r   r  r   r  rs   r7   )	__name__
__module____qualname____doc__r   r   r   r   rw   r   r5   r3   rv   rv      sn     -2 /%& 9>%15	& 37ell+/l?Cl	lr5   rv   )frozenc                  4    e Zd ZU ded<   ded<   ded<   d	dZy)
r   r   r   intr   torch.UntypedStorage | Noner   c                    | j                   |t        | j                  t              r| j                  dS t	        | j                        dS )N)r   describer_idr   )r   r1   r   r  repr)r   r  s     r3   r   zMetaStorageDesc.as_json  sC    ''(!+DIIs!;DII
 	
 BFdii
 	
r5   Nr  r   rs   zdict[str, object])r  r  r  __annotations__r   r   r5   r3   r   r   
  s    
I &%
r5   r   c                  H    e Zd Ze	 	 d	 	 	 	 	 	 	 	 	 dd       Zedd       Zy)r   Nc                     y rC   r   r   r2   new_basesymint_visitor_fntensor_visitor_fns        r3   applyzViewFunc.apply  s     r5   c                V    t        |       r
t               S t        | j                        S rC   )r4   _FakeTensorViewFunc_CustomViewFunc_view_func_unsafer@   s    r3   r   zViewFunc.from_tensor%  s$    1&(("1#6#677r5   NN)
r2   r9   r  r9   r  Callable[[int], int] | Noner  )Callable[[torch.Tensor], _TensorT] | Noners   r9   )r2   rr   rs   zViewFunc[Any])r  r  r  r   r   staticmethodr   r   r5   r3   r   r     sa    
 :>GK  7	
 E 
  8 8r5   r   c                  6    e Zd Ze	 	 d	 	 	 	 	 	 	 	 	 dd       Zy)r"  Nc                n    t         j                  j                  j                  j	                  ||||      S rC   )rD   r   r   r*   r$  r  s        r3   r   z_FakeTensorViewFunc.apply/  s5       ,,77II
 	
r5   r%  )
r2   rr   r  rr   r  r&  r  z+Callable[[torch.Tensor], FakeTensor] | Noners   r*   )r  r  r  r   r   r   r5   r3   r"  r"  -  sM    
 :>IM

 
 7	

 G
 

 
r5   r"  r*   c                  B    e Zd ZU ded<   e	 	 d	 	 	 	 	 	 	 	 	 dd       Zy)r#  zjCallable[[torch.Tensor, Callable[[int], int] | None, Callable[[torch.Tensor], _TensorT] | None], _TensorT]funcNc                (    | j                  |||      S rC   )r,  r  s        r3   r   z_CustomViewFunc.applyK  s     yy#46GHHr5   r%  )
r2   rr   r  rr   r  r&  r  r'  rs   r9   )r  r  r  r  r   r   r   r5   r3   r#  r#  @  s`      
 :>GKII I 7	I
 EI 
I Ir5   r#  c                       e Zd Z	 	 	 	 	 	 ddZy)_MetaTensorCallbackc                   y rC   r   )r   argr   s      r3   __call__z_MetaTensorCallback.__call__]  s    r5   N)r1  Callable[[], torch.Tensor]r   torch.device | strrs   r;   r  r  r  r2  r   r5   r3   r/  r/  \  s    -=O	r5   r/  c                      e Zd ZU ded<   y)_MetaTensorCallbackKwargsr4  r   N)r  r  r  r  r   r5   r3   r7  r7  b  s    r5   r7  )totalc                       e Zd Z	 	 	 	 	 	 ddZy)_MetaTensorCallbackOptDevicec                    y rC   r   )r   r1  kwargss      r3   r2  z%_MetaTensorCallbackOptDevice.__call__k  s    
 r5   N)r1  r3  r<  z!Unpack[_MetaTensorCallbackKwargs]rs   r;   r5  r   r5   r3   r:  r:  j  s#    ' 4	
 
r5   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<   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d0ed1<   dZd0ed2<   dZ d0ed3<   dZ!d0ed4<   dZ"d0ed5<   dZ#d0ed6<   dZ$ded7<   dZ%d0ed8<   dZ&d9ed:<   dZ'd;ed<<   dZ(d=ed><   dZ)d0ed?<   h d@Z*dAedB<   dZ+dCedD<   dZ,dEedF<   dZ-dGedH<   dZ.dIedJ<   dZ/dedK<   dZ0dedL<   dZ1dMedN<   dZ2dOedP<   dZ3dOedQ<   dTdRZ4e5dUdS       Z6y)Vr   r   r   r  r   torch.dtyper]   ztorch.devicer   tuple[int, ...]r   z	list[int]r   zdict[int, int]r   torch.layoutrd   Fr  ra   r>   r_   r`   r   r   r   r   r   rk   r   Nz
int | Noner   r$   r   rb   rc   r   tuple[int, ...] | Noneri   r   rj   zMetaStorageDesc | Noner   rf   re   zbool | Nonerg   zMetaTensorDesc[Any] | Noner   r   r   r   r   r   r   rm   z%dict[str, MetaTensorDesc[Any]] | Noner   zdict[str, OpaqueBase] | Noner   zCreationMeta | Noner   rI   >
   r   r   r   r   r   r   r   r   r   r   zClassVar[set[str]]_UNSERIALIZABLEzobject | Noner   ztype | Noner   zFakeTensorMode | Noner   zViewFunc[Any] | Noner   r   r   zlist[CInterpreter] | Noner   torch.Tensor | Noner   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   )r   rB  r  r1   rD   r   r]   rd   SymInttupler   r   r   r   strdictitems)kvv1k1jsons       r3   rO  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  )rK  rH  rL  objectrs   rP  )dataclassesfieldsrT   namedefaultupdate)r   r  fieldr   rO  s       @r3   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 rC   )r   r   s    r3   r^   zMetaTensorDesc.shape
  s    yyr5   r  )rs   r?  )7r  r  r  r  rD   stridedrd   ra   r>   r_   r`   r   r   r   r   r   rk   r   r   r$   r   rb   rc   r   ri   rj   r   rf   re   rg   r   r   r   r   r   r   r   rm   r   r   r   rI   rB  r   r   r   r   r   r   r   r   r   r   propertyr^   r   r5   r3   r   r   s  sG   
I %%)) ==FL(L$GTM4ItIt!&$&"d"$)T)"'4'GTIt "J
!*/!4/M4GTFDL$%)F")NC
 '+G#*!J
! Iz  $L+$/3L,3.2K+2/3L,3.2K+2)-F&-,0I)0D*'+D
$+37E07 	 .  *.M&-'+D
$++O'  CD+'+I$+&*I#* E: $M:$15O.5.2+2
 !%D
$"H  r5   r   c                ^    t        |      t        j                  ury | j                  |       y rC   )r   rD   ru   copy_)dstsrcs     r3   
_safe_copyr_    s     Cy$IIcNr5   c                Z    t        |       t        j                  ury | j                         S rC   )r   rD   ru   clone)r^  s    r3   _safe_clonerb  !  s!    Cy$99;r5   c                <   ddl mm} 	 	 	 	 	 	 dfd}t        |       sy || |      syt        | |      rd|j                  y| j
                  j                         D ]:  \  }}||j                  vr yt        |      s# |||j                  |         r: y y)a  Check if a symbolic_context is compatible with a grad tensor.

    Returns False when the view base structure in symbolic_context doesn't
    match the grad, which means we need a fresh symbolic context.  This
    happens in FSDP2 where param._local_tensor is a view of an N-D padded
    base while grad._local_tensor is a view of a 1-D flat gradient buffer.

    We check at both the outer level and the inner (subclass attr) level.
    r   )StatelessSymbolicContextSubclassSymbolicContextc                    | j                   }|j                  r|y|j                  s|y|j                  rG|Et        |      r9|j                  -t	        |j
                        |j                  j                  k7  ryy)NFT)view_base_contextrk   r1   rm   lendynamic_sizesr   )r   grad_tvbcrd  s      r3   _view_base_compatiblez7_grad_context_compatible.<locals>._view_base_compatible9  sp     ##>>ck~~#/NN3 89'C%%&&++*:*::r5   TF)r   z"StatelessSymbolicContext[Any, Any]rj  MetaTensorDesc[torch.Tensor]rs   r  )%torch.fx.experimental.symbolic_shapesrd  re  r1   r   inner_contextsrJ  )symbolic_context	grad_descre  rl  r  	inner_ctxrd  s         @r3   _grad_context_compatiblers  '  s    
/, 
& &(@A !!19= "$;<??"/>>DDF 	OD)9??*3+Iyt7LM	 r5   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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   rv   	describerr   s     r3   r   zMetaConverter.__init__j  sa     '') 	 '') 	 	
 #,yAr5   c                B    | j                   dkD  xr | j                  dk(  S )Nr   )r{  r|  rX  s    r3   
successfulzMetaConverter.successful  s    xx!|.		Q.r5   c                N    | j                   j                  |j                  d       S rC   )rz  getr   r   s     r3   get_tensor_memozMetaConverter.get_tensor_memo  s    ##ADD$//r5   c                    | j                   j                  |j                  d       }|t        d|j                   d      |S )NzTensor memo for id z is None)rz  r  r   rL   )r   r2   r   s      r3   _checked_get_tensor_memoz&MetaConverter._checked_get_tensor_memo  sA      t,9 #6qttfH!EFFr5   c                6    || j                   |j                  <   y rC   )rz  r   )r   r2   rL  s      r3   set_tensor_memozMetaConverter.set_tensor_memo  s    !"r5   c                N    | j                   j                  |j                  d       S rC   )ry  r  r   r   s     r3   get_storage_memozMetaConverter.get_storage_memo  s      $$QTT400r5   c                6    || j                   |j                  <   y rC   )ry  r   )r   r   rL  s      r3   set_storage_memozMetaConverter.set_storage_memo  s    "#!$$r5   c                   | j                        x} |fd      j                         }| j                  rkt        j                         5  t               5  j                  t        d      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r]   r   )rD   emptyr   uint8)r   s   r3   r   z,MetaConverter.meta_storage.<locals>.<lambda>  s    AFF%++fM r5   z.s.data must not be None when copy_data is True)r  r   r   rD   no_gradr#   r   rL   r   ra  r  )r   r   callbackmemor_ss    `   r3   meta_storagezMetaConverter.meta_storage  s     ))!,,D5Mo  ~~ ]]_ ;km ;vv~,L  &c166<<>:; ; !!!S)JK; ; ; ;s$   C<B;C;C	 CCc                6    t        j                  t        |      S rC   )typingcastr9   )clsr2   s     r3   _checked_cast_tensor_tz$MetaConverter._checked_cast_tensor_t  s     {{8Q''r5   Nc                .    | j                   |             S rC   )r  )r  r2   r   s      r3   _identity_callablez MetaConverter._identity_callable  s     ))!#..r5   c                    t         j                  j                  j                  dd      } ||      }t	        j
                  t        |      S )Nz9Internal error: Tried to backward() through example inputr   )rD   r   
_functionsDelayedErrorr  r  r9   )r  r2   errfnerrs       r3   _backward_errorzMetaConverter._backward_error  s>    ##00G
 Ah{{8S))r5   c           
     @   ddl m} ddlm}	 |j                  | j                  |||||      S i }
|j                  j                         D ]  \  }}d }|t        ||	      st        dt        |             ||j                  vrt        d|d      |j                  |   x}	 8t        t        j                  j                  j                  j                   |      } |||      }t#        j$                  ||j&                        }| j)                  ||j*                  |j,                  ||||      }||
|<    |j.                  r|
j1                  |j.                         |j                  t        d      |j                  j3                  |
|j4                  ||      S )	Nr   
AttrSourcere  z&Expected SubclassSymbolicContext, got ztensor attr z missing from inner_contextsr   $t.type must not be None for subclass)torch._dynamo.sourcer  rn  re  r   meta_tensorrJ  r1   rL   r   ro  r   rD   fxexperimentalsymbolic_shapesr-   	functoolspartialr   _empty_create_subclassr   ri   r   rU  __tensor_unflatten__r   )r   r2   
outer_sizeouter_stride	shape_envrp  r  sourcer  re  inner_tensorsr  meta_tensor_desccurrent_contextcurrent_context_current_sourceinner_callbacknew_empty_tensors                     r3   r  z$MetaConverter._empty_create_subclass  s    	4Q 77?##   ?A&'ggmmo 	3"D""O+!"24KL(@FVAW@XY  />>>(&th.JK  )9(G(G(MM$ '4--==MM('O
 (5N&..x@P@W@WXN#::  %% ''  #3M$=	3B >>  066> !GHHvv**155*l
 	
r5   c                %   "#$%&'()*+, t        j                  |j                        &$ddlm}  |dt         j                               d}t        j                  j                         j                  t        j                  j                  j                        rt        |       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%                        0d"t        j&                  j(                        5  j*                  rYj,                  }
 &fd      } j.                  rwj0                  t        d      t        j2                         5  t5               5  t7        |      st        d      t9        j0                        |_        d d d        d d d        t=        |      st        d      |j?                  tA        jB                               jD                  rd|_"        jD                  rN|
sK jG                  |jI                               }t        jJ                         5  |j?                  tA        jB                               d d d        ntM        jN                        r(j,                  }
jN                  t        jP                  t        jR                  hv rjT                  t        d      jV                  t        d      jX                  t        d      jZ                  jT                  z
  jV                  z
  }jX                  j\                  |dz   |dz    %nd%jN                  t        j^                  t        jP                  hv r.j`                  t        d      j`                  jb                  (n-jd                  t        d      jd                  jb                  ( &%(fd      } j.                  rwj0                  t        d      t        j2                         5  t5               5  t7        |      st        d      t9        j0                        |_        d d d        d d d        t=        |      st        d      jD                  rd|_"        jD                  
r|

s jg                  |      }
njh                  r)jj                  sddl6m7}  |dtq              dg        
nvjr                  roj,                  }
 ,      \  *+} &*+fd      } j.                  rt        j2                         5  t5               5  jt                  t        d      jv                  t        d       t7        |      st        d      t        jx                  jt                  jv                  jb                  j                  !      |_        j0                  t        d      t{        |j:                  j0                         d d d        d d d        t=        |      st        d      jD                  rd|_"        jD                  	r|
	s jg                  |      }nj|                  r=j~                  rddl6m7}  |d"tq              dg        d@"#& fd## #      }nj                  rj                  j                  d$vrj                  t        d%      j|                  rt        d&       j                  j                  &      } jG                  t        j                  |            }t        j                  j                  |       nj~                  r j                  t        d'      d }rCAdd(lHmI} t        |      st        d)t                     j                  j                  }rj                         nt        j                          5   j                  j                  &t        j                  j                  j                  d*      |      }d d d        	 	 	 	 	 	 dAd+}t        j                  j                  t        j                  j                  j                        }t        j                  j                  t        j                  j                  j                  d,       	 jb                  jb                  k(  rn ||jb                  jb                        r% jG                  t        j                  |            }nl |jb                  |jb                        r% jG                  t        j                  |            }n* jG                  |j                  jb                              }j,                  r8t        j2                         5   |	|      }d d d        jD                  _"        nj                  jD                  jD                  k(  r't        jJ                         5   |	|      }d d d        njD                  st        d-      t        j2                         5  t               5   jG                  |j                  |j\                              }d d d        d d d        jD                  _"        t        jJ                         5   |	|      }d d d        j                  t        d.      t        j                  j                  j                  j                         t        j                  j                  t        j                  j                  j                  |       j                  |_Z        nj,                  }
j                  sj                  sj|                  sj                  rt        cd d d        S  ,      \  *+}jj                  r '*+/      }n &*+fd0      } j.                  rt        j2                         5  t5               5  jt                  t        d      jv                  t        d       t7        |      st        d      t        jx                  jt                  jv                  jb                  j                  !      |_        t{        |j:                  j0                         d d d        d d d        t=        |      st        d      jD                  r$jD                  |_"        |
s jg                  |      }j                  }|t        d1      |j                   j                  vr|jh                  s&|jw                         +k(  r|j                         |k(  r j                  ||j                                 j.                  rt7        |      st        d      |j:                  t        d2      t        |j                         |j:                  j                                nR j                  |&3      }t        j                          }dd4lgmh}mi}  ||      }| ||      }t        j2                         5   )       5  |5  |j                  ||*+       d d d         j.                  rt        j2                         5  t5               5  t7        |      st        d      |j:                  t        d2      jv                  t        d       |j:                  j                  t        |      j                  jt                  jv                         d d d        d d d        d d d        d d d        j                  ddd5lmO}  |d6      }}-+t        j                        s $j                  |&      } j                  j                  &||      _l        t        j                  j                  j                         t        j                  j                  |j                         d d d        j                  xr j                  "k(  } t        t        d| 7       dd8lHmu}! j                  > |!j                  jt                  dk(        r|j                         j                  d       j                  rd|_x        j                  At7        |      st        d9      |j                  j                  j                  :      |_|         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   ixY w# 1 sw Y   nxY w# 1 sw Y   	Nx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   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   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   YxY w)BNr  r   )ConstantSource__meta_utils_unknown_tensora   This indicates you set no_dispatch() before calling into this function.  This is an error: we may be creating fake tensors and will perform operations on them which need fake tensor mode to be active.  You will segfault if you are in a no_dispatch() block.r   c           
     V  	 ddl m	 | j                  t        d      
`| j                  }t        	fd| j                  D              xs2 t        	fd| j                  D              xs  	| j                        }|1|j                  
u r#| j                  | j                  | j                  fS |'|s%|#| 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}||| j                        S | j                  | j                  | j                  fS c c}w )	Nr   )is_symbolict.stride must not be Nonec              3  .   K   | ]  } |        y wrC   r   ).0szr  s     r3   	<genexpr>zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>T  s     9BB9   c              3  .   K   | ]  } |        y wrC   r   )r  sdr  s     r3   r  zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>U  s     >r;r?>r  c              3  @   K   | ]  }j                  |        y wrC   #_maybe_specialize_sym_int_with_hint)r  r  r  s     r3   r  zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>d  s$      # "EEbI#   c              3  @   K   | ]  }j                  |        y wrC   r  )r  r  r  s     r3   r  zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>h  s$      % "EEbI%r  )rp  hint_overrides)rn  r  ri   rL   r   anyr   rj   r  rG  r  -_create_symbolic_sizes_strides_storage_offsetranger   r   r   )r2   r^  rp  r   has_symbolict_sizet_stridet_storage_offsetdr  r  s            @r3    sym_sizes_strides_storage_offsetzCMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offsetE  s    Jxx$%@AA$KK	9!&&99 5>QXX>>5"1#3#34 
 (Y-@-@I-M FFAHHa.>.>??)((0FFAHHa.>.>?? # #"#&&# F  % %"#((%  H (1'T'T((($ %RR (@EaffN1a666N)9'('>'> S   !*:*:;; Os   F&c                f     | ||      \  }}}t        j                  ||| j                  d      S r  rD   empty_stridedr]   )inner_t	inner_srcrp  inner_sizesinner_strides_inner_storage_offsetr  s         r3   empty_createz/MetaConverter.meta_tensor.<locals>.empty_create{  sC     1)EUV	%&&mm	 r5   c           	     .   ddl m} | j                  t        d      | j                  t        d      ||n| j
                  }||n| j                  }|#t        ||      st        dt	        |             |t        d      j                  | ||	||      }|j                  |k7  r(t        d| j                   d| d	|j                         |j                         |k7  r,t        d| j                   d
| d	|j                                |S )Nr   r  %t.attrs must not be None for subclassr  z.Expected SubclassSymbolicContext or None, got zsource must not be NonezExpected return value from z.__tensor_unflatten__() to have shape equal to z, but got: z/__tensor_unflatten__() to have stride equal to )
rn  re  r   rL   r   r   ri   r1   r  r^   )
r2   r  r  rp  r  re  subr  r   r  s
          r3   empty_create_subclassz8MetaConverter.meta_tensor.<locals>.empty_create_subclass  sK    Vww$%LMMvv~$%KLL (2'=166J+7+C<L+J "95 %DTJZE[D\]  ~$%>??-- 
C yyJ&$1!&& :&&0\SYYKI  zz||+$1!&& :''3nK

~O 
 Jr5   c                P   ddl m} ddlm}m}m} d }| j                  r3| j                  t        d       | j                   ||d      ||      }|j                  g| j                  z  }	| j                  r| j                  t        d      i }
| j                  j                         D ]A  \  }}t        |t              st        dt!        |              | |||      ||      |
|<   C  ||	d g| j                  z  |
||      }|S  ||	d g| j                  z  |	      }|S )
Nr   r  )
DimDynamicrd  re  't.base must not be None for view tensorrn   r  zExpected attr to be str, got )ri  constraint_sizesro  tensor_sourcerg  )ri  r  rg  )r  r  rn  r  rd  re  rk   rm   rL   DYNAMICr   r$   r   rJ  r1   rH  r   )r2   r  r  r  r  r  rd  re  rg  t_dynamic_sizesro  r  r  t_symbolic_contextall_dynamic_symbolic_contexts                 r3   r  z?MetaConverter.meta_tensor.<locals>.all_dynamic_symbolic_context  sV    8    yy66>()RSS$@FFJvw7H%!
  *112QVV;O..77?()PQQ   $%77==? KD%%dC0,;DJ<H  ,Hz&$7H,N4( &="1&*Vaff_#1"(&7&" &% &>"1&*Vaff_&7&" &%r5   c           	        t               5   |      \  }}}|j                  sGt        |       s<        5  j                  | j                  |||            cd d d        cd d d        S ddlm ddlmm} d
fd}i |j                  r|j                  t        d      |j                  t        d       |||      }|j                         \  }	}
|	D ]7  }||j                  v st        ||      |j                  |   j                  <   9 f	 	 	 	 	 	 	 dfd}|j                  t        d	      |j                  j!                  || ||      }t#        j$                   ||j'                         |             t#        j$                   ||j)                         |             t#        j$                   ||j+                         |             |cd d d        S # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   )EphemeralSource)rd  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rC   )STATIC)r  xr  s     r3   r  z_MetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fn.<locals>.<genexpr>N  s$        ! !2!22 s   r  )positive)hintr  )rn  r  r1   allri  create_symbolcreate_symintnode)	r   all_static_sizes
sym_sourcesymbolr  r  rd  r  rp  s	       @r3   r  zLMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fnG  s    P )4 &'79QR  %5%C%C   % (9+<  "11D!EJ&44Q
T4RF$66Qz 7  r5   r  r  r  r  c                    | y 
j                   j                  |       }	j                  |      }||S 
j                   j                  |       } d      }
j	                  |||| ||||            S )Nr  )r  r   r  rw   r  )	visited_tr  r  
visited_idfake_visited_tvisited_desctemp_sourcer  r  real_to_fake_mappingr   s          r3   r  zLMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.tensor_visitor_fn  s     !(# "&!=!=i!HJ%9%=%=j%IN%1--#'>>#A#A)#LL #22E"FK++$! #4(+y( r5   z,t.view_func must not be None for view replay)r   r  rs   r.   )r  rr   r  5torch.fx.experimental.symbolic_shapes.ShapeEnv | Noner  &_MetaTensorCallbackOptDevice[_TensorT]rs   rr   )r    r$   r  
as_stridedr  r  rn  rd  r  r   rL   r   r   rT   r   r   r   rD   _checkr   ri   rj   )rm   r2   r  sizesstridesrj   r  r  fake_tr   _r  r  r  rd  r  r  r  r  maybe_suppressr   r  r  rp  s     `          @@@r3   view_from_basez1MetaConverter.meta_tensor.<locals>.view_from_base*  s    *+ O3Sv40 779$?
 () #:: OOE7NK  O O" A
 < (*$22ww,-TUU vv~,-STT (=e'(F  &88:HE1 % 177?EL &F01A1AB 'GO'+' 	' E' "' 'V ;;&()WXX **%% VFKKM59:VFMMOW=>VF$9$9$;^LM_O O O Os0   ,G<"G/	G<1BG<6C/G</G9	4G<<Hc                     t         j                  j                  j                   j                   j
                   j                   j                  t         j                  d      S )Nr  )r]   rd   r   )	rD   opsaten_sparse_coo_tensor_with_dimsrf   re   r   r]   rz   r@   s   r3   r   z+MetaConverter.meta_tensor.<locals>.<lambda>  sH    		 K KLLKKFF"#''#(#3#3#) !L ! r5   .t.data must not be None when copy_data is TruezExpected r to be a FakeTensorz)the callback you passed in doesn't detachTz5t.sparse_dim must not be None for sparse block layoutz4t.dense_dim must not be None for sparse block layoutz1t.values must not be None for sparse block layout   r   z9t.crow_indices must not be None for sparse csr/bsr layoutz9t.ccol_indices must not be None for sparse csc/bsc layoutc            
         t         j                  j                  j                  dj                  j
                   j                  j                  d      S )Nr   r  )rd   r]   r   )rD   r  r  #_sparse_compressed_tensor_with_dimsre   r^   rd   r]   )	blocksizeindex_dtyper2   s   r3   r   z+MetaConverter.meta_tensor.<locals>.<lambda>  sH    		 R RKKGG%'#$88"#''#) !S 	! r5   )unimplementedz;attempted to apply meta conversion to strided nested tensorzThis is not supported.)gb_typecontextexplanationhintsc                 J    t        j                   j                  d      S r  r  r  r  r2   s   r3   r   z+MetaConverter.meta_tensor.<locals>.<lambda>K  s     3 3!7!''&! r5   z.t.size must not be None when copy_data is Truez0t.stride must not be None when copy_data is Truer  z;attempted to apply meta conversion to view functorch tensorc                     j                   rɉ j                  t        d       j                  t        d       j                  t        d       
 j                        } j                  } j                  }t
        j                  j                  j                   j                        5  j                  t        |||            }d d d        |S  j                  r@ j                  t        d       j                  t        d      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(                  rt j                  t        d       j*                  t        d      j-                   j                        }j                  t/        | j*                              }|S  j0                  t        d	       j2                   j0                    fd
      }j4                  rt        j6                         5  t9               5  t        j:                   j2                   j0                   j<                   j>                        |_          jB                  t        d      tE        |j@                   jB                         d d d        d d d        |S |S # 1 sw Y   S xY w# 1 sw Y   fxY w# 1 sw Y   xY w# 1 sw Y   <xY w# 1 sw Y   |S xY w)Nz.t.unwrapped must not be None for batchedtensorz*t.level must not be None for batchedtensorz)t.bdim must not be None for batchedtensorz3t.unwrapped must not be None for gradtrackingtensorz/t.level must not be None for gradtrackingtensorT2t.unwrapped must not be None for functional tensorz6t.current_level must not be None for functional tensorr  c                 J    t        j                   j                  d      S r  r  r$  s   r3   r   zDMetaConverter.meta_tensor.<locals>._to_fake_tensor.<locals>.<lambda>  s"    (;(;$)$+*+''+1	)" r5   r  r  )#r   r   rL   r   r   rD   r   r   %temporarily_restore_interpreter_stackr   r  r   r   r   _DisableFuncTorch_wrap_for_gradr>   r_   rA   r  r   r   r  r   ri   r   r   r  r#   r  r]   r   real_tensorr   r_  )r2   ftlvlr   r   disable_functorchr>   r  r  GRAD_TENSOR_SENTINEL_VALUE_to_fake_tensorr  r   r  r  rp  s   `      @@r3   r0  z2MetaConverter.meta_tensor.<locals>._to_fake_tensory  s    -- {{2&4$T'" !"  !ww&4$P'" !"  !vv~&4$O'" !" "1!=B"#''C#$66D
 "'!1!1!=!=!c!c ! 1 1" " %)$?$?$22tS$A%""n  !c 44 {{2&4$Y'" !"  !ww&4$U'" !" 160J0J-!2!4 B%4Q[[%AB"#''C"&@@$&%*%5%5%A%A%g%g$%$5$5&" !& )-(C(C(-(;(;(J(J2s(S)&A!& '(iiG <?26p  !o "#$($8$8$;l  !k __ {{2&4$X'" !"  !6&4$\'" !" "&!1!1 ! ) (
 !' 0
"B !% ; ; 7AOO L!AB  !9  !xx/&45P&Q Q$%FFE&'hhG (!"!A  $~~%*]]_ !Fkm !F494G4G()()./gg/0xx	5&AM ()vv~.<,\/* )* %/q}}aff$E!F !F  !qo"n  !OB B!& !&h!F !F !F  !sI   3N 6N-:N:OA>OO N*-N7:OO	OOr   r&  z0Expected non-functorch wrapped functional tensorr  )rd  z'Expected StatelessSymbolicContext, got rn   c                `    t        j                  |       xr t        j                  |       |k(  S rC   )utilsis_complex_dtypecorresponding_real_dtype)complex_dtype
real_dtypes     r3   	is_c_of_rz,MetaConverter.meta_tensor.<locals>.is_c_of_r*  s2     "22=A * % > >} M)!*r5   Fz.t.requires_grad must be True for non-leaf viewz0t.creation_meta must not be None for view tensorr  c                 J    t        j                   j                  d      S r  r  r$  s   r3   r   z+MetaConverter.meta_tensor.<locals>.<lambda>  s"    E$7$7 % '&'gg'-	% r5   zt.storage must not be Nonez5r.real_tensor must not be None when copy_data is True)r  )in_kernel_invocation_managerr   r  rI   rX   )guard_or_falsez,Expected r to be a FakeTensor for nested int)nt_tensor_id)r2   r7   r^  torch._guards.Sourcerp  <torch.fx.experimental.symbolic_shapes.SymbolicContext | Noners   zDtuple[tuple[IntLikeType, ...], tuple[IntLikeType, ...], IntLikeType])r  r7   r  r<  rp  r=  rs   rr   )r2   r7   r  tuple[IntLikeType, ...]r  r>  rp  r=  r  ztorch._guards.Source | Noners   r9   )
r2   r7   r  r<  r  r	  r  _MetaTensorCallback[_TensorT]rs   5torch.fx.experimental.symbolic_shapes.SymbolicContext)rm   r9   r2   r7   r  r	  rs   r9   r2   r7   rs   r9   )r5  r>  r6  r>  rs   r  )r  r  r   r  r  rh  rz  rD   r   _dispatch_tls_local_exclude_sethasDispatchKeyPythonrL   r~  
contextlibnullcontextsuppress_guardsr  inference_modera   r`   r>   r   r   r  r#   r4   rb  r+  rA   _coalesced_r  rg   r_   r  ra  enable_gradr   rd   r   r   rf   re   r   r   r^   r}   r   r]   r   r  r   r$   torch._dynamo.excr  rH  r   r   ri   r  r_  r   rk   r   r   r   r  _to_functional_tensor_mirror_autograd_meta_tor   rm   rn  rd  r1   rg  ignore_fresh_unbacked_symbols_dynamor  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_metafake_devicer   r   r   NotImplementedr   r   ry  rj   r  r   r   r  r0   r9  r   set_r   rI   rs  	_set_conjrb   _set_negrc   r   rx   rQ   r:  resize_r   	_is_paramr   r   create_symbolic_nested_intnested_int_memor  r  )-r   r2   r  	callback_r  rp  r  msgr  r  r>   r   	batch_dimr  _storage_offsetr   base_symbolic_contextrd  rm   r7  old_excludemidrj   r   r  maybe_fake_mgrr9  r   mb_fake_moder  grad_sourcegrad_symbolic_contextrZ   r:  r/  r0  r  r  r  r  r  r  r  r  r  s-   ``` ``                            @@@@@@@@@@@r3   r  zMetaConverter.meta_tensor  s*    <E;L;Lahh<
 >; $-c$2B2B.C-DEF
R 	 8833599%((:N:N:U:UV %%4 -7,B,B &66N &	4	<"4	<%4	<4	<
 R4	<t &		(	+		
 	2 &28A	"A	/A	 2A		A	 0A	 A	N5	&"5	&(5	& M5	& 4	5	&
 C5	&p 	U	U	"U	U	
 U	 U	n "*)+&%%ann5 C
/;;iiG
 !	A ~~66>"0 P#  #]]_ @km @#21#5&45T&U U,7,?AM	@ @
 (?,G  MM$q~~"67*.w
 !77	B"..0 @MM$q~~*>?@ @0:iiGxxE$4$4e6F6F#GG<</"0 W#  ;;."0 V#  88+"0 S#  %&FFQ\\$9AKK$G	$%HHNN9q=9q=$Q	$&	xxE$4$4e6F6F#GG>>1"0 [#  '(nn&:&:>>1"0 [#  '(nn&:&: 	A ~~66>"0 P#  #]]_ @km @#21#5&45T&U U,7,?AM	@ @
 (?,G  *.w 003[[)H)H @ " ] #A$< 	 [[iiG
 9FC	' !A
 ~~"]]_ >km > vv~&4$T'" !"  !xx/&4$V'" !" $31#5&45T&U U,1,?,? !-AM  !vv~&4$T'" !" 'q}}aff='> >( (?,G  *.w 003++yyC%$a$'F(@"$	o! o!b (*A__o)M{{*,P  --,N  !% 0 0! (!I 3333I>A 2213G3GKYY vv~,-VWW,0) %5%A  **:<TU"0"I$O_J`Ia b#  ,==I4D4V4V1 % "??A'335
  $//FF%$!MM00;;FGL1 '2@K #((("Q"Q,,<<#K HHDD,,<<eK::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!@ !@ ()*8(X+& %& &+]]_ !&6N6P !&*.*E*E(,		$**(=+&C!& !& 56OO 1%*%6%6%8 !?(6sA(>A!?
 ??2"0 R#  **==aQHH!HH00@@+ %&HHAM  iiG //13J3J2222-eC
/ C
/p 9FDTU	&
 661%g %  >>!& B+- B#$66>*8(X+& %& $%88#3*8(Z+& %& (7q'9*8(G+& %& 160C0C$%FFAHHAGGAHH1" !+1==!&& A#B B& (?,G  *+//& !% 4 4Q 7A		Ay,-IJJtt4#4#44HHJ'1 ! 0 0 2n D --a1B1B1DE>>#21#5&45T&U U }}4&4$['" !" . ! 1 1 3Q]]5R5R5T #//H/E, '224 '
 (;1'='3-I,-WN"]]_ &n.> &!/ L !sNE7 KL#~~%*]]_ !&km !&+:1+=.<,K/* )* ()}}'<.<,c/* )* ()xx'7.<,^/* )* %&MM$6$6(9#(>()(8(8()()	%&!& !&	& &0 66%?",VV"<K,<) !,1A1M78H!&&Q4P !Y51
 "--! #-AF ""1aii0!!!QXX.GC
/L ''QAGG7Q,Q  y!QdiX Myy$		!8K)L!!#++A.~~" ||'&q)()WXX$%KK$J$J!" %K %!
   A&,,Q//[@ @ @ @.@ @j@ @ @ @R> > > >Z H< <!@ !@!& !& !& !&
!? !? HH!HH00@@+NB B B BJL L!& !& !& !&	& & & &]C
/ C
/s  4AAKAF!1AFAF!BAK,%AF.F0AKAG1AF;=AGCAK!AG",CAG.AG"6G%AKAAG/#BAK9C(AH=!
AG<+AAH=<
AH	4AH=:AH#+AH0AH#8-AH=%
AH0/AAH=BAK"AAK5AJ B+AJ+AJ3FAKAKAKAJ	'(AKAJ8	B
AJ+$AJ8	,AK4AK<CAKFAFFAF!F!AF+	F&AKF.AF8	F3AKF;AGG AGGAG	GAKGAGGAG"G"AG,	G'AKG/AG9	G4AKG<AH	HAH=H	AH	HAH=HAH HAH#H#AH-	H(AH=H0AH:	H5AH=H=AAJJAKJAJJ	AJJAJ	JAKJAJ(J#AKJ+AJ5J0AJ8	J8AKJ=AKKAKK
AKKAK	KAKKAK)T)r  r  rp  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t#        d      t%        d fd       t'        j(                         5 }|j+                  t        j,                  j.                  j1                                t3               }	|	7|j+                  t        j4                  j6                  j9                                 j;                  |||      }
d d d        t        |      t        j<                  j>                  u rd	
_         tC        |d
d      r$d	
_"        tG        |d      r|jH                  |
_$        
S # 1 sw Y   hxY w)Nr   r   Fr   z*source must not be None when trace is Truedescribe_sourcec                 `     j                   j                  j                  j                  dS )N)r  r   r  )r  r   rS  )r   r  t_descs   r3   r   z(MetaConverter.__call__.<locals>.<lambda>  s%    $(NN$5$5 ))$kk% r5   r   T
_is_buffer
persistent)%r  r1   rD   ru   r   r   is_quantizedrl   rn   r`   r|  rY  r{  	overridesis_tensor_liker  rw   rL   r!   rF  	ExitStackenter_context	_dispatchpythonsuspend_functionalizationr   r   r   r   r  r   r   r^  rT   rp  r   rq  )r   r2   r  r  r  rp  r   ra  
exit_stackstr   ro  s   `   `      @r3   r2  zMetaConverter.__call__j  s    //I I a& '  !''"5!'':K:K		Q	%%A__++A.IINI!! H>E ///?~$%QRR! !!# 	z$$U__%;%;%U%U%WX')B~(($$00TTV    A	  7ehh((( AK 1lE*ALq,' || =	 	s   	BI  I	r
  )rs   r  )r2   r7   rs   rC  rA  )r2   r7   rL  r9   rs   rt   )r   r   rs   r  )r   r   rL  r  rs   rt   )r   r   r  z0Callable[[Callable[[], torch.Tensor]], _TensorT]rs   r  )r2   rr   rs   r9   rC   )r2   r3  r   ztorch.device | str | Noners   r9   )r2   r9   rs   r9   )r2   r7   r  rA  r  rA  r  ShapeEnv | Nonerp  r=  r  r
  r  r<  rs   r9   )r2   r7   r  r|  ra  r?  r  Source | Nonerp  SymbolicContext | Noners   r9   )r2   rr   r  r|  r  z$_MetaTensorCallback[_TensorT] | Noner  r}  rp  r~  r   r  rs   r9   )r  r  r  r   r  r  r  r  r  r  r  classmethodr  r  r  r  r  r2  r   r5   r3   ru  ru  i  s   ,1 B*/0#1$ C 
	2 ( (  -1/%/ */ 
	/ / * *A
A
 +A
 -	A

 #A
 WA
 9A
 %A
 
A
R\0\0 #\0 1	\0
 \0 1\0 
\0B# &*g
 :> $37 gg #g
 7g g 1g g 
gr5   ru  )r2   rP  rs   zTypeIs[FakeTensor])r2   "MetaTensorDesc[Any] | torch.Tensorrs   r  )r2   r6   rs   z_TensorLikeT | None)r2   r6   rs   r6   )rO   r8   rP   r8   rs   rt   )rs   zGenerator[None, None, None])rQ   z Callable[[object, object], None]ro   r  rp   rr   rY   r  rZ   r  rs   rt   )r2   rP  rs   zTypeGuard[torch.Tensor])rd   r@  rs   r  )r   ztype[_T]r   rP  rs   r8   )rm   r  rs   r  )rm   r  r   r  rs   rt   )r]  rr   r^  rC  rs   rt   )r^  rr   rs   rC  )rp  r@  rq  rm  rs   r  )p
__future__r   rF  rQ  r  	threadingr  rw  abcr   r   r   r   r   r	   r
   r   r   r   r   r   typing_extensionsr   r   r   r   rD   torch._C._autogradr   torch._C._functorchr   r   r   r   r   r   r   r   r   r   r   torch._dispatch.pythonr    torch._loggingr!   torch._opaque_baser"   torch.utils._mode_utilsr#   torch.utils._python_dispatchr$   torch.utils.weakr%   collections.abcr&   r'   r(   torch._guardsr)   r0   r*   r+   rn  r,   r-   torch.typesr.   r4   r   DimListru   r6   r8   r9   r;   rA   rJ   rM   rQ   localrU   rS   rW   rx   r{   r   rh   r   r   r   r   r  r   r   r   r   rv   r   r   r"  r#  r/  r7  r:  r   r_  rb  rs  ru  torch._prims_common_prims_commonr2  r   r5   r3   <module>r     s   "        = !	 	 	 B A  +    < + ) / F 0 30$H
 P'% ~'<ellKT]:U\\2~U\\TJ,
 ioo #  + +  ;/;*; 	;
 ; ; 
;~HQ
7%
%.B%	% -~s+ ~s+ O c cL	 $
 
 
 $8wx  8 8$ $
(<0 
 
$ $Ihx('(*; I I6(GL$9 	 8W\-B  $XWX& X XN8K8+8 
8DhGH% hV+ $r5   