U
    •Ê¹j%  ã                
   @   s*  d dl mZ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eedœdd„Zeeee ee f dœd	d
„Zddœeeeeeeee ee f dœdd„Zeeeeee ee f dœdd„Zeeeeeee ee f dœdd„Zeeeeeee ee f dœdd„ZdS )é    )ÚListÚTuple)Úcpp)ÚBindingÚCppSignatureGroupÚCType)ÚArgumentÚBaseTyÚBaseTypeÚListTypeÚNativeFunctionÚOptionalTypeÚTypez
	)ÚfÚreturnc                 C   s   | j j ¡ S )N)ÚfuncÚnameZunambiguous_name)r   © r   úT/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torchgen/api/unboxing.pyr   d   s    r   c           
         s´   t j| dd� ¡  ¡ ‰ ‡ fdd„ttˆ ƒƒD ƒdg }g }tˆ ƒD ]h\}}t|jt	ƒsdt
d|› �ƒ‚|j}t|j|j|jd�\}}}}	| |	¡ | |¡ | | |¡¡ qB||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>p   s   ÿz%convert_arguments.<locals>.<listcomp>Ú z7Unexpected argument type, expecting `Argument` but got ©Úmutable)r   Zfrom_native_functionZmost_faithful_signatureÚ	argumentsÚranger   Ú	enumerateÚ
isinstanceÚargumentr   Ú	ExceptionÚargumenttype_ivalue_convertÚtyper   Zis_writeÚextendÚappendÚ	with_name)
r   Z	code_listZbinding_listr   Úargr$   Zunboxed_nameÚ_ÚcodeÚdeclr   r   r   Úconvert_argumentsi   s.    ÿ

þýÿý

r/   Fr   )ÚtÚarg_namer   r   c                C   s°   t j| ||dd�j}t| tƒr<|› d�}t|||d�\}}nht| tƒrf|› d�}t||| |d�\}}n>t| tƒr�|› d�}t	||| |d�\}}nt
d| › d	|› �ƒ‚||||fS )
NF)r0   r   ZbindsZsymintZ_base©r1   Úout_nameÚctypeZ_opt_out)r1   r3   r0   r4   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   r4   r3   r-   r.   r   r   r   r&   Š   s>       ÿ

  ÿ

ü

ür&   )r1   r3   r4   r   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_typer2   r   r   r   r5   ¬   s    *ÿþr5   )r1   r3   r0   r4   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
c10::optional<c10::IValue> z_opt = z.toOptional<c10::IValue>();
Tr8   r9   z;
if (z*_opt.has_value()) {
    const c10::IValue r:   z_opt.value();
    ú
    ú(z);
} else {
    z();
}
        Ú
)r&   Úelemr;   Ú	connectorÚjoinÚsplit)	r1   r3   r0   r4   Úin_nameÚres_namer,   Úres_coder.   r   r   r   r6   ´   sB    
ÿÿ
þþÿüÿûþ
þúþ
þõòr6   c                 C   sx  | › d�}| › d�}d|› d| › d�g}t |j|ƒ\}}}	}
t|jtƒr |jjtjkr |jr | d|j	dd�› d	|› d
|j	dd�› d|j› d|› d� 
d¡¡ nÐt|jtƒrø| d|j	dd�› d	|› d|› d|› dt |	¡› d|› d|› d� 
d¡¡ nx| 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();r>   Tr8   r9   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);
}
r=   )r&   r?   r#   r
   r   r	   ÚboolÚsizer(   r;   rB   r   r@   rA   r)   )r1   r3   r0   r4   rC   Z	elem_namer-   rD   Z	res_ctyperE   r.   Zvec_namer   r   r   r7   Ë   s€    

 
ÿÿ
ÿÿÿýÿ
ÿÿþþýÿüùÿ ÿÿþýý
ûûýùÿr7   N)Útypingr   r   Ztorchgen.apir   Ztorchgen.api.typesr   r   r   Ztorchgen.modelr   r	   r
   r   r   r   r   r@   Ústrr   r/   rH   r&   r5   r6   r7   r   r   r   r   Ú<module>   s<   $[ "ÿ  þ#  þ	   þ   þ