U
    d                     @   s"  d dl 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mZmZmZmZmZmZ 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! ee"ddd	Z#ee$eed
ddZ%ee edddZ&eeedddZ'eeeef e$e e
 dddZ(ee e
 dddZ)dS )    )ArgumentFunctionSchemaReturnSelfArgumentTensorOptionsArgumentsType)ArgName	BaseCTypeBindingConstRefCType
NamedCTypeCTypeMutRefCType	ListCTypeOptionalCTypetensorTscalarTlayoutTdeviceTboolTscalarTypeT)cpp)local)assert_never)UnionSequenceListOptional)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$   7/tmp/pip-unpacked-wheel-ua33x9lu/torchgen/api/native.pyr"   *   s    r"   )tmutablebindsr   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rt|ttt
S t | dkrt|tttt
S tj| ||dS )NzTensor?z	Tensor?[]ZScalarzScalar?r'   r(   )r!   r   r	   r   r   Z!use_const_ref_for_mutable_tensorsr   r   r   r   r   r   argumenttype_type)r&   r'   r(   Ztensor_typer$   r$   r%   r*   4   s     r*   )rsr   c                 C   s
   t | S )N)r   returns_type)r+   r$   r$   r%   r,   F   s    r,   )ar(   r   c                C   s   t | j| j|dS )Nr)   )r*   typeZis_write)r-   r(   r$   r$   r%   argument_typeJ   s    r/   )r-   is_outr   c             	   C   s   | }t | trPd }|r2| jd k	r2t| j| j}tt| | jd| j|| dgS t | t	rht
| j
|dS t | trd }|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 )	N)r(   )Znctyper"   defaultargumentr0   z{}ZdtypeZlayoutZdeviceZ
pin_memory)
isinstancer   r1   r   Zdefault_exprr.   r
   r/   r"   r   r2   r   r   r   r	   r   r   r   r   r   )r-   r0   Zshould_defaultr1   r$   r$   r%   r2   N   sX    


r2   c                    s2   g }|  jj |  jj  fdd|D S )Nc                    s&   g | ]}t |  d D ]}|qqS )r3   )r2   r#   ).0argrr   r$   r%   
<listcomp>   s       zarguments.<locals>.<listcomp>)extend	argumentsZnon_outout)r   argsr$   r8   r%   r;      s    r;   N)*Ztorchgen.modelr   r   r   r   r   r   Ztorchgen.api.typesr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Ztorchgen.apir   Ztorchgenr   Ztorchgen.utilsr   typingr   r   r   r   r!   r"   boolr*   r,   r/   r2   r;   r$   r$   r$   r%   <module>   s    	D
 =