U
    Mh@                     @   s`  U d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
mZ d dlmZ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mZ d dlmZ ej d	ej!d
ej"dej#dej$dej%dej&dej'd
ej(d
ej)d
ej*d
ej+diZ,ej dej!dej"dej#dej$dej%dej&dej'dej(dej)dej*dej+diZ-ej dej!dej"dej#dej$dej%dej&dej'dej(dej)dej*dej+diZ.ee&eee& ee& ee& ee& f d d!d"Z/ee& ee& ee& d#d$d%Z0ee eee& ee& f d&d'd(Z1eeee& ee& f d)d*d+Z2i a3eee&e&e&f ee&e&f f e4d,< ee&e&ee&e&f d-d.d/Z5e	eef eed0d1d2Z6eee&d3d4d5Z7eeeef eeeef ee d6d7d8Z8eeeef eeeef ee& d6d9d:Z9ee&d;d<d=Z:eeeef eeeef e!ee& d>d?d@Z;edAdBG dCdD dDZ<dHee eeef eeeef e!e&e&dEdFdGZ=dS )I    N)	dataclass)DictListOptionalSequenceTupleUnion)DispatcherSignature)CppSignatureCppSignatureGroup)method_with_native_function)ArgumentBackendIndexBaseTyBaseTypeDispatchKeyFunctionSchemaListTypeNativeFunctionNativeFunctionsGroupOperatorNameOptionalTypeType)mapMaybeZAtenTensorHandleint32_tint64_tdoublezconst char*ZAtenGeneratorHandlez
at::Tensorboolzc10::SymIntzc10::Scalarzc10::string_viewzc10::DeviceIndexzc10::Layoutzc10::MemoryFormatzc10::ScalarTypezat::Generatorz *tensor_handle_to_tensor_pointer zstatic_cast<c10::DeviceIndex>zstatic_cast<c10::Layout>zstatic_cast<c10::MemoryFormat>zstatic_cast<c10::ScalarType>z&*generator_handle_to_generator_pointer)typnamereturnc                 C   s  t | tr| jtkrTt| j g|gt| j gt| j rLt| j  d| dn|gfS | jtjkrddg||d gdgd| d| dgfS td	t	|  nNt | t
rt| j|\}}}}d
}g }g }|D ]}	|| d ||< |	drF|d|	 d |	tdd }
|d|
 d||  d||d   d |d7 }q|	dkr|d |d||  d||d   d |d7 }q|d|	 d |d|	 d||  d |d7 }q||||fS t | trt| j|\}}}}t|dks
tdt	|  d|d
  d|d
< |d |d
 }||d  |d
 }g }|dkr| jd k	sdt|d| j d| d nT|dkr|d| d | d!| d| d| d" n|d| d| d| d# d$d% |D }||||fS d S )&N()r   Z_index_zc10::Devicez)c10::Device(static_cast<c10::DeviceType>(z!), static_cast<c10::DeviceIndex>(z	_index_))zTODO: add support for arg type r   *c10::ArrayRef<z::std::optional<>zpointer_to_optional_list<z>(,       z::std::optional<c10::Device>zpointer_to_optional_device(zpointer_to_optional<z'ListType with unsupported element type zconst r   Z_len_r   zpointer_to_list<z::std::optional<at::Tensor>z
c10::List<z>(c10::ArrayRef<z>(pointer_to_list<z_len_)))z_len_)c                 S   s   g | ]}d | dqS )r%   r&    ).0tr+   r+   J/var/www/html/venv/lib/python3.8/site-packages/torchgen/gen_aoti_c_shim.py
<listcomp>   s     z-convert_arg_type_and_name.<locals>.<listcomp>)
isinstancer   r    base_type_to_c_typebase_type_to_aten_typebase_type_to_callsite_exprr   ZDeviceNotImplementedErrorreprr   convert_arg_type_and_nameelem
startswithappendlenr   AssertionErrorsize)r   r    Zc_typesnamesZ
aten_typescallsite_exprsjZnew_aten_typesnew_callsite_exprsZ	aten_typeZ	base_type_Zatyper+   r+   r.   r6   H   s    






 "







"r6   )typesr=   r!   c                 C   s   dd t | |D S )Nc                 S   s   g | ]\}}|d  | qS ) r+   )r,   r   r    r+   r+   r.   r/      s     z%zip_type_and_name.<locals>.<listcomp>)zip)rB   r=   r+   r+   r.   zip_type_and_name   s    rE   )flat_argumentsr!   c           	      C   sX   g }g }g }| D ]8}t |j|j\}}}}|| || || qt|||fS N)r6   typer    extendrE   )	rF   rB   Z	new_namesr>   argZ	new_typesr=   rA   r@   r+   r+   r.   gen_arguments   s     

rK   )schemar!   c              
   C   sR  g }g }t | jD ]\\}}|d|  t|jtrZ|jjtkrZ|t|jj d  qtdt	|j qtt
t
ddd}d}| j }dD ]}||krd	} qqg }	t | jD ]\}}t|d
krdn
d| d}
t|jtst||j|
}|r&|	d||  d||  d| d q|	d||  d| d qt|||	fS )Nretr$   z"TODO: add support for return type )r   valr!   c                 S   sL   | j tjkrd| dS | j tjkr.| dS | j tjkrD| dS |S d S )Nznew_tensor_handle(std::move(z));z.expect_int()z.toDouble())r    r   TensorSymIntScalar)r   rN   r+   r+   r.   convert_return   s    

z#gen_returns.<locals>.convert_returnF)Z#_scaled_dot_product_flash_attentionZ'_scaled_dot_product_efficient_attentionZconvolution_backwardTr)   
tmp_resultz	std::get<z>(tmp_result)zif (z) { *z = z; };)	enumerateZreturnsr9   r0   rH   r   r    r1   r4   r5   strunambiguous_namer:   r;   rE   )rL   rB   r=   idxrM   rR   Zret_pointer_can_be_nullrW   r    r>   tmprvalr+   r+   r.   gen_returns   s2    

(r[   declaration_definition_cache)rL   devicebackend_callr!   c                 C   s  | j  }|||ftkr&t|||f S |  rLt| jj| jj\}}g }n8t| jj\}}| j j j	rng g fnt
| \}}|| d| d| dd| d}|rdnd}	|rdd| nd}
d| d	|	 | d
td|d dt|
d d
}||ft|||f< ||fS )NzAOTITorchError aoti_torch_rA   r"   r(   r#   zauto tmp_result = r   
z< {
    AOTI_TORCH_CONVERT_EXCEPTION_TO_ERROR_CODE({
        z(
z            z
        );z        z
    });
}
)r    rW   r\   Z	is_out_fnrK   	argumentsoutZflat_non_outZflat_allZinplacer[   rI   jointextwrapindent)rL   r]   r^   	func_nameargsr>   Zret_assignmentsZret_declarationsdeclarationrS   Zret_assignments_str
definitionr+   r+   r.   gen_declaration_and_definition   s<    



ri   )sigfr!   c                 C   sJ   t |j} tj|ddd}| jr4|j r4|j}n|j}|d k	sFt	|S )NF)methodZfallback_binding)
r	   from_schemafuncr   Zfrom_native_functionZsymintZ
has_symintZsymint_signature	signaturer;   )rj   rk   Zcpp_sigscpp_sigr+   r+   r.   *gen_static_dispatch_backend_call_signature  s      rq   )rk   backend_indexr!   c                 C   s0   t | j}t|| }d|j  d|  S )Nzat::z::)r	   rm   rn   rq   dispatch_keylowerr    )rk   rr   rj   rp   r+   r+   r.    gen_static_dispatch_backend_call.  s    
ru   )rn   func_group_mappingrs   backend_indicesr!   c                 C   s   d }||  | s:| jd k	rD| j|krD||  || j rD|| }nR|tj  | r`|tj }n6|tj  | r||tj }n|tj  | r|tj }|S rG   )Z
has_kernelZstructured_delegater   ZCompositeExplicitAutogradZ&CompositeExplicitAutogradNonFunctionalZCompositeImplicitAutogradrn   rv   rs   rw   rr   r+   r+   r.   get_backend_index_for_aoti7  s,    


ry   c                 C   s4   t | |||}|d krd S d| j d|j  dS )Nz#include <ATen/ops/rA   z_dispatch.h>)ry   Z	root_namers   rt   rx   r+   r+   r.   get_header_for_aotiV  s       rz   rn   r!   c                 C   sD   | j jjr,| j d| j jj d| j jj S | j d| j jj dS )N.z.default)rn   r    Zoverload_name	namespace)rn   r+   r+   r.   get_fallback_op_namef  s    $r~   )rn   rv   rs   rw   headerr!   c                 C   s   t | |||}|d krd S | j}| }t| |}z<|rVt|||\}	}
d|	 dW S t|||\}
}|W S W n tk
r   Y d S X d S )NzAOTI_TORCH_EXPORT rT   )ry   rn   rt   ru   ri   r4   )rn   rv   rs   rw   r   rr   rL   r]   r^   rg   rA   rh   r+   r+   r.   
gen_c_shimn  s4         
r   T)frozenc                   @   sV   e Zd ZU eeef ed< eed< eeef ed< e	ed< e
eee dddZdS )	ShimGeneratorrv   rs   rw   r   r{   c                 C   s   t || j| j| j| j}|S rG   )r   rv   rs   rw   r   )selfrn   resultr+   r+   r.   __call__  s    zShimGenerator.__call__N)__name__
__module____qualname__r   r   r   __annotations__r   r   r   r   r   r   rV   r   r+   r+   r+   r.   r     s   
r   )native_functionsrv   rs   rw   r   includesr!   c           	   
   C   sj   d ttt||||| }| }d}|r@d| d| dS d| d| dt| d| d| 
S d S )	Nr_   z
// WARNING: THIS FILE IS AUTOGENERATED BY torchgen. DO NOT MODIFY BY HAND.
// See https://github.com/pytorch/pytorch/blob/7e86a7c0155295539996e0cf422883571126073e/torchgen/gen.py#L2424-L2436 for detailszl

#pragma once

#include <torch/csrc/inductor/aoti_torch/c/shim.h>

#ifdef __cplusplus
extern "C" {
#endif

z,

#ifdef __cplusplus
} // extern "C"
#endif
z<

#include <torch/csrc/inductor/aoti_torch/generated/c_shim_zf.h>
#include <torch/csrc/inductor/aoti_torch/utils.h>

#ifndef AT_PER_OPERATOR_HEADERS
#include <ATen/zFunctions.h>
#include <ATen/CompositeExplicitAutogradFunctions.h>
#include <ATen/CompositeExplicitAutogradNonFunctionalFunctions.h>
#include <ATen/CompositeImplicitAutogradFunctions.h>
#else
z/
#endif

using namespace torch::aot_inductor;

)rb   listr   r   rt   rV   )	r   rv   rs   rw   r   r   bodyr]   warningr+   r+   r.   gen_aoti_c_shim  s@       
r   )r   )>rc   dataclassesr   typingr   r   r   r   r   r   Ztorchgen.api.typesr	   Ztorchgen.api.types.signaturesr
   r   Ztorchgen.contextr   Ztorchgen.modelr   r   r   r   r   r   r   r   r   r   r   r   Ztorchgen.utilsr   rO   r   intrP   rQ   floatrV   ZDeviceIndexZLayoutZMemoryFormatZ
ScalarType	Generatorr1   r2   r3   r6   rE   rK   r[   r\   r   ri   rq   ru   ry   rz   r~   r   r   r   r+   r+   r+   r.   <module>   s
    8                                    .b$ /&  
-



 

	

" 

