o
    wi                     @  sH   d dl mZ d dlZd dlmZ 				ddddZG dd deZdS )    )annotationsN)OpRuninput
np.ndarray	cos_cache	sin_cacheposition_idsnp.ndarray | Nonereturnc                 C  s~  | j }t| j dkrt| d} | j d }| j d }	t| j dkr>| j d }
|dks,J t|
| }||	||g}t| |} t| j dksGJ | j d }|d u sT|dkrV|}| d d d d d d d |f }| d d d d d d |d f }t|d }|d ur|| }|| }n|}|}|d d d d d |f }|d d d d d |f }tj|dd}tj|d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d\}}|| ||  }|| ||  }|rtj|dd}tj|dd}tj||fdd}t||j }n	tj||fdd}tj||fdd}t|dkr7t||}|S t|d}|S )	N   )r            r   r   r   r   )axis)	shapelennp	transposeintreshape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cossinx1x2realimagx_rotate_concatoutput r.   c/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/onnx/reference/ops/op_rotary_embedding.pyrotary_embedding   sr   	



  "$r0   c                   @  s    e Zd Z				ddd	d
ZdS )RotaryEmbeddingNr   r   r   r   r   r	   r
   c              	   C  s   t |||||||dfS )N)r   r   r   r   )r0   )selfr   r   r   r   r   r   r   r.   r.   r/   _runa   s   zRotaryEmbedding._runNNNN
r   r   r   r   r   r   r   r	   r
   r   )__name__
__module____qualname__r3   r.   r.   r.   r/   r1   `   s    r1   r4   r5   )
__future__r   numpyr   onnx.reference.op_runr   r0   r1   r.   r.   r.   r/   <module>   s   U