
    ^j^"                   !   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mZ d dl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 d dlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ d d	l%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d d
l,m-Z- d dl.m/Z/ erd dl0m1Z1m2Z2 d dl%m3Z3 d dl4m5Z5 e(ejl                  z  Z7 ed      Z8 ed      Z9 ed      Z:ej*                  jv                  Z<g dZ=i Z>g Z?ej                  j                  j                  ZBdgdZCdhdZD eCg eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  jl                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                   Z\ eCeBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                        ZfeBj                  fZhdidZiej                  djd       Zk	 	 	 	 dkdZldldZmdmdZn ele>j                        	 	 	 	 	 	 	 	 	 	 dnd       Zp elek       elg e\      	 	 	 	 	 	 	 	 	 	 dod              Zq eleBj                  j                        	 	 	 	 	 	 	 	 	 	 dpd       Zr elej                  j                  j                  j                        	 dq	 	 	 	 	 	 	 	 	 drd       Zt elej                  j                  j                  j                        	 	 	 	 	 	 	 	 dsd       Zu elej                  j                  j                  j                        	 dq	 	 	 	 	 	 	 	 	 dtd       Zv eleBj                  j                         eleBj                  j                        	 	 	 	 	 	 	 	 	 	 dod               Zwdld!Zx elex      	 	 	 	 	 	 	 	 	 	 dod"       Zy eleBj                  j                        	 	 	 	 	 	 	 	 	 	 dod#       Zz eleBj                  j                        	 	 	 	 	 	 	 	 	 	 dod$       Z{dud%Z|dvd&Z}dwd'Z~	 	 	 	 	 	 	 	 dxd(Zdyd)Z eleBj                  j                        	 dq	 	 	 	 	 	 	 	 	 	 	 	 	 dzd*       Z eleBj                  j                        	 	 d{	 	 	 	 	 	 	 	 	 	 	 d|d+       Z eld,       	 	 	 	 	 	 	 	 	 	 d}d-       Z	 	 	 d~d.d/	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd0Z eleBj
                  j                        	 	 	 d~	 	 	 	 	 	 	 	 	 	 	 	 	 dd1       Z eleBj                  j                        	 	 d	 	 	 	 	 	 	 	 	 	 	 dd2       Z eleBj                  j                        	 	 	 	 	 	 	 	 	 	 	 	 dd3       Z eleBj                  j                        	 	 	 d~	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd4       Z eleBj                  j                        	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd5       Z	 d	 	 	 	 	 	 	 	 	 dd6Zdd7Zdd8Zdd9Z	 	 	 	 	 	 dd:Zdd;Z	 	 	 d~	 	 	 	 	 	 	 	 	 	 	 dd<Z eleBj(                  j                        	 	 	 	 	 	 	 	 	 	 dd=       Z eleBj*                  j                         eleBj,                  j                        d.d>	 	 	 	 	 	 	 	 	 	 	 dd?              Z eleBj0                  j                        dd@	 	 	 	 	 	 	 	 	 	 	 ddA       Z eleBj4                  jl                        	 dq	 	 	 	 	 	 	 	 	 ddB       Z elej                  j                  j8                  j                         elej                  j                  j:                  j                        	 	 	 	 	 	 	 	 ddC              Z elej                  j                  j>                  j                        	 	 	 	 	 	 	 	 ddD       Z elej                  j                  j@                  j                        ddE       Z elej                  j                  jB                  j                        	 dq	 	 	 	 	 	 	 	 	 	 	 ddF       ZddGZ elej                  j                  jF                  jl                        	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddH       Z elej                  j                  jJ                  j                        	 	 	 	 	 	 	 	 	 	 ddI       Z elej                  j                  jL                  j                        	 	 	 ddddJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddK       Z eldL       	 	 	 	 	 	 	 	 	 	 d}dM       Z	 	 	 	 	 	 	 	 ddNZ	 	 	 	 	 	 	 	 	 	 ddOZ eCdPdQdR      ZdldSZdjdTZ eldU       	 	 	 	 	 	 	 	 	 	 ddV       Z eleBj^                  jl                        	 	 	 	 	 	 	 	 	 	 dodW       Z eleBjb                  j                        	 	 	 	 	 	 	 	 	 	 ddX       Z eleBjf                  j                        	 	 	 	 	 	 	 	 	 	 dndY       Z eleBjh                  j                         eleBjj                  j                         eleBjl                  j                         eleBjn                  j                         eleBjp                  j                        	 	 	 	 	 	 	 	 	 	 dodZ                                   Z eleBjj                  j                         eleBjn                  j                        	 	 	 	 	 	 	 	 	 	 dod[              Z eleBjv                  j                         eleBjx                  j                        	 	 	 	 	 	 	 	 	 	 dod\              Z eleBj                  j                         eleBj                  j                         eleBj|                  j                         eleBj~                  j                        	 	 	 	 	 	 	 	 	 	 d}d]                            Z elefD  cg c]q  } | eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  fvr| s c}       d}d^       Z eleBj                  j                  eBj                  j                  eBj                  j                  eBj                  j                  g      	 	 	 	 	 	 	 	 	 	 dd_       Z elej                  j                  j                  j                        	 	 d	 	 	 	 	 	 	 	 	 	 	 dd`       Z elej                  j                  j                  j                        	 	 	 	 	 	 	 	 	 	 	 	 dda       Zi Z	 	 	 	 ddbZ	 	 	 	 	 	 ddcZej                  f	 	 	 	 	 dddZ	 d	 	 	 	 	 	 	 ddeZej                  ddf       Zyc c} w )    )annotationsNreduce)AnycastTYPE_CHECKINGTypeVar)	ParamSpec)no_python_dispatcher)
OpOverload)canonicalize_dimelementwise_dtypesELEMENTWISE_TYPE_PROMOTION_KINDis_boolean_dtypeis_contiguous(is_contiguous_for_memory_format_or_falseis_contiguous_or_falseis_float_dtypeis_integer_dtypemake_contiguous_strides_for	ShapeType)DataDependentOutputExceptionDynamicOutputShapeException
FakeTensorin_kernel_invocation_managerrun_fallback_kernelUnsupportedOperatorException)_normalize_function_or_errorcount_label)CallableSequence)FakeTensorMode)IntLikeType_P_R_T)op_implementations_checksget_fast_op_implsstride_incorrect_ophas_metac                 .    t         j                  | d      S )NT)dictfromkeys)itemss    g/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_subclasses/fake_impls.pyordered_setr1   I   s    ==%%    c                     | j                   dk7  S )Nhpu)typedevices    r0   is_noncontiguous_supportedr8   O   s    ;;%r2   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     r0   	<genexpr>z(contains_tensor_types.<locals>.<genexpr>   s      1%&a 1   )torch_C
TensorTypegetisSubtypeOfanycontainedTypes)type_tensor_types     r0   r<   r<      sO    ((%%))+K[) S 1*/*>*>*@1 . r2   c                X   t        | t              st        dt        |              | j                  }t        d |j                  D              ryt        |j                        dk(  xrA |j                  d   j                  t        j                  j                  j                         u S )Nz func must be an OpOverload, got c              3  F   K   | ]  }t        |j                          y wr;   )r<   r5   )r=   args     r0   r?   z)_is_tensor_constructor.<locals>.<genexpr>   s     
Gs *
Gs   !F   r   )
isinstancer   AssertionErrorr5   _schemarF   	argumentslenreturnsrA   rB   rC   rD   )funcschemas     r0   _is_tensor_constructorrV      s    dJ'?T
|LMM\\F

Gf6F6F
GG 	FNNq XV^^A%6%;%;uxx?R?R?V?V?X%Xr2   c                     d fd}|S )Nc                <   t        t              r!t        v rt        d       | t        <   | S t        t        t
        f      rD ]  } t        |      |         | S t              st        dt                     t        j                  | f       | S )Nzduplicate registration: z%run_impl_check must be callable, got )rN   r   op_implementations_dictrO   listtupleregister_op_implcallabler5   r(   append)op_imploprun_impl_checks     r0   impl_decoratorz(register_op_impl.<locals>.impl_decorator   s    nj1!88$'??O%PQQ6=#N3  u6$ .$ $W-.  N+$;D<P;QR  &,,ng-FGr2   r_   Callable[_P, _R]returnrd    )ra   rb   s   ` r0   r\   r\      s    " r2   c                    | t         v S r;   rY   r`   s    r0   _is_op_registered_to_fake_rulerj      s    (((r2   c                    t         j                  | d        t        D ]"  \  }}|| u st        j                  ||f        y  y r;   )rY   popr(   remove)r`   checkimpls      r0   _deregister_op_implrp      sA    D)0 tB;%,,eT];r2   c                (    t        |   | |g|i |S r;   rh   	fake_moderT   argskwargss       r0   #dispatch_to_op_implementations_dictrv      s      #4(DJ4J6JJr2   c                   |t         v rt        d|       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)	Nz8func must not be in _non_kwarg_device_constructors, got Trt   ru   normalize_to_only_use_kwargsinputcpurf   r7   meta)	_non_kwarg_device_constructorsrO   r   _like_tensor_constructorsr7   rl   rA   r   r   )	rs   rT   rt   ru   _
new_kwargsdefault_device
out_devicers	            r0   constructorsr      s    
 --FtfM
 	
 14TMAz ((#G,33w') e,$/J)5>J <</Jx 
&i	0 &$%*%&iJ//& &s   %	CCc                    t        |||d      \  }}|j                  d      }t        |       5   ||      }d d d        |S # 1 sw Y   S xY w)NTry   rz   )r   rl   r   )rs   rT   rt   ru   r   r   inpr   s           r0   non_kwarg_is_pinnedr      sX     1dFMAz ..
!C 
&i	0 IHHs   	AAc                    t        |       5   |||      }d d d        t        j                  d      }t        | |t        j                  d            S # 1 sw Y   @xY w)Nr|   r6   r{   )r   rA   
empty_liker   r7   )rs   rT   namert   real_handlemeta_handles         r0   _record_function_enterr      sY    
 
&i	0 '4&' "";v>Kiell5.ABB' 's   
AAc                     y r;   rf   )rs   rT   handles      r0   _record_function_exitr     s     	r2   c                V    t        |       5   |||      cd d d        S # 1 sw Y   y xY wr;   r   )rs   rT   r   rt   s       r0   _record_function_enter_newr     s+     
&i	0  D$     s   	(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)NTr   r7   rz   r|   )r   r7   rA   rl   r   fake_tensor_converterfrom_meta_and_device)
rs   rT   rt   ru   r   r   input_devicer   r   r   s
             r0   non_kwarg_tor      s    
 1dFMAz h'L!-:g3F3M3MJ <</Jx
..
!C	%i	0 $#
#$ **??1j $ $s   
BBc                     yNFrf   ri   s    r0   r*   r*   4  s    r2   c           	        dd| j                   rjt        fdt        j                  ||j	                               D              }|s2t
        j                  ||f      \  }}t        | |||t        d            S t        |      )Nc                    t        | t              r| j                  S t        | t        j                  t        j
                  t        j                  f      ryy)NTF)rN   r   _has_symbolic_sizes_stridesrA   SymIntSymFloatSymBoolxs    r0   is_symbolicz3workaround_stride_incorrect_op.<locals>.is_symbolic?  s;    a$000a%,,FGr2   c              3  .   K   | ]  } |        y wr;   rf   )r=   r   r   s     r0   r?   z1workaround_stride_incorrect_op.<locals>.<genexpr>H  s      
 KN
   z2Cannot run fallback kernel for stride_incorrect_op)r   objectre   bool)
allow_fallback_kernelsrF   	itertoolschainvaluespytreetree_flattenr   RuntimeErrorr   )rs   rT   rt   ru   require_dynamic	flat_args	args_specr   s          @r0   workaround_stride_incorrect_opr   9  s     '' 
$-OOD&--/$J
 
 #)#6#6f~#F Iy& QR  't
,,r2   c                T    t        |       5   ||i |cd d d        S # 1 sw Y   y xY wr;   r   rr   s       r0   
resize_as_r   \  s.     
&i	0 %T$V$% % %s   'c                "    t        | |g|i |S r;   )r   rr   s       r0   (_sparse_coo_tensor_with_dims_and_tensorsr   d  s     	49$9&99r2   c                
   t        | dd       }|t        | dd       }t        |t              ry ||j                  j                  dk7  ry |j                  d      j                         D cg c]  }t        |       c}S c c}w )Nconstantreal_tensorr{   )getattrrN   r   r7   r5   reshapetolistint)offsetsr   offsets      r0   _spdiags_static_offsetsr   k  sw    w
D1H7M48(J'8??//58&.&6&6r&:&A&A&CDFCKDDDs   +B c                    d}t        ||      }| D ]=  }|dk  rt        ||z   |      n||z
  t        j                  dk\  fd       |z  }? |S )Nr   c                     d  S )Nz0Trying to create tensor with negative dimension rf   )nnz_per_diags   r0   <lambda>z_spdiags_nnz.<locals>.<lambda>  s    F|nU r2   )minrA   _check)r   rowscols	diag_colsnnzpos_offset_limitr   r   s          @r0   _spdiags_nnzr   v  so    
C4+ 	Q;v}i8L+f4LAU	
 	|	 Jr2   c                f    t        | |      }t        t        ||      dz
  d      }t        ||d      S )NrM   r   r   max)r   r   r   non_positive_offset_maxpositive_offset_maxs        r0   _spdiags_max_nnz_per_diagr     s9    !$	2c$	2Q6:&(;Q??r2   c                   | j                   | j                   j                  st        |      | j                   j                         }ddlm}  ||d|       |S )Nr   _constrain_range_for_sizer   )	shape_envallow_dynamic_output_shape_opsr   create_unbacked_symint%torch.fx.experimental.symbolic_shapesr   )rs   rT   max_sizer   r   s        r0   _spdiags_dynamic_sizer     sR     	#""AA)$//



4
4
6COcqh7Jr2   c                H    t        | t              xr t        | t               S r;   )rN   r   r   )values    r0   _spdiags_is_static_intr     s    eS!A*UD*A&AAr2   c                	   |j                         }t        j                  |dv d        t        j                  t        |      dk(  d        j                         }t        j                  |dv d        |dk(  rdn|j	                  d      |dk(  rdnj	                  d      t        j                  k(  fd	       Ht        j                  t        j
                  t        j                  t        j                  fv fd
       t        j                  j                  t        j                  k(  fd       t        j                  |j                  j                  dk(  xr j                  j                  dk(  d        |\  }}	|dk(  r|j	                  d      n|j	                  d      }
t        d ||	|
fD              }t              }|5t        j                  t        |      t        t        |            k(  d        nt        j
                  }|r|dk(  s|	dk(  rd}n?||rt        |||	|
      }n,|rdk(  rd}n"|rt!        ||	|
      z  nd }t#        | ||      }t%        |       5  t        j&                  |f|j                  d      }t        j(                  j+                  d      5  |t        j
                  k(  rt        j&                  d|ft        j                  d      }t-        |t.              r|dk  nd}t        j0                  j2                  j4                  j7                  |||t        j                  d      |      }nN|t        j                  k(  rt        j&                  |dz   ft        j                  d      }t        j&                  |ft        j                  d      }t        j0                  j2                  j8                  j7                  |||||t        j                  d            }nt        j&                  |	dz   ft        j                  d      }t        j&                  |ft        j                  d      }t        j0                  j2                  j8                  j7                  |||||t        j                  d            }d d d        d d d        | j:                  j=                  | |j                        S # 1 sw Y   8xY w# 1 sw Y   <xY w)N)rM      c                      y)Nz"Diagonals must be vector or matrixrf   rf   r2   r0   r   z_spdiags.<locals>.<lambda>      r2   r   c                      y)NzOutput shape must be 2drf   rf   r2   r0   r   z_spdiags.<locals>.<lambda>  r   r2   )r   rM   c                      y)Nz Offsets must be scalar or vectorrf   rf   r2   r0   r   z_spdiags.<locals>.<lambda>  r   r2   rM   r   c                     d  d dS )NzNumber of diagonals (z() does not match the number of offsets ()rf   )n_diags	n_offsetss   r0   r   z_spdiags.<locals>.<lambda>  s    'y0XYbXccde r2   c                     d  S )NzFOnly output layouts (Sparse, SparseCsc, SparseCsr) are supported, got rf   )layouts   r0   r   z_spdiags.<locals>.<lambda>  s    \]c\de r2   c                 "    d j                    S )Nz+Offset Tensor must have dtype Long but got dtype)r   s   r0   r   z_spdiags.<locals>.<lambda>  s    =gmm_M r2   r{   c                      y)Nz,_spdiags is only implemented for CPU tensorsrf   rf   r2   r0   r   z_spdiags.<locals>.<lambda>  r   r2   c              3  2   K   | ]  }t        |        y wr;   )r   )r=   r   s     r0   r?   z_spdiags.<locals>.<genexpr>  s      */u%r@   c                      y)Nz'Offset tensor contains duplicate valuesrf   rf   r2   r0   r   z_spdiags.<locals>.<lambda>  r   r2   )r   r|   r   r7   F)r7   is_coalesced)r   r7   )dimrA   r   rR   size
sparse_coo
sparse_csc
sparse_csrr   longr7   r5   allr   setr   r   r   r   emptysparsecheck_sparse_tensor_invariantsrN   r   opsaten_sparse_coo_tensor_unsafedefault _sparse_compressed_tensor_unsafer   r   )rs   rT   	diagonalsr   shaper   diagonals_dimoffsets_dimr   r   r   static_sizesstatic_offsets
out_layoutr   max_nnzr   indicesr   outcrow_indicescol_indicesccol_indicesrow_indicesr   r   s      ` `                  @@r0   _spdiagsr    s*    MMOM	LL&(*VW	LLUq"CD++-K	LL&(RS A%a9>>!+<G A%7<<?I	LL9e
 u'')9)95;K;KLLe	
 
LL#M 
LL&G7>>+>+>%+G>
 JD$%2a%7	q!Y^^A=NI 48$	93U L -W5N!3s>':#;;=	

 "-53C3CJdai		#>4yA	)q.  1$iHH 	
 $ItgF	%i	0 "cV9??6J\\88?  	U---++q#hejjP+5c3+?saxUiinn>>FF <</!- G  u///${{D1H;ejjQWX#kk3&

6RiinnEEMM % <</ N   %{{D1H;ejjQWX#kk3&

6RiinnEEMM % <</ N 3 	"H **??3	(( E 	  	" "s&   ?AS3G.S'0S3'S0	,S33S<c                   |j                   t        j                  u rm|t        d      t	        |       5  t        j
                  t        |j                        |j                  d      }d d d        t        | |j                        S t	        |       5   ||||      }d d d        | j                  j                  | |j                        S # 1 sw Y   fxY w# 1 sw Y   <xY w)Nz2dtype argument is not supported by sparse_to_denser|   r   )r   masked_grad)r   rA   r   r   r   r   r[   r  r   r   fake_devicer   r   )rs   rT   selfr   r  r  s         r0   	_to_denser    s     {{e&&&STT))4 	++djj!jjC	 )S$*:*:;;	%i	0 ?4u+>?**??3(( 	 	? ?s   6CCCC%c                    t         j                  j                  | j                  v xrO | t        j
                  j                  t        j                  j                  t        j                  j                  fvS r;   )
rA   Tagdynamic_output_shapetagsr  indexTensornonzeror  repeat_interleaverT   s    r0   r   r   *  sU    //499< TJJt||33T5K5K5R5RS	T r2   c                    t        |      r;   )r   rr   s       r0   	dyn_shaper#  )  s     &d
++r2   Funique_consecutivec                  | j                   | j                   j                  st        |      |r|j                  n|j                  }||ddlm}	m}
  |
|j                               s|j                         dk(  rd}nm| j                   j                         }t        j                  dz
  }||j                         n|j                  |      } |
|      st        |      } |	||       ||r||_        n||_        ||j                  |f      g}n4 |j                  g |j                  d | ||j                  |dz   d   g}|d uxr" |j                   t#        j$                  d      k(  }|s|r>|j                  ||j                  n|j                  |   ft"        j&                        }n!|j                  dt"        j&                        }|j)                  |       |s|rD|j                  ||d   j                  n|d   j                  |   ft"        j&                        }n!|j                  dt"        j&                        }|j)                  |       t+        |      S )Nr   r   has_free_symbolsrM   r   r{   r   )r   r   r   unique_consecutive_memounique_memor   r   r(  numelr   sysmaxsizer   r   	new_emptyr  r  rA   r7   int64r^   r[   )rs   rT   rL   r   sortedreturn_inversereturn_countsr%  r   r   r(  maxvalr,  retreturn_if_dim_and_cpuinversecountss                    r0   _uniquer9  4  s    	#""AA *$//);#
%
%C #+	

  		,1A C%%<<>C[[1_F#&;CIIKCHHSME#E*U%cv6;!.1+"%
{}}cV$% s}}JciioJsJSYYsQwy5IJKtOV5<<PUCV0V.--CII399S>*;5;;   
 ---5JJw-KCFLLc!fll3.?-A  
 q4JJv:r2   c           	     $    t        | ||d |||      S r;   r9  )rs   rT   rL   r1  r2  r3  s         r0   unique2r<    s     9dCv~}UUr2   c           	     4    t        | ||d ||d      \  }}}||fS r   r;  )rs   rT   rL   r1  r2  uniquesr7  _countss           r0   uniquer@    s1     !(4dFNE!GWg Gr2   c                    ddl m} j                  rt        S j	                         }t        j                  |dk7  d        dk\  rn|z   j                        } ||k\        s || k        rt        j                  dfd       t        j                               }t        j                               }	d }
 |dk\        rj                         |	   z  z   }
n' |dk        rj                         |z   |	   z  z   }
|
S| j                  "| j                  j                  s| j                  st        |      | j                  j                         }
|= |	= |
t        d      j!                  ||	|
      S )Nr   guard_or_falsec                      y)Nz-select() cannot be applied to a 0-dim tensor.rf   rf   r2   r0   r   zmeta_select.<locals>.<lambda>  r   r2   Fc                 H    d dt        j                                d  S )Nzselect(): index z! out of range for tensor of size z at dimension )rZ   r   )r   r  r  s   r0   r   zmeta_select.<locals>.<lambda>  s+    &ug-NDIIK !u6 r2   z#new_storage_offset must not be None)r   rC  	is_sparseNotImplementedr   rA   _check_indexr   rZ   stridestorage_offsetr   allow_scalar_outputsr   r   rO   
as_strided)rs   rT   r  r   r  rC  ndimr   new_size
new_stridenew_storage_offsets     ```      r0   meta_selectrQ    s    E~~88:D		?
 #sTzC99S>Detm$uu}(E6	
 DIIK Hdkkm$Jeqj!!002UZ_5LL			"!002edljQTo5UU!&##8822.t44 '00GGI3!BCC??8Z1CDDr2   c           
     `    t        | |||dk\  r|n|t        |j                  d      z  |||      S )Nr   rM   )r9  r   rM  )rs   rT   rL   r   r1  r2  r3  s          r0   
unique_dimrS    s>     axS3sxx#33	 	r2   c           
     (    t        | |||d||d      S )NFTr$  r;  )rs   rT   rL   r2  r3  r   s         r0   r%  r%    s)     	 	r2   c                   ddl mmm} dfd}dfd}t	        |       dk(  rdgt	        |      z  S t        t        j                  | d      } ||dk(        }|r | || |            rt        |      S dgt	        |      z  }	|rUt        t	        |      dz
  dd      D ]7  }
|
t	        |      dz
  k(  rd|	|
<   t        ||
dz      d      |	|
dz      z  |	|
<   9 |	S t	        |      dz
  }
|d   }d}d}t        t	        |       dz
  dd      D ]  }|| |   z  }|dk(  s' || |dz
     dk7        s" |||dz
     ||z  k7        s7|
dk\  rN |||k        s |||
   dk(        r5||z  |	|
<   |||
   z  }|
dz  }
|
dk\  r |||k        r& |||
   dk(        r5 |||k7        r y |dkD  s||dz
     }d}d} |
dk7  ry |	S )Nr   )rC  guard_or_truesym_eqc                    r |       S | S r;   rf   )r   rC  size_obliviouss    r0   maybe_guard_or_falsez-_compute_stride.<locals>.maybe_guard_or_false  s    !!$$r2   c                    r |       S | S r;   rf   )r   rV  rY  s    r0   maybe_guard_or_truez,_compute_stride.<locals>.maybe_guard_or_true  s     ##r2   rM   r   )r   r   re   r   )r   rC  rV  rW  rR   r   operatormulrZ   ranger   )	old_shape
old_stride	new_shaperY  rW  rZ  r\  r,  
zero_numelrO  view_dchunk_base_stridetensor_numel
view_numeltensor_drC  rV  s      `           @@r0   _compute_strideri    sA     9~sS^##8<<A.E%eqj1J*6)Y+GHJ%&C#i.$8JC	NQ.B7 	FY!++%&
6" 	&1*-q1Jvz4JJ 6"		 ^aF%/^ !LJ#i.1,b"5 	(++q=	(Q, 71 <=#8a<(L;L,LL A+#J$=>'	&(9Q(>?%/2C%C
6"i//
! A+#J$=>'	&(9Q(>? #:#=>!|$.x!|$<! 
/0 |r2   c                ~    t        |       t        u r| S t        | t        j                        rddlm}  || d       S y )Nr   )optimization_hint)fallback)r5   r   rN   rA   r   r   rk  )r   rk  s     r0   _optimization_hint_or_nonerm  T  s4    E{c%&K 66r2   c                    ddl m}  || |k(        ryt        |       }t        |      }||||k7  ryt        j                  | |k(         y)Nr   rB  TF)r   rC  rm  rA   r   )lhsrhsrC  lhs_hintrhs_hints        r0   
_hinted_eqrs  ^  sR    DcSj!)#.H)#.H8+x8/C
 
LLr2   c           	     J   ddl m}m}  || j                         dk        ryt	        | j                               }|y|dk  r't        j                  | j                         dk         yd}d}t        t        t        | j                  | j                                           D ]|  \  }} ||dk(        rt	        |      }|dk(  rt        j                  |dk(         ;t        ||      st        ||      s y| ||      r|nt        j                  |d      z  }||z  }~ y)Nr   )rC  is_nested_intr   TFrM   )r   rC  ru  r,  rm  rA   r   reversedr[   zipr  rI  rs  sym_max)	arC  ru  
numel_hintexpected_strideexpected_stride_maxr   rI  	size_hints	            r0   !_is_contiguous_with_hinted_checksr~  p  s
   Saggi!m$+AGGI6JA~QWWY]#O s177AHHJ'?!@A  f$!)$.t4	>LL#&/2:'<
 }T':tdTU@VV4 " r2   c                    ddl m t        j                  |d      }t	        fd| j                         D              xs8 t	        fd| j                         D              xs t	        fd|D              S )Nr   has_guarding_hintFvalidatec              3  0   K   | ]  } |         y wr;   rf   r=   sr  s     r0   r?   z+_view_has_unbacked_input.<locals>.<genexpr>  s     7!!$$7   c              3  0   K   | ]  } |         y wr;   rf   r  s     r0   r?   z+_view_has_unbacked_input.<locals>.<genexpr>  s     <A$Q''<r  c              3  0   K   | ]  } |         y wr;   rf   r  s     r0   r?   z+_view_has_unbacked_input.<locals>.<genexpr>  s     7A$Q''7r  )r   r  utilsextract_shape_from_varargsrF   r   rI  )ry  r  r  s     @r0   _view_has_unbacked_inputr    sb     H,,UUCE 	7affh77 	8<<<	8777r2   c                   ddl }ddlm} ddlm dfd}ddl} || j                               } ||      }|r|syddlm}  |t              }	t        |      t        |      z   D ]?  }
|	|
j                  j                     j                  |
j                  j                  |
       A g }|	j                         D ].  }|j                         ^}}|D ]  }|j!                  ||f        0 |sy|D ci c]0  \  }}|j                  j                  |j                  j                  2 }}}d 	  ||j"                  fd	| j                         D        d
      } ||j"                  fd|D        d
      }|j%                  ||z
  j'                  |            }|dk7  ry	 |D ]  \  }}t1        j2                  ||k(          yc c}}w # t(        t*        t,        |j.                  f$ r Y yw xY w)a  
    Collect candidate (x, y) pairs whose runtime hints match (so they
    *could* be equal), then test whether substituting them into the
    view's numel equation makes the equation symbolically zero.
    Only commit the equalities (adds the real Eq guards via bool(x == y)
    which triggers set_replacement) if the substitution actually solves
    the view validity check.

    This avoids polluting the shape env with spurious guards from probing.

    Returns True if at least one equality was committed.

    Conservative: only considers SymInts that appear as a top-level dim of
    the input or target (skipping the -1 marker), and skips already-equal
    pairs, and skips unbacked symbols.
    r   Nr   )free_unbacked_symbolsc                    g }| D ]l  }t        |t        j                        s|j                  j                  }|j
                  }t        |      dk7  s||vrS |      r\|j                  |       n |S )z>Keep only SymInts whose expr is a single bare *backed* symbol.rM   )rN   rA   r   nodeexprfree_symbolsrR   r^   )dimsr  r  r  freer  s        r0   _atomic_symsz3try_duck_specialization_first.<locals>._atomic_syms  sr    "$ 		Aa.66;;D$$D4yA~T!1$T*JJqM		 
r2   F)defaultdictc                f    t        | t        j                        r| j                  j                  S | S r;   )rN   rA   r   r  r  )r  s    r0   _expr_ofz/try_duck_specialization_first.<locals>._expr_of  s"    (ELL9qvv{{@q@r2   c              3  .   K   | ]  } |        y wr;   rf   r=   r  r  s     r0   r?   z0try_duck_specialization_first.<locals>.<genexpr>  s     'F'Fr   rM   c              3  .   K   | ]  } |        y wr;   rf   r  s     r0   r?   z0try_duck_specialization_first.<locals>.<genexpr>  s     +GAHQK+Gr   T)re   zlist[torch.SymInt])r]  	functoolsr   r   r  sympyr   collectionsr  r-   rZ   r  hint
setdefaultr  r   r^   r^  simplifysubs	TypeError
ValueErrorAttributeErrorSympifyErrorrA   r   )ry  r  r]  r   r  r  a_symstarget_symsr  bucketsr  
candidatesmembers	canonicalrestmcr  a_numelshape_numeldiffr  r  s                        @@r0   try_duck_specialization_firstr    s   "  K !&&(#Fu%K (9DT9JG&\D-- 8''Q78 ;=J>># .">>+	D 	.Ay!n-	..
  .8*%)QQVV[[ *D *
A'FQVVX'FJX\\+G+GK~~w4::4@A19   1Q!V)* z>53E3EF s   65G2A0G G/.G/c                r    ddl m} ddlm}m} t        j                  d      t        j                   j                                j                  dk(  rO }D ]:  }	t        j                  |	dk(         t        j                  j                  |d      }< | u r |       S |S t              dk(  rY } j                  D ]:  }	t        j                  |	dk(         t        j                  j!                  |d      }< | u r |       S |S t#        t$        j&                  d      }
t        j                   j                         |
k(   fd       t              t         j                        k(  r! | | j                              r |       S |rt)               r)nt+               rt-              } j/                  |      S t1         j3                          j5                         |	      }| j/                  |      S |rt        j6                  j8                  j:                  j<                  st?               rt        j6                  j8                  j:                  j@                  r|stC               rtE         d
|d
      S tG               rt-              } j/                  |      S tE         d|      S |r;t-              } jI                  t        jJ                        j/                  |      S d j                   d j5                          d d}tM        |      )Nr   )view_ofrC  rW  Fr  rM   r   c                 *    d j                    d dS )Nz&Could not reshape a tensor with shape  as a tensor with shape !)r  )ry  r  s   r0   r   z%_view_unbacked_meta.<locals>.<lambda>%  s    8	AYZ_Y``ab r2   )rY  T)size_oblivious_enabled
allow_copytried_duck_specialize)r  r  memory_formatz Cannot view a tensor with shape z and strides r  r  )'torch._primsr  r   rC  rW  r  r  
infer_sizer,  rM  rA   r   _refs	unsqueezerR   r  squeezer   r]  r^  r   r   r   rL  ri  r   rI  fxexperimental_configbacked_size_obliviousr  unify_view_symbols_bso_metar  _view_unbacked_metar~  clonecontiguous_formatr  )ry  r  r  r  r  r  rC  rW  _alengthr  stridesnew_stridesmsgs   ``            r0   r  r    s    %L ,,UUCE UAGGI.E 	vv{ 	/FLL1%&&r2.B	/ 71:I 5zQgg 	-FLL1%$$R,B	- 71:Iua0K	LL		[ b
 5zS\!nVE1775K&Lqz$:a a@P-e4||E7++!	!((*e4JK ||E;// %%;;#Au- HH!!))EE)-a7&'+%&*  -Q/1%8G<<w//"uUz
 	
 -e4wwU%<%<w=HHPWXX,QWWI]188:,Nfglfmmn
oC
S/r2   c           
        |j                   s|j                  rt        S t        j                  g ||j                          }t        |      r<t        | ||g| }t        t        |j                  t        j                              S t        | |t        t        |j                  t        j                              g| S Nr  )rF  	is_mkldnnrG  r  r  r,  r   
_view_metatyping_castr   r  rA   r  )rs   rT   ry  r  views        r0   _reshape_copyr  f  s     	{{akk /e/QWWY/Ea )T15u5

1H1H
I
 	
 
AGG%:Q:QG$RS
 	
 	
r2   r  c                  t         j                  j                  j                  j                  st        ||      rt        t        t        |||            S t        t        t        j                  j                  |g|d|i      S )Nr  r  )rA   r  r  r  r  r  r  r   r  r  _reshape_view_helper)rs   rT   ry  r  r  s        r0   r  r  }  sv     xx$$::>V	5? +AuL
 	
 KK,,QNN:N
 	
r2   )r  c               Z    t        | ||g|ddi}||S t        j                  d |      S )Nr  Tc                B    | j                  t        j                        S r  )r  rA   r  r   s    r0   r   z!_view_meta_copy.<locals>.<lambda>  s    !''(?(?'@ r2   )r  r   tree_map)rs   rT   ry  r  r  results         r0   _view_meta_copyr    s=     	4DUDtDF
??@ r2   c                    |U| j                   | j                   j                  st        |      | j                   j                         }ddlm}  ||       |j                  |      S )Nr   r   )r   r   r   r   r   r   r/  )rs   rT   repeatsoutput_sizer   s        r0   repeat_interleave_tensorr    sc     '&&EE-d33))@@B 	T!+.[))r2   c                   |j                   x}|S | j                  "| j                  j                  s| j                  st        |      t	        |j
                        r| j                  j                         }nxt        |j
                        r| j                  j                         }nHt        |j
                        r| j                  j                         }nt        d|j
                         ||_         |S )Nz local_scalar_dense/item NYI for )	item_memor   rK  r   r   r   create_unbacked_symfloatr   r   r   create_unbacked_symboolNotImplementedError)rs   rT   rL   r   s       r0   local_scalar_denser    s    
 ]]'"44.. +400cii 88:	#))	$668	#))	$779!$DSYYK"PQQCMHr2   c                    t         j                  j                  j                  j	                  |      j                  d      S )NrM   )rA   r   r  r  r  unbind)rs   rT   rL   s      r0   nonzero_numpyr    s.     99>>!!))#.55a88r2   c                J   | j                   | j                   j                  st        |      |j                  x}4ddlm}m} ddlm} ddl	m
}  ||j                               s|j                         dk(  rd}n| j                   j                         }t        j                  dz
  } ||j                               st        |j                               }nt!        j"                  |j$                        j&                  }	 ||	j(                  |	j                   j*                        }
t-        |
j.                  |      rt        j                  dz
  }n|
j.                  } |||       ||_        |j1                  ||j3                         fd|ft4        j6                        S )Nr   r'  IntInfinitybound_sympyrM   r)  r   )r   r   r   nonzero_memor   r   r(  torch.utils._sympy.numbersr  torch.utils._sympy.value_rangesr  r,  r   r-  r.  r   mathprodr  r  r  var_to_rangerN   uppernew_empty_stridedr   rA   r0  )rs   rT   rL   r   r   r(  r  r  r4  	prod_node
prod_ranges              r0   r  r    sI    	#""AA *$//(	
 	;?		,1A C%%<<>C[[1_F#CIIK0SYY[) IIcii055	(NNI$7$7$D$D
 j..< [[1_F'--F%cv6  #swwy!1As85;; OOr2   c                   t        |      dk7  rt        dt        |       d      || j                  | j                  j                  st	        |      | j                  j                         }t        j                  dz
  }ddlm	}m
}  ||j                               st        |j                               } ||d|       |g|j                  dd  }|j                  |      S )NrM   z&Only one jagged dim is supported, got z offsetsr   r'  r   r   )rR   rO   r   r   r   r   r-  r.  r   r   r(  r,  r   r  r/  )	rs   rT   paddedr   total_Lr4  r   r(  output_shapes	            r0   _padded_dense_to_jagged_forwardr     s     7|q4S\N(K
 	
 '&&EE .d33%%<<>q	

  /(F!'qf=/fll12./LL))r2   c                6   ddl m}m}  | ||dk\  || k              r|S  | ||dk  ||  k\              r|| z   S  |||  k        ry ||| kD        r| S  ||dk\        rt        j                  ||       S  ||dk        rt        j
                  || z   d      S y )Nr   )rC  sym_and)r   rC  r  rA   sym_minrx  )r   r  rC  r  s       r0   _compute_slice_indexr  =  s    Mgeqj%4-89		5TE>:	;t|		&		%	
	#}}UD))			"}}UT\1--r2   c                   ddl m}m} | j                  }	|j	                         }
|
dk(  rt        d      t        |j	                         |      }t        |j                               }t        |j                               }|dk  rt        d      |dnt        ||   |      } ||t        j                  k(        s|||   nt        ||   |      }d }|N|L |||k\        r||z
  |z   dz
  |z  }n2 |||k\        rd}n$t        j                  ||z
  d      }||z   dz
  |z  }|P|	t        d      |	j!                         }t        j"                  |dk\         t        j"                  |||   k         ||   |z  }||j%                         |||   z  z   }n5|	t        d      |	j!                         }t        j"                  |dk\         |||<   |||<   |j&                  rt)        d      |j+                  |||      S )Nr   )rC  statically_known_truez,slice() cannot be applied to a 0-dim tensor.zslice step must be positiverM   z$Must have shape_env to create symintz<Slice decomposition for quantized tensors aren't implemented)r   rC  r  r   r   r   r   rZ   r   rI  r  r-  r.  rA   rx  rO   r   r   rJ  is_quantizedr  rL  )rs   rT   r  r   startendsteprC  r  r   rM  sizesr  start_index	end_indexrN  r  rO  rJ  s                      r0   slice_forwardr  P  s(   
 ##I88:DqyIJJ
488:s
+CE4;;=!Gqy899 }!*>uSz5*QK !!34 	c
!%*c2  $(H9#8){23!K/$6:tCHK945H
 ==[!8!<DtaD0H  !GHH335X]#Xs+, $J ,,.ws|1KK !GHH"99;^q()E#JGCL!J
 	
 ug~>>r2   c                   | j                   | j                   j                  st        |      | j                   j                         }t        j
                  dz
  }ddlm}m} ddl	m
} ddlm}	  ||j                               st        |j                               }
nt        j                   |j"                        j$                  } |	|j&                  |j                   j(                        }t+        |j,                  |      rt        j
                  dz
  }
n|j,                  }
|
dkD  r|
} |||       |j/                  |f      S )NrM   r   r'  r  r  r   r)  )r   r   r   r   r-  r.  r   r   r(  r  r  r  r  r,  r   r  r  r  r  r  r  rN   r  r/  )rs   rT   r  maskr   r4  r   r(  r  r  num_elementsr  r  s                r0   masked_selectr    s    
 	#""AA *$//



4
4
6C [[1_F 7;
 DJJL)4::<(IIdjj)..	 1D1D1Q1QR
j&&4;;?L%++Lacv.>>3&!!r2   )r7   r   c                  |2|j                         |k7  rt        d| d|j                                |2|j                         |k7  rt        d| d|j                                |*|j                  |k7  rt        d| d|j                         |*|j                  |k7  rt        d| d|j                         |+|j
                  |k7  rt        d| d|j
                         y y )Nz!Tensor sizes mismatch! Expected: z, Got: z#Tensor strides mismatch! Expected: z!Tensor dtype mismatch! Expected: z"Tensor layout mismatch! Expected: z"Tensor device mismatch! Expected: )r   rO   rI  r   r   r7   )rs   rT   tr  r  r   r7   r   s           r0   assert_tensor_metadatar    s    668u 3E7'!&&(L  88:  5gYgahhj\R  77e 3E7'!''K  88v 4VHGAHH:N  88v 4VHGAHH:N   r2   c                N    t         j                  j                  | j                  v S r;   )rA   r  data_dependent_outputr  r!  s    r0   r   r     s    uyy>>$))K r2   c                    t        |      r;   )r   rr   s       r0   data_depr    s     't
,,r2   c                    |D ]<  }||j                   t        j                  t        j                  fv s3t	        |        y r;   )r   rA   r   uint8r   )rT   r  r  r  s       r0   check_no_bool_index_tensorsr    s<      4U[[0I!I-d334r2   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NTrx   rz   )r   r7   r   r8   r/  r  r   )rs   rT   rt   ru   r   r   r   r  s           r0   )run_and_return_new_tensor_of_input_devicer    s     14TMAz G$++J	%i	0 +D#F#)*5--		*C+
 j!!
ij11+ +s   /A::Br  primsprimc                &    | j                   t        v S r;   )	namespace_is_builtin_namespacesri   s    r0   
is_builtinr%    s    <<111r2   c                ^    t         j                  j                  | j                         d      S )NMeta)rA   rB   ._dispatch_has_computed_kernel_for_dispatch_keyr   r!  s    r0   r+   r+     s     88BB499;PVWWr2   c                t    t        |       xr, | j                         j                  d      xr t        |       S )Nzaten::_foreach_)r%  r   
startswithr+   r!  s    r0   r   r   %  s4    D! 		01 r2   c           	     l   t        j                  ||j                               D cg c]B  }t        |t        t
        f      r*t        |      rt        |d   t        j                        r|D }}	 t        |       5   ||i |}d d d        s|S |st        d      g }t        |      D ][  \  }}	t        j                  ||D 
cg c]  }
|
|   	 c}
      \  }}|j!                  | j"                  j%                  | |	|             ] |S c c}w # 1 sw Y   xY w# t        $ r	 t        cY S w xY wc c}
w )Nr   ztensor_lists must not be empty)r   r   r   rN   rZ   r[   rR   rA   r  r   r  rG  rO   	enumerater   _find_common_devicer^   r   r   )rs   rT   rt   ru   rL   tensor_listsout_metaout_fakeimeta_ttlr7   r   s                r0    foreach_run_and_map_input_devicer4  $  s1    ??49cD%=)Hs1vu||,	 	L ))4 	-T,V,H	-
 =>>Hx( 
	6224,9WB"Q%9WX	++@@66	

 O;	- 	-  :Xs6   AD1D <	DD D1DD D.-D.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_TensorTrx   rz   )torch._meta_registrationsr6  r   r7   to)	rs   rT   rt   ru   r6  r   r   r   r  s	            r0   index_tensorr9  O  sc     <0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)r7  r;  )rs   rT   rt   ru   r;  s        r0   embedding_bagr<  b  s,     =	 3!42623 3 3s   $c           	     D   ddl m} t        |||d      \  }}|d   }|d   }|j                  |j                  k7  r8|j                  j                  dk7  r|j                  j                  dk7  rt
        S | 5  t        t         ||i |      cd d d        S # 1 sw Y   y xY w)Nr   )	embeddingTrx   weightr  r|   )r7  r>  r   r7   r5   rG  r  r   )	rs   rT   rt   ru   meta_embeddingr   r   r?  r  s	            r0   r>  r>  l  s     F04TMAz !F#G'MM&(NN6)	 H:~t'Fv'FGH H Hs   6BBc                    t        | |||      S r;   )r  rr   s       r0   multi_device_op_defaultrB    s     5YdFSSr2   c                    t        |       5   ||i | d d d        t        |||d      \  }}|d   S # 1 sw Y    xY wr  )r   r   )rs   rT   rt   ru   r   r   s         r0   multi_device_op_outrD    sT    
 
&i	0 df 14TMAz g s   	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 )NTrx   r   rz   r   rM   c                 0    d  d dj                    dS )NzMismatching z device between self (z) and values (r   r6   )rT   self_devicer   s   r0   r   z index_put_impl.<locals>.<lambda>  s&    ,tf$:;-~V\VcVcUddef r2   )
r   r  rA   r   rM  r,  r  r  
index_put_r  )	rs   rT   rt   ru   r   r   r  rG  r   s	    `     @@r0   index_put_implrI    s    
 14TMAz !FW%11K	LLv)))WfkkQ.>.V6<<>UVCVf
 4ItT6
RCt&&&'""
r2   c                    t        |      r;   )r   rr   s       r0   nested_tensors_unsupportedrK    s     't
,,r2   c                0    |t         v rt        d|       y )NzNYI: )_device_not_kwarg_opsrO   rr   s       r0   nyirN    s#      $$uTF^,, %r2   c           
         t        |||d      \  }}|d   }|d   }|t        j                  j                  t        j                  j                  t        j                  j
                  fv rW|j                  |j                  k7  r>|j                  s2 j                  s&t        d|j                   d|j                   d      |j                   5  |j                  }dd	lm t        fd
|j                  D              xr t        fd|j                  D              }	|	sd }
n|j!                  d      }t#        |d   |d   |d   |d   |d   |d   |      }||j!                  d      |d<   t%        j&                  j(                  ||fi |}|dk(  rH|j                  s<|j*                  s0|j-                         j/                  d      }|j/                  d      }t$        j&                  j1                  |||      }
d d d        	 	 	 	 	 	 d fd}t3               5   |di |}|t        j                  j                  t        j                  j                  t        j                  j
                  fv 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)NTrx   rz   r?  zInput type (z) and weight type (z) should be the samer   r  c              3  .   K   | ]  } |        y wr;   rf   r  s     r0   r?   zconv.<locals>.<genexpr>  s     D!*1-Dr   c              3  .   K   | ]  } |        y wr;   rf   r  s     r0   r?   zconv.<locals>.<genexpr>  s      M
%&a M
r   biasrI  paddingdilation
transposedoutput_paddinggroups)rI  rS  rT  rU  rV  rW  rR  
bias_sizes   r   c                    | | S |i| j                         dk(  rD|t        j                  k(  r1| j                  d      j	                  |      j                  d      } n| j	                  |      } t        |       S )NrY  r   r  )r   rA   channels_lastr  r8  r  r   )r  mem_fmtr7   rs   s     r0   convertzconv.<locals>.convert!  st     9Huuw!|5+>+> >KKN%%G%<DDQGDDwD/)Q//r2   rM   )r  ztorch.Tensor | Noner\  ztorch.memory_format | Nonere   FakeTensor | Nonerf   )r   r  convolutionr  _convolution
deprecatedr   r  allow_non_fake_inputsr   r  rM  r   r  r   r  rD   r-   rA   rB   _select_conv_backendis_xpu
contiguousr  %_conv_determine_backend_memory_formatr   )rs   rT   rt   ru   r   r   input_r?  k
all_hintedr\  rR  select_kwargsconv_backendr]  r  r7   r  s   `               @@r0   convrl    s    14TMAz  F!F 	$$%%((
	
 LLFLL(  //6<<. )~13
 	
 F	 *KK 	LDv||DD 
 M
*0,,M
 J

  G >>&)D/3!(+"9-#J/%l3)*:;!(+0M |.8nn\.Jl+ 8888"/L Avf..v}}**,66q9))!,hhDDGQ*X00)C0	0 
&i	0  Z $$%%((
 

 3(  A(A(A% s* *r s    D0J:$A K"K:KKc                   | j                   | j                   j                  st        |      | j                   j                         }ddlm}  ||       t        j                  ||k\         |!|j                  |t        j                        S |j                  t        j                  k(  r!|j                  |t        j                        S |j                  |t        j                        S )Nr   r   r   )r   r   r   r   r   r   rA   r   r/  r   r   float32float64)rs   rT   inputsweights	minlengthrN  r   s          r0   bincountrs  ?  s     	#""AA *$//""99;HOh'	LLY&'

;;	%--	'>>>>r2   c                @   | j                   | j                   j                  st        |      | j                   j                         }ddlm}  ||       |s|j                  dd      }|j                  dd  }|j                  |      }|j                  |f      }	||	fS )Nr   r   rM   )	r   r   r   r   r   r   	transposer  r/  )
rs   rT   rp  lengthsbatch_firstnew_batch_sizer   res_sizepacked_data
batch_sizes
             r0   _pack_padded_sequencer|  ]  s     	#""AA *$//((??ANOn-!!!Q'||ABH""8,K!!>"34J$$r2   c                     d fd}|S )Nc                    | t         <   | S r;   )FAST_OP_IMPLEMENTATIONS)r_   rT   s    r0   rb   z-register_fast_op_impl.<locals>.impl_decorator  s    (/%r2   rc   rf   )rT   rb   s   ` r0   register_fast_op_implr    s     r2   c                  
 ddl m} t        |       }t        |      }t        ||      }dg|z  }t	        |dz
  dd      D ]|  
|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|
<   ~ t        |      S )Nr   rB  rM   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 r   rf   )r1  sizeAsizeBs   r0   r   zinfer_size.<locals>.<lambda>  s'    ,UG 4005w 7**+A/ r2   )r   rC  rR   r   r_  rA   r   r[   )ry  brC  dimsAdimsBrM  expandedSizesr   dimAdimBr1  r  r  s             @@@r0   r  r    s     EFEFEueD()sTzM4!8R$ JAqy6!qy6!19$!19$! 	5A:&V.!*DVQV/	
 %35A:$>5Ea1J2 r2   c                     d fd}|S )Nc           	         d fd}t        d       }d }|D ]:  }t        |t        j                        r|j                  nd}||}t        ||      }< |t        d      ddlm}m	}	 |D ]Z  }t        |t        j                        st        |j                        t        |      k(  s@ | |	|j                  |            sZ n	  |d      S t        j                  d      }
|
}d }d	}|D ]  }t        |t        j                        sd
} ||
k(  r%|j                  j                  dk7  r|j                  }|#t        j                  k7  rd
}b|j                  }o||j                  k7  sd
} |rt!        |d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%        |      r`|D ][  }t        |t        j                        s|xr t'        |t        j(                        }|xr t'        |t        j*                        }] |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   )r  rt   ru   modeslow_refs    r0   slowz=make_fast_binary_impl.<locals>.fast_binary_impl.<locals>.slow  s6    %u& 1001 1 1s   $-zattempt fastrf   zfinal_shape must not be Noner   r  z#both tensors nontrivially broadcastr{   FTtype_promotion_kindrM   errorr  zfast is_contiguousr|   )r   r7   r  r6   zfast channels_lastzno contiguity match)r  strre   r   )r    rN   rA   r  r  r  rO   r   rC  rW  rR   r7   r5   r   DEFAULTr   r   r   r8   r   r  r[  r   r   )r  rt   ru   r  operandsfinal_shaper`   r  rC  rW  r{   common_devicecommon_dtypehas_different_input_dtypesr   current_cpu_scalars_on_non_cpumax_cpu_scalars_on_non_cpudefinitely_contiguousdefinitely_channels_lastr  r  s   ```                r0   fast_binary_implz/make_fast_binary_impl.<locals>.fast_binary_impl  s   	1 	1
 	N#  )- 	9B+5b%,,+GrxxRE"#
 %[%8K	9  !?@@P  
	?B2u||,MS%55"6"((K#@A
	? =>> ll5!&)+/%*" 	2Bb%,,/-1*#		%(? "		#&*I*Q*QQ15.#%88L)-1*	2 & 1/BOA| *+&%&" 	%Bb%,,/#A"))s:J15OO=(.!3.m+G}$	% !%#' 
 &m4 !"ell3) @%*A*A & - @%*=*= ) !,-&!"'"9"9	 %	 	 $,-&!"'"5"5	 %	 	 )**r2   )r  r#   rt   r   ru   r   re   r   rf   )r  r  r  s   `` r0   make_fast_binary_implr    s    K+Z r2   c                ^   t               5  t        |       5  t        j                  j                  j
                  j                  |      }d d d        d d d        |r#t        | |j                  |j                        S t        | |j                        S # 1 sw Y   MxY w# 1 sw Y   QxY w)N)r   )
r   r   rA   r   r  detachr  r   r7   r   )rs   r   include_realr  s       r0   fast_detachr  H  s     
	 /!=i!H /iinn##++A./ /)S!((NNiahh//	/ / / /s"   B#4BB#B 	B##B,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        j                                t        | j                  j                  j                  j                        t               t         S )Nr   )r  )torch._refsr  r   r  addr  r  r  subr^  divr   INT_TO_FLOATr  r  r  r  )rA   s    r0   r)   r)   R  s   4%))..,,334ekkoo. 5%))..,,334ekkoo. 5%))..,,334ekkoo. 5%))..,,334KKOO ? L L	
 9%))..//778E""r2   )r/   r'   re   zdict[_T, bool])r7   ztorch.devicere   r   )rH   r   re   r   )rT   r   re   r   )ra   zUCallable[[OpOverload], bool] | OpOverload | list[OpOverload] | tuple[OpOverload, ...]re   .Callable[[Callable[_P, _R]], Callable[_P, _R]])r`   r   re   r   )r`   r   re   None)
rs   r#   rT   r   rt   r   ru   r   re   r   )
rs   r#   rT   r   rt   r   ru   r   re   r   )
rs   r#   rT   r   rt   r   ru   r   re   r   r;   )
rs   r#   rT   r   r   r  rt   object | Nonere   r   )rs   r#   rT   r   r   r   re   r  )
rs   r#   rT   r   r   r  rt   r  re   r   )r   FakeTensorLikere   zlist[int] | None)
r   z	list[int]r   r   r   r   r   r   re   r   )r   r   r   r   r   r   re   r   )rs   r#   rT   r   r   
int | Nonere   ztorch.SymInt)r   r   re   r   )rs   r#   rT   r   r  r  r   r  r  zSequence[int]r   torch.layout | Nonere   r   )NN)rs   r#   rT   r   r  r   r   torch.dtype | Noner  zbool | Nonere   r   )
rs   r#   rT   r   rt   r   ru   r   re   r  )TFF)rs   r#   rT   r   rL   r   r   r  r1  r   r2  r   r3  r   r%  r   re   )tuple[FakeTensor, FakeTensor, FakeTensor])rs   r#   rT   r   rL   r   r1  r   r2  r   r3  r   re   r  )TF)rs   r#   rT   r   rL   r   r1  r   r2  r   re   tuple[FakeTensor, FakeTensor])rs   r#   rT   r   r  r   r   r   r  r$   re   r   )rs   r#   rT   r   rL   r   r   r   r1  r   r2  r   r3  r   re   r  )FFN)rs   r#   rT   r   rL   r   r2  r   r3  r   r   r  re   r  )F)
r`  Sequence[IntLikeType]ra  r  rb  r  rY  r   re   zlist[IntLikeType] | None)r   r   re   r  )ro  r   rp  r   re   r   )ry  torch.Tensorre   r   )ry  r  r  ShapeType | tuple[ShapeType]re   r   )ry  r  r  r  r  r   r  r   r  r   re   r  )
rs   r#   rT   r   ry  r   r  r   re   zFakeTensor | Exception)rs   r#   rT   r   ry  r   r  r   r  r   re   r   )rs   r#   rT   r   ry  r   r  r$   r  r^  re   r   )
rs   r#   rT   r   r  r   r  IntLikeType | Nonere   r   )rs   r#   rT   r   rL   r   re   zBint | float | bool | torch.SymInt | torch.SymFloat | torch.SymBool)rs   r#   rT   r   rL   r   re   list[FakeTensor])rs   r#   rT   r   rL   r   re   r   )rs   r#   rT   r   r  r   r   r  r  r  re   r   )r   r$   r  r$   re   r  )r   NNrM   )rs   r#   rT   r   r  r   r   r   r  r  r	  r  r
  r   re   r   )
rs   r#   rT   r   r  r   r  r   re   r   )NNN)rs   r#   rT   r   r  r   r  ztorch.Size | Noner  ztuple[int, ...] | Noner   r  r7   ztorch.device | Noner   r  re   r  )rT   r   r  r   r  zlist[FakeTensor | None]re   r  )
rs   r#   rT   r   rt   ztuple[Any, ...]ru   zdict[str, Any]re   r   )
rs   r#   rT   r   rt   r   ru   r   re   zlist[FakeTensor] | None)
rs   r#   rT   r   rt   r   ru   r   re   z5tuple[FakeTensor, FakeTensor, FakeTensor, FakeTensor])
rs   r#   rT   r   rt   r   ru   r   re   zKFakeTensor | tuple[FakeTensor | None, FakeTensor | None, FakeTensor | None])Nr   )rs   r#   rT   r   rp  r   rq  r^  rr  r$   re   r   )rs   r#   rT   r   rp  r   rv  r   rw  r   re   r  )rT   r   re   r  )ry  r  r  r  re   ztuple[IntLikeType, ...])r  zCallable[..., Any]r  r   re   zCallable[..., FakeTensor])rs   r#   r   r   r  r   re   r   )re   z$dict[OpOverload, Callable[..., Any]])
__future__r   r  r   r  r]  r-  r   typingr   r   r  r   r	   typing_extensionsr
   rA   torch._custom_optorch._loggingtorch._prims_common_prims_commonr  torch._dispatch.pythonr   
torch._opsr   r   r   r   r   r   r   r   r   r   r   r   torch._subclasses.fake_tensorr   r   r   r   r   r   torch.fx.operator_schemasr   torch.utils._statsr    collections.abcr!   r"   r#   torch.typesr$   r  r  r%   r&   r'   _pytreer   __all__rY   r(   _opsr   r  r1   r8   r   r  r  	full_like	ones_like	rand_like	generatorgenerator_out
randn_likerandint_likeTensor_generator
Tensor_outTensor_generator_out	low_dtypelow_generator_dtypelow_dtype_outlow_generator_dtype_out
zeros_liker/  r  new_full	new_zerosnew_onesr~   _resize_output__nested_tensor_from_tensor_list
pin_memoryr8  r7   prim_Device	is_pinned_pin_memory_resize_outputrM  _list_to_tensorr}   r<   cacherV   r\   rj   rp   __contains__rv   r   r   profilerr   r   r   r   r*   r   r   r   r   r   r   r   r   r  r  r#  r9  _unique2r<  r@  selectr   rQ  rS  r%  ri  rm  rs  r~  r  r  r  r  r  _unsafe_viewr  	view_copyr  r   r  item_local_scalar_denser  r  r  r   r  slicer  r  _assert_tensor_metadatar  r  r  r  r$  r%  r+   r4  r  r9  _embedding_bagr<  r>  _unsafe_index_putcopycopy_slice_scatterdiagonal_scatterrB  rD  	index_putrH  rI  _nested_view_from_buffer_nested_view_from_buffer_copyrK  rN  r_  r`  ra  convolution_backwardrl  rs  r|  r  r  r  r  r  r  r)   r   s   0r0   <module>r     s   "     
  C C '    # 7 !     C * 2<' ell*t_T]T]			    zz~~&  ( 'OO'OO' 	NN' 	NN	'
 	NN' 	NN' 	NN' 	NN' 	NN' 	NN  ' 	OO' 	OO' 	OO' 	OO!!' 	'  	!'" 	#'$ 	&&%'& 	  ''( 	**)'* 	+', 	##-'. 	/'0 	))1'2 	##3'4 	--5'6 	OO7'8 	OO9': 	NN;'< 	NN='> 	""?'@ 	A'B 	MMC'D 	MME'F 	NNG'H 	NNI'J 	MMK'L 	MMM' T $  ((00((,,OOGGNNGGNN  #'"6"6!8  	 	
 44) )667KK%/K8;KGJKK 8K ().-./00%/08;0GJ00 0 *0: $..(()%/8;GJ	 *  %))$$;;CCDRV	C	C%/	C7:	CBO	C	C E	C %))$$::BBC		%/	9<			 D	 %))$$??GGHRV  %/ 7: BO   I  $''%%&$''..!%/8;GJ " '$
 %&--%/-8;-GJ-- '-D $//))*%%%/%8;%GJ%% +% $??GGH::%/:8;:GJ:: I:E @
 	
 (B $--''( #'ff
f f 	f
 f  f f )fR $..(()
 !%#
  	
   *4 T
,,%/,8;,GJ,	,
,  O  %OO
O 
O 
	O
 O O O O /Od $--''(
  VV
V 
V 	V
 V V /V )V $,,&&'
  



 

 	

 
 #
 (
 $++//"5E5E
5E 5E 
	5E
 5E 5E #5Ep $//))*  
 
 
	
    / +* $))112
 !
 
 	
  
 / 32 !	L$L%L %L 	L
 L^$ F8	Vx $("'ii'i !i 	i
  i iX $$$,,-

%/
4>
HK

 .
, $))##$$##++, 



 
 	

 
 
 - %
( $..(() "
  	
 
  ** $((//0
 '+	**
* * $	*
 * 1*. %))..%%--.%))..44<<=%/6@G > /. %))....66799%/96@99 89 %))..((001/P 2/Pd %))..@@HHI #'%*%*
%* %* 	%*
  %* %* J%*P& %))..&&--.
 J?J?
J? J? 
	J?
 J? 
J? J? J? /J?Z %))....667("("%/("7A("IS("(" 8("V %))..88@@A
  $&* $# #'"&##
# # 	#
 $# #  #  # 
# B#N KL--%/-8;-GJ-	- M-4
4&41H4	422
2 2 	2
 2* %VWf= 2X
 
  %/ 8; GJ  
 L $**##$""%/"8;"GJ"" %"$ $%%--.33%/38;3GJ3:3 /3 $..(()HH%/H8;HGJHH *H, $((001$))##$$**$$%$$$,,-$''//0TT%/T8;TGJTT 1 . & % 2
T $))-- $$$(()

%/
8;
GJ

 * !
 $..(()$//))*%/8;GJ + *( $66>>?$66::;$//778$44<<=--%/-8;-GJ-	- > 9 < @-  ' NN""GGNNGG00880044

 	
--
   !!$$!!))	bb%/b8;bGJbPbbJ %))..))112
 "&??
? ? 	?
 ? ? 3?: %))..66>>?%%
% % 	%
 % #% @%>  

3" " !6" " N <[;b;bQ Q8Q Qn DI00",0<@00 # #is   $A6AC/