o
    h%                     @   sJ  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dedefdd	Zdedeee ee f fd
dZdddedededeeeee ee f fddZdedededeee ee f fddZdededededeee ee f f
ddZdededededeee ee f f
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nameunambiguous_name)r    r   K/var/www/html/ai/venv/lib/python3.10/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 ]4\}}t|jt	s2t
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>p   s     z%convert_arguments.<locals>.<listcomp> z7Unexpected argument type, expecting `Argument` but got mutable)r   from_native_functionmost_faithful_signature	argumentsranger   	enumerate
isinstanceargumentr   	Exceptionargumenttype_ivalue_converttyper   is_writeextendappend	with_name)
r   	code_listbinding_listr   argr'   unboxed_name_codedeclr   r   r   convert_argumentsi   s2   



r6   Fr   targ_namer    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)r7   r    bindssymint_baser8   out_namectype_opt_out)r8   r=   r7   r>   	_list_outzCannot handle type z. arg_name: )r   argumenttype_typer*   r&   r
   _gen_code_base_typer   _gen_code_optional_typer   _gen_code_list_typer(   )r7   r8   r    r>   r=   r4   r5   r   r   r   r)      s8   





r)   r=   r>   c              	   C   s2   |j dd d| d|  d|j dd dgg fS )NT	strip_ref  = z.to<z>();)cpp_typer<   r   r   r   rB      s   *rB   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 )N_opt_inz
c10::optional<c10::IValue> z_opt = z.toOptional<c10::IValue>();
TrE   rG   z;
if (z*_opt.has_value()) {
    const c10::IValue rH   z_opt.value();
    
    (z);
} else {
    z();
}
        
)r)   elemrI   	connectorjoinsplit)	r8   r=   r7   r>   in_nameres_namer3   res_coder5   r   r   r   rC      sD   




rC   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 )N_list_in_elemzconst c10::List<c10::IValue> rH   z
.toList();rM   TrE   rG   z = as_array<r   z>(z);
            z;
for (c10::IValue z: z) {
    rK   z.push_back(z);
}
            _veczstd::vector<z> ;z
for (c10::IValue z);
}
rL   )r)   rN   r&   r
   r   r	   boolsizer,   rI   rQ   r   rO   rP   r-   )r8   r=   r7   r>   rR   	elem_namer4   rS   	res_ctyperT   r5   vec_namer   r   r   rD      s   

 

$
 
rD   N)typingr   r   torchgen.apir   torchgen.api.typesr   r   r   torchgen.modelr   r	   r
   r   r   r   r   rO   strr   r6   rY   r)   rB   rC   rD   r   r   r   r   <module>   s`    $[""
"

