a
    h?                  	   @  s4  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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/m0Z0m1Z1m2Z2 erd dl3m4Z4 ddd	d
ddddddZ5dddddddddddZ6ddddddddddddZ7dddddddd d!Z8dddddd"d#d$d%Z9ddd&dd"d'd(d)Z:ddd*dd"d+d,d-Z;d.d/d0dd1d2d3d4Z<d5d6d7d8d9d:d;d<Z=ddddd=d>d?Z>ddd@dAdddddBdCdDdEZ?dddFddddAdBdGdHdIZ@dJS )K    )annotations)TYPE_CHECKING)assert_never)local)ArgName
ArrayCTypeArrayRefCType	BaseCTypeBaseTypeToCppMappingBindingboolTConstRefCTypeCTypedimnameListTintArrayRefTiTensorListRefT	ListCTypelongTMutRefCType
NamedCTypeOptionalCTypeoptionalIntArrayRefToptionalSymIntArrayRefTscalarTSpecialArgNamesymIntArrayRefTSymIntTtensorListTtensorOptionsTtensorT
TupleCTypeVectorCTypevoidT)Argument	ArgumentsBaseTyBaseTypeFunctionSchemaListTypeNativeFunctionOptionalTypeReturnSelfArgumentTensorOptionsArgumentsType)SequenceF)faithful_name_for_out_overloadssymint_overloadr'   boolstr)funcr0   r1   returnc                C  s:   t | jj}|r|d7 }|  r6|r.|d7 }n|d7 }|S )NZ_symintZ_outfZ_out)r3   name	is_out_fn)r4   r0   r1   r6    r8   >/var/www/auris/lib/python3.9/site-packages/torchgen/api/cpp.pyr6   L   s    
r6   Tmutablesymintr.   r   zNamedCType | None)tbindsr;   r<   r5   c                C  s   t | tr`| jtjtjfv r d S t| dkrL|r>t|tt	S t|tt
S t|tt| j S t | trt| j|||d}|d u rd S t|t|jS t | trt| jdkr| jd usJ t|ttt| jS d S ntdt|  d S )NSymIntr>   r;   r<   r2   unrecognized type )
isinstancer&   r6   r%   TensorScalarr3   r   r	   r   r   r
   r*   valuetype_typeelemr   typer(   sizer   r   AssertionErrorrepr)r=   r>   r;   r<   rF   r8   r8   r9   rE   a   s&    


rE   )remove_non_owning_ref_typesr<   r   )r=   r;   r>   rK   r<   r5   c                C  s   t | |||d}|d ur|S t| tr| jtjkrd|rPt sPt|t	t
tS t|tt
tS n,| jtjkrt|tt
tS td|  nt| trt| jdkr|rt st|t	t
tS t|ttt
tS nt| jdkr
t|ttt
tS t| jtr8t| jjdkr8t|t
tS t| jtrzt| jjdkrz|rlt|t
tS t|t
tS t| j|||d}t|t|jS t| tr
t| jdkr|rt|tt
tS t|t
tS t| jdkrB|r |rt|tt
tS t|tt
tS n"|r4t|t
tS t|t
tS t| jdkr~t rnt|tt
tS t|t
t S njt| jdkrt|t!t
tS t| jdkrt|t
t"S t| jd	krt|tt#tt
tS t| j|||d}t|t!|jS td
t$|  d S )Nr@   z&base type should have been value type rC   rD   intr?   )r;   r>   r<   ZDimnameTensor?rA   )%rE   rB   r&   r6   r%   rC   r   !use_const_ref_for_mutable_tensorsr   r   r	   r   r   rD   r   rI   r*   r3   rF   r   r(   r   r   argumenttype_typerG   r!   r   r   r   r   Zuse_ilistref_for_tensor_listsr   r   r   r   r   rJ   )r=   r;   r>   rK   r<   rrF   r8   r8   r9   rO      s~    	
  
rO   r<   r#   )ar>   r<   r5   c                C  s   t | j| j||dS )N)r;   r<   r>   )rO   rG   is_write)rR   r>   r<   r8   r8   r9   argument_type   s    rT   r   )r=   r;   r<   r5   c                C  s   t | d|dd}|d ur|jS t| trz| jtjkrd|rZt rLt	t
tS tt
tS qxt
tS q| jtjkrt
tS nrt| tr|rJ dt| jdd}| jd u sJ d|  t|S t| trt| j|d}t| jdkrt|S td	|  d S )
NZ__placeholder__Tr@   zTNative functions should never return a mutable tensor list. They should return void.F)r;   z'fixed size list returns not supported: rC   zunrecognized return type )rE   rG   rB   r&   r6   r%   rC   r   rN   r   r	   r   r   rD   r   r(   returntype_typerF   rH   r!   r*   r3   r   rI   )r=   r;   r<   rP   rF   r8   r8   r9   rU      s0    




rU   r+   )rP   r<   r5   c                C  s   t | j| j|dS )Nr:   )rU   rG   rS   )rP   r<   r8   r8   r9   return_type  s    rV   zSequence[Return])rsr<   r5   c                  sJ   t | dkrttS t | dkr0t| d  dS t fdd| D S d S )Nr      rQ   c                   s   g | ]}t | d qS )rQ   )rV   ).0rP   rQ   r8   r9   
<listcomp>      z returns_type.<locals>.<listcomp>)lenr	   r"   rV   r    )rW   r<   r8   rQ   r9   returns_type  s
    r]   result)fallback_namer)   zSequence[str])fr_   r5   c                  s   g }t | jjD ]\} | jjjjr:|dks4J dd}n| j rV| jjj| j}nf jrt fdd| j	 D }|r| j s j d}q j}n t
| jjdkr|n
| | }|| q|S )Nr   z.illegal inplace function with multiple returnsselfc                 3  s   | ]} j |j kV  qd S )N)r6   )rY   rR   rP   r8   r9   	<genexpr>*  s   zreturn_names.<locals>.<genexpr>Z_returnrX   )	enumerater4   returnsr6   Zinplacer7   	argumentsoutanyZschema_order_argumentsr\   append)r`   r_   re   ir6   Zname_conflictr8   rb   r9   return_names  s"    
 rk   falsetrue::std::nulloptzat::Reduction::Mean{}zc10::MemoryFormat::Contiguous	at::kLong)FalseTrueNoneZMeanz[]Zcontiguous_formatlong)dr=   r<   r5   c                C  s  | dkrt |dkrdS t|tr|jtj u rt| dkr| d dkr| d dkrd}d	}|d	 t| k r| | d
kr| | dkr|d7 }n|| | 7 }|d	7 }qZ| |d	  dkr|d7 }n|| ||d  7 }|d7 }qZd| dS t|tr| dkrdS t| |j|dS t|t	r| 
drF| drFd| d	d  d S |rr|  rrt |jdkrrd|  dS |jd u rtd|  dt| | S )Nrs   rM   ro      r   ' rX   \"z\"rn   rQ   []{}r?   zc10::SymInt()z,Expected a list default '[...]' but found: ')r3   rB   r&   r6   r%   r\   r*   default_exprrF   r(   
startswithendswithisdigitrH   
ValueErrorJIT_TO_CPP_DEFAULTget)ru   r=   r<   srj   r8   r8   r9   r   F  s:    $



 r   0Argument | TensorOptionsArguments | SelfArgumentzset[str]list[Binding])rR   cpp_no_default_argsmethodfaithfulr<   has_tensor_optionsr5   c          	        sL  ddd fdd}t | tr| jdkr<r<tj}n| j}d }| j vrl| jd urlt| j| jd}tt	| |d| j|| d	gS t | t
rr|| j|| j || j || j S d }d
 vsJ tdd |  D rd}n| jjdkr d}ttd
ttd
|| d	gS n*t | tr@r4g S || jS nt|  d S )Nr   r   )rR   r5   c                   s   t |  dS )N)r   r   r   r<   r   )argument)rR   r   r   r   r   r<   r8   r9   sub_argument|  s    zargument.<locals>.sub_argumentZmemory_formatrQ   )r>   r<   )Znctyper6   defaultr   optionsc                 s  s   | ]}|j d kV  qdS )rs   N)r   )rY   xr8   r8   r9   rc     r[   zargument.<locals>.<genexpr>ro   rt   rp   )rB   r#   r6   r   Z possibly_redundant_memory_formatr   r   rG   r   rT   r-   ZdtypeZlayoutZdeviceZ
pin_memoryallr   r	   r   r,   r   r   )	rR   r   r   r   r<   r   r   r>   r   r8   r   r9   r   s  sV    	
r   r$   )rf   r   r<   r   r   r5   c                  sT   g }r"|  j |  j n|  j |  j  fdd|D S )Nc              
     s<   g | ]4}t | jd udD ]}r2| n|q"qS )N)r   r<   r   r   r   )r   Ztensor_optionsZ
no_default)rY   rR   rP   rf   r   r   r   r<   r8   r9   rZ     s   
zarguments.<locals>.<listcomp>)extendZnon_outrg   )rf   r   r<   r   r   argsr8   r   r9   rf     s    rf   N)A
__future__r   typingr   Ztyping_extensionsr   Ztorchgenr   Ztorchgen.api.typesr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   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+   r,   r-   r.   collections.abcr/   r6   rE   rO   rT   rU   rV   r]   rk   r   r   r   rf   r8   r8   r8   r9   <module>   sD   |8)W	'	!3L