
    /j                    T    d dl mZ d dlZd dlmZ 	 	 	 	 dddZ G d de          ZdS )    )annotationsN)OpRuninput
np.ndarray	cos_cache	sin_cacheposition_idsnp.ndarray | Nonereturnc                   | j         }t          | j                   dk    rt          j        | d          } | j         d         }| j         d         }	t          | j                   dk    rB| j         d         }
|dk    sJ t	          |
|z            }||	||g}t          j        | |          } t          | j                   dk    sJ | j         d         }||dk    r|}| d d d d d d d |f         }| d d d d d d |d f         }t	          |dz            }|||         }||         }|j         d         |k    r!t          d|j         d          d	| d
          |j         d         |k    r!t          d|j         d          d	| d
          t          j        |d          }t          j        |d          }|r+|d d d d d d dd df         }|d d d d d d dd df         }nt          j        |dd          \  }}||z  ||z  z
  }||z  ||z  z   }|r_t          j        |d          }t          j        |d          }t          j	        ||fd          }t          j        ||j                   }nt          j	        ||fd          }t          j	        ||fd          }t          |          dk    rt          j        ||          }nt          j        |d          }|S )N   )r            r   r   r   r   zLast dimension of cos cache (z)) does not match rotary_embedding_dim/2 (z).zLast dimension of sin cache ()axis)
shapelennp	transposeintreshape
ValueErrorexpand_dimssplitconcatenate)r   r   r   r	   interleavedrotary_embedding_dim	num_headsoriginal_input_shape
batch_sizesequence_lengthhidden_size	head_size	new_shapex_rotatex_not_rotaterotary_embedding_dim_halfx1x2realimagx_rotate_concatoutputs                         k/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/onnx/reference/ops/op_rotary_embedding.pyrotary_embeddingr0      s    !;
5;1UL11QJk!nO
5;1k!nA~~~~i/00	)YG	
5),,u{q    AI #';q'@'@(QQQ11133334HAAAqqq"6"7"778L #$81$< = = 
	 
	
 r777 HIOB,?  H  H  kD  H  H  H
 
 	
 r777 HIOB,?  H  H  kD  H  H  H
 
 	
   I   I
  0aaaAAAqt!tm$aaaAAAqt!tm$(AB///B Ny2~.DNy2~.D  9 ~d,,,~d,,,.$B???:ox~>>>4,R888^X|42>>>F
  A%%F$899fl33M    c                       e Zd Z	 	 	 	 d
dd	ZdS )RotaryEmbeddingNr   r   r   r   r	   r
   r   c           	     0    t          |||||||          fS )N)r	   r   r   r   )r0   )selfr   r   r   r	   r   r   r   s           r/   _runzRotaryEmbedding._runc   s5     )'%9#  

 
	
r1   NNNN
r   r   r   r   r   r   r	   r
   r   r   )__name__
__module____qualname__r6    r1   r/   r3   r3   b   s;         +/!
 
 
 
 
 
 
r1   r3   r7   r8   )
__future__r   numpyr   onnx.reference.op_runr   r0   r3   r<   r1   r/   <module>r@      s    # " " " " "     ' ' ' ' ' ' '+T T T T Tn
 
 
 
 
e 
 
 
 
 
r1   