o
    闦iC                     @  s2  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-dfd(d)Z.dgd-d.Z/dhd2d3Z0did6d7Z1i a2d8e3d9< djd=d>Z4dkdDdEZ5dldHdIZ6dmdSdTZ7dndVdWZ8dodXdYZ9dpd[d\Z:ed]d^G d_d` d`Z;	dqdrdddeZ<dS )s    )annotationsN)	dataclass)TYPE_CHECKING)DispatcherSignature)CppSignatureCppSignatureGroup)method_with_native_function)ArgumentBackendIndexBaseTyBaseTypeDispatchKeyFunctionSchemaListTypeNativeFunctionNativeFunctionsGroupOperatorNameOptionalTypeType)mapMaybe)Sequence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typr   namestrreturn1tuple[list[str], list[str], list[str], list[str]]c                 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/transcripts/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.   r1   r:   N   s   








"






"r:   types	list[str]rA   c                 C  s   dd t | |D S )Nc                 S  s   g | ]
\}}|d  | qS ) r.   )r/   r   r   r.   r.   r1   r2      s    z%zip_type_and_name.<locals>.<listcomp>)zip)rK   rA   r.   r.   r1   zip_type_and_name   s   rO   flat_argumentsSequence[Argument]tuple[list[str], list[str]]c           	      C  sX   g }g }g }| D ]}t |j|j\}}}}|| || || qt|||fS N)r:   typer   extendrO   )	rP   rK   	new_namesrC   arg	new_typesrA   rI   rF   r.   r.   r1   gen_arguments   s   

rY   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   TensorSymIntScalar)r   r\   r.   r.   r1   convert_return   s   

z#gen_returns.<locals>.convert_returnF)#_scaled_dot_product_flash_attention'_scaled_dot_product_efficient_attention#_scaled_dot_product_cudnn_attentionconvolution_backwardTr+   
tmp_resultz	std::get<z>(tmp_result)zif (z) { *z = z; };)r   r   r\   r    r!   r    )	enumeratereturnsr=   r3   rT   r   r   r4   r8   r9   unambiguous_namer>   rO   )rZ   rK   rA   idxr[   r`   ret_pointer_can_be_nullri   r   rC   tmprvalr.   r.   r1   gen_returns   s4   


(rn   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_rI   r#   r*   r$   zauto tmp_result = r   
z< {
    AOTI_TORCH_CONVERT_EXCEPTION_TO_ERROR_CODE({
        z(
z            z
        );z        z
    });
}
)r   ri   ro   	is_out_fnrY   	argumentsoutflat_non_outflat_allinplacern   rU   jointextwrapindent)rZ   rp   rq   	func_nameargsrC   ret_assignmentsret_declarationsdeclarationre   ret_assignments_str
definitionr.   r.   r1   gen_declaration_and_definition   s<   



r   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)methodfallback_binding)	r   from_schemafuncr   from_native_functionsymint
has_symintsymint_signature	signature)r   r   cpp_sigscpp_sigr.   r.   r1   *gen_static_dispatch_backend_call_signature(  s   r   backend_indexr
   c                 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.   r1    gen_static_dispatch_backend_call8  s   
r   r   func_group_mapping(dict[OperatorName, NativeFunctionsGroup]r   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 rS   )
has_kernelstructured_delegater   CompositeExplicitAutograd&CompositeExplicitAutogradNonFunctionalCompositeImplicitAutogradr   r   r   r   r   r   r.   r.   r1   get_backend_index_for_aotiA  s6   



r   
str | Nonec                 C  s6   t | ||||}|d u rd S d| j d|j  dS )Nz#include <ATen/ops/rI   z_dispatch.h>)r   	root_namer   r   r   r.   r.   r1   get_header_for_aotig  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.   r1   get_fallback_op_namex  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 rf   )r   r   r   r   r   r8   )r   r   r   r   r   r   r   rZ   rp   rq   r   rI   r   r.   r.   r1   
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   r   r   r   r   r   r   r   r   r!   r   c                 C  s    t || j| j| j| j| j}|S rS   )r   r   r   r   r   r   )selfr   resultr.   r.   r1   __call__  s   zShimGenerator.__call__N)r   r   r!   r   )__name__
__module____qualname____annotations__r   r   r.   r.   r.   r1   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 )Nrs   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   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;

)rz   listr   r   r   r    )
r   r   r   r   r   r   r   bodyrp   warningr.   r.   r1   gen_aoti_c_shim  sF   	
r   )r   r   r   r    r!   r"   )rK   rL   rA   rL   r!   rL   )rP   rQ   r!   rR   )rZ   r   r!   rR   )rZ   r   rp   r    rq   r    r!   rr   )r   r   r   r   r!   r   )r   r   r   r
   r!   r    )r   r   r   r   r   r   r   r   r   r   r!   r   )r   r   r   r   r   r   r   r   r   r   r!   r   )r   r   r!   r    )r   r   r   r   r   r   r   r   r   r   r   r   r!   r   )r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r    )=
__future__r   r{   dataclassesr   typingr   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   collections.abcr   r]   r   intr^   r_   floatr    DeviceIndexLayoutMemoryFormat
ScalarType	Generatorr4   r5   r6   r:   rO   rY   rn   ro   r   r   r   r   r   r   r   r   r   r   r.   r.   r.   r1   <module>   s    8

e

0

,

	
&

#