U
    •Ê¹j  ã                   @   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ržt|t	tƒƒS | jttjƒkr¼t|t	tƒƒS t| jtƒræt| jjƒdkræt|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�r–t|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/bwave/python/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r„g }| 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,
-