
    Bj;                      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 dmdZCeDZE eddejF                  ZG ed          ZH edejF                  ZI ed ejF        d!"          ZJdnd%ZKdod'ZLdpd(ZMdqd,ZN ejO                    ZPd-eP_Q        edrd/            ZRd-d-d0dsd8ZSdtd:ZTdud=ZUdtd>ZVdtd?ZWdvdCZXdwdFZYdxdHZZ edIe[          Z\ edJe[          Z] edKe[          Z^ e^d           a_ G dL dM          Z` ed!N           G dO dP                      Za ed!N           G dQ dReeI                               Zb ed!N           G dS dTebdU                               Zc ed!N           G dV dWebeI         eeI                               Zd G dX dYeeeJ                   Ze G dZ d[ed-\          Zf G d] d^eeeJ                   Zg ed!N           G d_ d`eeI                               ZhdyddZidzdeZjd{djZk G dk dleeI                   Zld dlmmnZo dS )|    )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)IntLikeTypetobjectreturnTypeIs[FakeTensor]c                .    ddl m} t          | |          S )Nr   )r*   )torch._subclasses.fake_tensorr*   
isinstance)r/   r*   s     _/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/torch/_subclasses/meta_utils.py_is_fake_tensorr7   =   s$    888888a$$$    _TensorLikeTMetaTensorDesc[Any]_T_TensorT)bound_TensorT_covT)r=   	covariant"MetaTensorDesc[Any] | torch.Tensorboolc                4    	 | j         S # t          $ r Y dS w xY w)NF)is_leafRuntimeErrorr/   s    r6   safe_is_leafrF   J   s1    y   uus   	 
_TensorLikeT | Nonec                    t           j                            t           j        j        j                  5  | j        cd d d            S # 1 swxY w Y   d S N)torch_logginghide_warnings	_internalsafe_grad_filtergradrE   s    r6   	safe_gradrP   R   s    		%	%en&>&O	P	P  v                 s   AAAc                F    t          |           }|t          d          |S )Nz3Expected tensor to have a gradient but grad is None)rP   AssertionError)r/   rO   s     r6   _expect_safe_gradrS   X   s&    Q<<D|RSSSKr8   abNonec                :    | |k    rt          |  d|           d S )Nz != )rR   )rT   rU   s     r6   	assert_eqrX   _   s*    Avv]]q]]+++ vr8   FGenerator[None, None, None]c               #     K   t          t          dd          } dt          _        	 d V  | t          _        d S # | t          _        w xY w)Ndisable_inference_modeFT)getattrtlsr[   )priors    r6   $disable_inference_mode_for_fake_propr_   k   sP      C1599E!%C+%*"""U"****s	   8 Askip_symbolic	skip_leafrX    Callable[[object, object], None]m1m2torch.Tensorra   rb   c                    t          |t          j                  r!t                                          |          n|}d fd ||          S )	Nrd   r:   re   rf   r1   rV   c                    | j         |j                    s | j        |j                    | j        |j                   s | j        |j                    | j        |j                   t          t          dd          s$ | j        |                                           n | j        d            | j        |                                            | j	        |	                                            | j
        d ut          |          d u           | j
         | j
        t          |                     | j        r | j        |j                    | j        |                                            | j        |                                            | j        |                                           d S t#          |           r^ | j        |j                    | j        |                                            | j        |                                           d S sF | j        |                                            | j        |                                            | j        |                                           | j        rD| j        t/          d          |j        t/          d           | j        |j                   d S d S )Nr[   Fz*m1.base must not be None for a view tensorz+m2._base must not be None for a view tensor)dtypeshaperequires_gradrC   	is_sparser\   r]   is_inferenceis_conjis_negrO   rP   rS   layout	dense_dim
sparse_dimis_coalescedis_sparse_compressedstridestorage_offsetis_view_is_viewbaserR   _base)rd   re   rX   gorb   ra   s     r6   r{   zassert_metadata_eq.<locals>.go   s   	"(BH%%% 	*Ibh)))	""B$4555 	.Ibj"*--- 		",---s4e<< 	.Ibor'8'89999Ibou---	"*bjjll+++	")RYY[[)))	"'%y}}D'@AAA7Brw)"--... < 	&Ibi+++IblBLLNN333IbmR]]__555Ibor'8'899999!"%% 	&Ibi+++IblBLLNN333IbmR]]__55555  B	")RYY[[111	"+R->->-@-@AAAIbj"++--000z &7?()UVVV8#()VWWW27BH%%%%%& &r8   )rd   r:   re   rf   r1   rV   )r5   rJ   TensorMetaTensorDescriberdescribe_tensor)rX   rd   re   ra   rb   r{   s   `  ``@r6   assert_metadata_eqr   u   s~     b%,''	--b111 (& (& (& (& (& (& (& (& (&Z 2b"::r8   TypeGuard[torch.Tensor]c                \    t          | t          j                  o| j        t          j        u S rI   )r5   rJ   r|   rp   
sparse_coorE   s    r6   is_sparse_coor      s#    a&&G18u7G+GGr8   rp   torch.layoutc                b    | t           j        t           j        t           j        t           j        hv S rI   )rJ   
sparse_csr
sparse_csc
sparse_bsr
sparse_bsc)rp   s    r6   is_sparse_compressed_layoutr      s,    	  r8   c                ^    t          | t          j                  ot          | j                  S rI   )r5   rJ   r|   r   rp   rE   s    r6   rt   rt      s$    a&&P+Fqx+P+PPr8   c                >    t          |           pt          |           S rI   )r   rt   rE   s    r6   is_sparse_anyr      s    63A666r8   tytype[_T]objc                j    t          ||           s"t          d|  dt          |                     |S )Nz	expected z	 but got )r5   rR   type)r   r   s     r6   _checked_castr      s?    c2 CAAAd3iiAABBBJr8   ry   torch.UntypedStoragec                    | j         S rI   real_storage)ry   s    r6   _get_real_storager      s    r8   r   c                    || _         d S rI   r   )ry   r   s     r6   _set_real_storager      s     %Dr8   MetaStorageIdMetaTensorId_DescriberIdc                  N    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dS ) r}   a  
    Given a Tensor/Storage, generate a MetaTensorDesc/MetaStorageDesc
    for it, which is enough information to reconstruct a meta tensor/fake tensor
    corresponding to a Tensor as faithfully as possible.

    This is a stateful conversion object because we keep track of the IDs
    of the tensors/storages passed to us, so we can consistently give
    the same ID when we see the same tensor/storage.
    F	copy_datar   rA   r1   rV   c               B   t           | _        t          t           dz             a t          d          | _        t          d          | _        t                      | _        t                      | _	        || _
        t                      | _        t                      | _        d S )N   r   )DESCRIBER_NEXT_IDidr   r   next_tensor_idr   next_storage_idr%   lookup_tensorlookup_storager   settraced_tensorstraced_storagesselfr   s     r6   __init__zMetaTensorDescriber.__init__   s|    #():Q)>??,8OO.;A.>.>022133"(+),r8   r/   rf   r   c                    || j         vr+| j        | j         |<   t          | j        dz             | _        | j         |         S Nr   )r   r   r   r   r/   s     r6   get_tensor_idz!MetaTensorDescriber.get_tensor_id   sF    D&&&$($7Dq!".t/BQ/F"G"GD!!$$r8   sr   r   c                    || j         vr+| j        | j         |<   t          | j        dz             | _        | j         |         S r   )r   r   r   r   r   s     r6   get_storage_idz"MetaTensorDescriber.get_storage_id  sF    D'''%)%9D"#01E1I#J#JD "1%%r8   tracer   MetaStorageDescc                   t                               |          |                                 j        r|nd           |rBj         j        vr4t          d fd            j                            j                   S )N)r   sizedatadescribe_storagec                 8                          j                  S rI   as_jsonr   rr   s   r6   <lambda>z6MetaTensorDescriber.describe_storage.<locals>.<lambda>      AIIdg$6$6 r8   metadata_fn)r   r   r   r   r   r   r!   add)r   r   r   r   s   `  @r6   r   z$MetaTensorDescriber.describe_storage	  s     ""1%% n.$
 
 
  	+QT!555"66666     $$QT***r8   Trecurser   r   r:   c               L   $ t          |          }|                                }|j        }|j        }|j        }t          |          }	t          |          }
|j        }t          |          }t          |          }t          |          }t          j        |          }d }d}|sVt          |          sG|r|	rC|sA|
s?|s=                     |                                |          }|                                }d }|s't          |          s|r|	r|                                }d }d }d }|s|r%                     t'          |          |          }n|r|j        j        dvr|                                rt-          d          |
s@t          j        |                                t          j        |          |          }|}nft          j                                        }                     t7          ||          |          }t          j        j                                        }d }|
r<t          j        j                                        5 }	 d d d            n# 1 swxY w Y   d }d }d }d }|	rtA          |d          stC          d          |"                                \  }}i }i }|D ]}tG          ||          }|xt          j$        d x\                         ||          ||<   A tJ          d x\   ddl&m'}  ||          ||<   c 	 tC          d	t+          |                     t+          |          }dd
l(m)}  tT          +                    |          }!tG          tX          dd          }"t[          di d .                    |          d|d|"rdn|/                                d|d|j0        d|1                                d|j2        d|d|d|
d|d|d|d|d|3                                d|4                                dtk          |t          j6        j7                  d|	d|d || v r| |         j8        9                                nd d!|d"|d#|j        d$|:                                d%|d&|d'tw          tG          |d(ty                                          d)tG          |d*i           d+|j        st{          |          r|>                                nd d,|j        st{          |          r|?                                nd d-|j        r|@                                nd d.|rI|j        t          jA        t          jB        hv r*                     |C                                d|/          nd d0|rI|j        t          jA        t          jB        hv r*                     |D                                d|/          nd d1|rI|j        t          jE        t          jF        hv r*                     |G                                d|/          nd d2|rI|j        t          jE        t          jF        hv r*                     |H                                d|/          nd d3|r9t{          |          r*                     |I                                d|/          nd d4t          |          x}#                     |#|          nd d5|                                r$t          j        jK        L                    |          nd d6|d7|s|rt          |          nd d8|rt          |          nd d9|r7|                                r#|jO                             |jO        |          nd d:t          jP        jQ        R                    |          d;|!d<|d=|r|nd d>|d?|d@|dA|dB|dC jS        r|nd $|rB$jT         jU        vr4t          dD$ fdEF            jU        W                    $jT                   $S )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_registryr[   Fr   storagerm   rC   rk   ndimri   rl   	is_mkldnnis_functorch_wrappedr   r   r   rw   rn   ro   is_parameterr$   	is_nested
nested_intis_functionalrp   devicer   ru   rv   dynamo_dynamic_indices_dynamo_dynamic_indicesdynamo_hint_overrides_dynamo_hint_overridesrr   rq   rs   crow_indicesr   col_indicesccol_indicesrow_indicesvaluesrO   creation_meta	unwrappedlevelbdimry   	fake_mode	view_funcattrsopaque_attrsctxr   functorch_stackautograd_meta_fromcurrent_levelr   r~   c                 8                          j                  S rI   r   r   s   r6   r   z5MetaTensorDescriber.describe_tensor.<locals>.<lambda>  r   r8   r   )XrF   rx   rl   rp   r   r$   r   r   r   r   r   rJ   _is_functional_tensorr   r   untyped_storagerv   ru   r~   r   r   r   rD   _sync_from_functional_tensor_C$_functionalization_reapply_views_tlsr   
_functorchr   pyfunctorch#temporarily_clear_interpreter_stackhasattrrR   r   r\   r|   r"   "torch._library.fake_class_registryr   $torch.nested._internal.nested_tensorr   ViewFuncfrom_tensorr]   MetaTensorDescr   rm   rk   dimri   rn   ro   r5   nn	Parameternoder   r   listr   rt   rr   rq   rs   r   r   r   r   r   r   r   r   r   rP   	_autograd_get_creation_metar   r   rz   _subclassesfake_tensormaybe_get_fake_moder   r   r   r!   r   )%r   r/   r   r   rC   rw   rl   rp   r   is_traceable_wrapper_subclass_vr   r   is_batchedtensor_vis_legacy_batchedtensor_vis_gradtrackingtensor_vr   r   rv   ru   r   r   r   reapply_viewsmaybe_functorch_stackr   r   r   type_v	raw_attrsattrinnerr   r   r   is_inference_mode_disabledrO   r   s%   `                                   @r6   r~   z#MetaTensorDescriber.describe_tensor  s     q//**,,K	K	*G*J*J':1==K	-a00$;A$>$>!"7":":3A66 	0*622	0 	0 #B	0 		0 $	0 )	0 ++A,=,=,?,?u+MMG--//N	 *622	  	  #B	  XXZZF
 	! 	D!8 	D,,]1-=-=U,KKII  	Dqx}OCCzz|| "l   ( DA 001!44E 1  	 &'"" % M M O O 00-a??u 1  	 !& 3 A A C C $ 	 ,PPRR&              
 * 	1233 $T   1133NIsEL!  4(('&*&:&:5&:&N&Nd (#      .M-LU-S-ST** & ,O$u++OO   !WWFPPPPPP((++	 &-S2JE%R%R"!/ k"
 k"
 k"
!!!$$$k"
Gk"
 #=R!..BRBRk"
 G	k"

 //k"
 k"
 ''k"
  ik"
  ik"
  "6!5!k"
" 0/#k"
$ %>$=%k"
& #:"9'k"
( G)k"
* IIKKK+k"
, 88:::-k"
. $Aux'9:::/k"
0 +J*I1k"
2  i3k"
8 /// (*/::<<<;k"
> (-?k"
@ 6Ak"
B 88Ck"
D Ek"
F 6Gk"
J *>Kk"
L $(3Lcee(T(T#U#U#UMk"
N #*!-Er"J"J"JOk"
R #$+R1Ea1H1HRdSk"
V (){W6J16M6MWakkmmmSWWk"
X ./[B)))dYk"
d  xE,<e>N+OOO $$Q^^%5%5uE$RRRgk"
n  xE,<e>N+OOO $$Q]]__e5$QQQqk"
x  xE,<e>N+OOO $$Q^^%5%5uE$RRR{k"
B  xE,<e>N+OOO $$Q]]__e5$QQQEk"
L 3A66$$QXXZZe$LLLOk"
V &aLL(D5 $$T$777Yk"
^ =>JJLLR"55a888d_k"
b  ick"
h &)@"""kk"
n '9B"""dok"
t  zz||010C $$QWE$:::wk"
z '3GGJJJ{k"
|  i}k"
@ %Ak"
B *6?4Ck"
D Ek"
F Gk"
N 21Ok"
P  21Qk"
R (-Sk"
T n.$Uk"
X  	*QT!444!66666    ##AD)))s   I''I+.I+Nr   rA   r1   rV   )r/   rf   r1   r   )r   r   r1   r   )r   r   r   rA   r1   r   )r/   rf   r   rA   r   rA   r1   r:   )	__name__
__module____qualname____doc__r   r   r   r   r~   r   r8   r6   r}   r}      s          -2 / / / / / /% % % %& & & & 9>     & 37el l l l l l l lr8   r}   )frozenc                  6    e Zd ZU ded<   ded<   ded<   ddZdS )r   r   r   intr   torch.UntypedStorage | Noner   describer_idr   r1   dict[str, object]c                ~    | j         |t          | j        t                    r| j        nt	          | j                  dS )N)r   r  r   )r   r5   r   r  repr)r   r  s     r6   r   zMetaStorageDesc.as_json  s;    '(!+DIs!;!;PDIIdi
 
 	
r8   Nr  r   r1   r  )r  r  r  __annotations__r   r   r8   r6   r   r   
  sM         III &%%%
 
 
 
 
 
r8   r   c                  D    e Zd Ze	 	 ddd
            Zedd            ZdS )r   Nr/   r<   new_basesymint_visitor_fnCallable[[int], int] | Nonetensor_visitor_fn)Callable[[torch.Tensor], _TensorT] | Noner1   c                    d S rI   r   r   r/   r%  r&  r(  s        r6   applyzViewFunc.apply  s	     3r8   rf   ViewFunc[Any]c                d    t          |           rt                      S t          | j                  S rI   )r7   _FakeTensorViewFunc_CustomViewFunc_view_func_unsaferE   s    r6   r   zViewFunc.from_tensor%  s/    1 	8&((("1#6777r8   NN)
r/   r<   r%  r<   r&  r'  r(  r)  r1   r<   )r/   rf   r1   r-  )r  r  r  r   r,  staticmethodr   r   r8   r6   r   r     s_        
 :>GK    ^ 8 8 8 \8 8 8r8   r   c                  ,    e Zd Ze	 	 ddd            ZdS )r/  Nr/   rf   r%  r&  r'  r(  +Callable[[torch.Tensor], FakeTensor] | Noner1   r*   c                Z    t           j        j        j                            ||||          S rI   )rJ   r  r  r*   r1  r+  s        r6   r,  z_FakeTensorViewFunc.apply/  s1      ,7II
 
 	
r8   r2  )
r/   rf   r%  rf   r&  r'  r(  r5  r1   r*   )r  r  r  r   r,  r   r8   r6   r/  r/  -  s?        
 :>IM
 
 
 
 X
 
 
r8   r/  r*   c                  8    e Zd ZU ded<   e	 	 ddd            ZdS )r0  zjCallable[[torch.Tensor, Callable[[int], int] | None, Callable[[torch.Tensor], _TensorT] | None], _TensorT]funcNr/   rf   r%  r&  r'  r(  r)  r1   r<   c                0    |                      |||          S rI   )r8  r+  s        r6   r,  z_CustomViewFunc.applyK  s     yy#46GHHHr8   r2  )
r/   rf   r%  rf   r&  r'  r(  r)  r1   r<   )r  r  r  r#  r   r,  r   r8   r6   r0  r0  @  s^             
 :>GKI I I I XI I Ir8   r0  c                      e Zd Zd	dZdS )
_MetaTensorCallbackargCallable[[], torch.Tensor]r   torch.device | strr1   r>   c                  d S rI   r   )r   r<  r   s      r6   __call__z_MetaTensorCallback.__call__]  s    sr8   N)r<  r=  r   r>  r1   r>   r  r  r  r@  r   r8   r6   r;  r;  \  s(             r8   r;  c                      e Zd ZU ded<   dS )_MetaTensorCallbackKwargsr>  r   N)r  r  r  r#  r   r8   r6   rC  rC  b  s         r8   rC  )totalc                      e Zd Zd	dZdS )
_MetaTensorCallbackOptDevicer<  r=  kwargs!Unpack[_MetaTensorCallbackKwargs]r1   r>   c                   d S rI   r   )r   r<  rG  s      r6   r@  z%_MetaTensorCallbackOptDevice.__call__k  s	    
 sr8   N)r<  r=  rG  rH  r1   r>   rA  r   r8   r6   rF  rF  j  s(             r8   rF  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<   dXdVZ4e5dYdW            Z6dS )Zr   r   r   r  r   torch.dtyperi   ztorch.devicer   tuple[int, ...]r   z	list[int]r   zdict[int, int]r   r   rp   FrA   rm   rC   rk   rl   r   r   r   r   r   rw   r   Nz
int | Noner   r$   r   rn   ro   r   tuple[int, ...] | Noneru   r   rv   zMetaStorageDesc | Noner   rr   rq   zbool | Noners   zMetaTensorDesc[Any] | Noner   r   r   r   r   r   r   ry   z%dict[str, MetaTensorDesc[Any]] | Noner   zdict[str, OpaqueBase] | Noner   zCreationMeta | Noner   rO   >
   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   r  r   r1   r  c                     d	fd fdt          j                   D             }|                    d|i           |S )
Nkstrvr0   r1   c                x     dv rd S  t           j        v rt          |          S t          |t          j        t          j        t          j        f          rt          |          S t          |t          j                  rt          |          S t          |t          t          f          r fd|D             S t          |t          t           f          r|j        S t          |t                    rt          |          S  dk    r3t          |t                    rd |                                D             S |S )N)r   r   c                (    g | ]} |          S r   r   ).0v1jsonrQ  s     r6   
<listcomp>z8MetaTensorDesc.as_json.<locals>.json.<locals>.<listcomp>  s#    000Q000r8   r   c                $    i | ]\  }}||j         S r   )r   )rV  k1rW  s      r6   
<dictcomp>z8MetaTensorDesc.as_json.<locals>.json.<locals>.<dictcomp>  s     :::fb"BE:::r8   )r   rN  r!  r5   rJ   r   ri   rp   SymInttupler  r   r   r   rR  dictitems)rQ  rS  rX  s   ` r6   rX  z$MetaTensorDesc.as_json.<locals>.json  s    222tN222Aww!elEKFGG Aww!U\** Aww!eT]++ 100000a0000!o~>?? t!\** 1vvG||
1d 3 3|::		::::Hr8   c           
         i | ]h}t          |j                  |j        u sJ|j        d k    rt          |j                  >|j         |j        t          |j                            iS r   )r\   namedefault)rV  fieldrX  r   s     r6   r\  z*MetaTensorDesc.as_json.<locals>.<dictcomp>  s~     

 

 

ej))U]::J":::#D%*55 ; JUZuz)B)BCC
 ;::r8   r  )rQ  rR  rS  r0   r1   r0   )dataclassesfieldsupdate)r   r  r   rX  s   `  @r6   r   zMetaTensorDesc.as_json  sx    	 	 	 	 	 	*

 

 

 

 

$+D11

 

 

 	
.,/000r8   c                    | j         S rI   )r   r   s    r6   rj   zMetaTensorDesc.shape
  s
    yr8   r"  )r1   rL  )7r  r  r  r#  rJ   stridedrp   rm   rC   rk   rl   r   r   r   r   r   rw   r   r   r$   r   rn   ro   r   ru   rv   r   rr   rq   rs   r   r   r   r   r   r   r   ry   r   r   r   rO   rN  r   r   r   r   r   r   r   r   r   r   propertyrj   r   r8   r6   r   r   s  s        III %%%%)))) =F((((LGMII!&&&&&"""""$)))))"'''''GI "J!!!!*/!////MGFL%)F))))N
 '+G****!J!!!! I     $L$$$$/3L3333.2K2222/3L3333.2K2222)-F----,0I0000D'+D++++37E7777 	      *.M----'+D+++++ + +O     CD'+I++++&*I**** E $M$$$$15O5555.22222
 !%D$$$$" " " "H    X  r8   r   dstsrcrO  c                j    t          |          t          j        urd S |                     |           d S rI   )r   rJ   r|   copy_)rm  rn  s     r6   
_safe_copyrq    s-    Cyy$$IIcNNNNNr8   c                d    t          |           t          j        urd S |                                 S rI   )r   rJ   r|   clone)rn  s    r6   _safe_clonert  !  s(    Cyy$$t99;;r8   symbolic_context5torch.fx.experimental.symbolic_shapes.SymbolicContext	grad_descMetaTensorDesc[torch.Tensor]c                @   ddl mm} dfd	}t          |           sd
S  || |          sdS t          | |          r^|j        dS | j                                        D ];\  }}||j        vr dS t          |          r |||j        |                   s dS <d
S )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SubclassSymbolicContextr   "StatelessSymbolicContext[Any, Any]grad_trx  r1   rA   c                    | j         }|j        r|dS |j        s|dS |j        r=|;t          |          r+|j        $t	          |j                  |j        j        k    rdS dS )NFT)view_base_contextrw   r5   ry   lendynamic_sizesr   )r   r}  vbcrz  s      r6   _view_base_compatiblez7_grad_context_compatible.<locals>._view_base_compatible9  s     #> 	ck5~ 	#/5N	3 899  'C%&&&+*:::5tr8   TFN)r   r|  r}  rx  r1   rA   )%torch.fx.experimental.symbolic_shapesrz  r{  r5   r   inner_contextsr`  )ru  rw  r{  r  r  	inner_ctxrz  s         @r6   _grad_context_compatibler  '  s          
     & &(@AA t ! !19== u "$;<< 	?"5/>DDFF 	 	OD)9?**uu3  ++Iyt7LMM uu4r8   c                      e Zd Zddd7dZd8dZd9dZd:dZd;dZd<dZd=dZ	d>dZ
ed?d            Ze	 d@dAd             ZedBd!            ZdCd,ZdDd1Z	 d@dddd2d3dEd6ZdS )FMetaConverterFr   r   rA   r1   rV   c                   t          j                    | _        t          j                    | _        d| _        d| _        d | _        d| _        || _        t          |          | _
        d S )Nr   r   )weakrefWeakValueDictionarystorage_memotensor_memohitmissdel_hookarg_cntr   r}   	describerr   s     r6   r   zMetaConverter.__init__j  sk     ')) 	 ')) 	 	
 #,yAAAr8   c                .    | j         dk    o
| j        dk    S )Nr   )r  r  rj  s    r6   
successfulzMetaConverter.successful  s    x!|.	Q.r8   r/   r:   rO  c                B    | j                             |j        d           S rI   )r  getr   r   s     r6   get_tensor_memozMetaConverter.get_tensor_memo  s    ##AD$///r8   r<   c                z    | j                             |j        d           }|t          d|j         d          |S )NzTensor memo for id z is None)r  r  r   rR   )r   r/   r   s      r6   _checked_get_tensor_memoz&MetaConverter._checked_get_tensor_memo  sB      t,,9 !Eqt!E!E!EFFFr8   rS  c                $    || j         |j        <   d S rI   )r  r   )r   r/   rS  s      r6   set_tensor_memozMetaConverter.set_tensor_memo  s    !"r8   r   r   r  c                B    | j                             |j        d           S rI   )r  r  r   r   s     r6   get_storage_memozMetaConverter.get_storage_memo  s     $$QT4000r8   r   c                $    || j         |j        <   d S rI   )r  r   )r   r   rS  s      r6   set_storage_memozMetaConverter.set_storage_memo  s    "#!$r8   callback0Callable[[Callable[[], torch.Tensor]], _TensorT]c                   |                                x} |fd                                          }| j        rt          j                    5  t                      5  j        t          d          t          |j        	                                           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | 
                    |           |S |S )Nc                 P    t          j         j        t           j        d          S Nmetari   r   )rJ   emptyr   uint8)r   s   r6   r   z,MetaConverter.meta_storage.<locals>.<lambda>  s    AF%+fMMM r8   z.s.data must not be None when copy_data is True)r  r   r   rJ   no_gradr#   r   rR   r   rs  r  )r   r   r  memor_ss    `   r6   meta_storagezMetaConverter.meta_storage  sp    ))!,,,D5(MMMM o  ~ ; ]__ ; ;kmm ; ;v~,L   &c16<<>>:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; !!!S)))JKs6   C">B, C,B0	0C3B0	4CC
Crf   c                6    t          j        t          |          S rI   )typingcastr<   )clsr/   s     r6   _checked_cast_tensor_tz$MetaConverter._checked_cast_tensor_t  s     {8Q'''r8   Nr=  r   torch.device | str | Nonec                <    |                       |                      S rI   )r  )r  r/   r   s      r6   _identity_callablez MetaConverter._identity_callable  s     ))!!##...r8   c                    t           j        j                            dd          } ||          }t	          j        t          |          S )Nz9Internal error: Tried to backward() through example inputr   )rJ   r   
_functionsDelayedErrorr  r  r<   )r  r/   errfnerrs       r6   _backward_errorzMetaConverter._backward_error  sC    #00G
 
 eAhh{8S)))r8   
outer_sizerM  outer_stride	shape_envShapeEnv | Noneru  <torch.fx.experimental.symbolic_shapes.SymbolicContext | None&_MetaTensorCallbackOptDevice[_TensorT]sourcetorch._guards.Sourcec           
         ddl m} ddlm}	 |j        |                     |||||          S i }
|j                                        D ]\  }}d }|t          ||	          st          dt          |                     ||j
        vrt          d|d          |j
        |         x}	 )t          t          j        j        j        j        |          } |||          }t#          j        ||j                  }|                     ||j        |j        ||||          }||
|<   |j        r|
                    |j                   |j	        t          d          |j	                            |
|j        ||          S )	Nr   
AttrSourcer{  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  r{  r   meta_tensorr`  r5   rR   r   r  r   rJ   fxexperimentalsymbolic_shapesr-   	functoolspartialr   _empty_create_subclassr   ru   r   rh  __tensor_unflatten__r   )r   r/   r  r  r  ru  r  r  r  r{  inner_tensorsr  meta_tensor_desccurrent_contextcurrent_context_current_sourceinner_callbacknew_empty_tensors                     r6   r  z$MetaConverter._empty_create_subclass  s    	433333QQQQQQ 7?##    ?A&'gmmoo 	3 	3"D""O+!"24KLL (YFVAWAWYY   />>>(KtKKK   )9(G(MM$ '4-=M(' 'O
 (Z55N&.x@P@WXXXN#::  % '    #3M$ > 	1  0006> !GHHHv**15*l
 
 	
r8   	callback__MetaTensorCallback[_TensorT]Source | NoneSymbolicContext | Nonec                z#   "#$%&'()*+, t          j        |j                  &&ddlm}  |dt           j                             d}t          j        	                                
                    t          j        j        j                  rt          |           xj        dz  c_        t          j        )j        )fdVfd,fdW,fd}fdX& fd'dY$fd $fdZ$&') ,fd"}	                               d#"t          j        j                  5  j        rj        }
 &fd$          } j        rj        t          d%          t          j                    5  t5                      5  t7          |          st          d&          t9          j                  |_        d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t=          |          st          d'          |                    tA          j!                             j"        rd(|_"        j"        r{|
sy #                    |$                                          }t          j%                    5  |                    tA          j!                             d d d            n# 1 swxY w Y   n-tM          j'                  rj        }
j'        t          j(        t          j)        hv rtj*        t          d)          j+        t          d*          j,        t          d+          j-        j*        z
  j+        z
  }j,        j.        |dz   |d,z            %nd-%j'        t          j/        t          j(        hv r#j0        t          d.          j0        j1        (n"j2        t          d/          j2        j1        ( &%(fd0          } j        rj        t          d%          t          j                    5  t5                      5  t7          |          st          d&          t9          j                  |_        d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t=          |          st          d'          j"        rd(|_"        j"        r|
s 3                    |          }nj4        r+j5        s$dd1l6m7}  |d2tq                    d3g 4           
nj9        rvj        }
 ,          \  *+} &*+fd5          } j        rt          j                    5  t5                      5  j:        t          d6          j;        t          d7          t7          |          st          d&          t          j<        j:        j;        j1        j        8          |_        j        t          d%          t{          |j        j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t=          |          st          d'          j"        rd(|_"        j"        r|
s 3                    |          }	ngj>        rBj?        r"dd1l6m7}  |d9tq                    d3g 4           d["#& fd:# #          }	nj@        rj        jA        d;vrjB        t          d<          j>        rt          d=           C                    jB        &          } #                    t          jD        |                    }t          jE        jF        |           n|j?        r3jG        t          d>          d }rECdd?lHmI} t          |          st          d@t                               jK        jK        }rL                                nt          j                    5   C                    jG        &t          jM        jN        O                    dA          |          }d d d            n# 1 swxY w Y   d\dF}t          j        P                    t          j        j        jQ                  }t          j        R                    t          j        j        jQ        dG           	 |j1        j1        k    rn ||j1        j1                  r( #                    t          jS        |                    }nk |j1        |j1                  r( #                    t          jT        |                    }n- #                    |U                    j1                            }j        rEt          j                    5   |	|          }d d d            n# 1 swxY w Y   j"        |_"        n$jG        j"        j"        k    r8t          j%                    5   |	|          }d d d            n# 1 swxY w Y   n׉j"        st          dH          t          j                    5  t                      5   #                    |U                    |j.                            }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   j"        |_"        t          j%                    5   |	|          }d d d            n# 1 swxY w Y   jW        t          dI          t          j        jX        Y                    |jW                   t          j        R                    t          j        j        jQ        |           n9# t          j        R                    t          j        j        jQ        |           w xY wj        |_Z        nAj        }
j[        sj\        sj>        sj]        rt          cd d d            S  ,          \  *+}j5        r '*+J          }n &*+fdK          } j        rt          j                    5  t5                      5  j:        t          d6          j;        t          d7          t7          |          st          d&          t          j<        j:        j;        j1        j        8          |_        t{          |j        j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t=          |          st          d'          j"        r#j"        |_"        |
s 3                    |          }j_        }|t          dL          |j`         ja        vr|j4        s0|;                                +k    r|b                                |k    r c                    ||d                                            j        rmt7          |          st          d&          |j        t          dM          t          |d                                |j        d                                           n f                    |&N          }t          j                    }ddOlgmh}mi}  ||          }| ||          }t          j                    5   )            5  |5  |j                    ||*+           d d d            n# 1 swxY w Y    j        rt          j                    5  t5                      5  t7          |          st          d&          |j        t          dM          j;        t          d7          |j        j                    t          |          jb        j:        j;                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   jl        cddPlmO}  |dQ          }}*(t          jl                  s $jl        |&          } C                    jl        &||          |_l        t          j        n                    |jo                   t          j        p                    |jq                   d d d            n# 1 swxY w Y   j\        o
jr        "k    } t          t          |d(| R           ddSlHmu}! j_        @ |!j_        j:        dk              r'|d                                v                    d           jw        rd(|_x        jy        Ct7          |          st          dT          |jz        {                    jy        U          |_|         }                    |            ~                              S )]Nr  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   r/   r:   rn  r  ru  r  r1   Dtuple[tuple[IntLikeType, ...], tuple[IntLikeType, ...], IntLikeType]c           	         ddl m  j        t          d          	) j        }t          fd j        D                       p/t          fd j        D                       p  j                  }||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                  }	                    ||| fdt           j                  D             || j        	          S  j         j         j        fS )
Nr   )is_symbolict.stride must not be Nonec              3  .   K   | ]} |          V  d S rI   r   )rV  szr  s     r6   	<genexpr>zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>T  s+      99BB999999r8   c              3  .   K   | ]} |          V  d S rI   r   )rV  sdr  s     r6   r  zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>U  s+      >>r;;r??>>>>>>r8   c              3  B   K   | ]}                     |          V  d S rI   #_maybe_specialize_sym_int_with_hint)rV  r  r  s     r6   r  zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>d  sE       # # "EEbII# # # # # #r8   c              3  B   K   | ]}                     |          V  d S rI   r  )rV  r  r  s     r6   r  zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>h  sE       % % "EEbII% % % % % %r8   c                "    g | ]}|j         v S r   rb  )rV  dr/   s     r6   rY  zWMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<listcomp>s  s!    NNN1a66NNNr8   )ru  hint_overrides)r  r  ru   rR   r   anyr   rv   r  r^  r  -_create_symbolic_sizes_strides_storage_offsetranger   r   )
r/   rn  ru  r   has_symbolict_sizet_stridet_storage_offsetr  r  s
   `       @r6    sym_sizes_strides_storage_offsetzCMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offsetE  s    JIIIIIx$%@AAA$K	9999!&99999 5>>>>QX>>>>>5"{1#344 
 (Y-@I-M-M FAHa.>??)( *(0FAHa.>?? # # # # #"#&# # #  F  % % % % %"#(% % %    H (1'T'T(( ($ %RR (NNNNafNNN)9'('> S    !*:;;r8   inner_t	inner_srcrf   c                `     | ||          \  }}}t          j        ||| j        d          S r  rJ   empty_stridedri   )r  r  ru  inner_sizesinner_strides_inner_storage_offsetr  s         r6   empty_createz/MetaConverter.meta_tensor.<locals>.empty_create{  sN     10)EUVV	%&m	   r8   r  tuple[IntLikeType, ...]r  r  torch._guards.Source | Noner<   c           	     :   ddl m} | j        t          d          | j        t          d          ||n| j        }||n| j        }|/t          ||          st          dt	          |                     |t          d                              | ||	||          }|j	        |k    r"t          d| j         d| d	|j	                   |                                |k    r/t          d| j         d
| d	|                                           |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 )
r  r{  r   rR   r   r   ru   r5   r  rj   )
r/   r  r  ru  r  r{  subr  r   r  s
          r6   empty_create_subclassz8MetaConverter.meta_tensor.<locals>.empty_create_subclass  s    VUUUUUw$%LMMMv~$%KLLL (2'=16J+7+C<<L+J "95 5+ %]TJZE[E[]]   ~$%>???-- 
 
C yJ&&$I!& I I&0I I=@YI I   zz|||++$O!& O O'3O O@C

O O  
 Jr8   r  5torch.fx.experimental.symbolic_shapes.ShapeEnv | Noner  r  rv  c                <   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                                        D ]T\  }}t          |t                    st          dt!          |                      | |||          ||          |
|<   U ||	d g| j
        z  |
||          }n ||	d g| j
        z  |	          }|S )
Nr   r  )
DimDynamicrz  r{  't.base must not be None for view tensorrz   r  zExpected attr to be str, got )r  constraint_sizesr  tensor_sourcer  )r  r  r  )r  r  r  r
  rz  r{  rw   ry   rR   DYNAMICr   r$   r   r`  r5   rR  r   )r/   r  r  r  r  r
  rz  r{  r  t_dynamic_sizesr  r  r  t_symbolic_contextall_dynamic_symbolic_contexts                 r6   r  z?MetaConverter.meta_tensor.<locals>.all_dynamic_symbolic_context  s    877777            y 6>()RSSS$@$@FJJvw77H% %!
  *12QV;O. 7?()PQQQ   $%7==??  KD%%dC00 ,HDJJHH   ,H+Gzz&$77H, ,N4(( &=%<"1&*Vaf_#1"(&7& & &"" &>%="1&*Vaf_&7& & &" &%r8   ry   c           	     >   t                      5   |          \  }}}|j        sgt          |           sX             5                      |                     |||                    cd d d            cd d d            S # 1 swxY w Y   ddlm ddlmm} dfd}i |j        r|j	        t          d	          |j        t          d
           |||          }|                                \  }	}
|	D ].}||j	        v r#t          ||          |j	        |         j        <   /fdfd}|j        t          d          |j                            || ||          }t#          j         ||                                |                     t#          j         ||                                |                     t#          j         ||                                |                     |cd d d            S # 1 swxY w Y   d S )Nr   )EphemeralSource)rz  sym_eqr   r  r1   r.   c                    ddl m d uo/t                    ot          fdj        D                       }|s| S  d          }                    | |d           }                    || |          S )Nr   )r
  c              3  *   K   | ]}|j         u V  d S rI   )STATIC)rV  xr
  s     r6   r  z_MetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fn.<locals>.<genexpr>N  s?           ! !22           r8   r&  )positive)hintr  )r  r
  r5   allr  create_symbolcreate_symintnode)	r   all_static_sizes
sym_sourcesymbolr
  r  rz  r  ru  s	       @r6   r&  zLMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fnG  s    PPPPPP )4 &'79QRR        %5%C        % ( !9+<  "11D!E!EJ&44Q
T4RRF$66Qz 7   r8   r  r  r  r  	visited_trf   r  r  r  r  c                   | d S 
j                             |           }	                    |          }||S 
j                             |           } d          }
                    |||| ||||                    S )Nr(  )r  r   r  r~   r  )r"  r  r  
visited_idfake_visited_tvisited_desctemp_sourcer  r  real_to_fake_mappingr   s          r6   r(  zLMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.tensor_visitor_fn  s     !(#t "&!=!=i!H!HJ%9%=%=j%I%IN%1--#'>#A#A)#L#LL #2/2E"F"FK++$! #44(+y(   r8   z,t.view_func must not be None for view replay)r   r  r1   r.   )r"  rf   r  r  r  r  r1   rf   )r    r$   r  
as_stridedr  r  r  rz  r  r   rR   r   r   r\   r   r   r,  rJ   _checkr   ru   rv   )ry   r/   r  sizesstridesrv   r  r&  fake_tr   _r  r(  r  rz  r(  r  r  r  maybe_suppressr   r  r  ru  s     `          @@@r6   view_from_basez1MetaConverter.meta_tensor.<locals>.view_from_base*  s    *++ O O3S3Sv4 40 7
9$??
 ())  #:: OOE7NKK         O O O O O O O O       
 A@@@@@       
        < (*$2 w,-TUUU v~,-STTT (='<e'( ( (F  &88::HE1 %  17??EL &F F01AB 'GO' ' ' ' ' ' ' ' ' 'V ;&()WXXX **%%  VVFKKMM599:::VVFMMOOW==>>>VVF$9$9$;$;^LLMMM_O O O O O O O O O O O O O O O O O Os6   1H*B/HB	HB	E5HHHc                     t           j        j                             j         j         j         j        t           j        d          S )Nr  )ri   rp   r   )	rJ   opsaten_sparse_coo_tensor_with_dimsrr   rq   r   ri   r   rE   s   r6   r   z+MetaConverter.meta_tensor.<locals>.<lambda>  s>    	 K KLKF"#'#(#3#) !L ! ! r8   .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                            dj        j         j        j        d          S )Nr   r  )rp   ri   r   )rJ   r3  r4  #_sparse_compressed_tensor_with_dimsrq   rj   rp   ri   )	blocksizeindex_dtyper/   s   r6   r   z+MetaConverter.meta_tensor.<locals>.<lambda>  sA    	 R RKG%'#$8"#'#) !S 	! 	! r8   )unimplementedz;attempted to apply meta conversion to strided nested tensorzThis is not supported.)gb_typecontextexplanationhintsc                 >    t          j         j        d          S r  r  r+  r,  r/   s   r6   r   z+MetaConverter.meta_tensor.<locals>.<lambda>K  s$     3!7!'&! ! ! r8   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	                  5  
                    t          |||                    }d d d            n# 1 swxY w Y   n j        r> j        t          d           j        t          d          t
          j        j        } |            5   
 j                  }d d d            n# 1 swxY w Y    j        }|	k    r|}nyt
          j        j                             j	                  5  
                    t
          j        j                            ||                    }d d d            n# 1 swxY w Y    j        } j        rt%          |          r	d|_        n j        r|s                    |          }ng j        rs j        t          d           j        t          d                               j                  }
                    t/          | j                            }n j        t          d	           j         j          fd
          }j        rt          j                    5  t9                      5  t          j         j         j         j         j                  |_          j!        t          d          tE          |j          j!                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |S )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                 >    t          j         j        d          S r  r  rB  s   r6   r   zDMetaConverter.meta_tensor.<locals>._to_fake_tensor.<locals>.<lambda>  s'    (;$)$+*+'+1	)" )" )" r8   r  r6  )#r   r   rR   r   r   rJ   r   r   %temporarily_restore_interpreter_stackr   r  r   r   r   _DisableFuncTorch_wrap_for_gradrC   rk   rF   r  r   r   r  r   ru   r   r   r  r#   r  ri   r   real_tensorr   rq  )r/   ftlvlr   r   disable_functorchrC   r+  r,  GRAD_TENSOR_SENTINEL_VALUE_to_fake_tensorr  r   r  r  ru  s   `      @@r6   rN  z2MetaConverter.meta_tensor.<locals>._to_fake_tensory  s_    - iF {2&4$T'" '" !"  !w&4$P'" '" !"  !v~&4$O'" '" !" "1!=!=B"#'C#$6D
 "'!1!=!c!c ! 1" " " " %)$?$?$22tS$A$A%" %"" " " " " " " " " " " " " " " 4 OF {2&4$Y'" '" !"  !w&4$U'" '" !" 160J-!2!2!4!4 B B%4_Q[%A%AB B B B B B B B B B B B B B B"#'C"&@@@$&%*%5%A%g%g$%$5&" &" !& !& )-(C(C(-(;(J(J2s(S(S)& )&A!& !& !& !& !& !& !& !& !& !& !& !& !& !& !& '(iG  <<?? <26!" < <$($8$8$;$;_ 3F {2&4$X'" '" !"  !6&4$\'" '" !" "&!1!1 ! ) (
 !' 0
" 
"B !% ; ; 7AO L L! !AA
  !x/&45P&Q&Q Q$%FE&'hG (!" !" !" !" !" !"! !A  $~ F%*]__ !F !Fkmm !F !F494G()()./g/0x	5& 5& 5&AM ()v~.<,\/* /* )* %/q}af$E$E$E!F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F !F  !sm   %CC
C
"D??EE9GGG!M50A"MM5M"	"M5%M"	&M55M9<M9r   rD  z0Expected non-functorch wrapped functional tensorr  )rz  z'Expected StatelessSymbolicContext, got rz   complex_dtyperK  
real_dtyperA   c                Z    t          j        |           ot          j        |           |k    S rI   )utilsis_complex_dtypecorresponding_real_dtype)rO  rP  s     r6   	is_c_of_rz,MetaConverter.meta_tensor.<locals>.is_c_of_r*  s2     "2=AA * % >} M M)!*r8   Fz.t.requires_grad must be True for non-leaf viewz0t.creation_meta must not be None for view tensorr!  c                 >    t          j         j        d          S r  r  rB  s   r6   r   z+MetaConverter.meta_tensor.<locals>.<lambda>  s'    E$7 % '&'g'-	% % % r8   zt.storage must not be Nonez5r.real_tensor must not be None when copy_data is True)r  )in_kernel_invocation_managerr	  r  rO   r`   )guard_or_falsez,Expected r to be a FakeTensor for nested int)nt_tensor_id)r/   r:   rn  r  ru  r  r1   r  )r  r:   r  r  ru  r  r1   rf   )r/   r:   r  r  r  r  ru  r  r  r  r1   r<   )
r/   r:   r  r  r  r  r  r  r1   rv  )ry   r<   r/   r:   r  r  r1   r<   r/   r:   r1   r<   )rO  rK  rP  rK  r1   rA   )r  r  r   r  r  r  r  rJ   r   _dispatch_tls_local_exclude_sethasDispatchKeyPythonrR   r  
contextlibnullcontextsuppress_guardsr  inference_moderm   rl   rC   r   r   r  r#   r7   rt  rI  rF   _coalesced_rA   rs   rk   r  rs  enable_gradr   rp   r   r   rr   rq   r   r   rj   r   r   ri   r   r  r   r$   torch._dynamo.excr<  rR  r   r   ru   r  rq  r   rw   r   r   r   r  _to_functional_tensor_mirror_autograd_meta_tor   ry   r  rz  r5   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  rv   r  r   r   r  r4   rW  r	  set_r   rO   r  	_set_conjrn   _set_negro   r   r   rX   rX  resize_r   	_is_paramr   r   create_symbolic_nested_intnested_int_memor  r  )-r   r/   r  r  r  ru  r  msgr  r0  rC   r   	batch_dimr<  _storage_offsetr   base_symbolic_contextrz  ry   rU  old_excludemidrv   r   r  maybe_fake_mgrrW  r	  mb_fake_moder  grad_sourcegrad_symbolic_contextrb   rX  rM  rN  r  r:  r  r  r;  r/  r+  r,  r  s-   ``` ``                            @@@@@@@@@@@r6   r  zMetaConverter.meta_tensor  s    <E;Lah<
 <
 <
 >;;;;;; $^Ec$2B.C.CEE F
R 	 8335599%(:N:UVV 	& %%%4 -7,B &6N &	4	< 4	< 4	< 4	< 4	< 4	< 4	<t &		 	 	 	 	 	 	2 &28A	 A	 A	 A	 A	 A	 A	 A	 A	N5	& 5	& 5	& 5	& 5	& 5	&p 	U	 U	 U	 U	 U	 U	 U	 U	 U	 U	 U	 U	 U	 U	n ""*)+&%an55 C
/ C
/; c	&iG
 !   	 	A ~ 
@6>"0 P# #  #]__ @ @kmm @ @#21#5#5 V&45T&U&U U,7,?,?AM	@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
 (?? ,G   MM$q~"6"6777 /*. @w @
 !77		BB".00 @ @MM$q~*>*>???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @0:: t&iGxE$4e6F#GGG</"0 W# #  ;."0 V# #  8+"0 S# #  %&FQ\$9AK$G	$%HN9q=9q=3P$Q		$&	xE$4e6F#GGG>1"0 [# #  '(n&:>1"0 [# #  '(n&: 	 	 	 	 	 	 A ~ 
@6>"0 P# #  #]__ @ @kmm @ @#21#5#5 V&45T&U&U U,7,?,?AM	@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
 (?? ,G    /*. 4w 4 0033[ t&)H t& @????? "M ] #A$< 	     [ g&iG
 98FCC	' !      A
 ~ >"]__ > >kmm > > v~&4$T'" '" !"  !x/&4$V'" '" !" $31#5#5 V&45T&U&U U,1,? !- - -AM  !v~&4$T'" '" !" 'q}af==='> > > > > > > > > > > > > > > > > > > > > > > > > > > > > >( (?? ,G    /*. 4w 4 0033+ |&y CCCCCC%$a$'FF(@"$	   o! o! o! o! o! o! o! o! o! o! o! o!b (**AA_ |&o)M)M{*,P   - ,N   !% 0 0! (! !I 333I>> A 213GKKKKY g& v~,-VWWW,0)  W%5%A       **:<TUU "0 b$O_J`J` b b# #  ,=I4D4V1 %6	??AAA'355 
  $//F%$!M0;;FGLL1                     #(("Q"Q,<# #K HDD,<e  K:00 &Ytz17;; 
S#'#>#>u?QRV?W?W#X#XDD&Yqw
;; S#'#>#> % 5d ; ;$ $DD $(#>#>tyy?Q?Q#R#RD& 9 ? "' < <$2N4$;$;< < < < < < < < < < < < < < < /0oAOO v3qFF%*%6%8%8 !@ !@(6tQ(?(?A!@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ !@ () !&*8(X+& +& %& &+]__ !& !&6N6P6P !& !&*.*E*E(,		$*(=(=+& +&C!& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& 56O 1%*%6%8%8 !? !?(6sA(>(>A!? !? !? !? !? !? !? !? !? !? !? !? !? !? !?
 ?2"0 R# #  *==aQQQHH!H0@+   HH!H0@+    %&HAMM  iG /.343J.2. 2.
  .eC
/ C
/ C
/ C
/ C
/ C
/ C
/ C
/p 98FDTUU	&
 6 B11%g   %H        > B!& B B+-- B B#$6>*8(X+& +& %& $%8#3*8(Z+& +& %& (7q'9'9 !&*8(G+& +& %& 160C$%FAHAGAH1" 1" 1" !+1=!& A A A#B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B& (?? ,G    8*+/& 8 !% 4 4Q 7 7A	Ay,-IJJJt4#444 5 HHJJ'11 ! 0 0 2 2n D D --a1B1B1D1DEEE> 	#21#5#5 V&45T&U&U U }4&4$['" '" !" . ! 1 1 3 3Q]5R5R5T5T   #//H/EE, '244 '       
 (;':1'='='3-I-I,-W-WN"]__ & &nn.>.> & &!/ L L !sNE7 K K KL L L L L L L L L L L L L L L#~ &%*]__ !& !&kmm !& !&+:1+=+= %*.<,K/* /* )* ()}'<.<,c/* /* )* ()x'7.<,^/* /* )* %&M$6$6(9#(>(>()(8()()	%& %& %&!& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !& !&	& & & & & & & & & & & & & & & & & & & & & & & & & & & & & &0 6%??????",*VV"<"<K,<) !,1A1M78H!&QQ 4P4P !Y5 51
 "--! #- AF ""1ai000!!!QX...GC
/ C
/ C
/ C
/ C
/ C
/ C
/ C
/ C
/ C
/ C
/ C
/ C
/ C
/ C
/L 'QAG7Q,Q  y!QdiXXXX MLLLLLy$	!8K)L)L$!!##++A...~ #" |'&q)) Y()WXXX$%K$J$J!" %K % %!
   A&&&,,Q///s,  0AAB7>G(8GG(GG(GG(AB7(G,	,AB7/G,	0BAB7	(J=1AB7=K	AB7K	EAB7R	.8Q2&R	2Q66R	9Q6:R	=AB7	R	AB7R	C
AB7X9*B,X"X9"X&&X9)X&*X9-AB79X=	=AB7 X=	G
AB7AaAB7a	AB7 a	!A.AB7Cm/$f=1m/=g	m/g	9m/>hm/h	m/h	-m/j,.j	j,jj,jj, m/,j0	0m/3j0	4"m/k/#m//k3	3m/6k3	7Am/:5AB7/6n%%:AB7,AAB7=tBs."t.s22t5s26t9AB7t			AB7t		F#AB70,;>{#	#{''*{'+~>	B~'~>	'~++~>	.~+/~>	2>	,,, AB7,0	0AB730	4B7AB7B7AB;B>AB;T)r  r  ru  r   $_MetaTensorCallback[_TensorT] | Noner   c               \    | j         }n|}t          |t          j                  rf|j        j        dk    s.|j        s'|                                r*|j        #|j        j	        r xj
        dz  c_
        t          S  xj        dz  c_        n8t          j                            |          r xj
        dz  c_
        t          S |S d} j                            ||          |r't#          d          t%          d fd           t'          j                    5 }|                    t          j        j                                                   t3                      }	|	6|                    t          j        j                                                                        |||          }
d d d            n# 1 swxY w Y   t          |          t          j        j        u rd	|
_         tC          |d
d          r#d	|
_"        tG          |d          r|j$        |
_$        |
S )Nr   r   Fr   z*source must not be None when trace is Truedescribe_sourcec                 8     j         j        j        j        dS )N)r  r   r  )r  r   rc  )r   r  t_descs   r6   r   z(MetaConverter.__call__.<locals>.<lambda>  s!    $(N$5 )$k% % r8   r   T
_is_buffer
persistent)%r  r5   rJ   r|   r   r   is_quantizedrx   rz   rl   r  rr  r  	overridesis_tensor_liker  r~   rR   r!   r_  	ExitStackenter_context	_dispatchpythonsuspend_functionalizationr   r   r   r   r  r  r  rw  r\   r  r   r  )r   r/   r  r  r  ru  r   r  
exit_stackstr   r  s   `   `      @r6   r@  zMetaConverter.__call__j  s    /II I a&& 	 ''  (  ( #$'"5!':K"5		Q		%%A_++A.. 	IINII!! H>E ///?? 
	~$%QRRR!         !## 	z$$U_%;%U%U%W%WXXX'))B~(($0TTVV       A	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  77eh((( AK 1lE** 	,ALq,'' , | s   $BGG
G
r  )r1   rA   )r/   r:   r1   rO  rZ  )r/   r:   rS  r<   r1   rV   )r   r   r1   r  )r   r   rS  r   r1   rV   )r   r   r  r  r1   r   )r/   rf   r1   r<   rI   )r/   r=  r   r  r1   r<   )r/   r<   r1   r<   )r/   r:   r  rM  r  rM  r  r  ru  r  r  r  r  r  r1   r<   )r/   r:   r  r  r  r  r  r  ru  r  r1   r<   )r/   rf   r  r  r  r  r  r  ru  r  r   rA   r1   r<   )r  r  r  r   r  r  r  r  r  r  r  classmethodr  r  r  r  r  r@  r   r8   r6   r  r  i  s       ,1 B B B B B B*/ / / /0 0 0 0   # # # #1 1 1 1$ $ $ $   2 ( ( ( [(  -1/ / / / [/ * * * [*A
 A
 A
 A
R\0 \0 \0 \0B# &*g
 :> $37 g g g g g g g gr8   r  )r/   r0   r1   r2   )r/   r@   r1   rA   )r/   r9   r1   rG   )r/   r9   r1   r9   )rT   r;   rU   r;   r1   rV   )r1   rY   )rX   rc   rd   r@   re   rf   ra   rA   rb   rA   r1   rV   )r/   r0   r1   r   )rp   r   r1   rA   )r   r   r   r0   r1   r;   )ry   r   r1   r   )ry   r   r   r   r1   rV   )rm  rf   rn  rO  r1   rV   )rn  rf   r1   rO  )ru  rv  rw  rx  r1   rA   )p
__future__r   r_  rf  r  	threadingr  r  abcr   r   r   r   r   r	   r
   r   r   r   r   r   typing_extensionsr   r   r   r   rJ   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)   r4   r*   r+   r  r,   r-   torch.typesr.   r7   r  DimListr|   r9   r;   r<   r>   rF   rP   rS   rX   localr]   r[   r_   r   r   r   rt   r   r   r   r   r  r   r   r   r   r}   r   r   r/  r0  r;  rC  rF  r   rq  rt  r  r  torch._prims_common_prims_commonrR  r   r8   r6   <module>r     s~   " " " " " "                         = = = = = = = = ! ! ! ! ! !	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 B A A A A A A A A A A A  + + + + + +                          < ; ; ; ; ; + + + + + + ) ) ) ) ) ) / / / / / / F F F F F F 0 0 0 0 0 0  (33333333000000$$$$$$HHHHHHHH
 POOOOOOO''''''% % % % w~'<elKKWT]]7:U\222w~U\TJJJ         , , , ,
 io #  + + + +  ; ; ; ; ; ;~H H H H   Q Q Q Q
7 7 7 7      % % % % --w~s++ w~s++ LOO c c c c c c c cL	 $
 
 
 
 
 
 
 
 $8 8 8 8 8wx  8 8 8$ $
 
 
 
 
(<0 
 
 
$ $I I I I Ihx('(*; I I I6    (GL$9       	        8W\-B    $X X X X XWX& X X XN      8 8 8 8Dh h h h hGH% h h hV+ $ # # # # # # #r8   