
    %Vji                   $   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlZd dlmc m Z! d dlm"Z"m#Z#m$Z$m%Z% d d	l&m'Z'm(Z( d d
l)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZBmCZC d dlDmEZE d dlFmGZG d dlHmIZImJZJ d dlKmLZLmMZMmNZNmOZOmPZPmQZQ d dlRmSZS d dlTmUZU ddlVmWZWmXZXmYZY er&d dlZm[Z[m\Z\m]Z]m^Z^ d dlm_Z_ d dl`maZa d d lbmcZc d d!ldmeZemfZf  ejg        eh          Ziejj        k                    ehd"          Zl	 ejj        k                    ehd#          Zmn5# en$ r-Zod$ epeo          v r ejg        ehd%z             ZmneoY dZo[ondZo[oww xY weqZrej         js        Zt ed&          Zuejv        jw        jx        ZxdZyd az G d' d(          Z{e G d) d*e|                      Z}e G d+ d,e|                      Z~e G d- d.e|                      Ze G d/ d0e|                      Ze G d1 d2e|                      Ze G d3 d4e|                      Z G d5 d6e	j                  Z e            Zdd:Zej        dd<            Zej        dd@            ZddEZddIZddLZej        ddP            Zej        ddR            ZddXZddYZ G dZ d[          Zej        dd_            Zej        dd`            ZddaZ G db dc          Z G dd de          Z G df dge%          ZeeBdhdif         ZeEe G dj dk                                  ZddlZeEe G dm dn                                  Z G do dp          ZeE edqr           G ds dt                                  ZeE edqr           G du dv                                  ZeE edqr           G dw dx                                  Zer
eeef         ZeE edqr           G dy dze                                  ZeE edqr           G d{ d|                                  Z G d} d>eJ          ZeZddZddZddZddZ G d de@          ZddZddZddZejw        j        j        j        eejw        jx        j        j        d ejw        jx        j        j        d ejw        jx        j        j        d iZ eejw        jx        j        j        ejw        jx        j        j        ejw        jx        j        j        ejw        j        j        j                  Zd dlmZmZmZmZmZmZmZmZ ddZej        dd            ZddZddZdS )    )annotationsN)defaultdict)	dataclass)AnyCallablecastLiteralOptionalTYPE_CHECKINGTypeVarUnion)Self	TypeGuard)ReferenceType)SymBoolSymFloatSymIntTensor)is_functorch_wrapped_tensoris_legacy_batchedtensor)FakeScriptObject)MissingOpProfile)dtrace_structured)suggest_memory_format)	assert_eqassert_metadata_eqis_sparse_anyis_sparse_compressedMetaConverter)render_call)immutable_dict)normalize_function)StorageWeakRef)TorchFunctionMode)IntLikeTypepy_sym_types)dataclass_slots)no_dispatch)is_traceable_wrapper_subclassTorchDispatchMode)KeyPathkeystrPyTreetree_map	tree_map_TreeSpec)count)CapturedTraceback   )_CacheKeyState_PySymInputStub_SymIntOutputStub)	GeneratorIterableMappingSequence)TracebackType)Source)
OpOverload)ShapeEnvSymbolicContexthierarchical_compilenot_implementedz 'not_implemented' not registeredz.not_implementedTc                      e Zd ZddZddZdS )IncrementRecursionCountreturnNonec                    t           dz  a d S Nr3   RECURSION_COUNTselfs    W/root/voice-cloning/.venv/lib/python3.11/site-packages/torch/_subclasses/fake_tensor.py__init__z IncrementRecursionCount.__init___       1    c                    t           dz  a d S rH   rI   rK   s    rM   __del__zIncrementRecursionCount.__del__c   rO   rP   NrE   rF   )__name__
__module____qualname__rN   rR    rP   rM   rD   rD   ^   s<                rP   rD   c                      e Zd ZU ded<   dS )UnsupportedFakeTensorExceptionstrreasonNrT   rU   rV   __annotations__rW   rP   rM   rY   rY   h            KKKKKrP   rY   c                      e Zd ZU ded<   dS )DynamicOutputShapeExceptionr=   funcNr\   rW   rP   rM   r`   r`   m            rP   r`   c                      e Zd ZU ded<   dS )DataDependentOutputExceptionr=   ra   Nr\   rW   rP   rM   rd   rd   r   rb   rP   rd   c                      e Zd ZU ded<   dS )UnsupportedOperatorExceptionr=   ra   Nr\   rW   rP   rM   rf   rf   w   rb   rP   rf   c                      e Zd ZU ded<   dS )$UnsupportedMutationAliasingExceptionrZ   r[   Nr\   rW   rP   rM   rh   rh   |   r^   rP   rh   c                      e Zd ZU ded<   dS )MetadataMismatchErrorrZ   r[   Nr\   rW   rP   rM   rj   rj      r^   rP   rj   c                  "    e Zd ZU ded<   ddZdS )FakeTensorTLSOptional[bool]allow_non_fake_inputs_overriderE   rF   c                    d | _         d S N)rn   rK   s    rM   rN   zFakeTensorTLS.__init__   s    .2+++rP   NrS   )rT   rU   rV   r]   rN   rW   rP   rM   rl   rl      s8          32223 3 3 3 3 3rP   rl   itemsrE   dict[T, Literal[True]]c                 8    t                               | d          S NT)dictfromkeys)rq   s    rM   ordered_setrw      s    ==%%%rP   2Generator[Optional[TorchDispatchMode], None, None]c               #    K   t           j                            t           j        j        j                  } 	 | V  | !t           j                            |            d S d S # |  t           j                            |            w w xY wrp   )torch_C_unset_dispatch_mode_TorchDispatchModeKeyFAKE_set_dispatch_mode)olds    rM   unset_fake_temporarilyr      s      
(
'
'(F(K
L
LC-			?H'',,,,, ?3?H'',,,, s   A   $B	fake_modeFakeTensorModeGenerator[None, None, None]c              #  V   K   | j         }	 d| _         d V  || _         d S # || _         w xY w)NF)cache_enabled)r   	old_values     rM   disable_fake_tensor_cacher      sF      -I,"'	"+	)	++++s    	(subclassr   out list[Union[Tensor, int, SymInt]]c                  | g}|r|                                 t                    s|                               ;                                \  }}|                    fdt          |          D                        ||S )Nc              3  8   K   | ]}t          |          V  d S rp   getattr).0keycurrs     rM   	<genexpr>z$get_plain_tensors.<locals>.<genexpr>   s-      GG3GD#&&GGGGGGrP   )popr)   append__tensor_flatten__extendreversed)r   r   todo
inner_keys_r   s        @rM   get_plain_tensorsr      s     :D
 Hxxzz,T22 	JJt//11
AGGGG(:2F2FGGGGGG  H JrP   xobjectTypeGuard[Tensor]c                :    ddl m} t           t                    rdS t	                     rwt                                                    \  }} fd|D             }t          d |D                       }t          d |D                       }||k    s
J d            |S t           |          rt           j
                  S t           t                    rft          j                   rRt          j                                        }t          j        j                             |          }t          |          S t           t                    rBt%                     r3t          j        j                                       }t          |          S dS )	Nr   FunctionalTensorTc                0    g | ]}t          |          S rW   r   )r   attrr   s     rM   
<listcomp>zis_fake.<locals>.<listcomp>   s#    @@@$WQ--@@@rP   c              3  4   K   | ]}t          |          V  d S rp   is_faker   r   s     rM   r   zis_fake.<locals>.<genexpr>   (      ==awqzz======rP   c              3  4   K   | ]}t          |          V  d S rp   r   r   s     rM   r   zis_fake.<locals>.<genexpr>   r   rP   z got mixed fake and real tensors!F)#torch._subclasses.functional_tensorr   
isinstance
FakeTensorr)   typer   allanyr   elemr   rz   _is_functional_tensorr{   $_functionalization_reapply_views_tls
_functorch_unwrap_functional_tensorr   get_unwrapped)	r   r   attrsr   flattened_tensorsall_fakeany_fakereapply_views	unwrappeds	   `        rM   r   r      s   DDDDDD!Z   t$Q'' "77--a00q@@@@%@@@==+<=======+<=====8###%G###	A'	(	( "qv	Av		 "5#>q#A#A "EEGGH'AA!]SS	y!!!	Av		 "#>q#A#A "H'55a88	y!!!5rP   tOptional[FakeTensorMode]c                    ddl m} t           t                    r j        S t                     rL                                 \  }} fd|D             }|d         t          fd|D                       sJ S t           |          rt           j	                  S t           t                    rft          j                   rRt          j                                        }t          j        j                             |          }t          |          S t           t                    rBt#                     r3t          j        j                                       }t          |          S d S )Nr   r   c                J    g | ]}t          t          |                     S rW   )maybe_get_fake_moder   )r   t_namer   s     rM   r   z'maybe_get_fake_mode.<locals>.<listcomp>   s9     
 
 
8>6 2 233
 
 
rP   c              3      K   | ]}|u V  	d S rp   rW   )r   r   ms     rM   r   z&maybe_get_fake_mode.<locals>.<genexpr>   s'      ))a16))))))rP   )r   r   r   r   r   r)   r   r   r   r   r   rz   r   r{   r   r   r   r   r   )r   r   inner_tensor_namesr   modesr   r   r   s   `      @rM   r   r      s   DDDDDD!Z   {$Q'' . ! 4 4 6 6A
 
 
 
BT
 
 
 !H))))5))))))))	A'	(	( ."16***	Av		 .5#>q#A#A .EEGGH'AA!]SS	"9---	Av		 .#>q#A#A .H'55a88	"9---4rP   ra   r=   torch._C._SchemaInfoc                J    t           j                            | j                  S rp   )rz   r{   _SchemaInfo_schemara   s    rM   get_schema_infor      s    8---rP   boolc                    ddl m} t          j        j        }||          j                            d          o||          j        t          |          v S )Nr   decomposition_tableztorch._decomp)	torch._decompr   rz   _decompdecompositionsrU   
startswithrT   dir)ra   r   r   s      rM   torch_decomp_decompositionsr      sb    111111]1N t$/::  D
d
#
,N0C0C
CDrP   tytype[T]treer-   list[T]c                T     t                               |          } fd|D             S )Nc                4    g | ]}t          |          |S rW   )r   )r   r   r   s     rM   r   z%tree_flatten_only.<locals>.<listcomp>  s(    ???T*T2*>*>?D???rP   )pytreetree_leaves)r   r   	flat_valss   `  rM   tree_flatten_onlyr     s0    ""4((I????Y????rP   c                    t          |           t          u oU| j        t          j        k    o@| j        p8| j        p1t          |           p"t          |           pt          j	        |            S rp   )
r   r   layoutrz   strided	is_sparse	is_nestedr   r   r   )r   s    rM   _is_plain_tensorr     sx    Q6 	
H%	
 K .{.*1--. 'q)). *1--

rP   c                      e Zd ZU ed/d            Zded<   ded<   ded	<   d
d
dd0dZd1dZd2dZd3dZ	d4dZ
	 	 d5ddddd6d'Z	 	 d7d8d.ZdS )9FakeTensorConverterrE   weakref.WeakValueDictionaryc                    | j         j        S rp   )meta_convertertensor_memorK   s    rM   r   zFakeTensorConverter.tensor_memo  s     "..rP   r   r   z)dict[StorageWeakRef, list[ReferenceType]]constant_storage_mappingr   exportF	copy_datar   r   rF   c               L    t          |          | _        || _        i | _        d S )N)r   )r   r   r   r   )rL   r   r   s      rM   rN   zFakeTensorConverter.__init__'  s,    +i@@@ )+%%%rP   fake_tensorr   c                   t          |t                    r|j        J t          |j                                                  }|| j        vr
g | j        |<   | j        |                             t          j        |                     d S rp   )	r   r   constantr#   _typed_storager   r   weakrefref)rL   r   weak_sts      rM   add_constant_storage_mappingz0FakeTensorConverter.add_constant_storage_mapping.  s     +z22W{7K7W7WW !5!D!D!F!FGG
 $77757D)'2%g.55gk+6N6NOOOOOrP   tensorr   c                
   t          |t                    rJ t          |                                          }|| j        vrd S | j        |         D ])} |            }||                                 d |_        *| j        |= d S rp   )r   r   r#   r   r   _fix_weakrefr   )rL   r   r   weak_tensor_reftens        rM   invalidate_constant_aliasesz/FakeTensorConverter.invalidate_constant_aliases<  s    fj11111 !6!6!8!899$777F#<WE 	$ 	$O!/##C  """#)'222rP   r   Optional[FakeTensor]c                    | j         j        j                            |          }|d S | j                            |          S rp   )r   	describerlookup_tensorgetr   )rL   r   tids      rM   	_get_memozFakeTensorConverter._get_memoK  s?    !+9==a@@;4##C(((rP   vc                b    | j         j                            |          }|| j         j        |<   d S rp   )r   r  get_tensor_idr   )rL   r   r  r  s       rM   set_tensor_memoz#FakeTensorConverter.set_tensor_memoQ  s1    !+99!<</0',,,rP   NT)sourcesymbolic_contexttracer   r   make_constant	shape_envOptional[ShapeEnv]r  Optional[Source]r  Optional[SymbolicContext]r  c                  |s^|s\|rZt           j        j                                        x}r5||j        v r,|j        |         }ddlm}	 t          ||	          sJ |j        }| 	                    |          }
|
|
S |j
        rt          d          t          |          t           j        j        u r|rJ |r|nd dfd
}|                     ||||||          }|t           u rt          d          ddlm} d }| j        st)          |          r|                                dk    r|j        j        dk    rn|j        t           j        t           j        t           j        t           j        t           j        fv r-|*t          ||          s|ddlm}m} ddlm} tA                      5  |!                                }d d d            n# 1 swxY w Y   tE          j#        |          stE          j$        |          st          ||          r|j%        }n ||          }|&                    |||j'        |          }|j        t           j        k    r|(                    |||          |_)        n2|j        t           j        k    r|*                    |||          |_)        |r| +                    |           |S )Nr   )StatefulSymbolicContextzquantized nyi in meta tensorsmake_meta_tCallable[[], object]deviceUnion[torch.device, str]rE   r   c                    t                      5  t           |             |          cd d d            S # 1 swxY w Y   d S )Nr   )r(   r   )r  r  r   r   s     rM   mk_fake_tensorz<FakeTensorConverter.from_real_tensor.<locals>.mk_fake_tensor  s       !KMM &                   s   8<<)r  callbackr  r  r  zmeta converter nyi)RandomValueSourcecpu)CallMethodItemSourceFloatTensorSource)
DimDynamic)r  dynamic_dimr  )hintr  )r  r  r  r  rE   r   ),rz   _guardsTracingContexttry_gettensor_to_context%torch.fx.experimental.symbolic_shapesr  r   tensor_sourcer  is_quantizedrY   r   nn	Parameterr   NotImplementedtorch._dynamo.sourcer  r   r   dimr  dtypeint64int32int16int8float64r   r!  r"  r(   itemmathisnanisinfbasecreate_unspecified_symbolDYNAMICcreate_symintnode	item_memocreate_symfloatnoder   )rL   r   r   r  r  r  r  r  tracing_contextr  
maybe_memor  r   r  valuer   r!  r"  item_sourcesymbolr   s    `                  @rM   from_real_tensorz$FakeTensorConverter.from_real_tensor[  s      		< 		<9 		<"'-">"F"F"H"HH <999'6'H'K$      &&68OPPPPP-;F^^A&&
!> 	R01PQQQ77eh((($$$$%/114
	 	 	 	 	 	 	( !!#- " 
 
 .  01EFFF::::::B	 ##B	 1&& U[%+uz5=QR R"$ v'899% #, %TTTTTTTTHHHHHH ! !! ! ! ! ! ! ! ! ! ! ! ! ! ! !:e$$ TZ->-> f&788 ?"(+KK"6"6v">">K"<<& * 2%5	 =   7ek))$-$?$?"* %@ % %CMM
 W--$-$A$A"* %B % %CM
  	3--c222
s   4GGGr  torch.devicepytypeOptional[type[torch.Tensor]]dispatch_keysOptional[torch.DispatchKeySet]c                    |j         j        dk    sJ d|j         j         d            |                     |          }||S t          |||||          }|                     ||           |S )Nmetaz$tensor's device must be `meta`, got z instead)rH  rJ  )r  r   r  r   r  )rL   r   r   r  rH  rJ  rB  r   s           rM   from_meta_and_devicez(FakeTensorConverter.from_meta_and_device  s     x}&&&J18=JJJ '&&
 ^^A&&
!q&}
 
 
 	Q$$$
rP   )rE   r   )r   r   r   r   rE   rF   )r   r   rE   rF   )r   r   rE   rF   )r   r   rE   r  )r   r   r  r   rE   rF   )FN)r   r   r   r   r  r   r  r  r  r  r  r  r  r   rE   r   )NN)r   r   r   r   r  rG  rH  rI  rJ  rK  rE   r   )rT   rU   rV   propertyr   r]   rN   r   r   r  r  rF  rN  rW   rP   rM   r   r     s-        / / / X/ "!!!GGGGLLL,1% + + + + + +P P P P3 3 3 3) ) ) )1 1 1 1 $(,M $(6:M M M M M Mj 048<      rP   r   r  rG  rF   c                    t           j                                        st           j                                        r?t           j        j        t          j        d|           nt          j        d|            d S d S )Nr3   r  )rz   cudais_availablexpuversionhipemptyzerosrQ  s    rM   init_gpu_contextrY    st     z   
EI$:$:$<$< 
 } ( K&))))Qv...  	
 
rP   c              #    K   | j         }t          j                                        }||k    sJ | d|             t          j                                        5  d| _         t          j                                        5  t          j                            d           	 d V  || _         n# || _         w xY w	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N, T)in_kernel_invocationrz   r{   _meta_in_tls_dispatch_include_DisableTorchDispatch_PreserveDispatchKeyGuard!_set_meta_in_tls_dispatch_include)r   prev_in_kernelmeta_in_tlss      rM   in_kernel_invocation_managerrc    s     
 3N(88::K.((([*L*LN*L*L(((		'	'	)	) 	@ 	@)-	& X//11 	@ 	@H66t<<<@1?	..	.????.	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@		@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@sN   &C C"B.&C.	B77C;CC	CC	CC#&C#c                    t           j                            |                                                     d          d                             d          d                   S )Nz::.r   )rz   r{    _should_allow_numbers_as_tensorsnamesplitr   s    rM   should_allow_numbers_as_tensorsrj  $  sM    844		$#))#..q1  rP   c                  L    e Zd Zej                            dd          dk    ZdS )FakeTensorConfigTORCH_FAKE_TENSOR_DEBUG01N)rT   rU   rV   osenvironr  debugrW   rP   rM   rl  rl  *  s)        JNN4c::cAEEErP   rl  c                  f    e Zd ZU ded<   ded<   dddd
ZddZddZddZddZ	 dddZ	ddZ
dS ) SymNumberMemoDescriptorrZ   _namer   _is_nested_intFis_nested_intrx  rE   rF   c                   || _         d S rp   )rv  )rL   rx  s     rM   rN   z SymNumberMemoDescriptor.__init__C  s    +rP   ownerrh  c                    || _         d S rp   ru  )rL   rz  rh  s      rM   __set_name__z$SymNumberMemoDescriptor.__set_name__F  s    


rP   objr   c                    d| j          S )Nr   r|  rL   r~  s     rM   _memozSymNumberMemoDescriptor._memoI  s    4:rP   c                    d| j          dS )Nr   _vcr|  r  s     rM   _memo_vcz SymNumberMemoDescriptor._memo_vcL  s    "4:""""rP   c                    d| j          dS )Nr   _epochr|  r  s     rM   _memo_epochz#SymNumberMemoDescriptor._memo_epochS  s    %4:%%%%rP   NobjtypeOptional[type[FakeTensor]]-Optional[Union[torch.SymInt, torch.SymFloat]]c                   t          ||                     |                    x}d S t          |t          j                  r|j        j        |S | j        s,t          ||                     |                    |j	        k    s8| j        sWt          || 
                    |                    |j        j        k    r&t          ||                     |          d            d S |S rp   )r   r  r   rz   r   noder$  rv  r  _versionr  r   epochsetattr)rL   r~  r  rs       rM   __get__zSymNumberMemoDescriptor.__get__V  s     djjoo...A74 a(( 	QV[-DH
 #	(/T]]35G5G(H(HCL(X(X# )Y T--c2233s}7JJJCC$///4rP   rC  c                $   |nt          ||                     |          d            t          ||                     |          d            t          ||                     |          d            d S |                                r| j        rt          ||                     |          |           | j        s)t          ||                     |          |j                   t          ||                     |          |j        j                   d S d S rp   )	r  r  r  r  is_inferencerv  r  r   r  )rL   r~  rC  s      rM   __set__zSymNumberMemoDescriptor.__set__l  s    =CC$///Cs++T222C))#..55555!!## 	Et': 	ECC%000& ?T]]3//>>>C))#..0CDDDDD		E 	ErP   )rx  r   rE   rF   )rz  rZ   rh  rZ   rE   rF   )r~  r   rE   rZ   rp   )r~  r   r  r  rE   r  )r~  r   rC  r  rE   rF   )rT   rU   rV   r]   rN   r}  r  r  r  r  r  rW   rP   rM   rt  rt  9  s         JJJ 05 , , , , , ,          # # # #& & & & FJ    ,E E E E E ErP   rt  c                      e Zd ZU dZded<   ded<   ded<   ded<    e            Z e            Z e            Z e            Z	 ed	
          Z
ded<   ded<   ej        j        j        Zed6d            Zej        d7d            Zed8d            Zej        d9d            Ze	 	 	 	 d:d;d            Zd< fd Zed=d"            Zeed# e            fd>d*                        Zed?d-            Zd.d/d@d3ZdAd5Z xZS )Br   al  
    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.
    rG  fake_devicer   r   Optional[Tensor]r   real_tensorTrw  Optional[type[Tensor]]rH  rK  rJ  rE   c                P    | j         j        rt          j        d          S | j        S NrM  )r   r\  rz   r  r  rK   s    rM   r  zFakeTensor.device  s(    >. 	$<'''##rP   r   rF   c                    t           rp   NotImplementedErrorrL   r   s     rM   r  zFakeTensor.device      !!rP   	list[str]c                     t          d          )Nz+torch.compile doesn't support named tensors)rY   rK   s    rM   nameszFakeTensor.names  s    ,9
 
 	
rP   c                    t           rp   r  r  s     rM   r  zFakeTensor.names  r  rP   Nr   r   r  r   c                x   t          j        | ||j        d|          }|j        s t          j                            |           nt          j                            |           |j        j	        dk    sJ |j        j	                    t          |t          j                  r|nt	          j        |          }|j        s|j	        dk    sJ |j	        dv rt          |           |j	        ddddt          j                                        fv r|j        |j	        dk    rut          t          |j	                                                  rIt	          j        |j	         d	t          t          |j	                                                             }nt	          j        |j	         d
          }||_        ||_        ||_        ||_        ||_        t          |t.                    rJ ||_        d |_        d |_        d |_        d |_        d |_        t<          j        rtA          j!                    |_"        |S )NT)dispatch_devicedevice_for_backend_keysrM  )rR  rT  rR  hpurT  mps:z:0)#r   _make_subclassrequires_grad_allow_unsafe_data_ptr_accessrz   r{   _set_throw_on_mutable_data_ptr(_set_warn_deprecated_on_mutable_data_ptrr  r   r   
allow_metarY  _get_privateuse1_backend_nameindexr   is_initializedcurrent_devicer  r   r   rH  rJ  r   r  nonzero_memor?  unique_memounique_consecutive_memonested_int_memorl  rr  r2   extract_debug_trace)	clsr   r   r  r   r  rH  rJ  rL   s	            rM   __new__zFakeTensor.__new__  s2    $ $*
 
 
 6 	DH33D9999H==dCCC{6)))4;+;)))%fel;;UfAUAU # 	);&((((;/))V$$$ KueUX-S-S-U-UVW W${e##v{(C(C(R(R(T(T#{SSWUFK%@%@%O%O%Q%QSS  &8&8&899!" *k:66666& '+$#! 	< 1 9 ; ;DrP   argsr   kwargsc                H    t                                                       d S rp   )superrN   )rL   r  r  	__class__s      rM   rN   zFakeTensor.__init__  s    rP   r   c                ,    |                     |           S rp   )from_tensor)r   r   s     rM   r  zFakeTensor.from_tensor  s    $$Q'''rP   rW   ra   r=   typesSequence[type]Sequence[object]Mapping[str, object]c                .   |t           j        j        j        j        k    rct          |          dk    rt          |d         t                    sJ |d         j        j	        rt          j        d          S |d         j
        S t                              |          x}r ||          S d |D             }|r"t                              d|           t          S d }t!          j        |i |D ] }t          |t                    r	|j        } n!|J t           j                            t           j        j        j                  }	|	r#t                              d||	           t          S |j	        rJ |5   ||i |cd d d            S # 1 swxY w Y   d S )Nr3   r   rM  c                N    g | ]"}t          |t                    s|t          u |#S rW   )
issubclassr   r   r   r   s     rM   r   z1FakeTensor.__torch_dispatch__.<locals>.<listcomp>B  s6     
 
 
Jq*$=$=
BC6//A///rP   z(FakeTensor unrecognized subclass(es): %sz(FakeTensor mode already active: %s in %s)rz   opsprimr  defaultlenr   r   r   r\  r  _DISPATCH_META_HANDLERSr  not_implemented_logrr  r.  r   arg_tree_leavesr{   _get_dispatch_moder}   r~   )
r  ra   r  r  r  handlerunrecognized_typesr   argmaybe_cur_fake_modes
             rM   __torch_dispatch__zFakeTensor.__torch_dispatch__  s     59>(000t99>>ja*&E&E>>EAw 5 +|F+++Aw** .11$7777 	!74== 
 

 
 
  	"%%:<N   "!	)4:6:: 	 	C#z** M	 $$$ $h99H*/
 
  	"%%:#  
 "!1111 	) 	)4(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   5F

FF	flat_argstuple[torch.device, bool]c                T   	
 d d}d 	t          t          j        j                  
t          t          j        j                  dddfd	d 	
fd}|D ]} ||           t                     rd}t          j        d          J d              |fS )NFr  rG  rE   r   c                    | j         dk    S )Nr  )r   rQ  s    rM   check_cpu_devicez8FakeTensor._find_common_device.<locals>.check_cpu_device  s    ;%''rP   r   r   c                T     | j                   o|                                 dk    S Nr   )r  r0  )r   r  s    rM   cpu_zero_dimz4FakeTensor._find_common_device.<locals>.cpu_zero_dim  s'    ##AH-->!%%''Q,>rP   r   rF   c                   t          | t                    sd S | j         	|           d S  	|           }| j        k    rr|d S 
v }|r|sd S r|s| j        |d S 
v r&t          t	          | j        f                    rd S t
          j        j        j        }|,|j	        v }|| j        j	        v }|s|r| j        |d S |r|sd S t          d
 d d| j                   )Nz,Unhandled FakeTensor Device Propagation for z, found two different devices r[  )r   r   r  r   maprz   r   config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  ra   is_cpu_zero_dimmixed_device_fnss         rM   merge_devicesz5FakeTensor._find_common_device.<locals>.merge_devices  s    a,, $ !".,q// ,Qx=((" 8&7O << 3 ! )O   'M  !"3 '''s+mQX-FGGHH F "'!1!8!W!-'9]=O'O$"4"E+  $%HM&7OF) / F ~t~~cp~~tut|~~  rP   Tr  z!Could not find common device for )r  rG  rE   r   r   r   rE   r   )r   r   rE   rF   )rw   aten_foreach_copyr  	nextafterrj  rz   r  )ra   r  has_scalar_only_inputsr  r  r  r  r  r  r  r  s   `    @@@@@@rM   _find_common_devicezFakeTensor._find_common_devicej  s8    !& '&
 

 0;N"0
 0
,	( 	( 	( 	(	? 	? 	? 	? 	? 	?;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	z  	 	CM#
 +400 	0]5J%)"!L//M((*Td*T*T(((444rP   r3   )coeffr  Union[int, torch.SymInt]torch.SymIntc                   | j          | j                            d           | _         t          | j         t          j                  sJ | j         |z  S )Nnt_tensor_id)r  r   create_symbolic_nested_intr   rz   r   )rL   r  s     rM   get_nested_intzFakeTensor.get_nested_int  s[    
 '#'>#L#L! $M $ $D  $.=====#e++rP   r   c                    |                                  dk    r|                                 S |                                  dk    rd | D             S d | D             S )Nr   r3   c                6    g | ]}|                                 S rW   )r7  r   r   s     rM   r   z%FakeTensor.tolist.<locals>.<listcomp>  s     111DDIIKK111rP   c                6    g | ]}|                                 S rW   )tolistr   s     rM   r   z%FakeTensor.tolist.<locals>.<listcomp>  s     333dDKKMM333rP   )r0  r7  rK   s    rM   r  zFakeTensor.tolist  sZ    88::??99;;XXZZ1__11D111133d3333rP   )rE   rG  )r   rG  rE   rF   )rE   r  )r   r  rE   rF   )NNNN)r   r   r   r   r  rG  r   r  r  r  rH  r  rJ  rK  rE   r   )r  r   r  r   rE   rF   )r   r   r   r   rE   r   
ra   r=   r  r  r  r  r  r  rE   r   )ra   r=   r  r  rE   r  )r  r  rE   r  )rE   r   ) rT   rU   rV   __doc__r]   rt  r  r?  r  r  r  rz   r{   r}   r~   	_mode_keyrO  r  setterr  staticmethodr  rN   r  classmethodr1   r!   r  r  r  r  __classcell__r  s   @rM   r   r   z  sk          !!!!
 +*,,L''))I))++K5577
 .-DAAAO
 #"""1111 .3I$ $ $ X$ ]" " " ]"& 
 
 
 X

 \" " " \"  &*(,)-8<? ? ? ? \?f      ( ( ( \( 

 "$'5~'7'7G) G) G) G) U [G)R f5 f5 f5 \f5V +,
, 
, 
, 
, 
, 
,4 4 4 4 4 4 4 4rP   r   r5   r6   c                      e Zd ZU dZded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   d'd%Zd&S )(TensorMetadatazK
    The Tensor metadata relevant to hashing FakeTensors when caching.
    ztorch.dtyper1  ztuple[_MetadataIntLike, ...]shapestriderG  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   rm   is_coalescedOptional[int]	dense_dim
sparse_dimresultlist[object]moder   stater4   rE   rF   c                   t          j        |           D ]}t          | |j                  }t	          |t
          t          t          j        f          r/g }|	                    ||||           |
                                 mt	          |t                    r|                    ||           |                    |           d S rp   )dataclassesfieldsr   rh  r   tuplelistrz   Size_prep_args_for_hashclearr   convert_sym_intr   )rL   r  r  r  fieldrC  id_hashed_objectss          rM   _flatten_intozTensorMetadata._flatten_into  s     !'-- 	% 	%ED%*--E%%uz!:;; 	% 35!((?PQQQ!''))))E6** %%%fe4444e$$$$	% 	%rP   N)r  r  r  r   r  r4   rE   rF   )rT   rU   rV   r  r]   r(  rW   rP   rM   r  r    s           ''''((((0000$$$$----MMMLLLOOO    % % % % % %rP   r  c                   t          |           }| j        s%t          |           s|                     |          sd}|                                 }t          | j        | j        | j        t          j
        k    r|                                 nd| j        | j        ||t          |           s&|                                                                 nd| j        | j        |                                 |                                 |                                 | j        | j        r|                                 ndt          |           r|                                 ndt          |           r|                                 nd          S )z1
    Extract the TensorMetadata of a tensor.
    )r  NrW   )r   _has_symbolic_sizes_stridesr   is_contiguousr  r  r1  r  r   rz   r   r  r  untyped_storagenbytesr  r+  r  r  r  r   r  r  r  )r   r  r  s      rM   extract_tensor_metadatar.    sW    *!,,M 	
% ];;
 %%''N		h%-//


R		,9!,<,<F""$$$$						

		K1T&q))3t'**4%  rP   c                  H    e Zd ZU dZded<   ded<   dd	ZddZddZddZdS )_DispatchCacheKeyz0
    Key for the FakeTensor dispatch cache.
    tuple[object, ...]r   int	hashvaluetuprE   rF   c                <    || _         t          |          | _        d S rp   )r   hashr3  )rL   r4  s     rM   rN   z_DispatchCacheKey.__init__K  s    crP   otherr   r   c                L    t          |t                    o| j        |j        k    S rp   )r   r0  r   )rL   r7  s     rM   __eq__z_DispatchCacheKey.__eq__O  s!    %!233MEI8MMrP   c                    | j         S rp   )r3  rK   s    rM   __hash__z_DispatchCacheKey.__hash__R  s
    ~rP   c                l    | j         D ]+}t          |t                    r|                                 ,d S rp   )r   r   r5   strip_shape_env)rL   r  s     rM   r=  z!_DispatchCacheKey.strip_shape_envU  sD      	$ 	$A!_-- $!!###	$ 	$rP   N)r4  r1  rE   rF   )r7  r   rE   r   )rE   r2  rS   )	rT   rU   rV   r  r]   rN   r9  r;  r=  rW   rP   rM   r0  r0  A  s           NNN# # # #N N N N   $ $ $ $ $ $rP   r0  c                      e Zd ZdS )SingletonConstantN)rT   rU   rV   rW   rP   rM   r?  r?  _  s        DrP   r?  T)frozenc                  @    e Zd ZU dZded<   ded<   ded<   eZded<   d	S )
_DispatchCacheEntryOutputInfoa  
    Entry type for the FakeTensor dispatch cache for an output. Accounts for three
    possibilities:
    1) The op is inplace, and a hit means we need to alias the argument at a
       given index.
    2) We need to synthesize a new FakeTensor given tensor metadata. For view
       ops, we further capture the index of the arg to alias.
    3) if the tensor related fields are None, then it is a constant value (e.g.
    None or integer)
    r  inplace_idxzOptional[TensorMetadata]metadataview_idxzOptional[Any]constant_valueN)rT   rU   rV   r  r]   r?  rF  rW   rP   rM   rB  rB  c  sS         	 	 &&&&$5N555555rP   rB  c                  ,    e Zd ZU dZded<   dZded<   dS )_DispatchCacheValidEntryz
    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_tupleN)rT   rU   rV   r  r]   rJ  rW   rP   rM   rH  rH  w  s;           7666!O!!!!!!rP   rH  c                      e Zd ZU dZded<   dS )_DispatchCacheBypassEntryz0
    Entry type for a negative cache entry.
    rZ   r[   NrT   rU   rV   r  r]   rW   rP   rM   rL  rL    %           KKKKKrP   rL  c                      e Zd ZU dZded<   dS )_BypassDispatchCachez<
    Signals cases that should skip FakeTensor caching.
    rZ   r[   NrM  rW   rP   rM   rP  rP    rN  rP   rP  c                  <    e Zd ZU dZded<   ded<   ded<   ded<   dS )	DispatchCacheInfozG
    Information about the state of the FakeTensor dispatch cache.
    r2  hitsmissesdict[str, int]bypassessizeNrM  rW   rP   rM   rR  rR    sC           IIIKKKIIIIIrP   rR  c                  *    e Zd ZU i Zded<   dZded<   dZded<    ee          Z	ded<   dZ
ded	<   d
Zded<   ded<   ded<   ded<   ded<   dZded<   dZded<   dd
ddd
dd fdZdd Zdd$Zedd%            Zedd'            Zed( e            fdd1            Zd fd3Zd fd:Zedd;            Zedd=            Zedd>            Zdd?ZddCZddDZddIZ ddMZ!ddPZ"ddRZ#ddTZ$ddVZ%ddWZ&d( e            fddXZ'dd^Z(dddZ)ddeZ* e+dfdgdhdidjdkdldm          Z,ddnZ-dduZ.ddzZ/dd{ddZ0 e+e1j2        j3        e1j4        j5        e1j6        j5        e1j7        j5        e1j8        j5        e1j9        j5        e1j:        j5        e1j;        j5        e1j<        j5        e1j=        j>        e1j?        j5                  Z@ e+e1jA        j5        e1jB        j5                  ZCddZD e+e1jE        j5        e1jF        j5                  ZGddZHddZIdddddddZJ xZKS )r   ,dict[_DispatchCacheKey, _DispatchCacheEntry]cacher   r2  
cache_hitscache_missesrU  cache_bypassesr  Fr   r\  static_shapesr  r  zOptional[str]_stackr  re  nt_tensor_id_counternt_tensor_id_initial_countTN)allow_fallback_kernelsallow_non_fake_inputsr  r^  r   rb  rc  rm   r   rE   rF   c                  t                               dt          |                      t                                                       || _        dd l}dd l}|j        j	        j
        | _        t          | j        |          | _        ||| _        n	|d u | _        d| _        |j        j	        j        | _        |j        j	        j        | _        |j        j	        j        o| j         | _        |j        j	        j        | _        || _        d| _        g | _        || _        t;          j                    | _        d | _         |j!        j"        j#        | _$        dd l%}|j&        j'        j(        j)        | _*        | j*        | _+        d S )Nzcreate_mode 0x%xr   r   F),logrr  idr  rN   rb  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_enabledrc  r\  enter_stackr  	tracebackextract_stack_stack_tracer_  r{   r}   r~   r  $torch.nested._internal.nested_tensornested	_internalnested_tensor_tensor_id_counterra  r`  )rL   rb  rc  r  r^  r   rz   r  s          rM   rN   zFakeTensorMode.__init__  s   $ 			$bhh///&<#####&&&& #F 	# &91&
 &
 &
"
 $!.D!*d!2D %*! #L 	*  *1HM : 0// 	
 M E 	% &;" %*!  	 #%355 7<3333 L"0C 	' %)$C!!!rP   c                    | j         | _        d S rp   )ra  r`  rK   s    rM   reset_nt_tensor_id_counterz)FakeTensorMode.reset_nt_tensor_id_counter+  s    $($C!!!rP   r   r   TypeGuard[FakeTensor]c                >    t          |t                    o|j        | u S rp   )r   r   r   rL   r   s     rM   is_our_fakezFakeTensorMode.is_our_fake:  s    !Z((@Q[D-@@rP   c                `   t           j                                        r?t           j                                        rJ t           j                                         S t           j                                        p2t          t           d          ot           j                                         S )Nr  )rz   rT  _is_compiledrR  rS  hasattrr  rK   s    rM   avoid_device_initz FakeTensorMode.avoid_device_initB  s    9!!## 	0z..00000y--//// J##%% Du%%B%)*@*@*B*B
 	
rP   rZ   c                    | j         1d                    t          j        | j                            | _         | j         S )N )r_  joinrt  format_listrv  rK   s    rM   stackzFakeTensorMode.stackM  s3    ;'')"78I"J"JKKDK{rP   rW   ra   r=   r  r  r  r  r  r  c                    t           j                            t           j        j        j                  
J |            	 |                     ||||          S # t          $ r t                              d            w xY w)Nzfake tensor raised TypeError)	rz   r{   r  r}   r~   dispatch	TypeErrorre  	exception)rL   ra   r  r  r  s        rM   r  z!FakeTensorMode.__torch_dispatch__S  s     H''(F(KLLTT UTT	==udF;;; 	 	 	MM8999	s   A &A=r   c                   dd l }d }| j        r3|j                                        }|j                            d           |j                            | j                  }| |ur=| j                            d||f           t                      
                                S |j                            |            | j                            dd |f           | S )Nr   TF)rw  r  r{   _only_lift_cpu_tensors_set_only_lift_cpu_tensorsr|   r  rs  r   r  	__enter__r   )rL   rz   prev_only_lift_cpu_tensorsmaybe_prev_fake_moder  s       rM   r  zFakeTensorMode.__enter__f  s    3333%)"! 	6).)H)H)J)J&H//555$x<<T^LL+++##+-GH   77$$&&& H''---##UD2L$MNNNrP   aOptional[type[BaseException]]bOptional[BaseException]cOptional[TracebackType]c                   | j                                         \  }}}|rgt                                          |||           |t          j                            |           |#t          j                            |           d S d S d S rp   )rs  r   r  __exit__rz   r{   r   r  )rL   r  r  r  liver   maybe_prev_only_lift_cpu_tensorsr  s          rM   r  zFakeTensorMode.__exit__z  s       ""		
 , 	VGGQ1%%% $/++,@AAA/;334TUUUUU	V 	V <;rP   c                    dS rt   rW   r  s    rM   is_infra_modezFakeTensorMode.is_infra_mode  s    trP   rR  c                    t          t          j        t          j        t	          t          j                  t          t          j                            S )z8
        Query the state of the dispatch cache.
        )rR  r   r[  r\  ru   r]  r  rZ  r  s    rM   
cache_infozFakeTensorMode.cache_info  s>    
 !%'.//$%%	
 
 	
rP   c                    d| _         d| _        | j                                         | j                                         dS )z+
        Clear the dispatch cache.
        r   N)r[  r\  r]  r$  rZ  r  s    rM   cache_clearzFakeTensorMode.cache_clear  s@    
   """	rP   c                   d}d}	 t          | j                  }|                     ||||          }n# t          $ r}t	          |t
          j        j                  r?|                                dk    r't          
                    d|d         |j                   t          j        |j        xx         dz  cc<   Y d}~nd}~ww xY w||                     ||||          S |J |                                r|j        J |j        j        }t"          }	nt          j        }t&          }	|                    |d          }
|
t	          |
t*                    r7t          j        |
j        xx         dz  cc<   |                     ||||          S |                     ||
|||          }t          xj        dz  c_        | j        r@t3          |           5  |                     |||||           ddd           n# 1 swxY w Y   |S |                     ||||          }	 |                     |||           n# t          $ r}t	          |t
          j        j                  r?|                                dk    r't          
                    d|d         |j                   t          j        |j        xx         dz  cc<    |	||t+          |j                             |cY d}~S d}~ww xY w	 |                     ||||||          }
nW# t          $ rJ}t          j        |j        xx         dz  cc<    |	||t+          |j                             |cY d}~S d}~ww xY w |	|||
           t          xj        dz  c_        |S )z
        Lookup a cache entry for the given arguments. If none exists, dispatch
        and cache the result (if the result is eligible for caching).
        Ninvoke_subgraphz6Fake tensor cache failed: identifier = %s, reason = %sr3   )r4   r  
_cache_keyrP  r   rz   _opsHigherOrderOperatorrh  hc_logrr  r[   r   r]  _dispatch_implcache_on_shape_envfake_tensor_cache_set_cache_key_for_shape_envrZ  _set_cache_keyr  rL  _output_from_cache_entryr[  rr  r   _crosscheck_cache_output_validate_cache_key_make_cache_entryr\  )rL   ra   r  r  r  r  r   erZ  set_cache_keyentryoutputs               rM   _cached_dispatch_implz$FakeTensorMode._cached_dispatch_impl  sK    	9"4>22E//%tV<<CC# 	9 	9 	9 4!?@@IIKK#444LGH  
 )!(333q833333333	9 ; &&tUD&AAA   ##%% 	+?...O5E8MM"(E*M		#t$$%!:;; F -el;;;q@;;;**4fEEE 225%dDQQF%%*%%, U /t44 U U11&$tVTTTU U U U U U U U U U U U U U UM $$T5$??	$$T48888# 	 	 	
 4!?@@IIKK#444LGH  
 )!(333q8333M%&?&I&IJJJMMMMMM	"	**5#tT66RREE# 	 	 	 )!(333q8333M%&?&I&IJJJMMMMMM	 	eS%(((##q(##sd   ,3 
CA=B??CG77G;>G;H5 5
K'?BK"K'"K'+L 
M?MMMr  r4   r0  c                *   |t          j                    t           j                                        t          j                    | j        r| j        j        ndg}|j        r|                    | j	                   g }|r| 
                    ||||           |r| 
                    ||||           t          t          |                    }|D ]0}t          j        |t          j        t"          |                     1|                                 |S )z
        Create a cache key given the dispatch args. Raises _BypassDispatchCache
        for any situation that precludes caching.
        Nr   )rz   get_default_dtyper{   _get_default_deviceis_inference_mode_enabledr  settingsknown_symbolsr   r  r#  r0  r   r   finalize	functoolspartialevict_fake_tensor_cache_keyr$  )	rL   r  ra   r  r  
key_valuesr'  r   id_hashed_objs	            rM   r  zFakeTensorMode._cache_key	  s4     #%% H((** +-- (,~?DN##4

   	* dj)))*, 	Q$$Zu>OPPP 	S$$Z@QRRRj 1 122. 	 	My01LRUVVV    	!!!
rP   c                *   ddl m} t          |t          j        j                  r||v rdS t          j        j        |j        v rt          d          t          j        j
        |j        v r|t          j        j        u rkt          |||d          \  }}|d         D ]J}t          |t          j                  r.|j        t          j        t          j        fv rt          d          KdS t          d          t          j        j        |j        v rt          d	          |t          j        j        k    rt          d
          || j        v rt          d          |                                dk    rt          d          t          j        j                            |          st          d          |j        rUt          j                            |                                t          j        j        j                  rt          d          dS dS )za
        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   rz   r  r  Tagdata_dependent_outputtagsrP  dynamic_output_shaper  r  r   r"   r1  r   r5  inplace_view_unsafe_viewr  lift_fnsrh  _libraryutils
is_builtinis_viewr{   %_dispatch_has_kernel_for_dispatch_keyDispatchKeyr  )rL   ra   r  r  r  r   
new_kwargsr  s           rM   r  z"FakeTensorMode._validate_cache_key8  s(    	JIIIII
 tUZ;<<	///F
 9*di77&'>???9)TY66tz((( 2!15	! ! !: (	2 K KE "%66 K5;

K < < 33IJJJ&'=>>>9!TY..&~6664$,,,&}5554=  &v...99;;;;;&'HIII~#..t44 	6&}555
 < 	DEHJJIIKK-G
 
 	D ''BCCC	D 	D 	D 	DrP   r  r  ?Union[Mapping[str, object], Sequence[object], Iterable[object]]r'  c                   ddl m} ddlm} t	          |t
          t          t          f          rG|                    t          |                     |                    dt          |                      t	          |t                    rV|                     ||                                ||           |                     ||                                ||           dS |D ]}t	          |t                    r|                     |          st!          d          |j        t!          d          t%          |          rt!          |j         d          t)          |          }|                    || |           t	          |t,                    rt!          d	          t	          |t.                    r|                    ||           t	          |t2          t4          f          rt!          d
          t	          |t
          t          t          f          r|                     ||||           Vt	          |t6          j                  rt!          d          t	          |t:          j        j                  r[|                    t          |                     |                    tA          |                     |                    |           t	          ||          r>|                    tC          |                     |                    |j"                   Gt	          ||          r`|                    t          |                     |                    tC          |                     |                    |j#                   |                    t          |                     |                    |           dS )a7  
        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   ru   r   r   r  r#  keysvaluesr   r  rP  r   r   r   r.  r(  r   r   r%  r   r   r  FunctionTyperz   fxGraphModulerf  r6  subgraphorig_callable)	rL   r  r  r  r'  r  r  r  rD  s	            rM   r#  z"FakeTensorMode._prep_args_for_hash~  s   	
 	
 	
 	
 	
 	
 	JIIIIIdT5$/00 	1MM$t**%%%MM/CII//000dD!! 	$$VTYY[[%ARSSS$$VT[[]]ECTUUUF *	# *	#C#z** )#'',, ?.~>>><+./CDDD %% G.#*/E/E/EFFF2377&&vtU;;;;C((  #*+<===C(( #%%fc2222C'8!455 #*+;<<<C$t!455 #((e=NOOOOC!344 #*+>???C!566 # d3ii(((bgg&&&!((----C!899 # d3ii((( "((6666C!?@@ 	#d3ii(((d3ii(((!(():;;;;
 d3ii(((c""""U*	# *	#rP   r   r  r  c                   t          |t          t          d           f          rd S t          ||          rt	          d          t          |t
                    st	          d          |j        t	          d          |j        rt	          d          t          |          rt	          d          |	                                D ]1}t          |          t          |          k    rt	          d          2d S )Nzunrepresented symbol in outputznon-FakeTensor outputr  zsparse outputzsparse compressed outputzkwarg aliases output)r   r2  r   _has_unrepresented_symbolsrP  r   r   r   r   r  rf  )rL   r  r   ra   r  r  r  kvals           rM    _validate_output_for_cache_entryz/FakeTensorMode._validate_output_for_cache_entry  s    fsDJJ/00 	F%eV44 	I ''GHHH &*-- 	@&'>??? ?&&';<<<  	8&777'' 	C&'ABBB MMOO 	C 	CD$xx2f::%%*+ABBB &	C 	CrP   r   rB  c                   t          |t          t          j        t	          d           f          rt          d d d |          S t          t          |                    D ]<}t          ||                   t          |          k    rt          |d d           c S =d }t          |t          j	        j
                  r=|j        r6d t          |          D             }	t          |	          dk    sJ |	d         }t          |          }
t          fd|
j        D                       |
_        t          fd|
j        D                       |
_                            |
j                  |
_        |
j        d n                    |
j                  |
_        t          d |
|          }t)          |fd	          }dd
lm} 	 |                     ||||          }n# |$ r t1          d          d w xY wt          j                            |          }t          j                            |          }||k    rt1          d          |S )NrC  rD  rE  rF  )rC  rD  rE  c                B    g | ]\  }}t          |t                    |S rW   r   r   )r   ir   s      rM   r   zCFakeTensorMode._get_output_info_for_cache_entry.<locals>.<listcomp>	  s+    KKK$!QZ65J5JKAKKKrP   r3   r   c              3  B   K   | ]}                     |          V  d S rp   convert_outputr   r  r  s     rM   r   zBFakeTensorMode._get_output_info_for_cache_entry.<locals>.<genexpr>  s1      OO1u33A66OOOOOOrP   c              3  B   K   | ]}                     |          V  d S rp   r  r  s     rM   r   zBFakeTensorMode._get_output_info_for_cache_entry.<locals>.<genexpr>  s1      QQA 4 4Q 7 7QQQQQQrP   FrI  rJ  )GuardOnDataDependentSymNodezdata dependent symnodezdispatch_key_set mismatch)r   r2  rz   r   r   rB  ranger  rf  r  r=   r  	enumerater.  r   r  r  r  r  r  rH  r)  r  r  rP  r{   _dispatch_key_set)rL   r  r   ra   r  r  r  idxrE  idxsrD  r  entry_for_synth_outputr  synth_outputsynth_key_setkey_sets    `               rM    _get_output_info_for_cache_entryz/FakeTensorMode._get_output_info_for_cache_entry  s    fsEL$t**=>> 	0 4$v   
 T## 	 	C$s)}}6

**4 #dT      + dEJ122 	t| 	KK)D//KKKDt99>>>>AwH*622OOOOOOOOOQQQQQQQQQ"'"6"6x7N"O"O %- D%%h&<== 	 .
 
 
 ":5"
 "
 "
 	VUUUUU		K88-sD$ LL + 	K 	K 	K
 ''?@@dJ	K 22<@@(,,V44G##&'BCCCs   G   G6rH  c           	     &    ddl m} ddlm t	          t
          j        j                  rK|v rGt	          |t                    sJ t          fd|D                       }|rt          d d          t	          |t          t
          j        t          d          f          r%t          ddd|          }	t          |	fd	
          S t	          |t                    r |D ]}
                     |
           n                     |           t	          |t                    r1 fd|D             }t          t          |          d
          S                      |          }	t          |	fd	
          S )z
        Make a cache entry object for the given 'output' Tensor. Raises
        _BypassDispatchCache if the output tensor has characteristics that
        prevent caching it.
        r   r  )has_free_unbacked_symbolsc              3  z   K   | ]5}t          |t          j        t          j        f          o
 |          V  6d S rp   )r   rz   r   r   )r   or  s     rM   r   z3FakeTensorMode._make_cache_entry.<locals>.<genexpr>V  s_            1u|U\:;; 1--a00           rP   zunbacked symbol in HOP z outputNr  Fr  c           
     D    g | ]}                     |          S rW   )r  )r   out_elemr  ra   r   r  rL   r  s     rM   r   z4FakeTensorMode._make_cache_entry.<locals>.<listcomp>q  sH         553dFH   rP   T)r  r  r)  r  r   rz   r  r  r   r   rP  r2  r   r   rB  rH  r  r  )rL   r  r   ra   r  r  r  r  non_cacheableoutput_infoout_elementrI  r  s   ``````      @rM   r  z FakeTensorMode._make_cache_entry;  s`    	JIIIIISSSSSS tUZ;<<	T///fe,,,,,                 M
  T*+RT+R+R+RSSSfsEL$t**=>> 	7 4$v  K ,)^U    fe$$ 	%  553dFK   
 11sD$   fe$$ 	         !'	  L ,"<00$   
 ??sD$ K ,)^U   rP   r  c           
     b   |j         %|j        |j        |j        t          usJ |j        S |j         &||j                  }t          |t                    sJ |S |j        }|d S t          |          rJ dfdt          fd|j	        D                       }t          fd	|j
        D                       }	 |j                  }
|j         |j                   t          j        }| j        | j        j        }t#          |           5   |            5  t%          j        ||	|j        |j        d
|j                  }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j        r t$          j                            |d           |j        r t$          j                            |d           t          |t$          j        j                  r|j        r|t?          t@          |j                           }t          |t                    sJ |!                                }t#          |           5   |            5  |"                    ||
||	           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          | ||j#                  S )NrC  r  r  r4   rE   Union[IntLikeType]c                    t          | t                    r$|j        J |                     |j                  S t          | t                    rJ | S rp   )r   r6   r  r  r5   )rC  r  r   s     rM   check_valuezGFakeTensorMode._get_output_tensor_from_cache_entry.<locals>.check_value  sW     %!233 222}}S%/:::%e_=====rP   c              3  0   K   | ]} |          V  d S rp   rW   r   r  r  r  s     rM   r   zEFakeTensorMode._get_output_tensor_from_cache_entry.<locals>.<genexpr>  s/      DDkk!U++DDDDDDrP   c              3  0   K   | ]} |          V  d S rp   rW   r  s     rM   r   zEFakeTensorMode._get_output_tensor_from_cache_entry.<locals>.<genexpr>  s/      FF{{1e,,FFFFFFrP   rM  )r1  r   r  r  T)rC  r  r  r4   rE   r  )$rC  rD  rE  rF  r?  r   r   r   r   r  r  r  r  
contextlibnullcontextr  suppress_guardsrc  rz   empty_stridedr1  r   r  r  r{   	_set_conjr  _set_negr  r=   r  r   r2  r,  set_r  )rL   r  r  r   ra   r  inplace_argrD  r  r  r  maybe_suppressrW  view_argstorager  s    ` `           @rM   #_get_output_tensor_from_cache_entryz2FakeTensorMode._get_output_tensor_from_cache_entry  s    %&&'/@@@@@''(u01Kk:66666 >4 *****	 	 	 	 	 	 DDDDDX^DDDDDFFFFFhoFFFFF$X%<eDD!-K.666>H>T>%!^;N)$// 	 	1A1A 	 	'n&4  E	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  	,Hud+++? 	+HeT***dEJ122 	Ct| 	CDen556Hh
33333..00G-d33 C C^^5E5E C C

7NE6BBBC C C C C C C C C C C C C C C C C C C C C C C C C C C C C C $x777sl   E0#*EE0E	E0 E	!E00E47E4	JI9-J9I=	=J I=	JJJ=Union[Optional[FakeTensor], tuple[Optional[FakeTensor], ...]]c                     |j         r& fd|j        D             }t          |          S                      |j        d                   S )z?
        Create a new FakeTensor from the cache entry.
        c           	     B    g | ]}                     |          S rW   )r!  )r   r  r  ra   r   rL   r  s     rM   r   z;FakeTensorMode._output_from_cache_entry.<locals>.<listcomp>  sF          88;T4   rP   r   )rJ  rI  r   r!  )rL   r  r  r   ra   r  outputss   `` ``` rM   r  z'FakeTensorMode._output_from_cache_entry  s       	        $)#5	  G >>!;;u)!,c4  rP   c                   dfd	 |                      ||||          }n.# t          $ r!}t          d| d| d	| d
|           |d}~ww xY w	  ||           dS # t          $ r}t          d| d| d	|           |d}~ww xY w)z
        Helper to validate that the output synthesized from the cache matches
        the output created by normal dispatch.
        r  r   r  rE   rF   c                   t          | t                    r]t          |t                    sJ t          |           t          |          k    sJ t          | |          D ]\  }} ||           d S t          | t                    rt          |t                    r| |k    sJ d S | |J d S t          | t
                    r2t          |           t          |          k    r| j        |j        u sJ d S t          | t          j	                  r4t          |t          j	                  sJ t          t          | |           d S t          dt          |                      )NzUnsupported type )r   r   r  zipr2  r&   r   r  rz   r   r   r   r  )r  r  lr  assert_helpers       rM   r*  z>FakeTensorMode._crosscheck_cache_output.<locals>.assert_helper  so   !U## B!!U+++++1vvQ''''1II ( (DAq!M!Q''''( (As## 
B!!S))4a1fff4ffyyyyyA|,, BAww$q''))af.>.>.>>.>.>Au|,, B!!U\22222"9a33333"#@tAww#@#@AAArP   z*FakeTensor cache crosscheck failure: func=z, args=z	, kwargs=z: Dispatch raised=N)r  r   r  r   rE   rF   )r  	Exceptionr  )	rL   r  ra   r  r  r  true_outputr  r*  s	           @rM   r  z'FakeTensorMode._crosscheck_cache_output  s<   	B 	B 	B 	B 	B 	B$	--dE4HHKK 	 	 	ET E EE E'-E EABE E  	
	M+v..... 	 	 	0T 0 00 0'-0 0  	s,   " 
AAAA 
B)BBc                \   |pi }t                      5  t                              d|||           d d d            n# 1 swxY w Y   |t          v rt          |         |          S t                                          t
          j        k    r2t                              ddt          z  |           t                      }|t          v r/t          |           5   ||i |cd d d            S # 1 swxY w Y   | j        r|                     ||||          S |                     ||||          S )Nz%s %s %sz'%sFakeTensorMode.__torch_dispatch__: %s )r(   re  rr  r  getEffectiveLevelloggingDEBUGrJ   rD   _DISPATCH_HANDLE_DIRECTLYrc  r   r  r  )rL   ra   r  r  r  incrs         rM   r  zFakeTensorMode.dispatch  s    2]] 	6 	6IIj$f555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 ****40666  ""gm33II93;PRV   +,,D ,,,-d33 - -tT,V,,- - - - - - - - - - - - - - - -  	B--dE4HHH&&tUD&AAAs!   =AAC,,C03C0pathr+   fakerealtuple[Optional[object], bool]c                   
 ddl ddlm} d fd	}t          t          j                  rm	  |d
dddd           n~# t          $ rq
t          j        j        j	        r-t          d
fd           t                     dfcY d

S t          d d dt          |           d           
d

ww xY wt          t                                                                                              D ]\  }\  }}		  |||	           # t          $ rv
t          j        j        j	        r/t          d
fd           t                     dfcY d

c S t          d| d|	 dt          |           d| d 
          
d

ww xY wnigt          j        j        j	        r)t          dfd           t                     dfS t          d d dt          |           d           	  |           n;# t          $ r.
t          d d dt          |           d           
d

ww xY wdfS )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_tensorsr5  r   r6  rE   rF   c                0   t          | t          t          f          rj        J | j        j        j        j        j                                        z
  j        j	                                        z
  s\j        
                                        | j        j        |          d          j        j        urt          d|  d| d          d S d S t          | t          t           t"          f          r| |k    rt          d|  d| d          d S d S )NT)compute_hintmismatch between fake value  and real value r.  )r   r   r   r  r  exprfree_symbols
var_to_valr  unbacked_var_to_val_maybe_evaluate_staticEqStruerj   r2  floatr   )r5  r6  rL   sympys     rM   _check_fake_real_valsz?FakeTensorMode._maybe_infer_fake.<locals>._check_fake_real_vals@  sS   $ 233 ~111	3n/44667n8==??@ ==!HHTY^T:: >    %w|, ,
 4X4XXQUXXX   , , sE4(   4<</TtTTTTTT  	   <rP   Real tensor propagation foundFT)contextsizesstridesr  r  mismatched_fake_kernelc                 2    t                     j        dS Nopr[   rZ   r[   excra   s   rM   <lambda>z2FakeTensorMode._maybe_infer_fake.<locals>.<lambda>j  s    "%d))&)j- - rP   metadata_fnzFReal tensor propagation found a metadata mismatch between fake tensor z and real tensor z,  at outputz, for func: c                 2    t                     j        dS rO  rR  rS  s   rM   rU  z2FakeTensorMode._maybe_infer_fake.<locals>.<lambda>}  s    &)$ii*-*1 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                 4    t                    d  d dS )Nr<  r=  rP  rZ   )r5  ra   r6  s   rM   rU  z2FakeTensorMode._maybe_infer_fake.<locals>.<lambda>  s,    !$ii"]"]"]W["]"]) ) rP   zQReal tensor propagation found an output value mismatch between fake output value z and real output value )r5  r   r6  r   rE   rF   )rG  torch._subclasses.fake_utilsr9  r   rz   r   rj   r   r  *generate_fake_kernels_from_real_mismatchesr   _infer_fake_from_real_tensorr,   r  r(  rW  )rL   ra   r4  r5  r6  r9  rH  js_fakes_realrT  rG  s   `` ``     @@rM   _maybe_infer_fakez FakeTensorMode._maybe_infer_fake4  sG    	IIIIII	 	 	 	 	 	 	6 dEL)) D	((;!#'"'     )   #*U P%0% % % % %    8dDII4OOOOOOO+B#'B B:>B B!'B B;?B B  	  (1TYY[[$))++1N1N'O'O  ##FF))&&9999,   '.Y T)4) ) ) ) )     <D$MMtSSSSSSSSS/O&,O O>DO O$*4LLO O89O OHLO O  	$ \d.&Q L!,! ! ! ! ! !    4D$EEtKK'>#> >6:> >#D\\> >7;> >  %%dD1111(   +A)-A AFJA A &tA A:>A A  	 U{s_   A 
C=B=C)B==CD
F&=F#F+,FFH 
I#)IIfake_inreal_infake_outreal_outOptional[object]c           	         ddl m} d j        rt           j        j                  d fd}t
                              |          \  }}	t
                              |          \  }
}	  |d||||           ny# t          $ rlt          j
        j        j        r8t          dfd	
            |             t           fd|          cY dS t          d| d| d           dww xY wt           fdt          ||
          D              \  }}t!          |          rr
 |             t
                              ||	          S )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_infoNrE   rF   c                     t          t          j        j                                                           j        _        d S rp   )r!  setr  pending_fresh_unbacked_symbols
difference)pending_unbackedrL   s   rM   _clear_pending_unbackedzXFakeTensorMode._maybe_infer_fake_kernel_from_pytree_out.<locals>._clear_pending_unbacked  s@    <@DNABBMM$ = =DN999rP   rI  rM  c                 8    t                    d j         dS )Nz>Mismatched aliasing spec between fake kernel and real kernel: rP  rR  rS  s   rM   rU  zIFakeTensorMode._maybe_infer_fake_kernel_from_pytree_out.<locals>.<lambda>  s'    !$iii]`]gii) ) rP   rV  c                &    t          |           S rp   r]  )r   ra   rL   s    rM   rU  zIFakeTensorMode._maybe_infer_fake_kernel_from_pytree_out.<locals>.<lambda>  s    :4qII rP   zGReal tensor propagation found an aliasing mismatch between fake output z and real output z,  for func: c                L    g | ] \  \  }}}                     |||          !S rW   )ra  )r   
_fake_path	_fake_out	_real_outra   rL   s       rM   r   zKFakeTensorMode._maybe_infer_fake_kernel_from_pytree_out.<locals>.<listcomp>  sF       6+ZY &&tZINN  rP   rS   )r[  rh  r  r!  rk  r   tree_flatten_with_pathtree_flattenrj   rz   r   r  r\  r   r.   r(  r   tree_unflatten)rL   ra   rb  rc  rd  re  rh  rn  fake_paths_leaves	fake_specreal_leavesr   fake_leaves	overridesrT  rm  s   ``            @@rM   (_maybe_infer_fake_kernel_from_pytree_outz7FakeTensorMode._maybe_infer_fake_kernel_from_pytree_out  sA    	CBBBBB  > 	S#DN$QRR	 	 	 	 	 	 	 (.'D'DX'N'N$9,,X66Q	/7Hg    % 	 	 	&Q !,! ! ! ! !    (')))IIIII8        ,)#+) )>F) )"&) )  	)	8 "%    :=%{; ;  "
Y 	NN	&/	& $#%%%$$[)<<<s%   /A? ?
C5	AC0C5C00C5c                `   ()*+,-./01234 ddl m} t                              f          \  ,(t	          ,          }|r.d ,D             }t
                              d|           t          S  fd,D             }t          d |D                       pt          d ,D                       . j	        * j
        v }	t          j        j        j        j        u o5t!          d         t          j                  od         j        j        dk    }
|	r|rt)                    r݉.s|s|
st+          d	 |D                       sJ  d
             fd,D             }t                              |(          \  }} |i |}t'          |          t"          u rg                     |          rRt1                      5  |                                }d d d            n# 1 swxY w Y   *                     |d          S |	rmt7                    dk    rt7                    dk    sJ  d             t'          d                   t"          u r*                     d                   S d} j        rRt          j        j        j        j        k    rdv rd         dk    rd}t          j        j        j        j        k    rd}                     *,(          \  ,}t+          d |D                       }t!          t          j         j!                  r;t          j"        j#        j$        vr"t          j"        j%        j$        vr	|rt7          |          dk    r.s|st          j&        j        ur܈ fd,D             }t                              |(          \  }}t1                      5   |i |}d d d            n# 1 swxY w Y   t          '                    |          }d |D             }t+           fd|D                       }|r%t          (                    t"          * fd|          S |D ]}*)                    |           t                              ,(          \  t!          t          j         j*                  ry|v ru j+        tX          j-        n j+        j.        } 5   |            5   |         i cd d d            cd d d            S # 1 swxY w Y   d d d            n# 1 swxY w Y    /                    |           d6 fd/ddl0m1)m2- tg                      003 j4        rt+          d |D                       rt          - 4fd,D                       stj                              d            /fd!,D             }t                              |(          \  12tm          j7                  }|stm          j8        |(          }	  1i 23n3# tr          $ r&}tj                              d"|           Y d }~nd }~ww xY w|s/|:                                 tm          j;        j<        ,3           n8 j4        r1tj                              d#|, j+        r j+        j=        nd            d7)-0123 f
d%}.r8t}                      ?                              }| | | gR i           S dd&l@mA} |vr͉ B                              s.r	 jC        v sdd'l@mD} |v r[.s(t                    rJt+          d( |D                       r1 5   | |         i           cd d d            S # 1 swxY w Y    5   jF        i }|t          ur ||          cd d d            S 	 d d d            n# 1 swxY w Y   d)jG        jH        v rOt          d*          r?t                    s0 5   | jK        i           cd d d            S # 1 swxY w Y   t          jL        jM        jN        }||jO        v r |jP         gR i S  j4        rc30ur_tm          j7                  sK j+        Dtm          jQ                  s0t           3          }t          d+fd,-            ||          S t          jT        jU        jV        W                    H                                          jX        jY        } | r	 t          jT        jX        Z                               +t          jT        jX        [                    +fd.          5   5   | i } ||          cd d d            cd d d            S # 1 swxY w Y   d d d            n# 1 swxY w Y   no# t          $ rb}! j4        rT30urPtm          j7                  s< j+        5t           3          }t          d+fd/-            ||          cY d }!~!S |!d }!~!ww xY wt          D ]3\  }"}# |"          r# |# gR i }$|$t          ur ||$          c S 4	 d8d9(,. fd3}%t                    s |%            }& ||&          S 	 t                     5   i }d d d            n# 1 swxY w Y   nG# t          $ r}' |%|'          cY d }'~'S d }'~'wt          $ r tj          b                    d4            w xY w | c                    |,?                    d          5                    S ):Nr   r  c                J    g | ] }t          |          t          |          !S rW   )_check_for_subclass_argr   r   s     rM   r   z1FakeTensorMode._dispatch_impl.<locals>.<listcomp>	  s<     " " ".Ea.H.H"Q" " "rP   z,FakeTensorMode unrecognized subclass(es): %sc                >    g | ]}                     |          |S rW   )r  r   r   rL   s     rM   r   z1FakeTensorMode._dispatch_impl.<locals>.<listcomp>	  s,     M M Mq9I9I!9L9L M M M MrP   c              3  $   K   | ]}|j         V  d S rp   )r*  )r   r  s     rM   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>	  s6       !
 !
./A)!
 !
 !
 !
 !
 !
rP   c              3  @   K   | ]}t          |t                    V  d S rp   )r   r   )r   r  s     rM   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>	  s,      ::1Av&&::::::rP   rM  c              3  (   K   | ]}|j         d uV  d S rp   r  r  s     rM   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>'	  s)      MM!qz-MMMMMMrP   z. should not have fake inputs without constantsc                L    g | ] }                     |          r|j        n|!S rW   r  r   r   r  rL   s     rM   r   z1FakeTensorMode._dispatch_impl.<locals>.<listcomp>*	  ?       =>d..q118

q  rP   Tr  r3   r.  Fr  r  c              3  (   K   | ]}|j         d uV  d S rp   r  r   r  s     rM   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>c	  )      QQa1:T1QQQQQQrP   c                L    g | ] }                     |          r|j        n|!S rW   r  r  s     rM   r   z1FakeTensorMode._dispatch_impl.<locals>.<listcomp>n	  r  rP   c                <    g | ]}t          |t                    |S rW   r  r  s     rM   r   z1FakeTensorMode._dispatch_impl.<locals>.<listcomp>y	  s'    MMMaz!V7L7LMMMMrP   c              3  B   K   | ]}                     |          V  d S rp   )may_turn_constr  s     rM   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>z	  s1      PP!t22155PPPPPPrP   c                4                         | d          S )NTr  )rF  )r   	converterrL   s    rM   rU  z/FakeTensorMode._dispatch_impl.<locals>.<lambda>	  s    i88qPT8UU rP   r   rB   rE   1Optional[Union[T, Tensor, torch._C.ScriptObject]]c                p   t          | t                    r| j        S t          | t                    rgj        J | j                            | j        j                            j        j	                                      j        j
                            S t          | t                    r| j        S | S rp   )r   r   r  r&   r  r  rH  r>  xreplacer@  rA  r   real_obj)r   rL   s    rM   maybe_to_real_tensorz;FakeTensorMode._dispatch_impl.<locals>.maybe_to_real_tensor	  s     !Z(( }$A|,, 
~111v}}FK(()BCCLL:   
 A/00 z!rP   )compute_unbacked_bindingsfree_unbacked_symbolsc              3  (   K   | ]}|j         d uV  d S rp   )r  r  s     rM   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>	  s)      MM!AM-MMMMMMrP   c              3     K   | ]J}t          |t                    o0 |          xo#j        d uot          fdD                       V  Kd S )Nc              3  4   K   | ]}|j         j        vV  d S rp   )r  rA  )r   srL   s     rM   r   z:FakeTensorMode._dispatch_impl.<locals>.<genexpr>.<genexpr>	  s-      VVAAT^%GGVVVVVVrP   )r   r&   r  r   )r   r  r  rL   symss     rM   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>	  s          q,// W!6!6q!9!99Wd2W VVVVQUVVVVV     rP   zpropagate_real_tensors %sc                &    g | ]} |          S rW   rW   )r   r  r  s     rM   r   z1FakeTensorMode._dispatch_impl.<locals>.<listcomp>	  s%    III!22155IIIrP   z9real-tensor fallback failed for %s: %s; silently ignoringz,SKIPPED propagate_real_tensors %s(%s, %s) %srd  c           	       
 dd l t                              d           dfd	urt          j        j        j        s                    f	
f|            n                    f	
f|           } t          | t                    st          t                    s|t          |           t                    k    r\t          t          t                              |                     t          t                                                             nt          |             j        | d
           | S )Nr   zmaybe_propagate_real_tensors %sr   r   real_tr   rE   rF   c                   t          | t                    rt                              dt	          |           t	          |                     || _        t          |                                 |                                          D ]\  }} ||           t          |                                 |                                          D ]\  }} ||            | 	                                |	                                           d S t          | t                    r |           rt          | j        j        j                  r0j        J j                            | j        j        |           d S t          | j        j        x}j                  r\t          |j        j                  rD|j        dk    r;j        J j                            |t'          |                     d S d S d S d S d S d S )Nz%maybe_propagate_real_tensors %s -> %sr3   )r   r   re  rr  rf  r  r(  rW  r  r  r&   r  r>  Symbolr  set_unbacked_var_to_valrC  lhsrhsr2  )r   r  r  real_sr  gorL   rG  s       rM   r  zOFakeTensorMode._dispatch_impl.<locals>.maybe_propagate_real_tensors.<locals>.go	  s   a,, OII?A6

   %+AM%(6;;==%A%A & &	61f%(V]]__%E%E & &	61fBq''))6+@+@+B+BCCCCC<00 
O5J5J15M5M 
O!!&+u|<< 	O#~999>>qv{FSSSSS"#31UX>>O&quel;;O EQJJ#~999>>q#f++NNNNN
O 
O 
O 
OO O O O 'JrP   T)peek)r   r   r  r   rE   rF   )rG  re  rr  rz   r   r  r\  r~  r   r   r   r/   r   r   rw  r  )rd  r  rG  r  r  r  ra   r  nil	real_argsreal_kwargsre  rL   s    @@rM   maybe_propagate_real_tensorszCFakeTensorMode._dispatch_impl.<locals>.maybe_propagate_real_tensors	  s   LLLII7>>>O O O O O O O O O0 s""'.Y AAv"K0       $LLv"K0     H #8V446&x886 X$x..88 f11(;;<<f11(;;<<    b(H555
 *)$.(NNNNOrP   )
meta_tabler   c              3  6   K   | ]}t          |           V  d S rp   )r   r  s     rM   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>J
  s-      PPQa 0 00PPPPPPrP   zprims::prim_meta_implmissing_fake_kernelc                 &    dt                     iS NrQ  rZ  r   s   rM   rU  z/FakeTensorMode._dispatch_impl.<locals>.<lambda>y
  s    c$ii) rP   rV  c                      S rp   rW   )ctxs   rM   rU  z/FakeTensorMode._dispatch_impl.<locals>.<lambda>
  s    S rP   c                 &    dt                     iS r  rZ  r   s   rM   rU  z/FakeTensorMode._dispatch_impl.<locals>.<lambda>
  s     #d))- rP   errorOptional[RuntimeError]r  c                    t           j        j                                      rd S s                              st                    | t                    } t          |           S rp   )rz   r  r  can_generate_trivial_fake_implcan_run_unsafe_fallbackrf   run_fallback_kernel)r  	args_specr  ra   has_symbolic_sizesrL   s    rM   maybe_run_unsafe_fallbackz@FakeTensorMode._dispatch_impl.<locals>.maybe_run_unsafe_fallback
  sx     ~#BB4HH t! 9)E)Ed)K)K 924888}4T::&tT9iOOOrP   z*failed while attempting to run meta for %srQ  )r   rB   rE   r  )rd  rB   rE   rB   rp   )r  r  rE   r  )dr  r  r   rw  _check_for_subclassr  rr  r.  r   rk  r  rz   r  r  _to_copyr  r   r   r  r   rj  r   rx  r  r(   clonerF  r  r  prims
device_put%validate_and_convert_non_fake_tensorsr  r=   r  nondeterministic_seededr  r  _nested_tensor_from_tensor_listr   tree_map_onlyr   r  r  r  r  ignore_fresh_unbacked_symbolsinvalidate_written_to_constantsr)  r  r  r   rj  re  library_utilsr  MutationCheckerZeroDivisionErrorcheckcheck_aliasing_constraintru  rA  get_fast_op_implsr  r   r  cpp_meta_supports_symint_view_fake_tensor_impl_opsr   r   	decomposer   rh  r  stride_incorrect_opr  ro  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_metarc  r  r+  r  +wrap_meta_outputs_with_default_device_logic)5rL   ra   r  r  r  r  has_unrecognized_typesr  flat_arg_fake_tensorsis_lift_func!device_conversion_skip_const_propconst_flat_args
const_argsconst_kwargsr   avoiding_device_initall_constantflat_outflat_out_tensorsr   #maybe_ignore_fresh_unbacked_symbolsreal_flat_argsr  mutation_checkerrT  r  	fast_implr  r   r  profilesr  maybe_fake_implr  run_impl_checkop_implop_impl_outr  fallbacknot_implemented_errorr  r  r  r  r  r  r  r  r  r  r  re  r  s5   `` ``                                   @@@@@@@@@@@@@rM   r  zFakeTensorMode._dispatch_impl  sl    	JIIIII%22D&>BB	9 "5Y!?!?! 	"" "!*" " "  %%>@R   "! M M M MI M M M  !
 !
3H!
 !
 !
 
 
 ;::	::::: 	 .	t},EIN+33 .47EL11.Q#v- 	*  	Q!6 	Q+D11	Q&	Q *	Q 6		Q MM7LMMMMM  GGG M   BK  O (.'<'<_i'X'X$J$
3l33CCyyF""t':':3'?'?" !]] & &))++C& & & & & & & & & & & & & & & 11$41PPP  	Av;;!##D		Q48J8J&8J8J6DG}}&& 11$Q@@@  %! 	,	/777&&8$--'+$uy1999'+$ .2-W-W)Y	.
 .
*) & QQ;PQQQQQtUZ233"	;	1BB	&di77 8)**a//& 0( 0 D@HHH   BK  O (.'<'<_i'X'X$J  8 8dJ7,778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ))#..HMM8MMMPPPP?OPPPPPL ++UUUUU   ( ; ;55c:::: ,,Y	BBf tUZ;<<	F///
 >) &&^A 0  F F::<< F F4.t4dEfEEF F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F 	,,T3H$PVWWW	 	 	 	 	 	"	
 	
 	
 	
 	
 	
 	
 	

 hh'4	MM7LMMMMM4	        #    4	 II14888IIIIyIIIN%+%:%:>9%U%U"I{&1$77J #0#@.)$ $ 
4:k::$    		O       	  Y &&(((7
IxXXX( 	 II>%6:nN22$  F	 F	 F	 F	 F	 F	 F	 F	 F	 F	 F	 F	 F	 F	 F	R  	V)++//55I$33IId4TT4T4T4TV4T4TUUU 	;::::: 
""11$77 #' #,0D4S,S,S999999 ***" +
 055 + PP:OPPPPP +   771+D14B6BB                
  ; ;"DND3F33N**77::	; ; ; ; ; ; ; ; +; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ***.// +'-- +   33'D'888                
 =';x}$$3x3D$PPPPPPP '	<##!,T22 $* !066 	<;D$QQ!)! ! ! !    43F;;;  .8BGGIIKK
 

F 	  	n.::4FF^-<<[[[[II @ @4 @ @,_d=f==F77??@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $    / ++)4T:: ,2?dHUUF%-% % % %    87????????G'0 (A 	E 	E#NG~d## E%gdDB4BBB6BBn4477DDDDD -1	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P" ~~ 	:0022H//999
	-d33 * *D$)&))* * * * * * * * * * * * * * *" 	D 	D 	D,,-BCCCCCCCC 	 	 	MMFMMM	 ,+<<46::h+?+? =  
 
 	
s^  G&&G*-G*	OOOTS8T8S<	<T?S<	 TTTX 
X;X66X;]55]9<]9!^==__7``!`Af) ff-f9f) f
	
ff
	ff) f!!f) $f!%f) )
h3Ahhhhj4 	j(j4 (j,,j4 /j,0j4 4
k8>
kk8*k8
debugprimsr  r  xlavision	torchtext
torchaudio	quantizedc                `    | j         sdS |j        | j        v p|                                dk    S )NFzfbgemm::gmm)rb  	namespace+_can_run_unsafe_fallback_allowed_namespacesrh  rL   ra   s     rM   r  z&FakeTensorMode.can_run_unsafe_fallback
  s;    * 	5
 NdNN ,yy{{m+	
rP   r  r   r  r  r0   %tuple[list[object], list[FakeTensor]]c                N     g d fdfdD             }|fS )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.
        r   rB   rE   Union[T, FakeTensor]c                   t          | t                    s| S 
                    |           st          	d          rWt          j        j        	j        v r?t          	                              \  }}t          dt          	||                     t          j        
j        nt          j        }|slt          | t                    r| j        
urt          d          t          	                              \  }}t          dt          	||                                         
|           }n| }                    |           |S )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  rz   r  r  r  r   rx  AssertionErrorr    fake_tensor_tlsrn   rc  r   r   rF  r   )r   r  r  rc  r   r  r  r  r  ra   rL   s        rM   validatezFFakeTensorMode.validate_and_convert_non_fake_tensors.<locals>.validate
  s   a((  ##A&& 4(( UY-Cty-P-P#)#8#8I#N#NLD&( B`klprvx~``  B  B  
 'EM ..(G &
 - !!Z00 FQ[5L5L,-DEEE#)#8#8I#N#NLD&(dBMdTXZ`BaBad d  
  00q99!((---JrP   c                &    g | ]} |          S rW   rW   )r   r  r  s     rM   r   zHFakeTensorMode.validate_and_convert_non_fake_tensors.<locals>.<listcomp>  s!    999!((1++999rP   )r   rB   rE   r  rW   )rL   ra   r  r  r  validated_argsr  r  s   ````` @@rM   r  z4FakeTensorMode.validate_and_convert_non_fake_tensors
  sp     35	 	 	 	 	 	 	 	 	 	 	@ :999y999444rP   r  r  rG  r-   c                ^      j         d dd fd}t          ||          S )NFr  rB   rE   r  c                z    t           t                    s S t                                        \                                 }|r7t          j         j        k     fd           t          t                     S 1r
                               S                      p          S  S )Nc                     dj          d  S )Nz-FakeTensor is wrapped to wrong device, found z, expected rQ  )r  r  s   rM   rU  zZFakeTensorMode.wrap_meta_outputs_with_default_device_logic.<locals>.wrap.<locals>.<lambda>:  s    pAHppanpp rP   )r   r   r   r  r  rz   _checkr  r   rB   rF  rN  )	r  r  r  r  r  r  ra   r  rL   s	   ` rM   wrapzHFakeTensorMode.wrap_meta_outputs_with_default_device_logic.<locals>.wrap)  s     a(( $ 224CC!* **1--K H-ppppp   Aqzz!&)  %55dA>>>$99a!8=   rP   r  rB   rE   r  )rk  r.   )	rL   r  ra   r  r  r  r  r  r  s	   ` ``` @@@rM   r  z:FakeTensorMode.wrap_meta_outputs_with_default_device_logic  so     .	 !&	 	 	 	 	 	 	 	 	 	 	 	B a   rP   r  r  r  r  c               `   dd l }ddlm} |(| j        }| j        s
J d            | xj        dz  c_         |j         ||d                    }|j        j                            d          }| j	        J | j	        
                    | j	                            ||          ||          }|S )Nr   )NestedIntNodez1should only called while FakeTensorMode is activer3   intermediate_offsets_or_lengths)valr  )symr$  r  )rw  !torch.nested._internal.nested_intr  r`  rs  r   ro  r  EphemeralSourcer  r>  create_symbol)rL   r  rz   r  r$  srcrets          rM   r  z)FakeTensorMode.create_symbolic_nested_intL  s    
 	4333CCCCCC4L#XX%XXX#%%*%%u|MM,::;;m"223TUU~)))n..,, -    / 
 
 
rP   c                H    t           j        j        |j        v rdS || j        v S rt   )rz   r  	view_copyr  _cpp_meta_supports_symintr  s     rM   r  z'FakeTensorMode.cpp_meta_supports_symintx  s'    9$)++4t555rP   r   c                    |                                 t          k    o6t          |           o&|                     |           o|j        j        dk     S r  )numelCONSTANT_NUMEL_LIMITr   r  r  r   r  s     rM   r  zFakeTensorMode.may_turn_const  sZ    GGII-- ,!!$$$,$$Q''', HMV++		
rP   r  Sequence[FakeTensor]c                   t          d |D                       }t          |          }|r|                                rt          |||d          \  }}|                                D ]x\  }	}
|	dk    s|                    |	          r|	nd}	|                     |
          r;|                    |	          r&|
j        | j        	                    |
j                   ud S d S d S )Nc              3  (   K   | ]}|j         d uV  d S rp   r  r  s     rM   r   zAFakeTensorMode.invalidate_written_to_constants.<locals>.<genexpr>  r  rP   Tr  inputrL   )
r   r   
is_mutabler"   rq   has_argumentr  r   rk  r   )rL   ra   r  r  r  any_constantschema_infor   r  kr  s              rM   r  z.FakeTensorMode.invalidate_written_to_constants  s+    QQ;PQQQQQ%d++ 	WK2244 	W.-1	  MAz #((** W W1w,,+*B*B1*E*E,AAF$$Q''W#..q11W 
..JJ1:VVV	W 	W 	W 	WW WrP   )r^  r  r  r  r   r  r  r  r  r  c                   | j         }|| j        }|r|
J d            d }| j                            | |||||          S )Nz2cannot set both static_shapes and symbolic_context)r  r  r  r  )r  r^  rk  rF  )rL   r   r^  r  r  r  r  s          rM   r  zFakeTensorMode.from_tensor  sq     )-	  .M 	#++D ,++ I)::- ; 
 
 	
rP   )rb  r   rc  r   r  r  r^  rm   r   r   rE   rF   rS   )r   r   rE   r~  )rE   r   )rE   rZ   r  )rE   r   )r  r  r  r  r  r  rE   rF   )rE   rR  )
r  r4   ra   r=   r  r  r  r  rE   r0  )ra   r=   r  r  r  r  rE   rF   )
r  r  r  r  r  r4   r'  r  rE   rF   )r  r4   r   r0  ra   r=   r  r  r  r  r  r  rE   rF   )r  r4   r   r0  ra   r=   r  r  r  r  r  r   rE   rB  )r  r4   r   r0  ra   r=   r  r  r  r  r  r  rE   rH  )r  r4   r  rB  r   r0  ra   r=   r  r  rE   r  )r  r4   r  rH  r   r0  ra   r=   r  r  rE   r"  )r  r"  ra   r=   r  r  r  r  r  r  rE   rF   )
ra   r=   r4  r+   r5  r   r6  r   rE   r7  )ra   r=   rb  r   rc  r   rd  r   re  r   rE   rf  )
ra   r=   r  r  r  r  r  r  rE   r  ra   r=   rE   r   )
ra   r=   r  r   r  r  r  r0   rE   r  )
r  r   ra   r=   r  r  r  rG  rE   r-   )r  r  rE   r  r  )
ra   r=   r  r%  r  r  r  r  rE   rF   )r   r   r^  rm   r  r  r  r  r  r   rE   r   )LrT   rU   rV   rZ  r]   r[  r\  r   r2  r]  r  r\  r`  ra  rN   r}  r  rO  r  r  r1   r!   r  r  r  r  r  r  r  r  r  r  r#  r  r  r  r!  r  r  r  ra  r~  r  rw   r  r  r  r  r  r  rW  r  r  r  as_strided_scatter
as_stridedas_strided_rX  detachview_as_realview_as_complexr  source_Storage_storage_offset(_sparse_coo_tensor_with_dims_and_tensorsr!  viewr  r  r  
lift_freshlift_fresh_copyr  r  r  r  r	  r
  s   @rM   r   r     s        :<E<<<<JL%0[%5%5N5555 ENNNN!&&&&&!!!! !#""""&(((((
 (,&+(,(, !]D ]D ]D ]D ]D ]D ]D ]D~D D D DA A A A 
 
 
 X
    X
 
 "$'5~'7'7    U$     (V V V V V V(    [ 	
 	
 	
 [	
    [_ _ _ _B- - - -^DD DD DD DDLE# E# E# E#N*C *C *C *CXH H H HTF F F FPG8 G8 G8 G8R   2, , , ,d "$'5~'7'7B B B B BBl l l l\J= J= J= J=X`
 `
 `
 `
N 3>+	3 	3/	
 	
 	
 	
/5 /5 /5 /5b.! .! .! .!b 04     4 !,
 "' 
!$	/5=! ! "-	4,4" "6 6 6 6
 {4?2D4H4PQQH
 
 
 
W W W W: )-#'6:
 
 
 
 
 
 
 
 
 
rP   r  r4   r  r  c                \    ddl m}  ||          D ]}|j        D ]}|| j        vr  dS dS )Nr   )_iterate_exprsTF)r)  r<  r?  r  )r  r  r<  r  rE  s        rM   r  r    si     EDDDDD^F##  n 	 	FU000ttt 1	 5rP   r  r  r  orig_not_implemented_exceptionr  c                   
 t           j        j        |j        v ri 
t	                      5  d	 
fdfd|D             }t
                              ||          \  }} ||i |}d d d            n# 1 swxY w Y   t                      |D ]R}t          |t                    r;t          |          s,                    |                                j                   Sd
 
fd}	t
                              |	|          S )Nr  rB   rE   Union[T, Tensor]c                                         |           r]t          j        | | j                  }| j        r'|                    |                                            | t          |          <   |S | S )NrQ  )r  rz   
zeros_liker  r   _coalesced_r  rf  )r  r   r   	inp_implss     rM   to_real_tensorz+run_fallback_kernel.<locals>.to_real_tensor  sp    $$Q'' &q???; 6OOANN$4$4555%&	"S''"
HrP   c                &    g | ]} |          S rW   rW   )r   r  rD  s     rM   r   z'run_fallback_kernel.<locals>.<listcomp>  s#    :::1^^A&&:::rP   r  c                X   t          |           vrAt          | t                    r,t          |           s|                                 j        v rt          | t                    rAt          |           v rt          |                    S j                            |           S | S rp   )rf  r   r   r   r   _cdatark  rF  )r  r   rC  r=  storagess    rM   map_outz$run_fallback_kernel.<locals>.map_out  s    a55	!!q&!! "!!$$ "   "")X5500a   	!uu	!! A'' 6GG	STUUUHrP   )r  rB   rE   r?  r  )rz   r  r  r  r(   r   rx  rj  r   r   r   addr   rG  r.   )r   ra   r  r  r=  r  r  r  r  rI  rC  rH  rD  s   `   `     @@@rM   r  r    s    y**,,I 
 " "	 	 	 	 	 	 	 ;:::	:::	,,Y	BBfD$!&!!" " " " " " " " " " " " " " "  &)UUH 8 8a   	8 ## 8Q--//6777          ??7A&&&s   <A88A<?A<rZ  rY  r   r  _DispatchCacheEntryc                8    |                                  || |<   d S rp   )r=  rZ  r   r  s      rM   r  r    s#    
 E#JJJrP   c                    || |<   d S rp   rW   rM  s      rM   r  r    s    
 E#JJJrP   c                  $    e Zd ZddZ	 	 dddZdS )FakeCopyModer   r   rE   rF   c                    || _         d S rp   )r   )rL   r   s     rM   rN   zFakeCopyMode.__init__   s    "rP   rW   Nra   r=   r  r  r  r  r  Optional[Mapping[str, object]]r   c                   |r|ni }|t           j        j        j        k    rFt	          |d         t
                    sJ  || j                            |d         d          fi |S |t
          j        k    rt          |          dk    rt          |          dk    sJ t          t
          |d                   }t          t          t          t          f         |d                   }t          |          |v r|t          |                   S | j                            |d          }||t          |          <   |S t           j                                        5   ||i |cd d d            S # 1 swxY w Y   d S )Nr   T)r^     r3   )rz   r{   
TensorBaser  r   r   r   r  __deepcopy__r  r   ru   r2  r   rf  DisableTorchFunctionSubclass)rL   ra   r  r  r  r   memor   s           rM   __torch_function__zFakeCopyMode.__torch_function__#  s    ")r 58&,,,d1gv.....4**47$*GG KQ   V(((t99>>c&kkQ&6&6&66&$q'**FS*_-tAw77D&zzT!!BvJJ''.,,V4,HHC"DFJ6688 - -tT,V,,- - - - - - - - - - - - - - - - - -s   E00E47E4)r   r   rE   rF   )rW   N)
ra   r=   r  r  r  r  r  rR  rE   r   )rT   rU   rV   rN   rY  rW   rP   rM   rP  rP    sI        # # # # "$15- - - - - - -rP   rP  r  c                    t          |           dk    rt          | d         t                    sJ | d         j        j        rt          j        d          S | d         j        S )Nr3   r   rM  )r  r   r   r   r\  rz   r  r  r  s    rM   _device_handlerr\  B  sY     t99>>ja*==>>=Aw- #|F###Aw""rP   c                4    t          d | D                       S )Nc              3  4   K   | ]}t          |          V  d S rp   )r  r   s     rM   r   z&_check_for_subclass.<locals>.<genexpr>[  s+      ==a&q))======rP   )r   )r  s    rM   r  r  Z  s    ==9======rP   c                    t          | t                     oJt          | t                    o5t          |           t          uot          |           t          j        j        uS rp   )r   r   r   r   rz   r,  r-  r   s    rM   r  r  ^  sV    q*%%% 	.q&!!	.GG6!	. GG58--	rP   c                    t          d t          t          | d                                                   D                       S )Nc              3  4   K   | ]}t          |          V  d S rp   r2  r   r  s     rM   r   z<lambda>.<locals>.<genexpr>i  s9       4 4A4 4 4 4 4 4rP   r   )r   r   r   rW  r[  s    rM   rU  rU  i  sF    e 4 4VT!W--22444 4 4 / / rP   c                    t          d t          t          | d                                                   D                       S )Nc              3  4   K   | ]}t          |          V  d S rp   rc  rd  s     rM   r   z<lambda>.<locals>.<genexpr>l  s9       6 6A6 6 6 6 6 6rP   r   )r   r   r   r  r[  s    rM   rU  rU  l  sF     6 6VT!W--44666 6 6 1 1 rP   c                v    t          t          t          | d                                                             S r  )r2  r   r   r  r[  s    rM   rU  rU  o  s-    VT!W,,..9 9 rP   )_device_not_kwarg_ops_is_tensor_constructor_like_tensor_constructorscontains_tensor_typesr  r  r  r  c                d    | t           j        v r!t           j                            |            d S d S rp   )r   rZ  r   r  s    rM   r  r    s5    
n"""  %%%%% #"rP   c                    t                               d           t                               dt          j                   t                               dt          j                   t          j        } | rt                               d           t          d | D                       }t          |                                 d           D ]*\  }}t                               d|d	z   | d
|           )d S d S )NzFakeTensor cache stats:z  cache_hits: %sz  cache_misses: %sz  cache_bypasses:c              3  4   K   | ]}t          |          V  d S rp   )r  )r   r-  s     rM   r   z#dump_cache_stats.<locals>.<genexpr>  s(      --qCFF------rP   c                    | d          S rH   rW   )r  s    rM   rU  z"dump_cache_stats.<locals>.<lambda>  s    AaD5 rP   r  z    %-*s %sr3   r  )	re  infor   r[  r\  r]  maxsortedrq   )rV  widthr-  r  s       rM   dump_cache_statsrt    s    HH&'''HH!:;;;HH!>#>???,H ;$%%%--H-----8>>++AAA 	; 	;DAqHH]EAI!www::::	; ;	; 	;rP   r  rQ  torch._ops.OpOverloadre  torch.Tensorc                    dfd}|                                 dk    r  |d|                                              fdt          |                                          D             }d	g|                                z  }d
 t          |                                          D             }|                    d            d}|}|D ]T\  }	}
|	|k    r) |d|j         d|                                 d           |||
<   ||j        |
         z  }|||
         z  }U 5  t          j        |||j	        |j
        |j                  cd d d            S # 1 swxY w Y   d S )Nr[   rZ   rE   rF   c                :    t          dj         d|  d          )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  ru  )r[   rQ  s    rM   unsupportedz1_infer_fake_from_real_tensor.<locals>.unsupported  sA    L*,(L L=CL L L
 
 	
rP   r   z'a return has a non-zero storage offset c                b    g | ]+}t           j        j                            j                  ,S rW   )rz   r  r  allocate_sizer  )r   r   r  s     rM   r   z0_infer_fake_from_real_tensor.<locals>.<listcomp>  s>        	 ..t~>>  rP   re  c                    g | ]	\  }}||f
S rW   rW   )r   r  r  s      rM   r   z0_infer_fake_from_real_tensor.<locals>.<listcomp>  s     CCCFC3xCCCrP   c                $    | d         | d          fS )Nr   r3   rW   r`  s    rM   rU  z._infer_fake_from_real_tensor.<locals>.<lambda>  s    !qte} rP   r  r3   z(a return was not dense in memory (sizes z	 strides ))r  r1  r   )r[   rZ   rE   rF   )r  r  r0  r  r  sortr  rz   r  r  r1  r   )r  rQ  re  ry  
fake_shapefake_stridesrL  expectedfake_strider  r  s   ``         rM   r]  r]    s   
 
 
 
 
 
   A%%Qh6M6M6O6OQQ	
 	
 	
   x||~~&&  J 4(,,..(LCCi0A0A&B&BCCCGLL,,L---HK 4 43==Kh8>hhT\TcTcTeTehhh   (ShnS11!JsO3	 
 
"?.?
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   %(EE!Er   c                     j         J t                              |          \  }}t          d |D                       st	          dj                    fd|D             }t                              ||          S )Nc              3  J   K   | ]}t          |t          j                  V  d S rp   )r   rz   r   r  s     rM   r   z5inferred_fake_kernel_from_real_out.<locals>.<genexpr>  s.      BBqz!U\**BBBBBBrP   zPpropagate_real_tensors: we don't support operators that return non-Tensors. Got c                2    g | ]}t          |          S rW   rq  )r   r   r  rQ  s     rM   r   z6inferred_fake_kernel_from_real_out.<locals>.<listcomp>  s&    VVV11$A>>VVVrP   )r  r   rw  r   r  r   rx  )r  rQ  re  real_flat_outspecfake_flat_outs   ``    rM   r  r    s     >%%%
 !--h77M4BBMBBBBB 
- "
- -
 
 	

 WVVVVVVVM  555rP   )rq   rB   rE   rr   )rE   rx   )r   r   rE   r   )r   r   r   r   rE   r   )r   r   rE   r   )r   r   rE   r   )ra   r=   rE   r   r/  )r   r   r   r-   rE   r   )r   r   rE   r   )r  rG  rE   rF   )r   r   rE   r  )r  r4   r  r  rE   r   )r   r   ra   r=   r  r  r  r-   r=  r  rE   r   )rZ  rY  r   r0  r  rK  rE   rF   )r  r  rE   rG  )r  r  rE   r   )r   r   rE   r   )r   r0  rE   rF   rS   )r  r   rQ  ru  re  rv  rE   rv  )r  r   rQ  ru  re  r   rE   r   )
__future__r   atexitr  r  r  r0  r8  rp  	threadingrt  r  typingr   collectionsr   r   r   r   r   r	   r
   r   r   r   typing_extensionsr   r   r   rz   torch._library.utilsr  r  r  r   r   r   r   torch._C._functorchr   r   "torch._library.fake_class_registryr   torch._library.fake_profiler   torch._loggingr   torch._prims_commonr   torch._subclasses.meta_utilsr   r   r   r   r   torch._utilsr    torch.fx.immutable_collectionsr!   torch.fx.operator_schemasr"    torch.multiprocessing.reductionsr#   torch.overridesr$   torch.typesr%   r&   torch.utils._backport_slotsr'   torch.utils._mode_utilsr(   torch.utils._python_dispatchr)   r*   torch.utils._pytreer+   r,   r-   r.   r/   r0   torch.utils._statsr1   torch.utils._tracebackr2   _fake_tensor_utilsr4   r5   r6   collections.abcr7   r8   r9   r:   r;   torch._guardsr<   
torch._opsr=   r)  r>   r?   	getLoggerrT   re  _logginggetArtifactLoggerr  r  
ValueErrorr  rZ   r!  DimList_pytreer   rB   r  r  r  r$  rJ   rD   r  rY   r`   rd   rf   rh   rj   localrl   r  rw   contextmanagerr   r   r   r   r   rZ  r   r   r   r   r   rY  rc  rj  rl  rt  r   r  r  r.  r0  r?  rB  rH  rL  rK  r+  rP  rR  r   r   _StoragePointerr  r  r  r  rP  r\  r  r  r  r  r  rW  r  r  r  r  r  r  profiler_record_function_exit_RecordFunctionr2  torch._subclasses.fake_implsrh  ri  rj  rk  r  r  r  r  r  registerrt  r]  r  rW   rP   rM   <module>r     sM   " " " " " "                				            # # # # # # ! ! ! ! ! ! X X X X X X X X X X X X X X X X X X X X - - - - - - - - ! ! ! ! ! !  , , , , , , , , , 3 3 3 3 3 3 3 3 3 3 3 3 T T T T T T T T ? ? ? ? ? ? 8 8 8 8 8 8 , , , , , , 5 5 5 5 5 5              % $ $ $ $ $ 9 9 9 9 9 9 8 8 8 8 8 8 ; ; ; ; ; ; - - - - - - 1 1 1 1 1 1 1 1 7 7 7 7 7 7 / / / / / /        W V V V V V V V V V V V V V V V $ $ $ $ $ $ 4 4 4 4 4 4 R R R R R R R R R R  PFFFFFFFFFFFF######$$$$$$%%%%%%OOOOOOOOg!!		)	)(4J	K	K.::8EVWW   )SSVV33/g/;M0MNN 	 		GCLLz~             \        ,        <        <        <        L   3 3 3 3 3IO 3 3 3  -//& & & & - - - - , , , ,   "   0   2 . . . . 	D 	D 	D 	D@ @ @ @
   $e e e e e e e eP 
 
 
 
 @ @ @ @,   B B B B B B B B>E >E >E >E >E >E >E >EBl4 l4 l4 l4 l4 l4 l4 l4^ &79LLM  
*% *% *% *% *% *% *%  *%Z# # # #L 
$ $ $ $ $ $ $  $8	 	 	 	 	 	 	 	 
$6 6 6 6 6 6 6  6$ 
$
" 
" 
" 
" 
" 
" 
"  
" 
$          U 8:S ST 
$    9     
$        (D
 D
 D
 D
 D
& D
 D
 D
N8 
 
 
 
=' =' =' ='@       -  -  -  -  -$  -  -  -F# # # #0> > > >    
IN!?	IN " " 
IN! $ $ 
IN!) , ,  (K	IN'	IN$	IN% 
I,<  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	& & & &
 	; 	; 	; 	;9
 9
 9
 9
x6 6 6 6 6 6s    E< <F.#F))F.