o
    h*                     @   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 deded	efd
dZdeded	efddZdeded	ee fddZded	efddZ dededed	efddZ!dededed	efddZ"dededed	efddZ#deded	efddZ$deded	efd d!Z%deded	efd"d#Z&ed$d%G d&d' d'Z'ded(ee( ded	e'fd)d*Z)deded	ee fd+d,Z*ded	ee fd-d.Z+dS )/    )	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J dd| jj d| S )Nz7ufunc.kernel_name should only be invoked on out schemasufunc__)	is_out_fnname)r   r    r   H/var/www/html/ai/venv/lib/python3.10/site-packages/torchgen/api/ufunc.pyschema_kernel_name   s   r   gc                 C   s   t | jj|S N)r   outr   )r    r   r   r   r   kernel_name!   s   r#   tbindsc                C   s`   t j| |dd}|d ur|S | ttjkrt|tttS | ttj	kr'd S t
dt|  NF)r%   symintunrecognized type )r   valuetype_typer   r   Scalarr   r   r	   r   TensorAssertionErrorrepr)r$   r%   rr   r   r   dispatchstub_type*   s   r/   scalar_tc                 C   s   | t jkrt jS tr!   )	api_typesr0   opmath_tNotImplementedErrorr0   r   r   r   opmath_type8   s   
r5   c                C   sn   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
|  r&   )r   r)   r   r   r*   r   r	   r5   r+   r,   r-   )r$   r%   r0   r.   r   r   r   ufunctor_ctor_typeC   s   r6   c                C   s.   | t tjkrt|t|S tdt|  )Nr(   )r   r   r+   r   r	   r,   r-   )r$   r%   r0   r   r   r   ufunctor_apply_typeT   s   r7   	compute_tc                C   s^   t j| |dd}|d ur|S | ttjkrt||S | ttjkr&t||S tdt|  r&   )	r   r)   r   r   r*   r   r+   r,   r-   )r$   r%   r8   r.   r   r   r   
ufunc_type`   s   

r9   ac                 C       t t| j| j|d| jd | dS N)r%   r0   nctyper   defaultargument)r
   r6   typer   r:   r0   r   r   r   ufunctor_ctor_argumentm      rC   c                 C   r;   r<   )r
   r7   rA   r   rB   r   r   r   ufunctor_apply_argumentv   rD   rE   c                 C   r;   )N)r%   r8   r=   )r
   r9   rA   r   )r:   r8   r   r   r   ufunc_argument   rD   rF   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   rH      s   
 rH   scalar_tensor_idxc                C   s   g }g }| j jjjD ]2}|j r3|dkr!|t||d d }q
|d ur)|d8 }|t||d q
|t||d q
|d u sCJ t	||dS )Nr   r4      )rI   rJ   )

functionalr   	argumentsflat_non_outrA   is_tensor_likeappendrC   rE   rH   )r    rO   r0   rI   rJ   r:   r   r   r   ufunctor_arguments   s   
rV   c                   s    fdd| j jjjD S )Nc                    s   g | ]}t | d qS )r8   )rF   ).0r:   rW   r   r   
<listcomp>   s    
z#ufunc_arguments.<locals>.<listcomp>)rQ   r   rR   rS   )r    r8   r   rW   r   ufunc_arguments   s   

rZ   c                 C   s   dd | j jjjD S )Nc                 S   s*   g | ]}|j  st|D ]}|qqS r   )rA   rT   r   r@   )rX   r:   r.   r   r   r   rY      s    z"stub_arguments.<locals>.<listcomp>)r"   r   rR   rS   )r    r   r   r   stub_arguments   s   
r[   ),dataclassesr   typingr   r   torchgen.api.typesapitypesr1   torchgen.apir   r   r   r   r	   r
   r   r   r   r   torchgen.modelr   r   r   r   r   r   r   strr   r#   r/   r5   r6   r7   r9   rC   rE   rF   rH   intrV   rZ   r[   r   r   r   r   <module>   sJ    ($
	
			
