U
    Mh                     @   s   d dl mZ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l m!Z! ee"eedddZ#eeed	d
dZ$eeeef 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(dS )    )ListUnion)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Type)assert_never)tmutablebindsreturnc                C   s  t j| d|d}|d k	r|S t| trt| jtjkrDt|tt	t
S | jtjkrbt|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r6t|tt	tS | jtttjkrZt|t	tS t| jdkrxt|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!   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.   I/var/www/html/venv/lib/python3.8/site-packages/torchgen/api/structured.pyr*   ,   s<    
r*   )ar!   r"   c                C   s   t | j| j|dS )Nr$   )r*   r+   Zis_write)r0   r!   r.   r.   r/   argument_typeY   s    r1   )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   d   s    




r3   )gr"   c                 C   s   g }| j jrzg }| j jjjD ]@}t|trR|j| j jjk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>   s     
  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_argumentsv   s    
rC   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      s     
  z"meta_arguments.<locals>.<listcomp>)r?   Z
functionalr;   r<   r=   r4   rB   r.   r.   r/   meta_arguments   s    rE   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      s     
  z!out_arguments.<locals>.<listcomp>)r?   r:   r;   r<   rD   r.   r.   r/   out_arguments   s    rF   N))typingr   r   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   Ztorchgen.utilsr   boolr*   r1   r3   rC   rE   rF   r.   r.   r.   r/   <module>   s   H,
-