a
    h                     @  s  d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZ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mZm Z  d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Z$dddddZ%dddddZ&dS )    )annotations)assert_never)cpp)ArgNameArrayRefCType	BaseCTypeBindingConstRefCTypedimnameListTintArrayRefTiOptTensorListRefTiTensorListRefT
NamedCTypeOptionalCTypeoptionalIntArrayRefToptionalScalarRefToptionalTensorRefTscalarTtensorT)	ArgumentBaseTyBaseTypeListTypeNativeFunctionsGroupOptionalTypeSelfArgumentTensorOptionsArgumentsTyper   boolr   r   )tmutablebindsreturnc                C  s  t j| d||d}|d ur|S t| trv| jtjkrFt|tt	t
S | jtjkrdt|tt	tS td|  nTt| tr| jttjkrt|t	tS | jttjkrt|t	tS t| jtrt| jjdkrt|t	tS t| j||d}t|t|jS t| tr| jttjkr8t|tt	tS | jtttjkr\t|t	tS t| jdkrzt|t	tS t| jdkrt|t	tS t| j||d}t|t|jS tdt|  d S )NF)Zsymintr!   r    z&base type should have been value type intr    r!   ZDimnamezunrecognized type )r   Zvaluetype_type
isinstancer   namer   ZTensorr   r	   r   r   ZScalarr   AssertionErrorr   elemr   r   r   strr   argumenttype_typer   typer   r   r   r
   r   repr)r   r    r!   rr(    r.   E/var/www/auris/lib/python3.9/site-packages/torchgen/api/structured.pyr*   -   s<    
r*   r   )ar!   r"   c                C  s   t | j| j|dS )Nr$   )r*   r+   Zis_write)r0   r!   r.   r.   r/   argument_typeZ   s    r1   z0Argument | SelfArgument | TensorOptionsArgumentszlist[Binding])r0   r"   c                 C  s\   t | tr(tt| | jd| jd | dgS t | tr<t| jS t | trPtdnt	|  d S )N)r!   )Znctyper&   defaultargumentz2structured kernels don't support TensorOptions yet)
r%   r   r   r1   r&   r   r3   r   r'   r   )r0   r.   r.   r/   r3   e   s    




r3   r   )gr"   c                 C  s   g }| j jrzg }| j jjjD ]@}t|trR|j| j jjv rR|	| j jj|j  q|
| q|	| |	| j jj n|	| j jjj |	| j jjj  dd |D S )Nc                 S  s   g | ]}t |D ]}|qqS r.   r3   .0argr-   r.   r.   r/   
<listcomp>       z"impl_arguments.<locals>.<listcomp>)outZprecomputedfunc	argumentsnon_outr%   r   r&   replaceextendappendadd)r4   argsZnon_out_args_replacedr0   r.   r.   r/   impl_argumentsw   s    
rD   c                 C  s$   g }| | jjjj dd |D S )Nc                 S  s   g | ]}t |D ]}|qqS r.   r5   r6   r.   r.   r/   r9      r:   z"meta_arguments.<locals>.<listcomp>)r@   Z
functionalr<   r=   r>   r4   rC   r.   r.   r/   meta_arguments   s    rF   c                 C  s$   g }| | jjjj dd |D S )Nc                 S  s   g | ]}t |D ]}|qqS r.   r5   r6   r.   r.   r/   r9      r:   z!out_arguments.<locals>.<listcomp>)r@   r;   r<   r=   rE   r.   r.   r/   out_arguments   s    rG   N)'
__future__r   Ztyping_extensionsr   Ztorchgen.apir   Ztorchgen.api.typesr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Ztorchgen.modelr   r   r   r   r   r   r   r   r   r*   r1   r3   rD   rF   rG   r.   r.   r.   r/   <module>   s   H,-