
    8h                   `   S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKJr  S SKJr  S SKJrJrJrJrJrJrJrJr  S SKJrJr  S SKJr  S SKrS SKJs  J r!  S SKJ"r"J#r#J$r$J%r%  S S	K&J'r'J(r(  S S
K)J*r*  S SK+J,r,  S SK-J.r.  S SK/J0r0  S SK1J2r2J3r3J4r4J5r5J6r6  S SK7J8r8  S SK9J:r:  S SK;J<r<  S SK=J>r>  S SK?J@r@  S SKAJBrBJCrC  S SKDJErE  S SKFJGrG  S SKHJIrIJJrJ  S SKKJLrLJMrMJNrNJOrOJPrPJQrQ  S SKRJSrS  S SKTJUrU  SSKVJWrWJXrXJYrY  \(       a&  S SKZJ[r[J\r\J]r]J^r^  S SKJ_r_  S SK`Jara  S S KbJcrc  S S!KdJereJfrf  \R                  " \h5      ri\R                  R                  \hS"5      rl \R                  R                  \hS#5      rm\qrr\R@                  R                  rt\" S&5      ru\R                  R                  R                  rxSryS qz " S' S(5      r{\ " S) S*\|5      5       r}\ " S+ S,\|5      5       r~\ " S- S.\|5      5       r\ " S/ S0\|5      5       r\ " S1 S2\|5      5       r\ " S3 S4\|5      5       r " S5 S6\	GR                  5      r\" 5       rStS7 jr\GR                  SuS8 j5       r\GR                  SvS: j5       r      SwS; jrSxS< jrSyS= jr\GR                  SzS> j5       r\GR                  S{S? j5       rS|S@ jrS}SA jr " SB SC5      r\GR                  S~SD j5       r\GR                      SvSE j5       rS{SF jr " SG SH5      r " SI SJ5      r " SK SL\%5      r\\BSMSN4   r\E\ " SO SP5      5       5       rSSQ jr\E\ " SR SS5      5       5       r " ST SU5      r\E\" SVSW9 " SX SY5      5       5       r\E\" SVSW9 " SZ S[5      5       5       r\E\" SVSW9 " S\ S]5      5       5       r\(       a  \\\4   r\E\" SVSW9 " S^ S_\5      5       5       r\E\" SVSW9 " S` Sa5      5       5       r " Sb S9\J5      r\r      SSc jr            SSd jr        SSe jr        SSf jr " Sg Sh\@5      rSSi jrSSj jrSSk jr\R                  GR`                  GRb                  GRd                  \\R                  R                  GRf                  GRd                  Sl \R                  R                  GRh                  GRd                  Sm \R                  R                  GRj                  GRd                  Sn 0r\" \R                  R                  GRn                  GRd                  \R                  R                  GRp                  GRd                  \R                  R                  GRr                  GRd                  \R                  GRt                  GRv                  GRx                  5      rS SoKJrJrJrJrJrJrJrJr  SSp jr\GR                  SSq j5       r        SSr jr        SSs jrg! \n a.  roS$\p" \o5      ;   a  \R                  " \hS%-   5      rm SroCoGN\oeSroCoff = f)    )annotationsN)defaultdict)	dataclass)AnyCallablecastLiteralOptionalTYPE_CHECKINGTypeVarUnion)Self	TypeGuard)ReferenceType)SymBoolSymFloatSymIntTensor)is_functorch_wrapped_tensoris_legacy_batchedtensor)FakeScriptObject)MissingOpProfile)dtrace_structured)suggest_memory_format)	assert_eqassert_metadata_eqis_sparse_anyis_sparse_compressedMetaConverter)render_call)immutable_dict)normalize_function)StorageWeakRef)TorchFunctionMode)IntLikeTypepy_sym_types)dataclass_slots)no_dispatch)is_traceable_wrapper_subclassTorchDispatchMode)KeyPathkeystrPyTreetree_map	tree_map_TreeSpec)count)CapturedTraceback   )_CacheKeyState_PySymInputStub_SymIntOutputStub)	GeneratorIterableMappingSequence)TracebackType)Source)
OpOverload)ShapeEnvSymbolicContexthierarchical_compilenot_implementedz 'not_implemented' not registeredz.not_implementedTc                  (    \ rS rSrSS jrSS jrSrg)IncrementRecursionCount^   c                    [         S-  q g Nr3   RECURSION_COUNTselfs    W/var/www/fran/franai/venv/lib/python3.13/site-packages/torch/_subclasses/fake_tensor.py__init__ IncrementRecursionCount.__init___       1    c                    [         S-  q g rG   rH   rJ   s    rL   __del__IncrementRecursionCount.__del__c   rO   rP    NreturnNone)__name__
__module____qualname____firstlineno__rM   rR   __static_attributes__rT   rP   rL   rD   rD   ^   s    rP   rD   c                       \ rS rSr% S\S'   Srg)UnsupportedFakeTensorExceptionh   strreasonrT   NrX   rY   rZ   r[   __annotations__r\   rT   rP   rL   r^   r^   h       KrP   r^   c                       \ rS rSr% S\S'   Srg)DynamicOutputShapeExceptionm   r=   funcrT   Nrb   rT   rP   rL   rf   rf   m       
rP   rf   c                       \ rS rSr% S\S'   Srg)DataDependentOutputExceptionr   r=   rh   rT   Nrb   rT   rP   rL   rk   rk   r   ri   rP   rk   c                       \ rS rSr% S\S'   Srg)UnsupportedOperatorExceptionw   r=   rh   rT   Nrb   rT   rP   rL   rn   rn   w   ri   rP   rn   c                       \ rS rSr% S\S'   Srg)$UnsupportedMutationAliasingException|   r`   ra   rT   Nrb   rT   rP   rL   rq   rq   |   rd   rP   rq   c                       \ rS rSr% S\S'   Srg)MetadataMismatchError   r`   ra   rT   Nrb   rT   rP   rL   rt   rt      rd   rP   rt   c                  *    \ rS rSr% S\S'   SS jrSrg)FakeTensorTLS   Optional[bool]allow_non_fake_inputs_overridec                    S U l         g Nrz   rJ   s    rL   rM   FakeTensorTLS.__init__   s
    .2+rP   r}   NrU   )rX   rY   rZ   r[   rc   rM   r\   rT   rP   rL   rw   rw      s     %323rP   rw   c                 .    [         R                  U S5      $ NT)dictfromkeys)itemss    rL   ordered_setr      s    ==%%rP   c               #  .  #    [         R                  R                  [         R                  R                  R                  5      n  U v   U b   [         R                  R                  U 5        g g ! U b   [         R                  R                  U 5        f f = f7fr|   )torch_C_unset_dispatch_mode_TorchDispatchModeKeyFAKE_set_dispatch_mode)olds    rL   unset_fake_temporarilyr      sk     
((
'
'(F(F(K(K
LC-	?HH'', 3?HH'', s   ABA- 	$B-%BBFakeTensorModec              #  ^   #    U R                   n SU l         S v   Xl         g ! Xl         f = f7f)NF)cache_enabled)	fake_mode	old_values     rL   disable_fake_tensor_cacher      s,     --I,"'	"+)s   -" -*-c                  ^ U /nU(       ar  UR                  5       m[        T5      (       d  UR                  T5        M:  TR                  5       u  p4UR	                  U4S j[        U5       5       5        U(       a  Mr  U$ )Nc              3  <   >#    U  H  n[        TU5      v   M     g 7fr|   )getattr).0keycurrs     rL   	<genexpr>$get_plain_tensors.<locals>.<genexpr>   s     G2F3GD#&&2Fs   )popr)   append__tensor_flatten__extendreversed)subclassouttodo
inner_keys_r   s        @rL   get_plain_tensorsr      si     :D
xxz,T22JJt//1
G(:2FGG $ JrP   c                8   SSK Jn  [        U [        5      (       a  g[	        U 5      (       ai  [        U 5      R                  U 5      u  p#U Vs/ s H  n[        X5      PM     nn[        S U 5       5      n[        S U 5       5      nXg:X  d   S5       eU$ [        X5      (       a  [        U R                  5      $ [        U [        5      (       am  [        R                  " U 5      (       aR  [        R                  R!                  5       n[        R                  R"                  R%                  X5      n	[        U	5      $ [        U [        5      (       aD  ['        U 5      (       a4  [        R                  R"                  R)                  U 5      n	[        U	5      $ gs  snf )Nr   FunctionalTensorTc              3  8   #    U  H  n[        U5      v   M     g 7fr|   is_faker   xs     rL   r   is_fake.<locals>.<genexpr>        =+<awqzz+<   c              3  8   #    U  H  n[        U5      v   M     g 7fr|   r   r   s     rL   r   r      r   r   z got mixed fake and real tensors!F)#torch._subclasses.functional_tensorr   
isinstance
FakeTensorr)   typer   r   allanyr   elemr   r   _is_functional_tensorr   $_functionalization_reapply_views_tls
_functorch_unwrap_functional_tensorr   get_unwrapped)
r   r   attrsr   attrflattened_tensorsall_fakeany_fakereapply_views	unwrappeds
             rL   r   r      s<   D!Z  $Q''7--a0:?@%$WQ-%@=+<===+<==#G%GG#	A	(	(qvv	Av		5#>#>q#A#AEEGHH''AA!S	y!!	Av		#>q#A#AHH''55a8	y!! As   Fc           	     0  ^ SSK Jn  [        U [        5      (       a  U R                  $ [        U 5      (       aY  U R                  5       u  p#U Vs/ s H  n[        [        X5      5      PM     nnUS   m[        U4S jU 5       5      (       d   eT$ [        X5      (       a  [        U R                  5      $ [        U [        5      (       am  [        R                  " U 5      (       aR  [        R                  R                  5       n[        R                  R                   R#                  X5      n[        U5      $ [        U [        5      (       aD  [%        U 5      (       a4  [        R                  R                   R'                  U 5      n[        U5      $ g s  snf )Nr   r   c              3  ,   >#    U  H	  nTUL v   M     g 7fr|   rT   )r   r   ms     rL   r   &maybe_get_fake_mode.<locals>.<genexpr>   s     )5a165s   )r   r   r   r   r   r)   r   maybe_get_fake_moder   r   r   r   r   r   r   r   r   r   r   r   )	tr   inner_tensor_namesr   t_namemodesr   r   r   s	           @rL   r   r      s<   D!Z  {{$Q'' ! 4 4 6BT
BT 23BT 	 
 !H)5)))))	A	(	("166**	Av		5#>#>q#A#AEEGHH''AA!S	"9--	Av		#>q#A#AHH''55a8	"9--
s   Fc                T    [         R                  R                  U R                  5      $ r|   )r   r   _SchemaInfo_schemarh   s    rL   get_schema_infor      s    88--rP   c                    SSK Jn  [        R                  R                  nX   R
                  R                  S5      =(       a    X   R                  [        U5      ;   $ )Nr   decomposition_tableztorch._decomp)	torch._decompr   r   _decompdecompositionsrY   
startswithrX   dir)rh   r   r   s      rL   torch_decomp_decompositionsr      sR    1]]11N $//:: D

#
,
,N0C
CDrP   c                    [         R                  U5      nU Vs/ s H  n[        X05      (       d  M  UPM     sn$ s  snf r|   )pytreetree_leavesr   )tytree	flat_valsr   s       rL   tree_flatten_onlyr     s1    ""4(I&?YT*T*>DY???s   ;;c                D   [        U 5      [        L =(       a    U R                  [        R                  :H  =(       ae    U R
                  =(       dM    U R                  =(       d:    [        U 5      =(       d(    [        U 5      =(       d    [        R                  " U 5      (       + $ r|   )
r   r   layoutr   strided	is_sparse	is_nestedr   r   r   )r   s    rL   _is_plain_tensorr     sx    Q6 	
HH%	
 KK .{{.*1-. 'q). **1-

rP   c                      \ rS rSr% \  SS j5       rS\S'   S\S'   S\S'   S	S	S
.SS jjrSS jrSS jr	SS jr
SS jr  SSSSS.               SS jjjr  S           SS jjrSrg) FakeTensorConverteri  c                .    U R                   R                  $ r|   )meta_convertertensor_memorJ   s    rL   r   FakeTensorConverter.tensor_memo  s     ""...rP   r   r   z)dict[StorageWeakRef, list[ReferenceType]]constant_storage_mappingboolexportF	copy_datar   c               :    [        US9U l        X l        0 U l        g )N)r   )r   r   r   r   )rK   r   r   s      rL   rM   FakeTensorConverter.__init__'  s    +i@ )+%rP   c                2   [        U[        5      (       a  UR                  c   e[        UR                  R	                  5       5      nX R
                  ;  a  / U R
                  U'   U R
                  U   R                  [        R                  " U5      5        g r|   )	r   r   constantr#   _typed_storager   r   weakrefref)rK   fake_tensorweak_sts      rL   add_constant_storage_mapping0FakeTensorConverter.add_constant_storage_mapping.  s{     +z22{7K7K7WWW !5!5!D!D!FG
 77757D))'2%%g.55gkk+6NOrP   c                   [        U[        5      (       a   e[        UR                  5       5      nX R                  ;  a  g U R                  U    H&  nU" 5       nUc  M  UR                  5         S Ul        M(     U R                  U	 g r|   )r   r   r#   r   r   _fix_weakrefr   )rK   tensorr   weak_tensor_reftens        rL   invalidate_constant_aliases/FakeTensorConverter.invalidate_constant_aliases<  s}    fj1111 !6!6!89777#<<WEO!#C  "#	  F ))'2rP   c                    U R                   R                  R                  R                  U5      nUc  g U R                  R                  U5      $ r|   )r   	describerlookup_tensorgetr   )rK   r   tids      rL   	_get_memoFakeTensorConverter._get_memoK  sC    !!++99==a@;##C((rP   c                ~    U R                   R                  R                  U5      nX R                   R                  U'   g r|   )r   r  get_tensor_idr   )rK   r   vr  s       rL   set_tensor_memo#FakeTensorConverter.set_tensor_memoQ  s2    !!++99!</0'',rP   NT)sourcesymbolic_contexttracec          	     t  ^^ U(       d  U(       dx  U(       aq  [         R                  R                  R                  5       =n(       aB  X(R                  ;   a3  UR                  U   nSSKJn	  [        Xi5      (       d   eUR                  nU R                  U5      n
U
b  U
$ UR                  (       a  [        S5      e[        U5      [         R                  R                  L a	  U(       a   eU(       a  UOS m      SUU4S jjnU R                  UUUUUUS9nU[         L a  [        S5      eSSKJn  S nU R&                  (       Gd  [)        U5      (       Ga  UR+                  5       S:X  Ga  UR,                  R                  S:X  Ga  UR.                  [         R0                  [         R2                  [         R4                  [         R6                  [         R8                  4;   Ga+  UGb'  [        X]5      (       Gd  UGb  SS	KJnJn  SS
KJn  [A        5          URC                  5       nS S S 5        [D        RF                  " U5      (       d  [D        RH                  " U5      (       d  [        UU5      (       a  URJ                  nOU" U5      nURM                  UUURN                  US9nUR.                  [         R0                  :X  a  URQ                  UUUS9Ul)        O4UR.                  [         R8                  :X  a  URU                  UUUS9Ul)        U(       a  U RW                  U5        U$ ! , (       d  f       GN
= f)Nr   )StatefulSymbolicContextzquantized nyi in meta tensorsc                p   > [        5          [        TU " 5       UTS9sS S S 5        $ ! , (       d  f       g = f)Nr   )r(   r   )make_meta_tdevicer   r   s     rL   mk_fake_tensor<FakeTensorConverter.from_real_tensor.<locals>.mk_fake_tensor  s,     !M & s   '
5)	shape_envcallbackr  r  r  zmeta converter nyi)RandomValueSourcecpu)CallMethodItemSourceFloatTensorSource)
DimDynamic)r  dynamic_dimr  )hintr  )r  zCallable[[], object]r  zUnion[torch.device, str]rV   r   ),r   _guardsTracingContexttry_gettensor_to_context%torch.fx.experimental.symbolic_shapesr  r   tensor_sourcer  is_quantizedr^   r   nn	Parameterr   NotImplementedtorch._dynamo.sourcer   r   r   dimr  dtypeint64int32int16int8float64r"  r#  r$  r(   itemmathisnanisinfbasecreate_unspecified_symbolDYNAMICcreate_symintnode	item_memocreate_symfloatnoder   )rK   r   r   make_constantr  r  r  r  tracing_contextr  
maybe_memor  r   r   valuer"  r#  r$  item_sourcesymbolr   s    `                  @rL   from_real_tensor$FakeTensorConverter.from_real_tensor[  s     9"'--">">"F"F"HHH999'6'H'H'K$ &&6PPPP-;;F^^A&
!>>01PQQ7ehh((($$$%14
	-	7O		 	( !!#- " 
 . 01EFF: ##1& U[[%++uzz5==QR"$ v99 %TH ::e$$TZZ->->f&788"(++K"6v">K"<<& * 2 2%5	 =  77ekk)$-$?$?"* %@ %CM
 WW-$-$A$A"* %B %CM
 --c2
? s   L((
L7c                    UR                   R                  S:X  d   SUR                   R                   S35       eU R                  U5      nUb  U$ [        XX4US9nU R	                  X'5        U$ )Nmetaz$tensor's device must be `meta`, got z instead)pytypedispatch_keys)r  r   r  r   r  )rK   r   r   r  rM  rN  rE  r   s           rL   from_meta_and_device(FakeTensorConverter.from_meta_and_device  sy     HHMMV#	J1!((--I	J# ^^A&
!&}
 	Q$
rP   )r   r   r   )rV   zweakref.WeakValueDictionary)r   r   r   r   rV   rW   )r   r   rV   rW   )r  r   rV   rW   )r   r   rV   Optional[FakeTensor])r   r   r  r   rV   rW   )FN)r   r   r   r   rC  r   r  Optional[ShapeEnv]r  Optional[Source]r  Optional[SymbolicContext]r  r   rV   r   )NN)r   r   r   r   r  torch.devicerM  zOptional[type[torch.Tensor]]rN  Optional[torch.DispatchKeySet]rV   r   )rX   rY   rZ   r[   propertyr   rc   rM   r   r  r  r  rI  rO  r\   rT   rP   rL   r   r     s   /	$/ / "!GGL,1% +P3)1 $(,M $(6:M!M M 	M
 &M !M 4M M 
Mj 048<!  	
 - 6 
 rP   r   c                   [         R                  R                  5       (       d#  [         R                  R                  5       (       aF  [         R                  R
                  c  [         R                  " SU S9O[         R                  " SU S9  g g )Nr3   r  )r   cudais_availablexpuversionhipemptyzerosrY  s    rL   init_gpu_contextra    s_     zz  EII$:$:$<$< }}  ( KK&)Qv.	 %=rP   c              #    #    U R                   n[        R                  R                  5       nX!:X  d   U SU 35       e[        R                  R	                  5          SU l         [        R                  R                  5          [        R                  R                  S5         S v   Xl          S S S 5        S S S 5        g ! Xl         f = f! , (       d  f       N"= f! , (       d  f       g = f7f)N, T)in_kernel_invocationr   r   _meta_in_tls_dispatch_include_DisableTorchDispatch_PreserveDispatchKeyGuard!_set_meta_in_tls_dispatch_include)r   prev_in_kernelmeta_in_tlss      rL   in_kernel_invocation_managerrk    s     
 33N((88:K(L[MN;K*LL(		'	'	))-	& XX//1HH66t<@1?. 2	 
*	) 2@. 21	 
*	)sN   AC,&C C
#B?'C
.C6	C,?CC


C	C
C)%C,c                    [         R                  R                  U R                  5       R	                  S5      S   R	                  S5      S   5      $ )Nz::.r   )r   r    _should_allow_numbers_as_tensorsnamesplitr   s    rL   should_allow_numbers_as_tensorsrr  $  sB    8844		$#))#.q1 rP   c                  R    \ rS rSr\R
                  R                  SS5      S:H  rSrg)FakeTensorConfigi*  TORCH_FAKE_TENSOR_DEBUG01rT   N)	rX   rY   rZ   r[   osenvironr
  debugr\   rT   rP   rL   rt  rt  *  s    JJNN4c:cAErP   rt  c                      \ rS rSr% S\S'   S\S'   SS.SS jjrSS	 jrSS
 jrSS jrSS jr	 S     SS jjr
      SS jrSrg)SymNumberMemoDescriptori9  r`   _namer   _is_nested_intFis_nested_intc                   Xl         g r|   )r~  )rK   r  s     rL   rM    SymNumberMemoDescriptor.__init__C  s    +rP   c                    X l         g r|   r}  )rK   ownerrp  s      rL   __set_name__$SymNumberMemoDescriptor.__set_name__F  s    
rP   c                     SU R                    3$ )Nr   r  rK   objs     rL   _memoSymNumberMemoDescriptor._memoI  s    4::,rP   c                "    SU R                    S3$ )Nr   _vcr  r  s     rL   _memo_vc SymNumberMemoDescriptor._memo_vcL  s    4::,c""rP   c                "    SU R                    S3$ )Nr   _epochr  r  s     rL   _memo_epoch#SymNumberMemoDescriptor._memo_epochS  s    4::,f%%rP   Nc                   [        XR                  U5      5      =nc  g [        U[        R                  5      (       a  UR
                  R                  b  U$ U R                  (       d(  [        XR                  U5      5      UR                  :w  dC  U R                  (       dN  [        XR                  U5      5      UR                  R                  :w  a  [        XR                  U5      S 5        g U$ r|   )r   r  r   r   r   noder&  r~  r  _versionr  r   epochsetattr)rK   r  objtypers       rL   __get__SymNumberMemoDescriptor.__get__V  s     jjo..A7 a((QVV[[-DH
 ##]]35G(HCLL(X##--c23s}}7J7JJCC$/rP   c                   UcR  [        XR                  U5      S 5        [        XR                  U5      S 5        [        XR                  U5      S 5        g UR	                  5       (       a  U R
                  (       a  [        XR                  U5      U5        U R
                  (       d%  [        XR                  U5      UR                  5        [        XR                  U5      UR                  R                  5        g g r|   )	r  r  r  r  is_inferencer~  r  r   r  )rK   r  rF  s      rL   __set__SymNumberMemoDescriptor.__set__l  s     =CC$/Cs+T2C))#.5!!##t':':CC%0&&]]3/>C))#.0C0CD	 (;rP   )r~  r}  )r  r   rV   rW   )r  r`   rp  r`   rV   rW   )r  r   rV   r`   r|   )r  r   r  zOptional[type[FakeTensor]]rV   -Optional[Union[torch.SymInt, torch.SymFloat]])r  r   rF  r  rV   rW   )rX   rY   rZ   r[   rc   rM   r  r  r  r  r  r  r\   rT   rP   rL   r|  r|  9  sp    J 05 , #& FJ(B	6,EE&SE	ErP   r|  c                  @  ^  \ rS rSr% SrS\S'   S\S'   S\S'   S\S	'   \" 5       r\" 5       r\" 5       r	\" 5       r
\" S
S9rS\S'   S\S'   \R                  R                  R                  r\SS j5       r\R&                  S S j5       r\S!S j5       r\R&                  S"S j5       r\    S#               S$S jj5       rS%U 4S jjr\S&S j5       r\\S\" 5       4         S'S jj5       5       r\      S(S j5       rSS.   S)S jjrS*S jrSr U =r!$ )+r   iz  aT  
Meta tensors give you the ability to run PyTorch code without having to
actually do computation through tensors allocated on a `meta` device.
Because the device is `meta`, meta tensors do not model device propagation.
FakeTensor extends MetaTensors to also carry an additional `fake_device`
which tracks devices that would have been used.
rU  fake_devicer   r   Optional[Tensor]r   real_tensorTr  Optional[type[Tensor]]rM  rV  rN  c                |    U R                   R                  (       a  [        R                  " S5      $ U R                  $ NrL  )r   rd  r   r  r  rJ   s    rL   r  FakeTensor.device  s*    >>..<<''###rP   c                    [         er|   NotImplementedErrorrK   r   s     rL   r  r        !!rP   c                    [        S5      e)Nz+torch.compile doesn't support named tensors)r^   rJ   s    rL   namesFakeTensor.names  s    ,9
 	
rP   c                    [         er|   r  r  s     rL   r  r    r  rP   c                ,   [         R                  " U UUR                  SUS9nUR                  (       d   [        R
                  R                  U5        O[        R
                  R                  U5        UR                  R                  S:X  d   UR                  R                  5       e[        U[        R                  5      (       a  UO[        R                  " U5      nUR                  (       d  UR                  S:w  d   eUR                  S;   a  [        U5        UR                  SSSS[        R
                  R                  5       4;   a  UR                  c  UR                  S:w  ay  [        [        UR                  5      R!                  5       (       aL  [        R                  " UR                   S	[        [        UR                  5      R#                  5        35      nO#[        R                  " UR                   S
35      nX8l        Xl        XHl        Xhl        Xxl        [        U[.        5      (       a   eXXl        S Ul        S Ul        S Ul        S Ul        S Ul        [<        R>                  (       a  [@        RB                  " 5       Ul"        U$ )NT)dispatch_devicedevice_for_backend_keysrL  )rZ  r\  rZ  hpur\  mps:z:0)#r   _make_subclassrequires_grad_allow_unsafe_data_ptr_accessr   r   _set_throw_on_mutable_data_ptr(_set_warn_deprecated_on_mutable_data_ptrr  r   r   
allow_metara  _get_privateuse1_backend_nameindexr   is_initializedcurrent_devicer  r   r   rM  rN  r   r  nonzero_memorA  unique_memounique_consecutive_memonested_int_memort  rz  r2   extract_debug_trace)	clsr   r   r  r   r  rM  rN  rK   s	            rL   __new__FakeTensor.__new__  s    $$ $*
 66HH33D9HH==dC{{6);4;;+;+;;)%fell;;fAU ##;;&(((;;/)V$ KKueUXX-S-S-UVW${{e#v{{(C(R(R(T(T{{m1WUFKK%@%O%O%Q$RS R&89!" *k:6666& '+$#!! 1 9 9 ;DrP   c                "   > [         TU ]  5         g r|   )superrM   )rK   argskwargs	__class__s      rL   rM   FakeTensor.__init__  s    rP   c                $    UR                  U 5      $ r|   )from_tensor)r   r   s     rL   r  FakeTensor.from_tensor  s    $$Q''rP   rT   c                   U[         R                  R                  R                  R                  :X  al  [        U5      S:X  a  [        US   [        5      (       d   eUS   R                  R                  (       a  [         R                  " S5      $ US   R                  $ [        R                  U5      =n(       a  U" U5      $ U Vs/ s H'  n[        U[        5      (       a  M  U[        Ld  M%  UPM)     nnU(       a  [        R!                  SU5        ["        $ S n[$        R&                  " U0 UD6 H&  n	[        U	[        5      (       d  M  U	R                  n  O   Uc   e[         R(                  R+                  [         R(                  R,                  R.                  5      n
U
(       a  [        R!                  SUU
5        ["        $ UR                  (       a   eU   U" U0 UD6sS S S 5        $ s  snf ! , (       d  f       g = f)Nr3   r   rL  z(FakeTensor unrecognized subclass(es): %sz(FakeTensor mode already active: %s in %s)r   opsprimr  defaultlenr   r   r   rd  r  _DISPATCH_META_HANDLERSr
  
issubclassr   not_implemented_logrz  r0  r   arg_tree_leavesr   _get_dispatch_moder   r   )r  rh   typesr  r  handlerr   unrecognized_typesr   argmaybe_cur_fake_modes              rL   __torch_dispatch__FakeTensor.__torch_dispatch__  s    599>>((000t9>ja*&E&EEEAw  55||F++Aw*** .11$77774=  
!Jq*$=A!6/Au 	 
 %%:<N "!	))4:6:C#z**MM	 ;
 $$$ $hh99HH**//
 %%:#
 "!1111(( YK
J Ys   G-$G-/G-G22
H c                .  ^ ^^^^^	 S mSnS m[        [        R                  R                  5      m	SS jmS	U4S jjmS
UUUU UU	4S jjnU H  nU" U5        M     [	        T 5      (       a  Tc  Sn[
        R                  " S5      mTc
   ST  35       eTU4$ )NFc                     U R                   S:H  $ )Nr!  )r   rY  s    rL   check_cpu_device8FakeTensor._find_common_device.<locals>.check_cpu_device|  s    ;;%''rP   c                \   > T" U R                   5      =(       a    U R                  5       S:H  $ Nr   )r  r2  )r   r  s    rL   cpu_zero_dim4FakeTensor._find_common_device.<locals>.cpu_zero_dim  s!    #AHH->!%%'Q,>rP   c                v  > [        U [        5      (       d  g Tc  U R                  mT" U 5      mg T" U 5      nU R                  T:X  a
  T(       a  Umg U(       a  g T(       a  U R                  mUmg TT;   a'  [        [	        TTU R                  45      5      (       a  g [        ST ST SU R                   35      e)Nz,Unhandled FakeTensor Device Propagation for z, found two different devices rc  )r   r   r  r   mapRuntimeError)r   t_is_cpu_zero_dimr  common_devicer  rh   is_cpu_zero_dimmixed_device_fnss     rL   merge_devices5FakeTensor._find_common_device.<locals>.merge_devices  s     a,,$ !".q/ ,Qxx=("&7O !  !"3 ''s+mQXX-FGHH >tfDbcpbqqstut|t|s}~ rP   Tr!  z!Could not find common device for )r  rU  rV   r   r   r   rV   r   )r   objectrV   rW   )r   aten_foreach_copyr  rr  r   r  )
rh   	flat_argshas_scalar_only_inputsr  r  r  r  r  r  r  s
   `    @@@@@rL   _find_common_deviceFakeTensor._find_common_devicej  s     !& '&&
	(	?(	 (	T C#  +400]5J%)"!LL/M(T,MdV*TT(444rP   r3   )coeffc                   U R                   c  U R                  R                  S S9U l         [        U R                   [        R
                  5      (       d   eU R                   U-  $ )Nnt_tensor_id)r  r   create_symbolic_nested_intr   r   r   )rK   r   s     rL   get_nested_intFakeTensor.get_nested_int  s`    
 '#'>>#L#L! $M $D  $..====##e++rP   c                   U R                  5       S:X  a  U R                  5       $ U R                  5       S:X  a   U  Vs/ s H  oR                  5       PM     sn$ U  Vs/ s H  oR                  5       PM     sn$ s  snf s  snf Nr   r3   )r2  r9  tolist)rK   r   s     rL   r	  FakeTensor.tolist  sb    88:?99;XXZ1_,01DDIIKD11.23ddKKMd33 23s   A9A>)r  r   rN  r  r   rA  r  r  rM  r  r  r  )rV   rU  )r   rU  rV   rW   )rV   	list[str])r   r  rV   rW   )NNNN)r   r   r   r   r  rU  r   r  r  r  rM  r  rN  rV  rV   r   )r  r  r  r  rV   rW   )r   r   r   r   rV   r   
rh   r=   r  Sequence[type]r  Sequence[object]r  Mapping[str, object]rV   r  )rh   r=   r  r  rV   ztuple[torch.device, bool])r   zUnion[int, torch.SymInt]rV   torch.SymInt)rV   r   )"rX   rY   rZ   r[   __doc__rc   r|  r  rA  r  r  r  r   r   r   r   	_mode_keyrW  r  setterr  staticmethodr  rM   r  classmethodr1   r!   r  r  r  r	  r\   __classcell__r  s   @rL   r   r   z  s    !!
 +,L')I)+K57
 .DAO
 #"11 ..33I$ $ ]]" "& 
 

 \\" "  &*(,)-8<?!? ? 	?
 #? &? '? 6? 
? ?f ( ( 

 "$'5'7G)G) G) 	G)
 %G) 
G)  G)R N5N5%5N5	"N5 N5f +,
, (
, 
	
,4 4rP   r   r5   r6   c                      \ rS rSr% SrS\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'           S!S jrSrg )"TensorMetadatai  zC
The Tensor metadata relevant to hashing FakeTensors when caching.
ztorch.dtyper3  ztuple[_MetadataIntLike, ...]shapestriderU  r  ztorch.layoutr   zOptional[torch.memory_format]memory_format_MetadataIntLikestorage_offsetzOptional[_MetadataIntLike]storage_bytesr   r  r-  is_conjis_negr  r   ry   is_coalescedOptional[int]	dense_dim
sparse_dimc                z   [         R                  " U 5       H  n[        XR                  5      n[	        U[
        [        [        R                  45      (       a&  / nUR                  XX65        UR                  5         Mh  [	        U[        5      (       a  UR                  X5        M  UR                  U5        M     g r|   )dataclassesfieldsr   rp  r   tuplelistr   Size_prep_args_for_hashclearr   convert_sym_intr   )rK   resultmodestatefieldrF  id_hashed_objectss          rL   _flatten_intoTensorMetadata._flatten_into  s     !''-ED**-E%%uzz!:;; 35!((Q!'')E6**%%f4e$ .rP   rT   N)r/  list[object]r0  r   r1  r4   rV   rW   )rX   rY   rZ   r[   r  rc   r4  r\   rT   rP   rL   r  r    s     ''((00$$--MLO  %% % 	%
 
%rP   r  c                >   [        U 5      nU R                  (       d$  [        U 5      (       d  U R                  US9(       d  SnU R	                  5       n[        U R                  U R                  U R                  [        R                  :X  a  U R                  5       OSU R                  U R                  UU[        U 5      (       d  U R                  5       R                  5       OSU R                  U R                   U R#                  5       U R%                  5       U R'                  5       U R(                  U R(                  (       a  U R+                  5       OS[        U 5      (       a  U R-                  5       OS[        U 5      (       a  U R/                  5       5      $ S5      $ )z)
Extract the TensorMetadata of a tensor.
)r  NrT   )r   _has_symbolic_sizes_stridesr   is_contiguousr  r  r3  r  r   r   r   r  r  untyped_storagenbytesr  r-  r   r!  r  r   r"  r$  r%  )r   r  r  s      rL   extract_tensor_metadatar<    s)    *!,M 	
%%];%%'N		hh%--/
R		,9!,<,<""$$						
		KKT&q))t'**% $ 15% rP   c                  V    \ rS rSr% SrS\S'   S\S'   SS jrSS jrSS	 jrSS
 jr	Sr
g)_DispatchCacheKeyi)  z(
Key for the FakeTensor dispatch cache.
tuple[object, ...]r   int	hashvaluec                0    Xl         [        U5      U l        g r|   )r   hashrA  )rK   tups     rL   rM   _DispatchCacheKey.__init__3  s    crP   c                b    [        U[        5      =(       a    U R                  UR                  :H  $ r|   )r   r>  r   )rK   others     rL   __eq___DispatchCacheKey.__eq__7  s"    %!23MEII8MMrP   c                    U R                   $ r|   )rA  rJ   s    rL   __hash___DispatchCacheKey.__hash__:  s    ~~rP   c                x    U R                    H*  n[        U[        5      (       d  M  UR                  5         M,     g r|   )r   r   r5   strip_shape_env)rK   r  s     rL   rN  !_DispatchCacheKey.strip_shape_env=  s+     A!_--!!# rP   )rA  r   N)rD  r?  rV   rW   )rG  r  rV   r   )rV   r@  rU   )rX   rY   rZ   r[   r  rc   rM   rH  rK  rN  r\   rT   rP   rL   r>  r>  )  s)     
N#N$rP   r>  c                      \ rS rSrSrg)SingletonConstantiG  rT   N)rX   rY   rZ   r[   r\   rT   rP   rL   rQ  rQ  G  s    rP   rQ  T)frozenc                  F    \ rS rSr% SrS\S'   S\S'   S\S'   \rS\S	'   S
rg)_DispatchCacheEntryOutputInfoiK  a  
Entry type for the FakeTensor dispatch cache for an output. Accounts for three
possibilities:
1) The op is inplace, and a hit means we need to alias the argument at a
   given index.
2) We need to synthesize a new FakeTensor given tensor metadata. For view
   ops, we further capture the index of the arg to alias.
3) if the tensor related fields are None, then it is a constant value (e.g.
None or integer)
r#  inplace_idxzOptional[TensorMetadata]metadataview_idxzOptional[Any]constant_valuerT   N)	rX   rY   rZ   r[   r  rc   rQ  rX  r\   rT   rP   rL   rT  rT  K  s%    	 &&$5NM5rP   rT  c                  2    \ rS rSr% SrS\S'   SrS\S'   Srg	)
_DispatchCacheValidEntryi_  z
Entry type for the FakeTensor dispatch cache. It supports two types of outputs
1) tensor
2) tuple of tensors

is_output_tuple flag helps in differentiating the return type
z$tuple[_DispatchCacheEntryOutputInfo]output_infosFr   is_output_tuplerT   N)rX   rY   rZ   r[   r  rc   r\  r\   rT   rP   rL   rZ  rZ  _  s     76!OT!rP   rZ  c                  $    \ rS rSr% SrS\S'   Srg)_DispatchCacheBypassEntryin  z(
Entry type for a negative cache entry.
r`   ra   rT   NrX   rY   rZ   r[   r  rc   r\   rT   rP   rL   r^  r^  n       KrP   r^  c                  $    \ rS rSr% SrS\S'   Srg)_BypassDispatchCachei|  z4
Signals cases that should skip FakeTensor caching.
r`   ra   rT   Nr_  rT   rP   rL   rb  rb  |  r`  rP   rb  c                  B    \ rS rSr% SrS\S'   S\S'   S\S'   S\S'   S	rg
)DispatchCacheInfoi  z?
Information about the state of the FakeTensor dispatch cache.
r@  hitsmissesdict[str, int]bypassessizerT   Nr_  rT   rP   rL   rd  rd    s     IK
IrP   rd  c                    ^  \ rS rSr% 0 rS\S'   SrS\S'   SrS\S'   \" \	5      r
S\S	'   SrS\S
'   SrS\S'   S\S'   S\S'   S\S'   S\S'   SrS\S'   SrS\S'   SSSSSS.           SGU 4S jjjrSHS jrSIS jr\SJS j5       r\SKS j5       r\S\" 5       4         SLS  jj5       rSMU 4S! jjr        SNU 4S" jjr\SJS# j5       r\SOS$ j5       r\SHS% j5       r          SLS& jr          SPS' jr        SQS( jr           SRS) jr!              SSS* jr"              STS+ jr#              SUS, jr$            SVS- jr%            SWS. jr&            SXS/ jr'S\" 5       4         SLS0 jjr(          SYS1 jr)            SZS2 jr*          S[S3 jr+\," S4S5S6S7S8S9S:S;5      r-S\S< jr.          S]S= jr/          S^S> jr0SS?.   S_S@ jjr1\," \2Rf                  Rh                  \2Rj                  Rl                  \2Rn                  Rl                  \2Rp                  Rl                  \2Rr                  Rl                  \2Rt                  Rl                  \2Rv                  Rl                  \2Rx                  Rl                  \2Rz                  Rl                  \2R|                  R~                  \2R                  Rl                  5      rAS\SA jrB\," \2R                  Rl                  \2R                  Rl                  5      rES`SB jrF          SaSC jrGSSSSSD.           SbSE jjrHSFrIU =rJ$ )cr   i  ,dict[_DispatchCacheKey, _DispatchCacheEntry]cacher   r@  
cache_hitscache_missesrg  cache_bypassesr  Fr   rd  static_shapesrR  r  zOptional[str]_stackr  rm  nt_tensor_id_counternt_tensor_id_initial_countTN)allow_fallback_kernelsallow_non_fake_inputsr  rp  r   c                 > [         R                  S[        U 5      5        [        TU ]  5         Xl        SS KnSS KnUR                  R                  R                  U l        [        U R                  US9U l        Ub  X@l        O	US L U l        SU l        UR                  R                  R                   U l        UR                  R                  R$                  U l        UR(                  R                  R*                  =(       a    U R                  (       + U l        UR(                  R                  R.                  U l        X l        SU l        / U l        X0l        [:        R<                  " 5       U l        S U l         URB                  RD                  RF                  U l$        SS K%nURL                  RN                  RP                  RR                  U l*        U RT                  U l+        g )Nzcreate_mode 0x%xr   r   F),logrz  idr  rM   rt  torch._dynamo.configtorch._functorch.configr   config"fake_tensor_propagate_real_tensorspropagate_real_tensorsr   fake_tensor_converterrp  allow_scalar_outputs(fake_tensor_allow_unsafe_data_ptr_accessr  fake_tensor_allow_metar  _dynamofake_tensor_cache_enabledr   $fake_tensor_cache_crosscheck_enabledcache_crosscheck_enabledru  rd  enter_stackr  	tracebackextract_stack_stack_tracerq  r   r   r   r  $torch.nested._internal.nested_tensornested	_internalnested_tensor_tensor_id_counterrs  rr  )rK   rt  ru  r  rp  r   r   r  s          rL   rM   FakeTensorMode.__init__  s   $ 			$bh/&<##& ##FF 	# &911&
"
 $!.!*d!2D %*! ##LL 	*  **11HHMM  :: 0/// 	
 MM  EE 	% &;" %*!  	 #%335 77<<3 LL""00CC 	' %)$C$C!rP   c                &    U R                   U l        g r|   )rs  rr  rJ   s    rL   reset_nt_tensor_id_counter)FakeTensorMode.reset_nt_tensor_id_counter  s    $($C$C!rP   c                L    [        U[        5      =(       a    UR                  U L $ r|   )r   r   r   rK   r   s     rL   is_our_fakeFakeTensorMode.is_our_fake"  s    !Z(@Q[[D-@@rP   c                   [         R                  R                  5       (       aH  [         R                  R                  5       (       a   e[         R                  R	                  5       (       + $ [         R                  R	                  5       =(       d5    [        [         S5      =(       a    [         R                  R	                  5       (       + $ )Nr  )r   r\  _is_compiledrZ  r[  hasattrr  rJ   s    rL   avoid_device_init FakeTensorMode.avoid_device_init*  s    99!!##zz..0000yy--/// JJ##% Du%B%))*@*@*B
 	
rP   c                    U R                   c4  SR                  [        R                  " U R                  5      5      U l         U R                   $ )N )rq  joinr  format_listr  rJ   s    rL   stackFakeTensorMode.stack5  s7    ;;'')"7"78I8I"JKDK{{rP   rT   c                   [         R                  R                  [         R                  R                  R                  5      b   U5       e U R                  XX45      $ ! [         a    [        R                  S5        e f = f)Nzfake tensor raised TypeError)	r   r   r  r   r   dispatch	TypeErrorrw  	exception)rK   rh   r  r  r  s        rL   r  !FakeTensorMode.__torch_dispatch__;  sn     HH''(F(F(K(KLT		T	==d;; 	MM89	s   A !A>c                  > SS K nS nU R                  (       a5  UR                  R                  5       nUR                  R	                  S5        UR                  R                  U R                  5      nXLa+  U R                  R                  SX245        [        TU ])  5       $ UR                  R                  U 5        U R                  R                  SS U45        U $ )Nr   TF)r  r  r   _only_lift_cpu_tensors_set_only_lift_cpu_tensorsr   r  r  r   r  	__enter__r   )rK   r   prev_only_lift_cpu_tensorsmaybe_prev_fake_moder  s       rL   r  FakeTensorMode.__enter__N  s    3%)"!!).)H)H)J&HH//5$xx<<T^^L+##+H 7$&& HH''-##UD2L$MNrP   c                   > U R                   R                  5       u  nnnU(       aV  [        TU ]  XU5        Ub  [        R
                  R                  U5        Ub   [        R
                  R                  U5        g g g r|   )r  r   r  __exit__r   r   r   r  )rK   abcliver   maybe_prev_only_lift_cpu_tensorsr  s          rL   r  FakeTensorMode.__exit__b  su       "		
 ,GQ1% $/++,@A/;334TU < rP   c                    gr   rT   r  s    rL   is_infra_modeFakeTensorMode.is_infra_modev  s    rP   c                    [        [        R                  [        R                  [	        [        R
                  5      [        [        R                  5      5      $ )z(
Query the state of the dispatch cache.
)rd  r   rm  rn  r   ro  r  rl  r  s    rL   
cache_infoFakeTensorMode.cache_infoz  s?    
 !%%''../$$%	
 	
rP   c                    SU l         SU l        U R                  R                  5         U R                  R                  5         g)z
Clear the dispatch cache.
r   N)rm  rn  ro  r-  rl  r  s    rL   cache_clearFakeTensorMode.cache_clear  s3    
   "		rP   c                   SnSn [        U R                  5      nU R                  XQX45      nUc  U R                  XX45      $ Uc   eUR                  5       (       a,  UR                  c   eUR                  R                   n["        n	O[        R$                  n[&        n	UR)                  US5      n
U
b  [	        U
[*        5      (       a7  [        R                  U
R                  ==   S-  ss'   U R                  XX45      $ U R-                  XZXaU5      n[        =R.                  S-  sl        U R0                  (       a)  [3        U 5         U R5                  XX#U5        SSS5        U$ U$ U R                  XX45      n U R7                  XU5         U R9                  XVXXK5      n
U	" XU
5        [        =R:                  S-  sl        U$ ! [         a  n[	        U[
        R                  R                  5      (       a8  UR                  5       S:X  a$  [        R                  SUS   UR                  5        [        R                  UR                  ==   S-  ss'    SnAGN-SnAff = f! , (       d  f       U$ = f! [         a  n[	        U[
        R                  R                  5      (       a8  UR                  5       S:X  a$  [        R                  SUS   UR                  5        [        R                  UR                  ==   S-  ss'   U	" X[+        UR                  5      5        Us SnA$ SnAff = f! [         aM  n[        R                  UR                  ==   S-  ss'   U	" X[+        UR                  5      5        Us SnA$ SnAff = f)z
Lookup a cache entry for the given arguments. If none exists, dispatch
and cache the result (if the result is eligible for caching).
Ninvoke_subgraphz6Fake tensor cache failed: identifier = %s, reason = %sr3   )r4   r  
_cache_keyrb  r   r   _opsHigherOrderOperatorrp  hc_logrz  ra   r   ro  _dispatch_implcache_on_shape_envfake_tensor_cache_set_cache_key_for_shape_envrl  _set_cache_keyr
  r^  _output_from_cache_entryrm  r  r   _crosscheck_cache_output_validate_cache_key_make_cache_entryrn  )rK   rh   r  r  r  r1  r   erl  set_cache_keyentryoutputs               rL   _cached_dispatch_impl$FakeTensorMode._cached_dispatch_impl  s    	9"4>>2E//%t<C ; &&tDAA   ##%%??...OO55E8M"((E*M		#t$%!:;; --ell;q@;**4EE 225DQF%%*%,, /t411&VT 5M6M $$T$?	$$T8$	**5t6RE 	e%(##q(#_ $ 	9 4!?!?@@IIK#44LGHH
 ))!((3q833	9T 54M $ 	
 4!?!?@@IIK#44LGHH
 ))!((3q83%&?&IJM	& $ 	 ))!((3q83%&?&IJM	sb   'G I":I4 L/ 
IBII"
I14
L,>B#L'!L,'L,/
N9AN;NNc           	     \   U[         R                  " 5       [         R                  R                  5       [         R                  " 5       U R
                  (       a  U R
                  R                  OS/nUR                  (       a  UR                  U R                  5        / nU(       a  U R                  XSX5        U(       a  U R                  XTX5        [        [        U5      5      nU H1  n[        R                  " U[        R                   " ["        US95        M3     UR%                  5         U$ )zs
Create a cache key given the dispatch args. Raises _BypassDispatchCache
for any situation that precludes caching.
Nr   )r   get_default_dtyper   _get_default_deviceis_inference_mode_enabledr  settingsknown_symbolsr   r  r,  r>  r)  r   finalize	functoolspartialevict_fake_tensor_cache_keyr-  )	rK   r1  rh   r  r  
key_valuesr3  r   id_hashed_objs	            rL   r  FakeTensorMode._cache_key  s      ##% HH((* ++- (,~~DNN##4

   djj)*,$$ZuP$$ZRj 12.My001LRUV / 	!
rP   c                   SSK Jn  [        U[        R                  R
                  5      (       a  X;   a  g[        R                  R                  UR                  ;   a  [        S5      e[        R                  R                  UR                  ;   a  U[        R                  R                  L at  [        XUSS9u  pVUS    H]  n[        U[        R                  5      (       d  M$  UR                  [        R                   [        R"                  4;   d  MT  [        S5      e   g[        S5      e[        R                  R$                  UR                  ;   a  [        S	5      eU[        R&                  R(                  :X  a  [        S
5      eXR*                  ;   a  [        S5      eUR-                  5       S:X  a  [        S5      e[        R.                  R0                  R3                  U5      (       d  [        S5      eUR4                  (       aa  [        R6                  R9                  UR-                  5       [        R6                  R:                  R<                  5      (       a  [        S5      egg)zI
Validate that the cache key generated by _cache_key will be
reasonable.
r   registered_hop_fake_fnsNzdata dependent outputTr  r  normalize_to_only_use_kwargsindiceszdynamic output shapezinplace viewzunsafe viewliftzinductor::resize_storage_bytes_znon-builtinCompositeImplicitAutograd)torch._higher_order_ops.utilsr  r   r   r  r  Tagdata_dependent_outputtagsrb  dynamic_output_shaper  r  r   r"   r3  r   r7  inplace_view_unsafe_viewr  lift_fnsrp  _libraryutils
is_builtinis_viewr   %_dispatch_has_kernel_for_dispatch_keyDispatchKeyr  )rK   rh   r  r  r  r   
new_kwargsr  s           rL   r  "FakeTensorMode._validate_cache_key   s    	J
 tUZZ;;<</
 99**dii7&'>??99))TYY6tzz((( 2FQU! (	2E "%665;;



K < 33IJJ 3 &'=>>99!!TYY.&~664$$,,,&}55== &v..99;;;&'HII~~##..t44&}55
 <<EHHJJIIK--GG
 
 ''BCC
<rP   c                ^   SSK Jn  [        U[        5      (       aA  U R	                  XR                  5       X45        U R	                  XR                  5       X45        gU GHJ  n[        U[        5      (       a  U R                  U5      (       d  [        S5      eUR                  b  [        S5      e[        U5      (       a  [        UR                   S35      e[        U5      nUR                  XU5        M  [        U[        5      (       a  [        S5      e[        U[         5      (       a  UR#                  X5        M  [        U[$        [&        45      (       a  [        S5      e[        U[(        [*        [        45      (       a  U R	                  XX45        GM<  [        U[,        R.                  5      (       a  [        S	5      e[        U[0        R2                  R4                  5      (       aH  UR7                  [9        U5      5        UR7                  [;        U5      5        UR7                  U5        GM  [        Xe5      (       a8  UR7                  [=        U5      5        UR7                  UR>                  5        GM  UR7                  [9        U5      5        UR7                  U5        GMM     g)
a  
Translate the provided args into a form suitable for caching at FakeTensor
dispatch, i.e., convert unhashable types like lists & dicts into tuples and
convert FakeTensors into metadata. Raises _BypassDispatchCache to signal
unsupported cases that should bypass caching.
r   )FunctionalizeCtxWrapperNznot our fakeconstant attributez tensorznon-fake tensorzsymbolic shapezfunction argument) r  r  r   r   r,  keysvaluesr   r  rb  r   r   r   r<  r4  r   r   r.  r   r   r*  r)  r  FunctionTyper   fxGraphModuler   r   rx  rC  subgraph)rK   r/  r  r1  r3  r  r  rV  s           rL   r,  "FakeTensorMode._prep_args_for_hashc  s    	JdD!!$$VYY[%S$$V[[]EUC#z**'',,.~>><<+./CDD %%.#**W/EFF237&&vU;C((*+<==C((%%f2C'8!455*+;<<C$t!455((eOC!3!344*+>??C!5!566 d3i(bg&!((-C99 d3i( "((6
 d3i(c"M rP   c                   [        U[        [        S 5      45      (       a  g [        X5      (       a  [	        S5      e[        U[
        5      (       d  [	        S5      eUR                  b  [	        S5      eUR                  (       a  [	        S5      e[        U5      (       a  [	        S5      eUR                  5        H&  n[        U5      [        U5      :X  d  M  [	        S5      e   g )Nzunrepresented symbol in outputznon-FakeTensor outputr  zsparse outputzsparse compressed outputzkwarg aliases output)r   r@  r   _has_unrepresented_symbolsrb  r   r   r   r   r  rx  )rK   r1  r   rh   r  r  r  kvals           rL    _validate_output_for_cache_entry/FakeTensorMode._validate_output_for_cache_entry  s     fsDJ/00%e44 ''GHH &*--&'>?? ??&&';<< &77''&'ABB MMOD$x2f:%*+ABB $rP   c                  ^ [        U[        [        R                  [	        S 5      45      (       a  [        S S S US9$ [        [        U5      5       H*  n[        XG   5      [        U5      :X  d  M  [        US S S9s  $    S n[        U[        R                  R                  5      (       a]  UR                  (       aL  [        U5       V	V
s/ s H  u  p[        U
[        5      (       d  M  U	PM      nn	n
[        U5      S:X  d   eUS   n[        U5      n[        U4S jUR                    5       5      Ul        [        U4S jUR"                   5       5      Ul        TR%                  UR&                  5      Ul        UR(                  c  S OTR%                  UR(                  5      Ul        [        S UUS9n[+        U4SS9nSS	KJn   U R1                  TXX45      n[        R4                  R7                  U5      n[        R4                  R7                  U5      nUU:w  a  [3        S5      eU$ s  sn
n	f ! U a    [3        S
5      S ef = f)NrU  rV  rW  rX  )rU  rV  rW  r3   r   c              3  F   >#    U  H  nTR                  U5      v   M     g 7fr|   convert_outputr   r  r1  s     rL   r   BFakeTensorMode._get_output_info_for_cache_entry.<locals>.<genexpr>  s     O1u33A66   !c              3  F   >#    U  H  nTR                  U5      v   M     g 7fr|   r  r  s     rL   r   r    s     QA 4 4Q 7 7r  Fr[  r\  )GuardOnDataDependentSymNodezdata dependent symnodezdispatch_key_set mismatch)r   r@  r   r   r   rT  ranger  rx  r  r=   r  	enumerater   r<  r)  r  r  r  r  r  rZ  r+  r  r  rb  r   _dispatch_key_set)rK   r1  r   rh   r  r  r  idxrW  ir   idxsrV  r  entry_for_synth_outputr  synth_outputsynth_key_setkey_sets    `                 rL    _get_output_info_for_cache_entry/FakeTensorMode._get_output_info_for_cache_entry  s    fsELL$t*=>>0 4$v 
 T#C$)}6
*4 #dT  $ dEJJ1122t||"+D/K/$!Z65JA/DKt9>!>AwH*62OOOQQQ"'"6"6x7N7N"O %%- %%h&<&<= 	 .
 ":5"
 	V		K88-DL 22<@((,,V4G#&'BCCa LD + 	K
 ''?@dJ	Ks   	H*(H*H0 0Ic                  ^ SSK Jn  SSKJm  [	        U[
        R                  R                  5      (       aG  X7;   aB  [	        U[        5      (       d   e[        U4S jU 5       5      nU(       a  [        SU S35      e[	        U[        [
        R                  [        S5      45      (       a  [        SSSUS9n	[        U	4S	S
9$ [	        U[        5      (       a  U H  n
U R!                  XX4XZ5        M     OU R!                  XX4XV5        [	        U[        5      (       a6  U Vs/ s H  nU R#                  XX4X[5      PM     nn[        [        U5      SS
9$ U R#                  XX4XV5      n	[        U	4S	S
9$ s  snf )z
Make a cache entry object for the given 'output' Tensor. Raises
_BypassDispatchCache if the output tensor has characteristics that
prevent caching it.
r   r  )has_free_unbacked_symbolsc              3     >#    U  H>  n[        U[        R                  [        R                  45      =(       a    T" U5      v   M@     g 7fr|   )r   r   r   r   )r   or"  s     rL   r   3FakeTensorMode._make_cache_entry.<locals>.<genexpr>0  s@         A 1u||U\\:; 1-a01s   AA	zunbacked symbol in HOP z outputNr  Fr  T)r  r  r+  r"  r   r   r  r  r)  r   rb  r@  r   r   rT  rZ  r  r  )rK   r1  r   rh   r  r  r  r  non_cacheableoutput_infoout_elementout_elemr[  r"  s                @rL   r   FakeTensorMode._make_cache_entry  s    	JS tUZZ;;<</fe,,,,      M
 *-DTF'+RSSfsELL$t*=>>7 4$vK ,)^U  fe$$%55F  &
 11D fe$$
 !'	 !'H 55F !'	   ,"<0$ 
 ??DK ,)^U s   "E2c                H  ^^^ UR                   c;  UR                  c.  UR                  c!  UR                  [        Ld   eUR                  $ UR                   b'  XRR                      n[        U[        5      (       d   eU$ UR                  nUc  g [        U5      (       a   e      SU4S jjm[        UU4S jUR                   5       5      n[        UU4S jUR                   5       5      n	T" UR                  T5      n
UR                  b  T" UR                  T5        [        R                  nU R                  b  U R                  R                   n[#        U 5         U" 5          [$        R&                  " UU	UR(                  UR*                  SUR,                  S9nS S S 5        S S S 5        UR.                  (       a   [$        R0                  R3                  WS5        UR4                  (       a   [$        R0                  R7                  WS5        [        U[$        R8                  R:                  5      (       a  UR<                  (       az  U[?        [@        UR                  5         n[        U[        5      (       d   eURC                  5       n[#        U 5         U" 5          WRE                  XX5        S S S 5        S S S 5        [        U WURF                  5      $ ! , (       d  f       GND= f! , (       d  f       GNN= f! , (       d  f       NQ= f! , (       d  f       NZ= f)Nc                   > [        U [        5      (       a+  UR                  c   eU R                  TUR                  5      $ [        U [        5      (       a   eU $ r|   )r   r6   r  r  r5   )rF  r1  r   s     rL   check_valueGFakeTensorMode._get_output_tensor_from_cache_entry.<locals>.check_valuey  sP     %!233222}}S%//::%e_====rP   c              3  6   >#    U  H  nT" UT5      v   M     g 7fr|   rT   r   r  r-  r1  s     rL   r   EFakeTensorMode._get_output_tensor_from_cache_entry.<locals>.<genexpr>  s     D^k!U++^   c              3  6   >#    U  H  nT" UT5      v   M     g 7fr|   rT   r0  s     rL   r   r1    s     Fo{1e,,or2  rL  )r3  r   r  r  T)rF  r  r1  r4   rV   zUnion[IntLikeType])$rU  rV  rW  rX  rQ  r   r   r   r)  r  r  r  r  
contextlibnullcontextr  suppress_guardsrk  r   empty_stridedr3  r   r  r   r   	_set_conjr!  _set_negr  r=   r  r   r@  r:  set_r  )rK   r1  r  r   rh   r  inplace_argrV  r  r  r  maybe_suppressr_  view_argstorager-  s    ` `           @rL   #_get_output_tensor_from_cache_entry2FakeTensorMode._get_output_tensor_from_cache_entry]  se    %&&''/@@@@'''(001Kk:6666 >> ****	#	,:		 DX^^DDFhooFF$X%<%<eD!!-..6>H>T>T>>%!^^;;N)$/1A''nn&44E 2B/ HHud+??HHeT*dEJJ1122t||Denn56Hh
3333..0G-d3^5E

7EB 6F3 $x77/ 2B1A//( 6F5E33sH   !K0)8K!K0L$L7L
K-	(K00
K?
L	L
L!c           
         UR                   (       a8  UR                   Vs/ s H  nU R                  XX4U5      PM     nn[        U5      $ U R                  XR                  S   X4U5      $ s  snf )z/
Create a new FakeTensor from the cache entry.
r   )r\  r[  r?  r)  )rK   r1  r  r   rh   r  r'  outputss           rL   r  'FakeTensorMode._output_from_cache_entry  s       
 $)#5#5	 $6K 884 $6	   >!;;))!,c s   A*c                   ^ SU4S jjm U R                  X#XE5      n T" Xa5        g! [         a  n[        SU SU SU SU 35      UeSnAff = f! [         a  n[        SU SU SU 35      UeSnAff = f)zn
Helper to validate that the output synthesized from the cache matches
the output created by normal dispatch.
c                  > [        U [        5      (       aN  [        U[        5      (       d   e[        U 5      [        U5      :X  d   e[        X5       H  u  p#T" X#5        M     g [        U [        5      (       a  [        U[        5      (       a  X:X  d   eg U c  Ub   eg [        U [
        5      (       a4  [        U 5      [        U5      :X  a  U R                  UR                  L d   eg [        U [        R                  5      (       a2  [        U[        R                  5      (       d   e[        [        X5        g [        S[        U 5       35      e)NzUnsupported type )r   r)  r  zipr@  r&   r   r  r   r   r   r   r  )r  r  lr  assert_helpers       rL   rH  >FakeTensorMode._crosscheck_cache_output.<locals>.assert_helper  s   !U##!!U++++1vQ'''IDA!!' &As##!!S))af44fy yA|,,Aw$q')aff.>>>.>Au||,,!!U\\2222"9a3"%6tAwi#@AArP   z*FakeTensor cache crosscheck failure: func=z, args=z	, kwargs=z: Dispatch raised=N)r  r   r  r   rV   rW   )r  	Exceptionr  )	rK   r  rh   r  r  r  true_outputr  rH  s	           @rL   r  'FakeTensorMode._crosscheck_cache_output  s    	B$	--d4HK	+.  	<TF CvYvh.@E 	  	<TF CvYvh0 	s+   ' A 
AA		A
A5A00A5c                6   U=(       d    0 n[        5          [        R                  SXU5        S S S 5        U[        ;   a  [        U   " U5      $ [        R	                  5       [
        R                  ::  a(  [        R                  SS[        -  U5        [        5       nU[        ;   a  [        U 5         U" U0 UD6sS S S 5        $ U R                  (       a  U R                  XX45      $ U R                  XX45      $ ! , (       d  f       N= f! , (       d  f       NT= f)Nz%s %s %sz'%sFakeTensorMode.__torch_dispatch__: %s )r(   rw  rz  r  getEffectiveLevelloggingDEBUGrI   rD   _DISPATCH_HANDLE_DIRECTLYrk  r   r  r  )rK   rh   r  r  r  incrs         rL   r  FakeTensorMode.dispatch  s     2]IIj$f5  ***4066  "gmm3II93;PRV +,D ,,-d3T,V, 43 --d4HH&&tDAA/ ]" 43s   C92D
9
D

Dc                  ^ ^^^^
^ SSK mSSKJn  SU U4S jjn[        T[        R
                  5      (       aW   U" TTSSSSSS9  [        [        TR                  5       TR                  5       5      5       H  u  nu  p U" X5        M     TS4$ Tck  Tbh  [        R                  R                  R                  (       a  [        S	UUU4S jS9  [        T TT5      S4$ [        ST ST S[        U5       ST 35      e U" TT5        TS4$ ! [         ar  m
[        R                  R                  R                  (       a#  [        S	U
U4S
 jS9  [        T TT5      S4s Sm
@
$ [        ST ST S[        U5       ST 35      T
eSm
@
ff = f! [         aw  m
[        R                  R                  R                  (       a%  [        S	U
U4S jS9  [        T TT5      S4s Sm
@
s  $ [        SU SU	 S[        U5       SU ST 3
5      T
eSm
@
ff = f! [         a&  m
[        ST ST S[        U5       ST 35      T
eSm
@
ff = f)z
Helper to cross-check fake/real output properties & values,
and create new fake vals if mismatched.
Returns tuple of object & boolean, for whether or not it was overwrriten
r   N)_check_fake_real_tensorsc                z  > [        U [        [        45      (       a  TR                  c   eU R                  R
                  R                  TR                  R                  R                  5       -
  TR                  R                  R                  5       -
  (       dh  TR                  R                  TR                  U R                  R
                  U5      SS9TR                  R                  La  [        SU  SU S35      eg g [        U [        [         ["        45      (       a  X:w  a  [        SU  SU S35      eg g )NT)compute_hintmismatch between fake value  and real value rN  )r   r   r   r  r  exprfree_symbols
var_to_valr  unbacked_var_to_val_maybe_evaluate_staticEqStruert   r@  floatr   )fakerealrK   sympys     rL   _check_fake_real_vals?FakeTensorMode._maybe_infer_fake.<locals>._check_fake_real_vals  s-   $ 233~~111		33nn//4467nn88==?@
 ==!HHTYY^^T: >   %ww||,
 4:4&@PQUPVVWX ,@ sE4(  </6tf<LTFRST   rP   Real tensor propagation foundFT)contextsizesstridesr  r  mismatched_fake_kernelc                 4   > [        T5      T R                  S.$ Nopra   r`   ra   excrh   s   rL   <lambda>2FakeTensorMode._maybe_infer_fake.<locals>.<lambda>D  s    "%d)&)jj-rP   metadata_fnzFReal tensor propagation found a metadata mismatch between fake tensor z and real tensor z,  at outputz, for func: c                 4   > [        T5      T R                  S.$ ro  rr  rs  s   rL   ru  rv  Y  s    &)$i*-**1rP   zIReal tensor propagation found an output size mismatch between fake shape z and real shape z, at outputz.size(z), for func: c                 ,   > [        T5      ST  ST 3S.$ )NrY  rZ  rp  r`   )rd  rh   re  s   rL   ru  rv  h  s"    !$i$@FVW[V\"])rP   zQReal tensor propagation found an output value mismatch between fake output value z and real output value )rd  r   re  r   rV   rW   )rf  torch._subclasses.fake_utilsrV  r   r   r   rt   r   r{  *generate_fake_kernels_from_real_mismatchesr   _infer_fake_from_real_tensorr,   r  rF  ri  )rK   rh   pathrd  re  rV  rg  js_fakes_realrt  rf  s   `` ``     @@rL   _maybe_infer_fake FakeTensorMode._maybe_infer_fake  s    	I	 	6 dELL))(;!#'"'2 (1TYY[$))+1N'O##F)&9 (PX U{1 \d.&&QQ!,! 4D$EtKK'#f$5dV <#D\N,tf> %dD1 U{y ) ##**UU%0% 8dDI4OO+##'&(9$ @!!'l4&B 	& - ((//ZZ)4)  <D$MtSS/&&,X-=fX F$$*4L>s-vO 	F ) +))-.EdV L  &t~\$A 	sa   D  F?	H 
FAFF"!FF
HAHH#$HH
H?!H::H?c                  ^ ^^^ SSK Jn  SmT R                  (       a  [        T R                  R                  5      mSUU 4S jjn[
        R                  U5      u  p[
        R                  U5      u  p U" SXSXB5        [        [        X5       VVVs/ s H  u  u  pnT R!                  TXU5      PM     snnn6 u  nn[#        U5      (       a  T(       a  U" 5         [
        R%                  X5      $ ! [         ao  m[        R                  R                  R                  (       a,  [        SUU4S jS9  U" 5         [        UU 4S	 jU5      s Sm@$ [        S
U SU ST 35      TeSm@ff = fs  snnnf )z
Helper to cross-check fake/real output properties & values,
and create new fake vals if mismatched, but at the kernel level.
Means this handles pytree outputs & checks aliasing.
r   )_check_alias_infoNc                    > [        [        TR                  R                  5      R	                  T 5      5      TR                  l        g r|   )r*  setr  pending_fresh_unbacked_symbols
difference)pending_unbackedrK   s   rL   _clear_pending_unbackedXFakeTensorMode._maybe_infer_fake_kernel_from_pytree_out.<locals>._clear_pending_unbacked  s4    <@DNNAABMM$=DNN9rP   ri  rm  c                 :   > [        T5      ST R                   3S.$ )Nz>Mismatched aliasing spec between fake kernel and real kernel: rp  rr  rs  s   rL   ru  IFakeTensorMode._maybe_infer_fake_kernel_from_pytree_out.<locals>.<lambda>  s!    !$i\]`]g]g\hi)rP   rw  c                   > [        TTU 5      $ r|   )r~  )r   rh   rK   s    rL   ru  r    s    :4qIrP   zGReal tensor propagation found an aliasing mismatch between fake output z and real output z,  for func: rU   )r|  r  r  r*  r  r   tree_flatten_with_pathtree_flattenrt   r   r   r{  r}  r   r.   rF  r  r   tree_unflatten)rK   rh   fake_inreal_infake_outreal_outr  r  fake_paths_leaves	fake_specreal_leavesr   
_fake_path	_fake_out	_real_outfake_leaves	overridesrt  r  s   ``               @@rL   (_maybe_infer_fake_kernel_from_pytree_out7FakeTensorMode._maybe_infer_fake_kernel_from_pytree_out~  st    	C  >>#DNN$Q$QR	 	 (.'D'DX'N$,,X6	/H> "% ;>%;;6+ZY &&tZIN;"
Y 	NN/#%$$[<<Q % 	&&QQ!,! ()I8  ,##+*,=hZ H""&) 	)	:s+   5
C1 "E-1
E*;AE%
E*E%%E*c                  ^ ^^^^,^-^.^/^0^1^2^3^4^5^6^7 SSK Jn  [        R                  TT45      u  m0m,[	        T05      nU(       aI  T0 Vs/ s H   n[        U5      (       d  M  [        U5      PM"     nn[        R                  SU5        [        $ T0 V	s/ s H  n	T R                  U	5      (       d  M  U	PM     n
n	[        S U
 5       5      =(       d    [        S T0 5       5      m2T R                  m.TT R                  ;   nT[        R                  R                   R"                  R$                  L =(       a@    ['        TS   [        R(                  5      =(       a    TS   R*                  R                  S:H  nU(       a  U
(       a%  [-        T5      (       a  T2(       d  U
(       d  U(       d  [/        S U
 5       5      (       d
   T S35       eT0 Vs/ s H'  nT R                  U5      (       a  UR0                  OUPM)     nn[        R3                  UT,5      u  nnT" U0 UD6n[        U5      [(        L aJ  T R5                  U5      (       a4  [7        5          UR9                  5       nS S S 5        T.R;                  T US	S
9$ U(       aT  [=        T5      S:X  a  [=        T5      S:X  d   T ST 35       e[        TS   5      [(        L a  T.R;                  T TS   5      $ SnT R>                  (       aw  T[        R                  R                   R"                  R$                  :X  a  ST;   a  TS   S:w  a  S	nT[        R                  R@                  RB                  R$                  :X  a  S	nT RE                  TT.T0T,5      u  m0n
@@[/        S U
 5       5      n['        T[        RF                  RH                  5      (       Ga  [        RJ                  RL                  TRN                  ;  Gaj  [        RJ                  RP                  TRN                  ;  GaA  U(       Ga9  [=        U
5      S:w  Ga)  T2(       Gd!  U(       Gd  T[         RR                  R$                  La  T0 Vs/ s H'  nT R                  U5      (       a  UR0                  OUPM)     nn[        R3                  UT,5      u  nn[7        5          T" U0 UD6nS S S 5        [        RU                  W5      nU V	s/ s H  n	['        U	[(        5      (       d  M  U	PM     nn	[/        U 4S jU 5       5      nU(       a   [        RW                  [(        U.U 4S jU5      $ U H  nT.RY                  U5        M     [        R3                  T0T,5      u  mm['        T[        RF                  RZ                  5      (       aa  TU;   a[  T R\                  c  [^        R`                  OT R\                  Rb                  nT    U" 5          UT   " T0 TD6sS S S 5        sS S S 5        $ T Re                  TU
TT5            S(U 4S jjnSSK3J4m-J5m1  [m        5       m3T3m6T Rn                  (       a  [/        S U
 5       5      (       a  [        U1U U74S jT0 5       5      (       d  [p        R                  ST5        T0 Vs/ s H  nU" U5      PM     nn[        R3                  UT,5      u  m4m5[r        Rt                  " T5      nU(       d  [r        Rv                  " TUT,5      n T" T40 T5D6m6U(       d2  WR{                  5         [r        R|                  " TR~                  T0T65        OQT Rn                  (       a@  [p        R                  STU
T0T R\                  (       a  T R\                  R                  OS 5        S)UU-U1UUU3U4U5U6U 4
S jjnT2(       a.  [        5       R                  T5      nUb  U" U" T /TQ70 TD65      $ SSKCJDn  TU;  a  T R                  T5      (       d  SSKCJFn   TU ;   aK  T2(       d'  [        T5      (       a4  [/        S U
 5       5      (       a  T    U" U T   " T0 TD65      sS S S 5        $ T    TR                  " T0 TD6n!U![        La  U" U!5      sS S S 5        $  S S S 5        STR                  R                  ;   aE  [        TS5      (       a4  [        T5      (       d$  T    U" TR                  " T0 TD65      sS S S 5        $ [        R                  R                  R                  n"U"b'  TU"R                  ;   a  U"R                  " TT /TQ70 TD6$ T Rn                  (       ak  T6T3Laf  [r        Rt                  " T5      (       dK  T R\                  b>  [r        R                  " T5      (       d#  [        T TT65      n#[        S U4S! jS"9  U" U#5      $ [        R                  R                  R                  R                  TR                  5       5      R                  R                  n$U$(       a~   [        R                  R                  R                  T T5      m/[        R                  R                  R                  U/4S# j5         T    U$" T0 TD6n#U" U#5      sS S S 5        sS S S 5        $ [         H5  u  n&n'U&" T5      (       d  M  U'" T T/TQ70 TD6n(U([        Ld  M-  U" U(5      s  $     S*   S+U,U0UU2U 4S% jjjn)[        T5      (       d  U)" 5       n*U" U*5      $  [        T 5         T" T0 TD6n!S S S 5        U" T R                  W!TT0TR                  S5      S'95      $ s  snf s  sn	f s  snf ! , (       d  f       GN= fs  snf ! , (       d  f       GN= fs  sn	f ! , (       d  f       O= fS S S 5        GM  ! , (       d  f       GN= fs  snf ! [x         a"  n[p        R                  STU5         S nAGNS nAff = f! , (       d  f       GN= f! , (       d  f       GNw= f! , (       d  f       GN*= f! , (       d  f       O= fS S S 5        GM  ! , (       d  f       GN= f! [         am  n%T Rn                  (       aU  T6T3LaP  [r        Rt                  " T5      (       d5  T R\                  b(  [        T TT65      n#[        S U4S$ jS"9  U" U#5      s S n%A%$ U%eS n%A%ff = f! , (       d  f       GN= f! [         a  n+U)" U+5      s S n+A+$ S n+A+f[         a    [p        R                  S&T5        e f = f),Nr   r  z,FakeTensorMode unrecognized subclass(es): %sc              3  8   #    U  H  oR                   v   M     g 7fr|   )r8  )r   r  s     rL   r   0FakeTensorMode._dispatch_impl.<locals>.<genexpr>  s      !
3Ha))3Hr   c              3  B   #    U  H  n[        U[        5      v   M     g 7fr|   )r   r   )r   r  s     rL   r   r    s     :	1Av&&	   rL  c              3  <   #    U  H  oR                   S Lv   M     g 7fr|   r  r   r   s     rL   r   r  	  s      0E1

$&0E   z. should not have fake inputs without constantsTrC  r3   rN  Fr  r!  c              3  <   #    U  H  oR                   S Lv   M     g 7fr|   r  r   r  s     rL   r   r  ?	       Q;Pa::T1;Pr  c              3  F   >#    U  H  nTR                  U5      v   M     g 7fr|   )may_turn_const)r   r   rK   s     rL   r   r  V	  s!     P?O!t22155?Or  c                &   > TR                  TU SS9$ )NTr  )rI  )r   	converterrK   s    rL   ru  /FakeTensorMode._dispatch_impl.<locals>.<lambda>[	  s    i88qPT8UrP   c                  > [        U [        5      (       a  U R                  $ [        U [        5      (       a  TR                  c   eU R
                  R                  U R
                  R                  R                  TR                  R                  5      R                  TR                  R                  5      5      $ [        U [        5      (       a  U R                  $ U $ r|   )r   r   r  r&   r  r  rM  r[  xreplacer]  r^  r   real_obj)r   rK   s    rL   maybe_to_real_tensor;FakeTensorMode._dispatch_impl.<locals>.maybe_to_real_tensorx	  s     !Z((}}$A|,,~~111vv}}FFKK(()B)BCLL:: 
 A/00zz!rP   )compute_unbacked_bindingsfree_unbacked_symbolsc              3  <   #    U  H  oR                   S Lv   M     g 7fr|   )r  r  s     rL   r   r  	  s     M7L!MM-7Lr  c              3     >#    U  HW  n[        U[        5      =(       a;    T" U5      =m=(       a*    TR                  S L=(       a    [        U4S jT 5       5      v   MY     g 7f)Nc              3  T   >#    U  H  oTR                   R                  ;  v   M     g 7fr|   )r  r^  )r   srK   s     rL   r   :FakeTensorMode._dispatch_impl.<locals>.<genexpr>.<genexpr>	  s      VQUAT^^%G%GGQUs   %()r   r&   r  r   )r   r  r  rK   symss     rL   r   r  	  se       #A q,/ W!6q!99Wd2W VQUVVW
 #s   AA"zpropagate_real_tensors %sz9real-tensor fallback failed for %s: %s; silently ignoringz,SKIPPED propagate_real_tensors %s(%s, %s) %sc           	     h  >
^^ SS K m[        R                  ST5        SUUUU4S jjmTTLGa  [        R                  R
                  R                  (       d  TR                  TTT4T	T
4U T5        OTR                  TTT4T	T
4U T5      n [        U [        5      (       ds  [        T[        5      (       d^  [        U 5      [        T5      :w  aF  [        T[        [        R                  U 5      5      [        [        R                  T5      5      5        O[        TU T5        T" TR                  U SS9  U $ )Nr   zmaybe_propagate_real_tensors %sc                "  > [        U [        5      (       a  [        R                  S[	        U 5      [	        U5      5        Xl        [        U R                  5       UR                  5       5       H  u  p#T" X#5        M     [        U R                  5       UR                  5       5       H  u  p#T" X#5        M     T" U R                  5       UR                  5       5        g [        U [        5      (       Ga  T" U 5      (       Ga  [        U R                  R                  TR                  5      (       a@  TR                  c   eTR                  R                  U R                  R                  U5        g [        U R                  R                  =nTR                   5      (       al  [        UR"                  TR                  5      (       aF  UR$                  S:X  a5  TR                  c   eTR                  R                  U['        U5      5        g g g g g g )Nz%maybe_propagate_real_tensors %s -> %sr3   )r   r   rw  rz  rx  r  rF  ri  r  r  r&   r  r[  Symbolr  set_unbacked_var_to_valr`  lhsrhsr@  )r   real_tr  real_sr  gorK   rf  s       rL   r  OFakeTensorMode._dispatch_impl.<locals>.maybe_propagate_real_tensors.<locals>.go	  sw   a,,II?A6
 %+M%(6;;=%A	1 &B%(V]]_%E	1 &Fq'')6+@+@+BC<005J15M5M!!&&++u||<<#~~999>>qvv{{FS"#31UXX>>&quuell;;EEQJ#~~999>>q#f+N ' < ? 6N0rP   T)peek)r   r  r  r   rV   rW   )rf  rw  rz  r   r   r{  r}  r  r   r   r   r/   r)  r   r  r  )r  r  rf  r  r  r  rh   r  nil	real_argsreal_kwargsr  rK   s    @@rL   maybe_propagate_real_tensorsCFakeTensorMode._dispatch_impl.<locals>.maybe_propagate_real_tensors	  s   II7>O O0 s" ((//ZZAAv"K0    $LLv"K0   H #8V44&x88X$x.8 f11(;<f11(;< b(H5
 *$..(NOrP   )
meta_tabler   c              3  B   #    U  H  n[        U5      (       + v   M     g 7fr|   )r   r  s     rL   r   r  $
  s     P:OQa 000:Or  zprims::prim_meta_implmissing_fake_kernelc                    > S[        T 5      0$ Nrq  r{  r   s   rL   ru  r  S
  s    c$i)rP   rw  c                    > T $ r|   rT   )ctxs   rL   ru  r  a
  s    SrP   c                    > S[        T 5      0$ r  r{  r   s   rL   ru  r  r
  s     #d)-rP   c                   > [         R                  R                  R                  T5      (       a  g T(       d  TR	                  T5      (       d  [        T5      eU c  [        T5      n [        TTTTU 5      $ r|   )r   r  r  can_generate_trivial_fake_implcan_run_unsafe_fallbackrn   run_fallback_kernel)error	args_specr  rh   has_symbolic_sizesrK   s    rL   maybe_run_unsafe_fallback@FakeTensorMode._dispatch_impl.<locals>.maybe_run_unsafe_fallback
  sc     ~~##BB4HH!)E)Ed)K)K2488}4T:&tT9iOOrP   z*failed while attempting to run meta for %srY  )r   rB   rV   z1Optional[Union[T, Tensor, torch._C.ScriptObject]])r  rB   rV   rB   r|   )r  zOptional[RuntimeError]rV   rQ  )fr  r  r   r  _check_for_subclass_check_for_subclass_argr   r  rz  r0  r  r   r~  r  r   r  r  _to_copyr  r   r   r  rr  r   r   r  r  r(   clonerI  r  r  prims
device_put%validate_and_convert_non_fake_tensorsr  r=   r  nondeterministic_seededr  r  _nested_tensor_from_tensor_listr   tree_map_onlyr  r  r  r4  r5  ignore_fresh_unbacked_symbolsinvalidate_written_to_constantsr+  r  r  r  r}  rw  library_utilsr  MutationCheckerZeroDivisionErrorcheckcheck_aliasing_constraintr}  r^  get_fast_op_implsr
  r   r  cpp_meta_supports_symintr   r   	decomposer   rp  r  stride_incorrect_opr  r  r{  _custom_ops_profiledatageneric_fake_kernelhas_fake_kernel"inferred_fake_kernel_from_real_outr   r  simple_registry	singletonfind	fake_implkernelFakeImplCtxset_ctx_getterr   op_implementations_checkshas_metark  r  rJ  r  +wrap_meta_outputs_with_default_device_logic)8rK   rh   r  r  r  r  has_unrecognized_typesr   r  r   flat_arg_fake_tensorsis_lift_func!device_conversion_skip_const_propr  const_flat_args
const_argsconst_kwargsr   avoiding_device_initall_constantflat_outflat_out_tensorsr  #maybe_ignore_fresh_unbacked_symbolsr  real_flat_argsr  mutation_checkerrt  r  	fast_implr  r   r  profilesr/  maybe_fake_implr  run_impl_checkop_implop_impl_outr  fallbacknot_implemented_errorr  r  r  r  r  r  r  r  r  r  r  r  s8   `` ``                                       @@@@@@@@@@@@rL   r  FakeTensorMode._dispatch_impl  s2    	J%22D&>B	9 "5Y!?!!*"!*A.Ea.HQ  "  %%>@R "!,5 MIq9I9I!9LI M  !
3H!
 
 ;:	:: 	 ..	t}},EIINN++333 .47ELL1.Q##v- 	* !6+D11&)5 0E   GEFG  CLBKQd..q11

q8)   (.'<'<_i'X$J
3l3CCyF"t':':3'?'? !]))+C # 11$41PP v;!#D	QJ4&&8JJ6DG}& 11$Q@@  %!!		//777&8$-'+$uyy11999'+$ .2-W-W)Y	.
*) & Q;PQQtUZZ2233		11B		&&dii7)*a/&(D@@HHH CLBKQd..q11

q8)   (.'<'<_i'X$J J7,7  ))#.H+3M8az!V7L8MP?OPPL++U  (55c: (
 ,,Y	Bf tUZZ;;<<//
 >>) &&^^AA 0 :<.t4dEfE =< 	,,T3H$PVW		>	"	

 h''M7LMMM  #   II148?HIy!215yNI%+%:%:>9%U"I{&11$7J#0#@#@.)$ 
:k:  &&(77

IxX(( II>%6:nn22$H	 H	 H	V )+//5I$3Id4TT4TV4TUU 	;z!$*G*G*M*M9 **" 055P:OPPP 7+D14B6B T
 NND3F3N*7:	  +  ***.//'--3''88 
 =='';;x}}$33D$PPPP ''#!,,T22* !0066;D$Q!)! 4F;;  ..88BBGGIIK

)FF 	 nn..::4F^^--<<[I4,d=f=F7? LP4II8 (A#NGd##%dDB4B6Bn47DD	 (A -1	P)	P!	P 	P" ~~02H/99
	-d3$)&) 4 ,<<46::h+? = 
 	
K" !N> #]r   N< =<X J %  		O 	z T
 " H LP4IIII $  // +)44T::2?dHUF%-% 8??G'n 43" 	D,-BCC 	MMFM	sL  lll#.l#.l(l-.l? 	m
m'mm7
m	m7:n	n n=1#o$o!-Ap! po3	p 	p! r- &	r/r- -
l<
m
m)	%m77
n
n:n55n:=
o
o!
o03
p	=pp! 
pp! p! !
r+A rrrr
r*%r- *r- -
s)7s>s)%s)
debugprimsr  r  xlavision	torchtext
torchaudio	quantizedc                    U R                   (       d  gUR                  U R                  ;   =(       d    UR                  5       S:H  $ )NFzfbgemm::gmm)rt  	namespace+_can_run_unsafe_fallback_allowed_namespacesrp  rK   rh   s     rL   r  &FakeTensorMode.can_run_unsafe_fallback
  s:    **
 NNdNNN ,yy{m+	
rP   c                l   ^ ^^^^^ / mSUUUUUU 4S jjnT Vs/ s H
  oe" U5      PM     nnUT4$ s  snf )z
Checks if the list of tensors are fake tensors.
If not, try to convert them to fake tensors.
Returns the original args, kwargs, and a flattened list of (args, kwargs) that are fake tensors.
c                  > [        U [        5      (       d  U $ T
R                  U 5      (       Gd  [        T	S5      (       aX  [        R
                  R                  T	R                  ;   a0  [        R                  TT5      u  p[        S[        T	X5       35      e[        R                  c  T
R                  O[        R                  nU(       d_  [        U [        5      (       a  U R                   T
La  [        S5      e[        R                  TT5      u  p[        S[        T	X5       35      eTR#                  T
U 5      nOU nTR%                  U5        U$ )Nr  zECan't call metadata mutating ops on non-Fake Tensor inputs. Found in zMixing fake modes NYIzuPlease convert all Tensors to FakeTensors first or instantiate FakeTensorMode with 'allow_non_fake_inputs'. Found in )r   r   r  r  r   r  r  r  r   r  AssertionErrorr    fake_tensor_tlsrz   ru  r   r   rI  r   )r   r  r  ru  r   r  r  r  r  rh   rK   s        rL   validateFFakeTensorMode.validate_and_convert_non_fake_tensors.<locals>.validate
  s>   a(( ##A&&4((UYY-C-Ctyy-P#)#8#8I#NLD(_`klprv`  `A  B 
 'EEM ..(GG &
 -!!Z00Q[[5L,-DEE#)#8#8I#NLD(BBMdTXBaAbd 
  00q9!((-JrP   )r   rB   rV   Union[T, FakeTensor]rT   )	rK   rh   r  r  r  r,  r  validated_argsr  s	   `````   @rL   r  4FakeTensorMode.validate_and_convert_non_fake_tensors
  sA     35	 	@ 099y!(1+y9444 :s   1c                b   ^ ^^^^^^ T R                   mS mSmSUUUUUUU 4S jjn[        XQ5      $ )NFc                  >^  [        T [        5      (       d  T $ Tc  [        R                  TT5      u  mmTR	                  T 5      nU(       a9  [
        R                  " T R                  T:H  UU 4S j5        [        [        T 5      $ Tb5  T(       a  TR                  TT 5      $ TR                  TT T=(       d    T5      $ T $ )Nc                 (   > STR                    ST  3$ )Nz-FakeTensor is wrapped to wrong device, found z, expected rY  )r  r  s   rL   ru  ZFakeTensorMode.wrap_meta_outputs_with_default_device_logic.<locals>.wrap.<locals>.<lambda>  s    KAHH:U`an`oprP   )r   r   r   r  r  r   _checkr  r   rB   rI  rO  )	r  r  r  r  r  r  rh   r  rK   s	   ` rL   wrapHFakeTensorMode.wrap_meta_outputs_with_default_device_logic.<locals>.wrap  s     a(($ 224C!* **1-KHH-p Aqz!&) %55dA>>$99a!8=  rP   r  rB   rV   r.  )r~  r.   )	rK   r  rh   r  r  r6  r  r  r  s	   ` ``` @@@rL   r  :FakeTensorMode.wrap_meta_outputs_with_default_device_logic
  s5     ..	 !&	 	B   rP   r  c                  SS K nSSKJn  Uc9  U R                  nU R                  (       d   S5       eU =R                  S-  sl        UR
                  " U" US5      5      nUR                  R                  R                  S5      nU R                  c   eU R                  R                  U R                  R                  UUS9UUS9nU$ )Nr   )NestedIntNodez1should only called while FakeTensorMode is activer3   intermediate_offsets_or_lengths)valr  )symr&  r  )r  !torch.nested._internal.nested_intr;  rr  r  r   r  r  EphemeralSourcer  r@  create_symbol)rK   r  r   r;  r&  srcrets          rL   r  )FakeTensorMode.create_symbolic_nested_int&  s    
 	4C44L##X%XX#%%*%||M,:;mm""223TU~~)))nn..,, -   / 
 
rP   c                p    [         R                  R                  UR                  ;   a  gXR                  ;   $ r   )r   r  	view_copyr  _cpp_meta_supports_symintr&  s     rL   r  'FakeTensorMode.cpp_meta_supports_symintN  s*    99$))+5555rP   c                    UR                  5       [        :*  =(       aN    [        U5      (       + =(       a7    U R                  U5      (       + =(       a    UR                  R
                  S:X  + $ r  )numelCONSTANT_NUMEL_LIMITr   r  r  r   r  s     rL   r  FakeTensorMode.may_turn_constU  sS    GGI-- ,!!$$,$$Q'', HHMMV+		
rP   c                   [        S U 5       5      n[        U5      nU(       a  UR                  5       (       a  [        XUSS9u  pxUR	                  5        H  u  pU	S:w  d  UR                  U	5      (       a  U	OSn	U R                  U
5      (       d  M=  UR                  U	5      (       d  MU  U
R                  c  Md  U R                  R                  U
R                  5        M     g g g )Nc              3  <   #    U  H  oR                   S Lv   M     g 7fr|   r  r  s     rL   r   AFakeTensorMode.invalidate_written_to_constants.<locals>.<genexpr>d  r  r  Tr  inputrK   )
r   r   
is_mutabler"   r   has_argumentr  r   r~  r  )rK   rh   r  r  r  any_constantschema_infor   r  kr  s              rL   r  .FakeTensorMode.invalidate_written_to_constants]  s     Q;PQQ%d+K2244.TMA #((*w,+*B*B1*E*EAF$$Q''#..q11

...JJ1::V +	 5<rP   )rp  r  r  r  c          	         U R                   nUc  U R                  nU(       a  Ub   S5       eS nU R                  R                  U UUUUUS9$ )Nz2cannot set both static_shapes and symbolic_context)r  r  r  r  )r  rp  r~  rI  )rK   r  rp  r  r  r  r  s          rL   r  FakeTensorMode.from_tensors  sn     )-	  ..M (DCD(I))::- ; 
 	
rP   )r  r  rq  r  rt  r  ru  r  r  r   r  r~  rd  rr  rs  r}  r  rp  )rt  r   ru  r   r  rR  rp  ry   r   r   rV   rW   rU   )r   r  rV   zTypeGuard[FakeTensor])rV   r   )rV   r`   r  )rV   r   )r  zOptional[type[BaseException]]r  zOptional[BaseException]r  zOptional[TracebackType]rV   rW   )rV   rd  )
r1  r4   rh   r=   r  r  r  r  rV   r>  )rh   r=   r  r  r  r  rV   rW   )
r/  r6  r  z?Union[Mapping[str, object], Sequence[object], Iterable[object]]r1  r4   r3  r6  rV   rW   )r1  r4   r   r>  rh   r=   r  r  r  r  r  rQ  rV   rW   )r1  r4   r   r>  rh   r=   r  r  r  r  r  r   rV   rT  )r1  r4   r   r>  rh   r=   r  r  r  r  r  rQ  rV   rZ  )r1  r4   r  rT  r   r>  rh   r=   r  r  rV   rQ  )r1  r4   r  rZ  r   r>  rh   r=   r  r  rV   =Union[Optional[FakeTensor], tuple[Optional[FakeTensor], ...]])r  rY  rh   r=   r  r  r  r  r  r  rV   rW   )
rh   r=   r  r+   rd  r  re  r  rV   ztuple[Optional[object], bool])rh   r=   r  r  r  r  r  r  r  r  rV   zOptional[object])
rh   r=   r  r  r  r  r  r  rV   rQ  rh   r=   rV   r   )
rh   r=   r  r   r  r  r  r0   rV   z%tuple[list[object], list[FakeTensor]])
r  r  rh   r=   r  r  r  rU  rV   r-   )r  r#  rV   r  r  )
rh   r=   r  zSequence[FakeTensor]r  r  r  r  rV   rW   )r  r   rp  ry   r  rS  r  rT  r  r   rV   r   )KrX   rY   rZ   r[   rl  rc   rm  rn  r   r@  ro  r  rd  rr  rs  rM   r  r  rW  r  r  r1   r!   r  r  r  r  r  r  r  r  r  r  r,  r  r  r  r?  r  r  r  r  r  r  r   r%  r  r  r  r  r  r_  r  r7  r  as_strided_scatter
as_stridedas_strided_r`  detachview_as_realview_as_complexr:  source_Storage_storage_offset(_sparse_coo_tensor_with_dims_and_tensorsrG  r  
lift_freshlift_fresh_copyr  r  r  r  r\   r  r  s   @rL   r   r     s   :<E7<JL#%0%5NN5 E3N!&$&!! !##"&((
 (,&+(,(, !]D !%]D  $	]D
 &]D &]D  !]D" 
#]D ]D~DA 
 
  
 
 "$'5'7  	
 % 
 $(V(V #V #	V
 
V(   	
 	
  __ _ 	_
 %_ 
_B-- - 	-
 %- 
-^ADAD AD %	AD
 
ADF:#:# N:# 	:#
 (:# 
:#x*C*C *C 	*C
 *C %*C %*C 
*CXHH H 	H
 H %H H 
'HTFF F 	F
 F %F %F 
"FPG8G8 -G8 	G8
 G8 G8 
G8R ( 	
   
G2,M, , 	,
 , %, 
,d "$'5'7BB B 	B
 %B 
BBnn&-n5;nCIn	&n`J=J= J= 	J=
 J= J= 
J=X^
^
 ^
 	^

 %^
 
^
J 3>	3/	
/5/5 '/5 $	/5
 /5 
//5b.!.! .! $	.!
 .! 
.!b 04,	4 !,

  ""''  

!!$$		//55==!6
 4??22D4H4H4P4PQH
WW  4W 	W
 %W 
W4 )-#'6:

 &	

 !
 4
 
 

 
rP   c                x    SSK Jn  U" U5       H(  nUR                   H  nX@R                  ;  d  M      g   M*     g)Nr   )_iterate_exprsTF)r+  rf  r\  r  )r1  r  rf  r  rH  s        rL   r  r    s9     EF#nnF000 % $
 rP   c                >  ^ ^^^ [         R                  R                  UR                  ;   a  Te0 m[	        5          SU U4S jjnU Vs/ s H
  oe" U5      PM     nn[
        R                  X#5      u  pxU" U0 UD6n	S S S 5        [        5       mU HU  n
[        U
[        5      (       d  M  [        U
5      (       a  M,  TR                  U
R                  5       R                  5        MW     SU UUU4S jjn[
        R                  UW	5      $ s  snf ! , (       d  f       N= f)Nc                   > TR                  U 5      (       a^  [        R                  " X R                  S9nU R                  (       a  UR                  U R                  5       5        U T[        U5      '   U$ U $ )NrY  )r  r   
zeros_liker  r   _coalesced_r"  rx  )r  r   r   	inp_implss     rL   to_real_tensor+run_fallback_kernel.<locals>.to_real_tensor  sZ    $$Q''&&q?;;OOANN$45%&	"S'"
HrP   c                L  > [        U 5      T;  aE  [        U [        5      (       a0  [        U 5      (       d   U R	                  5       R
                  T;   a  Te[        U [        5      (       a9  [        U 5      T;   a  T[        U 5         $ TR                  R                  TU 5      $ U $ r|   )rx  r   r   r   r   _cdatar~  rI  )r  r   rk  orig_not_implemented_exceptionstoragess    rL   map_out$run_fallback_kernel.<locals>.map_out  s    a5	!q&!!!!$$  "))X500a  !u	! A'' 66GG	STUUHrP   )r  rB   rV   zUnion[T, Tensor]r8  )r   r  r  r  r(   r   r  r  r   r   r   addr   ro  r.   )r   rh   r  r  rp  rl  r  r  r  r  r  rr  rk  rq  s   `   `       @@rL   r  r    s     yy*,,I 
	 	 1::	1^A&		:,,YB$!&! 
  &)UHa   ##Q--/667    ??7A&&C ; 
s   D	D	!D	D
Dc                ,    UR                  5         X U'   g r|   )rN  rl  r   r  s      rL   r  r    s    
 #JrP   c                    X U'   g r|   rT   rv  s      rL   r  r    s    
 #JrP   c                  B    \ rS rSrSS jr  S         SS jjrSrg)	FakeCopyModei  c                    Xl         g r|   r   )rK   r   s     rL   rM   FakeCopyMode.__init__  s    "rP   Nc                   U(       a  UO0 nU[         R                  R                  R                  :X  a>  [	        US   [
        5      (       d   eU" U R                  R                  US   SS940 UD6$ U[
        R                  :X  a  [        U5      S:X  a  [        U5      S:X  d   e[        [
        US   5      n[        [        [        [        4   US   5      n[        U5      U;   a  U[        U5         $ U R                  R                  USS9nXv[        U5      '   U$ [         R                  R                  5          U" U0 UD6sS S S 5        $ ! , (       d  f       g = f)Nr   T)rp     r3   )r   r   
TensorBaser  r   r   r   r  __deepcopy__r  r   r   r@  r   rx  DisableTorchFunctionSubclass)rK   rh   r  r  r  r  memor   s           rL   __torch_function__FakeCopyMode.__torch_function__  s1    "r 588&&,,,d1gv....**47$*GKQ  V(((t9>c&kQ&666&$q'*FS*_-tAw7D&zT!BvJ''..,,V4,HC"FJ668T,V, 988s   =E
Er{  )r   r   rV   rW   )rT   N)
rh   r=   r  r  r  r  r  zOptional[Mapping[str, object]]rV   r   )rX   rY   rZ   r[   rM   r  r\   rT   rP   rL   ry  ry    sI    # "$15-- - 	-
 /- 
- -rP   ry  c                    [        U 5      S:X  a  [        U S   [        5      (       d   eU S   R                  R                  (       a  [
        R                  " S5      $ U S   R                  $ )Nr3   r   rL  )r  r   r   r   rd  r   r  r  r  s    rL   _device_handlerr    sW     t9>ja*====Aw--||F##Aw"""rP   c                &    [        S U  5       5      $ )Nc              3  8   #    U  H  n[        U5      v   M     g 7fr|   )r  r   s     rL   r   &_check_for_subclass.<locals>.<genexpr>.  s     =9a&q))9r   )r   )r  s    rL   r  r  -  s    =9===rP   c                    [        U [        5      (       + =(       aT    [        U [        5      =(       a=    [        U 5      [        L=(       a%    [        U 5      [        R
                  R                  L$ r|   )r   r   r   r   r   r.  r/  r   s    rL   r  r  1  sQ    q*%% 	.q&!	.G6!	. G588---	rP   c                d    [        S [        [        U S   5      R                  5        5       5      $ )Nc              3  8   #    U  H  n[        U5      v   M     g 7fr|   r@  r   r  s     rL   r   <lambda>.<locals>.<genexpr><  s      441A4r   r   )r)  r   r   ri  r  s    rL   ru  ru  <  s*    e 4VT!W-2244 /rP   c                d    [        S [        [        U S   5      R                  5        5       5      $ )Nc              3  8   #    U  H  n[        U5      v   M     g 7fr|   r  r  s     rL   r   r  ?  s      661A6r   r   )r)  r   r   r  r  s    rL   ru  ru  ?  s*     6VT!W-4466 1rP   c                V    [        [        [        U S   5      R                  5       5      $ r  )r@  r   r   r  r  s    rL   ru  ru  B  s     VT!W,,.9rP   )_device_not_kwarg_ops_is_tensor_constructor_like_tensor_constructorscontains_tensor_typesr  r  r  r  c                l    U [         R                  ;   a   [         R                  R                  U 5        g g r|   )r   rl  r   r  s    rL   r  r  \  s)    
n"""  % #rP   c                    [         R                  S5        [         R                  S[        R                  5        [         R                  S[        R                  5        [        R
                  n U (       ah  [         R                  S5        [        S U  5       5      n[        U R                  5       S S9 H#  u  p#[         R                  SUS	-   U S
3U5        M%     g g )NzFakeTensor cache stats:z  cache_hits: %sz  cache_misses: %sz  cache_bypasses:c              3  8   #    U  H  n[        U5      v   M     g 7fr|   )r  )r   rU  s     rL   r   #dump_cache_stats.<locals>.<genexpr>i  s     -HqCFFHr   c                    U S   * $ rG   rT   )r  s    rL   ru  "dump_cache_stats.<locals>.<lambda>j  s
    AaD5rP   r  z    %-*s %sr3   r  )	rw  infor   rm  rn  ro  maxsortedr   )rh  widthrU  r  s       rL   dump_cache_statsr  a  s    HH&'HH!:!:;HH!>#>#>?,,H$%-H--8>>+ADAHH]EAI!Aw: B rP   c           	     0  ^ SU4S jjnUR                  5       S:w  a  U" SUR                  5        35        [        UR                  5       5       Vs/ s H6  n[        R                  R
                  R                  U R                  5      PM8     nnS/UR                  5       -  n[        UR                  5       5       VVs/ s H  u  pxX4PM
     n	nnU	R                  S S9  Sn
U
nU	 HM  u  pX:w  a'  U" SUR                   S	UR                  5        S
35        XU'   XR                  U   -  n
XU   -  nMO     U    [        R                  " UUUR                  UR                  UR                  S9sS S S 5        $ s  snf s  snnf ! , (       d  f       g = f)Nc                <   > [        STR                   SU  S35      e)NzQpropagate_real_tensors: we cannot infer a Fake kernel (meta kernel) for operator z	 because z>. Please use torch.library.register_fake to add a Fake kernel.)r  r}  )ra   rq  s    rL   unsupported1_infer_fake_from_real_tensor.<locals>.unsupportedq  s1    **,((9VH EKL
 	
rP   r   z'a return has a non-zero storage offset rm  c                    U S   U S   * 4$ r  rT   r  s    rL   ru  ._infer_fake_from_real_tensor.<locals>.<lambda>  s    !qte}rP   r  r3   z(a return was not dense in memory (sizes z	 strides ))r  r3  r   )ra   r`   rV   rW   )r  r  r2  r   r  r  allocate_sizer  r  r  sortr  r7  r  r3  r   )r0  rq  r  r  r   
fake_shapefake_stridesr  r  rl  expectedfake_strides    `          rL   r~  r~  n  s{   
  A%5h6M6M6O5PQ	
 x||~&&A 	  ..t~~>&   4(,,.(L&/0A&BC&BFCx&BGCLL,L-HK=:8>>:J)T\TcTcTeSffgh (SnnS11!sO3  
""??..??
 
5 D 
s   =E<F<6F
Fc                   U R                   c   e[        R                  U5      u  p4[        S U 5       5      (       d  [	        SUR
                   35      eU Vs/ s H  n[        XU5      PM     nn[        R                  Xd5      $ s  snf )Nc              3  V   #    U  H  n[        U[        R                  5      v   M!     g 7fr|   )r   r   r   r  s     rL   r   5inferred_fake_kernel_from_real_out.<locals>.<genexpr>  s     BMqz!U\\**Ms   ')zPpropagate_real_tensors: we don't support operators that return non-Tensors. Got )r  r   r  r   r  r   r~  r  )r0  rq  r  real_flat_outspecr   fake_flat_outs          rL   r  r    s     >>%%%
 !--h7MBMBBB  "

|-
 	

 IVV11$A>MV  55 Ws   B)r   rB   rV   zdict[T, Literal[True]])rV   z2Generator[Optional[TorchDispatchMode], None, None])r   r   rV   zGenerator[None, None, None])r   r   r    list[Union[Tensor, int, SymInt]]rV   r  )r   r  rV   zTypeGuard[Tensor])r   r  rV   zOptional[FakeTensorMode])rh   r=   rV   ztorch._C._SchemaInforZ  )r   ztype[T]r   r-   rV   zlist[T])r   r  rV   r   )r  rU  rV   rW   )r   r   rV   r  )r1  r4   r  rQ  rV   r   )r   r   rh   r=   r  r  r  r-   rp  r  rV   r   )rl  rk  r   r>  r  _DispatchCacheEntryrV   rW   )r  r  rV   rU  )r  r  rV   r   )r   r  rV   r   )r   r>  rV   rW   rU   )r0  r   rq  torch._ops.OpOverloadr  torch.TensorrV   r  )r0  r   rq  r  r  r   rV   r   )
__future__r   atexitr4  r'  r  rP  r:  rx  	threadingr  r  typingr   collectionsr   r   r   r   r   r	   r
   r   r   r   typing_extensionsr   r   r   r   torch._library.utilsr  r  r  r   r   r   r   torch._C._functorchr   r   "torch._library.fake_class_registryr   torch._library.fake_profiler   torch._loggingr   torch._prims_commonr   torch._subclasses.meta_utilsr   r   r   r   r   torch._utilsr    torch.fx.immutable_collectionsr!   torch.fx.operator_schemasr"    torch.multiprocessing.reductionsr#   torch.overridesr$   torch.typesr%   r&   torch.utils._backport_slotsr'   torch.utils._mode_utilsr(   torch.utils._python_dispatchr)   r*   torch.utils._pytreer+   r,   r-   r.   r/   r0   torch.utils._statsr1   torch.utils._tracebackr2   _fake_tensor_utilsr4   r5   r6   collections.abcr7   r8   r9   r:   r;   torch._guardsr<   
torch._opsr=   r+  r>   r?   	getLoggerrX   rw  _logginggetArtifactLoggerr  r  
ValueErrorr  r`   r*  DimList_pytreer   rB   r  r  r  rK  rI   rD   r  r^   rf   rk   rn   rq   rt   localrw   r+  r   contextmanagerr   r   r   r   r   rl  r   r   r   r   r   ra  rk  rr  rt  r|  r   r  r  r<  r>  rQ  rT  rZ  r^  r  rJ  rb  rd  r   r  _StoragePointerr  r  r  r  ry  r  r  r  r  r  r  ri  r  r  r  r"  r$  r%  profiler_record_function_exit_RecordFunctionrR  torch._subclasses.fake_implsr  r  r  r  r  r  r  r  r  registerr  r~  r  rT   rP   rL   <module>r     s   "       	      # ! X X X - !  , , 3 3 T ? 8 , 5  % 9 8 ; - 1 7 / W V $ 4 R R FF#$%O!		)	)(4J	K..::8EVW 			CLzz~~   \   ,   <   <   <   L  3IOO 3  /& - - , ,>%"02 . . 	D 	D@
$e eP 
 
 @@ @ @,B B>E >EBT4 T4n
 &79LLM  
*% *%  *%Z#L 
$ $  $8	 	 
$6 6  6$ 
$
" 
"  
" 
$     8:S ST 
$9    
$   (o
& o
d7 

#7
	
='='
='  =' 	='
 %1=' ='@7	  
	7	  
	 -$  -F#0> 
IINN!!?	IINN " 
IINN!! $ 
IINN!!)) ,  (	IINN''	IINN$$	IINN%% 
II,,<< 	 	 	&
 	; 	;9

9
39
?K9
9
x6
636?B66Gc  )SV3%//;M0MN	s   (W9 9X-?!X(&X((X-