
    Χg|s                    ^   d dl m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$ d
dgZ%ddgZ&g dZ'dgZ(d7dZ)d8dZ*d9dZ+d9dZ,d:dZ-d9dZ.d;d%Z/d<d+Z0d=d0Z1d>d2Z2ed?d5            Z3ed?d6            Z4dS )@    )annotations)defaultdict)SequenceN)	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)	concatMapz'adaptive_avg_pool3d_backward.grad_inputz _slow_conv2d_backward.grad_input_cummax_helper_cummin_helper)#_assert_asyncz_assert_async.msg_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)rA   pre_grouped_native_functionsfds       _/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchgen/native_function_generation.pypre_group_native_functionsrO   h   su    
 	D !   ()9)9););<v{{}}A%%%%!&++--''    overload_name
str | Nonestrc                    | sdn|  dS )Nout_out )rQ   s    rN   &get_expected_out_variant_overload_namerX   v   s    %A55m+A+A+AArP   rH   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 )NrU   nametypedefault
annotationr[   	argumentsreturns)rJ   r   inplacer`   self_argr   r[   remove_inplacewith_overloadrX   rQ   remove_self_annotationwith_out_argsr   argumentr\   r^   ra   )rH   s    rN   self_to_out_signatureri      s    99;;*,,,,,>"...
 Y%%''552493JKK
 
 .7799GG09> #~6?J	  	
 	
    rP   c                ^   |                                  t          j        k    sJ t          |           \  }}t	          | j                            t          | j        j                            | j	        
                                                    |          t          |                    S Nr_   )rJ   r   
functionalgenerate_out_args_from_schemar   r[   re   rX   rQ   r`   rI   rg   tuplerH   new_returnsnew_out_argss      rN   functional_to_out_signaturerr      s    99;;*///// =d C CK
 Y$$2493JKK
 
 .**,,::
 
 k""   rP   #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d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 rF   )r^   is_write.0rs     rN   	<genexpr>z0generate_out_args_from_schema.<locals>.<genexpr>   sD        ?@D :Q\%:     rP   c                D    g | ]}|j                                         |S rW   r\   is_tensor_likerw   s     rN   
<listcomp>z1generate_out_args_from_schema.<locals>.<listcomp>   s+    JJJQ!&2G2G2I2IJqJJJrP   r   c                ,    | j         g n| j         j        S rF   )r^   	alias_set)as    rN   <lambda>z/generate_out_args_from_schema.<locals>.<lambda>   s    ,""!,2H rP   c                    g | ]}|v|	S rW   rW   )rx   xused_annotationss     rN   r~   z1generate_out_args_from_schema.<locals>.<listcomp>   s+       1<L3L3L3L3L3LrP   abcdefghijklmnopqrstuvwxyzc              3  Z   K   | ]&}|j         t          t          j                  k    V  'd S rF   )r\   r   r   Tensorrw   s     rN   rz   z0generate_out_args_from_schema.<locals>.<genexpr>   s3      WWQqv&-)@)@@WWWWWWrP      rU   !rZ   )r[   r\   r^   )anyra   lenr   r`   flat_allall	enumerater\   r}   r   r   parseappendr   r^   )rH   tensorlike_retsvalid_annotationsall_rets_are_tensorsrq   rp   iry   new_outnew_retr   s             @rN   rm   rm      s   
   DHL        KJ$,JJJO!#### HH    /   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!!!!$$rP   c                ^   |                                  t          j        k    sJ t          |           \  }}t	          | j                                                            t          | j        j	                            | j
                            |          t          |                    S rk   )rJ   r   mutablerm   r   r[   rd   re   rX   rQ   r`   rg   rn   ro   s      rN   mutable_to_out_signaturer      s    99;;*,,,,, !>d C CKY%%''552493JKK
 
 ...|<<k""   rP   rL   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)baserb   dunder_methodfunctional_overload)r[   rQ   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_seededrH   !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	namespacerW   )&torchgen.apir   r   rl   rH   rJ   rI   	with_namer   r   r[   r   r   r   rQ   rU   rb   ri   r   rr   AssertionErrorunambiguous_name
has_symintr   CompositeExplicitAutogradr   r   setr   r   r   r   functionr   NoCheckr   r   r   )rL   r   r   rH   kernel_namebackend_metadatar   s          rN   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	
: 	= rP   rslist[NativeFunction]indices6dict[DispatchKey, dict[OperatorName, BackendMetadata]]Nonec                   t          |           }|                                D ]g}t          j        |v }t          j        |v }t          j        |v }t          j        |v }|s|s|s|r#t          d |                                D                       }t          d |                                D                       }	t          d |                                D                       }
|s|	s|
r|rt          |                                          dk    rft          |t          j                 j        j                  t          vr4t          dt          |t          j                 j                             Y|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        ||           |                     |           id S )
Nc              3  $   K   | ]}|j         V  d S rF   )r   rx   rL   s     rN   rz   z1add_generated_native_functions.<locals>.<genexpr>  s%      FFaQ1FFFFFFrP   c              3  h   K   | ]-}|j         o!t          |j        j        j                  d k    V  .dS )set_N)
is_view_oprS   rH   r[   r   s     rN   rz   z1add_generated_native_functions.<locals>.<genexpr>  sN        EF@QV[%5!6!6&!@     rP   c              3  $   K   | ]}|j         V  d S rF   )r   r   s     rN   rz   z1add_generated_native_functions.<locals>.<genexpr>  s6       ) )=>8) ) ) ) ) )rP   r   zEFound an out= operator that we could not find any other variants of: c              3  H   K   | ]}|j                                         V  d S rF   r|   rw   s     rN   rz   z1add_generated_native_functions.<locals>.<genexpr>  sI       M M,-%%''M M M M M MrP   c              3  8   K   | ]}d t          |          v V  dS )rU   N)rS   )rx   op_names     rN   rz   z1add_generated_native_functions.<locals>.<genexpr>  s-      QQgES\\1QQQQQQrP   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.)rO   valuesr   rl   rb   r   rU   r   r   r   rS   rH   r[   &OUT_OPS_THAT_DONT_GET_GROUPED_PROPERLYr   *INPLACE_OPS_THAT_DONT_GET_GROUPED_PROPERLYrJ   ra   r   *MUTABLE_OPS_THAT_CANNOT_GET_AN_OUT_VARIANT-FUNCTIONAL_OPS_THAT_CANNOT_GET_AN_OUT_VARIANTr   r   
grow_indexr   )r   r   rK   rM   has_functionalhas_inplacehas_mutablehas_out
are_manualhas_view_opsare_composite_implicitbase_fnbase_fn_valid	needs_outgets_out_variantfnmetadatas                    rN   add_generated_native_functionsr   {  s    $>b#A#A )0022 p p#.!3 (A- (A-.A%  d	+ d	 d	N d	FF188::FFFFFJ   JK((**    L &) ) )BC((**) ) ) & &"  \ -C  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+-*'(':::		"ap prP   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     rN   
return_strr     s    t99E

""""
4yyA~~r	Ta$q$$$$X066??AAXXDIIeDTDTXXXXrP   out_varc                    |                                  }g }t          | j                  dk    }t          |          D ]'\  }}| |                    |r	d| d| dn|           (|S )Nr   	std::get<>())aliased_return_namesr   ra   r   r   )rH   r   aliased_retsnon_aliased_namesis_out_var_a_tupler   ry   s          rN   gather_nonaliased_inner_retsr    s    ,,..LT\**Q.,''  19$$/AN+A++++++w   rP   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 rW   r  rx   es     rN   r~   z3gen_composite_functional_kernel.<locals>.<listcomp>:  s    RRR!qvRRRrP   outputr   z = r   
r   r[   z {
  
  z
at::_ops::::call();
  
}
)rl   r   rb   r   r   rS   rH   r   zipr   jit_argumentsr^   rv   r   r[   r	   argument_typerh   r   r   r`   r   ra   r  r   defnrU   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                  rN   gen_composite_functional_kernelr+    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  	   rP   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 rW   r  r  s     rN   r~   z,gen_composite_out_kernel.<locals>.<listcomp>]  s    LLLALLLrP   
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  )rU   r   r   rH   rl   r   r   r`   r   r   ra   r   r[   r  r  r   r   r   )r	  r  r  r%  	copy_outsr&  r   out_argfunctional_return_namer   ret_namecopy_outs_strs               rN   gen_composite_out_kernelr4  O  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 $''	   rP   )rA   rB   rC   rD   )rQ   rR   rC   rS   )rH   r   rC   r   )rH   r   rC   rs   )rL   r   r   r   rC   r   )r   r   r   r   rC   r   )r   r   r   r   rC   rS   )rH   r   r   rS   rC   r   )r	  r   rC   rR   )5
__future__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   r   r   r   r   rO   rX   ri   rr   rm   r   r   r   r   r  r+  r4  rW   rP   rN   <module>r?     s   " " " " " " # # # # # #       , , , , , , , , , , , , , , , A A A A A A A A A A 1 1 1 1 1 1                                     & % $ $ $ $ $ . '* & 	. *$1 $1 $1 -X . *
( 
( 
( 
(B B B B   B   *-% -% -% -%j   Fc c c c\x x x xvY Y Y Y	 	 	 	 9 9 9 9| 6 6 6 6 6 6rP   