
    Ph1                       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mZmZmZmZmZmZmZmZ d dlmZ d dlZd dl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! d dl"m#Z# d d	l$m%Z% d d
l&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8 eZ9 ejt                  e;      Z<ejz                  j}                  e;d      Z?ej                  j                  ZB ed      ZCeZDej                  j                  j                  ZGdZHd aI G d d      ZJe	 G d deK             ZLe	 G d deK             ZMe	 G d deK             ZNe	 G d deK             ZOeGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  fZ[eGj                  fZ]d Z^d  Z_eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  eGj                  j                  fZne j                  d!        Zp ej                  d      d"efd#       Zrd$ Zsd% Zt ej                  d      d&        Zu ej                  d      d'        Zvd(eeC   d)e2fd*Zw G d+ d,      Zxg ayd-eeegezf   ef   fd.Z{ e{d/       d0        Z| e{d1       d2        Z}d3 Z~ e{e~      d4        Z e{eGj                   j                        d5        Z e{eGj                  j                        d6        Z e{d7       d8        Z e{d9       d^d:       Z e{d;       d<        Z e{d=       d>        Z e{d?       d@        Z e{dA       dB        ZdC ZdD Z e{eGj                  j                        dE        Z e{eGj                  j                        dF        Z e{eGj                  j                         e{eGj                   j                         e{eGj"                  j                         e{eGj$                  j                        dG                             Z e{eGj                   j                         e{eGj$                  j                        dH               Z e{eGj*                  j                         e{eGj,                  j                        dI               Z e{dJ       dK        Z e{dL       dM        Zi Zd"efdNZdO ZdP Z ej                  d      dQ        Z ej                  d      dR        Ze j                  dS        Zd"efdTZ G dU dV      Z G dW dXej                        Z G dY dZe0      Zd[ Z G d\ d]e+      Zy)_    N)	dataclass)	AnyCallableDictListOptionalTupleTypeTypeVarUnion)ReferenceType)Source)
OpOverload)elementwise_dtypesELEMENTWISE_TYPE_PROMOTION_KINDis_boolean_dtypeis_float_dtypeis_integer_dtype)MetaConverter)render_call)normalize_function)StorageWeakRef)TorchFunctionMode)no_dispatch)is_traceable_wrapper_subclassTorchDispatchMode)PyTreetree_map)countcount_label)	WeakIdRefnot_implementedT   c                       e Zd Zd Zd Zy)IncrementRecursionCountc                     t         dz  a y Nr$   RECURSION_COUNTselfs    hC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_subclasses/fake_tensor.py__init__z IncrementRecursionCount.__init__>       1    c                     t         dz  a y r(   r)   r+   s    r-   __del__zIncrementRecursionCount.__del__B   r/   r0   N)__name__
__module____qualname__r.   r2    r0   r-   r&   r&   =   s    r0   r&   c                       e Zd ZU eed<   y)UnsupportedFakeTensorExceptionreasonN)r3   r4   r5   str__annotations__r6   r0   r-   r8   r8   G   s    Kr0   r8   c                       e Zd ZU eed<   y)DynamicOutputShapeExceptionfuncNr3   r4   r5   r   r;   r6   r0   r-   r=   r=   L       
r0   r=   c                       e Zd ZU eed<   y)DataDependentOutputExceptionr>   Nr?   r6   r0   r-   rB   rB   Q   r@   r0   rB   c                       e Zd ZU eed<   y)UnsupportedOperatorExceptionr>   Nr?   r6   r0   r-   rD   rD   V   r@   r0   rD   c                 $    | j                   dk(  ryy)NhpuFTtypedevices    r-   is_noncontiguous_supportedrK   o   s    {{er0   c                     t         j                  j                  j                         }| j	                  |      xs  t        d | j                         D              S )Nc              3   2   K   | ]  }t        |        y wN)contains_tensor_types.0es     r-   	<genexpr>z(contains_tensor_types.<locals>.<genexpr>w   s      0*?Qa *?   )torch_C
TensorTypegetisSubtypeOfanycontainedTypes)rH   tensor_types     r-   rO   rO   u   sO    ((%%))+KK( C 0*.*=*=*?0 - r0   c               #   *  K   t         j                  j                  t         j                  j                  j                        } 	 |  |  t         j                  j                  |        y y # |  t         j                  j                  |        w w xY wwrN   )rU   rV   _unset_dispatch_mode_TorchDispatchModeKeyFAKE_set_dispatch_mode)olds    r-   unset_fake_temporarilyrc      sl     
((
'
'(F(F(K(K
LC-	?HH'', 3?HH'', s   ABA, 	#B,$BBr>   c                 .   t        | t              sJ | j                  }t        d |j                  D              ryt        |j                        dk(  xrA |j                  d   j                  t        j                  j                  j                         u S )Nc              3   F   K   | ]  }t        |j                          y wrN   )rO   rH   )rQ   args     r-   rS   z)_is_tensor_constructor.<locals>.<genexpr>   s     
G6Fs *6Fs   !Fr$   r   )
isinstancer   _schemarZ   	argumentslenreturnsrH   rU   rV   rW   rX   )r>   schemas     r-   _is_tensor_constructorrm      sv    dJ'''\\F

Gf6F6F
GG 	FNNq XV^^A%6%;%;uxx?R?R?V?V?X%Xr0   c                    t        | t              ryt        |       rht        |       j	                  |       \  }}|D cg c]  }t        | |       }}t        d |D              }t        d |D              }||k(  sJ d       |S t        | t        j                        rht        j                  |       rSt        j                  j                         }t        j                  j                  j                  | |      }t        |      S yc c}w )NTc              3   2   K   | ]  }t        |        y wrN   is_fakerQ   xs     r-   rS   zis_fake.<locals>.<genexpr>        =+<awqz+<rT   c              3   2   K   | ]  }t        |        y wrN   rp   rr   s     r-   rS   zis_fake.<locals>.<genexpr>   rt   rT   z got mixed fake and real tensors!F)rg   
FakeTensorr   rH   __tensor_flatten__getattrallrZ   rU   Tensor_is_functional_tensorrV   $_functionalization_reapply_views_tls
_functorch_unwrap_functional_tensorrq   )	rs   attrs_attrflattened_tensorsall_fakeany_fakereapply_views	unwrappeds	            r-   rq   rq      s    !Z $Q'7--a0q:?@%$WQ-%@=+<===+<==8#G%GG#	Au||	$)D)DQ)GEEGHH''AA!]S	y!! As   Dc           	         t        | t              r| j                  S t        |       rR| j	                         \  }}|D cg c]  }t        t        | |             }}|d   t        fd|D              sJ S t        | t        j                        rht        j                  |       rSt        j                  j                         }t        j                  j                  j                  | |      }t        |      S y c c}w )Nr   c              3   &   K   | ]  }|u  
 y wrN   r6   )rQ   rs   ms     r-   rS   z&maybe_get_fake_mode.<locals>.<genexpr>   s     )5a165s   )rg   rv   	fake_moder   rw   maybe_get_fake_moderx   ry   rU   rz   r{   rV   r|   r}   r~   )tinner_tensor_namesr   t_namemodesr   r   r   s          @r-   r   r      s    !Z {{$Q' ! 4 4 6ABT
BT6 23BT 	 
 !H)5))))	Au||	$)D)DQ)GEEGHH''AA!]S	"9--
s    C>c                 T    t         j                  j                  | j                        S rN   )rU   rV   _SchemaInforh   r>   s    r-   get_schema_infor      s    88--r0   c                     ddl m} t        j                  j                  }t        |      D cg c]  }t        ||       }}||    |v S c c}w )Nr   decomposition_table)torch._decompr   rU   _decompdecompositionsdirrx   )r>   r   r   r   decomp_attrss        r-   torch_decomp_decompositionsr      sL    1]]11N>A.>QR>QdGND1>QLRt$44 Ss   A
tytreec                 p    t         j                  |      }|D cg c]  }t        ||       s| c}S c c}w rN   )pytreetree_leavesrg   )r   r   	flat_valselems       r-   tree_flatten_onlyr      s3    ""4(I&?YT*T2*>DY???s   33c                       e Zd ZU ed        Zeed<   eee	e
   f   ed<   d Zd Zd Zd Zd Z	 	 dd
d
d	ddZd Zd	d
d
d
d	ddZy
)FakeTensorConverterc                 .    | j                   j                  S rN   )meta_convertertensor_memor+   s    r-   r   zFakeTensorConverter.tensor_memo   s    ""...r0   r   constant_storage_mappingc                 0    t               | _        i | _        y rN   )r   r   r   r+   s    r-   r.   zFakeTensorConverter.__init__   s    +o )+%r0   c                 "   t        |t              r|j                  J t        |j                  j	                               }|| j
                  vrg | j
                  |<   | j
                  |   j                  t        j                  |             y rN   )	rg   rv   constantr   _typed_storager   appendweakrefref)r,   fake_tensorweak_sts      r-   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Or0   c                     t        |t              rJ t        |j                               }|| j                  vry | j                  |   D ]#  } |       }||j                          d |_        % | j                  |= y rN   )rg   rv   r   r   r   _fix_weakrefr   )r,   tensorr   weak_tensor_reftens        r-   invalidate_constant_aliasesz/FakeTensorConverter.invalidate_constant_aliases  s|    fj111 !6!6!89$777#<<WEO!#C  "#	  F ))'2r0   c                     t        |      | j                  v r*| j                  t        |         }|j                          |S y rN   )r!   r   r   )r,   r   outs      r-   	_get_memozFakeTensorConverter._get_memo  s<    Q<4+++""9Q<0CJr0   c                     t        |      t        j                  |       fd}t        j                  ||       || j                  <   y )Nc                  R            } | y | j                   j                  d        y rN   )r   pop)self_refself_weak_refths    r-   del_tenz4FakeTensorConverter.set_tensor_memo.<locals>.del_ten)  s)    $H  $$R.r0   )r!   r   r   finalizer   )r,   r   vr   r   r   s       @@r-   set_tensor_memoz#FakeTensorConverter.set_tensor_memo"  sC    q\  D)	/ 	G$ r0   FN)sourcesymbolic_contextmemoized_onlyc                   |sW|sU|rSt         j                  j                  j                         x}r)|j                  v r|j                     }|j
                  }| j                        }	|	|	S |ry j                  j                  rt        d      t              t         j                  j                  u rrJ fd}
| j                  ||
||      }|t        u rt        d      r| j                  |       |S )Nzquantized nyi in meta tensorsc                 t    t               5  t         |        rnd       cd d d        S # 1 sw Y   y xY w)Nr   )r   rv   )make_meta_texisting_devicer   make_constantr   s    r-   mk_fake_tensorz<FakeTensorConverter.from_real_tensor.<locals>.mk_fake_tensorQ  s.     !M#"/QT	 s   .7)	shape_envcallbackr   r   zmeta converter nyi)rU   _guardsTracingContexttry_gettensor_to_contexttensor_sourcer   rJ   is_quantizedr8   rH   nn	Parameterr   NotImplementedr   )r,   r   r   r   r   r   r   r   tracing_context
maybe_memor   r   r   s    ```        @r-   from_real_tensorz$FakeTensorConverter.from_real_tensor3  s     9"'--">">"F"F"HHH999'6'H'H'K$-;;F^^A&
!((>>01PQQ7ehh((($$$	  !!#- " 
 . 01EFF--c2
r0   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)rJ   rH   r   rv   r   )r,   r   r   rJ   r   r   s         r-   from_meta_and_devicez(FakeTensorConverter.from_meta_and_devicep  sr    HHMMV#	J1!((--I	J#^^A&
!Av.Q$
r0   )r   r   r   r   r   c          	      2    | j                  |||||||      S )Nr   r   r   r   )r   )r,   r   r   r   r   r   r   r   s           r-   __call__zFakeTensorConverter.__call__  s1     $$-' % 
 	
r0   FN)r3   r4   r5   propertyr   r   r;   r   r   r   r   r.   r   r   r   r   r   r   r   r6   r0   r-   r   r      s    / / "!">43F#FGG+P3!* : :z	, 
r0   r   run_impl_checkc                       fd}|S )Nc                     t        t              rt        j                  fd| f       | S t        j                  | f       | S )Nc                     | k(  S rN   r6   )r>   r   s    r-   <lambda>z:register_op_impl.<locals>.impl_decorator.<locals>.<lambda>  s
    DN4Jr0   )rg   r   op_implementationsr   )op_implr   s    r-   impl_decoratorz(register_op_impl.<locals>.impl_decorator  sB    nj1%%'JG&TU  %%~w&?@r0   r6   )r   r   s   ` r-   register_op_implr     s     r0   c                 ,    t        |       xs | t        v S rN   )rm   _like_tensor_constructorsr   s    r-   r   r     s    (.S$:S2SSr0   c                    |t         vsJ t        |||d      \  }}|t        v r"|d   j                  }|j	                  d      f}nt        j                  d      }d}|j	                  dd       }||n|}t        j                  d      |d<   t        |       5   ||i |}d d d        t        | |      S # 1 sw Y   xY w)NTargskwargsnormalize_to_only_use_kwargsinputcpur6   rJ   r   )_non_kwarg_device_constructorsr   r   rJ   r   rU   in_kernel_invocation_managerrv   )	r   r>   r   r   r   
new_kwargsdefault_device
out_devicers	            r-   constructorsr     s     5555&4TMAz ((#G,33w') e,$/J)5>J <</Jx 
&i	0$%*% 
1iJ// 
1	0s   	B77C c                 n    | t         j                  j                  t         j                  j                  fv S rN   )atentoprim_DevicerJ   r   s    r-   r   r     s     t(;(;TWW^^'LLr0   c                 4   t        |||d      \  }}|d   }|r|n|d   j                  }t        j                  d      |d<   |j                  d      }t	        |       5   ||fi |}	d d d        | j
                  j                  | 	|      S # 1 sw Y   &xY w)NT)r   rJ   r   r   )r   rJ   rU   r   r   fake_tensor_converterr   )
r   r>   r   r   r   r   input_devicer   inpr   s
             r-   non_kwarg_tor	    s    &dFMAz h'L!-:g3F3M3MJ <</Jx
..
!C	%i	0#
# 
1 **??1j  
1	0s   
BBc                     | j                   dvry| t        j                  j                  u ry| j	                         }d|v ryy)N)r  primsFfftT)	namespacer  _fft_c2cdefaultname)opop_names     r-   stride_incorrect_opr    s@    	||,,	T]]"""ggiGr0   c                     d | j                   rat        fdt        j                  ||j	                               D              }|s)t
        j                  ||f      \  }}t        | |||d       S t        |      )Nc                     t        | t              r| j                  S t        | t        j                  t        j
                  t        j                  f      ryy)NTF)rg   rv   _has_symbolic_sizes_stridesrU   SymIntSymFloatSymBoolrs   s    r-   is_symbolicz3wordaround_stride_incorrect_op.<locals>.is_symbolic  s;    a$000a%,,FGr0   c              3   .   K   | ]  } |        y wrN   r6   )rQ   rs   r  s     r-   rS   z1wordaround_stride_incorrect_op.<locals>.<genexpr>  s      
$JqKN$Js   )	allow_fallback_kernelsrZ   	itertoolschainvaluesr   tree_flattenrun_fallback_kernelrD   )r   r>   r   r   require_dynamic	flat_args	args_specr  s          @r-   wordaround_stride_incorrect_opr&    sw     '' 
$-OOD&--/$J
 
 #)#6#6f~#F Iy&y$	9dSS
&t
,,r0   c                 T    t        |       5   ||i |cd d d        S # 1 sw Y   y xY wrN   )r   r   r>   r   r   s       r-   
resize_as_r)    s#    	%i	0T$V$ 
1	0	0s   'c                 "    t        | |g|i |S rN   )r   r(  s       r-   (_sparse_coo_tensor_with_dims_and_tensorsr+    s     	49$9&99r0   c                     t         j                  j                  | j                  v xrO | t        j
                  j                  t        j                  j                  t        j                  j                  fvS rN   )
rU   Tagdynamic_output_shapetagsr  indexrz   nonzeror  repeat_interleaver   s    r-   r   r     sV    //499< TJJt||33T5K5K5R5RS	TTr0   c                     t        |      rN   )r=   r(  s       r-   	dyn_shaper4    s     &d
++r0   c                 :    | t         j                  j                  u S rN   )r  r2  rz   r   s    r-   r   r     s    tt'='='D'DDr0   c                     |U| j                   | j                   j                  st        |      | j                   j                         }ddlm}  ||       |j                  |      S )Nr   )_constrain_range_for_size)r   allow_dynamic_output_shape_opsr=   create_unbacked_symint%torch.fx.experimental.symbolic_shapesr7  	new_empty)r   r>   repeatsoutput_sizer7  s        r-   repeat_interleave_tensorr>    sa    '&&EE-d33))@@B 	T!+.[))r0   c                 b    | t         j                  j                  j                  j                  u S rN   )rU   opsr  _local_scalar_denser  r   s    r-   r   r   !  s    tuyy~~'I'I'Q'QQr0   c                    | j                   | j                   j                  st        |      t        |j                        r| j                   j                         S t        |j                        r| j                   j                         S t        |j                        r| j                   j                         S t        d|j                         )Nz local_scalar_dense/item NYI for )r   allow_scalar_outputsrB   r   dtypecreate_unbacked_symfloatr   r9  r   create_unbacked_symboolNotImplementedError)r   r>   rf   s      r-   local_scalar_denserH  !  s    ")*=*=*R*R*400cii "";;==	#))	$""99;;	#))	$""::<<!$DSYYK"PQQr0   c                 b    | t         j                  j                  j                  j                  u S rN   )rU   r@  r  r1  r  r   s    r-   r   r   0  s    tuyy~~'='='E'EEr0   c                    | j                   | j                   j                  st        |      |j                  | j                   j	                         }t
        j                  dz
  }ddlm}m	}  ||j                               s,|j                         dkD  rt        |j                               } |||       ||_        |j                  |_        |j                  |j                  |j!                         ft"        j$                        S )Nr$   r   r7  has_free_symbols   max)rD  )r   r8  r=   nonzero_memor9  sysmaxsizer:  r7  rL  numelint_nonzero_memo_version_nonzero_memo_vcr;  dimrU   int64)r   r>   rf   nnzmaxvalr7  rL  s          r-   r1  r1  0  s     	#""AA *$//
!!88: q	

  		,
 yy{QSYY[)!#62"||==#**CGGI6ekk=JJr0   c                 b    | t         j                  j                  j                  j                  u S rN   )rU   r@  r  masked_selectr  r   s    r-   r   r   \  s    tuyy~~'C'C'K'KKr0   c                    | j                   | j                   j                  st        |      | j                   j                         }t        j
                  dz
  }ddlm}m}  |t        j                               s4t        j                         dk\  rt        t        j                               } |||       |j                  |f      S )Nr$   r   rK  rM  rN  )r   r8  r=   r9  rQ  rR  r:  r7  rL  rf   rS  rT  r;  )r   r>   r,   maskrZ  r[  r7  rL  s           r-   r]  r]  \  s     	#""AA *$//



4
4
6C [[1_F
 CIIK(99;!%Fcv.>>3&!!r0   c                 N    t         j                  j                  | j                  v S rN   )rU   r-  data_dependent_outputr/  r   s    r-   r   r   z  s    uyy>>$))Kr0   c                     t        |      rN   )rB   r(  s       r-   data_deprc  z  s    
&t
,,r0   c                     |D ]<  }||j                   t        j                  t        j                  fv s3t	        |        y rN   )rD  rU   booluint8r=   )r>   r,   indicesr0  s       r-   check_no_bool_index_tensorsrh    s5    U[[0I!I-d33 r0   c                    t        |||d      \  }}|d   j                  }t        |       5   ||i |}t        |      s|j	                  |j
                        }d d d        |d   u r|S t        | ||      S # 1 sw Y   xY wNTr   r   )r   rJ   r   rK   r;  shaperv   )r   r>   r   r   r   r   r   r   s           r-   )run_and_return_new_tensor_of_input_devicerl    s    &4TMAz G$++J	%i	0D#F#)*5--		*C 
1
 j!!
ij11 
1	0s   /A::Bc                     ddl m} t        |||d      \  }}|d   j                  }| 5   ||i |}|j	                  |      cd d d        S # 1 sw Y   y xY w)Nr   )meta_index_TensorTr   r   )torch._meta_registrationsrn  r   rJ   r  )	r   r>   r   r   rn  r   r   r   r   s	            r-   index_tensorrp    sV    ;&4TMAz G$++J	00vvj! 
s   AAc                 N    ddl m} | 5   ||i |cd d d        S # 1 sw Y   y xY w)Nr   )meta_embedding_bag)ro  rr  )r   r>   r   r   rr  s        r-   embedding_bagrs    s    <	!4262 
s   $c                     t        | |||      S rN   )rl  r(  s       r-   multi_device_op_defaultru    s    
 5YdFSSr0   c                     t        |       5   ||i |}d d d        t        |||d      \  }}|d   S # 1 sw Y    xY wrj  )r   r   )r   r>   r   r   r   r   r   s          r-   multi_device_op_outrw    sO     
&i	0D#F# 
1 '4TMAz g 
1	0s   	4=c                 R   t        ||d      \  }}|d   |d   j                  t        j                  j                  k(  xs$ j                  dk(  xr j                         dk(  fd       t        | ||      }t        j                  j                  u r|d   S |S )NTr   r   r   r   r$   c                  0    d  d dj                    dS )NzMismatching z device between self (z) and values ()rI   )r>   self_devicer   s   r-   r   z index_put_impl.<locals>.<lambda>  s$    ,tf$:;-~V\VcVcUddefr0   )
r   fake_devicerU   _checkndimrS  rl  r  
index_put_r  )	r   r>   r   r   r   r   r   r{  r   s	    `     @@r-   index_put_implr    s     '4TMAz !FW%11K	LLv)))WfkkQ.>.V6<<>UVCVf
 4ItT6
RCt&&&'""
r0   c                     | t         v S rN   _device_not_kwarg_ops)fns    r-   r   r     s
    R#88r0   c                 (    |t         vs
J d|        y )NzNYI: r  r(  s       r-   nyir    s    ,,<dVn<,r0   c                 n    | t         j                  j                  t         j                  j                  fv S rN   )r  convolutionr  convolution_backwardr   s    r-   r   r     s&    $**22D4M4M4U4UVVr0   c                 t    t        |||d      \  }}|d   j                   5  |d   j                  }|d   j                  d   }ddlm}  ||      sd }n|dk(  r!|d   j                  s|d   j                  sd }n|t        j                  j                  u r t        j                  j                  di |}	nDt        j                  j                  |d   |d   d |d   |d	   |d
   |d   |d   |d   |d   
      }	t        j                  j                  |d   |d   |	      }d d d         fd}
t               5   |di |}|t        j                  j                  u r |
|      cd d d        S  |
|d          |
|d   |       |
|d   d       fcd d d        S # 1 sw Y   }xY w# 1 sw Y   y xY w)NTr   r   weightr   )has_hint   stridepaddingdilation
transposedoutput_paddinggroups
bias_sizes)biasr  r  r  r  r  r  r  c                 N    | | S || j                  |      } t        |       S )Nmemory_format)r  rv   )r   mem_fmtrJ   r   s     r-   convertzconv.<locals>.convert  s2    9H7+A)Q//r0   r$   rM  r6   )r   r|  r~  rk  r:  r  	is_mkldnnis_xpur  r  r  rU   rV   _select_conv_backend%_conv_determine_backend_memory_formatr   )r   r>   r   r   r   kbatchr  r  conv_backendr  r   rJ   s   `           @r-   convr    s    #4TIAv G_((F	8!!w%%a( 	C G!VF7O55fWo>T>TGt''///$xx<<FvF$xx<<7O8$!(+"9-#J/%l3#)*:#;!(+%l3  =   hhDDw!1<G= 
D0 
&i	0nVn4##+++3(	 
1	0 A(A(A% 
1	0S 
R 
1	0s   D F"?-F.6"F."F+.F7c                       fd}|S )Nc                     | t         <   | S rN   )FAST_OP_IMPLEMENTATIONS)r   r>   s    r-   r   z-register_fast_op_impl.<locals>.impl_decorator)  s    (/%r0   r6   )r>   r   s   ` r-   register_fast_op_implr  (  s     r0   c                 h  	
 t        |       }t        |      }t        ||      }dg|z  }t        |dz
  dd      D ]j  	|dz
  	z
  }|dz
  |z
  }|dz
  |z
  }|dk\  r| |   nd
|dk\  r||   ndt        j                  
dk(  xs dk(  xs 
k(  	
fd       
dk(  rn
|	<   l t        |      S )Nr   r$   c                      d d d  dS )NzThe size of tensor a (z#) must match the size of tensor b (z) at non-singleton dimension rz  r6   )isizeAsizeBs   r-   r   zinfer_size.<locals>.<lambda>J  s%    ,UG 4005w 7**+A/r0   )rj   rO  rangerU   r}  tuple)abdimsAdimsBr~  expandedSizesoffsetdimAdimBr  r  r  s            @@@r-   
infer_sizer  1  s    FEFEueDC$JM4!8R$Aqy6!qy6!19$!19$! 	QJ6%1*6/	
 %*QJ5Ea1 %2 r0   c                       fd}|S )Nc           	           fd}t        d       }d}d}d }|D ]M  }t        |t        j                        r|j                  nd}	t        |	      dk(  rd}nd}||	}t        ||	      }O |J |D ].  }t        |t        j                        s|j                  |k(  s. n	  |d      S t        j                  d      }
|
}d }d }d}|D ]j  }t        |t        j                        sd} ||
k(  r%|j                  j                  dk(  s|j                  }||j                  }Y||j                  k7  sid}l |rt        |d	t        j                  i\  }}d}d
}|D ]r  }t        |t        j                        s||
k7  r7|j                         dk(  r$|j                  |
k(  r||k\  r
 |d      c S |d
z  }Z|j                  |k7  sj |d      c S  d}d}t        |      rj|D ]e  }t        |t        j                        s|xr  |j                  t        j                         }|xr  |j                  t        j"                        }g |r>t        d       t%         t        j&                  ||dt        j                         |      S |r>t        d       t%         t        j&                  ||dt        j"                        |      S  |d      S )Nc                 `    t        d|         5   i cd d d        S # 1 sw Y   y xY w)Nzslow )r    )msgr   r   modeslow_refs    r-   slowz=make_fast_binary_impl.<locals>.fast_binary_impl.<locals>.slowT  s+    %u&00 s   $-zattempt fastFr6   r   Tz#both tensors nontrivially broadcastr   type_promotion_kindr$   errorr  zfast is_contiguousr   )rD  rJ   r  rI   zfast channels_lastzno contiguity match)r    rg   rU   rz   rk  rj   r  rJ   rH   rD  r   r   DEFAULTrX  rK   is_contiguouscontiguous_formatchannels_lastrv   empty)r  r   r   r  operandshas_scalarshas_tensorsfinal_shaper  rk  r   common_devicecommon_dtypeoutput_dtypehas_different_input_dtypesr   current_cpu_scalars_on_non_cpumax_cpu_scalars_on_non_cpur  is_channels_lastr  s   ```                 r-   fast_binary_implz/make_fast_binary_impl.<locals>.fast_binary_implS  s   	1
 	N#  B *2u|| <BHH"E5zQ"""# %[%8K  &&& B"ell+K0G  =>> ll5!%*"Bb%,,/-1*#BIINNe,C "		#!xx)-1*  & 1/N/V/VOA| *+&%&"Bb%,,/#A"))s:J15OO=(.!3.m+G}$   &m4!"ell3 - !"2B2B"'"9"9 3C 3 $4 $8H8H"'"5"5 9I 9   ,-&!"'"9"9	 %	 	 ,-&!"'"5"5	 %	 	 )**r0   r6   )r  r  s   ` r-   make_fast_binary_implr  R  s    +B r0   c                     dd l }  t        | j                  j                  j                  j
                        t        | j                  j                                t        | j                  j                  j                  j
                        t        | j                  j                                t        | j                  j                  j                  j
                        t        | j                  j                                t        | j                  j                  j                  j
                        t        | j                  j                               t        S )Nr   )torch._refsr  r@  r  addrz   r  _refssubmuldivr  )rU   s    r-   get_fast_op_implsr    s    4%))..,,334ekkoo. 5%))..,,334ekkoo. 5%))..,,3345J5;;??5[\4%))..,,334ekkoo. #"r0   c                      t         j                  j                         rIt         j                  j                  t        j
                  dd      nt        j                  dd       y y )Nr$   cudarI   )rU   r  is_availableversionhipr  zerosr6   r0   r-   init_cuda_contextr    sH     zz ).):):)BAf%fI
 !r0   c              #     K   | j                   }t        j                  j                         }||k(  sJ | d|        t        j                  j	                         }d| _         t        j                  j                  d       	 d  || _         t        j                  j                  |       ~y # || _         t        j                  j                  |       ~w xY ww)N, T)in_kernel_invocationrU   rV   _meta_in_tls_dispatch_include_DisableTorchDispatch!_set_meta_in_tls_dispatch_include)r   prev_in_kernelmeta_in_tlsguards       r-   r   r     s      33N((88:K.(L[MN;K*LL(HH**,E%)I"	HH..t4)7	&22>B *8	&22>Bs   B CB/ (C/)CCc                     t         j                  j                  | j                         j	                  d      d   j	                  d      d         S )Nz::r  .r   )rU   rV    _should_allow_numbers_as_tensorsr  splitr   s    r-   should_allow_numbers_as_tensorsr    sB    8844		$#))#.q1 r0   c                   D    e Zd Zej                  j                  dd      Zy)FakeTensorConfigTORCH_FAKE_TENSOR_DEBUGFN)r3   r4   r5   osenvironrX   debugr6   r0   r-   r  r  
  s    JJNN4e<Er0   r  c                       e Zd ZU dZej
                  ed<   ded<   eej                     ed<   eej                     ed<   ee
   ed<   ej                  j                  j                  Zed        Zed	        Zedd
       Z fdZed        Zeedd              Zedeej
                  ef   fd       Zd Zej                  j8                  Z xZS )rv   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|  FakeTensorModer   r   rU  rW  c                 v    | j                   y | j                  | j                  k7  rd | _         y | j                   S rN   )rU  rW  rV  r+   s    r-   rP  zFakeTensor.nonzero_memo(  s<    %   DMM1!%D!!!r0   c                 p    | j                   j                  rt        j                  d      S | j                  S Nr   )r   r  rU   rJ   r|  r+   s    r-   rJ   zFakeTensor.device3  s*    >>..<<''###r0   c                 :   t         j                  j                  | ||j                  d|      }|j                  j
                  dk(  sJ |j                  j
                         t        |t         j                        r|nt        j                  |      }|j                  s|j
                  dk7  sJ |j
                  dk(  r
t                |j
                  dddt         j                  j                         fv rV|j                  Jt        j                  |j
                   dt        t         |j
                        j                                }||_        ||_        ||_        d |_        d |_        t&        j(                  rdd l} |j,                         |_        |S )	NT)dispatch_devicedevice_for_backend_keysr   r  rF   xpu:r   )rU   rz   _make_subclassrequires_gradrJ   rH   rg   
allow_metar  rV   _get_privateuse1_backend_namer0  rx   current_devicer|  r   r   rU  rW  r  r  	tracebackextract_stack_debug_trace)clsr   r   rJ   r   r,   r  s          r-   __new__zFakeTensor.__new__I  sX   ||** $* + 
 {{6);4;;+;+;;)%fell;fAU ##;;&(((;;&  KKuehh&L&L&NOP$\\;;-q!<!K!K!M NOF "" ! $!! 7	 7 7 9Dr0   c                 "    t         |           y rN   )superr.   )r,   r   r   	__class__s      r-   r.   zFakeTensor.__init__  s    r0   c                 $    |j                  |       S rN   )from_tensor)r   r   s     r-   r  zFakeTensor.from_tensor  s    $$Q''r0   c                 L   |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 |D cg c](  }t        |t              r|t         j                  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 |5   ||i |cd d d        S c c}w # 1 sw Y   y xY w)Nr$   r   r   z(FakeTensor unrecognized subclass(es): %sz(FakeTensor mode already active: %s in %s)rU   r@  primrJ   r  rj   rg   rv   r   r  r|  
issubclassrz   not_implemented_logr  r   r   arg_tree_leavesrV   _get_dispatch_moder_   r`   )
r  r>   typesr   r   r   unrecognized_typesr   rf   maybe_cur_fake_modes
             r-   __torch_dispatch__zFakeTensor.__torch_dispatch__  sz   
 599>>((000t9>ja*&EEEAw  55||F++Aw*** 
!Jq*$=!5<<BWAu 	 
 %%:<N "!	))4:6:C#z*MM	 ;
 $$$ $hh99HH**//
 %%:#
 "!(( YG
F Ys   F,F?FFF#returnc                      d d}d d  fd}|D ]
  } ||        t               rd}t        j                  d      
J d         |fS )NFc                 ^    | j                   j                  dk(  xr | j                         dk(  S )Nr   r   )rJ   rH   rX  )r   s    r-   cpu_zero_dimz4FakeTensor._find_common_device.<locals>.cpu_zero_dim  s$    88==E):aeegl:r0   c                     t        | t              sy | j                   |       y  |       }| j                  k(  rr|y |ry r| j                  |y t        d d d| j                         )Nz,Unhandled FakeTensor Device Propagation for z, found two different devices r  )rg   rv   rJ   RuntimeError)r   t_is_cpu_zero_dimr  r  r>   is_cpu_zero_dims     r-   merge_devicesz5FakeTensor._find_common_device.<locals>.merge_devices  s     a,$ !".q/ ,Qxx=("&7O !  !"3 >tfDbcpbqqstut|t|s}~ r0   Tr   z!Could not find common device for )r  rU   rJ   )r>   r$  has_scalar_only_inputsr!  rf   r  r  r   s   `    @@@r-   _find_common_devicezFakeTensor._find_common_device  s|     !&	; 	D C#  +40]5J%)"!LL/M(T,MdV*TT(444r0   c                    | j                         dk(  sJ d       | j                  j                  }g }t        | j                  d         D ]:  }|j                         }t        j                  |d       |j                  |       < |S )Nr$   zNYI for higher dimsr   rM  )min)	rX  r   r   r  rk  r9  rU   _constrain_as_sizer   )r,   r   r   r   ss        r-   tolistzFakeTensor.tolist  su    xxzQ5 55NN,,	tzz!}%A002A$$QA.JJqM	 &
 
r0   rN   r6   N)r3   r4   r5   __doc__rU   rJ   r;   r   rz   r  rT  rV   r_   r`   	_mode_keyr   rP  staticmethodr	  r.   r  classmethodr   r  r	   re  r#  r(  _disabled_torch_function_impl__torch_function____classcell__r  s   @r-   rv   rv     s    u||$$ ELL))sm# ..33I" " $ $* * *| ( ( 
3)  3)j <5ellD6H0I <5 <5N
 ??r0   rv   c                        e Zd ZddddddZd Zedd       Z fdZ fd	Zdd
Z	d Z
d Zd Zd Zed        Zd Zd Zddddddee   fdZ xZS )r  TFN)r  allow_non_fake_inputsr   static_shapesc                   t         j                  dt        |              || _        t	               | _        ||| _        n	|d u | _        dd l}|j                  j                  j                  | _        || _        d| _        g | _        || _        dj!                  t#        j$                               | _        |j(                  j*                  j,                  | _        y )Nzcreate_mode 0x%xr   F )logr  idr  r   r  r4  torch._functorch.configr}   configfake_tensor_allow_metar  r3  r  enter_stackr   joinr  format_stackstackrV   r_   r`   r+  )r,   r  r3  r   r4  rU   s         r-   r.   zFakeTensorMode.__init__'  s     			$bh/&<#%8%:"$!.D!*d!2D&**11HH &;" %*! IK"WWY3356
 77<<r0   c                 B    t        |t              xr |j                  | u S rN   )rg   rv   r   r,   r   s     r-   is_our_fakezFakeTensorMode.is_our_fakef  s    !Z(@Q[[D-@@r0   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)	rU   rV   r  r_   r`   dispatch	TypeErrorr7  	exception)r,   r>   r  r   r   s        r-   r  z!FakeTensorMode.__torch_dispatch__i  sr     HH''(F(F(K(KLT		T	==udF;; 	MM89	s   
A  A>c                 ,   t         j                  j                  | j                        }| |ur+| j                  j                  d|f       t        |          S t         j                  j                  |        | j                  j                  d       | S )NTr   )	rU   rV   r^   r+  r<  r   r  	__enter__ra   )r,   maybe_prev_fake_moder  s     r-   rH  zFakeTensorMode.__enter__v  sz    $xx<<T^^L++##T+?$@A7$&& HH''-##M2r0   c                     | j                   j                         \  }}|r4t        |   |||      }| t        j
                  j                  |       y y y rN   )r<  r   r  __exit__rU   rV   ra   )r,   r  r  cliverI  r   r  s          r-   rK  zFakeTensorMode.__exit__  sV    %)%5%5%9%9%;""'"1a+C#/++,@A 0 r0   c                 2    !"# |r|ni }t         j                  d||       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                  j                  j                  j                  u r#t        d |d   j                         D              S t        j                  j                  j                   j                  u r#t        d |d   j!                         D              S t        j                  j                  j"                  j                  u rt%        |d   j#                               S t         j'                         t(        j*                  k  r(t         j                  ddt,        z         t/               }t        j                  j                  j0                  j                  t        j                  j                  j2                  j                  t        j                  j                  j4                  j                  hv rt7               5   |i |cd d d        S t8        j;                  ||f      \  ""D cg c]'  }t        |t              s j=                  |      s&|) }}t?        d	 |D              xs t?        d
 "D              # j@                    fd} jB                  v r|rtE              r#s|stG        d |D              s
J  d       "D 	cg c]
  }	 ||	       }
}	t8        jI                  |
      \  }} |i |}tK        |      t        jL                  u r? jO                  |      r.tQ               5  |jS                         }d d d           |d      S  jU                  "      }|rtV        j                  d|       tX        S  jB                  v rRt        |      dk(  rt        |      dk(  sJ | d|        tK        |d         t        jL                  u r   |d         S  j[                   "      \  "}~~tG        d |D              }t        j\                  j^                  j`                  vrt        j\                  jb                  j`                  vr|rt        |      dk7  r#s߉"D 	cg c]
  }	 ||	       }
}	t8        jI                  |
      \  }}tQ               5   |i |}d d d        t8        je                        }|D cg c]  }t        |t        jL                        s|! }}tG         fd|D              }|r)t8        jg                  t        jL                    fd|      S |D ]  } ji                  |        t8        jI                  "      \  }} jk                  |||       #r'tm               jo                        }| | g|i |S ddl8m9} |vr ju                        sqddl8m;} |v r6#sty              r)tG        d |D              r 5   |   |i |cd d d        S  5   jz                  |i |}|tX        ur|cd d d        S 	 d d d        dj|                  j~                  v r5t        d      r)t              s 5   j                  |i |cd d d        S t        j                  j                  j                  j                  j                               j                  j                  }|rt        j                  j                  j                   j                        !t        j                  j                  j                  !fd      5   5   ||i |}|cd d d        cd d d        S t        D ]i  \  }}t        j                  j                  t        j                  j                  fv rt        d       |      sP | g|i |}|tX        k7  sg|c S  dt        f fdd!"# fd	}t        j                  j                  j                         d      s |       S 	 t7               5   |i |}d d d         j                  "|jo                  d             S # 1 sw Y   UxY 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   xY w# 1 sw Y   uxY w# 1 sw Y   5xY w# 1 sw Y   nxY wd d d        w# 1 sw Y   xY w# 1 sw Y   xY w# t        $ r} ||      cY d }~S d }~ww xY w)"Nz%s %s %sr$   r   r   c              3   2   K   | ]  }t        |        y wrN   rT  rQ   r'  s     r-   rS   z*FakeTensorMode.dispatch.<locals>.<genexpr>  s     8AQrT   c              3   2   K   | ]  }t        |        y wrN   rP  rQ  s     r-   rS   z*FakeTensorMode.dispatch.<locals>.<genexpr>  s     :)9AQ)9rT   z'%sFakeTensorMode.__torch_dispatch__: %s c              3   4   K   | ]  }|j                     y wrN   )r  )rQ   r  s     r-   rS   z*FakeTensorMode.dispatch.<locals>.<genexpr>  s      !
3HaA))3Hs   c              3   P   K   | ]  }t        |t        j                           y wrN   )rg   rU   r  )rQ   r  s     r-   rS   z*FakeTensorMode.dispatch.<locals>.<genexpr>  s     @iAu||,is   $&c                 b    t        | t              rj                  |       r| j                  S | S rN   )rg   rv   rB  r   )r   r,   s    r-   maybe_to_constantz2FakeTensorMode.dispatch.<locals>.maybe_to_constant  s)    !Z(T-=-=a-@zz!r0   c              3   8   K   | ]  }|j                   d u  y wrN   r   )rQ   r   s     r-   rS   z*FakeTensorMode.dispatch.<locals>.<genexpr>  s      0E1

$&0E   z. should not have fake inputs without constantsTr   z,FakeTensorMode unrecognized subclass(es): %sc              3   8   K   | ]  }|j                   d u  y wrN   r   rP   s     r-   rS   z*FakeTensorMode.dispatch.<locals>.<genexpr>       Q;Pa1::T1;PrY  c              3   @   K   | ]  }j                  |        y wrN   )may_turn_const)rQ   r   r,   s     r-   rS   z*FakeTensorMode.dispatch.<locals>.<genexpr>  s     P?O!t2215?Os   c                      | d      S )NTrZ  r6   )r   	converterr,   s    r-   r   z)FakeTensorMode.dispatch.<locals>.<lambda>  s    iatDr0   )
meta_tabler   c              3   6   K   | ]  }|j                      y wrN   )	is_sparserP   s     r-   rS   z*FakeTensorMode.dispatch.<locals>.<genexpr>@  s     K5JO5Js   zprims::prim_meta_implc                       S rN   r6   )ctxs   r-   r   z)FakeTensorMode.dispatch.<locals>.<lambda>a  s    Sr0   z3torch.compile does not support strided NestedTensorr>   c                 p    j                   syh d}dh}| j                  |v xs | j                         |v S )NF>   xlar  r  vision	quantized	torchtext
debugprims
torchaudiozfbgemm::gmm)r  r  r  )r>   allowed_namespacesgrandfathered_ops_FIXMEr,   s      r-   can_run_unsafe_fallbackz8FakeTensorMode.dispatch.<locals>.can_run_unsafe_fallbacku  sL    ..	" '# "44 :99;"99r0   c                     ddl m}  |      ry s       st              | t              } t        |       S )Nr   )can_auto_functionalize)*torch._higher_order_ops.auto_functionalizerr  rD   r"  )r  rr  r%  rp  r$  r>   has_symbolic_sizesr,   s     r-   maybe_run_unsafe_fallbackz:FakeTensorMode.dispatch.<locals>.maybe_run_unsafe_fallback  sM     &d+!)@)F2488}4T:&tT9iOOr0   MetarJ   rI   rN   )Ur7  r  rU   r@  r  rJ   r  rj   rg   rv   r   r  r|  r  sizer  r  storage_offsetrT  getEffectiveLevelloggingDEBUGr*   r&   is_coalesced	dense_dim
sparse_dimr   r   r!  rB  rZ   r  lift_fnsr  ry   tree_unflattenrH   rz   r^  r   clonecheck_for_subclassr  r   %validate_and_convert_non_fake_tensorsr-  nondeterministic_seededr/  inplace_viewr   tree_map_onlyr   invalidate_written_to_constantsr  rX   r   ra  cpp_meta_supports_symintr   r   	decomposerh   r  hasattrr  rd  _librarysimple_registry	singletonfindabstract_implkernelAbstractImplCtxr   set_ctx_getterr   _nested_tensor_from_tensor_listr   rD   r   rV   ._dispatch_has_computed_kernel_for_dispatch_keyrG  +wrap_meta_outputs_with_default_device_logic)$r,   r>   r  r   r   incrr   flat_arg_fake_tensorsrW  r  const_flat_args
const_argsconst_kwargsr   r  all_constantflat_outflat_out_tensorsr   	fast_implra  r   r   maybe_abstract_implresultr   r   op_impl_outru  not_implemented_errorr%  rp  r`  rf  r$  rt  s$   ``                            @@@@@@r-   rD  zFakeTensorMode.dispatch  s   !r		*dD&1599>>((000 t9>ja*&EEEAw  55||F++Aw***UYY^^((0008a888UYY^^**222:a)9:::UYY^^22:::tAw--/00  "gmm3II93;PRV +,D IINN''//IINN$$,,IINN%%--
 
 .d3T,V, 43  &22D&>B	9 !!
 !Jq*$=$BRBRSTBUAy 	 !
 ! !
3H!
 
 A@i@@ 	 ..		 DMM!*?+D1&) 0E  GEFG  >GGY03YOG'-'<'<_i'X$J
3l3CCyELL(T-@-@-E !]))+C # s$?? "44Y?%%>@R "! 4== v;!#D	QJ4&&8JJ6DG}, tAw// .2-W-W)Y	.
*) & Q;PQQII--TYY>		&&dii7)*a/&=FGY03YOG'-'<'<_i'X$J J7,7  ))#.H+3S8az!U\\7R8SP?OPPL++LLD  (55c: (
 ,,Y	Bf,,T3H$PVW )+//5I$ 7777 	;z!$*G*G*M9 **" 05K5JKK 4.t4dEfE T "DNND3F3N*	  +  ***./'-*t**D;F; 
 $nn<<FFKKIIK

- 	 ....>>t~~tTC--<<[I4,d=f= LP4II (:#NG44<<4488  3I  d#%dDB4B6B.0&& (:	* 	<	P 	P& xxFFIIK
 -..
	D-d3$)&) 4
 ??tYvzz('; @ 
 	
M 43
!
> H #]j H
   TT T "  LP4III\ 43" 	D,-BCC	Ds   c*=c7c7%c7!c<	d
d>	d(d d d%d28d?e"
e	e"*e; 5	e/>e; *c4dd%d/2d<?e	e	e""e,/e84e; ;	ffffc                 V    d }|D cg c]  } ||      st        |       c}S c c}w )Nc                     t        | t        j                        xrU t        | t               xrB t	        |       t        j                  uxr% t	        |       t        j
                  j                  uS rN   )rg   rU   rz   rv   rH   r   r   r  s    r-   checkz0FakeTensorMode.check_for_subclass.<locals>.check  sY    1ell+ 6"1j116G5<</6 G588#5#55	r0   rG   )r,   r$  r  rs   s       r-   r  z!FakeTensorMode.check_for_subclass  s+    	 "+7AeAhQ777s   &&c                 b     g  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                    t        | t        j                        s| S j                  |       st        j                  j
                  j                  v r2t        j                        \  }}t        dt        ||             j                  s[t        | t              r| j                  urt        d      t        j                        \  }}t        dt        ||              |       } j                  |        | S )NzECan'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 )rg   rU   rz   rB  r-  r  r/  r   r  	Exceptionr   r3  rv   r   AssertionErrorr   )	rs   r   r   r%  r`  r  r$  r>   r,   s	      r-   validatezFFakeTensorMode.validate_and_convert_non_fake_tensors.<locals>.validate  s   a. ##A&99))TYY6#)#8#8I#NLD&#_`klprvx~`  `A  B  11!!Z0Q[[5L,-DEE#)#8#8I#NLD&#BBMdTXZ`BaAbd 
 dA&!((+Hr0   r6   )	r,   r>   r`  r$  r%  r  r  validated_argsr  s	   `````   @r-   r  z4FakeTensorMode.validate_and_convert_non_fake_tensors  s@     !#	 	2 099y!(1+y9444 :s   ,c                 ^      j                   d d fd}t        ||      S )NFc                     t         t        j                        rt        j	                        \  j                         r't        j                   j                  k(   fd       t         t        j                        r5j                         s$"r	        S j                   xs       S  S )Nc                  (    dj                    d  S )Nz-FakeTensor is wrapped to wrong device, found z, expected rI   )r  rR   s   r-   r   zZFakeTensorMode.wrap_meta_outputs_with_default_device_logic.<locals>.wrap.<locals>.<lambda>  s    KAHH:U`an`opr0   )	rg   rU   rz   rv   r#  rB  r}  rJ   r   )rR   r  r`  rJ   r$  r>   r"  r,   s   `r-   wrapzHFakeTensorMode.wrap_meta_outputs_with_default_device_logic.<locals>.wrap  s     !U\\*}/D 224C!* "HH-p 1ell+((+)) %T1--$99a!8=  r0   )r  r   )	r,   r   r>   r$  rJ   r  r  r`  r"  s	   ` ``` @@@r-   r  z:FakeTensorMode.wrap_meta_outputs_with_default_device_logic  s5    ..	 !&	 	B a  r0   c                 ~   t         j                  j                  |j                  v ry|t        j
                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                   j"                  t        j$                  j                  fv S )NT)rU   r-  	view_copyr/  r  r  r  empty_stridedr  as_strided_scatter
as_stridedas_strided_r  detachview_as_realview_as_complexset_source_Storage_storage_offsetr+  )r,   r>   s     r-   r  z'FakeTensorMode.cpp_meta_supports_symint  s    99$))+JJ$$&&##++OO##$$JJKK%%  ((II3399AA
 
 	
r0   c                 j    t         j                  j                  t         j                  j                  fS rN   )r  
lift_freshr  lift_fresh_copyr+   s    r-   r  zFakeTensorMode.lift_fns.  s#    '')=)=)E)EFFr0   c                     |j                         t        k  xr= |j                   xr. | j                  |       xr |j                  j
                  dk(   S r  )rS  CONSTANT_NUMEL_LIMITrc  rB  rJ   rH   rA  s     r-   r^  zFakeTensorMode.may_turn_const2  sT    GGI-- ,KK,$$Q'', HHMMV++		
r0   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rN   r   rP   s     r-   rS   zAFakeTensorMode.invalidate_written_to_constants.<locals>.<genexpr>=  r\  rY  Tr   r   r,   )
rZ   r   
is_mutabler   itemshas_argumentrB  r   r  r   )r,   r>   r  r   r   any_constantschema_infor   r   r  r   s              r-   r  z.FakeTensorMode.invalidate_written_to_constants:  s     Q;PQQ%d+K224.4TMAz #((*1w,+*B*B1*EAF$$Q'#..q1

...JJ1::V +	 5<r0   )r4  r   r   r   r   c                0   | j                   }|| j                  }|r|J d       d }|sW|sU|sSt        j                  j                  j                         x}r)||j                  v r|j                  |   }|j                  }| j                  | |||||      S )Nz2cannot set both static_shapes and symbolic_contextr   )	r   r4  rU   r   r   r   r   r   r  )r,   r   r4  r   r   r   r   r   s           r-   r  zFakeTensorMode.from_tensorL  s     NN	  ..M (DCD(I}"'--">">"F"F"HHH_>>>'6'H'H'P$-;;F))-' * 
 	
r0   r)  )r3   r4   r5   r.   rB  r   r  rH  rK  rD  r  r  r  r  r   r  r^  r  r   r   r  r0  r1  s   @r-   r  r  &  s      $#1=~A 	 		Bm
r		8$5L(!T
" G G
W, #'  

   
r0   r  c                 2    t         j                  j                  |j                  v ri t	               5   fd}|D cg c]
  } ||       }}t
        j                  ||      \  }} ||i |}	d d d        t               }
t               |D ]S  }t        |t         j                        s|j                  r+j                  |j                         j                         U  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 )NrI   )rB  rU   
zeros_liker|  rc  _coalesced_r|  r8  )rR   r   r   	inp_implss     r-   to_real_tensorz+run_fallback_kernel.<locals>.to_real_tensor  sY    $$Q'&&q?;;OOANN$45%&	"S'"
Hr0   c                 8   t        |       vrDt        | t        j                        r*| j                  s| j                         j                  v rt        | t        j                        r-t        |       v rt        |          S j                  |       S | S rN   )r8  rg   rU   rz   rc  r   _cdatar  )rR   r   r  orig_not_implemented_exceptionstoragess    r-   map_outz$run_fallback_kernel.<locals>.map_out  s    a5	!q%,,'KK  "))X500a&!u	! A'' 66y!DDHr0   )rU   r-  r  r/  r   r   r  setrg   rz   rc  r  r   r  r   )r   r>   r$  r%  r  r  r  r   r   r   tensor_implsrR   r  r  r  s   `   `        @@r-   r"  r"  p  s     yy*,,I 
	 1::	1^A&		:,,Y	Bf$!&! 
  5LuHa&;;Q--/667   ??7A&&E ; 
s   DD#DDDc                       e Zd Zd ZddZy)FakeCopyModec                     || _         y rN   )r   )r,   r   s     r-   r.   zFakeCopyMode.__init__  s	    "r0   Nc                 2   |r|ni }|t         j                  j                  j                  k(  r' || j                  j                  |d   d      fi |S |t         j                  j                  k(  rkt        |      dk(  rt        |      dk(  sJ |\  }}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)r4  rM  )rU   rV   
TensorBaser  r   r  rz   __deepcopy__rj   r8  DisableTorchFunctionSubclass)r,   r>   r  r   r   r   memor   s           r-   r/  zFakeCopyMode.__torch_function__  s    !r 588&&,,,**47$*GKQ  U\\...t9>c&kQ&666LFD&zT!BvJ''..,,V4,HC"DFJ668T,V, 988s   ;DDr)  )r3   r4   r5   r.   r/  r6   r0   r-   r  r    s    #-r0   r  rN   )
contextlib	functoolsr  rz  r  rQ  r  r   dataclassesr   typingr   r   r   r   r   r	   r
   r   r   r   rU   torch._custom_optorch._loggingtorch._guardsr   
torch._opsr   torch._prims_commonr   r   r   r   r   torch._subclasses.meta_utilsr   torch._utilsr   torch.fx.operator_schemasr    torch.multiprocessing.reductionsr   torch.overridesr   torch.utils._mode_utilsr   torch.utils._python_dispatchr   r   torch.utils._pytreer   r   torch.utils._statsr   r    torch.utils.weakr!   DimList	getLoggerr3   r7  _logginggetArtifactLoggerr  utils_pytreer   r#   TensorWeakRef_opsr@  r  r  r*   r&   r  r8   r=   rB   rD   _resize_output_r  r  r   
pin_memory	is_pinnedr  rJ   r  _pin_memory_resize_outputr  _list_to_tensorr   rK   rO   
empty_like	full_like	ones_like	rand_like
randn_likerandint_like	low_dtypelow_dtype_outr  r;  new_empty_stridednew_full	new_zerosnew_onesr   contextmanagerrc   	lru_cacherm   rq   r   r   r   r   r   r   re  r   r   r	  r  r&  r)  r+  r4  r>  rH  r1  r]  rc  rh  rl  r0  rz   rp  _embedding_bagrs  _unsafe_index_putcopycopy_slice_scatterru  rw  	index_putr  r  r  r  r  r  r  r  r  r  r   r  r  rv   r  r"  r  r6   r0   r-   <module>r     s       	 
   ! S S S !      !  7 $ 8 ; - /
 1 1 &
g!nn66xARS 			CLzz~~   \   ,   <   <  
 	  ((00((,,OONNGGNNGG  #'"6"6!8 
 	OOOONNNNNNNNNNNNOOOO##OOOONNNN""MMMMNNNNMMMM5 < - - T  $$ T. . T5 5@$q' @ @d
 d
N  
U8ZL$4F+G+S%T 
 T00. LM N 	 %&- '-0 $//))*% +%
 $??GGH: I: T
,
, DE* F*$ QRR SR EF(K G(KV KL" M": KL- M-42& $**##$" %"  $%%--.3 /3 $((001$))##$$**$$%$$$,,-T . & % 2T
 $))-- $$$(() * ! $..(()$//))* + *& 89= := V99x  

  BBJ T# #  T
 
  $* = =L@ L@pF	
& F	
T:'~-$ -r0   