
    sh                       S SK Jr  S SKrS SKrS SKJr  S SKJrJr  S SK	r	S SK
Jr  S SKJrJrJrJrJrJrJrJrJrJrJrJrJrJr  S SKJr  S SKJr  S S	KJ r J!r!J"r"  S S
K#J$r$J%r%J&r&J'r'J(r(J)r)J*r*  S SK+J,r,J-r-  S SK.J/r/  SSK0J1r1  SSK2J3r3  \(       a  S SK4J5r5J6r6  / SQr7\7 V s/ s H  n \Rq                  SU  S35      PM     sn r9/ SQr:\S=S j5       r;S>S jr<S?S jr=S=S jr>S=S jr?S=S jr@S=S jrAS=S jrBS=S jrCS=S jrDS=S jrES S!.             S@S" jjrF      SAS# jrGS S!.               SBS$ jjrH          SCS% jrI          SCS& jrJS S!.                 SDS' jjrKS(S(S).           SES* jjrL          SFS+ jrM\SGS, j5       rN    SHS- jrO    SIS. jrP    SJS/ jrQ\" S05      rR\" S15      rS\" S25      rT\" S35      rUS S!.           SKS4 jjrV          SLS5 jrW\" S65      rXS S!.       SMS7 jjrY        SNS8 jrZ          SOS9 jr[S S!.     SPS: jjr\S S!.     SQS; jjr]S S!.         SRS< jjr^gs  sn f )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)Salias
contiguousis_cuda	is_sparseis_sparse_csrsizestride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_update^$)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!)c                "   SU R                   ;   a  SU R                   ;  a  g[        R                  " U R                  5      n[         H  nUR                  U5      (       d  M    g   [        U R                  5      n[         H
  nXC:X  d  M
    g   g)N	generated	view_copyFT)tagsr   namefuncSKIP_PYTHON_BINDINGSmatchstrSKIP_PYTHON_BINDINGS_SIGNATURES)frh   
skip_regexr   patterns        ڃ/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torchgen/packaged/autograd/gen_python_functions.pyshould_generate_py_bindingrr      su     affAFF!:88AFFD*
D!! + AFFI2 3     c                    SU  3$ )NTHPVariable_ )rh   s    rq   get_pycnamerw      s    $  rs   c                l    [        U 5      S:H  =(       a     U S   R                  R                  5       S:H  $ )Nr&   r   )lenr   arguments_count)	overloadss    rq   is_noargr|      s.    y>QP9Q<#9#9#I#I#Kq#PPrs   c                f    U R                   S L =(       a    [        R                  U R                  ;   $ N)python_moduler"   methodvariantsrn   s    rq   is_py_variable_methodr      s#    ??d"Cw~~'CCrs   c                f    U R                   S L =(       a    [        R                  U R                  ;   $ r~   )r   r"   functionr   r   s    rq   is_py_torch_functionr      s%    ??d"Ew'7'71::'EErs   c                     U R                   S:H  $ )Nnnr   r   s    rq   is_py_nn_functionr      s    ??d""rs   c                     U R                   S:H  $ )Nfftr   r   s    rq   is_py_fft_functionr      s    ??e##rs   c                     U R                   S:H  $ )Nlinalgr   r   s    rq   is_py_linalg_functionr          ??h&&rs   c                     U R                   S:H  $ )Nnestedr   r   s    rq   is_py_nested_functionr      r   rs   c                     U R                   S:H  $ )Nsparser   r   s    rq   is_py_sparse_functionr      r   rs   c                     U R                   S:H  $ )Nspecialr   r   s    rq   is_py_special_functionr      s    ??i''rs   Tsymintc               P  ^ [        XSS9n[        X5      R                  n[        [	        [
        U5      5      n[        XsSS9n[        UU[        S SSUS9  [        XsSS9n	[        UU	[        SSSS	US
9  [        UU	[        SSSUS9  [        UU	[        SSSUS9  [        UU	[        SSSUS9  [        UU	[        SSSS9  [        UU	[        SSSUS9  [        UU	[         SSSUS9  [#        XiS S5        [%        XiS S5        ['        U5      mSU4S jjn
UR)                  SU
5        g )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                    gNTrv   fns    rq   <lambda>gen.<locals>.<lambda>q      $rs   zpython_return_types.cppc                    gr   rv   r   s    rq   r   r   t  r   rs   zpython_return_types.hc                 v   > SSR                  [        T5       V s/ s H  n SU  SU  S3PM     sn 5      0$ s  sn f )Nenum_of_valid_tags z	
.value("z", at::Tag::))joinsorted)tag
valid_tagss    rq   gen_tags_enumgen.<locals>.gen_tags_enumy  sJ     EKJEWXEWcz#l3%q9EWX
 	
 Ys   6
zpython_enum_tag.cpp)returndict[str, str])r#   r   native_functionslistfilterrr   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)outnative_yaml_pathtags_yaml_pathdeprecated_yaml_pathtemplate_pathr   fmr   methods	functionsr   r   s              @rq   genr   	  s    
%	PB(  F#=?OPQ.TRG
%   0uUI"
$	 
! 
" 
% 
% 
% 
& '
(A .
(? !0J
 HH"M2rs   c                    [        [        5      nU  HW  nU" UR                  5      (       d  M  X#R                  R                  R                  R                     R                  U5        MY     U$ r~   )r   r   r   ri   rh   append)pairspredgroupedpairs       rq   group_filter_overloadsr     sZ    
 	D  MM&&++00188>  Nrs   c                 ^ ^^
^^^ / m/ m
/ m/ m[        X5      n[        UR                  5       [        S9 Hr  nXx   n	TR	                  [        XXUS95        TR	                  [        XXS95        TR                  [        XUS95        T
R	                  SUR                   S35        Mt     T R                  TTUU U
UUU4S j5        g)+Generates Python bindings to ATen functionskeyr   r   #include <ATen/ops/.h>c                 B   > SSTR                  5        ST  3-   TTTTS.$ )N@generated from /)generated_commentops_headerspy_forwards
py_methodspy_method_defstemplate_dir_for_comments)filenamer   r   r   r   r   s   rq   r   (create_python_bindings.<locals>.<lambda>  s7    !$ < < >?q
K"L&&$,
rs   N)r   r   keysrl   r   method_impl
method_defextendforward_declsbasewrite_with_template)r   r   r   moduler   r   r   r   rh   r{   r   r   r   r   s   `   `     @@@@rq   r   r     s     JK "NK$U1Gw||~3/M	ivN	
 	jyPQ=HI03?@ 0 	
 	
rs   c                j  ^ ^^	^
 / m	/ m
[        X5      n[        UR                  5       [        S9 Hf  nXE   n[	        U5      u  pxT	R                  U(       d  SOSR                  U5      5        T
R                  U(       d  SOSR                  U5      5        Mh     T R                  TTUU U	U
4S j5        g)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                 >   > SSTR                  5        ST  3-   TTS.$ )Nr   r   r   )r   py_return_typespy_return_types_registrationsr   )r   r   py_return_types_definitionr   s   rq   r   4create_python_return_type_bindings.<locals>.<lambda>  s1    !$ < < >?q
K"L9-J	
rs   N)r   r   r   rl   1generate_return_type_definition_and_registrationsr   r   r   )r   r   r   r   r   rh   r{   definitionsregistrationsr   r   s   `  `     @@rq   r   r     s     -//1!$U1Gw||~3/M	%V&
" 	#))!Btyy'=	
 	&,,#B=)A	
 0 	
	rs   c                  ^ ^^ / m[        X5      n[        UR                  5       [        S9 H;  nXE   n[	        U5      nTR                  U(       d  SOSR                  U5      5        M=     T R                  TTUU U4S j5        g)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                 <   > SSTR                  5        ST  3-   TS.$ )Nr   r   r   )r   py_return_types_declarationsr   )r   r   r   s   rq   r   ;create_python_return_type_bindings_header.<locals>.<lambda>  s.    !$ < < >?q
K"L,H
rs   N)r   r   r   rl   !generate_return_type_declarationsr   r   r   )	r   r   r   r   r   rh   r{   declarationsr   s	   `  `    @rq   r   r     sv     /1 $U1Gw||~3/M	8C$++"B		,(?	
 0 	
rs   c          
        ^^^ [        X5      n    S
S jn	    SUUU4S jjn
U R                  UUR                  5       SSSU R                  5        SU 3-   0U	U
U1 SkS9  g	)r   c                     U S   R                   $ )Nr   )r   )kvs    rq   key_func0create_python_bindings_sharded.<locals>.key_func  s     !uzzrs   c           
        > U u  pSUR                    S3/[        [        XTS95      [        UTUTTS9/[	        UTUTS9/S.$ )Nr   r   r   r   )r   r   r   r   )r   r   r   r   r   )r  rh   fn_pairsr   r   r   s      rq   env_func0create_python_bindings_sharded.<locals>.env_func  s`     1$))C@AdV LMD&(6&Q  *$PQ
 	
rs   r   r   r   r   >   r   r   r   r   )base_envkey_fnenv_callabler   sharded_keysN)r  @tuple[BaseOperatorName, list[PythonSignatureNativeFunctionPair]]r   rl   )r  r  r   zdict[str, list[str]])r   write_shardeditemsr   )r   r   r   r   r   r   r   r   r   r  r  s      ` ` `   rq   r   r     s     %U1GL	

L
	
 
  < < >?q
K"L
 S  rs   F)skip_deprecatedpyic                  ^^ [         SUU4S jj5       n[        [        XP5      5      n[        XaTTS9nU(       a  U$ Xg-   $ )Nc                *   > [        [        U TTS9U S9$ )Nr   r  r   r   )r   r   )rn   r   r  s    rq   gen_signature_pairs,load_signatures.<locals>.gen_signature_pairs8  s    0&c:
 	
rs   r  )rn   r   r   r   )r   r   mapload_deprecated_signatures)r   r   r   r  r  r  r   
deprecateds     ` `   rq   r   r   0  sL     
 
 (;<E+FJ $5;);;rs   c                 ^^^^^ [        [        5      nU  H*  nXER                  R                     R	                  U5        M,     / n[        U5       n[        R                  " U[        S9nS S S 5        W GH  n	[        R                  " U	S   5      m[        U	S   5      u  n
mU
R                  S5      mT(       a  U
R                  SS5      n
S[        R                  " S5      0mTR                  R                    Vs0 s H  oR                  U_M     snmT H  nUT;   a  M  UT;   a  M   SU 35       e       SUUUUU4S	 jjnS
nXJ    H  nU" UR"                  R$                  5      (       d  M&  Sn['        TUR"                  R(                  UUS9nUR	                  [+        [-        UR                  UR.                  UR0                  UR2                  UR4                  UR6                  T[9        T5      UR:                  S9	UR"                  S95        M     U(       a  GM   SU
 S[=        T5       35       e   U$ ! , (       d  f       GN= fs  snf )N)Loaderrh   aten_outr   1Scalarz*deprecation definiton: Unrecognized value c                  > T	(       a@  [         R                  " U R                  R                  U R                  R                  5      nOU R                  R
                  n[        U5       Hu  u  p#U[        T5      :  aR  TU   nUT
;   a  T
U   nS nOTU   nUR                  nUR                  nXSR                  :w  d  XcR                  :w  a    gMf  UR                  b  Mu    g   [        TR                  5      [        U R                  5      :H  =(       a0    [        S [        TR                  U R                  5       5       5      $ )NFc              3  .   #    U  H  u  pX:H  v   M     g 7fr~   rv   ).0abs      rq   	<genexpr>Kload_deprecated_signatures.<locals>.is_schema_compatible.<locals>.<genexpr>  s      K#K41#K   )	itertoolschain	argumentsr   flat_non_outflat_all	enumeratery   type
annotationdefaultreturnsallzip)aten_schemar/  iargarg_nameschema_typeschema_annotation
schema_arg	call_argsis_outknown_constantsschemaschema_args_by_names           rq   is_schema_compatible8load_deprecated_signatures.<locals>.is_schema_compatibleq  s    %OO))--{/D/D/Q/Q	 (11::	#I.s9~%(|H?2&5h&?,0)%8%B
&0oo,6,A,A)"hh.2C~~2U$ 3V {{*$ /" v~~&#k.A.A*BB s K#&v~~{7J7J#KK H rs   FT)category_overrider   r  )	rh   
input_argsinput_kwargsoutput_argstensor_options_argsr   deprecated_schemadeprecated_args_exprsr6  r  zNo native function with name z matched signature:
  )r9  r   r   bool)r   r   r   rh   r   openyamlloadr%   r   parser$   endswithreplacer!   r/  r1  r   ri   r   rG  r   r   rH  rI  rJ  rK  r   tupler6  rl   )r   r   r   r  r   r   resultsrn   deprecated_defsr  	aten_namer(  rh   rE  any_schema_found
python_sigr@  rA  rB  rC  rD  s                   @@@@@rq   r  r  F  sJ    CNdBSG##$++D1  8:G	"	#q))Aj9 
$ &
%%j&890F1CD	9##F+!))&"5I
 H%
 392B2B2K2KL2KQvvqy2KLD..$/2I <TFCI 	'		 	@ !&D'(:(:;;#."&--"A"A	J NN17'__#-#8#8%/%<%<$.$:$:,6,J,J)00*0.3I.> * 2 2
 "]] '8   	
+I;6McRXk][	
c &j Nq 
$	# Ms   H?>I?
Ic                    [         R                  " U R                  5      n[        U R                  R                  5      nSR                  U/U-   5      $ )N_)r   rh   ri   r   r6  r   )rn   rh   
fieldnamess      rq   gen_structseq_typename_keyr^    s<    88AFFD%affnn5J88TFZ'((rs   c                   0 n/ nU  H  n[        UR                  R                  R                  5      nU(       d  M5  [        R
                  " UR                  R                  5      n[        UR                  5      nUR                  U5      nUb  M  SU(       d  SO
[        U5       3nXqU'   UR                  SU SU S35        M     X!4$ )zf
Generate block of named tuple type def inits, and add typeref snippets
to declarations that use them

NamedTupler   zstatic PyTypeObject* z = generated::get__structseq();
r   r   ri   r6  r   rh   r^  getry   r   )r{   	typenamestypedefsoverloadr]  rh   tn_keytypenames           rq   emit_structseq_callri    s     	  H)(*;*;*@*@*H*HI
xx))../+H,=,=>==(#hBCM#JKH (fOOZ1$}H   rs   c                8   0 n/ n/ nU  GH  n[        UR                  R                  R                  5      nU(       d  M6  SR	                  S U 5       5      n[
        R                  " UR                  R                  5      n[        UR                  5      nUR                  U5      n	U	b  M  U SU(       d  SO
[        U5       3n	XU'   UR                  SU SU SU	 SU S	[        U5       S
U	 SU	 SU	 S35        UR                  SU SU S35        GM     X#4$ )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  .   #    U  H  nS U S3v   M     g7f){"z", ""}Nrv   )r'  r   s     rq   r*  Dgenerate_return_type_definition_and_registrations.<locals>.<genexpr>  s     BzSG,zr,  r`  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   ri   r6  r   r   rh   r^  rc  ry   r   )
r{   rd  r   r   rf  r]  fieldsrh   rg  rh  s
             rq   r   r     sZ    	   K!M)(*;*;*@*@*H*HI
BzBBxx))../+H,=,=>==(zK"SEU)VWH (f& <<B8 D!
 #@@DvEdehisetdu v$$,: .		
  J     6tf<NtfTbc= D %%rs   c                   0 n/ nU  H  n[        UR                  R                  R                  5      nU(       d  M5  [        R
                  " UR                  R                  5      n[        UR                  5      nUR                  U5      nUb  M  U SU(       d  SO
[        U5       3nXqU'   UR                  SU S35        M     U$ )z
Generate block of function declarations in `python_return_types.h` to initialize
and return named tuple for a native function.
r`  r   ro  ra  rb  )r{   rd  r  rf  r]  rh   rg  rh  s           rq   r  r    s     	  !L)(*;*;*@*@*H*HI
xx))../+H,=,=>==(&
\2s<?P"QR  !)f"4TF- HI   rs   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                  [        U 5      n[        U5      n[        U5      u  pxS/n	X-  n	U	U(       a  S/O/ -  n	U(       a  / OS/S/-   n
[        S U 5       5      (       a  SOSn[	        X$S9n[        U5      S	:H  n/ n/ n[        U5       H{  u  nnUR                  R                  US9nUR                  [        [        U5      5       S
35        [        UXS9nUR                  U(       d  [        R                  UUS9OU5        M}     U(       a  [        nOU(       a  [         nO["        nUR                  U UU	[%        S U 5       5      UU['        U UUUS9UU
U(       a  SS9
$ SS9
$ )z7
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  L   #    U  H  n[        UR                  5      v   M     g 7fr~   )r(   r   r'  os     rq   r*  method_impl.<locals>.<genexpr>  s     J	1l1::66	s   "$truefalser   r&   ,)overload_indexbodyc              3  T   #    U  H  oR                   R                  5       v   M      g 7fr~   )r   rz   rw  s     rq   r*  ry    s     FIq[[0022Is   &()rh   r   noargr   self_nullptr)
rh   pycnamemethod_headermax_args
signatures	traceablecheck_has_torch_functiondispatchmethod_footerr  )rw   r|   ri  r7  group_overloadsry   r2  r   signature_strr   r   rl   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)rh   r   r{   r   r   r  r  structseq_initsstructseq_typenamesr  r  r  grouped_overloadsis_singletonr  r  r}  rf  r   dispatch_bodytemplates                        rq   r   r     s    $GYE+>y+I(O'(M$M?E	:;2M !R'8&9>T=UUMJ	JJJPWI8G9 ()Q.LJH$-.?$@ &&44F4C	ZI78:;*85HX   ''-M (  	
	 %A ,	7-#FIFF!=	"
 #g    &/   rs   c                   U(       a  U(       a  SU  S3$ gU(       a  SOSnU(       a  SSSS	S
SSS.U   OSnSU SU SU=(       d    S S3$ )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.Tensorrv   )rh   r   r  r   r  	namespaces         rq   r  r    s     ((,v .  G9E  268>>>@	
 	   $$)7*:9+SIaSaHb c rs   zRif (_r.isNone(${out_idx})) {
  ${call_dispatch}
} else {
  ${call_dispatch_out}
}
c               *   U R                   bh  [        R                  U R                  R	                  5       [        U R                  U R                  XS9[        U R                  U R                   UUS9S9$ [        U R                  U R                  XS9$ )a  
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.
r   )out_idxcall_dispatchcall_dispatch_out)outplacePY_VARIABLE_OUTr  r   
output_idxemit_single_dispatchr   )rf  r  r   s      rq   r  r    s     $))&&113.""HMM3F 3""!!#	 * 
 	
 $/B
 	
rs   c               d    U(       a  g[        U 5      n[        U5      (       a  SU S34$ SU S34$ )Nrv   zstatic PyObject * z#(PyObject* self_, PyObject* args);
z5(PyObject* self_, PyObject* args, PyObject* kwargs);
)rw   r|   )rh   r{   r   r  s       rq   r   r     s[     $G	) 
 	
) 
 	
rs   c                   [        U 5      nU R                  (       a  SU S3n[        U5      (       a  U(       a  SOSnOSU S3nSnUS:X  a  US-  nS	U  S
U SU S3$ )z
Generate method def entry.
zTypeError_to_NotImplemented_<>METH_NOARGSzMETH_VARARGS | METH_KEYWORDSzcastPyCFunctionWithKeywords(r   r   z | METH_STATICrm  z", rk  z, nullptr},)rw   dunder_methodr|   )rh   r   r{   r   r  flagss         rq   r   r   <  s{     $G1'!<	!'-K0	;.!!c'"UG<88rs   c          
        0 n0 nU  H  nUR                   R                  SUS9nUR                  R                  R	                  5       (       aG  XS;   a<  [        SUR                  R                   SX5   R                  R                   S35      eXCU'   M  XR;   a<  [        SUR                  R                   SX%   R                  R                   S35      eXBU'   M     UR                  5        GH4  u  pVXR;  d  M  / nU  H  n[        UR                  R                  R                  R                  5      [        UR                  R                  R                  R                  5      :X  d  Mm  UR                  R                  R	                  5       (       a  M  UR                   R                  (       a  M  UR                  UR                   R                  SUS95        M     UR                   R                  US9n[        SU SU S	3S
R                  S U 5       5      -   5      e   UR                  5        VV	s/ s H)  u  pY[        R                  " U	UR                  U5      S9PM+     n
nn	[        XS9$ s  sn	nf )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  ,   #    U  H
  nS U 3v   M     g7f)z- Nrv   )r'  	candidates     rq   r*  "group_overloads.<locals>.<genexpr>  s     Ijb,js   )
functionalr   )r   r  r   ri   	is_out_fnRuntimeErrorr  rl   rh   r  r   r   r   
from_pairsrc  sort_overloads)r{   r   bases	outplacesrf  sigr   
candidatesout_sigr   r   s              rq   r  r  _  ss    ;=E>@I   ..D.P!!++--"?@Q@Q@V@V?W X//8~/F/F/K/K.LAO  &cN|"?@Q@Q@V@V?W X//4z/B/B/G/G.HK  "#J " OO%$&J%))..338893<<,,116678$--22<<>>$..999%% **88)-f 9  & mm111@GFwi PGGJe Lcc ))IjIIJ ! &8 
 'IC	 	''c"	
 '   '11s   90I5c                 ^^^ SS jmSU4S jjn[        U U4S jS9n [        [        5      m[        U 5       HQ  u  p4[        U 5       H=  u  pVU" UR                  UR                  5      (       d  M)  TU   R                  U5        M?     MS     T(       d  [        U 5      $ [        U 5      n[        [        U4S j[        U5      5      5      n[        U5       HZ  n	X   n
[        TR                  5       5       H6  nTU   nUR                  U
5        U(       a  M"  TU	 UR                  U5        M8     M\     U Vs/ s H  oU   PM	     sn$ s  snf )Nc                   [        U 5      S:H  =(       a    [        U5      S:H  =(       Gd/    [        U 5      S:H  =(       a    [        U5      S:H  =(       Gd    S[        U 5      ;   =(       a    S[        U5      ;  =(       d    [        U 5      S:H  =(       a#    [        U5      S:H  =(       d    [        U5      S:H  =(       d    [        U 5      S	:H  =(       a    [        U5      R                  S
5      S:g  =(       db    [        U 5      S:H  =(       a    [        U5      S:H  =(       d8    [        U 5      S:H  =(       d    [        U 5      S:H  =(       a    [        U5      S:H  $ )Nr$  TensorzScalar?zTensor?Dimnamezint[]intzint?zTensor[]z[]zSymInt[]SymInt)rl   find)t1t2s     rq   is_arg_smaller&sort_overloads.<locals>.is_arg_smaller  s)   Gx $B8#$ $2w)# %B9$$ $ CG# )R($ Gw 8RE!6SW%6$ Gz! )BT"b($$ Gz! #B7"'$. W 4CGu$4 $B8#3	
rs   c                  > U R                  SS9UR                  SS9p2[        U5      [        U5      :w  a  g[        S [        X#5       5       5      n[        U4S j[        X#5       5       5      nU=(       a    U(       + $ )z-Returns True if s1 < s2 in the partial order.T)r  Fc              3  X   #    U  H   u  pUR                   UR                   :H  v   M"     g 7fr~   )r3  )r'  arg1arg2s      rq   r*  5sort_overloads.<locals>.is_smaller.<locals>.<genexpr>  s!     O=NztDII*=Ns   (*c              3     >#    U  HV  u  p[        UR                  5      [        UR                  5      :H  =(       d    T" UR                  UR                  5      v   MX     g 7fr~   )rl   r3  )r'  r  r  r  s      rq   r*  r    sF      
/
 		Nc$))n,Ttyy$))0TT/s   AA!)r/  ry   r7  r8  )s1s2args1args2equalsmaller_or_equalr  s         rq   
is_smaller"sort_overloads.<locals>.is_smaller  sw    |||6RV8Wuu:U# OS=NOO 
!%/
 
  -I-rs   c                6   > U R                   R                  TS9$ )Nr   )r   r  )xr   s    rq   r    sort_overloads.<locals>.<lambda>  s    )B)B&)B)Qrs   r   c                   > U T;  $ r~   rv   )r  larger_thans    rq   r   r    s
    !;2Frs   )r  r!   r  r!   r   rN  )r  r   r  r   r   rN  )r   r   setr2  r   addr   ry   r   ranger   discardr   )r  r   r  i1	overload1i2	overload2N
sorted_idsidxr:  jlargerr  r  r  s    `            @@rq   r  r    s(   

:.  Q
 (33'7K"#45&'89MB)--y/B/BCCB##B' : 6
 %&& 	A (Fa!QRJQxO((*+A ^FNN16N!!!$ ,  +55*Qa *555s   :Ec               >   ^ ^^ [         SU UU4S jj5       nU" U5      $ )z2
Emit dispatch code for a single native function.
c                  > [        T[        5      (       a  STR                   3nOSU R                   3n[        R
                  " U R                  5      nSR                  S [        TU TS9 5       5      n[        U 5      n[        U 5      nSR                  [        U TS95      n[        TU TS9n[        TU TS9nSR                  UR                  5      n	SR                  UR                  5      n
TR                  =(       a/    [!        U 5      (       + =(       d    TR"                  =(       a    SU;   nU(       a  S	US   R$                   S
3OSnUS:X  a  U R                  R&                  R(                  n[+        U R                  R
                  5      R-                  S5      (       aX  U R                  R/                  5       [0        R2                  :X  a,  Ub$  [5        UR6                  R8                  5      (       d   eSnOSnU SU	 SU SU SU SU SU SU SU
 S
U SU S3$ TR;                  [=        U 5      5      nUb  U S3OSnU SU	 SU SU SU SU SU SU SU SU
 S
U S3$ )Nz// [deprecated] aten::z	// aten::rk  c              3  V   #    U  H  oR                    S UR                   3v   M!     g7f) N)type_strrh   )r'  r(  s     rq   r*  3emit_single_dispatch.<locals>.go.<locals>.<genexpr>2  s%      #
.Xzzl!AFF8$.Xs   ')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;
rt  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   rL  ri   r   rh   r   r   r   r
   r	   r   r   initsexprsrK  r   r   exprr/  self_argrl   
startswithkindr    inplacer'   argumentr3  rc  r^  )rn   schema_commentrh   lambda_formalslambda_returndispatch_calleedispatch_argsparser_outputslambda_arg_exprsr  lambda_argsneed_set_requires_gradset_requires_gradr  return_stmtrh  structseq_typerefpsr  r   s                    rq   go emit_single_dispatch.<locals>.go(  s    b3445b6J6J5KLN(1N xx #
.B2qQW.X#
 
 315 .a0		"4Q"LM 1QvF0QvF		*001ii 0 6 67 "$!7!7 "
"1%% C		A.@ 	 & "."A"F"F!GqI 	 F" vv''00H AFFKK ++K88FFKKMZ%7%77  +0C%%**1 1  
 0   fF>*% ?1]O $

qQ01 2 	 	 +../I!/LMH3;3G8*BR   fF>*% ?

	!M? +ya}A>O=P Q rs   rn   r   r   rl   r   )r  rn   r  r   r  s   ` `` rq   r  r    s+     Q Q Qf a5Lrs   )rn   r   r   rN  )rh   r   r   rl   )r{   +Sequence[PythonSignatureNativeFunctionPair]r   rN  )r   rl   r   rl   r   rl   r   rl   r   rl   r   rN  r   None)r   r  r    Callable[[NativeFunction], bool]r   z?dict[BaseOperatorName, list[PythonSignatureNativeFunctionPair]])r   r#   r   r  r   r  r   
str | Noner   rl   r   rN  r   rN  r   r  )
r   r#   r   r  r   r  r   rl   r   r  )r   r#   r   r  r   r  r   r  r   rl   r   rN  r   r  r   rN  r   r  )r   zlist[NativeFunction]r   rl   r   rN  r  rN  r  rN  r   r  )
r   r  r   rl   r   rN  r  rN  r   z'list[PythonSignatureNativeFunctionPair]r  )r{   r  r   z tuple[list[str], dict[str, str]])r{   r  r   ztuple[list[str], list[str]])r{   r  r   z	list[str])rh   r   r   r  r{   r  r   rN  r   rN  r   rl   )
rh   r   r   r  r  rN  r   rN  r   rl   )rf  r   r  r   r   rN  r   rl   )rh   r   r{   r  r   rN  r   ztuple[str, ...])
rh   r   r   r  r{   r  r   rN  r   rl   )r{   r  r   rN  r   Sequence[PythonSignatureGroup])r  r  r   rN  r   r  )
r  r   rn   r   r  r   r   rN  r   rl   )_
__future__r   r-  recollectionsr   typingr   r   rP  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_BINDINGScompilerj   rm   rr   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r^  ri  r   r  r  r  r  r  r   r  r  r  r   r   r  r  r  )rp   s   0rq   <module>r*     sF  D #  	 # *       0 1 G G   : * 9 ( 2T n 0E/DGBJJ!G9A/D 	#   *!QDF#$'''($ y3	y3y3 y3 	y3
 y3 y3 
y3x
6

*
 E
* &&6& +& 	&
 & & & 
&R$$6$ +$ 	$
 
$N6 + 	
 
R ++6+ ++ 	+
 + + + + 
+f "<*<< 	<
 < 
< 1<,l6ll 	l
 
l -ll ) ):%>0&:0& 0&f:L * 2    (4( $* )
 * B
BB ;B
 B B 	BJ 
 $. :> HL  H  	
"
'
 	

 	
P


:
 	

 
>9
99 ;9
 9 	9H OS62:62GK62#62N JNN65N6BFN6#N6z ___ (_
 _ 	_W#s    I"