o
    ,i@                     @   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.d ed!e&d"eee& ee& ee& ee& f fd#d$Z/d%ee& d&ee& d"ee& fd'd(Z0d)ee d"eee& ee& f fd*d+Z1d,ed"eee& ee& f fd-d.Z2i a3eee&e&e&f ee&e&f f e4d/< d,ed0e&d1e&d"ee&e&f fd2d3Z5d4e	eef d5ed"efd6d7Z6d5ed8ed"e&fd9d:Z7d;ed<eeef d=ed>eeef d"ee f
d?d@Z8d;ed<eeef d=ed>eeef d"ee& f
dAdBZ9d;ed"e&fdCdDZ:d;ed<eeef d=ed>eeef dEe!d"ee& fdFdGZ;edHdIG dJdK dKZ<	dPdLee d<eeef d=ed>eeef dEe!dMe&d"e&fdNdOZ=dS )Q    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)mapMaybeAtenTensorHandleint32_tint64_tdoublezconst char*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rP| jtv r,t| j g|gt| j gt| j r(t| j  d| dgfS |gfS | jtjkrGddg||d gdgd| d| dgfS td	t	|  t | t
rt| j|\}}}}d
}g }g }|D ]u}	|| d ||< |	dr|d|	 d |	tdd }
|d|
 d||  d||d   d |d7 }qg|	dkr|d |d||  d||d   d |d7 }qg|d|	 d |d|	 d||  d |d7 }qg||||fS t | trtt| j|\}}}}t|dksJ dt	|  d|d
  d|d
< |d |d
 }||d  |d
 }g }|dkr=| jd us/J |d| j d| d n*|dkrX|d| d | d!| d| d| d" n|d| d| d| d# d$d% |D }||||fS d S )&N()r   _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   _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/   V/home/ubuntu/SoloSpeech/.venv/lib/python3.10/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   DeviceNotImplementedErrorreprr   convert_arg_type_and_nameelem
startswithappendlenr   size)r!   r"   c_typesnames
aten_typescallsite_exprsjnew_aten_typesnew_callsite_exprs	aten_type	base_type_atyper/   r/   r2   r;   H   s   








"






"r;   typesrB   c                 C   s   dd t | |D S )Nc                 S   s   g | ]
\}}|d  | qS ) r/   )r0   r!   r"   r/   r/   r2   r3      s    z%zip_type_and_name.<locals>.<listcomp>)zip)rL   rB   r/   r/   r2   zip_type_and_name   s   rO   flat_argumentsc           	      C   sX   g }g }g }| D ]}t |j|j\}}}}|| || || qt|||fS N)r;   typer"   extendrO   )	rP   rL   	new_namesrD   arg	new_typesrB   rJ   rG   r/   r/   r2   gen_arguments   s   

rW   schemac              
   C   sR  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tdt
dt
fdd}d	}| j }d
D ]
}||v rUd} nqKg }	t | jD ]D\}}t|dkridnd| d}
t|jtswJ ||j|
}|r|	d||  d||  d| d q]|	d||  d| d q]t|||	fS )Nretr'   z"TODO: add support for return type r!   valr#   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   TensorSymIntScalar)r!   rZ   r/   r/   r2   convert_return   s   

z#gen_returns.<locals>.convert_returnF)#_scaled_dot_product_flash_attention'_scaled_dot_product_efficient_attentionconvolution_backwardTr,   
tmp_resultz	std::get<z>(tmp_result)zif (z) { *z = z; };)	enumeratereturnsr>   r4   rR   r   r"   r5   r9   r:   strunambiguous_namer?   rO   )rX   rL   rB   idxrY   r^   ret_pointer_can_be_nullrg   r"   rD   tmprvalr/   r/   r2   gen_returns   s4   

(rl   declaration_definition_cachedevicebackend_callc                 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_rJ   r$   r+   r%   zauto tmp_result = r    
z< {
    AOTI_TORCH_CONVERT_EXCEPTION_TO_ERROR_CODE({
        z(
z            z
        );z        z
    });
}
)r"   rg   rm   	is_out_fnrW   	argumentsoutflat_non_outflat_allinplacerl   rS   jointextwrapindent)rX   rn   ro   	func_nameargsrD   ret_assignmentsret_declarationsdeclarationrb   ret_assignments_str
definitionr/   r/   r2   gen_declaration_and_definition   s<   



r   sigfc                 C   sJ   t |j} tj|ddd}| jr|j r|j}n|j}|d us#J |S )NF)methodfallback_binding)	r	   from_schemafuncr   from_native_functionsymint
has_symintsymint_signature	signature)r   r   cpp_sigscpp_sigr/   r/   r2   *gen_static_dispatch_backend_call_signature  s   r   backend_indexc                 C   s0   t | j}t|| }d|j  d|  S )Nzat::z::)r	   r   r   r   dispatch_keylowerr"   )r   r   r   r   r/   r/   r2    gen_static_dispatch_backend_call.  s   
r   r   func_group_mappingr   backend_indicesc                 C   s   d }||  | s| jd ur#| j|v r#||  || j r#|| }|S |tj  | r2|tj }|S |tj  | rA|tj }|S |tj  | rN|tj }|S rQ   )
has_kernelstructured_delegater   CompositeExplicitAutograd&CompositeExplicitAutogradNonFunctionalCompositeImplicitAutogradr   r   r   r   r   r/   r/   r2   get_backend_index_for_aoti7  s.   




r   c                 C   s4   t | |||}|d u rd S d| j d|j  dS )Nz#include <ATen/ops/rJ   z_dispatch.h>)r   	root_namer   r   r   r/   r/   r2   get_header_for_aotiV  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)r   r"   overload_name	namespace)r   r/   r/   r2   get_fallback_op_namef  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 rc   )r   r   r   r   r   r9   )r   r   r   r   r   r   rX   rn   ro   r~   rJ   r   r/   r/   r2   
gen_c_shimn  s,   r   T)frozenc                   @   sX   e Zd ZU eeef ed< eed< eeef ed< e	ed< e
dedee fddZd	S )
ShimGeneratorr   r   r   r   r   r#   c                 C   s   t || j| j| j| j}|S rQ   )r   r   r   r   r   )selfr   resultr/   r/   r2   __call__  s   zShimGenerator.__call__N)__name__
__module____qualname__r   r   r   __annotations__r   r   r   r   r   r   rf   r   r/   r/   r/   r2   r     s   
 r   native_functionsincludesc           	   
   C   sf   d ttt||||| }| }d}|r d| d| dS d| d| dt| d| d| 
S )	Nrp   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;

)rw   listr   r   r   rf   )	r   r   r   r   r   r   bodyrn   warningr/   r/   r2   gen_aoti_c_shim  s:   
r   )r    )>rx   dataclassesr   typingr   r   r   r   r   r   torchgen.api.typesr	   torchgen.api.types.signaturesr
   r   torchgen.contextr   torchgen.modelr   r   r   r   r   r   r   r   r   r   r   r   torchgen.utilsr   r[   r   intr\   r]   floatrf   DeviceIndexLayoutMemoryFormat
ScalarType	Generatorr5   r6   r7   r;   rO   rW   rl   rm   r   r   r   r   r   r   r   r   r   r   r/   r/   r/   r2   <module>   s  
  82"b&"&/

,


	








"

