
    YhEt                    v   d dl mZ d dlZd dlmZ d dlmZ d dlmc m	Z	 d dl
mZ d dlmZ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mZm Z m!Z!m"Z"m#Z# d d	l$m%Z% erd d
l&m'Z' ddgZ(ddgZ)g dZ*dgZ+d8dZ,d9dZ-d:dZ.d:dZ/d;dZ0d:d Z1d<d&Z2d=d,Z3d>d1Z4d?d3Z5ed@d6            Z6ed@d7            Z7dS )A    )annotationsN)defaultdict)TYPE_CHECKING)	translate)BindingDispatcherSignatureExpr)with_native_function)
AnnotationArgumentBackendIndexBackendMetadataBaseOperatorNameBaseTyBaseTypeDEFAULT_KERNEL_NAMESPACEDeviceCheckTypeDispatchKeyFunctionSchemaNativeFunctionNativeFunctionsGroupOperatorNameReturn
SchemaKindVariant)	concatMap)Sequencez'adaptive_avg_pool3d_backward.grad_inputz _slow_conv2d_backward.grad_input_cummax_helper_cummin_helper)$_assert_asyncz_assert_async.msg_assert_tensor_metadata_cslt_sparse_mm_search_assert_scalar_dimI_dimV_has_same_storage_numel_linalg_check_errors_local_scalar_dense%_nested_tensor_from_mask_left_aligned_nnz_use_cudnn_ctc_lossz_use_cudnn_ctc_loss.Tensor#_validate_compressed_sparse_indicesallclose	dense_dimequalis_coalesced	is_pinnedis_same_size	is_set_toq_per_channel_axisq_scaleq_zero_pointqschemerecord_stream
sparse_dimsym_constrain_rangesym_constrain_range_for_size_nested_tensor_storage_offsets'_chunk_grad_outputs_efficient_attention_fused_sdp_choice_print_sink_tokens_nested_get_ragged_idx
polygamma_native_functionsSequence[NativeFunction]return6dict[FunctionSchema, dict[SchemaKind, NativeFunction]]c                    t          t                    }| D ]Z}||j                                                 }|j                                        |vsJ |||j                                        <   [|S N)r   dictfunc	signaturekind)rC   pre_grouped_native_functionsfds       u/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torchgen/native_function_generation.pypre_group_native_functionsrQ   n   su    
 	D !   ()9)9););<v{{}}A%%%%!&++--''    overload_name
str | Nonestrc                    | sdn|  dS )Nout_out )rS   s    rP   &get_expected_out_variant_overload_namerZ   |   s    %A55m+A+A+AArR   rJ   r   c                   |                                  t          j        k    sJ | j        j        J t          | j                                                            t          | j        j
                            | j                                                            t          d| j        j        j        j        d | j        j        j        j                  g          | j                  S )NrW   nametypedefault
annotationr]   	argumentsreturns)rL   r   inplacerb   self_argr   r]   remove_inplacewith_overloadrZ   rS   remove_self_annotationwith_out_argsr   argumentr^   r`   rc   )rJ   s    rP   self_to_out_signaturerk      s    99;;*,,,,,>"...
 Y%%''552493JKK
 
 .7799GG09> #~6?J	  	
 	
    rR   c                ^   |                                  t          j        k    sJ t          |           \  }}t	          | j                            t          | j        j                            | j	        
                                                    |          t          |                    S Nra   )rL   r   
functionalgenerate_out_args_from_schemar   r]   rg   rZ   rS   rb   rK   ri   tuplerJ   new_returnsnew_out_argss      rP   functional_to_out_signaturert      s    99;;*///// =d C CK
 Y$$2493JKK
 
 .**,,::
 
 k""   rR   #tuple[list[Return], list[Argument]]c           
       
 t          d | j        D                       rJ d | j        D             }t          |          dk    sJ t          d | j        j                  

fdt          j        D             }t          d | j        D                       }g }g }t          | j                  D ]\  }}|j
                                        rt          t          | j                  dk    rdnd| |j
        d t          j        ||          d	          
          }|                    |           |r1t!          d |j
        |j                  }	|                    |	           |                    |           ||fS )Nc              3  @   K   | ]}|j         d uo|j         j        V  d S rH   )r`   is_write.0rs     rP   	<genexpr>z0generate_out_args_from_schema.<locals>.<genexpr>   sD        ?@D :Q\%:     rR   c                D    g | ]}|j                                         |S rY   r^   is_tensor_likery   s     rP   
<listcomp>z1generate_out_args_from_schema.<locals>.<listcomp>   s+    JJJQ!&2G2G2I2IJqJJJrR   r   c                ,    | j         g n| j         j        S rH   )r`   	alias_set)as    rP   <lambda>z/generate_out_args_from_schema.<locals>.<lambda>   s    ,""!,2H rR   c                    g | ]}|v|	S rY   rY   )rz   xused_annotationss     rP   r   z1generate_out_args_from_schema.<locals>.<listcomp>   s$    XXXqaGW>W>W>W>W>WrR   c              3  Z   K   | ]&}|j         t          t          j                  k    V  'd S rH   )r^   r   r   Tensorry   s     rP   r|   z0generate_out_args_from_schema.<locals>.<genexpr>   s3      WWQqv&-)@)@@WWWWWWrR      rW   !r\   )r]   r^   r`   )anyrc   lenr   rb   flat_allstringascii_lowercaseall	enumerater^   r   r   r   parseappendr   r`   )rJ   tensorlike_retsvalid_annotationsall_rets_are_tensorsrs   rr   ir{   new_outnew_retr   s             @rP   ro   ro      s   
   DHL        KJ$,JJJO!#### HH  YXXXF$:XXXWW$,WWWWW#%L !#K$,'' " "16  "" 	"!$,//144UU)))V%+/@/C,F,F,FGG	  G (((# , !GLW=O   ""7+++q!!!!$$rR   c                ^   |                                  t          j        k    sJ t          |           \  }}t	          | j                                                            t          | j        j	                            | j
                            |          t          |                    S rm   )rL   r   mutablero   r   r]   rf   rg   rZ   rS   rb   ri   rp   rq   s      rP   mutable_to_out_signaturer      s    99;;*,,,,, !>d C CKY%%''552493JKK
 
 ...|<<k""   rR   rN   r   kr   Mtuple[NativeFunction, dict[DispatchKey, dict[OperatorName, BackendMetadata]]]c                   ddl m} |t          j        k    r| j                                        t          j        k    sJ | j                            d                              t          t          | j        j
        j
        j        d| j        j
        j
        j        | j                                        t          j        k              | j        j
        j                            }n|t          j        k    r| j                                        t          j        k    rt#          | j                  }n| j                                        t          j        k    rt%          | j                  }nZ| j                                        t          j        k    rt'          | j                  }nt)          d          t)          d	          |                                t          j        k    r|j
                                        n|
                    |          }| j                                        r|d
z  }t.          j        |j
        t3          |dt4                    ii}dht7          | j        h dz            z  }t;          d&i d|d| j        dt>          j         hdddd dd dd dg di dddddd dd dddtB          j"        d| j#        dt7                      d| j$        d dd!dd"dd#dd$|d%| j%        |fS )'Nr   )cppT)keep_return_namesF)baserd   dunder_methodfunctional_overload)r]   rS   z^We only bother generating out= functions from either inplace or mutable or functional variantszDWe currently only generate either functional or out= NativeFunctions_symint)kernel
structuredcpp_namespace	generated>   	view_copypt2_compliant_tagnondeterministic_seededrJ   !use_const_ref_for_mutable_tensorsvariantsr   structured_delegatestructured_inheritsprecomputedautogenufunc_inner_loopmanual_kernel_registrationmanual_cpp_bindingpython_modulecategory_overridedevice_guarddevice_checkloccpp_no_default_argsis_abstract&has_composite_implicit_autograd_kernel4has_composite_implicit_autograd_nested_tensor_kernel&has_composite_explicit_autograd_kernel5has_composite_explicit_autograd_non_functional_kerneltags	namespacerY   )&torchgen.apir   r   rn   rJ   rL   rK   	with_namer   r   r]   r   r   r   rS   rW   rd   rk   r   rt   AssertionErrorunambiguous_name
has_symintr   CompositeExplicitAutogradr   r   setr   r   r   r   functionr   NoCheckr   r   r   )rN   r   r   rJ   kernel_namebackend_metadatar   s          rP   generate_functionr     s    !     J!!!v{{}}
 55555 v$77AA%).!"#&+"2"@()9K(K    fk7	 	 	
 
 
jn		 6;;==J...(00DDV[[]]j000+AF33DDV[[]]j333.qv66DD p   R
 
 	
 99;;*.(( 		""$$$XXd^^ 
 	v !y -I" 6  0
 =3	NNNN  D
 	 	
 	
 	
	
./.Q.Q	
 &''		

 u	
 !%	
 !%	
 	
 B	
  R	
 (-u	
  %u	
 $	
 #d	
 	
  )00!	
" #	
$ !$%	
& '	
( 495)	
* BG+	
, 484-	
. CH%/	
4 5	
6 kk7	
: 	= rR   rslist[NativeFunction]indices6dict[DispatchKey, dict[OperatorName, BackendMetadata]]Nonec                x   t          |           }|                                D ]}t          j        |v }t          j        |v }t          j        |v }t          j        |v }t          d |                                D                       }|s|s|s|r%t          d |                                D                       }	t          d |                                D                       }
t          d |                                D                       }|	s|
s|r|s|rt          |                                          dk    rft          |t          j                 j        j                  t          vr4t          dt          |t          j                 j                             |r2t          |t          j                 j        j                  t          v r|r|t          j                 n9|r|t          j                 n%|r|t          j                 n|t          j                 }|j                                        t          j        k    p"t          d |j        j        D                       }t          d |j        D                       }| o|o|}|sg|set          |j        j                  t&          vrEt          |j        j                  t(          vr%t          d	t          |j                   d
          |rVt+          |t          j                  \  }}||t          j        <   t-          j        ||           |                     |           |sZ|s|rVt+          |t          j                  \  }}||t          j        <   t-          j        ||           |                     |           d S )Nc              3  (   K   | ]}d |j         v V  dS )coreN)r   )rz   variants     rP   r|   z1add_generated_native_functions.<locals>.<genexpr>  s)      GGf,GGGGGGrR   c              3  $   K   | ]}|j         V  d S rH   )r   rz   rN   s     rP   r|   z1add_generated_native_functions.<locals>.<genexpr>  s%      FFaQ1FFFFFFrR   c              3  h   K   | ]-}|j         o!t          |j        j        j                  d k    V  .dS )set_N)
is_view_oprU   rJ   r]   r   s     rP   r|   z1add_generated_native_functions.<locals>.<genexpr>  sN        EF@QV[%5!6!6&!@     rR   c              3  $   K   | ]}|j         V  d S rH   )r   r   s     rP   r|   z1add_generated_native_functions.<locals>.<genexpr>  s6       ) )=>8) ) ) ) ) )rR   r   zEFound an out= operator that we could not find any other variants of: c              3  H   K   | ]}|j                                         V  d S rH   r~   ry   s     rP   r|   z1add_generated_native_functions.<locals>.<genexpr>  sI       M M,-%%''M M M M M MrR   c              3  8   K   | ]}d t          |          v V  dS )rW   N)rU   )rz   op_names     rP   r|   z1add_generated_native_functions.<locals>.<genexpr>  s-      QQgES\\1QQQQQQrR   zBFound an operator that we could not generate an out= variant for: z.
This type of operators don't have tensor-like return, making it difficult to generate a proper out= variant. If
out= variant is not needed, please add the function name into FUNCTIONAL_OPS_THAT_CANNOT_GET_AN_OUT_VARIANT list.)rQ   valuesr   rn   rd   r   rW   r   r   r   rU   rJ   r]   &OUT_OPS_THAT_DONT_GET_GROUPED_PROPERLYr   *INPLACE_OPS_THAT_DONT_GET_GROUPED_PROPERLYrL   rc   r   *MUTABLE_OPS_THAT_CANNOT_GET_AN_OUT_VARIANT-FUNCTIONAL_OPS_THAT_CANNOT_GET_AN_OUT_VARIANTr   r   
grow_indexr   )r   r   rM   rO   has_functionalhas_inplacehas_mutablehas_outis_core
are_manualhas_view_opsare_composite_implicitbase_fnbase_fn_valid	needs_outgets_out_variantfnmetadatas                     rP   add_generated_native_functionsr     s0    $>b#A#A )0022 q q#.!3 (A- (A-.A%GGAHHJJGGGGG  d	+ d	 d	N d	FF188::FFFFFJ   JK((**    L &) ) )BC((**) ) ) & &"  \ -C G  3qxxzz??a// *.).344AB B )}`cdefpftdudz`{`{}}   
 *,-2788=> >  .*$%% .Qz)** .Qz~&&z,- " $L--//:3EE  M M181EM M M J JM QQQQQQQI#*{J}J = )**EF FGL-..HI I )u_bcjco_p_p u u u     0*.IIH$&*.!':::		"
 " w 2B 0*:OPPH+-*'(':::		"cq qrR   retstuple[Return, ...]names	list[str]c                .   t          |           t          |          k    sJ t          |           dk    rdS t          |           dk    rd|d          dS dt          j        |                                            dd                    |           dS )	Nr    r   zreturn ;(, );)r   
dispatcherreturns_typecpp_typejoin)r   r   s     rP   
return_strr    s    t99E

""""
4yyA~~r	Ta$q$$$$X066??AAXXDIIeDTDTXXXXrR   out_varc                    |                                  }g }t          | j                  dk    }t          |          D ]'\  }}| |                    |r	d| d| dn|           (|S )Nr   	std::get<>())aliased_return_namesr   rc   r   r   )rJ   r  aliased_retsnon_aliased_namesis_out_var_a_tupler   r{   s          rP   gather_nonaliased_inner_retsr    s    ,,..LT\**Q.,''  19$$/AN+A++++++w   rR   gr   c                   d| j         j        vrd S | j        d| j        j        vr| j        }nC| j        d| j        j        vr| j        }n&t	          t          | j         j                            t          | j         j                  }t          |j                  }g }g }g }t          t          j
        | j         j                  t          j
        |j                            D ]\  }}|j        |j        j        r|                    d|j         d|j         d           |                    t          |j         dt          j        ||j                                       |                    |j         d           |                    t          j        |                     d                    d	 t'          ||                                          D                       }	d
}
t+          |j        j                  dk    rd|
 dnd}t/          |j        |
          }t1          | j         j        j        ||z             }d                    |          }d|                    |                                | j        j                                        rdndz              d| d| d|j        j                                         d|	 d| dS )Nr   zauto z_clone = clone_arg(r   _clone)binds)exprr^   r   c                    g | ]	}|j         
S rY   r  rz   es     rP   r   z3gen_composite_functional_kernel.<locals>.<listcomp>?  s    RRR!qvRRRrR   outputr   z = r   
r   r]   z {
  
  z
at::_ops::::call();
  
}
)rn   r   rd   r   r   rU   rJ   r   zipr  jit_argumentsr`   rx   r   r]   r	   argument_typerj   r  r   rb   r   rc   r  r  defnrW   r   r   )r  target_fsig
target_sigcontextclone_mutable_inputscloned_return_namesa_curra_tgtexprsout_namemaybe_assigninner_return_namesret_strclone_mutable_inputs_strs                  rP   gen_composite_functional_kernelr2    s     !,+++tyAIN!B!B9	
	;ain#D#D9 S!233444
al/
0
0C$X]33J$&G  !233 //  8 8 'E,<,E' ''GGGGGG   NN"K///#1&LLL      &&&+'='='=>>>>NN:.v667777IIRRy*:N:N:P:P'Q'QRRRSSEH,/0E,F,F,J,J(8((((PRL5hmXNN	!#58K#K G  $yy)=>>sxxzz!%**?*?*A*AIYYrJKK     $=->>@@  JO  	   rR   c                   d| j         j        vrd S t          | j         j                  }t          | j        j                  }d                    d t          |                                |                                          D                       }g }d}t          | j         j        j        j                   D ]^\  }}t          | j        j        j
                  dk    r|nd| d| d}|                    d	|j         d| d
|j         d| d	           _g }	t          | j         j                                                  D ]_\  }}
|
|	                    |
           t          | j        j        j
                  dk    r|nd| d| d}|	                    |           `d                    |          }d|                    | j         j        j                                        | j         j                                        rdndz              d| d| j        j        j                                         d| d| dt#          | j         j        j
        |	           dS )Nr   r   c                    g | ]	}|j         
S rY   r  r  s     rP   r   z,gen_composite_out_kernel.<locals>.<listcomp>b  s    LLLALLLrR   
tmp_outputr   r  r	  r
  z  resize_out_helper(z);
  copy_arg(r   r  r   r   r  z
 {
  auto z = at::_ops::r  r  r  r  )rW   r   r   rJ   rn   r  r   rb   r   r   rc   r   r]   r  r#  r   r   r  )r  r%  r&  r,  	copy_outsr-  r   out_argfunctional_return_namer   ret_namecopy_outs_strs               rP   gen_composite_out_kernelr;  T  s    !%*$$t aej
)
)C$Q\%677JIILL3==??J4H4H4J4JKKLLL E IH
 4 899 

 


7 1<$,--22 H-Q--(--- 	
 	9\9 9%;9 9L9 929 9 9	
 	
 	
 	
 D !!@!@!B!BCC 	0 	08KK!!!! q|(011Q66 111h111 #
 KK.////IIi((Mquz//11!%*BWBWBYBY5aYY_abcc   |05FFHH QV    aej $''	   rR   )rC   rD   rE   rF   )rS   rT   rE   rU   )rJ   r   rE   r   )rJ   r   rE   ru   )rN   r   r   r   rE   r   )r   r   r   r   rE   r   )r   r   r   r   rE   rU   )rJ   r   r  rU   rE   r   )r  r   rE   rT   )8
__future__r   r   collectionsr   typingr   torchgen.api.dispatcherapir  torchgen.api.translater   torchgen.api.typesr   r   r	   torchgen.contextr
   torchgen.modelr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   torchgen.utilsr   collections.abcr   r   r   r   r   rQ   rZ   rk   rt   ro   r   r   r   r  r  r2  r;  rY   rR   rP   <module>rG     s   " " " " " "  # # # # # #             , , , , , , , , , , , , , , , A A A A A A A A A A 1 1 1 1 1 1                                     & % $ $ $ $ $  )(((((( . '* & 	. *%1 %1 %1 -Z . *
( 
( 
( 
(B B B B   B   *+% +% +% +%f   Fc c c c\y y y yxY Y Y Y	 	 	 	 9 9 9 9| 6 6 6 6 6 6rR   