U
    •Ê¹j  ã                   @   s,  d dl mZmZmZ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 d dlmZmZmZmZmZmZ d dl m!Z! ee"dœdd	„Z#ee$e
e$ed
œdd„Z%ee e$edœdd„Z&ee
e$edœdd„Z'eeeef e$e$ee dœdd„Z(ee$ee dœdd„Z)dS )é    )ÚListÚOptionalÚSequenceÚUnion)Úlocal)Úcpp)ÚArgNameÚ	BaseCTypeÚBindingÚboolTÚConstRefCTypeÚCTypeÚdeviceTÚlayoutTÚ	ListCTypeÚMutRefCTypeÚ
NamedCTypeÚOptionalCTypeÚscalarTÚscalarTypeTÚtensorT)ÚArgumentÚFunctionSchemaÚReturnÚSelfArgumentÚTensorOptionsArgumentsÚType)Úassert_never)ÚfuncÚreturnc                 C   s:   t | jjƒ}|  ¡ r|d7 }| jjr6|d| jj› �7 }|S )NZ_outÚ_)ÚstrÚnameÚ	is_out_fnZoverload_name)r   r"   © r$   úR/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torchgen/api/native.pyr"   -   s    r"   )ÚtÚmutableÚbindsÚsymintr   c                C   sº   t | ƒdkrBtttƒƒ}|r2t ¡ s2t|t|ƒƒS t|t|ƒƒS nft | ƒdkrht|tt	tttƒƒƒƒƒS t | ƒdkr†t|ttt
ƒƒƒS t | ƒdkr¨t|tttt
ƒƒƒƒS tj| |||d�S )NzTensor?z	Tensor?[]ZScalarzScalar?©r'   r(   r)   )r!   r   r	   r   r   Z!use_const_ref_for_mutable_tensorsr   r   r   r   r   r   Úargumenttype_type)r&   r'   r(   r)   Ztensor_typer$   r$   r%   r+   7   s     ÿr+   )Úrsr)   r   c                C   s   t j| |d�S )N©r)   )r   Úreturns_type)r,   r)   r$   r$   r%   r.   K   s    r.   )Úar(   r)   r   c                C   s   t | j| j||d�S )Nr*   )r+   ÚtypeZis_write)r/   r(   r)   r$   r$   r%   Úargument_typeO   s    r1   )r/   Úis_outr)   r   c             	   C   s  | }t | tƒrVd }|r6| jd k	r6tj| j| j|d�}tt| | j|d�| j|| d�gS t | t	ƒrpt
| j
||d�S t | tƒ� rüd }|rˆd}ttdtttƒƒƒd|| d�ttdtttƒƒƒd|| d�ttdtttƒƒƒd|| d�ttd	tttƒƒƒd	|| d�gS t| ƒ d S )
Nr-   )r(   r)   )Znctyper"   ÚdefaultÚargument)r2   r)   z{}ZdtypeZlayoutZdeviceZ
pin_memory)Ú
isinstancer   r3   r   Zdefault_exprr0   r
   r1   r"   r   r4   r   r   r   r	   r   r   r   r   r   )r/   r2   r)   Zshould_defaultr3   r$   r$   r%   r4   S   sX    
üÿ
üüüüír4   )r   r)   r   c                   s4   g }|  ˆ jj¡ |  ˆ jj¡ ‡ ‡fdd„|D ƒS )Nc                    s(   g | ] }t |ˆˆ  ¡ d �D ]}|‘qqS ))r)   r2   )r4   r#   )Ú.0ÚargÚr©r   r)   r$   r%   Ú
<listcomp>—   s      zarguments.<locals>.<listcomp>)ÚextendÚ	argumentsZnon_outÚout)r   r)   Úargsr$   r9   r%   r<   “   s    ÿr<   N)*Útypingr   r   r   r   Ztorchgenr   Ztorchgen.apir   Ztorchgen.api.typesr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Ztorchgen.modelr   r   r   r   r   r   Ztorchgen.utilsr   r!   r"   Úboolr+   r.   r1   r4   r<   r$   r$   r$   r%   Ú<module>   s(   D    þû@