U
    •Ê¹j*  ã                   @   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/bwave/python/venv/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s†t	‚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   (
$	  þ			  þ