o
    vZh?                     @  s  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-m.Z.m/Z/m0Z0 d dl1m2Z2 erzd dl3m4Z4 ddd	dSddZ5ddddTddZ6ddddUd!d"Z7dd#dVd&d'Z8dd#dWd)d*Z9dd#dXd-d.Z:dd#dYd1d2Z;d3d4dZd9d:Z<d;d<d=d>d?d@dAdBZ=d[dDdEZ>dd#d\dMdNZ?dd#d]dQdOZ@dRS )^    )annotations)TYPE_CHECKING)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)assert_never)SequenceF)faithful_name_for_out_overloadssymint_overloadfuncr&   r0   boolr1   returnstrc                C  s<   t | jj}|r|d7 }|  r|r|d7 }|S |d7 }|S )NZ_symintZ_outfZ_out)r5   name	is_out_fn)r2   r0   r1   r6    r8   ?/var/www/auris/lib/python3.10/site-packages/torchgen/api/cpp.pyr6   L   s   r6   Tmutablesyminttr-   bindsr   r;   r<   NamedCType | Nonec                C  s   t | tr0| jtjtjfv rd S t| dkr&|rt|tt	S t|tt
S t|tt| j S t | trLt| j|||d}|d u rDd S t|t|jS t | trlt| jdkrj| jd us_J t|ttt| jS d S tdt|  )NSymIntr>   r;   r<   r3   unrecognized type )
isinstancer%   r6   r$   TensorScalarr5   r   r   r   r   r	   r)   valuetype_typeelemr   typer'   sizer   r   AssertionErrorrepr)r=   r>   r;   r<   rG   r8   r8   r9   rF   a   s&   


rF   )remove_non_owning_ref_typesr<   rL   r   c                C  s  t | |||d}|d ur|S t| trG| jtjkr1|r(t s(t|t	t
tS t|tt
tS | jtjkr@t|tt
tS td|  t| trt| jdkrm|rbt sbt|t	t
tS t|ttt
tS t| jdkrt|ttt
tS t| jtrt| jjdkrt|t
tS t| jtrt| jjdkr|rt|t
tS t|t
tS t| j|||d}t|t|jS t| trut| jdkr|rt|tt
tS t|t
tS t| jdkr|r|rt|tt
tS t|tt
tS |rt|t
tS t|t
tS t| jdkr/t r(t|tt
tS t|t
t S t| jdkr@t|t!t
tS t| jdkrOt|t
t"S t| jd	krdt|tt#tt
tS t| j|||d}t|t!|jS td
t$|  )NrA   z&base type should have been value type rD   rE   intr@   )r;   r>   r<   ZDimnameTensor?rB   )%rF   rC   r%   r6   r$   rD   r   !use_const_ref_for_mutable_tensorsr   r   r   r   r   rE   r   rJ   r)   r5   rG   r   r'   r   r   argumenttype_typerH   r    r   r   r   r   Zuse_ilistref_for_tensor_listsr   r   r   r   r   rK   )r=   r;   r>   rL   r<   rrG   r8   r8   r9   rP      s~   	


rP   r<   ar"   c                C  s   t | j| j||dS )N)r;   r<   r>   )rP   rH   is_write)rS   r>   r<   r8   r8   r9   argument_type   s   rU   r   c                C  s   t | d|dd}|d ur|jS t| tr;| jtjkr0|r,t r&t	t
tS tt
tS t
tS | jtjkr:t
tS n9t| tr]|rFJ dt| jdd}| jd u sYJ d|  t|S t| trtt| j|d}t| jdkrtt|S td	|  )
NZ__placeholder__TrA   zTNative functions should never return a mutable tensor list. They should return void.F)r;   z'fixed size list returns not supported: rD   zunrecognized return type )rF   rH   rC   r%   r6   r$   rD   r   rO   r   r   r   r   rE   r   r'   returntype_typerG   rI   r    r)   r5   r   rJ   )r=   r;   r<   rQ   rG   r8   r8   r9   rV      s2   


rV   rQ   r*   c                C  s   t | j| j|dS )Nr:   )rV   rH   rT   )rQ   r<   r8   r8   r9   return_type  s   rW   rsSequence[Return]c                  sF   t | dkr
ttS t | dkrt| d  dS t fdd| D S )Nr      rR   c                   s   g | ]}t | d qS )rR   )rW   ).0rQ   rR   r8   r9   
<listcomp>  s    z returns_type.<locals>.<listcomp>)lenr   r!   rW   r   )rX   r<   r8   rR   r9   returns_type  s
   r^   result)fallback_namefr(   r`   Sequence[str]c                  s   g }t | jjD ][\} | jjjjr|dksJ dd}nA| j r+| jjj| j}n3 jrNt fdd| j	 D }|rJ| j sJ j d}n j}nt
| jjdkrX|n| | }|| q|S )Nr   z.illegal inplace function with multiple returnsselfc                 3  s    | ]	} j |j kV  qd S )N)r6   )r[   rS   rQ   r8   r9   	<genexpr>*  s    
zreturn_names.<locals>.<genexpr>Z_returnrZ   )	enumerater2   returnsr6   Zinplacer7   	argumentsoutanyZschema_order_argumentsr]   append)ra   r`   rg   ir6   Zname_conflictr8   rd   r9   return_names  s"   
 rm   falsetrue::std::nulloptzat::Reduction::Mean{}zc10::MemoryFormat::Contiguous	at::kLong)FalseTrueNoneZMeanz[]Zcontiguous_formatlongdc                C  s  | dkrt |dkrdS t|trz|jtj u rzt| dkrz| d dkrz| d dkrzd}d	}|d	 t| k rt| | d
krQ| | dkrF|d7 }n|| | 7 }|d	7 }n| |d	  dkr^|d7 }n
|| ||d  7 }|d7 }|d	 t| k s5d| dS t|tr| dkrdS t| |j|dS t|t	r| 
dr| drd| d	d  d S |r|  rt |jdkrd|  dS |jd u rtd|  dt| | S )Nru   rN   rq      r   ' rZ   \"z\"rp   rR   []{}r@   zc10::SymInt()z,Expected a list default '[...]' but found: ')r5   rC   r%   r6   r$   r]   r)   default_exprrG   r'   
startswithendswithisdigitrI   
ValueErrorJIT_TO_CPP_DEFAULTget)rw   r=   r<   srl   r8   r8   r9   r   F  s<   $





r   0Argument | TensorOptionsArguments | SelfArgumentcpp_no_default_argsset[str]methodfaithfulhas_tensor_optionslist[Binding]c          	        s:  d fdd}t | trB| jdkrrtj}n| j}d }| j vr3| jd ur3t| j| jd}tt	| |d	| j|| d
gS t | t
rr]|| j|| j || j || j S d }d vseJ tdd |  D rsd}n| jjdkr{d}ttdttd|| d
gS t | trrg S || jS t|  d S )NrS   r   r4   r   c                   s   t |  dS )N)r   r   r   r<   r   )argument)rS   r   r   r   r   r<   r8   r9   sub_argument|  s   zargument.<locals>.sub_argumentZmemory_formatrR   )r>   r<   )Znctyper6   defaultr   optionsc                 s  s    | ]}|j d kV  qdS )ru   N)r   )r[   xr8   r8   r9   re     s    zargument.<locals>.<genexpr>rq   rv   rr   )rS   r   r4   r   )rC   r"   r6   r   Z possibly_redundant_memory_formatr   r   rH   r
   rU   r,   ZdtypeZlayoutZdeviceZ
pin_memoryallr   r   r   r+   r   r.   )	rS   r   r   r   r<   r   r   r>   r   r8   r   r9   r   s  sV   	



r   rh   r#   c                  sT   g }r|  j |  j n|  j |  j  fdd|D S )Nc              
     s<   g | ]}t | jd udD ]
}r| n|qqS )N)r   r<   r   r   r   )r   Ztensor_optionsZ
no_default)r[   rS   rQ   rh   r   r   r   r<   r8   r9   r\     s    zarguments.<locals>.<listcomp>)extendZnon_outri   )rh   r   r<   r   r   argsr8   r   r9   rh     s   N)r2   r&   r0   r3   r1   r3   r4   r5   )
r=   r-   r>   r   r;   r3   r<   r3   r4   r?   )r=   r-   r;   r3   r>   r   rL   r3   r<   r3   r4   r   )rS   r"   r>   r   r<   r3   r4   r   )r=   r-   r;   r3   r<   r3   r4   r   )rQ   r*   r<   r3   r4   r   )rX   rY   r<   r3   r4   r   )ra   r(   r`   r5   r4   rb   )rw   r5   r=   r-   r<   r3   r4   r5   )rS   r   r   r   r   r3   r   r3   r<   r3   r   r3   r4   r   )rh   r#   r   r3   r<   r3   r   r3   r   r   r4   r   )A
__future__r   typingr   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-   Ztorchgen.utilsr.   collections.abcr/   r6   rF   rP   rU   rV   rW   r^   rm   r   r   r   rh   r8   r8   r8   r9   <module>   sF    |8)W	'	!
3L