
    OgE                    T   d dl mZ d dlmZ d dlmZ d dlmc 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 d dlmZ d dlmZmZmZmZmZmZmZ d d	lm Z  erd d
l!m"Z" d dlm#Z#  ed       G d d             Z$ ed       G d d             Z%d!dZ&	 	 	 	 d"dZ' ed       G d d             Z( e(d dejR                         e(ddejT                        gZ+	 	 	 	 	 	 	 	 	 	 d#dZ,ed$d       Z- ed       G d d             Z.ed$d       Z/	 	 	 	 	 	 	 	 	 	 d%dZ0ed$d        Z1y)&    )annotations)	dataclass)TYPE_CHECKINGN)	translate)		BaseCTypeBindingCTypeExpr
NamedCTypeopmath_tscalar_tStructuredImplSignatureVectorizedCType)with_native_function)ArgumentBaseTyBaseTypeDispatchKeyNativeFunctionsGroup
ScalarTypeUfuncKey)
OrderedSet)Sequence)UfunctorBindingsT)frozenc                  \    e Zd ZU ded<   ded<   ded<   ddZddZdd	Zdd
ZddZddZ	y)UfunctorSignaturer   gz
int | Nonescalar_tensor_idxstrnamec                b    t        j                  | j                  | j                  t              S )N)r   r   )ufuncufunctor_argumentsr   r   r   selfs    Z/var/www/html/suriana-translation/venv/lib/python3.12/site-packages/torchgen/dest/ufunc.py	argumentszUfunctorSignature.argumentsI   s&    ''FFd&<&<x
 	
    c                    | j                         j                  D cg c]   }|j                  |j                   d      " c}S c c}w )N_)r(   ctorrenamer!   )r&   bs     r'   fieldszUfunctorSignature.fieldsN   s6    040@0E0EF1AFF81&FFFs   %Ac                     t        t              S N)r   r   r%   s    r'   returns_typezUfunctorSignature.returns_typeR   s     ""r)   c                N    dj                  d | j                         D              S )N
c              3  T   K   | ]   }|j                    d |j                   d " yw) ;N)typer!   ).0fs     r'   	<genexpr>z0UfunctorSignature.decl_fields.<locals>.<genexpr>X   s%     F1AFF81QVVHA.F   &()joinr/   r%   s    r'   decl_fieldszUfunctorSignature.decl_fieldsW   s    yyFFFFr)   c                    dj                  d | j                         j                  D              }dj                  d | j                         j                  D              }| j                   d| d| dS )N, c              3  <   K   | ]  }|j                           y wr1   declr9   as     r'   r;   z5UfunctorSignature.inline_defn_ctor.<locals>.<genexpr>[   s     E!QVVXE   c              3  T   K   | ]   }|j                    d |j                    d " yw)z_()Nr!   rD   s     r'   r;   z5UfunctorSignature.inline_defn_ctor.<locals>.<genexpr>^   s%     Sxr!&&3Sr<   (z) : z {})r=   r(   r,   r!   )r&   args_strinit_strs      r'   inline_defn_ctorz"UfunctorSignature.inline_defn_ctorZ   sc    99Et~~/?/D/DEE 99ST^^=M=R=RSS))AhZtH:U;;r)   c                    dj                  d | j                         j                  D              }| j                         j	                          d| dS )Nr@   c              3  <   K   | ]  }|j                           y wr1   rB   rD   s     r'   r;   z/UfunctorSignature.decl_apply.<locals>.<genexpr>b   s     F!QVVXFrF   z operator()(z) const)r=   r(   applyr2   cpp_type)r&   rK   s     r'   
decl_applyzUfunctorSignature.decl_applya   sI    99Ft~~/?/E/EFF##%..01hZwOOr)   N)returnr   rS   zlist[Binding])rS   r	   rS   r    )
__name__
__module____qualname____annotations__r(   r/   r2   r>   rM   rR    r)   r'   r   r   C   s4    !!
I

G#
G<Pr)   r   c                  <    e Zd ZU ded<   ded<   ded<   d
dZddZy	)UfuncSignaturer   r   r    r!   r	   	compute_tc                X    t        j                  | j                  | j                        S )N)r]   )r#   ufunc_argumentsr   r]   r%   s    r'   r(   zUfuncSignature.argumentsl   s    $$TVVt~~FFr)   c           
         | j                    ddj                  d t        || j                               D               dS )NrJ   r@   c              3  4   K   | ]  }|j                     y wr1   exprrD   s     r'   r;   z&UfuncSignature.call.<locals>.<genexpr>p   s     'Y1'Y   rH   r!   r=   r   r(   r&   ctxs     r'   callzUfuncSignature.callo   s8    ))Adii'Y	#t~~GW8X'YYZZ[\\r)   NrT   )rg   zSequence[Binding | Expr]rS   r    )rV   rW   rX   rY   r(   rh   rZ   r)   r'   r\   r\   f   s    
IG]r)   r\   c                    t        d | j                  j                  j                  j                  D              }|dk(  S )Nc              3  V   K   | ]!  }|j                   j                         sd  # yw)   N)r8   is_tensor_likerD   s     r'   r;   z<eligible_for_binary_scalar_specialization.<locals>.<genexpr>   s$      qvv?T?T?Vs   ))   )sum
functionalfuncr(   flat_non_out)r   num_tensorss     r'   )eligible_for_binary_scalar_specializationrs      s<     <<$$..;; K !r)   c                   i }g }| j                   j                  }t        j                  dt        j                  dt        j
                  d i}t        |       r0t        j                  t        j                  t        j
                  g}nEt        j
                  g}t        j                  t        j                  fD ]  }||vrJ d| d        |D ]  }||v rHt        | ||   ||   j                        }||   j                  D ]  }||j                  |i       |<    Pd }	t               }
t        j                  t        j                  fD ]D  }||vr|	||   j                  }	n|	||   j                  k(  sJ d       |
||   j                  z  }
F |	J | d|	 }t        | ||   |      }|
D ]  }||j                  |i       |<    t        | d|	 t        t               	      }|j#                         |j%                         j&                  z   }|j)                  d
|j                   d|j+                          d|j-                          d|j/                          d|j1                  |       d        |dj3                  |      fS )Nrk   r   zcannot use z on non-binary function)r   r!   z0ScalarOnly and Generic must have same ufunc namer+   ufunc::r!   r]   z%
template <typename scalar_t>
struct z3 {
  using opmath_t = at::opmath_type<scalar_t>;
  z
  z
  __device__ z {
    return z	;
  }
};
r4   )outufunc_inner_loopr   CUDAFunctorOnSelfCUDAFunctorOnOtherCUDAFunctorrs   r   r!   supported_dtypes
setdefaultr   
ScalarOnlyGenericr\   r   r   r/   r(   rP   appendr>   rM   rR   rh   r=   )r   ufunctor_sigs	ufunctorsloopsscalar_tensor_idx_lookupkeyskufunctor_sigdtype
ufunc_namer|   lkr!   	ufunc_sig	apply_ctxs                  r'   compute_ufunc_cuda_functorsr      s    JLMIEE""E""A##Qd 
 13&&''  
 $$%,,h.I.IJ 	LAE>K[3J#KK>	L 8
 :,%=a%@uQx}}L q22 F9E((3A6F 
3=<&&(8(89 
	;B!"2Y^^
 %)..0FEF0b	 : ::
	; %%%Aj\"(!9!!<4
 & 	BE5AM$$UB/2	B #gj\*i6I
	 !'')L,B,B,D,J,JJ	    "# $%%'( )NN9%& '
	
Y8
t $))I...r)   c                  ,    e Zd ZU ded<   ded<   ded<   y) BinaryScalarSpecializationConfigint
scalar_idxr    ctor_tensorr   	ufunc_keyN)rV   rW   rX   rY   rZ   r)   r'   r   r      s    Or)   r   r&   )r   r   r   rk   otherc                   d}|dz  }t         D ]  }|j                  |vr||j                     }|j                  dz   }t        |      }|j	                  t        d| dt        |j                  t        t                                 dj                  d t        ||j                         j                        D              }	|d	| d
|j                   d|	 d| d	z  } |t        j                      }dj                  d t        ||j                         j                        D              }	|d|j                   d|	 dz  }|S )Nz+using opmath_t = at::opmath_type<scalar_t>;zif (false) {}
rk   ziter.scalar_value<opmath_t>(rH   )rc   r8   r@   c              3  4   K   | ]  }|j                     y wr1   rb   rD   s     r'   r;   z0compute_ufunc_cuda_dtype_body.<locals>.<genexpr>
  s      ,
AFF,
rd   zelse if (iter.is_cpu_scalar(z)) {
  z<scalar_t> ufunctor(z);
  iter.remove_operand(z");
  gpu_kernel(iter, ufunctor);
}c              3  4   K   | ]  }|j                     y wr1   rb   rD   s     r'   r;   z0compute_ufunc_cuda_dtype_body.<locals>.<genexpr>  s      ((rd   z
else {
  gpu_kernel(iter, z<scalar_t>(z
));
}
    )!BinaryScalarSpecializationConfigsr   r   listr   r
   r   r   r   r   r=   r   r(   r,   r!   r   r{   )
r   r   inner_loops
parent_ctxbodyconfigr   r   rg   ufunctor_ctor_exprs_strs
             r'   compute_ufunc_cuda_dtype_bodyr      s    9DD3 ;."6#3#34&&*
 %)$4

3J<qA 2 2Ih4GH	
 #')) ,
%c<+A+A+C+H+HI,
 #
 	 'L ))*A)B C!l # 	)6 x334L"ii (!*l.D.D.F.K.KL(  	  %%&k2I1J K D
 Kr)   c                r   t        |       \  }}t        | t        j                  | t        j
                              }g }|j                         D ]7  \  }}|j                  d| dt        | |||j                                d       9 dj                  |      }t        |       }d| d|j                          d|j                          d|j                          d|j                   d| d	|j                   d
|j                   d|j!                          d|j#                  |j                                dS )N"
AT_DISPATCH_CASE(at::ScalarType::,
  [&]() {
    
  }
)
r4   z

;
. {
  AT_DISPATCH_SWITCH(iter.common_dtype(), "",
    z
  );
}
REGISTER_DISPATCH(, &z)

 {
  ;
}
)r   r   r#   kernel_namer   CUDAitemsr   r   r(   r=   StubSignature	type_defndispatch_declkernel_defnr!   defndirect_call)	r   r   r   sigdtype_casesr   inner_ufunc_sigsdtype_cases_strstub_sigs	            r'   compute_ufunc_cudar   #  sh     ;1=M9 "!U%6%6q+:J:J%K
LCK#0#6#6#8 	
""' )"1e-=s}}OP Q	
	
 ii,OQH
 	  	  	  ,,/HH: 6  ==/X%9%9$: ; () * r)   c                      e Zd ZU ded<   edd       Zedd       Zedd       ZddZddZ	ddZ
dd	Zdd
ZddZddZddZy)r   r   r   c                    t        | j                  j                  j                  j                  j                         dS )N_stubr    r   ro   rp   r!   r%   s    r'   r!   zStubSignature.nameX  s1    dff'',,116678>>r)   c                    t        | j                  j                  j                  j                  j                         dS )N_kernelr   r%   s    r'   r   zStubSignature.kernel_name\  s1    dff'',,116678@@r)   c                    t        | j                  j                  j                  j                  j                         dS )N_fnr   r%   s    r'   	type_namezStubSignature.type_name`  s1    dff'',,116678<<r)   c                @    t        j                  | j                        S r1   )r#   stub_argumentsr   r%   s    r'   r(   zStubSignature.argumentsd  s    ##DFF++r)   c                Z    | j                         }ddj                  d |D               dS )Nzvoid(*)(TensorIteratorBase&, r@   c              3  4   K   | ]  }|j                     y wr1   )r8   rD   s     r'   r;   z%StubSignature.type.<locals>.<genexpr>i  s     8RA8Rrd   rH   )r(   r=   )r&   cpp_argss     r'   r8   zStubSignature.typeg  s.    >>#.tyy8R8R/R.SSTUUr)   c                <    d| j                    d| j                   dS )NzDECLARE_DISPATCH(r@   rH   )r   r!   r%   s    r'   r   zStubSignature.dispatch_declk  s     "4>>"2"TYYKqAAr)   c                "    d| j                    dS )NzDEFINE_DISPATCH(rH   rI   r%   s    r'   dispatch_defnzStubSignature.dispatch_defnn  s    !$))A..r)   c                p    d| j                    ddj                  d | j                         D               dS )Nzvoid z(TensorIteratorBase& iter, r@   c              3  <   K   | ]  }|j                           y wr1   )r   rD   s     r'   r;   z,StubSignature.kernel_defn.<locals>.<genexpr>r  s     Mq[\affhMqrF   rH   )r   r=   r(   r%   s    r'   r   zStubSignature.kernel_defnq  s:    t''((CDIIMq`d`n`n`pMqDqCrrsttr)   c                B    d| j                    d| j                          S )Nzusing  = )r   r8   r%   s    r'   r   zStubSignature.type_defnt  s     's499;-88r)   c           
         | j                    ddj                  d t        || j                               D               dS )Nz(device_type(), *this, r@   c              3  4   K   | ]  }|j                     y wr1   rb   rD   s     r'   r;   z%StubSignature.call.<locals>.<genexpr>y  s     =oaff=ord   rH   re   rf   s     r'   rh   zStubSignature.callx  s=    ))3DII=oiX[]a]k]k]mNn=o4o3ppqrrr)   c           
         | j                    ddj                  d t        || j                               D               dS )Nz(*this, r@   c              3  4   K   | ]  }|j                     y wr1   rb   rD   s     r'   r;   z,StubSignature.direct_call.<locals>.<genexpr>}  s     5gaff5grd   rH   )r   r=   r   r(   rf   s     r'   r   zStubSignature.direct_call|  s?    ""#8DII5giPSUYUcUcUeFf5g,g+hhijjr)   NrU   rT   )rg   Sequence[Binding]rS   r    )rV   rW   rX   rY   propertyr!   r   r   r(   r8   r   r   r   r   rh   r   rZ   r)   r'   r   r   T  sq    ? ? A A = =,VB/u9skr)   r   c                B   t        |       }t        | t        j                  | t        j
                              }d|j                          d|j                          d|j                          d|j                          d|j                  |j                                dS )Nr4   r   z;

r   r   )r   r   r#   r   r   CPUr   r   r   r   rh   r(   )r   r   r   s      r'   compute_ufunc_cpur     s    QH
!!U%6%6q+//%J
KC	  	  	   ==!" # r)   c                ,   t         j                  |v sJ | d|j                                 |j                         t         j                  t         j                  hk  sJ |t         j                     }d }t         j                  |v r|t         j                     }g }g |D ]  }t	        |j
                  t              r1|j
                  j                  t        t        j                        k7  rN|j                  d|j                   d|j                   d       j                  t        d|j                   t        |j                  j                  t!        t"                                  ||D ]  }t	        |j
                  t              r1|j
                  j                  t        t        j                        k7  rN|j                  d|j                   d|j                   d       j                  t        d	|j                   t        |j                  j                  t%        t!        t"                                        g }g }	| j&                  j(                  j*                  j,                  D ]  }
|
j                  j/                         s|
j                  t        t        j0                        k(  sJ |j                  t3        |
j                  t        |
j                  t!        t"                    |

             ||	j                  t3        |
j                  t        |
j                  t%        t!        t"                          |

              dfd}dj5                  |      }|hd| ddj5                  d |D               d|j7                   ||             ddj5                  d |	D               d|j7                   ||	             dS d| ddj5                  d |D               d|j7                   ||             dS )Nr@   zauto _s_r   z.to<scalar_t>();_s_zauto _v_z$ = at::vec::Vectorized<scalar_t>(_s_z);_v_)r!   nctypeargumentc                P    g }|j                         |j                  |        |S r1   )extend)r.   rrg   s     r'   with_ctxz.compute_ufunc_cpu_dtype_body.<locals>.with_ctx  s#    "$		r)   r4   z
cpu_kernel_vec(iter,
  [=](c              3  <   K   | ]  }|j                           y wr1   rB   r9   r.   s     r'   r;   z/compute_ufunc_cpu_dtype_body.<locals>.<genexpr>       3a3rF   z) { return z; },
  [=](c              3  <   K   | ]  }|j                           y wr1   rB   r   s     r'   r;   z/compute_ufunc_cpu_dtype_body.<locals>.<genexpr>  s     0a0rF   z; }
);
z
cpu_kernel(iter,
  [=](c              3  <   K   | ]  }|j                           y wr1   rB   r   s     r'   r;   z/compute_ufunc_cpu_dtype_body.<locals>.<genexpr>  r   rF   )r.   r   rS   zlist[Expr | Binding])r   	CPUScalarr   	CPUVector
isinstancer   r   r8   r   r   Scalarr   r!   r
   r   r   r   r   r   ro   rp   r(   rq   rl   Tensorr   r=   rh   )r   r   r   r   scalar_loopvec_loopr   r.   scalar_bindingsvec_bindingsrE   r   body_strrg   s                @r'   compute_ufunc_cpu_dtype_bodyr     s    ,Nr+:J:J:L9M.NN,("4"4h6H6H!IIIIh001KH[(x112 D
C Yajj(+

8MMD
 1
 hqvvhc!&&1ABC

4#affX
188==)HBU(VWXY  	A!**h/AJJOOxH 5 KK166("FqvvhbQ JJ!&&Nqxx}}oi>Q.RS	" OL\\((55 vv$$&vv&--0000VV!!&&)H*=>	
 %affoi>Q.RS( yyH	
 yy3?334LAQAQRZ[jRkAl@m nyy0<001hmmHUaLb>c=d e	 		
 yy3?334LAQAQRZ[jRkAl@m n 	r)   c                r   t        |       }| j                  j                  }i }t        j                  t        j
                  fD ]4  }g }||v r|j                  |       t        j                  |v r1|t        j                  u r|j                  t        j                         t        j                  |v r|j                  t        j                         |D ]  }||   j                  D ]  }|t        j                  u rt        t              }n1|t        j
                  u rt        t        t                    }nt        |j                  |i       }	||	vsmt        | d||   j                    |      |	|<     7 g }
|j#                         D ]7  \  }}	|
j                  d| dt%        | ||	|j'                                d       9 dj)                  |
      }d|j+                          d|j                    d	| d
|j-                          d|j/                          d|j                    d|j0                   dS )Nru   rv   r   r   r   r4   z
namespace {

r   r   z#
  );
}

} // anonymous namespace

r   z
REGISTER_DISPATCH(r   z)
)r   rw   rx   r   r   r   r   r~   r   r|   r   r   r   AssertionErrorr}   r\   r!   r   r   r(   r=   r   r   r   r   )r   r   r   
ufunc_sigsr   lksr   r   r]   r   r   r   s               r'   compute_ufunc_cpu_kernelr     sG   QH EE""ECEJ  ("4"45 :JJqM%'A1C1C,CJJx**+u$JJx''( 	Br33 *** )( 3I(,,, /	(0C DI((#-#8#8#C ,,*8'%)..)9 :i+$Q'	4 K#-#3#3#5 	
""' )!!U,<h>P>P>RST U	
	
 ii,O 
  ,,4MM? ;  
  	  ==/X%9%9$: ; r)   )r   r   rS   bool)r   r   rS   z?tuple[dict[ScalarType, dict[UfuncKey, UfunctorSignature]], str])
r   r   r   r   r   z!dict[UfuncKey, UfunctorSignature]r   r   rS   r    )r   r   rS   r    )
r   r   r   r   r   zdict[UfuncKey, UfuncSignature]r   r   rS   r    )2
__future__r   dataclassesr   typingr   torchgen.api.ufuncapir#   torchgen.api.translater   torchgen.api.typesr   r   r	   r
   r   r   r   r   r   torchgen.contextr   torchgen.modelr   r   r   r   r   r   r   torchgen.utilsr   collections.abcr   r   r   r\   rs   r   r   rz   ry   r   r   r   r   r   r   r   rZ   r)   r'   <module>r     s   " !   " " ,
 
 
 2   & (3@ $P P PD $	] 	] 	]<P/P/DP/f $   %--
 %,,% !,,, 3, "	,
 	,^ & &` $(k (k (kV  ZZZ 0Z "	Z
 	Zz ; ;r)   