U
    Mh2                     @   s  d dl mZmZmZmZ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 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" ddl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) dd	e e	e*ee d
ddZ+dd	e e*e	e*edddZ,ee	edddZ-e e*edddZ.eedddZ/ee edddZ0ddee1ee1 ddd Z2d!d"d#d$d%d&d'Z3e1e e1d(d)d*Z4eeeef ee1 e*e*e*ee d+d,d-Z5ee*e*ee1 ee d.d/d0Z6d1S )2    )ListOptionalSequenceSetUnion)local)ArgName
ArrayCType	BaseCTypeBindingConstRefCTypeCTypeMutRefCType
NamedCTypeSpecialArgName
TupleCTypeVectorCTypevoidT)Argument	ArgumentsBaseTyBaseTypeListTypeNativeFunctionOptionalTypeReturnSelfArgumentTensorOptionsArgumentsType)assert_never   )ArrayRefCTypeBaseTypeToCppMappingOptionalCTypescalarTtensorListTtensorTF)remove_non_owning_ref_types)tbindsr'   returnc                C   s  t | trr| jtjks"| jtjkr&d S t| dkrFt|tt	tj
 S |r^| jtjkr^tdt|tt	| j S t | trt| j|d}|d krd S t|t|jS t | trt| jdkr| jd k	stt|ttt	tj | jS d S ntdt|  d S )NZSymIntz1string ref->value conversion: not implemented yetr)   boolunrecognized type )
isinstancer   namer   TensorScalarstrr   r
   r"   intAssertionErrorr   valuetype_typeelemr#   typer   sizer	   r,   repr)r(   r)   r'   r6    r:   P/var/www/html/venv/lib/python3.8/site-packages/torchgen/executorch/api/et_cpp.pyr5   <   s2    


 r5   )r(   mutabler)   r'   r*   c                C   s  t | ||d}|d k	r|S t| tr| jtjkrb|rNt sNt|t	t
tS t|tt
tS n,| jtjkrt|tt
tS td|  n2t| tr(t| jdkr|rt st|t	t
tS t|ttt
tS n&t| jdkrt|ttt
tS t| j||d}t|t|jS t| trt| jdkrRt|t
tS t| jdkrltdn&t| jdkrt|ttt
tS t| j||d}t|t|jS td	t|  d S )
N)r)   r'   z&base type should have been value type r0   r1   r<   r)   ZDimnamez"Executorch doesn't support DimnameTensor?r-   )r5   r.   r   r/   r   r0   r   !use_const_ref_for_mutable_tensorsr   r   r
   r&   r   r1   r$   r4   r   r2   r6   r#   argumenttype_typer7   r   r%   NotImplementedErrorr!   r9   )r(   r<   r)   r'   rr6   r:   r:   r;   r@   d   sP    
 
 
r@   )ar)   r*   c                C   s   t | j| j|dS )Nr=   )r@   r7   is_write)rC   r)   r:   r:   r;   argument_type   s    rE   )r(   r<   r*   c                C   s   t | dd}|d k	r|jS t| trv| jtjkr`|rVt rHt	t
tS tt
tS qtt
tS q| jtjkrt
tS nDt| tr|rtdt| jdd}| jd kstd|  t|S td|  d S )NZ__placeholder__r+   zTNative functions should never return a mutable tensor list. They should return void.Fr<   z'fixed size list returns not supported: zunrecognized return type )r5   r7   r.   r   r/   r   r0   r   r?   r   r
   r&   r   r1   r$   r   r4   returntype_typer6   r8   r   )r(   r<   rB   r6   r:   r:   r;   rG      s*    



rG   )rB   r*   c                 C   s   t | j| jdS )NrF   )rG   r7   rD   rB   r:   r:   r;   return_type   s    rI   )rsr*   c                 C   sB   t | dkrttS t | dkr,t| d S tdd | D S d S )Nr   r    c                 S   s   g | ]}t |qS r:   )rI   ).0rB   r:   r:   r;   
<listcomp>   s     z returns_type.<locals>.<listcomp>)lenr
   r   rI   r   )rJ   r:   r:   r;   returns_type   s
    rN   result)fallback_name)frP   r*   c                   s   g }t | jjD ]\} | jjjjr:|dks4t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)r/   )rK   rC   rH   r:   r;   	<genexpr>   s    zreturn_names.<locals>.<genexpr>Z_returnr    )	enumeratefuncreturnsr/   Zinplacer4   Z	is_out_fn	argumentsoutanyZschema_order_argumentsrM   append)rQ   rP   rV   ir/   Zname_conflictr:   rH   r;   return_names   s"    
 r\   falsetrueztorch::executorch::nullopt{}z+torch::executorch::MemoryFormat::Contiguousztorch::executorch::kLong)FalseTrueNonez[]Zcontiguous_formatlong)dr(   r*   c                 C   sj  | dkrt |dkrdS t|tr|jtj k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S t|t	r^| 
drB| drBd| d	d  d S |jd kr^td|  dt| | S )Nrb   r>   r_      r   ' r    \"z\"ztorch::executor::nullopt[]{}z,Expected a list default '[...]' but found: ')r2   r.   r   r/   r   rM   r   default_exprr6   r   
startswithendswithr8   
ValueErrorJIT_TO_CPP_DEFAULTget)rd   r(   sr[   r:   r:   r;   ro      s6    $



ro   )rC   cpp_no_default_argsmethodfaithfulhas_tensor_optionsr*   c                   s   t tttf tt d fdd}t| tr| jdkrHrHtj	}n| j}d }| j krt| j
d k	rtt| j
| j}tt| |d| j|| dgS t| trtdn&t| trrg S || jS nt|  d S )N)rC   r*   c                    s   t |  dS )N)rv   rw   rx   ry   )argument)rC   rv   rx   ry   rw   r:   r;   sub_argument0  s    zargument.<locals>.sub_argumentZmemory_formatr+   )Znctyper/   defaultrz   z3Need to implement type resolution for TensorOptions)r   r   r   r   r   r   r.   r/   r   Z possibly_redundant_memory_formatr}   ro   r7   rE   rA   rz   r   )rC   rv   rw   rx   ry   r|   r)   r}   r:   r{   r;   rz   (  s0    	




rz   )rW   rx   rw   rv   r*   c                   sR   g }r"|  j |  j n|  j |  j  fdd|D S )Nc              	      s:   g | ]2}t | jd k	dD ]}r0| n|q qS )N)rx   rw   ry   rv   )rz   Ztensor_optionsZ
no_default)rK   rC   rB   rW   rv   rx   rw   r:   r;   rL   f  s    zarguments.<locals>.<listcomp>)extendZnon_outrX   )rW   rx   rw   rv   argsr:   r~   r;   rW   X  s    rW   N)7typingr   r   r   r   r   Ztorchgenr   Ztorchgen.api.typesr   r	   r
   r   r   r   r   r   r   r   r   r   Ztorchgen.modelr   r   r   r   r   r   r   r   r   r   r   Ztorchgen.utilsr   typesr!   r"   r#   r$   r%   r&   r,   r5   r@   rE   rG   rI   rN   r2   r\   rs   ro   rz   rW   r:   r:   r:   r;   <module>   s\   84  -6	!	!,1