
    rh                   4   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j                  eh      Ziej                  j                  ehd"      Zl	 ej                  j                  ehd#      ZmeqZrej@                  j                  Zt ed&      Zuej                  j                  j                  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       Zdtd7Zej                  dud8       Zej                  dvd:       Z	 	 	 	 	 	 dwd;Zdxd<Zdyd=Zej                  dzd>       Zej                  d{d?       Zd|d@Zd}dAZ G dB dC      Zej                  d~dD       Zej                  	 	 	 	 dvdE       Zd{dFZ G dG dH      Z G dI dJ      Z G dK dLe%      ZeeBdMdNf   ZeEe G dO dP                    ZddQZeEe G dR dS                    Z G dT dU      ZeE edVW       G dX dY                    ZeE edVW       G dZ d[                    ZeE edVW       G d\ d]                    Zereeef   ZeE edVW       G d^ d_e                    ZeE edVW       G d` da                    Z G db d9eJ      ZeZ	 	 	 	 	 	 ddcZ	 	 	 	 	 	 	 	 	 	 	 	 dddZ	 	 	 	 	 	 	 	 ddeZ	 	 	 	 	 	 	 	 ddfZ G dg dhe@      ZddiZddjZddkZej                  j`                  jb                  jd                  eej                  j                  jf                  jd                  dl ej                  j                  jh                  jd                  dm ej                  j                  jj                  jd                  dn iZ eej                  j                  jn                  jd                  ej                  j                  jp                  jd                  ej                  j                  jr                  jd                  ej                  jt                  jv                  jx                        Zd dolmZmZmZmZmZmZmZmZ ddpZej                  ddq       Z	 	 	 	 	 	 	 	 ddrZ	 	 	 	 	 	 	 	 ddsZy# en$ r-Zod$ epeo      v r ej                  ehd%z         ZmneoY dZo[odZo[oww xY w)    )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y)IncrementRecursionCountc                    t         dz  a y Nr3   RECURSION_COUNTselfs    p/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/_subclasses/fake_tensor.py__init__z IncrementRecursionCount.__init___       1    c                    t         dz  a y rF   rG   rI   s    rK   __del__zIncrementRecursionCount.__del__c   rM   rN   NreturnNone)__name__
__module____qualname__rL   rP    rN   rK   rD   rD   ^   s    rN   rD   c                      e Zd ZU ded<   y)UnsupportedFakeTensorExceptionstrreasonNrT   rU   rV   __annotations__rW   rN   rK   rY   rY   h       KrN   rY   c                      e Zd ZU ded<   y)DynamicOutputShapeExceptionr=   funcNr\   rW   rN   rK   r`   r`   m       
rN   r`   c                      e Zd ZU ded<   y)DataDependentOutputExceptionr=   ra   Nr\   rW   rN   rK   rd   rd   r   rb   rN   rd   c                      e Zd ZU ded<   y)UnsupportedOperatorExceptionr=   ra   Nr\   rW   rN   rK   rf   rf   w   rb   rN   rf   c                      e Zd ZU ded<   y)$UnsupportedMutationAliasingExceptionrZ   r[   Nr\   rW   rN   rK   rh   rh   |   r^   rN   rh   c                      e Zd ZU ded<   y)MetadataMismatchErrorrZ   r[   Nr\   rW   rN   rK   rj   rj      r^   rN   rj   c                       e Zd ZU ded<   ddZy)FakeTensorTLSOptional[bool]allow_non_fake_inputs_overridec                    d | _         y N)rn   rI   s    rK   rL   zFakeTensorTLS.__init__   s
    .2+rN   NrQ   )rT   rU   rV   r]   rL   rW   rN   rK   rl   rl      s     %323rN   rl   c                 .    t         j                  | d      S NT)dictfromkeys)itemss    rK   ordered_setrv      s    ==%%rN   c               #  *  K   t         j                  j                  t         j                  j                  j                        } 	 |  |  t         j                  j                  |        y y # |  t         j                  j                  |        w w xY wwrp   )torch_C_unset_dispatch_mode_TorchDispatchModeKeyFAKE_set_dispatch_mode)olds    rK   unset_fake_temporarilyr      sl     
((
'
'(F(F(K(K
LC-	?HH'', 3?HH'', s   ABA, 	#B,$BBFakeTensorModec              #  b   K   | j                   }	 d| _         d  || _         y # || _         w xY ww)NF)cache_enabled)	fake_mode	old_values     rK   disable_fake_tensor_cacher      s1     --I,"'	"+	)	s   /# /	,/c                   | g}|rf|j                         t              s|j                         /j                         \  }}|j	                  fdt        |      D               |rf|S )Nc              3  6   K   | ]  }t        |        y wrp   )getattr).0keycurrs     rK   	<genexpr>z$get_plain_tensors.<locals>.<genexpr>   s     G3GD#&Gs   )popr)   append__tensor_flatten__extendreversed)subclassouttodo
inner_keys_r   s        @rK   get_plain_tensorsr      sf     :D
xxz,T2JJt//1
AG(:2FGG  JrN   c                   ddl m} t        | t              ryt	        |       rht        |       j                  |       \  }}|D cg c]  }t        | |       }}t        d |D              }t        d |D              }||k(  sJ d       |S t        | |      rt        | j                        S t        | t              rht        j                  |       rSt        j                  j!                         }t        j                  j"                  j%                  | |      }	t        |	      S t        | t              r?t'        |       r4t        j                  j"                  j)                  |       }	t        |	      S yc c}w )Nr   FunctionalTensorTc              3  2   K   | ]  }t        |        y wrp   is_faker   xs     rK   r   zis_fake.<locals>.<genexpr>        =awqz=   c              3  2   K   | ]  }t        |        y wrp   r   r   s     rK   r   zis_fake.<locals>.<genexpr>   r   r   z got mixed fake and real tensors!F)#torch._subclasses.functional_tensorr   
isinstance
FakeTensorr)   typer   r   allanyr   elemr   rx   _is_functional_tensorry   $_functionalization_reapply_views_tls
_functorch_unwrap_functional_tensorr   get_unwrapped)
r   r   attrsr   attrflattened_tensorsall_fakeany_fakereapply_views	unwrappeds
             rK   r   r      s1   D!Z $Q'7--a0q:?@$WQ-@@=+<===+<==8#G%GG#	A'	(qvv	Av	5#>#>q#AEEGHH''AA!]S	y!!	Av	#>q#AHH''55a8	y!! As   E4c           	        ddl m} t        | t              r| j                  S t        |       rR| j                         \  }}|D cg c]  }t        t        | |             }}|d   t        fd|D              sJ S t        | |      rt        | j                        S t        | t              rht        j                  |       rSt        j                  j                         }t        j                  j                   j#                  | |      }t        |      S t        | t              r?t%        |       r4t        j                  j                   j'                  |       }t        |      S y c c}w )Nr   r   c              3  &   K   | ]  }|u  
 y wrp   rW   )r   r   ms     rK   r   z&maybe_get_fake_mode.<locals>.<genexpr>   s     )a16)s   )r   r   r   r   r   r)   r   maybe_get_fake_moder   r   r   r   rx   r   ry   r   r   r   r   r   )	tr   inner_tensor_namesr   t_namemodesr   r   r   s	           @rK   r   r      s*   D!Z {{$Q' ! 4 4 6ABT
8>6 23
 
 !H)5))))	A'	("166**	Av	5#>#>q#AEEGHH''AA!]S	"9--	Av	#>q#AHH''55a8	"9--
s   E*c                T    t         j                  j                  | j                        S rp   )rx   ry   _SchemaInfo_schemara   s    rK   get_schema_infor      s    88--rN   c                    ddl m} t        j                  j                  }||    j
                  j                  d      xr ||    j                  t        |      v S )Nr   decomposition_tableztorch._decomp)	torch._decompr   rx   _decompdecompositionsrU   
startswithrT   dir)ra   r   r   s      rK   torch_decomp_decompositionsr      sV    1]]11N t$//:: D
d
#
,
,N0C
CDrN   c                p    t         j                  |      }|D cg c]  }t        ||       s| c}S c c}w rp   )pytreetree_leavesr   )tytree	flat_valsr   s       rK   tree_flatten_onlyr     s/    ""4(I&?T*T2*>D???s   33c                    t        |       t        u xrk | j                  t        j                  k(  xrL | j
                  xs= | j                  xs/ t        |       xs" t        |       xs t        j                  |        S rp   )
r   r   layoutrx   strided	is_sparse	is_nestedr   r   r   )r   s    rK   _is_plain_tensorr     sx    Q6 	
HH%	
 KK .{{.*1-. 'q). **1-

rN   c                      e Zd ZU e	 	 dd       Zded<   ded<   ded<   ddd	dd
ZddZddZddZ	ddZ
	 	 ddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZy)FakeTensorConverterc                .    | j                   j                  S rp   )meta_convertertensor_memorI   s    rK   r   zFakeTensorConverter.tensor_memo  s     ""...rN   r   r   z)dict[StorageWeakRef, list[ReferenceType]]constant_storage_mappingboolexportF	copy_datar   c               B    t        |      | _        || _        i | _        y )N)r   )r   r   r   r   )rJ   r   r   s      rK   rL   zFakeTensorConverter.__init__'  s     +i@ )+%rN   c                "   t        |t              r|j                  J t        |j                  j	                               }|| j
                  vrg | j
                  |<   | j
                  |   j                  t        j                  |             y rp   )	r   r   constantr#   _typed_storager   r   weakrefref)rJ   fake_tensorweak_sts      rK   add_constant_storage_mappingz0FakeTensorConverter.add_constant_storage_mapping.  sz     +z2{7K7K7WWW !5!5!D!D!FG
 $77757D))'2%%g.55gkk+6NOrN   c                    t        |t              rJ t        |j                               }|| j                  vry | j                  |   D ]#  } |       }||j                          d |_        % | j                  |= y rp   )r   r   r#   r   r   _fix_weakrefr   )rJ   tensorr   weak_tensor_reftens        rK   invalidate_constant_aliasesz/FakeTensorConverter.invalidate_constant_aliases<  s    fj111 !6!6!89$777#<<WE 	$O!#C  "#		$ ))'2rN   c                    | j                   j                  j                  j                  |      }|y | j                  j                  |      S rp   )r   	describerlookup_tensorgetr   )rJ   r   tids      rK   	_get_memozFakeTensorConverter._get_memoK  sC    !!++99==a@;##C((rN   c                    | j                   j                  j                  |      }|| j                   j                  |<   y rp   )r   r   get_tensor_idr   )rJ   r   vr   s       rK   set_tensor_memoz#FakeTensorConverter.set_tensor_memoQ  s4    !!++99!</0'',rN   NT)sourcesymbolic_contexttracec                  |sk|si|rgt         j                  j                  j                         x}r=||j                  v r/|j                  |   }ddlm}	 t        ||	      sJ |j                  }| j                  |      }
|
|
S |j                  rt        d      t        |      t         j                  j                  u r|rJ |r|nd 	 	 	 	 	 	 dfd}| j                  ||||||      }|t         u rt        d      ddlm} d }| j&                  st)        |      r|j+                         dk(  r|j,                  j                  dk(  ru|j.                  t         j0                  t         j2                  t         j4                  t         j6                  t         j8                  fv r|t        ||      s|dd	lm}m} dd
lm} tA               5  |jC                         }d d d        tE        jF                  |      stE        jH                  |      st        ||      r|jJ                  }n ||      }|jM                  |||jN                  |      }|j.                  t         j0                  k(  r|jQ                  |||      |_)        n6|j.                  t         j8                  k(  r|jU                  |||      |_)        |r| jW                  |       |S # 1 sw Y   xY w)Nr   )StatefulSymbolicContextzquantized nyi in meta tensorsc                l    t               5  t         |        |      cd d d        S # 1 sw Y   y xY w)Nr   )r(   r   )make_meta_tdevicer   r   s     rK   mk_fake_tensorz<FakeTensorConverter.from_real_tensor.<locals>.mk_fake_tensor  s7      !M &  s   *3)	shape_envcallbackr   r   r   zmeta converter nyi)RandomValueSourcecpu)CallMethodItemSourceFloatTensorSource)
DimDynamic)r   dynamic_dimr   )hintr   )r  zCallable[[], object]r  zUnion[torch.device, str]rR   r   ),rx   _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   )rJ   r   r   make_constantr  r   r   r   tracing_contextr   
maybe_memor  r   r  valuer
  r  r  item_sourcesymbolr   s    `                  @rK   from_real_tensorz$FakeTensorConverter.from_real_tensor[  s     9"'--">">"F"F"HHH999'6'H'H'K$ &&68OPPP-;;F^^A&
!>>01PQQ7ehh((($$$%14
	-	7O		( !!#- " 
 . 01EFF: #1& U[[%++uzz5==QR"$ v'89 %TH !!::e$TZZ->f&78"(++K"6v">K"<<& * 2 2%5	 =  77ekk)$-$?$?"* %@ %CM
 WW-$-$A$A"* %B %CM
 --c2
?! !s   KK$c                    |j                   j                  dk(  sJ d|j                   j                   d       | j                  |      }||S t        |||||      }| j	                  ||       |S )Nmetaz$tensor's device must be `meta`, got z instead)pytypedispatch_keys)r  r   r   r   r   )rJ   r   r   r  r4  r5  r-  r   s           rK   from_meta_and_devicez(FakeTensorConverter.from_meta_and_device  s     HHMMV#	J1!((--I	J# ^^A&
!q&}
 	Q$
rN   )rR   zweakref.WeakValueDictionary)r   r   r   r   rR   rS   )r   r   rR   rS   )r   r   rR   rS   )r   r   rR   Optional[FakeTensor])r   r   r   r   rR   rS   )FN)r   r   r   r   r+  r   r  Optional[ShapeEnv]r   Optional[Source]r   Optional[SymbolicContext]r   r   rR   r   )NN)r   r   r   r   r  torch.devicer4  zOptional[type[torch.Tensor]]r5  Optional[torch.DispatchKeySet]rR   r   )rT   rU   rV   propertyr   r]   rL   r   r   r   r   r1  r6  rW   rN   rK   r   r     s   /	$/ / "!GGL,1% +P3)1 $(,M $(6:M!M M 	M
 &M !M 4M M 
Mj 048<!  	
 - 6 
rN   r   c                   t         j                  j                         st         j                  j                         rIt         j                  j
                  t        j                  d|       nt        j                  d|        y y )Nr3   r  )rx   cudais_availablexpuversionhipemptyzerosr?  s    rK   init_gpu_contextrG    sY     zz EII$:$:$< }}  ( KK&)Qv.	 %=rN   c              #    K   | j                   }t        j                  j                         }||k(  sJ | d|        t        j                  j	                         5  d| _         t        j                  j                         5  t        j                  j                  d       	 d  || _         	 d d d        d d d        y # || _         w xY w# 1 sw Y   xY w# 1 sw Y   y xY ww)N, T)in_kernel_invocationrx   ry   _meta_in_tls_dispatch_include_DisableTorchDispatch_PreserveDispatchKeyGuard!_set_meta_in_tls_dispatch_include)r   prev_in_kernelmeta_in_tlss      rK   in_kernel_invocation_managerrQ    s     
 33N((88:K.(L[MN;K*LL(		'	'	) 	@)-	& XX//1 	@HH66t<@1?	.	@		@ 	@ 2@	.	@ 	@		@ 	@sN   AC$&C C#C 'C/C7	C$ 	C		CC	CC!C$c                    t         j                  j                  | j                         j	                  d      d   j	                  d      d         S )Nz::.r   )rx   ry    _should_allow_numbers_as_tensorsnamesplitr   s    rK   should_allow_numbers_as_tensorsrX  $  sB    8844		$#))#.q1 rN   c                  J    e Zd Zej                  j                  dd      dk(  Zy)FakeTensorConfigTORCH_FAKE_TENSOR_DEBUG01N)rT   rU   rV   osenvironr   debugrW   rN   rK   rZ  rZ  *  s    JJNN4c:cAErN   rZ  c                  z    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
y)SymNumberMemoDescriptorrZ   _namer   _is_nested_intFis_nested_intc                   || _         y rp   )rd  )rJ   rf  s     rK   rL   z SymNumberMemoDescriptor.__init__C  s
    +rN   c                    || _         y rp   rc  )rJ   ownerrV  s      rK   __set_name__z$SymNumberMemoDescriptor.__set_name__F  s	    
rN   c                     d| j                    S )Nr   ri  rJ   objs     rK   _memozSymNumberMemoDescriptor._memoI  s    4::,rN   c                "    d| j                    dS )Nr   _vcri  rm  s     rK   _memo_vcz SymNumberMemoDescriptor._memo_vcL  s    4::,c""rN   c                "    d| j                    dS )Nr   _epochri  rm  s     rK   _memo_epochz#SymNumberMemoDescriptor._memo_epochS  s    4::,f%%rN   Nc                   t        || j                  |            x}y t        |t        j                        r|j
                  j                  |S | j                  s(t        || j                  |            |j                  k7  s>| j                  sOt        || j                  |            |j                  j                  k7  rt        || j                  |      d        y |S rp   )r   ro  r   rx   r   noder  rd  rr  _versionru  r   epochsetattr)rJ   rn  objtypers       rK   __get__zSymNumberMemoDescriptor.__get__V  s     djjo..A7 a(QVV[[-DH
 ##T]]35G(HCLL(X##T--c23s}}7J7JJCC$/rN   c                   |Ut        || j                  |      d        t        || j                  |      d        t        || j                  |      d        y |j	                         r| j
                  rt        || j                  |      |       | j
                  s&t        || j                  |      |j                         t        || j                  |      |j                  j                         y y rp   )	rz  ro  rr  ru  is_inferencerd  rx  r   ry  )rJ   rn  r.  s      rK   __set__zSymNumberMemoDescriptor.__set__l  s     =CC$/Cs+T2C))#.5!!#t':':CC%0&&T]]3/>C))#.0C0CD	 (;rN   )rf  r   rR   rS   )rj  rZ   rV  rZ   rR   rS   )rn  r   rR   rZ   rp   )rn  r   r{  zOptional[type[FakeTensor]]rR   -Optional[Union[torch.SymInt, torch.SymFloat]])rn  r   r.  r  rR   rS   )rT   rU   rV   r]   rL   rk  ro  rr  ru  r}  r  rW   rN   rK   rb  rb  9  sp    J 05 , #& FJ(B	6,EE&SE	ErN   rb  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dd       Zej$                  dd       Zedd       Zej$                  d d       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'dZd(dZ xZS ))r   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.
    r;  fake_devicer   r   Optional[Tensor]r   real_tensorTre  Optional[type[Tensor]]r4  r<  r5  c                p    | j                   j                  rt        j                  d      S | j                  S Nr3  )r   rJ  rx   r  r  rI   s    rK   r  zFakeTensor.device  s*    >>..<<''###rN   c                    t         rp   NotImplementedErrorrJ   r   s     rK   r  zFakeTensor.device      !!rN   c                    t        d      )Nz+torch.compile doesn't support named tensors)rY   rI   s    rK   nameszFakeTensor.names  s    ,9
 	
rN   c                    t         rp   r  r  s     rK   r  zFakeTensor.names  r  rN   c                   t        j                  | ||j                  d|      }|j                  s t        j
                  j                  |       nt        j
                  j                  |       |j                  j                  dk(  sJ |j                  j                         t        |t        j                        r|nt	        j                  |      }|j                  s|j                  dk7  sJ |j                  dv rt        |       |j                  ddddt        j
                  j                         fv r|j                  |j                  dk7  rst        t        |j                        j!                         rKt	        j                  |j                   d	t        t        |j                        j#                                }n"t	        j                  |j                   d
      }||_        ||_        ||_        ||_        ||_        t        |t.              rJ ||_        d |_        d |_        d |_        d |_        d |_        t<        j>                  rtA        jB                         |_"        |S )NT)dispatch_devicedevice_for_backend_keysr3  )r@  rB  r@  hpurB  mps:z:0)#r   _make_subclassrequires_grad_allow_unsafe_data_ptr_accessrx   ry   _set_throw_on_mutable_data_ptr(_set_warn_deprecated_on_mutable_data_ptrr  r   r   
allow_metarG  _get_privateuse1_backend_nameindexr   is_initializedcurrent_devicer  r   r   r4  r5  r   r  nonzero_memor)  unique_memounique_consecutive_memonested_int_memorZ  r`  r2   extract_debug_trace)	clsr   r   r  r   r  r4  r5  rJ   s	            rK   __new__zFakeTensor.__new__  s    $$ $*
 66HH33D9HH==dC{{6);4;;+;+;;)%fell;fAU ##;;&(((;;/)V$ KKueUXX-S-S-UVW${{e#v{{(C(R(R(T{{m1WUFKK%@%O%O%Q$RS R&89!" *k:666& '+$#!! 1 9 9 ;DrN   c                "    t         |           y rp   )superrL   )rJ   argskwargs	__class__s      rK   rL   zFakeTensor.__init__  s    rN   c                $    |j                  |       S rp   )from_tensor)r   r   s     rK   r  zFakeTensor.from_tensor  s    $$Q''rN   rW   c                   |t         j                  j                  j                  j                  k(  r`t        |      dk(  rt        |d   t              sJ |d   j                  j                  rt        j                  d      S |d   j                  S t        j                  |      x}r ||      S |D cg c]  }t        |t              r|t        us|  }}|rt        j!                  d|       t"        S d }t%        j&                  |i |D ]   }	t        |	t              s|	j                  } n |J t         j(                  j+                  t         j(                  j,                  j.                        }
|
rt        j!                  d||
       t"        S |j                  rJ |5   ||i |cd d d        S c c}w # 1 sw Y   y xY w)Nr3   r   r3  z(FakeTensor unrecognized subclass(es): %sz(FakeTensor mode already active: %s in %s)rx   opsprimr  defaultlenr   r   r   rJ  r  _DISPATCH_META_HANDLERSr   
issubclassr   not_implemented_logr`  r  r   arg_tree_leavesry   _get_dispatch_moder{   r|   )r  ra   typesr  r  handlerr   unrecognized_typesr   argmaybe_cur_fake_modes              rK   __torch_dispatch__zFakeTensor.__torch_dispatch__  s    599>>((000t9>ja*&EEEAw  55||F++Aw*** .11$77774=  
Jq*$=!6/A
 
 %%:<N "!	))4:6: 	C#z*MM		
 $$$ $hh99HH**//
 %%:#
 "!1111 	)((	) 	)K
J	) 	)s   5F8F8F8&F==Gc                   	 d d}d t        t        j                  j                        	ddd	fdd
 	fd}|D ]
  } ||        t	               rd}t        j                  d      
J d         |fS )NFc                     | j                   dk(  S )Nr	  )r   r?  s    rK   check_cpu_devicez8FakeTensor._find_common_device.<locals>.check_cpu_device|  s    ;;%''rN   c                R     | j                         xr | j                         dk(  S Nr   )r  r  )r   r  s    rK   cpu_zero_dimz4FakeTensor._find_common_device.<locals>.cpu_zero_dim  s!    #AHH->!%%'Q,>rN   c                <   t        | t              sy | j                   |       y  |       }| j                  k(  rr|y |ry r| j                  |y v r"t        t	        | j                  f            ry t        d d d| j                         )Nz,Unhandled FakeTensor Device Propagation for z, found two different devices rI  )r   r   r  r   mapRuntimeError)r   t_is_cpu_zero_dimr  common_devicer  ra   is_cpu_zero_dimmixed_device_fnss     rK   merge_devicesz5FakeTensor._find_common_device.<locals>.merge_devices  s     a,$ !".q/ ,Qxx=("&7O !  !"3 ''s+mQXX-FGH >tfDbcpbqqstut|t|s}~ rN   Tr	  z!Could not find common device for )r  r;  rR   r   r   r   rR   r   )r   objectrR   rS   )rv   aten_foreach_copyr  rX  rx   r  )
ra   	flat_argshas_scalar_only_inputsr  r  r  r  r  r  r  s
   `    @@@@@rK   _find_common_devicezFakeTensor._find_common_devicej  s     !& '&&
	(	?(	 (	T  	C#	 +40]5J%)"!LL/M(T,MdV*TT(444rN   r3   )coeffc                   | j                   !| j                  j                  d       | _         t        | j                   t        j
                        sJ | j                   |z  S )Nnt_tensor_id)r  r   create_symbolic_nested_intr   rx   r   )rJ   r  s     rK   get_nested_intzFakeTensor.get_nested_int  s]    
 '#'>>#L#L! $M $D  $..===##e++rN   c                    | j                         dk(  r| j                         S | j                         dk(  r| D cg c]  }|j                          c}S | D cg c]  }|j                          c}S c c}w c c}w Nr   r3   )r  r!  tolist)rJ   r   s     rK   r  zFakeTensor.tolist  s^    88:?99;XXZ1_,01DDIIK11.23dDKKM33 23s   A3A8)rR   r;  )r   r;  rR   rS   )rR   	list[str])r   r  rR   rS   )NNNN)r   r   r   r   r  r;  r   r  r  r  r4  r  r5  r<  rR   r   )r  r  r  r  rR   rS   )r   r   r   r   rR   r   
ra   r=   r  Sequence[type]r  Sequence[object]r  Mapping[str, object]rR   r  )ra   r=   r  r  rR   ztuple[torch.device, bool])r  zUnion[int, torch.SymInt]rR   torch.SymInt)rR   r   ) rT   rU   rV   __doc__r]   rb  r  r)  r  r  r  rx   ry   r{   r|   	_mode_keyr=  r  setterr  staticmethodr  rL   r  classmethodr1   r!   r  r  r  r  __classcell__r  s   @rK   r   r   z  s
    !!
 +,L')I)+K57
 .DAO
 #"11 ..33I$ $ ]]" "& 
 

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

 "$'5'7G)G) G) 	G)
 %G) 
G)  G)R N5N5%5N5	"N5 N5f +,
, (
, 
	
,4rN   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y) TensorMetadatazK
    The Tensor metadata relevant to hashing FakeTensors when caching.
    ztorch.dtyper  ztuple[_MetadataIntLike, ...]shapestrider;  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_dimc                d   t        j                  |       D ]  }t        | |j                        }t	        |t
        t        t        j                  f      r'g }|j                  ||||       |j                          et	        |t              r|j                  ||       |j                  |        y rp   )dataclassesfieldsr   rV  r   tuplelistrx   Size_prep_args_for_hashclearr   convert_sym_intr   )rJ   resultmodestatefieldr.  id_hashed_objectss          rK   _flatten_intozTensorMetadata._flatten_into  s     !''- 	%ED%**-E%%uzz!:; 35!((?PQ!'')E6*%%fe4e$	%rN   N)r  list[object]r  r   r  r4   rR   rS   )rT   rU   rV   r  r]   r  rW   rN   rK   r  r    s     ''((00$$--MLO  %% % 	%
 
%rN   r  c                   t        |       }| j                  st        |       s| j                  |      sd}| j	                         }t        | j                  | j                  | j                  t        j                  k(  r| j                         nd| j                  | j                  ||t        |       s| j                         j                         nd| j                  | j                   | j#                         | j%                         | j'                         | j(                  | j(                  r| j+                         ndt        |       r| j-                         ndt        |       r| j/                               S d      S )z1
    Extract the TensorMetadata of a tensor.
    )r  NrW   )r   _has_symbolic_sizes_stridesr   is_contiguousr  r  r  r  r   rx   r   r  r  untyped_storagenbytesr  r  r  r  r  r   r  r  r  )r   r  r  s      rK   extract_tensor_metadatar    s    *!,M 	
%%];%%'N		hh%--/
R		,9!,<""$$						
		KKT&q)t'*% $ 15% rN   c                  F    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y
)_DispatchCacheKeyz0
    Key for the FakeTensor dispatch cache.
    tuple[object, ...]r   int	hashvaluec                2    || _         t        |      | _        y rp   )r   hashr  )rJ   tups     rK   rL   z_DispatchCacheKey.__init__3  s    crN   c                X    t        |t              xr | j                  |j                  k(  S rp   )r   r  r   )rJ   others     rK   __eq__z_DispatchCacheKey.__eq__7  s"    %!23MEII8MMrN   c                    | j                   S rp   )r  rI   s    rK   __hash__z_DispatchCacheKey.__hash__:  s    ~~rN   c                h    | j                   D ]#  }t        |t              s|j                          % y rp   )r   r   r5   strip_shape_env)rJ   r   s     rK   r  z!_DispatchCacheKey.strip_shape_env=  s-      	$A!_-!!#	$rN   N)r  r  rR   rS   )r  r  rR   r   )rR   r  rQ   )	rT   rU   rV   r  r]   rL   r  r  r  rW   rN   rK   r  r  )  s)     
N#N$rN   r  c                      e Zd Zy)SingletonConstantN)rT   rU   rV   rW   rN   rK   r  r  G  s    rN   r  T)frozenc                  >    e Zd ZU dZded<   ded<   ded<   eZded<   y	)
_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  r&  rW   rN   rK   r"  r"  K  s%    	 &&$5NM5rN   r"  c                  *    e Zd ZU dZded<   dZded<   y)_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]   r*  rW   rN   rK   r(  r(  _  s     76!OT!rN   r(  c                      e Zd ZU dZded<   y)_DispatchCacheBypassEntryz0
    Entry type for a negative cache entry.
    rZ   r[   NrT   rU   rV   r  r]   rW   rN   rK   r,  r,  n       KrN   r,  c                      e Zd ZU dZded<   y)_BypassDispatchCachez<
    Signals cases that should skip FakeTensor caching.
    rZ   r[   Nr-  rW   rN   rK   r0  r0  |  r.  rN   r0  c                  :    e Zd ZU dZded<   ded<   ded<   ded<   y)	DispatchCacheInfozG
    Information about the state of the FakeTensor dispatch cache.
    r  hitsmissesdict[str, int]bypassessizeNr-  rW   rN   rK   r2  r2    s     IK
IrN   r2  c                  p    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	 	 	 	 	 	 	 	 	 	 	 dE fdZdFdZdGdZedHd       ZedId       Zed e       f	 	 	 	 	 	 	 	 	 dJd       ZdK fd Z	 	 	 	 	 	 	 	 dL fd!ZedHd"       ZedMd#       ZedFd$       Z	 	 	 	 	 	 	 	 	 	 dJd%Z	 	 	 	 	 	 	 	 	 	 dNd&Z	 	 	 	 	 	 	 	 dOd'Z	 	 	 	 	 	 	 	 	 	 dPd(Z 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dQd)Z!	 	 	 	 	 	 	 	 	 	 	 	 	 	 dRd*Z"	 	 	 	 	 	 	 	 	 	 	 	 	 	 dSd+Z#	 	 	 	 	 	 	 	 	 	 	 	 dTd,Z$	 	 	 	 	 	 	 	 	 	 	 	 dUd-Z%	 	 	 	 	 	 	 	 	 	 	 	 dVd.Z&d e       f	 	 	 	 	 	 	 	 	 dJd/Z'	 	 	 	 	 	 	 	 	 	 dWd0Z(	 	 	 	 	 	 	 	 	 	 	 	 dXd1Z)	 	 	 	 	 	 	 	 	 	 dYd2Z* e+d3d4d5d6d7d8d9d:      Z,dZd;Z-	 	 	 	 	 	 	 	 	 	 d[d<Z.	 	 	 	 	 	 	 	 	 	 d\d=Z/dd>	 	 	 d]d?Z0 e+e1jd                  jf                  e1jh                  jj                  e1jl                  jj                  e1jn                  jj                  e1jp                  jj                  e1jr                  jj                  e1jt                  jj                  e1jv                  jj                  e1jx                  jj                  e1jz                  j|                  e1j~                  jj                        Z@dZd@ZA e+e1j                  jj                  e1j                  jj                        ZDd^dAZE	 	 	 	 	 	 	 	 	 	 d_dBZFdddddC	 	 	 	 	 	 	 	 	 	 	 d`dDZG xZHS )ar   ,dict[_DispatchCacheKey, _DispatchCacheEntry]cacher   r  
cache_hitscache_missesr5  cache_bypassesry  Fr   rJ  static_shapesr8  r  zOptional[str]_stackr  rS  nt_tensor_id_counternt_tensor_id_initial_countTN)allow_fallback_kernelsallow_non_fake_inputsr  r>  r   c                  t         j                  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*                  xr | j                   | _        |j(                  j                  j.                  | _        || _        d| _        g | _        || _        t;        j<                         | _        d | _         |jB                  jD                  jF                  | _$        dd l%}|jL                  jN                  jP                  jR                  | _*        | jT                  | _+        y )Nzcreate_mode 0x%xr   r   F),logr`  idr  rL   rB  torch._dynamo.configtorch._functorch.configr   config"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  rJ  enter_stackr  	tracebackextract_stack_stack_tracer?  ry   r{   r|   r  $torch.nested._internal.nested_tensornested	_internalnested_tensor_tensor_id_counterrA  r@  )rJ   rB  rC  r  r>  r   rx   r  s          rK   rL   zFakeTensorMode.__init__  s   $ 			$bh/&<##& ##FF 	# &911&
"
 $!.D!*d!2D %*! ##LL 	*  **11HHMM  :: 0/// 	
 MM  EE 	% &;" %*!  	 #%335 77<<3 LL""00CC 	' %)$C$C!rN   c                &    | j                   | _        y rp   )rA  r@  rI   s    rK   reset_nt_tensor_id_counterz)FakeTensorMode.reset_nt_tensor_id_counter  s    $($C$C!rN   c                B    t        |t              xr |j                  | u S rp   )r   r   r   rJ   r   s     rK   is_our_fakezFakeTensorMode.is_our_fake"  s    !Z(@Q[[D-@@rN   c                ^   t         j                  j                         r?t         j                  j                         rJ t         j                  j	                          S t         j                  j	                         xs0 t        t         d      xr t         j                  j	                          S )Nr  )rx   rB  _is_compiledr@  rA  hasattrr  rI   s    rK   avoid_device_initz FakeTensorMode.avoid_device_init*  s|    99!!#zz..000yy--/// JJ##% Du%B%))*@*@*B
 	
rN   c                    | j                   3dj                  t        j                  | j                              | _         | j                   S )N )r?  joinrU  format_listrW  rI   s    rK   stackzFakeTensorMode.stack5  s7    ;;'')"7"78I8I"JKDK{{rN   rW   c                   t         j                  j                  t         j                  j                  j                        J |       	 | j                  ||||      S # t        $ r t        j                  d        w xY w)Nzfake tensor raised TypeError)	rx   ry   r  r{   r|   dispatch	TypeErrorrE  	exception)rJ   ra   r  r  r  s        rK   r  z!FakeTensorMode.__torch_dispatch__;  sr     HH''(F(F(K(KLT		T	==udF;; 	MM89	s   
A  A>c                   dd l }d }| j                  r5|j                  j                         }|j                  j	                  d       |j                  j                  | j                        }| |ur,| j                  j                  d||f       t        | )         S |j                  j                  |        | j                  j                  dd |f       | S )Nr   TF)rX  re  ry   _only_lift_cpu_tensors_set_only_lift_cpu_tensorsrz   r  rT  r   r  	__enter__r}   )rJ   rx   prev_only_lift_cpu_tensorsmaybe_prev_fake_moder  s       rK   rr  zFakeTensorMode.__enter__N  s    3%)"!!).)H)H)J&HH//5$xx<<T^^L++##+-GH 7$&& HH''-##UD2L$MNrN   c                    | j                   j                         \  }}}|rUt        |   |||       |t        j
                  j                  |       | t        j
                  j                  |       y y y rp   )rT  r   r  __exit__rx   ry   r}   rq  )rJ   abclivert   maybe_prev_only_lift_cpu_tensorsr  s          rK   rv  zFakeTensorMode.__exit__b  sw       "		
 ,GQ1% $/++,@A/;334TU < rN   c                     yrr   rW   r  s    rK   is_infra_modezFakeTensorMode.is_infra_modev  s    rN   c                    t        t        j                  t        j                  t	        t        j
                        t        t        j                              S )z8
        Query the state of the dispatch cache.
        )r2  r   r;  r<  rs   r=  r  r:  r}  s    rK   
cache_infozFakeTensorMode.cache_infoz  s?    
 !%%''../$$%	
 	
rN   c                    d| _         d| _        | j                  j                          | j                  j                          y)z+
        Clear the dispatch cache.
        r   N)r;  r<  r=  r   r:  r}  s    rK   cache_clearzFakeTensorMode.cache_clear  s3    
   "		rN   c                   d}d}	 t        | j                        }| j                  ||||      }|| j                  ||||      S |J |j                         r+|j                  J |j                  j                   }t"        }	nt        j$                  }t&        }	|j)                  |d      }
|
t	        |
t*              r9t        j                  |
j                  xx   dz  cc<   | j                  ||||      S | j-                  ||
|||      }t        xj.                  dz  c_        | j0                  r+t3        |       5  | j5                  |||||       ddd       |S |S | j                  ||||      }	 | j7                  |||       	 | j9                  ||||||      }
 |	|||
       t        xj:                  dz  c_        |S # t        $ r}t	        |t
        j                  j                        r7|j                         dk(  r$t        j                  d|d   |j                         t        j                  |j                  xx   dz  cc<   Y d}~"d}~ww xY w# 1 sw Y   |S xY w# t        $ r}t	        |t
        j                  j                        r7|j                         dk(  r$t        j                  d|d   |j                         t        j                  |j                  xx   dz  cc<    |	||t+        |j                               |cY d}~S d}~ww xY w# t        $ rN}t        j                  |j                  xx   dz  cc<    |	||t+        |j                               |cY d}~S d}~ww xY w)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_keyr0  r   rx   _opsHigherOrderOperatorrV  hc_logr`  r[   r   r=  _dispatch_implcache_on_shape_envfake_tensor_cache_set_cache_key_for_shape_envr:  _set_cache_keyr   r,  _output_from_cache_entryr;  rS  r   _crosscheck_cache_output_validate_cache_key_make_cache_entryr<  )rJ   ra   r  r  r  r  r   er:  set_cache_keyentryoutputs               rK   _cached_dispatch_implz$FakeTensorMode._cached_dispatch_impl  s#    	9"4>>2E//%tV<C ; &&tUD&AA   ##%??...OO55E8M"((E*M		#t$%!:; --ell;q@;**4fEE 225%dDQF%%*%,, /t4 U11&$tVTUM6M $$T5$?	$$T48$	**5#tT66RE 	eS%(##q(#_ $ 	9 4!?!?@IIK#44LGHH
 ))!((3q833	9TUM $ 	
 4!?!?@IIK#44LGHH
 ))!((3q83%&?&IJM	& $ 	 ))!((3q83%&?&IJM	sb   )G <I3I& L 	IB III#&	L/BLLL	M2$AM-'M2-M2c                6   |t        j                         t         j                  j                         t        j                         | j
                  r| j
                  j                  ndg}|j                  r|j                  | j                         g }|r| j                  ||||       |r| j                  ||||       t        t        |            }|D ]1  }t        j                  |t        j                   t"        |             3 |j%                          |S )z
        Create a cache key given the dispatch args. Raises _BypassDispatchCache
        for any situation that precludes caching.
        Nr   )rx   get_default_dtypery   _get_default_deviceis_inference_mode_enabledr  settingsknown_symbolsr   ry  r  r  r  r   finalize	functoolspartialevict_fake_tensor_cache_keyr   )	rJ   r  ra   r  r  
key_valuesr  r   id_hashed_objs	            rK   r  zFakeTensorMode._cache_key  s      ##% HH((* ++- (,~~DNN##4

   djj)*,$$Zu>OP$$Z@QRj 12. 	My001LRUV	 	!
rN   c                   ddl m} t        |t        j                  j
                        r||v ryt        j                  j                  |j                  v rt        d      t        j                  j                  |j                  v r|t        j                  j                  u rot        |||d      \  }}|d   D ]T  }t        |t        j                        s|j                  t        j                   t        j"                  fv sKt        d       yt        d      t        j                  j$                  |j                  v rt        d	      |t        j&                  j(                  k(  rt        d
      || j*                  v rt        d      |j-                         dk(  rt        d      t        j.                  j0                  j3                  |      st        d      |j4                  r\t        j6                  j9                  |j-                         t        j6                  j:                  j<                        rt        d      yy)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   rx   r  r  Tagdata_dependent_outputtagsr0  dynamic_output_shaper  r  r   r"   r  r   r  inplace_view_unsafe_viewr  lift_fnsrV  _libraryutils
is_builtinis_viewry   %_dispatch_has_kernel_for_dispatch_keyDispatchKeyr  )rJ   ra   r  r  r  r   
new_kwargsr  s           rK   r  z"FakeTensorMode._validate_cache_key   s    	J
 tUZZ;;<//
 99**dii7&'>??99))TYY6tzz((( 2tFQU!: (	2 KE "%65;;



K < 33IJJK &'=>>99!!TYY.&~664$$,,,&}554== &v..99;;;&'HII~~##..t4&}55
 <<EHHJJIIK--GG
 ''BCC
<rN   c                   ddl m} t        |t              rE| j	                  ||j                         ||       | j	                  ||j                         ||       y|D ]  }t        |t              ru| j                  |      st        d      |j                  t        d      t        |      rt        |j                   d      t        |      }|j                  || |       t        |t              rt        d      t        |t               r|j#                  ||       t        |t$        t&        f      rt        d      t        |t(        t*        t        f      r| j	                  ||||       t        |t,        j.                        rt        d	      t        |t0        j2                  j4                        rG|j7                  t9        |             |j7                  t;        |             |j7                  |       t        ||      r7|j7                  t=        |             |j7                  |j>                         |j7                  t9        |             |j7                  |        y)
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   )FunctionalizeCtxWrapperNznot our fakeconstant attributez tensorznon-fake tensorzsymbolic shapezfunction argument) r  r  r   rs   r  keysvaluesr   ra  r0  r   r   r   r  r  r   r   r  r   r   r  r  r  FunctionTyperx   fxGraphModuler   r   rF  r  subgraph)rJ   r  r  r  r  r  r  r$  s           rK   r  z"FakeTensorMode._prep_args_for_hashc  s    	JdD!$$VTYY[%ARS$$VT[[]ECTU &	#C#z*'',.~>><<+./CDD %.#**W/EFF237&&vtU;C(*+<==C(%%fc2C'8!45*+;<<C$t!45((e=NOC!3!34*+>??C!5!56 d3i(bg&!((-C!89 d3i( "((6
 d3i(c"M&	#rN   c                   t        |t        t        d       f      ry t        ||      rt	        d      t        |t
              st	        d      |j                  t	        d      |j                  rt	        d      t        |      rt	        d      |j                         D ]$  }t        |      t        |      k(  st	        d       y )Nzunrepresented symbol in outputznon-FakeTensor outputr  zsparse outputzsparse compressed outputzkwarg aliases output)r   r  r   _has_unrepresented_symbolsr0  r   r   r   r   r  rF  )rJ   r  r   ra   r  r  r  kvals           rK    _validate_output_for_cache_entryz/FakeTensorMode._validate_output_for_cache_entry  s     fsDJ/0%eV4 ''GHH &*-&'>?? ??&&';<< &77'&'ABB MMO 	CD$x2f:%*+ABB	CrN   c                j   t        |t        t        j                  t	        d       f      rt        d d d |      S t        t        |            D ],  }t        ||         t        |      k(  st        |d d       c S  d }t        |t        j                  j                        rO|j                  rCt        |      D 	
cg c]  \  }	}
t        |
t              s|	 }}	}
t        |      dk(  sJ |d   }t        |      }t        fd|j                   D              |_        t        fd|j"                  D              |_        j%                  |j&                        |_        |j(                  d nj%                  |j(                        |_        t        d ||      }t+        |fd      }dd	lm} 	 | j1                  ||||      }t        j4                  j7                  |      }t        j4                  j7                  |      }||k7  rt3        d      |S c c}
}	w # |$ r t3        d
      d w xY w)Nr#  r$  r%  r&  )r#  r$  r%  r3   r   c              3  @   K   | ]  }j                  |        y wrp   convert_outputr   r   r  s     rK   r   zBFakeTensorMode._get_output_info_for_cache_entry.<locals>.<genexpr>  s     O1u33A6O   c              3  @   K   | ]  }j                  |        y wrp   r  r  s     rK   r   zBFakeTensorMode._get_output_info_for_cache_entry.<locals>.<genexpr>  s     QA 4 4Q 7Qr  Fr)  r*  )GuardOnDataDependentSymNodezdata dependent symnodezdispatch_key_set mismatch)r   r  rx   r   r   r"  ranger  rF  r  r=   r  	enumerater   r  r  r  r  r  r  r  r(  r  r  r  r0  ry   _dispatch_key_set)rJ   r  r   ra   r  r  r  idxr%  ir   idxsr$  r  entry_for_synth_outputr  synth_outputsynth_key_setkey_sets    `                 rK    _get_output_info_for_cache_entryz/FakeTensorMode._get_output_info_for_cache_entry  s    fsELL$t*=>0 4$v 
 T# 	C$s)}6
*4 #dT 	 dEJJ112t||"+D/K$!QZ65JAKDKt9>!>AwH*62OOOQQQ"'"6"6x7N7N"O %%- %%h&<&<= 	 .
 ":5"
 	V		K88-sD$L 22<@((,,V4G#&'BCCa LD + 	K
 ''?@dJ	Ks   >HH5H   H2c                   ddl m} ddlm t	        |t
        j                  j                        r;||v r7t	        |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 ]  }
| j!                  ||||||
        n| j!                  ||||||       t	        |t              r9|D cg c]  }| j#                  ||||||       }}t        t        |      d
      S | j#                  ||||||      }	t        |	fd	
      S c c}w )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     K   | ]8  }t        |t        j                  t        j                  f      xr  |       : y wrp   )r   rx   r   r   )r   or  s     rK   r   z3FakeTensorMode._make_cache_entry.<locals>.<genexpr>0  sA         1u||U\\:; 1-a01 s   >Azunbacked symbol in HOP z outputNr  Fr  T)r  r  r  r  r   rx   r  r  r  r   r0  r  r   r   r"  r(  r  r  )rJ   r  r   ra   r  r  r  r  non_cacheableoutput_infoout_elementout_elemr)  r  s                @rK   r  z FakeTensorMode._make_cache_entry  s    	JS tUZZ;;<//fe,,,      M
 *-DTF'+RSSfsELL$t*=>7 4$vK ,)^U  fe$% 553dFK
 11sD$ fe$
 !'	  553dFHL  ,"<0$ 
 ??sD$K ,)^U s   E%c           
        |j                   8|j                  ,|j                   |j                  t        usJ |j                  S |j                   #||j                      }t        |t              sJ |S |j                  }|y 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        d d d        |j.                  r t$        j0                  j3                  d       |j4                  r t$        j0                  j7                  d       t        |t$        j8                  j:                        r|j<                  rw|t?        t@        |j                           }t        |t              sJ |jC                         }t#        |       5   |       5  jE                  ||
||	       d d d        d d d        t        | |jF                        S # 1 sw Y   (xY w# 1 sw Y   -xY w# 1 sw Y   BxY w# 1 sw Y   FxY w)Nc                    t        | t              r*|j                  J | j                  |j                        S t        | t              rJ | S rp   )r   r6   r  r  r5   )r.  r  r   s     rK   check_valuezGFakeTensorMode._get_output_tensor_from_cache_entry.<locals>.check_valuey  sJ     %!23222}}S%//::%e_===rN   c              3  0   K   | ]  } |        y wrp   rW   r   r   r  r  s     rK   r   zEFakeTensorMode._get_output_tensor_from_cache_entry.<locals>.<genexpr>  s     Dk!U+D   c              3  0   K   | ]  } |        y wrp   rW   r  s     rK   r   zEFakeTensorMode._get_output_tensor_from_cache_entry.<locals>.<genexpr>  s     F{1e,Fr  r3  )r  r   r  r  T)r.  r  r  r4   rR   zUnion[IntLikeType])$r#  r$  r%  r&  r  r   r   r   r  r  r  r  r  
contextlibnullcontextr  suppress_guardsrQ  rx   empty_stridedr  r   r  r  ry   	_set_conjr  _set_negr  r=   r  r   r  r  set_r  )rJ   r  r  r   ra   r  inplace_argr$  r  r  r  maybe_suppressrE  view_argstorager  s    ` `           @rK   #_get_output_tensor_from_cache_entryz2FakeTensorMode._get_output_tensor_from_cache_entry]  s    %&&''/@@@@'''(u001Kk:666 >> ***	#	,:		 DX^^DDFhooFF$X%<%<eD!!-..6>H>T>T>>%!^^;;N)$/ 	1A 	''nn&44E	 	 HHud+??HHeT*dEJJ112t||Denn56Hh
333..0G-d3 C^5E C

7NE6BC C $x77/	 	 	 	(C C C CsH   K:J4K0K8KK4J>	9KKK	KK#c           
         |j                   r7|j                  D cg c]  }| j                  |||||       }}t        |      S | j                  ||j                  d   |||      S c c}w )z?
        Create a new FakeTensor from the cache entry.
        r   )r*  r)  r  r  )rJ   r  r  r   ra   r  r  outputss           rK   r  z'FakeTensorMode._output_from_cache_entry  s       
 $)#5#5	   88;T4G  >!;;u))!,c4 s   A&c                    dfd	 | j                  ||||      }	  ||       y# t        $ r}t        d| d| d| d|       |d}~ww xY w# 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.
        c                V   t        | t              rIt        |t              sJ t        |       t        |      k(  sJ t        | |      D ]  \  }} ||        y t        | t              rt        |t              r| |k(  sJ y | |J y t        | t
              r2t        |       t        |      k(  r| j                  |j                  u sJ y t        | t        j                        r.t        |t        j                        sJ t        t        | |       y t        dt        |              )NzUnsupported type )r   r  r  zipr  r&   r   rw  rx   r   r   r   r  )rw  rx  lr|  assert_helpers       rK   r  z>FakeTensorMode._crosscheck_cache_output.<locals>.assert_helper  s    !U#!!U+++1vQ'''1I (DAq!!Q'(As#!!S)a1f44fy yA|,Aw$q')aff.>>>.>Au||,!!U\\222"9a3"%6tAwi#@AArN   z*FakeTensor cache crosscheck failure: func=z, args=z	, kwargs=z: Dispatch raised=N)rw  r   rx  r   rR   rS   )r  	Exceptionr  )	rJ   r  ra   r  r  r  true_outputr  r  s	           @rK   r  z'FakeTensorMode._crosscheck_cache_output  s    	B$	--dE4HK	+v.  	<TF CvYvh.@E 	  	<TF CvYvh0 	s+   ( 	A 	AA		A	A4A//A4c                   |xs i }t               5  t        j                  d|||       d d d        |t        v rt        |   |      S t        j	                         t
        j                  k  r(t        j                  ddt        z  |       t               }|t        v rt        |       5   ||i |cd d d        S | j                  r| j                  ||||      S | j                  ||||      S # 1 sw Y   xY w# 1 sw Y   IxY w)Nz%s %s %sz'%sFakeTensorMode.__torch_dispatch__: %s )r(   rE  r`  r  getEffectiveLevelloggingDEBUGrH   rD   _DISPATCH_HANDLE_DIRECTLYrQ  r   r  r  )rJ   ra   r  r  r  incrs         rK   rl  zFakeTensorMode.dispatch  s     2] 	6IIj$f5	6 ***4066  "gmm3II93;PRV +,D ,,-d3 -T,V,- - --dE4HH&&tUD&AA/	6 	6"- -s   C.(C:.C7:Dc                `   
 ddl ddlm} d fd}t        t        j
                        rZ	  |ddddd       t        t        j                         j                                     D ]  \  }\  }}		  |||	        dfS get        j                  j                  j                  r!t        d	fd       t               dfS t        d d dt        |       d       	  |       dfS # t        $ ro
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        $ rt
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# t        $ r&
t        d d dt        |       d       
d

ww xY w)z
        Helper to cross-check fake/real output properties & values,
        and create new fake vals if mismatched.
        Returns tuple of object & boolean, for whether or not it was overwrriten
        r   N)_check_fake_real_tensorsc                ^   t        | t        t        f      rj                  J | j                  j
                  j                  j                  j                  j                         z
  j                  j                  j                         z
  sjj                  j                  j                  | j                  j
                  |      d      j                  j                  urt        d|  d| d      y y t        | t        t         t"        f      r| |k7  rt        d|  d| d      y y )NT)compute_hintmismatch between fake value  and real value r  )r   r   r   r  rw  exprfree_symbols
var_to_valr  unbacked_var_to_val_maybe_evaluate_staticEqStruerj   r  floatr   )fakerealrJ   sympys     rK   _check_fake_real_valsz?FakeTensorMode._maybe_infer_fake.<locals>._check_fake_real_vals  s'   $ 23~~111		33nn//4467nn88==?@
 ==!HHTYY^^T: >   %ww||,
 4:4&@PQUPVVWX ,@ sE4( 4</6tf<LTFRST   rN   Real tensor propagation foundFT)contextsizesstridesr  r  mismatched_fake_kernelc                 4    t               j                  dS Nopr[   rZ   r[   excra   s   rK   <lambda>z2FakeTensorMode._maybe_infer_fake.<locals>.<lambda>D  s    "%d)&)jj- rN   metadata_fnzFReal tensor propagation found a metadata mismatch between fake tensor z and real tensor z,  at outputz, for func: c                 4    t               j                  dS r!  r$  r%  s   rK   r'  z2FakeTensorMode._maybe_infer_fake.<locals>.<lambda>Y  s    &)$i*-**1 rN   zIReal tensor propagation found an output size mismatch between fake shape z and real shape z, at outputz.size(z), for func: c                 ,    t              d  d dS )Nr  r  r"  rZ   )r  ra   r  s   rK   r'  z2FakeTensorMode._maybe_infer_fake.<locals>.<lambda>h  s$    !$i$@FVW[V\"]) rN   zQReal tensor propagation found an output value mismatch between fake output value z and real output value )r  r   r  r   rR   rS   )r  torch._subclasses.fake_utilsr	  r   rx   r   rj   r   rI  *generate_fake_kernels_from_real_mismatchesr   _infer_fake_from_real_tensorr,   r  r  r7  )rJ   ra   pathr  r  r	  r  js_fakes_realr&  r  s   `` ``     @@rK   _maybe_infer_fakez FakeTensorMode._maybe_infer_fake  s    	I	6 dELL)(;!#'"'2 (1TYY[$))+1N'O ##FF)&&9X U{1 \d.&&QQ!,! 4D$EtKK'#f$5dV <#D\N,tf> %dD1 U{y ) ##**UU%0% 8dDI4OO+##'&(9$ @!!'l4&B 	& - ((//ZZ)4)  <D$MtSS/&&,X-=fX F$$*4L>s-vO 	F ) +))-.EdV L  &t~\$A 	sa   D =	E>6	G> 	E;AE6E;!E66E;>	G;AG6
G;$G66G;>	H-!H((H-c                    ddl m} d j                  rt         j                  j                        d fd}t
        j                  |      \  }}	t
        j                  |      \  }
}	  |d||||       t        t        ||
      D cg c]  \  \  }}} j!                  |||       c}}} \  }}t#        |      r	r |        t
        j%                  ||	      S # t        $ rkt        j                  j                  j                  r-t        dfd        |        t         fd	|      cY dS t        d
| d| d       dww xY wc c}}}w )z
        Helper to cross-check fake/real output properties & values,
        and create new fake vals if mismatched, but at the kernel level.
        Means this handles pytree outputs & checks aliasing.
        r   )_check_alias_infoNc                     t        t        j                  j                        j	                               j                  _        y rp   )r  setr  pending_fresh_unbacked_symbols
difference)pending_unbackedrJ   s   rK   _clear_pending_unbackedzXFakeTensorMode._maybe_infer_fake_kernel_from_pytree_out.<locals>._clear_pending_unbacked  s4    <@DNNAABMM$=DNN9rN   r  r  c                 :    t              d j                   dS )Nz>Mismatched aliasing spec between fake kernel and real kernel: r"  r$  r%  s   rK   r'  zIFakeTensorMode._maybe_infer_fake_kernel_from_pytree_out.<locals>.<lambda>  s#    !$i\]`]g]g\hi) rN   r(  c                    t        |       S rp   )r/  )r   ra   rJ   s    rK   r'  zIFakeTensorMode._maybe_infer_fake_kernel_from_pytree_out.<locals>.<lambda>  s    :4qI rN   zGReal tensor propagation found an aliasing mismatch between fake output z and real output z,  for func: rQ   )r-  r6  r  r  r9  r   tree_flatten_with_pathtree_flattenrj   rx   r   rI  r.  r   r.   r  r4  r   tree_unflatten)rJ   ra   fake_inreal_infake_outreal_outr6  r<  fake_paths_leaves	fake_specreal_leavesr   
_fake_path	_fake_out	_real_outfake_leaves	overridesr&  r;  s   ``               @@rK   (_maybe_infer_fake_kernel_from_pytree_outz7FakeTensorMode._maybe_infer_fake_kernel_from_pytree_out~  sx    	C  >>#DNN$Q$QR	 (.'D'DX'N$9,,X6Q	/7Hg> "% ;>%{; 6+ZY &&tZIN"
Y 	N/#%$$[)<<Q % 	&&QQ!,! ()I8  ,##+*,=hZ H""&) 	)	:s+   0C% !E%	E.AE9E?EEc                   ,-./01234567 ddl m} t        j                  f      \  0,t	        0      }|r@0D cg c]  }t        |      st        |       }}t        j                  d|       t        S 0D 	cg c]  }	 j                  |	      s|	 }
}	t        d |
D              xs t        d 0D              2 j                  . j                  v }t        j                  j                   j"                  j$                  u xr; t'        d   t        j(                        xr d   j*                  j                  dk(  }|r|
rt-              rȉ2s|
s|st/        d |
D              s
J  d       0D cg c]!  } j                  |      r|j0                  n|# }}t        j3                  |,      \  }} |i |}t        |      t(        u rH j5                  |      r7t7               5  |j9                         }d d d        .j;                   |d	
      S |rQt=              dk(  rt=              dk(  sJ  d        t        d         t(        u r.j;                   d         S d} j>                  rrt        j                  j                   j"                  j$                  k(  rdv r
d   dk7  rd	}t        j                  j@                  jB                  j$                  k(  rd	} jE                  .0,      \  0}
t/        d |
D              }t'        t        jF                  jH                        rct        jJ                  jL                  jN                  vr<t        jJ                  jP                  jN                  vr|rt=        |
      dk7  r2s |st         jR                  j$                  ur0D cg c]!  } j                  |      r|j0                  n|# }}t        j3                  |,      \  }}t7               5   |i |}d d d        t        jU                        }|D 	cg c]  }	t'        |	t(              s|	 }}	t/         fd|D              }|rt        jW                  t(        . fd|      S |D ]  }.jY                  |        t        j3                  0,      \  t'        t        jF                  jZ                        r^|v rZ j\                  t^        j`                  n j\                  jb                  } 5   |       5   |   i cd d d        cd d d        S  je                  |
       	 	 	 	 d( fd}ddl3m4-m51 tm               336 jn                  rt/        d |
D              rt        1 7fd0D              stp        j                  d       0D cg c]
  } ||       }}t        j3                  |,      \  45ts        jt                        }|sts        jv                  |,      }	  4i 56|syj{                          ts        j|                  j~                  06       nG jn                  r;tp        j                  d|
0 j\                  r j\                  j                  nd        d)-13456 f
d}2r-t               j                        }| | | gi       S ddlCmD} |vr j                        s}ddlCmF}  | v r<2st              r/t/        d |
D              r 5   | |    i       cd d d        S  5   j                  i }!|!t        ur ||!      cd d d        S 	 d d d        dj                  j                  v r;t        d      r/t              s$ 5   | j                  i       cd d d        S t        j                  j                  j                  }"|"%|"j                  v r |"j                   gi S  jn                  r_63ur[ts        jt                        sF j\                  :ts        j                        s%t         6      }#t        d fd!"        ||#      S t        j                  j                  j                  j                  j                               j                  j                  }$|$r}	 t        j                  j                  j                         /t        j                  j                  j                  /fd#      5   5   |$i }# ||#      cd d d        cd d d        S t        D ]-  \  }&}' |&      s |' gi }(|(t        us% ||(      c S  	 d*	 	 	 d+,02 fd%})t              s |)       }* ||*      S 	 t               5   i }!d d d         | j                  !0j                  d      '            S c c}w c c}	w c c}w # 1 sw Y   xY wc c}w # 1 sw Y   xY wc c}	w # 1 sw Y   nxY wd d d        # 1 sw Y   xY wc c}w # tx        $ r"}tp        j                  d|       Y d }~Ud }~ww xY w# 1 sw Y   MxY w# 1 sw Y   #xY w# 1 sw Y   xY w# 1 sw Y   nxY wd d d        n# 1 sw Y   nxY wy# t        $ rb}% jn                  rO63urKts        jt                        s6 j\                  *t         6      }#t        d fd$"        ||#      cY d }%~%S |%d }%~%ww xY w# 1 sw Y   uxY w# t        $ r}+ |)|+      cY d }+~+S d }+~+wt        $ r tp        j                  d&        w xY w),Nr   r  z,FakeTensorMode unrecognized subclass(es): %sc              3  4   K   | ]  }|j                     y wrp   )r
  )r   r  s     rK   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>  s      !
./A))!
   c              3  <   K   | ]  }t        |t                y wrp   )r   r   )r   rw  s     rK   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>  s     :1Av&:s   r3  c              3  8   K   | ]  }|j                   d u  y wrp   r  r   r   s     rK   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>	  s      +,

$&   z. should not have fake inputs without constantsTr+  r3   r  Fr  r	  c              3  8   K   | ]  }|j                   d u  y wrp   r  r   r  s     rK   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>?	       Qa1::T1QrU  c              3  @   K   | ]  }j                  |        y wrp   )may_turn_const)r   r   rJ   s     rK   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>V	  s     P!t2215Pr  c                ,    j                  | d      S )NTrV  )r1  )r   	converterrJ   s    rK   r'  z/FakeTensorMode._dispatch_impl.<locals>.<lambda>[	  s    i88qPT8U rN   c                   t        | t              r| j                  S t        | t              rj                  J | j
                  j                  | j
                  j                  j                  j                  j                        j                  j                  j                              S t        | t              r| j                  S | S rp   )r   r   r  r&   r  rw  r4  r  xreplacer  r  r   real_obj)r   rJ   s    rK   maybe_to_real_tensorz;FakeTensorMode._dispatch_impl.<locals>.maybe_to_real_tensorx	  s     !Z(}}$A|,~~111vv}}FFKK(()B)BCLL:: 
 A/0zz!rN   )compute_unbacked_bindingsfree_unbacked_symbolsc              3  8   K   | ]  }|j                   d u  y wrp   )r  rX  s     rK   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>	  s     M!AMM-MrU  c              3     K   | ]F  }t        |t              xr0  |      xxr$ j                  d uxr t        fdD               H y w)Nc              3  N   K   | ]  }|j                   j                  v  y wrp   )r  r  )r   srJ   s     rK   r   z:FakeTensorMode._dispatch_impl.<locals>.<genexpr>.<genexpr>	  s      VAAT^^%G%GGVs   "%)r   r&   r  r   )r   rw  rc  rJ   symss     rK   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>	  sd        q,/ W!6q!99Wd2W VQUVVWs   AAzpropagate_real_tensors %sz9real-tensor fallback failed for %s: %s; silently ignoringz,SKIPPED propagate_real_tensors %s(%s, %s) %sc           	     F  
 dd l t        j                  d       dfdurt        j                  j
                  j                  sj                  f	
f|        nj                  f	
f|       } t        | t              smt        t              s]t        |       t              k7  rFt        t        t        j                  |             t        t        j                                     nt        |         j                  | d       | S )Nr   zmaybe_propagate_real_tensors %sc                   t        | t              rt        j                  dt	        |       t	        |             || _        t        | j                         |j                               D ]  \  }} ||        t        | j                         |j                               D ]  \  }} ||         | j                         |j                                y t        | t              r |       rt        | j                  j                  j                        r?j                  J j                  j                  | j                  j                  |       y t        | j                  j                  x}j                         ret        |j"                  j                        rD|j$                  dk(  r4j                  J j                  j                  |t'        |             y y y y y y )Nz%maybe_propagate_real_tensors %s -> %sr3   )r   r   rE  r`  rF  r  r  r7  r  r  r&   rw  r  Symbolr  set_unbacked_var_to_valr  lhsrhsr  )r   real_trg  real_src  gorJ   r  s       rK   rq  zOFakeTensorMode._dispatch_impl.<locals>.maybe_propagate_real_tensors.<locals>.go	  sw   a,II?A6
 %+AM%(6;;=%A &	61f&%(V]]_%E &	61f&q'')6+@+@+BC<05J15M!!&&++u||<#~~999>>qvv{{FS"#31UXX>&quuell;EEQJ#~~999>>q#f+N ' < ? 6N0rN   T)peek)r   r  ro  r   rR   rS   )r  rE  r`  rx   r   rI  r.  rN  r   r   r   r/   r  r   r@  r  )rD  rq  r  r  rb  rc  ra   r  nil	real_argsreal_kwargsrE  rJ   s    @@rK   maybe_propagate_real_tensorszCFakeTensorMode._dispatch_impl.<locals>.maybe_propagate_real_tensors	  s   II7>O O0 s" ((//ZZAAv"K0    $LLv"K0   H #8V4&x8X$x.8 f11(;<f11(;< b(H5
 *$..(NOrN   )
meta_tabler   c              3  4   K   | ]  }t        |         y wrp   )r   rX  s     rK   r   z0FakeTensorMode._dispatch_impl.<locals>.<genexpr>$
  s     PQa 00PrQ  zprims::prim_meta_implmissing_fake_kernelc                     dt               iS Nr#  r,  r   s   rK   r'  z/FakeTensorMode._dispatch_impl.<locals>.<lambda>S
  s    c$i) rN   r(  c                      S rp   rW   )ctxs   rK   r'  z/FakeTensorMode._dispatch_impl.<locals>.<lambda>a
  s    S rN   c                     dt               iS r|  r,  r   s   rK   r'  z/FakeTensorMode._dispatch_impl.<locals>.<lambda>r
  s     #d)- rN   c                    t         j                  j                  j                        ry sj	                        st              | t              } t        |       S rp   )rx   r  r  can_generate_trivial_fake_implcan_run_unsafe_fallbackrf   run_fallback_kernel)error	args_specr  ra   has_symbolic_sizesrJ   s    rK   maybe_run_unsafe_fallbackz@FakeTensorMode._dispatch_impl.<locals>.maybe_run_unsafe_fallback
  s]     ~~##BB4H!)E)Ed)K2488}4T:&tT9iOOrN   z*failed while attempting to run meta for %sr?  )r   rB   rR   z1Optional[Union[T, Tensor, torch._C.ScriptObject]])rD  rB   rR   rB   rp   )r  zOptional[RuntimeError]rR   r7  )fr  r  r   r@  _check_for_subclass_check_for_subclass_argr   r  r`  r  ra  r   rL  r  rx   r  r  _to_copyr  r   r   r  rX  r   r   rA  r[  r(   cloner1  r  re  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  rb  rc  r  rK  rE  library_utilsr  MutationCheckerZeroDivisionErrorcheckcheck_aliasing_constraintrc  r  get_fast_op_implsr   r   rw  cpp_meta_supports_symintr   r   	decomposer   rV  rd  stride_incorrect_opry  rP  rI  _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_metarQ  r  r  rn  +wrap_meta_outputs_with_default_device_logic)8rJ   ra   r  r  r  r  has_unrecognized_typesr   r  r   flat_arg_fake_tensorsis_lift_func!device_conversion_skip_const_proprw  const_flat_args
const_argsconst_kwargsr   avoiding_device_initall_constantflat_outflat_out_tensorsr   #maybe_ignore_fresh_unbacked_symbolsra  real_flat_argsr  mutation_checkerr&  rv  	fast_implrw  r   r|  profilesr  maybe_fake_implr  run_impl_checkop_implop_impl_outr  fallbacknot_implemented_errorr  rb  r]  r~  r  rc  r  rs  rt  ru  rE  rh  s8   `` ``                                       @@@@@@@@@@@@rK   r  zFakeTensorMode._dispatch_impl  sl    	J%22D&>B	9 "5Y!?!!*".Ea.HQ" "  %%>@R "!,5 Mq9I9I!9L M M  !
3H!
 
 ;:	:: 	 ..	t}},EIINN++333 .47ELL1.Q##v- 	* !6+D1&)5 0E  GEFG  CL=>d..q1

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

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

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

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

)FF 	 nn..::4F^^--<<[I @4 @,d=f=F7?@ @ @8 (A 	E#NGd#%dDB4B6Bn47DD		E -1	P)	P!	P 	P" ~02H/99
	-d3 *$)&)* ,<<46::h+? = 
 	
K" !N>& &r8 8  N<F F F F FX J %  		O 	z 
; ;" H@ @ @ @ @ $  // +)44T:2?dHUF%-% 8??G'n* *" 	D,-BCC 	MMFM	s@  g9g9g>g>&h6h&h	h h'h'i&h,1	iii $j"j'jAk -j>0j) 	j>		k 3m >	l:m hh$,h5	1ii	i?i::i?jjj&)j2	.j>5	k >kk 	l7Al2*l70l22l7:m?m 	nmn$n
debugprimsr  r  xlavision	torchtext
torchaudio	quantizedc                v    | j                   sy|j                  | j                  v xs |j                         dk(  S )NFzfbgemm::gmm)rB  	namespace+_can_run_unsafe_fallback_allowed_namespacesrV  rJ   ra   s     rK   r  z&FakeTensorMode.can_run_unsafe_fallback
  s:    **
 NNdNNN ,yy{m+	
rN   c                d     g d fd}D cg c]
  } ||       }}|fS c c}w )z
        Checks if the list of tensors are fake tensors.
        If not, try to convert them to fake tensors.
        Returns the original args, kwargs, and a flattened list of (args, kwargs) that are fake tensors.
        c                v   t        | t              s| S 
j                  |       s t        	d      rXt        j
                  j                  	j                  v r2t        j                        \  }}t        dt        	||             t        j                  
j                  nt        j                  }|s[t        | t              r| j                   
urt        d      t        j                        \  }}t        dt        	||             j#                  
|       }n| }j%                  |       |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   ra  rd  rx   r  r  r  r   rA  AssertionErrorr    fake_tensor_tlsrn   rC  r   r   r1  r   )r   r  r  rC  r   r  r]  r  r  ra   rJ   s        rK   validatezFFakeTensorMode.validate_and_convert_non_fake_tensors.<locals>.validate
  s<   a( ##A&4(UYY-C-Ctyy-P#)#8#8I#NLD&(_`klprvx~`  `A  B 
 'EEM ..(GG &
 -!!Z0Q[[5L,-DEE#)#8#8I#NLD&(BBMdTXZ`BaAbd 
  00q9!((-JrN   )r   rB   rR   Union[T, FakeTensor]rW   )	rJ   ra   r]  r  r  r  rw  validated_argsr  s	   `````   @rK   r  z4FakeTensorMode.validate_and_convert_non_fake_tensors
  s@     35	 	@ 099!(1+99444 :s   -c                `      j                   d dd fd}t        ||      S )NFc                R    t         t              s S t        j                        \  j	                         }|r7t        j                   j                  k(   fd       t        t               S +rj                         S j                   xs       S  S )Nc                 (    dj                    d  S )Nz-FakeTensor is wrapped to wrong device, found z, expected r?  )r  r  s   rK   r'  zZFakeTensorMode.wrap_meta_outputs_with_default_device_logic.<locals>.wrap.<locals>.<lambda>  s    KAHH:U`an`op rN   )r   r   r   r  ra  rx   _checkr  r   rB   r1  r6  )	r  ra  r  r]  r  r  ra   r  rJ   s	   ` rK   wrapzHFakeTensorMode.wrap_meta_outputs_with_default_device_logic.<locals>.wrap  s     a($ 224C!* **1-KHH-p Aqz!&) %55dA>>$99a!8=  rN   r  rB   rR   r  )rL  r.   )	rJ   r|  ra   r  r  r  r  r]  r  s	   ` ``` @@@rK   r  z:FakeTensorMode.wrap_meta_outputs_with_default_device_logic
  s7     ..	 !&	 	B a  rN   r  c                  dd l }ddlm} |4| j                  }| j                  sJ d       | xj                  dz  c_         |j
                   ||d            }|j                  j                  j                  d      }| j                  J | j                  j                  | j                  j                  ||      ||      }|S )Nr   )NestedIntNodez1should only called while FakeTensorMode is activer3   intermediate_offsets_or_lengths)valr   )symr  r   )rX  !torch.nested._internal.nested_intr  r@  rT  r   rP  r   EphemeralSourcer  r(  create_symbol)rJ   r  rx   r  r  srcrets          rK   r  z)FakeTensorMode.create_symbolic_nested_int&  s    
 	4C44L##X%XX#%%*%u||M,:;mm""223TU~~)))nn..,, -   / 
 
rN   c                l    t         j                  j                  |j                  v ry|| j                  v S rr   )rx   r  	view_copyr  _cpp_meta_supports_symintr  s     rK   r  z'FakeTensorMode.cpp_meta_supports_symintN  s,    99$))+t5555rN   c                    |j                         t        k  xr< t        |       xr. | j                  |       xr |j                  j
                  dk(   S r  )numelCONSTANT_NUMEL_LIMITr   ra  r  r   r`  s     rK   r[  zFakeTensorMode.may_turn_constU  sV    GGI-- ,!!$$,$$Q'', HHMMV++		
rN   c                   t        d |D              }t        |      }|r|j                         rt        |||d      \  }}|j	                         D ]u  \  }	}
|	dk7  s|j                  |	      r|	nd}	| j                  |
      s2|j                  |	      sD|
j                  Q| j                  j                  |
j                         w y y y )Nc              3  8   K   | ]  }|j                   d u  y wrp   r  rX  s     rK   r   zAFakeTensorMode.invalidate_written_to_constants.<locals>.<genexpr>d  rY  rU  Tr  inputrJ   )
r   r   
is_mutabler"   ru   has_argumentra  r   rL  r   )rJ   ra   r  r  r  any_constantschema_infor   r  kr   s              rK   r  z.FakeTensorMode.invalidate_written_to_constants]  s     Q;PQQ%d+K224.4TMAz #((* W1w,+*B*B1*EAF$$Q'#..q1

...JJ1::VW	 5<rN   )r>  r   r   r   c                   | j                   }|| j                  }|r|J d       d }| j                  j                  | |||||      S )Nz2cannot set both static_shapes and symbolic_context)r  r   r   r   )r  r>  rL  r1  )rJ   r   r>  r   r   r   r  s          rK   r  zFakeTensorMode.from_tensors  sn     )-	  ..M (DCD(I))::- ; 
 	
rN   )rB  r   rC  r   r  r8  r>  rm   r   r   rR   rS   rQ   )r   r  rR   zTypeGuard[FakeTensor])rR   r   )rR   rZ   r  )rR   r   )rw  zOptional[type[BaseException]]rx  zOptional[BaseException]ry  zOptional[TracebackType]rR   rS   )rR   r2  )
r  r4   ra   r=   r  r  r  r  rR   r  )ra   r=   r  r  r  r  rR   rS   )
r  r  r  z?Union[Mapping[str, object], Sequence[object], Iterable[object]]r  r4   r  r  rR   rS   )r  r4   r   r  ra   r=   r  r  r  r  r  r7  rR   rS   )r  r4   r   r  ra   r=   r  r  r  r  r  r   rR   r"  )r  r4   r   r  ra   r=   r  r  r  r  r  r7  rR   r(  )r  r4   r  r"  r   r  ra   r=   r  r  rR   r7  )r  r4   r  r(  r   r  ra   r=   r  r  rR   =Union[Optional[FakeTensor], tuple[Optional[FakeTensor], ...]])r  r  ra   r=   r  r  r  r  r  r  rR   rS   )
ra   r=   r0  r+   r  r  r  r  rR   ztuple[Optional[object], bool])ra   r=   rB  r  rC  r  rD  r  rE  r  rR   zOptional[object])
ra   r=   r  r  r  r  r  r  rR   r7  ra   r=   rR   r   )
ra   r=   r]  r   r  r  r  r0   rR   z%tuple[list[object], list[FakeTensor]])
r|  r  ra   r=   r  r  r  r;  rR   r-   )r  r  rR   r  r  )
ra   r=   r  zSequence[FakeTensor]r  r  r  r  rR   rS   )r   r   r>  rm   r   r9  r   r:  r   r   rR   r   )IrT   rU   rV   r:  r]   r;  r<  r   r  r=  ry  rJ  r@  rA  rL   r^  ra  r=  re  rj  r1   r!   r  rr  rv  r  r~  r  r  r  r  r  r  r  r  r  r  r  r  rl  r4  rN  r  rv   r  r  r  r  r  r  rE  r  r  r  as_strided_scatter
as_stridedas_strided_rF  detachview_as_realview_as_complexr  source_Storage_storage_offset(_sparse_coo_tensor_with_dims_and_tensorsr  r  
lift_freshlift_fresh_copyr  r[  r  r  r  r  s   @rK   r   r     sv   :<E7<JL#%0%5NN5 E3N!&$&!! !##"&((
 (,&+(,(, !]D !%]D  $	]D
 &]D &]D  !]D" 
#]D~DA 
 
  
 
 "$'5'7  	
 % 
 $(V(V #V #	V
 
V(   	
 	
  __ _ 	_
 %_ 
_B-- - 	-
 %- 
-^ADAD AD %	AD
 
ADF:#:# N:# 	:#
 (:# 
:#x*C*C *C 	*C
 *C %*C %*C 
*CXHH H 	H
 H %H H 
'HTFF F 	F
 F %F %F 
"FPG8G8 -G8 	G8
 G8 G8 
G8R ( 	
   
G2,M, , 	,
 , %, 
,d "$'5'7BB B 	B
 %B 
BBnn&-n5;nCIn	&n`J=J= J= 	J=
 J= J= 
J=X^
^
 ^
 	^

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

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

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

 !
 4
 
 

rN   c                n    ddl m}  ||      D ]$  }|j                  D ]  }|| j                  vs  y & y)Nr   )_iterate_exprsTF)r  r  r  r  )r  r  r  rg  r0  s        rK   r  r    sE     EF# nn 	FU000	
 rN   c                    t         j                  j                  |j                  v ri t	               5  d fd}|D cg c]
  } ||       }}t
        j                  ||      \  }} ||i |}	d d d        t               |D ]H  }
t        |
t              st        |
      r j                  |
j                         j                         J d fd}t
        j                  |	      S c c}w # 1 sw Y   xY w)Nc                    j                  |       r\t        j                  | | j                        }| j                  r|j                  | j                                | t        |      <   |S | S )Nr?  )ra  rx   
zeros_liker  r   _coalesced_r  rF  )r  r   r   	inp_implss     rK   to_real_tensorz+run_fallback_kernel.<locals>.to_real_tensor  sY    $$Q'&&q?;;OOANN$45%&	"S'"
HrN   c                "   t        |       vr9t        | t              r)t        |       s| j	                         j
                  v rt        | t              r7t        |       v rt        |          S j                  j                  |       S | S rp   )rF  r   r   r   r   _cdatarL  r1  )r  r   r  orig_not_implemented_exceptionstoragess    rK   map_outz$run_fallback_kernel.<locals>.map_out  s    a5	!q&!!!$  "))X500a !u	! A'' 66GG	STUUHrN   )r  rB   rR   zUnion[T, Tensor]r  )rx   r  r  r  r(   r   rA  r8  r   r   r   addr   r  r.   )r   ra   r  r  r  r  rw  r  r  r|  r  r
  r  r	  s   `   `       @@rK   r  r    s     yy*,,I 
 "	 1::1^A&:	:,,Y	Bf$!&!"  &)UH 8a  #Q--/6678   ??7A&&C ;" "s   C:C5#C:5C::Dc                .    |j                          || |<   y rp   )r  r:  r   r  s      rK   r  r    s    
 E#JrN   c                    || |<   y rp   rW   r  s      rK   r  r    s    
 E#JrN   c                  4    e Zd ZddZ	 	 d	 	 	 	 	 	 	 	 	 ddZy)FakeCopyModec                    || _         y rp   )r   )rJ   r   s     rK   rL   zFakeCopyMode.__init__  s	    "rN   Nc                   |r|ni }|t         j                  j                  j                  k(  r<t	        |d   t
              sJ  || 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                  j                  |d      }||t        |      <   |S t         j                  j                         5   ||i |cd d d        S # 1 sw Y   y xY w)Nr   T)r>     r3   )rx   ry   
TensorBaser  r   r   r   r  __deepcopy__r  r   rs   r  r   rF  DisableTorchFunctionSubclass)rJ   ra   r  r  r  r   memor   s           rK   __torch_function__zFakeCopyMode.__torch_function__  s9    "r 588&&,,,d1gv...**47$*GKQ  V(((t9>c&kQ&666&$q'*FS*_-tAw7D&zT!BvJ''..,,V4,HC"DFJ668 -T,V,- - -s   4EE)r   r   rR   rS   )rW   N)
ra   r=   r  r  r  r  r  zOptional[Mapping[str, object]]rR   r   )rT   rU   rV   rL   r  rW   rN   rK   r  r    sD    # "$15-- - 	-
 /- 
-rN   r  c                    t        |       dk(  rt        | d   t              sJ | d   j                  j                  rt        j                  d      S | d   j                  S )Nr3   r   r3  )r  r   r   r   rJ  rx   r  r  r  s    rK   _device_handlerr    sT     t9>ja*===Aw--||F##Aw"""rN   c                &    t        d | D              S )Nc              3  2   K   | ]  }t        |        y wrp   )r  r   s     rK   r   z&_check_for_subclass.<locals>.<genexpr>.  s     =a&q)=r   )r   )r  s    rK   r  r  -  s    =9===rN   c                    t        | t               xrJ t        | t              xr8 t        |       t        uxr% t        |       t        j
                  j                  uS rp   )r   r   r   r   rx   r  r  r   s    rK   r  r  1  sQ    q*%% 	.q&!	.G6!	. G588---	rN   c                d    t        d t        t        | d         j                         D              S )Nc              3  2   K   | ]  }t        |        y wrp   r  r   rg  s     rK   r   z<lambda>.<locals>.<genexpr><  s      4A4r   r   )r  r   r   r7  r  s    rK   r'  r'  <  s,    e 4VT!W-2244 / rN   c                d    t        d t        t        | d         j                         D              S )Nc              3  2   K   | ]  }t        |        y wrp   r"  r#  s     rK   r   z<lambda>.<locals>.<genexpr>?  s      6A6r   r   )r  r   r   r  r  s    rK   r'  r'  ?  s,     6VT!W-4466 1 rN   c                V    t        t        t        | d         j                               S r  )r  r   r   r  r  s    rK   r'  r'  B  s"    VT!W,,.9 rN   )_device_not_kwarg_ops_is_tensor_constructor_like_tensor_constructorscontains_tensor_typesr  r  r  r  c                h    | t         j                  v r t         j                  j                  |        y y rp   )r   r:  r   r  s    rK   r  r  \  s)    
n"""  % #rN   c                    t         j                  d       t         j                  dt        j                         t         j                  dt        j                         t        j
                  } | rjt         j                  d       t        d | D              }t        | j                         d       D ]#  \  }}t         j                  d|d	z   | d
|       % y y )NzFakeTensor cache stats:z  cache_hits: %sz  cache_misses: %sz  cache_bypasses:c              3  2   K   | ]  }t        |        y wrp   )r  )r   r  s     rK   r   z#dump_cache_stats.<locals>.<genexpr>i  s     -qCF-r   c                    | d    S rF   rW   )r  s    rK   r'  z"dump_cache_stats.<locals>.<lambda>j  s    AaD5 rN   r  z    %-*s %sr3   r  )	rE  infor   r;  r<  r=  maxsortedru   )r6  widthr  r   s       rK   dump_cache_statsr3  a  s    HH&'HH!:!:;HH!>#>#>?,,H$%-H--8>>+A 	;DAqHH]EAI!Aw:	; rN   c                &   dfd}|j                         dk7  r |d|j                                 t        |j                               D cg c]5  }t        j                  j
                  j                  | j                        7 }}dg|j                         z  }t        |j                               D cg c]	  \  }}||f }	}}|	j                  d        d}
|
}|	D ]P  \  }}||
k7  r' |d|j                   d	|j                          d
       |||<   |
|j                  |   z  }
|||   z  }R | 5  t        j                  |||j                  |j                  |j                        cd d d        S c c}w c c}}w # 1 sw Y   y xY w)Nc                <    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  rc  )r[   r#  s    rK   unsupportedz1_infer_fake_from_real_tensor.<locals>.unsupportedq  s1    **,((9VH EKL
 	
rN   r   z'a return has a non-zero storage offset rS  c                    | d   | d    fS r  rW   r  s    rK   r'  z._infer_fake_from_real_tensor.<locals>.<lambda>  s    !qte} rN   r  r3   z(a return was not dense in memory (sizes z	 strides ))r  r  r   )r[   rZ   rR   rS   )r  r  r  rx   r  r  allocate_sizer  r  r  sortr  r  r  r  r   )r  r#  rE  r6  r   
fake_shapefake_stridesr  rg  r  expectedfake_strides    `          rK   r/  r/  n  s   
  A%5h6M6M6O5PQ	
 x||~& 	  ..t~~>J  4(,,.(L&/0A&BCFC3xCGCLL,L-HK 43=:8>>:J)T\TcTcTeSffgh (ShnnS11!JsO34 
 
""??..??

 
5 D
 
s   :E<;F:8FFc                   | j                   J t        j                  |      \  }}t        d |D              st	        d|j
                         |D cg c]  }t        | ||       }}t        j                  ||      S c c}w )Nc              3  P   K   | ]  }t        |t        j                           y wrp   )r   rx   r   rT  s     rK   r   z5inferred_fake_kernel_from_real_out.<locals>.<genexpr>  s     Bqz!U\\*Bs   $&zPpropagate_real_tensors: we don't support operators that return non-Tensors. Got )r  r   r@  r   r  r   r/  rA  )r  r#  rE  real_flat_outspecr   fake_flat_outs          rK   r  r    s     >>%%%
 !--h7M4BMBB  "

|-
 	

 IVV11$A>VMV  55 Ws   B)ru   rB   rR   zdict[T, Literal[True]])rR   z2Generator[Optional[TorchDispatchMode], None, None])r   r   rR   zGenerator[None, None, None])r   r   r    list[Union[Tensor, int, SymInt]]rR   rD  )r   r  rR   zTypeGuard[Tensor])r   r  rR   zOptional[FakeTensorMode])ra   r=   rR   ztorch._C._SchemaInfor  )r   ztype[T]r   r-   rR   zlist[T])r   r  rR   r   )r  r;  rR   rS   )r   r   rR   r  )r  r4   r  r7  rR   r   )r   r   ra   r=   r  r  r  r-   r  r  rR   r   )r:  r9  r   r  r  _DispatchCacheEntryrR   rS   )r  r  rR   r;  )r  r  rR   r   )r   r  rR   r   )r   r  rR   rS   rQ   )r  r   r#  torch._ops.OpOverloadrE  torch.TensorrR   rG  )r  r   r#  rF  rE  r   rR   r   )
__future__r   atexitr  r  r  r  r"  r^  	threadingrU  r  typingr   collectionsr   r   r   r   r   r	   r
   r   r   r   typing_extensionsr   r   r   rx   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  rH   rD   r  rY   r`   rd   rf   rh   rj   localrl   r  rv   contextmanagerr   r   r   r   r   r:  r   r   r   r   r   rG  rQ  rX  rZ  rb  r   r  r  r  r  r  r"  r(  r,  rE  r  r0  r2  r   r  _StoragePointerr  r  r  r  r  r  r  r  r  r  r  r7  r  r  r  r  r  r  profiler_record_function_exit_RecordFunctionr  torch._subclasses.fake_implsr'  r(  r)  r*  r  r  r  r  r  registerr3  r/  r  rW   rN   rK   <module>rs     s   "       	      # ! X X X - !  , , 3 3 T ? 8 , 5  % 9 8 ; - 1 7 / W V $ 4 R R FF#$%Og!		)	)(4J	K..::8EVW 			CLzz~~   \   ,   <   <   <   L  3IOO 3  /& - - , ,>%"02 . . 	D 	D@
$e eP 
 
 @@ @ @,B B>E >EBT4 T4n
 &79LLM  
*% *%  *%Z#L 
$ $  $8	 	 
$6 6  6$ 
$
" 
"  
" 
$     8:S ST 
$9    
$   (o
& o
d7 

#7
	
='='
='  =' 	='
 %1=' ='@7	  
	7	  
	 -$  -F#0> 
IINN!!?	IINN " 
IINN!! $ 
IINN!!)) ,  (	IINN''	IINN$$	IINN%% 
II,,<< 	 	 	&
 	; 	;9

9
39
?K9
9
x6
636?B66Gc  )SV3/g//;M0MN 	s   #W% %X*"XX