
    sg@                    *   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j:                  d
ej<                  dej>                  dej@                  dejB                  dejD                  dejF                  dejH                  dejJ                  dejL                  dejN                  dejP                  diZ)ej:                  dej<                  dej>                  dej@                  dejB                  dejD                  dejF                  dejH                  dejJ                  dejL                  dejN                  dejP                  diZ*ej:                  dej<                  dej>                  dej@                  dejB                  dejD                  dejF                  dejH                  dejJ                  dejL                  dejN                  dejP                  d iZ+d3d!Z,d4d"Z-d5d#Z.d6d$Z/i a0d%e1d&<   	 	 	 	 	 	 	 	 d7d'Z2	 	 	 	 	 	 d8d(Z3	 	 	 	 	 	 d9d)Z4	 	 	 	 	 	 	 	 	 	 d:d*Z5	 	 	 	 	 	 	 	 	 	 d;d+Z6d<d,Z7	 	 	 	 	 	 	 	 	 	 	 	 d=d-Z8 ed./       G d0 d1             Z9	 d>	 	 	 	 	 	 	 	 	 	 	 	 	 d?d2Z:y)@    )annotationsN)	dataclass)Sequence)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_pointerc                   t        | t              r| j                  t        v rZt        | j                     g|gt        | j                     gt
        | j                     rt
        | j                      d| dgfS |gfS | j                  t        j                  k(  rddg||dz   gdgd| d| dgfS t        d	t        |              t        | t              r	t        | j                  |      \  }}}}d
}g }g }|D ]  }	||   dz   ||<   |	j                  d      rM|j                  d|	 d       |	t        d      d }
|j                  d|
 d||    d||dz       d       |dz  }l|	dk(  r8|j                  d       |j                  d||    d||dz       d       |dz  }|j                  d|	 d       |j                  d|	 d||    d       |dz  } ||||fS t        | t               r
t        | j                  |      \  }}}}t        |      dk(  sJ dt        |       z          d|d
    d|d
<   |j                  d       |d
   }|j                  |dz          |d
   }g }|dk(  r1| j"                  J |j                  d| j"                   d| d       nB|dk(  r"|j                  d| d | d!| d| d| d"       n|j                  d| d| d| d#       |D cg c]  }d| d
 }}||||fS y c c}w )$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   *z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_))
isinstancer   name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)typr*   c_typesnames
aten_typescallsite_exprsjnew_aten_typesnew_callsite_exprs	aten_type	base_type_atypets                 K/var/www/html/venv/lib/python3.12/site-packages/torchgen/gen_aoti_c_shim.pyr1   r1   J   s   #x 88**$SXX./'12 2#((; 2#((;<AdV1E		 	 		 	 XX&I&ti'(?vEfgkflluv	  &(GS	{&STT	C	&5NHHd6
2
N # 	I c)GAJ##$45%%(81&EF%c*:&;bA	"))/	{"U1XJbqQRsTUV Qm+%%&DE"))1%(2eAaCj\K Q%%(81&EF"))*9+RazC Q/	4 	
 	
 
C	"(A#((D(Q%
A7|q W"KdSVi"WW  gaj\+
y!QxTG^$1F? 88'''!!$4SXXJba"HI33!!UG#3E7:LUGSUVZU[[]^b]cckl !!$4UG2dV2dV6"RS5?@qc+@
@	
 	
7 
#4 As   'K=c                X    t        | |      D cg c]  \  }}|dz   |z    c}}S c c}}w )N )zip)typesr9   r7   r*   s       rD   zip_type_and_namerI      s*    .1%.?@dC#I@@@s   &c                    g }g }g }| D ]Z  }t        |j                  |j                        \  }}}}|j                  |       |j                  |       |j                  |       \ t	        ||      |fS N)r1   typer*   extendrI   )	flat_argumentsrH   	new_namesr;   arg	new_typesr9   rA   r>   s	            rD   gen_argumentsrR      s    EIN 22KHHchh3
/	5!/ 	Y012 UI.>>    c           
     8   g }g }t        | j                        D ]  \  }}|j                  d|        t        |j                  t
              rL|j                  j                  t        v r0|j                  t        |j                  j                     dz          t        dt        |j                                dd}d}| j                  j                         }dD ]
  }||v sd} n g }	t        | j                        D ]  \  }}t        |      dk(  rd	nd
| d}
t        |j                  t
              sJ  ||j                  |
      }|r"|	j                  d||    d||    d| d       o|	j                  d||    d| d        t        ||      |	fS )Nretr"   z"TODO: add support for return type c                    | 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)r7   vals     rD   convert_returnz#gen_returns.<locals>.convert_return   s`    88v}}$1#c::XX&U-((XX&U+&&JrS   F)#_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; };)r7   r   rZ   strreturnrb   )	enumeratereturnsr4   r)   rL   r   r*   r+   r/   r0   unambiguous_namer5   rI   )schemarH   r9   idxrU   r[   ret_pointer_can_be_nullrf   r*   r;   tmprvals               rD   gen_returnsrl      s   EEfnn- Ss3%[!chh)chhmm?R.RLL,SXX]];cAB%4T#((^4DE  ${{335  ##&*# !#Nfnn- >S!%jAolYse=3Q#((H---chh,"!!DsF5:,c$t"TU!!AeCj\TF!"<=> UE*N::rS   z+dict[tuple[str, str, str], tuple[str, str]]declaration_definition_cachec                   | j                   j                         }|||ft        v rt        |||f   S | j                         r=t	        g | j
                  j                  | j
                  j                        \  }}g }net	        | j
                  j                        \  }}| j                   j                   j                  rg g fn
t        |       \  }}|j                  |       d| d| ddj                  |       d}|rdnd}	|rddj                  |      z   nd}
d| d	|	 | d
t        j                  dj                  |      d       dt        j                  |
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*   rf   rm   	is_out_fnrR   	argumentsoutflat_non_outflat_allinplacerl   rM   jointextwrapindent)rg   devicebackend_call	func_nameargsr;   ret_assignmentsret_declarationsdeclarationr`   ret_assignments_str
definitions               rD   gen_declaration_and_definitionr      s    ,,.I 	6<(,HH+Y,MNN  -Cf""CV%5%5%B%BC 
n &(,V-=-=-F-FGn ((00RHk&6I 	*/ 	$%.vha	{!DIIdOCTTUVK)8%bJ?N$?!;;TV 		\N #	>*N; < =??.
;
< =J 	G )V\!BC 
""rS   c                    t        j                  |j                        } t        j                  |dd      }| j
                  r'|j                  j                         r|j                  }n|j                  }|J |S )NF)methodfallback_binding)	r   from_schemafuncr   from_native_functionsymint
has_symintsymint_signature	signature)sigfcpp_sigscpp_sigs       rD   *gen_static_dispatch_backend_call_signaturer   !  sn     
)
)!&&
1C 55	%%H zzaff'')++$$NrS   c                    t        j                  | j                        }t        ||       }d|j                  j                          d|j                          S )Nzat::z::)r   r   r   r   dispatch_keylowerr*   )r   backend_indexr   r   s       rD    gen_static_dispatch_backend_callr   1  sN     
)
)!&&
1C8a@G-,,2245R7GHHrS   c                   d }||   j                  |       s;| j                  6| j                  |v r(||   j                  || j                           r||   }|S |t        j                     j                  |       r|t        j                     }|S |t        j                     j                  |       r|t        j                     }|S |t        j
                     j                  |       r|t        j
                     }|S rK   )
has_kernelstructured_delegater   CompositeExplicitAutograd&CompositeExplicitAutogradNonFunctionalCompositeImplicitAutogradr   func_group_mappingr   backend_indicesr   s        rD   get_backend_index_for_aotir   :  s    M|$//5  ,$$(::L)44t778
 (5  
>>	?	J	J4	P'(M(MN  
KK	L	W	W
 (>>
  
>>	?	J	J4	P'(M(MNrS   c                |    t        | |||      }|d S d| j                   d|j                  j                          dS )Nz#include <ATen/ops/rA   z_dispatch.h>)r   	root_namer   r   r   s        rD   get_header_for_aotir   Y  sY     / ,M
   	 #4>>"2!M4N4N4T4T4V3WWcdrS   c                B   | j                   j                  j                  rP| 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   s    rD   get_fallback_op_namer   i  s~     99>>'' >>
!DIINN//0$))..2N2N1OP q!4!4 5X>rS   c                    t        | |||      }|y | j                  }|j                         }t        | |      }	 |rt	        |||      \  }	}
d|	 dS t	        |||      \  }
}|S # t
        $ r Y y w xY w)NzAOTI_TORCH_EXPORT ra   )r   r   r   r   r   r/   )r   r   r   r   headerr   rg   ry   rz   r   rA   r   s               rD   
gen_c_shimr   q  s     / ,M YYF!F3L
;NK (}A66:66<XMAz s   A% A% %	A10A1T)frozenc                  P    e Zd ZU ded<   ded<   ded<   ded<   e	 	 	 	 dd	       Zy
)ShimGenerator(dict[OperatorName, NativeFunctionsGroup]r   r   r   dict[DispatchKey, BackendIndex]r   r   r   c                t    t        || j                  | j                  | j                  | j                        }|S rK   )r   r   r   r   r   )selfr   results      rD   __call__zShimGenerator.__call__  s:    
 ##  KK
 rS   N)r   r   rc   
str | None)__name__
__module____qualname____annotations__r	   r    rS   rD   r   r     s=    @@44L  
 !rS   r   c                    dj                  t        t        t        ||||      |                   }|j	                         }d}|r	d| d| dS d| d| dt        |       d| d| 
S )	Nro   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;

)rv   listr   r   r   rb   )	native_functionsr   r   r   r   includesbodyry   warnings	            rD   gen_aoti_c_shimr     s     99&ov !		
	D !FCG 	 

   	&	 
;;A( C L!" #
 

 
 #
 	
rS   )r7   r   r*   rb   rc   z1tuple[list[str], list[str], list[str], list[str]])rH   	list[str]r9   r   rc   r   )rN   zSequence[Argument]rc   tuple[list[str], list[str]])rg   r   rc   r   )rg   r   ry   rb   rz   rb   rc   ztuple[str, str])r   z"CppSignature | DispatcherSignaturer   r   rc   r   )r   r   r   r   rc   rb   )
r   r   r   r   r   r   r   r   rc   zBackendIndex | None)
r   r   r   r   r   r   r   r   rc   r   )r   r   rc   rb   )r   r   r   r   r   r   r   r   r   r   rc   r   )r   )r   zSequence[NativeFunction]r   r   r   r   r   r   r   r   r   rb   rc   rb   );
__future__r   rw   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   rW   r   intrX   rY   floatrb   DeviceIndexLayoutMemoryFormat
ScalarType	Generatorr+   r,   r-   r1   rI   rR   rl   rm   r   r   r   r   r   r   r   r   r   r   r   rS   rD   <module>r      s\   "  !  2 I 8    $ MM%
KK
JJ	
MM9
MM8
LL(
JJ
	
MM9

y
+   MM<
KK
JJ	
MM=
MM=
LL(
JJ"
*
MM=
,
(
o   MM5
KK
JJ
MM2
MM2
LL"
JJ
7
MM-
9
5
> "_
DA
?",;` MO I N)#)#$')#7:)#)#X	+  III 	I
@  5	
 >
@  5	
  
@  5	
  D $  6 =
.=
@=
 =
 5	=

 =
 =
 	=
rS   