
    %hE              
       (   d dl mZ d dlmZmZmZmZ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 d dlmZmZmZmZm Z m!Z!m"Z" d d	l#m$Z$  ed
           G d d                      Z% ed
           G d d                      Z&de de'fdZ(de deee!ee"e%f         f         e)f         fdZ* ed
           G d d                      Z+ e+d de"j,                   e+dde"j-                  gZ.de de!dee"e%f         dee         de)f
dZ/ede de)fd            Z0 ed
           G d d                       Z1ede de)fd!            Z2de de!dee"e&f         dee         de)f
d"Z3ede de)fd#            Z4dS )$    )	dataclass)DictListOptionalSequenceTupleUnionN)	translate)		BaseCTypeBindingCTypeExpr
NamedCTypeopmath_tscalar_tStructuredImplSignatureVectorizedCType)UfunctorBindings)with_native_function)ArgumentBaseTyBaseTypeDispatchKeyNativeFunctionsGroup
ScalarTypeUfuncKey)
OrderedSetT)frozenc                       e Zd ZU eed<   ee         ed<   eed<   defdZ	de
e         fdZdefdZdefdZdefd	Zdefd
ZdS )UfunctorSignaturegscalar_tensor_idxnamereturnc                 N    t          j        | j        | j        t                    S )N)r"   r   )ufuncufunctor_argumentsr!   r"   r   selfs    S/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/torchgen/dest/ufunc.py	argumentszUfunctorSignature.argumentsA   s(    'Fd&<x
 
 
 	
    c                 H    d |                                  j        D             S )Nc                 H    g | ]}|                     |j         d            S )_)renamer#   .0bs     r*   
<listcomp>z,UfunctorSignature.fields.<locals>.<listcomp>H   s,    FFF1AF&&FFFr,   )r+   ctorr(   s    r*   fieldszUfunctorSignature.fieldsF   s#    FF0@0@0EFFFFr,   c                 *    t          t                    S N)r   r   r(   s    r*   returns_typezUfunctorSignature.returns_typeJ   s     """r,   c                 d    d                     d |                                 D                       S )N
c              3   :   K   | ]}|j          d |j         dV  dS ) ;N)typer#   )r2   fs     r*   	<genexpr>z0UfunctorSignature.decl_fields.<locals>.<genexpr>P   s7      FF1AF..QV...FFFFFFr,   )joinr6   r(   s    r*   decl_fieldszUfunctorSignature.decl_fieldsO   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 r8   declr2   as     r*   rA   z5UfunctorSignature.inline_defn_ctor.<locals>.<genexpr>S   s*      EE!QVVXXEEEEEEr,   c              3   :   K   | ]}|j          d |j          dV  dS )z_()Nr#   rI   s     r*   rA   z5UfunctorSignature.inline_defn_ctor.<locals>.<genexpr>V   s7      SS33!&333SSSSSSr,   (z) : z {})rB   r+   r5   r#   )r)   args_strinit_strs      r*   inline_defn_ctorz"UfunctorSignature.inline_defn_ctorR   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 )NrE   c              3   >   K   | ]}|                                 V  d S r8   rG   rI   s     r*   rA   z/UfunctorSignature.decl_apply.<locals>.<genexpr>Z   s*      FF!QVVXXFFFFFFr,   z operator()(z) const)rB   r+   applyr9   cpp_type)r)   rO   s     r*   
decl_applyzUfunctorSignature.decl_applyY   s^    99FFt~~/?/?/EFFFFF##%%..00OOhOOOOr,   N)__name__
__module____qualname__r   __annotations__r   intstrr   r+   r   r   r6   r   r9   rC   rQ   rV    r,   r*   r    r    ;   s         }$$$
III
+ 
 
 
 

GW G G G G#e # # # #
GS G G G G<# < < < <PC P P P P P Pr,   r    c                   r    e Zd ZU eed<   eed<   eed<   dee         fdZ	de
eeef                  defdZdS )	UfuncSignaturer!   r#   	compute_tr$   c                 B    t          j        | j        | j                  S )N)r`   )r&   ufunc_argumentsr!   r`   r(   s    r*   r+   zUfuncSignature.argumentsd   s    $TVt~FFFFr,   ctxc           
          | j          dd                    d t          ||                                           D                        dS )NrN   rE   c              3   $   K   | ]}|j         V  d S r8   exprrI   s     r*   rA   z&UfuncSignature.call.<locals>.<genexpr>h   s$      'Y'Y1'Y'Y'Y'Y'Y'Yr,   rL   r#   rB   r
   r+   r)   rc   s     r*   callzUfuncSignature.callg   sJ    )\\dii'Y'Y	#t~~GWGW8X8X'Y'Y'YYY\\\\r,   N)rW   rX   rY   r   rZ   r\   r   r   r   r+   r   r	   r   rj   r]   r,   r*   r_   r_   ^   s         
IIIG4= G G G G]w}!56 ]3 ] ] ] ] ] ]r,   r_   r!   r$   c                 h    t          d | j        j        j        j        D                       }|dk    S )Nc              3   L   K   | ]}|j                                         d V   dS )   N)r?   is_tensor_likerI   s     r*   rA   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_specializationru   }   sE      <$.;    K !r,   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 )Nrm   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CUDAFunctorru   r    r#   supported_dtypes
setdefaultr   
ScalarOnlyGenericr_   r   r   r6   r+   rT   appendrC   rQ   rV   rj   rB   )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 eed<   eed<   eed<   dS ) BinaryScalarSpecializationConfig
scalar_idxctor_tensor	ufunc_keyN)rW   rX   rY   r[   rZ   r\   r   r]   r,   r*   r   r      s3         OOOr,   r   r)   )r   r   r   rm   otherr   inner_loops
parent_ctxc                    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) {}
rm   ziter.scalar_value<opmath_t>(rL   )rg   r?   rE   c              3   $   K   | ]}|j         V  d S r8   rf   rI   s     r*   rA   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 r8   rf   rI   s     r*   rA   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   rB   r
   r+   r5   r#   r   r}   )
r!   r   r   r   bodyconfigr   r   rc   ufunctor_ctor_exprs_strs
             r*   compute_ufunc_cuda_dtype_bodyr      s    9DD3  ;.."6#34&*
 +/z*:*:

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+   rB   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 eed<   edefd            Zedefd            Zedefd            Z	de
e         fdZdefdZdefdZdefd	Zdefd
ZdefdZdee         defdZdee         defdZdS )r   r!   r$   c                 X    t          | j        j        j        j        j                   dS )N_stubr\   r!   rq   rr   r#   r(   s    r*   r#   zStubSignature.nameP  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_nameT  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_nameX  s'    df',1677<<<<r,   c                 4    t          j        | j                  S r8   )r&   stub_argumentsr!   r(   s    r*   r+   zStubSignature.arguments\  s    #DF+++r,   c                 p    |                                  }dd                    d |D                        dS )Nzvoid(*)(TensorIteratorBase&, rE   c              3   $   K   | ]}|j         V  d S r8   )r?   rI   s     r*   rA   z%StubSignature.type.<locals>.<genexpr>a  s$      8R8RA8R8R8R8R8R8Rr,   rL   )r+   rB   )r)   cpp_argss     r*   r?   zStubSignature.type_  s=    >>##Utyy8R8R8R8R8R/R/RUUUUr,   c                 (    d| j          d| j         dS )NzDECLARE_DISPATCH(rE   rL   )r   r#   r(   s    r*   r   zStubSignature.dispatch_declc  s    A4>AATYAAAAr,   c                     d| j          dS )NzDEFINE_DISPATCH(rL   rM   r(   s    r*   dispatch_defnzStubSignature.dispatch_defnf  s    .$)....r,   c                 |    d| j          dd                    d |                                 D                        dS )Nzvoid z(TensorIteratorBase& iter, rE   c              3   >   K   | ]}|                                 V  d S r8   )r   rI   s     r*   rA   z,StubSignature.kernel_defn.<locals>.<genexpr>j  s+      MqMq[\affhhMqMqMqMqMqMqr,   rL   )r   rB   r+   r(   s    r*   r   zStubSignature.kernel_defni  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_defnl  s"    888499;;888r,   rc   c           
          | j          dd                    d t          ||                                           D                        dS )Nz(device_type(), *this, rE   c              3   $   K   | ]}|j         V  d S r8   rf   rI   s     r*   rA   z%StubSignature.call.<locals>.<genexpr>q  s$      =o=oaf=o=o=o=o=o=or,   rL   rh   ri   s     r*   rj   zStubSignature.callp  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, rE   c              3   $   K   | ]}|j         V  d S r8   rf   rI   s     r*   rA   z,StubSignature.direct_call.<locals>.<genexpr>u  s$      5g5gaf5g5g5g5g5g5gr,   rL   )r   rB   r
   r+   ri   s     r*   r   zStubSignature.direct_callt  sO    "jjDII5g5giPSUYUcUcUeUeFfFf5g5g5g,g,gjjjjr,   N)rW   rX   rY   r   rZ   propertyr\   r#   r   r   r   r   r+   r?   r   r   r   r   r   rj   r   r]   r,   r*   r   r   L  s        ?c ? ? ? X? AS A A A XA =3 = = = X=,4= , , , ,Vc V V V VBs B B B B/s / / / /uS u u u u93 9 9 9 9s) sc s s s skx0 k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   x  s    QH
!!U%6q+/%J%J
K
KC	 	  
 
   ==!!   r,   c                    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t4          t2                   dt6          t8          t          t2          f                  ffd}d                    |          }|d| dd                    d |D                        d|                     ||                     dd                    d |	D                        d|                     ||	                     dS d| dd                    d |D                        d|                     ||                     dS )NrE   zauto _s_r   z.to<scalar_t>();_s_zauto _v_z$ = at::vec::Vectorized<scalar_t>(_s_z);_v_)r#   nctypeargumentr3   r$   c                 `    g }|                                |                     |            |S r8   )extend)r3   rrc   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 r8   rG   r1   s     r*   rA   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 r8   rG   r1   s     r*   rA   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 r8   rG   r1   s     r*   rA   z/compute_ufunc_cpu_dtype_body.<locals>.<genexpr>  r   r,   )r   	CPUScalarr   	CPUVector
isinstancer   r   r?   r   r   Scalarr   r#   r   r   r   r   r   r   rq   rr   r+   rs   rn   Tensorr   r   r   r	   rB   rj   )r!   r   r   r   scalar_loopvec_loopr   r3   scalar_bindingsvec_bindingsrJ   r   body_strrc   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    HW% $uT7]/C*D       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                 z   t          |           }| j        j        }i }t          j        t          j        fD ]9}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                    }n>|t          j        u r"t          t          t                              }nt                      |                    |i           }	||	vr#t          | d||         j         |          |	|<   ;g }
|                                D ]C\  }}	|
                    d| dt%          | ||	|                                           d           Dd                    |
          }d|                                 d|j         d	| d
|                                 d|                                 d|j         d|j         dS )Nrw   rx   r   r   r   r;   z
namespace {

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

} // anonymous namespace

r   z;
REGISTER_DISPATCH(r   z);
)r   ry   rz   r   r   r   r   r   r   r~   r   r   r   AssertionErrorr   r_   r#   r   r   r+   rB   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,   )5dataclassesr   typingr   r   r   r   r   r	   torchgen.api.ufuncapir&   torchgen.api.translater
   torchgen.api.typesr   r   r   r   r   r   r   r   r   r   torchgen.contextr   torchgen.modelr   r   r   r   r   r   r   torchgen.utilsr   r    r_   boolru   r\   r   r   r|   r{   r   r   r   r   r   r   r   r]   r,   r*   <module>r      s   ! ! ! ! ! ! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? " " " " " " " " " , , , , , ,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 0 / / / / / 1 1 1 1 1 1                  & % % % % %> $P P P P P P P PD $	] 	] 	] 	] 	] 	] 	] 	]<1E $    P/P/
4
D+<!<==>CDP/ P/ P/ P/f $        %$-  
 %$,  % !,,, h 112, !	,
 	, , , ,^ &. &3 & & & &` $(k (k (k (k (k (k (k (kV - #    ZZZ h./Z !	Z
 	Z Z Z Zz ; 4 ; ; ; ; ; ; ;r,   