
    N j&                   4   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  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.J/r/  S SK0J1r1J2r2J3r3J4r4J5r5  S SK6J7r7  S SK8J9r9  S SK:J;r;  S SK<J=r=  S SK>J?r?  S SK@JArAJBrB  S SKCJDrD  S SKEJFrFJGrG  S SKHJIrIJJrJJKrKJLrLJMrMJNrN  S SKOJPrP  S SKQJRrR  SSKSJTrTJUrUJVrV  \(       a.  S SKWJXrXJYrYJZrZJ[r[J\r\  S SK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       rSuS7 jr\GR                  SvS8 j5       r\GR                  SwS: j5       r      SxS; jrSyS< jrSzS= jr\GR                  S{S> 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                      SwSE j5       rS|SF jr " SG SH5      r " SI SJ5      r " SK SL\$5      r\\ASMSN4   r\" SOSP9 " SQ SR5      5       rSSS jr\" SOSP9 " ST SU5      5       r " SV SW5      r\" SOSOSX9 " SY SZ5      5       r\" SOSOSX9 " S[ S\5      5       r\" SOSOSX9 " S] S^5      5       r\(       a  \\\4   r\" SOSOSX9 " S_ S`\5      5       r\" SOSOSX9 " Sa Sb5      5       r " Sc S9\G5      r\r      SSd jr            SSe jr        SSf jr        SSg jr " Sh Si\?5      rSSj jrSSk jrSSl jr\R                  GR`                  GRb                  GRd                  \\R                  R                  GRf                  GRd                  Sm \R                  R                  GRh                  GRd                  Sn \R                  R                  GRj                  GRd                  So 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 SpKJrJrJrJrJrJrJrJr  SSq jr\GR                  SSr j5       r        SSs jr        SSt jrg! \n a.  roS$\p" \o5      ;   a  \R                  " \hS%-   5      rm SroCoGN\oeSroCoff = f)    )annotationsN)defaultdict)	dataclass)AnycastLiteralOptionalTYPE_CHECKING	TypeGuardTypeVarUnion)Self)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)no_dispatch)is_traceable_wrapper_subclassTorchDispatchMode)KeyPathkeystrPyTreetree_map	tree_map_TreeSpec)count)CapturedTraceback   )_CacheKeyState_PySymInputStub_SymIntOutputStub)Callable	GeneratorIterableMappingSequence)TracebackType)Source)
OpaqueType)
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)IncrementRecursionCountf   c                    [         S-  q g Nr1   RECURSION_COUNTselfs    n/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/torch/_subclasses/fake_tensor.py__init__ IncrementRecursionCount.__init__g       1    c                    [         S-  q g rG   rH   rJ   s    rL   __del__IncrementRecursionCount.__del__k   rO   rP    NreturnNone)__name__
__module____qualname____firstlineno__rM   rR   __static_attributes__rT   rP   rL   rD   rD   f   s    rP   rD   c                       \ rS rSr% S\S'   Srg)UnsupportedFakeTensorExceptionp   strreasonrT   NrX   rY   rZ   r[   __annotations__r\   rT   rP   rL   r^   r^   p       KrP   r^   c                       \ rS rSr% S\S'   Srg)DynamicOutputShapeExceptionu   r=   funcrT   Nrb   rT   rP   rL   rf   rf   u       
rP   rf   c                       \ rS rSr% S\S'   Srg)DataDependentOutputExceptionz   r=   rh   rT   Nrb   rT   rP   rL   rk   rk   z   ri   rP   rk   c                       \ rS rSr% S\S'   Srg)UnsupportedOperatorException   r=   rh   rT   Nrb   rT   rP   rL   rn   rn      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                  4    \ rS rSr% S\S'   S\S'   S	S jrSrg)
FakeTensorTLS   zbool | Noneallow_non_fake_inputs_overridezweakref.WeakSet[FakeTensor]%non_strict_export_fake_tensor_trackerc                F    S U l         [        R                  " 5       U l        g N)ry   weakrefWeakSetrz   rJ   s    rL   rM   FakeTensorTLS.__init__   s    .2+5<__5F2rP   )ry   rz   NrU   )rX   rY   rZ   r[   rc   rM   r\   rT   rP   rL   rw   rw      s     %0/+FFGrP   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                @   SSK Jn  [        U [        5      (       a  g[	        U 5      (       am  [        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:w  a  [        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anyAssertionErrorr   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-%@=+<===+<== !CDD	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           	     B  ^ SSK Jn  [        U [        5      (       a  U R                  $ [        U 5      (       ab  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  [        S5      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   z&All fake tensor modes must be the same)r   r   r   r   r   r'   r   maybe_get_fake_moder   r   r   r   r   r   r   r   r   r   r   r   r   )	tr   inner_tensor_namesr   t_namemodesr   r   r   s	           @rL   r   r      sB   D!Z  {{$Q'' ! 4 4 6BT
BT 23BT 	 
 !H)5))) !IJJ	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   zMetaConverter[FakeTensor]r   z5dict[StorageWeakRef, list[ReferenceType[FakeTensor]]]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__3  s    +i@ )+%rP   c                D   [        U[        5      (       a  UR                  c  [        S5      e[	        UR                  R                  5       5      nX R                  ;  a  / U R                  U'   U R                  U   R                  [        R                  " U5      5        g )Nz0fake_tensor must be a FakeTensor with a constant)
r   r   constantr   r"   _typed_storager   r   r}   ref)rK   fake_tensorweak_sts      rL   add_constant_storage_mapping0FakeTensorConverter.add_constant_storage_mapping:  s     +z22k6J6J6R !STT !5!5!D!D!FG
 77757D))'2%%g.55gkk+6NOrP   c                "   [        U[        5      (       a  [        S5      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 )Nz(Expected a real tensor, not a FakeTensor)r   r   r   r"   r   r   _fix_weakrefr   )rK   tensorr   weak_tensor_reftens        rL   invalidate_constant_aliases/FakeTensorConverter.invalidate_constant_aliasesI  s    fj)) !KLL !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_memoZ  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_memo`  s2    !!++99!</0'',rP   NT)sourcesymbolic_contexttracec          	       ^^ U(       d  U(       d  U(       a  [         R                  R                  R                  5       =n(       aW  X(R                  ;   aH  UR                  U   nSSKJn	  [        Xi5      (       d  [        S[        U5       35      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  [        S5      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R0                  [         R2                  [         R4                  [         R6                  [         R8                  [         R:                  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  [C        5          URE                  5       nS S S 5        [F        RH                  " U5      (       d  [F        RJ                  " U5      (       d  [        UU5      (       a  URL                  nOU" U5      nURO                  UUURP                  US9nUR0                  [         R2                  :X  a  URS                  UUUS9Ul*        O4UR0                  [         R:                  :X  a  URW                  UUUS9Ul*        U(       a  U RY                  U5        U$ ! , (       d  f       GN
= f)Nr   )StatefulSymbolicContextz&Expected StatefulSymbolicContext, got zquantized nyi in meta tensorsz,make_constant must be False for nn.Parameterc                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   r   r   tensor_sourcer  is_quantizedr^   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_tensorj  s     9"'--">">"F"F"HHH999'6'H'H'K$ &&6PP,DTJZE[D\]  .;;F^^A&
!>>01PQQ7ehh((($%STT%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   2M
Mc                    UR                   R                  S:w  a#  [        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   r  )rK   r   r   r  rN  rO  rF  r   s           rL   from_meta_and_device(FakeTensorConverter.from_meta_and_device   sw     88==F" 6qxx}}oXN 
 ^^A&
!&}
 	Q$
rP   )r   r   r   )rV   zRweakref.WeakValueDictionary[torch._subclasses.meta_utils.MetaTensorId, FakeTensor])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   rD  r   r  Optional[ShapeEnv]r  Optional[Source]r  Optional[SymbolicContext]r  r   rV   r   )NN)r   r   r   r   r  torch.devicerN  zOptional[type[torch.Tensor]]rO  Optional[torch.DispatchKeySet]rV   r   )rX   rY   rZ   r[   propertyr   rc   rM   r   r  r  r  rJ  rP  r\   rT   rP   rL   r   r   &  s   /
/ / .-SSL,1% +P3")1 $(,S $(6:S!S S 	S
 &S !S 4S S 
Sv 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 )Nr1   r  )r   cudais_availablexpuversionhipemptyzerosrZ  s    rL   init_gpu_contextrb    s_     zz  EII$:$:$<$< }}  ( KK&)Qv.	 %=rP   c              #    #    U R                   n[        R                  R                  5       nX!:w  a  [	        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_includer   _DisableTorchDispatch_PreserveDispatchKeyGuard!_set_meta_in_tls_dispatch_include)r   prev_in_kernelmeta_in_tlss      rL   in_kernel_invocation_managerrl  #  s     
 33N((88:K$}B~.>?@@		'	'	))-	& XX//1HH66t<@1?. 2	 
*	) 2@. 21	 
*	)sN   AC0 &C C'C+C2C:	C0CC
C	C
C-)C0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_tensorsrs  ;  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)FakeTensorConfigiA  TORCH_FAKE_TENSOR_DEBUG01rT   N)	rX   rY   rZ   r[   osenvironr  debugr\   rT   rP   rL   ru  ru  A  s    JJNN4c:cAErP   ru  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)SymNumberMemoDescriptoriP  r`   _namer   _is_nested_intFis_nested_intc                   Xl         g r|   )r  )rK   r  s     rL   rM    SymNumberMemoDescriptor.__init__Z  s    +rP   c                    X l         g r|   r~  )rK   ownerrq  s      rL   __set_name__$SymNumberMemoDescriptor.__set_name__]  s    
rP   c                     SU R                    3$ )Nr   r  rK   objs     rL   _memoSymNumberMemoDescriptor._memo`  s    4::,rP   c                "    SU R                    S3$ )Nr   _vcr  r  s     rL   _memo_vc SymNumberMemoDescriptor._memo_vcc  s    4::,c""rP   c                "    SU R                    S3$ )Nr   _epochr  r  s     rL   _memo_epoch#SymNumberMemoDescriptor._memo_epochj  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__m  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  rG  s      rL   __set__SymNumberMemoDescriptor.__set__  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`   rq  r`   rV   rW   )r  r   rV   r`   r|   )r  r   r  zOptional[type[FakeTensor]]rV   -Optional[Union[torch.SymInt, torch.SymFloat]])r  r   rG  r  rV   rW   )rX   rY   rZ   r[   rc   rM   r  r  r  r  r  r  r\   rT   rP   rL   r}  r}  P  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S
\S'   \" 5       r\" 5       r	S
\S'   \" 5       r
S
\S'   \" 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   i  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.
rV  fake_devicer   r   Optional[Tensor]r   real_tensorz$SymNumberMemoDescriptor | int | Nonenonzero_memounique_memounique_consecutive_memoTr  Optional[type[Tensor]]rN  rW  rO  c                |    U R                   R                  (       a  [        R                  " S5      $ U R                  $ NrM  )r   re  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:w  a"  [        SUR                  R                   35      e[        U[        R                  5      (       a  UO[        R                  " U5      nUR                  (       d  UR                  S:X  a  [        S5      eUR                  S;   a  [        U5        UR                  S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[0        5      (       a  [        S5      eXXl        S Ul        S Ul        S Ul        S Ul        S Ul        [>        R@                  (       a  [B        RD                  " 5       Ul#        U$ )NT)dispatch_devicedevice_for_backend_keysrM  z%elem.device.type must be 'meta', got z7device.type must not be 'meta' when allow_meta is False)r[  r]  r[  hpur]  mpsmtia:z:0z$real_tensor must not be a FakeTensor)$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   r   
allow_metarb  _get_privateuse1_backend_nameindexr   is_initializedcurrent_devicer  r   r   rN  rO  r   r  r  rB  r  r  nested_int_memoru  r{  r0   extract_debug_trace)	clsr   r   r  r   r  rN  rO  rK   s	            rL   __new__FakeTensor.__new__  s    $$ $*
 66HH33D9HH==dC;;v% 78H8H7IJ  &fell;;fAU ##{{f$$M  ;;/)V$ KK668 ${{e#v{{(C(R(R(T(T{{m1WUFKK%@%O%O%Q$RS R&89!" *k:.. !GHH& '+$#!! 1 9 9 ;DrP   c                   > [         TU ]  5         [        R                  R	                  5       (       aJ  [        R
                  R                  R                  (       a   [        R                  R                  U 5        g g g r|   )superrM   r   compileris_exporting_exportconfig#detect_non_strict_fake_tensor_leaksfake_tensor_tlsrz   add)rK   argskwargs	__class__s      rL   rM   FakeTensor.__init__B  sS    NN''))$$HHAAEEdK I *rP   c                $    UR                  U 5      $ r|   )from_tensor)r   r   s     rL   r  FakeTensor.from_tensorJ  s    $$Q''rP   rT   c                :   U[         R                  R                  R                  R                  L au  [        U5      S:w  d  [        US   [        5      (       d  [        S5      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  [        S5      e[         R*                  R-                  [         R*                  R.                  R0                  5      n
U
(       a  [         R#                  SUU
5        [$        $ UR                  (       a  [        S5      eU   U" U0 UD6sS S S 5        $ s  snf ! , (       d  f       g = f)	Nr1   r   z@Expected exactly one FakeTensor argument for prim.device.defaultrM  z(FakeTensor unrecognized subclass(es): %sz,Could not find a FakeTensor in the argumentsz(FakeTensor mode already active: %s in %sz,fake_mode.in_kernel_invocation must be False)r   opsprimr  defaultlenr   r   r   r   re  r  _DISPATCH_META_HANDLERSr  
issubclassr   not_implemented_logr{  r1  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__N  s    599>>((0004yA~ZQ%D%D$V  Aw  55||F++Aw*** .11$77774=  
!Jq*$=A!6/Au 	 
 %%:<N "!	))4:6:C#z**MM	 ;
  !OPP $hh99HH**//
 %%:#
 "!)) !OPP(( YO
N Ys   H,H7H5H
Hc                  ^ ^^^^^	^
 S mSnS m	[        [        R                  R                  5      m
[        [        R                  R                  5      mSS jmS	U4S jjmS
U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   rZ  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  r3  )r   r  s    rL   cpu_zero_dim4FakeTensor._find_common_device.<locals>.cpu_zero_dim  s!    #AHH->!%%'Q,>rP   c                  > [        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 T
T;   nU(       a  U(       d  g T(       a  U(       d  U R                  mUmg T
T;   a'  [        [	        TTU R                  45      5      (       a  g [
        R                  R                  R                  nUbS  UTR                  ;   nX0R                  R                  ;   nU(       d  U(       a  U R                  mUmg U(       a  U(       d  g [        ST
 ST SU R                   35      e)Nz,Unhandled FakeTensor Device Propagation for z, found two different devices rd  )r   r   r  r   mapr   r   r  fake_tensor_prefer_device_typer   RuntimeError)r   t_is_cpu_zero_dim&is_bypass_zero_dim_cpu_tensor_check_opprefer_device_typecommon_has_preferredt_has_preferred$bypass_zero_dim_cpu_tensor_check_opsr  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 !)O 'M !"3 ''s+mQXX-FGHH "'!1!1!8!8!W!W!-'9]=O=O'O$"4"E+$%HHM&7O)/ >tfDbcpbqqstut|t|s}~ rP   Tr"  z!Could not find common device for )r  rV  rV   r   r   r   rV   r   )r   objectrV   rW   )	r   aten_foreach_copyr  	nextafterrs  r   r  r   )rh   	flat_argshas_scalar_only_inputsr  r  r  r  r  r  r  r  s   `    @@@@@@rL   _find_common_deviceFakeTensor._find_common_device  s     !& '&&

 0;NN""0
,	(	?;	 ;	z C#  +400]5J%)"!LL/M  #DTF!KLL444rP   r1   )coeffc               
   U R                   c  U R                  R                  S S9U l         [        U R                   [        R
                  5      (       d!  [        S[        U R                   5       35      eU R                   U-  $ )Nnt_tensor_idz1Expected nested_int_memo to be torch.SymInt, got )r  r   create_symbolic_nested_intr   r   r   r   r   )rK   r  s     rL   get_nested_intFakeTensor.get_nested_int  s    
 '#'>>#L#L! $M $D  $..== CDI]I]D^C_`  ##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   r1   )r3  r:  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   rO  r  r   rB  r  r  rN  r  r  r  )rV   rV  )r   rV  rV   rW   )rV   	list[str])r   r  rV   rW   )NNNN)r   r   r   r   r  rV  r   r  r  r  rN  r  rO  rW  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  rB  r  r  r  r   r   r   r   	_mode_keyrX  r  setterr  staticmethodr  rM   r  classmethodr/   r    r  r  r  r  r\   __classcell__r  s   @rL   r   r     s1    !!
 :Q9RL6R')I8O8QK5Q! A  .DAO
 #"11 ..33I$ $ ]]" "& 
 

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

 "$'5'7L)L) L) 	L)
 %L) 
L)  L)\ g5g5%5g5	"g5 g5X +,, (, 
	, 4 4rP   r   r3   r4   T)slotsc                      \ 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.dtyper4  ztuple[_MetadataIntLike, ...]shapestriderV  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   Optional[bool]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   rq  r   tuplelistr   Size_prep_args_for_hashclearr   convert_sym_intr   )rK   resultmodestatefieldrG  id_hashed_objectss          rL   _flatten_intoTensorMetadata._flatten_into<  s     !''-ED**-E%%uzz!:;; 35!((Q!'')E6**%%f4e$ .rP   rT   N)rA  list[object]rB  r   rC  r2   rV   rW   )rX   rY   rZ   r[   r!  rc   rF  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*  r4  r+  r   r   r   r,  r  untyped_storagenbytesr  r.  r1  r2  r  r   r4  r6  r7  )r   r-  r/  s      rL   extract_tensor_metadatarN  R  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)_DispatchCacheKeyix  z(
Key for the FakeTensor dispatch cache.
tuple[object, ...]r   int	hashvaluec                0    Xl         [        U5      U l        g r|   )r   hashrS  )rK   tups     rL   rM   _DispatchCacheKey.__init__  s    crP   c                b    [        U[        5      =(       a    U R                  UR                  :H  $ r|   )r   rP  r   )rK   others     rL   __eq___DispatchCacheKey.__eq__  s"    %!23MEII8MMrP   c                    U R                   $ r|   )rS  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   r3   strip_shape_env)rK   r  s     rL   r`  !_DispatchCacheKey.strip_shape_env  s+     A!_--!!# rP   )rS  r   N)rV  rQ  rV   rW   )rY  r  rV   r   )rV   rR  rU   )rX   rY   rZ   r[   r!  rc   rM   rZ  r]  r`  r\   rT   rP   rL   rP  rP  x  s)     
N#N$rP   rP  c                      \ rS rSrSrg)SingletonConstanti  rT   N)rX   rY   rZ   r[   r\   rT   rP   rL   rc  rc    s    rP   rc  )frozenr(  c                  F    \ rS rSr% SrS\S'   S\S'   S\S'   \rS\S	'   S
rg)_DispatchCacheEntryOutputInfoi  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)
r5  inplace_idxzOptional[TensorMetadata]metadataview_idxzOptional[Any]constant_valuerT   N)	rX   rY   rZ   r[   r!  rc   rc  rj  r\   rT   rP   rL   rf  rf    s%    	 &&$5NM5rP   rf  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   rn  r\   rT   rP   rL   rl  rl    s     76!OT!rP   rl  c                  $    \ rS rSr% SrS\S'   Srg)_DispatchCacheBypassEntryi  z(
Entry type for a negative cache entry.
r`   ra   rT   NrX   rY   rZ   r[   r!  rc   r\   rT   rP   rL   rp  rp         KrP   rp  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   Nrq  rT   rP   rL   rt  rt    rr  rP   rt  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.
rR  hitsmissesdict[str, int]bypassessizerT   Nrq  rT   rP   rL   rv  rv    s     IK
IrP   rv  c                  V  ^  \ 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      rA\," \2R                  Rl                  \2R                  Rl                  \2R                  R                  5      rFS\SA jrG\," \2R                  Rl                  \2R                  Rl                  5      rJS`SB jrK          SaSC jrLSSSSSD.           SbSE jjrMSFrNU =rO$ )cr   i  ,dict[_DispatchCacheKey, _DispatchCacheEntry]cacher   rR  
cache_hitscache_missesry  cache_bypassesr  Fr   re  static_shapesrS  r  zOptional[str]_stackr  rn  nt_tensor_id_counternt_tensor_id_initial_countTN)allow_fallback_kernelsallow_non_fake_inputsr  r  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),logr{  idr  rM   r  torch._dynamo.configtorch._functorch.configr   r  "fake_tensor_propagate_real_tensorspropagate_real_tensorsr   fake_tensor_converterr  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_enabledr  re  enter_stackr  	tracebackextract_stack_stack_tracer  r   r   r   r"  $torch.nested._internal.nested_tensornested	_internalnested_tensor_tensor_id_counterr  r  )rK   r  r  r  r  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|   )r  r  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_fakek  s    !Z(@Q[[D-@@rP   c                   [         R                  R                  5       (       aQ  [         R                  R                  5       (       a  [	        S5      e[         R                  R                  5       (       + $ [         R                  R                  5       =(       d5    [        [         S5      =(       a    [         R                  R                  5       (       + $ )Nz&Cannot have both xpu and cuda compiledr  )r   r]  _is_compiledr[  r   r\  hasattrr  rJ   s    rL   avoid_device_init FakeTensorMode.avoid_device_inits  s    99!!##zz&&(($%MNNyy--/// JJ##% Du%B%))*@*@*B
 	
rP   c                    U R                   c4  SR                  [        R                  " U R                  5      5      U l         U R                   $ )N )r  joinr  format_listr  rJ   s    rL   stackFakeTensorMode.stack  s7    ;;'')"7"78I8I"JKDK{{rP   rT   c                   [         R                  R                  [         R                  R                  R                  5      b  [        SU 35      e U R                  XX45      $ ! [         a    [        R                  S5        e f = f)Nz2FakeTensorMode should not be set when dispatching zfake tensor raised TypeError)
r   r   r  r   r   r   dispatch	TypeErrorr  	exception)rK   rh   r  r  r  s        rL   r  !FakeTensorMode.__torch_dispatch__  su     88&&uxx'E'E'J'JKW DTFK 	==d;; 	MM89	s   A$ $!Bc                  > SS K nS nU R                  (       aO  UR                  R                  5       nUR                  R	                  S5        UR                  R                  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_tensors_ensureCUDADeviceGuardSetr   r"  r  r   r  	__enter__r   )rK   r   prev_only_lift_cpu_tensorsmaybe_prev_fake_moder  s       rL   r  FakeTensorMode.__enter__  s    3%)"!!).)H)H)J&HH//5
 HH..0$xx<<T^^L+##+H 7$&& HH''-##UD2L$MNrP   c                   > U R                   R                  5       u  pEn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   exc_typeexc_valexc_tbliver   maybe_prev_only_lift_cpu_tensorsr  s          rL   r  FakeTensorMode.__exit__  st       " 	G%E GX7 $/++,@A/;334TU < rP   c                    gr   rT   r  s    rL   is_infra_modeFakeTensorMode.is_infra_mode  s    rP   c                    [        [        R                  [        R                  [	        [        R
                  5      [        [        R                  5      5      $ )z(
Query the state of the dispatch cache.
)rv  r   r  r  r   r  r  r~  r  s    rL   
cache_infoFakeTensorMode.cache_info  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)r  r  r  r?  r~  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  [        S5      eUR!                  5       (       a5  UR                  c  [        S5      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[        =R0                  S-  sl        U R2                  (       a)  [5        U 5         U R7                  XX#U5        SSS5        U$ U$ U R                  XX45      n 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)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 = %sr1   z1state must not be None after cache key generationz:state.shape_env must not be None when caching on shape_env)r2   r  
_cache_keyrt  r   r   _opsHigherOrderOperatorrq  hc_logr{  ra   r   r  _dispatch_implr   cache_on_shape_envfake_tensor_cache_set_cache_key_for_shape_envr~  _set_cache_keyr  rp  _output_from_cache_entryr  r  r   _crosscheck_cache_output_make_cache_entryr  )rK   rh   r  r  r  rC  r   er~  set_cache_keyentryoutputs               rL   _cached_dispatch_impl$FakeTensorMode._cached_dispatch_impl  s    	9"4>>2E//%t<C ;
 &&tDAA= !TUU##%%&$P  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$?	**5t6RE$ 	e%(##q(#] $ 	9 4!?!?@@IIK#44LGHH
 ))!((3q833	9b 54M $ 	
 4!?!?@@IIK#44LGHH
 ))!((3q83%&?&IJM	sC   'G I!I3 
IBII!
I03
L+=B#L& L+&L+c           	        [         R                  R                  R                  R	                  5       SLnU[         R
                  " 5       [         R                  R                  5       [         R                  " 5       U R                  (       a  U R                  R                  OSU/nUR                  (       a  UR                  U R                  5        / nU(       a  U R                  XcX5        U(       a  U R                  XdX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   fxexperimentalproxy_tensorget_proxy_modeget_default_dtyper   _get_default_deviceis_inference_mode_enabledr  settingsknown_symbolsr   r  r>  rP  r;  r}   finalize	functoolspartialevict_fake_tensor_cache_keyr?  )
rK   rC  rh   r  r  
is_tracing
key_valuesrE  r   id_hashed_objs
             rL   r  FakeTensorMode._cache_keyA  s    XX**77FFHPTT
 ##% 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 au  [        UU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(                  L 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tagsrt  dynamic_output_shaper	  r  r   r!   r4  r   r8  inplace_view_unsafe_viewr  lift_fnsrq  _libraryutils
is_builtinis_viewr   %_dispatch_has_kernel_for_dispatch_keyDispatchKeyr   )rK   rh   r  r  r  r   
new_kwargsr  s           rL   _validate_cache_key"FakeTensorMode._validate_cache_keyx  s    	J
 tUZZ;;<</
 99**dii7&'>??99))TYY6tzz((( 2!15	! (	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  SSKJn  [	        U[
        [        [        45      (       a7  UR                  [        U5      5        UR                  S[        U5       35        [	        U[        5      (       aA  U R                  XR                  5       X45        U R                  XR                  5       X45        gU GH  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R1                  X5        M  [	        U[2        [4        45      (       a  [!        S
5      e[	        U[
        [        [        45      (       a  U R                  XX45        GM<  [	        U[6        R8                  5      (       a  [!        S5      e[	        U[:        R<                  R>                  5      (       aH  UR                  [        U5      5        UR                  [A        U5      5        UR                  U5        GM  [	        Xv5      (       a8  UR                  [C        U5      5        UR                  URD                  5        GM  [	        Xu5      (       aR  UR                  [        U5      5        UR                  [C        U5      5        UR                  URF                  5        GM  UR                  [        U5      5        UR                  U5        GM     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   )FunctionalCallableWithEpilogue)FunctionalizeCtxWrapperlength_Nznot our fakeconstant attributez tensorznon-fake tensorzsymbolic shapezfunction argument)$*torch._higher_order_ops.auto_functionalizer  r  r  r   r<  r;  r   r   r   r  r>  keysvaluesr   r  rt  r   r   r   rN  rF  r   r   r@  r   r   r  FunctionTyper   r  GraphModuler  rU  subgraphorig_callable)	rK   rA  r  rC  rE  r  r  r  rh  s	            rL   r>  "FakeTensorMode._prep_args_for_hash  ss   	
 	JdT5$/00MM$t*%MMGCI;/0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C@@d3i(d3i(!(():):;
 d3i(c"U rP   c                   [        U[        [        S 5      45      (       a  g [        X5        [        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non-FakeTensor outputr  zsparse outputzsparse compressed outputzkwarg aliases output)r   rR  r   %_validate_symbolic_output_for_cachingr   rt  r   r   r   r  r  )rK   rC  r   rh   r  r  r  kvals           rL    _validate_output_for_cache_entry/FakeTensorMode._validate_output_for_cache_entry  s     fsDJ/00 	.e< &*--&'>?? ??&&';<< &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      (       ar  UR                  (       aa  [        U5       V	V
s/ s H  u  p[        U
[        5      (       d  M  U	PM      nn	n
[        U5      S:w  a  [        S[        U5       35      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 R3                  TXX45      n[        R6                  R9                  U5      n[        R6                  R9                  U5      nUU:w  a  [5        S5      eU$ s  sn
n	f ! U a    [5        S5      S ef = f)Nrg  rh  ri  rj  )rg  rh  ri  r1   z1Expected exactly one tensor arg for view op, got r   c              3  F   >#    U  H  nTR                  U5      v   M     g 7fr|   convert_outputr   r  rC  s     rL   r   BFakeTensorMode._get_output_info_for_cache_entry.<locals>.<genexpr>O  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*  P  s     QA 4 4Q 7 7r+  Frm  rn  )GuardOnDataDependentSymNodezdata dependent symnodezdispatch_key_set mismatch)r   rR  r   r   r   rf  ranger  r  r  r=   r  	enumerater   r   rN  r;  r+  r,  r(  r/  r0  rl  r,  r.  r  rt  r   _dispatch_key_set)rK   rC  r   rh   r  r  r  idxri  ir   idxsrh  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4yA~$GD	{S  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g LJ + 	K
 ''?@dJ	Ks   	H?(H?I Ic                f  ^ SSK Jn  SSKJm  U R	                  X4U5        [        U[        R                  R                  5      (       ae  X7;   a`  [        U[        5      (       d  Ub  [        SU S[        U5       35      eUb+  [        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%                  UUUUUU
5        M     OU R%                  UUUUUU5        [        U[        5      (       a9  U Vs/ s H  nU R'                  UUUUUU5      PM     nn[#        [        U5      SS9$ U R'                  UUUUUU5      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_symbolsNzExpected tuple output for HOP z, got c              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>  s@      $ $ q5<<">? 51!45#s   AA	zunbacked symbol in HOP z outputr%  Fr-  T)r  r  r,  r<  r  r   r   r  r  r;  r   r   r   rt  rR  r   rf  rl  r"  r9  )rK   rC  r   rh   r  r  r  r  non_cacheableoutput_infoout_elementout_elemrm  r<  s                @rL   r   FakeTensorMode._make_cache_entry|  s    	JS  V4 tUZZ;;<</fe,,1C$4TF&fO  ! # $ $$ !
 !.1Hg/VWWfsELL$t*=>>7 4$vK ,)^U  fe$$%55  & 11 fe$$ !'
 !'H 55 !'  
 ,"<0 $  ??K ,)^U 5
s    F.c                  ^^^ UR                   cD  UR                  c7  UR                  c*  UR                  [        L a  [        S5      eUR                  $ UR                   b0  XRR                      n[        U[        5      (       d  [        S5      eU$ UR                  nUc  g [        U5      (       a  [        S5      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R0                  (       a   [&        R2                  R5                  WS	5        UR6                  (       a   [&        R2                  R9                  WS	5        [        U[&        R:                  R<                  5      (       a  UR>                  (       a  U[A        [B        UR                  5         n[        U[        5      (       d  [        S
5      eURE                  5       n[%        U 5         U" 5          WRG                  XX5        S S S 5        S S S 5        [        U WURH                  5      $ ! , (       d  f       GNM= f! , (       d  f       GNW= f! , (       d  f       NQ= f! , (       d  f       NZ= f)Nz2entry.constant_value must not be SingletonConstantz inplace_arg must be a FakeTensorz)Sparse tensors are not supported in cachec                   > [        U [        5      (       a4  UR                  c  [        S5      eU R	                  TUR                  5      $ [        U [
        5      (       a  [        S5      eU $ )Nz6state.shape_env must not be None for _SymIntOutputStubz Unexpected _PySymInputStub value)r   r4   r  r   r  r3   )rG  rC  r   s     rL   check_valueGFakeTensorMode._get_output_tensor_from_cache_entry.<locals>.check_value  sb     %!233??*(P  }}S%//::e_55()KLLrP   c              3  6   >#    U  H  nT" UT5      v   M     g 7fr|   rT   r   r  rG  rC  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   rJ  s     rL   r   rK    s     Fo{1e,,orL  rM  )r4  r   r  r  Tzview_arg must be a FakeTensor)rG  r.  rC  r2   rV   zUnion[IntLikeType])%rg  rh  ri  rj  rc  r   r   r   r   r;  r+  r,  r/  r0  
contextlibnullcontextr  suppress_guardsrl  r   empty_stridedr4  r   r  r1  r   	_set_conjr2  _set_negr  r=   r  r   rR  rL  set_r  )rK   rC  r  r   rh   r  inplace_argrh  r+  r,  r/  maybe_suppressr`  view_argstoragerG  s    ` `           @rL   #_get_output_tensor_from_cache_entry2FakeTensorMode._get_output_tensor_from_cache_entry  s    %&&##'88$H  '''(001Kk:66$%GHH >>"" !LMM	#	,:		 DX^^DDFhooFF$X%<%<eD!!-..6 "" 	 >>%!^^;;N)$/1A''nn&44E 2B/ HHud+??HHeT*dEJJ1122t||Denn56Hh
33$%DEE..0G-d3^5E

7EB 6F3 $x771 2B1A//* 6F5E33sH   <L8L<L L7L&L7
L	L
L#&
L4	0L77
M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   )rn  rm  rY  r;  )rK   rC  r  r   rh   r  rA  outputss           rL   r  'FakeTensorMode._output_from_cache_entry5  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      (       a  [        U[        5      (       d  [        S[        U5       35      e[	        U 5      [	        U5      :w  a#  [        S[	        U 5       S[	        U5       35      e[        X5       H  u  p#T" X#5        M     g [        U [        5      (       a,  [        U[        5      (       a  X:w  a  [        SU  SU 35      eg U c  Ub  [        SU 35      eg [        U [        5      (       aB  [        U 5      [        U5      Ld  U R                  UR                  La  [        SU  SU 35      eg [        U [        R                  5      (       aG  [        U[        R                  5      (       d  [        S[        U5       35      e[        [        X5        g [        S[        U 5       35      e)	NzExpected tuple, got zTuple length mismatch: z != zInt mismatch: zExpected None, got zSymType mismatch: Expected Tensor, got zUnsupported type )r   r;  r   r   r  ziprR  r%   r  r   r   r   r   r  )ablr  assert_helpers       rL   re  >FakeTensorMode._crosscheck_cache_output.<locals>.assert_helper[  s   !U##!!U++(+?Qy)IJJq6SV#(+B3q6($sSTvh)WXXIDA!!' &As##!!S))QV(>!D)DEE .4=(+>qc)BCC !A|,,7$q')QVV166-A(+=aSQC)HII .BAu||,,!!U\\22(+@a	)JKK"9a3"%6tAwi#@AArP   z*FakeTensor cache crosscheck failure: func=z, args=z	, kwargs=z: Dispatch raised=N)rb  r   rc  r   rV   rW   )r  	Exceptionr  )	rK   r  rh   r  r  r  true_outputr  re  s	           @rL   r  'FakeTensorMode._crosscheck_cache_outputN  s    	B0	--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&   r  r{  r  getEffectiveLevelloggingDEBUGrI   rD   _DISPATCH_HANDLE_DIRECTLYrl  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                  > [        U [        [        45      (       a  TR                  c  [	        S5      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 )Nz3self.shape_env must not be None for symbolic valuesT)compute_hintmismatch between fake value  and real value rk  )r   r   r   r  r   r  exprfree_symbolsbacked_var_to_valr  real_tensor_prop_unbacked_vals_maybe_evaluate_staticEqStruert   rR  floatr   )fakerealrK   sympys     rL   _check_fake_real_vals?FakeTensorMode._maybe_infer_fake.<locals>._check_fake_real_vals  s9   $ 233>>)(M  		33nn66;;=>nnCCHHJK
 ==!HHTYY^^T: >   %ww||,
 4:4&@PQUPVVWX ,K 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>  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.$ r  r  r  s   rL   r  r    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.$ )Nrv  rw  r  r`   )r  rh   r  s   rL   r  r    s"    !$i$@FVW[V\"])rP   zQReal tensor propagation found an output value mismatch between fake output value z and real output value )r  r   r  r   rV   rW   )r  torch._subclasses.fake_utilsrs  r   r   r   rt   r   r  *generate_fake_kernels_from_real_mismatchesr   _infer_fake_from_real_tensorr*   r0  ra  r{  )rK   rh   pathr  r  rs  r  js_fakes_realr  r  s   `` ``     @@rL   _maybe_infer_fake FakeTensorMode._maybe_infer_fake  s    	I	 	< dELL))(;!#'"'2 (1TYY[$))+1N'O##F)&9 (PT U{1 \d.&&QQ!,! 4D$EtKK'#f$5dV <#D\N,tf> %dD1 U{u ) ##**UU%0% 8dDI4OO+##'&(9$ @!!'l4&B 	& - ''..YY)4)  <D$MtSS/&&,X-=fX F$$*4L>s-vO 	B ) +))-.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   r  r  c                 :   > [        T5      ST R                   3S.$ )Nz>Mismatched aliasing spec between fake kernel and real kernel: r  r  r  s   rL   r  IFakeTensorMode._maybe_infer_fake_kernel_from_pytree_out.<locals>.<lambda>;	  s!    !$i\]`]g]g\hi)rP   r  c                   > [        TTU 5      $ r|   )r  )r   rh   rK   s    rL   r  r  G	  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,   ra  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	overridesr  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                t  ^ ^^^^,^-^.^/^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SnT R                  (       a  T[        R                   R"                  R$                  R&                  L a  ST;   a  TS   R                  S:w  a  S	nT[        R                   R(                  R*                  R&                  L a  S	nT[        R                   R"                  R$                  R&                  L =(       a@    [-        TS   [        R.                  5      =(       a    TS   R0                  R                  S
:H  =(       d    UnU(       a  U
(       a%  [3        T5      (       a  T2(       d  U
(       d  U(       d  [5        S U
 5       5      (       d  [7        T S35      eT0 Vs/ s H'  nT R                  U5      (       a  UR8                  OUPM)     nn[        R;                  UT,5      u  nnT" U0 UD6n[        U5      [.        L aJ  T R=                  U5      (       a4  [?        5          URA                  5       nS S S 5        T.RC                  T US	S9$ U(       aY  [E        T5      S:w  d  [E        T5      S:w  a  [7        ST ST 35      e[        TS   5      [.        L a  T.RC                  T TS   5      $ T RG                  TT.T0T,5      u  m0n
@@[5        S U
 5       5      n[-        T[        RH                  RJ                  5      (       Ga  [        RL                  RN                  TRP                  ;  Ga  [        RL                  RR                  TRP                  ;  d  T["        RT                  R&                  L GaA  U(       Ga9  [E        U
5      S:w  Ga)  T2(       Gd!  U(       Gd  T["        RV                  R&                  La  T0 Vs/ s H'  nT R                  U5      (       a  UR8                  OUPM)     nn[        R;                  UT,5      u  nn[?        5          T" U0 UD6nS S S 5        [        RY                  W5      nU V	s/ s H  n	[-        U	[.        5      (       d  M  U	PM     nn	[5        U 4S jU 5       5      nU(       a   [        R[                  [.        U.U 4S jU5      $ U H  nT.R]                  U5        M     [        R;                  T0T,5      u  mm[-        T[        RH                  R^                  5      (       aa  TU;   a[  T R`                  c  [b        Rd                  OT R`                  Rf                  nT    U" 5          UT   " T0 TD6sS S S 5        sS S S 5        $ T Ri                  TU
TT5            S)U 4S jjnSSK5J6m-J7m1  [q        5       m3T3m6T Rr                  (       a  [5        S U
 5       5      (       a  [        U1U U74S jT0 5       5      (       d  [t        R                  ST5        T0 Vs/ s H  nU" U5      PM     nn[        R;                  UT,5      u  m4m5[v        Rx                  " T5      nU(       d  [v        Rz                  " TUT,5      n T" T40 T5D6m6U(       d2  WR                  5         [v        R                  " TR                  T0T65        OQT Rr                  (       a@  [t        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KEJFn  TU;  a  T R                  T5      (       d  T2(       a  TT R                  ;   d  SSKEJIn   TU ;   aK  T2(       d'  [        T5      (       a4  [5        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 Rr                  (       ak  T6T3Laf  [v        Rx                  " T5      (       dK  T R`                  b>  [v        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 ! [|         a"  n[t        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 Rr                  (       aU  T6T3LaP  [v        Rx                  " 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    [t        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|   )rJ  )r   r3  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   rb  s     rL   r   r  	  s     :	1Av&&	   Fr  r"  TrM  c              3  <   #    U  H  oR                   S Lv   M     g 7fr|   r  r   r   s     rL   r   r  	  s     M7L!zz-7L   z. should not have fake inputs without constantsrD  r1   z1Expected exactly one arg for lift func, got args=z kwargs=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  	  s!     P?O!t22155?Or+  c                &   > TR                  TU SS9$ )NTr  )rJ  )r   	converterrK   s    rL   r  /FakeTensorMode._dispatch_impl.<locals>.<lambda>	  s    i88qPT8UrP   c                  > [        U [        5      (       a  U R                  $ [        U [        5      (       a  TR                  c  [        S5      eU R                  R                  U R                  R                  R                  TR                  R                  5      R                  TR                  R                  5      5      $ [        U [        5      (       a  U R                  $ U $ )Nz2self.shape_env must not be None for symbolic types)r   r   r  r%   r  r   r  rN  rx  xreplacerz  r{  r   real_obj)r   rK   s    rL   maybe_to_real_tensor;FakeTensorMode._dispatch_impl.<locals>.maybe_to_real_tensor
  s     !Z((}}$A|,,>>)(L  vv}}FFKK(()I)IJSSEE 
 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  V   >#    U  H  nUTR                   R                  ;  v   M      g 7fr|   )r  r{  )r   srK   s     rL   r   :FakeTensorMode._dispatch_impl.<locals>.<genexpr>.<genexpr>@
  s'      !%A !N!NN!%s   &))r   r%   r  r   )r   rb  r  rK   symss     rL   r   r  ;
  sg       #A q,/ !6q!99d2  !%  #s   AA"zpropagate_real_tensors %sz9real-tensor fallback failed for %s: %s; silently ignoringz,SKIPPED propagate_real_tensors %s(%s, %s) %sc           	     f  >
^^ 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      (       dr  [        T[        5      (       d]  [        U 5      [        T5      L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                F  > [        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      (       aI  TR                  c  [        S5      eTR                  R!                  U R                  R                  U5        g [        U R                  R                  =nTR"                  5      (       au  [        UR$                  TR                  5      (       aO  UR&                  S:X  a>  TR                  c  [        S5      eTR                  R!                  U[)        U5      5        g g g g g g )Nz%maybe_propagate_real_tensors %s -> %sz3self.shape_env must not be None for symbolic Symbolr1   z/self.shape_env must not be None for symbolic Eq)r   r   r  r{  r  r  ra  r{  r,  r/  r%   r  rx  Symbolr  r   "set_real_tensor_prop_unbacked_valsr}  lhsrhsrR  )r   real_tr  real_sr  gorK   r  s       rL   r  OFakeTensorMode._dispatch_impl.<locals>.maybe_propagate_real_tensors.<locals>.gox
  s   a,,II?A6
 %+M%(6;;=%A	1 &B%(V]]_%E	1 &Fq'')6+@+@+BC<005J15M5M!!&&++u||<<>>1"0 U#  IIFFKK ##31UXX>>&quuell;;EEQJ>>1"0 Q#  IIs6{ ' < ? 6N0rP   T)peek)r   r  r  r   rV   rW   )r  r  r{  r   r   r  r  r  r   r   r   r-   r;  r   r  r  )r  r  r  r  r  r  rh   r  nil	real_argsreal_kwargsr  rK   s    @@rL   maybe_propagate_real_tensorsCFakeTensorMode._dispatch_impl.<locals>.maybe_propagate_real_tensorss
  s   II7>! !F s"''..YYAAv"K0    $LLv"K0   H #8V44&x88Xd8n< 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$ Nr  r  r   s   rL   r  r    s    c$i)rP   r  c                    > T $ r|   rT   )ctxs   rL   r  r    s    SrP   c                    > S[        T 5      0$ r  r  r   s   rL   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 %srZ  )r   rB   rV   z1Optional[Union[T, Tensor, torch._C.ScriptObject]])r  rB   rV   rB   r|   )r  zOptional[RuntimeError]rV   rR  )ir  r  r   r  _check_for_subclass_check_for_subclass_argr   r  r{  r1  r  r   r  r  r  r   r  r	  _to_copyr  prims
device_putr   r   r  rs  r   r   r   r  r  r&   clonerJ  r  %validate_and_convert_non_fake_tensorsr  r=   r  nondeterministic_seededr  r  detach__nested_tensor_from_tensor_listr   tree_map_onlyr  r  r  rN  rO  ignore_fresh_unbacked_symbolsinvalidate_written_to_constantsr,  r  r  r  r  r  library_utilsr  MutationCheckerZeroDivisionErrorcheckcheck_aliasing_constraintr~  r{  get_fast_op_implsr  r   r  cpp_meta_supports_symint#_unbacked_special_fake_handling_opsr   r   	decomposer   rq  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_metarl  r  rg  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avoiding_device_init!device_conversion_skip_const_proprb  const_flat_args
const_argsconst_kwargsr   all_constantflat_outflat_out_tensorsr  #maybe_ignore_fresh_unbacked_symbolsr  real_flat_argsr  mutation_checkerr  r  	fast_implr  r   r  profilesrA  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`	  sp    	J%22D&>B	9 "5Y!?!!*"!*A.Ea.HQ  "  %%>@R "!,5 MIq9I9I!9LI M  !
3H!
 
 ;:	:: 	 ..	t}},  %!!		//777&8$))U2'+$uyy11999'+$ EIINN++333 .47ELL1.Q##v--" "	 	* !6+D11&)5M7LMMM$fJK  CLBKQd..q11

q8)   (.'<'<_i'X$J
3l3CCyF"t':':3'?'? !]))+C # 11$41PP 6{a3t9>$GvXV\U]^  DG}& 11$Q@@ .2-W-W)Y	.
*) & Q;PQQtUZZ2233		11B 		&&dii744<<CWCW;W)*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>%>> ==Q	 Q	 Q	h )+//5I$3Id4TT4TV4TUU 	- 
"11$77"tt/W/W'W : **" 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+? = 
 	
U" !Nb #]j   N< =<d J %  		O 	\ 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  m,m,m1.m1*.m6-m;.n	nn$n$9on)	o1oo "p?#p2p/;Aq/ qq%	q.	q/ )s; 4	s)=s; ;
n

n!)
n7	3o
o
p&pp
p
p,/
p>
q	qq/ 
q,'q/ ,q/ /
s&9A s!s&s!!s&)
s83s; 8s; ;
t7tt7%t7
debugprimsr  r	  xlavision	torchtext
torchaudio	quantizedc                    U R                   (       d  gUR                  U R                  ;   =(       d    UR                  5       S:H  $ )NFzfbgemm::gmm)r  	namespace+_can_run_unsafe_fallback_allowed_namespacesrq  rK   rh   s     rL   r  &FakeTensorMode.can_run_unsafe_fallbacku  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  r   r   r  ry   r  r   r   rJ  r   )r   r  r  r  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  rI  rb  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 rZ  )r  r  s   rL   r  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   rJ  rP  )	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   rK  )r  r,   )	rK   r  rh   r  r  rS  r  r  r  s	   ` ``` @@@rL   r$  :FakeTensorMode.wrap_meta_outputs_with_default_device_logic  s5     ..	 !& 	  	D   rP   r  c                  SS K nSSKJn  Uc=  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  [        S5      eU R                  R                  U R                  R                  UUS9UUS9nU$ )	Nr   )NestedIntNodez4should only be called while FakeTensorMode is activer1   intermediate_offsets_or_lengthszself.shape_env must not be None)valr  )symr'  r  )r  !torch.nested._internal.nested_intrX  r  r  r   r   r  r  EphemeralSourcer  rA  create_symbol)rK   r  r   rX  r'  srcrets          rL   r  )FakeTensorMode.create_symbolic_nested_int  s    
 	4C44L##$J  %%*%||M,:;mm""223TU>>! !BCCnn..,, -   / 
 
rP   c                p    [         R                  R                  UR                  ;   a  gXR                  ;   $ r   )r   r  	view_copyr  _cpp_meta_supports_symintrE  s     rL   r  'FakeTensorMode.cpp_meta_supports_symint  s*    99$))+5555rP   c                    UR                  5       [        :*  =(       aM    [        U5      (       + =(       a6    U R                  U5      (       + =(       a    UR                  R
                  S:g  $ r  )numelCONSTANT_NUMEL_LIMITr   r  r  r   r  s     rL   r  FakeTensorMode.may_turn_const  sS    GGI-- (!!$$($$Q''( '		
rP   c                   [        S U 5       5      n[        U5      nU(       a  UR                  5       (       a  [        UU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>*  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.-1	MA #((*w,+*B*B1*E*EAF$$Q''#..q11

...JJ1::V + 5<rP   )r  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  r  r   r  rJ  )rK   r  r  r  r  r  r  s          rL   r  FakeTensorMode.from_tensor<  sn     )-	  ..M+$H  I))::- ; 
 	
rP   )r  r"  r  r  r  r  r  r  r  r   r  r  re  r  r  r  r  r  )r  r   r  r   r  rS  r  r3  r   r   rV   rW   rU   )r   r  rV   zTypeGuard[FakeTensor])rV   r   )rV   r`   r  )rV   r   )r  ztype[BaseException] | Noner  zBaseException | Noner  zTracebackType | NonerV   rW   )rV   rv  )
rC  r2   rh   r=   r  r  r  r  rV   rP  )rh   r=   r  r  r  r  rV   rW   )
rA  rH  r  z?Union[Mapping[str, object], Sequence[object], Iterable[object]]rC  r2   rE  rH  rV   rW   )rC  r2   r   rP  rh   r=   r  r  r  r  r  rR  rV   rW   )rC  r2   r   rP  rh   r=   r  r  r  r  r  r   rV   rf  )rC  r2   r   rP  rh   r=   r  r  r  r  r  rR  rV   rl  )rC  r2   r  rf  r   rP  rh   r=   r  r  rV   rR  )rC  r2   r  rl  r   rP  rh   r=   r  r  rV   =Union[Optional[FakeTensor], tuple[Optional[FakeTensor], ...]])r  rv  rh   r=   r  r  r  r  r  r  rV   rW   )
rh   r=   r  r)   r  r  r  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   rR  rh   r=   rV   r   )
rh   r=   r  r   r  r  r  r.   rV   z%tuple[list[object], list[FakeTensor]])
r  r  rh   r=   r  r  r  rV  rV   r+   )r  r5  rV   r   r  )
rh   r=   r&  zSequence[FakeTensor]r  r  r  r  rV   rW   )r  r   r  r3  r  rT  r  rU  r  r   rV   r   )PrX   rY   rZ   r[   r~  rc   r  r  r   rR  r  r  re  r  r  rM   r  r  rX  r  r  r/   r    r  r  r  r%  r  r  r  r  r  r  r>  r"  r9  r  rY  r  r  r  r  r  r  r   rD  r  r  r$  r  r	  r`  r-  rQ  r  as_strided_scatter
as_stridedas_strided_ra  detachview_as_realview_as_complexrT  source_Storage_storage_offset(_sparse_coo_tensor_with_dims_and_tensorsrd  viewr  slicer   r  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  	
 % 
 &6V,V &V %	V
 
V$   	
 	
  ^^ ^ 	^
 %^ 
^@55 5 	5
 %5 
5nDDDD DD %	DD
 
DDLE#E# NE# 	E#
 (E# 
E#N(C(C (C 	(C
 (C %(C %(C 
(CTKK K 	K
 K %K K 
'KZbb b 	b
 b %b %b 
"bHS8S8 -S8 	S8
 S8 S8 
S8j ( 	
   
G22M2 2 	2
 2 %2 
2p "$'5'7BB B 	B
 %B 
BBoo&-o5;oCIo	&obJ=J= J= 	J=
 J= J= 
J=XC
C
 C
 	C

 %C
 
C
T 3>	3/	
/5/5 '/5 $	/5
 /5 
//5b/!/! /! $	/!
 /! 
/!d 04,	< !,

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

!!$$		//55==! +6		!!

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

 !
 4
 
 

 
rP   c                4   SSK JnJn  [        R                  R
                  R                  R                  5       SLnU(       a  U" U5       H  n[        S5      e   gU" U5       H0  nUR                   H  nXpR                  ;  d  M  [        S5      e   M2     g)a  
Validate symbolic content in output and raise _BypassDispatchCache if
caching should be bypassed.

Args:
    state: Cache key state containing known symbols
    output: Output to validate
    proxy_mode_active: Whether PROXY dispatch mode is currently active

Raises: _BypassDispatchCache: If output contains symbolic content that
    prevents caching

Details:

If our output contains any symbols that didn't appear in the input then we
need to bypass. Usually this will be unbacked symbols which can't be
properly reconstructed but there could be "weird" cases where backed symbols
spontaneously appear (from non-input state)?

If we're proxy (symbol) tracing and the output contains ANY symbols then we
need to bypass. The problem is that ProxyTorchDispatchMode relies on SymNode
object identity and being able to see the construction of SymNodes.

We could improve the proxy tracing case in a few ways:

1. If the output SymNodes are directly copied from inputs then this is
   actually fine - they're already tracked. This would probably be the
   biggest bang/buck.

2. If the output (tensors) are all direct copies of the inputs then this is
   also fine - since they're inputs they must be tracked. We already compute
   this we just don't plumb it around enough.

3. If the output SymNodes are already tracked by the proxy then this is also
   actually fine - they're properly tracked. This probably wouldn't be
   common since for most outputs we use torch.empty_strided() and recompute
   strides.

4. We could use the proxy to track "how" the SymNodes were computed and when
   using the cache we could "replay" them properly to teach the proxy how to
   build them.
r   )_iterate_exprs_iterate_nodesNzProxy mode with SymNode outputzunrepresented symbol in output)r,  r  r  r   r  r  r  r  rt  ry  r  )rC  r  r  r  r  r   r  rI  s           rL   r   r   [  s    Z U&&33BBDDPJ  'A&'GHH (  'A..!4!44./OPP ) (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 $ )NrZ  )r  r   
zeros_liker  r   _coalesced_r4  r  )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|   )r  r   r   r   r   _cdatar  rJ  )r  r   r  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]rU  )r   r  r  r  r&   r   r  r  r   r   r   r  r   r  r,   )r   rh   r  r  r  r  rb  r  r  r  r  r  r  r  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|   )r`  r~  r   r  s      rL   r  r    s    
 #JrP   c                    X U'   g r|   rT   r  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                0   U(       a  UO0 nU[         R                  R                  R                  L aV  [	        US   [
        5      (       d  [        S[        US   5       35      eU" U R                  R                  US   SS940 UD6$ U[
        R                  L a  [        U5      S:w  d  [        U5      S:w  a$  [        S[        U5       S[        U5       S35      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   r`  T)r     z3Expected 2 args and 0 kwargs for __deepcopy__, got z
 args and z kwargsr1   )r   r   
TensorBaser  r   r   r   r   r   r  __deepcopy__r  r   r   rR  r   r  DisableTorchFunctionSubclass)rK   rh   r  r  r  r  memor   s           rL   __torch_function__FakeCopyMode.__torch_function__  so    "r 588&&,,,d1gv..$'<T$q']O%LMM**47$*GKQ  V(((4yA~V!1$I#d)T^_bci_j^kkrs  &$q'*FS*_-tAw7D&zT!BvJ''..,,V4,HC"FJ668T,V, 988s   5F
F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   r  r    sI    # "$15 - -  - 	 -
 / - 
 -  -rP   r  c                    [        U 5      S:w  d  [        U S   [        5      (       d  [        S5      eU S   R                  R
                  (       a  [        R                  " S5      $ U S   R                  $ )Nr1   r   z<Expected exactly one FakeTensor argument for _device_handlerrM  )	r  r   r   r   r   re  r   r  r  r  s    rL   _device_handlerr    sc     4yA~ZQ<<J
 	
 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>0  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/  r0  r   s    rL   r   r   3  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|   rR  r   r  s     rL   r   <lambda>.<locals>.<genexpr>>  s      441A4r   r   )r;  r   r   r{  r  s    rL   r  r  >  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  A  s      661A6r   r   )r;  r   r   r,  r  s    rL   r  r  A  s*     6VT!W-4466 1rP   c                V    [        [        [        U S   5      R                  5       5      $ r  )rR  r   r   r/  r  s    rL   r  r  D  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   r~  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   rr  s     rL   r   #dump_cache_stats.<locals>.<genexpr>k  s     -HqCFFHr   c                    U S   * $ rG   rT   )r3  s    rL   r  "dump_cache_stats.<locals>.<lambda>l  s
    AaD5rP   r  z    %-*s %sr1   r  )	r  infor   r  r  r  maxsortedr   )rz  widthrr  r  s       rL   dump_cache_statsr  c  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   r  s    rL   unsupported1_infer_fake_from_real_tensor.<locals>.unsupporteds  s1    **,((9VH EKL
 	
rP   r   z'a return has a non-zero storage offset rn  c                    U S   U S   * 4$ r  rT   r  s    rL   r  ._infer_fake_from_real_tensor.<locals>.<lambda>  s    !qte}rP   r  r1   z(a return was not dense in memory (sizes z	 strides ))r  r4  r   )ra   r`   rV   rW   )r/  r/  r3  r   r	  r  allocate_sizer  r0  r,  sortr+  rQ  r  r4  r   )rB  r  r  r  r   
fake_shapefake_stridesr2  r  r  expectedfake_strides    `          rL   r  r  p  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  [        S5      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 )Nzmode.shape_env must not be Nonec              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  r  )rB  r  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   z/Generator[TorchDispatchMode | None, None, None])r   r   rV   zGenerator[None, None, None])r   r   r   (list[Tensor | int | SymInt | OpaqueType]rV   r  )r   r  rV   zTypeGuard[Tensor])r   r  rV   zOptional[FakeTensorMode])rh   r=   rV   ztorch._C._SchemaInforw  )r   ztype[T]r   r+   rV   zlist[T])r   r  rV   r   )r  rV  rV   rW   )r   r   rV   r*  )rC  r2   r  r   rV   rW   )r   r   rh   r=   r  r  r  r+   r  r  rV   r   )r~  r}  r   rP  r  _DispatchCacheEntryrV   rW   )r  r  rV   rV  )r  r  rV   r   )r   r  rV   r   )r   rP  rV   rW   rU   )rB  r   r  torch._ops.OpOverloadr  torch.TensorrV   r  )rB  r   r  r  r  r   rV   r   )
__future__r   atexitrN  r9  r  rm  r;  ry  	threadingr  r  typingr}   collectionsr   r   r   r   r   r	   r
   r   r   r   typing_extensionsr   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._mode_utilsr&   torch.utils._python_dispatchr'   r(   torch.utils._pytreer)   r*   r+   r,   r-   r.   torch.utils._statsr/   torch.utils._tracebackr0   _fake_tensor_utilsr2   r3   r4   collections.abcr5   r6   r7   r8   r9   r:   torch._guardsr;   torch._library.opaque_objectr<   
torch._opsr=   r,  r>   r?   	getLoggerrX   r  _logginggetArtifactLoggerr  r  
ValueErrorr  r`   r<  DimList_pytreer   rB   r  r  r	  rh  rI   rD   r  r^   rf   rk   rn   rq   rt   localrw   r  r   contextmanagerr   r   r   r   r   r~  r   r   r   r   r   rb  rl  rs  ru  r}  r   r.  r*  rN  rP  rc  rf  rl  rp  r  rg  rt  rv  r   r  _StoragePointerr   r  r  r  r  r  r  r   r  r  r  r{  r,  r/  r  r4  r6  r7  profiler_record_function_exit_RecordFunctionro  torch._subclasses.fake_implsr  r  r  r  r  r#  r"  r  r  registerr  r  r  rT   rP   rL   <module>r     s   "       	      # !	 	 	 # !  , , 3 3 T ? 8 , 5  % 9 8 ; - 1 / W V $ 4 R R PP#$7%O!		)	)(4J	K..::8EVW 			CLzz~~   \   ,   <   <   <   L  GIOO G  /& - - , ,F-"24 . . 	D 	D@
$o od 
 
 @@ @ @.B B>E >EBM4 M4` &79LLM  *% *% *%Z#L $ $ $8	 	 $d#6 6 $6$ $d#
" 
" $
" $d#  $  8:S ST $d#9  $ $d#  $(p
& p
f; :Q:Q#-:Q	:Q|>'>'
>'  >' 	>'
 %1>' >'B7	  
	7	  
	$-$ $-N#6> 
IINN!!?	IINN " 
IINN!! $ 
IINN!!)) ,  (	IINN''	IINN$$	IINN%% 
II,,<< 	 	 	&
 	; 	;9

9
39
?K9
9
x6
636?B66{j  )SV3%//;M0MN	s   (W# #X)!XXX