U
    9%e*                     @   s  d dl mZ d dlmZmZ d dlm  mZ d dl	m
Z
mZ d dl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mZ eeeddd	Zeeed
ddZeeee dddZeedddZ eeeedddZ!eeeedddZ"eeeedddZ#eeedddZ$eeedddZ%eeed d!d"Z&ed#d$G d%d& d&Z'eee( ee'd'd(d)Z)eeee d*d+d,Z*eee d-d.d/Z+dS )0    )	dataclass)ListOptionalN)cpp
structured)ArgNameBaseCppType	BaseCTypeBindingConstRefCTypeCType
NamedCTypescalarT)ArgumentBaseTyBaseTypeDispatchKeyFunctionSchemaNativeFunctionsGroupType)funcdispatch_keyreturnc                 C   s$   |   stdd| jj d| S )Nz7ufunc.kernel_name should only be invoked on out schemasZufunc__)Z	is_out_fnAssertionErrorname)r   r    r   Q/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torchgen/api/ufunc.pyschema_kernel_name   s    r   )gr   r   c                 C   s   t | jj|S N)r   outr   )r   r   r   r   r   kernel_name!   s    r"   )tbindsr   c                C   sd   t j| |dd}|d k	r|S | ttjkr<t|tttS | ttj	krNd S t
dt|  d S NF)r$   Zsymintunrecognized type )r   valuetype_typer   r   Scalarr   r   r	   r   Tensorr   repr)r#   r$   rr   r   r   dispatchstub_type*   s    r,   )scalar_tr   c                 C   s   | t jkrt jS td S r    )	api_typesr-   Zopmath_tNotImplementedErrorr-   r   r   r   opmath_type8   s    
r1   )r#   r$   r-   r   c                C   sr   t j| |dd}|d k	r|S | ttjkr<t|tt|S | ttjkr\t|tt|S t	dt
|  d S r%   )r   r'   r   r   r(   r   r	   r1   r)   r   r*   )r#   r$   r-   r+   r   r   r   ufunctor_ctor_typeC   s    r2   c                C   s2   | t tjkrt|t|S tdt|  d S )Nr&   )r   r   r)   r   r	   r   r*   )r#   r$   r-   r   r   r   ufunctor_apply_typeT   s    r3   )r#   r$   	compute_tr   c                C   sb   t j| |dd}|d k	r|S | ttjkr4t||S | ttjkrLt||S tdt|  d S r%   )	r   r'   r   r   r(   r   r)   r   r*   )r#   r$   r4   r+   r   r   r   
ufunc_type`   s    

r5   )ar-   r   c                 C   s    t t| j| j|d| jd | dS N)r$   r-   Znctyper   defaultargument)r
   r2   typer   r6   r-   r   r   r   ufunctor_ctor_argumentm   s    r=   c                 C   s    t t| j| j|d| jd | dS r7   )r
   r3   r;   r   r<   r   r   r   ufunctor_apply_argumentv   s    r>   )r6   r4   r   c                 C   s    t t| j| j|d| jd | dS )N)r$   r4   r8   )r
   r5   r;   r   )r6   r4   r   r   r   ufunc_argument   s    r?   T)frozenc                   @   s&   e Zd ZU ee ed< ee ed< dS )UfunctorBindingsctorapplyN)__name__
__module____qualname__r   r
   __annotations__r   r   r   r   rA      s   
rA   )r   scalar_tensor_idxr-   r   c                C   s   g }g }| j jjjD ]d}|j rf|dkrB|t||d d }qx|d k	rR|d8 }|t||d q|t||d q|d kst	t
||dS )Nr   r0      )rB   rC   )
functionalr   	argumentsflat_non_outr;   is_tensor_likeappendr=   r>   r   rA   )r   rH   r-   rB   rC   r6   r   r   r   ufunctor_arguments   s    
rO   )r   r4   r   c                   s    fdd| j jjjD S )Nc                    s   g | ]}t | d qS )r4   )r?   ).0r6   rP   r   r   
<listcomp>   s   z#ufunc_arguments.<locals>.<listcomp>)rJ   r   rK   rL   )r   r4   r   rP   r   ufunc_arguments   s    

rS   )r   r   c                 C   s   dd | j jjjD S )Nc                 S   s*   g | ]"}|j  st|D ]}|qqS r   )r;   rM   r   r:   )rQ   r6   r+   r   r   r   rR      s
   
 z"stub_arguments.<locals>.<listcomp>)r!   r   rK   rL   )r   r   r   r   stub_arguments   s    
rT   ),dataclassesr   typingr   r   Ztorchgen.api.typesapitypesr.   Ztorchgen.apir   r   r   r   r	   r
   r   r   r   r   Ztorchgen.modelr   r   r   r   r   r   r   strr   r"   r,   r1   r2   r3   r5   r=   r>   r?   rA   intrO   rS   rT   r   r   r   r   <module>   s8   (
$	  			  