
    sgt)                   *   U d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZ d dlZd dlmZ d dlmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# d dl$m%Z% d d	l&m'Z' d d
l(m)Z) d dl*m+Z+ erd dlm,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 eZ4d Z5d Z6d Z7ddd	 	 	 d)dZ8d Z9d Z:d Z;d Z<e=Z>de?d<   e=Z@de?d<   d aA G d d      ZB ed        G d! d"             ZC ed        G d# d$             ZDd% ZEd& ZF G d' d(      ZGd dlHmIZJ y)*    )annotationsN)	dataclass)AnyCallableClassVarContextManagerDictListOptionalTupleTypeTYPE_CHECKINGUnion)	TypeAlias)CreationMeta)_add_batch_dim_unwrap_functional_tensor_wrap_functional_tensorget_unwrappedis_batchedtensoris_functorch_wrapped_tensoris_gradtrackingtensoris_legacy_batchedtensormaybe_get_bdimmaybe_get_levelpeek_interpreter_stack)trace_structured)no_dispatch)is_traceable_wrapper_subclass)WeakIdKeyDictionary)CInterpreter)Source)FakeTensorMode)ShapeEnvSymbolicContextc                :    	 | j                   S # t        $ r Y yw xY w)NF)is_leafRuntimeErrorts    O/var/www/html/venv/lib/python3.12/site-packages/torch/_subclasses/meta_utils.pysafe_is_leafr,   ;   s#    yy s    	c                    t        j                         5  t        j                  dd       | j                  cd d d        S # 1 sw Y   y xY w)NignorezThe .grad attribute of a Tensor)warningscatch_warningsfilterwarningsgradr)   s    r+   	safe_gradr3   C   s;    		 	 	" *KLvv  s   "AA
c                &    | |k(  sJ |  d|        y )Nz !=  )abs     r+   	assert_eqr8   I   s    6 aSQC= 6    Fskip_symbolic	skip_leafc                    t        |t        j                        rt               j	                  |      } fd ||      S )Nc                    | j                   |j                          s | j                  |j                          | j                  |j                         s | j                  |j                          | j                  |j                          | j
                  |j                                 | j                  |j                                 | j                  |j                                 | j                  d ut        |      d u       | j                   | j                  t        |             | j                  r | j                  |j                          | j                  |j                                 | j                  |j                                 | j                  |j                                y t        |       r` | j                  |j                          | j                  |j                                 | j                  |j                                y sB | j                  |j                                 | j                   |j!                                 | j"                  |j%                                | j"                  r | j&                  |j(                         y y N)dtypeshaperequires_gradr'   	is_sparseis_inferenceis_conjis_negr2   r3   layout	dense_dim
sparse_dimis_coalescedis_sparse_compressedstridestorage_offsetis_view_is_viewbase_base)m1m2r8   gor<   r;   s     r+   rT   zassert_metadata_eq.<locals>.goX   s   "((BHH%bhh)"""B$4$45bjj"**- 	",,-"//2??#45"**bjjl+"))RYY[)"''%y}D'@A77rww	"& <<bii+bllBLLN3bmmR]]_5boor'89!"%bii+bllBLLN3bmmR]]_5 "))RYY[1"++R->->-@Abjj"++-0zz277BHH% r9   )
isinstancetorchTensorMetaTensorDescriberdescribe_tensor)r8   rR   rS   r;   r<   rT   s   `  ``@r+   assert_metadata_eqrZ   M   s:     "ell# "2226!&L b":r9   c                r    t        | t        j                        xr | j                  t        j                  u S r?   )rU   rV   rW   rG   
sparse_coor)   s    r+   is_sparse_coor]      s'    a&G188u7G7G+GGr9   c                    | t         j                  t         j                  t         j                  t         j                  hv S r?   )rV   
sparse_csr
sparse_csc
sparse_bsr
sparse_bsc)rG   s    r+   is_sparse_compressed_layoutrc      s8    	  r9   c                d    t        | t        j                        xr t        | j                        S r?   )rU   rV   rW   rc   rG   r)   s    r+   rK   rK      s"    a&P+Fqxx+PPr9   c                2    t        |       xs t        |       S r?   )r]   rK   r)   s    r+   is_sparse_anyrf      s    63A66r9   r   MetaStorageIdMetaTensorIdc                  T    e Zd ZdZdddZddZddZddddZd	dd
	 	 	 	 	 ddZy)rX   a  
    Given a Tensor/Storage, generate a MetaTensorDesc/MetaStorageDesc
    for it, which is enough information to reconstruct a meta tensor/fake tensor
    corresponding to a Tensor as faithfully as possible.

    This is a stateful conversion object because we keep track of the IDs
    of the tensors/storages passed to us, so we can consistently give
    the same ID when we see the same tensor/storage.
    F	copy_datac                   t         | _        t         dz  a d| _        d| _        t	               | _        t	               | _        || _        t               | _	        t               | _
        y )N   r   )DESCRIBER_NEXT_IDidnext_tensor_idnext_storage_idr    lookup_tensorlookup_storagerk   settraced_tensorstraced_storagesselfrk   s     r+   __init__zMetaTensorDescriber.__init__   sU    #Q,-./0213"!e"ur9   c                    || j                   vr.| j                  | j                   |<   | xj                  dz  c_        | j                   |   S Nrm   )rr   rp   rx   r*   s     r+   get_tensor_idz!MetaTensorDescriber.get_tensor_id   sH    D&&&$($7$7Dq!1$!!!$$r9   c                    || j                   vr.| j                  | j                   |<   | xj                  dz  c_        | j                   |   S r{   )rs   rq   rx   ss     r+   get_storage_idz"MetaTensorDescriber.get_storage_id   sH    D'''%)%9%9D"  A% ""1%%r9   tracec                   t         j                  |      |j                          j                  r|nd       |rNj                   j
                  vr6t        d fd        j
                  j                  j                         S )N)ro   sizedatadescribe_storagec                 :     j                  j                        S r?   as_jsonro   rrx   s   r+   <lambda>z6MetaTensorDescriber.describe_storage.<locals>.<lambda>       AIIdgg$6 r9   metadata_fn)MetaStorageDescr   r   rk   ro   rv   r   add)rx   r   r   r   s   `  @r+   r   z$MetaTensorDescriber.describe_storage   st    ""1% nn$
 QTT!5!55"6   $$QTT*r9   Trecurser   c                   t        |      }|j                         }|j                  }|j                  }|j                  }t        |      }	t        |      }
|j                  }t        |      }t        |      }t        |      }|xs |}t        j                  |      }d }d}|sFt        |      s;|r|	r7|s5|
s3|s1 j                  |j                         |      }|j!                         }d }|st        |      s|r|	r|j#                         }d }d }d }|s|r j%                  t'        |      |      }n|r|j(                  j*                  dvr|j                         rt-        d      |
s>t        j.                  |        j%                  t        j0                  |      |      }|}nct        j2                  j5                         } j%                  t7        ||      |      }t        j2                  j8                  j;                         }d }|
r2t        j8                  j<                  j?                         5 }	 d d d        d }d }d }|	rWtA        |d      sJ |jC                         \  }}|D ci c]   }| j%                  tE        ||      |      " }}t+        |      }ddl#m$} tK        d?i d jM                  |      d|d	|jO                         d
|d|jP                  d|jS                         d|jT                  d|d|d|
d|d|d|d|d|jW                         d|jY                         dt[        |t        j\                  j^                        d|	d|d||v r||   j`                  jc                         nd d|d|d|j(                  d|je                         d|d |d!tg        tE        |d"ti                           d#|j                  stk        |      r|jm                         nd d$|j                  stk        |      r|jo                         nd d%|j                  r|jq                         nd d&|rN|j                  t        jr                  t        jt                  hv r" j%                  |jw                         d'|(      nd d)|rN|j                  t        jr                  t        jt                  hv r" j%                  |jy                         d'|(      nd d*|rN|j                  t        jz                  t        j|                  hv r" j%                  |j                         d'|(      nd d+|rN|j                  t        jz                  t        j|                  hv r" j%                  |j                         d'|(      nd d,|r-tk        |      r" j%                  |j                         d'|(      nd d-t        |       j%                  t        |      |      nd d.|j                         r)t        j2                  j                  j                  |      nd d/|d0|s|rt        |      nd d1|rt        |      nd d2|r9|j                         r)|j                   j%                  |j                  |      nd d3t        j                  j                  j                  |      d4|j                  d5|d6|d7|d8|d9|d:|d; j                  r|nd |rNj                   j                  vr6t        d< fd=>        j                  j                  j                         S # 1 sw Y   xY wc c}w )@Nr   r   xlalazyzVCannot safely fakify a view because this process drops the view information right now.__tensor_flatten__)_tensor_symint_registryro   storagerD   r'   rB   ndimr@   rC   	is_mkldnnis_functorch_wrappedr   r   r   rN   rE   rF   is_parameterr   	is_nested
nested_intis_functionalrG   devicer   rL   rM   dynamo_dynamic_indices_dynamo_dynamic_indicesrI   rH   rJ   crow_indicesFr   col_indicesccol_indicesrow_indicesvaluesr2   creation_meta	unwrappedlevelbdimrP   	fake_mode	view_funcattrsctxtypefunctorch_stackautograd_meta_fromcurrent_levelr   rY   c                 :     j                  j                        S r?   r   r   s   r+   r   z5MetaTensorDescriber.describe_tensor.<locals>.<lambda>  r   r9   r   r5   )Qr,   rO   rC   rG   r   r   r   r   r   r   r   rV   _is_functional_tensorrc   r   untyped_storagerM   rL   rY   r   r   r   r(   _sync_from_functional_tensor_C$_functionalization_reapply_views_tlsr   
_functorchr   pyfunctorch#temporarily_clear_interpreter_stackhasattrr   getattr$torch.nested._internal.nested_tensorr   MetaTensorDescr}   rD   rB   dimr@   rE   rF   rU   nn	Parameternoder   r   listrt   rK   rI   rH   rJ   r_   ra   r   r   r`   rb   r   r   r   r3   	_autograd_get_creation_metar   r   rQ   _subclassesfake_tensormaybe_get_fake_mode_view_func_unsaferk   ro   ru   r   r   ) rx   r*   r   r   r'   rN   rC   rG   r   is_traceable_wrapper_subclass_vr   r   is_batchedtensor_vis_legacy_batchedtensor_vis_gradtrackingtensor_vis_functorch_batched_or_gradr   r   rM   rL   r   r   r   reapply_viewsmaybe_functorch_stackr   r   type_v	raw_attrsattrr   r   s    `                              @r+   rY   z#MetaTensorDescriber.describe_tensor   s    q/**,KK	KK	*G*J':1=KK	-a0$;A$>!"7":'9'T=T$33A6 *62"A $( ++A,=,=,?u+MG--/N*62"A
 XXZF
 	!!8,,]1-=U,KI qxx}}OCzz|"l  (A 0011!4E 1 	 &'" % M M O 00-a?u 1 	 !& 3 3 A A C $!!--QQS Wl *12333113NIs & d**71d+;5*IIE  !WFP  g
!!!$g
g
 )g
 	g

 //g
 g
 ''g
  g
  g
  "6!g
" 0#g
$ %>%g
& #:'g
( )g
* IIK+g
, 88:-g
. $Auxx'9'9:/g
0 +J1g
2  3g
8 // (*//::<;g
> (?g
@ Ag
B 88Cg
D Eg
F Gg
H *Ig
J $(3Lce(T#UKg
N #$++1Ea1HdOg
R (){{6J16MakkmSWSg
T ./[[)dUg
` qxxE,<,<e>N>N+OO $$Q^^%5uE$Rcg
j qxxE,<,<e>N>N+OO $$Q]]_e5$Qmg
t qxxE,<,<e>N>N+OO $$Q^^%5uE$Rwg
~ qxxE,<,<e>N>N+OO $$Q]]_e5$QAg
H 3A6 $$QXXZe$LKg
R Q<+ $$Yq\$?Ug
Z =>JJL""55a8d[g
^  _g
d &)@  "gg
j '9"dkg
p qzz|0C $$QWWE$:sg
v ''33GGJwg
x ))yg
z {g
| }g
~ g
F 2Gg
H  2Ig
J (Kg
L nn$Mg
P QTT!4!44!6 ##ADD)C s   :\;1%];]N)r*   torch.Tensor)r   torch.UntypedStorage)r   r   r   bool)r*   r   r   r   r   r   )	__name__
__module____qualname____doc__ry   r}   r   r   rY   r5   r9   r+   rX   rX      sO     %* %%& JO " 37eSS+/S?CSr9   rX   T)frozenc                  2    e Zd ZU ded<   ded<   ded<   d Zy)	r   rg   ro   intr   zOptional[torch.UntypedStorage]r   c                    | j                   |t        | j                  t              r| j                  dS t	        | j                        dS )N)ro   describer_idr   )ro   rU   r   r   repr)rx   r   s     r+   r   zMetaStorageDesc.as_json  sC    ''(!+DIIs!;DII
 	
 BFdii
 	
r9   N)r   r   r   __annotations__r   r5   r9   r+   r   r     s    
I )(
r9   r   c                     e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ej
                  Zded<   dZded<   dZded<   dZ	ded<   dZ
ded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded <   dZded!<   dZded"<   dZded#<   dZd$ed%<   d&Zded'<   dZd(ed)<   dZded*<   dZded+<   dZd,ed-<   dZd.ed/<   dZd.ed0<   dZ d.ed1<   dZ!d.ed2<   dZ"d.ed3<   dZ#d.ed4<   dZ$ded5<   dZ%d.ed6<   dZ&d7ed8<   dZ'd9ed:<   dZ(d.ed;<   g d<Z)d=ed><   dZ*d?ed@<   dZ+dAedB<   dZ,dCedD<   dZ-dEedF<   dZ.dedG<   dZ/dedH<   dZ0dIedJ<   dZ1dKedL<   dZ2dKedM<   dN Z3e4dO        Z5y)Pr   rh   ro   r   r   ztorch.dtyper@   ztorch.devicer   zTuple[int, ...]r   z	List[int]r   ztorch.layoutrG   Fr   rD   r'   rB   rC   r   r   r   r   r   rN   r   NzOptional[int]r   r   r   rE   rF   r   zOptional[Tuple[int, ...]]rL   r   rM   zOptional[MetaStorageDesc]r   rI   rH   zOptional[bool]rJ   zOptional[MetaTensorDesc]r   r   r   r   r   r   r   rP   z#Optional[Dict[str, MetaTensorDesc]]r   zOptional[CreationMeta]r   r2   )
r   r   r   r   r   r   r   r   r   r   zClassVar[List[str]]_UNSERIALIZABLEzOptional[object]r   zOptional[Type]r   zOptional[FakeTensorMode]r   znOptional[Callable[[torch.Tensor, Callable[[int], int], Callable[[torch.Tensor], torch.Tensor]], torch.Tensor]]r   r   r   zOptional[List[CInterpreter]]r   zOptional[torch.Tensor]r   r   c                t   fdt        j                  |       D ci c]{  }t        | |j                        |j                  u sW|j                  dk(  rt        | |j                        r2|j                   |j                  t        | |j                              } }}|j                  d|i       |S c c}w )Nc                   | dv ry | t        t        j                        v rt        |      S t	        |t
        j                  t
        j                  t
        j                  f      rt        |      S t	        |t
        j                        rt        |      S t	        |t        t        f      r|D cg c]  } | |       c}S t	        |t        t        f      r|j                  S t	        |t              rt        |      S | dk(  r>t	        |t               r.|j#                         D ci c]  \  }}||j                   c}}S |S c c}w c c}}w )N)r   r   r   )rt   r   r   r   rU   rV   r   r@   rG   SymInttupler   r   ro   r   strdictitems)kvv1k1jsons       r+   r   z$MetaTensorDesc.as_json.<locals>.json/  s     22C6677Aw!ellEKKFGAw!U\\*Aw!eT]+./0Q00!o~>?tt!\*1vG|
1d 301	:fb"BEE	::H 1 ;s   0E(E
r   r   )dataclassesfieldsr   namedefaultupdate)rx   r   fieldr   r   s       @r+   r   zMetaTensorDesc.as_json.  s    	. %++D1

ejj)U]]:JJ"::#D%**5 JJUZZuzz)BCC

 

 	
.,/0

s   B B5c                    | j                   S r?   )r   rx   s    r+   rA   zMetaTensorDesc.shapeR  s    yyr9   )6r   r   r   r   rV   stridedrG   rD   r'   rB   rC   r   r   r   r   r   rN   r   r   r   r   rE   rF   r   rL   rM   r   rI   rH   rJ   r   r   r   r   r   r   r   rP   r   r   r2   r   r   r   r   r   r   r   r   r   r   r   propertyrA   r5   r9   r+   r   r     s7   
I %% ==FL(L$GTM4ItIt!&$&"d"$)T)"'4'GTIt !%J$*/!4/M4GTFDL$(,F%,NC
 *.G&- $J$#I}##'L.'-1L*1,0K)0-1L*1,0K)0'+F$+*.I'.D-%)D
")15E.5,0M)0%)D
"),O(  !C	 D.*.I'. 	  	 	  E=#'M='48O1815.5
 $(D
 '"H  r9   r   c                ^    t        |      t        j                  ury | j                  |       y r?   )r   rV   rW   copy_)dstsrcs     r+   
_safe_copyr  c  s     Cy$IIcNr9   c                Z    t        |       t        j                  ury | j                         S r?   )r   rV   rW   clone)r  s    r+   _safe_cloner  i  s!    Cy$99;r9   c                      e Zd ZddddZd ZddZddZddZddZdd	Z	d
d d
d
f	 	 	 	 	 	 	 ddZ
	 dd d
d
dddZy
)MetaConverterFrj   c                   t        j                         | _        t        j                         | _        d| _        d| _        d | _        d| _        || _        t        |      | _
        y )Nr   rj   )weakrefWeakValueDictionarystorage_memotensor_memohitmissdel_hookarg_cntrk   rX   	describerrw   s     r+   ry   zMetaConverter.__init__w  sX    9@9T9T9V 9@8S8S8U	
 #,yAr9   c                B    | j                   dkD  xr | j                  dk(  S )Nr   )r  r  r   s    r+   
successfulzMetaConverter.successful  s    xx!|.		Q.r9   c                N    | j                   j                  |j                  d       S r?   )r  getro   r|   s     r+   get_tensor_memozMetaConverter.get_tensor_memo  s    ##ADD$//r9   c                6    || j                   |j                  <   y r?   )r  ro   )rx   r*   r   s      r+   set_tensor_memozMetaConverter.set_tensor_memo  s    !"r9   c                N    | j                   j                  |j                  d       S r?   )r  r  ro   r   s     r+   get_storage_memozMetaConverter.get_storage_memo  s      $$QTT400r9   c                6    || j                   |j                  <   y r?   )r  ro   )rx   r   r   s      r+   set_storage_memozMetaConverter.set_storage_memo  s    "#!$$r9   c                   | j                         |fd      j                         }| j                  r]t        j                         5  t               5  j                  J j                  j                         |_        d d d        d d d        | j                  |       |S | j                        S # 1 sw Y   6xY w# 1 sw Y   :xY w)Nc                 d    t        j                   j                  t         j                  d      S Nmetar@   r   )rV   emptyr   uint8)r   s   r+   r   z,MetaConverter.meta_storage.<locals>.<lambda>  s    AFF%++fM r9   )
r  r   rk   rV   no_gradr   r   r  real_storager  )rx   r   callbackr_ss    `  r+   meta_storagezMetaConverter.meta_storage  s       #+Mo  ~~ ]]_ 6km 666---'(vv||~C$6 6 !!!S)J((++6 6 6 6s$   C.B:C:C	?CCNc                     |        S r?   r5   r)   s    r+   r   zMetaConverter.<lambda>      13 r9   c                L     !"#$%&'( $ddl m}  |dt         j                               t        j
                  j                         j                  t        j
                  j                  j                        rJ  j                  } xj                  dz  c_
        t        j                  %j                  %f	 	 	 d'fd(f	 d((fd}f	 d) fd#	 	 d)!fd!f	 	 	 d*!#% (fd	}	 j                        d
t	        j                  j                         5  j"                  rj$                  }
 fd      } j&                  rXj(                  J t	        j*                         5  t-               5  t/        j(                        |_        d d d        d d d        t3        |      sJ d       |j5                  j6                         j8                  rd|_        j8                  rb|
s_|j;                         }t	        j<                         5  |j5                  j6                         d d d        nt?        j@                        rj$                  }
j@                  t        jB                  t        jD                  hv rpjF                  J jH                  J jJ                  J jL                  jF                  z
  jH                  z
  }jJ                  jN                  |dz   |dz    "nd"j@                  t        jP                  t        jB                  hv r%jR                  J jR                  jT                  $n$jV                  J jV                  jT                  $ "$fd      } j&                  rXj(                  J t	        j*                         5  t-               5  t/        j(                        |_        d d d        d d d        t3        |      sJ d       j8                  rd|_        j8                  	r=|
	s:t	        j
                  jX                  j[                  dd      |      }	n	j\                  rj^                  sddl0m1}  |d       njd                  rXj$                  }
 (      \  &'} &'fd      } j&                  rt	        j*                         5  t-               5  jf                  J jh                  J t	        jj                  jf                  jh                  jT                  jl                        |_        j(                  J to        |j0                  j(                         d d d        d d d        t3        |      sJ d       j8                  rd|_        j8                  r|
st	        j
                  jX                  j[                  dd      |      }n|jp                  r0jr                  rddl0m1}  |d       d)  fd         }n@jt                  rjl                  jv                  dvrsjx                  J jp                  rJ  j{                  jx                        }t	        j|                  |      }t	        j~                  j                  |       njr                  r;j                  J d }r.,ddlBmC} t        |      sJ j                  j                  } j{                  j                  t        j                  j                  j                  d      |      }d }t        j
                  j                  t        j
                  j                  j                        }t        j
                  j                  t        j
                  j                  j                  d       	 |jT                  jT                  k(  rn ||jT                  jT                        rt	        j                  |      }nN |jT                  |jT                        rt	        j                  |      }n|j                  jT                        }j$                  r8t	        j*                         5   |	|      }d d d        j8                  _        nǉj                  j8                  j8                  k(  r't	        j<                         5   |	|      }d d d        n}j8                  sJ t	        j*                         5  |j                  |jN                        }d d d        j8                  _        t	        j<                         5   |	|      }d d d        j                  J t        j
                  j                  j                  j                         t        j
                  j                  t        j
                  j                  j                  |       naj$                  }
j                  sj                  sjp                  sj                  rt        cd d d        S  (      \  &'}j^                  r #&'      }n &'fd       } j&                  rt	        j*                         5  t-               5  jf                  J jh                  J t	        jj                  jf                  jh                  jT                  jl                        |_        to        |j0                  j(                         d d d        d d d        t3        |      sJ d       j8                  rBj8                  |_        |
s/t	        j
                  jX                  j[                  dd      |      }j                  }|J |j                   j                  vr|j\                  s&|ji                         'k(  ro|j                         |k(  r\ j                  ||j                                 j&                  r>|j0                  j                         |j                         _\        n j                  |!      }t        j                         }dd"l^m_}m`}  ||      }| ||      }t	        j*                         5   %       5  |5  |j                  ||&'       d d d         j&                  rvt	        j*                         5  t-               5  |j0                  j                  |j                  j                  jf                  jh                         d d d        d d d        d d d        d d d        j                  2dd#l mH}  j{                  j                   |d$            _b        t        j
                  j                  j                         t        j
                  j                  |j                         d d d        j                  xr j                  k(  }t        t        d|%       j                  8j                  jf                  dk(  r|j                         j                  d       j                  rd|_l        j                  +|j                  j                  j                  &      |_p         j                  |        j                        S # 1 sw Y   =xY w# 1 sw Y   BxY w# 1 sw Y   xY w# 1 sw Y   $xY w# 1 sw Y   )xY w# 1 sw Y   	xY w# 1 sw Y   	xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# t        j
                  j                  t        j
                  j                  j                  |       w xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)+Nr   )ConstantSource__meta_utils_unknown_tensorrm   c           
     (   | j                   J | j                  }|1|j                  u r#| j                  | j                   | j                  fS t        fd| j                  D              }t        fd| j                   D              }j                  | j                        }j                  |||t        | j                        D cg c]  }|| j                  v  c}||      S | j                  | j                   | j                  fS c c}w )Nc              3  @   K   | ]  }j                  |        y wr?   #_maybe_specialize_sym_int_with_hint).0sz	shape_envs     r+   	<genexpr>zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>  s$      # "EEbI#   c              3  @   K   | ]  }j                  |        y wr?   r2  )r4  sdr6  s     r+   r7  zVMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset.<locals>.<genexpr>  s$      % "EEbI%r8  )symbolic_context)rL   r   r6  r   rM   r   r3  -_create_symbolic_sizes_strides_storage_offsetranger   r   )	r*   r  r;  r   t_sizet_stridet_storage_offsetdr6  s	           r+    sym_sizes_strides_storage_offsetzCMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offset  s    88'''$KK	(Y-@-@I-M FFAHHa.>.>?? # #"#&&# F  % %"#((%  H (1'T'T((($ %RR (@EaffN1a666N)9 S   !*:*:;; Os   Dc                f     | ||      \  }}}t        j                  ||| j                  d      S r!  rV   empty_stridedr@   )inner_t	inner_srcr;  inner_sizesinner_stridesinner_storage_offsetrB  s         r+   empty_createz/MetaConverter.meta_tensor.<locals>.empty_create  sC     1)EUV	$&&mm	 r9   c                  	 ddl m ddlm} | j                  J | j
                  J ||n| j                  }||n| j                  }|t        ||      sJ 	
fd	 	| |||||      }|j                  |k(  s$J d| j
                   d| d|j                          |j                         |k(  s(J d| j
                   d| d|j                                 |S )	Nr   
AttrSource)SubclassSymbolicContextc           	     d   | j                   j                  | |||      S i }| j                   j                         D ]G  \  }}d }	||j                  |   }	 ||      }
 ||j                  |j
                  |	||
      }|||<   I | j                  j                  || j                  ||      S )Nr6  r(  sourcer;  )	r   meta_tensorr   inner_contextsr   rL   r   __tensor_unflatten__r   )r*   
outer_sizeouter_strider;  r(  rR  inner_tensorsr   meta_tensor_desccurrent_contextcurrent_sourcenew_empty_tensorrN  _empty_create_subclassrx   r6  s               r+   r]  zXMetaConverter.meta_tensor.<locals>.empty_create_subclass.<locals>._empty_create_subclass8  s    
 77?++"+!)%)9 ,   !#./ggmmo ;*D*&*O'3*:*I*I$*O%/%=N'=((--(//' &($ +;M$';  vv22!155*l r9   zExpected return value from z.__tensor_unflatten__() to have shape equal to z, but got: z/__tensor_unflatten__() to have stride equal to )
torch._dynamo.sourcerN  %torch.fx.experimental.symbolic_shapesrO  r   r   r   rL   rU   rA   )r*   rV  rW  r;  r(  rR  rO  subrN  r]  rx   r6  s           @@r+   empty_create_subclassz8MetaConverter.meta_tensor.<locals>.empty_create_subclass  s    8U77&&&66%%% (2'=166J+7+C<L#+z "90  !F ):|-=xC 99
* -affX 6"",[E* ::<</ -affX 6##/.CJJL>K/
 Jr9   c                   ddl m} ddlm}m}m} d }| j                  r*| j                  J  | j                   ||d      ||      }|j                  g| j                  z  }	| j                  rv| j                  J i }
| j                  j                         D ],  \  }}t        |t              sJ  | |||      ||      |
|<   .  ||	d g| j                  z  |
||      }|S  ||	d g| j                  z  |      }|S )Nr   rM  )
DimDynamicStatelessSymbolicContextrO  rQ   )dynamic_sizesconstraint_sizesrT  tensor_sourceview_base_context)re  rf  rh  )r^  rN  r_  rc  rd  rO  rN   rP   DYNAMICr   r   r   r   rU   r   )r*   rR  r6  r(  rN  rc  rd  rO  rh  t_dynamic_sizesrT  r   innert_symbolic_contextall_dynamic_symbolic_contexts                 r+   rm  z?MetaConverter.meta_tensor.<locals>.all_dynamic_symbolic_contextq  s*    8  <@yyvv)))$@FFJvw7H%!
  *112QVV;O..ww***=?#$77==? KD%%dC000+Gz&$7H,N4(
 &="1&*Vaff_#1"(&7&" &% &>"1&*Vaff_&7&" &%r9   c                (    ||      \  }}}|j                   s/t        |       s$        5  | j                  |||      cd d d        S ddlm ddlmm} fd}i |j                   rg|j                  J |j                  J  |||      }	|	j                         \  }
}|
D ](  }t        |	|      |j                  |   j                  <   * f	 dfd}|j                  J |j                  | ||      }	t        j                   ||	j                         |             t        j                   ||	j!                         |             t        j                   ||	j#                         |             |	S # 1 sw Y   CxY w)Nr   )EphemeralSource)rd  sym_eqc                    ddl m d uxr, t              xr t        fdj                  D              }|s| S  d      }j                  | |d       }j                  || |      S )Nr   )rc  c              3  :   K   | ]  }|j                   u   y wr?   )STATIC)r4  xrc  s     r+   r7  z_MetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fn.<locals>.<genexpr>  s!      34Z...s   symint_visitor_fn)positive)hintrR  )r_  rc  rU   allre  create_symbolcreate_symintnode)	r   all_static_sizes
sym_sourcesymbolrc  ro  rd  r6  r;  s	       @r+   ru  zLMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.symint_visitor_fn  s    L %D0 "#35MN 8H8V8V  ! $y'8H --@A
"00J0N 226*2UUr9   rV  rW  c                    | y 
j                   j                  |       }	j                  |d       }||S 
j                   j                  |       } d      }
j	                  |||| ||||            S )Ntensor_visitor_fnrR  r;  )r  r}   r  rY   rS  )	visited_tr6  r(  
visited_idfake_visited_tvisited_desctemp_sourcero  rm  real_to_fake_mappingrx   s          r+   r  zLMetaConverter.meta_tensor.<locals>.view_from_base.<locals>.tensor_visitor_fn  s     $ "^^99)D
!5!9!9*d!K!-))#~~==iH ..AB'' &%A$k9h& (  r9   )r  r   )r   
as_stridedr^  ro  r_  rd  rp  r   r   r   r   ro   r   rV   _checkr   rL   rM   )rP   r*   rR  r6  sizesstridesrM   rp  ru  fake_tr   _r   r  ro  rd  r  rm  r(  ra  maybe_suppressrx   rB  r;  s      `          @@@r+   view_from_basez1MetaConverter.meta_tensor.<locals>.view_from_base  s    0P60,UG^ 335d;
 $% K??5'>JK K =
V6 $& ..ww*** vv))) /%g "446q! SD=DVT=R()9)9:S $!%'% %R ;;*** [['8:KLF
 LLu56LL9:LL 5 5 7HIMaK Ks   FFc                     t         j                  j                  j                   j                   j
                   j                   j                  t         j                  d      S )Nr"  )r@   rG   r   )	rV   opsaten_sparse_coo_tensor_with_dimsrI   rH   r   r@   r\   r)   s   r+   r   z+MetaConverter.meta_tensor.<locals>.<lambda>D  sH    		 K KLLKKFF"#''#(#3#3#) !L ! r9   z)the callback you passed in doesn't detachT   r5   c            
         t         j                  j                  j                  dj                  j
                   j                  j                  d      S )Nr   r"  )rG   r@   r   )rV   r  r  #_sparse_compressed_tensor_with_dimsrH   rA   rG   r@   )	blocksizeindex_dtyper*   s   r+   r   z+MetaConverter.meta_tensor.<locals>.<lambda>v  sH    		 R RKKGG%'#$88"#''#) !S 	! r9   9Internal error: Tried to backward() through example input)unimplementedz;strided nested tensors are not supported by meta conversionc                 J    t        j                   j                  d      S r!  rD  r  r  r*   s   r+   r   z+MetaConverter.meta_tensor.<locals>.<lambda>  s     3 3!7!''&! r9   r#  z;view functorch tensors are not supported by meta conversionc                     j                   r j                  J  j                  J  j                  J  
 j                        } j                  } j                  }t        j
                  j                  j                   j                        5  t        |||      }d d d        |S  j                  r= j                  J  j                  J t        j                  j                  } |       5   
 j                        }d d d         j                  }|	k(  r}nft        j
                  j                  j                   j                        5  t        j                  j
                  j                  |      }d d d         j                  } j                  rt!              r	d|_        |S  j                  r1|s/t	        j                  j"                  j%                  dd            }S  j&                  rT j                  J  j(                  J j+                   j                        }t-        | j(                        }|S  j.                  J  j0                   j.                    fd      }j2                  rt	        j4                         5  t7               5  t	        j8                   j0                   j.                   j:                   j<                        |_         j@                  J tC        |j>                   j@                         d d d        d d d        |S |S # 1 sw Y   S xY w# 1 sw Y   CxY w# 1 sw Y   xY w# 1 sw Y   <xY w# 1 sw Y   |S xY w)NTr  rm   rQ  c                 J    t        j                   j                  d      S r!  rD  r  s   r+   r   zDMetaConverter.meta_tensor.<locals>._to_fake_tensor.<locals>.<lambda>  s"    (;(;$)$+*+''+1	)" r9   r#  )"r   r   r   r   rV   r   r   %temporarily_restore_interpreter_stackr   r   r   r   _DisableFuncTorch_wrap_for_gradr'   rB   r,   
_functionsDelayedErrorr   r   rS  r   rL   r   rk   r&  r   rE  r@   r   real_tensorr   r  )r*   ftlvlr   r   disable_functorchr'   r  r  GRAD_TENSOR_SENTINEL_VALUE_to_fake_tensorr(  rx   r6  rR  r;  s   `      @@r+   r  z2MetaConverter.meta_tensor.<locals>._to_fake_tensor  s>    --#$;;#::#:#$77#66#6#$66#55#5!0!=B"#''C#$66D
 "'!1!1!=!=!c!c ! 1 1" B %32tS$ABH  !A 44#$;;#::#:#$77#66#6050J0J-!2!4 B%4Q[[%AB"#''C"&@@$&%*%5%5%A%A%g%g$%$5$5&" !T ).(;(;(J(J2s(SA!T
 '(iiG <?26^  !] "#$)HH$7$7$D$D$_$%%" %&	%"Z  !O __#$;;#::#:#$??#>>#>!%!1!1 !*3)1
 (.1A "2 
"B !8AOO LA2  !- $%88#77#7$%FFE&'hhG (!"!A  $~~%*]]_ !Fkm !F494G4G()()./gg/0xx	5&AM ,-66+=$=+=$.q}}aff$E!F !F  !qIBH  !yB B!T !TZ!F !F !F  !sI   M:M+M-M48A5M(-M4MMM%(M1	-M44M>r   rQ  )rd  rQ   r  c                `    t        j                  |       xr t        j                  |       |k(  S r?   )utilsis_complex_dtypecorresponding_real_dtype)complex_dtype
real_dtypes     r+   	is_c_of_rz,MetaConverter.meta_tensor.<locals>.is_c_of_r>  s0    !22=A * % > >} M)!*r9   Fr~  c                 J    t        j                   j                  d      S r!  rD  r  s   r+   r   z+MetaConverter.meta_tensor.<locals>.<lambda>  s"    E$7$7 % '&'gg'-	% r9   )r(  )in_kernel_invocation_managerr   rM  r2   r:   )nt_tensor_id)r*   r   returnz,Tuple[Tuple[int, ...], Tuple[int, ...], int])rF  r   r*   r   )rP   r   r*   r   )rr^  r.  lenr  rV   r   _dispatch_tls_local_exclude_sethasDispatchKeyPythonr  
contextlibnullcontextsuppress_guardsr  inference_moderD   rC   r'   rk   r   r&  r   r  r  r,   _coalesced_rJ   rB   r  enable_gradrc   rG   ra   rb   rI   rH   r   r   rA   r_   r   r@   r   r  r  r   r   torch._dynamo.excr  r   r   rL   rE  r   r  r   rN   r   r   r   rS  _to_functional_tensor_mirror_autograd_meta_tor   rP   r_  rd  rU   rh  _dynamorR  rN  &_dispatch_tls_is_dispatch_key_excludedADInplaceOrView'_dispatch_tls_set_dispatch_key_excludedview_as_realview_as_complexviewr   r   _set_creation_metar   r   r   NotImplementedr   ro   r  rM   r  r   r'  r*  torch._subclasses.fake_tensorr  r   set_r2   	_set_conjrE   _set_negrF   r   rZ   r8   resize_r   	_is_paramr   r   create_symbolic_nested_intnested_int_memor  ))rx   r*   r6  r(  rR  r;  r.  r  rK  r  r'   r   	batch_dimr  _storage_offsetr   base_symbolic_contextrd  rP   r  old_excludemidrM   r   r)  maybe_fake_mgrr  r   mb_fake_moderN  r<   r  r  rm  r  ra  r  r  r  r  rB  s)   ``````                         @@@@@@@@@@r+   rS  zMetaConverter.meta_tensor  s    >; $-c$2B2B.C-DEF 88;;=AAHH  ''
 	
 
 ,,4 -7,B,B &66N 6F 	< 	<9 	<F BR	#	* .S	S	r)	&)	&R ;AI~	~	#1~	 ~	@ "*)+&%%ann5 _/;;iiG
 !	A ~~ vv111"]]_ @km @,7,?AM@ @'?W,WW? MM!..1*.w
 GGI"..0 :MM!..9: :0:iiGxxE$4$4e6F6F#GG ||777 {{666 xx333$%FFQ\\$9AKK$G	$%HHNN9q=9q=$Q	$&	xxE$4$4e6F6F#GG ~~999&'nn&:&: ~~999&'nn&:&: 	A ~~ vv111"]]_ @km @,7,?AM@ @'?W,WW?*.w!HH//<<W  [[)H)H @!U [[iiG6V673E7O
 !A
 ~~"]]_ >km >#$66#55#5#$88#77#7,1,?,? !-AM $%66#55#5&q}}aff=> > (?W,WW?*.w!HH//<<W  ++yyC%YR! R!h (*A__o)M;;222 5555 $ 0 0"+!)%)9 !1 !I 33I>A2213G3GKYY 66---,0) %5%A  **:<TUUU ,==I4D4V4V1++! $}}33>>vwO)> , D #((("Q"Q,,<<#K HHDD,,<<eA::0 &tzz177;#(#5#5d#;D&qww

;#(#8#8#>D
 $(99QWW#5D& 99 "' <$24$;< /0ooAO vv33qF%*%6%6%8 !@(6tQ(?A!@ !@ () 6%*]]_ !@*.))DJJ*?C!@45OO 1%*%6%6%8 !?(6sA(>A!?
  !:::**==aQHH!HH00@@+
  iiG //13J3J2222-
_/ _/J 9FDTU	&
 661%g %  >>!& B+- B'(vv'9 9'9'(xx'; ;';050C0C$%FFAHHAGGAHH1" !+1==!&& AB B (?W,WW?*+//& !& 3 3 @ @ [ !!  !!A
 		A=(=tt4#4#44HHJ'1 ! 0 0 2n D --a1B1B1DE>> ! = = ? --/< #//H/E* @J?U?U?W
 (;1'='3-I,-WN"]]_ 
&n.> 
&!/ L !sNE7 KL#~~%*]]_ !&km !&$%MM$6$6(+(8(8()(8(8()()	%&!& !&	
& 
& 66%? "--! )&&9)9 . AF ""1aii0!!!QXX._/D ''QAGG7Q,Q  y!QdiX yy$1)<!!#++A.~~" ||'$%KK$J$J!" %K %!   A&##A&&E@ @ @ @": :F@ @ @ @@> > > >Z< <!@ !@!@ !@!? !? HH!HH00@@+HB B B B`L L!& !& !& !&	
& 
& 
& 
&M_/ _/s  4AA@{5{(-{55A<A@1|E:A@||-|5C)A@|6)B|):|6IA@B;}7
}$A}75
}?+}7*}-}73
}*=A
}7BA@AA@)4B~>7?E3A@2A@:?=	(?:2	A%2	?A@$BA@({2-{55{?	:A@|	A@|||&	!A@)|3.|66} 	;A@}	}7}	}7}'	"}7*}4	/}77A~;;A@>	A@"?%/*2	2<7??A@	@A@@A@	@A@@A@#c                     |        S r?   r5   r)   s    r+   r   zMetaConverter.<lambda>9  r,  r9   T)r(  rR  r;  r   c                  
 t        |t        j                        r|j                  j                  dk(  s>|j
                  s2|j                         r=|j                  1|j                  j                  r xj                  dz  c_	        t        S  xj                  dz  c_        n<t        j                  j                  |      r xj                  dz  c_	        t        S |S d} j                  j                  ||      
|rt!        d 
fd       t#        j$                         5 }|j'                  t        j(                  j*                  j-                                t/               }|7|j'                  t        j0                  j2                  j5                                 j7                  
|||      }	d d d        t	        |      t        j8                  j:                  u rd		_        	S # 1 sw Y   7xY w)
Nr   rm   Fr   describe_sourcec                 h     j                   j                  j                  j                         dS )N)r   ro   rR  )r  ro   r   )rx   rR  t_descs   r+   r   z(MetaConverter.__call__.<locals>.<lambda>j  s'    $(NN$5$5 ))$kkm% r9   r   rQ  T)rU   rV   rW   r   r   is_quantizedrO   rQ   rC   r  r  r  	overridesis_tensor_liker  rY   r   r  	ExitStackenter_context	_dispatchpythonsuspend_functionalizationr   r   r   r   rS  r   r   r  )rx   r*   r6  r(  rR  r;  r   
exit_stackstr   r  s   `   `     @r+   __call__zMetaConverter.__call__4  s   $ a& '  !''"5!'':K:K		Q	%%A__++A.IINI!! H>E ///?! !!# 	z$$U__%;%;%U%U%WX')B~(($$00TTV   #!!1 ! A	  7ehh((( AK -	 	s   +BG22G;)rk   r   r  )r   r   )r*   r   r6  zOptional[ShapeEnv]rR  zOptional[Source]r;  zOptional[SymbolicContext]r?   )r   r   r   ry   r  r  r  r  r  r*  rS  r  r5   r9   r+   r	  r	  v  s    ,1 B"/0#1$,6 )-#'6:C'C' &C'
 !C' 4C'P V
  Vr9   r	  )rR   z#Union[MetaTensorDesc, torch.Tensor]rS   r   )K
__future__r   r  r   r/   r  r   typingr   r   r   r   r	   r
   r   r   r   r   r   typing_extensionsr   rV   torch._C._autogradr   torch._C._functorchr   r   r   r   r   r   r   r   r   r   r   torch._loggingr   torch.utils._mode_utilsr   torch.utils._python_dispatchr   torch.utils.weakr    r!   torch._guardsr"   r  r#   r_  r$   r%   DimListr,   r3   r8   rZ   r]   rc   rK   rf   r   rg   r   rh   rn   rX   r   r   r  r  r	  torch._prims_common_prims_commonr  r5   r9   r+   <module>r     s?   "     !    (  +    , / F 0 0$ = P
! 1+1 	1hHQ7
 y i   H HV $
 
 
 $Z Z ZRT Tn  $r9   