o
    ]i%                     @  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Zd>ddZd?ddZd@ddZdAdd ZdAd!d"Z dBd%d&Z!dCd*d+Z"dCd,d-Z#dDd.d/Z$ed0d1G d2d3 d3Z%dEd6d7Z&dFd9d:Z'dGd;d<Z(dS )H    )annotations)	dataclassN)cpp
structured)ArgNameBaseCppType	BaseCTypeBindingConstRefCTypeCType
NamedCTypescalarT)ArgumentBaseTyBaseTypeDispatchKeyFunctionSchemaNativeFunctionsGroupTypefuncr   dispatch_keyr   returnstrc                 C  s$   |   sJ dd| jj d| S )Nz7ufunc.kernel_name should only be invoked on out schemasZufunc__)	is_out_fnname)r   r    r   4/home/app/PyTorch/test/pytorch/torchgen/api/ufunc.pyschema_kernel_name   s   r   gr   c                 C  s   t | jj|S N)r   outr   )r   r   r   r   r   kernel_name!   s   r"   tr   bindsr   NamedCType | Nonec                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_tr   c                 C  s   | t jkrt jS tr    )	api_typesr0   opmath_tNotImplementedErrorr0   r   r   r   opmath_type8   s   
r5   r   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_tr   c                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   ar   r	   c                 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 ded< ded< dS )UfunctorBindingslist[Binding]ctorapplyN)__name__
__module____qualname____annotations__r   r   r   r   rH      s   
 rH   scalar_tensor_idx
int | Nonec                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      )rJ   rK   )

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



	





	
		

