o
    0h1                     @  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|  )NSymIntr$   boolunrecognized type )
isinstancer   namer   TensorScalarstrr   r   r   intr   valuetype_typeelemr   typer   sizer   r)   AssertionErrorrepr)r#   r$   r2    r7   R/var/www/vscode/kcb/lib/python3.10/site-packages/torchgen/executorch/api/et_cpp.pyr1   B   s&   


r1   F)remove_non_owning_ref_typesmutabler)   r9   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.   r:   r$   Dimnamez"Executorch doesn't support DimnameTensor?r*   )r1   r+   r   r,   r   r-   r   !use_const_ref_for_mutable_tensorsr   r
   r   r   r   r.   r   r5   r   r/   r2   r   argumenttype_typer3   r   r   NotImplementedErrorr   r6   )r#   r:   r$   r9   rr2   r7   r7   r8   r?   d   sJ   


r?   ar   c                C  s   t | j| j|dS )Nr;   )r?   r3   is_write)rB   r$   r7   r7   r8   argument_type   s   rD   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|  )N__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 )r1   r3   r+   r   r,   r   r-   r   r>   r   r   r   r
   r.   r   r   returntype_typer2   r4   r   r5   )r#   r:   rA   r2   r7   r7   r8   rG      s*   

rG   rA   r   c                 C  s   t | j| jdS )NrF   )rG   r3   rC   rA   r7   r7   r8   return_type   s   rI   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 r7   )rI   ).0rA   r7   r7   r8   
<listcomp>   s    z returns_type.<locals>.<listcomp>)lenr   r   rI   r   )rJ   r7   r7   r8   returns_type   s
   rP   result)fallback_namefr   rR   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,   )rM   rB   rH   r7   r8   	<genexpr>   s    
zreturn_names.<locals>.<genexpr>_returnrL   )	enumeratefuncreturnsr,   inplace	is_out_fn	argumentsoutanyschema_order_argumentsrO   append)rS   rR   rZ   ir,   name_conflictr7   rH   r8   return_names   s"   
 rd   falsetrueztorch::execustd::nullopt{}z+torch::executorch::MemoryFormat::Contiguousztorch::executorch::kLong)FalseTrueNonez[]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 )Nrj   r=   rg      r   ' rL   \"z\"ztorch::executor::nullopt[]{}z,Expected a list default '[...]' but found: ')r/   r+   r   r,   r   rO   r   default_exprr2   r   
startswithendswithr4   
ValueErrorJIT_TO_CPP_DEFAULTget)rm   r#   srb   r7   r7   r8   rx      s8   $





rx   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 )NrB   r   r%   r   c                   s   t |  dS )N)r   r   r   r   )argument)rB   r   r   r   r   r7   r8   sub_argument/  s   zargument.<locals>.sub_argumentmemory_formatr(   )nctyper,   defaultr   z3Need to implement type resolution for TensorOptions)rB   r   r%   r   )r+   r   r,   r    possibly_redundant_memory_formatr   rx   r3   r   rD   r   r@   r   r   r!   )rB   r   r   r   r   r   r$   r   r7   r   r8   r   '  s,   




r   r]   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)r   r   r   r   )r   tensor_options
no_default)rM   rB   rA   r]   r   r   r   r7   r8   rN   e  s    zarguments.<locals>.<listcomp>)extendnon_outr^   )r]   r   r   r   argsr7   r   r8   r]   W  s   N)r#   r    r$   r   r%   r&   )
r#   r    r:   r)   r$   r   r9   r)   r%   r   )rB   r   r$   r   r%   r   )r#   r    r:   r)   r%   r	   )rA   r   r%   r	   )rJ   rK   r%   r	   )rS   r   rR   r/   r%   rT   )rm   r/   r#   r    r%   r/   )rB   r   r   r   r   r)   r   r)   r   r)   r%   r   )
r]   r   r   r)   r   r)   r   r   r%   r   )4
__future__r   typingr   torchgenr   torchgen.api.typesr   r   r   r   r	   r
   r   r   r   r   r   torchgen.executorch.api.typesr   r   r   r   r   r   torchgen.modelr   r   r   r   r   r   r   r   r   r   r    torchgen.utilsr!   collections.abcr"   r1   r?   rD   rG   rI   rP   rd   r|   rx   r   r]   r7   r7   r7   r8   <module>   s8    4 4
'
5
	
!
	!

+0