o
    vZh^G                     @  s6  U d dl mZ d dlZd dlmZ d dl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rUd 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-	"dhdid*d+Z.djd/d0Z/dkd4d5Z0dld8d9Z1i a2d:e3d;< dmd?d@Z4dndFdGZ5dodJdKZ6dpdUdVZ7dqdXdYZ8drdZd[Z9dsd]d^Z:ed_d`G dadb dbZ;	dtdudfdgZ<dS )v    )annotationsN)	dataclass)TYPE_CHECKING)DispatcherSignature)CppSignatureCppSignatureGroup)method_with_native_function)ArgumentBackendIndexBaseTyBaseTypeDispatchKeyFunctionSchemaListTypeNativeFunctionNativeFunctionsGroupOperatorNameOptionalTypeType)mapMaybe)SequenceZAtenTensorHandleint32_tint64_tdoublezconst char*ZAtenGeneratorHandle
at::Tensorboolzc10::SymIntzc10::Scalarzc10::string_viewzc10::DeviceIndexzc10::Layoutzc10::MemoryFormatzc10::ScalarTypezat::GeneratorZresolve_tensor_dispatch_flags 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_pointerFtypr   namestris_writereturn1tuple[list[str], list[str], list[str], list[str]]c                 C  s|  t | tr`| jtv r<| jtjkr|rd| dg}nt| j r*t| j  d| dn|g}t| j g|gt| j g|fS | jtjkrWddg||d gdgd| d| d	gfS t	d
t
|  t | trt| j|\}}}}d}g }	g }
|D ]}|| d ||< |dr|	d| d |tdd }|
d| d||  d||d   d |d7 }qx|dkr|	d |
d||  d||d   d |d7 }qx|dkr|	d| d |
d||  d |d7 }qx|	d| d |
d| d||  d |d7 }qx|||	|
fS t | trt| j|\}}}}t|dks0J dt
|  d|d  d|d< |d |d }||d  |d }g }|dkrk| jd us]J |d | j d| d n<|dkr|s|d!| d| d" n'|d#kr|d$| d%| d&| d| d'	 n|d | d| d| d" d(d) |D }||||fS t	d*t
|  d+),Nz!*tensor_handle_to_tensor_pointer()(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(r   zresolve_tensor_dispatch_flags(zpointer_to_optional<z'ListType with unsupported element type zconst r   Z_len_r   zpointer_to_list<z#resolve_tensor_list_dispatch_flags(z_len_)z::std::optional<at::Tensor>z
c10::List<z>(c10::ArrayRef<z%>(resolve_tensor_list_dispatch_flags(z_len_)))c                 S  s   g | ]}d | dqS )r&   r'    ).0tr,   r,   G/var/www/auris/lib/python3.10/site-packages/torchgen/gen_aoti_c_shim.py
<listcomp>   s    z-convert_arg_type_and_name.<locals>.<listcomp>zArgument type z not supported!)
isinstancer   r   base_type_to_c_typer   Tensorbase_type_to_callsite_exprbase_type_to_aten_typeZDeviceNotImplementedErrorreprr   convert_arg_type_and_nameelem
startswithappendlenr   size)r   r   r    Zcallsite_exprZc_typesnamesZ
aten_typescallsite_exprsjZnew_aten_typesnew_callsite_exprsZ	aten_typeZ	base_type_Zatyper,   r,   r/   r8   N   s   






"







r8   types	list[str]r>   c                 C  s   dd t | |D S )Nc                 S  s   g | ]
\}}|d  | qS ) r,   )r-   r   r   r,   r,   r/   r0      s    z%zip_type_and_name.<locals>.<listcomp>)zip)rC   r>   r,   r,   r/   zip_type_and_name   s   rG   flat_argumentsSequence[Argument]tuple[list[str], list[str]]c           	      C  s\   g }g }g }| D ]}t |j|j|j\}}}}|| || || qt|||fS N)r8   typer   r    extendrG   )	rH   rC   Z	new_namesr?   argZ	new_typesr>   rB   rA   r,   r,   r/   gen_arguments   s   

rO   schemar   c              
   C  sF  g }g }t | jD ]-\}}|d|  t|jtr-|jjtv r-|t|jj d  q	tdt	|j dd	d
}d}| j
 }dD ]
}||v rOd} nqEg }	t | jD ]D\}}t|dkrcdnd| d}
t|jtsqJ ||j|
}|r|	d||  d||  d| d qW|	d||  d| d qWt|||	fS )Nretr%   z"TODO: add support for return type r   r   valr   r!   c                 S  sH   | j tjkrd| dS | j tjkr| dS | j tjkr"| dS |S )Nznew_tensor_handle(std::move(z));z.expect_int()z.toDouble())r   r   r3   SymIntScalar)r   rR   r,   r,   r/   convert_return   s   

z#gen_returns.<locals>.convert_returnF)Z#_scaled_dot_product_flash_attentionZ'_scaled_dot_product_efficient_attentionZ#_scaled_dot_product_cudnn_attentionZ0_scaled_dot_product_fused_attention_overrideableZconvolution_backwardTr*   
tmp_resultz	std::get<z>(tmp_result)zif (z) { *z = z; };)r   r   rR   r   r!   r   )	enumeratereturnsr;   r1   rL   r   r   r2   r6   r7   unambiguous_namer<   rG   )rP   rC   r>   idxrQ   rU   Zret_pointer_can_be_nullrZ   r   r?   tmprvalr,   r,   r/   gen_returns   s4   


(r^   z+dict[tuple[str, str, str], tuple[str, str]]declaration_definition_cachedevicebackend_calltuple[str, str]c                 C  s  | j  }|||ftv rt|||f S |  r(tg | jj| jj\}}g }nt| jj\}}| j j j	r9g g fnt
| \}}|| d| d| dd| d}|rWdnd}	|rbdd| nd}
d| d	|	 | d
td|d dt|
d d
}||ft|||f< ||fS )NzAOTITorchError aoti_torch_rB   r$   r)   r#   zauto tmp_result = r   
z< {
    AOTI_TORCH_CONVERT_EXCEPTION_TO_ERROR_CODE({
        z(
z            z
        );z        z
    });
}
)r   rZ   r_   Z	is_out_fnrO   	argumentsoutZflat_non_outZflat_allZinplacer^   rM   jointextwrapindent)rP   r`   ra   	func_nameargsr?   Zret_assignmentsZret_declarationsdeclarationrV   Zret_assignments_str
definitionr,   r,   r/   gen_declaration_and_definition  s<   



rm   sig"CppSignature | DispatcherSignaturefr   r   c                 C  sJ   t |j} tj|ddd}| jr|j r|j}n|j}|d us#J |S )NF)methodZfallback_binding)	r   from_schemafuncr   Zfrom_native_functionZsymintZ
has_symintZsymint_signature	signature)rn   rp   Zcpp_sigscpp_sigr,   r,   r/   *gen_static_dispatch_backend_call_signature;  s   rv   backend_indexr
   c                 C  s0   t | j}t|| }d|j  d|  S )Nzat::z::)r   rr   rs   rv   dispatch_keylowerr   )rp   rw   rn   ru   r,   r,   r/    gen_static_dispatch_backend_callK  s   
rz   rs   func_group_mapping(dict[OperatorName, NativeFunctionsGroup]rx   r   backend_indicesdict[DispatchKey, BackendIndex]extend_aoti_c_shimBackendIndex | Nonec                 C  s   d }||  | s| jd ur#| j|v r#||  || j r#|| }|S |r'|S |tj  | r6|tj }|S |tj  | rE|tj }|S |tj  | rR|tj }|S rK   )Z
has_kernelZstructured_delegater   ZCompositeExplicitAutogradZ&CompositeExplicitAutogradNonFunctionalZCompositeImplicitAutogradrs   r{   rx   r}   r   rw   r,   r,   r/   get_backend_index_for_aotiT  s6   



r   
str | Nonec                 C  s6   t | ||||}|d u rd S d| j d|j  dS )Nz#include <ATen/ops/rB   z_dispatch.h>)r   Z	root_namerx   ry   r   r,   r,   r/   get_header_for_aotiz  s   
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)rs   r   Zoverload_name	namespace)rs   r,   r,   r/   get_fallback_op_name  s
   "r   headerc                 C  s   t | ||||}|d u rd S | j}| }t| |}	z|r,t|||	\}
}d|
 dW S t|||	\}}|W S  ty@   Y d S w )NzAOTI_TORCH_EXPORT rW   )r   rs   ry   rz   rm   r6   )rs   r{   rx   r}   r   r   rw   rP   r`   ra   rk   rB   rl   r,   r,   r/   
gen_c_shim  s,   
r   T)frozenc                   @  sD   e Zd ZU ded< ded< ded< ded< ded	< edddZdS )ShimGeneratorr|   r{   r   rx   r~   r}   r   r   r   rs   r   r!   r   c                 C  s    t || j| j| j| j| j}|S rK   )r   r{   rx   r}   r   r   )selfrs   resultr,   r,   r/   __call__  s   zShimGenerator.__call__N)rs   r   r!   r   )__name__
__module____qualname____annotations__r   r   r,   r,   r,   r/   r     s   
 r   native_functionsSequence[NativeFunction]includesc           
      C  sv   d ttt|||||| }| }d}	|r!d|	 d| dS d|	 d|r)dnd d| d	t| d
| d| S )Nrc   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
z5

#include <torch/csrc/inductor/aoti_torch/generated/zextend/r   Z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;

)rf   listr   r   ry   r   )
r   r{   rx   r}   r   r   r   bodyr`   warningr,   r,   r/   gen_aoti_c_shim  sF   	
r   )F)r   r   r   r   r    r   r!   r"   )rC   rD   r>   rD   r!   rD   )rH   rI   r!   rJ   )rP   r   r!   rJ   )rP   r   r`   r   ra   r   r!   rb   )rn   ro   rp   r   r!   r   )rp   r   rw   r
   r!   r   )rs   r   r{   r|   rx   r   r}   r~   r   r   r!   r   )rs   r   r{   r|   rx   r   r}   r~   r   r   r!   r   )rs   r   r!   r   )rs   r   r{   r|   rx   r   r}   r~   r   r   r   r   r!   r   )r   )r   r   r{   r|   rx   r   r}   r~   r   r   r   r   r   r   r!   r   )=
__future__r   rg   dataclassesr   typingr   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   collections.abcr   r3   r   intrS   rT   floatr   ZDeviceIndexZLayoutZMemoryFormatZ
ScalarType	Generatorr2   r5   r4   r8   rG   rO   r^   r_   r   rm   rv   rz   r   r   r   r   r   r   r,   r,   r,   r/   <module>   s    8
w

1

,

	
&

#