U
    •Ê¹j	  ã                   @   sÊ   d dl mZmZmZ d dlm  mZ d dlm  mZ d dl	m
Z
 d dlmZ d dlmZmZmZ d dlmZ eeeee dœdd	„ƒZeeeee d
œdd„ƒZeeeef eee d
œdd„ƒZdS )é    )ÚListÚOptionalÚUnionN)Úkernel_signature)Úwith_native_function_and_index)ÚBackendIndexÚNativeFunctionÚNativeFunctionsGroup)ÚmapMaybe)ÚfÚbackend_indexÚreturnc                 C   sZ   t | |ƒ}| | ¡}|d kr d S d|jkr.d S |jr8dnd}|› d|j|jd�› d�S d S )Nzlegacy::ZstaticZ	TORCH_APIú )Únameú;)r   Ú
get_kernelÚkernelÚexternalÚdecl)r   r   ÚsigÚmetadataÚprefix© r   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torchgen/dest/native_functions.pyÚgen_unstructured   s    


r   )Úgr   r   c                 C   sj   t  | ¡}t | ¡}| | ¡}|d kr*g S |jr4dnd}d|› d|j› d|› dd dd	„ |D ƒ¡› d
�	gS )NÚ z
TORCH_API zstruct Zstructured_z : public at::meta::structured_z {
void impl(z, c                 s   s   | ]}|  ¡ V  qd S ©N)r   )Ú.0Úar   r   r   Ú	<genexpr>$   s     z!gen_structured.<locals>.<genexpr>z);
};
)Úmetar   Ú
structuredZimpl_argumentsr   r   r   Újoin)r   r   Z	meta_nameZout_argsr   r   r   r   r   Úgen_structured   s     


ÿÿÿþÿr$   c                    sz   ˆ   | ¡}t| tƒrZ|d k	r>|jr>ˆ jr2tdƒ‚qXt| ˆ ƒS qvtt‡ fdd„|  	¡ ƒƒS nt
| ˆ ƒ}|d krpg S |gS d S )Nz>Structured external backend functions are not implemented yet.c                    s
   t | ˆ ƒS r   )r   )r   ©r   r   r   Ú<lambda><   ó    z5compute_native_function_declaration.<locals>.<lambda>)r   Ú
isinstancer	   r"   r   ÚAssertionErrorr$   Úlistr
   Z	functionsr   )r   r   r   Úxr   r%   r   Ú#compute_native_function_declaration,   s    

ÿÿ
r,   )Útypingr   r   r   Ztorchgen.api.metaÚapir!   Ztorchgen.api.structuredr"   Ztorchgen.api.typesr   Ztorchgen.contextr   Ztorchgen.modelr   r   r	   Ztorchgen.utilsr
   Ústrr   r$   r,   r   r   r   r   Ú<module>   s   
 þ