o
    vZh1                     @  sP  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 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$ d dl%m&Z& erdd dl'm(Z( 	 dHddZ)dddIddZ*dJddZ+dKddZ,dLd"d#Z-dMd&d'Z.d(d)dNd/d0Z/d1d2d3d4d5d6d7Z0dOd9d:Z1dPdBdCZ2dQdFdDZ3dGS )R    )annotations)TYPE_CHECKING)local)ArgName	BaseCTypeBindingConstRefCTypeCTypeMutRefCType
NamedCTypeSpecialArgName
TupleCTypeVectorCTypevoidT)ArrayRefCTypeBaseTypeToCppMappingOptionalCTypescalarTtensorListTtensorT)Argument	ArgumentsBaseTyBaseTypeListTypeNativeFunctionOptionalTypeReturnSelfArgumentTensorOptionsArgumentsType)assert_never)Sequencetr    bindsr   returnNamedCType | Nonec                C  s   t | tr-| jtjks| jtjkrd S t| dkr#t|tt	tj
 S t|tt	| j S t | trGt| j|d}|d u r?d S t|t|jS t | trht| jdkrf| jd usZJ t|ttt	tj S d S tdt|  )NZSymIntr$   boolunrecognized type )
isinstancer   namer   TensorScalarstrr   r   r   intr   valuetype_typeelemr   typer   sizer   r(   AssertionErrorrepr)r#   r$   r1    r6   M/var/www/auris/lib/python3.10/site-packages/torchgen/executorch/api/et_cpp.pyr0   B   s&   


r0   F)remove_non_owning_ref_typesmutabler(   r8   r   c                C  s  t | |d}|d ur|S t| trE| jtjkr/|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rk|r`t s`t|t	t
tS t|ttt
tS t| jdkr}t|ttt
tS t| j||d}t|t|jS t| trt| jdkrt|t
tS t| jdkrtdt| jdkrt|ttt
tS t| j||d}t|t|jS td	t|  )
Nr'   z&base type should have been value type r,   r-   r9   r$   ZDimnamez"Executorch doesn't support DimnameTensor?r)   )r0   r*   r   r+   r   r,   r   !use_const_ref_for_mutable_tensorsr   r
   r   r   r   r-   r   r4   r   r.   r1   r   argumenttype_typer2   r   r   NotImplementedErrorr   r5   )r#   r9   r$   r8   rr1   r6   r6   r7   r=   d   sJ   


r=   ar   c                C  s   t | j| j|dS )Nr:   )r=   r2   is_write)r@   r$   r6   r6   r7   argument_type   s   rB   r	   c                C  s   t | dd}|d ur|jS t| tr9| jtjkr.|r*t r$t	t
tS tt
tS t
tS | jtjkr8t
tS n"t| tr[|rDJ dt| jdd}| jd u sWJ d|  t|S td|  )NZ__placeholder__r'   zTNative functions should never return a mutable tensor list. They should return void.Fr9   z'fixed size list returns not supported: zunrecognized return type )r0   r2   r*   r   r+   r   r,   r   r<   r   r   r   r
   r-   r   r   returntype_typer1   r3   r   r4   )r#   r9   r?   r1   r6   r6   r7   rD      s*   

rD   r?   r   c                 C  s   t | j| jdS )NrC   )rD   r2   rA   r?   r6   r6   r7   return_type   s   rF   rsSequence[Return]c                 C  s>   t | dkr
ttS t | dkrt| d S tdd | D S )Nr      c                 S  s   g | ]}t |qS r6   )rF   ).0r?   r6   r6   r7   
<listcomp>   s    z returns_type.<locals>.<listcomp>)lenr   r   rF   r   )rG   r6   r6   r7   returns_type   s
   rM   result)fallback_namefr   rO   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)r+   )rJ   r@   rE   r6   r7   	<genexpr>   s    
zreturn_names.<locals>.<genexpr>Z_returnrI   )	enumeratefuncreturnsr+   ZinplaceZ	is_out_fn	argumentsoutanyZschema_order_argumentsrL   append)rP   rO   rV   ir+   Zname_conflictr6   rE   r7   return_names   s"   
 r\   falsetrueztorch::execustd::nullopt{}z+torch::executorch::MemoryFormat::Contiguousztorch::executorch::kLong)FalseTrueNonez[]Zcontiguous_formatlongdc                 C  sn  | 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S t|t	r| 
dr| drd| d	d  d S |jd u rtd|  dt| | S )Nrb   r;   r_      r   ' rI   \"z\"ztorch::executor::nullopt[]{}z,Expected a list default '[...]' but found: ')r.   r*   r   r+   r   rL   r   default_exprr1   r   
startswithendswithr3   
ValueErrorJIT_TO_CPP_DEFAULTget)rd   r#   sr[   r6   r6   r7   ro      s8   $





ro   0Argument | TensorOptionsArguments | SelfArgumentcpp_no_default_argsset[str]methodfaithfulhas_tensor_optionslist[Binding]c                  s   d fdd}t | tr>| jdkrrtj}n| j}d }| j vr0| jd ur0t| j| j}tt	| |d| j|| d	gS t | t
rGtd
t | trUrPg S || jS t|  d S )Nr@   rv   r%   r|   c                   s   t |  dS )N)rw   ry   rz   r{   )argument)r@   rw   rz   r{   ry   r6   r7   sub_argument/  s   zargument.<locals>.sub_argumentZmemory_formatr'   )Znctyper+   defaultr}   z3Need to implement type resolution for TensorOptions)r@   rv   r%   r|   )r*   r   r+   r   Z possibly_redundant_memory_formatr   ro   r2   r   rB   r   r>   r   r}   r!   )r@   rw   ry   rz   r{   r   r$   r   r6   r~   r7   r}   '  s,   




r}   rW   r   c                  sR   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)rz   ry   r{   rw   )r}   Ztensor_optionsZ
no_default)rJ   r@   r?   rW   rw   rz   ry   r6   r7   rK   e  s    zarguments.<locals>.<listcomp>)extendZnon_outrX   )rW   rz   ry   rw   argsr6   r   r7   rW   W  s   N)r#   r    r$   r   r%   r&   )
r#   r    r9   r(   r$   r   r8   r(   r%   r   )r@   r   r$   r   r%   r   )r#   r    r9   r(   r%   r	   )r?   r   r%   r	   )rG   rH   r%   r	   )rP   r   rO   r.   r%   rQ   )rd   r.   r#   r    r%   r.   )r@   rv   rw   rx   ry   r(   rz   r(   r{   r(   r%   r|   )
rW   r   rz   r(   ry   r(   rw   rx   r%   r|   )4
__future__r   typingr   Ztorchgenr   Ztorchgen.api.typesr   r   r   r   r	   r
   r   r   r   r   r   Ztorchgen.executorch.api.typesr   r   r   r   r   r   Ztorchgen.modelr   r   r   r   r   r   r   r   r   r   r    Ztorchgen.utilsr!   collections.abcr"   r0   r=   rB   rD   rF   rM   r\   rs   ro   r}   rW   r6   r6   r6   r7   <module>   s8    4 4
'
5
	
!
	!

+0