a
    h%                     @  s  d dl mZ d dl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 ddd	d
ddZddd	dddZddddddZdddddZdddddddZddddddd Z ddd!dd"d#d$Z!d%dd&d'd(d)Z"d%dd&d'd*d+Z#d%d!d&d,d-d.Z$ed/d0G d1d2 d2Z%dd3dd2d4d5d6Z&dd!d7d8d9d:Z'dd7d;d<d=Z(dS )>    )annotations)	dataclassN)cpp
structured)ArgNameBaseCppType	BaseCTypeBindingConstRefCTypeCType
NamedCTypescalarT)ArgumentBaseTyBaseTypeDispatchKeyFunctionSchemaNativeFunctionsGroupTyper   r   str)funcdispatch_keyreturnc                 C  s$   |   sJ dd| jj d| S )Nz7ufunc.kernel_name should only be invoked on out schemasZufunc__)Z	is_out_fnname)r   r    r   @/var/www/auris/lib/python3.9/site-packages/torchgen/api/ufunc.pyschema_kernel_name   s    r   r   )gr   r   c                 C  s   t | jj|S N)r   outr   )r   r   r   r   r   kernel_name!   s    r!   r   r   zNamedCType | None)tbindsr   c                C  sd   t j| |dd}|d u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   TensorAssertionErrorrepr)r"   r#   rr   r   r   dispatchstub_type*   s    r,   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-   r   c                C  sr   t j| |dd}|d u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"   r#   	compute_tr   c                C  sb   t j| |dd}|d u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   r   r	   )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 ded< ded< dS )UfunctorBindingslist[Binding]ctorapplyN)__name__
__module____qualname____annotations__r   r   r   r   rA      s   
rA   z
int | None)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 urR|d8 }|t||d q|t||d q|d u sJ t	||dS )Nr   r0      )rC   rD   )

functionalr   	argumentsflat_non_outr;   is_tensor_likeappendr=   r>   rA   )r   rI   r-   rC   rD   r6   r   r   r   ufunctor_arguments   s    
rP   rB   )r   r4   r   c                  s    fdd| j jjjD S )Nc                   s   g | ]}t | d qS )r4   )r?   ).0r6   rQ   r   r   
<listcomp>   s   z#ufunc_arguments.<locals>.<listcomp>)rK   r   rL   rM   )r   r4   r   rQ   r   ufunc_arguments   s    

rT   )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;   rN   r   r:   )rR   r6   r+   r   r   r   rS      s   
z"stub_arguments.<locals>.<listcomp>)r    r   rL   rM   )r   r   r   r   stub_arguments   s    
rU   ))
__future__r   Zdataclassesr   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   r   r!   r,   r1   r2   r3   r5   r=   r>   r?   rA   rP   rT   rU   r   r   r   r   <module>   s(   (
$				