
    3j;                      S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SKJ
r
Jr  S SKJr  S SKJrJrJrJrJrJrJrJr  S SKJrJrJrJr  S SKrS SKJr  S S	KJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(  S S
K)J*r*  S SK+J,r,  S SK-J.r.  S SK/J0r0  S SK1J2r2  S SK3J4r4  \(       a*  S SK5J6r6J7r7  S SKJ8r8  S SK9J:r:  S SK;J<r<J=r=  S SK>J?r?J@r@  S SKAJBrB  SKS jrC\DrE\" SS\R                  5      rG\" S5      rH\" S\R                  S9rI\" S\R                  SS9rJSLS jrKSMS  jrLSNS! jrMSOS" jrN\R                  " 5       rPS#\PlQ        \SPS$ j5       rRS#S#S%.           SQS& jjrSSRS' jrTSSS( jrUSRS) jrVSRS* jrWSTS+ jrXSUS, jrY      SVS- jrZ\" S.\[5      r\\" S/\[5      r]\" S0\[5      r^\^" S 5      q_ " S1 S25      r`\" SS39 " S4 S55      5       ra\" SS39 " S6 S7\\I   5      5       rb\" SS39 " S8 S9\bS:   5      5       rc\" SS39 " S; S<\b\I   \\I   5      5       rd " S= S>\\\J   5      re " S? S@\S#SA9rf " SB SC\\\J   5      rg\" SS39 " SD SE\\I   5      5       rhSWSF jriSXSG jrj      SYSH jrk " SI SJ\\I   5      rlS SKmJnro  g)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                $    SSK Jn  [        X5      $ )Nr   )r*   )torch._subclasses.fake_tensorr*   
isinstance)tr*   s     V/home/wildlama/miniconda3/lib/python3.13/site-packages/torch/_subclasses/meta_utils.py_is_fake_tensorr4   =   s    8a$$    _TensorLikeTMetaTensorDesc[Any]_T_TensorT)bound_TensorT_covT)r:   	covariantc                <     U R                   $ ! [         a     gf = f)NF)is_leafRuntimeErrorr2   s    r3   safe_is_leafrA   J   s#    yy s    
c                    [         R                  R                  [         R                  R                  R                  5         U R
                  sS S S 5        $ ! , (       d  f       g = fN)torch_logginghide_warnings	_internalsafe_grad_filtergradr@   s    r3   	safe_gradrJ   R   s8    		%	%enn&>&>&O&O	Pvv 
Q	P	Ps   A
A&c                8    [        U 5      nUc  [        S5      eU$ )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                .    X:w  a  [        U  SU 35      eg )Nz != )rL   )abs     r3   	assert_eqrQ   _   s!    vs$qc]++ r5   Fc               #     #    [        [        SS5      n S[        l         S v   U [        l        g ! U [        l        f = f7f)Ndisable_inference_modeFT)getattrtlsrS   )priors    r3   $disable_inference_mode_for_fake_proprW   k   s4     C159E!%C+%*"U"s   A 0 A =A skip_symbolic	skip_leafc                  ^ ^^^ [        U[        R                  5      (       a  [        5       R	                  U5      OUnSU UUU4S jjmT" X5      $ )Nc                  > T" U R                   UR                   5        T(       d  T" U R                  UR                  5        T" U R                  UR                  5        T(       d  T" U R                  UR                  5        T" U R                  UR                  5        [        [        SS5      (       d"  T" U R                  UR                  5       5        OT" U R                  S5        T" U R                  UR                  5       5        T" U R                  UR                  5       5        T" U R                  S L[        U5      S L5        U R                  b  T" U R                  [        U5      5        U R                  (       a  T" U R                  UR                  5        T" U R                  UR                  5       5        T" U R                  UR                  5       5        T" U R                   UR!                  5       5        g [#        U 5      (       a`  T" U R                  UR                  5        T" U R                  UR                  5       5        T" U R                  UR                  5       5        g T(       dB  T" U R$                  UR%                  5       5        T" U R&                  UR'                  5       5        T" U R(                  UR+                  5       5        U R(                  (       aN  U R,                  c  [/        S5      eUR0                  c  [/        S5      eT" U R,                  UR0                  5        g g )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   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_eqry   u   sH     b%,,'' 	--b1 (& (&Z b:r5   c                |    [        U [        R                  5      =(       a    U R                  [        R                  L $ rC   )r1   rD   rv   rd   
sparse_coor@   s    r3   is_sparse_coor|      s'    a&G188u7G7G+GGr5   c                    U [         R                  [         R                  [         R                  [         R                  1;   $ rC   )rD   
sparse_csr
sparse_csc
sparse_bsr
sparse_bsc)rd   s    r3   is_sparse_compressed_layoutr      s8    	  r5   c                n    [        U [        R                  5      =(       a    [        U R                  5      $ rC   )r1   rD   rv   r   rd   r@   s    r3   rh   rh      s"    a&P+Fqxx+PPr5   c                <    [        U 5      =(       d    [        U 5      $ rC   )r|   rh   r@   s    r3   is_sparse_anyr      s    63A66r5   c                Z    [        X5      (       d  [        SU  S[        U5       35      eU$ )Nz	expected z	 but got )r1   rL   type)tyobjs     r3   _checked_castr      s.    cyId3i[ABBJr5   c                    U R                   $ rC   real_storage)rm   s    r3   _get_real_storager      s    r5   c                    Xl         g rC   r   )rm   r   s     r3   _set_real_storager      s
     %r5   MetaStorageIdMetaTensorId_DescriberIdc                  |    \ rS rSrSrSS.SS jjrSS jrSS jrSS.     SS	 jjrS
SS.       SS jjr	Sr
g)rw      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                  [         U l        [        [         S-   5      q [        S5      U l        [        S5      U l        [        5       U l        [        5       U l	        Xl
        [        5       U l        [        5       U l        g )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__MetaTensorDescriber.__init__   sb    #():Q)>?,8O.;A.>0213"(+),r5   c                    XR                   ;  a6  U R                  U R                   U'   [        U R                  S-   5      U l        U R                   U   $ Nr   )r   r   r   r   r2   s     r3   get_tensor_id!MetaTensorDescriber.get_tensor_id   sM    &&&$($7$7Dq!".t/B/BQ/F"GD!!!$$r5   c                    XR                   ;  a6  U R                  U R                   U'   [        U R                  S-   5      U l        U R                   U   $ r   )r   r   r   r   ss     r3   get_storage_id"MetaTensorDescriber.get_storage_id  sM    '''%)%9%9D"#01E1E1I#JD ""1%%r5   tracec               *  ^ ^ [        T R                  U5      UR                  5       T R                  (       a  UOS S9mU(       aN  TR                  T R
                  ;  a4  [        SUU 4S jS9  T R
                  R                  TR                  5        T$ )N)r   sizedatadescribe_storagec                 :   > T R                  TR                  5      $ rC   as_jsonr   rr   s   r3   <lambda>6MetaTensorDescriber.describe_storage.<locals>.<lambda>      AIIdgg$6r5   metadata_fn)MetaStorageDescr   r   r   r   r   r!   add)r   r   r   r   s   `  @r3   r   $MetaTensorDescriber.describe_storage	  sv     ""1% nn$
 QTT!5!55"6   $$QTT*r5   Trecurser   c                 ^ ^$ [        U5      nUR                  5       nUR                  nUR                  nUR                  n[        U5      n	[        U5      n
UR                  n[        U5      n[        U5      n[        U5      n[        R                  " U5      nS nSnU(       da  [        U5      (       dQ  U(       a  U	(       aC  U(       d<  U
(       d5  U(       d.  T R                  UR                  5       US9nUR!                  5       nS nU(       d.  [        U5      (       d  U(       a  U	(       a  UR#                  5       nS nS nS nU(       d  U(       a  T R%                  ['        U5      US9nOU(       a  UR(                  R*                  S;  a  UR                  5       (       a  [-        S5      eU
(       d=  [        R.                  " U5        T R%                  [        R0                  " U5      US9nUnO`[        R2                  R5                  5       nT R%                  [7        UU5      US9n[        R2                  R8                  R;                  5       nS nU
(       a2  [        R8                  R<                  R?                  5        n S S S 5        S nS nS nS nU	(       a  [A        US5      (       d  [C        S5      eURE                  5       u  nn0 n0 nU Ht  n[G        UU5      nU=[        RH                  S` =b  u     T R%                  UUS9UU'   M=    [J        S` =b  u   SSK&J'n  U" U5      UU'   M]     [C        S	[+        U5       35      e   [+        U5      nSS
K(J)n   [T        RW                  U5      n![G        [X        SS5      n"[[        S0 ST R]                  U5      _SU_SU"(       a  SOUR_                  5       _SU_SUR`                  _SURc                  5       _SURd                  _SU_SU_SU
_SU_SU_SU_SU_SURg                  5       _SURi                  5       _S[k        U[        Rl                  Rn                  5      _SU	_SU_S UU ;   a  U U   Rp                  Rs                  5       OS _S!U_S"U_S#UR(                  _S$URu                  5       _S%U_S&U_S'[w        [G        US([y        5       5      5      _S)[G        US*0 5      _S+UR                  (       d  [{        U5      (       a  UR}                  5       OS _S,UR                  (       d  [{        U5      (       a  UR                  5       OS _S-UR                  (       a  UR                  5       OS _S.U(       aM  UR                  [        R                  [        R                  1;   a  T R%                  UR                  5       SUS/9OS _S0U(       aM  UR                  [        R                  [        R                  1;   a  T R%                  UR                  5       SUS/9OS _S1U(       aM  UR                  [        R                  [        R                  1;   a  T R%                  UR                  5       SUS/9OS _S2U(       aM  UR                  [        R                  [        R                  1;   a  T R%                  UR                  5       SUS/9OS _S3U(       a/  [{        U5      (       a  T R%                  UR                  5       SUS/9OS _S4[        U5      =n#b  T R%                  U#US9OS _S5UR                  5       (       a)  [        R2                  R                  R                  U5      OS _S6U_S7U(       d  U(       a  [        U5      OS _S8U(       a  [        U5      OS _S9U(       a<  UR                  5       (       a'  UR                  b  T R%                  UR                  US9OS _S:[        R                  R                  R                  U5      _S;U!_S<U_S=U(       a  UOS _S>U_S?U_S@U_SAU_SBU_SCT R                  (       a  UOS _6m$U(       aN  T$R                  T R                  ;  a4  [        SDU$U 4SE jSF9  T R                  R                  T$R                  5        T$$ ! , (       d  f       GN= f)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   rx   c                 :   > T R                  TR                  5      $ rC   r   r   s   r3   r   5MetaTensorDescriber.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   rx   r   r   r   r?   _sync_from_functional_tensor_C$_functionalization_reapply_views_tlsr   
_functorchr   pyfunctorch#temporarily_clear_interpreter_stackhasattrrL   r   rT   rv   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   rx   #MetaTensorDescriber.describe_tensor  s    q/**,KK	KK	*G*J':1=KK	-a0$;A$>!"7":33A6 *622"A $( ++A,=,=,?u+MG--/N*62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& S *123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 #$++1Ea1H1HdSk"
V (){{6J16M6MakkmSWW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6 $$QXXZe$LOk"
V &aL(D5 $$T$7Yk"
^ =>JJLL""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)u SRs   a99
b)r   r   r   r   r   r   r   r   Nr   boolrt   ru   )r2   rs   rt   r   )r   torch.UntypedStoragert   r   )r   r  r   r  rt   r   )r2   rs   r   r  r   r  rt   r7   )__name__
__module____qualname____firstlineno____doc__r   r   r   r   rx   __static_attributes__r   r5   r3   rw   rw      st     -2 /%& 9>%15	& 37ell+/l?Cl	l lr5   rw   )frozenc                  >    \ rS rSr% S\S'   S\S'   S\S'   SS jrS	rg
)r   i
  r   r   intr   torch.UntypedStorage | Noner   c                    U R                   U[        U R                  [        5      (       a  U R                  S.$ [	        U R                  5      S.$ )N)r   describer_idr   )r   r1   r   r  repr)r   r!  s     r3   r   MetaStorageDesc.as_json  sF    ''(!+DIIs!;!;DII
 	
 BFdii
 	
r5   r   Nr!  r   rt   zdict[str, object])r  r  r  r  __annotations__r   r  r   r5   r3   r   r   
  s    
I &%
r5   r   c                  V    \ rS rSr\  S         SS jj5       r\SS j5       rSrg)	r   i  Nc                    g rC   r   r   r2   new_basesymint_visitor_fntensor_visitor_fns        r3   applyViewFunc.apply  s     r5   c                `    [        U 5      (       a
  [        5       $ [        U R                  5      $ rC   )r4   _FakeTensorViewFunc_CustomViewFunc_view_func_unsafer@   s    r3   r   ViewFunc.from_tensor%  s'    1&(("1#6#677r5   r   NN)
r2   r9   r)  r9   r*  Callable[[int], int] | Noner+  )Callable[[torch.Tensor], _TensorT] | Nonert   r9   )r2   rs   rt   zViewFunc[Any])	r  r  r  r  r   r,  staticmethodr   r  r   r5   r3   r   r     sa    
 :>GK  7	
 E 
  8 8r5   r   c                  B    \ rS rSr\  S         SS jj5       rSrg)r/  i-  Nc                n    [         R                  R                  R                  R	                  UUUU5      $ rC   )rD   r  r  r*   r1  r(  s        r3   r,  _FakeTensorViewFunc.apply/  s5       ,,77II
 	
r5   r   r3  )
r2   rs   r)  rs   r*  r4  r+  z+Callable[[torch.Tensor], FakeTensor] | Nonert   r*   )r  r  r  r  r   r,  r  r   r5   r3   r/  r/  -  sM    
 :>IM

 
 7	

 G
 

 
r5   r/  r*   c                  N    \ rS rSr% S\S'   \  S         SS jj5       rSrg)	r0  i@  zjCallable[[torch.Tensor, Callable[[int], int] | None, Callable[[torch.Tensor], _TensorT] | None], _TensorT]funcNc                &    U R                  X#U5      $ rC   )r;  r(  s        r3   r,  _CustomViewFunc.applyK  s     yy6GHHr5   r   r3  )
r2   rs   r)  rs   r*  r4  r+  r5  rt   r9   )r  r  r  r  r%  r   r,  r  r   r5   r3   r0  r0  @  s`      
 :>GKII I 7	I
 EI 
I Ir5   r0  c                  *    \ rS rSr      SS jrSrg)_MetaTensorCallbacki\  c                  g rC   r   )r   argr   s      r3   __call___MetaTensorCallback.__call__]  s    r5   r   N)rA  Callable[[], torch.Tensor]r   torch.device | strrt   r;   r  r  r  r  rB  r  r   r5   r3   r?  r?  \  s    -=O	r5   r?  c                       \ rS rSr% S\S'   Srg)_MetaTensorCallbackKwargsib  rE  r   r   N)r  r  r  r  r%  r  r   r5   r3   rH  rH  b  s    r5   rH  )totalc                  *    \ rS rSr      SS jrSrg)_MetaTensorCallbackOptDeviceij  c                   g rC   r   )r   rA  kwargss      r3   rB  %_MetaTensorCallbackOptDevice.__call__k  s    
 r5   r   N)rA  rD  rM  z!Unpack[_MetaTensorCallbackKwargs]rt   r;   rF  r   r5   r3   rK  rK  j  s#    ' 4	
 
r5   rK  c                     \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   S\S'   \R                  rS\S'   SrS\S'   Sr	S\S'   Sr
S\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS \S!'   SrS\S"'   SrS\S#'   SrS\S$'   SrS\S%'   SrS\S&'   SrS'\S('   S)rS\S*'   SrS+\S,'   SrS \S-'   SrS \S.'   SrS/\S0'   SrS1\S2'   Sr S1\S3'   Sr!S1\S4'   Sr"S1\S5'   Sr#S1\S6'   Sr$S1\S7'   Sr%S \S8'   Sr&S1\S9'   Sr'S:\S;'   Sr(S<\S='   Sr)S>\S?'   Sr*S1\S@'   1 SAkr+SB\SC'   Sr,SD\SE'   Sr-SF\SG'   Sr.SH\SI'   Sr/SJ\SK'   Sr0S \SL'   Sr1S \SM'   Sr2SN\SO'   Sr3SP\SQ'   Sr4SP\SR'   SVSS jr5\6SWST j5       r7SUr8g)Xr   is  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                  ^ SU4S jjm[         R                  " U 5       Vs0 s H  n[        XR                  5      UR                  L a  M'  UR                  S:X  a  [        XR                  5      (       d  MS  UR                  T" UR                  [        XR                  5      5      _M     nnUR                  SU05        U$ s  snf )Nc                  > U S;   a  g U [         R                  ;   a  [        U5      $ [        U[        R
                  [        R                  [        R                  45      (       a  [        U5      $ [        U[        R                  5      (       a  [        U5      $ [        U[        [        45      (       a  U Vs/ s H  nT" X5      PM     sn$ [        U[        [         45      (       a  UR                  $ [        U[        5      (       a  [        U5      $ U S:X  aD  [        U[        5      (       a/  UR!                  5        VVs0 s H  u  p2X2R                  _M     snn$ U$ s  snf s  snnf )N)r   r   r   )r   rT  r"  r1   rD   r   r]   rd   SymInttupler  r   r   r   strdictitems)kvv1k1jsons       r3   ra  $MetaTensorDesc.as_json.<locals>.json  s    22N222Aw!ellEKKFGGAw!U\\**Aw!eT]++./0aQa00!o~>??tt!\**1vG|
1d 3 301	:	fbEE		::H 1 ;s   :E"E'r   r!  )r]  rZ  r^  objectrt   rc  )dataclassesfieldsrT   namedefaultupdate)r   r!  fieldr   ra  s       @r3   r   MetaTensorDesc.as_json  s    	. %++D1

1jj)U]]: D
 JJ"::#D**5 DEJJUZZzz)BCC1 	
 

 	
.,/0

s   &C(C85Cc                    U R                   $ rC   )r   r   s    r3   r^   MetaTensorDesc.shape
  s    yyr5   r   r$  )rt   rQ  )9r  r  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   rT  r   r   r   r   r   r   r   r   r   r   propertyr^   r  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                `    [        U5      [        R                  La  g U R                  U5        g rC   )r   rD   rv   copy_)dstsrcs     r3   
_safe_copyrt    s     Cy$IIcNr5   c                \    [        U 5      [        R                  La  g U R                  5       $ rC   )r   rD   rv   clone)rs  s    r3   _safe_clonerw  !  s!    Cy$99;r5   c                t  ^ SSK JmJn        SU4S jjn[        U T5      (       d  gU" X5      (       d  g[        X5      (       aq  UR                  c  gU R
                  R                  5        HE  u  pEXAR                  ;  a    g[        UT5      (       d  M)  U" XQR                  U   5      (       a  ME    g   g)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                2  > U R                   nUR                  (       a  Uc  gUR                  (       d  Ub  gUR                  (       aO  UbL  [        UT5      (       a;  UR                  b.  [	        UR
                  5      UR                  R                  :w  a  gg)NFT)view_base_contextrk   r1   rm   lendynamic_sizesr   )r   grad_tvbcry  s      r3   _view_base_compatible7_grad_context_compatible.<locals>._view_base_compatible9  ss     ##>>ck~~#/NN3 899'C%%&&++*:*::r5   TF)r   z"StatelessSymbolicContext[Any, Any]r  MetaTensorDesc[torch.Tensor]rt   r  )%torch.fx.experimental.symbolic_shapesry  rz  r1   r   inner_contextsr\  )symbolic_context	grad_descrz  r  r  	inner_ctxry  s         @r3   _grad_context_compatibler  '  s    
/, 
& &(@AA !!1== "<<??"/>>DDFOD??*3 +It7LMM  G r5   c                  H   \ rS rSrSS.SS jjrSS jrSS jrSS jrSS jrSS	 jr	SS
 jr
      SS jr\SS j5       r\ S     S S jj5       r\S!S j5       r                S"S jr            S#S jr SSSSSS.             S$S jjjrSrg)%MetaConverterii  Fr   c                   [         R                  " 5       U l        [         R                  " 5       U l        SU l        SU l        S U l        SU l        Xl        [        US9U l
        g )Nr   r   )weakrefWeakValueDictionarystorage_memotensor_memohitmissdel_hookarg_cntr   rw   	describerr   s     r3   r   MetaConverter.__init__j  s_     '') 	 '') 	 	
 #,yAr5   c                L    U R                   S:  =(       a    U R                  S:H  $ )Nr   )r  r  rl  s    r3   
successfulMetaConverter.successful  s    xx!|.		Q.r5   c                N    U R                   R                  UR                  S 5      $ rC   )r  getr   r   s     r3   get_tensor_memoMetaConverter.get_tensor_memo  s    ##ADD$//r5   c                    U R                   R                  UR                  S 5      nUc  [        SUR                   S35      eU$ )NzTensor memo for id z is None)r  r  r   rL   )r   r2   r   s      r3   _checked_get_tensor_memo&MetaConverter._checked_get_tensor_memo  sA      t,9 #6qttfH!EFFr5   c                4    X R                   UR                  '   g rC   )r  r   )r   r2   r^  s      r3   set_tensor_memoMetaConverter.set_tensor_memo  s    !"r5   c                N    U R                   R                  UR                  S 5      $ rC   )r  r  r   r   s     r3   get_storage_memoMetaConverter.get_storage_memo  s      $$QTT400r5   c                4    X R                   UR                  '   g rC   )r  r   )r   r   r^  s      r3   set_storage_memoMetaConverter.set_storage_memo  s    "#!$$r5   c                  ^ U R                  T5      =nc  U" U4S j5      R                  5       nU R                  (       am  [        R                  " 5          [        5          TR                  c  [        S5      e[        UTR                  R                  5       5        S S S 5        S S S 5        U R                  TU5        U$ U$ ! , (       d  f       N,= f! , (       d  f       N5= f)Nc                 `   > [         R                  " T R                  [         R                  SS9$ Nmetar]   r   )rD   emptyr   uint8)r   s   r3   r   ,MetaConverter.meta_storage.<locals>.<lambda>  s    AFF%++fMr5   z.s.data must not be None when copy_data is True)r  r   r   rD   no_gradr#   r   rL   r   rv  r  )r   r   callbackmemor_ss    `   r3   meta_storageMetaConverter.meta_storage  s     ))!,,D5Mo  ~~ ]]_kmvv~,L  &c166<<>: '4_ !!!S)JK '4m__s$   C!=CC
C	C
C#c                8    [         R                  " [        U5      $ rC   )typingcastr9   )clsr2   s     r3   _checked_cast_tensor_t$MetaConverter._checked_cast_tensor_t  s     {{8Q''r5   Nc                .    U R                  U" 5       5      $ rC   )r  )r  r2   r   s      r3   _identity_callable MetaConverter._identity_callable  s     ))!#..r5   c                    [         R                  R                  R                  SS5      nU" U5      n[        R
                  " [        U5      $ )Nz9Internal error: Tried to backward() through example inputr   )rD   r   
_functionsDelayedErrorr  r  r9   )r  r2   errfnerrs       r3   _backward_errorMetaConverter._backward_error  s>    ##00G
 Ah{{8S))r5   c           
     R   SSK Jn  SSKJn	  UR                  c  U R                  UUUUU5      $ 0 n
UR                  R                  5        H  u  pS nUb  [        XY5      (       d  [        S[        U5       35      eXR                  ;  a  [        SU< S35      eUR                  U   =n b8  [        [        R                  R                  R                  R                   U5      nU" X{5      n["        R$                  " XlR&                  S9nU R)                  UUR*                  UR,                  UUUU5      nUX'   M     UR.                  (       a  U
R1                  UR.                  5        UR                  c  [        S5      eUR                  R3                  XR4                  X#5      $ )	Nr   
AttrSourcerz  z&Expected SubclassSymbolicContext, got ztensor attr z missing from inner_contextsr   $t.type must not be None for subclass)torch._dynamo.sourcer  r  rz  r   meta_tensorr\  r1   rL   r   r  r   rD   fxexperimentalsymbolic_shapesr-   	functoolspartialr   _empty_create_subclassr   ri   r   rh  __tensor_unflatten__r   )r   r2   
outer_sizeouter_stride	shape_envr  r  sourcer  rz  inner_tensorsr  meta_tensor_desccurrent_contextcurrent_context_current_sourceinner_callbacknew_empty_tensors                     r3   r  $MetaConverter._empty_create_subclass  s    	4Q 77?##   ?A&'ggmmo"D"O+!"2LL(@FVAW@XY  >>>(&th.JK  )9(G(G(MM$ '4--==MM('O
 (5N&..x@W@WXN#::  %% ''  #3M= '6B >>  066> !GHHvv**55*
 	
r5   c                B)  ^ ^^^^^"^#^$^%^&^'^(^)^*^+^, [         R                  " UTR                  S9m&Tc$  SSKJn  U" S[        T R                  5       35      mSn[        R                  R                  5       R                  [        R                  R                  R                  5      (       a  [        U5      eT =R                  S-  sl        [        R                   m)Tb  TR"                  m)T4       S;U4S jjjm,T4       S<U,4S jjjnTT4           S=U&U U4S	 jjjm'          S>U$4S
 jjm$T4       S?U$U&U'U)U UU,U4S jjjn	T R%                  T5      Gch  Sm"[        R&                  " TR(                  5         TR*                  (       Ga{  TR,                  n
T&" U4S j5      nT R.                  (       a~  TR0                  c  [        S5      e[        R2                  " 5          [5        5          [7        U5      (       d  [        S5      e[9        TR0                  5      Ul        S S S 5        S S S 5        [=        U5      (       d  [        S5      eUR?                  [A        TRB                  5      5        TRD                  (       a  SUl"        TRD                  (       aj  U
(       dc  T RG                  URI                  5       5      n[        RJ                  " 5          UR?                  [A        TRB                  5      5        S S S 5        GOGO[M        TRN                  5      (       GaP  TR,                  n
TRN                  [        RP                  [        RR                  1;   a  TRT                  c  [        S5      eTRV                  c  [        S5      eTRX                  c  [        S5      eTRZ                  TRT                  -
  TRV                  -
  nTRX                  R\                  US-   US-    m%OSm%TRN                  [        R^                  [        RP                  1;   a/  TR`                  c  [        S5      eTR`                  Rb                  m(O.TRd                  c  [        S5      eTRd                  Rb                  m(T&" U%U(U4S j5      nT R.                  (       a~  TR0                  c  [        S5      e[        R2                  " 5          [5        5          [7        U5      (       d  [        S5      e[9        TR0                  5      Ul        S S S 5        S S S 5        [=        U5      (       d  [        S5      eTRD                  (       a  SUl"        TRD                  (       a  U
(       d  T Rg                  U5      nGOvTRh                  (       a+  TRj                  (       d  SSK6J7n  U" S[q        T5      S/ S9  GO:TRr                  (       Ga  TR,                  n
T," TT5      u  m*m+nT&" U*U+U4S j5      nT R.                  (       a  [        R2                  " 5          [5        5          TRt                  c  [        S5      eTRv                  c  [        S 5      e[7        U5      (       d  [        S5      e[        Rx                  " TRt                  TRv                  TRb                  TR                  S!9Ul        TR0                  c  [        S5      e[{        UR:                  TR0                  5        S S S 5        S S S 5        [=        U5      (       d  [        S5      eTRD                  (       a  SUl"        TRD                  (       a  U
(       d  T Rg                  U5      nG	OTR|                  (       aA  TR~                  (       a  SSK6J7n  U" S"[q        T5      S/ S9  S@U"U#U&U UUU4S# jjm#T#" T5      nG	OHTR                  (       a  TR                  R                  S$;  a  TR                  c  [        S%5      eTR|                  (       a  [        S&5      eT R                  TR                  TT&TT5      nT RG                  [        R                  " U5      5      n[        R                  " TR                  U5        GOTR~                  (       Ga1  TR                  c  [        S'5      eS nT(       aJ  TbG  SS(KHJIn  [        TU5      (       d  [        S)[        T5       35      eTR                  b  TR                  nT(       a  TR                  5       O[        R                   " 5          T R                  TR                  TT&[        R                  R                  R                  TS*5      U5      nS S S 5              SAS+ jn[        R                  R                  [        R                  R                  R                  5      n[        R                  R                  [        R                  R                  R                  S,5         WRb                  TRb                  :X  a  OU" URb                  TRb                  5      (       a&  T RG                  [        R                  " U5      5      nOrU" TRb                  URb                  5      (       a&  T RG                  [        R                  " U5      5      nO*T RG                  UR                  TRb                  5      5      nTR,                  (       a9  [        R2                  " 5          U	" UT5      nS S S 5        TRD                  Wl"        OTR                  RD                  TRD                  :X  a(  [        RJ                  " 5          U	" UT5      nS S S 5        OTRD                  (       d  [        S-5      e[        R2                  " 5          [        5          T RG                  UR                  UR\                  5      5      nS S S 5        S S S 5        TRD                  Wl"        [        RJ                  " 5          U	" UT5      nS S S 5        TR                  c  [        S.5      e[        R                  R                  R                  WTR                  5        [        R                  R                  [        R                  R                  R                  U5        TR                  UlZ        GO?TR,                  n
TR                  (       d"  TR                  (       d  TR|                  (       d  TR                  (       a  [        sS S S 5        $ T," TTT5      u  m*m+nTRj                  (       a	  T'" TT*T+S/9nOT&" U*U+U4S0 j5      nT R.                  (       a  [        R2                  " 5          [5        5          TRt                  c  [        S5      eTRv                  c  [        S 5      e[7        U5      (       d  [        S5      e[        Rx                  " TRt                  TRv                  TRb                  TR                  S!9Ul        [{        UR:                  TR0                  5        S S S 5        S S S 5        [=        U5      (       d  [        S5      eTRD                  (       a)  TRD                  Ul"        U
(       d  T Rg                  U5      nTR                  nUc  [        S15      eUR                  T R                  ;  a  URh                  (       d(  URw                  5       T+:X  a  UR                  5       U:X  a  T R                  UUR                  5       5        T R.                  (       ae  [7        U5      (       d  [        S5      eUR:                  c  [        S25      e[        UR                  5       UR:                  R                  5       5        GO_T R                  UT&S39n[        R                   " 5       nSS4KgJhnJin  U" U5      nUb  U" U5      n[        R2                  " 5          T)" 5          U   UR                  UUT*T+5        S S S 5        T R.                  (       a  [        R2                  " 5          [5        5          [7        U5      (       d  [        S5      eUR:                  c  [        S25      eTRv                  c  [        S 5      eUR:                  R                  [        U5      TR                  TRt                  TRv                  5        S S S 5        S S S 5        S S S 5        S S S 5        TR                  bk  SS5KJOn  U" TS65      nTnTb3  Tb0  [        TTR                  5      (       d  T$" TR                  UTT&5      nT R                  TR                  TT&UU5      Wll        [        R                  R                  WTR                  5        [        R                  R                  UTR                  5        S S S 5        TR                  =(       a    TR                  T":H  n [        [        TWSU S79  SS8KHJun!  TR                  bC  U!" TR                  Rt                  S:H  5      (       a  UR                  5       R                  S5        TR                  (       a  SUlx        TR                  bC  [7        U5      (       d  [        S95      eUR                  R                  TR                  S:9Ul|        T R                  TU5        T R                  T5      $ ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN	= f! , (       d  f       GN= f! , (       d  f       GNQ= f! , (       d  f       GN[= f! , (       d  f       G	N= f! , (       d  f       GNt= f! , (       d  f       GNy= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! [        R                  R                  [        R                  R                  R                  U5        f = f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN.= f! , (       d  f       GNv= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f)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           
       >^	 SSK Jm	  U R                  c  [        S5      eT
Gbw  U R                  n[        U	4S jU R                   5       5      =(       d8    [        U	4S jU R                   5       5      =(       d    T	" U R                  5      nUb2  UR                  T
L a#  U R                  U R                  U R                  4$ Ub-  U(       d&  Uc#  U R                  U R                  U R                  4$ [        U
4S jU R                   5       5      n[        U
4S jU R                   5       5      nT
R                  U R                  5      nT
R                  UUU[        U R                  5       Vs/ s H  oU R                  ;   PM     snUUU R                  S9$ U R                  U R                  U R                  4$ s  snf )	Nr   )is_symbolict.stride must not be Nonec              3  4   >#    U  H  nT" U5      v   M     g 7frC   r   ).0szr  s     r3   	<genexpr>VMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>T  s     9&BB&   c              3  4   >#    U  H  nT" U5      v   M     g 7frC   r   )r  sdr  s     r3   r  r  U  s     >Xr;r??Xr  c              3  F   >#    U  H  nTR                  U5      v   M     g 7frC   #_maybe_specialize_sym_int_with_hint)r  r  r  s     r3   r  r  d  s&      #"(B "EEbII"(   !c              3  F   >#    U  H  nTR                  U5      v   M     g 7frC   r  )r  r  r  s     r3   r  r  h  s&      %"*B "EEbII"*r  )r  hint_overrides)r  r  ri   rL   r   anyr   rj   r  rY  r  -_create_symbolic_sizes_strides_storage_offsetranger   r   r   )r2   rs  r  r   has_symbolict_sizet_stridet_storage_offsetdr  r  s            @r3    sym_sizes_strides_storage_offsetCMetaConverter.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N1a666N)9'('>'> S   !*:*:;; Os   2F?c                `   > T" XU5      u  nnn[         R                  " UUU R                  SS9$ r  rD   empty_stridedr]   )inner_t	inner_srcr  inner_sizesinner_strides_inner_storage_offsetr  s         r3   empty_create/MetaConverter.meta_tensor.<locals>.empty_create{  sA     1EUV	%&&mm	 r5   c           	     F  > SSK Jn  U R                  c  [        S5      eU R                  c  [        S5      eUb  UOU R
                  nUb  UOU R                  nUb'  [        X55      (       d  [        S[	        U5       35      eUc  [        S5      eTR                  U UUT	UTU5      nUR                  U:w  a(  [        SU R                   SU S	UR                   35      eUR                  5       U:w  a,  [        SU R                   S
U S	UR                  5        35      eU$ )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 )
r  rz  r   rL   r   r   ri   r1   r  r^   )
r2   r  r  r  r  rz  subr  r   r  s
          r3   empty_create_subclass8MetaConverter.meta_tensor.<locals>.empty_create_subclass  sM    Vww$%LMMvv~$%KLL (2'=166J+7+C<L+J 5 5 %DTJZE[D\]  ~$%>??-- 
C yyJ&$1!&& :&&0\SYYKI  zz||+$1!&& :''3nK

~O 
 Jr5   c                ^  > SSK Jn  SSKJnJnJn  S nU R                  (       a3  U R                  c  [        S5      eT" U R                  U" US5      X#5      nUR                  /U R                  -  n	U R                  (       a  U R                  c  [        S5      e0 n
U R                  R                  5        HB  u  p[        U[        5      (       d  [        S[!        U5       35      eT" X" X5      X#5      X'   MD     U" U	S /U R                  -  U
UUS9nU$ U" U	S /U R                  -  US	9nU$ )
Nr   r  )
DimDynamicry  rz  't.base must not be None for view tensorrn   r  zExpected attr to be str, got )r~  constraint_sizesr  tensor_sourcer|  )r~  r  r|  )r  r  r  r  ry  rz  rk   rm   rL   DYNAMICr   r$   r   r\  r1   rZ  r   )r2   r  r  r  r  r  ry  rz  r|  t_dynamic_sizesr  r  r  t_symbolic_contextall_dynamic_symbolic_contexts                 r3   r  ?MetaConverter.meta_tensor.<locals>.all_dynamic_symbolic_context  sJ    8    yy66>()RSS$@FFJvw7%!
  *112QVV;O..77?()PQQ   $%77==?KD%dC00,;DJ<H  ,Hz&7,N( $3 &="1&*Vaff_#1"(&7&" &% &>"1&*Vaff_&7&" &%r5   c           	     P  >^^^^ [        5          T" UT5      u  p4nUR                  (       dK  [        U 5      (       d;  T" 5          TR                  U R                  X4U5      5      sS S S 5        sS S S 5        $ SSKJm  SSKJmJn  S
UUUU4S jjn0 mUR                  (       a  UR                  c  [        S5      eUR                  c  [        S5      eT" XUS9nUR                  5       u  pU	 H9  nXR                  ;   d  M  [        X5      TUR                  U   R                  '   M;     TT4       SUUUU4S jjjnUR                  c  [        S	5      eUR                  R!                  UU UU5      n["        R$                  " U" UR'                  5       U5      5        ["        R$                  " U" UR)                  5       U5      5        ["        R$                  " U" UR+                  5       U5      5        UsS S S 5        $ ! , (       d  f       GN= f! , (       d  f       g = f)Nr   )EphemeralSource)ry  sym_eqc                   >^ SSK Jm  TS L=(       a2    [        TT5      =(       a    [        U4S jTR                   5       5      nU(       d  Tc  U $ T" S5      nTR                  XS S9nTR                  X0US9$ )Nr   )r  c              3  @   >#    U  H  nUTR                   L v   M     g 7frC   )STATIC)r  xr  s     r3   r  _MetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fn.<locals>.<genexpr>N  s#       %C !2!22%Cs   r*  )positive)hintr  )r  r  r1   allr~  create_symbolcreate_symintnode)	r   all_static_sizes
sym_sourcesymbolr  r  ry  r  r  s	       @r3   r*  LMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fnG  s    P )4 &'79QR  %5%C%C   % (9+<  "11D!EJ&44QT4RF$66z 7  r5   r  r  r  r  c                   > U c  g T
R                   R                  U 5      nT	R                  U5      nUb  U$ T
R                   R                  U 5      nT" S5      nT
R	                  UUUUT" XVX5      5      $ )Nr+  )r  r   r  rx   r  )	visited_tr  r  
visited_idfake_visited_tvisited_desctemp_sourcer  r  real_to_fake_mappingr   s          r3   r+  LMetaConverter.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  rt   r.   )r-  rs   r  5torch.fx.experimental.symbolic_shapes.ShapeEnv | Noner  &_MetaTensorCallbackOptDevice[_TensorT]rt   rs   )r    r$   r  
as_stridedr  r  r  ry  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  ry  r2  r  r  r  maybe_suppressr   r  r  r  s     `          @@@r3   view_from_base1MetaConverter.meta_tensor.<locals>.view_from_base*  s    *+3Sv40 779$??
 ()#:: OOENK  *) ,+" A
 < (*$22ww,-TUU vv~,-STT (='(F  &88:HE %77?EL &F01A1AB !& 'GO'+' 	' E' "' 'V ;;&()WXX **%% VFKKM59:VFMMOW=>VF$9$9$;^LM_ ,+ *) ,+s1   5H!H&	H9BHC7H
H	H
H%c            	        > [         R                  R                  R                  T R                  T R
                  T R                  T R                  [         R                  SS9$ )Nr  )r]   rd   r   )	rD   opsaten_sparse_coo_tensor_with_dimsrf   re   r   r]   r{   r@   s   r3   r   +MetaConverter.meta_tensor.<locals>.<lambda>  sF    		 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                    > [         R                  R                  R                  STR                  TR
                  T TTR                  TR                  SS9$ )Nr   r  )rd   r]   r   )rD   rA  rB  #_sparse_compressed_tensor_with_dimsre   r^   rd   r]   )	blocksizeindex_dtyper2   s   r3   r   rD    sF    		 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                 F   > [         R                  " T TTR                  SS9$ r  r  r8  r9  r2   s   r3   r   rD  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           	     T  >^ ^^ T R                   (       a  T R                  c  [        S5      eT R                  c  [        S5      eT R                  c  [        S5      eT
" T R                  5      nT R                  nT R                  n[
        R                  R                  R                  T R                  5         TR                  [        XU5      5      nS S S 5        U$ T R                  (       GaW  T R                  c  [        S5      eT R                  c  [        S5      e[
        R                  R                  nU" 5          T
" T R                  5      nS S S 5        T R                  nUT	:X  a  WnOu[
        R                  R                  R                  T R                  5         TR                  [
        R                  R                  R                  WU5      5      nS S S 5        T R                   nT R"                  (       a  [%        W5      (       a	  SUl        U$ T R"                  (       a  U(       d  TR'                  W5      nW$ T R(                  (       av  T R                  c  [        S5      eT R*                  c  [        S5      eTR-                  T R                  TTTT5      nTR                  [/        UT R*                  5      5      nU$ T R0                  c  [        S	5      eT R2                  mT R0                  mT" UUU 4S
 j5      nTR4                  (       a  [
        R6                  " 5          [9        5          [
        R:                  " T R2                  T R0                  T R<                  T R>                  S9Ul         T RB                  c  [        S5      e[E        UR@                  T RB                  5        S S S 5        S S S 5        U$ U$ ! , (       d  f       W$ = f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       NP= f! , (       d  f       U$ = f)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                 F   > [         R                  " T TTR                  SS9$ r  r  rQ  s   r3   r   DMetaConverter.meta_tensor.<locals>._to_fake_tensor.<locals>.<lambda>  s     (;(;$)$+*+''+1	)"r5   r  rE  )#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   rt  )r2   ftlvlr   r   disable_functorchr>   r8  r9  GRAD_TENSOR_SENTINEL_VALUE_to_fake_tensorr  r   r  r  r  s   `      @@r3   r^  2MetaConverter.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" %)$?$?$22S$A%""n  !c 444 {{2&4$Y'" !"  !ww&4$U'" !" 160J0J-!2!4%4Q[[%A "5"#''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  $~~%*]]_km494G4G()()./gg/0xx	5&AM ()vv~.<,\/* )* %/q}}aff$E 7D_  !qo" "n  !O "5!4&" &"h 7Dm__  !sI   ;OO#':O55P A=P=P
O #
O25
P
P	P
P'r   rS  z0Expected non-functorch wrapped functional tensorr  )ry  z'Expected StatelessSymbolicContext, got rn   c                n    [         R                  " U 5      =(       a    [         R                  " U 5      U:H  $ rC   )utilsis_complex_dtypecorresponding_real_dtype)complex_dtype
real_dtypes     r3   	is_c_of_r,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                 F   > [         R                  " T TTR                  SS9$ r  r  rQ  s   r3   r   rD    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   rs  torch._guards.Sourcer  <torch.fx.experimental.symbolic_shapes.SymbolicContext | Nonert   zDtuple[tuple[IntLikeType, ...], tuple[IntLikeType, ...], IntLikeType])r  r7   r  rl  r  rm  rt   rs   )r2   r7   r  tuple[IntLikeType, ...]r  rn  r  rm  r  ztorch._guards.Source | Nonert   r9   )
r2   r7   r  rl  r  r4  r  _MetaTensorCallback[_TensorT]rt   5torch.fx.experimental.symbolic_shapes.SymbolicContext)rm   r9   r2   r7   r  r4  rt   r9   r2   r7   rt   r9   )rd  rP  re  rP  rt   r  )r  r  r   r  r  r}  r  rD   r   _dispatch_tls_local_exclude_sethasDispatchKeyPythonrL   r  
contextlibnullcontextsuppress_guardsr  inference_modera   r`   r>   r   r   r  r#   r4   rw  rY  rA   _coalesced_r  rg   r_   r  rv  enable_gradr   rd   r   r   rf   re   r   r   r^   r~   r   r]   r   r  r   r$   torch._dynamo.excrK  rZ  r   r   ri   r  rt  r   rk   r   r   r   r  _to_functional_tensor_mirror_autograd_meta_tor   rm   r  ry  r1   r|  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   r  rj   r  r   r   r  r0   ri  r  set_r   rI   r  	_set_conjrb   _set_negrc   r   ry   rQ   rj  resize_r   	_is_paramr   r   create_symbolic_nested_intnested_int_memor  r  )-r   r2   r  	callback_r  r  r  msgr	  r=  r>   r   	batch_dimrK  _storage_offsetr   base_symbolic_contextry  rm   rf  old_excludemidrj   r   r  maybe_fake_mgrri  r  mb_fake_moder  grad_sourcegrad_symbolic_contextrZ   rj  r]  r^  r  rI  r  r  rJ  r<  r8  r9  r  s-   ``` ``                            @@@@@@@@@@@r3   r  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V %%4 -7,B,B &66N &	4	<"4	<%4	<4	<
 R4	< 4	<t &		(	+		
 	 	2 &28A	"A	/A	 2A		A	 0A	 A	 A	N5	&"5	&(5	& M5	& 4	5	&
 C5	&p 	U	U	"U	U	
 U	 U	n "*)+&%%ann5;;;iiG
 !	A ~~66>"0 P#  #]]_km#21#5#5&45T&U U,7,?AM	 /<_
 (??,G  MM$q~~"67*.w
 !77	B"..0MM$q~~*>? 10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#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#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YYY vv~,-VWW,0) %5%A  **:<TUU"0"I$O_J`Ia b#  ,==I4D4V4V1 % "??A'3356  $//FF%$!MM00;;FGL1 	6'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$; "1 /0ooAO vv33qF%*%6%6%8(6tQ(?A &9%8 ()*8(X+& %& &+]]_6N6P*.*E*E(,		$**(=+&C 7Q_ 56OO 1%*%6%6%8(6sA(>A &9
 ??2"0 R#  **==aQHH!HH00@@+ %&HHAM  iiG //13J3J2222-e 65p 9FDTU	&
 661%g %  >>!&+-#$66>*8(X+& %& $%88#3*8(Z+& %& (7q'9'9*8(G+& %& 160C0C$%FFAHHAGGAHH1" !+1==!&& A# 3@& (??,G  *+//& !% 4 4Q 7A		Ay,-IJJtt4#4#44HHJ'1 ! 0 0 2n D --a1B1B1DE>>#21#5#5&45T&U U }}4&4$['" !" . ! 1 1 3Q]]5R5R5T #//H/E, '224 '
 (;1'='3-I,-WN"]]_n.>!/ !sNE7 K "0#~~%*]]_km+:1+=+=.<,K/* )* ()}}'<.<,c/* )* ()xx'7.<,^/* )* %&MM$6$6(9#(>()(8(8()()	%& 7D_	 /?_0 66%?",VV"<K,<) !,1A1M78H!&&QQ4P !Y51
 "--! #-AF ""1aii0!!!QXX.G 6L ''QAGG7Q,Q  y!QdiX Myy$		!8K)L)L!!#++A.~~" ||'&q))()WXX$%KK$J$J!" %K %!
   A&,,Q//[ /<m__. 10j /<m__R /<m__\6 6F "1 &9%8 7Q6P__
 &9%8 HH!HH00@@+N 3@-J "0 7Dm__	 /?.>__] 65s  	A)AR2AK2=6AK 3AK2;B+AR&%ALGARAL(6ALAL(DARAM(CAL:0AM8H'ARAAM'BAR>C;AO
9
AM0AAO

AN :AO
AN&%+ANAN&.AO

AN8AAO
$B*ARAAR4AP#?B0AP/AP#7F7AR.AQ=6AQ+9AP5	@.AQ+@<AQ	ABAQCAQ	C AQ+C(AQ=C0CARK 
AK/K*AK2K2
AL	K<ARL
AL	LARL
AL%L AL(L(
AL7	L2ARL:
AM	MAMM
AM	MARM
AM-	M(ARM0
AM?	M:AO
N
AN	NAO
N
AN#NAN&N&
AN5	N0AO
N8
AO	OAO
O
AAPPARP
AP PAP#P#
AP2	P-ARP5
AQP?AQ+Q
AQQAQ	Q
AQ(Q#AQ+Q+
AQ:Q5AQ=Q=
AR	RARR
ART)r  r  r  r   c                 ^ ^^ Uc  T R                   nOUn[        U[        R                  5      (       a  UR                  R
                  S:X  dN  UR                  (       d=  UR                  5       (       aC  UR                  b6  UR                  R                  (       a  T =R                  S-  sl
        [        $ T =R                  S-  sl        OA[        R                  R                  U5      (       a  T =R                  S-  sl
        [        $ U$ Tc  SnT R                  R!                  XS9mU(       a  Tc  [#        S5      e[%        SU UU4S jS9  [&        R(                  " 5        nUR+                  [        R,                  R.                  R1                  5       5        [3        5       n	U	b7  UR+                  [        R4                  R6                  R9                  5       5        T R;                  TUUTU5      n
S S S 5        [        U5      [        R<                  R>                  L a  S	W
l         [C        US
S5      (       a)  S	W
l"        [G        US5      (       a  URH                  U
l$        W
$ ! , (       d  f       Nx= f)Nr   r   Fr   z*source must not be None when trace is Truedescribe_sourcec                 `   > T R                   R                  TR                  TR                  S.$ )N)r!  r   r  )r  r   rf  )r   r  t_descs   r3   r   (MetaConverter.__call__.<locals>.<lambda>  s#    $(NN$5$5 ))$kk%r5   r   T
_is_buffer
persistent)%r  r1   rD   rv   r   r   is_quantizedrl   rn   r`   r  r  r  	overridesis_tensor_liker  rx   rL   r!   rv  	ExitStackenter_context	_dispatchpythonsuspend_functionalizationr   r   r   r   r  r   r   r  rT   r  r   r  )r   r2   r  r  r  r  r   r  
exit_stackstr   r  s   `   `      @r3   rB  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**
I8)r  r   r  r  r  r  r  r  r  )rt   r  )r2   r7   rt   rU  rq  )r2   r7   r^  r9   rt   ru   )r   r   rt   r  )r   r   r^  r  rt   ru   )r   r   r  z0Callable[[Callable[[], torch.Tensor]], _TensorT]rt   r  )r2   rs   rt   r9   rC   )r2   rD  r   ztorch.device | str | Nonert   r9   )r2   r9   rt   r9   )r2   r7   r  rS  r  rS  r  ShapeEnv | Noner  rm  r  r5  r  rl  rt   r9   )r2   r7   r  r  r  ro  r  Source | Noner  SymbolicContext | Nonert   r9   )r2   rs   r  r  r  z$_MetaTensorCallback[_TensorT] | Noner  r  r  r  r   r  rt   r9   )r  r  r  r  r   r  r  r  r  r  r  r  classmethodr  r  r  r  r  rB  r  r   r5   r3   r  r  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 gr5   r  )r2   rc  rt   zTypeIs[FakeTensor])r2   "MetaTensorDesc[Any] | torch.Tensorrt   r  )r2   r6   rt   z_TensorLikeT | None)r2   r6   rt   r6   )rO   r8   rP   r8   rt   ru   )rt   zGenerator[None, None, None])rQ   z Callable[[object, object], None]ro   r  rp   rs   rY   r  rZ   r  rt   ru   )r2   rc  rt   zTypeGuard[torch.Tensor])rd   rR  rt   r  )r   ztype[_T]r   rc  rt   r8   )rm   r  rt   r  )rm   r  r   r  rt   ru   )rr  rs   rs  rU  rt   ru   )rs  rs   rt   rU  )r  rp  r  r  rt   r  )p
__future__r   rv  rd  r  	threadingr  r  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+   r  r,   r-   torch.typesr.   r4   r  DimListrv   r6   r8   r9   r;   rA   rJ   rM   rQ   localrU   rS   rW   ry   r|   r   rh   r   r   r   r   r  r   r   r   r   rw   r   r   r/  r0  r?  rH  rK  r   rt  rw  r  r  torch._prims_common_prims_commonra  r   r5   r3   <module>r     s   "        = !	 	 	 B A  +    < + ) / F 0 30$H
 P'% ~'<ellKT]:U\\2~U\\TJ,
 oo #  + +  ;/;*; 	;
 ; ; 
;~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   