o
    vZh$                     @  s   d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	m
Z
mZmZmZmZmZ dZd&d
dZd'ddZddd(ddZd)ddZd*d d!Zd+d#d$Zd%S ),    )annotations)cpp)BindingCppSignatureGroupCType)ArgumentBaseTyBaseTypeListTypeNativeFunctionOptionalTypeTypez
	fr   returnstrc                 C  s   | j j S )N)funcnameZunambiguous_name)r    r   D/var/www/auris/lib/python3.10/site-packages/torchgen/api/unboxing.pyr   e   s   r   tuple[list[Binding], list[str]]c           	        s   t j| dd    fddtt D dg }g } D ]2}t|jts.t	d| |j}t
|j|j|jd\}}}}|| || ||| q||fS )NF)methodc              	     s.   g | ]}d  | j  d| dt  dqS )zc10::IValue z = std::move(peek(stack, , z));)r   len).0iargsr   r   
<listcomp>q   s     z%convert_arguments.<locals>.<listcomp> z7Unexpected argument type, expecting `Argument` but got mutable)r   Zfrom_native_functionZmost_faithful_signature	argumentsranger   
isinstanceargumentr   	Exceptionargumenttype_ivalue_converttyper   Zis_writeextendappend	with_name)	r   Z	code_listZbinding_listargr$   Zunboxed_name_codedeclr   r   r   convert_argumentsj   s2   



r/   Fr   tr   arg_namer    bool'tuple[str, CType, list[str], list[str]]c                C  s   t j| ||ddj}t| tr| d}t|||d\}}n4t| tr3| d}t||| |d\}}nt| trH| d}t	||| |d\}}n
t
d|  d	| ||||fS )
NF)r0   r    ZbindsZsymint_baser1   out_namectypeZ_opt_out)r1   r6   r0   r7   Z	_list_outzCannot handle type z. arg_name: )r   Zargumenttype_typer'   r#   r	   _gen_code_base_typer   _gen_code_optional_typer
   _gen_code_list_typer%   )r0   r1   r    r7   r6   r-   r.   r   r   r   r&      s8   





r&   r6   r7   r   tuple[list[str], list[str]]c              	   C  s2   |j dd d| d|  d|j dd dgg fS )NTZ	strip_ref  = z.to<z>();)cpp_typer5   r   r   r   r8      s   *r8   r   c           	      C  s   |  d}t |j|\}}}}d|  d|  d|jdd d| d|  d	| d
|  dt| d| d
|jdd d| d| d
|jdd dd|fS )NZ_opt_inz
auto z_opt = z.toOptional<c10::IValue>();
Tr<   r=   z;
if (z*_opt.has_value()) {
    const c10::IValue r>   z_opt.value();
    
    (z);
} else {
    z();
}
        
)r&   elemr?   	connectorjoinsplit)	r1   r6   r0   r7   in_nameres_namer,   res_coder.   r   r   r   r9      s@   




r9   r
   c                 C  s  |  d}|  d}d| d|  dg}t |j|\}}}	}
t|jtrS|jjtjkrS|jrS|d|j	dd d	| d
|j	dd d|j d| d
d ||
fS t|jtr|d|j	dd d	| d| d| dt|	 d| d| d
d ||
fS | d }|
d|j	dd d| d |d| d| dt|	 d| d| d|j	dd d	| d| d
d ||
fS )NZ_list_in_elemzconst c10::List<c10::IValue> r>   z
.toList();rB   Tr<   r=   z = as_array<r   z>(z);
            z;
for (c10::IValue z: z) {
    r@   z.push_back(z);
}
            Z_veczstd::vector<z> ;z
for (c10::IValue z);
}
rA   )r&   rC   r#   r	   r   r   r2   sizer(   r?   rF   r   rD   rE   r)   )r1   r6   r0   r7   rG   Z	elem_namer-   rH   Z	res_ctyperI   r.   Zvec_namer   r   r   r:      s~   

 


 
	r:   N)r   r   r   r   )r   r   r   r   )r0   r   r1   r   r    r2   r   r3   )r1   r   r6   r   r7   r   r   r;   )
r1   r   r6   r   r0   r   r7   r   r   r;   )
r1   r   r6   r   r0   r
   r7   r   r   r;   )
__future__r   Ztorchgen.apir   Ztorchgen.api.typesr   r   r   Ztorchgen.modelr   r   r	   r
   r   r   r   rD   r   r/   r&   r8   r9   r:   r   r   r   r   <module>   s    $\

"
"
