
    ThB6              #       <   % S SK r S SKrS SKJrJr  S SKrS SKJr  \R                  " S\S9r0 r	\
\R                  R                  \4   \S'   \" 1 Sk5      rS\S	\S
\\/\4   4S jr\" SS5       S3SS S S.S\R&                  S\R&                  S\R&                  S\\R&                     S\S\S\S
\R&                  4S jjj5       rS\\   S\S
\4S jrS\R&                  S\S\S
\R&                  4S jrS\R&                  S\R&                  S \S!\S\\   S"\S
\R&                  4S# jrS \S!\S
S4S$ jrS\R&                  S\R&                  S \S!\S\\   S
\R&                  4S% jr\" S&S5         S4SS S S SS'SS(.S\R&                  S\R&                  S)\R&                  S*\\R&                     S+\\R&                     S,\\R&                     S-\S.\S/\S"\S\\   S0\S1\\   S
\\R&                  \R&                  \R&                  \R&                  4   4S2 jjj5       rg)5    N)CallableOptional)_dtype_mappings_T)boundONNX_ATEN_DECOMP_TABLE>      
         op_typeopset_versionreturnc                 4   ^ ^ S[         S[         4U U4S jjnU$ )zDDecorator to register an ONNX operator with a custom implementation.funcr   c                    > ST 3n[         R                  R                  ST SU 3SS9" U 5      nU [        [	        [	        [         R
                  R                  T5      U5      '   UR                  U 5        U$ )Nopsetzonnx::. )mutates_args)torchlibrary	custom_opr   getattropsonnxregister_fake)r   overloadtorch_opr   r   s      N/var/www/fran/franai/venv/lib/python3.13/site-packages/torch/onnx/ops/_impl.py	decorator_onnx_op.<locals>.decorator   s|    =/*==**WIQxj) + 

  	wwuyy~~w'GRS
 	t$    )r   )r   r   r!   s   `` r    _onnx_opr$      s#     r   r#   RotaryEmbedding   F)interleaved	num_headsrotary_embedding_dimx	cos_cache	sin_cacheposition_idsr'   r(   r)   c                  ^  T R                   S   nT R                   S   n[        T R                   5      S:X  aL  T R                   S   n	[        R                  " US:g  U 4S j5        X-  n
XxXZ/n[        R                  " T U5      m [        R                  " [        T R                   5      S:H  S 5        T R                   S   n
US:X  a  U
nT SS2SS2SS2SU24   nT SS2SS2SS2US24   nUS-  nUb  UU   nUU   nOUnUnUSS2SS2SU24   nUSS2SS2SU24   n[        R
                  " US5      n[        R
                  " US5      nU(       a%  USS2SS2SS2SSS24   nUSS2SS2SS2SSS24   nO[        R                  " USS	S
9u  nnUU-  UU-  -
  nUU-  UU-  -   nU(       ag  [        R
                  " US	5      n[        R
                  " US	5      n[        R                  " UU4S	S
9n[        R                  " UUR                   5      nO[        R                  " UU4S	S
9n[        R                  " X4S	S
9n[        T R                   5      S:X  a!  [        R                  " UT R                   5      nU$ )z_RotaryEmbedding-23 https://onnx.ai/onnx/operators/onnx__RotaryEmbedding.html#rotaryembedding-23r   r	         c                  "   > ST R                    3$ )NzKnum_heads must be provided for 3D inputs. Received input tensor with shape )shape)r*   s   r    <lambda>%rotary_embedding_23.<locals>.<lambda>>   s    abcbibiajkr#      c                      g)Nzx should be a 4D tensor by nowr   r   r#   r    r3   r4   C   s    ,Lr#   Ndim)r2   lenr   _checkreshape	unsqueezechunkcat)r*   r+   r,   r-   r'   r(   r)   
batch_sizesequence_lengthhidden_size	head_size	new_shapex_rotatex_not_rotaterotary_embedding_dim_halfcossinx1x2realimagx_rotate_concatoutputs   `                      r    rotary_embedding_23rP   +   s    JggajO
177|qggajNk	
  ,	)G	MM!Y'	LLQWW"$LM
I q (Aq////0HQ12334L 4 9 
 
 
	1((((C 	1((((C //QC //QC
 aAqt!tm$aAqt!tm$Xqb1B 8cBhD8cBhD  tR(tR())T4Lb9==(..A99dD\r2YY/R8F
177|qvqww/Mr#   scalerC   c                 >    U b  U $ S[         R                  " U5      -  $ )z/Get the scale factor for attention computation.g      ?)mathsqrt)rQ   rC   s     r    _get_scale_factorrU      s     %5GC$))I2F,FGr#   tensorr@   c                     U R                   S   U R                   S   pCXB-  nU R                  XX%5      R                  SS5      R                  5       $ )z1Reshape 3D tensor to 4D for multi-head attention.r	   r0   )r2   view	transpose
contiguous)rV   r@   r(   rA   rB   rC   s         r    _reshape_3d_to_4dr[      sH     $*<<?FLLO[(IJF	1a	r#   QKcurrent_q_num_headscurrent_kv_num_headsqk_matmul_output_modec           	          US:X  a  [        XX#U5      $ [        R                  " [        R                  " XR	                  SS5      5      5      $ )z1Get QK output tensor based on the specified mode.r   r7   )_compute_qk_output_for_mode_0r   
zeros_likematmulrY   )r\   r]   r^   r_   rQ   r`   s         r    _get_qk_output_for_aten_spdarf      sH     !,%U
 	

 QB0C DEEr#   c                 L   ^ ^ [         R                  " T T-  S:H  UU 4S j5        g)z-Validate Group Query Attention configuration.r   c                     > ST ST  S3$ )Nzq_num_heads (z%) must be divisible by kv_num_heads (z	) for GQAr   )r_   r^   s   r    r3   -_validate_gqa_configuration.<locals>.<lambda>   s    - 344YZnYooxyr#   N)r   r;   )r^   r_   s   ``r    _validate_gqa_configurationrj      s"     
LL22a7yr#   c                     UnX#:w  a  X#-  nUR                  USS9n[        X@R                  S   5      n[        R                  " U5      nX-  n	XX-  n
[
        R                  " XR                  SS5      5      $ )zDHelper function to compute QK output for qk_matmul_output_mode == 0.r	   r8   r/   rb   r7   )repeat_interleaverU   r2   rS   rT   r   re   rY   )r\   r]   r^   r_   rQ   K_for_qkrepeat_factorscale_factor
sqrt_scaleQ_scaledK_scaleds              r    rc   rc      sw     H2+C&&}!&<$UGGAJ7L<(J~H$H<<"4"4R"<==r#   	Attention        )	is_causalkv_num_headsq_num_headsr`   rQ   softcapsoftmax_precisionV	attn_maskpast_key
past_valueru   rv   rw   rx   ry   c                H
   Su  pn[        U R                  5      nU R                  S   n[        U R                  5      S:X  a]  [        R                  " US:g  =(       a    US:g  S 5        U R                  S   n[	        U UU5      n [	        UUU5      n[	        UUU5      n[        R                  " [        U R                  5      S:H  =(       a7    [        UR                  5      S:H  =(       a    [        UR                  5      S:H  S 5        U R                  U   n[        U
U5      n
Ub  [        R                  " XA/US	9OUR                  5       nUb  [        R                  " XR/US	9OUR                  5       nUUp!U R                  U   nUR                  U   nU R                  U   nUR                  U   nUS
:H  =(       a?    U	S:H  =(       a3    USL =(       a(    USL =(       d    UR                  [        R                  :H  n[        UU5        U(       at  SnUb#  UR                  [        R                  :X  a  U) OUn[        R                  R                  R                  U UUUS
UU
[        UU:g  5      S9n[        U UUUU
U	5      nGO]UU:w  a%  UU-  nUR                  UUS	9nUR                  UUS	9n[        R                   " UUU R                  U R"                  S9nU(       ay  [        R                  " USL S 5        [        R$                  " [        R&                  " UU[        R                  U R"                  S95      nUR)                  U) [+        S5      5      nUb@  UR                  [        R                  :X  a  UR)                  U) [+        S5      5      nOUU-   n[        XR                  S   5      n [,        R.                  " U 5      n!U U!-  n"UU!-  n#[        R0                  " U"U#R3                  SS5      5      n$U$nU$U-   n%U	S:X  a  U%nUS
:  a  U[        R4                  " U%U-  5      -  n%U	S:X  a  U%nUbu  U[6        ;   aU  U%R                  n&U%R9                  [:        R<                  U   5      n%[        R>                  " U%SS	9n'U'R9                  U&5      n'O+[        R>                  " U%SS	9n'O[        R>                  " U%SS	9n'U	S:X  a  U'n[        R0                  " U'U5      nUS:X  a1  UR3                  SS5      RA                  5       RC                  UUS5      nUUUU4$ )zMAttention-23 https://onnx.ai/onnx/operators/onnx__Attention.html#attention-23)r	   r0   r/   r   r/   c                      g)Nz;q_num_heads and kv_num_heads must be provided for 3D inputsr   r   r#   r    r3   attention_23.<locals>.<lambda>   s    Qr#   r	   r5   c                      g)Nz'Q, K, and V should be 4D tensors by nowr   r   r#   r    r3   r      s    9r#   Nr8   rt   )r{   	dropout_pru   rQ   
enable_gqa)dtypedevicec                      g)Nz'Cannot use both is_causal and attn_maskr   r   r#   r    r3   r   @  s    +Tr#   z-infrb   r7   r0   )"r:   r2   r   r;   r[   rU   r?   cloner   boolrj   nn
functionalscaled_dot_product_attentionrf   rl   zerosr   trilonesmasked_fillfloatrS   rT   re   rY   tanh-_ATTENTION_23_ALLOWED_INTERMEDIATE_PRECISIONStor   ONNX_DTYPE_TO_TORCH_DTYPEsoftmaxrZ   rX   )(r\   r]   rz   r{   r|   r}   ru   rv   rw   r`   rQ   rx   ry   num_head_dimsequence_dimhead_diminput_shape_lenr@   q_sequence_lengthq_head_sizepresent_keypresent_valuer^   r_   kv_sequence_lengthcan_use_sdpasdpa_attn_maskrO   	qk_outputrn   	attn_biascausal_maskro   rp   rq   rr   qk_matmul_outputqk_with_biasoriginal_dtype
qk_softmaxs(                                           r    attention_23r      s   & ,3(L !''lOJ 177|q12!2Q	
 GGAJa[9a\:a\:	LLAGGEc!''la/ECLA4E9 ''(#Ke[1E
  			8-\2WWY  ! 			:/|4WWY  q '',/77<0-. 	3 	A!Q&	A%	A $?)//UZZ"?	    35IJ  +4??ejj+HiZiN$$AA$#';; B 
 1 !
	 "66/3GGM##M|#DA##M|#DA KK1
	
 LLT!#T  **

%&**88	K "--{lE&MJI  %**,%119*eFmL	 &	1	 )
; YY|,
z>z> !<<(2D2DR2LM %	 ()3 A%$I S="UZZw0F%GGL A%$I ( $QQ!-!3!3+#==>OP  #]]<R@
']]>:
"]]<R@
|<J A%"I j!, ! Q"--/44ZARTVW 	 ;y88r#   )N)NNN)rS   typingr   r   r   torch.onnx.opsr   TypeVarr   r   dict_ops
OpOverload__annotations__	frozensetr   strintr$   Tensorr   rP   r   rU   r[   rf   rj   rc   tupler   r   r#   r    <module>r      s`     %  * ^^D) AC UZZ22H<= B091 -c # (B482D & 

R 
 ,0	R  !R||R||R ||R 5<<(	R R R R \\R !RjHXe_ H H H

LL
&)
69

\\
F||F||F F 	F
 E?F F \\F$47	>||>||> > 	>
 E?> \\>, 
+r
 )-'+)-F9 !"!'+F9||F9||F9 ||F9 %	F9
 u||$F9 &F9 F9 F9 F9 F9 E?F9 F9  }F9 5<<u||U\\ABF9 F9r#   