a
    hU                     @  s&  d dl mZ d dl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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  erd dl!m"Z" d	d
dddZ#ddddddddZ$ddddddZ%dddddddZ&ddddd d!d"Z'd	ddd#d$d%Z(d&S )'    )annotations)TYPE_CHECKING)assert_never)local)cpp)ArgName	BaseCTypeBindingboolTConstRefCTypeCTypedeviceTlayoutT	ListCTypeMutRefCType
NamedCTypeOptionalCTypescalarTscalarTypeTtensorT)ArgumentFunctionSchemaReturnSelfArgumentTensorOptionsArgumentsType)Sequencer   str)funcreturnc                 C  s:   t | jj}|  r|d7 }| jjr6|d| jj 7 }|S )NZ_out_)r   name	is_out_fnZoverload_name)r   r!    r#   A/var/www/auris/lib/python3.9/site-packages/torchgen/api/native.pyr!   3   s    r!   r   boolr   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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   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+   =   s    r+   zSequence[Return]r   )rsr)   r   c                C  s   t j| |dS )Nr)   )r   returns_type)r,   r)   r#   r#   r$   r.   Q   s    r.   r   )ar(   r)   r   c                C  s   t | j| j||dS )Nr*   )r+   typeZis_write)r/   r(   r)   r#   r#   r$   argument_typeU   s    r1   z0Argument | SelfArgument | TensorOptionsArgumentszlist[Binding])r/   is_outr)   r   c             	   C  s  | }t | trVd }|r6| jd ur6tj| j| j|d}tt| | j|d| j|| dgS t | t	rpt
| j
||dS t | t rd }|rd}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   Y   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))
__future__r   typingr   Ztyping_extensionsr   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   collections.abcr   r!   r+   r.   r1   r4   r<   r#   r#   r#   r$   <module>   s   D 

@