U
    9%e                     @   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.   V/var/www/html/Darija-Ai-API/env/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rg }| j jjjD ]J}t|tr\|j| j jjkr\| j jj|j D ]}|	| qJq|	| 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appendextendadd)r4   argsZnon_out_args_replacedr0   replacementr.   r.   r/   impl_argumentsv   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      s     
  z"meta_arguments.<locals>.<listcomp>)r@   Z
functionalr;   r<   r=   r4   rB   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      s     
  z!out_arguments.<locals>.<listcomp>)r@   r:   r;   r<   rE   r.   r.   r/   out_arguments   s    rG   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   rD   rF   rG   r.   r.   r.   r/   <module>   s   H,
-