
    ΧgE                    p   d dl mZ d dlmZ d dlmZ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"  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j(                   e'ddej)                  gZ*d/d%Z+ed0d&            Z, ed           G d' d(                      Z-ed0d)            Z.d1d+Z/ed0d,            Z0dS )2    )annotations)	dataclass)Sequence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)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	dS )UfunctorSignaturer   gz
int | Nonescalar_tensor_idxstrnamereturnr   c                N    t          j        | j        | j        t                    S )N)r   r   )ufuncufunctor_argumentsr   r   r   selfs    O/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchgen/dest/ufunc.py	argumentszUfunctorSignature.argumentsG   s(    'Fd&<x
 
 
 	
    list[Binding]c                H    d |                                  j        D             S )Nc                H    g | ]}|                     |j         d            S )_)renamer!   .0bs     r(   
<listcomp>z,UfunctorSignature.fields.<locals>.<listcomp>N   s,    FFF1AF&&FFFr*   )r)   ctorr&   s    r(   fieldszUfunctorSignature.fieldsL   s#    FF0@0@0EFFFFr*   r
   c                *    t          t                    S N)r   r   r&   s    r(   returns_typezUfunctorSignature.returns_typeP   s     """r*   c                d    d                     d |                                 D                       S )N
c              3  :   K   | ]}|j          d |j         dV  dS ) ;N)typer!   )r1   fs     r(   	<genexpr>z0UfunctorSignature.decl_fields.<locals>.<genexpr>V   s7      FF1AF..QV...FFFFFFr*   )joinr5   r&   s    r(   decl_fieldszUfunctorSignature.decl_fieldsU   s+    yyFFFFFFFFr*   c                    d                     d |                                 j        D                       }d                     d |                                 j        D                       }| j         d| d| dS )N, c              3  >   K   | ]}|                                 V  d S r7   declr1   as     r(   r@   z5UfunctorSignature.inline_defn_ctor.<locals>.<genexpr>Y   s*      EE!QVVXXEEEEEEr*   c              3  :   K   | ]}|j          d |j          dV  dS )z_()Nr!   rH   s     r(   r@   z5UfunctorSignature.inline_defn_ctor.<locals>.<genexpr>\   s7      SS33!&333SSSSSSr*   (z) : z {})rA   r)   r4   r!   )r'   args_strinit_strs      r(   inline_defn_ctorz"UfunctorSignature.inline_defn_ctorX   s    99EEt~~/?/?/DEEEEE 99SST^^=M=M=RSSSSS);;h;;H;;;;r*   c                    d                     d |                                 j        D                       }|                                                                  d| dS )NrD   c              3  >   K   | ]}|                                 V  d S r7   rF   rH   s     r(   r@   z/UfunctorSignature.decl_apply.<locals>.<genexpr>`   s*      FF!QVVXXFFFFFFr*   z operator()(z) const)rA   r)   applyr8   cpp_type)r'   rN   s     r(   
decl_applyzUfunctorSignature.decl_apply_   s^    99FFt~~/?/?/EFFFFF##%%..00OOhOOOOr*   N)r"   r   r"   r+   )r"   r
   r"   r    )
__name__
__module____qualname____annotations__r)   r5   r8   rB   rP   rU    r*   r(   r   r   A   s         !!!!III
 
 
 

G G G G# # # #
G G G G< < < <P P P P P Pr*   r   c                  >    e Zd ZU ded<   ded<   ded<   dd	ZddZdS )UfuncSignaturer   r   r    r!   r
   	compute_tr"   r+   c                B    t          j        | j        | j                  S )N)r_   )r$   ufunc_argumentsr   r_   r&   s    r(   r)   zUfuncSignature.argumentsj   s    $TVt~FFFFr*   ctxSequence[Binding | Expr]c           
         | j          dd                    d t          ||                                           D                        dS )NrM   rD   c              3  $   K   | ]}|j         V  d S r7   exprrH   s     r(   r@   z&UfuncSignature.call.<locals>.<genexpr>n   s$      'Y'Y1'Y'Y'Y'Y'Y'Yr*   rK   r!   rA   r   r)   r'   rb   s     r(   callzUfuncSignature.callm   sJ    )\\dii'Y'Y	#t~~GWGW8X8X'Y'Y'YYY\\\\r*   NrV   )rb   rc   r"   r    )rX   rY   rZ   r[   r)   rj   r\   r*   r(   r^   r^   d   si         IIIG G G G] ] ] ] ] ]r*   r^   r   r   r"   boolc                h    t          d | j        j        j        j        D                       }|dk    S )Nc              3  L   K   | ]}|j                                         d V   dS )   N)r>   is_tensor_likerH   s     r(   r@   z<eligible_for_binary_scalar_specialization.<locals>.<genexpr>   sI        qv?T?T?V?V	     r*      )sum
functionalfuncr)   flat_non_out)r   num_tensorss     r(   )eligible_for_binary_scalar_specializationrv      sE      <$.;    K !r*   ?tuple[dict[ScalarType, dict[UfuncKey, UfunctorSignature]], str]c                   i }g }| j         j        }t          j        dt          j        dt          j        d i}t          |           r$t          j        t          j        t          j        g}n:t          j        g}t          j        t          j        fD ]}||vsJ d| d            |D ]}||v rMt          | ||         ||         j                  }||         j	        D ]}||
                    |i           |<   Td }	t                      }
t          j        t          j        fD ]B}||vr|	||         j        }	n|	||         j        k    s
J d            |
||         j	        z  }
C|	J | d|	 }t          | ||         |          }|
D ]}||
                    |i           |<   t          | d|	 t          t                     	          }|                                |                                j        z   }|                    d
|j         d|                                 d|                                 d|                                 d|                    |           d           |d                    |          fS )Nrn   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	;
  }
};
r:   )outufunc_inner_loopr   CUDAFunctorOnSelfCUDAFunctorOnOtherCUDAFunctorrv   r   r!   supported_dtypes
setdefaultr   
ScalarOnlyGenericr^   r   r   r5   r)   rS   appendrB   rP   rU   rj   rA   )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E"E"A#Qd 
 133 	L&' 
 $%,h.IJ 	L 	LAE>>>#K#K#K#K>>>> 8
 8
 ::,%=a%@uQx}  L q2 F F9E((33A66 
3=<<&(89 
	; 
	;B!"2Y^

 %).000E 100b	 ::%%%""j""(!9!!<4
 
 
 & 	B 	BE5AM$$UB//22"*j**i6I6I
 
 
	 !''))L,B,B,D,D,JJ	

 
 	
 

   ""
 
 %%''
 
 NN9%%
 
 
	
 	
 	
 	
 $))I....r*   c                  .    e Zd ZU ded<   ded<   ded<   dS ) BinaryScalarSpecializationConfigint
scalar_idxr    ctor_tensorr   	ufunc_keyN)rX   rY   rZ   r[   r\   r*   r(   r   r      s3         OOOr*   r   r'   )r   r   r   rn   otherr   r   inner_loops!dict[UfuncKey, UfunctorSignature]
parent_ctxSequence[Binding]r    c                   d}|dz  }t           D ]}|j        |vr||j                 }|j        dz   }t          |          }|                    t          d| dt          |j        t          t                                                   d
                    d t          ||                                j                  D                       }	|d	| d
|j         d|	 d| d	z  }|t          j                 }d
                    d t          ||                                j                  D                       }	|d|j         d|	 dz  }|S )Nz+using opmath_t = at::opmath_type<scalar_t>;zif (false) {}
rn   ziter.scalar_value<opmath_t>(rK   )rg   r>   rD   c              3  $   K   | ]}|j         V  d S r7   rf   rH   s     r(   r@   z0compute_ufunc_cuda_dtype_body.<locals>.<genexpr>  s5       ,
 ,
AF,
 ,
 ,
 ,
 ,
 ,
r*   zelse if (iter.is_cpu_scalar(z)) {
  z<scalar_t> ufunctor(z);
  iter.remove_operand(z");
  gpu_kernel(iter, ufunctor);
}c              3  $   K   | ]}|j         V  d S r7   rf   rH   s     r(   r@   z0compute_ufunc_cuda_dtype_body.<locals>.<genexpr>  s5       ( (( ( ( ( ( (r*   z
else {
  gpu_kernel(iter, z<scalar_t>(z
));
}
    )!BinaryScalarSpecializationConfigsr   r   listr   r   r   r   r   r   rA   r   r)   r4   r!   r   r   )
r   r   r   r   bodyconfigr   r   rb   ufunctor_ctor_exprs_strs
             r(   compute_ufunc_cuda_dtype_bodyr      s    9DD3  ;.."6#34&*
 %)$4$4

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

;
;

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

 {
  ;
}
)r   r   r$   kernel_namer   CUDAitemsr   r   r)   rA   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   !  s     ;1==M9 "!U%6q+:J%K%K
L
LCK#0#6#6#8#8 	
 	
"'  #1e-=s}}OO  	
 	
 	
 	
 ii,,OQH
  
  
	  
  -0H    =  &.%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dS )r   r   r   r"   r    c                X    t          | j        j        j        j        j                   dS )N_stubr    r   rr   rs   r!   r&   s    r(   r!   zStubSignature.nameV  s'    df',1677>>>>r*   c                X    t          | j        j        j        j        j                   dS )N_kernelr   r&   s    r(   r   zStubSignature.kernel_nameZ  s'    df',1677@@@@r*   c                X    t          | j        j        j        j        j                   dS )N_fnr   r&   s    r(   	type_namezStubSignature.type_name^  s'    df',1677<<<<r*   r+   c                4    t          j        | j                  S r7   )r$   stub_argumentsr   r&   s    r(   r)   zStubSignature.argumentsb  s    #DF+++r*   c                p    |                                  }dd                    d |D                        dS )Nzvoid(*)(TensorIteratorBase&, rD   c              3  $   K   | ]}|j         V  d S r7   )r>   rH   s     r(   r@   z%StubSignature.type.<locals>.<genexpr>g  s$      8R8RA8R8R8R8R8R8Rr*   rK   )r)   rA   )r'   cpp_argss     r(   r>   zStubSignature.typee  s=    >>##Utyy8R8R8R8R8R/R/RUUUUr*   c                (    d| j          d| j         dS )NzDECLARE_DISPATCH(rD   rK   )r   r!   r&   s    r(   r   zStubSignature.dispatch_decli  s    A4>AATYAAAAr*   c                    d| j          dS )NzDEFINE_DISPATCH(rK   rL   r&   s    r(   dispatch_defnzStubSignature.dispatch_defnl  s    .$)....r*   c                |    d| j          dd                    d |                                 D                        dS )Nzvoid z(TensorIteratorBase& iter, rD   c              3  >   K   | ]}|                                 V  d S r7   )r   rH   s     r(   r@   z,StubSignature.kernel_defn.<locals>.<genexpr>p  s+      MqMq[\affhhMqMqMqMqMqMqr*   rK   )r   rA   r)   r&   s    r(   r   zStubSignature.kernel_defno  sF    tt'ttDIIMqMq`d`n`n`p`pMqMqMqDqDqttttr*   c                @    d| j          d|                                  S )Nzusing  = )r   r>   r&   s    r(   r   zStubSignature.type_defnr  s"    888499;;888r*   rb   r   c           
         | j          dd                    d t          ||                                           D                        dS )Nz(device_type(), *this, rD   c              3  $   K   | ]}|j         V  d S r7   rf   rH   s     r(   r@   z%StubSignature.call.<locals>.<genexpr>w  s$      =o=oaf=o=o=o=o=o=or*   rK   rh   ri   s     r(   rj   zStubSignature.callv  sN    )rrDII=o=oiX[]a]k]k]m]mNnNn=o=o=o4o4orrrrr*   c           
         | j          dd                    d t          ||                                           D                        dS )Nz(*this, rD   c              3  $   K   | ]}|j         V  d S r7   rf   rH   s     r(   r@   z,StubSignature.direct_call.<locals>.<genexpr>{  s$      5g5gaf5g5g5g5g5g5gr*   rK   )r   rA   r   r)   ri   s     r(   r   zStubSignature.direct_callz  sO    "jjDII5g5giPSUYUcUcUeUeFfFf5g5g5g,g,gjjjjr*   NrW   rV   )rb   r   r"   r    )rX   rY   rZ   r[   propertyr!   r   r   r)   r>   r   r   r   r   rj   r   r\   r*   r(   r   r   R  s:        ? ? ? X? A A A XA = = = X=, , , ,V V V VB B B B/ / / /u u u u9 9 9 9s s s sk k k k k kr*   r   c                x   t          |           }t          | t          j        | t          j                            }d|                                 d|                                 d|                                 d|	                                 d|
                    |                                           dS )Nr:   r   r   r   r   )r   r   r$   r   r   CPUr   r   r   r   rj   r)   )r   r   r   s      r(   compute_ufunc_cpur   ~  s    QH
!!U%6q+/%J%J
K
KC	 	  
 
   ==!!   r*   dict[UfuncKey, UfuncSignature]c                4   t           j        |v s!J | d|                                             |                                t           j        t           j        hk    sJ |t           j                 }d }t           j        |v r|t           j                 }g }g |D ]}t	          |j        t                    r(|j        j        t          t          j
                  k    rD|                    d|j         d|j         d                               t          d|j         t          |j        j        t!          t"                                                   ||D ]}t	          |j        t                    r(|j        j        t          t          j
                  k    rD|                    d|j         d|j         d                               t          d	|j         t          |j        j        t%          t!          t"                                                             g }g }	| j        j        j        j        D ]}
|
j                                        s|
j        t          t          j                  k    sJ |                    t3          |
j        t          |
j        t!          t"                              |

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

                     dfd}d                    |          }|d| dd                    d |D                        d|                     ||                     dd                    d |	D                        d|                     ||	                     dS d| dd                    d |D                        d|                     ||                     dS )NrD   zauto _s_r   z.to<scalar_t>();_s_zauto _v_z$ = at::vec::Vectorized<scalar_t>(_s_z);_v_)r!   nctypeargumentr2   r   r"   list[Expr | Binding]c                `    g }|                                |                     |            |S r7   )extend)r2   rrb   s     r(   with_ctxz.compute_ufunc_cpu_dtype_body.<locals>.with_ctx  s+    "$		r*   r:   z
cpu_kernel_vec(iter,
  [=](c              3  >   K   | ]}|                                 V  d S r7   rF   r0   s     r(   r@   z/compute_ufunc_cpu_dtype_body.<locals>.<genexpr>  *      33a333333r*   z) { return z; },
  [=](c              3  >   K   | ]}|                                 V  d S r7   rF   r0   s     r(   r@   z/compute_ufunc_cpu_dtype_body.<locals>.<genexpr>  s*      00a000000r*   z; }
);
z
cpu_kernel(iter,
  [=](c              3  >   K   | ]}|                                 V  d S r7   rF   r0   s     r(   r@   z/compute_ufunc_cpu_dtype_body.<locals>.<genexpr>  r   r*   )r2   r   r"   r   )r   	CPUScalarr   	CPUVector
isinstancer   r   r>   r   r   Scalarr   r!   r   r   r   r   r   r   rr   rs   r)   rt   ro   Tensorr	   rA   rj   )r   r   r   r   scalar_loopvec_loopr   r2   scalar_bindingsvec_bindingsrI   r   body_strrb   s                @r(   compute_ufunc_cpu_dtype_bodyr     s    ,,,.N.N+:J:J:L:L.N.N,,,("4h6H!IIIIIh01KH[((x12 D
C Y Yaj(++ 	
8MD
 D
 1
 1
 BqvBB!&BBBCCC

4af
18=)HBUBU(V(VWWXXXX 	 	A!*h// AJOxH H 5 5 KKQ16QQqvQQQ   JJ"!&NNqx}oi>Q>Q.R.RSS     OL\(5  v$$&& 	v&-000000V!!&)H*=*=>>  	
 	
 	
 %afoi>Q>Q.R.RSS          yyH	  yy33?33333  BMAQAQRZRZ[jRkRkAlAl  yy00<00000	  ?GmmHHUaLbLb>c>c	   		  yy33?33333  BMAQAQRZRZ[jRkRkAlAl   	r*   c                l   t          |           }| j        j        }i }t          j        t          j        fD ]2}g }||v r|                    |           t          j        |v r-|t          j        u r|                    t          j                   t          j        |v r|                    t          j                   |D ]}||         j	        D ]}|t          j        u rt          t                    }n7|t          j        u r"t          t          t                              }nt          |                    |i           }	||	vr#t          | d||         j         |          |	|<   4g }
|                                D ]C\  }}	|
                    d| dt%          | ||	|                                           d           Dd                    |
          }d|                                 d|j         d	| d
|                                 d|                                 d|j         d|j         dS )Nry   rz   r   r   r   r:   z
namespace {

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

} // anonymous namespace

r   z;
REGISTER_DISPATCH(r   z);
)r   r{   r|   r   r   r   r   r   r   r   r   r   r   AssertionErrorr   r^   r!   r   r   r)   rA   r   r   r   r   )r   r   r   
ufunc_sigsr   lksr   r   r_   r   r   r   s               r(   compute_ufunc_cpu_kernelr     s   QH E"ECEJ ("45  ::JJqMMM%''A1C,C,CJJx*+++u$$JJx'((( 	 	Br3  *** )( 3 3II(,,, /	(0C0C D DII((#-#8#8#C#C ,,,*8 :%). : :i+ + +$Q'	  K#-#3#3#5#5 	
 	
"'  "!U,<h>P>P>R>RSS  	
 	
 	
 	
 ii,,O 
  -5M	 
   
  
  =  &.%9   r*   )r   r   r"   rk   )r   r   r"   rw   )
r   r   r   r   r   r   r   r   r"   r    )r   r   r"   r    )
r   r   r   r   r   r   r   r   r"   r    )1
__future__r   dataclassesr   typingr   r   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   r   r   r^   rv   r   r   r~   r}   r   r   r   r   r   r   r   r\   r*   r(   <module>r     s   " " " " " " ! ! ! ! ! ! * * * * * * * * " " " " " " " " " , , , , , ,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 2 1 1 1 1 1                  & % % % % %  4333333@ $P P P P P P P PD $	] 	] 	] 	] 	] 	] 	] 	]<   P/ P/ P/ P/f $        %$-  
 %$,  % !, , , ,^ & & & &` $(k (k (k (k (k (k (k (kV    Z Z Z Zz ; ; ; ; ; ;r*   