
    `i0                       d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dl	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mZmZ d dlmZ d dlmZ d d	lm Z m!Z!m"Z" d d
l#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z,m-Z- d dl.m/Z/ ddl0m1Z1 ddl2m3Z3 erd dl4m5Z5m6Z6 g dZ7d e7D             Z8g dZ9edjd            Z:dkdZ;dldZ<djd Z=djd!Z>djd"Z?djd#Z@djd$ZAdjd%ZBdjd&ZCdjd'ZDd(d)dmd1ZEdnd6ZFd(d)dod=ZGdpd>ZHdpd?ZId(d)dqdBZJdCdCdDdrdIZKdsdKZLedtdL            ZMdudNZNdvdPZOdwdRZP edS          ZQ edT          ZR edU          ZS edV          ZTd(d)dxdWZUdydYZV edZ          ZWd(d)dzd_ZXd{daZYd|dbZZd(d)d}ddZ[d(d)d~dfZ\d(d)ddiZ]dS )    )annotationsN)defaultdict)CallableTYPE_CHECKING)cpp)arg_parser_output_exprscpp_dispatch_exprscpp_dispatch_targetdispatch_lambda_argsdispatch_lambda_exprsdispatch_lambda_return_strhas_tensor_optionsPythonSignaturePythonSignatureDeprecatedPythonSignatureGroup!PythonSignatureNativeFunctionPair	signaturesignature_from_schemastructseq_fieldnames)CodeTemplatewith_native_function)
cpp_stringparse_native_yamlparse_tags_yaml)ArgumentBaseOperatorNameFunctionSchemaNativeFunction
SchemaKindTypeVariant)FileManagersplit_name_params)
YamlLoader   )is_tensor_list_type)should_trace)IterableSequence)Talias
contiguousis_cuda	is_sparseis_sparse_csrsizestridesym_is_contiguoussym_size
sym_stridesym_storage_offset	sym_numelz.*_backwardz#.*_backward_(out|input|weight|bias)z
.*_forwardz.*_forward_outz.*_jvp_unsafe_viewtensorz2_?sparse_(coo|compressed|csr|csc|bsr|bsc)_tensor.*z_range.*_sparse_add_outz_sparse_div.*z_sparse_mul.*z_sparse_sub.*_sparse_dense_add_outindex	index_outunique_dim_consecutivez	_cumsum.*z
_cumprod.*z_sum.*z_prod.*z_th_.*z_thnn_.*zrange.*z_solve.*z
_inverse.*z_cholesky.*z_triangular_solve.*z_qr.*z_svd.*sliceitem_local_scalar_denseto_to_copy_to_copy_out_reshape_copy_reshape_copy_outcopy_sparse_to_sparse_copy__foreach_copynumpy_Tmatrix_HmTmHznonzero(_(out|numpy))?set_dataz.*_overrideabledatais_leaf	output_nr_versionrequires_grad_retains_gradset_
_fw_primal)fake_quantize_per_tensor_affine_cachemask*fake_quantize_per_channel_affine_cachemask!_new_zeros_with_same_feature_meta_has_same_storage_numel_reshape_aliasreplace_copyzfill.Tensorzfill.Scalarzlift.*normal_functionalnbytesitemsize_batch_norm_with_update_batch_norm_with_update_out_batch_norm_no_updatec                >    g | ]}t          j        d | d          S )^$)recompile).0patterns     /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchgen/packaged/autograd/gen_python_functions.py
<listcomp>rk      s7       $+BJG      )z?add.Scalar(Tensor self, Scalar other, Scalar alpha=1) -> TensorzHadd_.Scalar(Tensor(a!) self, Scalar other, Scalar alpha=1) -> Tensor(a!)z?sub.Scalar(Tensor self, Scalar other, Scalar alpha=1) -> TensorzHsub_.Scalar(Tensor(a!) self, Scalar other, Scalar alpha=1) -> Tensor(a!)z/mul.Scalar(Tensor self, Scalar other) -> Tensorz8mul_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)z/div.Scalar(Tensor self, Scalar other) -> Tensorz8div_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)fr   returnboolc                    d| j         v rd| j         vrdS t          j        | j                  }t          D ]}|                    |          r dS t          | j                  }t          D ]}||k    r dS dS )N	generated	view_copyFT)tagsr   namefuncSKIP_PYTHON_BINDINGSmatchstrSKIP_PYTHON_BINDINGS_SIGNATURES)rm   rt   
skip_regexr   ri   s        rj   should_generate_py_bindingr{      s     afAF!:!:u8AFD*  
D!! 	55	 AFI2  i55  4rl   rt   r   rx   c                    d|  S )NTHPVariable_ rt   s    rj   get_pycnamer      s     $   rl   	overloads+Sequence[PythonSignatureNativeFunctionPair]c                n    t          |           dk    o"| d         j                                        dk    S )Nr&   r   )lenr   arguments_count)r   s    rj   is_noargr      s0    y>>QP9Q<#9#I#I#K#Kq#PPrl   c                :    | j         d u ot          j        | j        v S N)python_moduler"   methodvariantsrm   s    rj   is_py_variable_methodr      s    ?d"Cw~'CCrl   c                :    | j         d u ot          j        | j        v S r   )r   r"   functionr   r   s    rj   is_py_torch_functionr      s    ?d"Ew'71:'EErl   c                    | j         dk    S )Nnnr   r   s    rj   is_py_nn_functionr      s    ?d""rl   c                    | j         dk    S )Nfftr   r   s    rj   is_py_fft_functionr      s    ?e##rl   c                    | j         dk    S )Nlinalgr   r   s    rj   is_py_linalg_functionr          ?h&&rl   c                    | j         dk    S )Nnestedr   r   s    rj   is_py_nested_functionr      r   rl   c                    | j         dk    S )Nsparser   r   s    rj   is_py_sparse_functionr      r   rl   c                    | j         dk    S )Nspecialr   r   s    rj   is_py_special_functionr      s    ?i''rl   Tsymintoutnative_yaml_pathtags_yaml_pathdeprecated_yaml_pathtemplate_pathr   Nonec          
     4   t          | |d          }t          ||          j        }t          t	          t
          |                    }t          ||d          }t          ||t          d dd|           t          ||d          }	t          ||	t          dddd	|
           t          ||	t          ddd|           t          ||	t          ddd|           t          ||	t          ddd|           t          ||	t          ddd           t          ||	t          ddd|           t          ||	t           ddd|           t#          ||	d d           t%          ||	d d           t'          |          dfd}
|                    d|
           d S ) NF)install_dirtemplate_dirdry_runTr   zpython_variable_methods.cppr   r   torchzpython_torch_functions.cpp   )r   
num_shardsr   torch.nnzpython_nn_functions.cpp	torch.fftzpython_fft_functions.cpptorch.linalgzpython_linalg_functions.cpptorch.nestedzpython_nested_functions.cpptorch.sparsezpython_sparse_functions.cpptorch.specialzpython_special_functions.cppc                    dS NTr~   fns    rj   <lambda>zgen.<locals>.<lambda>r      $ rl   zpython_return_types.cppc                    dS r   r~   r   s    rj   r   zgen.<locals>.<lambda>u  r   rl   zpython_return_types.hrn   dict[str, str]c                 `    dd                     d t                     D                       iS )Nenum_of_valid_tags c                     g | ]}d | d| dS )z	
.value("z", at::Tag::)r~   )rh   tags     rj   rk   z.gen.<locals>.gen_tags_enum.<locals>.<listcomp>~  s,    XXXc9#993999XXXrl   )joinsorted)
valid_tagss   rj   gen_tags_enumzgen.<locals>.gen_tags_enumz  s:     XXVJEWEWXXX 
 	
rl   zpython_enum_tag.cpp)rn   r   )r#   r   native_functionslistfilterr{   load_signaturescreate_python_bindingsr   create_python_bindings_shardedr   r   r   r   r   r   r   "create_python_return_type_bindings)create_python_return_type_bindings_headerr   write)r   r   r   r   r   r   fmr   methods	functionsr   r   s              @rj   genr   
  ss    
=%	P	P	PB(.   F#=?OPPQQ.0DTRRRG
%      02FuUUUI"
$	 	 	 	 
!    
"    
%    
%    
%    
&    '
I(A   .
I(?   !00J
 
 
 
 
 
 HH"M22222rl   pairspred Callable[[NativeFunction], bool]?dict[BaseOperatorName, list[PythonSignatureNativeFunctionPair]]c                    t          t                    }| D ]A} ||j                  r/||j        j        j        j                                     |           B|S r   )r   r   r   ru   rt   append)r   r   groupedpairs       rj   group_filter_overloadsr     sc    
 	D   ? ?4 	?DM&+0188>>>Nrl   r   r#   module
str | Nonefilenamer   c          
        
 g g 
g g t          ||          }t          |                                t                    D ]}||         }	                    t          |||	||                                         t          |||	|                                         t          ||	|                     
                    d|j	         d            
                     
fd           dS )+Generates Python bindings to ATen functionskeyr   r   #include <ATen/ops/.h>c                 J    dd                                  d  z   dS )N@generated from /)generated_commentops_headerspy_forwards
py_methodspy_method_defstemplate_dir_for_comments)r   r   r   r   r   r   s   rj   r   z(create_python_bindings.<locals>.<lambda>  sC    !$K < < > >KKKK"L&&$,
 
 rl   N)r   r   keysrx   r   method_impl
method_defextendforward_declsbasewrite_with_template)r   r   r   r   r   r   r   r   rt   r   r   r   r   r   s   `   `     @@@@rj   r   r     sN    JK "NK$UD11Gw||~~3/// A ADM	fivNNN	
 	
 	
 	jvyPPPQQQ=yHHHIII????@@@@	
 	
 	
 	
 	
 	
 	
 	
 	
    rl   c                   	
 g 	g 
t          ||          }t          |                                t                    D ]t}||         }t	          |          \  }}	                    |sdnd                    |                     
                    |sdnd                    |                     u                      	
fd           dS )z
    Generate function to initialize and return named tuple for native functions
    which returns named tuple and registration invocations in `python_return_types.cpp`.
    r   r   
c                 F    dd                                  d  z   dS )Nr   r   r   )r   py_return_typespy_return_types_registrationsr   )r   r   py_return_types_definitionr  s   rj   r   z4create_python_return_type_bindings.<locals>.<lambda>  s=    !$K < < > >KKKK"L9-J	
 
 rl   N)r   r   r   rx   1generate_return_type_definition_and_registrationsr   r   r   )r   r   r   r   r   rt   r   definitionsregistrationsr  r  s   `  `     @@rj   r   r     s    -//1!$UD11Gw||~~3/// 

 

DM	%V&
 &
"] 	#))!=BBtyy'='=	
 	
 	
 	&,,#ABB=)A)A	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
	 	 	 	 	rl   c                D    g t          ||          }t          |                                t                    D ]E}||         }t	          |          }                    |sdnd                    |                     F                      fd           dS )z
    Generate function to initialize and return named tuple for native functions
    which returns named tuple and relevant entry for the map in `python_return_types.cpp`.
    r   r   r   c                 D    dd                                  d  z   dS )Nr   r   r   )r   py_return_types_declarationsr   )r   r   r
  s   rj   r   z;create_python_return_type_bindings_header.<locals>.<lambda>  s:    !$K < < > >KKKK"L,H
 
 rl   N)r   r   r   rx   !generate_return_type_declarationsr   r   r   )	r   r   r   r   r   rt   r   declarationsr
  s	   `  `    @rj   r   r     s     /1 $UD11Gw||~~3/// 
 
DM	8CC$++"?BB		,(?(?	
 	
 	
 	
 	
 	
 	
 	
 	
 	
    rl   r   intc          
         t          ||          }dd}	dfd}
|                     ||                                dd	d
|                                  d| z   i|	|
|h d           dS )r   kv@tuple[BaseOperatorName, list[PythonSignatureNativeFunctionPair]]rn   rx   c                    | d         j         S )Nr   )r   )r  s    rj   key_funcz0create_python_bindings_sharded.<locals>.key_func  s     !uzrl   dict[str, list[str]]c           	         | \  }}d|j          dgt          t          ||                    t          ||          gt	          ||          gdS )Nr   r   r   r   )r   r   r   r   )r   r   r   r   r   )r  rt   fn_pairsr   r   r   s      rj   env_funcz0create_python_bindings_sharded.<locals>.env_func  s~     h@$)@@@AdHV L L LMMD&(6&QQQ  *$PPPQ
 
 	
rl   r   r   r   r   >   r   r   r   r   )base_envkey_fnenv_callabler   sharded_keysN)r  r  rn   rx   )r  r  rn   r  )r   write_shardeditemsr   )r   r   r   r   r   r   r   r   r   r  r  s      ` ` `   rj   r   r     s     %UD11G   

 
 
 
 
 
 
 
 K < < > >KKKK"L
 SSS      rl   F)skip_deprecatedpyir   list[NativeFunction]r  r  c                   t           dfd            }t          t          ||                     }t          ||          }|r|n||z   S )Nrm   r   rn   r   c                F    t          t          |           |           S )Nr   r  r   r   )r   r   )rm   r   r  s    rj   gen_signature_pairsz,load_signatures.<locals>.gen_signature_pairs9  s/    0&c:::
 
 
 	
rl   r"  )rm   r   rn   r   )r   r   mapload_deprecated_signatures)r   r   r   r  r  r$  r   
deprecateds     ` `   rj   r   r   1  s     
 
 
 
 
 
 
 (*:;;<<E+#F  J $;55);;rl   'list[PythonSignatureNativeFunctionPair]c                   t          t                    }| D ]'}||j        j                                     |           (g }t          |          5 }t          j        |t                    }d d d            n# 1 swxY w Y   |D ]}	t          j
        |	d                   t          |	d                   \  }
|
                    d          r|
                    dd          }
dt          j
        d          id j        j        D             D ]}|v s|v sJ d	|             dfd}d}||
         D ]} ||j        j                  sd}t'          |j        j        ||          }|                    t+          t-          |j        |j        |j        |j        |j        |j        t9                    |j        	  	        |j                             |sJ d|
 dt=                                 |S )N)Loaderrt   aten_outr   1Scalarc                    i | ]
}|j         |S r~   r   rh   as     rj   
<dictcomp>z.load_deprecated_signatures.<locals>.<dictcomp>j  s    LLLQqvqLLLrl   z+deprecation definition: Unrecognized value aten_schemar   rn   ro   c                   	r*t          j        | j        j        | j        j                  }n| j        j        }t          |          D ]i\  }}|t                    k     rG|         }|
v r
|         }d }n|         }|j        }|j	        }||j        k    s||j	        k    r dS _|j
         dS jt          j                  t          | j                  k    o0t          d t          j        | j                  D                       S )NFc              3  (   K   | ]\  }}||k    V  d S r   r~   )rh   r1  bs      rj   	<genexpr>zKload_deprecated_signatures.<locals>.is_schema_compatible.<locals>.<genexpr>  sC       K K1aQK K K K K Krl   )	itertoolschain	argumentsr   flat_non_outflat_all	enumerater   type
annotationdefaultreturnsallzip)r3  r:  iargarg_nameschema_typeschema_annotation
schema_arg	call_argsis_outknown_constantsschemaschema_args_by_names           rj   is_schema_compatiblez8load_deprecated_signatures.<locals>.is_schema_compatibler  sO     ;%O)-{/D/Q 		 (1:	#I.. % %3s9~~%%(|H?22&5h&?,0))%8%B
&0o,6,A)"ch..2Cs~2U2U$uu 3V {*$uu + v~&&#k.A*B*BB s K K#&v~{7J#K#KK K K H H rl   FT)category_overrider   r  )	rt   
input_argsinput_kwargsoutput_argstensor_options_argsr   deprecated_schemadeprecated_args_exprsrA  r#  zNo native function with name z matched signature:
  )r3  r   rn   ro   )r   r   r   rt   r   openyamlloadr%   r   parser$   endswithreplacer!   r:  r<  r   ru   r   rP  r   r   rQ  rR  rS  rT  r   tuplerA  rx   )r   r   r   r  r   r   resultsrm   deprecated_defsr'  	aten_namert   rO  any_schema_found
python_sigrJ  rK  rL  rM  rN  s                  @@@@@rj   r&  r&  G  s    CNdBSBSG 2 2#$++D1111 8:G	"	#	# :q)Aj999: : : : : : : : : : : : : : : & S
 S

%j&8990F1CDD	9##F++ 	6!))&"55I
 H%%
 ML&2B2KLLL 	 	D...$/2I2I2IDdDD 3J2II	 	 	 	 	 	 	 	 	 	@ !I& 	 	D''(:;; #."&-"A	  J NN17'_#-#8%/%<$.$:,6,J)0*0.3I.>.> * 2
 
 
 "]         	
 	
[I[[cRXkk[[	
 	
 	
 Ns   A==BBc                    t          j        | j                  }t          | j        j                  }d                    |g|z             S )N_)r   rt   ru   r   rA  r   )rm   rt   
fieldnamess      rj   gen_structseq_typename_keyrf    s=    8AFD%afn55J88TFZ'(((rl    tuple[list[str], dict[str, str]]c                ^   i }g }| D ]}t          |j        j        j                  }|s#t	          j        |j        j                  }t          |j                  }|                    |          }|7d|sdnt          |           }|||<   |	                    d| d| d           ||fS )zr
    Generate block of named tuple type def inits, and add typeref snippets
    to declarations that use them
    N
NamedTupler   zstatic PyTypeObject* z = generated::get__structseq();
r   r   ru   rA  r   rt   rf  getr   r   )r   	typenamestypedefsoverloadre  rt   tn_keytypenames           rj   emit_structseq_callrr    s     	  H  )(*;*@*HII
 	x).//+H,=>>==((Kh$IBBCMMKKH (IfOOHH H26H H H  
 Yrl   tuple[list[str], list[str]]c                   i }g }g }| D ] }t          |j        j        j                  }|s$d                    d |D                       }t          j        |j        j                  }t          |j                  }|                    |          }	|	t| d|sdnt          |           }	|	||<   |
                    d| d| d|	 d	| d
t          |           d|	 d|	 d|	 d           |
                    d| d| d           ||fS )z
    Generate block of function in `python_return_types.cpp` to initialize
    and return named tuple for a native function which returns named tuple
    and registration invocations in same file.
    , c              3  "   K   | ]
}d | dV  dS ){"z", ""}Nr~   )rh   r   s     rj   r7  zDgenerate_return_type_definition_and_registrations.<locals>.<genexpr>  s.      BB,,,,BBBBBBrl   Nri  r   PyTypeObject* get_zI_structseq() {
    static PyStructSequence_Field NamedTuple_fields[] = { z(,  {nullptr} };
    static PyTypeObject zh;
    static bool is_initialized = false;
    static PyStructSequence_Desc desc = { "torch.return_types.z", nullptr, NamedTuple_fields, zB };
    if (!is_initialized) {
        PyStructSequence_InitType(&z, &desc);
        zm.tp_repr = (reprfunc)torch::utils::returned_structseq_repr;
        is_initialized = true;
    }
    return &z;
}
z$addReturnType(return_types_module, "z", generated::get_z_structseq());)r   r   ru   rA  r   r   rt   rf  rl  r   r   )
r   rm  r  r  ro  re  fieldsrt   rp  rq  s
             rj   r  r    s    	   K!M    )(*;*@*HII
 	BBzBBBBBx).//+H,=>>==((WWK*U""SEUEUWWH (If <B  " 
 AE 
 fiisetet  %-  
          ctcctccc   %%rl   	list[str]c                X   i }g }| D ]}t          |j        j        j                  }|s#t	          j        |j        j                  }t          |j                  }|                    |          }|6| d|sdnt          |           }|||<   |	                    d| d           |S )z
    Generate block of function declarations in `python_return_types.h` to initialize
    and return named tuple for a native function.
    Nri  r   rx  rj  rk  )r   rm  r  ro  re  rt   rp  rq  s           rj   r  r    s     	  !L J J)(*;*@*HII
 	x).//+H,=>>==((RR\#P22s<?P?PRR  !)If HT H H HIIIrl   a  \
// ${name}
static PyObject * ${pycname}(PyObject* self_, PyObject* args, PyObject* kwargs)
{
  ${method_header}
  static PythonArgParser parser({
    ${signatures}
  }, /*traceable=*/${traceable});

  ParsedArgs<${max_args}> parsed_args;
  auto _r = parser.parse(${self_}, args, kwargs, parsed_args);
  ${check_has_torch_function}
  switch (_r.idx) {
    ${dispatch}
  }
  ${method_footer}
}

z&case ${overload_index}: {
  ${body}
}
ao  // ${name}
static PyObject * ${pycname}(PyObject* self_, PyObject* args, PyObject* kwargs)
{
  ${method_header}
  static PythonArgParser parser({
    ${signatures}
  }, /*traceable=*/${traceable});

  ParsedArgs<${max_args}> parsed_args;
  auto _r = parser.parse(${self_}, args, kwargs, parsed_args);
  ${check_has_torch_function}
  ${dispatch}
  ${method_footer}
}

z// ${name}
static PyObject * ${pycname}(PyObject* self_, PyObject* args)
{
  ${method_header}
  ${check_has_torch_function}
  ${dispatch}
  ${method_footer}
}

c               @   t          |           }t          |          }t          |          \  }}dg}	|	|z  }	|	|rdgng z  }	|rg ndgdgz   }
t          d |D                       rdnd}t	          ||          }t          |          d	k    }g }g }t          |          D ]\  }}|j                            |          }|	                    t          t          |                     d
           t          |||          }|	                    |st                              ||          n|           |rt          }n|rt           }nt"          }|                    | ||	t%          d |D                       ||t'          | |||          ||
|rdnd
  
        S )z?
    Generate a python binding for all overloads of an op.
    HANDLE_TH_ERRORSz/const Tensor& self = THPVariable_Unpack(self_);Py_RETURN_NONE;END_HANDLE_TH_ERRORSc              3  >   K   | ]}t          |j                  V  d S r   )r(   r   rh   os     rj   r7  zmethod_impl.<locals>.<genexpr>  s,      JJ1l1:66JJJJJJrl   truefalser   r&   ,)overload_indexbodyc              3  H   K   | ]}|j                                         V  d S r   )r   r   r  s     rj   r7  zmethod_impl.<locals>.<genexpr>  s0      FFqQ[0022FFFFFFrl   )rt   r   noargr   self_nullptr)
rt   pycnamemethod_headermax_args
signatures	traceablecheck_has_torch_functiondispatchmethod_footerr  )r   r   rr  rB  group_overloadsr   r=  r   signature_strr   r   rx   emit_dispatch_casePY_VARIABLE_CASE
substitutePY_VARIABLE_METHOD_NOARGS$PY_VARIABLE_METHOD_VARARGS_SINGLETONPY_VARIABLE_METHOD_VARARGSmaxgen_has_torch_function_check)rt   r   r   r   r   r  r  structseq_initsstructseq_typenamesr  r  r  grouped_overloadsis_singletonr  r  r  ro  r   dispatch_bodytemplates                        rj   r   r     s:    $GYE+>y+I+I(O('(M_$M?EM	:;;2M !9RR'8&9>T=UUMJJ	JJJJJWPWI8G&9 9 9 ())Q.LJH$-.?$@$@ 

 

 &44F4CC	ZI77:::;;;*85HQWXXX  ''-M (    	
 	
 	
 	
  .,	 .7-#FFIFFFFF!=	"
 "
 "
 #.ggY    rl   r  c               j    |r
|rd|  dS dS |rdnd}|rdddd	d
ddd|         nd}d| d| d|pd dS )NzMif(check_has_torch_function(self_)) {
  return handle_torch_function(self_, "z");
}
r   r  r  THPVariableFunctionsModuleTHPNNVariableFunctionsModuleTHPFFTVariableFunctionsModule THPLinalgVariableFunctionsModule THPNestedVariableFunctionsModule THPSparseVariableFunctionsModule!THPSpecialVariableFunctionsModule)r   r   r   r   r   r   r   THPVariableClasszAif(_r.has_torch_function()) {
  return handle_torch_function(_r, z, args, kwargs, z, "ztorch.Tensorr~   )rt   r   r  r   r  	namespaces         rj   r  r    s       	(,    2,GG9E 
	 168>>>@	
 	
 	 	   $) ;D IOIaSa   rl   zRif (_r.isNone(${out_idx})) {
  ${call_dispatch}
} else {
  ${call_dispatch_out}
}
ro  r   r  r   c          
        | j         jt                              | j                                        t          | j        | j        ||          t          | j        | j         ||                    S t          | j        | j        ||          S )a0  
    Emit dispatch code for a single parsed signature. This corresponds to either
    a single native function, or a pair that differ only in output params. In the
    latter case, a single python signature is used for both and dispatching
    switches on the presence/absence of passed output args.
    Nr   )out_idxcall_dispatchcall_dispatch_out)outplacePY_VARIABLE_OUTr  r   
output_idxemit_single_dispatchr   )ro  r  r   s      rj   r  r    s     $))&1133."HM3Fv   3"!#	   * 
 
 	
 $/B6
 
 
 	
rl   tuple[str, ...]c               b    |rdS t          |           }t          |          rd| dfS d| dfS )Nr~   zstatic PyObject * z#(PyObject* self_, PyObject* args);
z5(PyObject* self_, PyObject* args, PyObject* kwargs);
)r   r   )rt   r   r   r  s       rj   r   r     sp      r$G	 
  
 	
  
 	
rl   c                   t          |           }| j        rd| d}t          |          r|rdnd}nd| d}d}|dk    r|dz  }d	|  d
| d| dS )z$
    Generate method def entry.
    zTypeError_to_NotImplemented_<>METH_NOARGSzMETH_VARARGS | METH_KEYWORDSzcastPyCFunctionWithKeywords(r   r   z | METH_STATICrw  z", ru  z, nullptr},)r   dunder_methodr   )rt   r   r   r   r  flagss         rj   r   r   =  s     $G =<'<<<	 /!'K-K;;;;.!!888'88U8888rl   Sequence[PythonSignatureGroup]c                 	 i }i 	| D ]}|j                             d|          }|j        j                                        r:|	v r0t          d|j        j         d	|         j        j         d          |	|<   v||v r0t          d|j        j         d||         j        j         d          |||<   	                                D ]\  }}||vrg }| D ]}t          |j        j        j        j                  t          |j        j        j        j                  k    rY|j        j                                        s;|j         j	        s/|
                    |j                             d|                     |j                             |          }t          d| d| d	d
                    d |D                       z             	fd|                                D             }t          ||          S )NT)skip_outputsr   z(Found duplicated function definition:
- z.
Existing definition:
- .r   z4While identifying overloads, we found an out schema z] without a corresponding non-out variant. We expected the non-out variant to have schema: 
- zy
Please check that you spelled the schema correctly in native_functions.yaml. We discovered the following candidate(s): 
r   c              3      K   | ]	}d | V  
dS )z- Nr~   )rh   	candidates     rj   r7  z"group_overloads.<locals>.<genexpr>  s+      II,,,IIIIIIrl   c                h    g | ].\  }}t          j        |                    |                     /S ))
functionalr   )r   
from_pairsrl  )rh   sigr   	outplacess      rj   rk   z#group_overloads.<locals>.<listcomp>  sS       
 C	 	'c""	
 	
 	
  rl   )r   r  r   ru   	is_out_fnRuntimeErrorr  rx   rt   r'  r   r   sort_overloads)
r   r   basesro  r  r   
candidatesout_sigr   r  s
            @rj   r  r  `  s    ;=E>@I  " " ..D.PP!++-- 	"i"O@Q@V O O/8~/F/KO O O   &IcNNe||"K@Q@V K K/4Sz/B/GK K K   "E#JJOO%%  Se$&J%  ).38993<,16778 8$-2<<>>8 %.98
 %% *88)-f 9    
 m111@@Gcw c cGJc c c ))IIjIIIIIJ   ,   
   G '&1111rl   r  c                   dddfd
}t           fd           t          t                    t                     D ]K\  }}t                     D ]6\  }} ||j        |j                  r|                             |           7Lst                     S t                     }t          t          fdt          |                              }t          |          D ]e}	||	         }
t          
                                          D ]9}|         }|                    |
           |s|= |                    |           :f fd|D             S )Nt1r!   t2rn   ro   c                   t          |           dk    rt          |          dk    pt          |           dk    ot          |          dk    pdt          |           v odt          |          vpt          |           dk    o%t          |          dk    pt          |          dk    pt          |           d	k    o%t          |                              d
          dk    p^t          |           dk    ot          |          dk    p8t          |           dk    st          |           dk    ot          |          dk    S )Nr.  TensorzScalar?zTensor?Dimnamezint[]r  zint?zTensor[]z[]zSymInt[]SymInt)rx   find)r  r  s     rj   is_arg_smallerz&sort_overloads.<locals>.is_arg_smaller  sB   GGx $B8#$2ww)# %B9$$ CGG# )R($ GGw 8RE!6SWW%6$ GGz! )BT""b($$ GGz! #B7"'$. WW 4CGGu$4 $B8#3	
rl   s1r   s2c                J   |                      d          |                     d          }}t          |          t          |          k    rdS t          d t          ||          D                       }t          fdt          ||          D                       }|o| S )z-Returns True if s1 < s2 in the partial order.T)r  Fc              3  <   K   | ]\  }}|j         |j         k    V  d S r   )r>  )rh   arg1arg2s      rj   r7  z5sort_overloads.<locals>.is_smaller.<locals>.<genexpr>  s/      OOztTDI*OOOOOOrl   c              3     K   | ]G\  }}t          |j                  t          |j                  k    p |j        |j                  V  Hd S r   )rx   r>  )rh   r  r  r  s      rj   r7  z5sort_overloads.<locals>.is_smaller.<locals>.<genexpr>  se       
 
d 	NNc$)nn,Tty$)0T0T
 
 
 
 
 
rl   )r:  r   rB  rC  )r  r  args1args2equalsmaller_or_equalr  s         rj   
is_smallerz"sort_overloads.<locals>.is_smaller  s    |||66RV8W8Wuu::U##5 OOS=N=NOOOOO 
 
 
 
!%//
 
 
 
 
  -I-rl   c                :    | j                                       S )Nr   )r   r  )xr   s    rj   r   z sort_overloads.<locals>.<lambda>  s    )B)B&)B)Q)Q rl   r   c                    | vS r   r~   )r  larger_thans    rj   r   z sort_overloads.<locals>.<lambda>  s    !;2F rl   c                     g | ]
}|         S r~   r~   )rh   r  r  s     rj   rk   z"sort_overloads.<locals>.<listcomp>  s    555Qa 555rl   )r  r!   r  r!   rn   ro   )r  r   r  r   rn   ro   )r   r   setr=  r   addr   r   r   ranger   discardr   )r  r   r  i1	overload1i2	overload2N
sorted_idsidxrD  jlargerr  r  s   ``           @@rj   r  r    s   

 
 
 
:. . . . . .  QQQQ  
 (33'7'7K"#455 ( (I&'899 	( 	(MB	z)-y/BCC (B##B'''	(  '%&&& 	A (F(F(F(Fa!Q!QRRJQxx % %sO((**++ 	% 	%A ^FNN1 %N!!!$$$	% 6555*5555rl   psr   c               H     t           d fd            } ||          S )z:
    Emit dispatch code for a single native function.
    rm   r   rn   rx   c                   t          t                    rdj         }n
d| j         }t	          j        | j                  }d                    d t          |           D                       }t          |           }t          |           }d                    t          |                     }t          |           }t          |           }d                    |j                  }	d                    |j                  }
j        ot!          |            p
j        od|v }|rd	|d         j         d
nd}|dk    r| j        j        j        }t+          | j        j                                      d          rG| j                                        t0          j        k    r |t5          |j        j                  sJ d}nd}| d|	 d| d| d| d| d| d| d|
 d
| d| dS                     t=          |                     }|| dnd}| d|	 d| d| d| d| d| d| d| d|
 d
| dS )Nz// [deprecated] aten::z	// aten::ru  c              3  8   K   | ]}|j          d |j         V  dS ) N)type_strrt   r0  s     rj   r7  z3emit_single_dispatch.<locals>.go.<locals>.<genexpr>3  sE       #
 #
)*qz$$AF$$#
 #
 #
 #
 #
 #
rl   r   )python_signaturer   requires_gradz.set_requires_grad(r   r   void	_foreach_z\PyObject* self_tensorlist = _r.args[0];
Py_INCREF(self_tensorlist);
return self_tensorlist;
r~  z
auto dispatch_z = [](z) -> z, {
  pybind11::gil_scoped_release no_gil;
  (z);
};
dispatch_z;
z3 {
  pybind11::gil_scoped_release no_gil;
  return z);
};
return wrap(	dispatch_z);
)
isinstancer   rU  ru   r   rt   r   r   r   r
   r	   r   r   initsexprsrT  r   r   exprr:  self_argrx   
startswithkindr    inplacer'   argumentr>  rl  rf  )rm   schema_commentrt   lambda_formalslambda_returndispatch_calleedispatch_argsparser_outputslambda_arg_exprsr  lambda_argsneed_set_requires_gradset_requires_gradr  return_stmtrq  structseq_typerefr  r  r   s                    rj   goz emit_single_dispatch.<locals>.go)  s    b344 	2Lb6JLLNN111N x #
 #
.B2qQW.X.X.X#
 #
 #
 
 
 3155 .a00		"4Q"L"L"LMM 1QvFFF0QvFFF		*011ii 0 677 "$!7 "
"1%%% C	A.@ 	 &I."A"FIIII 	 F"" v'0H AFK  ++K880FKKMMZ%777  +0C%*1 1++ 
 0	 		 	 	 	 *	 	 1>	 	
 	 	
 #	 	 	 	 	 	  1	 	 	 	 	 	 +../I!/L/LMMH3;3G8R     *  1> 
  
 *    *.  1<  ?P   rl   rm   r   rn   rx   r   )r  rm   r  r   r  s   ` `` rj   r  r    sR     Q Q Q Q Q Q Q Qf 2a55Lrl   )rm   r   rn   ro   )rt   r   rn   rx   )r   r   rn   ro   )r   rx   r   rx   r   rx   r   rx   r   rx   r   ro   rn   r   )r   r   r   r   rn   r   )r   r#   r   r   r   r   r   r   r   rx   r   ro   r   ro   rn   r   )
r   r#   r   r   r   r   r   rx   rn   r   )r   r#   r   r   r   r   r   r   r   rx   r   ro   r   r  r   ro   rn   r   )r   r  r   rx   r   ro   r  ro   r  ro   rn   r   )
r   r   r   rx   r   ro   r  ro   rn   r(  r  )r   r   rn   rg  )r   r   rn   rs  )r   r   rn   rz  )rt   r   r   r   r   r   r   ro   r   ro   rn   rx   )
rt   r   r   r   r  ro   r   ro   rn   rx   )ro  r   r  r   r   ro   rn   rx   )rt   r   r   r   r   ro   rn   r  )
rt   r   r   r   r   r   r   ro   rn   rx   )r   r   r   ro   rn   r  )r  r  r   ro   rn   r  )
r  r   rm   r   r  r   r   ro   rn   rx   )^
__future__r   r8  rf   collectionsr   typingr   r   rX  torchgen.apir   torchgen.api.pythonr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   torchgen.code_templater   torchgen.contextr   torchgen.genr   r   r   torchgen.modelr   r   r   r   r    r!   r"   torchgen.utilsr#   r$   torchgen.yaml_utilsr%   gen_inplace_or_view_typer'   gen_trace_typer(   collections.abcr)   r*   _SKIP_PYTHON_BINDINGSrv   ry   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&  rf  rr  r  r  r  r  r  r  r   r  r  r  r   r   r  r  r  r~   rl   rj   <module>r(     s=  D # " " " " "     				 # # # # # # * * * * * * * *                                        0 / / / / / 1 1 1 1 1 1 G G G G G G G G G G                  : 9 9 9 9 9 9 9 * * * * * * 9 9 9 9 9 9 ( ( ( ( ( (  322222222U U U n /D   	# 	# 	#     *! ! ! !Q Q Q QD D D DF F F F# # # #$ $ $ $' ' ' '' ' ' '' ' ' '( ( ( ($ y3 y3 y3 y3 y3 y3x
 
 
 
* & & & & & &R$ $ $ $N   R + + + + + +f "< < < < < <,l l l ll ) ) ) )   >0& 0& 0& 0&f   L *\  2  <   (4|( ( $* )L
  * B B B B B BJ       H ,  	
 
 
 
 
 
P
 
 
 
>9 9 9 9H OS62 62 62 62 62 62N JNN6 N6 N6 N6 N6 N6z _ _ _ _ _ _ _ _rl   